Module.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #pragma once
  2. #include "BaseModule.h"
  3. #include "libaray_symbols.h"
  4. #include "LockFreeQueue.h"
  5. #include <QtCore/QDateTime>
  6. #include <QtCore/QReadWriteLock>
  7. // 数据越限报警:测试脚本,由td触发,报警结果推送到mqtt
  8. // CREATE TABLE IF NOT EXISTS lanpengdb.mokuai99(ts timestamp, dim1 double);
  9. // create topic mokuai99 as select * from lanpengdb.mokuai99;
  10. // delete from lanpengdb.mokuai99;
  11. // insert into lanpengdb.mokuai99 values(NOW,12.345);
  12. // 报警规则1:满足条件报警
  13. // - : -∞ +∞ 默认范围
  14. // > : max +∞ 介于中间报警
  15. // < : -∞ min 介于中间报警
  16. // []: min max 介于中间报警
  17. // 报警规则2:系统中仅存在一条活跃报警;新报警产生后,应该将历史报警恢复。
  18. // 报警关键字:object,新报警产生时,与本模块alarmRuleId不相符的活跃报警,应当恢复
  19. // update相关代码,在mysql触发器中执行
  20. class ALARMRECOGNITION_EXPORT Module : public BaseModule
  21. {
  22. public:
  23. Module();
  24. private:
  25. struct tagRange{
  26. QString szName; // data name
  27. double dbMax = __DBL_MAX__;
  28. double dbMin = __DBL_MIN__;
  29. uint uWinSize = 5;
  30. int nStatus = 0;
  31. std::string szOperator; // 操作符
  32. std::string alarmRuleId; // 节点-标识码
  33. int alarmRuleVersion;
  34. int level;
  35. int status;
  36. std::string object;
  37. tagRange()
  38. {
  39. szName.clear();
  40. dbMax = __DBL_MAX__;
  41. dbMin = __DBL_MIN__;
  42. uWinSize = 5;
  43. nStatus = 0;
  44. }
  45. };
  46. struct tagKeyValue{
  47. std::string name = "";
  48. double value = 0;
  49. QDateTime tm;
  50. tagKeyValue()
  51. {
  52. tm = QDateTime::currentDateTime();
  53. }
  54. tagKeyValue(std::string n,double v)
  55. {
  56. name = n;
  57. value = v;
  58. tm = QDateTime::currentDateTime();
  59. }
  60. };
  61. private:
  62. DataConsumer* m_pDataConsumer = nullptr;
  63. std::vector<std::string> m_szOutputs; // 输出名称
  64. std::map<std::string,tagRange> m_mpRangeConfig; // 数据范围:data name - confit
  65. private:
  66. std::map<std::string,std::list<tagKeyValue>>
  67. m_mpDataValue; // 测量数据:data name - list
  68. QReadWriteLock m_objDataLock;
  69. public:
  70. virtual void Setup(ModuleInfo mi);
  71. virtual void regConsumer(DataConsumer* pDC) ;
  72. virtual bool isInheritedFrom(std::string tp);
  73. virtual void OnSubData(std::string name,std::string val);
  74. };
  75. extern "C" {//一定要添加上
  76. ALARMRECOGNITION_EXPORT BaseModule* instance();
  77. ALARMRECOGNITION_EXPORT void destroy(BaseModule*);
  78. }