指定数量的输入、输出、状态参数和其他特征的C墨西哥人功能
是的
C, c++
#定义MDL_INITIAL_SIZES空白mdlInitializeSizes (SimStruct *年代)
年代
SimStruct代表一个功能块。
这是第一个s函数模型的回调方法金宝app®引擎调用。此方法执行以下任务:
指定参数的数量,该功能支持,使用金宝appssSetNumSFcnParams
。
使用ssSetSFcnParamTunable(年代,paramIdx, 0)
当一个参数不能改变在模拟,paramIdx
起价0
。当一个参数被指定为可调,引擎问题在模拟一个错误(或在外部模式时使用金宝app仿真软件编码器™产品)如果试图改变参数。
指定的状态数,这个函数,使用ssSetNumContStates
和ssSetNumDiscStates
。
块的输入端口,配置包括:
指定数量的输入端口,这个功能,使用ssSetNumInputPorts
。
指定输入端口的尺寸。
看到ssSetInputPortDimensionInfo
为更多的信息。
对于每一个输入端口,指定是否直接引线,使用ssSetInputPortDirectFeedThrough
。
一个港口直接引线如果输入的使用mdlOutputs
或mdlGetTimeOfNextVarHit
函数。为每个输入端口直接引线国旗可以设置为1 =是的
或0 =没有
。应该设置为1,如果输入,u
中使用mdlOutputs
或mdlGetTimeOfNextVarHit
例行公事。直接引线标记设置为0告诉模型引擎金宝appu
不是用在这两种功能的例程。违反这将导致不可预知的结果。
配置块的输出端口,包括:
指定的输出端口数块,使用ssSetNumOutputPorts
。
指定输出端口的尺寸。
看到mdlSetOutputPortDimensionInfo
为更多的信息。
如果你的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
。
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 */