4.1.4.3.2. Опросчик Modbus RTU

Модуль Modbus RTU Master работает в составе Astra.Server, который является частью системы для сбора, анализа и регулирования параметров технологического процесса.

Модуль Modbus RTU Master предназначен для последовательного опроса подчиненных станций, подключенных к COM-порту компьютера, в соответствии с протоколом Modbus over Serial Line. Astra.Server поддерживает до 64-х модулей Modbus RTU Master.
Основными функциями модуля Modbus RTU Master являются сбор данных и подача управляющих воздействий подчиненным станциям.
Работая в составе Astra.Server, модуль Modbus RTU Master опрашивает подчиненные станции, циклически отправляя им запросы. Полученные данные через интерфейсы ядра сохраняются в оперативную базу данных (ОБД). Ядро Astra.Server при получении изменившихся сигналов уведомляет о получении изменений другие модули, которые обслуживают эти сигналы, в том числе и модуль OPC DA Server. Модуль OPC DA Server, в свою очередь, передает данные клиентам, подписанным на изменившиеся сигналы.
Отправка управляющих воздействий происходит в обратной последовательности.

Модуль Modbus RTU Master отправляет запросы подчиненным устройствам по последовательным линиям связи согласно протоколу Modbus RTU. Модуль имеет возможность работать только с одной станцией одновременно. Запросив данные и получив ответ, модуль разрывает соединение с одной станцией и подключается к другой. Подчиненное устройство отвечает на запрос, адресованный именно ему. В случае если через определенный промежуток времени (Время ожидания ответа от станции) ответ модулю от подчиненной станции не приходит, то соединение считается разорванным. При отправке запроса модуль имеет возможность получать сигнал доставки сообщения.
Модуль работает только в режиме РАБОТА. В режиме РЕЗЕРВ модуль не работает, исходя из того, что модуль работает по последовательным линиям связи и при резерве тратится большой трафик и замедляется работа модуля.
При старте модуля происходит инициализация модуля:
чтение конфигурационных данных модуля;
подписка у ядра на получение уведомлений об изменениях сигналов;
проверка корректности настройки адресов сигналов принадлежащих модулю и постановка их на обслуживание;
формирование таблицы поллинга.
После вышеперечисленного модуль устанавливает соединение и начинает работу в соответствии со своими настройками.
Опрос каждой подчиненной станции ведется по таблице поллинга, сформированной при старте модуля. Формирование таблицы поллинга ведется по использованным при конфигурировании адресам в массивах данных.
В модуле реализовано расширение функций Modbus для передачи времени возникновения данных.
|
Обмен данными по протоколу Modbus
Обмен данными по протоколу Modbus основан на архитектуре Master – Slave. Master выполняет обмен данными с подчиненными станциями, реализуя функции в соответствии со спецификацией MODBUS APPLICATION PROTOCOL SPECIFICATION.
Модуль инициирует обмен данными, отправляя запрос подчиненной станции. Подчиненная станция отвечает на запрос, предоставляя запрошенные данные или выполняя команду модуля. Самостоятельно подчиненная станция данные не передаёт.
Запросы и ответы представляют собой кадры данных. Для модуля Modbus RTU Master запрос, отправляемый подчиненной станции, является исходящим кадром, а ответ, полученный от подчиненной станции – входящим кадром.
Исходящий кадр содержит код функции и данные, необходимые для выполнения функции. Входящий кадр содержит код функции и данные, полученные в результате выполнения функции. Подробное описание кадров данных модуля Modbus RTU Master приведено в разделе Журнал работы модуля.
Код функции определяет сегмент памяти подчиненной станции и действие, которое требуется выполнить в данном сегменте.
Сегменты памяти подчиненной станции
Модуль Modbus RTU Master выполняет чтение и запись данных в четыре основных сегмента памяти, а также чтение данных из файлов расширенной памяти подчиненной станции. В таблице приведены сегменты памяти подчиненной станции, тип и размер элементов сегмента, а также действия, допустимые для сегментов.
|
Сегмент
|
Описание
|
Тип и размер элемента
|
Действия
|
|
Coils
|
Дискретные выводы (Телеуправление)
|
Ячейка 1 бит
|
Запись и чтение
|
|
Discrete Inputs
|
Дискретные вводы (Телесигнализация)
|
Ячейка 1 бит
|
Чтение
|
|
Holding Registers
|
Регистры хранения (Телерегулирование)
|
Регистр 2 байта
|
Запись и чтение
|
|
Input Registers
|
Регистры ввода (Телеизмерения)
|
Регистр 2 байта
|
Чтение
|
|
Files
|
16-битные регистры, организованные в файлы, состоящие из записей произвольной длинны
|
Регистр 2 байта
|
Чтение
|
Каждый сегмент памяти содержит 65 536 элементов, адреса которых от «0» до «65535». Расширенная память содержит файлы с номерами от «1» до «65535», каждый из которых содержит от 0 до 9999 записей.

