248 lines
5.5 KiB
C++
Raw Normal View History

2025-03-14 17:05:48 +08:00
#include "BTRealDataCollect.h"
#include <QObject>
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)
{
2025-03-17 09:23:17 +08:00
m_pMbComm = new iot_net::CMbCommunicator("BusbarTemperatureWidget");
2025-03-14 17:05:48 +08:00
}
}
void BTRealDataCollect::closeMsg()
{
if(m_pMbComm != NULL)
{
delete m_pMbComm;
}
m_pMbComm = NULL;
}
void BTRealDataCollect::clearMsg()
{
if(m_pMbComm)
{
2025-03-17 09:23:17 +08:00
iot_net::CMbMessage objMsg;
2025-03-14 17:05:48 +08:00
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
{
2025-03-17 09:23:17 +08:00
iot_net::CMbMessage objMsg;
2025-03-14 17:05:48 +08:00
for(int i = 0; i < 6; i++)
{
if(m_pMbComm->recvMsg(objMsg, 0))
{
if(objMsg.isValid())
{
2025-03-17 09:23:17 +08:00
if(objMsg.getMsgType() != iot_idl::MT_DP_CHANGE_DATA)
2025-03-14 17:05:48 +08:00
{
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();
}
}
2025-03-17 09:23:17 +08:00
int BTRealDataCollect::parserMsg(const iot_net::CMbMessage &msg)
2025-03-14 17:05:48 +08:00
{
2025-03-17 09:23:17 +08:00
iot_idl::SRealTimeDataPkg changeDataPackage;
2025-03-14 17:05:48 +08:00
try
{
changeDataPackage.ParseFromArray(msg.getDataPtr(),(int)msg.getDataSize());
int aiSize = changeDataPackage.stairtd_size();
if(aiSize > 0)
{
2025-03-17 09:23:17 +08:00
iot_idl::SAiRealTimeData aiStru;
2025-03-14 17:05:48 +08:00
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<float, uint>(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)
{
2025-03-17 09:23:17 +08:00
iot_idl::SDiRealTimeData diStu;
2025-03-14 17:05:48 +08:00
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<int, uint>(value, status);
}
}
int piSize = changeDataPackage.stpirtd_size();
if(piSize > 0)
{
2025-03-17 09:23:17 +08:00
iot_idl::SPiRealTimeData piStu;
2025-03-14 17:05:48 +08:00
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<double, uint>(value, status);
}
}
int miSize = changeDataPackage.stmirtd_size();
if(miSize > 0)
{
2025-03-17 09:23:17 +08:00
iot_idl::SMiRealTimeData miStu;
2025-03-14 17:05:48 +08:00
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<int, uint>(value, status);
}
}*/
}
catch(...)
{
return 0;
}
return 1;
}