UniSet  2.6.0
Реализация ModbusTCP master
  - \ref sec_MBTCP_Comm
  - \ref sec_MBTCP_Conf
  - \ref sec_MBTCP_ConfList
  - \ref sec_MBTCP_ExchangeMode

  @section sec_MBTCP_Comm Общее описание ModbusTCP master
  Класс реализует процесс обмена (опрос/запись) с RTU-устройствами,
  через TCP-шлюз. Список регистров с которыми работает процесс задаётся в конфигурационном файле
  в секции \b <sensors>. см. \ref sec_MBTCP_Conf

  @section sec_MBTCP_Conf Конфигурирование ModbusTCP master

  Конфигурирование процесса осуществляется либо параметрами командной строки либо
  через настроечную секцию.

  \par Секция с настройками
  При своём старте, в конфигурационном файле ищётся секция с названием объекта,
  в которой указываются настроечные параметры по умолчанию.
  Пример:
  @code 
<MBMaster1 name="MBMaster1" gateway_iaddr="127.0.0.1" gateway_port="30000" polltime="200" exchangeModeID="...">
     <DeviceList>
         <item addr="0x01" respondSensor="RTU1_Not_Respond_FS" timeout="2000" invert="1"/>
     <item addr="0x02" respondSensor="RTU2_Respond_FS" timeout="2000" invert="0"/>
     </DeviceList>
</MBMaster1>
  \endcode
  Где
  - \b exchangeModeID - датчик(name) определяющий режим работы (см. MBExchange::ExchangeMode).

  Секция <DeviceList> позволяет задать параметры обмена с конкретным RTU-устройством.

  - \b addr -  адрес устройства для которого, задаются параметры
  - \b timeout msec - таймаут, для определения отсутствия связи
  - \b invert - инвертировать логику. По умолчанию датчик выставляется в "1" при \b наличии связи.
  - \b respondSensor - название(name) датчика связи.
  - \b respondInitTimeout - msec, время на инициализацию связи после запуска процесса. Т.е. только после этого времени будет выставлен(обновлён) датчик наличия связи. По умолчанию время равно timeout.
  - \b ask_every_reg - 1 - опрашивать ВСЕ регистры подряд, не обращая внимания на timeout. По умолчанию - "0" Т.е. опрос устройства (на текущем шаге цикла опроса), прерывается на первом же регистре, при опросе которого возникнет timeout.

  \par Параметры запуска

При создании объекта в конструкторе передаётся префикс для определения параметров командной строки.
  По умолчанию \b xxx="mbtcp".
  Далее приведены основные параметры:

  \b --xxx-name ID - идентификатор(name) процесса.

  IP-адрес шлюза задаётся параметром в конфигурационном файле \b gateway_iaddr или
  параметром командной строки \b --xxx-gateway-iaddr.

  Порт задаётся в конфигурационном файле параметром \b gateway_port или
  параметром командной строки \b --xxx-gateway-port. По умолчанию используется порт \b 502.

  \b --xxx-recv-timeout или \b recv_timeout msec - таймаут на приём одного сообщения. По умолчанию 100 мсек.

  \b --xxx-timeout или \b timeout msec  - таймаут на определение отсутсвия связи
                                               (после этого идёт попытка реинициализировать соединение)
                                               По умолчанию 5000 мсек.

  \b --xxx-reinit-timeout или \b reinit_timeout msec  - таймаут на реинициализацию канала связи (после потери связи)
                                               По умолчанию timeout.

  \b --xxx-no-query-optimization или \b no_query_optimization   - [1|0] отключить оптимизацию запросов

   Оптимизация заключается в том, что регистры идущие подряд автоматически запрашиваются/записываются одним запросом.
   В связи с чем, функция указанная в качестве \b 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 к работе.

  @section sec_MBTCP_ConfList Конфигурирование списка регистров для ModbusTCP master
  Конфигурационные параметры задаются в секции <sensors> конфигурационного файла.
  Список обрабатываемых регистров задаётся при помощи двух параметров командной строки

  \b --xxx-filter-field  - задаёт фильтрующее поле для датчиков

  \b --xxx-filter-value  - задаёт значение фильтрующего поля. Необязательный параметр.

  \b --xxx-statistic-sec sec - при наличии выведет кол-во посланных запросов за этот промежуток времени.

  \b --xxx-set-prop-prefix [str] - Использовать 'str' в качестве префикса для свойств.
                                  Если не указать 'str' будет использован пустой префикс.

Если параметры не заданы, будет произведена попытка загрузить все датчики, у которых
  присутствуют необходимые настроечные параметры.

  \warning Если в результате список будет пустым, процесс завершает работу.

  Пример конфигурационных параметров:
<sensors name="Sensors">
...
<item name="MySensor_S" textname="my sesnsor" iotype="DI"
tcp_mbtype="rtu" tcp_mbaddr="0x01" tcp_mbfunc="0x04" tcp_mbreg="0x02" my_tcp="1"
/>
...
</sensors>
Предупреждения
По умолчанию для свойств используется префикс "tcp_". Но если задано поле filter-field, то для свойств будет использован префикс "filter-fileld"_. При этом при помощи –xxx-set-prop-prefix val можно принудительно задать префикс. Если просто указать ключ –xxx-set-prop-prefix - будет использован "пустой" префикс (свойства без префикса). Префикс должен задаваться "полным", т.е. включая _(подчёркивание), если оно используется в свойствах (например для "tcp_mbreg" должен быть задан –xxx-set-prop-prefix tcp_ ).

К основным параметрам относятся следующие (префикс tcp_ - для примера):

Помимо этого можно задавать следующие параметры:

Для инициализации "выходов" (регистров которые пишутся) можно использовать поля:

Если указано tcp_preinit="1", то прежде чем начать писать регистр в устройство, будет произведено его чтение.

По умолчанию все "записываемые" регистры инициализируются значением из SM. Т.е. пока не будет первый раз считано значение из SM, регистры в устройство писатся не будут. Чтобы отключить это поведение, можно указать параметр

При этом будет записывыться значение "default".

Предупреждения
Регистр должен быть уникальным. И может повторятся только если указан параметр nbit или nbyte.

Управление режимом работы MBTCPMaster

В MBTCPMaster заложена возможность управлять режимом работы процесса. Поддерживаются следующие режимы:

Режимы переключаются при помощи датчика, который можно задать либо аргументом командной строки –prefix-exchange-mode-id либо в конф. файле параметром exchangeModeID="". Константы определяющие режимы объявлены в MBTCPMaster::ExchangeMode.