主要内容

mdlInitializeSizes

指定数量的输入、输出、状态参数和其他特征的C墨西哥人功能

要求

是的

语言

C, c++

语法

#定义MDL_INITIAL_SIZES空白mdlInitializeSizes (SimStruct *年代)

参数

年代

SimStruct代表一个功能块。

描述

这是第一个s函数模型的回调方法金宝app®引擎调用。此方法执行以下任务:

  • 指定参数的数量,该功能支持,使用金宝appssSetNumSFcnParams

    使用ssSetSFcnParamTunable(年代,paramIdx, 0)当一个参数不能改变在模拟,paramIdx起价0。当一个参数被指定为可调,引擎问题在模拟一个错误(或在外部模式时使用金宝app仿真软件编码器™产品)如果试图改变参数。

  • 指定的状态数,这个函数,使用ssSetNumContStatesssSetNumDiscStates

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

    • 指定数量的输入端口,这个功能,使用ssSetNumInputPorts

    • 指定输入端口的尺寸。

      看到ssSetInputPortDimensionInfo为更多的信息。

    • 对于每一个输入端口,指定是否直接引线,使用ssSetInputPortDirectFeedThrough

      一个港口直接引线如果输入的使用mdlOutputsmdlGetTimeOfNextVarHit函数。为每个输入端口直接引线国旗可以设置为1 =是的0 =没有。应该设置为1,如果输入,u中使用mdlOutputsmdlGetTimeOfNextVarHit例行公事。直接引线标记设置为0告诉模型引擎金宝appu不是用在这两种功能的例程。违反这将导致不可预知的结果。

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

    如果你的s函数输出离散(例如,输出只需要特定的值如0、1和2),指定SS_OPTION_DISCRETE_VALUED_OUTPUT

  • 集样本的数量乘以(即。,sample rates) at which the block operates.

    有两种方式指定样本:

    • 出口样品时间

    • 基于块的样品时间

    看到指定功能样品时间示例的完整讨论时间问题。

    对多重速率的S-functions,建议的方法是通过设置样品倍和出口样品时间的方法。当您创建一个多重速率的功能,你必须小心确认,当你慢任务抢占,功能正确管理数据,以避免竞态条件。出口示例指定时间时,块不能继承一个样本的时间在任何港口。

  • 组块的大小的向量,使用ssSetNumRWork,ssSetNumIWork,ssSetNumPWork,ssSetNumModes,ssSetNumNonsampledZCs

  • 设置模拟选项块实现,使用ssSetOptions

    所有选择的形式SS_OPTION_ <名称>。看到配置C / c++函数特性对每个选项的信息。使用一个位操作员设置多个选项,如

    ssSetOptions(年代,(SS_OPTION_name1| SS_OPTION_name2))

请注意

如果你有金宝app仿真软件编码器,当生成代码noninlined s函数,其中包含这个方法,确保该方法不是裹着#如果定义(MATLAB_MEX_FILE)声明。例如:

#如果定义(MATLAB_MEX_FILE)静态孔隙mdlInitializeSizes (SimStruct * S) {/ * mdlInitializeSizes代码添加在这里*}# endif

定义声明中使mdlInitializeSizes方法只有一个MATLAB®墨西哥人文件。如果没有内联函数,金宝app仿真软件编码器产品不能使用这种方法,导致链接或运行时错误。

动态大小的块特性

你可以设置参数NumContStates,NumDiscStates,NumInputs,NumOutputs,NumRWork,NumIWork,NumPWork,NumModes,NumNonsampledZCs一个固定的非负整数或告诉他们动态仿真软件引擎大小:金宝app

  • DYNAMICALLY_SIZED——集长度的州,向量,工作等等值继承自驱动块。实际输入宽度设置宽度,根据标量扩展规则,除非你使用mdlSetWorkWidths设置宽度。

  • 0或正数,集长度(或宽度)指定的值。默认值是0

初始化对MATLAB S-Functions

2级MATLAB的s函数设置方法执行相同的任务几乎与C墨西哥人功能mdlInitializeSizes方法。

例子

静态孔隙mdlInitializeSizes (SimStruct * S) {int_T nInputPorts = 1;/ *输入端口数量* / int_T nOutputPorts = 1;/ *输出端口数量* / int_T needsInput = 1;/ *直接引线* / int_T inputPortIdx = 0;int_T outputPortIdx = 0;ssSetNumSFcnParams (S, 0);* / / *数量预计参数如果(ssGetNumSFcnParams (S) ! = ssGetSFcnParamsCount (S)){/ * *如果预期的输入参数的数量不是*等于参数的数量*对话框中输入的,回报。仿真软件金宝app引擎生成一个*误差表明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