Система управления обогревом дома с Modbus TCP#

 В практическом руководстве демонстрируется проведение полунатурного моделирования в REPEAT VISION с использованием протокола Modbus TCP. Внешним физическим устройством является контролллер Arduino UNO в связке с Ethernet-модулем ENC28J60, а в качестве моделируемой системы выступает тепловая модель дома.

 Полунатурное моделирование - это исследование, при котором часть математической модели системы является реальным физическим объектом. Методы полунатурного моделирования эффективно применяют при разработке и отладке разнообразных систем автоматического управления.

 Современные системы управления обогревом жилых помещений требуют гибкости, масштабируемости и возможности интеграции с другими компонентами «умного дома». Одним из наиболее распространенных протоколов для промышленной автоматизации является Modbus, благодаря своей открытости и поддержке различными устройствами. В частности, Modbus TCP – ethernet-версия протока, обеспечивающая удобное сетевое взаимодействие между контроллерами и полевыми устройствами.

 В качестве примера такой системы, рассмотрим простую систему управления обогревом дома с управлением по Modbus TCP.

Важно

Часть блоков для данного примера, а именно Настройки клиента Modbus, Modbus Write, Modbus Read, доступны к использованию только в локальной версии REPEAT VISION.

1.  Общая структура модели#

  1. Тепловая модель дома в REPEAT VISION (мат. модель);

  2. Система управления – микроконтроллер Arduino UNO в связке с Ethernet-модулем ENC28J60, реализующий логику Modbus TCP сервера.

2.  Тепловая модель дома#

 Тепловая модель представляет собой динамическую модель разрабатываемого объекта, учитывающую требуемые эффекты и условия его эксплуатации. В зависимости от конкретных задач и требований технического задания модель может создаваться с различной степенью детализации для учёта физических процессов, протекающих в объекте и в окружающей среде. Используя тепловую модель, можно проводить расчеты и оптимизацию системы обогрева. Она позволяет проверить принятые технические решения и снизить риски перед реализацией проекта в виде натурного объекта.

 Тепловая модель, представлена на рис. 1, состоит из блоков библиотек Автоматика и Теплообмен. Основные конструкции дома выполнены тремя тепловыми массами. Центральная тепловая масса отражает усредненные параметры выбранной конструкции, а две остальные – температуры на поверхностях.

 Режим включения и отключения нагревателя осуществляется при достижении температуры воздуха в доме с 18 до 22 ̊ С. Температура воздуха на выходе из нагревателя составляет 50 ̊ С. На данные параметры и будем ориентироваться при построении системы управления тепловой модели.

Более подробно ознакомиться с данной моделью можно на странице РОСАТОМ

Thermal model of the house

Рис. 1 Тепловая модель дома#

3.  Установка блоков Modbus в REPEAT VISION#

 В контексте управления обогревом дома использование протокола Modbus TCP позволяет организовывать обмен данными между контроллером и имитационной моделью мониторинга. Настройка тепловой модели дома для связи по Modbus TCP осуществляется использованием блоков Modbus, которые находятся в библиотеке Внешние модели REPEAT VISION. Для работы с Modbus TCP предусмотрено три блока, которые приведены на рис. 2:

  1. Настройки клиента Modbus – блок настраивает связь с подключаемым Slave-устройстов, а именно такие характеристики как IP-адрес, порт, время подключения.

  2. Modbus Write – блок записывает значения из модели в регистры внешнего управляющего контроллера.

  3. Modbus Read – позволяет считывать значения с внешнего управляющего контроллера и передавать их в модель.

Modbus blocks in REPEAT VISION

Рис. 2 Блоки Modbus в REPEAT VISION#

 Поскольку в данном примере мы регулируем работу нагревателя в зависимости температуры в помещении, то реализуем следующую логику передачи сигналов. Измерение температуры фиксирует блок №34 Датчик температуры, сигнал с блока передаётся в блок №33 Modbus Write, который выполняет операцию записи значения сигнала в указанный регистр хранения. Во внешнем контроллере температура из модели обрабатывается по условию, что приходящее значение х должно находиться в границах от 18 до 22 ℃ (1) :

