文档

对话框参数

关于对话框参数

可以在仿真开始时和仿真过程中,使用功能参数字段。这样的参数称为对话框参数将它们与s -函数创建的运行时参数区分开来,以方便代码生成(参见运行时参数).

请注意

在模拟运行时,不能使用模型管理器、“S函数块参数”对话框或遮罩来调整源S函数的参数,即具有输出但没有输入的S函数。有关详细信息,请参阅调整和实验块参数值

使用C s -函数对话框参数

的仿真软万博1manbetx件®引擎将对话框参数的值存储在s函数中SimStruct结构。使用s函数回调方法和SimStruct宏来访问和检查参数,并使用它们来计算s函数输出。要在C s函数中使用对话框参数,请在创建s函数时执行以下步骤:

  1. 确定在块对话框中指定参数的顺序。

  2. mdlInitializeSizes功能,使用ssSetNumSFcnParams宏来告诉Simulink引擎S函数接万博1manbetx受多少个参数。具体说明年代作为第一个参数,对话框参数的数量作为第二个参数。如果你的s函数实现mdlCheckParameters方法mdlInitializeSizes例程应该叫mdlCheckParameters检查参数初值的有效性。例如,mdlInitializeSizes函数sfun_runtime1.c以下面的代码开始。

    ssSetNumSFcnParams(年代,NPARAMS);/*预期参数的数量*/ #if (MATLAB_MEX_FILE) if (ssGetNumSFcnParams(S) == ssGetSFcnParamsCount(S)) {mdlCheckParameters(S);if (ssGetErrorStatus(S) != NULL){返回;}} else {return;/* Simulink引擎报告的参数不匹配*/万博1manbetx
  3. 控件访问s函数中的对话框参数ssGetSFcnParam宏。

    指定年代作为第一个参数,参数在对话框中输入的列表中的相对位置(0是第一个位置)作为第二个参数。的ssGetSFcnParam宏返回指向MX阵列包含参数。你可以用ssGetDTypeIdFromMxArray获取参数的数据类型。或者,您可以使用ssGetSFcnParamDataType通过指定参数的索引来获取参数的数据类型。

    例如,在sfun_runtime1.c,下面的#定义s函数开头的语句指定三个对话框参数的顺序,并访问它们在块对话框中的值。

    #定义符号0#定义符号参数ssGetSFcnParam(S,符号IDX)/*第一个参数*/#定义增益IDX 1#定义增益参数ssGetSFcnParam(S,增益IDX)/*第二个参数*/#定义输出IDX 2#定义输出参数ssGetSFcnParam(S,输出IDX)/*第三个参数*/

在运行模拟时,必须在功能参数“s -功能块参数”对话框中的字段,其顺序与第1步中定义的顺序相同。您可以输入任何有效的MATLAB®表达式作为参数的值,包括文字值、工作空间变量名称、函数调用或算术表达式。Simu万博1manbetxlink引擎计算表达式并将其值传递给s函数。

作为另一个例子,下面的代码是设备驱动程序s -函数的一部分。使用四个输入参数:BASE_ADDRESS_PRMGAIN_RANGE_PRMPROG_GAIN_PRM,NUM_OF_CHANNELS_PRM.使用的代码#定义语句,以将特定的输入参数与参数名关联起来。

/*输入参数*/ #define BASE_ADDRESS_PRM(S) ssGetSFcnParam(S, 0) #define GAIN_RANGE_PRM(S) ssGetSFcnParam(S, 1) #define PROG_GAIN_PRM(S) ssGetSFcnParam(S, 2) #define NUM_OF_CHANNELS_PRM(S) ssGetSFcnParam(S, 3) #define NUM_OF_CHANNELS_PRM(S, 2) ssGetSFcnParam(S, 3)

在运行模拟时,在功能参数“功能块参数”对话框中的。第一个对应于第一个期望参数,BASE_ADDRESS_PRM (S). 第二个对应于下一个预期参数,依此类推。

mdlInitializeSizes函数包含此语句。

SSSETNUMSFCNPARMS(S,4);

