指定此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编码器产品无法使用此方法,从而导致链路或运行时错误。