(1)#\[18℃\leq x\leq 22℃ \]

 Если значение температуры находится в заданных пределах или меньше 18 ℃, то контроллер передает сигнал включения, условная 1, на блок №39 Переключатель, внутреннее помещение дома продолжает нагреваться. В случае, когда значение температуры больше 22 ℃, то контроллер передает сигнал выключения, условный 0, на блок №39 Переключатель, помещение начинает охлаждаться.

 Данная логика прописывается условиями в управляющем контролере (Arduino UNO).

 Ответ на включение/отключение переключателя модель получает через блок №29 Modbus Read, из регистра ввода. Весь процесс непрерывный, с момента запуска модели на расчет, в течение заданного времени моделирования, составляющего 1 день – 86400 секунд. Итоговая модель системы управления обогревом дома представлена на рис. 3:

Model of home heating control system

Рис. 3 Модель системы управления обогревом дома#

4.  Настройка управляющего контроллера#

 В качестве внешнего управляющего контроллера выбрана плата Arduino UNO, однако для реализации Slave-устройства необходимо, чтобы микроконтроллер был подключен к сети (роутеру), поэтому подключаем дополнительный Ethernet-модуль – ENC28J60. Схема соединения Arduino UNO и ENC28J60 представлена рис. 4:

Wiring diagram of the ENC28J60 module

Рис. 4 Схема подключения модуля ENC28J60 к Arduino UNO#

 Следующим шагом необходимо написать прошивку для микроконтроллера Arduino, чтобы в нем отрабатывалась логика управления (см. раздел Установка блоков Modbus в REPEAT VISION). Заходим в среду Arduino IDE, создаем новый скетч и описываем в нем необходимые нам условия. Условно код программы можно поделить на несколько составных частей:

  1. Инициализация – указываем основные библиотеки, температурные границы, номер регистра хранения и регистра ввода.

#include <EtherCard.h>
#include <Modbus.h>
#include <ModbusIP_ENC28J60.h>

const int TEMPERATURE_HREG = 100; // Holding register 
const int CONTROL_IREG = 101; // Input register 
// Temperature limits
const int LOWER_THRESHOLD = 18;
const int UPPER_THRESHOLD = 22;
ModbusIP mb;

// State variables
int lastControlState = 0; // Tracks last control state
int lastTemperature = -100; // Initialize with impossible value

  1. Основные настройки – прописываем MAC адрес cети, в которой находится Arduino, и IP-адрес самого Arduino.

Важно

IP-адрес Arduino определяется, только когда плата подключена к модулю ENC28J60, а тот в свою очередь соединен Ethernet кабелем с роутером.

void setup() {
Serial.begin(9600);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; 
byte ip[] = { 0, 0, 0, 0 }; // IP address arduino
mb.config(mac, ip);
mb.addHreg(TEMPERATURE_HREG, 0); // Initialize with 0
mb.addIreg(CONTROL_IREG, 0); // Initialize with 0
}

  1. Расчетная часть – вводим функцию, отвечающую на Modbus запросы и описываем основную логику контроля температуры.

