exponenta event banner

Создание сообщений C для обмена данными между компонентами Simulink

Чтобы создать код C, поддерживающий обмен сообщениями между компонентами модели в среде Simulink, используйте блоки библиотеки сообщений и событий Simulink Send and Receive. Чтобы настроить связь, используйте блок Queue (из той же библиотеки) для установки параметров емкости, политики сортировки (LIFO, FIFO и приоритет) и политики перезаписи (поведение, когда очередь превышает емкость). Можно создать код C для целевых системных файлов на основе GRT с помощью Simulink Coder или для целевых системных файлов на основе ERT с помощью Embedded Coder.

Сообщения являются эффективным способом связи для распределенных и сложных систем, которые могут быть смоделированы в Simulink. Чтобы лучше понять сгенерированную поддержку кода для связи на основе сообщений, объясняется следующее:

  • Подготовка моделей в Simulink для обмена сообщениями.

  • Как компоненты модели передают сообщения и как код реализует это поведение.

  • Как создать и проверить код C из данной модели примера.

Подготовка моделей в Simulink для обмена сообщениями

В Simulink можно моделировать обмен сообщениями между компонентами модели с помощью следующих шагов.

  1. Создайте модель, содержащую блок отправки (ссылочная модель).

  2. Создайте модель, содержащую блок получения (ссылочная модель).

  3. Создайте модель с двумя блоками модели (верхняя модель).

    • Установите первый блок Model в модель, содержащую блок Send (модель с шага 1).

    • Установите второй блок Model в модель, содержащую блок Receive (модель из шага 2).

  4. При запуске модели очередь автоматически создается в верхней модели над строкой сообщения. Явная или неявная очередь управляет передачей сообщений. Можно использовать автоматически созданную очередь или добавить блок «Очередь» в верхней модели для явного указания параметров связи.

Как компоненты модели передают сообщения и как код реализует это поведение

Концептуально ссылочные модели передают сообщения следующим образом:

  1. В модели, содержащей блок Send, блок Send преобразует сигналы в сообщения.

  2. Верхняя модель, содержащая очередь, управляет сообщениями в соответствии с параметрами, определяющими емкость, порядок доставки и другие показатели качества обслуживания (QoS).

  3. В модели, которая содержит блок приема, блок приема преобразует сообщения обратно в сигналы.

В сгенерированном коде C модель верхнего уровня облегчает соединение между моделями отправки и приема, на которые имеются ссылки, путем установления интерфейса набора, к которому ссылочные модели могут обращаться независимо друг от друга.

Сгенерированный код C реализует поведение сообщений следующим образом:

  1. Служба создается на каждой границе модели. Служба содержит ссылку на верхнюю модель и функцию точки входа, называемую сервисной функцией, для ссылочных моделей, используемых для передачи сообщений с верхней моделью.

  2. Верхняя модель инициализирует каждую службу для создания соединения с каждой ссылочной моделью.

  3. Ссылочные модели вызывают сервисные функции для передачи сообщений с моделью верхнего уровня.

Подробная информация о реализации этих шагов показана в примере созданного кода.

Пример создания кода C

В этом примере генерируется и исследуется код C из модели, представленной в разделе Установление интерфейсов отправки и получения сообщений между компонентами программного обеспечения.

Создать код C:

  1. Откройте модель.

  2. В коллекции «Приложения» щелкните Встроенный кодер.

  3. Для каждой модели (верхней и обеих ссылочных моделей) в диалоговом окне Параметры конфигурации (Configuration Parameters) на панели Создание кода (Code Generation) установите для параметра Язык (Language) значение C и сохраните модель.

  4. Создать код. На вкладке C Code нажмите кнопку Build.

  5. Просмотр созданного кода. На вкладке C Code щелкните View Code.

Изучить код C:

  1. Служба создается на каждой границе модели. В C ссылочные модели представляют службы как DWork. Служба предоставляет указатель на экземпляр модели верхнего уровня и функцию службы, которая ссылается на модели, вызываемые для передачи сообщений.

    1. Чтобы просмотреть службу для отправки сообщений, откройте файл заголовка модели, на который имеется ссылка, mSend.h. Просмотр распределения DWork.

    2. Для просмотра типа данных отправки сообщения, если тип данных является совместно используемым (например, встроенные типы данных, импортированные типы шины или экспортированные типы шины с указанным типом данных), информация находится в файле общего заголовка. Если тип данных не может использоваться совместно, информация находится в файле заголовка модели, mSend.h. Для этого примера просмотрите тип данных с общим доступом, открыв файл с общим заголовком. SendData_real_T.h.

    3. Чтобы просмотреть службу для получения сообщений, откройте файл заголовка модели, на который имеется ссылка, mReceive.h. Просмотр распределения DWork.

    4. Для просмотра типа данных полученных сообщений, если тип данных является совместно используемым (например, встроенные типы данных, импортированные типы шины или экспортированные типы шины с указанным типом данных), информация размещается в файле общего заголовка. Если тип данных не может использоваться совместно, информация находится в файле заголовка модели ,mReceive.h. Для этого примера просмотрите тип данных с общим доступом, открыв файл с общим заголовком. RecvData_real_T.h.

  2. Верхняя модель инициализирует каждую службу для создания соединения с каждой ссылочной моделью. В C верхняя модель инициализирует каждую ссылочную модель DWork. Для просмотра инициализации откройте файл модели C верхнего уровня, MessageSendReceiveDefaultBufferModel.c.

  3. Ссылочные модели вызывают сервисные функции для передачи сообщений с моделью верхнего уровня. В C ссылочная модель вызывает сервисную функцию путем отмены ссылки на указатель сервисной функции и передачи указателя на экземпляр верхней модели. Прототипы сервисных функций можно просмотреть в верхнем файле заголовка модели, а ссылочные вызовы моделей этих сервисных функций - в ссылочных файлах модели C.

    1. Чтобы просмотреть прототип сервисной функции для отправки сообщений, откройте верхний файл заголовка модели, MessageSendReceiveDefaultBufferModel.h.

    2. Для просмотра реализации сервисной функции для отправки сообщений откройте файл модели C верхнего уровня, MessageSendReceiveDefaultBufferModel.c.

    3. Чтобы просмотреть, как модель, на которую указывает ссылка, вызывает функцию службы, откройте файл C для модели, mSend.c. В функции шага модель вызывает службу для отправки данных экземпляра и сообщения в верхнюю модель и получает обратно статус возврата.

    4. Чтобы просмотреть прототип сервисной функции для получения сообщений, откройте верхний файл заголовка модели, MessageSendReceiveDefaultBufferModel.h.

    5. Для просмотра реализации сервисной функции для приема сообщений откройте файл модели C верхнего уровня, MessageSendReceiveDefaultBufferModel.c.

    6. Чтобы просмотреть, как модель, на которую ссылается получение, вызывает функцию службы, откройте файл C для модели, mReceive.c. В функции шага модель вызывает службу для получения полезной нагрузки сообщения и состояния возврата.

Соображения и ограничения

  • Поддержка кода C доступна для целевых системных файлов на основе GRT с помощью приложения Simulink Coder App.

  • Поддержка кода C доступна для целевых системных файлов на основе ERT с помощью приложения Embedded Coder App.

  • Для создания кода верхняя и ссылочная модели должны иметь один и тот же язык (C) и выбранный системный целевой файл.

  • Управление прототипом функции (FPC) не может быть настроено для модели верхнего уровня, имеющей корневые порты сообщений.

  • Внешние модели и исполнительные модели не поддерживаются.

  • При моделировании SIL/PIL не поддерживается.

Связанные темы