【问题标题】:Get variable in S Function from Workspace从工作区获取 S 函数中的变量
【发布时间】:2017-01-19 09:36:01
【问题描述】:

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

我该怎么做?

谢谢。

【问题讨论】:

    标签: matlab simulink workspace s-function


    【解决方案1】:

    您可以使用 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。

    【讨论】:

      【解决方案2】:

      我有一个例子:

      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 
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多