#include "BTRealDataCollect.h" #include BTRealDataCollect* BTRealDataCollect::m_pInstance = NULL; BTRealDataCollect::BTRealDataCollect() : m_pMbComm(NULL), m_pTimer(NULL), m_nTimeCount(0) { initMsg(); if(!addSub()) { return; } m_pTimer = new QTimer(this); connect(m_pTimer, SIGNAL(timeout()), this, SLOT(recvMessage())); m_pTimer->start(100); } BTRealDataCollect* BTRealDataCollect::instance() { if(m_pInstance == NULL) { m_pInstance = new BTRealDataCollect(); } return m_pInstance; } void BTRealDataCollect::release() { if(m_pTimer) { m_pTimer->stop(); delete m_pTimer; } m_pTimer = NULL; delSub(); closeMsg(); m_pInstance = NULL; delete this; } void BTRealDataCollect::initMsg() { if(m_pMbComm == NULL) { m_pMbComm = new iot_net::CMbCommunicator("BusbarTemperatureWidget"); } } void BTRealDataCollect::closeMsg() { if(m_pMbComm != NULL) { delete m_pMbComm; } m_pMbComm = NULL; } void BTRealDataCollect::clearMsg() { if(m_pMbComm) { iot_net::CMbMessage objMsg; while(m_pMbComm->recvMsg(objMsg, 0)) {} } } bool BTRealDataCollect::addSub() { if(m_pMbComm) { return m_pMbComm->addSub(0, CH_SCADA_TO_HMI_DATA_CHANGE); } else { return false; } } bool BTRealDataCollect::delSub() { if(m_pMbComm) { return m_pMbComm->delSub(0, CH_SCADA_TO_HMI_DATA_CHANGE); } else { return false; } } void BTRealDataCollect::recvMessage() { m_nTimeCount = (m_nTimeCount + 1) % 36000; if(m_nTimeCount % 10 == 0) { processChangeData(); } try { iot_net::CMbMessage objMsg; for(int i = 0; i < 6; i++) { if(m_pMbComm->recvMsg(objMsg, 0)) { if(objMsg.isValid()) { if(objMsg.getMsgType() != iot_idl::MT_DP_CHANGE_DATA) { continue; } if(objMsg.getChannelID() != CH_SCADA_TO_HMI_DATA_CHANGE) { continue; } parserMsg(objMsg); } } } } catch(...) { } } void BTRealDataCollect::processChangeData() { if(!m_aiMap.isEmpty()) { emit signal_updateAi(m_aiMap); m_aiMap.clear(); } if(!m_diMap.isEmpty()) { emit signal_updateDi(m_diMap); m_diMap.clear(); } if(!m_piMap.isEmpty()) { emit signal_updatePi(m_piMap); m_piMap.clear(); } if(!m_miMap.isEmpty()) { emit signal_updateMi(m_miMap); m_miMap.clear(); } } int BTRealDataCollect::parserMsg(const iot_net::CMbMessage &msg) { iot_idl::SRealTimeDataPkg changeDataPackage; try { changeDataPackage.ParseFromArray(msg.getDataPtr(),(int)msg.getDataSize()); int aiSize = changeDataPackage.stairtd_size(); if(aiSize > 0) { iot_idl::SAiRealTimeData aiStru; QString tagName; float value; uint status; for(int i = 0; i < aiSize;++i) { aiStru = changeDataPackage.stairtd(i); tagName = QString::fromStdString(aiStru.strtagname()); value = aiStru.fvalue(); status = aiStru.ustatus(); m_aiMap[tagName] = qMakePair(value, status); //QString logParserMsgAiMap = QString("BTRealDataCollect parserMsg-tagName-value-status-->%1-%2-%3").arg(tagName).arg(value).arg(status); //LOGERROR(logParserMsgAiMap.toStdString().c_str()); } } /* int diSize = changeDataPackage.stdirtd_size(); if(diSize > 0) { iot_idl::SDiRealTimeData diStu; QString tagName; int value; uint status; for(int i = 0; i < diSize; ++i) { diStu = changeDataPackage.stdirtd(i); tagName = QString::fromStdString(diStu.strtagname()); value = diStu.nvalue(); status = diStu.ustatus(); m_diMap[tagName] = qMakePair(value, status); } } int piSize = changeDataPackage.stpirtd_size(); if(piSize > 0) { iot_idl::SPiRealTimeData piStu; QString tagName; double value; uint status; for(int i = 0 ; i < piSize; ++i) { piStu = changeDataPackage.stpirtd(i); tagName = QString::fromStdString(piStu.strtagname()); value = piStu.dvalue(); status = piStu.ustatus(); m_piMap[tagName] = qMakePair(value, status); } } int miSize = changeDataPackage.stmirtd_size(); if(miSize > 0) { iot_idl::SMiRealTimeData miStu; QString tagName; int value; uint status; for(int i = 0 ; i < miSize ; ++i) { miStu = changeDataPackage.stmirtd(i); tagName = QString::fromStdString(miStu.strtagname()); value = miStu.nvalue(); status = miStu.ustatus(); m_miMap[tagName] = qMakePair(value, status); } }*/ } catch(...) { return 0; } return 1; }