文档

函数调用子系统和S-Functions

您可以创建一个触发子系统的执行是由逻辑内部C墨西哥人s函数的值而不是一个信号。一个子系统,所以被称为配置函数调用子系统。你不能触发从2级MATLAB函数调用子系统®s函数。实现一个函数调用子系统:

  • 在触发块,选择函数调用随着触发类型参数。

  • 功能,使用ssEnableSystemWithTidssDisableSystemWithTid启用或禁用触发子系统和ssCallSystemWithTid宏调用触发子系统。

  • 在模型中,直接连接功能块输出触发端口。

    请注意

    函数调用连接只能上执行第一个输出端口。

不直接执行函数调用子系统模型万博1manbetx®引擎;相反,s函数决定何时执行子系统。控制子系统完成执行时,返回功能。这幅图描绘了一个函数调用子系统之间的交互和功能。

在这个图中,ssCallSystemWithTid执行的函数调用子系统连接到第一个输出端口元素。ssCallSystemWithTid返回0,如果发生错误而执行函数调用子系统或如果输出是无关的。函数调用子系统执行后,控制返回给你的功能。

函数调用子系统只能连接到S-functions已正确配置为接受他们。

配置一个函数调用的函数调用子系统:

  • mdlInitializeSizes,设置数据类型的s函数第一个输出端口指定函数调用

    ssSetOutputPortDataType(年代,0,SS_FCN_CALL);

  • 指定的元素执行的函数调用子系统mdlInitializeSampleTimes。例如:

    ssSetCallSystemOutput (S, 0);/ *调用第一个元素* / ssSetCallSystemOutput (S, 1);/ *调用第二个元素* /
  • 指定在mdlInitializeSampleTimes是否你想要的功能能够启用或禁用的函数调用子系统。只有S-functions显式地启用和禁用的函数调用子系统可以重置状态和输出子系统,由函数调用子系统触发外港块。例如,代码

    ssSetExplicitFCSSCtrl (S, 1);

    mdlInitializeSampleTimes指定函数可以启用和禁用的函数调用子系统。在这种情况下,功能必须调用ssEnableSystemWithTid之前执行子系统使用ssCallSystemWithTid

  • 执行适当的子系统mdlOutputsmdlUpdate功能程序。例如:

    静态孔隙mdlOutputs(…){如果(((int) * uPtrs[0]) % 2 = = 1){如果(! ssCallSystemWithTid(年代,0,tid)){/ *错误发生,报道* / / *模型引擎* /返回;万博1manbetx其他}}{如果(! ssCallSystemWithTid(年代,1,tid)){/ *错误发生,报道* / / *模型引擎* /返回;万博1manbetx}}…}

看到sfun_fcncall.c为例,执行一个函数调用子系统在第一和第二元素的第一功能输出。以下仿真软件模型(万博1manbetxsfcndemo_sfun_fcncall)使用这个功能。

第一个函数调用子系统提供了一个正弦波输出。第二个函数调用子系统是一个简单的包含一块单元延迟反馈回路。

脉冲发生器发出其上价值时,函数调用子系统连接到第一个元素的第一个功能触发输出端口。同样,当脉冲发生器发出低价值,函数调用触发子系统连接到第二个元素。模拟输出显示在以下范围。

函数调用子系统是一个强大的建模构造。您可以配置Stateflow®块来执行函数调用子系统,从而扩展的功能块。有关更多信息,请参见Stateflow文档。

这个主题有帮助吗?