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

📄 chandialog.cpp

📁 这是一个变电站的监控程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ChanDialog.cpp : implementation file
//

#include "stdafx.h"
#include "fert2000.h"
#include "ChanDialog.h"
#include "Rtupara1.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[];   
extern  CFert2000App theApp;
/////////////////////////////////////////////////////////////////////////////
// CChanDialog dialog
CChanDialog::CChanDialog(CWnd* pParent /*=NULL*/)
	: CDialog(CChanDialog::IDD, pParent)
{
	//{{AFX_DATA_INIT(CChanDialog)
	m_bChannelUse = FALSE;
	m_EndBit = 0;
	m_Bps = 0;
	m_DataBit = 0;
	m_ParityBit = 0;
	m_Rtu1No = 0;
	m_Rtu2No = 0;
	m_Rtu3No = 0;
	m_Rtu4No = 0;
	m_Rtu5No = 0;
	m_Rtu6No = 0;
	m_Rtu7No = 0;
	m_Rtu8No = 0;
	m_RtuNum = 0;
	m_WorkType = 0;
	m_Syn = 1;
	m_ChanType = 0;
	//}}AFX_DATA_INIT
	CurChannelNo=0;
	bCurChannelModi=false;
	bCurChannelInit=false;
}


void CChanDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CChanDialog)
	DDX_Control(pDX, IDC_COMBO_CHAN_NO, m_ChannelNo);
	DDX_Check(pDX, IDC_CHECK_USE, m_bChannelUse);
	DDX_CBIndex(pDX, IDC_COMBO_BIT, m_EndBit);
	DDX_CBIndex(pDX, IDC_COMBO_BPS, m_Bps);
	DDX_CBIndex(pDX, IDC_COMBO_DATA_BIT, m_DataBit);
	DDX_CBIndex(pDX, IDC_COMBO_PARITY_BIT, m_ParityBit);
	DDX_CBIndex(pDX, IDC_RTU1_NO, m_Rtu1No);
	DDX_CBIndex(pDX, IDC_RTU2_NO, m_Rtu2No);
	DDX_CBIndex(pDX, IDC_RTU3_NO, m_Rtu3No);
	DDX_CBIndex(pDX, IDC_RTU4_NO, m_Rtu4No);
	DDX_CBIndex(pDX, IDC_RTU5_NO, m_Rtu5No);
	DDX_CBIndex(pDX, IDC_RTU6_NO, m_Rtu6No);
	DDX_CBIndex(pDX, IDC_RTU7_NO, m_Rtu7No);
	DDX_CBIndex(pDX, IDC_RTU8_NO, m_Rtu8No);
	DDX_CBIndex(pDX, IDC_COMBO_RTU_NUM, m_RtuNum);
	DDX_CBIndex(pDX, IDC_COMBO_WORKTYPE, m_WorkType);
	DDX_Radio(pDX, IDC_RADIO_ASY, m_Syn);
	DDX_CBIndex(pDX, IDC_COMBO_CHAN_TYPE, m_ChanType);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CChanDialog, CDialog)
	//{{AFX_MSG_MAP(CChanDialog)
	ON_BN_CLICKED(IDC_CHECK_USE, OnCheckUse)
	ON_BN_CLICKED(IDC_BUTTON_PRE, OnButtonPre)
	ON_BN_CLICKED(IDC_BUTTON_NEXT, OnButtonNext)
	ON_BN_CLICKED(IDC_RADIO_ASY, OnRadioAsy)
	ON_BN_CLICKED(IDC_RADIO_SYN, OnRadioSyn)
	ON_BN_CLICKED(IDC_BUTTONC1, OnButtonc)
	ON_WM_DESTROY()
	ON_CBN_SELCHANGE(IDC_COMBO_BPS, OnChangeControl)
	ON_CBN_SELCHANGE(IDC_COMBO_CHAN_NO, OnSelchangeComboChanNo)
	ON_CBN_CLOSEUP(IDC_COMBO_RTU_NUM, OnCloseupComboRtuNum)
	ON_CBN_CLOSEUP(IDC_COMBO_WORKTYPE, OnCloseupComboWorktype)
	ON_CBN_SELCHANGE(IDC_COMBO_BIT, OnChangeControl)
	ON_CBN_SELCHANGE(IDC_COMBO_PARITY_BIT, OnChangeControl)
	ON_CBN_SELCHANGE(IDC_COMBO_DATA_BIT, OnChangeControl)
	ON_CBN_SELCHANGE(IDC_COMBO_RTU_NUM, OnChangeControl)
	ON_CBN_SELCHANGE(IDC_COMBO_WORKTYPE,OnChangeControl)
	ON_CBN_SELCHANGE(IDC_RTU1_NO,OnChangeControl)
	ON_CBN_SELCHANGE(IDC_RTU2_NO,OnChangeControl)
	ON_CBN_SELCHANGE(IDC_RTU3_NO,OnChangeControl)
	ON_CBN_SELCHANGE(IDC_RTU4_NO,OnChangeControl)
	ON_CBN_SELCHANGE(IDC_RTU5_NO,OnChangeControl)
	ON_CBN_SELCHANGE(IDC_RTU6_NO,OnChangeControl)
	ON_CBN_SELCHANGE(IDC_RTU7_NO,OnChangeControl)
	ON_CBN_SELCHANGE(IDC_RTU8_NO,OnChangeControl)
	ON_BN_CLICKED(IDC_BUTTONC2, OnButtonc)
	ON_BN_CLICKED(IDC_BUTTONC3, OnButtonc)
	ON_BN_CLICKED(IDC_BUTTONC4, OnButtonc)
	ON_BN_CLICKED(IDC_BUTTONC5, OnButtonc)
	ON_BN_CLICKED(IDC_BUTTONC6, OnButtonc)
	ON_BN_CLICKED(IDC_BUTTONC7, OnButtonc)
	ON_BN_CLICKED(IDC_BUTTONC8, OnButtonc)
	ON_CBN_SELCHANGE(IDC_COMBO_CHAN_TYPE, OnSelchangeComboChanType)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChanDialog message handlers

