Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
U
uniset2
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
UniSet project repositories
uniset2
Commits
4956d41e
Commit
4956d41e
authored
Nov 05, 2014
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(ModbusSlave): накидал скелет документации.
parent
e344b531
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
235 additions
and
1 deletion
+235
-1
MBSlave.h
extensions/ModbusSlave/MBSlave.h
+234
-0
mbslave-test-configure.xml
extensions/ModbusSlave/tests/mbslave-test-configure.xml
+1
-1
No files found.
extensions/ModbusSlave/MBSlave.h
View file @
4956d41e
...
...
@@ -18,6 +18,240 @@
#include "VTypes.h"
#include "ThreadCreator.h"
// -----------------------------------------------------------------------------
/*!
\page page_ModbusSlave Реализация Modbus slave
- \ref sec_MBSlave_Comm
- \ref sec_MBSlave_Conf
- \ref sec_MBSlave_ConfList
- \ref sec_MBSlave_FileTransfer
- \ref sec_MBSlave_MEIRDI
- \ref sec_MBSlave_DIAG
\section sec_MBSlave_Comm Общее описание Modbus slave
Класс реализует базовые функции для протокола Modbus в slave режиме. Реализацию Modbus RTU - см. RTUExchange.
Реализацию Modbus slave (TCP) - см. MBSlave. Список регистров с которыми работает процесс задаётся в конфигурационном файле
в секции \b <sensors>. см. \ref sec_MBSlave_Conf
В данной версии поддерживаются следующие функции:
- 0x02 - read input status
- 0x03 - read register outputs or memories or read word outputs or memories
- 0x04 - read input registers or memories or read word outputs or memories
- 0x05 - forces a single coil to either ON or OFF
- 0x06 - write register outputs or memories
- 0x08 - Diagnostics (Serial Line only)
- 0x0F - force multiple coils
- 0x10 - write register outputs or memories
- 0x14 - read file record
- 0x15 - write file record
- 0x2B - Modbus Encapsulated Interface
- 0x50 - set date and time
- 0x66 - file transfer
\section sec_MBSlave_Conf Конфигурирование ModbusTCP slave
Конфигурирование процесса осуществляется либо параметрами командной строки либо
через настроечную секцию.
\par Секция с настройками
При своём старте, в конфигурационном файле ищётся секция с названием объекта,
в которой указываются настроечные параметры по умолчанию.
Пример:
\code
<MBSlave1 name="MBSlave1" addr="0x31"
afterSendPause="0"
reg_from_id="0"
replyTimeout="60"
askcount_id=""
respond_invert=""
respond_id=""
timeout=""
heartbeat_id=""
initPause=""
force=""
...
\endcode
- \b addr - адрес данного устройства
- \b afterSendPause - принудительная пауза после посылки ответа
- \b reg_from_id - номер регистра брать из ID датчика
- \b replyTimeout - таймаут на формирование ответа. Если ответ на запрос будет сформирован за большее время, он не будет отослан.
- \b askcount_id - идентификатор датчика для счётчика запросов
- \b respond_id - идентификатор датчика наличия связи. Выставляется в "1" когда связь есть.
- \b respond_invert - инвертировать логику выставления датчика связи (т.е. выставлять "1" - когда нет связи).
- \b heartbeat_id - идентификтор датчика "сердцебиения". См. \ref sec_SM_HeartBeat
- \b initPause - пауза перед началом работы, после активации. По умолчанию 3000 мсек.
- \b force - [1,0] перезаписывать ли значения в SharedMemory каждый раз (а не по изменению).
- \b timeout msec - таймаут, для определения отсутствия связи
Специфичные для RTU настройки:
\code
device="/dev/ttyS0" speed="9600" use485F="1" transmitCtl="0">
\endcode
- \b device - устройство (порт)
- \b speed - скорость обмена
- \b use485F - [0,1] - использовать специальный класс для обмена по RS485 на контрллерах фаствел (убирает echo программным путём).
- \b transmitCtl - [0,1] - управлять ли приёмопередатчиков (ну программном уровне). Обычно это на аппаратном или драйвером.
Специфичные для TCP настройки:
\code
iaddr="localhost" iport="502"
\endcode
- \b iaddr - ip адрес данного устройства
- \b iport - tcp порт.
\par Параметры запуска
При создании объекта в конструкторе передаётся префикс для определения параметров командной строки.
По умолчанию \b xxx="mbs".
Далее приведены основные параметры:
\b --xxx-name ID - идентификатор процесса.
\b --xxx-my-addr addr - slave-адрес для данного устройства.
\b --xxx-timeout или \b timeout msec - таймаут на определение отсутсвия связи.
\b --xxx-reply-timeout msec - таймаут на формирование ответа.
\b --xxx-initPause или \b initPause msec - пауза перед началом работы, после активации. По умолчанию 50 мсек.
\b --xxx-force или \b force [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 к работе.
\b --xxx-allow-setdatetime 0,1 - Включить функцию 0x50. Выставление даты и времени.
\par Настройки протокола RTU:
\b --xxx-dev devname - файл устройства
\b --xxx-speed - Скорость обмена (9600,19920,38400,57600,115200)
\par Настройки протокола TCP:
\b --xxx-inet-addr [xxx.xxx.xxx.xxx | hostname ] - this modbus server address
\b --xxx-inet-port num - this modbus server port. Default: 502.
\section sec_MBSlave_ConfList Конфигурирование списка регистров для ModbusSlave
Конфигурационные параметры задаются в секции <sensors> конфигурационного файла.
Список обрабатываемых регистров задаётся при помощи двух параметров командной строки
\b --xxx-filter-field - задаёт фильтрующее поле для датчиков
\b --xxx-filter-value - задаёт значение фильтрующего поля. Необязательный параметр.
\warning Если в результате список будет пустым, процесс завершает работу.
Пример конфигурационных параметров:
\code
<sensors name="Sensors">
...
<item name="MySensor_S" textname="my sesnsor" iotype="DI"
mbs="1" mbreg="1"
/>
...
</sensors>
\endcode
\warning По умолчанию для свойств используется заданный в конструктроре префикс "mbs_".
К основным параметрам настройки датчиков относятся следующие (префикс \b mbs_ - для примера):
- \b mbs_mbreg - запрашиваемый/записываемый регистр. Если не используется параметр \b reg_from_id.
Помимо этого можно задавать следующие параметры:
- \b mbs_vtype - тип переменной. см VTypes::VType.
- \b mbs_rawdata - [0|1] - игнорировать или нет параметры калибровки (cmin,cmax,rmin,rmax,presicion,caldiagram)
- \b mbs_iotype - [DI,DO,AI,AO] - переназначить тип датчика. По умолчанию используется поле iotype.
- \b mbs_nbyte - [1|2] номер байта. Используется если mbs_vtype="byte".
- \b accessmode - режим доступа к регистру.
"ro" - read only
"wo" - write only
"rw" - read/write. Режим по умолчанию.
\warning Регистр должен быть уникальным. И может повторятся только если указан параметр \a nbyte.
\section sec_MBSlave_FileTransfer Настройка передачи файлов в ModbusSlave (0x66)
Данная реализация позволяет передавать по протоколу Modbus заранее заданные файлы.
Настройка происходвится в конфигурационном файле.
\code
<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>
\endcode
- \b id - задаёт идентификтор файла (собственно он и будет запрашиваться.
- \b name - название файла
- \b directory - каталог где храниться файл.
\section sec_MBSlave_MEIRDI Поддержка "MODBUS Encapsulated Interface" (0x2B)[0x0E]
\code
<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>
\endcode
\section sec_MBSlave_DIAG Диагностические функции (0x08)
*/
// -----------------------------------------------------------------------------
/*! Реализация slave-интерфейса */
class
MBSlave
:
public
UniSetObject_LT
...
...
extensions/ModbusSlave/tests/mbslave-test-configure.xml
View file @
4956d41e
...
...
@@ -33,7 +33,7 @@
</History>
</SharedMemory>
<MBSlave1
addr=
"0x31"
aftersend-pause=
"0"
dev
=
"/dev/ttyS0"
levels=
"info,warn,crit
"
name=
"MBSlave1"
poll_time=
"200"
reply_timeout=
"60"
speed=
"9600"
>
<MBSlave1
addr=
"0x31"
aftersend-pause=
"0"
dev
ice=
"/dev/ttyS0
"
name=
"MBSlave1"
poll_time=
"200"
reply_timeout=
"60"
speed=
"9600"
>
<filelist>
<!-- Список файлов разрешённых для передачи по modbus
directory - каталог где лежит файл. Можно не задавать
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment