主要内容

mdlinitializateMpletimes

指定此C MEX S函数操作的采样率

必需的

是的

语言

C,C ++

句法

#define mdl_initialize_sample_times.void mdlinitializateAmpletimes(Simstruct * s)

争论

S.

Simstruct代表S函数块。

描述

此方法应指定每个采样率的采样时间和偏移时间,每个采样率通过以下配对宏运行

sssetsampletime(s,sampletimeindex,sample_time)sssetoffsettime(s,offsettimeindex,offset_time)

在哪里SampletimeIndex.跑出0.小于所指定的样本时间数量mdlinitializatize通过sssetnumsampletimes.

如果S函数在一个或多个采样率下运行,则此方法可以指定给定采样时间的以下任何采样时间和偏移值:

  • [连续_sample_time,0.0]

  • [tronese_sample_time,fixed_in_minor_step_offset]

  • [离散_sample_period,offset]

  • [变量_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金宝app®发动机假设S函数从其连接的块继承其采样时间,即采样时间是

[inherited_sample_time,0.0]

因此,这种方法可以在不做任何事情的情况下退换。

在指定采样时间时使用以下准则。

  • 在轻微集成步骤期间更改的连续功能应将采样时间设置为

    [连续_sample_time,0.0]
  • 在小集成步骤期间不会改变的连续功能应将采样时间设置为

    [tronese_sample_time,fixed_in_minor_step_offset]
  • 以指定速率更改的离散功能应将采样时间设置为

    [离散_sample_period,offset]

    在哪里

    离散_sample_period> 0.0

    0.0 <=偏移
                   
  • 以可变速率变化的离散功能应将采样时间设置为

    [变量_sample_time,0.0]

    Simu金宝applink引擎调用了mdlgettimeofnextvarhit.函数获取可变步骤离散任务的下一个样本命中的时间。

    注意变量_sample_time.需要一个可变步骤求解器。

  • 要在触发的子系统或周期性系统中正常运行,应该是离散的S函数

    • 指定单个示例时间设置为

      [inherited_sample_time,0.0]
    • 采用sssetOptions.设置ss_option_disallow_constant_sample_time.模拟选项mdlinitializatize

    • 验证是否已分配了离散或触发的采样时间mdlsetworkwidths.

      if(ssgetsampletime(s,0)== continue_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.宏检查在执行期间点击样本(inmdloutputs.要么mdlupdate.)。例如,如果块的第一个采样时间是连续的,则该函数可以使用以下代码片段来检查样本命中。

if(ssiscontinuoustask(s,tid)){}

笔记

如果它使用,该函数会接收不正确的结果ssissamplehit(s,0,tid)

如果函数想要确定第三(离散)任务是否有一个命中,它可以使用以下代码片段。

if(ssissamplehit(s,2,tid){}

笔记

如果你有金宝appSimulink Coder™,当生成包含此方法的非束缚S函数的代码时,请确保该方法未包装#f定义(matlab_mex_file)陈述。例如:

#if定义(matlab_mex_file)静态void mdlinitializationampletimes(simstruct * s){/ *在这里添加mdlinitializateampletimes代码*} #endif

定义声明使这是mdlinitializateMpletimes方法仅适用于MATLAB®MEX文件。如果S函数没有内嵌,则金宝appSimulink编码器产品无法使用此方法,从而导致链路或运行时错误。

在R2006A之前介绍