exponenta event banner

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

Этот пример показывает, как использовать обмен сообщениями в распределенной системе, где контроллер управляет множеством входящих сообщений от разных отправителей итеративным образом и посылает сообщения для передачи команд различным приемникам. В примере используется модель системы управления температурами в двух разных помещениях с отдельными термостатами. Алгоритмическое моделирование компонентов в основном следует примеру Stateflow Model Bang-Bang Temperature Control System (Stateflow), в то время как связь между компонентами моделируется с использованием сообщений Simulink ® и блоков SimEvents ®. Ссылочные модели Controller и Thermometer, окрашенные в синий цвет, являются программными компонентами, которые должны генерировать автономный код, в то время как другие компоненты моделируют среду.

Обзор модели

Модель содержит N идентичные помещения с термостатами (смоделированные многовариантными модельными блоками), где N = 2 - параметр Simulink, определенный в файле словаря данных Simulink slddMsg.sldd, которая связана с верхней моделью и ссылочными моделями. Каждая комната может устанавливать уставку температуры отдельно. Термостаты для помещений дистанционно управляются контроллером, использующим один и тот же алгоритм управления для всех термостатов.

Термостаты посылают сообщения о температуре контроллеру каждый 0.2 секунд, в то время как контроллер посылает командные сообщения на термостаты для ввода или выключения питания 1 второй. Блок коммутатора вывода объектов (SimEvents) направляет сообщения от контроллера к одному из термостатов в соответствии с полем данных шины сообщений deviceID. (Шина также определена в словаре данных и совместно используется во всех моделях.) Блок слияния сообщений направляет сообщения от различных термостатов на контроллер.

Первоначально модель конфигурируется с использованием типов шины с полями типа с плавающей запятой, определенными в файле словаря данных. slddMsg.sldd. Чтобы переключиться с плавающей точки на фиксированную, измените словарь данных для модели с slddMsg.sldd кому slddMsgFixpt.sldd. На вкладке Моделирование (Modeling) перейдите в раздел Параметры модели (Model Settings) > Свойства модели (Model Properties) > Внешние данные (External Data).

Модель легко масштабируется путем изменения значения Nдобавление дополнительных экземпляров блока модели и увеличение номера порта блоков «Коммутатор вывода объектов» и «Слияние сообщений». Каждая модель термометра внутри модели комнаты имеет ID , который должен быть установлен со значением, соответствующим индексу выходного порта коммутатора Entity Output Switch.

Блок очереди (FIFO, очередь типа перезаписи) перед моделью контроллера буферизирует сообщение, которое моделирует очередь внутри промежуточного программного обеспечения сообщения контроллера. Здесь мощность N Достаточно хорошо, чтобы очередь перезаписывала самые старые сообщения новыми от каждого отправителя, предполагая отсутствие потери сообщений в пути. Мощность 5*N требуется для наихудшего сценария с потерей сообщения, где 5 - время выборки контроллера, деленное на время выборки термостатов. Кроме того, перед каждым термостатом с емкостью 1 автоматически вставляется очередь с значком «1», так как очередь с емкостью 1 автоматически вставляется, если вы не намеренно размещаете блок «Очередь». См. раздел Использование блока очереди для управления сообщениями.

Чтобы просмотреть последовательности сообщений и событий, на панели инструментов Simulink на вкладке Simulation в разделе Review Results выберите Sequence Viewer. См. Просмотр последовательности.

Модель контроллера

В модели Controller подсистема Update Temperature, связанная с блоком Inport, сначала получает все сообщения, содержащие информацию о температуре из комнат. Подсистема хранит эту информацию в двух векторах уставки температуры и текущей температуры. Затем подсистема For Each считывает векторы, обрабатывает сигналы и посылает управляющие сообщения через функцию Simulink. sendCtrlMsg.

