Блок реализует возможность обмена системы SimInTech с внешними устройствами по протоколу
Modbus. Реализация блока основана на использовании внешней свободно распространяемой
библиотеки Libmodbus.
Библиотека поддерживает следующие версии протокола Modbus для обмена:
- Modbus RTU (обмен по протоколам RS в бинарном формате);
- Modbus TCP.
Блок имитирует работу Slave-устройства и позволяет получать, обрабатывать и отвечать на запросы от внешних Master-устройств.
При инициализации задачи на расчёт блок выделяет заказанный объем регистровой и битовой памяти, инициализированную нулями.
В процессе расчёта память может перезаписана со схемы через входные порты, либо внешним Master-устройством, подключенному по одному из оговоренных протоколов.
Также на каждом шаге блок выдаёт полный снимок своей памяти в виде массивов на выходные порты.
Приоритет доступа к памяти для схемы и внешнего устройства определяются настройками синхронизации блока.
Прим.:
при работе с регистрами в режимах, отличных от word, количество реально обрабатываемых
регистров больше количества оперируемых величин (в 2 раза для Float и Long, в 4 раза для
Double). Во избежание путаницы в разделах, относящихся к регистрам, используется обобщённый
термин «значение (val)». Термин «регистр» используется только там, где речь идёт
непосредственно о стандартном двухбайтовом регистре Modbus.
Выходы
- VALS_READ_VAL – порт вывода регистровой памяти блока на схему.
Размерность выводимого значения соответствует количеству значений в регистровой памяти блока (свойство vals_nmb).
Таким образом, выводится вся регистровая память целиком.
- BYTES_READ_VAL – вспомогательный информационный порт вывода регистровой памяти блока.
Регистры выводятся в виде массива байтов.
Размерность выводимого значения соответствует количеству значений в памяти, умноженному на размер одного значения (в регистрах).
- BITS_READ_VAL – порт вывода битовой памяти блока на схему.
Размерность выводимого значения соответствует количеству битов в памяти блока (свойство bits_nmb).
Таким образом, выводится вся битовая память целиком.
Свойства:
Прим.:
для упрощения работы с блоком список отображаемых свойств формируется в зависимости от выбранного режима работы.
Общие свойства блока
- Тип подключения (BackendType)
Блок предоставляет следующие типы подключений:
- TCP (обмен по протоколу TCP/IP);
- TCP PI (PI – Protocol Independent. TCP/IP c возможностью задать IP-адрес в
формате IPv6, либо как имя узла);
- RTU (обмен по протоколам RS в бинарном формате).
Тип подключения и все сопутствующие настройки задаются до начала расчёта и далее
не меняются.
- Номер slave-устройства (SlaveNumber)
- Количесвто допустимых подключений (ConnectionNmb)
Количество подключений, которые готов принять блок при работе в TCP режиме.
Максимально возможное количество - 64.
- Выводить подключения/отключения в окно программы (ConnectionsToConsole)
Выводить в консоль программы информацию об успешных событиях подключения/отключения
к Слейву (или COM-порту для RTU режима).
- Выводить ошибки в окно программы (ErrorsToConsole)
Выводить в консоль программы информацию об ошибках подключения и работы.
- Выводить отладочную информацию в текстовый файл (DebugMode)
Вывод отладочной информации библиотеки Libmodbus в текстовый файл DEBUG.txt. Файл
создаётся том же каталоге, где расположен файл проекта.
Прим.: не оставляйте этот
режим включённым в продолжительном расчёте, чтобы не забить жёсткий диск.
Регистры
- Тип значений в регистрах (RegsType)
Стандартный размер регистра, определяемый протоколом Modbus, соответствует 2 байтам
памяти (Word), однако часто на практике стоит задача передачи величин большего размера
(4 или 8 байт). Для решения этой задачи в блоке предусмотрен механизм, позволяющий
интерпретировать несколько идущих подряд регистров как одно значение. Свойство задаёт
интерпретацию как считываемых, так и записываемых величин и задаётся до начала
расчёта. Реализованы следующие варианты:
- Word (2-х байтовое беззнаковое целое – стандарт Modbus);
- Long (4-х байтовое беззнаковое целое);
- Float (4-х байтовое вещественное число с плавающей точкой);
- Double (8-х байтовое вещественное число с плавающей точкой).
- Число величин в регистрах (vals_nmb)
Регистровый размер памяти блока. Задаётся один раз до начала расчёта.
Внимание, данное свойство задаёт количество значений, с которыми предполагается
работать. Реальный размер памяти (в регистрах) определяется значением свойства
vals_nmb, умноженным на количество регистров, которые занимает выбранный тип
(свойство RegsType).
- Адрес первого регистра (regs_addr)
Свойство задаёт начальный адрес нумерации регистровой памяти.
- Формат для 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.
Настройки тайминга
- Время ожидания подтверждения от другого slave-устройства, [мс]
Таймер, определяющий время ожидания ответа от другого slave-устройства, после приёма запроса для другого slave-устройства от мастера. В течение заданного интервала первый пришедший пакет будет идентифицирован как ответ другого slave-устройства, а не как новый запрос мастера.
Свойства TCP-IP подключения
- Адрес, с которого ожидается подключение (master_ip) Если данное
поле остаётся пустым, то подключение будет возможно с любого внешнего адреса. Если адрес
задан, то подключение будет разрешено только с этого конкретного узла.
Прим.: при
использовании типа подключения TCP PI (Protocol Independent) адрес в свойстве может
быть задан в формате IPv4, IPv6, либо как имя узла подключения. Например,
«192.168.0.5», «::1» или «server.com».
- Порт tcp, который будет использовать slave (port_tcp)
Свойства RTU подключения
Прим.: при работе блока не используется ни аппаратная (hardware handshaking), ни программная
(software handshaking) проверка связи.
- Номер последовательного порта (PortSerial)
- Скорость передачи данных, [бод] (BaudRate)
- Контроль ошибок (Parity)
- Количество бит данных (DataBits)
- Количество стоп-бит (StopBits)
- Использовать общий COM-порт (UseSharedPort)
Данная опция позволяет осуществлять подключение нескольких SLAVE-устройств к одному
COM-порту. Реальное подключение к COM-порту осуществляется единожды, распределение
пакетов осуществляется уже на уровне среды SimInTech, поэтому данный
режим не накладывает никаких специальных требований на COM-порт
Для работы в данном режиме опция должна быть включена для каждого
блока, который будет использовать целевой COM-порт.
Свойства конфигурации работы
- Шаг работы блока, [мc] (TimeStep)
Непосредственная работа slave-блока программно осуществляется в параллельном потоке,
поэтому в общем случае скорость обработки блоком внешних запросов master-устройств не
зависит от расчётного шага системы.
Свойство задаёт шаг синхронизации между
внутренней памятью блока и портами входа/выхода. Шаг считается относительно расчётного
времени системы SimInTech. Если заданный шаг меньше расчётного шага системы,
синхронизация будет происходить на каждом расчётном шаге.
- Флаг записи поля регистров со входного порта
(writeRegsFromInput)
Свойство включает/выключает перезапись регистровой памяти блока со входного порта.
Свойство может менять своё значение в процессе расчёта. Если флаг принимает значение
1, на данном расчётном шаге память блока переписывается значениями со входного порта.
Соответственно, флаг должен подниматься, если необходимо синхронизировать память блока
со схемой (затем опускаться). В блоке-интерфейсе Modbus управление флагом полностью
автоматизировано.
- Флаг записи поля битов со входного порта (writeBitsFromInput)
Свойство включает/выключает перезапись битовой памяти блока со входного порта.
Свойство может менять своё значение в процессе расчёта. Если флаг принимает значение
1, на данном расчётном шаге память блока переписывается значениями со входного порта.
Соответственно, флаг должен подниматься, если необходимо синхронизировать память блока
со схемой (затем опускаться). В блоке-интерфейсе Modbus управление флагом полностью
автоматизировано.
- Приоритет при конкурирующей записи из внешнего устройства и входного порта
(writeDataPriority)
Свойство определяет приоритет в ситуации, когда в рамках одного расчётного шага в
блок пришли запросы на изменения значения одного и того же регистра как со схемы, так
и от внешнего устройства. В такой ситуации значение свойства определяет, кому будет
отдан приоритете. Возможные варианты свойства:
- приоритет входа;
- приоритет внешнего устройства.
Пример: на предыдущем расчётном шаге блок имел значения регистров [А1,
А2]. На следующем шаге пользователь поднимает флаг
writeRegsFromInput и подаёт
в блок значения [А1*, А2] (А1* - новое значение, А2 - совпадает со старым). От
внешнего устройства приходит запрос на запись 2 регистра А2*. Новые значения регистров
будут [А1*, А2*] – конфликта нет, независимо от значения параметра
writeDataPriority. Другая ситуация – со входа приходят значения [А1*, А2],
при этом внешнее устройство также пытается заменить значения первого регистра А1**. В
этом случае то, кому будет отдано предпочтение определится свойством
writeDataPriority.