Commit b7dbca76 authored by Pavel Vainerman's avatar Pavel Vainerman

(MTR): добавил возможность чтения через TCP для mtr-read и mtr-setup

parent b7529808
...@@ -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
......
...@@ -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("\nRTU 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("\nTCP 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( ModbusRTUMaster* mb, ModbusRTU::ModbusAddr addr, static void readMTR( ModbusClient* 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( ModbusRTUMaster* mb, ModbusRTU::ModbusAddr addr, void readMTR( ModbusClient* 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);
......
...@@ -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("\nRTU 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("\nTCP 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;
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
namespace uniset namespace uniset
{ {
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
class ModbusRTUMaster; class ModbusClient;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
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;
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
......
...@@ -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( ModbusRTUMaster* mb, ModbusRTU::ModbusAddr addr, ModbusRTU::ModbusAddr newAddr ) bool setAddress( ModbusClient* 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( ModbusRTUMaster* mb, ModbusRTU::ModbusAddr addr, mtrDataBits d ) bool setDataBits( ModbusClient* 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( ModbusRTUMaster* mb, ModbusRTU::ModbusAddr addr ) std::string getSerialNumber( ModbusClient* 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,
ModbusRTUMaster* mb, ModbusRTU::ModbusAddr& addr, int verb ) ModbusClient* 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( ModbusRTUMaster* mb, DataMap& dmap, ModbusRTU::ModbusAddr addr, int verb ) bool send_param( ModbusClient* 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);
......
...@@ -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,
......
...@@ -37,7 +37,7 @@ namespace uniset ...@@ -37,7 +37,7 @@ namespace uniset
ComPort::ComSpeed0 ComPort::ComSpeed0
}; };
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusAddr ModbusHelpers::autodetectSlave( ModbusRTUMaster* m, ModbusAddr ModbusHelpers::autodetectSlave( ModbusClient* m,
ModbusAddr beg, ModbusAddr end, ModbusAddr beg, ModbusAddr end,
ModbusData reg, ModbusData reg,
SlaveFunctionCode fn ) SlaveFunctionCode fn )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment