Modbus Master
![]() |
![]() |
|
| в палитре | на схеме |
Описание
Блок реализует возможность обмена системы SimInTech с внешними устройствами по протоколу Modbus. Реализация блока основана на использовании внешней свободно распространяемой библиотеки Libmodbus. Библиотека поддерживает следующие версии протокола Modbus для обмена:
- Modbus RTU (обмен по протоколам RS в бинарном формате);
- Modbus TCP.
Блок поддерживает следующие команды:
- Чтение регистров (0x03);
- Запись регистров (0x10);
- Чтение битов (0x01);
- Запись битов (0x0F).
Входные порты
- REG_WRITE_VAL – порт для подачи записываемых значений.
Размерность подаваемого массива задаётся свойством ValsWriteDimension. Размерность
должна быть согласована со свойствами ValsWriteNmb и ValsWriteAddr; Прим.:для быстроты работы не производится проверка на нахождение подающихся на вход величин в рамках допустимых диапазона, например, 0-65535 для стандартного регистра — пользователь должен контролировать это самостоятельно.Прим.:при работе в режимах Word и Long дробные части подаваемых на вход значений согласно формату регистров Modbus удаляются.
- BITS_WRITE_VAL – порт для подачи записываемых битов. Размерность
подаваемого массива задаётся свойством BitsWriteDimension. Размерность должна быть
согласована со свойствами BitsWriteNmb и BitsWriteAddr; Прим.:согласно протоколу биты могут принимать значения 1 или 0. При подаче на вход другого значения задача будет остановлена с ошибкой.
Выходные порты
- REG_READ_VAL – порт вывода считываемых регистров. Размерность выводимого массива задаётся свойством ValsReadDimension. Размерность должна быть согласована со свойствами ValsReadNmb и ValsReadAddr;
- REG_READ_BYTES – вспомогательный информационный порт вывода считываемых регистров. Регистры выводятся в виде массива байтов. Размерность порта определяется умножением свойства ValsReadDimension на количество байт, которые занимает каждое обрабатываемое значение;
- BITS_READ_VAL – порт вывода считываемых битов. Размерность выводимого массива задаётся свойством ValsReadDimension. Размерность должна быть согласована со свойствами BitsReadNmb и BitsReadAddr.
Свойства
- Тип значений в регистрах (RegsType)
Стандартный размер регистра, определяемый протоколом Modbus, соответствует 2 байтам памяти (Word), однако часто на практике стоит задача передачи величин большего размера (4 или 8 байт). Для решения этой задачи в блоке предусмотрен механизм, позволяющий интерпретировать несколько идущих подряд регистров как одно значение. Свойство задаёт интерпретацию как считываемых, так и записываемых величин и задаётся до начала расчёта. Реализованы следующие варианты:
- Word (2-х байтовое беззнаковое целое – стандарт Modbus);
- Long (4-х байтовое беззнаковое целое);
- Float (4-х байтовое вещественное число с плавающей точкой);
- Double (8-х байтовое вещественное число с плавающей точкой).
Прим.:Рассмотрим механизм работы свойства для записываемых регистров. Предположим, в блоке задаётся запись одного значение по адресу 0 в Slave-устройство.все величины, передаваемые по линиям связи в SimInTech, имеют тип Double (8 байт).- Word: из подаваемого на вход Double-значения выделяется целая часть и преобразуется к 2-х байтовому беззнаковому целому. В Slave-устройстве будет произведена запись 0 регистра;
- Long: из подаваемого на вход Double-значения выделяется целая часть и преобразуется к 4-х байтовому беззнаковому целому. В Slave-устройстве будет произведена запись 2 регистров: 0 и 1;
- Float: подаваемое на вход Double-значение преобразуется к 4-х байтовому вещественному число. В Slave-устройстве будет произведена запись 2 регистров: 0 и 1;
- Double: подаваемое на вход Double-значение не подвергается никаким преобразованиям. В Slave-устройстве будет произведена запись 4 регистров: 0, 1, 2, 3;
- Word: в Slave-устройстве будет произведено считывание 2 регистров (0,1), каждый из которых будет конвертирован в Double-значение и выведен на выходной порт блока;
- Long: в Slave-устройстве будет произведено считывание 4 регистров (0-3), которые попарно будут интерпретированы как Long-значения, конвертированы в соответствующие Double-значения и выведены на выходной порт блока;
- Float: в Slave-устройстве будет произведено считывание 4 регистров (0-3), которые попарно будут интерпретированы как Float-значения, конвертированы в соответствующие Double-значения и выведены на выходной порт блока;
- Double: в Slave-устройстве будет произведено считывание 8 регистров (0-7), которые четвёрками будут интерпретированы как Double-значения и выведены на выходной порт блока.
- Формат для 4-х байтных целых (LongOrder)
Для возможности работы с системами, в которых принят другой порядок следования байт, блок предоставляет возможность перестановки байт местами при записи и чтении. Предоставляемые варианты: AB CD, CD AB, BA DC, DC BA.
- Формат для 4-х байтных вещественных (FloatOrder)
Предоставляемые варианты: AB CD, CD AB, BA DC, DC BA.
- Формат для 8 байтных вещественных (DoubleOrder)
Предоставляемые варианты: AB CD EF GH, GH EF CD AB, BA DC FE HG, HG FE DC BA.
- Читать значения (ReadVals)
Флаг, включающий операцию чтения регистров. Операция может включаться/выключаться в процессе расчёта.
- Максимальная размерность (ValsReadDimension)
Свойство задаёт размерность портов REG_READ_VAL и REG_READ_BYTES.
- Количество читаемых значений по группам (ValsReadNmb)
Если требуется считать только один непрерывный диапазон значений(регистров), в свойстве достаточно задать скалярное значение, соответствующее количеству запрашиваемых значений. Если необходимо считать нескольких не смежных диапазонов регистров, в свойстве задаётся массив вида:
[<Количество значений в 1 группе>,..,<Количество значений в N группе>].
Каждый диапазон считывается отдельным запросом к Slave-устройству. Все запросы выполняются последовательно в порядке следования элементов в массиве в рамках одного расчётного шага SimInTech. Во избежание перегрузки канала между запросами помещается временная пауза, задаваемая свойством TimeStep.
- Адреса читаемых значений по группам (ValsReadAddr)
Свойство работает в паре со свойством ValsReadNmb и позволяет задавать адреса начала считываемых диапазонов. Размерность свойства должна соответствовать размерности свойства ValsReadNmb. Запрашиваемые адреса могут динамически меняться в процессе расчёта.
- Записывать значения (WriteVals)
Флаг, включающий операцию записи регистров. Операция может включаться/выключаться в процессе расчёта.
- Максимальная размерность (ValsWriteDimension)
Свойство задаёт размерность порта REG_WRITE_VAL.
- Количество записываемых значений по группам (ValsWriteNmb)
Если требуется записать только один непрерывный диапазон значений(регистров), в свойстве достаточно задать скалярное значение, соответствующее количеству записываемых значений. Если необходимо записать нескольких не смежных диапазонов регистров, в свойстве задаётся массив вида:
[<Количество значений в 1 группе>,..,<Количество значений в N группе>].
Каждый диапазон записывается отдельным запросом к Slave-устройству. Все запросы выполняются последовательно в порядке следования элементов в массиве в рамках одного расчётного шага SimInTech. Во избежание перегрузки канала между запросами помещается временная пауза, задаваемая свойством TimeStep.
- Адреса записываемых значений по группам (ValsWriteAddr)
Свойство работает в паре со свойством ValsWriteNmb и позволяет задавать адреса начала записываемых диапазонов. Размерность свойства должна соответствовать размерности свойства ValsWriteNmb. Записываемые адреса могут динамически меняться в процессе расчёта.
- Читать биты (ReadBits)
Флаг, включающий операцию чтения битов. Операция может включаться/выключаться в процессе расчёта.
- Максимальная размерность (BitsReadDimension)
Свойство задаёт размерность порта BITS_READ_VAL.
- Количество читаемых значений по группам (BitsReadNmb)
Смотрите аналогичные свойства для регистров.
- Адреса читаемых значений по группам (BitsReadAddr)
Смотрите аналогичные свойства для регистров.
- Записывать биты (WriteBits)
Флаг, включающий операцию записи битов. Операция может включаться/выключаться в процессе расчёта.
- Максимальная размерность (BitsWriteDimension)
Свойство задаёт размерность порта BITS_WRITE_VAL.
- Количество записываемых значений по группам (BitsWriteNmb)
Смотрите аналогичные свойства для регистров.
- Адреса записываемых значений по группам (BitsWriteAddr)
Смотрите аналогичные свойства для регистров.
- Тип подключения (BackendType)
Блок предоставляет следующие типы подключений:
- TCP (обмен по протоколу TCP/IP);
- TCP PI (PI – Protocol Independent. TCP/IP c возможностью задать IP-адрес в формате IPv6, либо как имя узла);
- RTU (обмен по протоколам RS в бинарном формате).
- Отправлять запросы всем устройствам (broadcast-режим)
Специальный режим, позволяющий одновременно отправлять запрос всем подключенным устройствам. В данном режиме свойство SlaveNumber не используется.
- Номер slave-устройства (SlaveNumber)
Идентификационный номер slave-устройства, к которому отправляется запрос.
- Занулять непрочитанные выходные значения (NullUnreadElements)
При отсутствии считанных значений элементы выходных значений на линиях связи будут зануляться, иначе будут выдаваться значения с прошлого шага.
- Выполнять переподключение к Slave при ошибке на обмене (ReconnectOnError)
При возникновении ошибки в процессе обмена блок будет выполнять полное отключение с целью последующего переподключения (если это разрешено опцией AttemptsNmb). Данная опция наиболее критична при обмене по TCP протоколу, т.к. при временном выключении сервера требуется переподключение к нему. При обмене через RTU это не обязательно, т.к. блоки подключаются к COM-портам, а не непосредственно друг к другу.
- Количество повторных попыток при ошибке (AttemptsNmb)
Количество последовательных попыток подключения к серверу, которые разрешены блоку до того, как будет остановлен расчёт. Если подключение было выполнено успешно, счётчик сбрасывается. Предусмотрены следующие варианты:
- Останавливать сразу;
- 1;
- 2;
- 3;
- 4;
- 5;
- 10;
- 15;
- Пытаться постоянно.
- Выводить подключения/отключения в окно программы (ConnectionsToConsole)
Выводить в консоль программы информацию об успешных событиях подключения/отключения к Слейву (или COM-порту для RTU режима).
- Выводить ошибки в окно программы (ErrorsToConsole)
Выводить в консоль программы информацию об ошибках подключения и работы.
- Выводить отладочную информацию в текстовый файл (DebugMode)
Вывод отладочной информации библиотеки Libmodbus в текстовый файл DEBUG.txt. Файл создаётся том же каталоге, где расположен файл проекта.Прим.:не оставляйте этот режим включённым в продолжительном расчёте, так как размер файла неограниченно возрастает.
- Шаг попытки переподключения, [мс] (ResponseTimeout)
Свойство задаёт шаг попытки подключения блока к Slave-устройству относительно расчётного времени системы SimInTech.
- Шаг работы блока, [мс] (TimeStep)
Свойство задаёт шаг работы блока относительно расчётного времени системы SimInTech. Если заданный шаг меньше расчётного шага системы, блок будет отрабатывать на каждом расчётном шаге.
Также данное свойство определяет уже системное время задержки между последовательными запросами к Slave-устройству в рамках одного шага.
- Время ожидания первого ответного байта при запросе, [мс]
(ResponseTimeout)
Системное время ожидания получения первого пакета ответных байтов после отправки запроса Slave-устройству.
- Время ожидания промежуточных ответных байтов при запросе, [мс]
(ByteTimeout)
Системное время ожидания получения промежуточных пакетов ответных байтов.
- IP адрес slave-устройства (SlaveIP)
Прим.:при использовании типа подключения TCP PI (Protocol Independent) адрес в свойстве может быть в формате IPv4, IPv6, либо как имя узла подключения. Например, "192.168.0.5", "::1" или "server.com".
- TCP порт slave-устройства (SlavePortTCP)
- Номер последовательного порта (PortSerial)
- Скорость передачи данных, [бод] (BaudRate)
- Контроль ошибок (Parity)
- Количество бит данных (DataBits)
- Количество стоп-бит (StopBits)
Параметры
- Информация (Info) – параметр представляет побайтовую информацию о считываемых/записываемых регистрах и битах на текущем расчётном шаге. Параметр необходимо выводить в текстовом формате (создание подписи).
- Флаг подключения к серверу (IsConnected) – параметр принимает значение TRUE при успешном подключении к Slave-блоку.

