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
9c85ac7e
Commit
9c85ac7e
authored
Nov 03, 2014
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(MBSlave): добавил обработку vtByte и тесты.
parent
bc1b1c3c
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
101 additions
and
8 deletions
+101
-8
MBSlave.cc
extensions/ModbusSlave/MBSlave.cc
+22
-5
MBSlave.h
extensions/ModbusSlave/MBSlave.h
+2
-0
mbslave-test-configure.xml
extensions/ModbusSlave/tests/mbslave-test-configure.xml
+1
-1
mbslave-tests.cc
extensions/ModbusSlave/tests/mbslave-tests.cc
+75
-2
VTypes.h
extensions/include/VTypes.h
+1
-0
No files found.
extensions/ModbusSlave/MBSlave.cc
View file @
9c85ac7e
...
@@ -847,11 +847,31 @@ bool MBSlave::initItem( UniXML_iterator& it )
...
@@ -847,11 +847,31 @@ bool MBSlave::initItem( UniXML_iterator& it )
if
(
v
==
VTypes
::
vtUnknown
)
if
(
v
==
VTypes
::
vtUnknown
)
{
{
dcrit
<<
myname
<<
"(initItem): Unknown rtuVType="
<<
vt
<<
" for "
dcrit
<<
myname
<<
"(initItem): Unknown rtuVType="
<<
vt
<<
" for "
<<
IOBase
::
initProp
(
it
,
"name"
,
prop_prefix
,
false
)
<<
it
.
getProp
(
"name"
)
<<
endl
;
<<
endl
;
return
false
;
return
false
;
}
}
else
if
(
v
==
VTypes
::
vtByte
)
{
p
.
nbyte
=
IOBase
::
initIntProp
(
it
,
"nbyte"
,
prop_prefix
,
false
);
if
(
p
.
nbyte
<=
0
)
{
dcrit
<<
myname
<<
"(initItem): Unknown nbyte='' for "
<<
it
.
getProp
(
"name"
)
<<
endl
;
return
false
;
}
else
if
(
p
.
nbyte
>
2
)
{
dcrit
<<
myname
<<
"(initItem): BAD nbyte='"
<<
p
.
nbyte
<<
"' for "
<<
it
.
getProp
(
"name"
)
<<
". Must be [1,2]."
<<
endl
;
return
false
;
}
}
p
.
vtype
=
v
;
p
.
vtype
=
v
;
p
.
wnum
=
0
;
p
.
wnum
=
0
;
for
(
auto
i
=
0
;
i
<
VTypes
::
wsize
(
p
.
vtype
);
i
++
)
for
(
auto
i
=
0
;
i
<
VTypes
::
wsize
(
p
.
vtype
);
i
++
)
...
@@ -1207,12 +1227,10 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod
...
@@ -1207,12 +1227,10 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod
delete
[]
d
;
delete
[]
d
;
IOBase
::
processingFasAI
(
p
,
(
float
)
f4
,
shm
,
force
);
IOBase
::
processingFasAI
(
p
,
(
float
)
f4
,
shm
,
force
);
}
}
/*
else
if
(
p
->
vtype
==
VTypes
::
vtByte
)
else
if
(
p
->
vtype
==
VTypes
::
vtByte
)
{
{
VTypes::Byte b(
r->
mbval);
VTypes
::
Byte
b
(
mbval
);
IOBase
::
processingAsAI
(
p
,
b
.
raw
.
b
[
p
->
nbyte
-
1
],
shm
,
force
);
IOBase
::
processingAsAI
(
p
,
b
.
raw
.
b
[
p
->
nbyte
-
1
],
shm
,
force
);
return;
}
}
/*
/*
if( p->stype == UniversalIO::DI ||
if( p->stype == UniversalIO::DI ||
...
@@ -1227,7 +1245,6 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod
...
@@ -1227,7 +1245,6 @@ ModbusRTU::mbErrCode MBSlave::real_write_it( IOMap::iterator& it, ModbusRTU::Mod
IOBase::processingAsAI( p, val, shm, force );
IOBase::processingAsAI( p, val, shm, force );
}
}
*/
*/
i
++
;
pingOK
=
true
;
pingOK
=
true
;
return
ModbusRTU
::
erNoError
;
return
ModbusRTU
::
erNoError
;
}
}
...
...
extensions/ModbusSlave/MBSlave.h
View file @
9c85ac7e
...
@@ -50,6 +50,7 @@ class MBSlave:
...
@@ -50,6 +50,7 @@ class MBSlave:
AccessMode
amode
;
AccessMode
amode
;
VTypes
::
VType
vtype
;
/*!< type of value */
VTypes
::
VType
vtype
;
/*!< type of value */
int
wnum
;
/*!< номер слова (для типов с размеров больше 2х байт */
int
wnum
;
/*!< номер слова (для типов с размеров больше 2х байт */
int
nbyte
;
/*!< номер байта, который надо "сохранить" из "пришедщего в запросе" слова. [1-2] */
bool
rawdata
;
/*!< флаг, что в SM просто сохраняются 4-байта (актуально для типа F4)*/
bool
rawdata
;
/*!< флаг, что в SM просто сохраняются 4-байта (актуально для типа F4)*/
IOProperty
()
:
IOProperty
()
:
...
@@ -57,6 +58,7 @@ class MBSlave:
...
@@ -57,6 +58,7 @@ class MBSlave:
amode
(
amRW
),
amode
(
amRW
),
vtype
(
VTypes
::
vtUnknown
),
vtype
(
VTypes
::
vtUnknown
),
wnum
(
0
),
wnum
(
0
),
nbyte
(
0
),
rawdata
(
false
)
rawdata
(
false
)
{}
{}
...
...
extensions/ModbusSlave/tests/mbslave-test-configure.xml
View file @
9c85ac7e
...
@@ -140,7 +140,7 @@
...
@@ -140,7 +140,7 @@
<item
default=
"4294967295"
id=
"2003"
mbs=
"1"
mbreg=
"104"
iotype=
"AI"
vtype=
"U2"
name=
"TestVtype3"
textname=
"Тестовый регистр для проверки vtype"
/>
<item
default=
"4294967295"
id=
"2003"
mbs=
"1"
mbreg=
"104"
iotype=
"AI"
vtype=
"U2"
name=
"TestVtype3"
textname=
"Тестовый регистр для проверки vtype"
/>
<item
default=
"4294967295"
id=
"2004"
mbs=
"1"
mbreg=
"106"
iotype=
"AI"
vtype=
"U2r"
name=
"TestVtype4"
textname=
"Тестовый регистр для проверки vtype"
/>
<item
default=
"4294967295"
id=
"2004"
mbs=
"1"
mbreg=
"106"
iotype=
"AI"
vtype=
"U2r"
name=
"TestVtype4"
textname=
"Тестовый регистр для проверки vtype"
/>
<item
default=
"200"
id=
"2005"
mbs=
"1"
mbreg=
"108"
iotype=
"AI"
vtype=
"byte"
nbyte=
"1"
name=
"TestVtype5"
textname=
"Тестовый регистр для проверки vtype"
/>
<item
default=
"200"
id=
"2005"
mbs=
"1"
mbreg=
"108"
iotype=
"AI"
vtype=
"byte"
nbyte=
"1"
name=
"TestVtype5"
textname=
"Тестовый регистр для проверки vtype"
/>
<item
default=
"200"
id=
"2006"
mbs=
"1"
mbreg=
"10
8
"
iotype=
"AI"
vtype=
"byte"
nbyte=
"2"
name=
"TestVtype6"
textname=
"Тестовый регистр для проверки vtype"
/>
<item
default=
"200"
id=
"2006"
mbs=
"1"
mbreg=
"10
9
"
iotype=
"AI"
vtype=
"byte"
nbyte=
"2"
name=
"TestVtype6"
textname=
"Тестовый регистр для проверки vtype"
/>
<item
id=
"2007"
default=
"250"
precision=
"2"
mbs=
"1"
mbreg=
"110"
iotype=
"AI"
vtype=
"F2"
name=
"TestVtype7"
textname=
"Тестовый регистр для проверки vtype"
/>
<item
id=
"2007"
default=
"250"
precision=
"2"
mbs=
"1"
mbreg=
"110"
iotype=
"AI"
vtype=
"F2"
name=
"TestVtype7"
textname=
"Тестовый регистр для проверки vtype"
/>
<item
id=
"2008"
default=
"250"
precision=
"2"
mbs=
"1"
mbreg=
"112"
iotype=
"AI"
vtype=
"F2r"
name=
"TestVtype8"
textname=
"Тестовый регистр для проверки vtype"
/>
<item
id=
"2008"
default=
"250"
precision=
"2"
mbs=
"1"
mbreg=
"112"
iotype=
"AI"
vtype=
"F2r"
name=
"TestVtype8"
textname=
"Тестовый регистр для проверки vtype"
/>
<item
id=
"2009"
default=
"250000"
precision=
"5"
mbs=
"1"
mbreg=
"114"
iotype=
"AI"
vtype=
"F4"
name=
"TestVtype9"
textname=
"Тестовый регистр для проверки vtype"
/>
<item
id=
"2009"
default=
"250000"
precision=
"5"
mbs=
"1"
mbreg=
"114"
iotype=
"AI"
vtype=
"F4"
name=
"TestVtype9"
textname=
"Тестовый регистр для проверки vtype"
/>
...
...
extensions/ModbusSlave/tests/mbslave-tests.cc
View file @
9c85ac7e
...
@@ -574,6 +574,38 @@ TEST_CASE("Read(0x03,0x04): vtypes..","[modbus][mbslave][mbtcpslave]")
...
@@ -574,6 +574,38 @@ TEST_CASE("Read(0x03,0x04): vtypes..","[modbus][mbslave][mbtcpslave]")
REQUIRE
(
(
float
)
f4
==
2.5
);
REQUIRE
(
(
float
)
f4
==
2.5
);
}
}
}
}
SECTION
(
"Test: read vtype 'Byte N1'"
)
{
ModbusRTU
::
ModbusData
tREG
=
108
;
SECTION
(
"Test: read03"
)
{
ModbusRTU
::
ReadOutputRetMessage
ret
=
mb
->
read03
(
slaveaddr
,
tREG
,
Byte
::
wsize
());
Byte
b
(
ret
.
data
[
0
]);
REQUIRE
(
(
unsigned
short
)
b
==
200
);
}
SECTION
(
"Test: read04"
)
{
ModbusRTU
::
ReadInputRetMessage
ret
=
mb
->
read04
(
slaveaddr
,
tREG
,
Byte
::
wsize
());
Byte
b
(
ret
.
data
[
0
]);
REQUIRE
(
(
unsigned
short
)
b
==
200
);
}
}
SECTION
(
"Test: read vtype 'Byte N2'"
)
{
ModbusRTU
::
ModbusData
tREG
=
109
;
SECTION
(
"Test: read03"
)
{
ModbusRTU
::
ReadOutputRetMessage
ret
=
mb
->
read03
(
slaveaddr
,
tREG
,
Byte
::
wsize
());
Byte
b
(
ret
.
data
[
0
]);
REQUIRE
(
(
unsigned
short
)
b
==
200
);
}
SECTION
(
"Test: read04"
)
{
ModbusRTU
::
ReadInputRetMessage
ret
=
mb
->
read04
(
slaveaddr
,
tREG
,
Byte
::
wsize
());
Byte
b
(
ret
.
data
[
0
]);
REQUIRE
(
(
unsigned
short
)
b
==
200
);
}
}
}
}
// -------------------------------------------------------------
// -------------------------------------------------------------
...
@@ -716,6 +748,32 @@ static void test_write10_F4prec( const float& val )
...
@@ -716,6 +748,32 @@ static void test_write10_F4prec( const float& val )
REQUIRE
(
fval
==
val
);
REQUIRE
(
fval
==
val
);
}
}
static
void
test_write10_byte1
(
unsigned
char
val
)
{
using
namespace
VTypes
;
ModbusRTU
::
ModbusData
tREG
=
108
;
ModbusRTU
::
WriteOutputMessage
msg
(
slaveaddr
,
tREG
);
Byte
tmp
(
val
,
0
);
msg
.
addData
(
(
unsigned
short
)
tmp
);
ModbusRTU
::
WriteOutputRetMessage
ret
=
mb
->
write10
(
msg
);
REQUIRE
(
ret
.
start
==
tREG
);
REQUIRE
(
ret
.
quant
==
Byte
::
wsize
()
);
REQUIRE
(
ui
->
getValue
(
2005
)
==
(
long
)
val
);
}
static
void
test_write10_byte2
(
unsigned
char
val
)
{
using
namespace
VTypes
;
ModbusRTU
::
ModbusData
tREG
=
109
;
ModbusRTU
::
WriteOutputMessage
msg
(
slaveaddr
,
tREG
);
Byte
tmp
(
0
,
val
);
msg
.
addData
(
(
unsigned
short
)
tmp
);
ModbusRTU
::
WriteOutputRetMessage
ret
=
mb
->
write10
(
msg
);
REQUIRE
(
ret
.
start
==
tREG
);
REQUIRE
(
ret
.
quant
==
Byte
::
wsize
()
);
REQUIRE
(
ui
->
getValue
(
2006
)
==
(
long
)
val
);
}
TEST_CASE
(
"Write(0x10): vtypes.."
,
"[modbus][mbslave][mbtcpslave]"
)
TEST_CASE
(
"Write(0x10): vtypes.."
,
"[modbus][mbslave][mbtcpslave]"
)
{
{
...
@@ -770,6 +828,22 @@ TEST_CASE("Write(0x10): vtypes..","[modbus][mbslave][mbtcpslave]")
...
@@ -770,6 +828,22 @@ TEST_CASE("Write(0x10): vtypes..","[modbus][mbslave][mbtcpslave]")
test_write10_F4prec
(
0
);
test_write10_F4prec
(
0
);
test_write10_F4prec
(
-
15.00001
);
test_write10_F4prec
(
-
15.00001
);
}
}
SECTION
(
"Test: write vtype 'Byte N1'"
)
{
test_write10_byte1
(
numeric_limits
<
unsigned
char
>::
max
());
test_write10_byte1
(
0
);
test_write10_byte1
(
numeric_limits
<
unsigned
char
>::
min
());
test_write10_byte1
(
numeric_limits
<
char
>::
max
());
test_write10_byte1
(
numeric_limits
<
char
>::
min
());
}
SECTION
(
"Test: write vtype 'Byte N2'"
)
{
test_write10_byte2
(
numeric_limits
<
unsigned
char
>::
max
());
test_write10_byte2
(
0
);
test_write10_byte2
(
numeric_limits
<
unsigned
char
>::
min
());
test_write10_byte2
(
numeric_limits
<
char
>::
max
());
test_write10_byte2
(
numeric_limits
<
char
>::
min
());
}
}
}
#if 0
#if 0
...
@@ -863,4 +937,4 @@ TEST_CASE("access mode","[modbus][mbslvae][mbtcpslave]")
...
@@ -863,4 +937,4 @@ TEST_CASE("access mode","[modbus][mbslvae][mbtcpslave]")
ModbusRTU
::
ReadInputRetMessage
rret
=
mb
->
read04
(
slaveaddr
,
tREG
,
1
);
ModbusRTU
::
ReadInputRetMessage
rret
=
mb
->
read04
(
slaveaddr
,
tREG
,
1
);
REQUIRE
(
rret
.
data
[
0
]
==
555
);
REQUIRE
(
rret
.
data
[
0
]
==
555
);
}
}
}
}
\ No newline at end of file
extensions/include/VTypes.h
View file @
9c85ac7e
...
@@ -168,6 +168,7 @@ namespace VTypes
...
@@ -168,6 +168,7 @@ namespace VTypes
static
VType
type
(){
return
vtByte
;
}
static
VType
type
(){
return
vtByte
;
}
// ------------------------------------------
// ------------------------------------------
operator
long
(){
return
lroundf
(
raw
.
w
);
}
operator
long
(){
return
lroundf
(
raw
.
w
);
}
operator
unsigned
short
(){
return
raw
.
w
;
}
unsigned
char
operator
[](
const
int
i
){
return
raw
.
b
[
i
];
}
unsigned
char
operator
[](
const
int
i
){
return
raw
.
b
[
i
];
}
...
...
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