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
ff49c442
Commit
ff49c442
authored
Dec 04, 2013
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(modbus): MultiMaster подправил help
parent
6e6834cd
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
63 additions
and
23 deletions
+63
-23
MBExchange.cc
extensions/ModbusMaster/MBExchange.cc
+1
-1
MBTCPMaster.cc
extensions/ModbusMaster/MBTCPMaster.cc
+1
-2
MBTCPMultiMaster.cc
extensions/ModbusMaster/MBTCPMultiMaster.cc
+16
-6
MBTCPMultiMaster.h
extensions/ModbusMaster/MBTCPMultiMaster.h
+22
-14
start_fg_mbtcpmulti.sh
extensions/ModbusMaster/start_fg_mbtcpmulti.sh
+23
-0
No files found.
extensions/ModbusMaster/MBExchange.cc
View file @
ff49c442
...
...
@@ -144,7 +144,7 @@ void MBExchange::help_print( int argc, const char* const* argv )
cout
<<
"--prefix-confnode name - Настроечная секция в конф. файле <name>. "
<<
endl
;
cout
<<
"--prefix-polltime msec - Пауза между опросаом карт. По умолчанию 200 мсек."
<<
endl
;
cout
<<
"--prefix-recv-timeout msec - Таймаут на приём одного сообщения"
<<
endl
;
cout
<<
"--prefix-timeout msec - Таймаут для определения отсутсвия соединения"
<<
endl
;
cout
<<
"--prefix-timeout msec - Таймаут для определения отсутс
т
вия соединения"
<<
endl
;
cout
<<
"--prefix-reopen-timeout msec - Таймаут для 'переоткрытия соединения' при отсутсвия соединения msec милисекунд. По умолчанию 10 сек."
<<
endl
;
cout
<<
"--prefix-heartbeat-id name - Данный процесс связан с указанным аналоговым heartbeat-дачиком."
<<
endl
;
cout
<<
"--prefix-heartbeat-max val - Максимальное значение heartbeat-счётчика для данного процесса. По умолчанию 10."
<<
endl
;
...
...
extensions/ModbusMaster/MBTCPMaster.cc
View file @
ff49c442
...
...
@@ -166,8 +166,7 @@ void MBTCPMaster::help_print( int argc, const char* const* argv )
{
cout
<<
"Default: prefix='mbtcp'"
<<
endl
;
MBExchange
::
help_print
(
argc
,
argv
);
// ---------- init MBTCP ----------
// cout << "--prefix-sm-ready-timeout - время на ожидание старта SM" << endl;
cout
<<
endl
;
cout
<<
" Настройки протокола TCP: "
<<
endl
;
cout
<<
"--prefix-gateway-iaddr hostname,IP - IP опрашиваемого узла"
<<
endl
;
cout
<<
"--prefix-gateway-port num - port на опрашиваемом узле"
<<
endl
;
...
...
extensions/ModbusMaster/MBTCPMultiMaster.cc
View file @
ff49c442
...
...
@@ -43,6 +43,7 @@ checkThread(0)
UniXML_iterator
it
(
cnode
);
checktime
=
conf
->
getArgPInt
(
"--"
+
prefix
+
"-checktime"
,
it
.
getProp
(
"checktime"
),
5000
);
force_disconnect
=
conf
->
getArgInt
(
"--"
+
prefix
+
"-persistent-connection"
,
it
.
getProp
(
"persistent_connection"
))
?
false
:
true
;
UniXML_iterator
it1
(
it
);
if
(
!
it1
.
find
(
"GateList"
)
)
...
...
@@ -102,7 +103,7 @@ checkThread(0)
sinf
.
sleepPause_usec
=
it1
.
getPIntProp
(
"sleepPause_usec"
,
sleepPause_usec
);
sinf
.
respond_invert
=
it1
.
getPIntProp
(
"respond_invert"
,
0
);
// sinf.force_disconnect = it.getProp("persistent_connection"
) ? false : true;
sinf
.
force_disconnect
=
it
.
getPIntProp
(
"persistent_connection"
,
!
force_disconnect
)
?
false
:
true
;
ostringstream
n
;
n
<<
sinf
.
ip
<<
":"
<<
sinf
.
port
;
...
...
@@ -140,6 +141,12 @@ checkThread(0)
pollThread
=
new
ThreadCreator
<
MBTCPMultiMaster
>
(
this
,
&
MBTCPMultiMaster
::
poll_thread
);
checkThread
=
new
ThreadCreator
<
MBTCPMultiMaster
>
(
this
,
&
MBTCPMultiMaster
::
check_thread
);
// Т.к. при "многоканальном" доступе к slave, смена канала должна происходит сразу после
// неудачной попытки запросов по одному из каналов, то ПЕРЕОПРЕДЕЛЯЕМ reopen, на timeout..
ptReopen
.
setTiming
(
ptTimeout
.
getInterval
());
if
(
dlog
.
debugging
(
Debug
::
INFO
)
)
printMap
(
rmap
);
}
...
...
@@ -223,7 +230,7 @@ bool MBTCPMultiMaster::MBSlaveInfo::init()
dlog
[
Debug
::
INFO
]
<<
myname
<<
"(init): connect..."
<<
endl
;
mbtcp
->
connect
(
ip
,
port
);
//
mbtcp->setForceDisconnect(force_disconnect);
mbtcp
->
setForceDisconnect
(
force_disconnect
);
if
(
recv_timeout
>
0
)
mbtcp
->
setTimeout
(
recv_timeout
);
...
...
@@ -351,10 +358,13 @@ void MBTCPMultiMaster::help_print( int argc, const char* const* argv )
{
cout
<<
"Default: prefix='mbtcp'"
<<
endl
;
MBExchange
::
help_print
(
argc
,
argv
);
// ---------- init MBTCP ----------
// cout << "--prefix-sm-ready-timeout - время на ожидание старта SM" << endl;
cout
<<
" Настройки протокола TCP: "
<<
endl
;
cout
<<
"--prefix-checktime - период проверки связи по каналам (<GateList>)"
<<
endl
;
cout
<<
endl
;
cout
<<
" Настройки протокола TCP(MultiMaster): "
<<
endl
;
cout
<<
"--prefix-persistent-connection 0,1 - Не закрывать соединение на каждом цикле опроса"
<<
endl
;
cout
<<
"--prefix-checktime - период проверки связи по каналам (<GateList>)"
<<
endl
;
cout
<<
endl
;
cout
<<
" ВНИМАНИЕ! '--prefix-reopen-timeout' для MBTCPMultiMaster НЕ ДЕЙСТВУЕТ! "
<<
endl
;
cout
<<
" Переключение на следующий канал зависит от '--prefix-timeout'"
<<
endl
;
}
// -----------------------------------------------------------------------------
MBTCPMultiMaster
*
MBTCPMultiMaster
::
init_mbmaster
(
int
argc
,
const
char
*
const
*
argv
,
...
...
extensions/ModbusMaster/MBTCPMultiMaster.h
View file @
ff49c442
...
...
@@ -9,19 +9,24 @@
#include "modbus/ModbusTCPMaster.h"
// -----------------------------------------------------------------------------
/*!
\page page_ModbusTCP
Реализация ModbusTCP
master
\page page_ModbusTCP
Multi Реализация ModbusTCP 'multi'
master
- \ref sec_MBTCP_Comm
- \ref sec_MBTCP_Conf
- \ref sec_MBTCP_ConfList
- \ref sec_MBTCP_ExchangeMode
- \ref sec_MBTCP
M
_Comm
- \ref sec_MBTCP
M
_Conf
- \ref sec_MBTCP
M
_ConfList
- \ref sec_MBTCP
M
_ExchangeMode
\section sec_MBTCP
_Comm Общее описание ModbusTCP m
aster
\section sec_MBTCP
M_Comm Общее описание ModbusTCPMultiM
aster
Класс реализует процесс обмена (опрос/запись) с RTU-устройствами,
через TCP-шлюз. Список регистров с которыми работает процесс задаётся в конфигурационном файле
в секции \b <sensors>. см. \ref sec_MBTCP_Conf
\section sec_MBTCP_Conf Конфигурирование ModbusTCP master
в секции \b <sensors>. см. \ref sec_MBTCPM_Conf
При этом для шлюза можно задавать несколько ip-адресов (см. <GateList>), если связь пропадает по
одному каналу (ip), то происходит переключение на другой канал (через timeout мсек), если пропадает
с этим каналом, то переключается на следующий и так по кругу (в порядке уменьшения приоритета, задаваемого
для каждого канала (cм. <GateList> \a priority).
\section sec_MBTCPM_Conf Конфигурирование ModbusTCPMultiMaster
Конфигурирование процесса осуществляется либо параметрами командной строки либо
через настроечную секцию.
...
...
@@ -114,7 +119,7 @@
\b --xxx-activate-timeout msec . По умолчанию 2000. - время ожидания готовности SharedMemory к работе.
\section sec_MBTCP_ConfList Конфигурирование списка регистров для ModbusTCP master
\section sec_MBTCP
M
_ConfList Конфигурирование списка регистров для ModbusTCP master
Конфигурационные параметры задаются в секции <sensors> конфигурационного файла.
Список обрабатываемых регистров задаётся при помощи двух параметров командной строки
...
...
@@ -180,7 +185,7 @@
\warning Регистр должен быть уникальным. И может повторятся только если указан параметр \a nbit или \a nbyte.
\section sec_MBTCP_ExchangeMode Управление режимом работы MBTCPMultiMaster
\section sec_MBTCP
M
_ExchangeMode Управление режимом работы MBTCPMultiMaster
В MBTCPMultiMaster заложена возможность управлять режимом работы процесса. Поддерживаются
следующие режимы:
- \b emNone - нормальная работа (по умолчанию)
...
...
@@ -197,8 +202,8 @@
*/
// -----------------------------------------------------------------------------
/*!
\par Реализация Modbus TCP Master для обмена с многими ModbusRTU устройствами
через один modbus tcp шлюз.
\par Реализация Modbus TCP M
ulti M
aster для обмена с многими ModbusRTU устройствами
через один modbus tcp шлюз
, доступный по нескольким ip-адресам
.
\par Чтобы не зависеть от таймаутов TCP соединений, которые могут неопределённо зависать
на создании соединения с недоступным хостом. Обмен вынесен в отдельный поток.
...
...
@@ -240,7 +245,9 @@ class MBTCPMultiMaster:
{
MBSlaveInfo
()
:
ip
(
""
),
port
(
0
),
mbtcp
(
0
),
priority
(
0
),
respond
(
false
),
respond_id
(
UniSetTypes
::
DefaultObjectId
),
respond_invert
(
false
),
recv_timeout
(
200
),
aftersend_pause
(
0
),
sleepPause_usec
(
100
),
myname
(
""
),
initOK
(
false
){}
recv_timeout
(
200
),
aftersend_pause
(
0
),
sleepPause_usec
(
100
),
force_disconnect
(
true
),
myname
(
""
),
initOK
(
false
){}
std
::
string
ip
;
int
port
;
...
...
@@ -263,6 +270,7 @@ class MBTCPMultiMaster:
int
recv_timeout
;
int
aftersend_pause
;
int
sleepPause_usec
;
bool
force_disconnect
;
std
::
string
myname
;
...
...
extensions/ModbusMaster/start_fg_mbtcpmulti.sh
0 → 100755
View file @
ff49c442
#!/bin/sh
./uniset-start.sh
-f
./uniset-mbtcpmultimaster
\
--confile
test.xml
\
--mbtcp-name
MBMultiMaster1
\
--smemory-id
SharedMemory
\
--dlog-add-levels
info,crit,warn,level4,level3,level9
\
--mbtcp-set-prop-prefix
\
--mbtcp-filter-field
rs
\
--mbtcp-filter-value
5
\
--mbtcp-gateway-iaddr
127.0.0.1
\
--mbtcp-gateway-port
2048
\
--mbtcp-recv-timeout
3000
\
--mbtcp-timeout
2000
\
--mbtcp-force-disconnect
1
\
--mbtcp-polltime
3000
\
--mbtcp-force-out
1
\
$*
#--mbtcp-exchange-mode-id MB1_Mode_AS \
#--mbtcp-filter-field mbtcp --mbtcp-filter-value 1
#--mbtcp-set-prop-prefix rs_ \
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