HM-SPMS/product/src/fes/fesSim/FesSim/fwaccmondlg.cpp

733 lines
23 KiB
C++
Raw Normal View History

#include "fwaccmondlg.h"
#include "ui_fwaccmondlg.h"
#include <QMessageBox>
#include <QDateTime>
FwAccMonDlg::FwAccMonDlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::FwAccMonDlg)
{
ui->setupUi(this);
m_tz=QTimeZone::systemTimeZone();
Qt::WindowFlags flags=Qt::Window;
// flags |=Qt::WindowMinMaxButtonsHint|Qt::WindowCloseButtonHint;
flags |=Qt::WindowCloseButtonHint;
setWindowFlags(flags);
setFixedSize(this->width(),this->height());//固定窗口大小
setAttribute(Qt::WA_DeleteOnClose);
m_RecvBuf.resize(EN_MaxRespBufSize);
m_SendBuf.resize(EN_MaxCmdBufSize);
m_ConnectFlag=CN_CommDisconnect;
m_RtuNum = 0;
m_pRtuInfo = NULL;
m_CurrentRtuNo = -1;
m_RefreshMode = 0;
m_RefreshFlag = 0;
m_StartIndex = 0;
m_EndIndex = 0;
m_RefreshTimer = NULL;
m_FrameProcess = 0;
ui->RTUTable->setColumnWidth(0,60);
ui->RTUTable->setColumnWidth(1,60);
ui->RTUTable->setColumnWidth(2,250);
ui->PointTable->setColumnWidth(0,60);
ui->PointTable->setColumnWidth(1,60);
ui->PointTable->setColumnWidth(2,200);
ui->PointTable->setColumnWidth(3,100);
ui->PointTable->setColumnWidth(4,60);
ui->PointTable->setColumnWidth(5,200);
ui->AllValueButton->setChecked(true);
ui->SectionValueButton->setChecked(false);
m_StartIndex = -1;
m_EndIndex = -1;
m_RefreshTimer = new QTimer(this);
if(m_RefreshTimer!=NULL)
connect(m_RefreshTimer,SIGNAL(timeout()),this,SLOT(OnRefeshTimer()));
connect(ui->RtuRefreshButton,SIGNAL(clicked()),this,SLOT(OnRTURefresh()));
connect(ui->PointRefreshButton,SIGNAL(clicked()),this,SLOT(OnPointInfoRefresh()));
connect(ui->RTUTable,SIGNAL(cellClicked(int,int)),this,SLOT(OnRtuCellClick(int,int)));
connect(ui->ValueRefreshButton ,SIGNAL(clicked()),this,SLOT(OnPointValueRefresh()));
}
FwAccMonDlg::~FwAccMonDlg()
{
if(m_pRtuInfo!=NULL)
{
for(int i=0;i<m_RtuNum;i++)
{
if((m_pRtuInfo+i)->pAcc!= NULL)
free((m_pRtuInfo+i)->pAcc);
}
free(m_pRtuInfo);
}
if(m_RefreshTimer != NULL)
delete m_RefreshTimer;
delete ui;
}
void FwAccMonDlg::closeEvent(QCloseEvent *event)
{
emit closed();
QDialog::closeEvent(event);
}
void FwAccMonDlg::SetConnectFlags(int flags) //主界面传输连接标志到本窗口
{
m_ConnectFlag = flags;
}
void FwAccMonDlg::OnRTURefresh()
{
unsigned char data[40];
if(m_ConnectFlag==CN_CommDisconnect)
{
QMessageBox::warning(NULL,tr("告警"),tr("通信中断无法读取数据。请连接FES系统"));
return;
}
//stop other windows data refresh
m_CmdCode = CN_SFesSimFwRTUInfoReq;
data[0] = m_CmdCode;
data[1] = 0x00; //帧序号
data[2] = 0x00; //帧序号
data[3] = 0x00; //请求状态
int type=CN_RTUInfoType_PI;
data[4] = type&0xff; //RTUNo
data[5] = (type>>8)&0xff; //RTUNo
data[6] = (type>>16)&0xff; //RTUNo
data[7] = (type>>24)&0xff; //RTUNo
memcpy(m_SendBuf.data(),data,8);
emit SendCmdSig(m_CmdCode,m_SendBuf,8);
}
void FwAccMonDlg::OnPointInfoRefresh()
{
unsigned char data[40];
if(m_ConnectFlag==CN_CommDisconnect)
{
QMessageBox::warning(NULL,tr("告警"),tr("通信中断无法读取数据。请连接FES系统"));
return;
}
m_CmdCode = CN_SFesSimFwAccParamReq;
data[0] = m_CmdCode;
data[1] = 0x00; //帧序号
data[2] = 0x00; //帧序号
data[3] = 0x00; //请求状态
int type=CN_RTUInfoType_PI;
data[4] = type&0xff; //RTUNo
data[5] = (type>>8)&0xff; //RTUNo
data[6] = (type>>16)&0xff; //RTUNo
data[7] = (type>>24)&0xff; //RTUNo
data[8] = m_CurrentRtuNo&0xff; //RTUNo
data[9] = (m_CurrentRtuNo>>8)&0xff; //RTUNo
data[10] = (m_CurrentRtuNo>>16)&0xff; //RTUNo
data[11] = (m_CurrentRtuNo>>24)&0xff; //RTUNo
memcpy(m_SendBuf.data(),data,12);
emit SendCmdSig(m_CmdCode,m_SendBuf,12);
}
void FwAccMonDlg::OnRecvRTUInfoResp(int CmdCode,QByteArray Data,int DataLen)
{
unsigned char RecvData[EN_MaxRespBufSize];
SFesSimRTUInfo RtuInfo;
int SeqNo,TotalNum;
if(DataLen>EN_MaxRespBufSize)
return;
memcpy(RecvData,Data.data(),DataLen);
SeqNo = RecvData[1];
SeqNo |= (int)RecvData[2]<<8;
TotalNum = RecvData[8];
TotalNum |= RecvData[9]<<8;
TotalNum |= RecvData[10]<<16;
TotalNum |= RecvData[11]<<24;
if((SeqNo&0x7fff)==0)//frist frame,检查系统数据空间是否有效
{
if(TotalNum!=m_RtuNum)
{
m_RtuNum = TotalNum;
if(m_pRtuInfo!=NULL)//清除原有的空间,从新分配空间
{
m_pRtuInfo = (SFwAccMonRtu*)realloc(m_pRtuInfo,sizeof(SFwAccMonRtu)*m_RtuNum);
if(m_pRtuInfo!=NULL)
{
memset(m_pRtuInfo,0,sizeof(SFwAccMonRtu)*m_RtuNum);
}
else
m_RtuNum = 0;
}
else
{
m_pRtuInfo = (SFwAccMonRtu*)malloc(sizeof(SFwAccMonRtu)*m_RtuNum);
if(m_pRtuInfo!=NULL)
{
memset(m_pRtuInfo,0,sizeof(SFwAccMonRtu)*m_RtuNum);
}
else
m_RtuNum = 0;
}
}
else //点号相同,应该已分配过
{
if((m_pRtuInfo==NULL)&&(m_RtuNum>0))
{
m_pRtuInfo = (SFwAccMonRtu*)malloc(sizeof(SFwAccMonRtu)*m_RtuNum);
if(m_pRtuInfo!=NULL)
{
memset(m_pRtuInfo,0,sizeof(SFwAccMonRtu)*m_RtuNum);
}
else
m_RtuNum = 0;
}
}
//清除表格
ui->RTUTable->setRowCount(0);
ui->RTUTable->clearContents();
}
if(m_pRtuInfo==NULL)
return;
int readx,count,row;
count = 0;
readx = 16;
row = ui->RTUTable->rowCount();
while(readx<DataLen)
{
RtuInfo.RtuNo = RecvData[readx++];
RtuInfo.RtuNo |= RecvData[readx++]<<8;
RtuInfo.RtuNo |= RecvData[readx++]<<16;
RtuInfo.RtuNo |= RecvData[readx++]<<24;
RtuInfo.Used = RecvData[readx++];
RtuInfo.Used |= RecvData[readx++]<<8;
RtuInfo.Used |= RecvData[readx++]<<16;
RtuInfo.Used |= RecvData[readx++]<<24;
RtuInfo.MaxPoints = RecvData[readx++];
RtuInfo.MaxPoints |= RecvData[readx++]<<8;
RtuInfo.MaxPoints |= RecvData[readx++]<<16;
RtuInfo.MaxPoints |= RecvData[readx++]<<24;
memcpy(RtuInfo.RtuName,&RecvData[readx],CN_FesMaxNameSize);
readx += CN_FesMaxNameSize;
memcpy(m_pRtuInfo+row,&RtuInfo,sizeof(RtuInfo));
ui->RTUTable->insertRow(row);
ui->RTUTable->setItem(row,0,new QTableWidgetItem(QString::number(RtuInfo.RtuNo)));
ui->RTUTable->setItem(row,1,new QTableWidgetItem(QString::number(RtuInfo.Used)));
ui->RTUTable->setItem(row,2,new QTableWidgetItem(QString(RtuInfo.RtuName)));
row++;
count++;
}
//判断是否还有后续帧
if((SeqNo&CN_SFesSimFrameLastSeqNo)==0)
{
unsigned char data[40];
int temp=SeqNo+1;
m_CmdCode = CN_SFesSimFwRTUInfoReq;
data[0] = m_CmdCode;
data[1] = temp&0xff; //帧序号bit7 1: 最后一帧 0:非最后一帧
data[2] = (temp>>8)&0xff; //帧序号bit7 1: 最后一帧 0:非最后一帧
data[3] = 0x00;
int type=CN_RTUInfoType_PI;
data[4] = type&0xff; //RTUNo
data[5] = (type>>8)&0xff; //RTUNo
data[6] = (type>>16)&0xff; //RTUNo
data[7] = (type>>24)&0xff; //RTUNo
memcpy(m_SendBuf.data(),data,8);
emit SendCmdSig(m_CmdCode,m_SendBuf,8);
}
}
void FwAccMonDlg::OnRtuCellClick(int row,int column)
{
m_CurrentRtuRow = row;
QString RtuStr = ui->RTUTable->item(m_CurrentRtuRow,0)->text();
bool ok;
m_CurrentRtuNo=RtuStr.toInt(&ok,10);
if(ok==false)
m_CurrentRtuNo = -1;
else
DisplayPiParam(m_CurrentRtuNo);
}
void FwAccMonDlg::OnRecvPiParamResp(int CmdCode,QByteArray Data,int DataLen)
{
unsigned char RecvData[EN_MaxRespBufSize];
SFesSimFwAccParam param;
SFesSimFwAcc *pAcc;
SFwAccMonRtu *pRtu;
int SeqNo,RtuNo,MaxPoints,Num;
if(DataLen>EN_MaxRespBufSize)
return;
memcpy(RecvData,Data.data(),DataLen);
SeqNo = RecvData[1];
SeqNo |=(int) RecvData[2]<<8;
RtuNo = RecvData[8];
RtuNo |= RecvData[9]<<8;
RtuNo |= RecvData[10]<<16;
RtuNo |= RecvData[11]<<24;
MaxPoints = RecvData[12];
MaxPoints |= RecvData[13]<<8;
MaxPoints |= RecvData[14]<<16;
MaxPoints |= RecvData[15]<<24;
Num = RecvData[16];
Num |= RecvData[17]<<8;
Num |= RecvData[18]<<16;
Num |= RecvData[19]<<24;
if((pRtu = GetRtuByRtuNo(RtuNo))==NULL)
return;
if((SeqNo&0x7fff)==0)//frist frame,检查系统数据空间是否有效
{
if(MaxPoints!=pRtu->MaxPoints)
{
pRtu->MaxPoints = MaxPoints;
if(pRtu->pAcc!=NULL)//清除原有的空间,从新分配空间
{
pRtu->pAcc = (SFesSimFwAcc*)realloc(pRtu->pAcc,sizeof(SFesSimFwAcc)*pRtu->MaxPoints);
if(pRtu->pAcc!=NULL)
{
memset(pRtu->pAcc,0,sizeof(SFesSimFwAcc)*pRtu->MaxPoints);
}
else
pRtu->MaxPoints = 0;
}
else
{
pRtu->pAcc = (SFesSimFwAcc*)malloc(sizeof(SFesSimFwAcc)*pRtu->MaxPoints);
if(pRtu->pAcc!=NULL)
{
memset(pRtu->pAcc,0,sizeof(SFesSimFwAcc)*pRtu->MaxPoints);
}
else
pRtu->MaxPoints = 0;
}
}
else //点号相同,应该已分配过
{
if((pRtu->pAcc==NULL)&&(pRtu->MaxPoints>0))
{
pRtu->pAcc = (SFesSimFwAcc*)malloc(sizeof(SFesSimFwAcc)*pRtu->MaxPoints);
if(pRtu->pAcc!=NULL)
{
memset(pRtu->pAcc,0,sizeof(SFesSimFwAcc)*pRtu->MaxPoints);
}
else
pRtu->MaxPoints = 0;
}
}
//清除表格
ui->PointTable->setRowCount(0);
ui->PointTable->clearContents();
//分配空间
ui->PointTable->setRowCount(pRtu->MaxPoints);
}
if(pRtu->pAcc==NULL)
return;
int readx,count;
count = 0;
readx = 20;
while(readx<DataLen)
{
param.PointNo = RecvData[readx++];
param.PointNo |= RecvData[readx++]<<8;
param.PointNo |= RecvData[readx++]<<16;
param.PointNo |= RecvData[readx++]<<24;
param.Used = RecvData[readx++];
param.Used |= RecvData[readx++]<<8;
param.Used |= RecvData[readx++]<<16;
param.Used |= RecvData[readx++]<<24;
memcpy(param.PointTagName,&RecvData[readx],CN_FesMaxTagSize);
readx += CN_FesMaxTagSize;
param.FesRtuNo = RecvData[readx++];
param.FesRtuNo |= RecvData[readx++]<<8;
param.FesRtuNo |= RecvData[readx++]<<16;
param.FesRtuNo |= RecvData[readx++]<<24;
param.FesPointNo = RecvData[readx++];
param.FesPointNo |= RecvData[readx++]<<8;
param.FesPointNo |= RecvData[readx++]<<16;
param.FesPointNo |= RecvData[readx++]<<24;
if(param.PointNo<pRtu->MaxPoints)
{
pAcc = pRtu->pAcc + param.PointNo;
memcpy(&pAcc->param,&param,sizeof(param));
ui->PointTable->setItem(param.PointNo,0,new QTableWidgetItem(QString::number(param.PointNo)));
ui->PointTable->setItem(param.PointNo,1,new QTableWidgetItem(QString::number(param.Used)));
ui->PointTable->setItem(param.PointNo,2,new QTableWidgetItem(QString(param.PointTagName)));
ui->PointTable->setItem(param.PointNo,6,new QTableWidgetItem(QString::number(param.FesRtuNo)));
ui->PointTable->setItem(param.PointNo,7,new QTableWidgetItem(QString::number(param.FesPointNo)));
}
}
//判断是否还有后续帧
if((SeqNo&CN_SFesSimFrameLastSeqNo)==0)
{
unsigned char data[40];
int temp = SeqNo+1;
m_CmdCode = CN_SFesSimFwAccParamReq;
data[0] = m_CmdCode;
data[1] = temp&0xff; //帧序号bit7 1: 最后一帧 0:非最后一帧
data[2] = (temp>>8)&0xff;
data[3] = 0x00;
int type=CN_RTUInfoType_PI;
data[4] = type&0xff;
data[5] = (type>>8)&0xff;
data[6] = (type>>16)&0xff;
data[7] = (type>>24)&0xff;
data[8] = m_CurrentRtuNo&0xff; //RTUNo
data[9] = (m_CurrentRtuNo>>8)&0xff; //RTUNo
data[10] = (m_CurrentRtuNo>>16)&0xff; //RTUNo
data[11] = (m_CurrentRtuNo>>24)&0xff; //RTUNo
memcpy(m_SendBuf.data(),data,12);
emit SendCmdSig(m_CmdCode,m_SendBuf,12);
}
}
SFwAccMonRtu* FwAccMonDlg::GetRtuByRtuNo(int RtuNo)
{
int i;
SFwAccMonRtu *pRtu;
for(i=0;i<m_RtuNum;i++)
{
pRtu = m_pRtuInfo+i;
if(pRtu->RtuNo == RtuNo)
return pRtu;
}
return NULL;
}
void FwAccMonDlg::DisplayPiParam(int RtuNo)
{
int i;
SFwAccMonRtu *pRtu;
SFesSimFwAcc *pAcc;
if((pRtu = GetRtuByRtuNo(RtuNo))==NULL)
return;
ui->PointTable->setRowCount(0);
ui->PointTable->clearContents();
//分配空间
ui->PointTable->setRowCount(pRtu->MaxPoints);
for(i=0;i<pRtu->MaxPoints;i++)
{
pAcc = pRtu->pAcc+i;
ui->PointTable->setItem(i,0,new QTableWidgetItem(QString::number(pAcc->param.PointNo)));
ui->PointTable->setItem(i,1,new QTableWidgetItem(QString::number(pAcc->param.Used)));
ui->PointTable->setItem(i,2,new QTableWidgetItem(QString(pAcc->param.PointTagName)));
ui->PointTable->setItem(i,6,new QTableWidgetItem(QString::number(pAcc->param.FesRtuNo)));
ui->PointTable->setItem(i,7,new QTableWidgetItem(QString::number(pAcc->param.FesPointNo)));
}
}
void FwAccMonDlg::OnPointValueRefresh()
{
unsigned char data[40];
if(m_ConnectFlag==CN_CommDisconnect)
{
QMessageBox::warning(NULL,tr("告警"),tr("通信中断无法读取数据。请连接FES系统"));
m_RefreshFlag = 0;
ui->ValueRefreshButton->setText(tr("数据刷新"));
return;
}
if(ui->AllValueButton->isChecked())
{
m_RefreshMode = 0;
m_StartIndex = -1;
m_EndIndex = -1;
}
else
{
m_RefreshMode = 1; //section
//2018-8-31 jacky 增加区间点刷新的非法字符判断
QString str1;
QString str2;
bool ok;
str1 = ui->StartPointNo->text();
str2 = ui->EndPointNo->text();
QByteArray ba1 = str1.toLatin1();
const char *s1 = ba1.data();
while(*s1 && *s1>='0' && *s1<='9') s1++;
QByteArray ba2 = str2.toLatin1();
const char *s2 = ba2.data();
while(*s2 && *s2>='0' && *s2<='9') s2++;
if(*s1) //m_StartIndex不是纯数字
{
QMessageBox::warning(NULL,tr("告警"),tr("区域start数据非法或为负默认为0"));
m_StartIndex = 0;
}
else
{
m_StartIndex = str1.toInt(&ok,10);
}
if(*s2) //m_EndIndex不是纯数字
{
QMessageBox::warning(NULL,tr("告警"),tr("区域end数据非法或为负默认为0"));
m_EndIndex = 0;
}
else
{
m_EndIndex = str2.toInt(&ok,10);
}
if(m_EndIndex<m_StartIndex)
{
QMessageBox::warning(NULL,tr("告警"),tr("区域start 大于 区域end点数两者默认为0"));
m_StartIndex = 0;
m_EndIndex = 0;
}
}
if(m_RefreshFlag == 0)
{
m_RefreshFlag = 1;
ui->ValueRefreshButton->setText(tr("停止刷新"));
if(m_RefreshTimer != NULL)
m_RefreshTimer->start(1000);
m_FrameProcess = 1;
m_CmdCode = CN_SFesSimFwAccDataReq;
data[0] = m_CmdCode;
data[1] = 0x00; //帧序号
data[2] = 0x00; //帧序号
data[3] = 0x00; //请求状态
int type=CN_RTUInfoType_PI;
data[4] = type&0xff; //RTUNo
data[5] = (type>>8)&0xff; //RTUNo
data[6] = (type>>16)&0xff; //RTUNo
data[7] = (type>>24)&0xff; //RTUNo
data[8] = m_CurrentRtuNo&0xff; //RTUNo
data[9] = (m_CurrentRtuNo>>8)&0xff; //RTUNo
data[10] = (m_CurrentRtuNo>>16)&0xff; //RTUNo
data[11] = (m_CurrentRtuNo>>24)&0xff; //RTUNo
data[12] = m_StartIndex&0xff; //-1 all data
data[13] = (m_StartIndex>>8)&0xff;
data[14] = (m_StartIndex>>16)&0xff;
data[15] = (m_StartIndex>>24)&0xff;
data[16] = m_EndIndex&0xff;
data[17] = (m_EndIndex>>8)&0xff;
data[18] = (m_EndIndex>>8)&0xff;
data[19] = (m_EndIndex>>8)&0xff;
memcpy(m_SendBuf.data(),data,20);
emit SendCmdSig(m_CmdCode,m_SendBuf,20);
}
else
{
if(m_RefreshTimer != NULL)
m_RefreshTimer->stop();
m_RefreshFlag = 0;
ui->ValueRefreshButton->setText(tr("数据刷新"));
m_FrameProcess = 0;
}
}
void FwAccMonDlg::OnRecvPiDataResp(int CmdCode,QByteArray Data,int DataLen)
{
unsigned char RecvData[EN_MaxRespBufSize];
SFesSimAccData piData;
SFesSimFwAcc *pAcc;
SFwAccMonRtu *pRtu;
int SeqNo,RtuNo,Num;
QDateTime dt;
QString tStr;
if(DataLen>EN_MaxRespBufSize)
return;
memcpy(RecvData,Data.data(),DataLen);
SeqNo = RecvData[1];
SeqNo |=(int) RecvData[2]<<8;
RtuNo = RecvData[8];
RtuNo |= RecvData[9]<<8;
RtuNo |= RecvData[10]<<16;
RtuNo |= RecvData[11]<<24;
Num = RecvData[12];
Num |= RecvData[13]<<8;
Num |= RecvData[14]<<16;
Num |= RecvData[15]<<24;
if((pRtu = GetRtuByRtuNo(RtuNo))==NULL)
return;
int readx,count;
float fvalue;
2025-03-13 16:20:05 +08:00
double dvalue;
unsigned char* pTemp;
count = 0;
readx = 16;
2025-03-13 16:20:05 +08:00
pTemp = (unsigned char*)&dvalue;
while(readx<DataLen)
{
piData.PointNo = RecvData[readx++];
piData.PointNo |= RecvData[readx++]<<8;
piData.PointNo |= RecvData[readx++]<<16;
piData.PointNo |= RecvData[readx++]<<24;
2025-03-13 16:20:05 +08:00
// piData.Value = (uint64)RecvData[readx++];
// piData.Value |= (uint64)RecvData[readx++]<<8;
// piData.Value |= (uint64)RecvData[readx++]<<16;
// piData.Value |= (uint64)RecvData[readx++]<<24;
// piData.Value |= (uint64)RecvData[readx++]<<32;
// piData.Value |= (uint64)RecvData[readx++]<<40;
// piData.Value |= (uint64)RecvData[readx++]<<48;
// piData.Value |= (uint64)RecvData[readx++]<<56;
pTemp = (unsigned char*)&dvalue;
*pTemp = RecvData[readx++];
*(pTemp+1) = RecvData[readx++];
*(pTemp+2) = RecvData[readx++];
*(pTemp+3) = RecvData[readx++];
*(pTemp+4) = RecvData[readx++];
*(pTemp+5) = RecvData[readx++];
*(pTemp+6) = RecvData[readx++];
*(pTemp+7) = RecvData[readx++];
piData.Value = dvalue;
piData.Status = (uint32)RecvData[readx++];
piData.Status |= (uint32)RecvData[readx++]<<8;
piData.Status |= (uint32)RecvData[readx++]<<16;
piData.Status |= (uint32)RecvData[readx++]<<24;
piData.time = (uint64)RecvData[readx++];
piData.time |= (uint64)RecvData[readx++]<<8;
piData.time |= (uint64)RecvData[readx++]<<16;
piData.time |= (uint64)RecvData[readx++]<<24;
piData.time |= (uint64)RecvData[readx++]<<32;
piData.time |= (uint64)RecvData[readx++]<<40;
piData.time |= (uint64)RecvData[readx++]<<48;
piData.time |= (uint64)RecvData[readx++]<<56;
if(piData.PointNo<pRtu->MaxPoints)
{
pAcc = pRtu->pAcc + piData.PointNo;
memcpy(&pAcc->value,&piData,sizeof(piData));
dt = QDateTime::fromSecsSinceEpoch(piData.time/1000);
//dt = QDateTime::fromSecsSinceEpoch(piData.time/1000,m_tz);
tStr = dt.toString("yyyy-MM-dd hh:mm:ss");
ui->PointTable->setItem(piData.PointNo,3,new QTableWidgetItem(QString::number(piData.Value)));
ui->PointTable->setItem(piData.PointNo,4,new QTableWidgetItem(QString::number(piData.Status)));
ui->PointTable->setItem(piData.PointNo,5,new QTableWidgetItem(tStr));
}
count++;
}
//判断是否还有后续帧
if((SeqNo&CN_SFesSimFrameLastSeqNo)==0)
{
unsigned char data[40];
int temp = (SeqNo&0x7fff)+1;
m_CmdCode = CN_SFesSimFwAccDataReq;
data[0] = m_CmdCode;
data[1] = temp&0xff; //帧序号bit7 1: 最后一帧 0:非最后一帧
data[2] = (temp>>8)&0xff;
data[3] = 0x00;
int type=CN_RTUInfoType_PI;
data[4] = type&0xff; //RTUNo
data[5] = (type>>8)&0xff; //RTUNo
data[6] = (type>>16)&0xff; //RTUNo
data[7] = (type>>24)&0xff; //RTUNo
data[8] = m_CurrentRtuNo&0xff; //RTUNo
data[9] = (m_CurrentRtuNo>>8)&0xff; //RTUNo
data[10] = (m_CurrentRtuNo>>16)&0xff; //RTUNo
data[11] = (m_CurrentRtuNo>>24)&0xff; //RTUNo
data[12] = m_StartIndex&0xff; //-1 all data
data[13] = (m_StartIndex>>8)&0xff;
data[14] = (m_StartIndex>>16)&0xff;
data[15] = (m_StartIndex>>24)&0xff;
data[16] = m_EndIndex&0xff;
data[17] = (m_EndIndex>>8)&0xff;
data[18] = (m_EndIndex>>8)&0xff;
data[19] = (m_EndIndex>>8)&0xff;
memcpy(m_SendBuf.data(),data,19);
emit SendCmdSig(m_CmdCode,m_SendBuf,19);
}
else
m_FrameProcess = 0;
}
void FwAccMonDlg::OnRefeshTimer()
{
unsigned char data[40];
//if(!this->isActiveWindow())//只有激活的窗口才可发送数据,避免发送数据冲突。
// return;
if(m_FrameProcess == 1)//一次数据读取过程结束,才开始新的读取
return;
m_CmdCode = CN_SFesSimFwAccDataReq;
data[0] = m_CmdCode;
data[1] = 0x00; //帧序号bit7 1: 最后一帧 0:非最后一帧
data[2] = 0x00;
data[3] = 0x00;
int type=CN_RTUInfoType_PI;
data[4] = type&0xff; //RTUNo
data[5] = (type>>8)&0xff; //RTUNo
data[6] = (type>>16)&0xff; //RTUNo
data[7] = (type>>24)&0xff; //RTUNo
data[8] = m_CurrentRtuNo&0xff; //RTUNo
data[9] = (m_CurrentRtuNo>>8)&0xff; //RTUNo
data[10] = (m_CurrentRtuNo>>16)&0xff; //RTUNo
data[11] = (m_CurrentRtuNo>>24)&0xff; //RTUNo
data[12] = m_StartIndex&0xff; //-1 all data
data[13] = (m_StartIndex>>8)&0xff;
data[14] = (m_StartIndex>>16)&0xff;
data[15] = (m_StartIndex>>24)&0xff;
data[16] = m_EndIndex&0xff;
data[17] = (m_EndIndex>>8)&0xff;
data[18] = (m_EndIndex>>8)&0xff;
data[19] = (m_EndIndex>>8)&0xff;
memcpy(m_SendBuf.data(),data,20);
emit SendCmdSig(m_CmdCode,m_SendBuf,20);
}
void FwAccMonDlg::keyPressEvent(QKeyEvent *event)
{
switch (event ->key())
{
case Qt::Key_Escape:
break;
default:
QDialog::keyPressEvent(event);
}
}