#include "Module.h" #include #include #include #include Module::Module() :BaseModule() { m_pDataConsumer = nullptr; m_szOutputs.clear(); m_mpRangeConfig.clear(); m_mpDataValue.clear(); } bool Module::isInheritedFrom(std::string tp) { bool bEqual = (strcasecmp(tp.c_str(), "BaseModule") == 0); return bEqual; } void Module::regConsumer(DataConsumer* pDC) { m_pDataConsumer = pDC; } void Module::Setup(ModuleInfo mi) { std::list::iterator itrO; for( itrO = mi.Properties.begin(); itrO != mi.Properties.end(); ++itrO ) { m_szOutputs.push_back(mi.Code + "." + itrO->Code); } tagRange tr; m_mpRangeConfig[""] = tr; } void Module::OnSubData(std::string name,std::string val) { if( m_mpRangeConfig.find(name) == m_mpRangeConfig.end()) { return; } uint nMaxWinSize = m_mpRangeConfig[name].uWinSize; // add data m_objDataLock.lockForWrite(); if( m_mpDataValue.find(name) == m_mpDataValue.end()) { m_mpDataValue[name].push_back(tagKeyValue(name,val.length()>0 ? std::stod(val):0)); } else { while( m_mpDataValue[name].size() >= nMaxWinSize) { m_mpDataValue[name].erase(m_mpDataValue[name].begin()); } m_mpDataValue[name].push_back(tagKeyValue(name,val.length()>0 ? std::stod(val):0)); } // alarm recognition m_mpRangeConfig[name].nStatus = EAS_Both; std::list::iterator itrV; for( itrV = m_mpDataValue[name].begin(); itrV != m_mpDataValue[name].end(); ++itrV) { tagKeyValue tKV = *itrV; if( itrV->value > m_mpRangeConfig[name].dbMax ) { m_mpRangeConfig[name].nStatus &= 0x01; } else if( itrV->value < m_mpRangeConfig[name].dbMin ) { m_mpRangeConfig[name].nStatus &= 0x02; } else { m_mpRangeConfig[name].nStatus = EAS_Normal; } } m_objDataLock.unlock(); qDebug() << __FILE__ << __LINE__ << name.c_str() << m_mpRangeConfig[name].nStatus; std::vector::iterator itr; for( itr = m_szOutputs.begin(); itr != m_szOutputs.end(); ++itr ) { m_pDataConsumer->OnData(*itr,QVariant(m_mpRangeConfig[name].nStatus)); } } BaseModule* instance() { return new Module(); } void destroy(BaseModule* pInstance) { if( pInstance ) { delete pInstance; } }