Skip to content

GerSmith/Raspberry_Pi_PLC_data_transfer

Repository files navigation

0. Постановка задачи

Расширить возможности по автоматизации технологических установок путем передачи данных от одноплатного компьютера (Raspberry Pi) к ПЛК (Delta Electronics DVP-SS2) через Modbus RTU.

meme

Например, требуется получить информацию о температурах объекта, а покупать модуль расширения для ПЛК невыгодно. Также хотелось бы узнать, а какая погода будет через час и оповестить об этом ПЛК. На помощь приходить Raspberry Pi (или любой другой одноплатник): по 1-wire подключаем датчики ds18b20, опрашиваем API любимого сайта с погодой или же просто в наглую парсим его, встраиваемся в какое-то устройство по внутренним шинам данных - I2C, UART и забираем нужные нам данные. Так или иначе если информация попала в Raspberry - то мы легко её передадим в ПЛК для работы автоматики.

1. Схема: условная, но не принципиальная

problem_statement

2. Реализация программы коммуникации для ПЛК

Проект программы для ПЛК (в WPLSoft) в файле: modbus_slave.dvp

Ниже настройки ПЛК для коммуникации по Modbus RTU, доступные через интерфейс WPLSoft:

Wizzard -> Program Example Generator -> Communication Programm

comm_wizard

В коде программы это будет выглядеть так:

wpl_comm_project

3. Где находятся адреса регистров в которые будут попадать данные?

В документации на ПЛК. Здесь важно помнить что в столбце Address данные в HEX формате, т.е. доступная область D-регистров начинается с 1000h (4096 в десятичном представлении).

plc_device_addr

4. Реализация программы для Raspberry Pi

Для примера мы будем записывать значения с какими-то данными (например полученная одноплатником температура с датчиков) в регистры 4096-4100 с каким-то интервалом (например 5 секунд). Регистры 4096-4100 соответсвтуют D0-D4 (см. картинку и пояснения выше).

4.1 Какие библиотеки использовать?

Для промышленных решений: PyModbus (синхронный) + asyncio для сложных задач

Для быстрого прототипирования: MinimalModbus

Выбираем PyModbus если:

  • Нужна полная реализация протокола Modbus;
  • Требуется поддержка TCP и других расширенных функций;
  • Планируется масштабирование проекта;
  • Необходима асинхронная работа.

Установка PyModbus:

pip install pymodbus

Установка MinimalModbus:

pip install minimalmodbus

4.2 Что делает скрипт?

Скрипт ds18b20_modbus.py опрашивает подключенные к Raspberry датчики DS18B20 каждые 5 секунд и полученное значение температуры в градусах Цельсия отправляет по Modbus RTU в ПЛК.

Скрипт использует библиотеку MinimalModbus

Запуск скрипта:

python ds18b20_modbus.py

Пояснения к работе скрипта:

  • Скрипт передачи данных необходимо запускать на Raspberry;
  • Поскольку мы используем преобразователь USB в RS485 то порт Modbus будет /dev/ttyUSB0;
  • Класс ModbusRTUWriter - отправляет данные в ПЛК через Modbus RTU
  • Температура передается как целое число, умноженное на 10 (для сохранения одного знака после запятой);
  • Все операции логируются в файл temperature_monitor.log

Видео демонстрация стенда с температурами: тыц

Дополнительно

A. Проверка передачи данных по MODBUS RTU от ПК к ПЛК

Подключить преобразователь USB/RS485 и настроить связь (параметры такие же как и в проекте ПЛК). Если обмен пакетами не просиходит - переверни A и B.

Для теста связи я использую Modbus Poll, для других приложений - аналогично

mbpoll_settings

Ссылка на видео: тыц

B. Проект программы для ПЛК в ISPSoft

Проект программы для ПЛК (в ISPSoft) в архиве: modbus_ISPSoft 3.19.zip

ISPSoft_settings

C. Передача данных о погоде

Получим данные о погоде в любимом городе через wttr.in и отправим эти данные по Modbus RTU в ПЛК

Скрипт weather_modbus.py будет автоматически получать температуру каждые 5 минут и отправлять ее в указанный регистр ПЛК.

Особенности скрипта:

  • Класс WeatherFetcher - получает температуру из wttr.in для указанного города;
  • Интервал обновления - 5 минут (300 секунд);
  • Логирование - все операции записываются в файл weather_modbus.log;

Установка зависимостей:

pip install minimalmodbus requests

Запуск:

python weather_modbus.py

Настройки которые можно изменить:

  • WEATHER_REGISTER - номер регистра в ПЛК
  • modbus_config - параметры Modbus связи
  • Интервал обновления в time.sleep()
  • Город в WeatherFetcher("Kurgan")

Ссылка на видео: тыц

About

Расширяем возможности по автоматизации технологических установок путем передачи данных от одноплатного компьютера (Raspberry Pi) к ПЛК (Delta Electronics DVP-SS2) через Modbus RTU.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages