文档

mdlInitializeSampleTimes

指定C MEX s -函数运行时的采样率

要求

是的

语言

C, c++

语法

#定义MDL_INITIALIZE_SAMPLE_TIMES(SimStruct *S)

参数

年代

SimStruct表示S-Function块。

描述

该方法应该指定每个采样率的采样时间和偏移时间,该s函数通过以下配对宏操作

ssSetOffsetTime(S, offsetTimeIndex, offset_time)

在哪里sampleTimeIndex0中指定的采样次数小于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函数应该使用ssIsSampleHitssIsContinuousTask宏,用于在执行期间检查示例命中(在mdlOutputsmdlUpdate).例如,如果块的第一个采样时间是连续的,函数可以使用以下代码片段来检查一个采样命中。

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仿真软件编码器产品不能使用此方法,导致链接或运行时错误。

R2006a之前介绍过