Я хотел бы получить переменную в S-функции (.cpp и wrapper.cpp) из рабочей области Matlab.
Как я могу это сделать?
Спасибо.
Я хотел бы получить переменную в S-функции (.cpp и wrapper.cpp) из рабочей области Matlab.
Как я могу это сделать?
Спасибо.
Вы можете вызвать 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.
У меня есть пример:
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
Вы должны использовать значения из рабочей области только тогда, когда они имеют истинное глобальное значение. В моем примере это значение временного интервала специального шага, который не должен содержать дополнительный параметр.