欢迎来到天天文库
浏览记录
ID:48000704
大小:312.72 KB
页数:20页
时间:2020-01-11
《基于C-MEX的S-Function编写指导书.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于C-MEX的S-Function编写指导书1、概述本文档用来介绍基于c语言的S-Function编写指导说明,并通过一个C-MEXS-Function的范例来演示如何一步步的建立自己的S-function。2、S-function介绍2.1S-function能做什么S-function(SystemFunction)为扩展Simulink的性能提供了一个强大的工具。S-function的典型应用包括:1.向Simulink增加一些新的通用模块,比如自定义的PLL模块、SVPWM发波模块、坐标变换模块等;2.增加作为硬件设备驱动程序的模块(
2、应用于半实物仿真中);3.将已有的C代码应用到仿真中(我司仿真模型主要使用此功能);4.使用一组数学方程式来对系统进行描述,比如自定义双馈电机模型、自定义三相异步电机模型等;5.使用可视化动作(参见MATLAB范例中的倒立摆模型,penddemo)2.2S-function的工作原理要创建S-function,首先必须了解S-function是如何工作的。要了解S-function如何工作,则需要了解Simulink是如何进行模型仿真的,那么又需要了解Simulink模块的数学公式。因此,本节首先从一个模块的输入、状态和输出之间的数学关系开始介
3、绍。2.2.1Simulink模块的数学模型一个Simulink模块的数学模型,包含一组输入、一组状态和一组输出。其中输出是采样时间、模块状态和模块输入的函数。图1Simulink模块的数学模型下面的方程式表述了Simulink模块输入、状态和输出之间的数学关系:2.2.2Simulink仿真的执行步骤Simulink模型的执行分几个阶段进行。首先进行的是初始化阶段,在此阶段,Simulink将library模块合并到模型中来,确定信号宽度、数据类型和采样时间,计算模块参数,确定模块的执行顺序,以及分配内存。然后,Simulink进入到“仿真循
4、环”,每次循环可认为是一个“仿真步”。在每个仿真步期间,Simulink按照初始化阶段确定的模块执行顺序依次执行模型中的每个块。对于每个块而言,Simulink调用函数来计算模块在当前采样时间下的状态,导数和输出。如此反复,一直持续到仿真结束。下图所示为Simulink仿真运行的执行步骤:图1Simulink仿真执行的步骤2.2.3S-function模块的回调程序一个S-function包含了一组S-function回调程序,用以执行在每个仿真阶段所必需的任务。在模型仿真运行的不同阶段,S-function模块调用对应的回调程序。通过S-fu
5、nction的回调程序来执行的任务包括:初始化:在“仿真循环”之前,Simulink引擎对S-function进行初始化,包括:初始化SimStruct,这是一个仿真数据结构,包含了关于S-function的信息设置输入和输出端口的数量和宽度设置S-function模块的采样时间分配存贮区间计算下步采样点——如果你创建了一个变步长模块,那么在这里计算下一步的采样点,即计算下一个仿真步长计算主步长的输出——在该调用完成后,模块的所有输出端口对于当前仿真步长有效按主步长更新离散状态——在这个调用中,所有的模块应该执行“每步一次”的动作,如为下一个仿
6、真循环更新离散状态计算积分——这适用于连续状态和/或非采样过零的状态。如果S-function中具有连续状态,Simulink在积分微步中调用S-function的输出和导数部分。这也是Sinmulink可以计算S-function状态的原因。如果S-function(仅对于CMEX)具有非采样过零的状态,Simulink在积分微步中调用S-function的输出和过零部分,这样可以检测到过零点。2.2.4Sinulink如何与S-Function相互作用了解Simulink如何与S-Function相互作用对于编写CMEX文件的S-Funct
7、ion是十分有帮助的。下面从两个层面来介绍这种相互作用:进程层面,比如在仿真的哪一时刻,Simulink调用S-Function;数据层面,比如在仿真的过程中,Simulink与S-Function如何交换信息。进程层面:下图所示为Simulink调用S-function回调函数的顺序。实线框部分表示在模型初始化和/或每个仿真步长内需使用的回调函数;虚线框部分表示在初始化阶段和/或在仿真循环的一些或所有采样步长内使用的回调函数。数据层面:S-function模块具有输入和输出信号、参数、以及内部状态,再外加其它一般的工作域。在一般情况下,对于模
8、块输入和输出信号的读写是通过一个模块I/O向量来实现的。模块输入信号也可来源于:通过根输入端口块而来的外部输入如果输入信号未连接或者接地,作为接地输入
此文档下载收益归作者所有