Мониторинг климатических испытательных камер в реальном времени — без штатного лицензионного программного обеспечения производителя.
Climatica — программное средство для получения технологических параметров (температуры) климатических камер напрямую по сети Ethernet. Штатное ПО производителя работает нестабильно. Climatica решает эту проблему: протокол обмена данными был восстановлен методом реверс-инжиниринга (Modbus RTU, инкапсулированный поверх UDP на нестандартном порту 5001) и реализован в виде независимого клиента.
- Одновременный опрос нескольких климатических камер без взаимных задержек (многопоточность)
- Отображение текущей температуры каждой камеры в реальном времени
- Построение графика изменения температуры во времени
- Автоматическое ведение журнала измерений в формате CSV (дата/время, ID камеры, значение)
- Устойчивость к временной недоступности отдельной камеры (тайм-аут, автоматическое переподключение)
- Работа независимо от штатного ПО и лицензионного сервера производителя
| Компонент | Технология |
|---|---|
| Язык | Python 3 |
| Сетевое взаимодействие | socket (UDP), собственная реализация Modbus RTU + CRC16 |
| Многопоточность | threading, queue.Queue |
| Графический интерфейс | PySide6 (Qt6) |
| Визуализация графиков | pyqtgraph |
| Журналирование | csv |
Камеры (UDP:5001, Modbus RTU)
│
▼
Модуль сетевого взаимодействия ──► Потоки опроса (по одному на камеру)
│
▼
Потокобезопасная очередь (queue.Queue)
│
┌────┴────┐
▼ ▼
GUI Журналирование
(PySide6 + (CSV: время,
pyqtgraph) ID камеры,
температура)
git clone https://github.com/<your-username>/climatica.git
cd climatica
pip install -r requirements.txtЗависимости (requirements.txt):
PySide6
pyqtgraph
Укажите камеры в конфигурации (IP-адрес контроллера, адрес устройства Modbus):
CHAMBERS = [
{"ip": "192.168.0.45", "port": 5001, "address": 3},
{"ip": "192.168.1.106", "port": 5001, "address": 1},
{"ip": "192.168.1.252", "port": 5001, "address": 2},
]Запуск приложения:
python main.pyЖурнал измерений сохраняется в logs/climatica_<дата>.csv.
Camеры отвечают на запросы Modbus RTU (функция 0x03, чтение регистров хранения), инкапсулированные в UDP-датаграммы на порту 5001 вместо стандартного Modbus TCP (порт 502). Структура запроса:
| Байты | Поле | Значение |
|---|---|---|
| 0 | Адрес устройства | 1–247 |
| 1 | Код функции | 0x03 |
| 2–3 | Начальный регистр | 0x0064 (100) |
| 4–5 | Количество регистров | 0x0012 (18) |
| 6–7 | CRC16 (Modbus) | little-endian |
Подробное описание хода реверс-инжиниринга — в отчёте docs/report.docx.
- Мониторинг относительной влажности (поиск соответствующего регистра)
- Удалённая запись уставок (Modbus-функции
0x06/0x10) - Публикация данных по MQTT / интеграция с OPC UA
- Оповещения при выходе параметров за установленный диапазон
Проект реализован для собственного оборудования предприятия в исследовательских и учебных целях (реверс-инжиниринг протокола, к которому имеется физический и сетевой доступ). Используйте на свой страх и риск и только на оборудовании, которым вы владеете или на использование которого имеете разрешение.
AGPL-3.0