Как ввести логическое значение для s-функции Simulink C - PullRequest
1 голос
/ 05 мая 2011

Я могу вводить логические данные в C s-функцию, определяя ее как int32 (см. Код ниже).Как мне ввести логические данные с типом SS_BOOLEAN или SS_UINT8?Я явно указал тип данных сигнала в моей модели Simulink и s-функции, но когда я определил данные как логические или uint8, я получил странные числа вместо 1 или 0.

 static void mdlInitializeSizes( SimStruct *S )
 {
     ...
     ssSetInputPortRequiredContiguous(S, 0, true);
     ssSetInputPortDataType(S, 0, SS_INT32);
     ...
 }
 static void mdlOutputs( SimStruct *S, int_T tid )
 {
     const int *myBoolean = (const int*) ssGetInputPortSignal( S, 0 );
     ...
 }

Обновить (20 мая 2011 г.): Я попробовал решение , предложенное MikeT , но безрезультатно.В качестве результата я ожидал [10 20 30], но получил [1 2 3].Ниже представлена ​​модель Simulink, окно вывода команды и код s-функции:

1 Ответ

5 голосов
/ 06 мая 2011

В Simulink есть демонстрационная s-функция под названием sfun_dtype_io.c, которая показывает, как установить тип данных входов и выходов. Из этой демонстрации, вот как он обрабатывает логический ввод, хотя это не единственный способ сделать это,

static void mdlInitializeSizes(SimStruct *S) {
...
/* input 2 is a boolean scalar signal. */
ssSetInputPortWidth(             S, 2, 1 );
ssSetInputPortDataType(          S, 2, SS_BOOLEAN );
ssSetInputPortDirectFeedThrough( S, 2, TRUE );
...
}

static void mdlOutputs (SimStruct *S, int_T tid) {
...
/* The control port is a boolean signal */
InputBooleanPtrsType u2Ptr = (InputBooleanPtrsType)
                                       ssGetInputPortSignalPtrs(S,2);
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...