Commit c2ece263 authored by Pavel Vainerman's avatar Pavel Vainerman

(Utilities): реализовал в mbrtuslave-echo возможность указывать

несколько слов данных (3) для использования в качестве ответа.
parent f3c0af54
......@@ -16,7 +16,9 @@ MBSlave::MBSlave( ModbusRTU::ModbusAddr addr, const std::string dev, const std::
// prev(ModbusRTU::erNoError),
// askCount(0),
verbose(false),
replyVal(-1)
replyVal(-1),
replyVal2(-1),
replyVal3(-1)
{
// int replyTimeout = uni_atoi( conf->getArgParam("--reply-timeout",it.getProp("reply_timeout")).c_str() );
// if( replyTimeout <= 0 )
......@@ -153,8 +155,15 @@ ModbusRTU::mbErrCode MBSlave::readInputStatus( ReadInputStatusMessage& query,
bcnt++;
for( int i=0; i<bcnt; i++ )
{
if( i == 1 )
reply.addData(replyVal2);
else if( i == 2 )
reply.addData(replyVal3);
else
reply.addData(replyVal);
}
}
return ModbusRTU::erNoError;
}
......@@ -180,7 +189,14 @@ mbErrCode MBSlave::readInputRegisters( ReadInputMessage& query,
for( ; num<query.count; num++, reg++ )
{
if( replyVal != -1 )
{
if( num == 1 && replyVal2 != -1 )
reply.addData(replyVal2);
else if( num == 2 && replyVal3 != -1 )
reply.addData(replyVal3);
else
reply.addData(replyVal);
}
else
reply.addData(reg);
}
......@@ -217,7 +233,14 @@ ModbusRTU::mbErrCode MBSlave::readOutputRegisters(
for( ; num<query.count; num++, reg++ )
{
if( replyVal != -1 )
{
if( num == 1 && replyVal2 != -1 )
reply.addData(replyVal2);
else if( num == 2 && replyVal3 != -1 )
reply.addData(replyVal3);
else
reply.addData(replyVal);
}
else
reply.addData(reg);
}
......
......@@ -23,6 +23,14 @@ class MBSlave
{
replyVal = val;
}
inline void setReply2( long val )
{
replyVal2 = val;
}
inline void setReply3( long val )
{
replyVal3 = val;
}
void execute(); /*!< основной цикл работы */
......@@ -103,6 +111,8 @@ class MBSlave
FileList flist;
#endif
long replyVal;
long replyVal2;
long replyVal3;
private:
};
......
......@@ -29,9 +29,11 @@ static void print_help()
printf("[-s|--speed] speed - 9600,14400,19200,38400,57600,115200. Default: 38400.\n");
printf("[-y|--use485F] - use RS485 Fastwel.\n");
printf("[-v|--verbose] - Print all messages to stdout\n");
printf("[-c|--const-reply] val - Reply val for all queries\n");
printf("[-c|--const-reply] val1 [val2 val3] - Reply val for all queries\n");
}
// --------------------------------------------------------------------------
static char* checkArg( int ind, int argc, char* argv[] );
// --------------------------------------------------------------------------
int main( int argc, char **argv )
{
int optindex = 0;
......@@ -44,6 +46,8 @@ int main( int argc, char **argv )
DebugStream dlog;
int use485 = 0;
int replyVal=-1;
int replyVal2=-1;
int replyVal3=-1;
try
{
......@@ -81,6 +85,10 @@ int main( int argc, char **argv )
case 'c':
replyVal = uni_atoi(optarg);
if( checkArg(optind,argc,argv) )
replyVal2 = uni_atoi(argv[optind]);
if( checkArg(optind+1,argc,argv) )
replyVal3 = uni_atoi(argv[optind+1]);
break;
case '?':
......@@ -105,6 +113,10 @@ int main( int argc, char **argv )
mbs.setVerbose(verb);
if( replyVal!=-1 )
mbs.setReply(replyVal);
if( replyVal2!=-1 )
mbs.setReply2(replyVal2);
if( replyVal3!=-1 )
mbs.setReply3(replyVal3);
mbs.execute();
}
catch( ModbusRTU::mbException& ex )
......@@ -127,3 +139,11 @@ int main( int argc, char **argv )
return 0;
}
// --------------------------------------------------------------------------
char* checkArg( int i, int argc, char* argv[] )
{
if( i<argc && (argv[i])[0]!='-' )
return argv[i];
return 0;
}
// --------------------------------------------------------------------------
......@@ -148,7 +148,7 @@ int main( int argc, char **argv )
reg = ModbusRTU::str2mbData(argv[optind]);
if( checkArg(optind+1,argc,argv) )
dat = uni_atoi(argv[optind+1]);
count = ModbusRTU::str2mbData(argv[optind+1]);
break;
case 'o':
......
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