void CChanDialog::OnCheckUse() 
{
	// TODO: Add your control notification handler code here
	CheckUseDisp();
	bCurChannelInit=true;
	bCurChannelModi=true;
}

void CChanDialog::OnCloseupComboRtuNum() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	for(int i=0;i<=m_RtuNum;i++)
	{
		GetDlgItem(IDC_RTU1_NO+i)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTONC1+i)->EnableWindow(TRUE);
	}
	for (i=m_RtuNum+1;i<8;i++)
	{
		GetDlgItem(IDC_RTU1_NO+i)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTONC1+i)->EnableWindow(FALSE);
	}
}

void CChanDialog::OnButtonPre() 
{
	// TODO: Add your control notification handler code here
	if (bCurChannelModi)
	{
		if(MessageBox("已修改,是否存盘?","",MB_YESNO)==IDYES)
		{
			if(!SaveAChannel())
			{
				GetDlgItem(IDC_CHECK_USE)->SetFocus();
				return;
			}
		}
	}
	if((--CurChannelNo)<0) CurChannelNo=SystemCount.ChNum-1;
	DispAChannel();
	bCurChannelModi=false;
}

void CChanDialog::OnButtonNext() 
{
	// TODO: Add your control notification handler code here
	if (bCurChannelModi)
	{
		if(MessageBox("已修改,是否存盘?","",MB_YESNO)==IDYES)
		{
			if(!SaveAChannel())
			{
				GetDlgItem(IDC_CHECK_USE)->SetFocus();
				return;
			}
		}
	}
	if((++CurChannelNo)>=SystemCount.ChNum) CurChannelNo=0;
	DispAChannel();
	bCurChannelModi=false;
}

void CChanDialog::OnRadioAsy() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	bCurChannelInit=true;
	bCurChannelModi=true;
}

void CChanDialog::OnRadioSyn() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	bCurChannelInit=true;
	bCurChannelModi=true;
}

