Я работаю над функцией S в Simulink. В рабочей области MATLAB есть несколько переменных. Я хочу позвонить им.
Итак, в MATLAB:
a=3;
и в функции S (написано на C / C ++):
double a = CallFromMATLABWorkSpace(a); //Something like this.
Как мне это сделать? Есть что-то вроде mexCallMATLAB
но не ясно, как я должен использовать это в этой ситуации.
Чтобы получить данные из рабочей области, используйте функцию mexGetVariable.
Однако это довольно необычная вещь.
Почему данные не передаются в качестве параметра в S-функцию?
Из того, что я могу увидеть в документации для mexCallMATLAB
, так же как взаимодействие с исходным кодом C ++, это будет выглядеть примерно так:
Допустим, у вас есть функция MatLab MyDoubleFunction
которая принимает одно скалярное двойное значение и возвращает скалярное двойное значение. Вы бы сделали следующее, если хотите передать функции значение 4.0
и посмотрим, что ответит:
//setup the input args
mxArray* input_args[1] = {mxCreateDoubleScalar(4.0)};
mxArray** output_args; //will be allocated during call to mexCallMATLAB
//make the call to the Matlab function
if (mexCallMATLAB( 1 /* number of output arguments */,
output_args,
1 /* number of input arguments */,
&input_args,
"MyDoubleFunction"))
{
//error if we get to this code block since it returned a non-zero value
}
//inspect the output arguments
double answer = mxGetScalar(*output_args);