Commit c8ca205c authored by Pavel Vainerman's avatar Pavel Vainerman

add new properties for history logging in SharedMemory)

parent 156bb372
......@@ -46,8 +46,8 @@
<SharedMemory name="SharedMemory" shmID="SharedMemory">
<History savetime="200">
<item id="1" fuse="AlarmFuse1_S" size="30" filter="a1"/>
<item id="2" fuse="AlarmFuse2_S" size="30" filter="a2"/>
<item id="1" fuse_id="AlarmFuse1_S" fuse_invert="1" size="30" filter="a1"/>
<item id="2" fuse_id="AlarmFuse2_AS" fuse_value="2" size="30" filter="a2"/>
</History>
</SharedMemory>
......@@ -129,7 +129,7 @@
<item name="NoRespondRTU2_S" textname="no respond rtu" node="" iotype="DI"/>
<item name="AlarmFuse1_S" textname="alarm fuse sensor 1" node="" iotype="DI" priority="Medium"/>
<item name="AlarmFuse2_S" textname="alarm fuse sensor 2" node="" iotype="DI" priority="Medium"/>
<item name="AlarmFuse2_AS" textname="alarm fuse sensor 2" node="" iotype="AI" priority="Medium"/>
<item name="DumpSensor1_S" textname="alarm dumpm sensor 1" a1="1" node="" iotype="DI" priority="Medium"/>
<item name="DumpSensor2_S" textname="alarm dumpm sensor 2" a1="1" node="" iotype="DI" priority="Medium"/>
......
......@@ -216,7 +216,7 @@ void SharedMemory::askSensors( UniversalIO::UIOCommand cmd )
/*
for( History::iterator it=hist.begin(); it!=hist.end(); ++it )
{
if( sm->id == it->idFuse )
if( sm->id == it->fuse_id )
{
try
{
......@@ -584,17 +584,23 @@ void SharedMemory::buildHistoryList( xmlNode* cnode )
if( hi.filter.empty() )
continue;
hi.idFuse = conf->getSensorID(it.getProp("fuse"));
if( hi.idFuse == DefaultObjectId )
hi.fuse_id = conf->getSensorID(it.getProp("fuse_id"));
if( hi.fuse_id == DefaultObjectId )
{
dlog[Debug::WARN] << myname << "(buildHistory): not found sensor ID for "
<< it.getProp("idFuse")
<< it.getProp("fuse_id")
<< " history item id=" << it.getProp("id")
<< " ..ignore.." << endl;
continue;
}
hi.invert = uni_atoi(it.getProp("invert").c_str());
hi.fuse_invert = uni_atoi(it.getProp("fuse_invert").c_str());
if( !it.getProp("fuse_value").empty() )
{
hi.fuse_use_val = true;
hi.fuse_val = uni_atoi(it.getProp("fuse_value").c_str());
}
// WARNING: no check duplicates...
hist.push_back(hi);
......@@ -671,15 +677,44 @@ void SharedMemory::updateHistory( UniSetTypes::SensorMessage* sm )
for( History::iterator it=hist.begin(); it!=hist.end(); ++it )
{
if( sm->id == it->idFuse )
if( sm->id == it->fuse_id )
{
bool st = it->invert ? !sm->state : sm->state;
if( st )
if( sm->sensor_type == UniversalIO::DigitalInput ||
sm->sensor_type == UniversalIO::DigitalOutput )
{
if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << myname << "(updateHistory): HISTORY EVENT for " << (*it) << endl;
bool st = it->fuse_invert ? !sm->state : sm->state;
if( st )
{
if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << myname << "(updateHistory): HISTORY EVENT for " << (*it) << endl;
m_historySignal.emit( &(*it) );
}
}
else if( sm->sensor_type == UniversalIO::AnalogInput ||
sm->sensor_type == UniversalIO::AnalogOutput )
{
if( !it->fuse_use_val )
{
bool st = it->fuse_invert ? !sm->state : sm->state;
if( !st )
{
if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << myname << "(updateHistory): HISTORY EVENT for " << (*it) << endl;
m_historySignal.emit( &(*it) );
m_historySignal.emit( &(*it) );
}
}
else
{
if( sm->value == it->fuse_val )
{
if( dlog.debugging(Debug::INFO) )
dlog[Debug::INFO] << myname << "(updateHistory): HISTORY EVENT for " << (*it) << endl;
m_historySignal.emit( &(*it) );
}
}
}
}
}
......@@ -687,7 +722,7 @@ void SharedMemory::updateHistory( UniSetTypes::SensorMessage* sm )
// -----------------------------------------------------------------------------
std::ostream& operator<<( std::ostream& os, const SharedMemory::HistoryInfo& h )
{
os << "id=" << h.id << " idFuse=" << h.idFuse;
os << "id=" << h.id << " fuse_id=" << h.fuse_id;
return os;
}
// ------------------------------------------------------------------------------------------
......@@ -75,15 +75,19 @@ class SharedMemory:
struct HistoryInfo
{
HistoryInfo():
id(0),idFuse(UniSetTypes::DefaultObjectId),
size(0),filter(""),invert(false){}
id(0),
size(0),filter(""),
fuse_id(UniSetTypes::DefaultObjectId),
fuse_invert(false),fuse_use_val(false),fuse_val(0){}
long id; // ID
UniSetTypes::ObjectId idFuse; // fuse sesnsor
HistoryList hlst; // history list
int size;
std::string filter; // filter field
bool invert;
UniSetTypes::ObjectId fuse_id; // fuse sesnsor
bool fuse_invert;
bool fuse_use_val;
long fuse_val;
};
friend std::ostream& operator<<( std::ostream& os, const HistoryInfo& h );
......
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