Commit 9b195da5 authored by Ivan Donchevskiy's avatar Ivan Donchevskiy

Merge branch 'master' of git.eter:/projects/uniset into utf8

Conflicts: IDL/Processes/IOController_i.idl conf/libuniset.spec extensions/ModbusSlave/MBSlave.cc extensions/lib/IOBase.cc src/Various/NCRestorer_XML.cc
parents 0337d45f 86b7fd9a
...@@ -291,6 +291,7 @@ interface IONotifyController_i : IOController_i ...@@ -291,6 +291,7 @@ interface IONotifyController_i : IOController_i
ThresholdState state; ThresholdState state;
long tv_sec; /*!< время последнего изменения датчика, секунды (gettimeofday) */ long tv_sec; /*!< время последнего изменения датчика, секунды (gettimeofday) */
long tv_usec; /*!< время последнего изменения датчика, мксек (gettimeofday) */ long tv_usec; /*!< время последнего изменения датчика, мксек (gettimeofday) */
boolean inverse; /*!< инверсная логика */
}; };
typedef sequence<ThresholdInfo> ThresholdInfoSeq; typedef sequence<ThresholdInfo> ThresholdInfoSeq;
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
%define oname uniset %define oname uniset
Name: libuniset Name: libuniset
Version: 0.98 Version: 0.97
Release: eter1 Release: eter56
Summary: UniSet - library for building distributed industrial control systems Summary: UniSet - library for building distributed industrial control systems
License: GPL License: GPL
Group: Development/C++ Group: Development/C++
...@@ -183,8 +183,9 @@ rm -f %buildroot%_libdir/*.la ...@@ -183,8 +183,9 @@ rm -f %buildroot%_libdir/*.la
%exclude %_pkgconfigdir/libUniSet.pc %exclude %_pkgconfigdir/libUniSet.pc
%changelog %changelog
* Wed Mar 03 2010 Ilya Shpigor <elly@altlinux.org> 0.98-eter1
- new build for Sisyphus with utf8 support * Fri Mar 12 2010 Pavel Vainerman <pv@altlinux.ru> 0.97-eter55
- new build
* Sat Feb 13 2010 Pavel Vainerman <pv@altlinux.ru> 0.97-eter54 * Sat Feb 13 2010 Pavel Vainerman <pv@altlinux.ru> 0.97-eter54
- fixed bug in codegen - fixed bug in codegen
......
...@@ -21,6 +21,8 @@ shm(0), ...@@ -21,6 +21,8 @@ shm(0),
initPause(0), initPause(0),
test_id(DefaultObjectId), test_id(DefaultObjectId),
askcount_id(DefaultObjectId), askcount_id(DefaultObjectId),
respond_id(DefaultObjectId),
respond_invert(false),
askCount(0), askCount(0),
activated(false), activated(false),
activateTimeout(500), activateTimeout(500),
...@@ -63,6 +65,9 @@ prefix(prefix) ...@@ -63,6 +65,9 @@ prefix(prefix)
mbregFromID = conf->getArgInt("--" + prefix + "-reg-from-id",it.getProp("reg_from_id")); mbregFromID = conf->getArgInt("--" + prefix + "-reg-from-id",it.getProp("reg_from_id"));
dlog[Debug::INFO] << myname << "(init): mbregFromID=" << mbregFromID << endl; dlog[Debug::INFO] << myname << "(init): mbregFromID=" << mbregFromID << endl;
respond_id = conf->getSensorID(conf->getArgParam("--" + prefix + "-respond-id",it.getProp("respond_id")));
respond_invert = conf->getArgInt("--" + prefix + "-respond-invert",it.getProp("respond_invert"));
string stype = conf->getArgParam("--" + prefix + "-type",it.getProp("type")); string stype = conf->getArgParam("--" + prefix + "-type",it.getProp("type"));
if( stype == "RTU" ) if( stype == "RTU" )
...@@ -96,16 +101,18 @@ prefix(prefix) ...@@ -96,16 +101,18 @@ prefix(prefix)
{ {
string iaddr = conf->getArgParam("--" + prefix + "-inet-addr",it.getProp("iaddr")); string iaddr = conf->getArgParam("--" + prefix + "-inet-addr",it.getProp("iaddr"));
if( iaddr.empty() ) if( iaddr.empty() )
throw UniSetTypes::SystemError(myname+"(MBSlave): Unknown TCP server address. Use: --mbs-inet-addr [ XXX.XXX.XXX.XXX| hostname ]"); throw UniSetTypes::SystemError(myname+"(MBSlave): Unknown TCP server address. Use: --prefix-inet-addr [ XXX.XXX.XXX.XXX| hostname ]");
int port = conf->getArgPInt("--" + prefix + "-inet-port",it.getProp("iport"), 502); int port = conf->getArgPInt("--" + prefix + "-inet-port",it.getProp("iport"), 502);
dlog[Debug::INFO] << myname << "(init): type=TCP myaddr=" << ModbusRTU::addr2str(addr)
<< " inet=" << iaddr << " port=" << port << endl;
ost::InetAddress ia(iaddr.c_str()); ost::InetAddress ia(iaddr.c_str());
mbslot = new ModbusTCPServerSlot(ia,port); mbslot = new ModbusTCPServerSlot(ia,port);
thr = new ThreadCreator<MBSlave>(this,&MBSlave::execute_tcp); thr = new ThreadCreator<MBSlave>(this,&MBSlave::execute_tcp);
dlog[Debug::INFO] << myname << "(init): type=TCP myaddr=" << ModbusRTU::addr2str(addr) dlog[Debug::INFO] << myname << "(init): init TCP connection ok. " << " inet=" << iaddr << " port=" << port << endl;
<< " inet=" << iaddr << " port=" << port << endl;
} }
else else
throw UniSetTypes::SystemError(myname+"(MBSlave): Unknown slave type. Use: --mbs-type [RTU|TCP]"); throw UniSetTypes::SystemError(myname+"(MBSlave): Unknown slave type. Use: --mbs-type [RTU|TCP]");
...@@ -119,7 +126,7 @@ prefix(prefix) ...@@ -119,7 +126,7 @@ prefix(prefix)
mbslot->connectWriteOutput( sigc::mem_fun(this, &MBSlave::writeOutputRegisters) ); mbslot->connectWriteOutput( sigc::mem_fun(this, &MBSlave::writeOutputRegisters) );
mbslot->connectWriteSingleOutput( sigc::mem_fun(this, &MBSlave::writeOutputSingleRegister) ); mbslot->connectWriteSingleOutput( sigc::mem_fun(this, &MBSlave::writeOutputSingleRegister) );
if( findArgParam("--mbs-allow-setdatetime",conf->getArgc(),conf->getArgv())!=-1 ) if( findArgParam("--" + prefix + "-allow-setdatetime",conf->getArgc(),conf->getArgv())!=-1 )
mbslot->connectSetDateTime( sigc::mem_fun(this, &MBSlave::setDateTime) ); mbslot->connectSetDateTime( sigc::mem_fun(this, &MBSlave::setDateTime) );
mbslot->connectFileTransfer( sigc::mem_fun(this, &MBSlave::fileTransfer) ); mbslot->connectFileTransfer( sigc::mem_fun(this, &MBSlave::fileTransfer) );
...@@ -306,6 +313,23 @@ void MBSlave::execute_rtu() ...@@ -306,6 +313,23 @@ void MBSlave::execute_rtu()
} }
} }
if( respond_id != DefaultObjectId )
{
bool state = ptTimeout.checkTime() ? false : true;
if( respond_invert )
state ^= true;
try
{
shm->localSaveState(ditRespond,respond_id,state,getId());
}
catch(Exception& ex)
{
dlog[Debug::CRIT] << myname
<< "(execute_rtu): (respond) " << ex << std::endl;
}
}
if( askcount_id!=DefaultObjectId ) if( askcount_id!=DefaultObjectId )
{ {
try try
...@@ -370,6 +394,22 @@ void MBSlave::execute_tcp() ...@@ -370,6 +394,22 @@ void MBSlave::execute_tcp()
} }
} }
if( respond_id != DefaultObjectId )
{
bool state = ptTimeout.checkTime() ? false : true;
if( respond_invert )
state ^= true;
try
{
shm->localSaveState(ditRespond,respond_id,state,getId());
}
catch(Exception& ex)
{
dlog[Debug::CRIT] << myname
<< "(execute_rtu): (respond) " << ex << std::endl;
}
}
if( askcount_id!=DefaultObjectId ) if( askcount_id!=DefaultObjectId )
{ {
try try
...@@ -729,6 +769,7 @@ void MBSlave::initIterators() ...@@ -729,6 +769,7 @@ void MBSlave::initIterators()
shm->initAIterator(aitHeartBeat); shm->initAIterator(aitHeartBeat);
shm->initAIterator(aitAskCount); shm->initAIterator(aitAskCount);
shm->initDIterator(ditRespond);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void MBSlave::help_print( int argc, const char* const* argv ) void MBSlave::help_print( int argc, const char* const* argv )
...@@ -738,9 +779,11 @@ void MBSlave::help_print( int argc, const char* const* argv ) ...@@ -738,9 +779,11 @@ void MBSlave::help_print( int argc, const char* const* argv )
cout << "--prefix-heartbeat-max - Максимальное значение heartbeat-счётчика для данного процесса. По умолчанию 10." << endl; cout << "--prefix-heartbeat-max - Максимальное значение heartbeat-счётчика для данного процесса. По умолчанию 10." << endl;
cout << "--prefix-ready-timeout - Время ожидания готовности SM к работе, мсек. (-1 - ждать 'вечно')" << endl; cout << "--prefix-ready-timeout - Время ожидания готовности SM к работе, мсек. (-1 - ждать 'вечно')" << endl;
cout << "--prefix-initPause - Задержка перед инициализацией (время на активизация процесса)" << endl; cout << "--prefix-initPause - Задержка перед инициализацией (время на активизация процесса)" << endl;
cout << "--prefix-notRespondSensor - датчик связи для данного процесса " << endl; cout << "--prefix-respond-id - respond sensor id" << 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-recv-timeout - Таймаут на ожидание ответа." << endl; cout << "--prefix-timeout msec - timeout for check link" << 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;
...@@ -774,7 +817,7 @@ MBSlave* MBSlave::init_mbslave( int argc, const char* const* argv, UniSetTypes:: ...@@ -774,7 +817,7 @@ MBSlave* MBSlave::init_mbslave( int argc, const char* const* argv, UniSetTypes::
} }
dlog[Debug::INFO] << "(mbslave): name = " << name << "(" << ID << ")" << endl; dlog[Debug::INFO] << "(mbslave): name = " << name << "(" << ID << ")" << endl;
return new MBSlave(ID,icID,ic); return new MBSlave(ID,icID,ic,prefix);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
std::ostream& operator<<( std::ostream& os, MBSlave::IOProperty& p ) std::ostream& operator<<( std::ostream& os, MBSlave::IOProperty& p )
......
...@@ -168,6 +168,10 @@ class MBSlave: ...@@ -168,6 +168,10 @@ class MBSlave:
IOController::AIOStateList::iterator aitAskCount; IOController::AIOStateList::iterator aitAskCount;
UniSetTypes::ObjectId askcount_id; UniSetTypes::ObjectId askcount_id;
IOController::DIOStateList::iterator ditRespond;
UniSetTypes::ObjectId respond_id;
bool respond_invert;
PassiveTimer ptTimeout; PassiveTimer ptTimeout;
ModbusRTU::mbErrCode prev; ModbusRTU::mbErrCode prev;
long askCount; long askCount;
......
...@@ -369,10 +369,20 @@ void IOBase::processingThreshold( IOBase* it, SMInterface* shm, bool force ) ...@@ -369,10 +369,20 @@ void IOBase::processingThreshold( IOBase* it, SMInterface* shm, bool force )
// cout << "val=" << val << " set=" << set << endl; // cout << "val=" << val << " set=" << set << endl;
// Проверка нижнего предела // Проверка нижнего предела
// значение должно быть меньше lowLimit-чуствительность // значение должно быть меньше lowLimit-чуствительность
if (it->ti.inverse)
{
if( val <= (it->ti.lowlimit-it->ti.sensibility) )
set = true;
else if( val >= (it->ti.hilimit+it->ti.sensibility) )
set = false;
}
else
{
if( val <= (it->ti.lowlimit-it->ti.sensibility) ) if( val <= (it->ti.lowlimit-it->ti.sensibility) )
set = false; set = false;
else if( val >= (it->ti.hilimit+it->ti.sensibility) ) else if( val >= (it->ti.hilimit+it->ti.sensibility) )
set = true; set = true;
}
// cout << "thresh: set=" << set << endl; // cout << "thresh: set=" << set << endl;
processingAsDI(it,set,shm,force); processingAsDI(it,set,shm,force);
...@@ -527,6 +537,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -527,6 +537,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
b->ti.lowlimit = it.getIntProp("lowlimit"); b->ti.lowlimit = it.getIntProp("lowlimit");
b->ti.hilimit = it.getIntProp("hilimit"); b->ti.hilimit = it.getIntProp("hilimit");
b->ti.sensibility = it.getIntProp("sensibility"); b->ti.sensibility = it.getIntProp("sensibility");
b->ti.inverse = it.getIntProp("inverse");
} }
} }
// else // else
......
...@@ -469,7 +469,7 @@ bool NCRestorer_XML::getThresholdInfo( UniXML& xml,xmlNode* node, ...@@ -469,7 +469,7 @@ bool NCRestorer_XML::getThresholdInfo( UniXML& xml,xmlNode* node,
bool NCRestorer_XML::check_thresholds_item( UniXML_iterator& it ) bool NCRestorer_XML::check_thresholds_item( UniXML_iterator& it )
{ {
// формат тот же как и <sensors> // формат тот же как и <sensors>
return check_list_item(it); return check_consumer_item(it);
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void NCRestorer_XML::setReadThresholdItem( ReaderSlot sl ) void NCRestorer_XML::setReadThresholdItem( ReaderSlot sl )
......
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