Получить переменную в S-функции из рабочей области

Я хотел бы получить переменную в S-функции (.cpp и wrapper.cpp) из рабочей области Matlab.

Как я могу это сделать?

Спасибо.


person Smith    schedule 19.01.2017    source источник


Ответы (2)


Вы можете вызвать MATLAB из S-функции, используя функцию mexCallMATLAB. Используя mexCallMATLAB, вы можете вызывать любую функцию MATLAB из S-Function. Комбинируя это с функцией evalin, вы можете получить переменную из базовой рабочей области. Синтаксис для вызова mexCallMATLAB:

int mexCallMATLAB(int nlhs, mxArray *plhs[], int nrhs,
  mxArray *prhs[], const char *functionName);

Вы должны установить для functionName значение «evalin», а первый аргумент в prhs — строку «base», а второй аргумент — имя переменной.

Сказав это, рекомендуемый способ получить переменную в s-функцию — через параметры. Вы должны добавить параметр к s-функции, а затем вы можете указать свою переменную в качестве значения параметра. Доступ к этому параметру можно получить из s-функции, используя стандартные функции API s-функции, такие как ssGetSFcnParam. См. примеры s-функций, упомянутые в документе по адресу https://www.mathworks.com/help/simulink/sfg/ssgetsfcnparam.html.

person Navan    schedule 19.01.2017

У меня есть пример:

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 

Вы должны использовать значения из рабочей области только тогда, когда они имеют истинное глобальное значение. В моем примере это значение временного интервала специального шага, который не должен содержать дополнительный параметр.

person Hartmut Schorrig    schedule 25.02.2017