BOOL CChanDialog::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here]
	CString str1;
//	m_ChannelNo.AddString("计算机COM1");
//	m_ChannelNo.AddString("计算机COM2");
	for(int i=0;i<SystemCount.ChNum;i++)
	{
		str1.Format("COM%d",i+1);
		m_ChannelNo.AddString(str1);
	}
	int k;
	CString Temp;
	for (k=0;k<8;k++)
	{
		CComboBox * pComBox = (CComboBox*)GetDlgItem(IDC_RTU1_NO+k);
		for (int l=0;l<SystemCount.RtuNum;l++)
		{
			Temp.Format("%d-%s",l,&Rtus[l].Name);
			pComBox->AddString(Temp);
		}
	}

	DispAChannel();
	bCurChannelModi=false;
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CChanDialog::DispAChannel()
{
	if (CurChannelNo >= m_ChannelNo.GetCount ())
	{
		CurChannelNo = 0;
		m_ChannelNo.SetCurSel (0);
	}
	else
		m_ChannelNo.SetCurSel(CurChannelNo);
	if (Channels[CurChannelNo].SorA != 0 && Channels[CurChannelNo].SorA != 1)
		Channels[CurChannelNo].SorA = 1;
	if (CurChannelNo < 2)
		GetDlgItem(IDC_RADIO_ASY)->EnableWindow(false);
	else
		GetDlgItem(IDC_RADIO_ASY)->EnableWindow();

	m_Syn=Channels[CurChannelNo].SorA;
	m_bChannelUse=Channels[CurChannelNo].Flag;
	m_Bps=Channels[CurChannelNo].Baud;
	m_EndBit=Channels[CurChannelNo].EndBit;
	m_ParityBit=Channels[CurChannelNo].ParityBit;
	m_ChanType = Channels[CurChannelNo].CheckBit;
	m_DataBit=Channels[CurChannelNo].DataBit;
	m_StandardName=Channels[CurChannelNo].Protocol;
	//m_Audit=Channels[CurChannelNo].Audit;
	m_RtuNum = Channels[CurChannelNo].ChRtuNum-1;
	m_WorkType = Channels[CurChannelNo].WorkType;

	m_Rtu1No=Channels[CurChannelNo].ChRtuNo[0];
	m_Rtu2No=Channels[CurChannelNo].ChRtuNo[1];
	m_Rtu3No=Channels[CurChannelNo].ChRtuNo[2];
	m_Rtu4No=Channels[CurChannelNo].ChRtuNo[3];
	m_Rtu5No=Channels[CurChannelNo].ChRtuNo[4];
	m_Rtu6No=Channels[CurChannelNo].ChRtuNo[5];
	m_Rtu7No=Channels[CurChannelNo].ChRtuNo[6];
	m_Rtu8No=Channels[CurChannelNo].ChRtuNo[7];
	UpdateData(FALSE);		
	CheckUseDisp();
}

bool CChanDialog::SaveAChannel()
{
	UpdateData(TRUE);
	int RtuNum = m_RtuNum+1;
	if (m_bChannelUse)
	{
		if (m_WorkType < 3 )
		{
			for (int j=0;j<RtuNum;j++)
				if (!CheckRtuNo(((CComboBox*)GetDlgItem(IDC_RTU1_NO+j))->GetCurSel(),j)) break;
			if (j<RtuNum) return false;
			m_StandardName = Rtus[Channels[CurChannelNo].ChRtuNo[0]].Protocol ;//Add by yzw
/*			for (j=0;j<RtuNum;j++)
			{
				int RtuNo = ((CComboBox*)GetDlgItem(IDC_RTU1_NO+j))->GetCurSel();
				//Add by yzw 2000.5.7 
				//作如下修改:去除通道参数中定义规约,将通道参数规约强制为第一个RTU的规约,如有多个规约,也强制为第一个RTU规约
				m_StandardName = Rtus[RtuNo].Protocol ;//Add by yzw
			}*/

⌨️ 快捷键说明

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