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;
|
|
|
|
|
}
|
|
|
|
|
|