使用MATLAB二级s函数对话框参数

Simu万博1manbetxlink引擎将MATLAB二级s函数对话框参数存储在块运行时对象中。要在MATLAB二级s函数中使用对话框参数,请在创建s函数时执行以下步骤:

  1. 确定在块对话框中指定参数的顺序。

  2. 设置方法,设置运行时对象的NumDialogPrms属性指示引擎S-function接受多少个参数,例如:

    块。NumDialogPrms = 2;
  3. 使用运行时对象的访问s函数中的对话框参数DialogPrm方法。对话框参数的数据属性存储其当前值,例如:

    param1 = block.DialogPrm (1) . data;param2 = block.DialogPrm (2) . data;

在运行模拟时,必须在参数2级MATLAB s -函数块参数对话框的字段,其顺序与第1步中定义的顺序相同。

可调参数

对话框参数可以是可调的,也可以是不可调的。可调参数是用户可以在模拟运行时更改的参数。

请注意

默认情况下对话框参数是可调的。然而,设置每个参数的可调性是一种良好的编程实践,即使是那些可调的参数。如果您启用了模拟诊断功能升级需要,当遇到未能万博1manbetx指定其所有参数的可调性的s函数时,Simulink引擎就发出诊断。

mdlCheckParameters方法使您能够在模拟期间验证对可调参数的更改。引擎调用mdlCheckParameters方法,当您在模拟循环期间更改参数值时。此方法应检查s -函数对话框参数,以确保更改有效。

可选mdlProcessParameters回调方法允许s函数处理对可调参数的更改。引擎仅在前一个时间步骤中发生有效的参数更改时才调用此方法。这种方法的典型用法是执行只依赖于参数值的计算,因此只在参数值改变时才需要计算。该方法可以在工作向量中缓存参数计算的结果,最好是作为运行时参数(参见运行时参数).

在C s -函数中使用可调参数

在C s函数中,使用宏ssSetSFcnParamTunablemdlInitializeSizes来指定每个s函数对话框参数的可调性。下面的代码取自mdlInitializeSizes函数sfun_runtime1.c.在调用之前,代码首先将S-function对话框参数的数量设置为3mdlCheckParameters.如果参数检查通过,则指定S-function对话框的三个参数的可调性。

ssSetNumSFcnParams(年代,3);/*三个对话框参数*/ #if (MATLAB_MEX_FILE) if (ssGetNumSFcnParams(S) == ssGetSFcnParamsCount(S)) {mdlCheckParameters(S);if (ssGetErrorStatus(S) != NULL){返回;}} else {return;/* Simulink引擎报告的参数不匹配*/}#endif ssSetSF万博1manbetxcnParamTunable(S,GAIN_IDX,true);/*可调*/ ssSetSFcnParamTunable(S,SIGNS_IDX,false);/*不可调*/ ssSetSFcnParamTunable(S,OUT_IDX,false);/*不可调优*/

请注意

的功能mdlInitializeSizes例程调用mdlCheckParameters方法以确保参数的初始值是有效的。

在二级MATLAB S函数中使用可调参数

在MATLAB二级s函数中,设置运行时对象DialogPrmsTunable财产的设置方法指定每个s函数对话框参数的可调性。例如,下面这行代码将s函数的第一个参数设置为可调参数,第二个和第三个参数设置为不可调参数。

块。DialogPrmsTunable ={可调,‘Nontunable’,‘Nontunable};

外部模式参数调优

当您在模拟期间调优参数时,Simulink引擎将调用s函数万博1manbetxmdlCheckParameters方法来验证更改,然后s函数的mdlProcessParameters方法给s函数以某种方式处理参数的机会。引擎在外部模式下运行时也会调用这些方法,但它会将未处理的更改传递给S-function目标。因此,如果您的s函数过程参数必须更改,那么您需要创建一个目标语言编译器(TLC)文件,在代码生成过程中内联s函数,包括它的参数处理代码。有关内联s函数的信息,请参阅万博1manbetxSimulink编码器™目标语言编译器文档。

另请参阅

这个话题有用吗?