Запись одного значения
Для записи одного значения в сегмент памяти подчиненной станции используются стандартные функции протокола Modbus:
«05 (0х05) Write Single Coil» – запись значения одного дискретного вывода;
«06 (0х06) Write Single Register» – запись значения в один регистр хранения.
Чтобы использовать функцию «06 (0х06) Write Single Register» для записи значений в регистры хранения, в настройках станции параметру Используемая функция записи значений в регистры установите значение «0x06 Write Single Register».
|
Запись нескольких значений
Для записи значений в несколько регистров памяти подчиненной станции используется стандартная функция протокола Modbus «16 (0х10) Write Multiple Registers».
Чтобы использовать функцию «16 (0х10) Write Multiple Registers» для записи значений в регистры хранения, в настройках станции параметру Используемая функция записи значений в регистры установите значение «0x10 Write Multiple Registers».
|
Стратегия формирования запросов на чтение
Модуль Modbus RTU Master предоставляет выбор варианта составления таблицы поллинга, т.е. возможность регулировки максимальной длины запроса на чтение, и выбор варианта учитывать или не учитывать разрывы данных в адресном пространстве протокола.
Существуют два варианта формирования таблицы поллинга. Один из них позволяет оптимизировать количество запросов, другой объем запрашиваемых данных. Выбор варианта формирования таблицы поллинга производится при конфигурировании модуля:
По максимуму - строится карта запросов максимальной длины, не учитывая фрагментацию запрашиваемых данных – объединение в один запрос расположенных не подряд данных. Например, если есть 2 сигнала с адресом 1 и 125, они объединяются в один запрос, лишние данные при получении игнорируются (т.е. игнорируются данные с адресами от 2 до 124). Таким образом, оптимизируется количество отправляемых запросов за счет увеличения трафика (количества переданной информации);
На сплошные данные - строится карта запросов только по необходимым данным. Таким образом, оптимизируется трафик за счет потери времени. Потеря времени происходит из-за необходимости построения и отправки нескольких запросов.
Максимальная длина запроса равна 125 регистров. Длина запроса задается в параметрах конфигурации модуля.
Сигналы с типами больше одного регистра отправляются и принимаются за один запрос независимо от настроек длины запроса.
|
Опрос подчиненной станции
Опрос нескольких подчиненных станций ведется модулем по очереди, порядок станций определяется таблицей поллинга.
Модуль отправляет запросы каждой подчиненной станции последовательно, то есть отправляет станции один запрос и ждет ответа на запрос. Время между отправкой запросов задается в параметрах конфигурации.
При запуске модуля, он находится в состоянии Покоя – служебный сигнал состояния связи со станцией принимает значение 2 – соединение есть, т.е. не отправляет запросов и не ожидает ответов. Запрос может быть отправлен только из состояния Покоя. После отправки запроса модуль выходит из состояния Покоя (служебный сигнал состояния связи со станцией принимает значение 3 запрашиваются или передаются данные) и не может отправлять повторные запросы.
Когда запрос отправлен подчиненной станции, модуль переходит в состояние Ожидание ответа и запускается счетчик Времени ожидания ответа от станции. При получении ответа от подчиненной станции модуль проверяет его на ошибки. В случае ошибки Время ожидания ответа от станции истекает и выставляется состояние потеря связи со станцией качество сигнала принимает значение COMM_FAILURE. Затем модуль переходит в состояние Покоя, что позволяет ему повторить запрос.
Для того чтобы выдержать паузу между приемом и передачей предусмотрен параметр Пауза между запросами. Функция предназначена для устройств, не отвечающих на запросы без паузы, т.е. параметр является устройство зависимым.
Максимальное количество повторов запросов на чтение и максимальное количество повторов на отправку команд задается в конфигурации модуля. Когда количество повторов превышает заданное максимальное количество, то регистрируется потеря связи со станцией.
Если в ответ на запрос подчиненная станция вернула строку SLAVE_DEVICE_BUSY, то повтор отправки запроса будет произведен после Паузы опроса занятого устройства. При этом необходимо чтобы Пауза опроса занятого устройства была меньше, чем Время ожидания ответа от станции.
Модуль Modbus RTU Master динамически создает служебные сигналы для каждой станции, предназначенные для обеспечения контроля работы модуля. Через служебные сигналы созданные модулем пользователь имеет возможность наблюдать за работой модуля.
При опросе и выдаче управляющих воздействий модуль имеет возможность изменять порядок байт:
Байт в слове - включает/отключает изменение порядка следования байтов в регистре. В случае если флаг установлен, то байты регистра меняются местами.
Действие флага распространяется на все протокольные типы сигналов, кроме TS и TC.
|
Слов в сигналах ТМС, TR4 — включает/отключает изменение порядка следования слов в сигналах ТМС, TR4. В случае если флаг установлен, то слова данных меняются местами.
Если одновременно установлены флаги Слов в сигналах ТМС, TR4 и Байт в слове, то слова данных меняются местами и байты в словах меняются местами;
Слов в сигналах TMF4, TMF8, TRF4 — включает/выключает изменение порядка слов в сигналах TMF4, TMF8, TRF4. В случае если флаг установлен, изменение порядка следования слов происходит аналогично изменению порядка следования слов в сигналах ТМС, TR4. Если одновременно установлены флаги Слов в сигналах TMF4, TMF8, TRF4 и Байт в слове, то пары байтов меняются местами и в каждой паре байты меняются местами (рисунок выше).
Функция изменения порядка байт необходима для работы с определенными устройствами, которые на аппаратном уровне меняют местами байты в словах.
Пропадание связи регистрируется, если за Время ожидания ответа от станции подчиненная станция не отвечает. При отсутствии ответа от подчиненной станции происходит повтор отправки команд (запросов). По истечению максимального числа повторов связь с подчиненной станцией считается потерянной и выставляется плохое качество сигналов (COMM_FAILURE). При кратковременном пропадании связи станция успевает ответить за отведенное Количество повторов отправки команд (запросов) и качество сигналов при кратковременном пропадании связи не изменяется.

