mdlinitializatize
指定C MEX S函数的输入,输出,状态,参数和其他特征的数量
必需的
是的
语言
C,C ++
句法
#define mdl_initial_sizes.void mdlinitializatized(Simstruct * s)
争论
-
S.
-
Simstruct代表S函数块。
描述
这是Simulink的第一个函数回调方法金宝app®发动机呼叫。此方法执行以下任务:
指定此S函数支持的参数数量使用金宝app
sssetnumsfcnparams.
。采用
sssetsfcnparamtunable(s,paramidx,0)
当参数在仿真期间无法更改时,在其中paramidx.
开始于0.
。当指定参数不调谐时,发动机在模拟期间发出错误(或在外部模式使用时使用金宝appSimulink Coder™产品)如果尝试改变参数。指定使用的状态的状态数量
sssetnumcontstates.
和sssetnumdiscstates.
。配置块的输入端口,包括:
指定使用的输入端口数量使用
sssetnuminputports.
。指定输入端口的尺寸。
看
sssetInputportDimensionSinfo.
了解更多信息。对于每个输入端口,请指定它是否具有直接馈通,使用
SssetInputportDirectFeedThrough.
。如果输入使用,则端口具有直接的馈通
mdloutputs.
要么mdlgettimeofnextvarhit.
功能。每个输入端口的直接馈通标志可以设置为1 =是的
要么0 = No.
。如果输入,则应设置为1,你
,被用作mdloutputs.
要么mdlgettimeofnextvarhit.
常规。将直接馈通标志设置为0告诉Simulink引擎金宝app你
在这些S函数例程中不使用。违反这导致不可预测的结果。
配置块的输出端口,包括:
指定块具有的输出端口数量使用
sssetnumoutputports.
。指定输出端口的尺寸。
看
mdlsetoutputportdimensionsinfo.
了解更多信息。
如果您的S函数输出是离散的(例如,输出只取出特定值,例如0,1和2),指定
ss_option_discrete_valued_output.
。设置块运行的采样时间(即,采样率)的数量。
有两种方法可以指定样本时间:
基于端口的采样时间
基于块的样本时间
看指定S函数样本时间有关采样时间问题的完整讨论。
对于多速率S函数,建议的设置采样时间的方法是通过基于端口的采样时间方法方法。创建多速率S函数时,必须注意验证,当较慢的任务抢占时,您的S函数正确管理数据,以避免竞争条件。当指定基于端口的采样时间时,块不能继承示例时间
inf
在任何端口。使用块的工作向量,使用
sssetnumrwork.
那sssetnumiwork.
那sssetnumpwork
那sssetnummode.
那sssetnumnonsampledzcs.
。设置此块实现的模拟选项,使用
sssetoptions.
。所有选项都有表单
ss_option_
。看配置C / C ++ S函数功能有关每个选项的信息。使用按位要么
操作员设置多个选项,如sssetoptions(s,(ss_option_名称1|ss_option_名称2.))
笔记
如果你有金宝appSimulink编码器,当生成包含此方法的非融合S函数的代码时,请确保该方法未包装#if定义(matlab_mex_file)
陈述。例如:
#f定义(matlab_mex_file)静态void mdlinitialization(simstruct * s){/ *在此处添加mdlinitializatized代码*} #endif
这定义
声明使这是mdlinitializatize
方法仅适用于MATLAB®MEX文件。如果S函数没有内衬,则金宝appSimulink编码器产品无法使用此方法,从而导致链路或运行时错误。
动态大小的块特征
您可以设置参数numcontstates.
那numdiscstates.
那numinputs.
那numoutputs.
那numrwork.
那numiwork.
那numpwork.
那nummodes.
, 和numnonsampledzcs.
到固定的非负整数或告诉Simulink引擎动态地调整它们:金宝app
动态化
- 设置状态,工作向量等的长度,依靠从驱动块继承的值。除非您使用,否则它根据标量扩展规则为实际输入宽度设置宽度mdlsetworkwidths.
设置宽度。0.
或正数 - 将长度(或宽度)设置为指定值。默认为0.
。
MATLAB S函数的初始化
Level-2 Matlab S功能设置
方法执行几乎与C MEX S函数相同的任务mdlinitializatize
方法。
例子
静态void mdlinitializalization(simstruct * s){int_t ninputports = 1;/ *输入端口数* / int_t noutputports = 1;/ *输出端口的数量* / int_t需要= 1;/ *直接馈通* / int_t inputportidx = 0;INT_T OUTPUTPORTIDX = 0;sssetnumsfcnparams(s,0);/ *预期参数数* / if(ssgetnumsfcnparams!= ssgetsfcnparamscount(s)){/ * *如果预期输入参数的数量不是*等于*对话框中输入的参数数,则返回。Simu金宝applink引擎生成一个*错误,指示存在Aparameter不匹配。*/ 返回;}否则{mdlcheckparameters; if (ssGetErrorStatus(S) != NULL) return; } ssSetNumContStates( S, 0); ssSetNumDiscStates( S, 0); /* * Configure the input ports. First set the number of input * ports. */ if (!ssSetNumInputPorts(S, nInputPorts)) return; /* * Set input port dimensions for each input port index * starting at 0. */ if(!ssSetInputPortDimensionInfo(S, inputPortIdx, DYNAMIC_DIMENSION)) return; /* * Set direct feedthrough flag (1=yes, 0=no). */ ssSetInputPortDirectFeedThrough(S, inputPortIdx, needsInput); /* * Configure the output ports. First set the number of * output ports. */ if (!ssSetNumOutputPorts(S, nOutputPorts)) return; /* * Set output port dimensions for each output port index * starting at 0. */ if(!ssSetOutputPortDimensionInfo(S,outputPortIdx, DYNAMIC_DIMENSION)) return; /* * Set the number of sample times. */ ssSetNumSampleTimes(S, 1); /* * Set size of the work vectors. */ ssSetNumRWork(S, 0); /* real vector */ ssSetNumIWork(S, 0); /* integer vector */ ssSetNumPWork(S, 0); /* pointer vector */ ssSetNumModes(S, 0); /* mode vector */ ssSetNumNonsampledZCs(S, 0); /* zero crossings */ ssSetOptions(S, 0); } /* end mdlInitializeSizes */