S功能2 C Simulink(R2006b),从参数获取字符串

问题描述 投票:0回答:1

我找不到获取在S函数(C,级别2)块的对话框中指定的字符串并将其保存在与该块相对应的.c文件内的变量中的方法。

通过* mxGetPr(ssGetSFcnParam(S,0)),我只能获取字符串中的第一个位置值。在对话框块中输入的与ssGetSFcnParam(S,0)相关的参数为'123'。在该块的蒙版编辑器中,类型为“编辑”。

#define S_FUNCTION_NAME ver_file_data
#define S_FUNCTION_LEVEL 2
#define NPARAMS 14
#define DVC_TYPE(S) ssGetSFcnParam(S, 0)

static void mdlInitializeSizes(SimStruct *S){
    DECL_AND_INIT_DIMSINFO(outputDimsInfo);
    ssSetNumSFcnParams(S, NPARAMS);  /* Number of expected parameters */


ssSetSFcnParamTunable(S, 0, 0);
ssSetSFcnParamTunable(S, 1, 0);

#if defined(MATLAB_MEX_FILE)  if (ssGetNumSFcnParams(S) == ssGetSFcnParamsCount(S)) {
  mdlCheckParameters(S);
  if (ssGetErrorStatus(S) != NULL) {
      return;
  }    } else {
 return;   }
#endif

ssSetNumContStates(S, 0);
ssSetNumDiscStates(S, 0);

if (!ssSetNumInputPorts(S, NUM_INPUTS)) return;

if (!ssSetNumOutputPorts(S, NUM_OUTPUTS)) return;
/* Output Port 0 */
ssSetOutputPortWidth(S, 0, 1);
ssSetOutputPortDataType(S, 0, SS_UINT8);


ssSetNumSampleTimes(S, 1);
ssSetNumRWork(S, 0);
ssSetNumIWork(S, 0);
ssSetNumPWork(S, 0);
ssSetNumModes(S, 0);
ssSetNumNonsampledZCs(S, 0);
}

static void mdlInitializeSampleTimes(SimStruct *S){
    ssSetSampleTime(S, 0, -1);
    ssSetOffsetTime(S, 0, 0.0);
}

static void mdlOutputs(SimStruct *S, int_T tid){
    ssPrintf("DVC_IND_NO = %x\n",*mxGetPr(DVC_IND_NO(S)));
}

mdlRTW (SimStruct *S){

}

在通过输出端口获取任何东西之前,我希望能够使用ssPrintf(“ DVC_IND_NO =%x \ n”,* mxGetPr(DVC_IND_NO(S)))打印; 123。

谢谢你,最诚挚的问候。

simulink s-function
1个回答
0
投票

[mxGetPr返回指向double的指针,因此,如果参数为char数组,则没有意义。

看来您应该使用mxArrayToString

在使用适当的函数访问数据之前,您肯定应该使用mxIsCharmxIsDouble之类的辅助函数来检查数据类型。

© www.soinside.com 2019 - 2024. All rights reserved.