从Workspace获取S Function中的变量

时间:2017-01-19 09:36:01

标签: matlab simulink workspace s-function

我想从Matlab的工作区获取S-Function(.cpp和wrapper.cpp)中的变量。

我该怎么做?

感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用mexCallMATLAB函数从S-Function调用MATLAB。使用mexCallMATLAB,您可以从S-Function调用任何MATLAB函数。将此与evalin功能相结合,您可以从基础工作区获取变量。调用mexCallMATLAB的语法是

int mexCallMATLAB(int nlhs, mxArray *plhs[], int nrhs,
  mxArray *prhs[], const char *functionName);

你应该将你的functionName设置为“evalin”,将prhs中的第一个参数设置为字符串“base”,将第二个参数设置为变量的名称。

话虽如此,将变量变为s函数的推荐方法是通过参数。您应该向s-function添加参数,然后可以将变量指定为参数值。可以使用标准s函数API函数(如ssGetSFcnParam)从s函数访问此参数。请参阅https://www.mathworks.com/help/simulink/sfg/ssgetsfcnparam.html文档中提到的示例s函数。

答案 1 :(得分:0)

我有一个例子:

double Tinit;
mxArray* args[2];
args[0] = mxCreateString("base");
args[1] = mxCreateString("Tinit");
mxArray* out;
mexCallMATLAB(1, &out, 2, args, "evalin"); //eval in workspace base
Tinit = *mxGetPr(out);   //gets the double result 

当它们具有真正的全局含义时,您应该只使用工作空间中的值。 在我的示例中,它是特殊步骤时间段的值,不应提供额外参数。