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
87abb2e8
Commit
87abb2e8
authored
Sep 12, 2016
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Рефакторинг класса ModbusTCPMaster (и всех кто его использует).
Функции connect() теперь noexcept. P.S. (UNetUDP): чуть подправил тест
parent
46dae9ad
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
114 additions
and
135 deletions
+114
-135
mbtcpconnection.cc
Utilities/MBTester/mbtcpconnection.cc
+0
-1
mbtcptester.cc
Utilities/MBTester/mbtcptester.cc
+0
-2
libuniset2.spec
conf/libuniset2.spec
+4
-1
MBTCPMaster.cc
extensions/ModbusMaster/MBTCPMaster.cc
+9
-25
MBTCPMultiMaster.cc
extensions/ModbusMaster/MBTCPMultiMaster.cc
+5
-29
test_mbtcpmaster.cc
extensions/ModbusMaster/tests/test_mbtcpmaster.cc
+40
-0
test_mbslave.cc
extensions/ModbusSlave/tests/test_mbslave.cc
+1
-1
test_unetudp.cc
extensions/UNetUDP/tests/test_unetudp.cc
+4
-1
ModbusTCPMaster.h
include/modbus/ModbusTCPMaster.h
+4
-3
UModbus.cc
python/lib/pyUniSet/UModbus.cc
+2
-12
ModbusClient.cc
src/Communications/Modbus/ModbusClient.cc
+0
-1
ModbusServer.cc
src/Communications/Modbus/ModbusServer.cc
+1
-1
ModbusTCPMaster.cc
src/Communications/Modbus/ModbusTCPMaster.cc
+40
-46
LogReader.cc
src/Log/LogReader.cc
+4
-12
No files found.
Utilities/MBTester/mbtcpconnection.cc
View file @
87abb2e8
...
@@ -144,7 +144,6 @@ int main( int argc, char** argv )
...
@@ -144,7 +144,6 @@ int main( int argc, char** argv )
mb
.
setTimeout
(
tout
);
mb
.
setTimeout
(
tout
);
mb
.
connect
(
iaddr
,
port
);
mb
.
connect
(
iaddr
,
port
);
mb
.
setForceDisconnect
(
!
persist
);
mb
.
setForceDisconnect
(
!
persist
);
if
(
verb
)
if
(
verb
)
...
...
Utilities/MBTester/mbtcptester.cc
View file @
87abb2e8
...
@@ -332,13 +332,11 @@ int main( int argc, char** argv )
...
@@ -332,13 +332,11 @@ int main( int argc, char** argv )
mb
.
setTimeout
(
tout
);
mb
.
setTimeout
(
tout
);
mb
.
connect
(
iaddr
,
port
);
mb
.
connect
(
iaddr
,
port
);
mb
.
setForceDisconnect
(
!
persist
);
mb
.
setForceDisconnect
(
!
persist
);
if
(
verb
)
if
(
verb
)
cout
<<
"connection: "
<<
(
mb
.
isConnection
()
?
"YES"
:
"NO"
)
<<
endl
;
cout
<<
"connection: "
<<
(
mb
.
isConnection
()
?
"YES"
:
"NO"
)
<<
endl
;
if
(
count
>
ModbusRTU
::
MAXDATALEN
&&
verb
)
if
(
count
>
ModbusRTU
::
MAXDATALEN
&&
verb
)
cout
<<
"Too long packet! Max count="
<<
ModbusRTU
::
MAXDATALEN
<<
" (ignore...)"
<<
endl
;
cout
<<
"Too long packet! Max count="
<<
ModbusRTU
::
MAXDATALEN
<<
" (ignore...)"
<<
endl
;
...
...
conf/libuniset2.spec
View file @
87abb2e8
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
Name: libuniset2
Name: libuniset2
Version: 2.5
Version: 2.5
Release: alt1
3
Release: alt1
4
Summary: UniSet - library for building distributed industrial control systems
Summary: UniSet - library for building distributed industrial control systems
License: LGPL
License: LGPL
...
@@ -486,6 +486,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
...
@@ -486,6 +486,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# ..
# ..
%changelog
%changelog
* Sun Sep 11 2016 Pavel Vainerman <pv@altlinux.ru> 2.5-alt14
- (ModbusTCPMster): refactoring
* Fri Sep 09 2016 Pavel Vainerman <pv@altlinux.ru> 2.5-alt13
* Fri Sep 09 2016 Pavel Vainerman <pv@altlinux.ru> 2.5-alt13
- minor fixes in millisecToPoco() and microsecToPoco() functions
- minor fixes in millisecToPoco() and microsecToPoco() functions
...
...
extensions/ModbusMaster/MBTCPMaster.cc
View file @
87abb2e8
...
@@ -17,7 +17,6 @@
...
@@ -17,7 +17,6 @@
#include <cmath>
#include <cmath>
#include <limits>
#include <limits>
#include <sstream>
#include <sstream>
#include <Poco/Net/NetException.h>
#include <Exceptions.h>
#include <Exceptions.h>
#include <extensions/Extensions.h>
#include <extensions/Extensions.h>
#include "MBTCPMaster.h"
#include "MBTCPMaster.h"
...
@@ -95,15 +94,17 @@ std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen )
...
@@ -95,15 +94,17 @@ std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen )
if
(
!
reopen
)
if
(
!
reopen
)
return
mbtcp
;
return
mbtcp
;
mbtcp
.
reset
();
mb
.
reset
();
ptInitChannel
.
reset
();
ptInitChannel
.
reset
();
mbtcp
->
forceDisconnect
();
mbtcp
->
connect
(
iaddr
,
port
);
mbinfo
<<
myname
<<
"(init): ipaddr="
<<
iaddr
<<
" port="
<<
port
<<
" connection="
<<
(
mbtcp
->
isConnection
()
?
"OK"
:
"FAIL"
)
<<
endl
;
mb
=
mbtcp
;
return
mbtcp
;
}
}
try
{
mbtcp
=
std
::
make_shared
<
ModbusTCPMaster
>
();
mbtcp
=
std
::
make_shared
<
ModbusTCPMaster
>
();
mbtcp
->
connect
(
iaddr
,
port
);
mbtcp
->
connect
(
iaddr
,
port
);
mbtcp
->
setForceDisconnect
(
force_disconnect
);
mbtcp
->
setForceDisconnect
(
force_disconnect
);
...
@@ -113,31 +114,14 @@ std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen )
...
@@ -113,31 +114,14 @@ std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen )
mbtcp
->
setSleepPause
(
sleepPause_msec
);
mbtcp
->
setSleepPause
(
sleepPause_msec
);
mbtcp
->
setAfterSendPause
(
aftersend_pause
);
mbtcp
->
setAfterSendPause
(
aftersend_pause
);
mbinfo
<<
myname
<<
"(init): ipaddr="
<<
iaddr
<<
" port="
<<
port
<<
endl
;
mbinfo
<<
myname
<<
"(init): ipaddr="
<<
iaddr
<<
" port="
<<
port
<<
" connection="
<<
(
mbtcp
->
isConnection
()
?
"OK"
:
"FAIL"
)
<<
endl
;
auto
l
=
loga
->
create
(
myname
+
"-exchangelog"
);
auto
l
=
loga
->
create
(
myname
+
"-exchangelog"
);
mbtcp
->
setLog
(
l
);
mbtcp
->
setLog
(
l
);
if
(
ic
)
if
(
ic
)
ic
->
logAgregator
()
->
add
(
loga
);
ic
->
logAgregator
()
->
add
(
loga
);
}
catch
(
ModbusRTU
::
mbException
&
ex
)
{
mbwarn
<<
"(init): "
<<
ex
<<
endl
;
mb
=
nullptr
;
mbtcp
=
nullptr
;
}
catch
(
const
Poco
::
Net
::
NetException
&
e
)
{
mbwarn
<<
myname
<<
"(init): Can`t create socket "
<<
iaddr
<<
":"
<<
port
<<
" err: "
<<
e
.
displayText
()
<<
endl
;
mb
=
nullptr
;
mbtcp
=
nullptr
;
}
catch
(...)
{
mb
=
nullptr
;
mbtcp
=
nullptr
;
}
mb
=
mbtcp
;
mb
=
mbtcp
;
return
mbtcp
;
return
mbtcp
;
...
...
extensions/ModbusMaster/MBTCPMultiMaster.cc
View file @
87abb2e8
...
@@ -18,7 +18,6 @@
...
@@ -18,7 +18,6 @@
#include <limits>
#include <limits>
#include <iomanip>
#include <iomanip>
#include <sstream>
#include <sstream>
#include <Poco/Net/NetException.h>
#include <Exceptions.h>
#include <Exceptions.h>
#include <extensions/Extensions.h>
#include <extensions/Extensions.h>
#include "MBTCPMultiMaster.h"
#include "MBTCPMultiMaster.h"
...
@@ -315,46 +314,23 @@ bool MBTCPMultiMaster::MBSlaveInfo::check() const
...
@@ -315,46 +314,23 @@ bool MBTCPMultiMaster::MBSlaveInfo::check() const
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
bool
MBTCPMultiMaster
::
MBSlaveInfo
::
init
(
std
::
shared_ptr
<
DebugStream
>&
mblog
)
bool
MBTCPMultiMaster
::
MBSlaveInfo
::
init
(
std
::
shared_ptr
<
DebugStream
>&
mblog
)
{
{
try
{
mbinfo
<<
myname
<<
"(init): connect..."
<<
endl
;
mbinfo
<<
myname
<<
"(init): connect..."
<<
endl
;
if
(
initOK
)
return
mbtcp
->
connect
(
ip
,
port
);
mbtcp
->
connect
(
ip
,
port
);
mbtcp
->
connect
(
ip
,
port
);
mbtcp
->
setForceDisconnect
(
force_disconnect
);
mbtcp
->
setForceDisconnect
(
force_disconnect
);
if
(
recv_timeout
>
0
)
if
(
recv_timeout
>
0
)
mbtcp
->
setTimeout
(
recv_timeout
);
mbtcp
->
setTimeout
(
recv_timeout
);
// if( !initOK )
{
mbtcp
->
setSleepPause
(
sleepPause_usec
);
mbtcp
->
setSleepPause
(
sleepPause_usec
);
mbtcp
->
setAfterSendPause
(
aftersend_pause
);
mbtcp
->
setAfterSendPause
(
aftersend_pause
);
mbinfo
<<
myname
<<
"(init): connect "
<<
(
mbtcp
->
isConnection
()
?
"OK"
:
"FAIL"
)
<<
endl
;
if
(
mbtcp
->
isConnection
()
)
mbinfo
<<
"(init): "
<<
myname
<<
" connect OK"
<<
endl
;
initOK
=
true
;
initOK
=
true
;
}
return
initOK
;
mbinfo
<<
myname
<<
"(init): connect "
<<
mbtcp
->
isConnection
()
<<
endl
;
return
mbtcp
->
isConnection
();
}
catch
(
ModbusRTU
::
mbException
&
ex
)
{
mbwarn
<<
"(init): "
<<
ex
<<
endl
;
}
catch
(
const
Poco
::
Net
::
NetException
&
e
)
{
mbwarn
<<
myname
<<
"(init): Can`t create socket "
<<
ip
<<
":"
<<
port
<<
" err: "
<<
e
.
displayText
()
<<
endl
;
}
catch
(...)
{
mbwarn
<<
"(init): "
<<
myname
<<
" catch ..."
<<
endl
;
}
initOK
=
false
;
return
false
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
void
MBTCPMultiMaster
::
sysCommand
(
const
UniSetTypes
::
SystemMessage
*
sm
)
void
MBTCPMultiMaster
::
sysCommand
(
const
UniSetTypes
::
SystemMessage
*
sm
)
...
...
extensions/ModbusMaster/tests/test_mbtcpmaster.cc
View file @
87abb2e8
...
@@ -84,6 +84,46 @@ static void InitTest()
...
@@ -84,6 +84,46 @@ static void InitTest()
}
}
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
TEST_CASE
(
"MBTCPMaster: reconnect"
,
"[modbus][mbmaster][mbtcpmaster]"
)
{
InitTest
();
ModbusTCPMaster
mb
;
mb
.
setTimeout
(
500
);
// подключение к несуществующему адресу
REQUIRE_FALSE
(
mb
.
connect
(
"dummyhost"
,
2048
));
REQUIRE_FALSE
(
mb
.
isConnection
());
// нормальное подключение
REQUIRE
(
mb
.
connect
(
iaddr
,
port
));
REQUIRE
(
mb
.
isConnection
());
// переподключение (при активном текущем)
REQUIRE
(
mb
.
reconnect
());
REQUIRE
(
mb
.
isConnection
());
// отключение
mb
.
disconnect
();
REQUIRE_FALSE
(
mb
.
isConnection
());
// переподключение после отключения
REQUIRE
(
mb
.
reconnect
());
REQUIRE
(
mb
.
isConnection
());
// переподключение к несуществующему (при наличии активного подключения)
REQUIRE_FALSE
(
mb
.
connect
(
"dummyhost"
,
2048
));
REQUIRE_FALSE
(
mb
.
isConnection
());
// нормальное подключение
REQUIRE
(
mb
.
connect
(
iaddr
,
port
));
REQUIRE
(
mb
.
isConnection
());
// принудительное отключение
mb
.
forceDisconnect
();
REQUIRE_FALSE
(
mb
.
isConnection
());
}
// -----------------------------------------------------------------------------
TEST_CASE
(
"MBTCPMaster: 0x01 (read coil status)"
,
"[modbus][0x01][mbmaster][mbtcpmaster]"
)
TEST_CASE
(
"MBTCPMaster: 0x01 (read coil status)"
,
"[modbus][0x01][mbmaster][mbtcpmaster]"
)
{
{
InitTest
();
InitTest
();
...
...
extensions/ModbusSlave/tests/test_mbslave.cc
View file @
87abb2e8
...
@@ -36,7 +36,7 @@ static void InitTest()
...
@@ -36,7 +36,7 @@ static void InitTest()
{
{
mb
=
std
::
make_shared
<
ModbusTCPMaster
>
();
mb
=
std
::
make_shared
<
ModbusTCPMaster
>
();
mb
->
setTimeout
(
2000
);
mb
->
setTimeout
(
2000
);
REQUIRE_NOTHROW
(
mb
->
connect
(
addr
,
port
)
);
mb
->
connect
(
addr
,
port
);
msleep
(
5000
);
msleep
(
5000
);
}
}
}
}
...
...
extensions/UNetUDP/tests/test_unetudp.cc
View file @
87abb2e8
...
@@ -370,7 +370,10 @@ TEST_CASE("[UNetUDP]: check packets 'hole'", "[unetudp][udphole]")
...
@@ -370,7 +370,10 @@ TEST_CASE("[UNetUDP]: check packets 'hole'", "[unetudp][udphole]")
// возвращаем к нормальному..чтобы следующие тесты не поломались..
// возвращаем к нормальному..чтобы следующие тесты не поломались..
for
(
int
i
=
0
;
i
<
10
;
i
++
)
for
(
int
i
=
0
;
i
<
10
;
i
++
)
{
send
(
pack2
);
send
(
pack2
);
msleep
(
100
);
}
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
TEST_CASE
(
"[UNetUDP]: check packets 'MaxDifferens'"
,
"[unetudp][maxdifferens]"
)
TEST_CASE
(
"[UNetUDP]: check packets 'MaxDifferens'"
,
"[unetudp][maxdifferens]"
)
...
@@ -409,7 +412,7 @@ TEST_CASE("[UNetUDP]: bad packet number", "[unetudp][badnumber]")
...
@@ -409,7 +412,7 @@ TEST_CASE("[UNetUDP]: bad packet number", "[unetudp][badnumber]")
UniSetUDP
::
UDPMessage
pack
;
UniSetUDP
::
UDPMessage
pack
;
pack
.
addAData
(
8
,
60
);
pack
.
addAData
(
8
,
60
);
send
(
pack
);
send
(
pack
);
msleep
(
1
2
0
);
msleep
(
1
5
0
);
REQUIRE
(
ui
->
getValue
(
8
)
==
60
);
REQUIRE
(
ui
->
getValue
(
8
)
==
60
);
int
lastpack
=
s_numpack
-
1
;
int
lastpack
=
s_numpack
-
1
;
...
...
include/modbus/ModbusTCPMaster.h
View file @
87abb2e8
...
@@ -18,8 +18,9 @@ class ModbusTCPMaster:
...
@@ -18,8 +18,9 @@ class ModbusTCPMaster:
ModbusTCPMaster
();
ModbusTCPMaster
();
virtual
~
ModbusTCPMaster
();
virtual
~
ModbusTCPMaster
();
void
connect
(
const
std
::
string
&
addr
,
int
port
);
bool
connect
(
const
std
::
string
&
addr
,
int
port
,
bool
closeOldConnection
=
true
)
noexcept
;
void
connect
(
const
Poco
::
Net
::
SocketAddress
&
addr
,
int
_port
);
bool
connect
(
const
Poco
::
Net
::
SocketAddress
&
addr
,
int
_port
,
bool
closeOldConnection
=
true
)
noexcept
;
void
disconnect
();
void
disconnect
();
void
forceDisconnect
();
void
forceDisconnect
();
bool
isConnection
()
const
;
bool
isConnection
()
const
;
...
@@ -31,7 +32,7 @@ class ModbusTCPMaster:
...
@@ -31,7 +32,7 @@ class ModbusTCPMaster:
force_disconnect
=
s
;
force_disconnect
=
s
;
}
}
void
reconnect
();
bool
reconnect
();
void
cleanInputStream
();
void
cleanInputStream
();
virtual
void
cleanupChannel
()
override
virtual
void
cleanupChannel
()
override
...
...
python/lib/pyUniSet/UModbus.cc
View file @
87abb2e8
...
@@ -103,20 +103,10 @@ void UModbus::connect( const string& _ip, int _port )throw(UException)
...
@@ -103,20 +103,10 @@ void UModbus::connect( const string& _ip, int _port )throw(UException)
ip
=
_ip
;
ip
=
_ip
;
port
=
_port
;
port
=
_port
;
try
if
(
!
mb
->
connect
(
ip
,
port
)
)
{
mb
->
connect
(
ip
,
port
);
}
catch
(
ModbusRTU
::
mbException
&
ex
)
{
std
::
ostringstream
err
;
err
<<
ex
;
throw
UException
(
err
.
str
());
}
catch
(...)
{
{
std
::
ostringstream
err
;
std
::
ostringstream
err
;
err
<<
"
Connection failed:
ip="
<<
ip
<<
" port="
<<
port
;
err
<<
"
failed to connection
ip="
<<
ip
<<
" port="
<<
port
;
throw
UException
(
err
.
str
());
throw
UException
(
err
.
str
());
}
}
}
}
...
...
src/Communications/Modbus/ModbusClient.cc
View file @
87abb2e8
...
@@ -44,7 +44,6 @@ ModbusClient::~ModbusClient()
...
@@ -44,7 +44,6 @@ ModbusClient::~ModbusClient()
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
void
ModbusClient
::
setTimeout
(
timeout_t
msec
)
void
ModbusClient
::
setTimeout
(
timeout_t
msec
)
{
{
if
(
msec
!=
UniSetTimer
::
WaitUpTime
)
replyTimeOut_ms
=
msec
;
replyTimeOut_ms
=
msec
;
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
...
...
src/Communications/Modbus/ModbusServer.cc
View file @
87abb2e8
...
@@ -63,7 +63,7 @@ void ModbusServer::setRecvTimeout( timeout_t msec )
...
@@ -63,7 +63,7 @@ void ModbusServer::setRecvTimeout( timeout_t msec )
timeout_t
ModbusServer
::
setReplyTimeout
(
timeout_t
msec
)
timeout_t
ModbusServer
::
setReplyTimeout
(
timeout_t
msec
)
{
{
// #warning "Why msec can be 0?"
// #warning "Why msec can be 0?"
assert
(
msec
);
assert
(
msec
>
0
);
if
(
msec
==
UniSetTimer
::
WaitUpTime
)
if
(
msec
==
UniSetTimer
::
WaitUpTime
)
return
replyTimeout_ms
;
return
replyTimeout_ms
;
...
...
src/Communications/Modbus/ModbusTCPMaster.cc
View file @
87abb2e8
...
@@ -44,8 +44,6 @@ ModbusTCPMaster::~ModbusTCPMaster()
...
@@ -44,8 +44,6 @@ ModbusTCPMaster::~ModbusTCPMaster()
{
{
if
(
isConnection
()
)
if
(
isConnection
()
)
disconnect
();
disconnect
();
tcp
.
reset
();
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
size_t
ModbusTCPMaster
::
getNextData
(
unsigned
char
*
buf
,
size_t
len
)
size_t
ModbusTCPMaster
::
getNextData
(
unsigned
char
*
buf
,
size_t
len
)
...
@@ -81,7 +79,7 @@ mbErrCode ModbusTCPMaster::sendData( unsigned char* buf, size_t len )
...
@@ -81,7 +79,7 @@ mbErrCode ModbusTCPMaster::sendData( unsigned char* buf, size_t len )
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
mbErrCode
ModbusTCPMaster
::
query
(
ModbusAddr
addr
,
ModbusMessage
&
msg
,
mbErrCode
ModbusTCPMaster
::
query
(
ModbusAddr
addr
,
ModbusMessage
&
msg
,
ModbusMessage
&
reply
,
timeout_t
timeout
)
ModbusMessage
&
reply
,
timeout_t
timeout
_msec
)
{
{
try
try
{
{
...
@@ -109,15 +107,15 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
...
@@ -109,15 +107,15 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
return
erTimeOut
;
return
erTimeOut
;
}
}
assert
(
timeout
);
assert
(
timeout
_msec
);
ptTimeout
.
setTiming
(
timeout
);
ptTimeout
.
setTiming
(
timeout
_msec
);
tcp
->
setReceiveTimeout
(
UniSetTimer
::
millisecToPoco
(
timeout
)
);
tcp
->
setReceiveTimeout
(
UniSetTimer
::
millisecToPoco
(
timeout
_msec
)
);
msg
.
makeHead
(
++
nTransaction
,
crcNoCheckit
);
msg
.
makeHead
(
++
nTransaction
,
crcNoCheckit
);
for
(
size_t
i
=
0
;
i
<
2
;
i
++
)
for
(
size_t
i
=
0
;
i
<
2
;
i
++
)
{
{
if
(
tcp
->
poll
(
UniSetTimer
::
millisecToPoco
(
timeout
),
Poco
::
Net
::
Socket
::
SELECT_WRITE
)
)
if
(
tcp
->
poll
(
UniSetTimer
::
millisecToPoco
(
timeout
_msec
),
Poco
::
Net
::
Socket
::
SELECT_WRITE
)
)
{
{
mbErrCode
res
=
send
(
msg
);
mbErrCode
res
=
send
(
msg
);
...
@@ -146,14 +144,14 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
...
@@ -146,14 +144,14 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
dlog
->
info
()
<<
"(ModbusTCPMaster::query): no write pending.. reconnnect OK"
<<
endl
;
dlog
->
info
()
<<
"(ModbusTCPMaster::query): no write pending.. reconnnect OK"
<<
endl
;
}
}
if
(
timeout
!=
UniSetTimer
::
WaitUpTime
)
if
(
timeout
_msec
!=
UniSetTimer
::
WaitUpTime
)
{
{
timeout
=
ptTimeout
.
getLeft
(
timeout
);
timeout
_msec
=
ptTimeout
.
getLeft
(
timeout_msec
);
if
(
timeout
==
0
)
if
(
timeout
_msec
==
0
)
return
erTimeOut
;
return
erTimeOut
;
ptTimeout
.
setTiming
(
timeout
);
ptTimeout
.
setTiming
(
timeout
_msec
);
}
}
// чистим очередь
// чистим очередь
...
@@ -163,7 +161,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
...
@@ -163,7 +161,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
//tcp->sync();
//tcp->sync();
if
(
tcp
->
poll
(
UniSetTimer
::
millisecToPoco
(
timeout
),
Poco
::
Net
::
Socket
::
SELECT_READ
)
)
if
(
tcp
->
poll
(
UniSetTimer
::
millisecToPoco
(
timeout
_msec
),
Poco
::
Net
::
Socket
::
SELECT_READ
)
)
{
{
size_t
ret
=
0
;
size_t
ret
=
0
;
...
@@ -232,9 +230,9 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
...
@@ -232,9 +230,9 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
}
}
//
//
timeout
=
ptTimeout
.
getLeft
(
timeout
);
timeout
_msec
=
ptTimeout
.
getLeft
(
timeout_msec
);
if
(
timeout
<=
0
)
if
(
timeout
_msec
<=
0
)
{
{
if
(
dlog
->
is_warn
()
)
if
(
dlog
->
is_warn
()
)
...
@@ -244,7 +242,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
...
@@ -244,7 +242,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
}
}
//msg.aduhead = reply.aduhead;
//msg.aduhead = reply.aduhead;
mbErrCode
res
=
recv
(
addr
,
msg
.
func
(),
reply
,
timeout
);
mbErrCode
res
=
recv
(
addr
,
msg
.
func
(),
reply
,
timeout
_msec
);
if
(
force_disconnect
)
if
(
force_disconnect
)
{
{
...
@@ -261,7 +259,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
...
@@ -261,7 +259,7 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
}
}
if
(
dlog
->
is_info
()
)
if
(
dlog
->
is_info
()
)
dlog
->
info
()
<<
"(query): input pending timeout="
<<
timeout
<<
endl
;
dlog
->
info
()
<<
"(query): input pending timeout="
<<
timeout
_msec
<<
endl
;
if
(
force_disconnect
)
if
(
force_disconnect
)
{
{
...
@@ -360,7 +358,7 @@ bool ModbusTCPMaster::checkConnection( const std::string& ip, int port, int time
...
@@ -360,7 +358,7 @@ bool ModbusTCPMaster::checkConnection( const std::string& ip, int port, int time
return
false
;
return
false
;
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
void
ModbusTCPMaster
::
reconnect
()
bool
ModbusTCPMaster
::
reconnect
()
{
{
if
(
dlog
->
is_info
()
)
if
(
dlog
->
is_info
()
)
dlog
->
info
()
<<
"(ModbusTCPMaster): reconnect "
<<
iaddr
<<
":"
<<
port
<<
endl
;
dlog
->
info
()
<<
"(ModbusTCPMaster): reconnect "
<<
iaddr
<<
":"
<<
port
<<
endl
;
...
@@ -368,50 +366,48 @@ void ModbusTCPMaster::reconnect()
...
@@ -368,50 +366,48 @@ void ModbusTCPMaster::reconnect()
if
(
tcp
)
if
(
tcp
)
{
{
tcp
->
forceDisconnect
();
tcp
->
forceDisconnect
();
tcp
.
reset
()
;
tcp
=
nullptr
;
}
}
return
connect
(
iaddr
,
port
,
true
);
}
// -------------------------------------------------------------------------
bool
ModbusTCPMaster
::
connect
(
const
std
::
string
&
addr
,
int
_port
,
bool
closeOldConnection
)
noexcept
{
try
try
{
{
tcp
=
make_shared
<
UTCPStream
>
();
Net
::
SocketAddress
sa
(
addr
,
_port
);
tcp
->
create
(
iaddr
,
port
,
500
);
return
connect
(
sa
,
_port
,
closeOldConnection
);
tcp
->
setReceiveTimeout
(
UniSetTimer
::
millisecToPoco
(
replyTimeOut_ms
));
tcp
->
setKeepAliveParams
((
replyTimeOut_ms
>
1000
?
replyTimeOut_ms
/
1000
:
1
));
tcp
->
setNoDelay
(
true
);
}
}
catch
(
const
std
::
exception
&
e
)
catch
(
const
std
::
exception
&
e
)
{
{
if
(
dlog
->
debugging
(
Debug
::
CRIT
)
)
if
(
dlog
->
debugging
(
Debug
::
CRIT
)
)
{
{
ostringstream
s
;
ostringstream
s
;
s
<<
"(ModbusTCPMaster): connect
ion
"
<<
iaddr
<<
":"
<<
port
<<
" error: "
<<
e
.
what
();
s
<<
"(ModbusTCPMaster): connect "
<<
iaddr
<<
":"
<<
port
<<
" error: "
<<
e
.
what
();
dlog
->
crit
()
<<
s
.
str
()
<<
std
::
endl
;
dlog
->
crit
()
<<
iaddr
<<
std
::
endl
;
}
}
}
}
catch
(
...
)
{
if
(
closeOldConnection
&&
tcp
)
if
(
dlog
->
debugging
(
Debug
::
CRIT
)
)
{
{
ostringstream
s
;
forceDisconnect
();
s
<<
"(ModbusTCPMaster): connection "
<<
iaddr
<<
":"
<<
port
<<
" error: catch ..."
;
tcp
=
nullptr
;
dlog
->
crit
()
<<
s
.
str
()
<<
std
::
endl
;
}
}
}
return
false
;
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
void
ModbusTCPMaster
::
connect
(
const
std
::
string
&
addr
,
int
_port
)
bool
ModbusTCPMaster
::
connect
(
const
Poco
::
Net
::
SocketAddress
&
addr
,
int
_port
,
bool
closeOldConnection
)
noexcept
{
Net
::
SocketAddress
sa
(
addr
,
_port
);
connect
(
sa
,
_port
);
}
// -------------------------------------------------------------------------
void
ModbusTCPMaster
::
connect
(
const
Poco
::
Net
::
SocketAddress
&
addr
,
int
_port
)
{
{
if
(
tcp
)
if
(
tcp
)
{
{
if
(
!
closeOldConnection
)
return
false
;
//disconnect();
//disconnect();
forceDisconnect
();
forceDisconnect
();
tcp
.
reset
()
;
tcp
=
nullptr
;
}
}
iaddr
=
addr
.
host
().
toString
();
iaddr
=
addr
.
host
().
toString
();
...
@@ -428,6 +424,7 @@ void ModbusTCPMaster::connect( const Poco::Net::SocketAddress& addr, int _port )
...
@@ -428,6 +424,7 @@ void ModbusTCPMaster::connect( const Poco::Net::SocketAddress& addr, int _port )
tcp
->
setReceiveTimeout
(
UniSetTimer
::
millisecToPoco
(
replyTimeOut_ms
));
tcp
->
setReceiveTimeout
(
UniSetTimer
::
millisecToPoco
(
replyTimeOut_ms
));
tcp
->
setKeepAlive
(
true
);
// tcp->setKeepAliveParams((replyTimeOut_ms > 1000 ? replyTimeOut_ms / 1000 : 1));
tcp
->
setKeepAlive
(
true
);
// tcp->setKeepAliveParams((replyTimeOut_ms > 1000 ? replyTimeOut_ms / 1000 : 1));
tcp
->
setNoDelay
(
true
);
tcp
->
setNoDelay
(
true
);
return
true
;
}
}
catch
(
Poco
::
Net
::
NetException
&
ex
)
catch
(
Poco
::
Net
::
NetException
&
ex
)
{
{
...
@@ -437,8 +434,6 @@ void ModbusTCPMaster::connect( const Poco::Net::SocketAddress& addr, int _port )
...
@@ -437,8 +434,6 @@ void ModbusTCPMaster::connect( const Poco::Net::SocketAddress& addr, int _port )
s
<<
"(ModbusTCPMaster): create connection "
<<
iaddr
<<
":"
<<
port
<<
" error: "
<<
ex
.
displayText
();
s
<<
"(ModbusTCPMaster): create connection "
<<
iaddr
<<
":"
<<
port
<<
" error: "
<<
ex
.
displayText
();
dlog
->
crit
()
<<
iaddr
<<
std
::
endl
;
dlog
->
crit
()
<<
iaddr
<<
std
::
endl
;
}
}
tcp
=
nullptr
;
}
}
catch
(
const
std
::
exception
&
e
)
catch
(
const
std
::
exception
&
e
)
{
{
...
@@ -448,8 +443,6 @@ void ModbusTCPMaster::connect( const Poco::Net::SocketAddress& addr, int _port )
...
@@ -448,8 +443,6 @@ void ModbusTCPMaster::connect( const Poco::Net::SocketAddress& addr, int _port )
s
<<
"(ModbusTCPMaster): connection "
<<
iaddr
<<
":"
<<
port
<<
" error: "
<<
e
.
what
();
s
<<
"(ModbusTCPMaster): connection "
<<
iaddr
<<
":"
<<
port
<<
" error: "
<<
e
.
what
();
dlog
->
crit
()
<<
iaddr
<<
std
::
endl
;
dlog
->
crit
()
<<
iaddr
<<
std
::
endl
;
}
}
tcp
=
nullptr
;
}
}
catch
(
...
)
catch
(
...
)
{
{
...
@@ -459,9 +452,10 @@ void ModbusTCPMaster::connect( const Poco::Net::SocketAddress& addr, int _port )
...
@@ -459,9 +452,10 @@ void ModbusTCPMaster::connect( const Poco::Net::SocketAddress& addr, int _port )
s
<<
"(ModbusTCPMaster): connection "
<<
iaddr
<<
":"
<<
port
<<
" error: catch ..."
;
s
<<
"(ModbusTCPMaster): connection "
<<
iaddr
<<
":"
<<
port
<<
" error: catch ..."
;
dlog
->
crit
()
<<
s
.
str
()
<<
std
::
endl
;
dlog
->
crit
()
<<
s
.
str
()
<<
std
::
endl
;
}
}
}
tcp
=
nullptr
;
tcp
=
nullptr
;
}
return
false
;
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
void
ModbusTCPMaster
::
disconnect
()
void
ModbusTCPMaster
::
disconnect
()
...
@@ -473,7 +467,7 @@ void ModbusTCPMaster::disconnect()
...
@@ -473,7 +467,7 @@ void ModbusTCPMaster::disconnect()
return
;
return
;
tcp
->
close
();
tcp
->
close
();
tcp
.
reset
()
;
tcp
=
nullptr
;
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
void
ModbusTCPMaster
::
forceDisconnect
()
void
ModbusTCPMaster
::
forceDisconnect
()
...
...
src/Log/LogReader.cc
View file @
87abb2e8
...
@@ -63,12 +63,9 @@ void LogReader::connect( const std::string& _addr, int _port, timeout_t msec )
...
@@ -63,12 +63,9 @@ void LogReader::connect( const std::string& _addr, int _port, timeout_t msec )
if
(
tcp
)
if
(
tcp
)
{
{
disconnect
();
disconnect
();
tcp
=
0
;
tcp
=
nullptr
;
}
}
// if( !tcp )
// {
iaddr
=
_addr
;
iaddr
=
_addr
;
port
=
_port
;
port
=
_port
;
...
@@ -83,6 +80,7 @@ void LogReader::connect( const std::string& _addr, int _port, timeout_t msec )
...
@@ -83,6 +80,7 @@ void LogReader::connect( const std::string& _addr, int _port, timeout_t msec )
tcp
->
setSendTimeout
(
UniSetTimer
::
millisecToPoco
(
outTimeout
)
);
tcp
->
setSendTimeout
(
UniSetTimer
::
millisecToPoco
(
outTimeout
)
);
tcp
->
setKeepAlive
(
true
);
tcp
->
setKeepAlive
(
true
);
tcp
->
setBlocking
(
true
);
tcp
->
setBlocking
(
true
);
return
;
}
}
catch
(
const
Poco
::
TimeoutException
&
e
)
catch
(
const
Poco
::
TimeoutException
&
e
)
{
{
...
@@ -92,8 +90,6 @@ void LogReader::connect( const std::string& _addr, int _port, timeout_t msec )
...
@@ -92,8 +90,6 @@ void LogReader::connect( const std::string& _addr, int _port, timeout_t msec )
s
<<
"(LogReader): connection "
<<
s
.
str
()
<<
" timeout.."
;
s
<<
"(LogReader): connection "
<<
s
.
str
()
<<
" timeout.."
;
rlog
.
crit
()
<<
s
.
str
()
<<
std
::
endl
;
rlog
.
crit
()
<<
s
.
str
()
<<
std
::
endl
;
}
}
tcp
=
0
;
}
}
catch
(
const
Poco
::
Net
::
NetException
&
e
)
catch
(
const
Poco
::
Net
::
NetException
&
e
)
{
{
...
@@ -103,8 +99,6 @@ void LogReader::connect( const std::string& _addr, int _port, timeout_t msec )
...
@@ -103,8 +99,6 @@ void LogReader::connect( const std::string& _addr, int _port, timeout_t msec )
s
<<
"(LogReader): connection "
<<
s
.
str
()
<<
" error: "
<<
e
.
what
();
s
<<
"(LogReader): connection "
<<
s
.
str
()
<<
" error: "
<<
e
.
what
();
rlog
.
crit
()
<<
s
.
str
()
<<
std
::
endl
;
rlog
.
crit
()
<<
s
.
str
()
<<
std
::
endl
;
}
}
tcp
=
0
;
}
}
catch
(
const
std
::
exception
&
e
)
catch
(
const
std
::
exception
&
e
)
{
{
...
@@ -114,8 +108,6 @@ void LogReader::connect( const std::string& _addr, int _port, timeout_t msec )
...
@@ -114,8 +108,6 @@ void LogReader::connect( const std::string& _addr, int _port, timeout_t msec )
s
<<
"(LogReader): connection "
<<
s
.
str
()
<<
" error: "
<<
e
.
what
();
s
<<
"(LogReader): connection "
<<
s
.
str
()
<<
" error: "
<<
e
.
what
();
rlog
.
crit
()
<<
s
.
str
()
<<
std
::
endl
;
rlog
.
crit
()
<<
s
.
str
()
<<
std
::
endl
;
}
}
tcp
=
0
;
}
}
catch
(
...
)
catch
(
...
)
{
{
...
@@ -127,7 +119,7 @@ void LogReader::connect( const std::string& _addr, int _port, timeout_t msec )
...
@@ -127,7 +119,7 @@ void LogReader::connect( const std::string& _addr, int _port, timeout_t msec )
}
}
}
}
// }
tcp
=
nullptr
;
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
void
LogReader
::
disconnect
()
void
LogReader
::
disconnect
()
...
@@ -148,7 +140,7 @@ void LogReader::disconnect()
...
@@ -148,7 +140,7 @@ void LogReader::disconnect()
cerr
<<
"(LogReader): disconnect error: "
<<
e
.
displayText
()
<<
endl
;
cerr
<<
"(LogReader): disconnect error: "
<<
e
.
displayText
()
<<
endl
;
}
}
tcp
=
0
;
tcp
=
nullptr
;
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
bool
LogReader
::
isConnection
()
const
bool
LogReader
::
isConnection
()
const
...
...
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