Настройка и использование протокола Modbus в KLogic

Настройка и использование протокола Modbus в KLogic

Modbus – открытый коммуникационный протокол, основанный на архитектуре ведущий-ведомый (master-slave). Широко применяется в промышленности для организации связи между электронными устройствами. Может использоваться для передачи данных через последовательные линии связи RS-485, RS-422, RS-232, и сети TCP/IP (Modbus TCP).

Отличительной особенностью реализации протокола Modbus в системе программирования «KLogic» является ее универсальность, позволяющая опросить подавляющее большинство устройств с данным протоколом. К основным преимуществам реализации относятся:

  • поддержка всех стандартных разновидностей протокола: RTU, ASCII и TCP;
  • возможность опроса RTU и ASCII устройств через преобразователи COM-Ethernet по IP адресу и номеру TCP порта преобразователя;
  • гибкая настройка параметров связи: таймаут по обмену, множитель к стандартному межбайтовому интервалу, число повторных запросов при ошибках и т.д.;
  • автоматическая группировка запросов (чтение подряд идущих регистров одним запросом) на основе заданного размера буфера устройства;
  • поддержка стандартных функций протокола:
    • чтение данных: 1 (0x01) – Read Coil Status, 2 (0x02) – Read Discrete Inputs, 3 (0x03) – Read Holding Registers, 4 (0x04) – Read Input Registers;
    • запись одного значения: 5 (0x05) – Force Single Coil, 6 (0x06) – Preset Single Register;
    • запись нескольких значений: 15 (0x0F) – Force Multiple Coils, 16 (0x10) – Preset Multiple Registers;
  • поддержка стандартных типов данных:
    • 1 регистр: BOOL, BYTE, WORD, SINT, INT;
    • 2 регистра: DWORD, DINT, REAL;
  • чтение архивов, поддержка нестандартных функций и реализаций типов данных для устройств, включенных в поставку системы программирования «KLogic»;
  • возможность выбора (в т.ч. для группы или отдельно взятого тега) последовательности байт регистра, последовательности регистров (для типов данных, занимающих 2 регистра);
  • возможность наложения маски на вычитанное целочисленное значение, проверки состояния отдельно взятого бита в значении;
  • возможность применения к вычитанному значению множителя;
  • управление частотой опроса отдельных регистров;
  • асинхронная запись значений регистров, в т.ч. в момент опроса другого устройства на порту, с возможностью последующего их чтения через заданный интервал;
  • контроль стандартных ошибок протокола, проверка нумерации транзакций для TCP устройств, адреса устройства и номера функции в ответном сообщении.

Настройка обмена с Modbus устройством в системе программирования «KLogic» заключается в добавлении устройства в конфигурацию контроллера и собственно настройки параметров связи с ним. В поставке системы программирования «KLogic» присутствует поддержка большого числа Modbus устройств, в т.ч. приборов учета с возможностью вычитки их архивов. Однако очень часто возникает ситуация, когда поддержка устройства отсутствует. Для добавления нового устройства в систему программирования «KLogic» силами пользователя существует универсальный конвертер карт адресов из книги Excel во внутренние файлы описания устройств.

 Первым делом необходимо заполнить карту адресов устройства в Excel, взяв за основу шаблон для протокола Modbus.

Заполненный шаблон для протокола Modbus

 

Карта адресов состоит из двух блоков данных – блок общих свойств модуля и блок свойств тегов.

Блок общих свойств модуля представляет собой вертикальный список, слева от которого располагаются идентификаторы полей. Признаком начала такого блока считается ячейка с текстом «common_setts», расположенная первой в столбце идентификаторов, признаком конца блока является первая встреченная пустая строка.

Красным цветом в таблицах выделены поля, требующие обязательного заполнения (по крайней мере, первой строки, если идентификатор поддерживает наследование значений).

Таблица 1

Идентификаторы блока общих свойств

Идентификатор

Значение по умолчанию

Тип данных

Наследование

Примечание

1

MOD_ID

 

WORD

Неприменимо

Числовой идентификатор модуля, уникальный для всех устройств KLogic

2

MOD_GRNAME

Пустая строка

STRING

Неприменимо

Наименование группы модулей

3

MOD_NAME

 

STRING

Неприменимо

Наименование модуля

4

MOD_CFGNAME

Xls

STRING

Неприменимо

Наименования модуля в бинарной конфигурации KLogic

5

MOD_DESCR

Пустая строка

STRING

Неприменимо

Описание модуля

Числовые идентификаторы пользовательских модулей не должны совпадать с идентификаторами модулей, входящих в базовую поставку KLogic! Поэтому для всех пользовательских модулей необходимо использовать сквозную нумерацию, начиная с 60001.

Блок свойств тегов представляет собой таблицу, в шапке которой располагаются идентификаторы полей. Признаком начала такого блока считается ячейка с текстом «import_col_name», расположенная первой в строке идентификаторов, признаком конца блока является первая встреченная пустая строка или строка, содержащая ячейку с идентификатором «end_import_data_block», и первый пустой столбец.

Таблица 2

Идентификаторы блока тегов

Идентификатор

Значение по умолчанию

Тип данных / допустимые значения

Наследование

Примечание

1

TAG_GROUP

Пустая строка

STRING

Да

Наименование группы тегов; поскольку наследование для групп разрешено, это означает, что все теги вне групп должны быть расположены в карте адресов первыми

2

TAG_CIPHER

 

STRING

Нет

Шифр тега

3

TAG_DESCRIPTION

Пустая строка

STRING

Нет

Наименование тега

4

TAG_MEASURE

Пустая строка

STRING

Нет

Единица измерения тега

5

MB_TRG

 

BOOL, BYTE, WORD, DWORD, SINT, INT, DINT, USINT, UINT, UDINT, REAL

Да

Тип данных регистра Modbus (именно регистра, а не тега, который необходимо получить в результате)

6

MB_FUNC

Пустая строка

1…4

Да

Функция чтения

7

MB_ADR

Пустая строка

WORD

Да

Адрес для чтения

8

MB_FWR

Пустая строка

5, 6, 15, 16

Да

Функция записи

9

MB_ADRWR

Пустая строка

WORD

Да

Адрес для записи

10

MB_MSK

-1

-1…31

Нет

Номер бита для регистров с типом данных, отличным от FLOAT; значение -1 соответствует регистру целиком

11

MB_K

1

FLOAT

Нет

Множитель

12

MB_CYCLE

0

WORD

Нет

Число пропущенных циклов

13

MB_RW

R

R, W, RW

Да

 Доступ к регистру; данный идентификатор определяет, какой или какие из наборов номеров функций и адресов регистров попадут при экспорте в описание тега

14

MB_BRG

Обратный

Обратный, Прямой

Да

Порядок байт регистра

15

MB_WRG

Обратный

Обратный, Прямой

Да

Порядок байт регистра

 

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

Конвертер автоматически определяет типы тегов, которые получатся в результате конвертирования. К примеру, после применения множителя к регистру с типом данных WORD  на выходе получится вещественный тег. Аналогично, при выборе любого бита из регистра с типом данных WORD на выходе получится дискретный тег.

Если функция чтения или функция записи не задана, ее номер будут определен автоматически по значениям идентификаторов «MB_RW» и «MB_TRG» в соответствии со стандартом Modbus. Тем не менее, идентификаторы «MB_FUNC» и «MB_FWR» предполагают наследование значений, поэтому, если в какой-то строке номер функции был задан явно, в последующих строках будет осуществляться наследование введенного номера функции, либо он может быть вновь переопределен явно.

Если адрес для записи не указан, а доступ к регистру подразумевает запись значений, будет использован адрес для чтения.

Не все производители оборудования строго следуют стандарту Modbus, потому значения в регистрах могут иметь неверный порядок байт и слов (порядок слов имеет значение только для типов данных, занимающих более одного регистра – DWORD, DINT и FLOAT). Если после завершения настройки связи с устройством значения тегов окажутся неверными, попробуйте изменить порядок слов и/или байт регистра.

