Научно-Производственное Объединение «Каскад-ГРУП»
428000, Россия, Чувашская Республика, г. Чебоксары, пр. Машиностроителей, д. 1 КГ
Телефон: (8352) 22-34-32,
Факс: (8352) 63-48-38
E-mail: abc@kaskad-asu.com
Настройка и использование протокола Modbus в KLogic
Modbus – открытый коммуникационный протокол, основанный на архитектуре ведущий-ведомый (master-slave). Широко применяется в промышленности для организации связи между электронными устройствами. Может использоваться для передачи данных через последовательные линии связи RS-485, RS-422, RS-232, и сети TCP/IP (Modbus TCP).
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.
Карта адресов состоит из двух блоков данных – блок общих свойств модуля и блок свойств тегов.
Блок общих свойств модуля представляет собой вертикальный список, слева от которого располагаются идентификаторы полей. Признаком начала такого блока считается ячейка с текстом «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 будет подгружен список наименований ее листов:
Необходимо выбрать лист, содержащий корректно заполненную карту адресов Modbus, после чего начнется автоматический разбор содержимого листа:
В логе работы конвертера отображается подробный отчет о разборе содержимого листа, перечисляются ошибки разбора, если они присутствуют:
При успешном разборе листа Excel заполняются таблицы общих атрибутов модуля KLogic и атрибутов тегов, доступные для просмотра. Эти таблицы содержат обработанные данные, загруженные с листа Excel, по которым можно проверить корректность заполнения исходной карты адресов.
Для осуществления экспорта необходимо нажать кнопку «Экспортировать в IO». После окончания процедуры экспорта будет выведено сообщение:
Полученный файл необходимо скопировать в папку Bin\KLData, где установлен KLogic. После этого запустить систему программирования «KLogic», добавить в конфигурацию контроллера протокол «[UNI] Modbus (RTU, TCP, ASCII)» из группы «Протокол ModBus», в протокол добавить новое устройство (имя и группа определяются атрибутами табл. 1).
Настройки протокола содержат следующие пункты:
- Период выполнения задачи – стандартная настройка для всех протоколов KLogic, определяет, как часто будут опрашиваться модули, добавленные в протокол. При этом следует помнить, что модули в рамках одного протокола опрашиваются последовательно.
- Тип коммуникационной связи – определяет тип связи со всеми модулями в пределах протокола. Для RTU и ASCII следует установить 0 (COM порт), для TCP, а также RTU или ASCII через преобразователь COM-Ethernet (опрос через сокет) нужно установить 1 (Ethernet).
Настройки для типа связи 0 (COM порт):
- Номер СОМ порта – определяет номер COM порта контроллера, через который будет производиться опрос модулей.
- Скорость обмена – определяет скорость обмена по выбранному порту. См. всплывающую подсказку для выбора конкретной скорости.
- Число бит данных, Контроль байтовой посылки, Число стоп-бит – определяют параметры выбранного порта.
- Таймаут по обмену – определяет таймаут, по истечению которого будет считаться, что связь с модулем потеряна.
- Множитель – определяет множитель к стандартному межбайтовому таймауту для выбранной скорости обмена. На длинных и зашумленных линиях связи, а также при наличии ошибок, рекомендуется задать значение, превышающее 1.
- Число повторных транзакций – определяет число повторных запросов, если запрос оказался неудачным (нет ответа или ошибка). На длинных и зашумленных линиях связи, а также при наличии ошибок, рекомендуется задать значение, превышающее 0.
Настройки для типа связи 1 (Ethernet):
- IP адрес – IP адрес преобразователя COM-Ethernet. При опросе устройств по Modbus TCP установить значение 0.0.0.0.
- Номер порта – номер TCP порта преобразователя COM-Ethernet. При опросе устройств по Modbus TCP установить значение 0.
- Тайм-аут по присоединению – таймаут по присоединению к преобразователю COM-Ethernet.
- Закрывать сокет – настройка, определяющая, будет ли закрываться TCP сокет с преобразователем COM-Ethernet или устройствами Modbus TCP после полного цикла опроса устройств, или нет. В подавляющем большинстве случаев закрывать сокет не нужно.
- Опрос тегов после команды – определяет, необходимо ли запрашивать все теги устройства после выполнения команды записи один из его тегов.
- Таймаут перед запросом – задержка в миллисекундах перед запросом всех тегов устройства после выполнения команды записи.
Настройки модуля содержат следующие пункты (часть из них может отсутствовать):
- Адрес устройства – определяет адрес устройства в сети Modbus.
- Тип протокола – определяет тип протокола устройства (0 – RTU, 1 – TCP, 2 – ASCII).
- Тайм-аут между транзакциями – время в миллисекундах между двумя последовательными транзакциями в сети Modbus.
- Число регистров – максимальное число запрашиваемых регистров в одной транзакции. Данный параметр напрямую влияет на скорость опроса, однако слишком большие значения могут привести к ошибкам при опросе. Для корректного заполнения этого параметра необходимо узнать размер буфера устройства, либо подобрать его эмпирически.
- IP-адрес устройства – IP адрес устройства Modbus TCP.
- Номер порта – номер TCP порта устройства Modbus TCP, как правило, равен 502.
- Delta – максимальное число неопрашиваемых регистров между двумя опрашиваемыми регистрами для формирования единого блока опроса. Позволяет существенно повысить скорость обмена с устройством, но требует, чтобы неопрашиваемые регистры присутствовали в устройстве, иначе будут ошибки при опросе.
- Тип запроса тегов – служит скорее для отладки, чем для штатного опроса. При установке значения 1 опрос будет производиться запросом каждого регистра по отдельности, настройки 4 и 7 будут проигнорированы.
- Закрывать сокет – настройка, определяющая, будет ли закрываться TCP сокет с устройством Modbus TCP после полного цикла опроса устройств, или нет. Настройка имеет более высокий приоритет, чем аналогичная настройка в протоколе.
- Тайм-аут по присоединению – таймаут по присоединению к устройству Modbus TCP.
- Проверка записи тега – настройка, определяющая необходимость проверки записи в регистр и число повторных попыток записи. В подавляющем большинстве случаев проверку записи использовать не нужно.
- Не проверять номер транзакции – запрет проверки номера транзакции при обмене с устройством Modbus TCP. Имеет смысл включить только при наличии Ош076 (нарушение нумерации транзакций).
После завершения настройки протокола и модуля(ей) необходимо загрузить конфигурацию в контроллер и убедиться в корректном опросе устройства.
Часто встречающиеся коды ошибок:
- Ош003 – ошибка открытия COM-порта. Возможно, порт с таким номером отсутствует в системе, либо занят другим приложением.
- Ош007 – таймаут по обмену. Зачастую означает неверные настройки COM-порта или обрыв на линии связи с устройством. Также возможно неверно указан адрес устройства в сети Modbus.
- Ош006, Ош011 и Ош020 – ошибка CRC и ошибка формата принятого сообщения. Означают проблемы с качеством линии связи. Возможно, следует увеличить множитель межбайтового таймаута, число повторных запросов или таймаут по обмену. Ну и конечно улучшить качество линии связи.
- Ош029 – ошибка присоединения к устройству (для Ethernet). Зачастую означает проблемы с линией связи или неверно указанный IP-адрес и порт устройства.
- Ош048 и Ош050 – не определена маска для получения значения тега и тип тега не соответствует формату сигнала. Данные ошибки означают наличие неточностей в описании конкретных тегов в io-файле, необходимо проверить файл на ошибки.
- Ош012, Ош013 и Ош014 – соответствуют кодам 1, 2 и 3 стандартных ошибок Modbus.
- Ош091-Ош098 – соответствуют кодам 1-8 стандартных ошибок Modbus.