Simulink之S-function函数笔记之二
2017-08-07 11:07
239 查看
本文章用来做simulink的S-function函数的学习笔记:
自动生成s-function:s-function builder根据要求和c语言代码来构建一个s-function块。
新建simulink模型,从library browser中拖拽出s-function builder块
双击s-function builder,打开其对话框。
对话框中可以设置s-function名字、参数、库等。先在命令行中输入mex -setup配置,再点击build按键开始创建。创建过程中,生成三个文件:mysfun.c, mysfun_wrapper.c, mysfun .tlc。其中mysfun.c包含所生成的s-function标准部分的源代码,mysfun_wrapper.c包含了在对话框中输入的客户代码,mysfun.tlc允许simulink在加速模式下运行所生成的s-function,并允许RTW包含由该s-function生成的代码。
simulink 如何与C S-function 相互作用
从两个层面来介绍这种相互作用,进程层面(在仿真的哪一时刻simulink调用s-function)和数据层面(在仿真时simulink与s-function如何交换信息)。
进程层面:
下图为simulink调用s-function回调函数的顺序:
实线框部分表示在模型初始化或每个仿真步长内需使用的回调函数;虚线框部分表示在初始化阶段或在仿真循环的一些或所有采样步长内使用的回调函数。
数据层面:
s-function块具有输入和输出信号、参数、以及内部状态,再外加其它一般的工作域。一般对于块输入和输出信号的读写通过一个块I/O向量来,也可以来源于外部输入或接地输入。快输出可以通过根输出端口块传递到外部输出。
s-function可以通过两种渠道(指针或相邻的输入)来访问输入信号。
指针访问:
通过函数
输入数组指针能够指向内存中非相邻的单元。使用
访问相邻的输入信号:
通过使用
输入指针数组能够指向块I/O向量中的非相邻入口,特定端口的输出信号组成了一个相邻的向量。访问输入元素并将它们写入输出元素的代码:
如果有什么错误望指教。
参考:《MATLAB的S-function编写指导》。
自动生成s-function:s-function builder根据要求和c语言代码来构建一个s-function块。
新建simulink模型,从library browser中拖拽出s-function builder块
双击s-function builder,打开其对话框。
对话框中可以设置s-function名字、参数、库等。先在命令行中输入mex -setup配置,再点击build按键开始创建。创建过程中,生成三个文件:mysfun.c, mysfun_wrapper.c, mysfun .tlc。其中mysfun.c包含所生成的s-function标准部分的源代码,mysfun_wrapper.c包含了在对话框中输入的客户代码,mysfun.tlc允许simulink在加速模式下运行所生成的s-function,并允许RTW包含由该s-function生成的代码。
simulink 如何与C S-function 相互作用
从两个层面来介绍这种相互作用,进程层面(在仿真的哪一时刻simulink调用s-function)和数据层面(在仿真时simulink与s-function如何交换信息)。
进程层面:
下图为simulink调用s-function回调函数的顺序:
实线框部分表示在模型初始化或每个仿真步长内需使用的回调函数;虚线框部分表示在初始化阶段或在仿真循环的一些或所有采样步长内使用的回调函数。
数据层面:
s-function块具有输入和输出信号、参数、以及内部状态,再外加其它一般的工作域。一般对于块输入和输出信号的读写通过一个块I/O向量来,也可以来源于外部输入或接地输入。快输出可以通过根输出端口块传递到外部输出。
s-function可以通过两种渠道(指针或相邻的输入)来访问输入信号。
指针访问:
通过函数
InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S, portIndex)来访问输入信号,这是个指针数组,portIndex从0开始,每个输入端口都有一个索引号,访问该信号的一个元素使用*uPtrs[element]。
输入数组指针能够指向内存中非相邻的单元。使用
real_T *y = ssGetOutputPortSignal(S, outputPortIndex);获取输出信号。
访问相邻的输入信号:
通过使用
ssSetInputPortRequiredContiguous宏,S-function的mdlInitializeSizes函数可以指定其输入信号的元素必须占据相邻的内存区间。如果输入是相邻的,其它函数可以使用ssGetInputPortSignal来访问输入。
输入指针数组能够指向块I/O向量中的非相邻入口,特定端口的输出信号组成了一个相邻的向量。访问输入元素并将它们写入输出元素的代码:
int_T element; int_T portWidth = ssGetInputPortWidth(S, inputPortIndex); InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S, inputPortIndex); real_T *y = ssGetOutputPortSignal(S, outputPortIdx); for(element = 0; element<portWidth; element++){ y[element] = *uPtrs[element]; }
如果有什么错误望指教。
参考:《MATLAB的S-function编写指导》。
相关文章推荐
- Simulink之S-function函数笔记之三(sfuntmpl_doc.c)
- Simulink之S-function函数笔记之一
- python 3.0学习笔记之二------python基础小知识
- 【C Prime Plus】学习笔记,Chapter 10,数组和指针之二
- CAFFE源码学习笔记之二-Syncmemory
- 机器学习实战笔记之二(k-近邻算法)
- Delphi初浅入门笔记之二:Delphi文件组成
- tomcat源码研读笔记—tomcat的启动之二 StandardService的启动
- Gambit Journal 学习笔记之二
- 梦断代码阅读笔记之二
- 设计模式(c++)笔记之二(AbstractFactory抽象工厂模式)
- 组织机构DSL之二:参考资料(ruby hacking guide )的阅读笔记
- git/github学习笔记--之二
- C#学习笔记之二:事件
- 【zabbix学习笔记之二】部署zabbix-server端
- 游戏开发笔记之二——最简单的DirectX,vc窗口的编写
- C#.Net笔记其之二:ArrayList深层复制
- 【 Visual C++】游戏开发笔记之二——最简单的DirectX,vc窗口的编写
- 【Visual C++】游戏编程学习笔记之二:定时器的使用
- MFC学习笔记之二----------MFC框架程序及消息映射