Modbus Slave - интерфейс к базе сигналов

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

Блок предоставляет возможность автоматической синхронизации памяти Slave-блока с базой данных в процессе расчёта.

На каждом расчётном шаге значения регистров считываются с выходного порта Slave-блока и записываются в соответствующие им сигналы в базе данных. Значения из базы данных в свою очередь также могут перезаписывать память блока. Частота записи из базы в блок регламентируется настройками (не обязательно на каждом шаге).

Все операции по записи/чтению сигналов базы данных реализуются за один расчётный шаг. Сигнал считывается из базы данных, передаётся в slave-блок, где прописывается в память, считывается с его выходного порта и, замыкая круг, перезаписывает своё же значение в базе данных за один расчётный шаг.

С точки зрения реализации блок представляет из себя внешнюю обёртку над Slave-блоком. Весь функционал блока основан на инструментах SimInTech, предоставляемых пользователю, и полностью открыт. Все параметры расчёта задаются на уровне блока-интерфейса и автоматически передаются в Slave-блок.

Прим.: при работе с регистрами в режимах, отличных от 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)
  • Количесвто допустимых подключений (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 в нижней части свойств блока автоматически формируется шаблон таблицы соответствия регистров сигналам базы данных.

    Внимание, данное свойство задаёт количество значений, с которыми предполагается работать. Реальный размер памяти (в регистрах) определяется значением свойства 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_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)
  • Использовать общий COM-порт (UseSharedPort)

    Данная опция позволяет осуществлять подключение нескольких SLAVE-устройств к одному COM-порту. Реальное подключение к COM-порту осуществляется единожды, распределение пакетов осуществляется уже на уровне среды SimInTech, поэтому данный режим не накладывает никаких специальных требований на COM-порт

    Для работы в данном режиме опция должна быть включена для каждого блока, который будет использовать целевой COM-порт.

Свойства конфигурации работы
  • Шаг работы блока, [мc] (TimeStep)

    Непосредственная работа slave-блока программно осуществляется в параллельном потоке, поэтому в общем случае скорость обработки блоком внешних запросов master-устройств не зависит от расчётного шага системы.

    Свойство задаёт шаг синхронизации между внутренней памятью блока и портами входа/выхода. Шаг считается относительно расчётного времени системы SimInTech. Если заданный шаг меньше расчётного шага системы, синхронизация будет происходить на каждом расчётном шаге.

  • Приоритет при конкурирующей записи из внешнего устройства и входного порта (writeDataPriority)
    Свойство определяет приоритет в ситуации, когда в рамках одного расчётного шага в блок пришли запросы на изменения значения одного и того же регистра как со схемы, так и от внешнего устройства. В такой ситуации значение свойства определяет, кому будет отдан приоритете. Возможные варианты свойства:
    • приоритет входа;
    • приоритет внешнего устройства.

    Пример: на предыдущем расчётном шаге блок имел значения регистров [А1, А2]. На следующем шаге пользователь поднимает флаг writeRegsFromInput и подаёт в блок значения [А1*, А2] (А1* - новое значение, А2 - совпадает со старым). От внешнего устройства приходит запрос на запись 2 регистра А2*. Новые значения регистров будут [А1*, А2*] – конфликта нет, независимо от значения параметра writeDataPriority. Другая ситуация – со входа приходит [А1*, А2], при этом внешнее устройство также пытается заменить значения первого регистра А1**. В этом случае то, кому будет отдано предпочтение определится параметром writeDataPriority.

  • Запись из БД в блок (fromBDtoBlock)
    Свойство параметрирует перезапись памяти блока со входных портов. Предоставлены 4 варианта:
    • не писать вовсе;
    • писать один раз при запуске задачи на расчёт;
    • писать при запуске задачи на расчёт и потом с определённым временным шагом;
    • писать на каждом расчётном шаге.
    Данное свойство полностью автоматизирует работу с флагами writeRegsFromInput и writeBitsFromInput в Slave-блоке, поднимая и опуская их в зависимости от указанной конфигурации.
  • Шаг записи, [с] (fromBDtoBlock_Dt)

    Свойство определяет частоту перезаписи памяти блока со схемы для третьего режима работы свойства fromBDtoBlock. Шаг должен иметь целое значение.

  • Запись из блока в БД (fromBlockToBD)
    Свойство параметрирует режим перезаписи значений базы данных из памяти блока. Предоставлены 2 режима:
    • полная;
    • изменённые значения.
    В режиме «изменённые значения» в отличии от «полного» блок перезаписывает в базе данных только сигналы, соответствующие изменённым за последний расчётный шаг значениям в памяти блока. Соответственно, режим «изменённые значения» является предпочтительным поскольку уменьшает вероятность потери информации при конкурирующей записи в базу данных из slave-блока и из другого места на схеме.
  • Массив регистров (ValsList))

    Информационное свойство, текущую выводящее информацию о всех регистровых значениях в виде одного массива.

  • Массив битов (BitsList))

    Информационное свойство, текущую выводящее информацию о всех битовых значениях в виде одного массива.

Поле регистров
  • val1, val2, …

    В свойства вручную прописывается полное имя сигнала базы данных, с которым будет синхронизирован указанный участок памяти блока (формат записи: <группа>_<сигнал>). Если значение строки оставлено пустым, в ассоциированные регистры при синхронизации будет записываться 0. При задании несуществующего в базе данных сигнала блок сообщит об ошибке.

  • val1V, val2V, …

    Информационные свойства, в которые выводятся соответствующие регистровые значения на текущем расчётном шаге.

Поле битов
  • bit1, bit2, …

    В свойства вручную прописывается полное имя сигнала базы данных, с которым будет синхронизирован указанный бит памяти блока (формат записи: <группа>_<сигнал>). Если значение строки оставлено пустым, в ассоциированный бит при синхронизации будет записываться 0. При задании несуществующего в базе данных сигнала блок сообщит об ошибке.

  • bit1V, bit2V, …

    Информационные свойства, в которые выводятся соответствующие битовые значения на текущем расчётном шаге.