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
82d01b3d
Commit
82d01b3d
authored
Apr 03, 2016
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(ModbusSlave): попытка все паузы в ожидании, отдавать eventloop
parent
1f715ac3
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
30 additions
and
12 deletions
+30
-12
libuniset2.spec
conf/libuniset2.spec
+4
-1
MBSlave.cc
extensions/ModbusSlave/MBSlave.cc
+6
-0
ModbusServer.h
include/modbus/ModbusServer.h
+6
-3
ModbusTCPServer.h
include/modbus/ModbusTCPServer.h
+3
-2
ModbusServer.cc
src/Communications/Modbus/ModbusServer.cc
+10
-5
ModbusTCPServer.cc
src/Communications/Modbus/ModbusTCPServer.cc
+1
-1
No files found.
conf/libuniset2.spec
View file @
82d01b3d
...
...
@@ -14,7 +14,7 @@
Name: libuniset2
Version: 2.2
Release: alt31.
2
Release: alt31.
3
Summary: UniSet - library for building distributed industrial control systems
License: LGPL
...
...
@@ -486,6 +486,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# ..
%changelog
* Sun Apr 03 2016 Pavel Vainerman <pv@altlinux.ru> 2.2-alt31.3
- ModbusSlave: iowait optimization
* Thu Mar 31 2016 Pavel Vainerman <pv@etersoft.ru> 2.2-alt31.2
- test build
...
...
extensions/ModbusSlave/MBSlave.cc
View file @
82d01b3d
...
...
@@ -2589,6 +2589,12 @@ UniSetTypes::SimpleInfo* MBSlave::getInfo( CORBA::Long userparam )
for
(
const
auto
&
m
:
cmap
)
inf
<<
" "
<<
m
.
second
.
getShortInfo
()
<<
endl
;
{
uniset_mutex_lock
l
(
sessMutex
);
inf
<<
"TCP sessions["
<<
sess
.
size
()
<<
"]:"
<<
endl
;
for
(
const
auto
&
m
:
sess
)
inf
<<
" "
<<
m
.
iaddr
<<
" askCount="
<<
m
.
askCount
<<
endl
;
}
inf
<<
endl
;
}
...
...
include/modbus/ModbusServer.h
View file @
82d01b3d
...
...
@@ -89,9 +89,9 @@ class ModbusServer
void
setRecvTimeout
(
timeout_t
msec
);
/*! установить паузу при ожидании символа */
inline
void
setSleepPause
(
timeout_t
u
sec
)
inline
void
setSleepPause
(
timeout_t
m
sec
)
{
sleepPause_
usec
=
u
sec
;
sleepPause_
msec
=
m
sec
;
}
inline
void
setCRCNoCheckit
(
bool
set
)
...
...
@@ -159,6 +159,9 @@ class ModbusServer
protected
:
virtual
void
iowait
(
timeout_t
usec
);
/*! реализация получения очередного сообщения */
virtual
ModbusRTU
::
mbErrCode
realReceive
(
const
std
::
unordered_set
<
ModbusRTU
::
ModbusAddr
>&
vaddr
,
timeout_t
msecTimeout
)
=
0
;
...
...
@@ -315,7 +318,7 @@ class ModbusServer
timeout_t
recvTimeOut_ms
;
/*!< таймаут на приём */
timeout_t
replyTimeout_ms
;
/*!< таймаут на формирование ответа */
timeout_t
aftersend_msec
;
/*!< пауза после посылки ответа */
timeout_t
sleepPause_
u
sec
;
/*!< пауза между попытками чтения символа из канала */
timeout_t
sleepPause_
m
sec
;
/*!< пауза между попытками чтения символа из канала */
bool
onBroadcast
;
/*!< включен режим работы с broadcst-сообщениями */
bool
crcNoCheckit
;
bool
cleanBeforeSend
;
...
...
include/modbus/ModbusTCPServer.h
View file @
82d01b3d
...
...
@@ -104,10 +104,11 @@ class ModbusTCPServer:
return
tmTime
;
}
void
iowait
(
timeout_t
msec
);
// ожидание (при этом время отдаётся eventloop-у)
protected
:
// ожидание (при этом время отдаётся eventloop-у)
virtual
void
iowait
(
timeout_t
msec
)
override
;
// функция receive пока не поддерживается...
virtual
ModbusRTU
::
mbErrCode
realReceive
(
const
std
::
unordered_set
<
ModbusRTU
::
ModbusAddr
>&
vaddr
,
timeout_t
msecTimeout
)
override
;
...
...
src/Communications/Modbus/ModbusServer.cc
View file @
82d01b3d
...
...
@@ -35,7 +35,7 @@ ModbusServer::ModbusServer():
recvTimeOut_ms
(
50
),
replyTimeout_ms
(
2000
),
aftersend_msec
(
0
),
sleepPause_
usec
(
10
0
),
sleepPause_
msec
(
1
0
),
onBroadcast
(
false
),
crcNoCheckit
(
false
),
cleanBeforeSend
(
false
)
...
...
@@ -606,7 +606,7 @@ mbErrCode ModbusServer::recv( const std::unordered_set<ModbusRTU::ModbusAddr>& v
break
;
}
usleep
(
sleepPause_u
sec
);
iowait
(
sleepPause_m
sec
);
}
if
(
!
begin
)
...
...
@@ -1581,8 +1581,8 @@ void ModbusServer::initLog( UniSetTypes::Configuration* conf,
// -------------------------------------------------------------------------
void
ModbusServer
::
printProcessingTime
()
{
if
(
dlog
->
is_
info
()
)
dlog
->
info
()
<<
"(processingTime): "
<<
tmProcessing
.
getCurrent
()
<<
" [msec] (lim: "
<<
tmProcessing
.
getInterval
()
<<
")"
<<
endl
;
if
(
dlog
->
is_
level9
()
)
dlog
->
level9
()
<<
"(processingTime): "
<<
tmProcessing
.
getCurrent
()
<<
" [msec] (lim: "
<<
tmProcessing
.
getInterval
()
<<
")"
<<
endl
;
}
// -------------------------------------------------------------------------
ModbusRTU
::
mbErrCode
ModbusServer
::
replyFileTransfer
(
const
std
::
string
&
fname
,
...
...
@@ -1693,6 +1693,11 @@ void ModbusServer::resetAskCounter()
askCount
=
0
;
}
// -------------------------------------------------------------------------
void
ModbusServer
::
iowait
(
timeout_t
msec
)
{
msleep
(
msec
);
}
// -------------------------------------------------------------------------
ModbusRTU
::
mbErrCode
ModbusServer
::
replySetDateTime
(
ModbusRTU
::
SetDateTimeMessage
&
query
,
ModbusRTU
::
SetDateTimeRetMessage
&
reply
,
std
::
shared_ptr
<
DebugStream
>
dlog
)
...
...
@@ -1784,7 +1789,7 @@ mbErrCode ModbusServer::send( ModbusMessage& msg )
}
if
(
aftersend_msec
>
0
)
msleep
(
aftersend_msec
);
iowait
(
aftersend_msec
);
return
post_send_request
(
msg
);
}
...
...
src/Communications/Modbus/ModbusTCPServer.cc
View file @
82d01b3d
...
...
@@ -255,7 +255,7 @@ void ModbusTCPServer::ioAccept(ev::io& watcher, int revents)
s
->
setAfterSendPause
(
aftersend_msec
);
s
->
setReplyTimeout
(
replyTimeout_ms
);
s
->
setRecvTimeout
(
recvTimeOut_ms
);
s
->
setSleepPause
(
sleepPause_
u
sec
);
s
->
setSleepPause
(
sleepPause_
m
sec
);
s
->
setCleanBeforeSend
(
cleanBeforeSend
);
s
->
setSessionTimeout
(
(
double
)
sessTimeout
/
1000.
);
s
->
signal_post_receive
().
connect
(
sigc
::
mem_fun
(
this
,
&
ModbusTCPServer
::
postReceiveEvent
)
);
...
...
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