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
2ce41e8f
Commit
2ce41e8f
authored
Feb 21, 2012
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(ModbusExchange): Исправлена ошибка работы с RTU188
parent
6d4d4265
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
101 additions
and
11 deletions
+101
-11
test.xml
conf/test.xml
+1
-1
MBExchange.cc
extensions/ModbusMaster/MBExchange.cc
+12
-2
RTUStorage.cc
extensions/ModbusMaster/RTUStorage.cc
+86
-8
RTUStorage.h
extensions/ModbusMaster/RTUStorage.h
+2
-0
No files found.
conf/test.xml
View file @
2ce41e8f
...
...
@@ -115,7 +115,7 @@
</item>
<item
id=
"7"
iotype=
"DO"
name=
"DO_C"
priority=
"Medium"
textname=
"Digital output"
/>
<item
id=
"8"
iotype=
"DO"
name=
"DO1_C"
priority=
"Medium"
textname=
"Digital output"
/>
<item
id=
"9"
default=
"1000"
iotype=
"AO"
rs_mbaddr=
"0x01"
rs_mbfunc=
"0x06"
rs_mbreg=
"0x02"
precision=
"2"
rs_mbtype=
"rtu188"
name=
"AO_AS"
priority=
"Medium"
rs=
"2"
textname=
"Analog output"
/>
<item
id=
"9"
default=
"1000"
iotype=
"AO"
rs_mbaddr=
"0x01"
rs_mbfunc=
"0x06"
rs_mbreg=
"0x02"
precision=
"2"
rs_mbtype=
"rtu188"
rs_jack=
"j1"
rs_channel=
"1"
name=
"AO_AS"
priority=
"Medium"
rs=
"2"
textname=
"Analog output"
/>
<item
id=
"10"
default=
"378"
iotype=
"AI"
mbaddr=
"0x01"
mbfunc=
"0x04"
mbreg=
"0x01"
mbtype=
"rtu"
name=
"AI_AS"
precision=
"45"
priority=
"Medium"
rs=
"1"
textname=
"Analog input"
vtype=
"F2"
>
<consumers>
<consumer
cfilter=
"test1"
name=
"TestProc"
type=
"objects"
/>
...
...
extensions/ModbusMaster/MBExchange.cc
View file @
2ce41e8f
...
...
@@ -3,6 +3,7 @@
#include <limits>
#include <sstream>
#include <Exceptions.h>
#include <UniSetTypes.h>
#include <extensions/Extensions.h>
#include "MBExchange.h"
// -----------------------------------------------------------------------------
...
...
@@ -1848,6 +1849,15 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML_iterator& it, MBExchange::RTUD
// only for RTU188
if
(
!
initRTU188item
(
it
,
r
)
)
return
false
;
UniversalIO
::
IOTypes
t
=
UniSetTypes
::
getIOType
(
it
.
getProp
(
"iotype"
));
r
->
mbreg
=
RTUStorage
::
getRegister
(
r
->
rtuJack
,
r
->
rtuChan
,
t
);
r
->
mbfunc
=
RTUStorage
::
getFunction
(
r
->
rtuJack
,
r
->
rtuChan
,
t
);
// т.к. с RTU188 свой обмен
// mbreg и mbfunc поля не используются
return
true
;
}
else
{
...
...
@@ -2145,14 +2155,14 @@ bool MBExchange::initRTU188item( UniXML_iterator& it, RegInfo* p )
if
(
jack
.
empty
()
)
{
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(readRTU188Item): Unknown jack='' "
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(readRTU188Item): Unknown
"
<<
prop_prefix
<<
"
jack='' "
<<
" for "
<<
it
.
getProp
(
"name"
)
<<
endl
;
return
false
;
}
p
->
rtuJack
=
RTUStorage
::
s2j
(
jack
);
if
(
p
->
rtuJack
==
RTUStorage
::
nUnknown
)
{
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(readRTU188Item): Unknown jack="
<<
jack
dlog
[
Debug
::
CRIT
]
<<
myname
<<
"(readRTU188Item): Unknown
"
<<
prop_prefix
<<
"
jack="
<<
jack
<<
" for "
<<
it
.
getProp
(
"name"
)
<<
endl
;
return
false
;
}
...
...
extensions/ModbusMaster/RTUStorage.cc
View file @
2ce41e8f
...
...
@@ -111,9 +111,9 @@ void RTUStorage::poll( ModbusRTUMaster* mb )
// -----------------------------------
}
// опрос UNIO48 DO
if
(
pollUNIO
)
{
// опрос UNIO48 DO
{
ModbusRTU
::
ReadCoilRetMessage
ret
=
mb
->
read01
(
addr
,
16
,
48
);
ModbusRTU
::
DataBits
bits
;
...
...
@@ -353,6 +353,84 @@ ModbusRTU::ModbusData RTUStorage::getRegister( RTUJack jack, unsigned short chan
return
-
1
;
}
// -----------------------------------------------------------------------------
ModbusRTU
::
SlaveFunctionCode
RTUStorage
::
getFunction
(
RTUJack
jack
,
unsigned
short
chan
,
UniversalIO
::
IOTypes
t
)
{
if
(
t
==
UniversalIO
::
AnalogInput
)
{
switch
(
jack
)
{
case
nJ1
:
case
nJ2
:
case
nJ5
:
case
nX1
:
case
nX2
:
return
ModbusRTU
::
fnReadInputRegisters
;
default
:
break
;
}
return
ModbusRTU
::
fnUnknown
;
}
if
(
t
==
UniversalIO
::
AnalogOutput
)
{
switch
(
jack
)
{
case
nJ1
:
case
nJ2
:
case
nJ5
:
return
ModbusRTU
::
fnReadOutputRegisters
;
case
nX1
:
case
nX2
:
return
ModbusRTU
::
fnReadInputRegisters
;
default
:
break
;
}
return
ModbusRTU
::
fnUnknown
;
}
if
(
t
==
UniversalIO
::
DigitalInput
)
{
switch
(
jack
)
{
case
nJ1
:
case
nJ2
:
case
nJ5
:
case
nX4
:
case
nX5
:
return
ModbusRTU
::
fnReadInputStatus
;
default
:
break
;
}
return
ModbusRTU
::
fnUnknown
;
}
if
(
t
==
UniversalIO
::
DigitalOutput
)
{
switch
(
jack
)
{
case
nJ1
:
case
nJ2
:
case
nJ5
:
return
ModbusRTU
::
fnReadCoilStatus
;
default
:
break
;
}
return
ModbusRTU
::
fnUnknown
;
}
return
ModbusRTU
::
fnUnknown
;
}
// -----------------------------------------------------------------------------
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
RTUStorage
&
m
)
{
os
<<
"-------------------"
<<
endl
...
...
@@ -483,20 +561,20 @@ void RTUStorage::print()
// -----------------------------------------------------------------------------
RTUStorage
::
RTUJack
RTUStorage
::
s2j
(
const
std
::
string
jack
)
{
if
(
jack
==
"J1"
)
if
(
jack
==
"J1"
||
jack
==
"j1"
)
return
nJ1
;
if
(
jack
==
"J2"
)
if
(
jack
==
"J2"
||
jack
==
"j2"
)
return
nJ2
;
if
(
jack
==
"J5"
)
if
(
jack
==
"J5"
||
jack
==
"j5"
)
return
nJ5
;
if
(
jack
==
"X1"
)
if
(
jack
==
"X1"
||
jack
==
"x1"
)
return
nX1
;
if
(
jack
==
"X2"
)
if
(
jack
==
"X2"
||
jack
==
"x2"
)
return
nX2
;
if
(
jack
==
"X4"
)
if
(
jack
==
"X4"
||
jack
==
"x4"
)
return
nX4
;
if
(
jack
==
"X5"
)
if
(
jack
==
"X5"
||
jack
==
"x5"
)
return
nX5
;
return
nUnknown
;
...
...
extensions/ModbusMaster/RTUStorage.h
View file @
2ce41e8f
...
...
@@ -46,6 +46,8 @@ class RTUStorage
bool
getState
(
RTUJack
jack
,
unsigned
short
channel
,
UniversalIO
::
IOTypes
t
);
static
ModbusRTU
::
ModbusData
getRegister
(
RTUJack
jack
,
unsigned
short
channel
,
UniversalIO
::
IOTypes
t
);
static
ModbusRTU
::
SlaveFunctionCode
getFunction
(
RTUJack
jack
,
unsigned
short
channel
,
UniversalIO
::
IOTypes
t
);
// ДОДЕЛАТЬ: setState, setValue
void
print
();
...
...
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