Module.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include "Module.h"
  2. #include <QtCore/QVariant>
  3. #include <QtCore/QDebug>
  4. #include <stdlib.h>
  5. #include <math.h>
  6. Module::Module()
  7. :BaseModule()
  8. {
  9. m_pDataConsumer = nullptr;
  10. m_szOutputs.clear();
  11. m_mpRangeConfig.clear();
  12. m_mpDataValue.clear();
  13. }
  14. bool Module::isInheritedFrom(std::string tp)
  15. {
  16. bool bEqual = (strcasecmp(tp.c_str(), "BaseModule") == 0);
  17. return bEqual;
  18. }
  19. void Module::regConsumer(DataConsumer* pDC)
  20. {
  21. m_pDataConsumer = pDC;
  22. }
  23. void Module::Setup(ModuleInfo mi)
  24. {
  25. std::list<DataItem>::iterator itrO;
  26. for( itrO = mi.Properties.begin(); itrO != mi.Properties.end(); ++itrO )
  27. {
  28. m_szOutputs.push_back(mi.Code + "." + itrO->Code);
  29. }
  30. tagRange tr;
  31. m_mpRangeConfig[""] = tr;
  32. }
  33. void Module::OnSubData(std::string name,std::string val)
  34. {
  35. if( m_mpRangeConfig.find(name) == m_mpRangeConfig.end())
  36. {
  37. return;
  38. }
  39. uint nMaxWinSize = m_mpRangeConfig[name].uWinSize;
  40. // add data
  41. m_objDataLock.lockForWrite();
  42. if( m_mpDataValue.find(name) == m_mpDataValue.end())
  43. {
  44. m_mpDataValue[name].push_back(tagKeyValue(name,val.length()>0 ? std::stod(val):0));
  45. }
  46. else
  47. {
  48. while( m_mpDataValue[name].size() >= nMaxWinSize)
  49. {
  50. m_mpDataValue[name].erase(m_mpDataValue[name].begin());
  51. }
  52. m_mpDataValue[name].push_back(tagKeyValue(name,val.length()>0 ? std::stod(val):0));
  53. }
  54. // alarm recognition
  55. m_mpRangeConfig[name].nStatus = EAS_Both;
  56. std::list<tagKeyValue>::iterator itrV;
  57. for( itrV = m_mpDataValue[name].begin(); itrV != m_mpDataValue[name].end(); ++itrV)
  58. {
  59. tagKeyValue tKV = *itrV;
  60. if( itrV->value > m_mpRangeConfig[name].dbMax )
  61. {
  62. m_mpRangeConfig[name].nStatus &= 0x01;
  63. }
  64. else if( itrV->value < m_mpRangeConfig[name].dbMin )
  65. {
  66. m_mpRangeConfig[name].nStatus &= 0x02;
  67. }
  68. else
  69. {
  70. m_mpRangeConfig[name].nStatus = EAS_Normal;
  71. }
  72. }
  73. m_objDataLock.unlock();
  74. qDebug() << __FILE__ << __LINE__ << name.c_str() << m_mpRangeConfig[name].nStatus;
  75. std::vector<std::string>::iterator itr;
  76. for( itr = m_szOutputs.begin(); itr != m_szOutputs.end(); ++itr )
  77. {
  78. m_pDataConsumer->OnData(*itr,QVariant(m_mpRangeConfig[name].nStatus));
  79. }
  80. }
  81. BaseModule* instance()
  82. {
  83. return new Module();
  84. }
  85. void destroy(BaseModule* pInstance)
  86. {
  87. if( pInstance )
  88. {
  89. delete pInstance;
  90. }
  91. }