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

📄 fert2000dlg.cpp

📁 这是一个变电站的监控程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				{
					if(++Rtus[j].NoDataTime >120 && Rtus[j].bFault == false) 
					{
						Rtus[j].FaultTime += 121;
						nFaultTime[j] += 121;
						Rtus[j].bFault = true;
						ChannelEvent(j,1);//RTU 故障
					}
					if (Rtus[j].bFault) 
					{
						Rtus[j].FaultTime++;
						nFaultTime[j]++;
//						if (iRtuStatusCount % 30 == 0)
//							ChannelEvent(j,1);//RTU 故障
						//Add by yzw 2001.4.18
						if(nFaultTime[j]>300)
						{
							nFaultTime[j] = 0;
							Channels[Rtus[j].RtuChNo].bReInit = true;
						}
					}
				}
			}
		}

		if (iCount % 40 == 0)
		{
			int aaaa=(NetProcess1.Receive_ATB_Number - NetProcess1.Previous_Receive_ATB_Number+10000)%10000;
			if (aaaa< 1)
			{
				if (NetProcess1.mainfertid == NetProcess1.ThisNodeId)
				{
					if (NetProcess1.ThisNodeId == 'A')
						NetProcess1.mainfertid = 'B';
					if (NetProcess1.ThisNodeId == 'B')
						NetProcess1.mainfertid = 'A';
				}

				NetProcess1.Previous_Receive_ATB_Number = NetProcess1.Receive_ATB_Number;
			}
			else
				NetProcess1.Previous_Receive_ATB_Number = NetProcess1.Receive_ATB_Number;
		}
		CString str1;
		switch (SystemTime.wDayOfWeek)
		{
			case 0:
				str1 = "星期日    ";
				break;
			case 1:
				str1 = "星期一    ";
				break;
			case 2:
				str1 = "星期二    ";
				break;
			case 3:
				str1 = "星期三    ";
				break;
			case 4:
				str1 = "星期四    ";
				break;
			case 5:
				str1 = "星期五    ";
				break;
			case 6:
				str1 = "星期六    ";
				break;
		}
		CString str2;
		str2.Format ("%04d年%02d月%02d日%02d时%02d分%02d秒  ",
			SystemTime.wYear,SystemTime.wMonth,SystemTime.wDay,SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond);
		CString str0;
		str0.Format("本机前置%c   主后台机 %c   主前置机%c   ",NetProcess1.ThisNodeId,
			NetProcess1.mainhostid,NetProcess1.mainfertid);
		m_Disp = str0 + str2 + str1;
		UpdateData(FALSE);
	
		DispBufferData();
		int k;
		if (iCount%60==0) for ( k=0;k<SystemCount.ChNum;k++)Channels[k].ReviseTimeFlag |= 16;
		if (iCount%10==0) for ( k=0;k<SystemCount.ChNum;k++)Channels[k].ReviseTimeFlag |= 1;
		if (iCount%1500==0) for (k=0;k<SystemCount.ChNum;k++) Channels[k].ReviseTimeFlag |= 2;
		if (iCount%1200== 0)for (k=0;k<SystemCount.ChNum;k++) Channels[k].ReviseTimeFlag |= 4;
		if (iCount%2 == 0) for (k=0;k<SystemCount.RtuNum;k++) Rtus[k].ReSendTimeFlag = Rtus[k].ReSendTimeFlag++%256;
	}
	CDialog::OnTimer(nIDEvent);
}

void CFert2000Dlg::OnRButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CMenu *PopupMenu,*pMenu;

	ClientToScreen(&point);
	PopupMenu = CDialog::GetMenu();
	pMenu=PopupMenu->GetSubMenu(2);

	if (pMenu)
		pMenu->TrackPopupMenu (TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this,NULL);
	CDialog::OnRButtonUp(nFlags, point);
}

