Стандартные функции протокола Modbus, его достоинства и недостатки
Modbus – это открытый коммуникационный протокол, который основан на архитектуре ведущий-ведомый.
К стандартным функциям протокола Modbus относятся:
- Чтение данных. Для чтения значений используются функции с кодами 1-4: 1 - чтение значений из нескольких регистров флагов; 2 - чтение значений из нескольких дискретных входов; 3 - чтение значений из нескольких регистров хранения; 4 - чтение значений из нескольких регистров ввода.
- Запись одного значения. Данная команда состоит из адреса элемента и устанавливаемого значения, в данном случае используются функции с кодами 5 и 6: 5 - запись значения одного флага; 6 - запись значения в один регистр хранения.
- Запись нескольких значений. В данном случае используются функции с кодами 15 и 16: 15 - запись значений в несколько регистров флагов; 16 - запись значений в несколько регистров хранения.
- Изменение регистров. В данном случае используется функция с кодом 22 - запись в один регистр с использованием масок “и” и “или”.
- Чтение с записью. В данном случае используется функция с кодом 23 - запись/чтение нескольких регистров.
- Очереди данных. В данном случае используется функция с кодом 24 - чтение данных из очереди. Данная функция предназначена для получения 16-битных слов из очереди, которая организуется по принципу первым пришел - первым ушел.
- Доступ к файлам. В данном случае используются функции с кодами 20 и 21: 20 - чтение из файла; 21 - запись в файл.
- Диагностика. В данном случае используются функции с кодами 7, 8, 11, 12, 17: 7 - чтение сигналов состояния; 8 - диагностика: 11 - чтение счетчика событий; 12 - чтение журнала событий; 17 - чтение информации об устройстве.
- Encapsulated Interface Transport, использующая функцию с кодом 43. Данная функция предназначена для передачи данных в произвольном формате от ведущего к ведомому.
Главное достоинство стандарта Modbus заключается в его открытости и массовости. В настоящее время производится большое количество типов и моделей датчиков, модулей обработки, исполнительных механизмов и т.п., большинство из которых имеют программные драйверы для работы с Modbus - сетями. Стандарт Modbus был разработан в 1979 году, учитывались потребности и вычислительные возможности того периода, поэтому многие актуальные вопросы для современных промышленных сетей не были учтены.
Базовые принципы работы Modbus
В Modbus используется архитектура Master-Slave. В соответствии с данным подходом в сети выделяется клиентское устройство, периодически отправляющее запросы на серверные устройства с целью записи и чтения их параметров. Все запросы могут инициироваться только клиентским устройством: передача сообщений от серверных устройств без предварительного опроса со стороны клиента не предусмотрена.
Протокол Modbus включает в себя постоянную часть - PDU, которая является общей для реализаций протокола и состоящей из кода функции и данных. Помимо этого, возможно несколько специфических полей, различающихся в зависимости от физического уровня сети, в большинстве случаев такими полями являются контрольная сумма для выявления ошибок и адрес серверного устройства.
Адресом серверного устройства определяется то, по какому адресу необходимо отправить запрос клиента. Он может принимать значение от 1 до 247. Адрес 0 предназначен для широковещательной передачи данных от клиента всем серверным устройствам, адреса 248 - 255 считаются зарезервированными.
Кодом функции определяется то, какое действие необходимо выполнить серверному устройству. коды функции лежат в диапазоне от 1 до 255, коды от 128 до 255 зарезервированы для сообщений об ошибках, а код 0 не используется.
Данные. Данные предназначены для выполнения выбранной функции на серверном устройстве. В большинстве случаев ими являются адреса регистров для чтения или записи, их количество и т. п. Формат и длина поля зависят от кода функции. Некоторые из них не требуют передачи данных.
Контрольная сумма. В контрольной сумме содержится количество проверок целостности пакета, рассчитанное при помощи специального алгоритма. В качестве алгоритмов могут использоваться CRC-16 или LRC-8.
LRC – это 8-ми битовое поле, в котором каждое новое прибавление символа, приводящее к результату более 255, приводит к простому перескакиванию через 0.