📄 commstatedialog.cpp
字号:
// CommStateDialog.cpp : implementation file
//
#include "stdafx.h"
#include "fert2000.h"
#include "CommStateDialog.h"
#include "ChanDialog.h"
#include "PasswordDialog.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern bool bStopFlag;
extern CHANNEL Channels[MAX_CHANNEL_NUM];
extern RTU Rtus[MAX_RTU_NUM];
extern SYSTEMCOUNT SystemCount;
//extern CDatabase Database;
extern BYTE DebugCommand[0x23];//当前调试的命令数组
extern char DebugRtuNo;
extern EVENT Events;
extern RecSendThread RecSendThread1;
extern long ProgramStartTime;
extern NetProcess NetProcess1;
extern char YKEchoFlag[MAX_RTU_NUM];
extern BYTE YKEcho[MAX_RTU_NUM][6];//?
extern BYTE YKReserved[24];//?
extern unsigned char TBCH0[];
/////////////////////////////////////////////////////////////////////////////
// CCommStateDialog dialog
CCommStateDialog::CCommStateDialog(CWnd* pParent /*=NULL*/)
: CDialog(CCommStateDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CCommStateDialog)
m_CurDate = _T("");
//}}AFX_DATA_INIT
}
void CCommStateDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCommStateDialog)
DDX_Control(pDX, IDC_FLEX_CHECKCHAN, m_CommState);
DDX_Text(pDX, IDC_EDIT1, m_CurDate);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCommStateDialog, CDialog)
//{{AFX_MSG_MAP(CCommStateDialog)
ON_WM_TIMER()
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_MODI_PARA, OnModiPara)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCommStateDialog message handlers
BOOL CCommStateDialog::OnInitDialog()
{
CDialog::OnInitDialog();
InitData();
m_CommState.SetColAlignment (0,2);
m_CommState.SetColAlignment (13,2);
SetTimer(10,10 * 1000,NULL);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCommStateDialog::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
char Data[50],Cols = 38,RtuNo;
int RtuNoPtr=0;
CTime SysTime = CTime::GetCurrentTime();
CTimeSpan RunTime(SysTime.GetTime() - ProgramStartTime);
m_CurDate.Format("%04d年%02d月%02d日",SysTime.GetYear(),SysTime.GetMonth(),SysTime.GetDay());
for (int i = 0;i < SystemCount.RtuNum ;i++)
{
RtuNo = i;
RtuNoPtr ++;
if (!Rtus[RtuNo].Flag/* || !Channels[Rtus[RtuNo].RtuChNo].Flag*/) continue;
if (/*Channels[Rtus[RtuNo].RtuChNo].Flag &&*/ Rtus[RtuNo].Flag)
{
if (Rtus[RtuNo].bFault)
{
char ok[] = "正常";
if (m_CommState.GetTextArray(RtuNoPtr*Cols+2) == ok)
{
m_CommState.SetRow(RtuNoPtr);
m_CommState.SetCol(2);
m_CommState.SetCellForeColor(RGB(255,0,0));
}
m_CommState.SetTextArray(RtuNoPtr*Cols+2,"故障");
}
else
{
char error[] = "故障";
if (m_CommState.GetTextArray(RtuNoPtr*Cols+2) == error)
{
m_CommState.SetRow(RtuNoPtr);
m_CommState.SetCol(2);
m_CommState.SetCellForeColor(RGB(0,192,128));
}
m_CommState.SetTextArray(RtuNoPtr*Cols+2,"正常");
}
}else
m_CommState.SetTextArray(RtuNoPtr*Cols+2,"未用");
sprintf(Data,"%d:%02d:%02d\0",Rtus[RtuNo].FaultTime/3600,(Rtus[RtuNo].FaultTime%3600)/60,Rtus[RtuNo].FaultTime%60);
m_CommState.SetTextArray(RtuNoPtr*Cols+3,Data);
sprintf(Data,"%.1f\0",100.0-(float)Rtus[RtuNo].FaultTime/RunTime.GetTotalSeconds()*100);
m_CommState.SetTextArray(RtuNoPtr*Cols+4,Data);
sprintf(Data,"%d\0",Rtus[RtuNo].RecFrameSum);
m_CommState.SetTextArray(RtuNoPtr*Cols+5,Data);
sprintf(Data,"%d\0",Rtus[RtuNo].ErrFrameSum);
m_CommState.SetTextArray(RtuNoPtr*Cols+6,Data);
sprintf(Data,"%.1f\0",Rtus[RtuNo].ErrRate[24]);
m_CommState.SetTextArray(RtuNoPtr*Cols+7,Data);
for (int k = 0;k < 24;k++)
{
sprintf(Data,"%.1f\0",Rtus[RtuNo].ErrRate[k]);
m_CommState.SetTextArray(RtuNoPtr*Cols+14+k,Data);
}
}
CDialog::OnTimer(nIDEvent);
}
void CCommStateDialog::OnDestroy()
{
KillTimer(10);
CDialog::OnDestroy();
}
void CCommStateDialog::OnOK()
{
// TODO: Add extra validation here
return;
//CDialog::OnOK();
}
void CCommStateDialog::OnModiPara()
{
// TODO: Add your control notification handler code here
CPasswordDialog Dlg;
Dlg.DoModal();
if (Dlg.Pass)
{
CChanDialog Dlg;
Dlg.DoModal();
InitData();
}else return;
}
void CCommStateDialog::InitData()
{
int Cols = 38,RtuNo,RtuNoPtr=1;
char Data[50];
CTime SysTime = CTime::GetCurrentTime();
CTimeSpan RunTime(SysTime.GetTime() - ProgramStartTime);
// TODO: Add extra initialization here
m_CurDate.Format("%04d年%02d月%02d日",SysTime.GetYear(),SysTime.GetMonth(),SysTime.GetDay());
m_CommState.SetRows (SystemCount.RtuNum + 1);
for (int i = 0;i < SystemCount.RtuNum ;i++)
{
RtuNo = i;//Channels[i].ChRtuNo[j];
sprintf(Data,"%d-%s\0",RtuNo,Rtus[RtuNo].Name);
m_CommState.SetTextArray(RtuNoPtr*Cols,Data);
if (Rtus[RtuNo].Flag )
sprintf(Data,"COM%d\0",Rtus[RtuNo].RtuChNo+1);
else
{
CString str1 = "未定义";
lstrcpy(Data,str1);
}
m_CommState.SetTextArray(RtuNoPtr*Cols+1,Data);
if (/*Channels[Rtus[RtuNo].RtuChNo].Flag && */Rtus[RtuNo].Flag)
{
if (Rtus[RtuNo].bFault)
{
m_CommState.SetRow(RtuNoPtr);
m_CommState.SetCol(2);
m_CommState.SetCellForeColor(RGB(255,0,0));
m_CommState.SetTextArray(RtuNoPtr*Cols+2,"故障");
}
else
{
m_CommState.SetRow(RtuNoPtr);
m_CommState.SetCol(2);
m_CommState.SetCellForeColor(RGB(0,192,128));
m_CommState.SetTextArray(RtuNoPtr*Cols+2,"正常");
}
}
else
m_CommState.SetTextArray(RtuNoPtr*Cols+2,"未用");
sprintf(Data,"%d:%02d:%02d\0",Rtus[RtuNo].FaultTime/3600,(Rtus[RtuNo].FaultTime%3600)/60,Rtus[RtuNo].FaultTime%60);
m_CommState.SetTextArray(RtuNoPtr*Cols+3,Data);
sprintf(Data,"%.1f\0",100.0-(float)Rtus[RtuNo].FaultTime/RunTime.GetTotalSeconds()*100);
m_CommState.SetTextArray(RtuNoPtr*Cols+4,Data);
sprintf(Data,"%d\0",Rtus[RtuNo].RecFrameSum);
m_CommState.SetTextArray(RtuNoPtr*Cols+5,Data);
sprintf(Data,"%d\0",Rtus[RtuNo].ErrFrameSum);
m_CommState.SetTextArray(RtuNoPtr*Cols+6,Data);
sprintf(Data,"%.1f\0",(float)Rtus[RtuNo].ErrFrameSum/(Rtus[RtuNo].RecFrameSum+1)*100);
m_CommState.SetTextArray(RtuNoPtr*Cols+7,Data);
if (Channels[Rtus[RtuNo].RtuChNo].SorA) m_CommState.SetTextArray(RtuNoPtr*Cols+8,"异步");
else m_CommState.SetTextArray(RtuNoPtr*Cols+8,"同步");
int bps[16] = {75,150,300,600,1200,2400,4800,9600,19200,38400,57600,115200,230400,460800,921600};
sprintf(Data,"%d\0",bps[Channels[Rtus[RtuNo].RtuChNo].Baud]);
m_CommState.SetTextArray(RtuNoPtr*Cols+9,Data);
if (Channels[Rtus[RtuNo].RtuChNo].EndBit == 0) m_CommState.SetTextArray(RtuNoPtr*Cols+10,"1\0");
else if (Channels[Rtus[RtuNo].RtuChNo].EndBit == 1) m_CommState.SetTextArray(RtuNoPtr*Cols+10,"1.5");
else m_CommState.SetTextArray(RtuNoPtr*Cols+10,"2\0");
if (Channels[Rtus[RtuNo].RtuChNo].ParityBit == 0)
m_CommState.SetTextArray(RtuNoPtr*Cols+11," 无 ");
else if (Channels[Rtus[RtuNo].RtuChNo].ParityBit == 1)
m_CommState.SetTextArray(RtuNoPtr*Cols+11," 奇 ");
else
m_CommState.SetTextArray(RtuNoPtr*Cols+11," 偶 ");
if(!Channels[Rtus[RtuNo].RtuChNo].ParityBit)
m_CommState.SetTextArray(RtuNoPtr*Cols+12,"0\0");
sprintf(Data,"%d\0",Channels[Rtus[RtuNo].RtuChNo].DataBit+5);
m_CommState.SetTextArray(RtuNoPtr*Cols+12,Data);
if (Rtus[RtuNo].Protocol == 1 || Rtus[RtuNo].Protocol == 5)
Data[0] = '\0';
else
sprintf(Data,"%02x%02x%02x%02x%02x%02x",Rtus[RtuNo].SynWord[1],Rtus[RtuNo].SynWord[2],
Rtus[RtuNo].SynWord[3],Rtus[RtuNo].SynWord[4],Rtus[RtuNo].SynWord[5],Rtus[RtuNo].SynWord[6]);
m_CommState.SetTextArray(RtuNoPtr*Cols+13,Data);
RtuNoPtr ++;
}
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -