【发布时间】:2017-01-19 09:36:01
【问题描述】:
我想从 Matlab 的工作区获取 S-Function 中的变量(.cpp 和 wrapper.cpp)。
我该怎么做?
谢谢。
【问题讨论】:
标签: matlab simulink workspace s-function
我想从 Matlab 的工作区获取 S-Function 中的变量(.cpp 和 wrapper.cpp)。
我该怎么做?
谢谢。
【问题讨论】:
标签: matlab simulink workspace s-function
您可以使用 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
您应该只使用工作区中的值,当它们具有真正的全局意义时。 在我的示例中,它是一个特殊的步长时间段的值,不应提供额外的参数。
【讨论】: