本主题将向您展示如何创建总线信号并将其连接到S函数构建器。最后,您将使用S函数构建器构建一个简单的C MEX S函数。
S-function Builder是一个Simulin万博1manbetxk®块集成C / C ++代码以构建来自您提供的规范和C代码的S函数。S函数Builder还用作使用S函数的模型中生成的S函数的包装器。要了解更多关于S函数建设者,请参阅使用S函数构建器自动构建S函数。要查看有关如何使用S-Function Builder,类型的更多示例sfundemos.
在matlab.®命令窗口,然后导航到C文件S函数>S函数建设者。
通过将当前文件夹设置为要创建S函数的文件夹来开始构建S函数。然后,将此文件夹添加到MATLAB路径。
MKDIR.新闻纽伦AddPath(FullFile(PWD,'newsfun'))CD('newsfun')
如果要将总线信号连接到S函数构建器的输入或输出端口,则必须首先创建总线对象。您可以使用Simulink总线编辑器交互式地创建总线对象(参见万博1manbetx创建和指定simulink.bus对象万博1manbetx)。或者,您可以使用万博1manbetxsimulink.bus.
:
在MATLAB命令窗口中,输入:
a = 万博1manbetxsimulink.bus.
结果,标题文件
对于公共汽车默认为空字符向量:
a = 万博1manbetxsimulink.bus描述:''headerfile:''元素:[0x1 double]
如果要指定总线的标题文件,则在MATLAB命令窗口中输入以下内容:
A.HeaderFile ='Busdef.。H'
如果未指定标题文件,Simulink会自动生成万博1manbetxsfunctionname.
_衬套
有关如何使用S-Function Builder与总线的演示,请在MATLAB命令窗口中输入以下命令:
open_system(fullfile(matlabroot,'/ toolbox万博1manbetx / simulink / simdemos / simfeatures / sfbuilder_bususage')))
创建一个新的Simulin万博1manbetxk模型。单击画布和键入s函数构建器以创建一个实例S函数建设者堵塞。或者,从中拖动S函数生成器块用户定义的函数库中的库浏览器进入新模型。
单击Canvas和Type S函数构建器或复制来自的S函数生成器块的实例用户定义的函数图书馆进入新模型。
双击打开S-Function Builder编辑器。
使用S-Function Builder对话框上的规范和代码条目窗格进入将生成的S-Function定制到应用程序所需的信息和自定义源代码。
检查总线信号是否在指定的上限和较低饱和度限制之间。为此,创建两个输入和两个输出端口,并根据下表分配端口:
填补outputs_wrapper.
使用代码的逻辑。请参阅示例代码:
void sfbuilder_bus_outputs_wrapper(const sfb_counterbus * u0,const int32_t * u1,const sfb_counterbus * y0,int32_t * y1){/ * output_begin * / int32_t限制;Boolean_t Inputpgelower;/ *限制是SFB_SignalBus的总和.Input和第二输入(U1)* / limit = U0-> InputSignal.Input + * U1;/ *检查sfb_signalbus.limit是否> = limitbus.lower_saturation_limit * / inputgelower =(限制> = u0-> limits.lower_saturation_limit);if((u0-> limits.upper_saturation_limit> = limit)&& inputpgelower){* y1 =限制;}否则{if(inputgelower){limit = u0-> limits.upper_saturation_limit;} else {limit = u0-> limits.lower_saturation_limit;} * y1 =限制;} y0-> inputsignal.input = * y1;y0-> limits = u0->限制; /* Output_END */ } |
单击箭头下建造
并选择生成TLC包装器为您的S-函数创建包装器以进行代码生成。
点击建造在S函数生成器上启动构建过程。
S函数构建器构建一个MEX文件,它实现指定的S函数,并在当前文件夹中保存文件(参见S函数构建器如何构建S函数)。
保存包含S函数构建器块的模型。
S函数构建器通过在当前文件夹中生成以下源文件来构建S-Function:
sfun.c.
- 此文件包含生成的S函数的标准部分的C源代码表示。
sfun_wrapper.c.
- 此文件包含您在S函数生成器对话框中输入的自定义代码。
sfun.tlc.
- 此文件允许生成的S函数在Simulink中运行万博1manbetx快速加速器
模式并允许在代码生成期间内向S函数。此外,此文件为S-函数生成代码加速器
模式允许模型更快地运行。
sfun_bus.h.
- 如果您指定任何输入端口
或者输出端口
作为公共汽车端口和参数表,但未指定标题文件,然后S函数构建器会自动生成此标题文件。
生成S函数源代码后,S函数构建器使用梅克斯
命令从生成的源代码和您指定的任何外部自定义源代码和库构建S-函数的MEX文件表示。
要在另一个模型中使用生成的S函数,请先检查以确保包含生成的S函数的文件夹位于MATLAB路径上。然后,从用于将S函数创建到目标模型的模型中复制S函数构建器块。如有必要,将目标模型的参数设置为目标模型所需的值。
或者,您可以在不使用S-Function Builder块或暴露底层C源文件的情况下部署生成的S函数。
打开将包含S函数的万博1manbetxSimulink模型。
单击画布以创建S函数块的实例,或从中复制S函数块用户定义的函数库中的库浏览器进入模型。
双击S函数块。
在打开的“块参数”对话框中,S函数名称编辑字段,输入S函数构建器生成的可执行文件的名称。
输入S-函数的任何参数S函数参数编辑字段。按顺序输入参数,其中它们显示在S函数生成器对话框中。
点击好的在S函数块参数对话框中。
通过从生成的S函数创建块,您还可以为您的屏蔽创建一个掩码S函数堵塞。要了解如何为您的函数添加掩码,请参阅创建块面具。要查看在S函数中添加块掩码的示例,请在MATLAB命令窗口中输入以下命令。
open_system(fullfile(matlabroot,'/ toolbox万博1manbetx / simulink / simdemos / simfeatures / sfcndemo_matadd'));
只要可执行文件位于MATLAB路径上,您就可以使用任何模型中的任何S函数块中的生成的可执行文件。