Commit 79a9ccab authored by Pavel Vainerman's avatar Pavel Vainerman

Modbus test utils: show miscroseconds for 'roundtrip'

parent 4bd6d8d0
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include <string> #include <string>
#include <sstream> #include <sstream>
#include <getopt.h> #include <getopt.h>
#include <chrono>
#include "Debug.h" #include "Debug.h"
#include "modbus/ModbusRTUMaster.h" #include "modbus/ModbusRTUMaster.h"
#include "modbus/ModbusHelpers.h" #include "modbus/ModbusHelpers.h"
...@@ -96,7 +97,22 @@ enum Command ...@@ -96,7 +97,22 @@ enum Command
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
static char* checkArg( int ind, int argc, char* argv[] ); static char* checkArg( int ind, int argc, char* argv[] );
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
struct Interval
{
using time_point = std::chrono::time_point<std::chrono::steady_clock>;
Interval()
:tmStart(std::chrono::steady_clock::now())
{}
uint64_t microseconds()
{
return std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - tmStart).count();
}
time_point tmStart;
};
// --------------------------------------------------------------------------
int main( int argc, char** argv ) int main( int argc, char** argv )
{ {
// std::ios::sync_with_stdio(false); // std::ios::sync_with_stdio(false);
...@@ -413,7 +429,6 @@ int main( int argc, char** argv ) ...@@ -413,7 +429,6 @@ int main( int argc, char** argv )
{ {
try try
{ {
switch(cmd) switch(cmd)
{ {
case cmdRead01: case cmdRead01:
...@@ -426,12 +441,15 @@ int main( int argc, char** argv ) ...@@ -426,12 +441,15 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
Interval i;
ModbusRTU::ReadCoilRetMessage ret = mb.read01(slaveaddr, reg, count); ModbusRTU::ReadCoilRetMessage ret = mb.read01(slaveaddr, reg, count);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): " << ret << endl;
cout << "(reply): count=" << (int)ret.bcnt << endl; cout << "(reply): count=" << (int)ret.bcnt
<< " [" << i.microseconds() << " ms]"
<< endl;
for( int i = 0; i < ret.bcnt; i++ ) for( int i = 0; i < ret.bcnt; i++ )
{ {
...@@ -453,12 +471,15 @@ int main( int argc, char** argv ) ...@@ -453,12 +471,15 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
Interval i;
ModbusRTU::ReadInputStatusRetMessage ret = mb.read02(slaveaddr, reg, count); ModbusRTU::ReadInputStatusRetMessage ret = mb.read02(slaveaddr, reg, count);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): " << ret << endl;
cout << "(reply): count=" << (int)ret.bcnt << endl; cout << "(reply): count=" << (int)ret.bcnt
<< " [" << i.microseconds() << " ms]"
<< endl;
for( int i = 0; i < ret.bcnt; i++ ) for( int i = 0; i < ret.bcnt; i++ )
{ {
...@@ -480,12 +501,15 @@ int main( int argc, char** argv ) ...@@ -480,12 +501,15 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
Interval i;
ModbusRTU::ReadOutputRetMessage ret = mb.read03(slaveaddr, reg, count); ModbusRTU::ReadOutputRetMessage ret = mb.read03(slaveaddr, reg, count);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): " << ret << endl;
cout << "(reply): count=" << ModbusRTU::dat2str(ret.count) << endl; cout << "(reply): count=" << ModbusRTU::dat2str(ret.count)
<< " [" << i.microseconds() << " ms]"
<< endl;
for( size_t i = 0; i < ret.count; i++ ) for( size_t i = 0; i < ret.count; i++ )
{ {
...@@ -510,12 +534,15 @@ int main( int argc, char** argv ) ...@@ -510,12 +534,15 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
Interval i;
ModbusRTU::ReadInputRetMessage ret = mb.read04(slaveaddr, reg, count); ModbusRTU::ReadInputRetMessage ret = mb.read04(slaveaddr, reg, count);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): " << ret << endl;
cout << "(reply): count=" << ModbusRTU::dat2str(ret.count) << endl; cout << "(reply): count=" << ModbusRTU::dat2str(ret.count)
<< " [" << i.microseconds() << " ms]"
<< endl;
for( size_t i = 0; i < ret.count; i++ ) for( size_t i = 0; i < ret.count; i++ )
{ {
...@@ -540,10 +567,13 @@ int main( int argc, char** argv ) ...@@ -540,10 +567,13 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
Interval i;
ModbusRTU::MEIMessageRetRDI ret = mb.read4314(slaveaddr, devID, objID); ModbusRTU::MEIMessageRetRDI ret = mb.read4314(slaveaddr, devID, objID);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): "
<< "[" << i.microseconds() << " ms] "
<< ret << endl;
else else
cout << "(reply): devID='" << (int)ret.devID << "' objNum='" << (int)ret.objNum << "'" << endl << ret.dlist << endl; cout << "(reply): devID='" << (int)ret.devID << "' objNum='" << (int)ret.objNum << "'" << endl << ret.dlist << endl;
} }
...@@ -559,10 +589,13 @@ int main( int argc, char** argv ) ...@@ -559,10 +589,13 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
Interval i;
ModbusRTU::ForceSingleCoilRetMessage ret = mb.write05(slaveaddr, reg, (bool)val); ModbusRTU::ForceSingleCoilRetMessage ret = mb.write05(slaveaddr, reg, (bool)val);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): "
<< " [" << i.microseconds() << " ms] "
<< ret << endl;
} }
break; break;
...@@ -576,10 +609,13 @@ int main( int argc, char** argv ) ...@@ -576,10 +609,13 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
Interval i;
ModbusRTU::WriteSingleOutputRetMessage ret = mb.write06(slaveaddr, reg, val); ModbusRTU::WriteSingleOutputRetMessage ret = mb.write06(slaveaddr, reg, val);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): "
<< " [" << i.microseconds() << " ms] "
<< ret << endl;
} }
break; break;
...@@ -596,10 +632,13 @@ int main( int argc, char** argv ) ...@@ -596,10 +632,13 @@ int main( int argc, char** argv )
ModbusRTU::ForceCoilsMessage msg(slaveaddr, reg); ModbusRTU::ForceCoilsMessage msg(slaveaddr, reg);
ModbusRTU::DataBits b(val); ModbusRTU::DataBits b(val);
msg.addData(b); msg.addData(b);
Interval i;
ModbusRTU::ForceCoilsRetMessage ret = mb.write0F(msg); ModbusRTU::ForceCoilsRetMessage ret = mb.write0F(msg);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): "
<< " [" << i.microseconds() << " ms] "
<< ret << endl;
} }
break; break;
...@@ -619,10 +658,13 @@ int main( int argc, char** argv ) ...@@ -619,10 +658,13 @@ int main( int argc, char** argv )
for( int i = 0; i < count; i++ ) for( int i = 0; i < count; i++ )
msg.addData(val); msg.addData(val);
Interval i;
ModbusRTU::WriteOutputRetMessage ret = mb.write10(msg); ModbusRTU::WriteOutputRetMessage ret = mb.write10(msg);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): "
<< " [" << i.microseconds() << " ms] "
<< ret << endl;
} }
break; break;
...@@ -636,12 +678,15 @@ int main( int argc, char** argv ) ...@@ -636,12 +678,15 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
Interval i;
ModbusRTU::DiagnosticRetMessage ret = mb.diag08(slaveaddr, subfunc, dat); ModbusRTU::DiagnosticRetMessage ret = mb.diag08(slaveaddr, subfunc, dat);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): " << ret << endl;
cout << "(reply): count=" << ModbusRTU::dat2str(ret.count) << endl; cout << "(reply): count=" << ModbusRTU::dat2str(ret.count)
<< " [" << i.microseconds() << " ms]"
<< endl;
for( size_t i = 0; i < ret.count; i++ ) for( size_t i = 0; i < ret.count; i++ )
{ {
...@@ -719,7 +764,10 @@ int main( int argc, char** argv ) ...@@ -719,7 +764,10 @@ int main( int argc, char** argv )
tofile = s.str(); tofile = s.str();
} }
Interval i;
mb.fileTransfer( slaveaddr, reg, tofile, tout); mb.fileTransfer( slaveaddr, reg, tofile, tout);
if( verb )
cout << i.microseconds() << " ms" << endl;
} }
break; break;
......
...@@ -84,6 +84,23 @@ enum Command ...@@ -84,6 +84,23 @@ enum Command
}; };
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
static char* checkArg( int ind, int argc, char* argv[] ); static char* checkArg( int ind, int argc, char* argv[] );
// --------------------------------------------------------------------------
struct Interval
{
using time_point = std::chrono::time_point<std::chrono::steady_clock>;
Interval()
:tmStart(std::chrono::steady_clock::now())
{}
uint64_t microseconds()
{
return std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - tmStart).count();
}
time_point tmStart;
};
// --------------------------------------------------------------------------
int main( int argc, char** argv ) int main( int argc, char** argv )
{ {
// std::ios::sync_with_stdio(false); // std::ios::sync_with_stdio(false);
...@@ -352,8 +369,6 @@ int main( int argc, char** argv ) ...@@ -352,8 +369,6 @@ int main( int argc, char** argv )
if( ncycles > 0 ) if( ncycles > 0 )
nc = ncycles; nc = ncycles;
std::chrono::time_point<std::chrono::system_clock> start, end;
while( nc ) while( nc )
{ {
try try
...@@ -370,17 +385,15 @@ int main( int argc, char** argv ) ...@@ -370,17 +385,15 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
start = std::chrono::system_clock::now(); Interval i;
ModbusRTU::ReadCoilRetMessage ret = mb.read01(slaveaddr, reg, count); ModbusRTU::ReadCoilRetMessage ret = mb.read01(slaveaddr, reg, count);
end = std::chrono::system_clock::now();
int elapsed_usec = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): " << ret << endl;
cout << "(reply): count=" << (int)ret.bcnt cout << "(reply): count=" << (int)ret.bcnt
<< "(" << ModbusRTU::dat2str(ret.bcnt) << ")" << "(" << ModbusRTU::dat2str(ret.bcnt) << ")"
<< " usec: " << elapsed_usec << " [" << i.microseconds() << " ms]"
<< endl; << endl;
for( int i = 0; i < ret.bcnt; i++ ) for( int i = 0; i < ret.bcnt; i++ )
...@@ -406,17 +419,15 @@ int main( int argc, char** argv ) ...@@ -406,17 +419,15 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
start = std::chrono::system_clock::now(); Interval i;
ModbusRTU::ReadInputStatusRetMessage ret = mb.read02(slaveaddr, reg, count); ModbusRTU::ReadInputStatusRetMessage ret = mb.read02(slaveaddr, reg, count);
end = std::chrono::system_clock::now();
int elapsed_usec = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): " << ret << endl;
cout << "(reply): count=" << (int)ret.bcnt cout << "(reply): count=" << (int)ret.bcnt
<< "(" << ModbusRTU::dat2str(ret.bcnt) << ")" << "(" << ModbusRTU::dat2str(ret.bcnt) << ")"
<< " usec: " << elapsed_usec << " [" << i.microseconds() << " ms]"
<< endl; << endl;
for( int i = 0; i < ret.bcnt; i++ ) for( int i = 0; i < ret.bcnt; i++ )
...@@ -442,17 +453,15 @@ int main( int argc, char** argv ) ...@@ -442,17 +453,15 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
start = std::chrono::system_clock::now(); Interval i;
ModbusRTU::ReadOutputRetMessage ret = mb.read03(slaveaddr, reg, count); ModbusRTU::ReadOutputRetMessage ret = mb.read03(slaveaddr, reg, count);
end = std::chrono::system_clock::now();
int elapsed_usec = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): " << ret << endl;
cout << "(reply): count=" << (int)ret.count cout << "(reply): count=" << (int)ret.count
<< "(" << ModbusRTU::dat2str(ret.count) << ")" << "(" << ModbusRTU::dat2str(ret.count) << ")"
<< " usec: " << elapsed_usec << " [" << i.microseconds() << " ms]"
<< endl; << endl;
for( size_t i = 0; i < ret.count; i++ ) for( size_t i = 0; i < ret.count; i++ )
...@@ -483,17 +492,15 @@ int main( int argc, char** argv ) ...@@ -483,17 +492,15 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
start = std::chrono::system_clock::now(); Interval i;
ModbusRTU::ReadInputRetMessage ret = mb.read04(slaveaddr, reg, count); ModbusRTU::ReadInputRetMessage ret = mb.read04(slaveaddr, reg, count);
end = std::chrono::system_clock::now();
int elapsed_usec = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): " << ret << endl;
cout << "(reply): count=" << (int)ret.count cout << "(reply): count=" << (int)ret.count
<< "(" << ModbusRTU::dat2str(ret.count) << ")" << "(" << ModbusRTU::dat2str(ret.count) << ")"
<< " usec: " << elapsed_usec << " [" << i.microseconds() << " ms]"
<< endl; << endl;
for( size_t i = 0; i < ret.count; i++ ) for( size_t i = 0; i < ret.count; i++ )
...@@ -524,10 +531,13 @@ int main( int argc, char** argv ) ...@@ -524,10 +531,13 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
Interval i;
ModbusRTU::MEIMessageRetRDI ret = mb.read4314(slaveaddr, devID, objID); ModbusRTU::MEIMessageRetRDI ret = mb.read4314(slaveaddr, devID, objID);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): "
<< "[" << i.microseconds() << " ms] "
<< ret << endl;
else else
cout << "(reply): devID='" << (int)ret.devID << "' objNum='" << (int)ret.objNum << "'" << endl << ret.dlist << endl; cout << "(reply): devID='" << (int)ret.devID << "' objNum='" << (int)ret.objNum << "'" << endl << ret.dlist << endl;
} }
...@@ -543,14 +553,12 @@ int main( int argc, char** argv ) ...@@ -543,14 +553,12 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
start = std::chrono::system_clock::now(); Interval i;
ModbusRTU::ForceSingleCoilRetMessage ret = mb.write05(slaveaddr, reg, (bool)val); ModbusRTU::ForceSingleCoilRetMessage ret = mb.write05(slaveaddr, reg, (bool)val);
end = std::chrono::system_clock::now();
int elapsed_usec = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
if( verb ) if( verb )
cout << "(reply): " << ret cout << "(reply): " << "[" << i.microseconds() << " ms] "
<< " usec: " << elapsed_usec << ret
<< endl; << endl;
} }
break; break;
...@@ -565,14 +573,12 @@ int main( int argc, char** argv ) ...@@ -565,14 +573,12 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
start = std::chrono::system_clock::now(); Interval i;
ModbusRTU::WriteSingleOutputRetMessage ret = mb.write06(slaveaddr, reg, val); ModbusRTU::WriteSingleOutputRetMessage ret = mb.write06(slaveaddr, reg, val);
end = std::chrono::system_clock::now();
int elapsed_usec = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
if( verb ) if( verb )
cout << "(reply): " << ret cout << "(reply): " << "[" << i.microseconds() << " ms] "
<< " usec: " << elapsed_usec << ret
<< endl; << endl;
} }
...@@ -591,10 +597,12 @@ int main( int argc, char** argv ) ...@@ -591,10 +597,12 @@ int main( int argc, char** argv )
ModbusRTU::ForceCoilsMessage msg(slaveaddr, reg); ModbusRTU::ForceCoilsMessage msg(slaveaddr, reg);
ModbusRTU::DataBits b(val); ModbusRTU::DataBits b(val);
msg.addData(b); msg.addData(b);
Interval i;
ModbusRTU::ForceCoilsRetMessage ret = mb.write0F(msg); ModbusRTU::ForceCoilsRetMessage ret = mb.write0F(msg);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): [" << i.microseconds() << " ms] "
<< ret << endl;
} }
break; break;
...@@ -617,10 +625,7 @@ int main( int argc, char** argv ) ...@@ -617,10 +625,7 @@ int main( int argc, char** argv )
cout << "}" << endl; cout << "}" << endl;
} }
start = std::chrono::system_clock::now();
ModbusRTU::WriteOutputMessage msg(slaveaddr, reg); ModbusRTU::WriteOutputMessage msg(slaveaddr, reg);
end = std::chrono::system_clock::now();
int elapsed_usec = std::chrono::duration_cast<std::chrono::microseconds>(end - start).count();
for( const auto& v : data ) for( const auto& v : data )
{ {
...@@ -639,11 +644,12 @@ int main( int argc, char** argv ) ...@@ -639,11 +644,12 @@ int main( int argc, char** argv )
msg.addData(v.d.v); msg.addData(v.d.v);
} }
Interval i;
ModbusRTU::WriteOutputRetMessage ret = mb.write10(msg); ModbusRTU::WriteOutputRetMessage ret = mb.write10(msg);
if( verb ) if( verb )
cout << "(reply): " << ret cout << "(reply): [" << i.microseconds() << " ms] "
<< " usec: " << elapsed_usec << ret
<< endl; << endl;
} }
...@@ -659,12 +665,15 @@ int main( int argc, char** argv ) ...@@ -659,12 +665,15 @@ int main( int argc, char** argv )
<< endl; << endl;
} }
Interval i;
ModbusRTU::DiagnosticRetMessage ret = mb.diag08(slaveaddr, subfunc, dat); ModbusRTU::DiagnosticRetMessage ret = mb.diag08(slaveaddr, subfunc, dat);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): " << ret << endl;
cout << "(reply): count=" << ModbusRTU::dat2str(ret.count) << endl; cout << "(reply): count=" << ModbusRTU::dat2str(ret.count)
<< " [" << i.microseconds() << " ms]"
<< endl;
for( size_t i = 0; i < ret.count; i++ ) for( size_t i = 0; i < ret.count; i++ )
{ {
......
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