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

📄 chandialog.cpp

📁 这是一个变电站的监控程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		}
	}
	else if (theApp.ComFileFlag[CurChannelNo])
	{
		char bb[30];
		sprintf(bb,"即将关闭COM%d通道!\n请确认!\0",CurChannelNo+1);

		if (MessageBox(bb,"关闭通道",MB_YESNO|MB_ICONWARNING) == IDYES)
		{
			Channels[CurChannelNo].Flag=m_bChannelUse;
			theApp.CloseChannel(CurChannelNo);
		}
		else 
			return false;
	}
	Channels[CurChannelNo].Flag=m_bChannelUse;
	Channels[CurChannelNo].SorA=(BYTE)m_Syn;
	Channels[CurChannelNo].Baud=m_Bps;
	//Channels[CurChannelNo].Audit=m_Audit;
	Channels[CurChannelNo].EndBit=m_EndBit;
	Channels[CurChannelNo].ParityBit=m_ParityBit;
	Channels[CurChannelNo].CheckBit=m_ChanType;
	Channels[CurChannelNo].DataBit=m_DataBit;
	Channels[CurChannelNo].ChRtuNum=m_RtuNum+1;
	if (Channels[CurChannelNo].Protocol != m_StandardName)
	{
		bCurChannelModi = true;
		Channels[CurChannelNo].Protocol=m_StandardName;
	}
	Channels[CurChannelNo].WorkType = m_WorkType;

	Channels[CurChannelNo].ChRtuNo[0]=(BYTE)m_Rtu1No;
	Channels[CurChannelNo].ChRtuNo[1]=(BYTE)m_Rtu2No;
	Channels[CurChannelNo].ChRtuNo[2]=(BYTE)m_Rtu3No;
	Channels[CurChannelNo].ChRtuNo[3]=(BYTE)m_Rtu4No;
	Channels[CurChannelNo].ChRtuNo[4]=(BYTE)m_Rtu5No;
	Channels[CurChannelNo].ChRtuNo[5]=(BYTE)m_Rtu6No;
	Channels[CurChannelNo].ChRtuNo[6]=(BYTE)m_Rtu7No;
	Channels[CurChannelNo].ChRtuNo[7]=(BYTE)m_Rtu8No;
	for (int l=0;l<Channels[CurChannelNo].ChRtuNum;l++)
		Rtus[Channels[CurChannelNo].ChRtuNo[l]].RtuChNo = CurChannelNo;
	if (bCurChannelInit && m_bChannelUse) 
		if (NetProcess1.ThisNodeId == NetProcess1.mainfertid)
			theApp.InitChannel(CurChannelNo,1);

/*	for (int j=0;j<SystemCount.RtuNum;j++)
	{
		if (Rtus[j].Flag)
		{
			for (int k=0;k<Channels[Rtus[j].RtuChNo].ChRtuNum;k++)
				if (j == Channels[Rtus[j].RtuChNo].ChRtuNo[k]) break;
			if ((k>=Channels[Rtus[j].RtuChNo].ChRtuNum) || !Channels[Rtus[j].RtuChNo].Flag)
				Rtus[j].Flag = false;
		} 
	}*/
	WriteChannelPara();

	bCurChannelInit = false;
	bCurChannelModi=false;
	NetProcess1.SendChannelParaFlag=1;
	NetProcess1.ModifyParaNo[0]=CurChannelNo;
	return true;
}



void CChanDialog::OnOK() 
{
	// TODO: Add extra validation here
	if (bCurChannelModi)
	{
		if(MessageBox("已修改,是否存盘?","",MB_YESNO)==IDYES)
		{
			if (!SaveAChannel())
			{
				GetDlgItem(IDC_CHECK_USE)->SetFocus();
				return;
			}
		}
	}	
	CDialog::OnOK();
}

void CChanDialog::OnChangeControl() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	CWnd *WndPtr = GetFocus();
	int ID=WndPtr->GetDlgCtrlID();
	switch(ID)
	{
	case IDC_COMBO_BPS:
	case IDC_COMBO_BIT:
//	case IDC_COMBO_CHECK_BIT:
	case IDC_COMBO_PARITY_BIT:
	case IDC_COMBO_DATA_BIT:
		bCurChannelInit = true;
		break;
	}
	bCurChannelModi=true;
}


void CChanDialog::CheckUseDisp()
{
	BOOL bEnable;
	UpdateData(TRUE);
	if (m_bChannelUse) bEnable=TRUE;
	else bEnable=FALSE;
	
	GetDlgItem(IDC_RADIO_SYN)->EnableWindow(bEnable);
	GetDlgItem(IDC_RADIO_ASY)->EnableWindow(bEnable);
	if (CurChannelNo < 2)
		GetDlgItem(IDC_RADIO_ASY)->EnableWindow(false);
	else
		GetDlgItem(IDC_RADIO_ASY)->EnableWindow();
	GetDlgItem(IDC_COMBO_BPS)->EnableWindow(bEnable);
	GetDlgItem(IDC_COMBO_BIT)->EnableWindow(bEnable);
//	GetDlgItem(IDC_COMBO_CHECK_BIT)->EnableWindow(bEnable);
	GetDlgItem(IDC_COMBO_PARITY_BIT)->EnableWindow(bEnable);
	GetDlgItem(IDC_COMBO_DATA_BIT)->EnableWindow(bEnable);
	GetDlgItem(IDC_COMBO_WORKTYPE)->EnableWindow(bEnable);
	GetDlgItem(IDC_COMBO_RTU_NUM)->EnableWindow(bEnable);
	if(bEnable) {
		OnCloseupComboRtuNum();
	}
	else
	{
		for(int i=0;i<8;i++)
		{
			GetDlgItem(IDC_RTU1_NO+i)->EnableWindow(FALSE);
			GetDlgItem(IDC_BUTTONC1+i)->EnableWindow(FALSE);
		}
	}
	if (m_WorkType == 3 || m_WorkType == 4 || m_WorkType == 6)
	{
		GetDlgItem(IDC_COMBO_RTU_NUM)->EnableWindow(false);
		for (int i = 0;i < 8;i++)
		{
			GetDlgItem(IDC_RTU1_NO + i)->EnableWindow (false);
			GetDlgItem(IDC_BUTTONC1 + i)->EnableWindow (false);
		}
	}
	else
	{
		GetDlgItem(IDC_COMBO_RTU_NUM)->EnableWindow();
	}
}



