启用连接到此S函数的函数呼叫子系统
int_T ssEnableSystemWithTid(SimStruct *S, int_T元素,int_T tid)
S.
Simstruct代表S函数块。
元素
对应于函数呼叫子系统的输出端口元素的索引。
t
任务ID。
一个int_T
1
如果成功;否则,0.
。
用在mdloutputs.
使能连接到s -功能的功能调用子系统。调用语法是
如果(!ssEnableSystemWithTid(年代,元素,tid))){/ *发生错误,将由Simulink引擎* /返回报告;金宝app}
笔记
在调用此函数之前,S函数必须指定它明确启用它并禁用其调用的函数调用子系统。看sssetexplicitfcsctrl.
了解更多信息。如果S函数没有这样做,请调用ssEnableSystemWithTid
导致错误。
调用此函数的效果取决于设置的设置启用参数时状态函数呼叫子系统的触发堵塞。如果参数设置为重置
,此函数调用函数调用子系统的初始化方法,然后启用方法。子系统的初始化和启用方法反过来调用具有这些方法的子系统中的任何块的初始化和启用方法。初始化方法重置具有状态的块状态,例如,积分器块的初始值。因此,如果触发器块的启用时状态选项设置为重置
调用此函数有效地重置函数呼叫子系统的状态。如果触发器块启用时状态选项设置为握住
,此功能只需调用子系统的启用方法,而不调用其初始化方法,从而无需重置其状态。
C,C ++
此示例显示如何配置S函数以重置其调用的函数呼叫子系统的状态。下面的代码显示了两个回调中所需的宏。这
回调首先指定S函数显式启用和禁用功能呼叫子系统。这mdlInitializeSampleTimes
然后,回调处理函数呼叫子系统的实际启用和禁用以重置状态。mdloutputs.
下面的代码mdlInitializeSampleTimes
使用sssetexplicitfcsctrl.
启用S函数以显式启用和禁用函数呼叫子系统。sssetcallsystemOutput.
然后指定由S函数的第一个输出端口的第一个元素调用函数呼叫子系统。
静态void mdlinitialialializatimpletimes(simstruct * s){sssetsampletime(s,0,0.1);sssetoffsettime(s,0,0.0);/ *明确启用/禁用函数呼叫子系统* / sssetexplicitfcssctrl(s,1);/ *第一个元素上的呼叫函数呼叫子系统* / sssetcallsystemOutput(s,0);sssetmodelreferencesampletimedefaultinheritce;} / *结束mdlinitializatialAmpletimes * /
这mdloutputs.
回调如下所示。它首先用途ssEnableSystemWithTid
在模拟开始时启用功能呼叫子系统。必须在调用之前启用函数调用子系统sscallsystemwithtid.
。仿真运行10秒后,mdloutputs.
回调调用ssDisableSystemWithTid
禁用函数调用子系统。通过调用ssEnableSystemWithTid
同样,重新启用函数调用子系统并重置状态。
静态void mdloutputs(simstruct * s,int_t tid){real_t * x = ssgetRealdistates(s);real_t * y = ssgetoutputportrealsignal(s,1);time_t t = ssgett;/ *仿真时间* / / *在仿真开始时启用功能呼叫子系统* / if(t == 0){if(!ssenablesystemwithtid(s,0,tid)){return;}} / *呼叫函数呼叫子系统* / if(!sscallsystemwithtid(s,0,tid)){return;} / *禁用/重新启用函数调用子系统,当时= 10 * / if(t == 10){if(!ssdisablysystemwithtid(s,0,tid)){return;}如果(!ssenablesystemwithtid(s,0,tid)){return;} y [0] = x [0];} / *结束MDLOUTPUTS * /