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
f832289d
Commit
f832289d
authored
Feb 18, 2016
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(ModbusMultiChannel): попытка исправить зависание на проверке соединения,
при переключении на другой канал.
parent
9aad18af
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
48 additions
and
19 deletions
+48
-19
libuniset2.spec
conf/libuniset2.spec
+2
-0
MBExchange.cc
extensions/ModbusMaster/MBExchange.cc
+1
-1
MBTCPMultiMaster.cc
extensions/ModbusMaster/MBTCPMultiMaster.cc
+29
-13
start_fg_mbtcpmulti.sh
extensions/ModbusMaster/start_fg_mbtcpmulti.sh
+3
-2
test_mbtcpmultimaster.cc
extensions/ModbusMaster/tests/test_mbtcpmultimaster.cc
+13
-3
No files found.
conf/libuniset2.spec
View file @
f832289d
...
@@ -453,6 +453,8 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
...
@@ -453,6 +453,8 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
%changelog
%changelog
* Thu Feb 18 2016 Pavel Vainerman <pv@altlinux.ru> 2.2-alt24
* Thu Feb 18 2016 Pavel Vainerman <pv@altlinux.ru> 2.2-alt24
- modbustcpserver-echo: fixed bug for options
- modbustcpserver-echo: fixed bug for options
- ModbusTCPMultiMaster: add new logs,
add ignore option for GateList, modify change channel logic
* Wed Feb 17 2016 Pavel Vainerman <pv@altlinux.ru> 2.2-alt23
* Wed Feb 17 2016 Pavel Vainerman <pv@altlinux.ru> 2.2-alt23
- IONotifyController: fixed buf for init thresholdslist
- IONotifyController: fixed buf for init thresholdslist
...
...
extensions/ModbusMaster/MBExchange.cc
View file @
f832289d
...
@@ -3187,7 +3187,7 @@ void MBExchange::updateRespondSensors()
...
@@ -3187,7 +3187,7 @@ void MBExchange::updateRespondSensors()
{
{
bool
set
=
d
->
resp_invert
?
!
d
->
resp_state
:
d
->
resp_state
;
bool
set
=
d
->
resp_invert
?
!
d
->
resp_state
:
d
->
resp_state
;
mblog4
<<
myname
<<
": SAVE NEW respond state="
<<
set
mblog4
<<
myname
<<
": SAVE NEW
"
<<
(
d
->
resp_invert
?
"NOT"
:
""
)
<<
"
respond state="
<<
set
<<
" for addr="
<<
ModbusRTU
::
addr2str
(
d
->
mbaddr
)
<<
" for addr="
<<
ModbusRTU
::
addr2str
(
d
->
mbaddr
)
<<
" respond_id="
<<
d
->
resp_id
<<
" respond_id="
<<
d
->
resp_id
<<
" state="
<<
d
->
resp_state
<<
" state="
<<
d
->
resp_state
...
...
extensions/ModbusMaster/MBTCPMultiMaster.cc
View file @
f832289d
...
@@ -31,7 +31,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
...
@@ -31,7 +31,7 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
checktime
=
conf
->
getArgPInt
(
"--"
+
prefix
+
"-checktime"
,
it
.
getProp
(
"checktime"
),
5000
);
checktime
=
conf
->
getArgPInt
(
"--"
+
prefix
+
"-checktime"
,
it
.
getProp
(
"checktime"
),
5000
);
force_disconnect
=
conf
->
getArgInt
(
"--"
+
prefix
+
"-persistent-connection"
,
it
.
getProp
(
"persistent_connection"
))
?
false
:
true
;
force_disconnect
=
conf
->
getArgInt
(
"--"
+
prefix
+
"-persistent-connection"
,
it
.
getProp
(
"persistent_connection"
))
?
false
:
true
;
int
ignore_timeout
=
conf
->
getArgPInt
(
"--"
+
prefix
+
"-ignore-timeout"
,
it
.
getProp
(
"ignore
T
imeout"
),
ptReopen
.
getInterval
());
int
ignore_timeout
=
conf
->
getArgPInt
(
"--"
+
prefix
+
"-ignore-timeout"
,
it
.
getProp
(
"ignore
_t
imeout"
),
ptReopen
.
getInterval
());
UniXML
::
iterator
it1
(
it
);
UniXML
::
iterator
it1
(
it
);
...
@@ -53,6 +53,12 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
...
@@ -53,6 +53,12 @@ MBTCPMultiMaster::MBTCPMultiMaster( UniSetTypes::ObjectId objId, UniSetTypes::Ob
for
(
;
it1
.
getCurrent
();
it1
++
)
for
(
;
it1
.
getCurrent
();
it1
++
)
{
{
if
(
it1
.
getIntProp
(
"ignore"
)
)
{
mbinfo
<<
myname
<<
"(init): IGNORE "
<<
it1
.
getProp
(
"ip"
)
<<
":"
<<
it1
.
getProp
(
"port"
)
<<
endl
;
continue
;
}
MBSlaveInfo
sinf
;
MBSlaveInfo
sinf
;
sinf
.
ip
=
it1
.
getProp
(
"ip"
);
sinf
.
ip
=
it1
.
getProp
(
"ip"
);
...
@@ -191,6 +197,14 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
...
@@ -191,6 +197,14 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
{
{
uniset_rwmutex_wrlock
l
(
tcpMutex
);
uniset_rwmutex_wrlock
l
(
tcpMutex
);
// сперва надо обновить все ignore-ы
// т.к. фактически флаги выставляются и сбрасываются только здесь
for
(
auto
it
=
mblist
.
rbegin
();
it
!=
mblist
.
rend
();
++
it
)
{
if
(
it
->
ignore
&&
it
->
ptIgnoreTimeout
.
checkTime
()
)
it
->
ignore
=
false
;
}
// если reopen=true - значит почему текущему каналу нет (хотя соединение есть)
// если reopen=true - значит почему текущему каналу нет (хотя соединение есть)
// тогда выставляем ему признак игнорирования
// тогда выставляем ему признак игнорирования
if
(
mbi
!=
mblist
.
rend
()
&&
reopen
)
if
(
mbi
!=
mblist
.
rend
()
&&
reopen
)
...
@@ -208,6 +222,8 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
...
@@ -208,6 +222,8 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
{
{
if
(
!
mbi
->
ignore
)
if
(
!
mbi
->
ignore
)
{
{
mblog4
<<
myname
<<
"(initMB): SELECT CHANNEL "
<<
mbi
->
ip
<<
":"
<<
mbi
->
port
<<
endl
;
mb
=
mbi
->
mbtcp
;
mb
=
mbi
->
mbtcp
;
mbi
->
setUse
(
true
);
mbi
->
setUse
(
true
);
return
mbi
->
mbtcp
;
return
mbi
->
mbtcp
;
...
@@ -234,19 +250,12 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
...
@@ -234,19 +250,12 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
{
{
uniset_rwmutex_wrlock
l
(
tcpMutex
);
uniset_rwmutex_wrlock
l
(
tcpMutex
);
if
(
it
->
respond
&&
it
->
init
(
mblog
)
)
if
(
it
->
respond
&&
!
it
->
ignore
&&
it
->
init
(
mblog
)
)
{
if
(
it
->
ignore
)
{
{
if
(
!
it
->
ptIgnoreTimeout
.
checkTime
()
)
continue
;
it
->
ignore
=
false
;
}
mbi
=
it
;
mbi
=
it
;
mb
=
mbi
->
mbtcp
;
mb
=
mbi
->
mbtcp
;
mbi
->
setUse
(
true
);
mbi
->
setUse
(
true
);
mblog4
<<
myname
<<
"(initMB): SELECT CHANNEL "
<<
mbi
->
ip
<<
":"
<<
mbi
->
port
<<
endl
;
return
it
->
mbtcp
;
return
it
->
mbtcp
;
}
}
}
}
...
@@ -372,6 +381,9 @@ void MBTCPMultiMaster::check_thread()
...
@@ -372,6 +381,9 @@ void MBTCPMultiMaster::check_thread()
{
{
try
try
{
{
// сбрасываем флаг ignore..раз время вышло.
it
->
ignore
=
!
it
->
ptIgnoreTimeout
.
checkTime
();
// Если use=1" связь не проверяем и считаем что связь есть..
// Если use=1" связь не проверяем и считаем что связь есть..
bool
r
=
(
it
->
use
?
true
:
it
->
check
()
);
bool
r
=
(
it
->
use
?
true
:
it
->
check
()
);
...
@@ -507,9 +519,13 @@ const std::string MBTCPMultiMaster::MBSlaveInfo::getShortInfo() const
...
@@ -507,9 +519,13 @@ const std::string MBTCPMultiMaster::MBSlaveInfo::getShortInfo() const
{
{
ostringstream
s
;
ostringstream
s
;
s
<<
myname
<<
" respond="
<<
respond
s
<<
myname
<<
" respond="
<<
respond
<<
" (respond_id="
<<
respond_id
<<
" respond_invert="
<<
respond_invert
<<
" (respond_id="
<<
respond_id
<<
" recv_timeout="
<<
recv_timeout
<<
" resp_force="
<<
respond_force
<<
" respond_invert="
<<
respond_invert
<<
" use="
<<
use
<<
" ignore="
<<
ignore
<<
" priority="
<<
priority
<<
" recv_timeout="
<<
recv_timeout
<<
" resp_force="
<<
respond_force
<<
" use="
<<
use
<<
" ignore="
<<
(
ptIgnoreTimeout
.
checkTime
()
?
"0"
:
"1"
)
<<
" priority="
<<
priority
<<
" persistent-connection="
<<
!
force_disconnect
<<
" persistent-connection="
<<
!
force_disconnect
<<
")"
;
<<
")"
;
...
...
extensions/ModbusMaster/start_fg_mbtcpmulti.sh
View file @
f832289d
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
--confile
test.xml
\
--confile
test.xml
\
--mbtcp-name
MBMultiMaster1
\
--mbtcp-name
MBMultiMaster1
\
--smemory-id
SharedMemory
\
--smemory-id
SharedMemory
\
--dlog-add-levels
info,crit,warn,level4,level3
,level9
\
--dlog-add-levels
crit,warn,level4
,level9
\
--mbtcp-set-prop-prefix
\
--mbtcp-set-prop-prefix
\
--mbtcp-filter-field
rs
\
--mbtcp-filter-field
rs
\
--mbtcp-filter-value
5
\
--mbtcp-filter-value
5
\
...
@@ -12,11 +12,12 @@
...
@@ -12,11 +12,12 @@
--mbtcp-timeout
2000
\
--mbtcp-timeout
2000
\
--mbtcp-polltime
2000
\
--mbtcp-polltime
2000
\
--mbtcp-force-out
1
\
--mbtcp-force-out
1
\
--mbtcp-log-add-levels
any
\
--mbtcp-log-add-levels
level4,warn,crit
\
--mbtcp-persistent-connection
1
\
--mbtcp-persistent-connection
1
\
--mbtcp-run-logserver
\
--mbtcp-run-logserver
\
$*
$*
#--dlog-add-levels info,crit,warn,level4,level3,level9 \
#--mbtcp-exchange-mode-id MB1_Mode_AS \
#--mbtcp-exchange-mode-id MB1_Mode_AS \
#--mbtcp-filter-field mbtcp --mbtcp-filter-value 1
#--mbtcp-filter-field mbtcp --mbtcp-filter-value 1
#--mbtcp-set-prop-prefix rs_ \
#--mbtcp-set-prop-prefix rs_ \
...
...
extensions/ModbusMaster/tests/test_mbtcpmultimaster.cc
View file @
f832289d
...
@@ -128,16 +128,26 @@ TEST_CASE("MBTCPMultiMaster: rotate channel", "[modbus][mbmaster][mbtcpmultimast
...
@@ -128,16 +128,26 @@ TEST_CASE("MBTCPMultiMaster: rotate channel", "[modbus][mbmaster][mbtcpmultimast
mbs1
->
disableExchange
(
true
);
mbs1
->
disableExchange
(
true
);
msleep
(
4000
);
// --mbtcp-timeout 3000 (см. run_test_mbtcmultipmaster.sh)
msleep
(
4000
);
// --mbtcp-timeout 3000 (см. run_test_mbtcmultipmaster.sh)
REQUIRE
(
ui
->
getValue
(
1003
)
==
10
);
REQUIRE
(
ui
->
getValue
(
1003
)
==
10
);
REQUIRE
(
ui
->
getValue
(
12
)
==
true
);
// Т.к. respond/notrespond проверяется по возможности создать соединение
// а мы имитируем отключение просто отключением обмена
// то датчик связи всё-равно будет показывать что канал1 доступен
// поэтому датчик 12 - не проверяем..
// а просто проверяем что теперь значение приходит по другому каналу
// (см. setReply)
// ----------------------------
// REQUIRE( ui->getValue(12) == true );
REQUIRE
(
ui
->
getValue
(
13
)
==
false
);
REQUIRE
(
ui
->
getValue
(
13
)
==
false
);
mbs1
->
disableExchange
(
false
);
mbs1
->
disableExchange
(
false
);
mbs2
->
disableExchange
(
true
);
mbs2
->
disableExchange
(
true
);
msleep
(
4000
);
// --mbtcp-timeout 3000 (см. run_test_mbtcmultipmaster.sh)
msleep
(
4000
);
// --mbtcp-timeout 3000 (см. run_test_mbtcmultipmaster.sh)
REQUIRE
(
ui
->
getValue
(
1003
)
==
100
);
REQUIRE
(
ui
->
getValue
(
1003
)
==
100
);
REQUIRE
(
ui
->
getValue
(
12
)
==
false
);
//
REQUIRE( ui->getValue(12) == false );
mbs2
->
disableExchange
(
false
);
mbs2
->
disableExchange
(
false
);
REQUIRE
(
ui
->
getValue
(
1003
)
==
100
);
REQUIRE
(
ui
->
getValue
(
1003
)
==
100
);
REQUIRE
(
ui
->
getValue
(
13
)
==
true
);
//
REQUIRE( ui->getValue(13) == true );
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
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