主要内容

使用带有S函数构建器的总线信号来创建S函数

本主题将向您展示如何创建总线信号并将其连接到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函数建设者

  1. 通过将当前文件夹设置为要创建S函数的文件夹来开始构建S函数。然后,将此文件夹添加到MATLAB路径。

    MKDIR.新闻纽伦AddPath(FullFile(PWD,'newsfun'))CD('newsfun'

  2. 如果要将总线信号连接到S函数构建器的输入或输出端口,则必须首先创建总线对象。您可以使用Simulink总线编辑器交互式地创建总线对象(参见万博1manbetx创建和指定simulink.bus对象万博1manbetx)。或者,您可以使用万博1manbetxsimulink.bus.

    1. 在MATLAB命令窗口中,输入:

      a = 万博1manbetxsimulink.bus.

      结果,标题文件对于公共汽车默认为空字符向量:

      a = 万博1manbetxsimulink.bus描述:''headerfile:''元素:[0x1 double]
    2. 如果要指定总线的标题文件,则在MATLAB命令窗口中输入以下内容:

      A.HeaderFile ='Busdef.。H'

      如果未指定标题文件,Simulink会自动生成万博1manbetxsfunctionname._衬套

    有关如何使用S-Function Builder与总线的演示,请在MATLAB命令窗口中输入以下命令:

    open_system(fullfile(matlabroot,'/ toolbox万博1manbetx / simulink / simdemos / simfeatures / sfbuilder_bususage')))

  3. 创建一个新的Simulin万博1manbetxk模型。单击画布和键入s函数构建器以创建一个实例S函数建设者堵塞。或者,从中拖动S函数生成器块用户定义的函数库中的库浏览器进入新模型。

  4. 单击Canvas和Type S函数构建器或复制来自的S函数生成器块的实例用户定义的函数图书馆进入新模型。

  5. 双击打开S-Function Builder编辑器。

  6. 使用S-Function Builder对话框上的规范和代码条目窗格进入将生成的S-Function定制到应用程序所需的信息和自定义源代码。

  7. 检查总线信号是否在指定的上限和较低饱和度限制之间。为此,创建两个输入和两个输出端口,并根据下表分配端口:

  8. 填补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 */ }
  9. 单击箭头下建造并选择生成TLC包装器为您的S-函数创建包装器以进行代码生成。

  10. 点击建造在S函数生成器上启动构建过程。

    S函数构建器构建一个MEX文件,它实现指定的S函数,并在当前文件夹中保存文件(参见S函数构建器如何构建S函数)。

  11. 保存包含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函数,请先检查以确保包含生成的S函数的文件夹位于MATLAB路径上。然后,从用于将S函数创建到目标模型的模型中复制S函数构建器块。如有必要,将目标模型的参数设置为目标模型所需的值。

或者,您可以在不使用S-Function Builder块或暴露底层C源文件的情况下部署生成的S函数。

  1. 打开将包含S函数的万博1manbetxSimulink模型。

  2. 单击画布以创建S函数块的实例,或从中复制S函数块用户定义的函数库中的库浏览器进入模型。

  3. 双击S函数块。

  4. 在打开的“块参数”对话框中,S函数名称编辑字段,输入S函数构建器生成的可执行文件的名称。

  5. 输入S-函数的任何参数S函数参数编辑字段。按顺序输入参数,其中它们显示在S函数生成器对话框中。

  6. 点击好的在S函数块参数对话框中。

通过从生成的S函数创建块,您还可以为您的屏蔽创建一个掩码S函数堵塞。要了解如何为您的函数添加掩码,请参阅创建块面具。要查看在S函数中添加块掩码的示例,请在MATLAB命令窗口中输入以下命令。

open_system(fullfile(matlabroot,'/ toolbox万博1manbetx / simulink / simdemos / simfeatures / sfcndemo_matadd'));

只要可执行文件位于MATLAB路径上,您就可以使用任何模型中的任何S函数块中的生成的可执行文件。

也可以看看

|

相关话题