Commit 15fb591c authored by Pavel Vainerman's avatar Pavel Vainerman

добавил в mb(rtu|tcp)test возможность записывать сразу группу регистров

(write10). Хотя одно и тоже значение.
parent 7ad567f9
...@@ -41,7 +41,7 @@ static void print_help() ...@@ -41,7 +41,7 @@ static void print_help()
printf("[--write05] slaveaddr reg val - write val to reg for slaveaddr\n"); printf("[--write05] slaveaddr reg val - write val to reg for slaveaddr\n");
printf("[--write06] slaveaddr reg val - write val to reg for slaveaddr\n"); printf("[--write06] slaveaddr reg val - write val to reg for slaveaddr\n");
printf("[--write0F] slaveaddr reg val - write val to reg for slaveaddr\n"); printf("[--write0F] slaveaddr reg val - write val to reg for slaveaddr\n");
printf("[--write10] slaveaddr reg val - write val to reg for slaveaddr\n"); printf("[--write10] slaveaddr reg val count - write val to reg for slaveaddr\n");
printf("[--read01] slaveaddr reg count - read from reg (from slaveaddr). Default: count=1\n"); printf("[--read01] slaveaddr reg count - read from reg (from slaveaddr). Default: count=1\n");
printf("[--read02] slaveaddr reg count - read from reg (from slaveaddr). Default: count=1\n"); printf("[--read02] slaveaddr reg count - read from reg (from slaveaddr). Default: count=1\n");
printf("[--read03] slaveaddr reg count - read from reg (from slaveaddr). Default: count=1\n"); printf("[--read03] slaveaddr reg count - read from reg (from slaveaddr). Default: count=1\n");
...@@ -180,6 +180,9 @@ int main( int argc, char **argv ) ...@@ -180,6 +180,9 @@ int main( int argc, char **argv )
else else
val = ModbusRTU::str2mbData(argv[optind+1]); val = ModbusRTU::str2mbData(argv[optind+1]);
} }
if( cmd == cmdWrite10 && checkArg(optind+2,argc,argv) )
count = ModbusRTU::str2mbData(argv[optind+2]);
} }
break; break;
...@@ -470,14 +473,17 @@ int main( int argc, char **argv ) ...@@ -470,14 +473,17 @@ int main( int argc, char **argv )
{ {
if( verb ) if( verb )
{ {
cout << "write06: slaveaddr=" << ModbusRTU::addr2str(slaveaddr) cout << "write10: slaveaddr=" << ModbusRTU::addr2str(slaveaddr)
<< " reg=" << ModbusRTU::dat2str(reg) << " reg=" << ModbusRTU::dat2str(reg)
<< " val=" << ModbusRTU::dat2str(val) << " val=" << ModbusRTU::dat2str(val)
<< " count=" << count
<< endl; << endl;
} }
ModbusRTU::WriteOutputMessage msg(slaveaddr,reg); ModbusRTU::WriteOutputMessage msg(slaveaddr,reg);
msg.addData(val); for( int i=0; i<count; i++ )
msg.addData(val);
ModbusRTU::WriteOutputRetMessage ret = mb.write10(msg); ModbusRTU::WriteOutputRetMessage ret = mb.write10(msg);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): " << ret << endl;
......
...@@ -33,7 +33,7 @@ static void print_help() ...@@ -33,7 +33,7 @@ static void print_help()
printf("[--write05] slaveaddr reg val - write val to reg for slaveaddr\n"); printf("[--write05] slaveaddr reg val - write val to reg for slaveaddr\n");
printf("[--write06] slaveaddr reg val - write val to reg for slaveaddr\n"); printf("[--write06] slaveaddr reg val - write val to reg for slaveaddr\n");
printf("[--write0F] slaveaddr reg val - write val to reg for slaveaddr\n"); printf("[--write0F] slaveaddr reg val - write val to reg for slaveaddr\n");
printf("[--write10] slaveaddr reg val - write val to reg for slaveaddr\n"); printf("[--write10] slaveaddr reg val count - write val to reg for slaveaddr\n");
printf("[--read01] slaveaddr reg count - read from reg (from slaveaddr). Default: count=1\n"); printf("[--read01] slaveaddr reg count - read from reg (from slaveaddr). Default: count=1\n");
printf("[--read02] slaveaddr reg count - read from reg (from slaveaddr). Default: count=1\n"); printf("[--read02] slaveaddr reg count - read from reg (from slaveaddr). Default: count=1\n");
printf("[--read03] slaveaddr reg count - read from reg (from slaveaddr). Default: count=1\n"); printf("[--read03] slaveaddr reg count - read from reg (from slaveaddr). Default: count=1\n");
...@@ -59,6 +59,8 @@ enum Command ...@@ -59,6 +59,8 @@ enum Command
cmdWrite10 cmdWrite10
}; };
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
static char* checkArg( int ind, int argc, char* argv[] );
// --------------------------------------------------------------------------
int main( int argc, char **argv ) int main( int argc, char **argv )
{ {
...@@ -107,10 +109,10 @@ int main( int argc, char **argv ) ...@@ -107,10 +109,10 @@ int main( int argc, char **argv )
return 1; return 1;
} }
if( (argv[optind])[0]!='-' ) if( checkArg(optind,argc,argv) )
reg = ModbusRTU::str2mbData(argv[optind]); reg = ModbusRTU::str2mbData(argv[optind]);
if( optind+1<argc && (argv[optind+1])[0]!='-' ) if( checkArg(optind+1,argc,argv) )
count = uni_atoi(argv[optind+1]); count = uni_atoi(argv[optind+1]);
break; break;
...@@ -126,16 +128,15 @@ int main( int argc, char **argv ) ...@@ -126,16 +128,15 @@ int main( int argc, char **argv )
if( cmd == cmdNOP ) if( cmd == cmdNOP )
cmd = cmdWrite10; cmd = cmdWrite10;
slaveaddr = ModbusRTU::str2mbAddr(optarg); slaveaddr = ModbusRTU::str2mbAddr(optarg);
if( optind+1 > argc )
if( !checkArg(optind,argc,argv) )
{ {
cerr << "write command error: bad or no arguments..." << endl; cerr << "write command error: bad or no arguments..." << endl;
return 1; return 1;
} }
reg = ModbusRTU::str2mbData(argv[optind]);
if( (argv[optind])[0]!='-' )
reg = ModbusRTU::str2mbData(argv[optind]);
if( (argv[optind+1])[0]!='-' ) if( !checkArg(optind+1,argc,argv) )
{ {
if( (argv[optind+1])[0] == 'b' ) if( (argv[optind+1])[0] == 'b' )
{ {
...@@ -147,6 +148,9 @@ int main( int argc, char **argv ) ...@@ -147,6 +148,9 @@ int main( int argc, char **argv )
else else
val = ModbusRTU::str2mbData(argv[optind+1]); val = ModbusRTU::str2mbData(argv[optind+1]);
} }
if( cmd == cmdWrite10 && checkArg(optind+2,argc,argv) )
count = ModbusRTU::str2mbData(argv[optind+2]);
break; break;
case 'i': case 'i':
...@@ -363,14 +367,16 @@ int main( int argc, char **argv ) ...@@ -363,14 +367,16 @@ int main( int argc, char **argv )
{ {
if( verb ) if( verb )
{ {
cout << "write06: slaveaddr=" << ModbusRTU::addr2str(slaveaddr) cout << "write10: slaveaddr=" << ModbusRTU::addr2str(slaveaddr)
<< " reg=" << ModbusRTU::dat2str(reg) << " reg=" << ModbusRTU::dat2str(reg)
<< " val=" << ModbusRTU::dat2str(val) << " val=" << ModbusRTU::dat2str(val)
<< " count=" << count
<< endl; << endl;
} }
ModbusRTU::WriteOutputMessage msg(slaveaddr,reg); ModbusRTU::WriteOutputMessage msg(slaveaddr,reg);
msg.addData(val); for( int i=0; i<count; i++ )
msg.addData(val);
ModbusRTU::WriteOutputRetMessage ret = mb.write10(msg); ModbusRTU::WriteOutputRetMessage ret = mb.write10(msg);
if( verb ) if( verb )
cout << "(reply): " << ret << endl; cout << "(reply): " << ret << endl;
...@@ -420,3 +426,11 @@ int main( int argc, char **argv ) ...@@ -420,3 +426,11 @@ int main( int argc, char **argv )
return 0; return 0;
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
char* checkArg( int i, int argc, char* argv[] )
{
if( i<argc && (argv[i])[0]!='-' )
return argv[i];
return 0;
}
// --------------------------------------------------------------------------
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