函数调用子系统和S-Functions
您可以创建一个触发子系统的执行是由逻辑内部C墨西哥人s函数的值而不是一个信号。一个子系统,所以被称为配置函数调用子系统。你不能触发从2级MATLAB函数调用子系统®s函数。实现一个函数调用子系统:
在触发块,选择函数调用随着触发类型参数。
功能,使用
和ssEnableSystemWithTid
启用或禁用触发子系统和ssDisableSystemWithTid
宏调用触发子系统。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
。执行适当的子系统
mdlOutputs
或mdlUpdate
功能程序。例如:静态孔隙mdlOutputs(…){如果(((int) * uPtrs[0]) % 2 = = 1){如果(! ssCallSystemWithTid(年代,0,tid)){/ *错误发生,报道* / / *模型引擎* /返回;万博1manbetx其他}}{如果(! ssCallSystemWithTid(年代,1,tid)){/ *错误发生,报道* / / *模型引擎* /返回;万博1manbetx}}…}
看到sfun_fcncall.c
为例,执行一个函数调用子系统在第一和第二元素的第一功能输出。以下仿真软件模型(万博1manbetxsfcndemo_sfun_fcncall)使用这个功能。
第一个函数调用子系统提供了一个正弦波输出。第二个函数调用子系统是一个简单的包含一块单元延迟反馈回路。
脉冲发生器发出其上价值时,函数调用子系统连接到第一个元素的第一个功能触发输出端口。同样,当脉冲发生器发出低价值,函数调用触发子系统连接到第二个元素。模拟输出显示在以下范围。
函数调用子系统是一个强大的建模构造。您可以配置Stateflow®块来执行函数调用子系统,从而扩展的功能块。有关更多信息,请参见Stateflow文档。