void CFert2000Dlg::OnChanvar() 
{
	// TODO: Add your command handler code here
	if (!theApp.m_bPermit)
	{
		AfxMessageBox("你没有登录!",MB_OK + MB_ICONSTOP);
		return;
	}
	if (!SystemCount.ChNum)
	{
		MessageBox("通道数为零!\n请先设置系统参数!","错误",MB_OK|MB_ICONSTOP);
		return;
	}
	CChanDialog ChannelDia;
	ChannelDia.DoModal();
	m_ChNo.ResetContent();
	CString str1;
//	m_ChNo.AddString("计算机COM1");
//	m_ChNo.AddString("计算机COM2");
	for(int i=0;i<SystemCount.ChNum;i++)
	{
		str1.Format("COM%d",i+1);
		m_ChNo.AddString(str1);
	}
	m_ChNo.SetCurSel (m_ChSelNo);
	FillRtuNo(m_ChSelNo);
}


void CFert2000Dlg::OnSysVar() 
{
	// TODO: Add your command handler code here
	if (!theApp.m_bPermit)
	{
		AfxMessageBox("你没有登录!",MB_OK + MB_ICONSTOP);
		return;
	}
	int iChanNum = SystemCount.ChNum ;
	CSystemCount SysCountDlg;
	SysCountDlg.DoModal();
	if (iChanNum != SystemCount.ChNum )
	{
		m_ChNo.ResetContent();
		CString str1;
//		m_ChNo.AddString("计算机COM1");
//		m_ChNo.AddString("计算机COM2");
		for(int i=0;i<SystemCount.ChNum;i++)
		{
			str1.Format("COM%d",i+1);
			m_ChNo.AddString(str1);
		}
		m_ChNo.SetCurSel (m_ChSelNo);
		FillRtuNo(m_ChSelNo);
	}
}


void CFert2000Dlg::OnYcData() 
{
	// TODO: Add your command handler code here
	if (!SystemCount.ChNum)
	{
		MessageBox("通道数为零!\n请先设置系统参数!","错误",MB_OK|MB_ICONSTOP);
		return;
	}
	CYcDataDialog Dlg;
	Dlg.DoModal();
}


void CFert2000Dlg::OnCheckChan() 
{
	// TODO: Add your command handler code here
	if (!SystemCount.ChNum)
	{
		MessageBox("通道数为零!\n请先设置系统参数!","错误",MB_OK|MB_ICONSTOP);
		return;
	}
	CCommStateDialog Dlg;
	Dlg.DoModal();
}

void CFert2000Dlg::OnUserManage() 
{
	// TODO: Add your command handler code here
	if (!theApp.m_bPermit)
	{
		AfxMessageBox("你没有登录!",MB_OK + MB_ICONSTOP);
		return;
	}
	CUserManage Dlg;
	if (bAdministrator) Dlg.bManage = true;
	else Dlg.bManage = false;
	Dlg.CurUserName = CurUserName;
	Dlg.DoModal();
}


void CFert2000Dlg::OnSysLock() 
{
	// TODO: Add your command handler code here
	CMenu *menu = GetMenu();
	ASSERT(menu!=NULL);
	if (!theApp.m_bPermit)
	{
		CPasswordDialog Dlg;
		Dlg.DoModal();
		if (Dlg.Pass)
		{
			theApp.m_bPermit = true;
			bAdministrator = Dlg.bAdministrator;
			CurUserName = Dlg.m_UserName;
			menu->ModifyMenu(IDM_SYS_LOCK,MF_BYCOMMAND|MF_STRING,IDM_SYS_LOCK,"注销登录");
		}
		else theApp.m_bPermit = false;
	}
	else 
	{
		menu->ModifyMenu(IDM_SYS_LOCK,MF_BYCOMMAND|MF_STRING,IDM_SYS_LOCK,"系统登录");
		theApp.m_bPermit = false;
	}
	DrawMenuBar();
}


void CFert2000Dlg::ShowBuffer(int DispType,bool ReShow,BYTE OldSend,BYTE OldRec)// ShowType = 1 Send;ShowType = 2 Rec;=3 Send and Rec;
{
	CClientDC dc(this);
	CFont Font,*OldFont;
	dc.SetMapMode(MM_TEXT);
	Font.CreatePointFont(120,"Fixedsys");
	OldFont = dc.SelectObject(&Font);
	COLORREF Color;
	CPen Pen,*pOldPen;
	Color = RGB(0xc0,0xc0,0xc0);
	Pen.CreatePen(PS_SOLID,1,Color);
	pOldPen = dc.SelectObject(&Pen);
	if ((DispType & 0x1) && ((ShowType == 0)||(ShowType == 2)))
	{
		if (ReShow)
		{
			COLORREF OldColor = dc.SetTextColor(SendColor[OldSend]);
			int Count = ((CurSendRow-OldSend) + SendSize.cy) % SendSize.cy + 1;
			int Y = SendBufferRect.top + OldSend*(FontHeight+5)+3;
			for(int i=0;i<Count;i++)
			{
				dc.FillSolidRect(SendBufferRect.left,Y,
					SendBufferRect.Width(),FontHeight+1,RGB(0XFF,0XFF,0XFF));
				dc.TextOut(SendBufferRect.left,Y,SendShowStr[OldSend]);
				OldSend = (BYTE)(++OldSend % SendSize.cy);
				Y = SendBufferRect.top + OldSend*(FontHeight+5) + 3;
			}
			dc.SetTextColor(OldColor);
		}
		else
		{
			int i,j;
			CPen Pen(0,1,RGB(0x80,0x80,0x80));
			CPen *OldPen = dc.SelectObject(&Pen);
			dc.FillSolidRect(&SendBufferRect,RGB(0xff,0xff,0xff));
			dc.MoveTo(SendBufferRect.left-1,SendBufferRect.top-2);
			dc.LineTo(SendBufferRect.right+1,SendBufferRect.top-2);
			dc.MoveTo(SendBufferRect.left-2,SendBufferRect.top-1);
			dc.LineTo(SendBufferRect.left-2,SendBufferRect.bottom+1);
			CPen Pen3(0,1,RGB(0x10,0x10,0x10));
			dc.SelectObject(&Pen3);
			dc.MoveTo(SendBufferRect.left-2,SendBufferRect.top-1);
			dc.LineTo(SendBufferRect.right+2,SendBufferRect.top-1);
			dc.MoveTo(SendBufferRect.left-1,SendBufferRect.top-2);
			dc.LineTo(SendBufferRect.left-1,SendBufferRect.bottom+1);

			CPen Pen1(0,1,RGB(0XC0,0XC0,0XC0));
			dc.SelectObject(&Pen1);
			dc.MoveTo(SendBufferRect.left-2,SendBufferRect.bottom+1);
			dc.LineTo(SendBufferRect.right+2,SendBufferRect.bottom+1);
			dc.MoveTo(SendBufferRect.right,SendBufferRect.top-2);
			dc.LineTo(SendBufferRect.right,SendBufferRect.bottom + 2);
			CPen Pen2(0,1,RGB(0Xf0,0Xf0,0Xf0));
			dc.SelectObject(&Pen2);
			dc.MoveTo(SendBufferRect.left-2,SendBufferRect.bottom+2);
			dc.LineTo(SendBufferRect.right+2,SendBufferRect.bottom+2);
			dc.MoveTo(SendBufferRect.right+1,SendBufferRect.top-2);
			dc.LineTo(SendBufferRect.right+1,SendBufferRect.bottom + 2);
			dc.SelectObject(OldPen);//以上是画立体边框
			dc.SetBkColor(RGB(0xc0,0xc0,0xc0));
			dc.SetTextColor(RGB(0,0,0));
			dc.TextOut(SendBufferRect.left,SendBufferRect.top-18,_T("发送缓冲区:"));
			dc.SetBkColor(RGB(0xff,0xff,0xff));
			long Y = SendBufferRect.top, Cx = SendBufferRect.Width();
			for (i=0;i<(SendSize.cy-1);i++)
			{
				Y += FontHeight + 5;
				dc.MoveTo(SendBufferRect.left,Y);
				dc.LineTo(SendBufferRect.left+ Cx,Y);
			}
			Y = SendBufferRect.top+3;
			for (j =0;j<SendSize.cy-1;j++)
			{
				dc.SetTextColor(SendColor[j]);
				dc.TextOut(SendBufferRect.left,Y,SendShowStr[j]);
				Y += FontHeight + 5;
			}
		}
	}
	if ((DispType & 0x2) && ((ShowType == 0)||(ShowType == 1)))
	{
		if (ReShow)
		{
			COLORREF OldColor = dc.SetTextColor(RecColor[OldRec]);
			int Count = ((CurRecRow-OldRec) + RecSize.cy) % RecSize.cy +1;
			int Y = RecBufferRect.top + OldRec*(FontHeight+5)+3;
			for(int i=0;i<Count;i++)
			{
				dc.FillSolidRect(RecBufferRect.left,Y,
					RecBufferRect.Width(),FontHeight+1,RGB(0xff,0xff,0xff));
				dc.TextOut(RecBufferRect.left,Y,RecShowStr[OldRec]);
				OldRec = (BYTE)(++OldRec % RecSize.cy);
				Y = RecBufferRect.top + OldRec*(FontHeight+5) + 3;
			}
			dc.SetTextColor(OldColor);
		}
		else
		{
			int i;
			CPen Pen(0,1,RGB(0x80,0x80,0x80));
			CPen *OldPen = dc.SelectObject(&Pen);
			dc.FillSolidRect(&RecBufferRect,RGB(0xff,0xff,0xff));
			dc.MoveTo(RecBufferRect.left-1,RecBufferRect.top-2);
			dc.LineTo(RecBufferRect.right+1,RecBufferRect.top-2);
			dc.MoveTo(RecBufferRect.left-2,RecBufferRect.top-1);
			dc.LineTo(RecBufferRect.left-2,RecBufferRect.bottom+1);
			CPen Pen3(0,1,RGB(0x10,0x10,0x10));
			dc.SelectObject(&Pen3);
			dc.MoveTo(RecBufferRect.left-2,RecBufferRect.top-1);
			dc.LineTo(RecBufferRect.right+2,RecBufferRect.top-1);
			dc.MoveTo(RecBufferRect.left-1,RecBufferRect.top-2);
			dc.LineTo(RecBufferRect.left-1,RecBufferRect.bottom+1);

			CPen Pen1(0,1,RGB(0XC0,0XC0,0XC0));
			dc.SelectObject(&Pen1);
			dc.MoveTo(RecBufferRect.left-2,RecBufferRect.bottom);
			dc.LineTo(RecBufferRect.right+2,RecBufferRect.bottom);
			dc.MoveTo(RecBufferRect.right,RecBufferRect.top-2);
			dc.LineTo(RecBufferRect.right,RecBufferRect.bottom + 2);
			CPen Pen2(0,1,RGB(0Xf0,0Xf0,0Xf0));
			dc.SelectObject(&Pen2);
			dc.MoveTo(RecBufferRect.left-2,RecBufferRect.bottom+1);
			dc.LineTo(RecBufferRect.right+2,RecBufferRect.bottom+1);
			dc.MoveTo(RecBufferRect.right+1,RecBufferRect.top-2);
			dc.LineTo(RecBufferRect.right+1,RecBufferRect.bottom + 2);
			dc.SelectObject(OldPen);//以上是画立体边框

			dc.SetBkColor(RGB(0xc0,0xc0,0xc0));
			dc.SetTextColor(RGB(0,0,0));
			dc.TextOut(RecBufferRect.left,RecBufferRect.top-18,_T("接收缓冲区:"));
			dc.SetBkColor(RGB(0xFF,0xff,0xff));
			long Y = RecBufferRect.top,Cx = RecBufferRect.Width();
			for (i=0;i<(RecSize.cy-1);i++)
			{
				Y += FontHeight + 5;
				dc.MoveTo(RecBufferRect.left,Y);
				dc.LineTo(RecBufferRect.left + Cx,Y);
			}
			Y = RecBufferRect.top+3;
			for (i = 0;i<RecSize.cy;i++)
			{
				dc.SetTextColor(RecColor[i]);
				dc.TextOut(RecBufferRect.left,Y,(LPCTSTR)RecShowStr[i]);
				Y += FontHeight + 5;
			}
		}
	}
	dc.SelectObject (OldFont);
	Font.DeleteObject ();
	dc.SelectObject (pOldPen);
	Pen.DeleteObject ();
}

