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
3290b030
Commit
3290b030
authored
Oct 17, 2010
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
попытка исправить подвисание в ModbusSlave
parent
0d25a1c6
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
54 additions
and
11 deletions
+54
-11
ModbusClient.h
include/modbus/ModbusClient.h
+2
-0
ModbusRTUMaster.h
include/modbus/ModbusRTUMaster.h
+1
-1
ModbusRTUSlave.h
include/modbus/ModbusRTUSlave.h
+2
-0
ModbusServer.h
include/modbus/ModbusServer.h
+2
-0
ModbusTCPMaster.h
include/modbus/ModbusTCPMaster.h
+2
-0
ModbusTCPServer.h
include/modbus/ModbusTCPServer.h
+3
-1
ComPort.cc
src/Communications/ComPort.cc
+12
-7
ModbusClient.cc
src/Communications/Modbus/ModbusClient.cc
+18
-2
ModbusServer.cc
src/Communications/Modbus/ModbusServer.cc
+1
-0
ModbusTCPServer.cc
src/Communications/Modbus/ModbusTCPServer.cc
+11
-0
No files found.
include/modbus/ModbusClient.h
View file @
3290b030
...
@@ -135,6 +135,8 @@ class ModbusClient
...
@@ -135,6 +135,8 @@ class ModbusClient
inline
void
setCRCNoCheckit
(
bool
set
){
crcNoCheckit
=
set
;
}
inline
void
setCRCNoCheckit
(
bool
set
){
crcNoCheckit
=
set
;
}
inline
bool
isCRCNoCheckit
(){
return
crcNoCheckit
;
}
inline
bool
isCRCNoCheckit
(){
return
crcNoCheckit
;
}
virtual
void
cleanupChannel
(){}
protected
:
protected
:
/*! get next data block from channel ot recv buffer
/*! get next data block from channel ot recv buffer
...
...
include/modbus/ModbusRTUMaster.h
View file @
3290b030
...
@@ -24,7 +24,7 @@ class ModbusRTUMaster:
...
@@ -24,7 +24,7 @@ class ModbusRTUMaster:
ModbusRTUMaster
(
const
std
::
string
dev
,
bool
use485
=
false
,
bool
tr_ctl
=
false
);
ModbusRTUMaster
(
const
std
::
string
dev
,
bool
use485
=
false
,
bool
tr_ctl
=
false
);
virtual
~
ModbusRTUMaster
();
virtual
~
ModbusRTUMaster
();
inline
void
cleanupChannel
(){
if
(
port
)
port
->
cleanupChannel
();
}
virtual
void
cleanupChannel
(){
if
(
port
)
port
->
cleanupChannel
();
}
void
setSpeed
(
ComPort
::
Speed
s
);
void
setSpeed
(
ComPort
::
Speed
s
);
void
setSpeed
(
const
std
::
string
s
);
void
setSpeed
(
const
std
::
string
s
);
...
...
include/modbus/ModbusRTUSlave.h
View file @
3290b030
...
@@ -33,6 +33,8 @@ class ModbusRTUSlave:
...
@@ -33,6 +33,8 @@ class ModbusRTUSlave:
ComPort
::
Speed
getSpeed
();
ComPort
::
Speed
getSpeed
();
virtual
ModbusRTU
::
mbErrCode
receive
(
ModbusRTU
::
ModbusAddr
addr
,
timeout_t
msecTimeout
);
virtual
ModbusRTU
::
mbErrCode
receive
(
ModbusRTU
::
ModbusAddr
addr
,
timeout_t
msecTimeout
);
virtual
void
cleanupChannel
(){
if
(
port
)
port
->
cleanupChannel
();
}
protected
:
protected
:
...
...
include/modbus/ModbusServer.h
View file @
3290b030
...
@@ -68,6 +68,8 @@ class ModbusServer
...
@@ -68,6 +68,8 @@ class ModbusServer
ModbusRTU
::
FileTransferRetMessage
&
reply
,
ModbusRTU
::
FileTransferRetMessage
&
reply
,
DebugStream
*
dlog
=
0
);
DebugStream
*
dlog
=
0
);
virtual
void
cleanupChannel
(){}
protected
:
protected
:
/*! Обработка запроса на чтение данных (0x01).
/*! Обработка запроса на чтение данных (0x01).
...
...
include/modbus/ModbusTCPMaster.h
View file @
3290b030
...
@@ -30,6 +30,8 @@ class ModbusTCPMaster:
...
@@ -30,6 +30,8 @@ class ModbusTCPMaster:
void
reconnect
();
void
reconnect
();
void
cleanInputStream
();
void
cleanInputStream
();
virtual
void
cleanupChannel
(){
cleanInputStream
();
}
protected
:
protected
:
...
...
include/modbus/ModbusTCPServer.h
View file @
3290b030
...
@@ -27,7 +27,9 @@ class ModbusTCPServer:
...
@@ -27,7 +27,9 @@ class ModbusTCPServer:
inline
void
setIgnoreAddrMode
(
bool
st
){
ignoreAddr
=
st
;
}
inline
void
setIgnoreAddrMode
(
bool
st
){
ignoreAddr
=
st
;
}
inline
bool
getIgnoreAddrMode
(){
return
ignoreAddr
;
}
inline
bool
getIgnoreAddrMode
(){
return
ignoreAddr
;
}
void
cleanInputStream
();
virtual
void
cleanupChannel
(){
cleanInputStream
();
}
protected
:
protected
:
virtual
ModbusRTU
::
mbErrCode
pre_send_request
(
ModbusRTU
::
ModbusMessage
&
request
);
virtual
ModbusRTU
::
mbErrCode
pre_send_request
(
ModbusRTU
::
ModbusMessage
&
request
);
...
...
src/Communications/ComPort.cc
View file @
3290b030
...
@@ -198,12 +198,12 @@ unsigned char ComPort::m_receiveByte( bool wait )
...
@@ -198,12 +198,12 @@ unsigned char ComPort::m_receiveByte( bool wait )
/* select' returns 0 if timeout, 1 if input available, -1 if error. */
/* select' returns 0 if timeout, 1 if input available, -1 if error. */
if
(
select
(
FD_SETSIZE
,
&
set
,
NULL
,
NULL
,
&
timeout
)
==
1
)
if
(
select
(
FD_SETSIZE
,
&
set
,
NULL
,
NULL
,
&
timeout
)
==
1
)
bufLength
=
read
(
fd
,
buf
,
BufSize
);
bufLength
=
::
read
(
fd
,
buf
,
BufSize
);
else
else
bufLength
=-
1
;
bufLength
=-
1
;
}
}
else
else
bufLength
=
read
(
fd
,
buf
,
BufSize
);
bufLength
=
::
read
(
fd
,
buf
,
BufSize
);
if
(
bufLength
<=
0
)
if
(
bufLength
<=
0
)
{
{
throw
UniSetTypes
::
TimeOut
();
throw
UniSetTypes
::
TimeOut
();
...
@@ -299,18 +299,23 @@ void ComPort::cleanupChannel()
...
@@ -299,18 +299,23 @@ void ComPort::cleanupChannel()
if
(
fd
<
0
)
if
(
fd
<
0
)
return
;
return
;
// PassiveTimer pt(t_msec);
int
fd2
=
dup
(
fd
);
if
(
fd2
<
0
)
return
;
fcntl
(
fd2
,
F_SETFL
,
O_NONBLOCK
);
unsigned
char
tmpbuf
[
100
];
unsigned
char
tmpbuf
[
100
];
int
k
=
0
;
int
k
=
0
;
do
do
{
{
k
=
::
read
(
fd
,
tmpbuf
,
sizeof
(
tmpbuf
));
k
=
::
read
(
fd
2
,
tmpbuf
,
sizeof
(
tmpbuf
));
}
}
while
(
k
>
0
);
while
(
k
>
0
);
// #warning Обнулять нельзя, может надо делать что-то интелектуальнее...
close
(
fd2
);
// curSym = 0;
// bufLength = 0;
curSym
=
0
;
bufLength
=-
1
;
}
}
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
void
ComPort
::
setSpeed
(
std
::
string
s
)
void
ComPort
::
setSpeed
(
std
::
string
s
)
...
...
src/Communications/Modbus/ModbusClient.cc
View file @
3290b030
...
@@ -340,6 +340,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
...
@@ -340,6 +340,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
{
{
dlog
[
Debug
::
WARN
]
<<
"(recv): "
<<
(
ModbusHeader
*
)(
&
rbuf
)
<<
endl
;
dlog
[
Debug
::
WARN
]
<<
"(recv): "
<<
(
ModbusHeader
*
)(
&
rbuf
)
<<
endl
;
dlog
[
Debug
::
WARN
]
<<
"(recv): заголовок меньше положенного..."
<<
endl
;
dlog
[
Debug
::
WARN
]
<<
"(recv): заголовок меньше положенного..."
<<
endl
;
cleanupChannel
();
return
erInvalidFormat
;
return
erInvalidFormat
;
}
}
...
@@ -366,6 +367,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
...
@@ -366,6 +367,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
<<
"): Получили данных меньше чем ждали...(recv="
<<
"): Получили данных меньше чем ждали...(recv="
<<
rlen
<<
" < wait="
<<
rbuf
.
len
<<
")"
<<
endl
;
<<
rlen
<<
" < wait="
<<
rbuf
.
len
<<
")"
<<
endl
;
}
}
cleanupChannel
();
return
erInvalidFormat
;
return
erInvalidFormat
;
}
}
bcnt
+=
rlen
;
bcnt
+=
rlen
;
...
@@ -388,7 +391,10 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
...
@@ -388,7 +391,10 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
}
}
if
(
qfunc
!=
rbuf
.
func
)
if
(
qfunc
!=
rbuf
.
func
)
{
cleanupChannel
();
return
erUnExpectedPacketType
;
return
erUnExpectedPacketType
;
}
// Определяем тип сообщения
// Определяем тип сообщения
switch
(
rbuf
.
func
)
switch
(
rbuf
.
func
)
...
@@ -453,6 +459,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
...
@@ -453,6 +459,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
break;
break;
*/
*/
default
:
default
:
cleanupChannel
();
return
erUnExpectedPacketType
;
return
erUnExpectedPacketType
;
}
}
...
@@ -472,6 +479,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
...
@@ -472,6 +479,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
<<
"): Получили данных меньше чем ждали...(recv="
<<
"): Получили данных меньше чем ждали...(recv="
<<
rlen
<<
" < wait="
<<
rbuf
.
len
<<
")"
<<
endl
;
<<
rlen
<<
" < wait="
<<
rbuf
.
len
<<
")"
<<
endl
;
}
}
cleanupChannel
();
return
erInvalidFormat
;
return
erInvalidFormat
;
}
}
...
@@ -501,6 +510,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
...
@@ -501,6 +510,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
<<
rlen1
<<
" < "
<<
szDataLen
<<
")"
<<
endl
;
<<
rlen1
<<
" < "
<<
szDataLen
<<
")"
<<
endl
;
}
}
cleanupChannel
();
return
erInvalidFormat
;
return
erInvalidFormat
;
}
}
...
@@ -554,7 +564,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
...
@@ -554,7 +564,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
<<
"Получили данных меньше чем ждали...("
<<
"Получили данных меньше чем ждали...("
<<
rlen1
<<
" < "
<<
szDataLen
<<
")"
<<
endl
;
<<
rlen1
<<
" < "
<<
szDataLen
<<
")"
<<
endl
;
}
}
cleanupChannel
();
return
erInvalidFormat
;
return
erInvalidFormat
;
}
}
...
@@ -609,6 +620,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
...
@@ -609,6 +620,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
<<
rlen1
<<
" < "
<<
szDataLen
<<
")"
<<
endl
;
<<
rlen1
<<
" < "
<<
szDataLen
<<
")"
<<
endl
;
}
}
cleanupChannel
();
return
erInvalidFormat
;
return
erInvalidFormat
;
}
}
...
@@ -662,6 +674,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
...
@@ -662,6 +674,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
<<
rlen1
<<
" < "
<<
szDataLen
<<
")"
<<
endl
;
<<
rlen1
<<
" < "
<<
szDataLen
<<
")"
<<
endl
;
}
}
cleanupChannel
();
return
erInvalidFormat
;
return
erInvalidFormat
;
}
}
...
@@ -844,7 +857,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
...
@@ -844,7 +857,8 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
<<
rbuf
.
func
<<
"):(fnFileTransfer) "
<<
rbuf
.
func
<<
"):(fnFileTransfer) "
<<
"Получили данных меньше чем ждали...("
<<
"Получили данных меньше чем ждали...("
<<
rlen1
<<
" < "
<<
szDataLen
<<
")"
<<
endl
;
<<
rlen1
<<
" < "
<<
szDataLen
<<
")"
<<
endl
;
cleanupChannel
();
return
erInvalidFormat
;
return
erInvalidFormat
;
}
}
...
@@ -919,6 +933,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
...
@@ -919,6 +933,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
<< "Получили данных меньше чем ждали...("
<< "Получили данных меньше чем ждали...("
<< rlen1 << " < " << szDataLen << ")" << endl;
<< rlen1 << " < " << szDataLen << ")" << endl;
cleanupChannel();
return erInvalidFormat;
return erInvalidFormat;
}
}
...
@@ -954,6 +969,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
...
@@ -954,6 +969,7 @@ mbErrCode ModbusClient::recv_pdu( ModbusByte qfunc, ModbusMessage& rbuf, timeout
else
else
{
{
// А как мы сюда добрались?!!!!!!
// А как мы сюда добрались?!!!!!!
cleanupChannel
();
return
erUnExpectedPacketType
;
return
erUnExpectedPacketType
;
}
}
}
}
...
...
src/Communications/Modbus/ModbusServer.cc
View file @
3290b030
...
@@ -593,6 +593,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
...
@@ -593,6 +593,7 @@ mbErrCode ModbusServer::recv_pdu( ModbusMessage& rbuf, timeout_t timeout )
break
;
break
;
default
:
default
:
cleanupChannel
();
return
erUnExpectedPacketType
;
return
erUnExpectedPacketType
;
}
}
...
...
src/Communications/Modbus/ModbusTCPServer.cc
View file @
3290b030
...
@@ -224,3 +224,14 @@ mbErrCode ModbusTCPServer::pre_send_request( ModbusMessage& request )
...
@@ -224,3 +224,14 @@ mbErrCode ModbusTCPServer::pre_send_request( ModbusMessage& request )
return
erNoError
;
return
erNoError
;
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
void
ModbusTCPServer
::
cleanInputStream
()
{
unsigned
char
buf
[
100
];
int
ret
=
0
;
do
{
ret
=
getNextData
(
buf
,
sizeof
(
buf
));
}
while
(
ret
>
0
);
}
// -------------------------------------------------------------------------
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