Модуль имеет возможность обрабатывать ошибки, чтобы не выставлять плохое качество данных при возникновении единичных сбоев в поведении устройства и чтобы сохранить целостную картину при резервных переходах устройств. Алгоритмы обработки ошибок следующие:
если устройство при запросе данных возвращает строку SLAVE DEVICE BUSY (запись строки происходит в поле качество сигнала), то запрос данных не повторяется, связь со станцией не меняется, модуль переходит к запросу следующих данных. Недоставленные данные будут перезапрошены в следующем цикле опроса;
если устройство при запросе данных возвращает строку ILLEGAL DATA ADDRESS (запись строки происходит в поле качество сигнала), либо другой код ошибки, то по данному запросу выставляется качество OPC_QUALITY_BAD;
если подчиненная станция не отвечает и количество повторов отправки команд (запросов) достигло максимального, то сигналам по данному запросу выставляется качество OPC_QUALITY_BAD.
Метка времени
Протокол Modbus не оперирует понятием время возникновения данных, обычно сигналам присваивается время сервера на момент получения данных.
|
Модуль Modbus RTU Master реализует расширение спецификации в части передачи метки времени. Метка времени может быть использована как для формирования в контроллере времени изменения значения, так и для формирования однозначной последовательности событий, возникающих на уровне контроллера, что невозможно в обычных условиях, так как опросчик может не успеть прочитать данные, если данные очень быстро изменяются.
Для передачи метки времени параметров вводятся дополнительные типы данных в модуле Modbus RTU Master: TM2_TIME, TMF4_TIME, TMC_TIME, TMF8_TIME.
Протокольные типы данных с меткой времени представляются логической структурой, представленной в таблице:
|
Рег./Поз.
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
8
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
|
1-4
|
Данные занимают от 1 до 4 регистров в зависимости от типа сигнала
| |||||||||||||||
|
5
|
секунды
|
миллисекунды
| ||||||||||||||
|
6
|
час
|
минуты
| ||||||||||||||
|
7
|
год
|
месяц
|
день
| |||||||||||||
Для возможности взаимодействия модуля и контроллера на стороне контроллера следует поддержать формирование описанной структуры.
Модуль, работая с сигналом, который имеет тип с меткой времени, формирует запрос на чтение с учетом типа сигнала и дополнительной структуры длиной три регистра. При получении данных метка времени, лежащая в дополнительной структуре, преобразуется к стандартному времени и записана в свойство 4 (TimeStamp) одновременно с записью значения в свойство 2 (Value).
Для получения метки времени, у подчиненной станции должен быть поддержан формат структур (таблица выше) по сигналам, которые должны содержать метку времени. Поля структуры должны заполняться на стороне подчиненной станции. В Astra.Server должны быть указаны протокольные типы данных с меткой времени для сигналов.
Отправка управляющих и регулирующих воздействий
Отправка команд телеуправления и телерегулирования выполняется, только когда пара резервируемых серверов активна и Astra.Server находится в режиме РАБОТА.
Отправка управляющих воздействий имеет больший приоритет, чем опрос станций.
|
При необходимости отправки управляющего воздействия модуль вставляет пакет, содержащий команду в начало очереди запросов на отправку подчиненной станции.
Модуль позволяет указать количество повторов отправки команд в случае неуспешной отправки. Повторы отправки команд происходят, если:
устройство вернуло в ответ исключение с кодом SLAVE DEVICE BUSY. Если в итоге запись так и не была выполнена, то состояние связи выставляется в положение отсутствует;
вышло время ожидания ответа от станции, т.е. произошел разрыв связи. После истечения максимального количества повторов отправки команд (запросов) сигналам выставляется плохое качество.
Качество данных является показателем достоверности информации. Управляющие сигналы с недостоверной информацией отправлять недопустимо. Сигналы управления плохого качества не отправляются.
Для исходящих сигналов модуль позволяет настраивать сигналы доставки управляющих и регулирующих воздействий до подчинённой станции, которые формируются по правилам:
|
Значение
|
Описание
|
|
2
|
Доставка подтверждена
|
|
1
|
Ожидание подтверждения доставки
|
|
-1
|
Нет связи со станцией
|
|
-2
|
Вышел таймаут подтверждения запроса
|
|
-1000 + код исключения
|
Устройство вернуло код исключения
|
В случае если подчиненная станция получает запрос, но не может его обработать (например, чтение несуществующей ячейки или регистра), то подчиненная станция возвращает ответ модулю с кодом ошибки.
Модуль имеет возможность отправлять все сигналы телерегулирования, при проявлении подчиненной станции на связи. При этом может произойти отправка сигнала, содержащего устаревшую информацию, из-за этого функцию необходимо использовать осторожно.
Отправка сигнала телеуправления (ТС) может проводиться в сегменте Holding Registers адресного пространства. Для возможности подачи телеуправления при конфигурировании сигнала следует указать номер бита, который будет устанавливаться в 1 при отправке телеуправления. При подаче телеуправления модуль формирует регистр для записи в устройство таким образом, что все биты, кроме указанного в настройках адреса сигнала телеуправления, будут сброшены в ноль. Например, если в адресе сигнала записано "BitPosition=(5)", то при отправке ТС в Holding Registers запишется число "00000000 00010000" или "32" в зависимости от настроек подчиненной станции.
Модуль позволяет настроить сигналы доставки, которые необходимы для подтверждения доставки исходящих сигналов до подчиненной станции и содержат результат выполнения операции. Значения сигналов доставки представлены в таблице.
Модуль позволяет использовать сегмент адресного пространства Holding Registers для передачи сигналов телеуправления и телесигнализации. Регистр адресного пространства протокола Modbus используется как набор в качестве 16 сигналов телеуправления или телесигнализации. При конфигурировании такого способа доставки сигналов в адресе сигнала указывается номер бита (BitPosition).
Так как элементы адресного пространства Holding Registers и Coils имеют тип доступа на чтение и запись данных, то имеется возможность отправлять сигналы телерегулирования (телеуправления) и получать сигналы телеизмерения (телесчет, телесигнализация) на один регистр памяти. Для этого необходимо создать два сигнала типов – входящий и исходящий. При этом не будет ошибки пересечения адресов. Запись и чтение с одного регистра применяется для проверки полученных данных подчиненной станцией и для проверки текущих значений параметров объекта телерегулирования.