Суббота, 20.04.2024, 15:15
| RSS
Поиск
Главная |
Защита, контроль, управление
Форма входа
Логин:
Пароль:

Меню

Авторские проекты

Статьи

Raspberry Pi

Полезная информация

Обратная связь

Ссылки

Форум

Чат

Канал YouTube

Группа в Facebook


Календарь
«  Октябрь 2015  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031

Наш опрос

Ссылки


Яндекс.Метрика





.
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Raspberry Pi для домашней автоматизации. Modbus RTU

Raspberry Pi для домашней автоматизации. Modbus RTU

Наш канал в YouTube


Modbus RTU

С момента своего создания, протокол передачи данных Modbus является фактически стандартом в системах передачи данных. Наверное, нет смысла подробно рассматривать здесь структуру этого протокола, он и так уже очень подробно описан в различных источниках. Остановимся только на ключевых моментах.

Существует  два режима работы Modbus, применяемых для интерфейсов RS232/ RS485 – это Modbus ASCII и Modbus RTU. В Modbus ASCII режима каждый байт сообщения передается как два ASCII символа. Для передачи применяются ASCII-символы 0-9, A-F.

Достоинство этого режима заключается в том, что время между передачей символов может быть до 1 секунды без возникновения ошибок при передаче. Похожий принцип передачи данных с некоторыми изменениями и дополнениями применяется для подключения Raspberry Pi к контроллерам по интерфейсу RS485 в нашей системе домашней автоматизации.

Однако, режим протокола Modbus ASCII не так популярен и распространен, как другой режим этого протокола – Modbus RTU. Именно Modbus RTU используется в подавляющем большинстве промышленных и бытовых контроллерных устройств. Поэтому, с целью дальнейшей популяризации нашей системы домашней автоматизации и применения в ней готовых контроллеров, поддерживающих стандартные протоколы, было решено постепенно перевести работу сервера Raspberry Pi на режим работы Modbus RTU

В RTU режиме сообщение начинается с интервала, равного времени передачи 3,5 символов при заданной скорости передачи данных. Вслед за последним передаваемым символом также следует интервал продолжительностью не менее 3,5 символов. Новое сообщение начинается только после этого интервала. Другими словами, в режиме RTU сообщения разделяются между собой временными интервалами тишины. Типичный вид (фрейм) сообщения Modbus RTU показан на рис.1.

 

фрейм Modbus RTU

Рис.1

 

В первом поле передается адрес устройства. Т.к. адрес занимает один байт, то значения этого поля находятся в диапазоне значений 1-256.

Второе поле – код функции. Для режима RTU принята спецификация номера каждой функции. Например, 02 – это получение дискретных значений входов, а 03 – чтение значений регистров.

Третье это поле – передаваемые данные. Количество байт этого поля может иметь произвольное значение.

Четвертое поле – это два байта контрольной суммы (CRC-16). Контрольная сумма необходима для проверки целостности и правильности передаваемых данных. Контрольная сумма является результатом вычисления Cyclical Redundancy Check (CRC) сделанного над содержанием сообщения (адреса, кода функции, данных) и передается в этом сообщении младшим байтом вперед.

Теперь, когда мы разобрались, что представляет собой режим Modbus RTU, приступим к его реализации на Raspberry Pi. Для этого воспользуемся готовым пакетом minimalmodbus. Скачиваем архив:

wget https://pypi.python.org/packages/source/M/MinimalModbus/MinimalModbus-0.7.tar.gz

Распаковываем архив в каталог:

tar xvzf MinimalModbus-0.7.tar.gz

Переходим в каталог с распакованным архивом:

cd MinimalModbus-0.7

И наконец устанавливаем minimalmodbus:

sudo python setup.py install  или sudo python3 setup.py install

Далее рассмотрим скрипт на Python, посредством которого minimalmodbus будет включаться в работу (рис.2).

 

Modbus RTU Minimalmodbus

Рис.2

 

Скрипт оформлен в виде макроса, вызываемого с html страницы. Но никто не запрещает использовать его и в «фоновом» режиме – т.е. без загрузки html страницы в браузер.

Надеюсь, что из комментариев данного скрипта вам понятен принцип его работы. После инициализации по команде с html страницы вызывается макрос getData, с помощь которого считываются данные регистров, состояния дискретных входов и устанавливаются уровни выходов подчиненного устройства. Полученные данные возвращается на html страницу для их визуализации. Пример тестовой страницы для получения данных со скрипта getData приведен на рис.3

 

Modbus RTU Python

Рис.3

 

P.S. В настоящее время все контроллеры, работающие по интерфейсу RS485 в системе домашней автоматизации поддерживают режим Modbus RTU.




Категория: | Просмотров: 14989 | Добавил: Admin | Теги: Modbus RTU, Modbus ASCII, RS485 Raspberry Pi | Рейтинг: 5.0/2 |
Всего комментариев: 4


2 Admin  
0
Цитата
1)Как Вы узнали, что есть ModBus для Малины?

Абсолютно так же, как узнал что существует Raspberry Pi, webiopi и все остальное smile

Цитата
2)Где искать файл, если команда wget говорит, что нет pypi.python.org или файл не найден 404?

А вот на этот вопрос затрудняюсь ответить, пока ещё не сталкивался с такой проблемой. Если у кого-то возникала подобная ситуация, просьба сообщить.

1 123ksn  
Знание принципов легко компенсирует незнание деталей (с)
Дьявол прячется в мелочах (с)
Вопросы:
1)Как Вы узнали, что есть ModBus для Малины?
2)Где искать файл, если команда wget говорит, что нет pypi.python.org или файл не найден 404?

3 indarik  
2)Где искать файл, если команда wget говорит, что нет pypi.python.org или файл не найден 404?

Скачайте пакет к себе на комп. Потом скопируйте в raspberry и установите.
https://pypi.python.org/pypi/MinimalModbus/#downloads

4 123ksn  
Indarik, спасибо. Я уже нашел и сделал. Ваш совет не полный, поэтому замечу, что если скачали архив НЕ командой wget из Raspberry, а потом tar, а скопировали из Windows, используя winscp, то стоило указать 1)в какое место на Малине и 2)Какие подать команды.
В какое место копировать я не знаю, а вот прежде чем дать команду на выполнение файла setup.sh (sudo ./setup.sh), надо сделать его выполняемым командой chmod +x setup.sh
Мне показалось, что Вы с Линуксом на "ты". Не могли бы Вы рассказать как скопировать всё что надо в Windows, а потом запустить установку WebIOPi и других программ, о которых пишет админ, на Малине без доступа в интернет. Гугл подсказал, что такая возможность есть и даже есть подсказки на эту тему, но у меня не хватает знаний, что бы ими воспользоваться. wacko





T2M © 2024
Сайт управляется системой uCoz