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
dd9fe9fb
Commit
dd9fe9fb
authored
Oct 03, 2017
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Более точно "выразил" применение типов,
а также чистка от лишних коментариев
parent
12454b9d
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
198 additions
and
198 deletions
+198
-198
MBTCPMaster.h
extensions/ModbusMaster/MBTCPMaster.h
+0
-1
MBTCPMultiMaster.h
extensions/ModbusMaster/MBTCPMultiMaster.h
+0
-1
RTUExchange.h
extensions/ModbusMaster/RTUExchange.h
+0
-1
RTUStorage.cc
extensions/ModbusMaster/RTUStorage.cc
+5
-5
RTUStorage.h
extensions/ModbusMaster/RTUStorage.h
+6
-5
mtr-conv.cc
extensions/ModbusMaster/mtr-conv.cc
+3
-2
vtconv.cc
extensions/ModbusMaster/vtconv.cc
+1
-1
MBSlave.cc
extensions/ModbusSlave/MBSlave.cc
+4
-4
MBSlave.h
extensions/ModbusSlave/MBSlave.h
+0
-1
test_mbslave.cc
extensions/ModbusSlave/tests/test_mbslave.cc
+48
-48
MTR.h
extensions/include/MTR.h
+62
-61
test_vtypes.cc
extensions/tests/test_vtypes.cc
+29
-29
ComPort.h
include/ComPort.h
+8
-8
ComPort485F.h
include/ComPort485F.h
+5
-5
ModbusTypes.h
include/modbus/ModbusTypes.h
+2
-1
ComPort.cc
src/Communications/ComPort.cc
+4
-4
ComPort485F.cc
src/Communications/ComPort485F.cc
+13
-13
ModbusTypes.cc
src/Communications/Modbus/ModbusTypes.cc
+8
-8
No files found.
extensions/ModbusMaster/MBTCPMaster.h
View file @
dd9fe9fb
...
...
@@ -258,7 +258,6 @@ namespace uniset
uniset
::
ObjectId
shmID
,
const
std
::
shared_ptr
<
SharedMemory
>&
ic
=
nullptr
,
const
std
::
string
&
prefix
=
"mbtcp"
);
/*! глобальная функция для вывода help-а */
static
void
help_print
(
int
argc
,
const
char
*
const
*
argv
);
virtual
uniset
::
SimpleInfo
*
getInfo
(
const
char
*
userparam
=
0
)
override
;
...
...
extensions/ModbusMaster/MBTCPMultiMaster.h
View file @
dd9fe9fb
...
...
@@ -296,7 +296,6 @@ namespace uniset
uniset
::
ObjectId
shmID
,
const
std
::
shared_ptr
<
SharedMemory
>&
ic
=
nullptr
,
const
std
::
string
&
prefix
=
"mbtcp"
);
/*! глобальная функция для вывода help-а */
static
void
help_print
(
int
argc
,
const
char
*
const
*
argv
);
virtual
uniset
::
SimpleInfo
*
getInfo
(
const
char
*
userparam
=
0
)
override
;
...
...
extensions/ModbusMaster/RTUExchange.h
View file @
dd9fe9fb
...
...
@@ -41,7 +41,6 @@ namespace uniset
uniset
::
ObjectId
shmID
,
const
std
::
shared_ptr
<
SharedMemory
>&
ic
=
nullptr
,
const
std
::
string
&
prefix
=
"rs"
);
/*! глобальная функция для вывода help-а */
static
void
help_print
(
int
argc
,
const
char
*
const
*
argv
);
protected
:
...
...
extensions/ModbusMaster/RTUStorage.cc
View file @
dd9fe9fb
...
...
@@ -208,12 +208,12 @@ namespace uniset
}
}
// -----------------------------------------------------------------------------
long
RTUStorage
::
getInt
(
RTUJack
jack
,
u
nsigned
short
in
t
chan
,
UniversalIO
::
IOType
t
)
long
RTUStorage
::
getInt
(
RTUJack
jack
,
u
int16_
t
chan
,
UniversalIO
::
IOType
t
)
{
return
lroundf
(
getFloat
(
jack
,
chan
,
t
)
);
}
// -----------------------------------------------------------------------------
float
RTUStorage
::
getFloat
(
RTUJack
jack
,
u
nsigned
short
in
t
chan
,
UniversalIO
::
IOType
t
)
float
RTUStorage
::
getFloat
(
RTUJack
jack
,
u
int16_
t
chan
,
UniversalIO
::
IOType
t
)
{
if
(
t
==
UniversalIO
::
AI
)
{
...
...
@@ -270,7 +270,7 @@ namespace uniset
return
0
;
}
// -----------------------------------------------------------------------------
bool
RTUStorage
::
getState
(
RTUJack
jack
,
u
nsigned
short
in
t
chan
,
UniversalIO
::
IOType
t
)
bool
RTUStorage
::
getState
(
RTUJack
jack
,
u
int16_
t
chan
,
UniversalIO
::
IOType
t
)
{
if
(
t
==
UniversalIO
::
DI
)
{
...
...
@@ -321,7 +321,7 @@ namespace uniset
return
false
;
}
// -----------------------------------------------------------------------------
ModbusRTU
::
ModbusData
RTUStorage
::
getRegister
(
RTUJack
jack
,
u
nsigned
shor
t
chan
,
UniversalIO
::
IOType
t
)
ModbusRTU
::
ModbusData
RTUStorage
::
getRegister
(
RTUJack
jack
,
u
int16_
t
chan
,
UniversalIO
::
IOType
t
)
{
if
(
t
==
UniversalIO
::
AI
)
{
...
...
@@ -424,7 +424,7 @@ namespace uniset
return
-
1
;
}
// -----------------------------------------------------------------------------
ModbusRTU
::
SlaveFunctionCode
RTUStorage
::
getFunction
(
RTUJack
jack
,
u
nsigned
shor
t
chan
,
UniversalIO
::
IOType
t
)
ModbusRTU
::
SlaveFunctionCode
RTUStorage
::
getFunction
(
RTUJack
jack
,
u
int16_
t
chan
,
UniversalIO
::
IOType
t
)
{
if
(
t
==
UniversalIO
::
AI
)
{
...
...
extensions/ModbusMaster/RTUStorage.h
View file @
dd9fe9fb
...
...
@@ -18,6 +18,7 @@
#define _RTUSTORAGE_H_
// -----------------------------------------------------------------------------
#include <ostream>
#include <cstdint>
#include <string>
#include <memory>
#include "modbus/ModbusTypes.h"
...
...
@@ -78,13 +79,13 @@ namespace uniset
static
RTUJack
s2j
(
const
std
::
string
&
jack
);
static
std
::
string
j2s
(
RTUJack
j
);
long
getInt
(
RTUJack
jack
,
u
nsigned
shor
t
channel
,
UniversalIO
::
IOType
t
);
float
getFloat
(
RTUJack
jack
,
u
nsigned
shor
t
channel
,
UniversalIO
::
IOType
t
);
bool
getState
(
RTUJack
jack
,
u
nsigned
shor
t
channel
,
UniversalIO
::
IOType
t
);
long
getInt
(
RTUJack
jack
,
u
int16_
t
channel
,
UniversalIO
::
IOType
t
);
float
getFloat
(
RTUJack
jack
,
u
int16_
t
channel
,
UniversalIO
::
IOType
t
);
bool
getState
(
RTUJack
jack
,
u
int16_
t
channel
,
UniversalIO
::
IOType
t
);
static
ModbusRTU
::
ModbusData
getRegister
(
RTUJack
jack
,
u
nsigned
shor
t
channel
,
UniversalIO
::
IOType
t
);
static
ModbusRTU
::
ModbusData
getRegister
(
RTUJack
jack
,
u
int16_
t
channel
,
UniversalIO
::
IOType
t
);
static
ModbusRTU
::
SlaveFunctionCode
getFunction
(
RTUJack
jack
,
u
nsigned
shor
t
channel
,
UniversalIO
::
IOType
t
);
static
ModbusRTU
::
SlaveFunctionCode
getFunction
(
RTUJack
jack
,
u
int16_
t
channel
,
UniversalIO
::
IOType
t
);
// ДОДЕЛАТЬ: setState, setValue
void
print
();
...
...
extensions/ModbusMaster/mtr-conv.cc
View file @
dd9fe9fb
...
...
@@ -14,6 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// -------------------------------------------------------------------------
#include <cstdint>
#include <iostream>
#include <iomanip>
#include "UniSetTypes.h"
...
...
@@ -30,8 +31,8 @@ static void print_help()
int
main
(
int
argc
,
const
char
**
argv
)
{
// std::ios::sync_with_stdio(false);
u
nsigned
shor
t
v1
=
0
;
u
nsigned
shor
t
v2
=
0
;
u
int16_
t
v1
=
0
;
u
int16_
t
v2
=
0
;
const
char
*
type
=
""
;
if
(
argc
<
2
)
...
...
extensions/ModbusMaster/vtconv.cc
View file @
dd9fe9fb
...
...
@@ -74,7 +74,7 @@ int main( int argc, const char** argv )
// return 0;
*/
u
nsigned
shor
t
v
[
4
];
u
int16_
t
v
[
4
];
memset
(
v
,
0
,
sizeof
(
v
));
const
char
*
type
=
""
;
...
...
extensions/ModbusSlave/MBSlave.cc
View file @
dd9fe9fb
...
...
@@ -1712,7 +1712,7 @@ namespace uniset
if
(
ret
==
ModbusRTU
::
erNoError
)
{
for
(
u
nsigned
in
t
i
=
0
;
i
<
query
.
count
;
i
++
)
for
(
u
int16_
t
i
=
0
;
i
<
query
.
count
;
i
++
)
reply
.
addData
(
buf
[
i
]
);
}
...
...
@@ -1916,12 +1916,12 @@ namespace uniset
}
else
if
(
p
->
vtype
==
VTypes
::
vtUnsigned
)
{
long
val
=
(
u
nsigned
shor
t
)(
mbval
);
long
val
=
(
u
int16_
t
)(
mbval
);
IOBase
::
processingAsAI
(
p
,
val
,
shm
,
force
);
}
else
if
(
p
->
vtype
==
VTypes
::
vtSigned
)
{
long
val
=
(
signed
shor
t
)(
mbval
);
long
val
=
(
int16_
t
)(
mbval
);
IOBase
::
processingAsAI
(
p
,
val
,
shm
,
force
);
}
else
if
(
p
->
vtype
==
VTypes
::
vtI2
)
...
...
@@ -2515,7 +2515,7 @@ namespace uniset
if
(
ret
==
ModbusRTU
::
erNoError
)
{
for
(
u
nsigned
in
t
i
=
0
;
i
<
query
.
count
;
i
++
)
for
(
u
int16_
t
i
=
0
;
i
<
query
.
count
;
i
++
)
reply
.
addData
(
buf
[
i
]
);
}
...
...
extensions/ModbusSlave/MBSlave.h
View file @
dd9fe9fb
...
...
@@ -341,7 +341,6 @@ namespace uniset
uniset
::
ObjectId
shmID
,
const
std
::
shared_ptr
<
SharedMemory
>&
ic
=
nullptr
,
const
std
::
string
&
prefix
=
"mbs"
);
/*! глобальная функция для вывода help-а */
static
void
help_print
(
int
argc
,
const
char
*
const
*
argv
);
static
const
int
NoSafetyState
=
-
1
;
...
...
extensions/ModbusSlave/tests/test_mbslave.cc
View file @
dd9fe9fb
...
...
@@ -99,7 +99,7 @@ TEST_CASE("Function (0x03): 'read register outputs or memories or read word outp
ModbusRTU
::
ReadOutputRetMessage
ret
=
mb
->
read03
(
slaveaddr
,
tREG
,
3
);
REQUIRE
(
ret
.
data
[
0
]
==
10
);
REQUIRE
(
ret
.
data
[
1
]
==
11
);
REQUIRE
(
(
signed
shor
t
)(
ret
.
data
[
2
])
==
-
10
);
REQUIRE
(
(
int16_
t
)(
ret
.
data
[
2
])
==
-
10
);
}
SECTION
(
"Test: read MAXDATA count.."
)
{
...
...
@@ -156,8 +156,8 @@ TEST_CASE("Function (0x04): 'read input registers or memories or read word outpu
ModbusRTU
::
ReadInputRetMessage
ret
=
mb
->
read04
(
slaveaddr
,
tREG
,
4
);
REQUIRE
(
ret
.
data
[
0
]
==
10
);
REQUIRE
(
ret
.
data
[
1
]
==
11
);
REQUIRE
(
(
signed
shor
t
)(
ret
.
data
[
2
])
==
-
10
);
REQUIRE
(
(
signed
shor
t
)(
ret
.
data
[
3
])
==
-
10000
);
REQUIRE
(
(
int16_
t
)(
ret
.
data
[
2
])
==
-
10
);
REQUIRE
(
(
int16_
t
)(
ret
.
data
[
3
])
==
-
10000
);
}
SECTION
(
"Test: read MAXDATA count.."
)
{
...
...
@@ -237,8 +237,8 @@ TEST_CASE("(0x06): write register outputs or memories", "[modbus][mbslave][mbtcp
{
ModbusRTU
::
WriteSingleOutputRetMessage
ret
=
mb
->
write06
(
slaveaddr
,
tREG
,
-
10
);
REQUIRE
(
ret
.
start
==
tREG
);
REQUIRE
(
(
signed
shor
t
)
ret
.
data
==
-
10
);
REQUIRE
(
(
signed
shor
t
)
ui
->
getValue
(
tID
)
==
-
10
);
REQUIRE
(
(
int16_
t
)
ret
.
data
==
-
10
);
REQUIRE
(
(
int16_
t
)
ui
->
getValue
(
tID
)
==
-
10
);
}
SECTION
(
"Test: write zero value"
)
{
...
...
@@ -344,8 +344,8 @@ TEST_CASE("(0x10): write register outputs or memories", "[modbus][mbslave][mbtcp
ModbusRTU
::
WriteOutputRetMessage
ret
=
mb
->
write10
(
msg
);
REQUIRE
(
ret
.
start
==
tREG
);
REQUIRE
(
ret
.
quant
==
2
);
REQUIRE
(
(
signed
shor
t
)
ui
->
getValue
(
tID
)
==
-
10
);
REQUIRE
(
(
signed
shor
t
)
ui
->
getValue
(
tID
+
1
)
==
-
100
);
REQUIRE
(
(
int16_
t
)
ui
->
getValue
(
tID
)
==
-
10
);
REQUIRE
(
(
int16_
t
)
ui
->
getValue
(
tID
+
1
)
==
-
100
);
}
SECTION
(
"Test: write zero registers"
)
{
...
...
@@ -481,13 +481,13 @@ TEST_CASE("Read(0x03,0x04): vtypes..", "[modbus][mbslave][mbread][mbtcpslave]")
{
ModbusRTU::ReadOutputRetMessage ret = mb->read03(slaveaddr, tREG, U2::wsize());
U2 u2(ret.data, ret.count);
REQUIRE( (u
nsigned in
t)u2 == 4294967295 );
REQUIRE( (u
int32_
t)u2 == 4294967295 );
}
SECTION("Test: read04")
{
ModbusRTU::ReadInputRetMessage ret = mb->read04(slaveaddr, tREG, U2::wsize());
U2 u2(ret.data, ret.count);
REQUIRE( (u
nsigned in
t)u2 == 4294967295 );
REQUIRE( (u
int32_
t)u2 == 4294967295 );
}
}
SECTION("Test: read vtype 'U2r'")
...
...
@@ -497,13 +497,13 @@ TEST_CASE("Read(0x03,0x04): vtypes..", "[modbus][mbslave][mbread][mbtcpslave]")
{
ModbusRTU::ReadOutputRetMessage ret = mb->read03(slaveaddr, tREG, U2r::wsize());
U2r u2r(ret.data, ret.count);
REQUIRE( (u
nsigned in
t)u2r == 4294967295 );
REQUIRE( (u
int32_
t)u2r == 4294967295 );
}
SECTION("Test: read04")
{
ModbusRTU::ReadInputRetMessage ret = mb->read04(slaveaddr, tREG, U2r::wsize());
U2r u2r(ret.data, ret.count);
REQUIRE( (u
nsigned in
t)u2r == 4294967295 );
REQUIRE( (u
int32_
t)u2r == 4294967295 );
}
}
SECTION("Test: read vtype 'F2'")
...
...
@@ -561,13 +561,13 @@ TEST_CASE("Read(0x03,0x04): vtypes..", "[modbus][mbslave][mbread][mbtcpslave]")
{
ModbusRTU::ReadOutputRetMessage ret = mb->read03(slaveaddr, tREG, Byte::wsize());
Byte b(ret.data[0]);
REQUIRE( (u
nsigned shor
t)b == 200 );
REQUIRE( (u
int16_
t)b == 200 );
}
SECTION("Test: read04")
{
ModbusRTU::ReadInputRetMessage ret = mb->read04(slaveaddr, tREG, Byte::wsize());
Byte b(ret.data[0]);
REQUIRE( (u
nsigned shor
t)b == 200 );
REQUIRE( (u
int16_
t)b == 200 );
}
}
SECTION("Test: read vtype 'Byte N2'")
...
...
@@ -577,13 +577,13 @@ TEST_CASE("Read(0x03,0x04): vtypes..", "[modbus][mbslave][mbread][mbtcpslave]")
{
ModbusRTU::ReadOutputRetMessage ret = mb->read03(slaveaddr, tREG, Byte::wsize());
Byte b(ret.data[0]);
REQUIRE( (u
nsigned shor
t)b == 200 );
REQUIRE( (u
int16_
t)b == 200 );
}
SECTION("Test: read04")
{
ModbusRTU::ReadInputRetMessage ret = mb->read04(slaveaddr, tREG, Byte::wsize());
Byte b(ret.data[0]);
REQUIRE( (u
nsigned shor
t)b == 200 );
REQUIRE( (u
int16_
t)b == 200 );
}
}
#endif
...
...
@@ -616,7 +616,7 @@ static void test_write10_I2r( int val )
REQUIRE
(
ret
.
quant
==
I2r
::
wsize
()
);
REQUIRE
(
ui
->
getValue
(
2002
)
==
val
);
}
static
void
test_write10_U2
(
u
nsigned
in
t
val
)
static
void
test_write10_U2
(
u
int32_
t
val
)
{
using
namespace
VTypes
;
ModbusRTU
::
ModbusData
tREG
=
104
;
...
...
@@ -627,9 +627,9 @@ static void test_write10_U2( unsigned int val )
ModbusRTU
::
WriteOutputRetMessage
ret
=
mb
->
write10
(
msg
);
REQUIRE
(
ret
.
start
==
tREG
);
REQUIRE
(
ret
.
quant
==
U2
::
wsize
()
);
REQUIRE
(
(
u
nsigned
in
t
)
ui
->
getValue
(
2003
)
==
val
);
REQUIRE
(
(
u
int32_
t
)
ui
->
getValue
(
2003
)
==
val
);
}
static
void
test_write10_U2r
(
u
nsigned
in
t
val
)
static
void
test_write10_U2r
(
u
int32_
t
val
)
{
using
namespace
VTypes
;
ModbusRTU
::
ModbusData
tREG
=
106
;
...
...
@@ -640,7 +640,7 @@ static void test_write10_U2r( unsigned int val )
ModbusRTU
::
WriteOutputRetMessage
ret
=
mb
->
write10
(
msg
);
REQUIRE
(
ret
.
start
==
tREG
);
REQUIRE
(
ret
.
quant
==
U2r
::
wsize
()
);
REQUIRE
(
(
u
nsigned
in
t
)
ui
->
getValue
(
2004
)
==
val
);
REQUIRE
(
(
u
int32_
t
)
ui
->
getValue
(
2004
)
==
val
);
}
static
void
test_write10_F2
(
const
float
&
val
)
{
...
...
@@ -733,26 +733,26 @@ static void test_write10_F4prec( const float& val )
REQUIRE
(
fval
==
val
);
}
static
void
test_write10_byte1
(
u
nsigned
char
val
)
static
void
test_write10_byte1
(
u
int8_t
val
)
{
using
namespace
VTypes
;
ModbusRTU
::
ModbusData
tREG
=
108
;
ModbusRTU
::
WriteOutputMessage
msg
(
slaveaddr
,
tREG
);
Byte
tmp
(
val
,
0
);
msg
.
addData
(
(
u
nsigned
shor
t
)
tmp
);
msg
.
addData
(
(
u
int16_
t
)
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
(
u
nsigned
char
val
)
static
void
test_write10_byte2
(
u
int8_t
val
)
{
using
namespace
VTypes
;
ModbusRTU
::
ModbusData
tREG
=
109
;
ModbusRTU
::
WriteOutputMessage
msg
(
slaveaddr
,
tREG
);
Byte
tmp
(
0
,
val
);
msg
.
addData
(
(
u
nsigned
shor
t
)
tmp
);
msg
.
addData
(
(
u
int16_
t
)
tmp
);
ModbusRTU
::
WriteOutputRetMessage
ret
=
mb
->
write10
(
msg
);
REQUIRE
(
ret
.
start
==
tREG
);
...
...
@@ -767,27 +767,27 @@ TEST_CASE("Write(0x10): vtypes..", "[modbus][mbslave][mbtcpslave]")
SECTION
(
"Test: write vtype 'I2'"
)
{
test_write10_I2
(
numeric_limits
<
int
>::
max
());
test_write10_I2
(
numeric_limits
<
int
32_t
>::
max
());
test_write10_I2
(
0
);
test_write10_I2
(
numeric_limits
<
int
>::
min
());
test_write10_I2
(
numeric_limits
<
int
32_t
>::
min
());
}
SECTION
(
"Test: write vtype 'I2r'"
)
{
test_write10_I2r
(
numeric_limits
<
int
>::
max
());
test_write10_I2r
(
numeric_limits
<
int
32_t
>::
max
());
test_write10_I2r
(
0
);
test_write10_I2r
(
numeric_limits
<
int
>::
min
());
test_write10_I2r
(
numeric_limits
<
int
32_t
>::
min
());
}
SECTION
(
"Test: write vtype 'U2'"
)
{
test_write10_U2
(
numeric_limits
<
u
nsigned
in
t
>::
max
());
test_write10_U2
(
numeric_limits
<
u
int32_
t
>::
max
());
test_write10_U2
(
0
);
test_write10_U2
(
numeric_limits
<
u
nsigned
in
t
>::
min
());
test_write10_U2
(
numeric_limits
<
u
int32_
t
>::
min
());
}
SECTION
(
"Test: write vtype 'U2r'"
)
{
test_write10_U2r
(
numeric_limits
<
u
nsigned
in
t
>::
max
());
test_write10_U2r
(
numeric_limits
<
u
int32_
t
>::
max
());
test_write10_U2r
(
0
);
test_write10_U2r
(
numeric_limits
<
u
nsigned
in
t
>::
min
());
test_write10_U2r
(
numeric_limits
<
u
int32_
t
>::
min
());
}
SECTION
(
"Test: write vtype 'F2'"
)
{
...
...
@@ -815,19 +815,19 @@ TEST_CASE("Write(0x10): vtypes..", "[modbus][mbslave][mbtcpslave]")
}
SECTION
(
"Test: write vtype 'Byte N1'"
)
{
test_write10_byte1
(
numeric_limits
<
u
nsigned
char
>::
max
());
test_write10_byte1
(
numeric_limits
<
u
int8_t
>::
max
());
test_write10_byte1
(
0
);
test_write10_byte1
(
numeric_limits
<
u
nsigned
char
>::
min
());
test_write10_byte1
(
numeric_limits
<
char
>::
max
());
test_write10_byte1
(
numeric_limits
<
char
>::
min
());
test_write10_byte1
(
numeric_limits
<
u
int8_t
>::
min
());
test_write10_byte1
(
numeric_limits
<
int8_t
>::
max
());
test_write10_byte1
(
numeric_limits
<
int8_t
>::
min
());
}
SECTION
(
"Test: write vtype 'Byte N2'"
)
{
test_write10_byte2
(
numeric_limits
<
u
nsigned
char
>::
max
());
test_write10_byte2
(
numeric_limits
<
u
int8_t
>::
max
());
test_write10_byte2
(
0
);
test_write10_byte2
(
numeric_limits
<
u
nsigned
char
>::
min
());
test_write10_byte2
(
numeric_limits
<
char
>::
max
());
test_write10_byte2
(
numeric_limits
<
char
>::
min
());
test_write10_byte2
(
numeric_limits
<
u
int8_t
>::
min
());
test_write10_byte2
(
numeric_limits
<
int8_t
>::
max
());
test_write10_byte2
(
numeric_limits
<
int8_t
>::
min
());
}
}
...
...
@@ -1029,13 +1029,13 @@ TEST_CASE("read03(04) 10 registers", "[modbus][mbslave][mbtcpslave][readmore]")
InitTest
();
ModbusRTU
::
ModbusData
tREG
=
130
;
in
t
num
=
10
;
size_
t
num
=
10
;
SECTION
(
"Test: read03 num=10"
)
{
ModbusRTU
::
ReadOutputRetMessage
ret
=
mb
->
read03
(
slaveaddr
,
tREG
,
num
);
for
(
in
t
i
=
0
;
i
<
num
;
i
++
)
for
(
size_
t
i
=
0
;
i
<
num
;
i
++
)
{
REQUIRE
(
ret
.
data
[
i
]
==
(
i
+
1
)
);
}
...
...
@@ -1051,7 +1051,7 @@ TEST_CASE("read03(04) 10 registers", "[modbus][mbslave][mbtcpslave][readmore]")
{
ModbusRTU
::
ReadInputRetMessage
ret
=
mb
->
read04
(
slaveaddr
,
tREG
,
num
);
for
(
in
t
i
=
0
;
i
<
num
;
i
++
)
for
(
size_
t
i
=
0
;
i
<
num
;
i
++
)
{
REQUIRE
(
ret
.
data
[
i
]
==
(
i
+
1
)
);
}
...
...
@@ -1073,20 +1073,20 @@ TEST_CASE("write10: 10 registers", "[modbus][mbslave][mbtcpslave][writemore]")
uniset
::
ObjectId
id
=
2036
;
int
offset
=
2
;
ModbusRTU
::
ModbusData
tREG
=
150
-
offset
;
// реальные регистры начинаются с 150
in
t
num
=
10
;
size_
t
num
=
10
;
ModbusRTU
::
WriteOutputMessage
msg
(
slaveaddr
,
tREG
);
for
(
in
t
i
=
1
;
i
<=
num
;
i
++
)
for
(
size_
t
i
=
1
;
i
<=
num
;
i
++
)
msg
.
addData
(
i
);
ModbusRTU
::
WriteOutputRetMessage
ret
=
mb
->
write10
(
msg
);
REQUIRE
(
ret
.
start
==
tREG
);
REQUIRE
(
ret
.
quant
==
num
);
for
(
in
t
i
=
0
;
i
<
num
;
i
++
)
for
(
size_
t
i
=
0
;
i
<
num
;
i
++
)
{
REQUIRE
(
(
signed
shor
t
)
ui
->
getValue
(
id
+
i
)
==
(
i
+
1
)
);
REQUIRE
(
(
int16_
t
)
ui
->
getValue
(
id
+
i
)
==
(
i
+
1
)
);
}
}
// -------------------------------------------------------------
...
...
@@ -1105,8 +1105,8 @@ TEST_CASE("write10: more..", "[modbus][mbslave][mbtcpslave][write10]")
REQUIRE
(
ret
.
start
==
tREG
);
REQUIRE
(
ret
.
quant
==
2
);
REQUIRE
(
(
signed
shor
t
)
ui
->
getValue
(
2048
)
==
11
);
REQUIRE
(
(
signed
shor
t
)
ui
->
getValue
(
2049
)
==
10
);
REQUIRE
(
(
int16_
t
)
ui
->
getValue
(
2048
)
==
11
);
REQUIRE
(
(
int16_
t
)
ui
->
getValue
(
2049
)
==
10
);
}
// -------------------------------------------------------------
TEST_CASE
(
"(0x10): write register outputs or memories [F2]"
,
"[modbus][mbslave][F2][mbtcpslave]"
)
...
...
extensions/include/MTR.h
View file @
dd9fe9fb
...
...
@@ -19,6 +19,7 @@
// -----------------------------------------------------------------------------
#include <string>
#include <map>
#include <cstdint>
#include <unordered_map>
#include <list>
#include <ostream>
...
...
@@ -57,7 +58,7 @@ namespace uniset
// -------------------------------------------------------------------------
std
::
string
type2str
(
MTRType
t
);
/*!< преоразование строки в тип */
MTRType
str2type
(
const
std
::
string
&
s
);
/*!< преобразование названия в строку */
size_t
wsize
(
MTRType
t
);
/*!< длина данных в словах */
size_t
wsize
(
MTRType
t
);
/*!< длина данных в словах */
// -------------------------------------------------------------------------
// Информация
const
ModbusRTU
::
ModbusData
regModelNumber
=
0x01
;
...
...
@@ -138,7 +139,7 @@ namespace uniset
{
public
:
T1
()
:
val
(
0
)
{}
T1
(
u
nsigned
shor
t
v
)
:
val
(
v
)
{}
T1
(
u
int16_
t
v
)
:
val
(
v
)
{}
T1
(
const
ModbusRTU
::
ModbusData
*
data
)
:
val
(
data
[
0
])
{}
~
T1
()
{}
// ------------------------------------------
...
...
@@ -153,7 +154,7 @@ namespace uniset
return
mtT1
;
}
// ------------------------------------------
u
nsigned
shor
t
val
;
u
int16_
t
val
;
};
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
T1
&
t
);
// -------------------------------------------------------------------------
...
...
@@ -161,7 +162,7 @@ namespace uniset
{
public
:
T2
()
:
val
(
0
)
{}
T2
(
signed
shor
t
v
)
:
val
(
v
)
{}
T2
(
int16_
t
v
)
:
val
(
v
)
{}
T2
(
const
ModbusRTU
::
ModbusData
*
data
)
:
val
(
data
[
0
])
{}
~
T2
()
{}
// ------------------------------------------
...
...
@@ -176,7 +177,7 @@ namespace uniset
return
mtT2
;
}
// ------------------------------------------
signed
shor
t
val
;
int16_
t
val
;
};
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
T2
&
t
);
// -------------------------------------------------------------------------
...
...
@@ -187,8 +188,8 @@ namespace uniset
/*! тип хранения в памяти */
typedef
union
{
u
nsigned
shor
t
v
[
u2size
];
signed
in
t
val
;
// :32
u
int16_
t
v
[
u2size
];
int32_
t
val
;
// :32
}
T3mem
;
// ------------------------------------------
// конструкторы на разные случаи...
...
...
@@ -197,12 +198,12 @@ namespace uniset
memset
(
raw
.
v
,
0
,
sizeof
(
raw
.
v
));
}
T3
(
signed
in
t
i
)
T3
(
int32_
t
i
)
{
raw
.
val
=
i
;
}
T3
(
u
nsigned
short
v1
,
unsigned
shor
t
v2
)
T3
(
u
int16_t
v1
,
uint16_
t
v2
)
{
raw
.
v
[
0
]
=
v1
;
raw
.
v
[
1
]
=
v2
;
...
...
@@ -278,7 +279,7 @@ namespace uniset
}
// ------------------------------------------
std
::
string
sval
;
u
nsigned
shor
t
raw
;
u
int16_
t
raw
;
};
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
T4
&
t
);
// --------------------------------------------------------------------------
...
...
@@ -289,11 +290,11 @@ namespace uniset
/*! тип хранения в памяти */
typedef
union
{
u
nsigned
shor
t
v
[
u2size
];
u
int16_
t
v
[
u2size
];
struct
u_T5
{
u
nsigned
in
t
val
:
24
;
signed
char
exp
;
// :8
u
int32_
t
val
:
24
;
int8_t
exp
;
// :8
}
__attribute__
(
(
packed
)
)
u2
;
long
lval
;
}
T5mem
;
...
...
@@ -303,7 +304,7 @@ namespace uniset
{
memset
(
raw
.
v
,
0
,
sizeof
(
raw
.
v
));
}
T5
(
u
nsigned
short
v1
,
unsigned
shor
t
v2
)
T5
(
u
int16_t
v1
,
uint16_
t
v2
)
{
raw
.
v
[
0
]
=
v1
;
raw
.
v
[
1
]
=
v2
;
...
...
@@ -352,11 +353,11 @@ namespace uniset
/*! тип хранения в памяти */
typedef
union
{
u
nsigned
shor
t
v
[
u2size
];
u
int16_
t
v
[
u2size
];
struct
u_T6
{
signed
in
t
val
:
24
;
signed
char
exp
;
// :8
int32_
t
val
:
24
;
int8_t
exp
;
// :8
}
u2
;
long
lval
;
}
T6mem
;
...
...
@@ -366,7 +367,7 @@ namespace uniset
{
memset
(
raw
.
v
,
0
,
sizeof
(
raw
.
v
));
}
T6
(
u
nsigned
short
v1
,
unsigned
shor
t
v2
)
T6
(
u
int16_t
v1
,
uint16_
t
v2
)
{
raw
.
v
[
0
]
=
v1
;
raw
.
v
[
1
]
=
v2
;
...
...
@@ -415,12 +416,12 @@ namespace uniset
/*! тип хранения в памяти */
typedef
union
{
u
nsigned
shor
t
v
[
u2size
];
u
int16_
t
v
[
u2size
];
struct
u_T7
{
u
nsigned
in
t
val
:
16
;
u
nsigned
char
ic
;
// :8 - Inductive/capacitive
u
nsigned
char
ie
;
// :8 - Import/export
u
int32_
t
val
:
16
;
u
int8_t
ic
;
// :8 - Inductive/capacitive
u
int8_t
ie
;
// :8 - Import/export
}
__attribute__
(
(
packed
)
)
u2
;
long
lval
;
}
T7mem
;
...
...
@@ -430,7 +431,7 @@ namespace uniset
{
memset
(
raw
.
v
,
0
,
sizeof
(
raw
.
v
));
}
T7
(
u
nsigned
short
v1
,
unsigned
shor
t
v2
)
T7
(
u
int16_t
v1
,
uint16_
t
v2
)
{
raw
.
v
[
0
]
=
v1
;
raw
.
v
[
1
]
=
v2
;
...
...
@@ -478,13 +479,13 @@ namespace uniset
/*! тип хранения в памяти */
typedef
union
{
u
nsigned
shor
t
v
[
u2size
];
u
int16_
t
v
[
u2size
];
struct
u_T8
{
u
nsigned
shor
t
mon
:
8
;
u
nsigned
shor
t
day
:
8
;
u
nsigned
shor
t
hour
:
8
;
u
nsigned
shor
t
min
:
8
;
u
int16_
t
mon
:
8
;
u
int16_
t
day
:
8
;
u
int16_
t
hour
:
8
;
u
int16_
t
min
:
8
;
}
__attribute__
(
(
packed
)
)
u2
;
}
T8mem
;
// ------------------------------------------
...
...
@@ -493,7 +494,7 @@ namespace uniset
{
memset
(
raw
.
v
,
0
,
sizeof
(
raw
.
v
));
}
T8
(
u
nsigned
short
v1
,
unsigned
shor
t
v2
)
T8
(
u
int16_t
v1
,
uint16_
t
v2
)
{
raw
.
v
[
0
]
=
v1
;
raw
.
v
[
1
]
=
v2
;
...
...
@@ -509,19 +510,19 @@ namespace uniset
}
}
inline
u
nsigned
shor
t
day
()
inline
u
int16_
t
day
()
{
return
raw
.
u2
.
day
;
}
inline
u
nsigned
shor
t
mon
()
inline
u
int16_
t
mon
()
{
return
raw
.
u2
.
mon
;
}
inline
u
nsigned
shor
t
hour
()
inline
u
int16_
t
hour
()
{
return
raw
.
u2
.
hour
;
}
inline
u
nsigned
shor
t
min
()
inline
u
int16_
t
min
()
{
return
raw
.
u2
.
min
;
}
...
...
@@ -550,13 +551,13 @@ namespace uniset
/*! тип хранения в памяти */
typedef
union
{
u
nsigned
shor
t
v
[
u2size
];
u
int16_
t
v
[
u2size
];
struct
u_T9
{
u
nsigned
shor
t
hour
:
8
;
u
nsigned
shor
t
min
:
8
;
u
nsigned
shor
t
sec
:
8
;
u
nsigned
shor
t
ssec
:
8
;
u
int16_
t
hour
:
8
;
u
int16_
t
min
:
8
;
u
int16_
t
sec
:
8
;
u
int16_
t
ssec
:
8
;
}
__attribute__
(
(
packed
)
)
u2
;
}
T9mem
;
// ------------------------------------------
...
...
@@ -565,7 +566,7 @@ namespace uniset
{
memset
(
raw
.
v
,
0
,
sizeof
(
raw
.
v
));
}
T9
(
u
nsigned
short
v1
,
unsigned
shor
t
v2
)
T9
(
u
int16_t
v1
,
uint16_
t
v2
)
{
raw
.
v
[
0
]
=
v1
;
raw
.
v
[
1
]
=
v2
;
...
...
@@ -581,19 +582,19 @@ namespace uniset
}
}
inline
u
nsigned
shor
t
hour
()
inline
u
int16_
t
hour
()
{
return
raw
.
u2
.
hour
;
}
inline
u
nsigned
shor
t
min
()
inline
u
int16_
t
min
()
{
return
raw
.
u2
.
min
;
}
inline
u
nsigned
shor
t
sec
()
inline
u
int16_
t
sec
()
{
return
raw
.
u2
.
sec
;
}
inline
u
nsigned
shor
t
ssec
()
inline
u
int16_
t
ssec
()
{
return
raw
.
u2
.
ssec
;
}
...
...
@@ -622,12 +623,12 @@ namespace uniset
/*! тип хранения в памяти */
typedef
union
{
u
nsigned
shor
t
v
[
u2size
];
u
int16_
t
v
[
u2size
];
struct
u_T10
{
u
nsigned
shor
t
year
:
16
;
u
nsigned
shor
t
mon
:
8
;
u
nsigned
shor
t
day
:
8
;
u
int16_
t
year
:
16
;
u
int16_
t
mon
:
8
;
u
int16_
t
day
:
8
;
}
__attribute__
(
(
packed
)
)
u2
;
}
T10mem
;
// ------------------------------------------
...
...
@@ -636,7 +637,7 @@ namespace uniset
{
memset
(
raw
.
v
,
0
,
sizeof
(
raw
.
v
));
}
T10
(
u
nsigned
short
v1
,
unsigned
shor
t
v2
)
T10
(
u
int16_t
v1
,
uint16_
t
v2
)
{
raw
.
v
[
0
]
=
v1
;
raw
.
v
[
1
]
=
v2
;
...
...
@@ -652,15 +653,15 @@ namespace uniset
}
}
inline
u
nsigned
shor
t
year
()
inline
u
int16_
t
year
()
{
return
raw
.
u2
.
year
;
}
inline
u
nsigned
shor
t
mon
()
inline
u
int16_
t
mon
()
{
return
raw
.
u2
.
mon
;
}
inline
u
nsigned
shor
t
day
()
inline
u
int16_
t
day
()
{
return
raw
.
u2
.
day
;
}
...
...
@@ -687,7 +688,7 @@ namespace uniset
{
public
:
T16
()
:
val
(
0
)
{}
T16
(
u
nsigned
shor
t
v
)
:
val
(
v
)
T16
(
u
int16_
t
v
)
:
val
(
v
)
{
fval
=
(
float
)(
val
)
/
100
.
0
;
}
...
...
@@ -717,12 +718,12 @@ namespace uniset
{
return
fval
;
}
operator
u
nsigned
shor
t
()
operator
u
int16_
t
()
{
return
val
;
}
u
nsigned
shor
t
val
=
{
0
};
u
int16_
t
val
=
{
0
};
float
fval
=
{
0
.
0
};
};
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
T16
&
t
);
...
...
@@ -731,13 +732,13 @@ namespace uniset
{
public
:
T17
()
:
val
(
0
)
{}
T17
(
signed
shor
t
v
)
:
val
(
v
)
T17
(
int16_
t
v
)
:
val
(
v
)
{
fval
=
(
float
)(
v
)
/
100
.
0
;
}
T17
(
u
nsigned
shor
t
v
)
:
val
(
v
)
T17
(
u
int16_
t
v
)
:
val
(
v
)
{
fval
=
(
float
)(
(
signed
shor
t
)(
v
)
)
/
100
.
0
;
fval
=
(
float
)(
(
int16_
t
)(
v
)
)
/
100
.
0
;
}
T17
(
const
ModbusRTU
::
ModbusData
*
data
)
:
val
(
data
[
0
])
...
...
@@ -765,12 +766,12 @@ namespace uniset
{
return
fval
;
}
operator
signed
shor
t
()
operator
int16_
t
()
{
return
val
;
}
signed
shor
t
val
=
{
0
};
int16_
t
val
=
{
0
};
float
fval
=
{
0
};
};
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
T17
&
t
);
...
...
@@ -782,7 +783,7 @@ namespace uniset
/*! тип хранения в памяти */
typedef
union
{
u
nsigned
shor
t
v
[
2
];
u
int16_
t
v
[
2
];
float
val
;
//
}
F1mem
;
// ------------------------------------------
...
...
@@ -791,7 +792,7 @@ namespace uniset
{
memset
(
raw
.
v
,
0
,
sizeof
(
raw
.
v
));
}
F1
(
u
nsigned
short
v1
,
unsigned
shor
t
v2
)
F1
(
u
int16_t
v1
,
uint16_
t
v2
)
{
raw
.
v
[
0
]
=
v1
;
raw
.
v
[
1
]
=
v2
;
...
...
extensions/tests/test_vtypes.cc
View file @
dd9fe9fb
...
...
@@ -38,25 +38,25 @@ TEST_CASE("VTypes: I2", "[vtypes][I2]")
SECTION
(
"Default constructor"
)
{
I2
v
;
REQUIRE
(
(
int
)
v
==
0
);
REQUIRE
(
(
int
32_t
)
v
==
0
);
}
SECTION
(
"'int' constructor"
)
{
I2
v
(
100
);
REQUIRE
(
(
int
)
v
==
100
);
REQUIRE
(
(
int
32_t
)
v
==
100
);
I2
v2
(
-
1000000
);
REQUIRE
(
(
int
)
v2
==
-
1000000
);
REQUIRE
(
(
int
32_t
)
v2
==
-
1000000
);
}
SECTION
(
"Modbus constructor"
)
{
ModbusRTU
::
ModbusData
data
[
2
]
=
{
0
,
0xFFFF
};
I2
v1
(
data
,
2
);
REQUIRE
(
(
int
)
v1
==
-
65536
);
REQUIRE
(
(
int
32_t
)
v1
==
-
65536
);
ModbusRTU
::
ModbusData
data3
[
3
]
=
{
0
,
0xFFFF
,
0xFFFF
};
I2
v2
(
data3
,
3
);
REQUIRE
(
(
int
)
v2
==
-
65536
);
REQUIRE
(
(
int
32_t
)
v2
==
-
65536
);
}
}
// -----------------------------------------------------------------------------
...
...
@@ -65,32 +65,32 @@ TEST_CASE("VTypes: I2r", "[vtypes][I2r]")
SECTION
(
"Default constructor"
)
{
I2r
v
;
REQUIRE
(
(
int
)
v
==
0
);
REQUIRE
(
(
int
32_t
)
v
==
0
);
}
SECTION
(
"'int' constructor"
)
{
I2r
v
(
100
);
REQUIRE
(
(
int
)
v
==
100
);
REQUIRE
(
(
int
32_t
)
v
==
100
);
I2r
v1
(
-
1000000
);
REQUIRE
(
(
int
)
v1
==
-
1000000
);
REQUIRE
(
(
int
32_t
)
v1
==
-
1000000
);
}
SECTION
(
"Modbus constructor"
)
{
ModbusRTU
::
ModbusData
data
[
2
]
=
{
0
,
0xFFFF
};
I2r
v1
(
data
,
2
);
REQUIRE
(
(
int
)
v1
==
65535
);
REQUIRE
(
(
int
32_t
)
v1
==
65535
);
ModbusRTU
::
ModbusData
data3
[
3
]
=
{
0
,
0xFFFF
,
0xFFFF
};
I2r
v2
(
data3
,
3
);
REQUIRE
(
(
int
)
v2
==
65535
);
REQUIRE
(
(
int
32_t
)
v2
==
65535
);
I2r
tmp
(
-
100000
);
ModbusRTU
::
ModbusData
d2
[
2
];
d2
[
0
]
=
tmp
.
raw
.
v
[
1
];
d2
[
1
]
=
tmp
.
raw
.
v
[
0
];
I2r
v3
(
d2
,
2
);
REQUIRE
(
(
int
)
v3
==
-
100000
);
REQUIRE
(
(
int
32_t
)
v3
==
-
100000
);
}
}
...
...
@@ -100,31 +100,31 @@ TEST_CASE("VTypes: U2", "[vtypes][U2]")
SECTION
(
"Default constructor"
)
{
U2
v
;
REQUIRE
(
(
u
nsigned
in
t
)
v
==
0
);
REQUIRE
(
(
u
int32_
t
)
v
==
0
);
}
SECTION
(
"'unsigned int' constructor"
)
{
{
U2
v
(
numeric_limits
<
u
nsigned
in
t
>::
max
()
);
REQUIRE
(
(
u
nsigned
int
)
v
==
numeric_limits
<
unsigned
in
t
>::
max
()
);
U2
v
(
numeric_limits
<
u
int32_
t
>::
max
()
);
REQUIRE
(
(
u
int32_t
)
v
==
numeric_limits
<
uint32_
t
>::
max
()
);
REQUIRE
(
v
.
raw
.
v
[
0
]
==
0xffff
);
REQUIRE
(
v
.
raw
.
v
[
1
]
==
0xffff
);
}
{
U2
v
(
-
1
);
REQUIRE
(
(
u
nsigned
int
)
v
==
4294967295
);
REQUIRE
(
(
u
int32_t
)
v
==
numeric_limits
<
uint32_t
>::
max
()
);
}
}
SECTION
(
"Modbus constructor"
)
{
ModbusRTU
::
ModbusData
data
[
2
]
=
{
0
,
0xFFFF
};
U2
v1
(
data
,
2
);
REQUIRE
(
(
u
nsigned
in
t
)
v1
==
0xffff0000
);
ModbusRTU
::
ModbusData
data
2
[
]
=
{
0
,
0xFFFF
};
U2
v1
(
data
2
,
2
);
REQUIRE
(
(
u
int32_
t
)
v1
==
0xffff0000
);
ModbusRTU
::
ModbusData
data3
[
3
]
=
{
0
,
0xFFFF
,
0xFFFF
};
ModbusRTU
::
ModbusData
data3
[]
=
{
0
,
0xFFFF
,
0xFFFF
};
U2
v2
(
data3
,
3
);
REQUIRE
(
(
u
nsigned
in
t
)
v2
==
0xffff0000
);
REQUIRE
(
(
u
int32_
t
)
v2
==
0xffff0000
);
}
}
// -----------------------------------------------------------------------------
...
...
@@ -133,22 +133,22 @@ TEST_CASE("VTypes: U2r", "[vtypes][U2r]")
SECTION
(
"Default constructor"
)
{
U2r
v
;
REQUIRE
(
(
u
nsigned
in
t
)
v
==
0
);
REQUIRE
(
(
u
int32_
t
)
v
==
0
);
}
SECTION
(
"'unsigned int' constructor"
)
{
U2r
v
(
numeric_limits
<
u
nsigned
in
t
>::
max
()
);
REQUIRE
(
(
u
nsigned
int
)
v
==
numeric_limits
<
unsigned
in
t
>::
max
()
);
U2r
v
(
numeric_limits
<
u
int32_
t
>::
max
()
);
REQUIRE
(
(
u
int32_t
)
v
==
numeric_limits
<
uint32_
t
>::
max
()
);
}
SECTION
(
"Modbus constructor"
)
{
ModbusRTU
::
ModbusData
data
[
2
]
=
{
0
,
0xFFFF
};
U2r
v1
(
data
,
2
);
REQUIRE
(
(
u
nsigned
in
t
)
v1
==
0x0000ffff
);
REQUIRE
(
(
u
int32_
t
)
v1
==
0x0000ffff
);
ModbusRTU
::
ModbusData
data3
[
3
]
=
{
0
,
0xFFFF
,
0xFFFF
};
U2r
v2
(
data3
,
3
);
REQUIRE
(
(
u
nsigned
in
t
)
v2
==
0x0000ffff
);
REQUIRE
(
(
u
int32_
t
)
v2
==
0x0000ffff
);
}
}
...
...
@@ -298,13 +298,13 @@ TEST_CASE("VTypes: Unsigned", "[vtypes][unsigned]")
{
long
l
=
0xffff
;
Unsigned
v
(
l
);
REQUIRE
(
(
u
nsigned
shor
t
)
v
==
0xffff
);
REQUIRE
(
(
u
int16_
t
)
v
==
0xffff
);
}
SECTION
(
"Modbus constructor"
)
{
ModbusRTU
::
ModbusData
d
=
65535
;
Unsigned
v
(
d
);
REQUIRE
(
(
u
nsigned
shor
t
)
v
==
65535
);
REQUIRE
(
(
u
int16_
t
)
v
==
65535
);
}
}
// -----------------------------------------------------------------------------
...
...
@@ -319,13 +319,13 @@ TEST_CASE("VTypes: Signed", "[vtypes][signed]")
{
long
l
=
-
32766
;
Signed
v
(
l
);
REQUIRE
(
(
signed
shor
t
)
v
==
l
);
REQUIRE
(
(
int16_
t
)
v
==
l
);
}
SECTION
(
"Modbus constructor"
)
{
ModbusRTU
::
ModbusData
d
=
65535
;
Signed
v
(
d
);
REQUIRE
(
(
signed
short
)
v
==
(
signed
shor
t
)
d
);
REQUIRE
(
(
int16_t
)
v
==
(
int16_
t
)
d
);
}
}
// -----------------------------------------------------------------------------
include/ComPort.h
View file @
dd9fe9fb
...
...
@@ -14,8 +14,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// --------------------------------------------------------------------------
#ifndef
_
COMPORT_H_
#define
_
COMPORT_H_
#ifndef COMPORT_H_
#define COMPORT_H_
// --------------------------------------------------------------------------
#include <termios.h>
#include <fcntl.h>
...
...
@@ -112,8 +112,8 @@ namespace uniset
virtual
unsigned
char
receiveByte
();
virtual
void
sendByte
(
unsigned
char
x
);
virtual
size_t
receiveBlock
(
unsigned
char
*
msg
,
size_t
len
);
virtual
s
ize_t
sendBlock
(
unsigned
char
*
msg
,
size_t
len
);
virtual
size_t
receiveBlock
(
unsigned
char
*
msg
,
size_t
len
);
virtual
s
size_t
sendBlock
(
unsigned
char
*
msg
,
size_t
len
);
void
setBlocking
(
bool
blocking
);
...
...
@@ -125,8 +125,8 @@ namespace uniset
static
const
size_t
BufSize
=
8192
;
unsigned
char
buf
[
BufSize
];
size_t
curSym
=
{
0
};
size_t
bufLength
=
{
0
};
s
s
ize_t
curSym
=
{
0
};
s
s
ize_t
bufLength
=
{
0
};
int
fd
=
{
-
1
};
timeout_t
uTimeout
=
{
0
};
bool
waiting
=
{
false
};
...
...
@@ -136,10 +136,10 @@ namespace uniset
virtual
unsigned
char
m_receiveByte
(
bool
wait
);
private
:
struct
termios
oldTermios
=
{
0
}
;
struct
termios
oldTermios
;
};
// -------------------------------------------------------------------------
}
// end of uniset namespace
// --------------------------------------------------------------------------
#endif //
_
COMPORT_H_
#endif // COMPORT_H_
// --------------------------------------------------------------------------
include/ComPort485F.h
View file @
dd9fe9fb
...
...
@@ -39,11 +39,11 @@ namespace uniset
{
public
:
ComPort485F
(
const
std
::
string
&
comDevice
,
int
gpio_num
,
bool
tmit_ctrl
=
false
);
ComPort485F
(
const
std
::
string
&
comDevice
,
char
gpio_num
,
bool
tmit_ctrl
=
false
);
virtual
void
sendByte
(
unsigned
char
x
)
override
;
virtual
void
setTimeout
(
timeout_t
timeout
)
override
;
virtual
size_t
sendBlock
(
unsigned
char
*
msg
,
size_t
len
)
override
;
virtual
s
s
ize_t
sendBlock
(
unsigned
char
*
msg
,
size_t
len
)
override
;
virtual
void
cleanupChannel
()
override
;
virtual
void
reopen
()
override
;
...
...
@@ -51,8 +51,8 @@ namespace uniset
protected
:
virtual
unsigned
char
m_receiveByte
(
bool
wait
)
override
;
void
save2queue
(
unsigned
char
*
msg
,
size_t
len
,
size_t
bnum
);
bool
remove_echo
(
unsigned
char
tb
[],
size_t
len
);
void
save2queue
(
unsigned
char
*
msg
,
size_t
len
,
size_t
bnum
);
bool
remove_echo
(
unsigned
char
tb
[],
s
s
ize_t
len
);
void
m_read
(
timeout_t
tmsec
);
/*! просто временный буфер для считывания данных */
...
...
@@ -61,7 +61,7 @@ namespace uniset
std
::
queue
<
unsigned
char
>
wq
;
/*!< хранилище байтов записанных в канал */
std
::
queue
<
unsigned
char
>
rq
;
/*!< очередь для чтения */
int
gpio_num
;
char
gpio_num
;
bool
tmit_ctrl_on
;
PassiveTimer
ptRecv
;
timeout_t
tout_msec
=
{
2000
};
...
...
include/modbus/ModbusTypes.h
View file @
dd9fe9fb
...
...
@@ -3,6 +3,7 @@
#define ModbusTypes_H_
// -------------------------------------------------------------------------
#include <ostream>
#include <cstdint>
#include <bitset>
#include <string>
#include <list>
...
...
@@ -218,7 +219,7 @@ namespace uniset
return
mbaphead
.
len
;
}
u
nsigned
char
*
buf
();
u
_int8_t
*
buf
();
ModbusRTU
::
ModbusData
len
()
const
;
void
swapHead
();
void
makeMBAPHeader
(
ModbusRTU
::
ModbusData
tID
,
bool
noCRC
=
true
,
ModbusRTU
::
ModbusData
pID
=
0
);
...
...
src/Communications/ComPort.cc
View file @
dd9fe9fb
...
...
@@ -220,7 +220,7 @@ void ComPort::setWaiting(bool waiting)
// Lav: сделать корректное определение таймаута
unsigned
char
ComPort
::
m_receiveByte
(
bool
wait
)
{
if
(
curSym
>=
bufLength
)
if
(
curSym
>=
bufLength
)
{
curSym
=
0
;
...
...
@@ -246,7 +246,7 @@ unsigned char ComPort::m_receiveByte( bool wait )
else
bufLength
=
::
read
(
fd
,
buf
,
BufSize
);
if
(
bufLength
<=
0
)
if
(
bufLength
<=
0
)
{
throw
uniset
::
TimeOut
();
}
...
...
@@ -305,7 +305,7 @@ timeout_t ComPort::getTimeout() const
// --------------------------------------------------------------------------------
// Lav: ситуация, когда отправлено меньше запрошенного, не типична и должна
// генерировать исключение
s
ize_t
ComPort
::
sendBlock
(
unsigned
char
*
msg
,
size_t
len
)
s
size_t
ComPort
::
sendBlock
(
unsigned
char
*
msg
,
size_t
len
)
{
// fcntl(fd,F_SETFL,0);
...
...
@@ -368,7 +368,7 @@ void ComPort::cleanupChannel()
while( k>0 );
*/
unsigned
char
tmpbuf
[
100
];
in
t
k
=
0
;
ssize_
t
k
=
0
;
bool
old_waiting
=
waiting
;
waiting
=
false
;
int
mask
=
fcntl
(
fd
,
F_GETFL
);
...
...
src/Communications/ComPort485F.cc
View file @
dd9fe9fb
...
...
@@ -44,19 +44,19 @@ static void gpio_low_out_en( char gpio_num )
// --------------------------------------------------------------------------------
static
void
gpio_low_set_value
(
char
gpio_num
,
char
value
)
{
unsigned
long
val
;
unsigned
int
val
;
val
=
inl
(
GPIO_BA
);
if
(
value
)
{
val
|=
(((
unsigned
long
)
1
)
<<
gpio_num
);
val
&=
~
(((
unsigned
long
)
1
)
<<
(
gpio_num
+
16
));
val
|=
(((
unsigned
int
)
1
)
<<
gpio_num
);
val
&=
~
(((
unsigned
int
)
1
)
<<
(
gpio_num
+
16
));
}
else
{
val
&=
~
(((
unsigned
long
)
1
)
<<
gpio_num
);
val
|=
(((
unsigned
long
)
1
)
<<
(
gpio_num
+
16
));
val
&=
~
(((
unsigned
int
)
1
)
<<
gpio_num
);
val
|=
(((
unsigned
int
)
1
)
<<
(
gpio_num
+
16
));
}
outl
(
val
,
GPIO_BA
);
...
...
@@ -77,7 +77,7 @@ static void setRTS(int fd, int state)
ioctl
(
fd
,
TIOCMSET
,
&
status
);
}
// --------------------------------------------------------------------------------
ComPort485F
::
ComPort485F
(
const
string
&
dev
,
int
gpio_num
,
bool
tmit_ctrl
)
:
ComPort485F
::
ComPort485F
(
const
string
&
dev
,
char
gpio_num
,
bool
tmit_ctrl
)
:
ComPort
(
dev
,
false
),
gpio_num
(
gpio_num
),
tmit_ctrl_on
(
tmit_ctrl
)
...
...
@@ -107,7 +107,7 @@ unsigned char ComPort485F::m_receiveByte( bool wait )
if
(
rq
.
empty
()
)
{
in
t
rc
=
0
;
ssize_
t
rc
=
0
;
if
(
wait
)
{
...
...
@@ -163,7 +163,7 @@ unsigned char ComPort485F::m_receiveByte( bool wait )
return
x
;
}
// --------------------------------------------------------------------------------
size_t
ComPort485F
::
sendBlock
(
unsigned
char
*
msg
,
size_t
len
)
s
s
ize_t
ComPort485F
::
sendBlock
(
unsigned
char
*
msg
,
size_t
len
)
{
if
(
tmit_ctrl_on
)
{
...
...
@@ -171,7 +171,7 @@ size_t ComPort485F::sendBlock(unsigned char* msg, size_t len )
gpio_low_set_value
(
gpio_num
,
1
);
}
size_t
r
=
0
;
s
s
ize_t
r
=
0
;
try
{
...
...
@@ -191,7 +191,7 @@ size_t ComPort485F::sendBlock(unsigned char* msg, size_t len )
m_read
(
2000
);
}
}
catch
(
const
uniset
::
Exception
&
ex
)
catch
(
const
uniset
::
Exception
&
)
{
if
(
tmit_ctrl_on
)
{
...
...
@@ -234,7 +234,7 @@ void ComPort485F::sendByte( unsigned char x )
wq
.
push
(
x
);
m_read
(
2000
);
}
catch
(
const
uniset
::
Exception
&
ex
)
catch
(
const
uniset
::
Exception
&
)
{
if
(
tmit_ctrl_on
)
{
...
...
@@ -259,9 +259,9 @@ void ComPort485F::save2queue( unsigned char* msg, size_t len, size_t bnum )
wq
.
push
(
msg
[
i
]);
}
// --------------------------------------------------------------------------------
bool
ComPort485F
::
remove_echo
(
unsigned
char
tb
[],
size_t
len
)
bool
ComPort485F
::
remove_echo
(
unsigned
char
tb
[],
s
s
ize_t
len
)
{
size_t
i
=
0
;
s
s
ize_t
i
=
0
;
while
(
!
wq
.
empty
()
)
{
...
...
src/Communications/Modbus/ModbusTypes.cc
View file @
dd9fe9fb
...
...
@@ -119,7 +119,7 @@ namespace uniset
// Lav: отключил, раз не используем
#if 0
// -------------------------------------------------------------------------
static int get_crc_ccitt( uint16_t crc, uint8_t* buf, size_t size )
static int
32_t
get_crc_ccitt( uint16_t crc, uint8_t* buf, size_t size )
{
while( size-- )
{
...
...
@@ -127,7 +127,7 @@ namespace uniset
crc = (crc << 8) ^ crc_ccitt_tab[ (crc >> 8) ^ * (buf++) ];
#else
register int i;
crc ^= (u
nsigned shor
t)(*(buf++)) << 8;
crc ^= (u
int16_
t)(*(buf++)) << 8;
for (i = 0; i < 8; i++)
{
...
...
@@ -146,7 +146,7 @@ namespace uniset
// -------------------------------------------------------------------------
/* CRC-16 is based on the polynomial x^16 + x^15 + x^2 + 1. Bits are */
/* sent LSB to MSB. */
static
int
get_crc_16
(
uint16_t
crc
,
uint8_t
*
buf
,
size_t
size
)
static
int
32_t
get_crc_16
(
uint16_t
crc
,
uint8_t
*
buf
,
size_t
size
)
{
while
(
size
--
)
...
...
@@ -180,7 +180,7 @@ namespace uniset
*/
ModbusCRC
ModbusRTU
::
checkCRC
(
ModbusByte
*
buf
,
size_t
len
)
{
u
nsigned
shor
t
crc
=
0xffff
;
u
int16_
t
crc
=
0xffff
;
crc
=
get_crc_16
(
crc
,
(
uint8_t
*
)(
buf
),
len
);
// crc = SWAPSHORT(crc);
...
...
@@ -219,7 +219,7 @@ namespace uniset
s
<<
hex
<<
showbase
<<
setfill
(
'0'
);
// << showbase;
for
(
size_t
i
=
0
;
i
<
len
;
i
++
)
s
<<
setw
(
2
)
<<
(
shor
t
)(
m
[
i
])
<<
" "
;
s
<<
setw
(
2
)
<<
(
int16_
t
)(
m
[
i
])
<<
" "
;
return
os
<<
s
.
str
();
}
...
...
@@ -243,12 +243,12 @@ namespace uniset
memset
(
data
,
0
,
sizeof
(
data
));
}
// -------------------------------------------------------------------------
u
nsigned
char
*
ModbusMessage
::
buf
()
u
_int8_t
*
ModbusMessage
::
buf
()
{
if
(
mbaphead
.
len
==
0
)
return
(
u
nsigned
char
*
)
&
pduhead
;
return
(
u
int8_t
*
)
&
pduhead
;
return
(
u
nsigned
char
*
)
&
mbaphead
;
return
(
u
int8_t
*
)
&
mbaphead
;
}
// -------------------------------------------------------------------------
ModbusData
ModbusMessage
::
len
()
const
...
...
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