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

В этом примере показано, как использовать коммуникацию сообщения в распределенной системе, где контроллер управляет несколькими входящими сообщениями от различных отправителей итеративным способом и отправляет сообщения, чтобы передать команды к различным приемникам. Пример использует модель управления системы управления температуры в двух различных комнатах с отдельными термостатами. Алгоритмическое моделирование компонентов в основном следует за Системой Контроля температуры Скорострельного оружия Модели Stateflow в качестве примера (Stateflow), в то время как связь между компонентами моделируется с помощью сообщений Simulink® и блоков SimEvents®. Модели Controller и Thermometer, на которые ссылаются, раскрашенные синий, являются компонентами программного обеспечения, которые, как ожидают, сгенерируют автономный код, в то время как другие компоненты моделируют среду.

Обзор модели

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

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

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

Модель легко масштабируема путем изменения значения N, добавление большего количества экземпляров блока модели и увеличения номера порта Переключателя Сущности Выход и блоков Слияния сообщения. Каждая модель Thermometer в модели Room имеет ID аргумент, который должен быть установлен со значением, которое совпадает с индексом выходного порта Переключателя Сущности Выход.

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

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

Модели контроллеров

В Моделях контроллеров подсистема Температуры Обновления, соединенная с блоком Inport сначала, получает все сообщения, содержащие температурную информацию из комнат. Подсистема хранит ту информацию в двух векторах из температурного заданного значения и текущей температуры. Затем Для Каждой подсистемы читает векторы, обрабатывает сигналы и отсылает управляющие сообщения через функцию Simulink sendCtrlMsg.

Подсистема Температуры Обновления является - в то время как подсистема, порт условия завершения которой питается портом состояния блока Receive, означая его, запускается, до не может получать больше сообщения от внешней очереди (в топ-модели). Данные о сообщении имеют DeviceMsg тип шины, который задан в файле словаря данных и имеет два поля: temperature и deviceID. Таким образом, когда выходной сигнал блока Receive распространяет к активированной подсистеме, чья включают порт, соединяется с портом состояния блока Receive, блок Селектора Шины разлагает сигнал на deviceID, temperature, и setpoint сигналы. setpoint и temperature сигналы затем присвоены соответствующим векторным элементам, сопоставленным с deviceID. Наконец, векторы, обеспеченные блоками Unit Delay, выводятся как сигналы активированной подсистемой и подсистемой Температуры Обновления к Для Каждой подсистемы.

Для Каждой подсистемы, настройки блока которой показывают выше, будет иметь N итерации и оба из его входных портов разделены. Диаграмма Stateflow моделирует Контроллер Скорострельного оружия, который напоминает тот, объясненный в Системе Контроля температуры Скорострельного оружия Модели (Stateflow). Его выходной порт выводит булев сигнал, указывающий, включить ли нагревание. Этот сигнал упаковывается в невиртуальный сигнал в блоке Bus Creator с deviceID (на основе одним) от (основанного на нуле) номера итерации. Сигнал дан блоку Function Caller, который вызывает Функцию Simulink SendCtrlMsg (помещенный вне Для Каждой Подсистемы), чтобы отослать сообщение из модели.

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

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

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

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

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

Генерация кода

Для генерации кода и развертывания, модели Controller и Thermometer, на которые ссылаются (окрашенный в синий) могут сгенерировать автономный Код С++ целевого процессора и могут быть развернуты отдельно на встроенных устройствах с промежуточным программным обеспечением сообщения. Для получения дополнительной информации смотрите, Генерируют сообщения C++, чтобы Связаться Между Simulink и Операционной системой или Промежуточным программным обеспечением (Embedded Coder); см. также Использование Рукописный Код, чтобы Интегрировать сообщения C++ с POSIX (Embedded Coder).

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

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

| | | | |