UniSet  2.0.0
Реализация Modbus slave

Общее описание Modbus slave

Класс реализует базовые функции для протокола Modbus в slave режиме. Реализацию Modbus RTU - см. RTUExchange. Реализацию Modbus slave (TCP) - см. MBSlave. Список регистров с которыми работает процесс задаётся в конфигурационном файле в секции <sensors>. см. Конфигурирование ModbusTCP slave

В данной версии поддерживаются следующие функции:

Конфигурирование ModbusTCP slave

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

Секция с настройками
При своём старте, в конфигурационном файле ищётся секция с названием объекта, в которой указываются настроечные параметры по умолчанию. Пример:
        <MBSlave1 name="MBSlave1" addr="0x31" 
        afterSendPause="0" 
        reg_from_id="0" 
        replyTimeout="60" 
        askcount_id=""
        respond_invert=""
        respond_id=""
        timeout=""
        heartbeat_id=""
        initPause=""
        force=""
        ...

Специфичные для RTU настройки:

            device="/dev/ttyS0" speed="9600" use485F="1" transmitCtl="0">

Специфичные для TCP настройки:

        iaddr="localhost" iport="502"
Параметры запуска

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

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

--xxx-my-addr addr - slave-адрес для данного устройства.

--xxx-timeout или timeout msec - таймаут на определение отсутсвия связи.

--xxx-reply-timeout msec - таймаут на формирование ответа.

--xxx-initPause или initPause msec - пауза перед началом работы, после активации. По умолчанию 50 мсек.

--xxx-force или force [1|0]

--xxx-reg-from-id или reg_from_id [1|0]

--xxx-heartbeat-id или heartbeat_id ID - идентификатор датчика "сердцебиения" (см. Слежение за "живостью" объектов ("сердцебиение"))

--xxx-heartbeat-max или heartbeat_max val - сохраняемое значение счётчика "сердцебиения".

--xxx-activate-timeout msec . По умолчанию 2000. - время ожидания готовности SharedMemory к работе.

--xxx-allow-setdatetime 0,1 - Включить функцию 0x50. Выставление даты и времени.

Настройки протокола RTU:

--xxx-dev devname - файл устройства

--xxx-speed - Скорость обмена (9600,19920,38400,57600,115200)

Настройки протокола TCP:

--xxx-inet-addr [xxx.xxx.xxx.xxx | hostname ] - this modbus server address

--xxx-inet-port num - this modbus server port. Default: 502.

Конфигурирование списка регистров для ModbusSlave

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

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

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

Предупреждения:
Если в результате список будет пустым, процесс завершает работу.

Пример конфигурационных параметров:

  <sensors name="Sensors">
    ...
    <item name="MySensor_S" textname="my sesnsor" iotype="DI" 
          mbs="1" mbreg="1"
     />
    ...
  </sensors>
Предупреждения:
По умолчанию для свойств используется заданный в конструктроре префикс "mbs_".

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

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

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

Настройка передачи файлов в ModbusSlave (0x66)

Данная реализация позволяет передавать по протоколу Modbus заранее заданные файлы. Настройка происходвится в конфигурационном файле.

            <filelist>
                <!-- Список файлов разрешённых для передачи по modbus
            directory - каталог где лежит файл. Можно не задавать
                'ConfDir' - берётся из настроек (см. начало этого файла)
                'DataDir' - берётся из настроек (см. начало этого файла)
                'xxx'  - прямое указание каталога
        -->
                <item directory="ConfDir" id="1" name="configure.xml"/>
                <item directory="ConfDir" id="2" name="VERSION"/>
                <item directory="/tmp/" id="3" name="configure.xml.gz"/>
                <item directory="ConfDir" id="4" name="SERIAL"/>
            </filelist>

Поддержка "MODBUS Encapsulated Interface" (0x2B)[0x0E]

            <MEI> 
                <!-- ВНИМАНИЕ: должен заполняться в соответсвии со стандартом. ObjectID и DeviceID не случайны.. -->
                <device id="0x01">
                    <object id="0" comm="VendorName">
                        <string value="etersoft"/>
                    </object>
                    <object id="1" comm="ProductCode">
                        <string value="uniset"/>
                    </object>
                    <object id="2" comm="MajorMinorRevision">
                        <string value="1.6"/>
                    </object>
                </device>
                <device id="0x02">
                    <object id="3" comm="VendorURL">
                        <string value="http://www.etersoft.ru"/>
                    </object>
                    <object id="4" comm="ProductName">
                        <string value="uniset"/>
                    </object>
                    <object id="5" comm="ModelName">
                        <string value="uniset:MBSlave"/>
                    </object>
                    <object id="6" comm="UserApplicationName">
                        <string value="MBSlave1"/>
                    </object>
                </device>
                <device id="0x03">
                    <object id="128" comm="private objects">
                        <string id="129" value="etersoft"/>
                        <string id="130" value="uniset"/>
                        <string id="131" value="1.6"/>
                        <string id="132" value="http://www.etersoft.ru"/>
                        <string id="133" value="MBSlave1"/>
                    </object>
                </device>
            </MEI>

Диагностические функции (0x08)