Modbus Slave - интерфейс к базе сигналов
![]() |
![]() |
|
| в палитре | на схеме |
Описание
Блок предоставляет возможность автоматической синхронизации памяти Slave-блока с базой данных в процессе расчёта.
На каждом расчётном шаге значения регистров считываются с выходного порта Slave-блока и записываются в соответствующие им сигналы в базе данных. Значения из базы данных в свою очередь также могут перезаписывать память блока. Частота записи из базы в блок регламентируется настройками (не обязательно на каждом шаге).
Все операции по записи/чтению сигналов базы данных реализуются за один расчётный шаг. Сигнал считывается из базы данных, передаётся в slave-блок, где прописывается в память, считывается с его выходного порта и, замыкая круг, перезаписывает своё же значение в базе данных за один расчётный шаг.
С точки зрения реализации блок представляет из себя внешнюю обёртку над Slave-блоком. Весь функционал блока основан на инструментах SimInTech, предоставляемых пользователю, и полностью открыт. Все параметры расчёта задаются на уровне блока-интерфейса и автоматически передаются в Slave-блок.
Свойства
- Тип подключения (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)
Свойство задаёт начальный адрес нумерации битовой памяти.
- Адрес, с которого ожидается подключение (master_ip) Если данное
поле остаётся пустым, то подключение будет возможно с любого внешнего адреса. Если адрес
задан, то подключение будет разрешено только с этого конкретного узла. Прим.:при использовании типа подключения TCP PI (Protocol Independent) адрес в свойстве может быть задан в формате IPv4, IPv6, либо как имя узла подключения. Например, "192.168.0.5", "::1" или "server.com".
- Порт tcp, который будет использовать slave (port_tcp)
- Номер последовательного порта (PortSerial)
- Скорость передачи данных, [бод] (BaudRate)
- Контроль ошибок (Parity)
- Количество бит данных (DataBits)
- Количество стоп-бит (StopBits)
- Использовать общий COM-порт (UseSharedPort)
Данная опция позволяет осуществлять подключение нескольких SLAVE-устройств к одному COM-порту. Реальное подключение к COM-порту осуществляется единожды, распределение пакетов осуществляется уже на уровне SimInTech, поэтому данный режим не накладывает никаких специальных требований на COM-порт
Для работы в данном режиме опция должна быть включена для каждого блока, который будет использовать целевой COM-порт.
- Шаг работы блока, [мс] (TimeStep)
Непосредственная работа slave-блока программно осуществляется в параллельном потоке, поэтому в общем случае скорость обработки блоком внешних запросов master-устройств не зависит от расчётного шага системы.
Свойство задаёт шаг синхронизации между внутренней памятью блока и портами входа/выхода. Шаг считается относительно расчётного времени системы SimInTech. Если заданный шаг меньше расчётного шага системы, синхронизация будет происходить на каждом расчётном шаге.
- Приоритет при конкурирующей записи из внешнего устройства и входного порта
(writeDataPriority)
Свойство определяет приоритет в ситуации, когда в рамках одного расчётного шага в блок пришли запросы на изменения значения одного и того же регистра как со схемы, так и от внешнего устройства. В такой ситуации значение свойства определяет, кому будет отдан приоритете. Возможные варианты свойства:
- приоритет входа;
- приоритет внешнего устройства.
Пример: на предыдущем расчётном шаге блок имел значения регистров [А1, А2]. На следующем шаге пользователь поднимает флаг writeRegsFromInput и подаёт в блок значения [А1*, А2] (А1* - новое значение, А2 - совпадает со старым). От внешнего устройства приходит запрос на запись 2 регистра А2*. Новые значения регистров будут [А1*, А2*] – конфликта нет, независимо от значения параметра writeDataPriority. Другая ситуация – со входа приходит [А1*, А2], при этом внешнее устройство также пытается заменить значения первого регистра А1**. В этом случае то, кому будет отдано предпочтение определится параметром writeDataPriority.
- Запись из БД в блок (fromBDtoBlock)
Свойство параметризует перезапись памяти блока со входных портов. Предоставлены 4 варианта:
- не писать вовсе;
- писать один раз при запуске задачи на расчёт;
- писать при запуске задачи на расчёт и потом с определённым временным шагом;
- писать на каждом расчётном шаге.
- Шаг записи, [с] (fromBDtoBlock_Dt)
Свойство определяет частоту перезаписи памяти блока со схемы для третьего режима работы свойства fromBDtoBlock. Шаг должен иметь целое значение.
- Запись из блока в БД (fromBlockToBD)
Свойство параметризует режим перезаписи значений базы данных из памяти блока. Предоставлены 2 режима:
- полная;
- изменённые значения.
- Массив регистров (ValsList))
Информационное свойство, текущую выводящее информацию о всех регистровых значениях в виде одного массива.
- Массив битов (BitsList))
Информационное свойство, текущую выводящее информацию о всех битовых значениях в виде одного массива.
- val1, val2, …
В свойства вручную прописывается полное имя сигнала базы данных, с которым будет синхронизирован указанный участок памяти блока (формат записи: <группа>_<сигнал>). Если значение строки оставлено пустым, в ассоциированные регистры при синхронизации будет записываться 0. При задании несуществующего в базе данных сигнала блок сообщит об ошибке.
- val1V, val2V, …
Информационные свойства, в которые выводятся соответствующие регистровые значения на текущем расчётном шаге.
- bit1, bit2, …
В свойства вручную прописывается полное имя сигнала базы данных, с которым будет синхронизирован указанный бит памяти блока (формат записи: <группа>_<сигнал>). Если значение строки оставлено пустым, в ассоциированный бит при синхронизации будет записываться 0. При задании несуществующего в базе данных сигнала блок сообщит об ошибке.
- bit1V, bit2V, …
Информационные свойства, в которые выводятся соответствующие битовые значения на текущем расчётном шаге.