Число пропущенных циклов определяет, с какой частотой будет запрашиваться значение конкретного тега. К примеру, число пропущенных циклов, равное 1, означает, что значение будет запрашиваться через раз.

Следует помнить, что именно значение идентификатора «MB_RW» определяет, какой или какие из наборов номеров функций и адресов регистров попадут при экспорте в описание тега. Например, если значение идентификатора «MB_RW» равно «W», то при экспорте будут учтены только функция записи и адрес для записи.

После окончания заполнения карты адресов ее необходимо сохранить и запустить конвертер.

 Общий вид конвертера

Для начала работы с конвертером необходимо выбрать книгу Excel с картой адресов, нажав на кнопку «Открыть книгу Excel». При возникновении ошибки открытия книги Excel будет выдано сообщение об ошибке:

Сообщение об ошибке открытия файла

 

После открытия книги Excel будет подгружен список наименований ее листов:

Загруженная книга Excel

Необходимо выбрать лист, содержащий корректно заполненную карту адресов Modbus, после чего начнется автоматический разбор содержимого листа:

Разбор книги Excel

В логе работы конвертера отображается подробный отчет о разборе содержимого листа, перечисляются ошибки разбора, если они присутствуют:

Ошибки при разборе листа книги Excel

При успешном разборе листа Excel заполняются таблицы общих атрибутов модуля KLogic и атрибутов тегов, доступные для просмотра. Эти таблицы содержат обработанные данные, загруженные с листа Excel, по которым можно проверить корректность заполнения исходной карты адресов.

Для осуществления экспорта необходимо нажать кнопку «Экспортировать в IO». После окончания процедуры экспорта будет выведено сообщение:

Сообщение о завершении конвертации

Полученный файл необходимо скопировать в папку Bin\KLData, где установлен KLogic. После этого запустить систему программирования «KLogic», добавить в конфигурацию контроллера протокол «[UNI] Modbus (RTU, TCP, ASCII)» из группы «Протокол ModBus», в протокол добавить новое устройство (имя и группа определяются атрибутами табл. 1).

Настройки протокола Modbus

Настройки протокола содержат следующие пункты:

  1. Период выполнения задачи – стандартная настройка для всех протоколов KLogic, определяет, как часто будут опрашиваться модули, добавленные в протокол. При этом следует помнить, что модули в рамках одного протокола опрашиваются последовательно.
  2. Тип коммуникационной связи – определяет тип связи со всеми модулями в пределах протокола. Для RTU и ASCII следует установить 0 (COM порт), для TCP, а также RTU или ASCII через преобразователь COM-Ethernet (опрос через сокет) нужно установить 1 (Ethernet).

Настройки для типа связи 0 (COM порт):

  1. Номер СОМ порта – определяет номер COM порта контроллера, через который будет производиться опрос модулей.
  2. Скорость обмена – определяет скорость обмена по выбранному порту. См. всплывающую подсказку для выбора конкретной скорости.
  3. Число бит данных, Контроль байтовой посылки, Число стоп-бит – определяют параметры выбранного порта.
  4. Таймаут по обмену – определяет таймаут, по истечению которого будет считаться, что связь с модулем потеряна.
  5. Множитель – определяет множитель к стандартному межбайтовому таймауту для выбранной скорости обмена. На длинных и зашумленных линиях связи, а также при наличии ошибок, рекомендуется задать значение, превышающее 1.
  6. Число повторных транзакций – определяет число повторных запросов, если запрос оказался неудачным (нет ответа или ошибка). На длинных и зашумленных линиях связи, а также при наличии ошибок, рекомендуется задать значение, превышающее 0.

Настройки для типа связи 1 (Ethernet):

  1. IP адрес – IP адрес преобразователя COM-Ethernet. При опросе устройств по Modbus TCP установить значение 0.0.0.0.
  2. Номер порта – номер TCP порта преобразователя COM-Ethernet. При опросе устройств по Modbus TCP установить значение 0.
  3. Тайм-аут по присоединению – таймаут по присоединению к преобразователю COM-Ethernet.
  4. Закрывать сокет – настройка, определяющая, будет ли закрываться TCP сокет с преобразователем COM-Ethernet или устройствами Modbus TCP после полного цикла опроса устройств, или нет. В подавляющем большинстве случаев закрывать сокет не нужно.
  5. Опрос тегов после команды – определяет, необходимо ли запрашивать все теги устройства после выполнения команды записи один из его тегов.
  6. Таймаут перед запросом – задержка в миллисекундах перед запросом всех тегов устройства после выполнения команды записи.

