主要内容

mdlinitializatize

指定C MEX S函数的输入,输出,状态,参数和其他特征的数量

必需的

是的

语言

C,C ++

句法

#define mdl_initial_sizes.void mdlinitializatized(Simstruct * s)

争论

S.

Simstruct代表S函数块。

描述

这是Simulink的第一个函数回调方法金宝app®发动机呼叫。此方法执行以下任务:

  • 指定此S函数支持的参数数量使用金宝appsssetnumsfcnparams.

    采用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函数例程中不使用。违反这导致不可预测的结果。

  • 配置块的输出端口,包括:

    如果您的S函数输出是离散的(例如,输出只取出特定值,例如0,1和2),指定ss_option_discrete_valued_output.

  • 设置块运行的采样时间(即,采样率)的数量。

    有两种方法可以指定样本时间:

    • 基于端口的采样时间

    • 基于块的样本时间

    指定S函数样本时间有关采样时间问题的完整讨论。

    对于多速率S函数,建议的设置采样时间的方法是通过基于端口的采样时间方法方法。创建多速率S函数时,必须注意验证,当较慢的任务抢占时,您的S函数正确管理数据,以避免竞争条件。当指定基于端口的采样时间时,块不能继承示例时间inf在任何端口。

  • 使用块的工作向量,使用sssetnumrwork.sssetnumiwork.sssetnumpworksssetnummode.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 */
在R2006A之前介绍