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
cfe0364f
Commit
cfe0364f
authored
Aug 29, 2015
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(Modbus): переименовал ModbusTCPMultiSlave --> ModbusTCPPersistentSlave,
попытка решить проблемму с высокой загрузкой процессора при подключении клиентов
parent
efa9ec05
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
59 additions
and
42 deletions
+59
-42
libuniset2.spec
conf/libuniset2.spec
+4
-1
MBTCPPersistentSlave.cc
extensions/ModbusSlave/MBTCPPersistentSlave.cc
+24
-15
MBTCPPersistentSlave.h
extensions/ModbusSlave/MBTCPPersistentSlave.h
+10
-9
Makefile.am
extensions/ModbusSlave/Makefile.am
+5
-5
mbtcp-persistentslave.cc
extensions/ModbusSlave/mbtcp-persistentslave.cc
+4
-4
start_tcp_multi_fg.sh
extensions/ModbusSlave/start_tcp_multi_fg.sh
+1
-1
smemory-plus.cc
extensions/SharedMemoryPlus/smemory-plus.cc
+2
-2
ModbusTCPMaster.cc
src/Communications/Modbus/ModbusTCPMaster.cc
+5
-1
uniset2.files
uniset2.files
+4
-4
No files found.
conf/libuniset2.spec
View file @
cfe0364f
...
...
@@ -13,7 +13,7 @@
Name: libuniset2
Version: 2.1
Release: alt1
8
Release: alt1
9
Summary: UniSet - library for building distributed industrial control systems
...
...
@@ -456,6 +456,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# ..
%changelog
* Sat Aug 29 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt19
- (ModbusSlave): rename ModbusMultiSlave --> ModbusPersistentSlave, minor fixes
* Thu Aug 27 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt18
- (ModbusExchange): add reinit_timeout timer..
...
...
extensions/ModbusSlave/MBTCP
Multi
Slave.cc
→
extensions/ModbusSlave/MBTCP
Persistent
Slave.cc
View file @
cfe0364f
...
...
@@ -2,7 +2,7 @@
#include <sstream>
#include "Exceptions.h"
#include "Extensions.h"
#include "MBTCP
Multi
Slave.h"
#include "MBTCP
Persistent
Slave.h"
#include "modbus/ModbusRTUSlaveSlot.h"
#include "modbus/ModbusTCPServerSlot.h"
#include "modbus/MBLogSugar.h"
...
...
@@ -12,7 +12,7 @@ using namespace UniSetTypes;
using
namespace
UniSetExtensions
;
using
namespace
ModbusRTU
;
// -----------------------------------------------------------------------------
MBTCP
MultiSlave
::
MBTCPMulti
Slave
(
UniSetTypes
::
ObjectId
objId
,
UniSetTypes
::
ObjectId
shmId
,
const
std
::
shared_ptr
<
SharedMemory
>
ic
,
const
string
&
prefix
)
:
MBTCP
PersistentSlave
::
MBTCPPersistent
Slave
(
UniSetTypes
::
ObjectId
objId
,
UniSetTypes
::
ObjectId
shmId
,
const
std
::
shared_ptr
<
SharedMemory
>
ic
,
const
string
&
prefix
)
:
MBSlave
(
objId
,
shmId
,
ic
,
prefix
),
sesscount_id
(
DefaultObjectId
)
{
...
...
@@ -22,7 +22,7 @@ MBTCPMultiSlave::MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::Obje
cnode
=
conf
->
getNode
(
conf_name
);
if
(
cnode
==
NULL
)
throw
UniSetTypes
::
SystemError
(
"(MBTCP
Multi
Slave): Not found conf-node for "
+
myname
);
throw
UniSetTypes
::
SystemError
(
"(MBTCP
Persistent
Slave): Not found conf-node for "
+
myname
);
UniXML
::
iterator
it
(
cnode
);
...
...
@@ -31,18 +31,20 @@ MBTCPMultiSlave::MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::Obje
if
(
waitTimeout
==
0
)
waitTimeout
=
4000
;
ptUpdateInfo
.
setTiming
(
waitTimeout
);
vmonit
(
waitTimeout
);
sessTimeout
=
conf
->
getArgInt
(
"--"
+
prefix
+
"-session-timeout"
,
it
.
getProp
(
"sessTimeout"
));
if
(
sessTimeout
==
0
)
sessTimeout
=
10
000
;
sessTimeout
=
2
000
;
vmonit
(
sessTimeout
);
sessMaxNum
=
conf
->
getArgInt
(
"--"
+
prefix
+
"-session-maxnum"
,
it
.
getProp
(
"sessMaxNum"
));
if
(
sessMaxNum
==
0
)
sessMaxNum
=
10
;
sessMaxNum
=
3
;
vmonit
(
sessMaxNum
);
...
...
@@ -109,11 +111,11 @@ MBTCPMultiSlave::MBTCPMultiSlave( UniSetTypes::ObjectId objId, UniSetTypes::Obje
}
}
// -----------------------------------------------------------------------------
MBTCP
MultiSlave
::~
MBTCPMulti
Slave
()
MBTCP
PersistentSlave
::~
MBTCPPersistent
Slave
()
{
}
// -----------------------------------------------------------------------------
void
MBTCP
Multi
Slave
::
help_print
(
int
argc
,
const
char
*
const
*
argv
)
void
MBTCP
Persistent
Slave
::
help_print
(
int
argc
,
const
char
*
const
*
argv
)
{
MBSlave
::
help_print
(
argc
,
argv
);
...
...
@@ -124,7 +126,7 @@ void MBTCPMultiSlave::help_print( int argc, const char* const* argv )
cout
<<
"--prefix-session-count-id id - Датчик для отслеживания текущего количества соединений."
<<
endl
;
}
// -----------------------------------------------------------------------------
std
::
shared_ptr
<
MBTCP
MultiSlave
>
MBTCPMulti
Slave
::
init_mbslave
(
int
argc
,
const
char
*
const
*
argv
,
UniSetTypes
::
ObjectId
icID
,
std
::
shared_ptr
<
MBTCP
PersistentSlave
>
MBTCPPersistent
Slave
::
init_mbslave
(
int
argc
,
const
char
*
const
*
argv
,
UniSetTypes
::
ObjectId
icID
,
const
std
::
shared_ptr
<
SharedMemory
>
ic
,
const
string
&
prefix
)
{
auto
conf
=
uniset_conf
();
...
...
@@ -147,10 +149,10 @@ std::shared_ptr<MBTCPMultiSlave> MBTCPMultiSlave::init_mbslave( int argc, const
}
dinfo
<<
"(mbslave): name = "
<<
name
<<
"("
<<
ID
<<
")"
<<
endl
;
return
make_shared
<
MBTCP
Multi
Slave
>
(
ID
,
icID
,
ic
,
prefix
);
return
make_shared
<
MBTCP
Persistent
Slave
>
(
ID
,
icID
,
ic
,
prefix
);
}
// -----------------------------------------------------------------------------
void
MBTCP
Multi
Slave
::
execute_tcp
()
void
MBTCP
Persistent
Slave
::
execute_tcp
()
{
auto
sslot
=
dynamic_pointer_cast
<
ModbusTCPServerSlot
>
(
mbslot
);
...
...
@@ -177,6 +179,13 @@ void MBTCPMultiSlave::execute_tcp()
{
sslot
->
waitQuery
(
addr
,
waitTimeout
);
// если слишком быстро обработали запрос
// то ничего не делаем..
if
(
!
ptUpdateInfo
.
checkTime
()
)
continue
;
ptUpdateInfo
.
reset
();
// Обновляем информацию по соединениям
sess
.
clear
();
sslot
->
getSessions
(
sess
);
...
...
@@ -318,7 +327,7 @@ void MBTCPMultiSlave::execute_tcp()
mbinfo
<<
myname
<<
"(execute_tcp): thread stopped.."
<<
endl
;
}
// -----------------------------------------------------------------------------
void
MBTCP
Multi
Slave
::
initIterators
()
void
MBTCP
Persistent
Slave
::
initIterators
()
{
MBSlave
::
initIterators
();
...
...
@@ -328,7 +337,7 @@ void MBTCPMultiSlave::initIterators()
i
.
second
.
initIterators
(
shm
);
}
// -----------------------------------------------------------------------------
bool
MBTCP
Multi
Slave
::
deactivateObject
()
bool
MBTCP
Persistent
Slave
::
deactivateObject
()
{
if
(
mbslot
)
{
...
...
@@ -341,7 +350,7 @@ bool MBTCPMultiSlave::deactivateObject()
return
MBSlave
::
deactivateObject
();
}
// -----------------------------------------------------------------------------
void
MBTCP
Multi
Slave
::
sigterm
(
int
signo
)
void
MBTCP
Persistent
Slave
::
sigterm
(
int
signo
)
{
if
(
mbslot
)
{
...
...
@@ -354,7 +363,7 @@ void MBTCPMultiSlave::sigterm( int signo )
MBSlave
::
sigterm
(
signo
);
}
// -----------------------------------------------------------------------------
const
std
::
string
MBTCP
Multi
Slave
::
ClientInfo
::
getShortInfo
()
const
const
std
::
string
MBTCP
Persistent
Slave
::
ClientInfo
::
getShortInfo
()
const
{
ostringstream
s
;
...
...
@@ -363,7 +372,7 @@ const std::string MBTCPMultiSlave::ClientInfo::getShortInfo() const
return
std
::
move
(
s
.
str
());
}
// -----------------------------------------------------------------------------
UniSetTypes
::
SimpleInfo
*
MBTCP
Multi
Slave
::
getInfo
()
UniSetTypes
::
SimpleInfo
*
MBTCP
Persistent
Slave
::
getInfo
()
{
UniSetTypes
::
SimpleInfo_var
i
=
MBSlave
::
getInfo
();
...
...
extensions/ModbusSlave/MBTCP
Multi
Slave.h
→
extensions/ModbusSlave/MBTCP
Persistent
Slave.h
View file @
cfe0364f
// -----------------------------------------------------------------------------
#ifndef _MBTCP
Multi
Slave_H_
#define _MBTCP
Multi
Slave_H_
#ifndef _MBTCP
Persistent
Slave_H_
#define _MBTCP
Persistent
Slave_H_
// -----------------------------------------------------------------------------
#include <unordered_map>
#include "MBSlave.h"
#include "modbus/ModbusTCPServer.h"
// -----------------------------------------------------------------------------
/*!
<MBTCP
Multi
Slave ....sesscount="">
<MBTCP
Persistent
Slave ....sesscount="">
<clients>
<item ip="" respond="" invert="1" askcount=""/>
<item ip="" respond="" invert="1" askcount=""/>
<item ip="" respond="" invert="1" askcount=""/>
</clients>
</MBTCP
Multi
Slave>
</MBTCP
Persistent
Slave>
*/
// -----------------------------------------------------------------------------
/*! Реализация многоптоточного slave-интерфейса */
class
MBTCP
Multi
Slave
:
class
MBTCP
Persistent
Slave
:
public
MBSlave
{
public
:
MBTCP
Multi
Slave
(
UniSetTypes
::
ObjectId
objId
,
UniSetTypes
::
ObjectId
shmID
,
const
std
::
shared_ptr
<
SharedMemory
>
ic
=
nullptr
,
const
std
::
string
&
prefix
=
"mbs"
);
virtual
~
MBTCP
Multi
Slave
();
MBTCP
Persistent
Slave
(
UniSetTypes
::
ObjectId
objId
,
UniSetTypes
::
ObjectId
shmID
,
const
std
::
shared_ptr
<
SharedMemory
>
ic
=
nullptr
,
const
std
::
string
&
prefix
=
"mbs"
);
virtual
~
MBTCP
Persistent
Slave
();
/*! глобальная функция для инициализации объекта */
static
std
::
shared_ptr
<
MBTCP
Multi
Slave
>
init_mbslave
(
int
argc
,
const
char
*
const
*
argv
,
static
std
::
shared_ptr
<
MBTCP
Persistent
Slave
>
init_mbslave
(
int
argc
,
const
char
*
const
*
argv
,
UniSetTypes
::
ObjectId
shmID
,
const
std
::
shared_ptr
<
SharedMemory
>
ic
=
nullptr
,
const
std
::
string
&
prefix
=
"mbs"
);
...
...
@@ -44,6 +44,7 @@ class MBTCPMultiSlave:
timeout_t
waitTimeout
;
ModbusTCPServer
::
Sessions
sess
;
/*!< список открытых сессий */
unsigned
int
sessMaxNum
;
PassiveTimer
ptUpdateInfo
;
struct
ClientInfo
{
...
...
@@ -82,5 +83,5 @@ class MBTCPMultiSlave:
IOController
::
IOStateList
::
iterator
sesscount_it
;
};
// -----------------------------------------------------------------------------
#endif // _MBTCP
Multi
Slave_H_
#endif // _MBTCP
Persistent
Slave_H_
// -----------------------------------------------------------------------------
extensions/ModbusSlave/Makefile.am
View file @
cfe0364f
bin_PROGRAMS
=
@PACKAGE@-mbslave @PACKAGE@-mbtcp-
multi
slave
bin_PROGRAMS
=
@PACKAGE@-mbslave @PACKAGE@-mbtcp-
persistent
slave
# не забывайте править версию в2.pc-файле
UMBS_VER
=
@LIBVER@
...
...
@@ -10,7 +10,7 @@ libUniSet2MBSlave_la_LIBADD = $(top_builddir)/lib/libUniSet2.la \
$(top_builddir)
/extensions/lib/libUniSet2Extensions.la
\
$(SIGC_LIBS)
$(COMCPP_LIBS)
libUniSet2MBSlave_la_CXXFLAGS
=
-I
$(top_builddir)
/extensions/include
-I
$(top_builddir)
/extensions/SharedMemory
$(SIGC_CFLAGS)
$(COMCPP_CFLAGS)
libUniSet2MBSlave_la_SOURCES
=
MBSlave.cc MBTCP
Multi
Slave.cc
libUniSet2MBSlave_la_SOURCES
=
MBSlave.cc MBTCP
Persistent
Slave.cc
@PACKAGE@
_mbslave_SOURCES
=
mbslave.cc
@PACKAGE@
_mbslave_LDADD
=
libUniSet2MBSlave.la
$(top_builddir)
/lib/libUniSet2.la
\
...
...
@@ -19,12 +19,12 @@ libUniSet2MBSlave_la_SOURCES = MBSlave.cc MBTCPMultiSlave.cc
$(SIGC_LIBS)
$(COMCPP_LIBS)
@PACKAGE@
_mbslave_CXXFLAGS
=
-I
$(top_builddir)
/extensions/include
-I
$(top_builddir)
/extensions/SharedMemory
$(SIGC_CFLAGS)
$(COMCPP_CFLAGS)
@PACKAGE@
_mbtcp_
multislave_SOURCES
=
mbtcp-multi
slave.cc
@PACKAGE@
_mbtcp_
multi
slave_LDADD
=
libUniSet2MBSlave.la
$(top_builddir)
/lib/libUniSet2.la
\
@PACKAGE@
_mbtcp_
persistentslave_SOURCES
=
mbtcp-persistent
slave.cc
@PACKAGE@
_mbtcp_
persistent
slave_LDADD
=
libUniSet2MBSlave.la
$(top_builddir)
/lib/libUniSet2.la
\
$(top_builddir)
/extensions/SharedMemory/libUniSet2SharedMemory.la
\
$(top_builddir)
/extensions/lib/libUniSet2Extensions.la
\
$(SIGC_LIBS)
$(COMCPP_LIBS)
@PACKAGE@
_mbtcp_
multi
slave_CXXFLAGS
=
-I
$(top_builddir)
/extensions/include
-I
$(top_builddir)
/extensions/SharedMemory
$(SIGC_CFLAGS)
$(COMCPP_CFLAGS)
@PACKAGE@
_mbtcp_
persistent
slave_CXXFLAGS
=
-I
$(top_builddir)
/extensions/include
-I
$(top_builddir)
/extensions/SharedMemory
$(SIGC_CFLAGS)
$(COMCPP_CFLAGS)
# install
devel_include_HEADERS
=
*
.h
...
...
extensions/ModbusSlave/mbtcp-
multi
slave.cc
→
extensions/ModbusSlave/mbtcp-
persistent
slave.cc
View file @
cfe0364f
...
...
@@ -2,7 +2,7 @@
#include <sstream>
#include <string>
#include <cc++/socket.h>
#include "MBTCP
Multi
Slave.h"
#include "MBTCP
Persistent
Slave.h"
#include "Configuration.h"
#include "Debug.h"
#include "UniSetActivator.h"
...
...
@@ -56,7 +56,7 @@ int main(int argc, const char** argv)
return
1
;
}
auto
s
=
MBTCP
Multi
Slave
::
init_mbslave
(
argc
,
argv
,
shmID
);
auto
s
=
MBTCP
Persistent
Slave
::
init_mbslave
(
argc
,
argv
,
shmID
);
if
(
!
s
)
{
...
...
@@ -70,9 +70,9 @@ int main(int argc, const char** argv)
act
->
broadcast
(
sm
.
transport_msg
()
);
ulogany
<<
"
\n\n\n
"
;
ulogany
<<
"(main): -------------- MBTCP
Multi
Slave START -------------------------
\n\n
"
;
ulogany
<<
"(main): -------------- MBTCP
Persistent
Slave START -------------------------
\n\n
"
;
dlogany
<<
"
\n\n\n
"
;
dlogany
<<
"(main): -------------- MBTCP
Multi
Slave START -------------------------
\n\n
"
;
dlogany
<<
"(main): -------------- MBTCP
Persistent
Slave START -------------------------
\n\n
"
;
act
->
run
(
false
);
return
0
;
...
...
extensions/ModbusSlave/start_tcp_multi_fg.sh
View file @
cfe0364f
#!/bin/sh
uniset2-start.sh
-f
./uniset2-mbtcp-
multi
slave
--confile
test.xml
--dlog-add-levels
level3,level4
\
uniset2-start.sh
-f
./uniset2-mbtcp-
persistent
slave
--confile
test.xml
--dlog-add-levels
level3,level4
\
--smemory-id
SharedMemory
\
--mbs-name
MBMultiSlave1
--mbs-type
TCP
--mbs-inet-addr
127.0.0.1
--mbs-inet-port
2048
--mbs-reg-from-id
1
--mbs-my-addr
0x01
\
$*
...
...
extensions/SharedMemoryPlus/smemory-plus.cc
View file @
cfe0364f
...
...
@@ -9,7 +9,7 @@
#include "Extensions.h"
#include "RTUExchange.h"
#include "MBSlave.h"
#include "MBTCP
Multi
Slave.h"
#include "MBTCP
Persistent
Slave.h"
#include "MBTCPMaster.h"
#include "SharedMemory.h"
//#include "UniExchange.h"
...
...
@@ -215,7 +215,7 @@ int main( int argc, const char** argv )
dinfo
<<
"(smemory-plus): add MBTCPMultiSlave("
<<
p
.
str
()
<<
")"
<<
endl
;
auto
mbs
=
MBTCP
Multi
Slave
::
init_mbslave
(
argc
,
argv
,
shm
->
getId
(),
shm
,
p
.
str
());
auto
mbs
=
MBTCP
Persistent
Slave
::
init_mbslave
(
argc
,
argv
,
shm
->
getId
(),
shm
,
p
.
str
());
if
(
!
mbs
)
return
1
;
...
...
src/Communications/Modbus/ModbusTCPMaster.cc
View file @
cfe0364f
...
...
@@ -189,12 +189,16 @@ mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
ost
::
tpport_t
port
;
if
(
dlog
->
is_warn
()
)
{
const
char
*
err
=
tcp
->
getErrorString
();
dlog
->
warn
()
<<
"(ModbusTCPMaster::query): ret="
<<
(
int
)
ret
<<
" < rmh="
<<
(
int
)
sizeof
(
rmh
)
<<
" errnum: "
<<
tcp
->
getErrorNumber
()
<<
" perr: "
<<
tcp
->
getPeer
(
&
port
)
<<
" err: "
<<
string
(
tcp
->
getErrorString
()
)
<<
" err: "
<<
(
err
?
string
(
err
)
:
""
)
<<
endl
;
}
disconnect
();
return
erTimeOut
;
// return erHardwareError;
...
...
uniset2.files
View file @
cfe0364f
...
...
@@ -41,7 +41,7 @@ extensions/include/MBExchange.h
extensions/include/MBSlave.h
extensions/include/MBTCPMaster.h
extensions/include/MBTCPMultiMaster.h
extensions/include/MBTCP
Multi
Slave.h
extensions/include/MBTCP
Persistent
Slave.h
extensions/include/MTR.h
extensions/include/PassiveLProcessor.h
extensions/include/PID.h
...
...
@@ -144,9 +144,9 @@ extensions/ModbusSlave/Makefile.am
extensions/ModbusSlave/MBSlave.cc
extensions/ModbusSlave/mbslave.cc
extensions/ModbusSlave/MBSlave.h
extensions/ModbusSlave/mbtcp-
multi
slave.cc
extensions/ModbusSlave/MBTCP
Multi
Slave.cc
extensions/ModbusSlave/MBTCP
Multi
Slave.h
extensions/ModbusSlave/mbtcp-
persistent
slave.cc
extensions/ModbusSlave/MBTCP
Persistent
Slave.cc
extensions/ModbusSlave/MBTCP
Persistent
Slave.h
extensions/ModbusSlave/test.xml
extensions/RRDServer/libUniSet2RRDServer.pc.in
extensions/RRDServer/main.cc
...
...
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