void CFert2000Dlg::OnSize(UINT nType, int cx, int cy) 
{
	return;//无效
	CDialog::OnSize(nType, cx, cy);
	CRect ClientRect;
	long SendCy =0,RecCy =0,Cx = 0;

	GetClientRect(&ClientRect);
	ClientRect.top += 45;
	ClientRect.bottom -= 14;
	ClientRect.left += 14;
	ClientRect.right -= 14;
	SendCy = (ClientRect.bottom - ClientRect.top) * 3/5;
	RecCy = (ClientRect.bottom - ClientRect.top) * 2/5 - 20;
	Cx = ClientRect.right - ClientRect.left;
	SendBufferRect.left = ClientRect.left;
	SendBufferRect.top = ClientRect.top;
	SendBufferRect.right = ClientRect.right;
	RecBufferRect.left = ClientRect.left;
	RecBufferRect.top = ClientRect.top + SendCy + 20;

	SendSize.cx = (int)(Cx / FontWidth / 3);	
	SendSize.cy = (int)(SendCy / (FontHeight+5));
	SendBufferRect.bottom = SendBufferRect.top + SendSize.cy * (FontHeight+5);

	RecSize.cx = SendSize.cx;
	RecSize.cy = (int)(RecCy / (FontHeight + 5));
	RecBufferRect.bottom = RecBufferRect.top + RecSize.cy*(FontHeight + 5);


	// TODO: Add your message handler code here
	
}

