Modbus Slave

 
в палитре на схеме

Блок реализует возможность обмена системы SimInTech с внешними устройствами по протоколу Modbus. Реализация блока основана на использовании внешней свободно распространяемой библиотеки Libmodbus. Библиотека поддерживает следующие версии протокола Modbus для обмена:

Блок имитирует работу Slave-устройства и позволяет получать, обрабатывать и отвечать на запросы от внешних Master-устройств. При инициализации задачи на расчёт блок выделяет заказанный объем регистровой и битовой памяти, инициализированную нулями. В процессе расчёта память может перезаписана со схемы через входные порты, либо внешним Master-устройством, подключенному по одному из оговоренных протоколов. Также на каждом шаге блок выдаёт полный снимок своей памяти в виде массивов на выходные порты. Приоритет доступа к памяти для схемы и внешнего устройства определяются настройками синхронизации блока.

Примечание: при работе с регистрами в режимах, отличных от word, количество реально обрабатываемых регистров больше количества оперируемых величин (в 2 раза для Float и Long, в 4 раза для Double). Во избежание путаницы в разделах, относящихся к регистрам, используется обобщённый термин «значение (val)». Термин «регистр» используется только там, где речь идёт непосредственно о стандартном двухбайтовом регистре Modbus.

Входы

Выходы

Свойства:

Примечание: для упрощения работы с блоком список отображаемых свойств формируется в зависимости от выбранного режима работы.
Общие свойства блока
  • Тип подключения (BackendType)
    Блок предоставляет следующие типы подключений:
    • TCP (обмен по протоколу TCP/IP);
    • TCP PI (PI – Protocol Independent. TCP/IP c возможностью задать IP-адрес в формате IPv6, либо как имя узла);
    • RTU (обмен по протоколам RS в бинарном формате).
    Тип подключения и все сопутствующие настройки задаются до начала расчёта и далее не меняются.
  • Номер slave-устройства (SlaveNumber)
  • Выводить отладочную информацию в текстовый файл (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.

Биты
  • Число битов (bits_nmb)

    Битовый размер памяти блока. Задаётся один раз до начала расчёта.

  • Адрес первого бита (bits_addr)

    Свойство задаёт начальный адрес нумерации битовой памяти.

Свойства 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)
Свойства конфигурации работы
  • Шаг работы блока, [м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.