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
07b13146
Commit
07b13146
authored
Jan 10, 2015
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(ModbusMultiMaster): работа над тестом, внесение правок по результатам тестирования
parent
3db7758a
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
335 additions
and
53 deletions
+335
-53
MBExchange.cc
extensions/ModbusMaster/MBExchange.cc
+11
-9
MBExchange.h
extensions/ModbusMaster/MBExchange.h
+1
-1
MBTCPMultiMaster.cc
extensions/ModbusMaster/MBTCPMultiMaster.cc
+36
-3
MBTCPMultiMaster.h
extensions/ModbusMaster/MBTCPMultiMaster.h
+3
-1
RTUExchange.cc
extensions/ModbusMaster/RTUExchange.cc
+7
-6
RTUExchange.h
extensions/ModbusMaster/RTUExchange.h
+1
-1
MBTCPTestServer.cc
extensions/ModbusMaster/tests/MBTCPTestServer.cc
+50
-2
MBTCPTestServer.h
extensions/ModbusMaster/tests/MBTCPTestServer.h
+7
-1
Makefile.am
extensions/ModbusMaster/tests/Makefile.am
+14
-4
mbmaster-test-configure.xml
extensions/ModbusMaster/tests/mbmaster-test-configure.xml
+12
-0
mbmaster-tests.at
extensions/ModbusMaster/tests/mbmaster-tests.at
+4
-4
run_test_mbtcpmaster.cc
extensions/ModbusMaster/tests/run_test_mbtcpmaster.cc
+6
-6
run_test_mbtcpmaster.sh
extensions/ModbusMaster/tests/run_test_mbtcpmaster.sh
+2
-2
run_test_mbtcpmaster_gdb.sh
extensions/ModbusMaster/tests/run_test_mbtcpmaster_gdb.sh
+1
-1
run_test_mbtcpmultimaster.cc
extensions/ModbusMaster/tests/run_test_mbtcpmultimaster.cc
+87
-0
run_test_mbtcpmultimaster.sh
extensions/ModbusMaster/tests/run_test_mbtcpmultimaster.sh
+19
-0
test_mbtcpmultimaster.cc
extensions/ModbusMaster/tests/test_mbtcpmultimaster.cc
+72
-10
ModbusTCPMaster.cc
src/Communications/Modbus/ModbusTCPMaster.cc
+2
-2
UniSetManager.cc
src/ObjectRepository/UniSetManager.cc
+0
-0
No files found.
extensions/ModbusMaster/MBExchange.cc
View file @
07b13146
...
@@ -1808,7 +1808,7 @@ MBExchange::RTUDevice* MBExchange::addDev( RTUDeviceMap& mp, ModbusRTU::ModbusAd
...
@@ -1808,7 +1808,7 @@ MBExchange::RTUDevice* MBExchange::addDev( RTUDeviceMap& mp, ModbusRTU::ModbusAd
return
0
;
return
0
;
}
}
d
crit
<<
myname
<<
"(addDev): device for addr="
<<
ModbusRTU
::
addr2str
(
a
)
d
info
<<
myname
<<
"(addDev): device for addr="
<<
ModbusRTU
::
addr2str
(
a
)
<<
" already added. Ignore device params for "
<<
xmlit
.
getProp
(
"name"
)
<<
" ..."
<<
endl
;
<<
" already added. Ignore device params for "
<<
xmlit
.
getProp
(
"name"
)
<<
" ..."
<<
endl
;
return
it
->
second
;
return
it
->
second
;
}
}
...
@@ -2723,7 +2723,7 @@ void MBExchange::timerInfo( const TimerMessage *tm )
...
@@ -2723,7 +2723,7 @@ void MBExchange::timerInfo( const TimerMessage *tm )
}
}
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
void
MBExchange
::
poll
()
bool
MBExchange
::
poll
()
{
{
if
(
!
mb
)
if
(
!
mb
)
{
{
...
@@ -2739,11 +2739,11 @@ void MBExchange::poll()
...
@@ -2739,11 +2739,11 @@ void MBExchange::poll()
}
}
if
(
!
checkProcActive
()
)
if
(
!
checkProcActive
()
)
return
;
return
false
;
updateSM
();
updateSM
();
allInitOK
=
false
;
allInitOK
=
false
;
return
;
return
false
;
}
}
{
{
...
@@ -2756,7 +2756,7 @@ void MBExchange::poll()
...
@@ -2756,7 +2756,7 @@ void MBExchange::poll()
firstInitRegisters
();
firstInitRegisters
();
if
(
!
checkProcActive
()
)
if
(
!
checkProcActive
()
)
return
;
return
false
;
bool
allNotRespond
=
true
;
bool
allNotRespond
=
true
;
...
@@ -2774,7 +2774,7 @@ void MBExchange::poll()
...
@@ -2774,7 +2774,7 @@ void MBExchange::poll()
for
(
auto
it
=
d
->
regmap
.
begin
();
it
!=
d
->
regmap
.
end
();
++
it
)
for
(
auto
it
=
d
->
regmap
.
begin
();
it
!=
d
->
regmap
.
end
();
++
it
)
{
{
if
(
!
checkProcActive
()
)
if
(
!
checkProcActive
()
)
return
;
return
false
;
if
(
exchangeMode
==
emSkipExchange
)
if
(
exchangeMode
==
emSkipExchange
)
{
{
...
@@ -2814,7 +2814,7 @@ void MBExchange::poll()
...
@@ -2814,7 +2814,7 @@ void MBExchange::poll()
break
;
break
;
if
(
!
checkProcActive
()
)
if
(
!
checkProcActive
()
)
return
;
return
false
;
}
}
if
(
stat_time
>
0
)
if
(
stat_time
>
0
)
...
@@ -2834,7 +2834,7 @@ void MBExchange::poll()
...
@@ -2834,7 +2834,7 @@ void MBExchange::poll()
}
}
if
(
!
checkProcActive
()
)
if
(
!
checkProcActive
()
)
return
;
return
false
;
// update SharedMemory...
// update SharedMemory...
updateSM
();
updateSM
();
...
@@ -2843,7 +2843,7 @@ void MBExchange::poll()
...
@@ -2843,7 +2843,7 @@ void MBExchange::poll()
for
(
auto
t
=
thrlist
.
begin
();
t
!=
thrlist
.
end
();
++
t
)
for
(
auto
t
=
thrlist
.
begin
();
t
!=
thrlist
.
end
();
++
t
)
{
{
if
(
!
checkProcActive
()
)
if
(
!
checkProcActive
()
)
return
;
return
false
;
IOBase
::
processingThreshold
(
&
(
*
t
),
shm
,
force
);
IOBase
::
processingThreshold
(
&
(
*
t
),
shm
,
force
);
}
}
...
@@ -2860,6 +2860,8 @@ void MBExchange::poll()
...
@@ -2860,6 +2860,8 @@ void MBExchange::poll()
}
}
// printMap(rmap);
// printMap(rmap);
return
!
allNotRespond
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
bool
MBExchange
::
RTUDevice
::
checkRespond
()
bool
MBExchange
::
RTUDevice
::
checkRespond
()
...
...
extensions/ModbusMaster/MBExchange.h
View file @
07b13146
...
@@ -251,7 +251,7 @@ class MBExchange:
...
@@ -251,7 +251,7 @@ class MBExchange:
virtual
std
::
shared_ptr
<
ModbusClient
>
initMB
(
bool
reopen
=
false
)
=
0
;
virtual
std
::
shared_ptr
<
ModbusClient
>
initMB
(
bool
reopen
=
false
)
=
0
;
virtual
void
poll
();
virtual
bool
poll
();
bool
pollRTU
(
RTUDevice
*
dev
,
RegMap
::
iterator
&
it
);
bool
pollRTU
(
RTUDevice
*
dev
,
RegMap
::
iterator
&
it
);
void
updateSM
();
void
updateSM
();
...
...
extensions/ModbusMaster/MBTCPMultiMaster.cc
View file @
07b13146
...
@@ -49,6 +49,8 @@ checkThread(0)
...
@@ -49,6 +49,8 @@ checkThread(0)
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
(
"ignoreTimeout"
),
ptReopen
.
getInterval
());
UniXML
::
iterator
it1
(
it
);
UniXML
::
iterator
it1
(
it
);
if
(
!
it1
.
find
(
"GateList"
)
)
if
(
!
it1
.
find
(
"GateList"
)
)
{
{
...
@@ -102,6 +104,7 @@ checkThread(0)
...
@@ -102,6 +104,7 @@ checkThread(0)
sinf
.
priority
=
it1
.
getIntProp
(
"priority"
);
sinf
.
priority
=
it1
.
getIntProp
(
"priority"
);
sinf
.
mbtcp
=
std
::
make_shared
<
ModbusTCPMaster
>
();
sinf
.
mbtcp
=
std
::
make_shared
<
ModbusTCPMaster
>
();
sinf
.
ptIgnoreTimeout
.
setTiming
(
it1
.
getPIntProp
(
"ignore_timeout"
,
ignore_timeout
)
);
sinf
.
recv_timeout
=
it1
.
getPIntProp
(
"recv_timeout"
,
recv_timeout
);
sinf
.
recv_timeout
=
it1
.
getPIntProp
(
"recv_timeout"
,
recv_timeout
);
sinf
.
aftersend_pause
=
it1
.
getPIntProp
(
"aftersend_pause"
,
aftersend_pause
);
sinf
.
aftersend_pause
=
it1
.
getPIntProp
(
"aftersend_pause"
,
aftersend_pause
);
sinf
.
sleepPause_usec
=
it1
.
getPIntProp
(
"sleepPause_usec"
,
sleepPause_usec
);
sinf
.
sleepPause_usec
=
it1
.
getPIntProp
(
"sleepPause_usec"
,
sleepPause_usec
);
...
@@ -175,7 +178,7 @@ MBTCPMultiMaster::~MBTCPMultiMaster()
...
@@ -175,7 +178,7 @@ MBTCPMultiMaster::~MBTCPMultiMaster()
for
(
auto
&
it
:
mblist
)
for
(
auto
&
it
:
mblist
)
{
{
it
.
mbtcp
=
nullptr
;
it
.
mbtcp
.
reset
();
//
= nullptr;
mbi
=
mblist
.
rend
();
mbi
=
mblist
.
rend
();
}
}
}
}
...
@@ -197,15 +200,35 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
...
@@ -197,15 +200,35 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
{
{
uniset_rwmutex_wrlock
l
(
tcpMutex
);
uniset_rwmutex_wrlock
l
(
tcpMutex
);
// если reopen=true - значит почему текущему каналу нет (хотя соединение есть)
// тогда выставляем ему признак игнорирования
if
(
mbi
!=
mblist
.
rend
()
&&
reopen
)
{
mbi
->
ignore
=
true
;
mbi
->
ptIgnoreTimeout
.
reset
();
dwarn
<<
myname
<<
"(initMB): set ignore=true for "
<<
mbi
->
ip
<<
":"
<<
mbi
->
port
<<
endl
;
}
// Если по текущему каналу связь есть, то возвращаем его
// Если по текущему каналу связь есть, то возвращаем его
if
(
mbi
!=
mblist
.
rend
()
&&
mbi
->
respond
)
if
(
mbi
!=
mblist
.
rend
()
&&
!
mbi
->
ignore
&&
mbi
->
respond
)
{
{
if
(
mbi
->
mbtcp
->
isConnection
()
||
(
!
mbi
->
mbtcp
->
isConnection
()
&&
mbi
->
init
())
)
if
(
mbi
->
mbtcp
->
isConnection
()
||
(
!
mbi
->
mbtcp
->
isConnection
()
&&
mbi
->
init
())
)
{
{
if
(
!
mbi
->
ignore
)
{
mb
=
mbi
->
mbtcp
;
return
mbi
->
mbtcp
;
}
if
(
mbi
->
ptIgnoreTimeout
.
checkTime
()
)
{
mbi
->
ignore
=
false
;
mb
=
mbi
->
mbtcp
;
mb
=
mbi
->
mbtcp
;
return
mbi
->
mbtcp
;
return
mbi
->
mbtcp
;
}
}
}
}
}
if
(
mbi
!=
mblist
.
rend
()
)
if
(
mbi
!=
mblist
.
rend
()
)
mbi
->
mbtcp
->
disconnect
();
mbi
->
mbtcp
->
disconnect
();
...
@@ -217,6 +240,14 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
...
@@ -217,6 +240,14 @@ std::shared_ptr<ModbusClient> MBTCPMultiMaster::initMB( bool reopen )
uniset_rwmutex_wrlock
l
(
tcpMutex
);
uniset_rwmutex_wrlock
l
(
tcpMutex
);
if
(
it
->
respond
&&
it
->
init
()
)
if
(
it
->
respond
&&
it
->
init
()
)
{
{
if
(
it
->
ignore
)
{
if
(
!
it
->
ptIgnoreTimeout
.
checkTime
()
)
continue
;
it
->
ignore
=
false
;
}
mbi
=
it
;
mbi
=
it
;
mb
=
mbi
->
mbtcp
;
mb
=
mbi
->
mbtcp
;
return
it
->
mbtcp
;
return
it
->
mbtcp
;
...
@@ -380,9 +411,11 @@ void MBTCPMultiMaster::help_print( int argc, const char* const* argv )
...
@@ -380,9 +411,11 @@ void MBTCPMultiMaster::help_print( int argc, const char* const* argv )
cout
<<
" Настройки протокола TCP(MultiMaster): "
<<
endl
;
cout
<<
" Настройки протокола TCP(MultiMaster): "
<<
endl
;
cout
<<
"--prefix-persistent-connection 0,1 - Не закрывать соединение на каждом цикле опроса"
<<
endl
;
cout
<<
"--prefix-persistent-connection 0,1 - Не закрывать соединение на каждом цикле опроса"
<<
endl
;
cout
<<
"--prefix-checktime - период проверки связи по каналам (<GateList>)"
<<
endl
;
cout
<<
"--prefix-checktime - период проверки связи по каналам (<GateList>)"
<<
endl
;
cout
<<
"--prefix-ignore-timeout - Timeout на повторную попытку использования канала после 'reopen-timeout'. По умолчанию: reopen-timeout * 3"
<<
endl
;
cout
<<
endl
;
cout
<<
endl
;
cout
<<
" ВНИМАНИЕ! '--prefix-reopen-timeout' для MBTCPMultiMaster НЕ ДЕЙСТВУЕТ! "
<<
endl
;
cout
<<
" ВНИМАНИЕ! '--prefix-reopen-timeout' для MBTCPMultiMaster НЕ ДЕЙСТВУЕТ! "
<<
endl
;
cout
<<
" Переключение на следующий канал зависит от '--prefix-timeout'"
<<
endl
;
cout
<<
" Смена канала происходит по --prefix-timeout. "
<<
endl
;
cout
<<
" При этом следует учитывать блокировку отключаемого канала на время: --prefix-ignore-timeout"
<<
endl
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
std
::
shared_ptr
<
MBTCPMultiMaster
>
MBTCPMultiMaster
::
init_mbmaster
(
int
argc
,
const
char
*
const
*
argv
,
std
::
shared_ptr
<
MBTCPMultiMaster
>
MBTCPMultiMaster
::
init_mbmaster
(
int
argc
,
const
char
*
const
*
argv
,
...
...
extensions/ModbusMaster/MBTCPMultiMaster.h
View file @
07b13146
...
@@ -247,7 +247,7 @@ class MBTCPMultiMaster:
...
@@ -247,7 +247,7 @@ class MBTCPMultiMaster:
respond
(
false
),
respond_id
(
UniSetTypes
::
DefaultObjectId
),
respond_invert
(
false
),
respond
(
false
),
respond_id
(
UniSetTypes
::
DefaultObjectId
),
respond_invert
(
false
),
recv_timeout
(
200
),
aftersend_pause
(
0
),
sleepPause_usec
(
100
),
recv_timeout
(
200
),
aftersend_pause
(
0
),
sleepPause_usec
(
100
),
force_disconnect
(
true
),
force_disconnect
(
true
),
myname
(
""
),
initOK
(
false
){}
myname
(
""
),
initOK
(
false
)
,
ignore
(
false
)
{}
std
::
string
ip
;
std
::
string
ip
;
int
port
;
int
port
;
...
@@ -275,6 +275,8 @@ class MBTCPMultiMaster:
...
@@ -275,6 +275,8 @@ class MBTCPMultiMaster:
std
::
string
myname
;
std
::
string
myname
;
bool
initOK
;
bool
initOK
;
bool
ignore
;
// игнорировать данное соединение (обычно флаг выставляется на время ignoreTimeout, если узел не отвечает, хотя связь есть.
PassiveTimer
ptIgnoreTimeout
;
};
};
typedef
std
::
list
<
MBSlaveInfo
>
MBGateList
;
typedef
std
::
list
<
MBSlaveInfo
>
MBGateList
;
...
...
extensions/ModbusMaster/RTUExchange.cc
View file @
07b13146
...
@@ -169,7 +169,7 @@ void RTUExchange::step()
...
@@ -169,7 +169,7 @@ void RTUExchange::step()
MBExchange
::
step
();
MBExchange
::
step
();
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
void
RTUExchange
::
poll
()
bool
RTUExchange
::
poll
()
{
{
if
(
!
mb
)
if
(
!
mb
)
{
{
...
@@ -185,11 +185,11 @@ void RTUExchange::poll()
...
@@ -185,11 +185,11 @@ void RTUExchange::poll()
}
}
if
(
!
checkProcActive
()
)
if
(
!
checkProcActive
()
)
return
;
return
false
;
updateSM
();
updateSM
();
allInitOK
=
false
;
allInitOK
=
false
;
return
;
return
false
;
}
}
{
{
...
@@ -202,7 +202,7 @@ void RTUExchange::poll()
...
@@ -202,7 +202,7 @@ void RTUExchange::poll()
firstInitRegisters
();
firstInitRegisters
();
if
(
!
checkProcActive
()
)
if
(
!
checkProcActive
()
)
return
;
return
false
;
bool
allNotRespond
=
true
;
bool
allNotRespond
=
true
;
ComPort
::
Speed
s
=
mbrtu
->
getSpeed
();
ComPort
::
Speed
s
=
mbrtu
->
getSpeed
();
...
@@ -282,7 +282,7 @@ void RTUExchange::poll()
...
@@ -282,7 +282,7 @@ void RTUExchange::poll()
break
;
break
;
if
(
!
checkProcActive
()
)
if
(
!
checkProcActive
()
)
return
;
return
false
;
}
}
}
}
...
@@ -297,7 +297,7 @@ void RTUExchange::poll()
...
@@ -297,7 +297,7 @@ void RTUExchange::poll()
for
(
auto
&
t
:
thrlist
)
for
(
auto
&
t
:
thrlist
)
{
{
if
(
!
checkProcActive
()
)
if
(
!
checkProcActive
()
)
return
;
return
false
;
IOBase
::
processingThreshold
(
&
t
,
shm
,
force
);
IOBase
::
processingThreshold
(
&
t
,
shm
,
force
);
}
}
...
@@ -314,6 +314,7 @@ void RTUExchange::poll()
...
@@ -314,6 +314,7 @@ void RTUExchange::poll()
}
}
// printMap(rmap);
// printMap(rmap);
return
!
allNotRespond
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
std
::
shared_ptr
<
RTUExchange
>
RTUExchange
::
init_rtuexchange
(
int
argc
,
const
char
*
const
*
argv
,
UniSetTypes
::
ObjectId
icID
,
std
::
shared_ptr
<
RTUExchange
>
RTUExchange
::
init_rtuexchange
(
int
argc
,
const
char
*
const
*
argv
,
UniSetTypes
::
ObjectId
icID
,
...
...
extensions/ModbusMaster/RTUExchange.h
View file @
07b13146
...
@@ -34,7 +34,7 @@ class RTUExchange:
...
@@ -34,7 +34,7 @@ class RTUExchange:
bool
transmitCtl
;
bool
transmitCtl
;
virtual
void
step
()
override
;
virtual
void
step
()
override
;
virtual
void
poll
()
override
;
virtual
bool
poll
()
override
;
virtual
std
::
shared_ptr
<
ModbusClient
>
initMB
(
bool
reopen
=
false
)
override
;
virtual
std
::
shared_ptr
<
ModbusClient
>
initMB
(
bool
reopen
=
false
)
override
;
virtual
bool
initDeviceInfo
(
RTUDeviceMap
&
m
,
ModbusRTU
::
ModbusAddr
a
,
UniXML
::
iterator
&
it
)
override
;
virtual
bool
initDeviceInfo
(
RTUDeviceMap
&
m
,
ModbusRTU
::
ModbusAddr
a
,
UniXML
::
iterator
&
it
)
override
;
...
...
extensions/ModbusMaster/tests/MBTCPTestServer.cc
View file @
07b13146
...
@@ -12,6 +12,11 @@ using namespace std;
...
@@ -12,6 +12,11 @@ using namespace std;
using
namespace
UniSetTypes
;
using
namespace
UniSetTypes
;
using
namespace
ModbusRTU
;
using
namespace
ModbusRTU
;
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
MBTCPTestServer
*
m
)
{
return
os
<<
m
->
myname
;
}
// -------------------------------------------------------------------------
MBTCPTestServer
::
MBTCPTestServer
(
ModbusAddr
myaddr
,
const
string
&
inetaddr
,
int
port
,
bool
verb
)
:
MBTCPTestServer
::
MBTCPTestServer
(
ModbusAddr
myaddr
,
const
string
&
inetaddr
,
int
port
,
bool
verb
)
:
sslot
(
NULL
),
sslot
(
NULL
),
addr
(
myaddr
),
addr
(
myaddr
),
...
@@ -22,7 +27,8 @@ MBTCPTestServer::MBTCPTestServer( ModbusAddr myaddr, const string& inetaddr, int
...
@@ -22,7 +27,8 @@ MBTCPTestServer::MBTCPTestServer( ModbusAddr myaddr, const string& inetaddr, int
lastForceCoilsQ
(
0
,
0
),
lastForceCoilsQ
(
0
,
0
),
lastWriteOutputQ
(
0
,
0
),
lastWriteOutputQ
(
0
,
0
),
thr
(
0
),
thr
(
0
),
isrunning
(
false
)
isrunning
(
false
),
disabled
(
false
)
{
{
ost
::
InetAddress
ia
(
inetaddr
.
c_str
());
ost
::
InetAddress
ia
(
inetaddr
.
c_str
());
...
@@ -30,6 +36,12 @@ MBTCPTestServer::MBTCPTestServer( ModbusAddr myaddr, const string& inetaddr, int
...
@@ -30,6 +36,12 @@ MBTCPTestServer::MBTCPTestServer( ModbusAddr myaddr, const string& inetaddr, int
cout
<<
"(init): "
cout
<<
"(init): "
<<
" addr: "
<<
ia
<<
":"
<<
port
<<
endl
;
<<
" addr: "
<<
ia
<<
":"
<<
port
<<
endl
;
{
ostringstream
s
;
s
<<
ia
<<
":"
<<
port
;
myname
=
s
.
str
();
}
sslot
=
new
ModbusTCPServerSlot
(
ia
,
port
);
sslot
=
new
ModbusTCPServerSlot
(
ia
,
port
);
// sslot->initLog(conf,name,logfile);
// sslot->initLog(conf,name,logfile);
...
@@ -83,7 +95,7 @@ void MBTCPTestServer::runThread()
...
@@ -83,7 +95,7 @@ void MBTCPTestServer::runThread()
void
MBTCPTestServer
::
execute
()
void
MBTCPTestServer
::
execute
()
{
{
isrunning
=
true
;
isrunning
=
true
;
cerr
<<
"******************** MBTCPTestServer running... "
<<
endl
;
cerr
<<
"******************** MBTCPTestServer
("
<<
myname
<<
")
running... "
<<
endl
;
// Работа...
// Работа...
while
(
1
)
while
(
1
)
{
{
...
@@ -115,6 +127,9 @@ void MBTCPTestServer::sigterm( int signo )
...
@@ -115,6 +127,9 @@ void MBTCPTestServer::sigterm( int signo )
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
readCoilStatus
(
ReadCoilMessage
&
query
,
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
readCoilStatus
(
ReadCoilMessage
&
query
,
ReadCoilRetMessage
&
reply
)
ReadCoilRetMessage
&
reply
)
{
{
if
(
disabled
)
return
ModbusRTU
::
erTimeOut
;
if
(
verbose
)
if
(
verbose
)
cout
<<
"(readCoilStatus): "
<<
query
<<
endl
;
cout
<<
"(readCoilStatus): "
<<
query
<<
endl
;
...
@@ -158,6 +173,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::readCoilStatus( ReadCoilMessage& query,
...
@@ -158,6 +173,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::readCoilStatus( ReadCoilMessage& query,
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
readInputStatus
(
ReadInputStatusMessage
&
query
,
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
readInputStatus
(
ReadInputStatusMessage
&
query
,
ReadInputStatusRetMessage
&
reply
)
ReadInputStatusRetMessage
&
reply
)
{
{
if
(
disabled
)
return
ModbusRTU
::
erTimeOut
;
if
(
verbose
)
if
(
verbose
)
cout
<<
"(readInputStatus): "
<<
query
<<
endl
;
cout
<<
"(readInputStatus): "
<<
query
<<
endl
;
...
@@ -194,6 +212,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::readInputStatus( ReadInputStatusMessage& q
...
@@ -194,6 +212,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::readInputStatus( ReadInputStatusMessage& q
mbErrCode
MBTCPTestServer
::
readInputRegisters
(
ReadInputMessage
&
query
,
mbErrCode
MBTCPTestServer
::
readInputRegisters
(
ReadInputMessage
&
query
,
ReadInputRetMessage
&
reply
)
ReadInputRetMessage
&
reply
)
{
{
if
(
disabled
)
return
ModbusRTU
::
erTimeOut
;
if
(
verbose
)
if
(
verbose
)
cout
<<
"(readInputRegisters): "
<<
query
<<
endl
;
cout
<<
"(readInputRegisters): "
<<
query
<<
endl
;
...
@@ -235,6 +256,9 @@ mbErrCode MBTCPTestServer::readInputRegisters( ReadInputMessage& query,
...
@@ -235,6 +256,9 @@ mbErrCode MBTCPTestServer::readInputRegisters( ReadInputMessage& query,
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
readOutputRegisters
(
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
readOutputRegisters
(
ModbusRTU
::
ReadOutputMessage
&
query
,
ModbusRTU
::
ReadOutputRetMessage
&
reply
)
ModbusRTU
::
ReadOutputMessage
&
query
,
ModbusRTU
::
ReadOutputRetMessage
&
reply
)
{
{
if
(
disabled
)
return
ModbusRTU
::
erTimeOut
;
if
(
verbose
)
if
(
verbose
)
cout
<<
"(readOutputRegisters): "
<<
query
<<
endl
;
cout
<<
"(readOutputRegisters): "
<<
query
<<
endl
;
...
@@ -272,6 +296,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::readOutputRegisters(
...
@@ -272,6 +296,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::readOutputRegisters(
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
forceMultipleCoils
(
ModbusRTU
::
ForceCoilsMessage
&
query
,
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
forceMultipleCoils
(
ModbusRTU
::
ForceCoilsMessage
&
query
,
ModbusRTU
::
ForceCoilsRetMessage
&
reply
)
ModbusRTU
::
ForceCoilsRetMessage
&
reply
)
{
{
if
(
disabled
)
return
ModbusRTU
::
erTimeOut
;
if
(
verbose
)
if
(
verbose
)
cout
<<
"(forceMultipleCoils): "
<<
query
<<
endl
;
cout
<<
"(forceMultipleCoils): "
<<
query
<<
endl
;
...
@@ -284,6 +311,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::forceMultipleCoils( ModbusRTU::ForceCoilsM
...
@@ -284,6 +311,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::forceMultipleCoils( ModbusRTU::ForceCoilsM
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
writeOutputRegisters
(
ModbusRTU
::
WriteOutputMessage
&
query
,
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
writeOutputRegisters
(
ModbusRTU
::
WriteOutputMessage
&
query
,
ModbusRTU
::
WriteOutputRetMessage
&
reply
)
ModbusRTU
::
WriteOutputRetMessage
&
reply
)
{
{
if
(
disabled
)
return
ModbusRTU
::
erTimeOut
;
if
(
verbose
)
if
(
verbose
)
cout
<<
"(writeOutputRegisters): "
<<
query
<<
endl
;
cout
<<
"(writeOutputRegisters): "
<<
query
<<
endl
;
...
@@ -297,6 +327,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::writeOutputRegisters( ModbusRTU::WriteOutp
...
@@ -297,6 +327,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::writeOutputRegisters( ModbusRTU::WriteOutp
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
writeOutputSingleRegister
(
ModbusRTU
::
WriteSingleOutputMessage
&
query
,
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
writeOutputSingleRegister
(
ModbusRTU
::
WriteSingleOutputMessage
&
query
,
ModbusRTU
::
WriteSingleOutputRetMessage
&
reply
)
ModbusRTU
::
WriteSingleOutputRetMessage
&
reply
)
{
{
if
(
disabled
)
return
ModbusRTU
::
erTimeOut
;
if
(
verbose
)
if
(
verbose
)
cout
<<
"(writeOutputSingleRegisters): "
<<
query
<<
endl
;
cout
<<
"(writeOutputSingleRegisters): "
<<
query
<<
endl
;
...
@@ -309,6 +342,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::writeOutputSingleRegister( ModbusRTU::Writ
...
@@ -309,6 +342,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::writeOutputSingleRegister( ModbusRTU::Writ
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
forceSingleCoil
(
ModbusRTU
::
ForceSingleCoilMessage
&
query
,
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
forceSingleCoil
(
ModbusRTU
::
ForceSingleCoilMessage
&
query
,
ModbusRTU
::
ForceSingleCoilRetMessage
&
reply
)
ModbusRTU
::
ForceSingleCoilRetMessage
&
reply
)
{
{
if
(
disabled
)
return
ModbusRTU
::
erTimeOut
;
if
(
verbose
)
if
(
verbose
)
cout
<<
"(forceSingleCoil): "
<<
query
<<
endl
;
cout
<<
"(forceSingleCoil): "
<<
query
<<
endl
;
...
@@ -322,6 +358,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::forceSingleCoil( ModbusRTU::ForceSingleCoi
...
@@ -322,6 +358,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::forceSingleCoil( ModbusRTU::ForceSingleCoi
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
journalCommand
(
ModbusRTU
::
JournalCommandMessage
&
query
,
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
journalCommand
(
ModbusRTU
::
JournalCommandMessage
&
query
,
ModbusRTU
::
JournalCommandRetMessage
&
reply
)
ModbusRTU
::
JournalCommandRetMessage
&
reply
)
{
{
if
(
disabled
)
return
ModbusRTU
::
erTimeOut
;
if
(
verbose
)
if
(
verbose
)
cout
<<
"(journalCommand): "
<<
query
<<
endl
;
cout
<<
"(journalCommand): "
<<
query
<<
endl
;
...
@@ -358,6 +397,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::journalCommand( ModbusRTU::JournalCommandM
...
@@ -358,6 +397,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::journalCommand( ModbusRTU::JournalCommandM
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
setDateTime
(
ModbusRTU
::
SetDateTimeMessage
&
query
,
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
setDateTime
(
ModbusRTU
::
SetDateTimeMessage
&
query
,
ModbusRTU
::
SetDateTimeRetMessage
&
reply
)
ModbusRTU
::
SetDateTimeRetMessage
&
reply
)
{
{
if
(
disabled
)
return
ModbusRTU
::
erTimeOut
;
if
(
verbose
)
if
(
verbose
)
cout
<<
"(setDateTime): "
<<
query
<<
endl
;
cout
<<
"(setDateTime): "
<<
query
<<
endl
;
...
@@ -445,6 +487,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::fileTransfer( ModbusRTU::FileTransferMessa
...
@@ -445,6 +487,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::fileTransfer( ModbusRTU::FileTransferMessa
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
diagnostics
(
ModbusRTU
::
DiagnosticMessage
&
query
,
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
diagnostics
(
ModbusRTU
::
DiagnosticMessage
&
query
,
ModbusRTU
::
DiagnosticRetMessage
&
reply
)
ModbusRTU
::
DiagnosticRetMessage
&
reply
)
{
{
if
(
disabled
)
return
ModbusRTU
::
erTimeOut
;
if
(
query
.
subf
==
ModbusRTU
::
subEcho
)
if
(
query
.
subf
==
ModbusRTU
::
subEcho
)
{
{
reply
=
query
;
reply
=
query
;
...
@@ -484,6 +529,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::diagnostics( ModbusRTU::DiagnosticMessage&
...
@@ -484,6 +529,9 @@ ModbusRTU::mbErrCode MBTCPTestServer::diagnostics( ModbusRTU::DiagnosticMessage&
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
read4314
(
ModbusRTU
::
MEIMessageRDI
&
query
,
ModbusRTU
::
mbErrCode
MBTCPTestServer
::
read4314
(
ModbusRTU
::
MEIMessageRDI
&
query
,
ModbusRTU
::
MEIMessageRetRDI
&
reply
)
ModbusRTU
::
MEIMessageRetRDI
&
reply
)
{
{
if
(
disabled
)
return
ModbusRTU
::
erTimeOut
;
if
(
verbose
)
if
(
verbose
)
cout
<<
"(read4314): "
<<
query
<<
endl
;
cout
<<
"(read4314): "
<<
query
<<
endl
;
...
...
extensions/ModbusMaster/tests/MBTCPTestServer.h
View file @
07b13146
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
#include <string>
#include <string>
#include <atomic>
#include <atomic>
#include <ostream>
#include "ThreadCreator.h"
#include "ThreadCreator.h"
#include "modbus/ModbusTCPServerSlot.h"
#include "modbus/ModbusTCPServerSlot.h"
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
...
@@ -36,11 +37,15 @@ class MBTCPTestServer
...
@@ -36,11 +37,15 @@ class MBTCPTestServer
inline
bool
isRunning
(){
return
isrunning
;
}
inline
bool
isRunning
(){
return
isrunning
;
}
inline
void
disableExchange
(
bool
set
=
true
){
disabled
=
set
;
}
inline
bool
getForceSingleCoilCmd
(){
return
forceSingleCoilCmd
;
}
inline
bool
getForceSingleCoilCmd
(){
return
forceSingleCoilCmd
;
}
inline
int
getLastWriteOutputSingleRegister
(){
return
lastWriteOutputSingleRegister
;
}
inline
int
getLastWriteOutputSingleRegister
(){
return
lastWriteOutputSingleRegister
;
}
inline
ModbusRTU
::
ForceCoilsMessage
getLastForceCoilsQ
(){
return
lastForceCoilsQ
;
}
inline
ModbusRTU
::
ForceCoilsMessage
getLastForceCoilsQ
(){
return
lastForceCoilsQ
;
}
inline
ModbusRTU
::
WriteOutputMessage
getLastWriteOutput
(){
return
lastWriteOutputQ
;
}
inline
ModbusRTU
::
WriteOutputMessage
getLastWriteOutput
(){
return
lastWriteOutputQ
;
}
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
const
MBTCPTestServer
*
m
);
protected
:
protected
:
// действия при завершении работы
// действия при завершении работы
void
sigterm
(
int
signo
);
void
sigterm
(
int
signo
);
...
@@ -128,7 +133,8 @@ class MBTCPTestServer
...
@@ -128,7 +133,8 @@ class MBTCPTestServer
private
:
private
:
ThreadCreator
<
MBTCPTestServer
>*
thr
;
ThreadCreator
<
MBTCPTestServer
>*
thr
;
std
::
atomic_bool
isrunning
;
std
::
atomic_bool
isrunning
;
bool
disabled
;
std
::
string
myname
;
};
};
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
#endif // MBTCPTestServer_H_
#endif // MBTCPTestServer_H_
...
...
extensions/ModbusMaster/tests/Makefile.am
View file @
07b13146
if
HAVE_TESTS
if
HAVE_TESTS
noinst_PROGRAMS
=
tests-with-sm
noinst_PROGRAMS
=
run_test_mbtcpmaster run_test_mbtcpmultimaster
tests_with_sm_SOURCES
=
tests_with_sm.cc test_mbtcpmaster.cc test_mbtcpmulti
master.cc MBTCPTestServer.cc
run_test_mbtcpmaster_SOURCES
=
run_test_mbtcpmaster.cc test_mbtcp
master.cc MBTCPTestServer.cc
tests_with_sm
_LDADD
=
$(top_builddir)
/lib/libUniSet2.la
$(top_builddir)
/extensions/lib/libUniSet2Extensions.la
\
run_test_mbtcpmaster
_LDADD
=
$(top_builddir)
/lib/libUniSet2.la
$(top_builddir)
/extensions/lib/libUniSet2Extensions.la
\
$(top_builddir)
/extensions/ModbusMaster/libUniSet2MBTCPMaster.la
\
$(top_builddir)
/extensions/ModbusMaster/libUniSet2MBTCPMaster.la
\
$(top_builddir)
/extensions/SharedMemory/libUniSet2SharedMemory.la
\
$(top_builddir)
/extensions/SharedMemory/libUniSet2SharedMemory.la
\
$(SIGC_LIBS)
$(COMCPP_LIBS)
$(SIGC_LIBS)
$(COMCPP_LIBS)
tests_with_sm_CPPFLAGS
=
-I
$(top_builddir)
/include
-I
$(top_builddir)
/extensions/include
\
run_test_mbtcpmaster_CPPFLAGS
=
-I
$(top_builddir)
/include
-I
$(top_builddir)
/extensions/include
\
-I
$(top_builddir)
/extensions/ModbusMaster
\
-I
$(top_builddir)
/extensions/SharedMemory
$(SIGC_CFLAGS)
$(COMCPP_CFLAGS)
run_test_mbtcpmultimaster_SOURCES
=
run_test_mbtcpmultimaster.cc test_mbtcpmultimaster.cc MBTCPTestServer.cc
run_test_mbtcpmultimaster_LDADD
=
$(top_builddir)
/lib/libUniSet2.la
$(top_builddir)
/extensions/lib/libUniSet2Extensions.la
\
$(top_builddir)
/extensions/ModbusMaster/libUniSet2MBTCPMaster.la
\
$(top_builddir)
/extensions/SharedMemory/libUniSet2SharedMemory.la
\
$(SIGC_LIBS)
$(COMCPP_LIBS)
run_test_mbtcpmultimaster_CPPFLAGS
=
-I
$(top_builddir)
/include
-I
$(top_builddir)
/extensions/include
\
-I
$(top_builddir)
/extensions/ModbusMaster
\
-I
$(top_builddir)
/extensions/ModbusMaster
\
-I
$(top_builddir)
/extensions/SharedMemory
$(SIGC_CFLAGS)
$(COMCPP_CFLAGS)
-I
$(top_builddir)
/extensions/SharedMemory
$(SIGC_CFLAGS)
$(COMCPP_CFLAGS)
...
...
extensions/ModbusMaster/tests/mbmaster-test-configure.xml
View file @
07b13146
...
@@ -32,6 +32,15 @@
...
@@ -32,6 +32,15 @@
<item
addr=
"0x01"
invert=
"1"
respondSensor=
"Slave_Not_Respond_S"
timeout=
"1000"
/>
<item
addr=
"0x01"
invert=
"1"
respondSensor=
"Slave_Not_Respond_S"
timeout=
"1000"
/>
</DeviceList>
</DeviceList>
</MBTCPMaster1>
</MBTCPMaster1>
<MBTCPMultiMaster1
name=
"MBTCPMultiMaster1"
poll_time=
"200"
reply_timeout=
"60"
>
<DeviceList>
<item
addr=
"0x01"
invert=
"1"
respondSensor=
"Slave_Not_Respond_S"
timeout=
"1000"
/>
</DeviceList>
<GateList>
<item
ip=
"127.0.0.1"
port=
"20050"
recv_timeout=
"200"
invert=
"1"
respondSensor=
"Slave1_Not_Respond_S"
/>
<item
ip=
"127.0.0.1"
port=
"20052"
recv_timeout=
"200"
invert=
"1"
respondSensor=
"Slave2_Not_Respond_S"
/>
</GateList>
</MBTCPMultiMaster1>
</settings>
</settings>
<ObjectsMap
idfromfile=
"1"
>
<ObjectsMap
idfromfile=
"1"
>
<!--
<!--
...
@@ -50,6 +59,8 @@
...
@@ -50,6 +59,8 @@
<item
id=
"10"
iotype=
"DI"
name=
"Slave_Not_Respond_S"
textname=
"Наличие связи со Slave"
/>
<item
id=
"10"
iotype=
"DI"
name=
"Slave_Not_Respond_S"
textname=
"Наличие связи со Slave"
/>
<item
id=
"11"
iotype=
"AI"
name=
"MBTCPMaster_Mode_AS"
textname=
"Режим работы MBTCPMaster"
/>
<item
id=
"11"
iotype=
"AI"
name=
"MBTCPMaster_Mode_AS"
textname=
"Режим работы MBTCPMaster"
/>
<item
id=
"12"
iotype=
"DI"
name=
"Slave1_Not_Respond_S"
textname=
"Наличие связи со Slave1"
/>
<item
id=
"13"
iotype=
"DI"
name=
"Slave2_Not_Respond_S"
textname=
"Наличие связи со Slave1"
/>
<item
id=
"1000"
mb=
"1"
mbtype=
"rtu"
mbaddr=
"0x01"
mbreg=
"1"
mbfunc=
"0x01"
iotype=
"DI"
name=
"TestReadCoil1_S"
textname=
"Тестовый регистр для ReadCoil"
/>
<item
id=
"1000"
mb=
"1"
mbtype=
"rtu"
mbaddr=
"0x01"
mbreg=
"1"
mbfunc=
"0x01"
iotype=
"DI"
name=
"TestReadCoil1_S"
textname=
"Тестовый регистр для ReadCoil"
/>
<item
id=
"1001"
mb=
"1"
mbtype=
"rtu"
mbaddr=
"0x01"
mbreg=
"2"
mbfunc=
"0x01"
iotype=
"DI"
name=
"TestReadCoil2_S"
textname=
"Тестовый регистр для ReadCoil"
/>
<item
id=
"1001"
mb=
"1"
mbtype=
"rtu"
mbaddr=
"0x01"
mbreg=
"2"
mbfunc=
"0x01"
iotype=
"DI"
name=
"TestReadCoil2_S"
textname=
"Тестовый регистр для ReadCoil"
/>
...
@@ -111,6 +122,7 @@
...
@@ -111,6 +122,7 @@
<objects
name=
"UniObjects"
>
<objects
name=
"UniObjects"
>
<item
id=
"6000"
name=
"TestProc"
/>
<item
id=
"6000"
name=
"TestProc"
/>
<item
id=
"6004"
name=
"MBTCPMaster1"
/>
<item
id=
"6004"
name=
"MBTCPMaster1"
/>
<item
id=
"6005"
name=
"MBTCPMultiMaster1"
/>
</objects>
</objects>
</ObjectsMap>
</ObjectsMap>
<messages
idfromfile=
"1"
name=
"messages"
/>
<messages
idfromfile=
"1"
name=
"messages"
/>
...
...
extensions/ModbusMaster/tests/mbmaster-tests.at
View file @
07b13146
AT_SETUP([ModbusTCPMaster tests (with SM)])
AT_SETUP([ModbusTCPMaster tests (with SM)])
AT_CHECK([$abs_top_builddir/testsuite/at-test-launch.sh $abs_top_builddir/extensions/ModbusMaster/tests
tests_with_sm
.sh],[0],[ignore],[ignore])
AT_CHECK([$abs_top_builddir/testsuite/at-test-launch.sh $abs_top_builddir/extensions/ModbusMaster/tests
run_test_mbtcpmaster
.sh],[0],[ignore],[ignore])
AT_CLEANUP
AT_CLEANUP
#AT_SETUP([ModbusTCPMaster tests (Apart
)])
AT_SETUP([ModbusTCPMultiMaster tests (with SM
)])
#AT_CHECK([$abs_top_builddir/testsuite/at-test-launch.sh $abs_top_builddir/extensions/ModbusMaster/tests tests_with_sm_apart
.sh],[0],[ignore],[ignore])
AT_CHECK([$abs_top_builddir/testsuite/at-test-launch.sh $abs_top_builddir/extensions/ModbusMaster/tests run_test_mbtcpmultimaster
.sh],[0],[ignore],[ignore])
#
AT_CLEANUP
AT_CLEANUP
extensions/ModbusMaster/tests/
tests_with_sm
.cc
→
extensions/ModbusMaster/tests/
run_test_mbtcpmaster
.cc
View file @
07b13146
...
@@ -21,7 +21,7 @@ int main(int argc, char* argv[] )
...
@@ -21,7 +21,7 @@ int main(int argc, char* argv[] )
cout
<<
"--confile - Использовать указанный конф. файл. По умолчанию configure.xml"
<<
endl
;
cout
<<
"--confile - Использовать указанный конф. файл. По умолчанию configure.xml"
<<
endl
;
SharedMemory
::
help_print
(
argc
,
argv
);
SharedMemory
::
help_print
(
argc
,
argv
);
cout
<<
endl
<<
endl
<<
"--------------- CATCH HELP --------------"
<<
endl
;
cout
<<
endl
<<
endl
<<
"--------------- CATCH HELP --------------"
<<
endl
;
session
.
showHelp
(
"test
_with_sm
"
);
session
.
showHelp
(
"test
s_mbtcpmaster
"
);
return
0
;
return
0
;
}
}
...
@@ -61,7 +61,7 @@ int main(int argc, char* argv[] )
...
@@ -61,7 +61,7 @@ int main(int argc, char* argv[] )
if
(
!
act
->
exist
()
)
if
(
!
act
->
exist
()
)
{
{
cerr
<<
"(tests_
with_sm
): SharedMemory not exist! (timeout="
<<
tout
<<
")"
<<
endl
;
cerr
<<
"(tests_
mbtcpmaster
): SharedMemory not exist! (timeout="
<<
tout
<<
")"
<<
endl
;
return
1
;
return
1
;
}
}
...
@@ -69,19 +69,19 @@ int main(int argc, char* argv[] )
...
@@ -69,19 +69,19 @@ int main(int argc, char* argv[] )
}
}
catch
(
SystemError
&
err
)
catch
(
SystemError
&
err
)
{
{
cerr
<<
"(tests_
with_sm
): "
<<
err
<<
endl
;
cerr
<<
"(tests_
mbtcpmaster
): "
<<
err
<<
endl
;
}
}
catch
(
Exception
&
ex
)
catch
(
Exception
&
ex
)
{
{
cerr
<<
"(tests_
with_sm
): "
<<
ex
<<
endl
;
cerr
<<
"(tests_
mbtcpmaster
): "
<<
ex
<<
endl
;
}
}
catch
(
std
::
exception
&
e
)
catch
(
std
::
exception
&
e
)
{
{
cerr
<<
"(tests_
with_sm
): "
<<
e
.
what
()
<<
endl
;
cerr
<<
"(tests_
mbtcpmaster
): "
<<
e
.
what
()
<<
endl
;
}
}
catch
(...)
catch
(...)
{
{
cerr
<<
"(tests_
with_sm
): catch(...)"
<<
endl
;
cerr
<<
"(tests_
mbtcpmaster
): catch(...)"
<<
endl
;
}
}
return
1
;
return
1
;
...
...
extensions/ModbusMaster/tests/
tests_with_sm
.sh
→
extensions/ModbusMaster/tests/
run_test_mbtcpmaster
.sh
View file @
07b13146
...
@@ -8,14 +8,14 @@ cd ../../../Utilities/Admin/
...
@@ -8,14 +8,14 @@ cd ../../../Utilities/Admin/
./uniset2-start.sh
-f
./exist |
grep
-q
UNISET_PLC/Controllers
||
exit
1
./uniset2-start.sh
-f
./exist |
grep
-q
UNISET_PLC/Controllers
||
exit
1
cd
-
cd
-
./uniset2-start.sh
-f
./
tests-with-sm
$*
--
--confile
mbmaster-test-configure.xml
--e-startup-pause
10
\
./uniset2-start.sh
-f
./
run_test_mbtcpmaster
$*
--
--confile
mbmaster-test-configure.xml
--e-startup-pause
10
\
--mbtcp-name
MBTCPMaster1
\
--mbtcp-name
MBTCPMaster1
\
--smemory-id
SharedMemory
\
--smemory-id
SharedMemory
\
--mbtcp-filter-field
mb
\
--mbtcp-filter-field
mb
\
--mbtcp-filter-value
1
\
--mbtcp-filter-value
1
\
--mbtcp-gateway-iaddr
localhost
\
--mbtcp-gateway-iaddr
localhost
\
--mbtcp-gateway-port
20048
\
--mbtcp-gateway-port
20048
\
--mbtcp-polltime
50
--mbtcp-recv-timeout
10
00
--mbtcp-polltime
50
--mbtcp-recv-timeout
5
00
#--dlog-add-levels any
#--dlog-add-levels any
#--mbtcp-force-out 1
#--mbtcp-force-out 1
...
...
extensions/ModbusMaster/tests/
tests_with_sm
_gdb.sh
→
extensions/ModbusMaster/tests/
run_test_mbtcpmaster
_gdb.sh
View file @
07b13146
...
@@ -8,7 +8,7 @@ cd ../../../Utilities/Admin/
...
@@ -8,7 +8,7 @@ cd ../../../Utilities/Admin/
./uniset2-start.sh
-f
./exist |
grep
-q
UNISET_PLC/Controllers
||
exit
1
./uniset2-start.sh
-f
./exist |
grep
-q
UNISET_PLC/Controllers
||
exit
1
cd
-
cd
-
./uniset2-start.sh
-g
./
tests-with-sm
$*
--
--confile
mbmaster-test-configure.xml
--e-startup-pause
10
\
./uniset2-start.sh
-g
./
run_test_mbtcpmaster
$*
--
--confile
mbmaster-test-configure.xml
--e-startup-pause
10
\
--mbtcp-name
MBTCPMaster1
\
--mbtcp-name
MBTCPMaster1
\
--smemory-id
SharedMemory
\
--smemory-id
SharedMemory
\
--mbtcp-filter-field
mb
\
--mbtcp-filter-field
mb
\
...
...
extensions/ModbusMaster/tests/run_test_mbtcpmultimaster.cc
0 → 100644
View file @
07b13146
#define CATCH_CONFIG_RUNNER
#include <catch.hpp>
#include <string>
#include "Debug.h"
#include "UniSetActivator.h"
#include "PassiveTimer.h"
#include "SharedMemory.h"
#include "Extensions.h"
#include "MBTCPMultiMaster.h"
// --------------------------------------------------------------------------
using
namespace
std
;
using
namespace
UniSetTypes
;
using
namespace
UniSetExtensions
;
// --------------------------------------------------------------------------
int
main
(
int
argc
,
char
*
argv
[]
)
{
Catch
::
Session
session
;
if
(
argc
>
1
&&
(
strcmp
(
argv
[
1
],
"--help"
)
==
0
||
strcmp
(
argv
[
1
],
"-h"
)
==
0
)
)
{
cout
<<
"--confile - Использовать указанный конф. файл. По умолчанию configure.xml"
<<
endl
;
SharedMemory
::
help_print
(
argc
,
argv
);
cout
<<
endl
<<
endl
<<
"--------------- CATCH HELP --------------"
<<
endl
;
session
.
showHelp
(
"test_mbtcpmultimaster"
);
return
0
;
}
int
returnCode
=
session
.
applyCommandLine
(
argc
,
argv
,
Catch
::
Session
::
OnUnusedOptions
::
Ignore
);
if
(
returnCode
!=
0
)
// Indicates a command line error
return
returnCode
;
try
{
auto
conf
=
uniset_init
(
argc
,
argv
);
conf
->
initDebug
(
dlog
,
"dlog"
);
dlog
.
logFile
(
"./smtest.log"
);
bool
apart
=
findArgParam
(
"--apart"
,
argc
,
argv
)
!=
-
1
;
auto
shm
=
SharedMemory
::
init_smemory
(
argc
,
argv
);
if
(
!
shm
)
return
1
;
auto
mb
=
MBTCPMultiMaster
::
init_mbmaster
(
argc
,
argv
,
shm
->
getId
(),
(
apart
?
nullptr
:
shm
));
if
(
!
mb
)
return
1
;
auto
act
=
UniSetActivator
::
Instance
();
act
->
addObject
(
shm
);
act
->
addObject
(
mb
);
SystemMessage
sm
(
SystemMessage
::
StartUp
);
act
->
broadcast
(
sm
.
transport_msg
()
);
act
->
run
(
true
);
int
tout
=
6000
;
PassiveTimer
pt
(
tout
);
while
(
!
pt
.
checkTime
()
&&
!
act
->
exist
()
)
msleep
(
100
);
if
(
!
act
->
exist
()
)
{
cerr
<<
"(tests_mbtcpmultimaster): SharedMemory not exist! (timeout="
<<
tout
<<
")"
<<
endl
;
return
1
;
}
return
session
.
run
();
}
catch
(
SystemError
&
err
)
{
cerr
<<
"(tests_mbtcpmultimaster): "
<<
err
<<
endl
;
}
catch
(
Exception
&
ex
)
{
cerr
<<
"(tests_mbtcpmultimaster): "
<<
ex
<<
endl
;
}
catch
(
std
::
exception
&
e
)
{
cerr
<<
"(tests_mbtcpmultimaster): "
<<
e
.
what
()
<<
endl
;
}
catch
(...)
{
cerr
<<
"(tests_mbtcpmultimaster): catch(...)"
<<
endl
;
}
return
1
;
}
extensions/ModbusMaster/tests/run_test_mbtcpmultimaster.sh
0 → 100755
View file @
07b13146
#!/bin/sh
# '--' - нужен для отделения аргументов catch, от наших..
cd
../../../Utilities/Admin/
./uniset2-start.sh
-f
./create_links.sh
./uniset2-start.sh
-f
./create
./uniset2-start.sh
-f
./exist |
grep
-q
UNISET_PLC/Controllers
||
exit
1
cd
-
./uniset2-start.sh
-f
./run_test_mbtcpmultimaster
$*
--
--confile
mbmaster-test-configure.xml
--e-startup-pause
10
\
--mbtcp-name
MBTCPMultiMaster1
\
--smemory-id
SharedMemory
\
--mbtcp-filter-field
mb
\
--mbtcp-filter-value
1
\
--mbtcp-polltime
50
--mbtcp-recv-timeout
500
--mbtcp-timeout
3000
--mbtcp-ignore-timeout
3000
--dlog-add-levels
warn,crit
# --dlog-add-levels any
#--mbtcp-force-out 1
#--dlog-add-levels any
extensions/ModbusMaster/tests/test_mbtcpmultimaster.cc
View file @
07b13146
...
@@ -8,30 +8,92 @@
...
@@ -8,30 +8,92 @@
using
namespace
std
;
using
namespace
std
;
using
namespace
UniSetTypes
;
using
namespace
UniSetTypes
;
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#include <catch.hpp>
// -----------------------------------------------------------------------------
#include <time.h>
#include <memory>
#include <limits>
#include "UniSetTypes.h"
#include "MBTCPTestServer.h"
#include "MBTCPMultiMaster.h"
// -----------------------------------------------------------------------------
using
namespace
std
;
using
namespace
UniSetTypes
;
// -----------------------------------------------------------------------------
static
ModbusRTU
::
ModbusAddr
slaveaddr
=
0x01
;
// conf->getArgInt("--mbs-my-addr");
static
ModbusRTU
::
ModbusAddr
slaveaddr
=
0x01
;
// conf->getArgInt("--mbs-my-addr");
static
int
port
=
200
48
;
// conf->getArgInt("--mbs-inet-port");
static
int
port
=
200
50
;
// conf->getArgInt("--mbs-inet-port");
static
string
addr
(
"127.0.0.1"
);
// conf->getArgParam("--mbs-inet-addr");
static
string
addr
(
"127.0.0.1"
);
// conf->getArgParam("--mbs-inet-addr");
static
ObjectId
slaveID
=
6004
;
// conf->getObjectID( conf->getArgParam("--mbs-name"));
static
int
port2
=
20052
;
static
ModbusTCPMaster
*
mb
=
nullptr
;
static
string
addr2
(
"127.0.0.1"
);
static
UInterface
*
ui
=
nullptr
;
static
ModbusRTU
::
ModbusAddr
slaveADDR
=
0x01
;
static
shared_ptr
<
MBTCPTestServer
>
mbs1
;
static
shared_ptr
<
MBTCPTestServer
>
mbs2
;
static
shared_ptr
<
UInterface
>
ui
;
static
ObjectId
mbID
=
6005
;
// MBTCPMultiMaster1
static
int
polltime
=
50
;
// conf->getArgInt("--mbtcp-polltime");
static
ObjectId
slaveNotRespond
=
10
;
// Slave_Not_Respond_S
static
ObjectId
slave1NotRespond
=
12
;
// Slave1_Not_Respond_S
static
ObjectId
slave2NotRespond
=
13
;
// Slave2_Not_Respond_S
static
const
ObjectId
exchangeMode
=
11
;
// MBTCPMaster_Mode_AS
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
static
void
InitTest
()
static
void
InitTest
()
{
{
auto
conf
=
uniset_conf
();
auto
conf
=
uniset_conf
();
CHECK
(
conf
!=
nullptr
);
CHECK
(
conf
!=
nullptr
);
if
(
ui
==
nullptr
)
if
(
!
ui
)
{
{
ui
=
new
UInterface
();
ui
=
make_shared
<
UInterface
>
();
// UI понадобиться для проверки записанных в SM значений.
// UI понадобиться для проверки записанных в SM значений.
CHECK
(
ui
->
getObjectIndex
()
!=
nullptr
);
CHECK
(
ui
->
getObjectIndex
()
!=
nullptr
);
CHECK
(
ui
->
getConf
()
==
conf
);
CHECK
(
ui
->
getConf
()
==
conf
);
CHECK
(
ui
->
waitReady
(
slave
ID
,
5
000
)
);
CHECK
(
ui
->
waitReady
(
slave
NotRespond
,
8
000
)
);
}
}
if
(
!
mbs1
)
{
mbs1
=
make_shared
<
MBTCPTestServer
>
(
slaveADDR
,
addr
,
port
,
false
);
CHECK
(
mbs1
!=
nullptr
);
mbs1
->
setReply
(
0
);
mbs1
->
runThread
();
for
(
int
i
=
0
;
!
mbs1
->
isRunning
()
&&
i
<
10
;
i
++
)
msleep
(
200
);
CHECK
(
mbs1
->
isRunning
()
);
msleep
(
7000
);
CHECK
(
ui
->
getValue
(
slaveNotRespond
)
==
0
);
}
if
(
!
mbs2
)
{
mbs2
=
make_shared
<
MBTCPTestServer
>
(
slaveADDR
,
addr2
,
port2
,
false
);
CHECK
(
mbs2
!=
nullptr
);
mbs2
->
setReply
(
0
);
mbs2
->
runThread
();
for
(
int
i
=
0
;
!
mbs2
->
isRunning
()
&&
i
<
10
;
i
++
)
msleep
(
200
);
CHECK
(
mbs2
->
isRunning
()
);
}
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
TEST_CASE
(
"MBTCPMultiMaster: rotate channel"
,
"[modbus][mbmaster][mbtcpmultimaster]"
)
TEST_CASE
(
"MBTCPMultiMaster"
,
"[modbus][mbmaster][mbtcpmultimaster]"
)
{
{
WARN
(
"Tests for MBTCPMaster not yet"
);
InitTest
();
CHECK
(
ui
->
isExist
(
mbID
)
);
REQUIRE
(
ui
->
getValue
(
1003
)
==
0
);
mbs1
->
setReply
(
100
);
mbs2
->
setReply
(
10
);
msleep
(
polltime
+
1000
);
REQUIRE
(
ui
->
getValue
(
1003
)
==
100
);
mbs1
->
disableExchange
(
true
);
msleep
(
3200
);
// --mbtcp-timeout 3000 (см. run_test_mbtcmultipmaster.sh)
REQUIRE
(
ui
->
getValue
(
1003
)
==
10
);
mbs1
->
disableExchange
(
false
);
mbs2
->
disableExchange
(
true
);
msleep
(
3200
);
// --mbtcp-timeout 3000 (см. run_test_mbtcmultipmaster.sh)
REQUIRE
(
ui
->
getValue
(
1003
)
==
100
);
mbs2
->
disableExchange
(
false
);
REQUIRE
(
ui
->
getValue
(
1003
)
==
100
);
}
}
// -----------------------------------------------------------------------------
src/Communications/Modbus/ModbusTCPMaster.cc
View file @
07b13146
...
@@ -297,7 +297,7 @@ bool ModbusTCPMaster::checkConnection( const std::string& ip, int port, int time
...
@@ -297,7 +297,7 @@ bool ModbusTCPMaster::checkConnection( const std::string& ip, int port, int time
void
ModbusTCPMaster
::
reconnect
()
void
ModbusTCPMaster
::
reconnect
()
{
{
if
(
dlog
.
is_info
()
)
if
(
dlog
.
is_info
()
)
dlog
.
info
()
<<
"(ModbusTCPMaster): reconnect "
<<
iaddr
<<
endl
;
dlog
.
info
()
<<
"(ModbusTCPMaster): reconnect "
<<
iaddr
<<
":"
<<
port
<<
endl
;
if
(
tcp
)
if
(
tcp
)
{
{
...
@@ -387,7 +387,7 @@ void ModbusTCPMaster::connect( ost::InetAddress addr, int _port )
...
@@ -387,7 +387,7 @@ void ModbusTCPMaster::connect( ost::InetAddress addr, int _port )
void
ModbusTCPMaster
::
disconnect
()
void
ModbusTCPMaster
::
disconnect
()
{
{
if
(
dlog
.
is_info
()
)
if
(
dlog
.
is_info
()
)
dlog
.
info
()
<<
iaddr
<<
"(ModbusTCPMaster): disconnect."
<<
endl
;
dlog
.
info
()
<<
iaddr
<<
"(ModbusTCPMaster): disconnect
("
<<
iaddr
<<
":"
<<
port
<<
")
."
<<
endl
;
if
(
!
tcp
)
if
(
!
tcp
)
return
;
return
;
...
...
src/ObjectRepository/UniSetManager.cc
View file @
07b13146
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