我想从Matlab的工作区获取S-Function(.cpp和wrapper.cpp)中的变量。
我该怎么做?
感谢。
答案 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
当它们具有真正的全局含义时,您应该只使用工作空间中的值。 在我的示例中,它是特殊步骤时间段的值,不应提供额外参数。