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

📄 mainfrm.cpp

📁 电力系统无功自动补偿的操作系统程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "vqcwin.h"

#include "MainFrm.h"
#include "vqc.h"
#include "dlgSelRtu.h"
#include "dlgvqc.h"

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

/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_SYSCOMMAND()		//手工加
	ON_WM_CREATE()
	ON_MESSAGE(FJD_MSG_RELAY_VQC, FjRelayMsg)  //手工加,自定义消息
	ON_MESSAGE(FJD_MSG_SCD_VQC, FjScadaMsg)  //手工加,自定义消息
	ON_WM_CLOSE()
	ON_COMMAND(IDM_ZB1MX1, OnZb1mx1)
	ON_COMMAND(IDM_ZB1MX2, OnZb1mx2)
	ON_COMMAND(IDM_ZB2MX1, OnZb2mx1)
	ON_COMMAND(IDM_ZB2MX2, OnZb2mx2)
	ON_COMMAND(IDM_ZB3MX1, OnZb3mx1)
	ON_COMMAND(IDM_ZB3MX2, OnZb3mx2)
	ON_COMMAND(IDM_ZB4MX1, OnZb4mx1)
	ON_COMMAND(IDM_ZB4MX2, OnZb4mx2)
	ON_COMMAND(IDM_ZB5MX1, OnZb5mx1)
	ON_COMMAND(IDM_ZB5MX2, OnZb5mx2)
	ON_COMMAND(IDM_ZB6MX1, OnZb6mx1)
	ON_COMMAND(IDM_ZB6MX2, OnZb6mx2)
	ON_COMMAND(IDM_SelectRtu, OnSelectRtu)
	ON_COMMAND(IDM_StopVqc, OnStopVqc)
	ON_COMMAND(IDM_ParamSet, OnParamSet)
	ON_COMMAND(IDM_Fjt, OnFjt)
	ON_COMMAND(IDM_DKQ1, OnDkq1)
	ON_COMMAND(IDM_DKQ2, OnDkq2)
	ON_COMMAND(IDM_DKQ3, OnDkq3)
	ON_COMMAND(IDM_DKQ4, OnDkq4)
	ON_COMMAND(IDM_DKQ5, OnDkq5)
	ON_COMMAND(IDM_DKQ6, OnDkq6)
	ON_COMMAND(IDM_DRQ2, OnDrq2)
	ON_COMMAND(IDM_DRQ3, OnDrq3)
	ON_COMMAND(IDM_DRQ4, OnDrq4)
	ON_COMMAND(IDM_DRQ5, OnDrq5)
	ON_COMMAND(IDM_DRQ6, OnDrq6)
	ON_COMMAND(IDM_DRQ1, OnDrq1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,
	ID_INDICATOR_NUM,
	ID_INDICATOR_SCRL,
};

afx_msg void CMainFrame::OnSysCommand(UINT nID,LPARAM lParam)			//手工加,系统菜单:窗口最大,最小,恢复。
{
	switch(nID){
	case SC_CLOSE:
	//case SC_HOTKEY:
	//case SC_HSCROLL:
	//case SC_KEYMENU:
	//he	case  SC_RESTORE:
	//he	case  SC_MAXIMIZE:
	//case  SC_MINIMIZE:
	//case  SC_MOUSEMENU:
	//case  SC_MOVE:
	//case  SC_NEXTWINDOW:
	//case  SC_PREVWINDOW:
	//case  SC_SCREENSAVE:
	//case  SC_SIZE:
	//case  SC_TASKLIST:
	//case  SC_VSCROLL:
		OnAppExit();
		break;
	default:
		CFrameWnd::OnSysCommand(nID,lParam);
	}

}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
//	CWnd* pFjVQCWnd=FindWindow(NULL,"VQC");
//	if(pFjVQCWnd)	return;

	pApp = (CVqcwinApp *) AfxGetApp();
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	/*
	if (!m_wndToolBar.Create(this) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}*/

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}

	// TODO: Remove this if you don't want tool tips or a resizeable toolbar
/*	m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
*/
	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
//	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
//	EnableDocking(CBRS_ALIGN_ANY);
//	DockControlBar(&m_wndToolBar);

	if (!FjLibGetFjWinHandle(FJD_WIN_ID_FJSCADA))
	{
		MessageBox("Scada没运行,自动VQC控制程序(VQC.exe)退出 !","出错",MB_ICONSTOP|MB_OK);
		PostMessage(WM_CLOSE);
		return 0;
	}

	FjLibSetFjWinHandle(FJD_WIN_ID_FJVQC,m_hWnd);	//FjLibDef.h = 8

	for (int i=0;i<pApp->maxPar.numMaxRtu;i++)	LoadVqcRunParam(i);
	CString pMsg;
	pMsg = "VQC系统投入";
	VqcPutMsgProc(pApp->currVqcRtuNo, pMsg.LockBuffer());

	ReFreshVqcStatusMenu();
	ReFreshVqcDeviceRunMenu();
	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CFrameWnd::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers

void CMainFrame::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	CFrameWnd::OnClose();
}

void CMainFrame::OnSelectRtu() 
{
	// TODO: Add your command handler code here
	dlgSelRtu selRtuDef;
	selRtuDef.DoModal();

	ReFreshVqcDeviceRunMenu();
	ReFreshVqcStatusMenu();

	char szText[128];
	FjLibGetRtuName(pApp->currVqcRtuNo,szText);
	strcat(szText, ":电压无功自动控制系统 [南京电研 后台VQC系统Ver2.0]");
	::SetWindowText(m_hWnd,szText);
}


void CMainFrame::OnStopVqc() 
{
	// TODO: Add your command handler code here
	if (pApp->VQCDefine[pApp->currVqcRtuNo] == NULL) return;

	WORD	pwa=FJD_ATTR_YKYT;
	CString	csPswdName="";
	CString pMsg;
	if (!FjLibInPassWord(this,&csPswdName,&pwa,"操作员口令"))	return;

	BOOL bStat;
	//程序已运行,状态作切换
	if (pApp->VQCDefine[pApp->currVqcRtuNo]->globalDef.bCanUse){
		if (pApp->VQCDefine[pApp->currVqcRtuNo]->LocalStatRec.GetStatus()){
			bStat = FALSE;
			pMsg = "VQC就地处于手动位置  操作人:";
		}
		else{
			bStat = TRUE;
			pMsg = "VQC就地处于自动位置  操作人:";
		}
		pMsg += csPswdName;
		VqcPutMsgProc(pApp->currVqcRtuNo, pMsg.LockBuffer());
		pApp->VQCDefine[pApp->currVqcRtuNo]->LocalStatRec.SetWfStatus(bStat);

		ReFreshVqcStatusMenu();
		return;
	}

	//程序未运行
	char	msg[128];
	BOOL	VQCParamOK;

	pApp->countTime[pApp->currVqcRtuNo] = 0;
	VQCParamOK = FALSE;
	if (pApp->VQCDefine[pApp->currVqcRtuNo]->ReadParamFileProc(pApp->currVqcRtuNo)){
		if (pApp->VQCDefine[pApp->currVqcRtuNo]->CheckParam(msg)) {
			VQCParamOK = TRUE;
			pApp->VQCDefine[pApp->currVqcRtuNo]->globalDef.SelectSeasonProc();   //选择季节
		}
		else{
			pApp->VQCDefine[pApp->currVqcRtuNo]->globalDef.bCanUse = FALSE;
			MessageBox(msg, "参数定义有错!",MB_OK);
			return;
		}
	}
	if (!VQCParamOK) {
		pApp->VQCDefine[pApp->currVqcRtuNo]->VQCSET::VQCSET();
		return;
	};
	pApp->VQCDefine[pApp->currVqcRtuNo]->globalDef.bCanUse = TRUE;
	VqcPutMsgProc(pApp->currVqcRtuNo, "VQC就地处于自动位置");
	pApp->VQCDefine[pApp->currVqcRtuNo]->LocalStatRec.SetWfStatus(TRUE);
	pApp->VQCDefine[pApp->currVqcRtuNo]->currDispZbNo = 0;
	pApp->VQCDefine[pApp->currVqcRtuNo]->currDispMxNo = 0;
	
	ReFreshVqcStatusMenu();
}

void CMainFrame::ReFreshVqcDeviceRunMenu()
{
	VQCZB_DBS *zb;
	VQCMUXI_DBS *mx;
	if (pApp->VQCDefine[pApp->currVqcRtuNo]==NULL) return;
	if (!pApp->VQCDefine[pApp->currVqcRtuNo]->globalDef.bCanUse) return;

	char szText[128];
	int i;
	zb = &(pApp->VQCDefine[pApp->currVqcRtuNo]->ZB[pApp->VQCDefine[pApp->currVqcRtuNo]->currDispZbNo]);
	mx = &(zb->MX[pApp->VQCDefine[pApp->currVqcRtuNo]->currDispMxNo]);
	if (zb->pFatherVQC->globalDef.DevControlMode!= DEVMODE_ONLY_DRQ){
		if (zb->bFjtActMan)	strcpy(szText, "允许:");
		else                strcpy(szText, "禁止:");
		zb->FjtYtSJRec.GetName(&szText[strlen(szText)]);
		strcat(szText, " 参与VQC调节");
		GetMenu()->ModifyMenu(IDM_Fjt, MF_BYCOMMAND, IDM_Fjt, szText);
	}

	for (i=0;i<VQC_DRQNUM;i++){
		if (i<mx->DRQNum){
			if (mx->DRQ[i].manActStatus)
				strcpy(szText, "允许:");
			else
				strcpy(szText, "禁止:");
			mx->DRQ[i].KgRec.GetName(&szText[strlen(szText)]);
		}
		else wsprintf(szText, "允许:第%d组电容器", i+1);
		strcat(szText, " 参与VQC调节");
		GetMenu()->ModifyMenu(IDM_DRQ1+i, MF_BYCOMMAND, IDM_DRQ1+i, szText);
	}

	for (i=0;i<VQC_DRQNUM;i++){
		if (i<mx->DKQNum){
			if (mx->DKQ[i].manActStatus)
				strcpy(szText, "允许:");
			else
				strcpy(szText, "禁止:");
			mx->DKQ[i].KgRec.GetName(&szText[strlen(szText)]);
		}
		else wsprintf(szText, "允许:第%d组电抗器", i+1);
		strcat(szText, " 参与VQC调节");
		GetMenu()->ModifyMenu(IDM_DKQ1+i, MF_BYCOMMAND, IDM_DKQ1+i, szText);
	}
}

void CMainFrame::ReFreshVqcStatusMenu()
{
	char szText[128];

	if (pApp->VQCDefine[pApp->currVqcRtuNo]==NULL) return;

	strcpy(szText,"启动");
	if (pApp->VQCDefine[pApp->currVqcRtuNo]->globalDef.bCanUse) 
		if (pApp->VQCDefine[pApp->currVqcRtuNo]->LocalStatRec.GetStatus()) 
		strcpy(szText,"停止");
	FjLibGetRtuName(pApp->currVqcRtuNo,(LPSTR)&szText[strlen(szText)]);
	strcat(szText, "VQC运行");
	GetMenu()->ModifyMenu(IDM_StopVqc, MF_BYCOMMAND, IDM_StopVqc, szText);
}

void CMainFrame::OnAppExit() 
{
	// TODO: Add your command handler code here
	if (IDNO==MessageBox("你真的想结束VQC系统运行吗?","警告",MB_YESNO)) return;
	WORD	pwa=FJD_ATTR_SYSTEM;
	CString	csPswdName="";
	if (!FjLibInPassWord(this,&csPswdName,&pwa,"维护员口令"))	return;
	CString pMsg;

	pMsg = "VQC系统退出  操作人:";
	pMsg += csPswdName;
	VqcPutMsgProc(pApp->currVqcRtuNo, pMsg.LockBuffer());
	
	CFrameWnd::OnClose();
}

LRESULT CMainFrame::FjRelayMsg(WPARAM wParam, LPARAM lParam)	//wParam=RtuNO, lParam=DotNO
{
	// TODO: Add your command handler code here
	for (int i=0;i<pApp->maxPar.numMaxRtu;i++)
		if (pApp->VQCDefine[i]) pApp->VQCDefine[i]->RecRelayMsg(wParam, lParam);

	return 1;
}


LRESULT CMainFrame::FjScadaMsg(WPARAM wParam, LPARAM lParam)	//wParam=ObjNO, lParam=
{
	// TODO: Add your command handler code here

	if(wParam==0){
		//接受调度下发的VQC投退命令
		typedef union _DW_UNION_{
			BYTE		b[4];
			DWORD		dw;
		} DW_UNION;

		DW_UNION DiaoDu;
		DiaoDu.dw = lParam;
	
		BYTE Rtu = DiaoDu.b[3];
/*		if(Rtu < LenRtu){
			BYTE Cmd =  DiaoDu.b[0];
			if(Cmd==0xcc){		//投运
//				pTr[Rtu].z.bPCAutoRegulate = TRUE;

//				sprintf(Buf,"调度下发:开放 VQC控制命令报文");
//				WriteRec(Rtu, Buf, FJVQC_START);		//存相应厂站
			}
			else if(Cmd==0x33){		//退出
//				pTr[Rtu].z.bPCAutoRegulate = FALSE;

//				sprintf(Buf,"调度下发:关闭 VQC控制命令报文");
//				WriteRec(Rtu, Buf, FJVQC_EXIT);		//存相应厂站
			}
		}
*/	}

	return 1;

⌨️ 快捷键说明

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