HM-SPMS/product/src/fes/fesSim/FesSim/fwaccmondlg.cpp
2025-03-13 16:20:05 +08:00

733 lines
23 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
double dvalue;
unsigned char* pTemp;
count = 0;
readx = 16;
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;
// 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);
}
}