Commit f623e49a authored by Pavel Vainerman's avatar Pavel Vainerman

(MBSlave): добавил обработку аргументов командной строки (и конф. файла) для…

(MBSlave): добавил обработку аргументов командной строки (и конф. файла) для --xxx-after-send-pause и --xxx-reply-timeout
parent 50e567e9
...@@ -66,6 +66,12 @@ prefix(prefix) ...@@ -66,6 +66,12 @@ prefix(prefix)
respond_id = conf->getSensorID(conf->getArgParam("--" + prefix + "-respond-id",it.getProp("respond_id"))); respond_id = conf->getSensorID(conf->getArgParam("--" + prefix + "-respond-id",it.getProp("respond_id")));
respond_invert = conf->getArgInt("--" + prefix + "-respond-invert",it.getProp("respond_invert")); respond_invert = conf->getArgInt("--" + prefix + "-respond-invert",it.getProp("respond_invert"));
timeout_t reply_tout = conf->getArgInt("--" + prefix + "-reply-timeout",it.getProp("replyTimeout"));
if( reply_tout == 0 )
reply_tout = 3000;
timeout_t aftersend_pause = conf->getArgInt("--" + prefix + "-aftersend-pause",it.getProp("afterSendPause"));
string stype = conf->getArgParam("--" + prefix + "-type",it.getProp("type")); string stype = conf->getArgParam("--" + prefix + "-type",it.getProp("type"));
if( stype == "RTU" ) if( stype == "RTU" )
...@@ -85,8 +91,8 @@ prefix(prefix) ...@@ -85,8 +91,8 @@ prefix(prefix)
ModbusRTUSlaveSlot* rs = new ModbusRTUSlaveSlot(dev,use485F,transmitCtl); ModbusRTUSlaveSlot* rs = new ModbusRTUSlaveSlot(dev,use485F,transmitCtl);
rs->setSpeed(speed); rs->setSpeed(speed);
rs->setRecvTimeout(2000); rs->setRecvTimeout(2000);
// rs->setAfterSendPause(afterSend); rs->setAfterSendPause(aftersend_pause);
// rs->setReplyTimeout(replyTimeout); rs->setReplyTimeout(reply_tout);
rs->setLog(dlog); rs->setLog(dlog);
mbslot = rs; mbslot = rs;
...@@ -107,9 +113,13 @@ prefix(prefix) ...@@ -107,9 +113,13 @@ prefix(prefix)
<< " inet=" << iaddr << " port=" << port << endl; << " inet=" << iaddr << " port=" << port << endl;
ost::InetAddress ia(iaddr.c_str()); ost::InetAddress ia(iaddr.c_str());
mbslot = new ModbusTCPServerSlot(ia,port); ModbusTCPServerSlot* mbtcp = new ModbusTCPServerSlot(ia,port);
thr = new ThreadCreator<MBSlave>(this,&MBSlave::execute_tcp);
mbtcp->setAfterSendPause(aftersend_pause);
mbtcp->setReplyTimeout(reply_tout);
mbslot = mbtcp;
thr = new ThreadCreator<MBSlave>(this,&MBSlave::execute_tcp);
dinfo << myname << "(init): init TCP connection ok. " << " inet=" << iaddr << " port=" << port << endl; dinfo << myname << "(init): init TCP connection ok. " << " inet=" << iaddr << " port=" << port << endl;
} }
else else
...@@ -857,9 +867,14 @@ void MBSlave::help_print( int argc, const char* const* argv ) ...@@ -857,9 +867,14 @@ void MBSlave::help_print( int argc, const char* const* argv )
cout << "--prefix-initPause - Задержка перед инициализацией (время на активизация процесса)" << endl; cout << "--prefix-initPause - Задержка перед инициализацией (время на активизация процесса)" << endl;
cout << "--prefix-force 1 - Читать данные из SM каждый раз, а не по изменению." << endl; cout << "--prefix-force 1 - Читать данные из SM каждый раз, а не по изменению." << endl;
cout << "--prefix-respond-id - respond sensor id" << endl; cout << "--prefix-respond-id - respond sensor id" << endl;
cout << "--prefix-respond-invert [0|1] - invert respond logic" << endl; cout << "--prefix-respond-invert [0|1] - invert respond logic" << endl;
cout << "--prefix-sm-ready-timeout - время на ожидание старта SM" << endl; cout << "--prefix-sm-ready-timeout - время на ожидание старта SM" << endl;
cout << "--prefix-timeout msec - timeout for check link" << endl; cout << "--prefix-timeout msec - timeout for check link" << endl;
cout << "--prefix-after-send-pause msec - принудительная пауза после посылки ответа. По умолчанию: 0" << endl;
cout << "--prefix-reply-timeout msec - Контрольное время для формирования ответа. " << endl
<< " Если обработка запроса превысит это время, ответ не будет послан (timeout)." << endl
<< " По умолчанию: 3 сек" << endl;
cout << "--prefix-allow-setdatetime - On set date and time (0x50) modbus function" << endl; cout << "--prefix-allow-setdatetime - On set date and time (0x50) modbus function" << endl;
cout << "--prefix-my-addr - адрес текущего узла" << endl; cout << "--prefix-my-addr - адрес текущего узла" << endl;
cout << "--prefix-type [RTU|TCP] - modbus server type." << endl; cout << "--prefix-type [RTU|TCP] - modbus server type." << endl;
......
...@@ -1484,7 +1484,7 @@ ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessa ...@@ -1484,7 +1484,7 @@ ModbusRTU::mbErrCode ModbusServer::replySetDateTime( ModbusRTU::SetDateTimeMessa
(*dlog)[Debug::WARN] << "(replySetDateTime): settimeofday err: " << strerror(errno) << endl; (*dlog)[Debug::WARN] << "(replySetDateTime): settimeofday err: " << strerror(errno) << endl;
} }
else if( dlog && dlog->is_warn() ) else if( dlog && dlog->is_warn() )
(*dlog)[Debug::WARN] << "(replySetDateTime): gettimeofday err: " << strerror(errno) << endl; (*dlog).warn() << "(replySetDateTime): gettimeofday err: " << strerror(errno) << endl;
return ModbusRTU::erOperationFailed; return ModbusRTU::erOperationFailed;
} }
...@@ -1501,13 +1501,13 @@ mbErrCode ModbusServer::send( ModbusMessage& msg ) ...@@ -1501,13 +1501,13 @@ mbErrCode ModbusServer::send( ModbusMessage& msg )
if( msg.len > MAXLENPACKET + szModbusHeader ) if( msg.len > MAXLENPACKET + szModbusHeader )
{ {
dlog.warn() << "(send): длина пакета больше разрешённой..." << endl; dwarn << "(send): длина пакета больше разрешённой..." << endl;
return erPacketTooLong; return erPacketTooLong;
} }
if( tmProcessing.checkTime() ) if( tmProcessing.checkTime() )
{ {
dlog.warn() << "(send): reply timeout(" << tmProcessing.getInterval() << ")...!!!" << endl; dwarn << "(send): reply timeout(" << tmProcessing.getInterval() << ")...!!!" << endl;
return erTimeOut; return erTimeOut;
} }
...@@ -1518,9 +1518,8 @@ mbErrCode ModbusServer::send( ModbusMessage& msg ) ...@@ -1518,9 +1518,8 @@ mbErrCode ModbusServer::send( ModbusMessage& msg )
len -= szCRC; len -= szCRC;
} }
// printf("send to %02x type=%d size=%d\n",m.dest,(m.type&TypeMask),slen);
if( dlog.is_info() ) dinfo << "(send): data(" << len << " bytes): " << msg << endl;
dlog.info() << "(send): data(" << len << " bytes): " << msg << endl;
try try
{ {
...@@ -1528,7 +1527,7 @@ mbErrCode ModbusServer::send( ModbusMessage& msg ) ...@@ -1528,7 +1527,7 @@ mbErrCode ModbusServer::send( ModbusMessage& msg )
} }
catch( Exception& ex ) // SystemError catch( Exception& ex ) // SystemError
{ {
dlog.crit() << "(send): " << ex << endl; dcrit << "(send): " << ex << endl;
return erHardwareError; return erHardwareError;
} }
......
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