Commit 1add40ff authored by Pavel Vainerman's avatar Pavel Vainerman

(MBExchange):

- исправлена ошибка в считывании свойств - если недоступна SM сделан выход по SIGTERM (mbtcpserver-echo): переименовал аргумент командной строка --ignore-addr --> --reply-all (более понятно).
parent c20d49c3
......@@ -14,7 +14,7 @@ static struct option longopts[] = {
{ "verbose", no_argument, 0, 'v' },
{ "myaddr", required_argument, 0, 'a' },
{ "port", required_argument, 0, 'p' },
{ "ignore-addr", no_argument, 0, 'x' },
{ "reply-all", no_argument, 0, 'r' },
{ "const-reply", required_argument, 0, 'c' },
{ NULL, 0, 0, 0 }
};
......@@ -26,7 +26,7 @@ static void print_help()
printf("[-v|--verbose] - Print all messages to stdout\n");
printf("[-i|--iaddr] ip - Server listen ip. Default 127.0.0.1\n");
printf("[-a|--myaddr] addr - Modbus address for master. Default: 0x01.\n");
printf("[-x|--ignore-addr] - Ignore modbus RTU-address.\n");
printf("[-r|--reply-all] - Reply to all RTU-addresses.\n");
printf("[-p|--port] port - Server port. Default: 502.\n");
printf("[-c|--const-reply] val - Reply 'val' for all queries\n");
}
......@@ -48,7 +48,7 @@ int main( int argc, char **argv )
try
{
while( (opt = getopt_long(argc, argv, "hva:p:i:bxc:",longopts,&optindex)) != -1 )
while( (opt = getopt_long(argc, argv, "hva:p:i:brc:",longopts,&optindex)) != -1 )
{
switch (opt)
{
......@@ -72,7 +72,7 @@ int main( int argc, char **argv )
verb = 1;
break;
case 'x':
case 'r':
ignoreAddr = true;
break;
......
......@@ -408,6 +408,8 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
%changelog
* Fri Jan 23 2015 Pavel Vainerman <pv@altlinux.ru> 2.0-alt12
- refactoring LogAgregator,LogServer,LogSesson --> use shared_ptr
- fixed bug in MBExchange (read prop_prefix)
- mbtcpserver-echo: rename command line parameter: --ignore-addr ==> --reply-all
* Sat Jan 17 2015 Pavel Vainerman <pv@altlinux.ru> 2.0-alt11
- refactoring "exit process"
......
......@@ -231,6 +231,7 @@
<item id="51" iotype="DI" mbaddr="0x01" mbfunc="0x03" mbreg="0x01" ntit="1" mbtype="rtu" name="Input51_S" priority="Medium" rs="5" textname="Команда 2"/>
<item id="52" iotype="DI" mbaddr="0x01" mbfunc="0x06" mbreg="0x02" nbit="1" mbtype="rtu" name="Input52_S" priority="Medium" rs="5" textname="Команда 2"/>
<item id="53" iotype="DI" mbaddr="0x01" mbfunc="0x03" mbreg="0x01" nbit="2" mbtype="rtu" name="Input53_S" priority="Medium" rs="5" textname="Команда 2"/>
<item id="67" iotype="DI" mbaddr="0x01" mbfunc="0x03" mbtype="rtu" name="Input67_S" priority="Medium" rs="5" textname="Bad reg test"/>
<item id="54" iotype="AI" name="AI54_S" textname="AI sensor 54" rrd="1" rrd1_ds="GAUGE:20:U:U"/>
<item id="55" iotype="AI" name="AI55_S" textname="AI sensor 55" rrd="1" rrd1_ds="GAUGE:20:U:U"/>
<item id="56" iotype="AI" name="AI56_S" textname="AI sensor 56" rrd="2" rrd2_ds="COUNTER:20:U:U"/>
......
......@@ -202,10 +202,12 @@ void MBExchange::waitSMReady()
if( !shm->waitSMready(ready_timeout, 50) )
{
ostringstream err;
err << myname << "(waitSMReady): failed waiting SharedMemory " << ready_timeout << " msec";
err << myname << "(waitSMReady): failed waiting SharedMemory " << ready_timeout << " msec. ==> TERMINATE!";
dcrit << err.str() << endl;
if( checkProcActive() )
throw SystemError(err.str());
raise(SIGTERM);
//if( checkProcActive() )
// throw SystemError(err.str());
}
}
// -----------------------------------------------------------------------------
......@@ -2001,7 +2003,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML::iterator& it, MBExchange::RTU
}
else
{
string sr( IOBase::initProp(it,"mbreg",prefix,false) );
string sr( IOBase::initProp(it,"mbreg",prop_prefix,false) );
if( sr.empty() )
{
dcrit << myname << "(initItem): Unknown 'mbreg' for " << it.getProp("name") << endl;
......@@ -2011,7 +2013,7 @@ bool MBExchange::initRegInfo( RegInfo* r, UniXML::iterator& it, MBExchange::RTU
}
r->mbfunc = ModbusRTU::fnUnknown;
string f( IOBase::initProp(it,"mbfunc",prefix,false) );
string f( IOBase::initProp(it,"mbfunc",prop_prefix,false) );
if( !f.empty() )
{
r->mbfunc = (ModbusRTU::SlaveFunctionCode)UniSetTypes::uni_atoi(f.c_str());
......@@ -2069,6 +2071,9 @@ bool MBExchange::initItem( UniXML::iterator& it )
if( !initRSProperty(p,it) )
return false;
if( p.t_ai != DefaultObjectId ) // пороговые датчики в список обмена вносить не надо.
return true;
string addr( IOBase::initProp(it,"mbaddr",prop_prefix,false) );
if( addr.empty() )
addr = defaultMBaddr;
......
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