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
b7dbca76
Commit
b7dbca76
authored
Feb 19, 2017
by
Pavel Vainerman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(MTR): добавил возможность чтения через TCP для mtr-read и mtr-setup
parent
b7529808
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
174 additions
and
90 deletions
+174
-90
TODO
TODO
+4
-0
mtr-read.cc
extensions/ModbusMaster/mtr-read.cc
+44
-13
mtr-setup.cc
extensions/ModbusMaster/mtr-setup.cc
+74
-36
MTR.h
extensions/include/MTR.h
+11
-11
MTR.cc
extensions/lib/MTR.cc
+38
-28
ModbusHelpers.h
include/modbus/ModbusHelpers.h
+2
-1
ModbusHelpers.cc
src/Communications/Modbus/ModbusHelpers.cc
+1
-1
No files found.
TODO
View file @
b7dbca76
...
@@ -55,6 +55,10 @@ HTTP API:
...
@@ -55,6 +55,10 @@ HTTP API:
- список объектов возвращать с их типом (чтобы можно было SM вычислять)
- список объектов возвращать с их типом (чтобы можно было SM вычислять)
- Сделать возможность настраивать параметры httpserver-а из командной строки (количество потоков и т.п.)
- Сделать возможность настраивать параметры httpserver-а из командной строки (количество потоков и т.п.)
- ТЕСТЫ (как вариант поизучать про тестовые фреймворки на питоне (pytest?)
- ТЕСТЫ (как вариант поизучать про тестовые фреймворки на питоне (pytest?)
- Запрос у процесса обмена (MBSlave,MBxxMaster,UNet и т.п.) получение списка опрашиваемых датчиков
(датчиков с которыми ведётся работа данным процессом обмена)
- smonit запись значений в файл (csv?,sqlite?,gnuplot)
- smonit запись значений в файл (csv?,sqlite?,gnuplot)
- python: gui sensor monitor
- python: gui sensor monitor
...
...
extensions/ModbusMaster/mtr-read.cc
View file @
b7dbca76
...
@@ -19,8 +19,10 @@
...
@@ -19,8 +19,10 @@
#include <iomanip>
#include <iomanip>
#include <getopt.h>
#include <getopt.h>
#include "Debug.h"
#include "Debug.h"
#include "UniSetTypes.h"
#include "modbus/ModbusRTUMaster.h"
#include "modbus/ModbusRTUMaster.h"
#include "modbus/ModbusHelpers.h"
#include "modbus/ModbusHelpers.h"
#include "modbus/ModbusTCPMaster.h"
#include "MTR.h"
#include "MTR.h"
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
using
namespace
uniset
;
using
namespace
uniset
;
...
@@ -39,6 +41,8 @@ static struct option longopts[] =
...
@@ -39,6 +41,8 @@ static struct option longopts[] =
{
"use485F"
,
no_argument
,
0
,
'y'
},
{
"use485F"
,
no_argument
,
0
,
'y'
},
{
"num-cycles"
,
required_argument
,
0
,
'l'
},
{
"num-cycles"
,
required_argument
,
0
,
'l'
},
{
"timeout"
,
required_argument
,
0
,
't'
},
{
"timeout"
,
required_argument
,
0
,
't'
},
{
"iaddr"
,
required_argument
,
0
,
'i'
},
{
"port"
,
required_argument
,
0
,
'p'
},
{
NULL
,
0
,
0
,
0
}
{
NULL
,
0
,
0
,
0
}
};
};
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
...
@@ -49,12 +53,16 @@ static void print_help()
...
@@ -49,12 +53,16 @@ static void print_help()
printf
(
"[--read04] slaveaddr reg mtrtype - read from MTR (mtrtype: T1...T10,T16,T17,F1)
\n
"
);
printf
(
"[--read04] slaveaddr reg mtrtype - read from MTR (mtrtype: T1...T10,T16,T17,F1)
\n
"
);
printf
(
"[-m|--read-model] slaveaddr - read model name from MTR
\n
"
);
printf
(
"[-m|--read-model] slaveaddr - read model name from MTR
\n
"
);
printf
(
"[-n|--read-serial] slaveaddr - read serial number from MTR
\n
"
);
printf
(
"[-n|--read-serial] slaveaddr - read serial number from MTR
\n
"
);
printf
(
"[-y|--use485F] - use RS485 Fastwel.
\n
"
);
printf
(
"[-d|--device] dev - use device dev. Default: /dev/ttyS0
\n
"
);
printf
(
"[-s|--speed] speed - 9600,14400,19200,38400,57600,115200. Default: 38400.
\n
"
);
printf
(
"[-t|--timeout] msec - Timeout. Default: 2000.
\n
"
);
printf
(
"[-t|--timeout] msec - Timeout. Default: 2000.
\n
"
);
printf
(
"[-l|--num-cycles] num - Number of cycles of exchange. Default: -1 infinitely.
\n
"
);
printf
(
"[-l|--num-cycles] num - Number of cycles of exchange. Default: -1 infinitely.
\n
"
);
printf
(
"[-v|--verbose] - Print all messages to stdout
\n
"
);
printf
(
"[-v|--verbose] - Print all messages to stdout
\n
"
);
printf
(
"
\n
RTU prameters:
\n
"
);
printf
(
"[-y|--use485F] - use RS485 Fastwel.
\n
"
);
printf
(
"[-d|--device] dev - use device dev. Default: /dev/ttyS0
\n
"
);
printf
(
"[-s|--speed] speed - 9600,14400,19200,38400,57600,115200. Default: 38400.
\n
"
);
printf
(
"
\n
TCP prameters:
\n
"
);
printf
(
"[-i|--iaddr] ip - Modbus server ip. Default: 127.0.0.1
\n
"
);
printf
(
"[-p|--port] port - Modbus server port. Default: 502.
\n
"
);
}
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
enum
Command
enum
Command
...
@@ -67,7 +75,7 @@ enum Command
...
@@ -67,7 +75,7 @@ enum Command
};
};
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
static
char
*
checkArg
(
int
ind
,
int
argc
,
char
*
argv
[]
);
static
char
*
checkArg
(
int
ind
,
int
argc
,
char
*
argv
[]
);
static
void
readMTR
(
Modbus
RTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
static
void
readMTR
(
Modbus
Client
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
ModbusRTU
::
ModbusData
reg
,
MTR
::
MTRType
t
,
Command
cmd
);
ModbusRTU
::
ModbusData
reg
,
MTR
::
MTRType
t
,
Command
cmd
);
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
...
@@ -88,12 +96,14 @@ int main( int argc, char** argv )
...
@@ -88,12 +96,14 @@ int main( int argc, char** argv )
int
use485
=
0
;
int
use485
=
0
;
int
ncycles
=
-
1
;
int
ncycles
=
-
1
;
MTR
::
MTRType
mtrtype
=
MTR
::
mtUnknown
;
MTR
::
MTRType
mtrtype
=
MTR
::
mtUnknown
;
string
iaddr
(
"127.0.0.1"
);
int
port
=
502
;
try
try
{
{
while
(
1
)
while
(
1
)
{
{
opt
=
getopt_long
(
argc
,
argv
,
"hvyq:r:d:s:t:x:m:n:"
,
longopts
,
&
optindex
);
opt
=
getopt_long
(
argc
,
argv
,
"hvyq:r:d:s:t:x:m:n:
i:p:
"
,
longopts
,
&
optindex
);
if
(
opt
==
-
1
)
if
(
opt
==
-
1
)
break
;
break
;
...
@@ -176,6 +186,14 @@ int main( int argc, char** argv )
...
@@ -176,6 +186,14 @@ int main( int argc, char** argv )
ncycles
=
uni_atoi
(
optarg
);
ncycles
=
uni_atoi
(
optarg
);
break
;
break
;
case
'i'
:
iaddr
=
string
(
optarg
);
break
;
case
'p'
:
port
=
uni_atoi
(
optarg
);
break
;
case
'?'
:
case
'?'
:
default:
default:
printf
(
"? argumnet
\n
"
);
printf
(
"? argumnet
\n
"
);
...
@@ -190,14 +208,27 @@ int main( int argc, char** argv )
...
@@ -190,14 +208,27 @@ int main( int argc, char** argv )
<<
endl
;
<<
endl
;
}
}
ModbusRTUMaster
mb
(
dev
,
use485
);
ModbusClient
*
mb
=
nullptr
;
if
(
!
iaddr
.
empty
()
)
{
auto
mbtcp
=
new
ModbusTCPMaster
();
mbtcp
->
connect
(
iaddr
,
port
);
// mbtcp->setForceDisconnect(!persist);
mb
=
mbtcp
;
}
else
{
auto
mbrtu
=
new
ModbusRTUMaster
(
dev
,
use485
);
mbrtu
->
setSpeed
(
speed
);
mb
=
mbrtu
;
}
if
(
verb
)
if
(
verb
)
dlog
->
addLevel
(
Debug
::
ANY
);
dlog
->
addLevel
(
Debug
::
ANY
);
mb
.
setTimeout
(
tout
);
mb
->
setTimeout
(
tout
);
mb
.
setSpeed
(
speed
);
mb
->
setLog
(
dlog
);
mb
.
setLog
(
dlog
);
int
nc
=
1
;
int
nc
=
1
;
...
@@ -222,7 +253,7 @@ int main( int argc, char** argv )
...
@@ -222,7 +253,7 @@ int main( int argc, char** argv )
<<
endl
;
<<
endl
;
}
}
readMTR
(
&
mb
,
slaveaddr
,
reg
,
mtrtype
,
cmd
);
readMTR
(
mb
,
slaveaddr
,
reg
,
mtrtype
,
cmd
);
}
}
break
;
break
;
...
@@ -234,7 +265,7 @@ int main( int argc, char** argv )
...
@@ -234,7 +265,7 @@ int main( int argc, char** argv )
<<
endl
;
<<
endl
;
}
}
string
s
(
MTR
::
getModelNumber
(
&
mb
,
slaveaddr
)
);
string
s
=
MTR
::
getModelNumber
(
mb
,
slaveaddr
);
cout
<<
(
s
.
empty
()
?
"Don`t read model name."
:
s
)
<<
endl
;
cout
<<
(
s
.
empty
()
?
"Don`t read model name."
:
s
)
<<
endl
;
return
0
;
return
0
;
}
}
...
@@ -248,7 +279,7 @@ int main( int argc, char** argv )
...
@@ -248,7 +279,7 @@ int main( int argc, char** argv )
<<
endl
;
<<
endl
;
}
}
string
s
(
MTR
::
getSerialNumber
(
&
mb
,
slaveaddr
));
string
s
(
MTR
::
getSerialNumber
(
mb
,
slaveaddr
));
cout
<<
(
s
.
empty
()
?
"Don`t read serial number."
:
s
)
<<
endl
;
cout
<<
(
s
.
empty
()
?
"Don`t read serial number."
:
s
)
<<
endl
;
return
0
;
return
0
;
}
}
...
@@ -303,7 +334,7 @@ char* checkArg( int i, int argc, char* argv[] )
...
@@ -303,7 +334,7 @@ char* checkArg( int i, int argc, char* argv[] )
return
0
;
return
0
;
}
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
void
readMTR
(
Modbus
RTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
void
readMTR
(
Modbus
Client
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
ModbusRTU
::
ModbusData
reg
,
MTR
::
MTRType
mtrType
,
Command
cmd
)
ModbusRTU
::
ModbusData
reg
,
MTR
::
MTRType
mtrType
,
Command
cmd
)
{
{
int
count
=
MTR
::
wsize
(
mtrType
);
int
count
=
MTR
::
wsize
(
mtrType
);
...
...
extensions/ModbusMaster/mtr-setup.cc
View file @
b7dbca76
...
@@ -23,6 +23,7 @@
...
@@ -23,6 +23,7 @@
#include <math.h>
#include <math.h>
#include "Debug.h"
#include "Debug.h"
#include "modbus/ModbusRTUMaster.h"
#include "modbus/ModbusRTUMaster.h"
#include "modbus/ModbusTCPMaster.h"
#include "modbus/ModbusHelpers.h"
#include "modbus/ModbusHelpers.h"
#include "extensions/MTR.h"
#include "extensions/MTR.h"
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
...
@@ -40,13 +41,15 @@ static struct option longopts[] =
...
@@ -40,13 +41,15 @@ static struct option longopts[] =
{
"device"
,
required_argument
,
0
,
'd'
},
{
"device"
,
required_argument
,
0
,
'd'
},
{
"verbose"
,
no_argument
,
0
,
'v'
},
{
"verbose"
,
no_argument
,
0
,
'v'
},
{
"speed"
,
required_argument
,
0
,
's'
},
{
"speed"
,
required_argument
,
0
,
's'
},
{
"stop-bits"
,
required_argument
,
0
,
'
i
'
},
{
"stop-bits"
,
required_argument
,
0
,
'
o
'
},
{
"parity"
,
required_argument
,
0
,
'
p
'
},
{
"parity"
,
required_argument
,
0
,
'
a
'
},
{
"use485F"
,
no_argument
,
0
,
'y'
},
{
"use485F"
,
no_argument
,
0
,
'y'
},
{
"min-addr"
,
required_argument
,
0
,
'b'
},
{
"min-addr"
,
required_argument
,
0
,
'b'
},
{
"max-addr"
,
required_argument
,
0
,
'e'
},
{
"max-addr"
,
required_argument
,
0
,
'e'
},
{
"model"
,
required_argument
,
0
,
'x'
},
{
"model"
,
required_argument
,
0
,
'x'
},
{
"serial"
,
required_argument
,
0
,
'z'
},
{
"serial"
,
required_argument
,
0
,
'z'
},
{
"iaddr"
,
required_argument
,
0
,
'i'
},
{
"port"
,
required_argument
,
0
,
'p'
},
{
NULL
,
0
,
0
,
0
}
{
NULL
,
0
,
0
,
0
}
};
};
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
...
@@ -56,21 +59,26 @@ static void print_help()
...
@@ -56,21 +59,26 @@ static void print_help()
printf
(
"[--read] mtraddr - read configuration from MTR
\n
"
);
printf
(
"[--read] mtraddr - read configuration from MTR
\n
"
);
printf
(
"[--save] mtraddr confile - save configureation to MTR
\n
"
);
printf
(
"[--save] mtraddr confile - save configureation to MTR
\n
"
);
printf
(
" mtraddr=0x00 - autodetect addr
\n
"
);
printf
(
" mtraddr=0x00 - autodetect addr
\n
"
);
printf
(
"[-d|--device] dev - use device dev. Default: /dev/ttyS0
\n
"
);
printf
(
"[-s|--speed] speed - 9600,14400,19200,38400,57600,115200. Default: 38400.
\n
"
);
printf
(
"[--stop-bits] n - stop bits [1,2]. Default: 1
\n
"
);
printf
(
"[--parity] par - parity [odd,even,no]. Default: no
\n
"
);
printf
(
"[-t|--timeout] msec - Timeout. Default: 2000.
\n
"
);
printf
(
"[-t|--timeout] msec - Timeout. Default: 2000.
\n
"
);
printf
(
"[-v|--verbose] - Print all messages to stdout
\n
"
);
printf
(
"[-v|--verbose] - Print all messages to stdout
\n
"
);
printf
(
"[-y|--use485F] - use RS485 Fastwel.
\n
"
);
printf
(
"[--autodetect-speed] slaveaddr [reg fn] - detect speed
\n
"
);
printf
(
" reg - register of test. Default: 0
\n
"
);
printf
(
" fn - function of test [0x01,0x02,0x03,0x04]. Default: 0x04
\n
"
);
printf
(
"[--autodetect-slave] [reg fn] - find slave
\n
"
);
printf
(
"[--autodetect-slave] [reg fn] - find slave
\n
"
);
printf
(
" reg - register of test. Default: 0
\n
"
);
printf
(
" reg - register of test. Default: 0
\n
"
);
printf
(
" fn - function of test [0x01,0x02,0x03,0x04]. Default: 0x04
\n
"
);
printf
(
" fn - function of test [0x01,0x02,0x03,0x04]. Default: 0x04
\n
"
);
printf
(
"[--min-addr] - start addres for autodetect. Default: 0
\n
"
);
printf
(
"[--min-addr] - start addres for autodetect. Default: 0
\n
"
);
printf
(
"[--max-addr] - end addres for autodetect. Default: 254
\n
"
);
printf
(
"[--max-addr] - end addres for autodetect. Default: 254
\n
"
);
printf
(
"
\n
RTU prameters:
\n
"
);
printf
(
"[-y|--use485F] - use RS485 Fastwel.
\n
"
);
printf
(
"[-d|--device] dev - use device dev. Default: /dev/ttyS0
\n
"
);
printf
(
"[-s|--speed] speed - 9600,14400,19200,38400,57600,115200. Default: 38400.
\n
"
);
printf
(
"[--parity] par - parity [odd,even,no]. Default: no
\n
"
);
printf
(
"[--stop-bits] n - stop bits [1,2]. Default: 1
\n
"
);
printf
(
"[--autodetect-speed] slaveaddr [reg fn] - detect speed
\n
"
);
printf
(
" reg - register of test. Default: 0
\n
"
);
printf
(
" fn - function of test [0x01,0x02,0x03,0x04]. Default: 0x04
\n
"
);
printf
(
"
\n
TCP prameters:
\n
"
);
printf
(
"[-i|--iaddr] ip - Modbus server ip. Default: 127.0.0.1
\n
"
);
printf
(
"[-p|--port] port - Modbus server port. Default: 502.
\n
"
);
printf
(
"
\n
"
);
printf
(
"
\n
"
);
}
}
// --------------------------------------------------------------------------
// --------------------------------------------------------------------------
...
@@ -109,17 +117,14 @@ int main( int argc, char** argv )
...
@@ -109,17 +117,14 @@ int main( int argc, char** argv )
int
use485
=
0
;
int
use485
=
0
;
ComPort
::
StopBits
sbits
=
ComPort
::
OneBit
;
ComPort
::
StopBits
sbits
=
ComPort
::
OneBit
;
ComPort
::
Parity
parity
=
ComPort
::
NoParity
;
ComPort
::
Parity
parity
=
ComPort
::
NoParity
;
string
iaddr
(
"127.0.0.1"
);
// ModbusRTU::ModbusAddr b=255;
int
port
=
502
;
//
// cout << "b=" << (int)b << " b++=" << (int)(b++) << endl;
// return 0;
try
try
{
{
while
(
1
)
while
(
1
)
{
{
opt
=
getopt_long
(
argc
,
argv
,
"hvw:r:x:d:s:t:l:n:yb:e:x:z:"
,
longopts
,
&
optindex
);
opt
=
getopt_long
(
argc
,
argv
,
"hvw:r:x:d:s:t:l:n:yb:e:x:z:
i:p:o:a:
"
,
longopts
,
&
optindex
);
if
(
opt
==
-
1
)
if
(
opt
==
-
1
)
break
;
break
;
...
@@ -171,7 +176,7 @@ int main( int argc, char** argv )
...
@@ -171,7 +176,7 @@ int main( int argc, char** argv )
speed
=
string
(
optarg
);
speed
=
string
(
optarg
);
break
;
break
;
case
'
p
'
:
case
'
a
'
:
par
=
string
(
optarg
);
par
=
string
(
optarg
);
if
(
!
par
.
compare
(
"odd"
)
)
if
(
!
par
.
compare
(
"odd"
)
)
...
@@ -187,7 +192,7 @@ int main( int argc, char** argv )
...
@@ -187,7 +192,7 @@ int main( int argc, char** argv )
tout
=
atoi
(
optarg
);
tout
=
atoi
(
optarg
);
break
;
break
;
case
'
i
'
:
case
'
o
'
:
if
(
atoi
(
optarg
)
==
2
)
if
(
atoi
(
optarg
)
==
2
)
sbits
=
ComPort
::
TwoBits
;
sbits
=
ComPort
::
TwoBits
;
...
@@ -245,6 +250,14 @@ int main( int argc, char** argv )
...
@@ -245,6 +250,14 @@ int main( int argc, char** argv )
}
}
break
;
break
;
case
'i'
:
iaddr
=
string
(
optarg
);
break
;
case
'p'
:
port
=
uni_atoi
(
optarg
);
break
;
case
'?'
:
case
'?'
:
default:
default:
printf
(
"? argumnet
\n
"
);
printf
(
"? argumnet
\n
"
);
...
@@ -259,16 +272,29 @@ int main( int argc, char** argv )
...
@@ -259,16 +272,29 @@ int main( int argc, char** argv )
<<
endl
;
<<
endl
;
}
}
ModbusRTUMaster
mb
(
dev
,
use485
);
ModbusClient
*
mb
=
nullptr
;
if
(
!
iaddr
.
empty
()
)
{
auto
mbtcp
=
new
ModbusTCPMaster
();
mbtcp
->
connect
(
iaddr
,
port
);
// mbtcp->setForceDisconnect(!persist);
mb
=
mbtcp
;
}
else
{
auto
mbrtu
=
new
ModbusRTUMaster
(
dev
,
use485
);
mbrtu
->
setSpeed
(
speed
);
mbrtu
->
setParity
(
parity
);
mbrtu
->
setStopBits
(
sbits
);
mb
=
mbrtu
;
}
if
(
verb
)
if
(
verb
)
dlog
->
addLevel
(
Debug
::
type
(
Debug
::
CRIT
|
Debug
::
WARN
|
Debug
::
INFO
)
);
dlog
->
addLevel
(
Debug
::
type
(
Debug
::
CRIT
|
Debug
::
WARN
|
Debug
::
INFO
)
);
mb
.
setTimeout
(
tout
);
mb
->
setTimeout
(
tout
);
mb
.
setSpeed
(
speed
);
mb
->
setLog
(
dlog
);
mb
.
setParity
(
parity
);
mb
.
setStopBits
(
sbits
);
mb
.
setLog
(
dlog
);
switch
(
cmd
)
switch
(
cmd
)
{
{
...
@@ -286,9 +312,9 @@ int main( int argc, char** argv )
...
@@ -286,9 +312,9 @@ int main( int argc, char** argv )
if
(
verb
)
if
(
verb
)
cout
<<
"(mtr-setup): save: autodetect slave addr... (speed="
<<
speed
<<
")"
<<
endl
;
cout
<<
"(mtr-setup): save: autodetect slave addr... (speed="
<<
speed
<<
")"
<<
endl
;
mb
.
setTimeout
(
50
);
mb
->
setTimeout
(
50
);
slaveaddr
=
ModbusHelpers
::
autodetectSlave
(
&
mb
,
beg
,
end
,
MTR
::
regModelNumber
,
ModbusRTU
::
fnReadInputRegisters
);
slaveaddr
=
ModbusHelpers
::
autodetectSlave
(
mb
,
beg
,
end
,
MTR
::
regModelNumber
,
ModbusRTU
::
fnReadInputRegisters
);
mb
.
setTimeout
(
tout
);
mb
->
setTimeout
(
tout
);
}
}
if
(
speed
.
empty
()
)
if
(
speed
.
empty
()
)
...
@@ -296,10 +322,14 @@ int main( int argc, char** argv )
...
@@ -296,10 +322,14 @@ int main( int argc, char** argv )
if
(
verb
)
if
(
verb
)
cout
<<
"(mtr-setup): save: autodetect speed... (addr="
<<
ModbusRTU
::
addr2str
(
slaveaddr
)
<<
")"
<<
endl
;
cout
<<
"(mtr-setup): save: autodetect speed... (addr="
<<
ModbusRTU
::
addr2str
(
slaveaddr
)
<<
")"
<<
endl
;
mb
.
setTimeout
(
50
);
auto
mbrtu
=
dynamic_cast
<
ModbusRTUMaster
*>
(
mb
);
ComPort
::
Speed
s
=
ModbusHelpers
::
autodetectSpeed
(
&
mb
,
slaveaddr
,
MTR
::
regModelNumber
,
ModbusRTU
::
fnReadInputRegisters
);
if
(
mbrtu
)
mb
.
setSpeed
(
s
);
{
mb
.
setTimeout
(
tout
);
mb
->
setTimeout
(
50
);
ComPort
::
Speed
s
=
ModbusHelpers
::
autodetectSpeed
(
mbrtu
,
slaveaddr
,
MTR
::
regModelNumber
,
ModbusRTU
::
fnReadInputRegisters
);
mbrtu
->
setSpeed
(
s
);
mbrtu
->
setTimeout
(
tout
);
}
}
}
if
(
verb
)
if
(
verb
)
...
@@ -309,7 +339,7 @@ int main( int argc, char** argv )
...
@@ -309,7 +339,7 @@ int main( int argc, char** argv )
<<
" speed="
<<
speed
<<
" speed="
<<
speed
<<
endl
;
<<
endl
;
return
MTR
::
update_configuration
(
&
mb
,
slaveaddr
,
mtrconfile
,
verb
)
?
0
:
1
;
return
MTR
::
update_configuration
(
mb
,
slaveaddr
,
mtrconfile
,
verb
)
?
0
:
1
;
}
}
break
;
break
;
...
@@ -327,7 +357,7 @@ int main( int argc, char** argv )
...
@@ -327,7 +357,7 @@ int main( int argc, char** argv )
try
try
{
{
ModbusRTU
::
ModbusAddr
a
=
ModbusHelpers
::
autodetectSlave
(
&
mb
,
beg
,
end
,
reg
,
fn
);
ModbusRTU
::
ModbusAddr
a
=
ModbusHelpers
::
autodetectSlave
(
mb
,
beg
,
end
,
reg
,
fn
);
cout
<<
"(mtr-setup): autodetect modbus slave: "
<<
ModbusRTU
::
addr2str
(
a
)
<<
endl
;
cout
<<
"(mtr-setup): autodetect modbus slave: "
<<
ModbusRTU
::
addr2str
(
a
)
<<
endl
;
}
}
catch
(
uniset
::
TimeOut
)
catch
(
uniset
::
TimeOut
)
...
@@ -340,6 +370,14 @@ int main( int argc, char** argv )
...
@@ -340,6 +370,14 @@ int main( int argc, char** argv )
case
cmdDetectSpeed
:
case
cmdDetectSpeed
:
{
{
auto
mbrtu
=
dynamic_cast
<
ModbusRTUMaster
*>
(
mb
);
if
(
!
mbrtu
)
{
cerr
<<
"autodetect speed only for RTU interface.."
<<
endl
;
return
1
;
}
if
(
verb
)
if
(
verb
)
{
{
cout
<<
"(mtr-setup): autodetect speed: slaveaddr="
<<
ModbusRTU
::
addr2str
(
slaveaddr
)
cout
<<
"(mtr-setup): autodetect speed: slaveaddr="
<<
ModbusRTU
::
addr2str
(
slaveaddr
)
...
@@ -350,7 +388,7 @@ int main( int argc, char** argv )
...
@@ -350,7 +388,7 @@ int main( int argc, char** argv )
try
try
{
{
ComPort
::
Speed
s
=
ModbusHelpers
::
autodetectSpeed
(
&
mb
,
slaveaddr
,
reg
,
fn
);
ComPort
::
Speed
s
=
ModbusHelpers
::
autodetectSpeed
(
mbrtu
,
slaveaddr
,
reg
,
fn
);
cout
<<
"(mtr-setup): autodetect: slaveaddr="
<<
ModbusRTU
::
addr2str
(
slaveaddr
)
cout
<<
"(mtr-setup): autodetect: slaveaddr="
<<
ModbusRTU
::
addr2str
(
slaveaddr
)
<<
" speed="
<<
ComPort
::
getSpeed
(
s
)
<<
endl
;
<<
" speed="
<<
ComPort
::
getSpeed
(
s
)
<<
endl
;
}
}
...
@@ -371,7 +409,7 @@ int main( int argc, char** argv )
...
@@ -371,7 +409,7 @@ int main( int argc, char** argv )
<<
endl
;
<<
endl
;
}
}
cout
<<
"model: "
<<
MTR
::
getModelNumber
(
&
mb
,
slaveaddr
)
<<
endl
;
cout
<<
"model: "
<<
MTR
::
getModelNumber
(
mb
,
slaveaddr
)
<<
endl
;
}
}
break
;
break
;
...
@@ -384,7 +422,7 @@ int main( int argc, char** argv )
...
@@ -384,7 +422,7 @@ int main( int argc, char** argv )
<<
endl
;
<<
endl
;
}
}
cout
<<
"serial: "
<<
MTR
::
getSerialNumber
(
&
mb
,
slaveaddr
)
<<
endl
;
cout
<<
"serial: "
<<
MTR
::
getSerialNumber
(
mb
,
slaveaddr
)
<<
endl
;
}
}
break
;
break
;
...
...
extensions/include/MTR.h
View file @
b7dbca76
...
@@ -30,7 +30,7 @@
...
@@ -30,7 +30,7 @@
namespace
uniset
namespace
uniset
{
{
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
class
Modbus
RTUMaster
;
class
Modbus
Client
;
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
namespace
MTR
namespace
MTR
{
{
...
@@ -63,8 +63,8 @@ namespace uniset
...
@@ -63,8 +63,8 @@ namespace uniset
const
ModbusRTU
::
ModbusData
regModelNumber
=
0x01
;
const
ModbusRTU
::
ModbusData
regModelNumber
=
0x01
;
const
ModbusRTU
::
ModbusData
regSerialNumber
=
0x09
;
const
ModbusRTU
::
ModbusData
regSerialNumber
=
0x09
;
std
::
string
getModelNumber
(
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
);
std
::
string
getModelNumber
(
uniset
::
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
addr
);
std
::
string
getSerialNumber
(
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
);
std
::
string
getSerialNumber
(
uniset
::
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
addr
);
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
// Настройки связи (чтение - read03, запись - write06)
// Настройки связи (чтение - read03, запись - write06)
const
ModbusRTU
::
ModbusData
regUpdateConfiguration
=
53
;
const
ModbusRTU
::
ModbusData
regUpdateConfiguration
=
53
;
...
@@ -99,11 +99,11 @@ namespace uniset
...
@@ -99,11 +99,11 @@ namespace uniset
db7Bits
=
1
db7Bits
=
1
};
};
bool
setAddress
(
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
ModbusRTU
::
ModbusAddr
newAddr
);
bool
setAddress
(
uniset
::
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
ModbusRTU
::
ModbusAddr
newAddr
);
bool
setBaudRate
(
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
mtrBaudRate
br
);
bool
setBaudRate
(
uniset
::
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
mtrBaudRate
br
);
bool
setStopBit
(
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
bool
state
);
bool
setStopBit
(
uniset
::
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
bool
state
);
bool
setParity
(
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
mtrParity
p
);
bool
setParity
(
uniset
::
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
mtrParity
p
);
bool
setDataBits
(
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
mtrDataBits
d
);
bool
setDataBits
(
uniset
::
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
mtrDataBits
d
);
ComPort
::
Parity
get_parity
(
ModbusRTU
::
ModbusData
data
);
ComPort
::
Parity
get_parity
(
ModbusRTU
::
ModbusData
data
);
ComPort
::
Speed
get_speed
(
ModbusRTU
::
ModbusData
data
);
ComPort
::
Speed
get_speed
(
ModbusRTU
::
ModbusData
data
);
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
...
@@ -117,7 +117,7 @@ namespace uniset
...
@@ -117,7 +117,7 @@ namespace uniset
};
};
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
MTRError
&
e
);
std
::
ostream
&
operator
<<
(
std
::
ostream
&
os
,
MTRError
&
e
);
// Настройка из конф. файла
// Настройка из конф. файла
MTRError
update_configuration
(
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
MTRError
update_configuration
(
uniset
::
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
const
std
::
string
&
mtrconfile
,
int
verbose
=
0
);
const
std
::
string
&
mtrconfile
,
int
verbose
=
0
);
// ---------------------------
// ---------------------------
// вспомогательные функции и типы данных
// вспомогательные функции и типы данных
...
@@ -126,11 +126,11 @@ namespace uniset
...
@@ -126,11 +126,11 @@ namespace uniset
const
int
attempts
=
3
;
//
const
int
attempts
=
3
;
//
static
const
ModbusRTU
::
ModbusData
skip
[]
=
{
48
,
49
,
59
};
// registers which should not write
static
const
ModbusRTU
::
ModbusData
skip
[]
=
{
48
,
49
,
59
};
// registers which should not write
bool
send_param
(
ModbusRTUMaster
*
mb
,
DataMap
&
dmap
,
ModbusRTU
::
ModbusAddr
addr
,
int
verb
);
bool
send_param
(
uniset
::
ModbusClient
*
mb
,
DataMap
&
dmap
,
ModbusRTU
::
ModbusAddr
addr
,
int
verb
);
bool
read_param
(
const
std
::
string
&
str
,
std
::
string
&
str1
,
std
::
string
&
str2
);
bool
read_param
(
const
std
::
string
&
str
,
std
::
string
&
str1
,
std
::
string
&
str2
);
DataMap
read_confile
(
const
std
::
string
&
f
);
DataMap
read_confile
(
const
std
::
string
&
f
);
void
update_communication_params
(
ModbusRTU
::
ModbusAddr
reg
,
ModbusRTU
::
ModbusData
data
,
void
update_communication_params
(
ModbusRTU
::
ModbusAddr
reg
,
ModbusRTU
::
ModbusData
data
,
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
&
addr
,
int
verb
);
uniset
::
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
&
addr
,
int
verb
);
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
static
const
size_t
u2size
=
2
;
static
const
size_t
u2size
=
2
;
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
...
...
extensions/lib/MTR.cc
View file @
b7dbca76
...
@@ -19,6 +19,7 @@
...
@@ -19,6 +19,7 @@
#include <iomanip>
#include <iomanip>
#include <fstream>
#include <fstream>
#include <algorithm>
#include <algorithm>
#include "modbus/ModbusClient.h"
#include "modbus/ModbusRTUMaster.h"
#include "modbus/ModbusRTUMaster.h"
#include "modbus/ModbusHelpers.h"
#include "modbus/ModbusHelpers.h"
#include "MTR.h"
#include "MTR.h"
...
@@ -181,7 +182,7 @@ namespace uniset
...
@@ -181,7 +182,7 @@ namespace uniset
return
0
;
return
0
;
}
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
bool
setAddress
(
Modbus
RTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
ModbusRTU
::
ModbusAddr
newAddr
)
bool
setAddress
(
Modbus
Client
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
ModbusRTU
::
ModbusAddr
newAddr
)
{
{
try
try
{
{
...
@@ -197,7 +198,7 @@ namespace uniset
...
@@ -197,7 +198,7 @@ namespace uniset
return
false
;
return
false
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
bool
setBaudRate
(
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
mtrBaudRate
br
)
bool
setBaudRate
(
uniset
::
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
mtrBaudRate
br
)
{
{
try
try
{
{
...
@@ -213,7 +214,7 @@ namespace uniset
...
@@ -213,7 +214,7 @@ namespace uniset
return
false
;
return
false
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
bool
setStopBit
(
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
bool
state
)
bool
setStopBit
(
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
bool
state
)
{
{
try
try
{
{
...
@@ -230,7 +231,7 @@ namespace uniset
...
@@ -230,7 +231,7 @@ namespace uniset
return
false
;
return
false
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
bool
setParity
(
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
mtrParity
p
)
bool
setParity
(
uniset
::
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
mtrParity
p
)
{
{
try
try
{
{
...
@@ -246,7 +247,7 @@ namespace uniset
...
@@ -246,7 +247,7 @@ namespace uniset
return
false
;
return
false
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
bool
setDataBits
(
Modbus
RTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
mtrDataBits
d
)
bool
setDataBits
(
Modbus
Client
*
mb
,
ModbusRTU
::
ModbusAddr
addr
,
mtrDataBits
d
)
{
{
try
try
{
{
...
@@ -262,7 +263,7 @@ namespace uniset
...
@@ -262,7 +263,7 @@ namespace uniset
return
false
;
return
false
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
std
::
string
getModelNumber
(
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
)
std
::
string
getModelNumber
(
uniset
::
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
addr
)
{
{
try
try
{
{
...
@@ -277,7 +278,7 @@ namespace uniset
...
@@ -277,7 +278,7 @@ namespace uniset
return
""
;
return
""
;
}
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
std
::
string
getSerialNumber
(
Modbus
RTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
addr
)
std
::
string
getSerialNumber
(
Modbus
Client
*
mb
,
ModbusRTU
::
ModbusAddr
addr
)
{
{
try
try
{
{
...
@@ -408,8 +409,10 @@ namespace uniset
...
@@ -408,8 +409,10 @@ namespace uniset
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
void
update_communication_params
(
ModbusRTU
::
ModbusAddr
reg
,
ModbusRTU
::
ModbusData
data
,
void
update_communication_params
(
ModbusRTU
::
ModbusAddr
reg
,
ModbusRTU
::
ModbusData
data
,
Modbus
RTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
&
addr
,
int
verb
)
Modbus
Client
*
mb
,
ModbusRTU
::
ModbusAddr
&
addr
,
int
verb
)
{
{
auto
mbrtu
=
dynamic_cast
<
ModbusRTUMaster
*>
(
mb
);
if
(
reg
==
regAddress
)
if
(
reg
==
regAddress
)
{
{
addr
=
data
;
addr
=
data
;
...
@@ -424,39 +427,46 @@ namespace uniset
...
@@ -424,39 +427,46 @@ namespace uniset
if
(
speed
!=
ComPort
::
ComSpeed0
)
if
(
speed
!=
ComPort
::
ComSpeed0
)
{
{
mb
->
setSpeed
(
speed
);
if
(
mbrtu
)
{
if
(
verb
)
mbrtu
->
setSpeed
(
speed
);
cout
<<
"(mtr-setup): speed is set to "
if
(
verb
)
<<
ComPort
::
getSpeed
(
speed
)
<<
endl
;
cout
<<
"(mtr-setup): speed is set to "
<<
ComPort
::
getSpeed
(
speed
)
<<
endl
;
}
}
}
}
}
else
if
(
reg
==
regStopBit
)
else
if
(
reg
==
regStopBit
)
{
{
if
(
data
==
0
)
if
(
mbrtu
)
mb
->
setStopBits
(
ComPort
::
OneBit
);
{
else
if
(
data
==
1
)
if
(
data
==
0
)
mb
->
setStopBits
(
ComPort
::
TwoBits
);
mbrtu
->
setStopBits
(
ComPort
::
OneBit
);
else
return
;
else
if
(
data
==
1
)
mbrtu
->
setStopBits
(
ComPort
::
TwoBits
);
else
return
;
if
(
verb
)
if
(
verb
)
cout
<<
"(mtr-setup): number of stop bits is set to "
cout
<<
"(mtr-setup): number of stop bits is set to "
<<
data
+
1
<<
endl
;
<<
data
+
1
<<
endl
;
}
}
}
else
if
(
reg
==
regParity
)
else
if
(
reg
==
regParity
)
{
{
if
(
data
!=
0
&&
data
!=
1
&&
data
!=
2
)
if
(
data
!=
0
&&
data
!=
1
&&
data
!=
2
)
return
;
return
;
mb
->
setParity
(
get_parity
(
data
));
if
(
mbrtu
)
{
if
(
verb
)
mbrtu
->
setParity
(
get_parity
(
data
));
cout
<<
"(mtr-setup): parity is set to "
if
(
verb
)
<<
(
data
?
((
data
==
1
)
?
"odd"
:
"even"
)
:
"no"
)
<<
endl
;
cout
<<
"(mtr-setup): parity is set to "
<<
(
data
?
((
data
==
1
)
?
"odd"
:
"even"
)
:
"no"
)
<<
endl
;
}
}
}
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
bool
send_param
(
Modbus
RTUMaster
*
mb
,
DataMap
&
dmap
,
ModbusRTU
::
ModbusAddr
addr
,
int
verb
)
bool
send_param
(
Modbus
Client
*
mb
,
DataMap
&
dmap
,
ModbusRTU
::
ModbusAddr
addr
,
int
verb
)
{
{
if
(
!
mb
)
if
(
!
mb
)
{
{
...
@@ -546,7 +556,7 @@ namespace uniset
...
@@ -546,7 +556,7 @@ namespace uniset
return
false
;
return
false
;
}
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
MTR
::
MTRError
update_configuration
(
ModbusRTUMaster
*
mb
,
ModbusRTU
::
ModbusAddr
slaveaddr
,
MTR
::
MTRError
update_configuration
(
ModbusClient
*
mb
,
ModbusRTU
::
ModbusAddr
slaveaddr
,
const
std
::
string
&
mtrconfile
,
int
verb
)
const
std
::
string
&
mtrconfile
,
int
verb
)
{
{
std
::
string
m
=
MTR
::
getModelNumber
(
mb
,
slaveaddr
);
std
::
string
m
=
MTR
::
getModelNumber
(
mb
,
slaveaddr
);
...
...
include/modbus/ModbusHelpers.h
View file @
b7dbca76
...
@@ -10,10 +10,11 @@ namespace uniset
...
@@ -10,10 +10,11 @@ namespace uniset
{
{
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
class
ModbusRTUMaster
;
class
ModbusRTUMaster
;
class
ModbusClient
;
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
namespace
ModbusHelpers
namespace
ModbusHelpers
{
{
ModbusRTU
::
ModbusAddr
autodetectSlave
(
ModbusRTUMaster
*
m
,
ModbusRTU
::
ModbusAddr
autodetectSlave
(
uniset
::
ModbusClient
*
m
,
ModbusRTU
::
ModbusAddr
beg
=
0
,
ModbusRTU
::
ModbusAddr
beg
=
0
,
ModbusRTU
::
ModbusAddr
end
=
255
,
ModbusRTU
::
ModbusAddr
end
=
255
,
ModbusRTU
::
ModbusData
reg
=
0
,
ModbusRTU
::
ModbusData
reg
=
0
,
...
...
src/Communications/Modbus/ModbusHelpers.cc
View file @
b7dbca76
...
@@ -37,7 +37,7 @@ namespace uniset
...
@@ -37,7 +37,7 @@ namespace uniset
ComPort
::
ComSpeed0
ComPort
::
ComSpeed0
};
};
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
ModbusAddr
ModbusHelpers
::
autodetectSlave
(
Modbus
RTUMaster
*
m
,
ModbusAddr
ModbusHelpers
::
autodetectSlave
(
Modbus
Client
*
m
,
ModbusAddr
beg
,
ModbusAddr
end
,
ModbusAddr
beg
,
ModbusAddr
end
,
ModbusData
reg
,
ModbusData
reg
,
SlaveFunctionCode
fn
)
SlaveFunctionCode
fn
)
...
...
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