void CChanDialog::OnButtonc() 
{
	// TODO: Add your control notification handler code here
	int WndID,RtuNoSub;
	CWnd *WndPtr=GetFocus();
 	UpdateData(TRUE);
	CRtuPara Dlg;

	WndID=WndPtr->GetDlgCtrlID();
	RtuNoSub = WndID - IDC_BUTTONC1;
	Dlg.CurRtu = ((CComboBox*)GetDlgItem(IDC_RTU1_NO+RtuNoSub))->GetCurSel();

	if (m_WorkType < 3)
	{
		if (!CheckRtuNo(Dlg.CurRtu,RtuNoSub))
		{
			GetDlgItem(IDC_RTU1_NO+RtuNoSub)->SetFocus();
			return;
		}
	}
	Dlg.bTurn = false;
	Dlg.RtuChNo = CurChannelNo;
	Dlg.bChanCall = true;
	if (Dlg.DoModal() == IDOK)
	{
//		bCurChannelInit=true;
		bCurChannelModi=true;
	}
}

bool CChanDialog::CheckRtuNo(int RtuNo,int RtuNoSub) 
{
	// TODO: Add your control notification handler code here
	int a=0;
	if (RtuNo >= SystemCount.RtuNum) 
	{
		char a[50];
		sprintf(a,"RTU号 %02d 不存在或RTU数为零!\n请重新设置!",RtuNo);
		MessageBox(a,"重新输入",MB_OK|MB_ICONSTOP);
		return false;
	}

	if ((Rtus[RtuNo].RtuChNo == CurChannelNo) && (Channels[CurChannelNo].ChRtuNo[RtuNoSub] == RtuNo)) return true;
	if (!Channels[Rtus[RtuNo].RtuChNo].Flag) return true;
	for (int i=0;i<Channels[Rtus[RtuNo].RtuChNo].ChRtuNum;i++)
		if (Channels[Rtus[RtuNo].RtuChNo].ChRtuNo[i] == RtuNo)
		{
			int iType = Channels[Rtus[RtuNo].RtuChNo].WorkType;
			if (iType == 0 || iType == 1 || iType == 2 )
				a++; 
		}
	if (!a) return true;
	else{
			char a[30];
			sprintf(a,"RTU号 %02d 已经被使用! \n请输入别的RTU号!\0",RtuNo);
			MessageBox(a,"重新输入",MB_OK|MB_ICONSTOP);
		}
	return false;
}


void CChanDialog::OnDestroy() 
{
	CDialog::OnDestroy();
/*	for (int j=0;j<SystemCount.RtuNum;j++)
	{
		if (Rtus[j].Flag)
		{
			for (int k=0;k<Channels[Rtus[j].RtuChNo].ChRtuNum;k++)
				if (j == Channels[Rtus[j].RtuChNo].ChRtuNo[k]) break;
			if ((k>=Channels[Rtus[j].RtuChNo].ChRtuNum) || !Channels[Rtus[j].RtuChNo].Flag)
				Rtus[j].Flag = false;
		} 
	}*/
}
void CChanDialog::WriteChannelPara()
{
	CFert2000App * App = (CFert2000App *)AfxGetApp();
	App->WriteAChannelPara(CurChannelNo);
}

void CChanDialog::OnCloseupComboWorktype() 
{
	UpdateData();
	if (m_WorkType == 2)
	{
		if (m_StandardName != 4 && m_StandardName != 5)
		{
			MessageBox("请先选择一种转发规约");
//			m_WorkType = 0;
			UpdateData(FALSE);
		}
	}
	if (m_WorkType == 3 || m_WorkType == 4 || m_WorkType == 6)
	{
		GetDlgItem(IDC_COMBO_RTU_NUM)->EnableWindow(false);
		for (int i = 0;i < 8;i++)
		{
			GetDlgItem(IDC_RTU1_NO + i)->EnableWindow (false);
			GetDlgItem(IDC_BUTTONC1 + i)->EnableWindow (false);
		}
	}
	else
	{
		GetDlgItem(IDC_COMBO_RTU_NUM)->EnableWindow();
		OnCloseupComboRtuNum();
	}
	bCurChannelModi=true;
}

void CChanDialog::OnSelchangeComboChanNo() 
{
	UpdateData(TRUE);
	int Temp = m_ChannelNo.GetCurSel();
	if (Temp == CurChannelNo) return;
	if (bCurChannelModi)
	{
		if(MessageBox("已修改,是否存盘?","",MB_YESNO)==IDYES)
		{
			if (!SaveAChannel())
			{
				m_ChannelNo.SetCurSel(CurChannelNo);
				return;
			}
		}
	}
	CurChannelNo = Temp;
	DispAChannel();
	bCurChannelModi=false;
}

void CChanDialog::OnSelchangeComboChanType() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	if (Channels[CurChannelNo].CheckBit != m_ChanType)
		bCurChannelModi=true;
}

⌨️ 快捷键说明

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