📄 fert2000dlg.cpp
字号:
{
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 + -