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
e94544b9
Commit
e94544b9
authored
May 20, 2015
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ModbusSlave: fixed bug,
DelayTimer: add tests, make style
parent
4881c356
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
71 additions
and
27 deletions
+71
-27
mbtcptester.cc
Utilities/MBTester/mbtcptester.cc
+11
-8
MBExchange.cc
extensions/ModbusMaster/MBExchange.cc
+1
-1
test_mbtcpmaster.cc
extensions/ModbusMaster/tests/test_mbtcpmaster.cc
+2
-2
MBSlave.cc
extensions/ModbusSlave/MBSlave.cc
+11
-4
test_mbslave.cc
extensions/ModbusSlave/tests/test_mbslave.cc
+10
-7
IOBase.cc
extensions/lib/IOBase.cc
+2
-5
test_delaytimer.cc
tests/test_delaytimer.cc
+34
-0
No files found.
Utilities/MBTester/mbtcptester.cc
View file @
e94544b9
...
@@ -103,8 +103,8 @@ int main( int argc, char** argv )
...
@@ -103,8 +103,8 @@ int main( int argc, char** argv )
struct
DataInfo
struct
DataInfo
{
{
DValue
d
=
{
0
};
DValue
d
=
{
0
};
char
type
=
{
'i'
};
// i - integer, f - float, r - revert float
char
type
=
{
'i'
};
// i - integer, f - float, r - revert float
};
};
vector
<
DataInfo
>
data
;
vector
<
DataInfo
>
data
;
...
@@ -208,10 +208,10 @@ int main( int argc, char** argv )
...
@@ -208,10 +208,10 @@ int main( int argc, char** argv )
reg
=
ModbusRTU
::
str2mbData
(
argv
[
optind
]);
reg
=
ModbusRTU
::
str2mbData
(
argv
[
optind
]);
for
(
int
o
=
optind
+
1
;
o
<
argc
;
o
++
)
for
(
int
o
=
optind
+
1
;
o
<
argc
;
o
++
)
{
{
DataInfo
dval
;
DataInfo
dval
;
char
*
arg
=
checkArg
(
o
,
argc
,
argv
);
char
*
arg
=
checkArg
(
o
,
argc
,
argv
);
if
(
arg
==
0
)
if
(
arg
==
0
)
break
;
break
;
...
@@ -247,6 +247,7 @@ int main( int argc, char** argv )
...
@@ -247,6 +247,7 @@ int main( int argc, char** argv )
data
.
push_back
(
dval
);
data
.
push_back
(
dval
);
val
=
dval
.
d
.
v
;
val
=
dval
.
d
.
v
;
}
}
break
;
break
;
case
'i'
:
case
'i'
:
...
@@ -535,7 +536,8 @@ int main( int argc, char** argv )
...
@@ -535,7 +536,8 @@ int main( int argc, char** argv )
cout
<<
"write10: slaveaddr="
<<
ModbusRTU
::
addr2str
(
slaveaddr
)
cout
<<
"write10: slaveaddr="
<<
ModbusRTU
::
addr2str
(
slaveaddr
)
<<
" reg="
<<
ModbusRTU
::
dat2str
(
reg
)
<<
" reg="
<<
ModbusRTU
::
dat2str
(
reg
)
<<
" data["
<<
data
.
size
()
<<
"]{ "
;
<<
" data["
<<
data
.
size
()
<<
"]{ "
;
for
(
const
auto
&
v
:
data
)
for
(
const
auto
&
v
:
data
)
{
{
if
(
v
.
type
==
'f'
)
if
(
v
.
type
==
'f'
)
cout
<<
v
.
d
.
f
<<
"f "
;
cout
<<
v
.
d
.
f
<<
"f "
;
...
@@ -548,14 +550,15 @@ int main( int argc, char** argv )
...
@@ -548,14 +550,15 @@ int main( int argc, char** argv )
ModbusRTU
::
WriteOutputMessage
msg
(
slaveaddr
,
reg
);
ModbusRTU
::
WriteOutputMessage
msg
(
slaveaddr
,
reg
);
for
(
const
auto
&
v
:
data
)
for
(
const
auto
&
v
:
data
)
{
{
if
(
v
.
type
==
'f'
||
v
.
type
==
'r'
)
if
(
v
.
type
==
'f'
||
v
.
type
==
'r'
)
{
{
ModbusRTU
::
ModbusData
d
[
2
];
ModbusRTU
::
ModbusData
d
[
2
];
memcpy
(
&
d
,
&
(
v
.
d
.
f
),
std
::
min
(
sizeof
(
d
),
sizeof
(
v
.
d
.
f
)));
memcpy
(
&
d
,
&
(
v
.
d
.
f
),
std
::
min
(
sizeof
(
d
),
sizeof
(
v
.
d
.
f
)));
if
(
v
.
type
==
'r'
)
if
(
v
.
type
==
'r'
)
std
::
swap
(
d
[
0
],
d
[
1
]);
std
::
swap
(
d
[
0
],
d
[
1
]);
msg
.
addData
(
d
[
0
]);
msg
.
addData
(
d
[
0
]);
msg
.
addData
(
d
[
1
]);
msg
.
addData
(
d
[
1
]);
...
...
extensions/ModbusMaster/MBExchange.cc
View file @
e94544b9
...
@@ -2669,7 +2669,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
...
@@ -2669,7 +2669,7 @@ bool MBExchange::initDeviceInfo( RTUDeviceMap& m, ModbusRTU::ModbusAddr a, UniXM
dinfo
<<
myname
<<
"(initDeviceInfo): add addr="
<<
ModbusRTU
::
addr2str
(
a
)
<<
endl
;
dinfo
<<
myname
<<
"(initDeviceInfo): add addr="
<<
ModbusRTU
::
addr2str
(
a
)
<<
endl
;
int
tout
=
it
.
getPIntProp
(
"timeout"
,
default_timeout
);
int
tout
=
it
.
getPIntProp
(
"timeout"
,
default_timeout
);
d
->
second
->
resp_Delay
.
set
(
tout
,
false
);
d
->
second
->
resp_Delay
.
set
(
tout
,
false
);
d
->
second
->
resp_invert
=
it
.
getIntProp
(
"invert"
);
d
->
second
->
resp_invert
=
it
.
getIntProp
(
"invert"
);
return
true
;
return
true
;
}
}
...
...
extensions/ModbusMaster/tests/test_mbtcpmaster.cc
View file @
e94544b9
...
@@ -584,7 +584,7 @@ TEST_CASE("MBTCPMaster: 0x10 (F2)", "[modbus][0x10][F2][mbmaster][mbtcpmaster]")
...
@@ -584,7 +584,7 @@ TEST_CASE("MBTCPMaster: 0x10 (F2)", "[modbus][0x10][F2][mbmaster][mbtcpmaster]")
REQUIRE( q.start == 41 );
REQUIRE( q.start == 41 );
REQUIRE( q.quant == 2 );
REQUIRE( q.quant == 2 );
VTypes::F2 f2(q.data,VTypes::F2::wsize());
VTypes::F2 f2(q.data,
VTypes::F2::wsize());
float f = f2;
float f = f2;
REQUIRE( f == 100 );
REQUIRE( f == 100 );
}
}
...
@@ -603,7 +603,7 @@ TEST_CASE("MBTCPMaster: 0x10 (F4)", "[modbus][0x10][F4][mbmaster][mbtcpmaster]")
...
@@ -603,7 +603,7 @@ TEST_CASE("MBTCPMaster: 0x10 (F4)", "[modbus][0x10][F4][mbmaster][mbtcpmaster]")
REQUIRE( q.start == 45 );
REQUIRE( q.start == 45 );
REQUIRE( q.quant == 4 );
REQUIRE( q.quant == 4 );
VTypes::F4 f4(q.data,VTypes::F4::wsize());
VTypes::F4 f4(q.data,
VTypes::F4::wsize());
float f = f4;
float f = f4;
REQUIRE( f == v );
REQUIRE( f == v );
}
}
...
...
extensions/ModbusSlave/MBSlave.cc
View file @
e94544b9
...
@@ -85,7 +85,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
...
@@ -85,7 +85,7 @@ MBSlave::MBSlave( UniSetTypes::ObjectId objId, UniSetTypes::ObjectId shmId, cons
mbregFromID
=
conf
->
getArgInt
(
"--"
+
prefix
+
"-reg-from-id"
,
it
.
getProp
(
"reg_from_id"
));
mbregFromID
=
conf
->
getArgInt
(
"--"
+
prefix
+
"-reg-from-id"
,
it
.
getProp
(
"reg_from_id"
));
checkMBFunc
=
conf
->
getArgInt
(
"--"
+
prefix
+
"-check-mbfunc"
,
it
.
getProp
(
"check_mbfunc"
));
checkMBFunc
=
conf
->
getArgInt
(
"--"
+
prefix
+
"-check-mbfunc"
,
it
.
getProp
(
"check_mbfunc"
));
noMBFuncOptimize
=
conf
->
getArgInt
(
"--"
+
prefix
+
"-no-mbfunc-optimization"
,
it
.
getProp
(
"no_mbfunc_optimization"
));
noMBFuncOptimize
=
conf
->
getArgInt
(
"--"
+
prefix
+
"-no-mbfunc-optimization"
,
it
.
getProp
(
"no_mbfunc_optimization"
));
dinfo
<<
myname
<<
"(init): mbregFromID="
<<
mbregFromID
dinfo
<<
myname
<<
"(init): mbregFromID="
<<
mbregFromID
<<
" checkMBFunc="
<<
checkMBFunc
<<
" checkMBFunc="
<<
checkMBFunc
<<
" default_mbfunc="
<<
default_mbfunc
<<
" default_mbfunc="
<<
default_mbfunc
...
@@ -1090,6 +1090,7 @@ int MBSlave::getOptimizeWriteFunction( const int fn )
...
@@ -1090,6 +1090,7 @@ int MBSlave::getOptimizeWriteFunction( const int fn )
if
(
fn
==
ModbusRTU
::
fnWriteOutputSingleRegister
)
// 0x06 --> 0x10
if
(
fn
==
ModbusRTU
::
fnWriteOutputSingleRegister
)
// 0x06 --> 0x10
return
ModbusRTU
::
fnWriteOutputRegisters
;
return
ModbusRTU
::
fnWriteOutputRegisters
;
if
(
fn
==
ModbusRTU
::
fnForceSingleCoil
)
// 0x05 --> 0x0F
if
(
fn
==
ModbusRTU
::
fnForceSingleCoil
)
// 0x05 --> 0x0F
return
ModbusRTU
::
fnForceMultipleCoils
;
return
ModbusRTU
::
fnForceMultipleCoils
;
...
@@ -1309,7 +1310,7 @@ ModbusRTU::mbErrCode MBSlave::much_real_write( const ModbusRTU::ModbusData reg,
...
@@ -1309,7 +1310,7 @@ ModbusRTU::mbErrCode MBSlave::much_real_write( const ModbusRTU::ModbusData reg,
// ведь запросить могут начиная с "несуществующего регистра"
// ведь запросить могут начиная с "несуществующего регистра"
for
(
;
i
<
count
;
i
++
)
for
(
;
i
<
count
;
i
++
)
{
{
it
=
iomap
.
find
(
regID
+
i
);
it
=
iomap
.
find
(
regID
+
i
);
if
(
it
!=
iomap
.
end
()
)
if
(
it
!=
iomap
.
end
()
)
{
{
...
@@ -1323,6 +1324,7 @@ ModbusRTU::mbErrCode MBSlave::much_real_write( const ModbusRTU::ModbusData reg,
...
@@ -1323,6 +1324,7 @@ ModbusRTU::mbErrCode MBSlave::much_real_write( const ModbusRTU::ModbusData reg,
int
prev_i
=
i
;
int
prev_i
=
i
;
int
sub
=
0
;
int
sub
=
0
;
for
(
;
(
it
!=
iomap
.
end
())
&&
(
i
<
count
);
)
for
(
;
(
it
!=
iomap
.
end
())
&&
(
i
<
count
);
)
{
{
if
(
it
->
first
==
regID
)
if
(
it
->
first
==
regID
)
...
@@ -1331,7 +1333,7 @@ ModbusRTU::mbErrCode MBSlave::much_real_write( const ModbusRTU::ModbusData reg,
...
@@ -1331,7 +1333,7 @@ ModbusRTU::mbErrCode MBSlave::much_real_write( const ModbusRTU::ModbusData reg,
real_write_it
(
it
,
dat
,
i
,
count
);
real_write_it
(
it
,
dat
,
i
,
count
);
sub
=
(
i
-
prev_i
);
sub
=
(
i
-
prev_i
);
// если при обработке i не сдвигали..
// если при обработке i не сдвигали..
// значит сами делаем ++
// значит сами делаем ++
...
@@ -1341,9 +1343,14 @@ ModbusRTU::mbErrCode MBSlave::much_real_write( const ModbusRTU::ModbusData reg,
...
@@ -1341,9 +1343,14 @@ ModbusRTU::mbErrCode MBSlave::much_real_write( const ModbusRTU::ModbusData reg,
i
++
;
i
++
;
}
}
std
::
advance
(
it
,
sub
);
std
::
advance
(
it
,
sub
);
regID
+=
sub
;
regID
+=
sub
;
}
}
else
{
regID
++
;
i
++
;
}
}
}
return
ModbusRTU
::
erNoError
;
return
ModbusRTU
::
erNoError
;
...
...
extensions/ModbusSlave/tests/test_mbslave.cc
View file @
e94544b9
...
@@ -1052,9 +1052,10 @@ TEST_CASE("read03(04) 10 registers", "[modbus][mbslave][mbtcpslave][readmore]")
...
@@ -1052,9 +1052,10 @@ TEST_CASE("read03(04) 10 registers", "[modbus][mbslave][mbtcpslave][readmore]")
SECTION
(
"Test: read03 num=10"
)
SECTION
(
"Test: read03 num=10"
)
{
{
ModbusRTU
::
ReadOutputRetMessage
ret
=
mb
->
read03
(
slaveaddr
,
tREG
,
num
);
ModbusRTU
::
ReadOutputRetMessage
ret
=
mb
->
read03
(
slaveaddr
,
tREG
,
num
);
for
(
int
i
=
0
;
i
<
num
;
i
++
)
for
(
int
i
=
0
;
i
<
num
;
i
++
)
{
{
REQUIRE
(
ret
.
data
[
i
]
==
(
i
+
1
)
);
REQUIRE
(
ret
.
data
[
i
]
==
(
i
+
1
)
);
}
}
}
}
...
@@ -1067,9 +1068,10 @@ TEST_CASE("read03(04) 10 registers", "[modbus][mbslave][mbtcpslave][readmore]")
...
@@ -1067,9 +1068,10 @@ TEST_CASE("read03(04) 10 registers", "[modbus][mbslave][mbtcpslave][readmore]")
SECTION
(
"Test: read04"
)
SECTION
(
"Test: read04"
)
{
{
ModbusRTU
::
ReadInputRetMessage
ret
=
mb
->
read04
(
slaveaddr
,
tREG
,
num
);
ModbusRTU
::
ReadInputRetMessage
ret
=
mb
->
read04
(
slaveaddr
,
tREG
,
num
);
for
(
int
i
=
0
;
i
<
num
;
i
++
)
for
(
int
i
=
0
;
i
<
num
;
i
++
)
{
{
REQUIRE
(
ret
.
data
[
i
]
==
(
i
+
1
)
);
REQUIRE
(
ret
.
data
[
i
]
==
(
i
+
1
)
);
}
}
}
}
...
@@ -1092,16 +1094,17 @@ TEST_CASE("write10: 10 registers", "[modbus][mbslave][mbtcpslave][writemore]")
...
@@ -1092,16 +1094,17 @@ TEST_CASE("write10: 10 registers", "[modbus][mbslave][mbtcpslave][writemore]")
int
num
=
10
;
int
num
=
10
;
ModbusRTU
::
WriteOutputMessage
msg
(
slaveaddr
,
tREG
);
ModbusRTU
::
WriteOutputMessage
msg
(
slaveaddr
,
tREG
);
for
(
int
i
=
1
;
i
<=
num
;
i
++
)
for
(
int
i
=
1
;
i
<=
num
;
i
++
)
msg
.
addData
(
i
);
msg
.
addData
(
i
);
ModbusRTU
::
WriteOutputRetMessage
ret
=
mb
->
write10
(
msg
);
ModbusRTU
::
WriteOutputRetMessage
ret
=
mb
->
write10
(
msg
);
REQUIRE
(
ret
.
start
==
tREG
);
REQUIRE
(
ret
.
start
==
tREG
);
REQUIRE
(
ret
.
quant
==
num
);
REQUIRE
(
ret
.
quant
==
num
);
for
(
int
i
=
0
;
i
<
num
;
i
++
)
for
(
int
i
=
0
;
i
<
num
;
i
++
)
{
{
REQUIRE
(
(
signed
short
)
ui
->
getValue
(
id
+
i
)
==
(
i
+
1
)
);
REQUIRE
(
(
signed
short
)
ui
->
getValue
(
id
+
i
)
==
(
i
+
1
)
);
}
}
}
}
// -------------------------------------------------------------
// -------------------------------------------------------------
...
...
extensions/lib/IOBase.cc
View file @
e94544b9
...
@@ -420,17 +420,14 @@ float IOBase::processingFasAO( IOBase* it, const std::shared_ptr<SMInterface>& s
...
@@ -420,17 +420,14 @@ float IOBase::processingFasAO( IOBase* it, const std::shared_ptr<SMInterface>& s
float
fval
=
val
;
float
fval
=
val
;
if
(
it
->
stype
==
UniversalIO
::
AO
||
if
(
it
->
stype
==
UniversalIO
::
AO
||
it
->
stype
==
UniversalIO
::
AI
)
it
->
stype
==
UniversalIO
::
AI
)
{
{
IOController_i
::
CalibrateInfo
*
cal
(
&
(
it
->
cal
)
);
IOController_i
::
CalibrateInfo
*
cal
(
&
(
it
->
cal
)
);
if
(
cal
->
maxRaw
!=
cal
->
minRaw
)
// задана калибровка
if
(
cal
->
maxRaw
!=
cal
->
minRaw
)
// задана калибровка
{
{
// Калибруем в обратную сторону!!!
// Калибруем в обратную сторону!!!
fval
=
UniSetTypes
::
fcalibrate
(
fval
,
fval
=
UniSetTypes
::
fcalibrate
(
fval
,
cal
->
minCal
,
cal
->
maxCal
,
cal
->
minRaw
,
cal
->
maxRaw
,
it
->
calcrop
);
cal
->
minCal
,
cal
->
maxCal
,
cal
->
minRaw
,
cal
->
maxRaw
,
it
->
calcrop
);
}
}
if
(
!
it
->
noprecision
&&
it
->
cal
.
precision
>
0
)
if
(
!
it
->
noprecision
&&
it
->
cal
.
precision
>
0
)
...
...
tests/test_delaytimer.cc
View file @
e94544b9
...
@@ -139,3 +139,37 @@ TEST_CASE("[DelayTimer]: debounce", "[DelayTimer]" )
...
@@ -139,3 +139,37 @@ TEST_CASE("[DelayTimer]: debounce", "[DelayTimer]" )
CHECK_FALSE
(
dt
.
check
(
false
)
);
CHECK_FALSE
(
dt
.
check
(
false
)
);
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
TEST_CASE
(
"[DelayTimer]: zero time"
,
"[DelayTimer]"
)
{
SECTION
(
"ondelay=0"
)
{
DelayTimer
dt
(
0
,
100
);
CHECK_FALSE
(
dt
.
get
()
);
CHECK_FALSE
(
dt
.
check
(
false
)
);
CHECK
(
dt
.
check
(
true
)
);
CHECK
(
dt
.
check
(
false
)
);
CHECK
(
dt
.
check
(
true
)
);
CHECK
(
dt
.
check
(
false
)
);
msleep
(
80
);
CHECK
(
dt
.
check
(
false
)
);
msleep
(
40
);
CHECK_FALSE
(
dt
.
check
(
false
)
);
CHECK
(
dt
.
check
(
true
)
);
}
SECTION
(
"offdelay=0"
)
{
DelayTimer
dt
(
100
,
0
);
CHECK_FALSE
(
dt
.
get
()
);
CHECK_FALSE
(
dt
.
check
(
false
)
);
CHECK_FALSE
(
dt
.
check
(
true
)
);
CHECK_FALSE
(
dt
.
check
(
false
)
);
CHECK_FALSE
(
dt
.
check
(
true
)
);
msleep
(
80
);
CHECK_FALSE
(
dt
.
check
(
true
)
);
msleep
(
40
);
CHECK
(
dt
.
check
(
true
)
);
CHECK_FALSE
(
dt
.
check
(
false
)
);
}
}
// -----------------------------------------------------------------------------
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