Настройки модуля Modbus

 

Настройки модуля содержат следующие пункты (часть из них может отсутствовать):

  1. Адрес устройства – определяет адрес устройства в сети Modbus.
  2. Тип протокола – определяет тип протокола устройства (0 – RTU, 1 – TCP, 2 – ASCII).
  3. Тайм-аут между транзакциями – время в миллисекундах между двумя последовательными транзакциями в сети Modbus.
  4. Число регистров – максимальное число запрашиваемых регистров в одной транзакции. Данный параметр напрямую влияет на скорость опроса, однако слишком большие значения могут привести к ошибкам при опросе. Для корректного заполнения этого параметра необходимо узнать размер буфера устройства, либо подобрать его эмпирически.
  5. IP-адрес устройства – IP адрес устройства Modbus TCP.
  6. Номер порта – номер TCP порта устройства Modbus TCP, как правило, равен 502.
  7. Delta – максимальное число неопрашиваемых регистров между двумя опрашиваемыми регистрами для формирования единого блока опроса. Позволяет существенно повысить скорость обмена с устройством, но требует, чтобы неопрашиваемые регистры присутствовали в устройстве, иначе будут ошибки при опросе.
  8. Тип запроса тегов – служит скорее для отладки, чем для штатного опроса. При установке значения 1 опрос будет производиться запросом каждого регистра по отдельности, настройки 4 и 7 будут проигнорированы.
  9. Закрывать сокет – настройка, определяющая, будет ли закрываться TCP сокет с устройством Modbus TCP после полного цикла опроса устройств, или нет. Настройка имеет более высокий приоритет, чем аналогичная настройка в протоколе.
  10. Тайм-аут по присоединению – таймаут по присоединению к устройству Modbus TCP.
  11. Проверка записи тега – настройка, определяющая необходимость проверки записи в регистр и число повторных попыток записи. В подавляющем большинстве случаев проверку записи использовать не нужно.
  12. Не проверять номер транзакции – запрет проверки номера транзакции при обмене с устройством Modbus TCP. Имеет смысл включить только при наличии Ош076 (нарушение нумерации транзакций).

После завершения настройки протокола и модуля(ей) необходимо загрузить конфигурацию в контроллер и убедиться в корректном опросе устройства.

Часто встречающиеся коды ошибок:

  1. Ош003 – ошибка открытия COM-порта. Возможно, порт с таким номером отсутствует в системе, либо занят другим приложением.
  2. Ош007 – таймаут по обмену. Зачастую означает неверные настройки COM-порта или обрыв на линии связи с устройством. Также возможно неверно указан адрес устройства в сети Modbus.
  3. Ош006, Ош011 и Ош020 – ошибка CRC и ошибка формата принятого сообщения. Означают проблемы с качеством линии связи. Возможно, следует увеличить множитель межбайтового таймаута, число повторных запросов или таймаут по обмену. Ну и конечно улучшить качество линии связи.
  4. Ош029 – ошибка присоединения к устройству (для Ethernet). Зачастую означает проблемы с линией связи или неверно указанный IP-адрес и порт устройства.
  5. Ош048 и Ош050 – не определена маска для получения значения тега и тип тега не соответствует формату сигнала. Данные ошибки означают наличие неточностей в описании конкретных тегов в io-файле, необходимо проверить файл на ошибки.
  6. Ош012, Ош013 и Ош014 – соответствуют кодам 1, 2 и 3 стандартных ошибок Modbus.
  7. Ош091-Ош098 – соответствуют кодам 1-8 стандартных ошибок Modbus.

ТЕХНИЧЕСКАЯ ПОДДЕРЖКА

+7 (8352) 22-34-32
support@kaskad-asu.com