void loop() {
mb.task(); // Process Modbus requests
int currentTemp = mb.Hreg(TEMPERATURE_HREG);
// Only process if temperature changed
if (currentTemp != lastTemperature) {
if (currentTemp <= LOWER_THRESHOLD) {
lastControlState = 1; // Turn ON
}
else if (currentTemp >= UPPER_THRESHOLD) {
lastControlState = 0; // Turn OFF
}
// Update Modbus registers
mb.Ireg(CONTROL_IREG, lastControlState);
lastTemperature = currentTemp;
// Immediate debug output on change
Serial.print("Temperature: ");
Serial.print(currentTemp);
Serial.print(" | Control State: ");
Serial.println(lastControlState);
}
// Periodic status report
static unsigned long lastPrint = 0;
if (millis() - lastPrint > 5000) {
lastPrint = millis();
Serial.print("[Status] Temp: ");
Serial.print(mb.Hreg(TEMPERATURE_HREG));
Serial.print(" | Control: ");
Serial.println(mb.Ireg(CONTROL_IREG));
}
}

 Для удобства контроля информации в расчетной части кода предусмотрены строки выводящие изменения значений в регистрах в Монитор порта, окно терминала в Arduino IDE. После прошивки платы данным кодом, в терминале будет отображаться информация по обоим регистрам, обновляемая каждую секунду, рис. 5:

Information from

Рис. 5 Информация из Монитор порта при взаимодействии с моделью#

5.  Сборка всей системы#

 Завершающим шагом построения системы управления модели обогрева дома является сборка обеих частей в одну структуру. Подключаем ноутбук с REPEAT VISION моделью по Ethernet кабелю к сети, затем подключаем Arduino с модулем по проводу USB A-B к тому же ноутбуку. В свою очередь модуль ENC28J60 тоже должен быть подключен по Ethernet кабелю к сети. Физическая система представлена на рис. 6 ниже.

Важно

И ноутбук и Arduino должны находиться в одной сети, подключены к одному роутеру, чтобы модель могла контактировать с платой по Modbus TCP.

The physical part of the home heating control system

Рис. 6 Физическая часть системы управления обогревом дома#

 При подключении платы Arduino к ноутбуку, она автоматически включается, поскольку на нее поступает питание. Соответственно, заложенная ранее в нее прошивка начинает отрабатывать с первых же секунд включения. Переходим в REPEAT VISION и заполняем свойства блоков Modbus.

  • IP адрес Arduino UNO, указывался в коде программы.

  • Порт – по умолчанию 502.

  • Время ожидания подключения – 3000 [мс].

  • Порядок слов - прямой (Big Endian).

  • В качестве клиента указываем блок Настройки клиента Modbus.

  • Slave ID – по умолчанию 1.

  • Тип операции записи – Регистры хранения.

  • Тип данных – uint16.

  • Адрес первого регистра – 100, указанный в коде (TEMPERATURE_HREG).

  • В качестве клиента указываем блок №28 Настройки клиента Modbus.

  • Slave ID – по умолчанию 1.

  • Тип операции чтения – Регистры ввода.

  • Тип данных – uint16.

  • Адрес первого регистра – 101, указанный в коде (CONTROL_IREG).

 По завершению настроек модели, обязательно ее сохраняем и проверяем, что физическая часть и тепловая модель настроены верно. Последним шагом, подключаем Arduino к ноутбуку и запускаем модель на расчет.

6.  Результаты#

 Результаты моделирования находятся во вкладке Визуализация. На первом графике (см. рис. 7 ниже) представлены изменения температуры тепловой массы (2). График выглядит как ступенчатая лестница, при приближении заметно, что температура меняется в границах от 18 до 22℃, как и было задано по условию. На рис. 8 отображены изменения остальных тепловых масс модели обогрева дома.

 Также можно проконтролировать считывание сигналов с Arduino через Modbus Read (см. рис. 9 ниже).

Thermal mass temperature change graph (2)

Рис. 7 График изменения температуры тепловой массы (2)#

Changes in the temperature indicators of thermal masses (7), (14), (21)

Рис. 8 Изменения показателей температуры тепловых масс (7), (14), (21)#

Modbus Read output signal change

Рис. 9 Изменение выходного сигнала Modbus Read#

7.  Вывод#

 Таким образом была реализована система управления обогревом дома на базе протокола Modbus TCP с использованием микроконтроллера Arduino UNO и Ethernet-модуля ENC28J60. Проведенные испытания подтвердили работоспособность предложенного решения, включая стабильную передачу данных и корректную обработку Modbus-запросов.