Создание каналов Modbus

<< Click to Display Table of Contents >>

Navigation:  Проект в MasterSCADA 4D > Дерево системы > Получение и отправка данных > Стандартные протоколы > Modbus > Рекомендации по настройке протокола 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 через контекстное меню добавьте Базовый канал:

sozdanie_kanalov_Modbus

По умолчанию добавленный канал имеет Адрес 0 региона HOLDING REGISTERS и тип данных INT:

sozdanie_kanalov_Modbus_1

Для настройки канала следует выполнить следующие шаги:

1.Определите подходящий Регион памяти (например, HOLDING REGISTERS).

2.Укажите Адрес переменной в десятичном формате.

3.Выберите соответствующий Тип данных для канала в соответствии с переменной в контроллере (например, BOOL, STRING и т. д.).

4.Если канал будет использоваться для чтения и записи, установите Тип доступа InOut.

Важно! Следует помнить, что в настройках канала адрес задается в десятичном формате, но многие производители представляют данные в шестнадцатеричном формате. Для упрощения ввода можно воспользоваться окном групповых операций.

Смотрите также: