mdlInitializeSampleTimes
指定C MEX s -函数运行时的采样率
要求
是的
语言
C, c++
语法
#定义MDL_INITIALIZE_SAMPLE_TIMES(SimStruct *S)
参数
-
年代
-
SimStruct表示S-Function块。
描述
该方法应该指定每个采样率的采样时间和偏移时间,该s函数通过以下配对宏操作
ssSetOffsetTime(S, offsetTimeIndex, offset_time)
在哪里sampleTimeIndex
从0
中指定的采样次数小于1mdlInitializeSizes
通过ssSetNumSampleTimes
.
如果s函数在一个或多个采样率下工作,该方法可以为给定的采样时间指定以下任何一个采样时间和偏移值:
(CONTINUOUS_SAMPLE_TIME, 0.0)
[CONTINUOUS_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]
(discrete_sample_period,抵消)
(VARIABLE_SAMPLE_TIME, 0.0)
中的宏定义的大写值sl_sample_time_defs.h
.
如果s函数以一个速率工作,该方法可以选择将采样时间设置为以下采样/偏移时间对之一。
(INHERITED_SAMPLE_TIME, 0.0)
[INHERITED_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]
如果采样次数为0,则Simulink . Simulink . Simulink金宝app . Simulink . Simulink®引擎假设s函数从它所连接的块继承它的采样时间,即,采样时间为
(INHERITED_SAMPLE_TIME, 0.0)
因此,这个方法可以不做任何事情就返回。
在指定样本时间时使用以下指导原则。
在小的集成步骤期间更改的连续函数应该将采样时间设置为
(CONTINUOUS_SAMPLE_TIME, 0.0)
在小的集成步骤中不更改的连续函数应该将采样时间设置为
[CONTINUOUS_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]
一个以指定速率变化的离散函数应该将采样时间设置为
(discrete_sample_period,抵消)
在哪里
离散采样周期> 0.0
而且
0.0 <= offset < discrete te_sample_period
一个以可变速率变化的离散函数应该将采样时间设置为
(VARIABLE_SAMPLE_TIME, 0.0)
Simu金宝applink引擎调用
mdlGetTimeOfNextVarHit
函数获取变步长离散任务下一个命中样本的时间。请注意,
VARIABLE_SAMPLE_TIME
需要一个变步长求解器。为了在触发子系统或周期系统中正确工作,离散s函数应该
指定单个采样时间设置为
(INHERITED_SAMPLE_TIME, 0.0)
使用
ssSetOptions
设置SS_OPTION_DISALLOW_CONSTANT_SAMPLE_TIME
中的模拟选项mdlInitializeSizes
验证它被分配了一个离散的或触发的采样时间
mdlSetWorkWidths
:if (ssGetSampleTime(S, 0) == CONTINUOUS_SAMPLE_TIME) {ssSetErrorStatus(S, "此块不能被分配连续采样时间");}
在整个框图中传播样本时间之后,引擎分配样本时间
[INHERITED_SAMPLE_TIME, INHERITED_SAMPLE_TIME]
到驻留在触发子系统中的离散块。
如果这个函数没有固有的采样时间,它应该将其采样时间设置为继承,按照以下原则:
随着输入的变化而变化的函数,即使在较小的集成步骤中,也应该将其采样时间设置为
(INHERITED_SAMPLE_TIME, 0.0)
随着输入的变化而变化,但在小的集成步骤中不变化的函数(例如,在小的集成步骤中保持)应该将其采样时间设置为
[INHERITED_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]
s函数应该使用ssIsSampleHit
或ssIsContinuousTask
宏,用于在执行期间检查示例命中(在mdlOutputs
或mdlUpdate
).例如,如果块的第一个采样时间是连续的,函数可以使用以下代码片段来检查一个采样命中。
if (ssIsContinuousTask(S,tid)) {}
请注意
如果函数使用ssIsSampleHit(年代,0,tid)
.
如果函数想确定第三个(离散的)任务是否有命中,它可以使用以下代码片段。
if (ssIsSampleHit(S,2,tid) {}
请注意
如果你有金宝app仿真软件编码器™,在为包含此方法的非内联s函数生成代码时,请确保该方法没有包装在#如果定义(MATLAB_MEX_FILE)
声明。例如:
#if defined(MATLAB_MEX_FILE) static void mdlInitializeSampleTimes(SimStruct *S){/*在这里添加mdlInitializeSampleTimes代码*}#endif
的定义
语句使mdlInitializeSampleTimes
方法只适用于MATLAB®墨西哥人文件。如果s函数没有内联,则金宝app仿真软件编码器产品不能使用此方法,导致链接或运行时错误。