<< Click to Display Table of Contents >> Navigation: Проект в MasterSCADA 4D > Дерево системы > Получение и отправка данных > Стандартные протоколы > Modbus > Рекомендации по настройке протокола Modbus > Создание каналов Modbus |
Протокол Modbus предоставляет возможность чтения и записи в определенные участки памяти контроллера.
Для конфигурируемых устройств (измерители, регуляторы, анализаторы качества электроэнергии, модули ввода-вывода) характерен статический набор адресов, к которым можно обратиться. Этот набор адресов обычно описан в документации к устройству.
В случае ПЛК карта адресов создается самим разработчиком проекта контроллера. Некоторые производители (например, Segnetics) предоставляют специальные механизмы для экспорта созданных переменных, но это исключение из правил.
Перед созданием каналов в протоколе необходимо получить карту переменных опрашиваемого контроллера- либо из документации в случае конфигурируемого устройства, либо из проекта в случае ПЛК.
В протоколе Modbus существуют четыре основных региона памяти: COILS, DISCRETE INPUTS, HOLDING REGISTERS, INPUT REGISTERS. В документации устройства могут быть указаны как названия этих регионов, так и номера функций, соответствующих этим регионам. Ниже приведена таблица, показывающая соответствие каждого региона определенной функции:
Тип регион |
Тип значения региона |
Номер функции |
|
---|---|---|---|
Чтение |
Запись |
||
COILS |
Bool |
1 (0x01) |
5 (0x05) - одиночная; 15 (0x0F) - групповая |
DISCRETE_INPUTS |
Bool |
2 (0x02) |
|
HOLDING_REGISTERS |
Word |
3 (0x03) |
6 (0x06) - одиночная; 16 (0x10) - групповая |
INPUT_REGISTERS |
Word |
4 (0x04) |
|
Таким образом, если в документации указано, что переменную необходимо читать функцией 0x03, то в драйвере нужно установить регион HOLDING REGISTERS.
Иногда в документации к прибору не указываются явно названия регионов или функций, а адрес представлен в формате - 40001, 30003 и т.п. Это означает, что производитель предоставил данные по регистрам в стандартном формате. Преобразовать его к виду, требуемому в драйвере, очень просто.
При стандартной адресации существует четыре области памяти:
1.Дискретные флаги (COILS): адреса 00001...09999, функция чтения - 1, функция записи - 15.
2.Дискретные входы (DISCRETE INPUTS): адреса 10001...19999, функция чтения - 2.
3.Входные регистры (INPUT REGISTERS): адреса 30001...39999, функция чтения - 4.
4.Хранимые регистры (HOLDING REGISTERS): адреса 40001...49999, функция чтения - 3, функция записи - 16.
Для преобразования стандартного адреса Modbus к современному представлению адресов необходимо выполнить следующее:
1.По первой цифре стандартного адреса определить регион, к которому принадлежит данный регистр.
2.Исключить первую цифру из стандартного адреса и вычесть единицу.
Например, если стандартный адрес равен 40013, то в протоколе это будет канал региона HOLDING REGISTERS, а адрес регистра будет равен 12.
Помимо адреса, переменная в контроллере должна иметь определенный тип данных. В случае регионов COILS или DISCRETE INPUT тип данных всегда BOOL. С регионами INPUT REGISTERS и HOLDING REGISTERS все сложнее. Согласно стандарту, один регистр в этих регионах равен двум байтам. То есть в нем можно разместить либо число INT16 или UINT16 (16-битное знаковое или беззнаковое целое). Однако можно использовать два и более подряд идущих регистра и размещать в них типы большей размерности - REAL, INT32, UINT32, строковые переменные. При этом разные среды разработки могут наименовать одни и те же типы по-разному. Например, REAL и FLOAT считаются эквивалентными, также как WORD и UINT16. Ниже представлена таблица типов данных, поддерживаемых драйвером ОРС сервера, их размеры в байтах и регистрах, а также варианты наименований:
Наименование в протоколе |
Варианты названий |
Длина в байтах |
Длина в регистрах |
INT |
INT16 |
2 |
1 |
WORD |
UINT16 |
2 |
1 |
DINT |
INT32 |
4 |
2 |
DWROD |
UINT32 |
4 |
2 |
REAL |
FLOAT |
4 |
2 |
LREAL |
DOUBLE |
8 |
4 |
LINT |
INT64 |
8 |
4 |
LWORD |
UINT64 |
8 |
4 |
STRING |
STRING |
1-300 |
1-125 |
Давайте подробно рассмотрим BOOL и STRING.
Для BOOL, когда он хранится в регионе INPUT REGISTERS или HOLDING REGISTERS, возможны два варианта:
1.Весь регистр отведен под один бит. Если в регистре 0, то это значение FALSE, иначе TRUE. Этот случай довольно редкий.
2.В регистре расположена маска битов. То есть каждый бит 16-битного (или 32-битного, если он расположен в двух регистрах) слова отвечает за состояние конкретной переменной. В настоящий момент протокол MasterSCADA 4D не способен извлекать определенные биты из таких слов, поэтому их необходимо читать целиком. После этого можно извлекать нужные биты непосредственно в дереве объектов, например, с помощью ST можно обратиться к нужному биту через точку, ФБ GetBit и т. д.
Что касается STRING, количество регистров зависит от длины самой строки, которую резервирует производитель (или разработчик проекта). Кодировка строки также играет роль. В настоящее время протокол поддерживает три варианта кодировки:
•ASCII - каждый байт строки представляет собой символ ASCII. То есть в одном регистре помещается два байта строки. Байт со значением 0 интерпретируется как конец строки (так называемые нуль-терминированные строки).
•HEX - значения байтов выводятся в виде шестнадцатеричной строки. В одном регистре помещается 4 символа HEX.
•Unicode - строка в кодировке UNICODE. В одном регистре задается 1 символ.
При настройке канала типа STRING необходимо указать тип кодировки и длину строки в символах.
Для добавления канала в устройство Modbus через контекстное меню добавьте Базовый канал:
По умолчанию добавленный канал имеет Адрес 0 региона HOLDING REGISTERS и тип данных INT:
Для настройки канала следует выполнить следующие шаги:
1.Определите подходящий Регион памяти (например, HOLDING REGISTERS).
2.Укажите Адрес переменной в десятичном формате.
3.Выберите соответствующий Тип данных для канала в соответствии с переменной в контроллере (например, BOOL, STRING и т. д.).
4.Если канал будет использоваться для чтения и записи, установите Тип доступа InOut.
Важно! Следует помнить, что в настройках канала адрес задается в десятичном формате, но многие производители представляют данные в шестнадцатеричном формате. Для упрощения ввода можно воспользоваться окном групповых операций.
Смотрите также:
Диагностика работы с устройством Modbus