Commit 0c003eb4 authored by Pavel Vainerman's avatar Pavel Vainerman

(2.0): Поменял механизм "зависимостей". Реализовал на освное сигналов(sigc),…

(2.0): Поменял механизм "зависимостей". Реализовал на освное сигналов(sigc), сменил формат. Теперь задаётся свойством depend='', depend_value='', depend_off_value=''
parent 16e0864b
...@@ -7,13 +7,11 @@ using namespace UniSetTypes; ...@@ -7,13 +7,11 @@ using namespace UniSetTypes;
using namespace std; using namespace std;
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
NullController::NullController( ObjectId id, const string askdump, NullController::NullController( ObjectId id, const string& askdump,
const std::string s_filterField, const std::string& s_filterField,
const std::string s_filterValue, const std::string& s_filterValue,
const std::string c_filterField, const std::string& c_filterField,
const std::string c_filterValue, const std::string& c_filterValue,
const std::string d_filterField,
const std::string d_filterValue,
bool _dumpingToDB ): bool _dumpingToDB ):
IONotifyController(id), IONotifyController(id),
dumpingToDB(_dumpingToDB) dumpingToDB(_dumpingToDB)
...@@ -23,7 +21,6 @@ dumpingToDB(_dumpingToDB) ...@@ -23,7 +21,6 @@ dumpingToDB(_dumpingToDB)
NCRestorer_XML* askd = new NCRestorer_XML(askdump); NCRestorer_XML* askd = new NCRestorer_XML(askdump);
askd->setItemFilter(s_filterField, s_filterValue); askd->setItemFilter(s_filterField, s_filterValue);
askd->setConsumerFilter(c_filterField, c_filterValue); askd->setConsumerFilter(c_filterField, c_filterValue);
askd->setDependsFilter(d_filterField, d_filterValue);
restorer = askd; restorer = askd;
......
...@@ -10,13 +10,11 @@ class NullController: ...@@ -10,13 +10,11 @@ class NullController:
public IONotifyController public IONotifyController
{ {
public: public:
NullController( UniSetTypes::ObjectId id, const std::string restorfile, NullController( UniSetTypes::ObjectId id, const std::string& restorfile,
const std::string s_filterField="", const std::string& s_filterField="",
const std::string s_filterValue="", const std::string& s_filterValue="",
const std::string c_filterField="", const std::string& c_filterField="",
const std::string c_filterValue="", const std::string& c_filterValue="",
const std::string d_filterField="",
const std::string d_filterValue="",
bool _dumpingToDB=false ); bool _dumpingToDB=false );
virtual ~NullController(); virtual ~NullController();
......
...@@ -16,8 +16,6 @@ static void short_usage() ...@@ -16,8 +16,6 @@ static void short_usage()
<< " --s-filter-value value - значение для поля фильтрования списка датчиков \n" << " --s-filter-value value - значение для поля фильтрования списка датчиков \n"
<< " --c-filter-field name - поле для фильтрования списка заказчиков по каждому датчику\n" << " --c-filter-field name - поле для фильтрования списка заказчиков по каждому датчику\n"
<< " --c-filter-value value - значение для поля фильтрования списка заказчиков по каждому датчику\n" << " --c-filter-value value - значение для поля фильтрования списка заказчиков по каждому датчику\n"
<< " --d-filter-field name - поле для фильтрования списка зависимостей по каждому датчику\n"
<< " --d-filter-value value - значение для поля фильтрования списка зависимостей по каждому датчику\n"
<< " --dbDumping [0,1] - создавать ли dump-файл \n"; << " --dbDumping [0,1] - создавать ли dump-файл \n";
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
...@@ -68,13 +66,11 @@ int main(int argc, char** argv) ...@@ -68,13 +66,11 @@ int main(int argc, char** argv)
string s_fvalue = conf->getArgParam("--s-filter-value"); string s_fvalue = conf->getArgParam("--s-filter-value");
string c_field = conf->getArgParam("--c-filter-field"); string c_field = conf->getArgParam("--c-filter-field");
string c_fvalue = conf->getArgParam("--c-filter-value"); string c_fvalue = conf->getArgParam("--c-filter-value");
string d_field = conf->getArgParam("--d-filter-field");
string d_fvalue = conf->getArgParam("--d-filter-value");
// надо ли писать изменения в БД // надо ли писать изменения в БД
bool dbDumping = conf->getArgInt("--dbDumping"); bool dbDumping = conf->getArgInt("--dbDumping");
NullController nc(ID,askfile,s_field,s_fvalue,c_field,c_fvalue,d_field,d_fvalue,dbDumping); NullController nc(ID,askfile,s_field,s_fvalue,c_field,c_fvalue,dbDumping);
ObjectsActivator act; ObjectsActivator act;
act.addObject(static_cast<class UniSetObject*>(&nc)); act.addObject(static_cast<class UniSetObject*>(&nc));
act.run(false); act.run(false);
......
...@@ -218,7 +218,7 @@ long <xsl:value-of select="$CLASSNAME"/>_SK::getValue( UniSetTypes::ObjectId _si ...@@ -218,7 +218,7 @@ long <xsl:value-of select="$CLASSNAME"/>_SK::getValue( UniSetTypes::ObjectId _si
</xsl:if> </xsl:if>
</xsl:for-each> </xsl:for-each>
if( unideb.debugging(Debug::CRIT) ) if( unideb.debugging(Debug::CRIT) )
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(getValue): Обращение к неизвестному ДИСКРЕТНОМУ датчику sid=" unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(getValue): Обращение к неизвестному датчику sid="
&lt;&lt; _sid &lt;&lt; endl; &lt;&lt; _sid &lt;&lt; endl;
return 0; return 0;
......
...@@ -177,7 +177,7 @@ long <xsl:value-of select="$CLASSNAME"/>_SK::getValue( UniSetTypes::ObjectId _si ...@@ -177,7 +177,7 @@ long <xsl:value-of select="$CLASSNAME"/>_SK::getValue( UniSetTypes::ObjectId _si
</xsl:for-each> </xsl:for-each>
if( unideb.debugging(Debug::CRIT) ) if( unideb.debugging(Debug::CRIT) )
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(getValue): Обращение к неизвестному ДИСКРЕТНОМУ датчику sid=" unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(getValue): Обращение к неизвестному датчику sid="
&lt;&lt; _sid &lt;&lt; endl; &lt;&lt; _sid &lt;&lt; endl;
return 0; return 0;
......
...@@ -185,7 +185,7 @@ long <xsl:value-of select="$CLASSNAME"/>_SK::getValue( UniSetTypes::ObjectId _si ...@@ -185,7 +185,7 @@ long <xsl:value-of select="$CLASSNAME"/>_SK::getValue( UniSetTypes::ObjectId _si
} }
</xsl:for-each> </xsl:for-each>
if( unideb.debugging(Debug::CRIT) ) if( unideb.debugging(Debug::CRIT) )
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(getValue): Обращение к неизвестному ДИСКРЕТНОМУ датчику sid=" unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(getValue): Обращение к неизвестному датчику sid="
&lt;&lt; _sid &lt;&lt; endl; &lt;&lt; _sid &lt;&lt; endl;
} }
catch(Exception&amp; ex) catch(Exception&amp; ex)
......
...@@ -174,7 +174,7 @@ long <xsl:value-of select="$CLASSNAME"/>_SK::getValue( UniSetTypes::ObjectId _si ...@@ -174,7 +174,7 @@ long <xsl:value-of select="$CLASSNAME"/>_SK::getValue( UniSetTypes::ObjectId _si
return <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>; return <xsl:call-template name="setprefix"/><xsl:value-of select="@name"/>;
</xsl:for-each> </xsl:for-each>
unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(getValue): Обращение к неизвестному ДИСКРЕТНОМУ датчику sid=" unideb[Debug::CRIT] &lt;&lt; myname &lt;&lt; "(getValue): Обращение к неизвестному датчику sid="
&lt;&lt; _sid &lt;&lt; endl; &lt;&lt; _sid &lt;&lt; endl;
return 0; return 0;
} }
......
...@@ -9,17 +9,28 @@ ...@@ -9,17 +9,28 @@
in - входные регистры (только для чтения) in - входные регистры (только для чтения)
out - выходные регистры (запись) out - выходные регистры (запись)
--> -->
<Skel> <TestProc>
<settings> <settings>
<set name="class-name" val="Skel"/> <set name="class-name" val="TestProc"/>
<set name="msg-count" val="20"/> <set name="msg-count" val="30"/>
<set name="sleep-msec" val="150"/> <set name="sleep-msec" val="150"/>
</settings> </settings>
<smap> <variables>
<item name="changeTime" type="int" default="2000" min="0" comment="change state time" const="1" public="1" />
<item name="checkTime" type="int" default="3000" min="0" comment="check Working time" const="1" public="1" />
<item name="checkDependTime" type="int" default="5000" min="0" comment="check depend time" const="1" public="1" />
</variables>
<smap>
<!-- name - название переменной в конф. файле --> <!-- name - название переменной в конф. файле -->
<item name="on_s" vartype="in" comment="Тестовый вход" smTestID="1"/>
<item name="lamp_c" vartype="out" comment="Лампочка (тестовый выход)"/>
<!-- проверка работы механизма зависимостей -->
<item name="depend_c" vartype="out" comment="Датчик от которого зависит состояние другого"/>
<item name="d_check_s" vartype="in" comment="состояние зависимого датчика"/>
<item name="set_d_check_s" vartype="out" comment="для выставления датчика"/>
</smap> </smap>
<msgmap> <msgmap>
<!-- name - название переменной в конф. файле -->
</msgmap> </msgmap>
</Skel> </TestProc>
#include "Exceptions.h" #include "Exceptions.h"
#include "TestGen.h" #include "TestProc.h"
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
using namespace std; using namespace std;
using namespace UniSetTypes; using namespace UniSetTypes;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
TestGen::TestGen( UniSetTypes::ObjectId id, xmlNode* confnode ): TestProc::TestProc( UniSetTypes::ObjectId id, xmlNode* confnode ):
TestGen_SK( id, confnode ) TestProc_SK( id, confnode ),
state(false)
{ {
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
TestGen::~TestGen() TestProc::~TestProc()
{ {
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
TestGen::TestGen() TestProc::TestProc():
state(false)
{ {
cerr << ": init failed!!!!!!!!!!!!!!!"<< endl; cerr << ": init failed!!!!!!!!!!!!!!!"<< endl;
throw Exception(); throw Exception();
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void TestGen::step() void TestProc::step()
{ {
cout << "input2 state=" << in_input2_s << endl;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void TestGen::sensorInfo( SensorMessage *sm ) void TestProc::sysCommand( UniSetTypes::SystemMessage* sm )
{ {
if( sm->id == input1_s ) TestProc_SK::sysCommand(sm);
out_output1_c = in_input1_s; // sm->state if( sm->command == SystemMessage::StartUp || sm->command == SystemMessage::WatchDog )
askTimer(tmCheckDepend,checkDependTime);
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void TestGen::timerInfo( TimerMessage *tm ) void TestProc::sensorInfo( SensorMessage *sm )
{ {
dlog[Debug::INFO] << myname << "(sensorInfo): id=" << sm->id << " val=" << sm->value << endl;
if( sm->id == on_s )
{
if( sm->value )
{
dlog[Debug::LEVEL1] << myname << "(sensorInfo): START WORKING.." << endl;
askTimer(tmChange,changeTime);
}
else
{
askTimer(tmChange,0);
dlog[Debug::LEVEL1] << myname << "(sensorInfo): STOP WORKING.." << endl;
}
}
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
void TestGen::sigterm( int signo ) void TestProc::timerInfo( TimerMessage *tm )
{ {
TestGen_SK::sigterm(signo); if( tm->id == tmChange )
{
state^=true;
out_lamp_c = ( state ? lmpBLINK : lmpOFF );
dlog[Debug::LEVEL1] << myname << "(timerInfo): state=" << state << " lmp=" << out_lamp_c << endl;
askTimer(tmCheckWorking,checkTime); // reset timer
}
else if( tm->id == tmCheckWorking )
dlog[Debug::LEVEL1] << myname << "(timerInfo): WORKING FAIL!" << endl;
else if( tm->id == tmCheckDepend )
{
dlog[Debug::LEVEL1] << myname << "(timerInfo): Check depend..." << endl;
long test_val = 100;
// set depend 0...
setValue(depend_c,0);
setValue(set_d_check_s,test_val);
dlog[Debug::LEVEL1] << myname << "(timerInfo): check depend OFF: " << ( getValue(d_check_s) == 0 ? "OK" : "FAIL" ) << endl;
// set depend 1
setValue(depend_c,1);
dlog[Debug::LEVEL1] << myname << "(timerInfo): check depend ON: " << ( getValue(d_check_s) == test_val ? "OK" : "FAIL" ) << endl;
}
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#ifndef TestGen_H_ #ifndef TestProc_H_
#define TestGen_H_ #define TestProc_H_
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#include "TestGen_SK.h" #include "TestProc_SK.h"
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
class TestGen: class TestProc:
public TestGen_SK public TestProc_SK
{ {
public: public:
TestGen( UniSetTypes::ObjectId id, xmlNode* confnode = UniSetTypes::conf->getNode("TestGen") ); TestProc( UniSetTypes::ObjectId id, xmlNode* confnode = UniSetTypes::conf->getNode("TestProc") );
virtual ~TestGen(); virtual ~TestProc();
protected: protected:
TestGen(); TestProc();
enum Timers
{
tmChange,
tmCheckWorking,
tmCheckDepend
};
virtual void step(); virtual void step();
void sensorInfo( UniSetTypes::SensorMessage *sm ); virtual void sensorInfo( UniSetTypes::SensorMessage *sm );
void timerInfo( UniSetTypes::TimerMessage *tm ); virtual void timerInfo( UniSetTypes::TimerMessage *tm );
virtual void sigterm( int signo ); virtual void sysCommand( UniSetTypes::SystemMessage* sm );
private: private:
bool state;
}; };
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#endif // TestGen_H_ #endif // TestProc_H_
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -350,6 +350,7 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname ...@@ -350,6 +350,7 @@ mv -f %buildroot%python_sitelibdir_noarch/* %buildroot%python_sitelibdir/%oname
- remove deprecated function setState,getState,askState - remove deprecated function setState,getState,askState
use simple function: setValue,getValue,askSensor use simple function: setValue,getValue,askSensor
- possible use of the property 'iotype' in uniset-codegen - possible use of the property 'iotype' in uniset-codegen
- refactoring <depends> mechanism
* Tue Dec 10 2013 Pavel Vainerman <pv@altlinux.ru> 1.7-alt3 * Tue Dec 10 2013 Pavel Vainerman <pv@altlinux.ru> 1.7-alt3
- add RRDServer - add RRDServer
......
...@@ -33,6 +33,14 @@ ...@@ -33,6 +33,14 @@
</UniSet> </UniSet>
<dlog name="dlog"/> <dlog name="dlog"/>
<settings> <settings>
<TestProc name="TestProc"
on_s="Input1_S"
lamp_c="Lamp58_C"
depend_c="Input4_S"
d_check_s="Input6_S"
set_d_check_s="Input6_S"
/>
<IOControl name="IOControl"/> <IOControl name="IOControl"/>
<testnode id="1000" id2="-100" name="testnode"/> <testnode id="1000" id2="-100" name="testnode"/>
<SharedMemory name="SharedMemory" shmID="SharedMemory"> <SharedMemory name="SharedMemory" shmID="SharedMemory">
...@@ -160,11 +168,7 @@ ...@@ -160,11 +168,7 @@
<item id="3" iotype="DI" mbtcp="1" mbtcp_mbaddr="0x02" mbtcp_mbfunc="0x03" mbtcp_mbreg="0x02" mbtcp_mbtype="rtu" name="Input3_S" priority="Medium" textname="Команда 3"/> <item id="3" iotype="DI" mbtcp="1" mbtcp_mbaddr="0x02" mbtcp_mbfunc="0x03" mbtcp_mbreg="0x02" mbtcp_mbtype="rtu" name="Input3_S" priority="Medium" textname="Команда 3"/>
<item id="4" iotype="DI" mbaddr="0x02" mbfunc="0x04" mbreg="0x02" mbtype="rtu" name="Input4_S" priority="Medium" rs="2" textname="Команда 4"/> <item id="4" iotype="DI" mbaddr="0x02" mbfunc="0x04" mbreg="0x02" mbtype="rtu" name="Input4_S" priority="Medium" rs="2" textname="Команда 4"/>
<item id="5" iotype="DI" name="Input5_S" priority="Medium" textname="Команда 5" udp="2"/> <item id="5" iotype="DI" name="Input5_S" priority="Medium" textname="Команда 5" udp="2"/>
<item id="6" iotype="DI" name="Input6_S" priority="Medium" textname="Команда 6" udp="2"> <item id="6" iotype="DI" name="Input6_S" priority="Medium" textname="Команда 6" udp="2" depend="Input4_S"/>
<depends>
<depend name="Input4_S"/>
</depends>
</item>
<item id="7" iotype="DO" name="DO_C" priority="Medium" textname="Digital output"/> <item id="7" iotype="DO" name="DO_C" priority="Medium" textname="Digital output"/>
<item id="8" iotype="DO" name="DO1_C" priority="Medium" textname="Digital output"/> <item id="8" iotype="DO" name="DO1_C" priority="Medium" textname="Digital output"/>
<item default="1000" id="9" iotype="AO" name="AO_AS" precision="2" priority="Medium" rs="2" rs_channel="1" rs_jack="j1" rs_mbaddr="0x01" rs_mbfunc="0x06" rs_mbreg="0x02" rs_mbtype="rtu188" textname="Analog output"/> <item default="1000" id="9" iotype="AO" name="AO_AS" precision="2" priority="Medium" rs="2" rs_channel="1" rs_jack="j1" rs_mbaddr="0x01" rs_mbfunc="0x06" rs_mbreg="0x02" rs_mbtype="rtu188" textname="Analog output"/>
...@@ -207,6 +211,7 @@ ...@@ -207,6 +211,7 @@
<item id="55" iotype="AI" name="AI55_S" textname="AI sensor 55" 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"/> <item id="56" iotype="AI" name="AI56_S" textname="AI sensor 56" rrd="2" rrd2_ds="COUNTER:20:U:U"/>
<item id="57" iotype="AI" name="AI57_S" textname="AI sensor 57" rrd="2" rrd2_ds="DERIVE:20:U:U"/> <item id="57" iotype="AI" name="AI57_S" textname="AI sensor 57" rrd="2" rrd2_ds="DERIVE:20:U:U"/>
<item id="58" iotype="AO" name="Lamp58_C" textname="Lamp 58" rrd="1" rrd1_ds="GAUGE:20:U:U"/>
</sensors> </sensors>
<thresholds name="thresholds"> <thresholds name="thresholds">
<sensor iotype="AI" name="AI_AS"> <sensor iotype="AI" name="AI_AS">
...@@ -244,6 +249,7 @@ ...@@ -244,6 +249,7 @@
<item id="6009" name="MBMaster2"/> <item id="6009" name="MBMaster2"/>
<item id="6010" name="MBMultiMaster1"/> <item id="6010" name="MBMultiMaster1"/>
<item id="6011" name="RRDServer1"/> <item id="6011" name="RRDServer1"/>
<item id="6012" name="TestProc"/>
</objects> </objects>
</ObjectsMap> </ObjectsMap>
<messages idfromfile="1" name="messages"> <messages idfromfile="1" name="messages">
......
...@@ -18,8 +18,6 @@ void SharedMemory::help_print( int argc, const char* const* argv ) ...@@ -18,8 +18,6 @@ void SharedMemory::help_print( int argc, const char* const* argv )
cout << "--s-filter-value - Значение фильтра для загрузки списка датчиков." << endl; cout << "--s-filter-value - Значение фильтра для загрузки списка датчиков." << endl;
cout << "--c-filter-field - Фильтр для загрузки списка заказчиков." << endl; cout << "--c-filter-field - Фильтр для загрузки списка заказчиков." << endl;
cout << "--c-filter-value - Значение фильтр для загрузки списка заказчиков." << endl; cout << "--c-filter-value - Значение фильтр для загрузки списка заказчиков." << endl;
cout << "--d-filter-field - Фильтр для загрузки списка зависимостей." << endl;
cout << "--d-filter-value - Значение фильтр для загрузки списка зависимостей." << endl;
cout << "--wdt-device - Использовать в качестве WDT указанный файл." << endl; cout << "--wdt-device - Использовать в качестве WDT указанный файл." << endl;
cout << "--heartbeat-node - Загружать heartbeat датчики для указанного узла." << endl; cout << "--heartbeat-node - Загружать heartbeat датчики для указанного узла." << endl;
cout << "--heartbeat-check-time - период проверки 'счётчиков'. По умолчанию 1000 мсек" << endl; cout << "--heartbeat-check-time - период проверки 'счётчиков'. По умолчанию 1000 мсек" << endl;
...@@ -66,8 +64,6 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname ) ...@@ -66,8 +64,6 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname )
string s_fvalue = conf->getArgParam("--s-filter-value"); string s_fvalue = conf->getArgParam("--s-filter-value");
string c_field = conf->getArgParam("--c-filter-field"); string c_field = conf->getArgParam("--c-filter-field");
string c_fvalue = conf->getArgParam("--c-filter-value"); string c_fvalue = conf->getArgParam("--c-filter-value");
string d_field = conf->getArgParam("--d-filter-field");
string d_fvalue = conf->getArgParam("--d-filter-value");
string t_field = conf->getArgParam("--t-filter-field"); string t_field = conf->getArgParam("--t-filter-field");
string t_fvalue = conf->getArgParam("--t-filter-value"); string t_fvalue = conf->getArgParam("--t-filter-value");
...@@ -81,11 +77,9 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname ) ...@@ -81,11 +77,9 @@ SharedMemory::SharedMemory( ObjectId id, string datafile, std::string confname )
rxml->setItemFilter(s_field, s_fvalue); rxml->setItemFilter(s_field, s_fvalue);
rxml->setConsumerFilter(c_field, c_fvalue); rxml->setConsumerFilter(c_field, c_fvalue);
rxml->setDependsFilter(d_field, d_fvalue);
rxml->setThresholdsFilter(t_field, t_fvalue); rxml->setThresholdsFilter(t_field, t_fvalue);
restorer = rxml; restorer = rxml;
rxml->setReadItem( sigc::mem_fun(this,&SharedMemory::readItem) ); rxml->setReadItem( sigc::mem_fun(this,&SharedMemory::readItem) );
string wdt_dev = conf->getArgParam("--wdt-device"); string wdt_dev = conf->getArgParam("--wdt-device");
......
...@@ -39,7 +39,6 @@ static const int NoSafety = -1; ...@@ -39,7 +39,6 @@ static const int NoSafety = -1;
d_id(UniSetTypes::DefaultObjectId), d_id(UniSetTypes::DefaultObjectId),
d_value(0), d_value(0),
d_off_value(0), d_off_value(0),
d_iotype(UniversalIO::UnknownIOType),
t_ai(UniSetTypes::DefaultObjectId) t_ai(UniSetTypes::DefaultObjectId)
{} {}
...@@ -89,10 +88,9 @@ static const int NoSafety = -1; ...@@ -89,10 +88,9 @@ static const int NoSafety = -1;
// Зависимость (d - depend) // Зависимость (d - depend)
UniSetTypes::ObjectId d_id; /*!< идентификатор датчика, от которого зависит данный */ UniSetTypes::ObjectId d_id; /*!< идентификатор датчика, от которого зависит данный */
IOController::IOStateList::iterator d_ioit; /*! итератор на датчик от которого зависит данный */ IOController::IOStateList::iterator d_it; /*! итератор на датчик от которого зависит данный */
long d_value; /*!< разрешающее работу значение датчика от которого зависит данный */ long d_value; /*!< разрешающее работу значение датчика от которого зависит данный */
long d_off_value; /*!< блокирующее значение */ long d_off_value; /*!< блокирующее значение */
UniversalIO::IOType d_iotype;
// Порог // Порог
UniSetTypes::ObjectId t_ai; /*!< если данный датчик дискретный, UniSetTypes::ObjectId t_ai; /*!< если данный датчик дискретный,
......
...@@ -97,7 +97,7 @@ bool IOBase::check_depend( SMInterface* shm ) ...@@ -97,7 +97,7 @@ bool IOBase::check_depend( SMInterface* shm )
if( d_id == DefaultObjectId ) if( d_id == DefaultObjectId )
return true; return true;
if( shm->localGetValue(d_ioit,d_id) != d_value ) if( shm->localGetValue(d_it,d_id) != d_value )
return false; return false;
return true; return true;
...@@ -452,7 +452,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -452,7 +452,7 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
b->f_filter_iir = false; b->f_filter_iir = false;
shm->initIterator(b->ioit); shm->initIterator(b->ioit);
shm->initIterator(b->d_ioit); shm->initIterator(b->d_it);
string d_txt(it.getProp("depend")); string d_txt(it.getProp("depend"));
if( !d_txt.empty() ) if( !d_txt.empty() )
...@@ -471,7 +471,6 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -471,7 +471,6 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
// по умолчанию срабатывание на "1" // по умолчанию срабатывание на "1"
b->d_value = it.getProp("depend_value").empty() ? 1 : it.getIntProp("depend_value"); b->d_value = it.getProp("depend_value").empty() ? 1 : it.getIntProp("depend_value");
b->d_off_value = it.getIntProp("depend_off_value"); b->d_off_value = it.getIntProp("depend_off_value");
b->d_iotype = conf->getIOType(b->d_id);
} }
if( b->stype == UniversalIO::AI || b->stype == UniversalIO::AO ) if( b->stype == UniversalIO::AI || b->stype == UniversalIO::AO )
......
#!/bin/sh
START=uniset-start.sh
${START} -f ./smemory-test --confile test.xml --dlog-add-levels level1 --localNode LocalhostNode \
#--unideb-add-levels crit,warn,info
#system,level2,level8,level9
...@@ -98,26 +98,26 @@ class IOController: ...@@ -98,26 +98,26 @@ class IOController:
public: public:
struct DependsInfo; typedef sigc::signal<void,const IOController_i::SensorInfo&, long, IOController*> ChangeSignal;
typedef std::list<DependsInfo> DependsList;
/*! слот для подключения функции вызываемой при изменении состояния датчика // signal по изменению определённого датчика
\param it - интератор из DependsList ChangeSignal signal_change_value( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node );
\param bool - текущее состояние undefined (TRUE|FALSE) ChangeSignal signal_change_value( const IOController_i::SensorInfo& si );
*/
typedef sigc::slot<void,DependsList::iterator,bool> DependsSlot; // предварительное объявление, чтобы в структуре объявить итератор..
struct USensorIOInfo;
/*! \warning В данной реализации call-back функция только одна! typedef std::map<UniSetTypes::KeyType, USensorIOInfo> IOStateList;
Потом можно будет перейти на список (типа AFilter и DFilter)
*/
void setDependsSlot( DependsSlot sl );
void setBlockDependsSlot( DependsSlot sl );
struct USensorIOInfo: struct USensorIOInfo:
public IOController_i::SensorIOInfo public IOController_i::SensorIOInfo
{ {
USensorIOInfo():any(0),dlst_lock(false),block_value(0),db_ignore(false) USensorIOInfo():any(0),db_ignore(false),d_value(0),d_off_value(0)
{ undefined = false; blocked=false; } {
undefined = false;
d_si.id = UniSetTypes::DefaultObjectId;
d_si.node = UniSetTypes::DefaultObjectId;
}
virtual ~USensorIOInfo(){} virtual ~USensorIOInfo(){}
USensorIOInfo(IOController_i::SensorIOInfo& r); USensorIOInfo(IOController_i::SensorIOInfo& r);
...@@ -127,36 +127,30 @@ class IOController: ...@@ -127,36 +127,30 @@ class IOController:
USensorIOInfo& operator=(IOController_i::SensorIOInfo& r); USensorIOInfo& operator=(IOController_i::SensorIOInfo& r);
const USensorIOInfo& operator=(const IOController_i::SensorIOInfo& r); const USensorIOInfo& operator=(const IOController_i::SensorIOInfo& r);
USensorIOInfo& operator=(IOController_i::SensorIOInfo* r); USensorIOInfo& operator=(IOController_i::SensorIOInfo* r);
// Дополнительные (вспомогательные поля)
UniSetTypes::uniset_rwmutex val_lock; /*!< флаг блокирующий работу со значением */
IOStateList::iterator it;
void* any; /*!< расширение для возможности хранения своей информации */ void* any; /*!< расширение для возможности хранения своей информации */
DependsList dlst; /*!< список io зависящих от данного (для выставления поля undefined) */
bool dlst_lock; /*!< флаг блокирующий работу со списком */
long block_value;
bool db_ignore; /*!< не писать изменения в БД */ bool db_ignore; /*!< не писать изменения в БД */
UniSetTypes::uniset_rwmutex val_lock; /*!< флаг блокирующий работу со значением */
};
// сигнал для реализации механизма зависимостией..
ChangeSignal changeSignal;
IOController_i::SensorInfo d_si; /*!< идентификатор датчика, от которого зависит данный */
long d_value; /*!< разрешающее работу значение датчика от которого зависит данный */
long d_off_value; /*!< блокирующее значение */
void checkDepend( const IOController_i::SensorInfo& si , long newval, IOController* );
};
// Функции работы со списками датчиков (без изменения 'const')
typedef std::map<UniSetTypes::KeyType, USensorIOInfo> IOStateList;
inline IOStateList::iterator ioBegin(){ return ioList.begin(); } inline IOStateList::iterator ioBegin(){ return ioList.begin(); }
inline IOStateList::iterator ioEnd(){ return ioList.end(); } inline IOStateList::iterator ioEnd(){ return ioList.end(); }
inline IOStateList::iterator find(UniSetTypes::KeyType k){ return ioList.find(k); } inline IOStateList::iterator find(UniSetTypes::KeyType k){ return ioList.find(k); }
inline int ioCount(){ return ioList.size(); } inline int ioCount(){ return ioList.size(); }
struct DependsInfo
{
DependsInfo( bool init=false );
DependsInfo( IOController_i::SensorInfo& si, IOStateList::iterator& it );
IOController_i::SensorInfo si;
IOStateList::iterator it;
bool block_invert; /*!< инвертирование логики для блокирования */
bool init;
};
// доступ к элементам через итератор // доступ к элементам через итератор
virtual void localSetValue( IOStateList::iterator& it, const IOController_i::SensorInfo& si, virtual void localSetValue( IOStateList::iterator& it, const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id ); CORBA::Long value, UniSetTypes::ObjectId sup_id );
...@@ -254,13 +248,8 @@ class IOController: ...@@ -254,13 +248,8 @@ class IOController:
inline bool iofiltersEmpty(){ return iofilters.empty(); } inline bool iofiltersEmpty(){ return iofilters.empty(); }
inline int iodiltersSize(){ return iofilters.size(); } inline int iodiltersSize(){ return iofilters.size(); }
// ---------------------------
// note: функция вызывается рекурсивно!!!
void updateDepends( IOController::DependsList& lst, bool undefined, bool& lock );
void updateBlockDepends( IOController::DependsList& lst, bool blk_state, bool& lock );
private: private:
friend class AskDumper; friend class NCRestorer;
IOStateList ioList; /*!< список с текущим состоянием аналоговых входов/выходов */ IOStateList ioList; /*!< список с текущим состоянием аналоговых входов/выходов */
UniSetTypes::uniset_rwmutex ioMutex; /*!< замок для блокирования совместного доступа к ioList */ UniSetTypes::uniset_rwmutex ioMutex; /*!< замок для блокирования совместного доступа к ioList */
...@@ -269,9 +258,6 @@ class IOController: ...@@ -269,9 +258,6 @@ class IOController:
IOFilterSlotList iofilters; /*!< список фильтров для аналоговых значений */ IOFilterSlotList iofilters; /*!< список фильтров для аналоговых значений */
DependsSlot dslot; /*!< undefined depends slot */
DependsSlot bslot; /*!< block depends slot */
UniSetTypes::uniset_rwmutex loggingMutex; /*!< logging info mutex */ UniSetTypes::uniset_rwmutex loggingMutex; /*!< logging info mutex */
}; };
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
......
...@@ -129,6 +129,9 @@ class IONotifyController: ...@@ -129,6 +129,9 @@ class IONotifyController:
const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd); const UniSetTypes::ConsumerInfo& ci, UniversalIO::UIOCommand cmd);
virtual void localSetValue( IOController::IOStateList::iterator& it,
const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id );
// ----------------------------------------------- // -----------------------------------------------
typedef sigc::signal<void,UniSetTypes::SensorMessage*> ChangeSignal; typedef sigc::signal<void,UniSetTypes::SensorMessage*> ChangeSignal;
ChangeSignal signal_change_state(){ return changeSignal; } ChangeSignal signal_change_state(){ return changeSignal; }
...@@ -136,7 +139,6 @@ class IONotifyController: ...@@ -136,7 +139,6 @@ class IONotifyController:
// -------------------- !!!!!!!!! --------------------------------- // -------------------- !!!!!!!!! ---------------------------------
virtual IONotifyController_i::ThresholdsListSeq* getThresholdsList(); virtual IONotifyController_i::ThresholdsListSeq* getThresholdsList();
/*! Информация о заказчике */ /*! Информация о заказчике */
struct ConsumerInfoExt: struct ConsumerInfoExt:
public UniSetTypes::ConsumerInfo public UniSetTypes::ConsumerInfo
...@@ -212,12 +214,9 @@ class IONotifyController: ...@@ -212,12 +214,9 @@ class IONotifyController:
ThresholdExtList list; ThresholdExtList list;
}; };
/*! массив пар датчик->список порогов */ /*! массив пар [датчик,список порогов] */
typedef std::map<UniSetTypes::KeyType,ThresholdsListInfo> AskThresholdMap; typedef std::map<UniSetTypes::KeyType,ThresholdsListInfo> AskThresholdMap;
virtual void localSetValue( IOController::IOStateList::iterator& it,
const IOController_i::SensorInfo& si,
CORBA::Long value, UniSetTypes::ObjectId sup_id );
protected: protected:
IONotifyController(); IONotifyController();
virtual bool activateObject(); virtual bool activateObject();
...@@ -228,7 +227,6 @@ class IONotifyController: ...@@ -228,7 +227,6 @@ class IONotifyController:
//! посылка информации об изменении состояния датчика //! посылка информации об изменении состояния датчика
virtual void send(ConsumerList& lst, UniSetTypes::SensorMessage& sm); virtual void send(ConsumerList& lst, UniSetTypes::SensorMessage& sm);
//! проверка срабатывания пороговых датчиков //! проверка срабатывания пороговых датчиков
virtual void checkThreshold( IOStateList::iterator& li, virtual void checkThreshold( IOStateList::iterator& li,
const IOController_i::SensorInfo& si, bool send=true ); const IOController_i::SensorInfo& si, bool send=true );
...@@ -253,12 +251,9 @@ class IONotifyController: ...@@ -253,12 +251,9 @@ class IONotifyController:
/*! чтение dump-файла */ /*! чтение dump-файла */
virtual void readDump(); virtual void readDump();
/*! построение списка зависимостей по каждому io */
virtual void buildDependsList();
NCRestorer* restorer; NCRestorer* restorer;
void onChangeUndefined( DependsList::iterator it, bool undefined ); // void onChangeUndefined( DependsList::iterator it, bool undefined );
UniSetTypes::uniset_rwmutex sig_mutex; UniSetTypes::uniset_rwmutex sig_mutex;
ChangeSignal changeSignal; ChangeSignal changeSignal;
......
...@@ -64,8 +64,7 @@ class NCRestorer ...@@ -64,8 +64,7 @@ class NCRestorer
SInfo &operator=(IOController_i::SensorIOInfo& inf); SInfo &operator=(IOController_i::SensorIOInfo& inf);
}; };
virtual void read(IONotifyController* ic, const std::string fn="" )=0; virtual void read(IONotifyController* ic, const std::string& fn="" )=0;
virtual void buildDependsList( IONotifyController* ic, const std::string fn="" )=0;
virtual void dump(IONotifyController* ic, SInfo& inf, const IONotifyController::ConsumerList& lst)=0; virtual void dump(IONotifyController* ic, SInfo& inf, const IONotifyController::ConsumerList& lst)=0;
virtual void dumpThreshold(IONotifyController* ic, SInfo& inf, const IONotifyController::ThresholdExtList& lst)=0; virtual void dumpThreshold(IONotifyController* ic, SInfo& inf, const IONotifyController::ThresholdExtList& lst)=0;
...@@ -95,6 +94,8 @@ class NCRestorer ...@@ -95,6 +94,8 @@ class NCRestorer
{ {
return ic->myioBegin(); return ic->myioBegin();
} }
static void init_depends_signals( IONotifyController* ic );
}; };
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
/*! /*!
...@@ -110,25 +111,20 @@ class NCRestorer_XML: ...@@ -110,25 +111,20 @@ class NCRestorer_XML:
/*! /*!
\param fname - файл. (формата uniset-project) \param fname - файл. (формата uniset-project)
*/ */
NCRestorer_XML(const std::string fname); NCRestorer_XML(const std::string& fname);
/*! /*!
\param fname - файл. (формата uniset-project) \param fname - файл. (формата uniset-project)
\param sensor_filterField - читать из списка только те узлы, у которых filterField="filterValue" \param sensor_filterField - читать из списка только те узлы, у которых filterField="filterValue"
\param sensor_filterValue - значение для фильтрования списка \param sensor_filterValue - значение для фильтрования списка
*/ */
NCRestorer_XML( const std::string fname, const std::string sensor_filterField, const std::string sensor_filterValue="" ); NCRestorer_XML( const std::string& fname, const std::string& sensor_filterField, const std::string& sensor_filterValue="" );
virtual ~NCRestorer_XML(); virtual ~NCRestorer_XML();
NCRestorer_XML(); NCRestorer_XML();
/*! Установить фильтр на чтение списка 'зависимостей')
\note Функцию необходимо вызывать до вызова buildDependsList(...)
*/
void setDependsFilter( const std::string filterField, const std::string filterValue="" );
/*! Установить фильтр на чтение списка 'порогов' */ /*! Установить фильтр на чтение списка 'порогов' */
void setThresholdsFilter( const std::string filterField, const std::string filterValue="" ); void setThresholdsFilter( const std::string& filterField, const std::string& filterValue="" );
bool setFileName( const std::string& file, bool create ); bool setFileName( const std::string& file, bool create );
inline std::string getFileName(){ return fname; } inline std::string getFileName(){ return fname; }
...@@ -144,64 +140,43 @@ class NCRestorer_XML: ...@@ -144,64 +140,43 @@ class NCRestorer_XML:
*/ */
void setReadThresholdItem( ReaderSlot sl ); void setReadThresholdItem( ReaderSlot sl );
/*! установить функцию для callback-вызова при чтении списка зависимостей.
bool xxxMyClass::myfunc(UniXML& xml,
UniXML_iterator& it, xmlNode* sec)
uxml - интерфейс для работы с xml-файлом
it - интератор(указатель) на текущий считываемый xml-узел (<sensor>)
sec - указатель на корневой узел секции (<depend>)
*/
void setReadDependItem( ReaderSlot sl );
typedef sigc::slot<bool,UniXML&,UniXML_iterator&,xmlNode*,SInfo&> NCReaderSlot; typedef sigc::slot<bool,UniXML&,UniXML_iterator&,xmlNode*,SInfo&> NCReaderSlot;
void setNCReadItem( NCReaderSlot sl ); void setNCReadItem( NCReaderSlot sl );
virtual void read(IONotifyController* ic, const std::string filename="" ); virtual void read(IONotifyController* ic, const std::string& filename="" );
virtual void read(IONotifyController* ic, UniXML& xml ); virtual void read(IONotifyController* ic, UniXML& xml );
virtual void dump(IONotifyController* ic, SInfo& inf, const IONotifyController::ConsumerList& lst); virtual void dump(IONotifyController* ic, SInfo& inf, const IONotifyController::ConsumerList& lst);
virtual void dumpThreshold(IONotifyController* ic, SInfo& inf, const IONotifyController::ThresholdExtList& lst); virtual void dumpThreshold(IONotifyController* ic, SInfo& inf, const IONotifyController::ThresholdExtList& lst);
virtual void buildDependsList( IONotifyController* ic, const std::string fn="" );
virtual void buildDependsList( IONotifyController* ic, UniXML& xml );
protected: protected:
bool check_thresholds_item( UniXML_iterator& it ); bool check_thresholds_item( UniXML_iterator& it );
bool check_depend_item( UniXML_iterator& it );
void read_consumers(UniXML& xml, xmlNode* node, NCRestorer_XML::SInfo& inf, IONotifyController* ic ); void read_consumers(UniXML& xml, xmlNode* node, NCRestorer_XML::SInfo& inf, IONotifyController* ic );
void read_list(UniXML& xml, xmlNode* node, IONotifyController* ic); void read_list(UniXML& xml, xmlNode* node, IONotifyController* ic);
void read_thresholds(UniXML& xml, xmlNode* node, IONotifyController* ic); void read_thresholds(UniXML& xml, xmlNode* node, IONotifyController* ic);
void build_depends( UniXML& xml, xmlNode* node, IONotifyController* ic ); void init( const std::string& fname );
void init( std::string fname );
bool getBaseInfo( UniXML& xml, xmlNode* it, IOController_i::SensorInfo& si ); bool getBaseInfo( UniXML& xml, xmlNode* it, IOController_i::SensorInfo& si );
bool getSensorInfo(UniXML& xml, xmlNode* snode, SInfo& si ); bool getSensorInfo(UniXML& xml, xmlNode* snode, SInfo& si );
bool getConsumerList(UniXML& xml,xmlNode* node, IONotifyController::ConsumerList& lst); bool getConsumerList(UniXML& xml,xmlNode* node, IONotifyController::ConsumerList& lst);
bool getThresholdInfo(UniXML& xml,xmlNode* tnode, IONotifyController::ThresholdInfoExt& ti); bool getThresholdInfo(UniXML& xml,xmlNode* tnode, IONotifyController::ThresholdInfoExt& ti);
bool getDependsInfo( UniXML& xml, xmlNode* node, IOController::DependsInfo& di );
static void set_dumptime( UniXML& xml, xmlNode* node ); static void set_dumptime( UniXML& xml, xmlNode* node );
static xmlNode* bind_node(UniXML& xml, xmlNode* root, const std::string& nodename, const std::string nm=""); static xmlNode* bind_node(UniXML& xml, xmlNode* root, const std::string& nodename, const std::string& nm="");
static xmlNode* rebind_node(UniXML& xml, xmlNode* root, const std::string& nodename, const std::string nm=""); static xmlNode* rebind_node(UniXML& xml, xmlNode* root, const std::string& nodename, const std::string& nm="");
std::string s_filterField; std::string s_filterField;
std::string s_filterValue; std::string s_filterValue;
std::string c_filterField; std::string c_filterField;
std::string c_filterValue; std::string c_filterValue;
std::string d_filterField;
std::string d_filterValue;
std::string t_filterField; std::string t_filterField;
std::string t_filterValue; std::string t_filterValue;
std::string fname; std::string fname;
UniXML uxml; UniXML uxml;
ReaderSlot rtslot; ReaderSlot rtslot;
ReaderSlot depslot;
NCReaderSlot ncrslot; NCReaderSlot ncrslot;
private: private:
......
...@@ -3,9 +3,10 @@ ...@@ -3,9 +3,10 @@
############################################################################ ############################################################################
noinst_LTLIBRARIES = libProcesses.la noinst_LTLIBRARIES = libProcesses.la
libProcesses_la_SOURCES = IOController_iSK.cc IOController.cc IONotifyController.cc IONotifyController_LT.cc
libProcesses_la_CXXFLAGS = $(SIGC_CFLAGS) libProcesses_la_CXXFLAGS = $(SIGC_CFLAGS)
libProcesses_la_LIBADD = $(SIGC_LIBS) libProcesses_la_LIBADD = $(SIGC_LIBS)
libProcesses_la_SOURCES = IOController_iSK.cc IOController.cc IONotifyController.cc IONotifyController_LT.cc \
NCRestorer.cc NCRestorer_XML.cc
include $(top_builddir)/conf/setting.mk include $(top_builddir)/conf/setting.mk
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
/*! \file /*! \file
* \author Pavel Vainerman * \author Pavel Vainerman
*/ */
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
#include "Debug.h" #include "Debug.h"
#include "Configuration.h" #include "Configuration.h"
...@@ -44,7 +44,7 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController ...@@ -44,7 +44,7 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
{ {
UniSetTypes::KeyType k( key(inf.si.id,inf.si.node) ); UniSetTypes::KeyType k( key(inf.si.id,inf.si.node) );
// Проверка зарегистрирован-ли данный датчик // Проверка зарегистрирован-ли данный датчик
// если такого дискретного датчика нет, то здесь сработает исключение... // если такого дискретного датчика нет, то здесь сработает исключение...
if( !force ) if( !force )
{ {
...@@ -63,17 +63,17 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController ...@@ -63,17 +63,17 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
case UniversalIO::AO: case UniversalIO::AO:
ic->ioRegistration(inf); ic->ioRegistration(inf);
break; break;
default: default:
unideb[Debug::CRIT] << ic->getName() << "(askDumper::addlist): НЕИЗВЕСТНЫЙ ТИП ДАТЧИКА! -> " unideb[Debug::CRIT] << ic->getName() << "(askDumper::addlist): НЕИЗВЕСТНЫЙ ТИП ДАТЧИКА! -> "
<< conf->oind->getNameById(inf.si.id,inf.si.node) << endl; << conf->oind->getNameById(inf.si.id,inf.si.node) << endl;
return; return;
break; break;
} }
} }
} }
switch(inf.type) switch(inf.type)
{ {
case UniversalIO::DI: case UniversalIO::DI:
...@@ -92,7 +92,7 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController ...@@ -92,7 +92,7 @@ void NCRestorer::addlist( IONotifyController* ic, SInfo& inf, IONotifyController
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyController::ThresholdExtList& lst, bool force ) void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyController::ThresholdExtList& lst, bool force )
{ {
// Проверка зарегистрирован-ли данный датчик // Проверка зарегистрирован-ли данный датчик
// если такого дискретного датчика нет сдесь сработает исключение... // если такого дискретного датчика нет сдесь сработает исключение...
if( !force ) if( !force )
{ {
...@@ -111,7 +111,7 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC ...@@ -111,7 +111,7 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC
case UniversalIO::AO: case UniversalIO::AO:
ic->ioRegistration(inf); ic->ioRegistration(inf);
break; break;
default: default:
break; break;
} }
...@@ -143,25 +143,25 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC ...@@ -143,25 +143,25 @@ void NCRestorer::addthresholdlist( IONotifyController* ic, SInfo& inf, IONotifyC
ic->checkThreshold(it,inf.si,false); ic->checkThreshold(it,inf.si,false);
} }
break; break;
default: default:
break; break;
} }
} }
catch(Exception& ex) catch(Exception& ex)
{ {
unideb[Debug::WARN] << ic->getName() << "(NCRestorer::addthresholdlist): " << ex unideb[Debug::WARN] << ic->getName() << "(NCRestorer::addthresholdlist): " << ex
<< " для " << conf->oind->getNameById(inf.si.id, inf.si.node) << endl; << " для " << conf->oind->getNameById(inf.si.id, inf.si.node) << endl;
throw; throw;
} }
catch( CORBA::SystemException& ex ) catch( CORBA::SystemException& ex )
{ {
unideb[Debug::WARN] << ic->getName() << "(NCRestorer::addthresholdlist): " unideb[Debug::WARN] << ic->getName() << "(NCRestorer::addthresholdlist): "
<< conf->oind->getNameById(inf.si.id,inf.si.node) << " недоступен!!(CORBA::SystemException): " << conf->oind->getNameById(inf.si.id,inf.si.node) << " недоступен!!(CORBA::SystemException): "
<< ex.NP_minorString() << endl; << ex.NP_minorString() << endl;
throw; throw;
} }
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::SensorIOInfo& inf) NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::SensorIOInfo& inf)
{ {
...@@ -177,3 +177,24 @@ NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::SensorIOInfo& in ...@@ -177,3 +177,24 @@ NCRestorer::SInfo& NCRestorer::SInfo::operator=(IOController_i::SensorIOInfo& in
return *this; return *this;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void NCRestorer::init_depends_signals( IONotifyController* ic )
{
for( IOController::IOStateList::iterator it=ic->ioList.begin(); it!=ic->ioList.end(); ++it )
{
// обновляем итераторы...
it->second.it = it;
if( it->second.d_si.id == DefaultObjectId )
continue;
if( unideb.debugging(Debug::INFO) )
unideb[Debug::INFO] << ic->getName() << "(NCRestorer::init_depends_signals): "
<< " init depend: '" << conf->oind->getMapName(it->second.si.id) << "'"
<< " dep_name='" << conf->oind->getMapName(it->second.d_si.id) << "'"
<< endl;
IOController::ChangeSignal s = ic->signal_change_value(it->second.d_si);
s.connect( sigc::mem_fun( &it->second, &IOController::USensorIOInfo::checkDepend) );
}
}
// -----------------------------------------------------------------------------
...@@ -7,7 +7,6 @@ libVarious_la_CPPFLAGS = $(SIGC_CFLAGS) $(COMCPP_CFLAGS) ...@@ -7,7 +7,6 @@ libVarious_la_CPPFLAGS = $(SIGC_CFLAGS) $(COMCPP_CFLAGS)
libVarious_la_LIBADD = $(SIGC_LIBS) $(COMCPP_LIBS) libVarious_la_LIBADD = $(SIGC_LIBS) $(COMCPP_LIBS)
libVarious_la_SOURCES = DebugStream.cc Debug.cc UniXML.cc MessageType.cc Configuration.cc TextIndex.cc \ libVarious_la_SOURCES = DebugStream.cc Debug.cc UniXML.cc MessageType.cc Configuration.cc TextIndex.cc \
Restorer_XML.cc \ Restorer_XML.cc \
NCRestorer.cc NCRestorer_XML.cc \
RunLock.cc Mutex.cc SViewer.cc SMonitor.cc LT_Object.cc \ RunLock.cc Mutex.cc SViewer.cc SMonitor.cc LT_Object.cc \
WDTInterface.cc \ WDTInterface.cc \
CycleStorage.cc TableStorage.cc TableBlockStorage.cc CycleStorage.cc TableStorage.cc TableBlockStorage.cc
......
...@@ -90,7 +90,8 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it, ...@@ -90,7 +90,8 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it,
cid = conf->oind->getIdByName(cname); cid = conf->oind->getIdByName(cname);
if( cid == UniSetTypes::DefaultObjectId ) if( cid == UniSetTypes::DefaultObjectId )
{ {
unideb[Debug::CRIT] << "(Restorer_XML:getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР заказчика -->" if( unideb.debugging(Debug::CRIT) )
unideb[Debug::CRIT] << "(Restorer_XML:getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР заказчика -->"
<< cname << endl; << cname << endl;
return false; return false;
} }
...@@ -109,7 +110,8 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it, ...@@ -109,7 +110,8 @@ bool Restorer_XML::getConsumerInfo( UniXML_iterator& it,
if( cnode == UniSetTypes::DefaultObjectId ) if( cnode == UniSetTypes::DefaultObjectId )
{ {
unideb[Debug::CRIT] << "(Restorer_XML:getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР узла -->" if( unideb.debugging(Debug::CRIT) )
unideb[Debug::CRIT] << "(Restorer_XML:getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР узла -->"
<< cnodename << endl; << cnodename << endl;
return false; return false;
} }
...@@ -137,7 +139,8 @@ bool Restorer_XML::old_getConsumerInfo( UniXML_iterator& it, ...@@ -137,7 +139,8 @@ bool Restorer_XML::old_getConsumerInfo( UniXML_iterator& it,
cid = conf->oind->getIdByName(cname); cid = conf->oind->getIdByName(cname);
if( cid == UniSetTypes::DefaultObjectId ) if( cid == UniSetTypes::DefaultObjectId )
{ {
unideb[Debug::CRIT] << "(Restorer_XML:old_getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР заказчика -->" if( unideb.debugging(Debug::CRIT) )
unideb[Debug::CRIT] << "(Restorer_XML:old_getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР заказчика -->"
<< cname << endl; << cname << endl;
return false; return false;
} }
...@@ -156,7 +159,8 @@ bool Restorer_XML::old_getConsumerInfo( UniXML_iterator& it, ...@@ -156,7 +159,8 @@ bool Restorer_XML::old_getConsumerInfo( UniXML_iterator& it,
if( cnode == UniSetTypes::DefaultObjectId ) if( cnode == UniSetTypes::DefaultObjectId )
{ {
unideb[Debug::CRIT] << "(Restorer_XML:old_getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР узла -->" if( unideb.debugging(Debug::CRIT) )
unideb[Debug::CRIT] << "(Restorer_XML:old_getConsumerInfo): НЕ НАЙДЕН ИДЕНТИФИКАТОР узла -->"
<< cnodename << endl; << cnodename << endl;
return false; return false;
} }
......
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