void CFert2000Dlg::DispBufferData()
{
	static COLORREF SendRecColor[]={RGB(0,0,255),RGB(0,128,128),RGB(255,0,255),RGB(128,128,0),RGB(128,0,128)};
	static SendColorPtr=0,RecColorPtr=0;
	int ShowType = 0;
	if (bShowPause) return;
	BYTE OldSendRow = CurSendRow,OldRecRow = CurRecRow;
	if (!Channels[m_CurChNo].Flag ) return; 
	if (Channels[m_CurChNo].WorkType < 3 || Channels[m_CurChNo].WorkType == 5)
	{
		if (Rtus[m_CurRtuNo].bSendCanDisp)
		{
			CString str,str2 = "";
			int Row = (Rtus[m_CurRtuNo].TXLen+SendSize.cx-1)/SendSize.cx;
			int Index = 0;
			for (int i = 0;i< Row;i++)
			{
				for (int j = 0;j<SendSize.cx;j++)
				{
					if (DispartRow && (!(Index%6)))
					{
						str2 += "   ";
						j++;
						if (j>=SendSize.cx) continue;
					}
					str.Format ("%02X ",Rtus[m_CurRtuNo].TXBuf[Index++]);
					str2 += str;
					if(Index >= Rtus[m_CurRtuNo].TXLen) break;
				}
				SendColor[CurSendRow] = SendRecColor[SendColorPtr];
				SendShowStr[CurSendRow++] = str2;
				str2 = "";
				if (CurSendRow >= SendSize.cy) CurSendRow = 0;
			}
			Rtus[m_CurRtuNo].bSendCanDisp = FALSE;
			SendShowStr[CurSendRow] = "";
			ShowType |= 0x1;
			SendColorPtr = ++SendColorPtr % 5;
		}

		if (CheckOkShow)
		{
			if (Rtus[m_CurRtuNo].bReceiveCanDisp)
			{
				CString str,str2 = "";
				int Row = (Rtus[m_CurRtuNo].RecLen+RecSize.cx-1)/RecSize.cx;
				int Index = 0;
				for (;;)
				{
					int j;
					for (j = 0;j<RecSize.cx;j++)
					{	
						if (!(Index%6))
						{
							if (ConfirmShow)
							{
								BYTE Code = Rtus[m_CurRtuNo].RecBuf[Index];
								if (Index && ((Code < ShowStartCode) || (Code > ShowEndCode)))
								{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -