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

📄 rtupara1.cpp

📁 这是一个变电站的监控程序
💻 CPP
字号:
// RtuPara.cpp : implementation file
//

#include "stdafx.h"
#include "fert2000.h"
#include "RtuPara1.h"
#include "ProtocolPara.h"
#include "PolingRRCDialog.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern bool bStopFlag;
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;
IMPLEMENT_DYNCREATE(CRtuPara, CPropertyPage)
/////////////////////////////////////////////////////////////////////////////
// CRtuPara dialog

CRtuPara::CRtuPara()
	: CPropertyPage(CRtuPara::IDD)
{
	//{{AFX_DATA_INIT(CRtuPara)
	m_CheckRtuUse = FALSE;
	m_RtuName = _T("");
	m_KwhNum = 0;
	m_RtuAddr = 0;
	m_YcNum = 0;
	m_YxNum = 0;
	m_TimeForbit = FALSE;
	m_ProtocolType = -1;
	m_SoeNum = 0;
	m_SoeOnYx = FALSE;
	//}}AFX_DATA_INIT
	CurRtu = 0;
	bTurn = true;
	bChangeFlag = false;
}


void CRtuPara::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRtuPara)
	DDX_Control(pDX, IDC_RTU_NO, m_RtuNo);
	DDX_Check(pDX, IDC_CHECK_RTU_USE, m_CheckRtuUse);
	DDX_Text(pDX, IDC_EDIT_RTUNAME, m_RtuName);
	DDV_MaxChars(pDX, m_RtuName, 19);
	DDX_Text(pDX, IDC_KWHNUM, m_KwhNum);
	DDX_Text(pDX, IDC_RTUADDR, m_RtuAddr);
	DDV_MinMaxInt(pDX, m_RtuAddr, 0, 256);
	DDX_Text(pDX, IDC_YCNUM, m_YcNum);
	DDX_Text(pDX, IDC_YXNUM, m_YxNum);
	DDX_Check(pDX, IDC_CHECK_TIMEFORBIT, m_TimeForbit);
	DDX_CBIndex(pDX, IDC_PROTOCOL_TYPE, m_ProtocolType);
	DDX_Text(pDX, IDC_SOENUM, m_SoeNum);
	DDV_MinMaxUInt(pDX, m_SoeNum, 0, 1000);
	DDX_Check(pDX, IDC_SOEONYX, m_SoeOnYx);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CRtuPara, CPropertyPage)
	//{{AFX_MSG_MAP(CRtuPara)
	ON_BN_CLICKED(IDC_CHECK_RTU_USE, OnCheckRtuUse)
	ON_EN_CHANGE(IDC_EDIT_RTUNAME, OnChangeEditRtuname)
	ON_EN_CHANGE(IDC_KWHNUM, OnChangeKwhnum)
	ON_EN_CHANGE(IDC_RTUADDR, OnChangeRtuaddr)
	ON_EN_CHANGE(IDC_YCNUM, OnChangeYcnum)
	ON_EN_CHANGE(IDC_YXNUM, OnChangeYxnum)
	ON_BN_CLICKED(IDC_CHECK_TIMEFORBIT, OnCheckTimeforbit)
	ON_BN_CLICKED(IDC_RTU_NEXT, OnRtuNext)
	ON_BN_CLICKED(IDC_RTU_PRE, OnRtuPre)
	ON_CBN_SELCHANGE(IDC_PROTOCOL_TYPE, OnSelchangeProtocolType)
	ON_EN_CHANGE(IDC_SOENUM, OnChangeSoenum)
	ON_BN_CLICKED(IDC_SOEONYX, OnSoeonyx)
	ON_BN_CLICKED(IDC_BUTTON_PRARAM, OnButtonPraram)
	ON_CBN_CLOSEUP(IDC_RTU_NO, OnCloseupRtuNo)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRtuPara message handlers

void CRtuPara::OnCheckRtuLock() 
{
	// TODO: Add your control notification handler code here
	bChangeFlag = true;
}

void CRtuPara::OnCheckRtuUse() 
{
	// TODO: Add your control notification handler code here
	bChangeFlag = true;
}


void CRtuPara::OnChangeEditRtuname() 
{
	bChangeFlag = true;	
}

void CRtuPara::OnChangeKwhnum() 
{
	bChangeFlag = true;	
}

void CRtuPara::OnChangeRtuaddr() 
{
	bChangeFlag = true;	
}

void CRtuPara::OnChangeYcnum() 
{
	bChangeFlag = true;	
}

void CRtuPara::OnChangeYxnum() 
{
	bChangeFlag = true;	
}

void CRtuPara::OnOK() 
{
	if (bChangeFlag) {
		if (MessageBox("参数已修改,是否存盘?","",MB_YESNO)==IDYES)
			SaveARtuPara(CurRtu);
		else 
			bChangeFlag = false;
	}
	CDialog::OnOK();
}

