我想从 Matlab 的工作区获取 S-Function(.cpp 和 wrapper.cpp)中的变量。
我怎样才能做到这一点?
谢谢。
我想从 Matlab 的工作区获取 S-Function(.cpp 和 wrapper.cpp)中的变量。
我怎样才能做到这一点?
谢谢。
您可以使用 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-function 的推荐方法是通过参数。您应该向 s-function 添加一个参数,然后您可以将您的变量指定为参数值。可以使用标准 s-Function API 函数(如 ssGetSFcnParam)从 s-Function 访问此参数。请参阅https://www.mathworks.com/help/simulink/sfg/ssgetsfcnparam.html文档中提到的示例 s-function 。
我有一个例子:
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
只有当它们具有真正的全局意义时,您才应该使用工作区中的值。在我的示例中,它是一个特殊的步长时间段的值,不应提供额外的参数。