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
3d6414dc
Commit
3d6414dc
authored
Aug 12, 2015
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(ModbusExchange): добавил поддержку нового свойства "pollfactor",
позволяющего задать частоту опроса конкретного регистра.
parent
532f9e24
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
27 additions
and
5 deletions
+27
-5
libuniset2.spec
conf/libuniset2.spec
+4
-1
test.xml
conf/test.xml
+4
-4
MBExchange.cc
extensions/ModbusMaster/MBExchange.cc
+7
-0
MBExchange.h
extensions/ModbusMaster/MBExchange.h
+7
-0
MBTCPMaster.h
extensions/ModbusMaster/MBTCPMaster.h
+1
-0
MBTCPMultiMaster.h
extensions/ModbusMaster/MBTCPMultiMaster.h
+3
-0
RTUExchange.cc
extensions/ModbusMaster/RTUExchange.cc
+1
-0
No files found.
conf/libuniset2.spec
View file @
3d6414dc
...
@@ -13,7 +13,7 @@
...
@@ -13,7 +13,7 @@
Name: libuniset2
Name: libuniset2
Version: 2.1
Version: 2.1
Release: alt1
4
Release: alt1
5
Summary: UniSet - library for building distributed industrial control systems
Summary: UniSet - library for building distributed industrial control systems
...
@@ -456,6 +456,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
...
@@ -456,6 +456,9 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
# ..
# ..
%changelog
%changelog
* Wed Aug 12 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt15
- (Modbus): add new property "pollfactor" (see docs)
* Sun Aug 09 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt14
* Sun Aug 09 2015 Pavel Vainerman <pv@altlinux.ru> 2.1-alt14
- (UTCPStream): add new function "setKeepAliveParams"
- (UTCPStream): add new function "setKeepAliveParams"
...
...
conf/test.xml
View file @
3d6414dc
...
@@ -244,10 +244,10 @@
...
@@ -244,10 +244,10 @@
<item
id=
"33"
iotype=
"DI"
name=
"Message1"
priority=
"Medium"
textname=
"Текст сообщения 1"
/>
<item
id=
"33"
iotype=
"DI"
name=
"Message1"
priority=
"Medium"
textname=
"Текст сообщения 1"
/>
<item
id=
"34"
iotype=
"AI"
name=
"MB1_Mode_AS"
priority=
"Medium"
textname=
"ModbusExchange Mode"
/>
<item
id=
"34"
iotype=
"AI"
name=
"MB1_Mode_AS"
priority=
"Medium"
textname=
"ModbusExchange Mode"
/>
<item
id=
"50"
iotype=
"DI"
mbaddr=
"0x01"
mbfunc=
"0x06"
mbreg=
"0x02"
nbit=
"0"
mbtype=
"rtu"
name=
"Input50_S"
priority=
"Medium"
rs=
"5"
textname=
"Команда 2"
/>
<item
id=
"50"
iotype=
"DI"
mbaddr=
"0x01"
mbfunc=
"0x06"
mbreg=
"0x02"
nbit=
"0"
mbtype=
"rtu"
name=
"Input50_S"
p
ollfactor=
"4"
p
riority=
"Medium"
rs=
"5"
textname=
"Команда 2"
/>
<item
id=
"51"
iotype=
"DI"
mbaddr=
"0x01"
mbfunc=
"0x03"
mbreg=
"0x01"
ntit=
"1"
mbtype=
"rtu"
name=
"Input51_S"
priority=
"Medium"
rs=
"5"
textname=
"Команда 2"
/>
<item
id=
"51"
iotype=
"DI"
mbaddr=
"0x01"
mbfunc=
"0x03"
mbreg=
"0x01"
ntit=
"1"
mbtype=
"rtu"
name=
"Input51_S"
p
ollfactor=
"4"
p
riority=
"Medium"
rs=
"5"
textname=
"Команда 2"
/>
<item
id=
"52"
iotype=
"DI"
mbaddr=
"0x01"
mbfunc=
"0x06"
mbreg=
"0x02"
nbit=
"1"
mbtype=
"rtu"
name=
"Input52_S"
priority=
"Medium"
rs=
"5"
textname=
"Команда 2"
/>
<item
id=
"52"
iotype=
"DI"
mbaddr=
"0x01"
mbfunc=
"0x06"
mbreg=
"0x02"
nbit=
"1"
mbtype=
"rtu"
name=
"Input52_S"
p
ollfactor=
"2"
p
riority=
"Medium"
rs=
"5"
textname=
"Команда 2"
/>
<item
id=
"53"
iotype=
"DI"
mbaddr=
"0x01"
mbfunc=
"0x03"
mbreg=
"0x01"
nbit=
"2"
mbtype=
"rtu"
name=
"Input53_S"
priority=
"Medium"
rs=
"5"
textname=
"Команда 2"
/>
<item
id=
"53"
iotype=
"DI"
mbaddr=
"0x01"
mbfunc=
"0x03"
mbreg=
"0x01"
nbit=
"2"
mbtype=
"rtu"
name=
"Input53_S"
p
ollfactor=
"2"
p
riority=
"Medium"
rs=
"5"
textname=
"Команда 2"
/>
<item
id=
"67"
iotype=
"DI"
mbaddr=
"0x01"
mbfunc=
"0x03"
mbtype=
"rtu"
name=
"Input67_S"
priority=
"Medium"
rs=
"5"
textname=
"Bad reg test"
/>
<item
id=
"67"
iotype=
"DI"
mbaddr=
"0x01"
mbfunc=
"0x03"
mbtype=
"rtu"
name=
"Input67_S"
priority=
"Medium"
rs=
"5"
textname=
"Bad reg test"
/>
<item
id=
"54"
iotype=
"AI"
name=
"AI54_S"
textname=
"AI sensor 54"
rrd=
"1"
rrd1_ds=
"GAUGE:20:U:U"
/>
<item
id=
"54"
iotype=
"AI"
name=
"AI54_S"
textname=
"AI sensor 54"
rrd=
"1"
rrd1_ds=
"GAUGE:20:U:U"
/>
<item
id=
"55"
iotype=
"AI"
name=
"AI55_S"
textname=
"AI sensor 55"
rrd=
"1"
rrd1_ds=
"GAUGE:20:U:U"
/>
<item
id=
"55"
iotype=
"AI"
name=
"AI55_S"
textname=
"AI sensor 55"
rrd=
"1"
rrd1_ds=
"GAUGE:20:U:U"
/>
...
...
extensions/ModbusMaster/MBExchange.cc
View file @
3d6414dc
...
@@ -941,6 +941,9 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
...
@@ -941,6 +941,9 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
return
false
;
return
false
;
}
}
if
(
p
->
pollfactor
>
1
&&
ncycle
%
p
->
pollfactor
!=
0
)
return
false
;
if
(
mblog
->
is_level3
()
)
if
(
mblog
->
is_level3
()
)
{
{
mblog3
<<
myname
<<
"(pollRTU): poll "
mblog3
<<
myname
<<
"(pollRTU): poll "
...
@@ -951,6 +954,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
...
@@ -951,6 +954,7 @@ bool MBExchange::pollRTU( RTUDevice* dev, RegMap::iterator& it )
<<
" mb_initOK="
<<
p
->
mb_initOK
<<
" mb_initOK="
<<
p
->
mb_initOK
<<
" sm_initOK="
<<
p
->
sm_initOK
<<
" sm_initOK="
<<
p
->
sm_initOK
<<
" mbval="
<<
p
->
mbval
<<
" mbval="
<<
p
->
mbval
<<
" pollfactor="
<<
p
->
pollfactor
<<
endl
;
<<
endl
;
if
(
p
->
q_count
>
maxQueryCount
/* ModbusRTU::MAXDATALEN */
)
if
(
p
->
q_count
>
maxQueryCount
/* ModbusRTU::MAXDATALEN */
)
...
@@ -2176,6 +2180,8 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML::iterator& it, MBExchange::RTU
...
@@ -2176,6 +2180,8 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML::iterator& it, MBExchange::RTU
{
{
r
->
dev
=
dev
;
r
->
dev
=
dev
;
r
->
mbval
=
IOBase
::
initIntProp
(
it
,
"default"
,
prop_prefix
,
false
);
r
->
mbval
=
IOBase
::
initIntProp
(
it
,
"default"
,
prop_prefix
,
false
);
r
->
pollfactor
=
IOBase
::
initIntProp
(
it
,
"pollfactor"
,
prop_prefix
,
false
,
0
);
if
(
dev
->
dtype
==
MBExchange
::
dtRTU
)
if
(
dev
->
dtype
==
MBExchange
::
dtRTU
)
{
{
...
@@ -3013,6 +3019,7 @@ bool MBExchange::poll()
...
@@ -3013,6 +3019,7 @@ bool MBExchange::poll()
if
(
!
checkProcActive
()
)
if
(
!
checkProcActive
()
)
return
false
;
return
false
;
ncycle
++
;
bool
allNotRespond
=
true
;
bool
allNotRespond
=
true
;
for
(
auto
it1
=
rmap
.
begin
();
it1
!=
rmap
.
end
();
++
it1
)
for
(
auto
it1
=
rmap
.
begin
();
it1
!=
rmap
.
end
();
++
it1
)
...
...
extensions/ModbusMaster/MBExchange.h
View file @
3d6414dc
...
@@ -151,6 +151,11 @@ class MBExchange:
...
@@ -151,6 +151,11 @@ class MBExchange:
// Флаг sm_init означает, что писать в устройство нельзя, т.к. значение в "карте регистров"
// Флаг sm_init означает, что писать в устройство нельзя, т.к. значение в "карте регистров"
// ещё не инициализировано из SM
// ещё не инициализировано из SM
bool
sm_initOK
;
/*!< инициализировалось ли значение из SM */
bool
sm_initOK
;
/*!< инициализировалось ли значение из SM */
/*! приоритет опроса, 0,1 - высший,
* 1...n - задаёт "часоту" опроса. Т.е. каждые 1...n циклов
*/
int
pollfactor
=
{
0
};
};
};
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
RegInfo
&
r
);
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
RegInfo
&
r
);
...
@@ -379,6 +384,8 @@ class MBExchange:
...
@@ -379,6 +384,8 @@ class MBExchange:
VMonitor
vmon
;
VMonitor
vmon
;
unsigned
long
ncycle
=
{
0
};
/*!< текущий номер цикла опроса */
private
:
private
:
MBExchange
();
MBExchange
();
...
...
extensions/ModbusMaster/MBTCPMaster.h
View file @
3d6414dc
...
@@ -148,6 +148,7 @@
...
@@ -148,6 +148,7 @@
- \b tcp_nbyte - [1|2] номер байта. Используется если tcp_vtype="byte".
- \b tcp_nbyte - [1|2] номер байта. Используется если tcp_vtype="byte".
- \b tcp_mboffset - "сдвиг"(может быть отрицательным) при опросе/записи.
- \b tcp_mboffset - "сдвиг"(может быть отрицательным) при опросе/записи.
Т.е. фактически будет опрошен/записан регистр "mbreg+mboffset".
Т.е. фактически будет опрошен/записан регистр "mbreg+mboffset".
- \b tcp_pollfactor - [0...n] Частота опроса. n задаёт "часоту" опроса. т.е. опрос каждые 1...n циклов
Для инициализации "выходов" (регистров которые пишутся) можно использовать поля:
Для инициализации "выходов" (регистров которые пишутся) можно использовать поля:
- \b tcp_preinit - [0|1] считать регистр перед использованием (при запуске процесса)
- \b tcp_preinit - [0|1] считать регистр перед использованием (при запуске процесса)
...
...
extensions/ModbusMaster/MBTCPMultiMaster.h
View file @
3d6414dc
...
@@ -170,6 +170,7 @@
...
@@ -170,6 +170,7 @@
- \b tcp_nbyte - [1|2] номер байта. Используется если tcp_vtype="byte".
- \b tcp_nbyte - [1|2] номер байта. Используется если tcp_vtype="byte".
- \b tcp_mboffset - "сдвиг"(может быть отрицательным) при опросе/записи.
- \b tcp_mboffset - "сдвиг"(может быть отрицательным) при опросе/записи.
Т.е. фактически будет опрошен/записан регистр "mbreg+mboffset".
Т.е. фактически будет опрошен/записан регистр "mbreg+mboffset".
- \b tcp_pollfactor - [0...n] Частота опроса. n задаёт "часоту" опроса. т.е. опрос каждые 1...n циклов (зависит от общего polltime)
Для инициализации "выходов" (регистров которые пишутся) можно использовать поля:
Для инициализации "выходов" (регистров которые пишутся) можно использовать поля:
- \b tcp_preinit - [0|1] считать регистр перед использованием (при запуске процесса)
- \b tcp_preinit - [0|1] считать регистр перед использованием (при запуске процесса)
...
@@ -182,6 +183,8 @@
...
@@ -182,6 +183,8 @@
регистры в устройство писатся не будут. Чтобы отключить это поведение, можно указать параметр
регистры в устройство писатся не будут. Чтобы отключить это поведение, можно указать параметр
- \b tcp_sm_initOK - [0|1] Игнорировать начальную инициализацию из SM (сразу писать в устройство)
- \b tcp_sm_initOK - [0|1] Игнорировать начальную инициализацию из SM (сразу писать в устройство)
При этом будет записывыться значение "default".
При этом будет записывыться значение "default".
\warning Регистр должен быть уникальным. И может повторятся только если указан параметр \a nbit или \a nbyte.
\warning Регистр должен быть уникальным. И может повторятся только если указан параметр \a nbit или \a nbyte.
...
...
extensions/ModbusMaster/RTUExchange.cc
View file @
3d6414dc
...
@@ -200,6 +200,7 @@ bool RTUExchange::poll()
...
@@ -200,6 +200,7 @@ bool RTUExchange::poll()
if
(
!
checkProcActive
()
)
if
(
!
checkProcActive
()
)
return
false
;
return
false
;
ncycle
++
;
bool
allNotRespond
=
true
;
bool
allNotRespond
=
true
;
ComPort
::
Speed
s
=
mbrtu
->
getSpeed
();
ComPort
::
Speed
s
=
mbrtu
->
getSpeed
();
...
...
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