Сконфигурируйте пользовательские типы данных

Пользовательские типы данных в S-функциях C

C S-функции может передать использующие пользовательские типы данных. Существует две широких категории для этих типов данных:

  • Simulink® распознаваемые пользовательские типы данных — Это пользовательские типы данных от Simulink.AliasType, Simulink.Bus, Simulink.NumericType или Перечислимого типа данных, который может также взаимодействовать с другими блоками Simulink.

  • Непрозрачные типы данных — Это типы данных для использования только с Блоками s-function, запрограммированными, чтобы понять их. Вы можете задать непрозрачные типы данных в случаях, в которых другие блоки Simulink не должны использовать типы данных.

Используя распознаваемые типы данных Simulink в S-функциях C

Чтобы указать пользовательский тип данных, распознаваемый Simulink, S-функция, стандартная программа mdlInitializeSizes должна указать тип данных, с помощью ssRegisterTypeFromNamedObject.

Например, следующий код, помещенный в начале mdlInitializeSizes, задает пользовательский тип данных от объекта Simulink.AliasType под названием u8 в рабочей области MATLAB®. Пример затем присваивает пользовательский тип данных первому выходному порту.

int id1;
ssRegisterTypeFromNamedObject(S, "u8", &id1);
ssSetOutputPortDataType(S, 0, id1);

Кроме того, можно использовать идентификатор id1, чтобы присвоить этот тип данных S-параметрам-функции, векторам DWork и входным портам.

Используя непрозрачные типы данных в S-функциях C

Для случаев, в которых S-функции должны передать использование типа данных, который не может быть понят под Simulink, S-функция, стандартная программа mdlInitializeSizes должна:

  1. Укажите тип данных, с помощью ssRegisterDataType.

  2. Задайте объем памяти в байтах, требуемых сохранить экземпляр типа данных, с помощью ssSetDataTypeSize.

  3. Задайте значение, которое представляет нуль для типа данных, с помощью ssSetDataTypeZero.

Задайте пользовательский тип данных во внешнем заголовочном файле, чтобы включать в S-функцию уровня 2 C.

/* Define the structure of the user-defined data type */
typedef struct{
    int8_T   a;
    uint16_T b;
}myStruct;

Поместите следующий код в начале mdlInitializeSizes, чтобы установить размер и нулевое представление пользовательского типа данных myStruct.

/* Define variables */
int_T   status;
DTypeId  id;

myStruct tmp;

/* Register the user-defined data types */
id = ssRegisterDataType(S, "myStruct");
if(id == INVALID_DTYPE_ID) return;

/* Set the size of the user-defined data type */
status = ssSetDataTypeSize(S, id, sizeof(tmp));
if(status == 0) return;

/* Set the zero representation */
tmp.a = 0;
tmp.b = 1;
status = ssSetDataTypeZero(S, id, &tmp);

Примечание

Если у вас есть Simulink Coder™, вы не можете использовать программное обеспечение, чтобы сгенерировать код для S-функций, которые содержат макросы, чтобы задать пользовательские типы данных. Необходимо использовать встроенную S-функцию, что Компилятор Выходного языка доступов функционирует, чтобы сгенерировать код с пользовательскими типами данных. Для получения дополнительной информации смотрите S-функции Встраивания (Simulink Coder).

Смотрите также

| | |

Похожие темы

Была ли эта тема полезной?