⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commstatedialog.cpp

📁 这是一个变电站的监控程序
💻 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 + -