📄 rtupara1.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 + -