BOOL CRtuPara::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	CString Temp;
	for (int i=0;i<SystemCount.RtuNum;i++)
	{
		Temp.Format("%d",i);
		m_RtuNo.AddString(Temp);
	}
	if (!bTurn)
	{
		GetDlgItem(IDC_RTU_NO)->EnableWindow(FALSE);
		GetDlgItem(IDC_RTU_NEXT)->EnableWindow(FALSE);
		GetDlgItem(IDC_RTU_PRE)->EnableWindow(FALSE);
	}
	m_RtuNo.SetCurSel(CurRtu);
	DispARtuPara(CurRtu);
	Rtus[CurRtu].ModifyFlag=0;
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CRtuPara::DispARtuPara (int CurRtu)
{
//	m_RtuChanNo = Rtus[CurRtu].RtuChNo;
	m_CheckRtuUse = Rtus[CurRtu].Flag;
	m_TimeForbit = Rtus[CurRtu].TimeForbit;
	m_RtuName = Rtus[CurRtu].Name;
	m_KwhNum = Rtus[CurRtu].KwhNum;
	m_RtuAddr = Rtus[CurRtu].Addr;
	m_YcNum = Rtus[CurRtu].YcNum;
	m_YxNum = Rtus[CurRtu].YxNum;
	m_SoeNum = Rtus[CurRtu].SoeNum;
	m_ProtocolType = Rtus[CurRtu].Protocol;
	m_SoeOnYx = (Rtus[CurRtu].SoeOnYxFlag) ? TRUE:FALSE;
	UpdateData(FALSE);
}

void CRtuPara::SaveARtuPara (int CurRtu)
{
	UpdateData(TRUE);
	if (bChanCall == true)
		Rtus[CurRtu].RtuChNo = RtuChNo;
	Rtus[CurRtu].Flag = m_CheckRtuUse;
	Rtus[CurRtu].TimeForbit = m_TimeForbit;
	sprintf(Rtus[CurRtu].Name,"%s",(LPCTSTR)m_RtuName);
	Rtus[CurRtu].Addr = m_RtuAddr;
	Rtus[CurRtu].KwhNum = m_KwhNum;
	Rtus[CurRtu].YcNum = m_YcNum;
	Rtus[CurRtu].YxNum = m_YxNum;
	Rtus[CurRtu].SoeNum = m_SoeNum;
	Rtus[CurRtu].Protocol = m_ProtocolType;
	Rtus[CurRtu].SoeOnYxFlag = m_SoeOnYx;
	theApp.WriteARtuPara(CurRtu);
	NetProcess1.ModifyParaNo [1] = (BYTE)CurRtu;
	NetProcess1.SendRtuParaFlag=1;
	bChangeFlag = false;
}

void CRtuPara::OnCheckTimeforbit() 
{
	bChangeFlag = true;
}

void CRtuPara::OnRtuNext() 
{
	if (bChangeFlag) {
		if (MessageBox("参数已修改,是否存盘?","",MB_YESNO)==IDYES)
			SaveARtuPara(CurRtu);
		else bChangeFlag = false;
	}
	if(++CurRtu >= SystemCount.RtuNum ) CurRtu = 0;
	m_RtuNo.SetCurSel(CurRtu);
	DispARtuPara(CurRtu);
}

void CRtuPara::OnRtuPre() 
{
	if (bChangeFlag) {
		if (MessageBox("参数已修改,是否存盘?","",MB_YESNO)==IDYES)
			SaveARtuPara(CurRtu);
		else bChangeFlag = false;
	}
	if (--CurRtu < 0) CurRtu = SystemCount.RtuNum - 1;
	m_RtuNo.SetCurSel(CurRtu);
	DispARtuPara(CurRtu);
}

void CRtuPara::OnSelchangeProtocolType() 
{
	bChangeFlag = true;	
}

void CRtuPara::OnChangeSoenum() 
{
	bChangeFlag = true;	
}

void CRtuPara::OnSoeonyx() 
{
	bChangeFlag = true;	
}

void CRtuPara::OnButtonPraram() 
{
	UpdateData();
	if ((m_ProtocolType == 0) || (m_ProtocolType == 2) || (m_ProtocolType == 3) 
		|| (m_ProtocolType == 4) || (m_ProtocolType == 6) || (m_ProtocolType == 7))
	{
		CProtocolPara Dlg;
		Dlg.CurRtuNo = CurRtu;
		Dlg.CurProtocol = m_ProtocolType;
		Dlg.DoModal();
	}else
	{
		CPolingRRCDialog Dlg;
		Dlg.CurRtu = CurRtu;
		Dlg.RtuPara = this;
		Dlg.DoModal();
		m_YxNum = Rtus[CurRtu].YxNum;
		m_YcNum = Rtus[CurRtu].YcNum;
		m_KwhNum = Rtus[CurRtu].KwhNum;
		UpdateData(FALSE);
	}
	bChangeFlag = true;	
}

void CRtuPara::OnCloseupRtuNo() 
{
	if (CurRtu != m_RtuNo.GetCurSel())
	{
		if (bChangeFlag) {
			if (MessageBox("参数已修改,是否存盘?","",MB_YESNO)==IDYES)
				SaveARtuPara(CurRtu);
			else bChangeFlag = false;
		}
		CurRtu = m_RtuNo.GetCurSel();
		DispARtuPara(CurRtu);
	}
}


void CRtuPara::OnCancel() 
{
	// TODO: Add extra cleanup here
	
	CDialog::OnCancel();
}

⌨️ 快捷键说明

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