UniSet
2.7.0
|
Класс реализует процесс обмена (опрос/запись) с RTU-устройствами, через TCP-шлюз. Список регистров с которыми работает процесс задаётся в конфигурационном файле в секции <sensors>. см. Конфигурирование ModbusTCP master
Конфигурирование процесса осуществляется либо параметрами командной строки либо через настроечную секцию. \par Секция с настройками При своём старте, в конфигурационном файле ищётся секция с названием объекта, в которой указываются настроечные параметры по умолчанию. Пример:
Где
Секция <DeviceList> позволяет задать параметры обмена с конкретным RTU-устройством.
При создании объекта в конструкторе передаётся префикс для определения параметров командной строки. По умолчанию xxx="mbtcp". Далее приведены основные параметры:
–xxx-name ID - идентификатор(name) процесса.
IP-адрес шлюза задаётся параметром в конфигурационном файле gateway_iaddr или параметром командной строки –xxx-gateway-iaddr.
Порт задаётся в конфигурационном файле параметром gateway_port или параметром командной строки –xxx-gateway-port. По умолчанию используется порт 502.
–xxx-recv-timeout или recv_timeout msec - таймаут на приём одного сообщения. По умолчанию 100 мсек.
–xxx-timeout или timeout msec - таймаут на определение отсутсвия связи (после этого идёт попытка реинициализировать соединение) По умолчанию 5000 мсек.
–xxx-reinit-timeout или reinit_timeout msec - таймаут на реинициализацию канала связи (после потери связи) По умолчанию timeout.
–xxx-no-query-optimization или no_query_optimization - [1|0] отключить оптимизацию запросов
Оптимизация заключается в том, что регистры идущие подряд автоматически запрашиваются/записываются одним запросом. В связи с чем, функция указанная в качестве mbfunc игнорируется и подменяется на работающую с многими регистрами.
\b --xxx-poll-time или \b poll_time msec - пауза между опросами. По умолчанию 100 мсек. \b --xxx-initPause или \b initPause msec - пауза перед началом работы, после активации. По умолчанию 50 мсек. \b --xxx-force или \b force [1|0] - 1 - перечитывать значения входов из SharedMemory на каждом цикле - 0 - обновлять значения только по изменению \b --xxx-persistent-connection или \b persistent_connection - НЕ закрывать соединение после каждого запроса. \b --xxx-force-out или \b force_out [1|0] - 1 - перечитывать значения выходов из SharedMemory на каждом цикле - 0 - обновлять значения только по изменению \b --xxx-reg-from-id или \b reg_from_id [1|0] - 1 - в качестве регистра использовать идентификатор датчика - 0 - регистр брать из поля tcp_mbreg \b --xxx-heartbeat-id или \b heartbeat_id ID - название для датчика "сердцебиения" (см. \ref sec_SM_HeartBeat) \b --xxx-heartbeat-max или \b heartbeat_max val - сохраняемое значение счётчика "сердцебиения". \b --xxx-activate-timeout msec . По умолчанию 2000. - время ожидания готовности SharedMemory к работе.
Конфигурационные параметры задаются в секции <sensors> конфигурационного файла. Список обрабатываемых регистров задаётся при помощи двух параметров командной строки
–xxx-filter-field - задаёт фильтрующее поле для датчиков
–xxx-filter-value - задаёт значение фильтрующего поля. Необязательный параметр.
–xxx-statistic-sec sec - при наличии выведет кол-во посланных запросов за этот промежуток времени.
–xxx-set-prop-prefix [str] - Использовать 'str' в качестве префикса для свойств. Если не указать 'str' будет использован пустой префикс.
Если параметры не заданы, будет произведена попытка загрузить все датчики, у которых присутствуют необходимые настроечные параметры.
Пример конфигурационных параметров:
К основным параметрам относятся следующие (префикс tcp_ - для примера):
Помимо этого можно задавать следующие параметры:
Для инициализации "выходов" (регистров которые пишутся) можно использовать поля:
Если указано tcp_preinit="1", то прежде чем начать писать регистр в устройство, будет произведено его чтение.
По умолчанию все "записываемые" регистры инициализируются значением из SM. Т.е. пока не будет первый раз считано значение из SM, регистры в устройство писатся не будут. Чтобы отключить это поведение, можно указать параметр
При этом будет записывыться значение "default".
В MBTCPMaster заложена возможность управлять режимом работы процесса. Поддерживаются следующие режимы:
Режимы переключаются при помощи датчика, который можно задать либо аргументом командной строки –prefix-exchange-mode-id либо в конф. файле параметром exchangeModeID="". Константы определяющие режимы объявлены в MBTCPMaster::ExchangeMode.
В MBTCPMaster заложена возможность управлять режимом выставления безопасного состояния входов и выходов. Возможны следующие режимы:
Суть этого режима, в том, что все входы и выходы у которых в настройках указан параметр safeval="" выставляются в это значение, при срабатывании внешнего датчика (режим "safeExternalControl") или при отсутсвии связи с устройством (режим "safeResetIfNotRespond").
Режим задаётся в секции <DeviceList> для каждого устройства отдельно.
Если указан параметр safemodeSensor="..", то используется режим safeExternalControl. При этом можно указать конкретное значение датчика safemodeSensorValue="..", при котором будет сделан сброс значений в безопасное состояние.
Если указан параметр safemodeResetIfNotRespond="1", то будет использован режим safeResetIfNotRespond. Если указан и параметр safemodeSensor=".." и safemodeResetIfNotRespond="1", то будет использован режим safeExternalControl (как более приоритетный).