#pragma once #include "BaseModule.h" #include "libaray_symbols.h" #include "LockFreeQueue.h" #include #include enum EAlarmStatus { EAS_Normal = 0, EAS_OverThan = 1, EAS_UnderThan = 2, EAS_Both = 3 }; // 全局唯一实例 // 数据越限报警 // CREATE TABLE IF NOT EXISTS lanpengdb.mokuai2(ts timestamp, dim1 double); // create topic mokuai2 as select * from lanpengdb.mokuai2; // delete from lanpengdb.mokuai2; // insert into lanpengdb.mokuai2 values(NOW,12.345); class ALARMRECOGNITION_EXPORT Module : public BaseModule { public: Module(); private: struct tagRange{ QString szName; // data name double dbMax = __DBL_MAX__; double dbMin = __DBL_MIN__; uint uWinSize = 5; int nStatus = EAS_Normal; std::string alarmRuleId; // 节点-标识码 int alarmRuleVersion; int level; int status; std::string object; tagRange() { szName.clear(); dbMax = __DBL_MAX__; dbMin = __DBL_MIN__; uWinSize = 5; nStatus = EAS_Normal; } }; struct tagKeyValue{ std::string name = ""; double value = 0; QDateTime tm; tagKeyValue() { tm = QDateTime::currentDateTime(); } tagKeyValue(std::string n,double v) { name = n; value = v; tm = QDateTime::currentDateTime(); } }; private: DataConsumer* m_pDataConsumer = nullptr; std::vector m_szOutputs; // 输出名称 std::map m_mpRangeConfig; // 数据范围:data name - confit private: std::map> m_mpDataValue; // 测量数据 QReadWriteLock m_objDataLock; //void Verify(); public: virtual void Setup(ModuleInfo mi); virtual void regConsumer(DataConsumer* pDC) ; virtual bool isInheritedFrom(std::string tp); virtual void OnSubData(std::string name,std::string val); }; extern "C" {//一定要添加上 ALARMRECOGNITION_EXPORT BaseModule* instance(); ALARMRECOGNITION_EXPORT void destroy(BaseModule*); }