Как мне вызвать переменную Matlab из S-функции?

Я работаю над функцией S в simulink. В рабочей области MATLAB доступны некоторые переменные. Я хочу позвонить им.

Итак, в МАТЛАБ:

a=3;

и в функции S (написанной на C/C++):

double a = CallFromMATLABWorkSpace(a);  //Something like this.

Как мне это сделать? Есть что-то вроде mexCallMATLAB, но непонятно, как мне это использовать в данной ситуации.


person Daan    schedule 30.09.2013    source источник


Ответы (2)


Чтобы получить данные из рабочей области, используйте функцию mexGetVariable.

Тем не менее, это несколько необычная вещь. Почему данные не передаются в качестве параметра S-функции?

person Phil Goddard    schedule 30.09.2013

Из того, что я вижу в документации для 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);
person Jason    schedule 30.09.2013
comment
Второй и четвертый аргументы для mexCallMATLAB должны иметь тип mxArray *...[]. В вашем коде они должны иметь & перед собой. - person Navan; 01.10.2013