Подсистема Update Temperature является подсистемой do-while, порт состояния завершения которой питается портом состояния блока приема, что означает, что она работает до тех пор, пока не сможет получать больше сообщений из внешней очереди (в верхней модели). Данные сообщения: DeviceMsg тип шины, который определен в файле словаря данных и имеет два поля: temperature и deviceID. Таким образом, когда выходной сигнал блока приема распространяется на разрешенную подсистему, разрешающий порт которой соединен с портом состояния блока приема, блок селектора шины разлагает сигнал на deviceID, temperature, и setpoint сигналы. setpoint и temperature сигналы затем назначаются соответствующим векторным элементам, связанным с deviceID. Наконец, векторы, поддерживаемые блоками единичной задержки, выводятся в качестве сигналов включенной подсистемой и подсистемы обновления температуры в подсистему «Для каждой».

Подсистема For Each, настройки блоков которой показаны выше, имеет N итерации, и оба его входных порта секционированы. Диаграмма Stateflow моделирует контроллер Bang-Bang, который напоминает тот, что описан в Model Bang-Bang Temperature Control System (Stateflow). Его выходной порт выдает логический сигнал, указывающий, включать или нет обогрев. Этот сигнал упаковывается в энергонезависимый сигнал в блоке Bus Creator с идентификатором устройства (один на основе) из номера итерации (на основе нуля). Сигнал подается в блок вызова функции, который вызывает функцию Simulink. SendCtrlMsg (размещено вне подсистемы «Для каждой»), чтобы отправить сообщение из модели.

Модель помещения

В модели Room подсистема Thermostat взаимодействует с окружающей средой. Термостат имеет два входа, управляющее сообщение и сигнал уставки температуры, и два выхода, скорость нагрева и сообщение температуры в контроллер. Блоки Gain and Integrator моделируют физику отопления или охлаждения помещения с учетом скорости нагрева и размера помещения.

Подсистема термостата состоит из подсистемы датчика термометра, блока модели программного обеспечения термометра и подсистемы привода температуры. Блок модели программного обеспечения термометра периодически получает управляющее сообщение от контроллера и распаковывает его в логическую команду (вкл/выкл) в подсистему температурного привода, которая определяет скорость нагрева. Программное обеспечение Thermometer также вводит температурный сигнал из подсистемы Thermometer Sensor, которая определяет аналоговую температуру, преобразует ее в цифровой сигнал и отправляет сообщение обратно в контроллер.

Модель термометра

В модели термометра блок приема соединяется с блоком ввода для получения управляющего сообщения из внешней очереди на каждом шаге времени. Данные сообщения разлагаются на командный сигнал, который является выходным сигналом, и сигнал deviceID, который должен соответствовать аргументу ID модели. Аргумент ID должен быть задан в блоке модели в верхней модели. Начальное значение блока приема устанавливается в структуру MATLAB ® с помощью deviceID поле, равное аргументу модели ID и command поле, принимающее значение false. При этом сигналы цифровой температуры, уставки и идентификатора устройства упаковываются в сигнал невиртуальной шины и посылаются в виде сообщения в блок Outport.

Создание кода

Для генерации и развертывания кода ссылочные модели Controller и Thermometer (окрашенные в синий цвет) могут генерировать автономный код C++ и развертываться отдельно на встраиваемых устройствах с промежуточным программным обеспечением сообщений. Дополнительные сведения см. в разделе Создание сообщений C++ для обмена данными между Simulink и операционной системой или промежуточным программным обеспечением (встроенным кодером); см. также раздел Использование рукописного кода для интеграции сообщений C++ с POSIX (встроенный кодер).

Порт ввода/вывода корневого уровня сообщения не поддерживает создание кода C и настройку кода. При необходимости создания кода C и вызова API промежуточного программного обеспечения для отправки сообщений рассмотрите возможность перемещения функции Simulink sendCtrlMsg для верхней модели и правильной настройки имени, чтобы ссылочная модель генерировала настраиваемый сайт вызова внешней функции. Аналогично, для приемной стороны рассмотрите возможность использования функции Simulink, содержащей блок Receive в верхней модели, и использования блока Function Caller в ссылочной модели для замены блока Receive.

См. также

| | | | |