Часто в промышленной автоматизации возникают задачи простого контроля. Например собрать и отобразить на панели данные по температура с распределенной сети датчиков. Для закрытия этой базовой потребности на одном из экспериментальных проектов я написал небольшое opensourse приложение собирающее информацию по RS485 modbus с температурных модулей r4dcb08.
Использовать профессиональные modbus SCADA системы для этого — как забивать гвозди микроскопом. Сложно и дорого. Открытый исходный код позволит вносить в приложение любые требуемые корректировки, а выбранный фреймвок перенести, при необходимости, на другие операционные системы (но работу с последовательным портом придется немного переписать под другую библиотеку, для лучшей работы в windows я использовал serial_port_win32)
Что такое r4dcb08
Плата r4dcb08 это дешевое устройство для подключения восьми температурных датчиков DS18B20. Платки работают через интерфейс RS485 по протоколу modbus. Для создания сети устройств необходимо настроить в них уникальные сетевые адреса и соединить их параллельно.
Полученная сеть modbus подключаются к компьютеру через обычный преобразователь RS485 — USB.
Что такое DS18B20
Очень популярная микросхема термометра, используется во всех дешевых и не только температурных датчиках, которые применяют как в промышленности так и в автомобильной телематике.
Изготавливаются датчики в самых разных форм факторах. Вот например датчик в виде клеммы, для монтажа в автомобиле. Некоторые производители, указывают DS18B20 непосредственно в спецификации на устройство, как например, указано в спецификации спутникового трекера Fort-112.
Настройка платы для работы в modbus сети
Я не нашел документации (да собственно она не нужна, устройство очень простое), поэтому искать способ настройки r4dcb08 пришлось экспериментальным путем, написав небольшой скрипт на Python. Собственно им же, с небольшим изменением, я и менял в дальнейшем сетевые адреса плат. Адрес надо записать в 254 ячейку, ссылка на скрипт в конце статьи.
Конфигурирование приложения
Перед запуском программы необходимо задать её параметры. Настройка производится исправлением config.ini файла. Параметры minimum и maximum это значения, при выходе за заданные границы которых квадратик соответствующего датчика покраснеет.
Пример config.ini файла для плат, у которых сетевые адреса 2 и 3.
[general]
serial = COM7 <- последовательный порт
minimum = 5 <- минимум
maximum = 25 <- максимум
[2] <- сетевой адрес платы
sensor1 = aaa <- название сенсора
sensor2 = bbb
sensor3 = ccc
sensor4 = ddd
sensor5 = eee
sensor6 = fff
sensor7 = ggg
sensor8 = qqq
[3]
sensor1 = aaa
sensor2 = bbb
sensor3 = ccc
sensor4 = ddd
sensor5 = eee
sensor6 = fff
sensor7 = ggg
sensor8 = qqq
Интерфейс программы
После настройки имен датчиков они отобразятся в панели. На следующем скриншоте подключена только одна плата, с первым датчиком. Температура в градусах Цельсия, такую выдаёт непосредственно сам датчик, никаких коррекций в программе не используется.
Ссылки на проект r4dcb08 dashboard
Исходный код и описание проекта на GitHub (Flutter, Windows)
Пример работы с r4dcb08 на Python
Скрипт для смены сетевых адресов r4dcb08 (Python)