0

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

我怎样才能做到这一点?

谢谢。

4

2 回答 2

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

于 2017-01-19T15:35:31.197 回答
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 

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

于 2017-02-25T21:17:39.017 回答