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

📄 operatview.cpp

📁 远程视频监控系统最新程序代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// OperatView.cpp : implementation of the COperatView class
//

#include "stdafx.h"
#include "Operat.h"
#include "commdlg.h"
#include <math.h>
#include "OperatDoc.h"
#include "FdcsData.h"
#include "FdcsManage.h"
#include "OperatView.h"
#include "MainFrm.h"
#include "historyData.h"
#include "CurveDynamicDialog.h"
#include "CurveHistoryDlg.h"
#include "CheckPassworddlg.h"


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

/////////////////////////////////////////////////////////////////////////////
// COperatView

APS			*aps1,*aps;
ContTab		*cont_tab,*cont_tab1;
No_Add_Tab  *no_add_tab1,*no_add_tab;
//short		AlrmHisNum=0,AlrmPos=0,AlrmSavePos=0,SwAlrmPos=0,SwAlrmNum=0,SwAlrmSavePos=0;
short		Boiler[MAX_ADNUM],Vapor[MAX_ADNUM],Generator[MAX_ADNUM];
short		Glob_Calc_Count=0;
short		Glob_Switch_Count=0;
short		Glob_Error_Count[MAX_ADNUM],Glob_Error_Two[MAX_ADNUM],Glob_Error_Three[MAX_ADNUM];
short		Glob_DataGet_Count=0; 
short		Fast_Point_Adr[MAX_ADNUM],Glob_CurError_Adr;
CFdcsManage			m_Data_Get; 
Code_Name_Tab		*code_name_tab,*code_name_tab1;
Struc_Calc_Data		*Glob_Calc_Data1,*Glob_Calc_Data;
short m_nCurSystem=0;
char   m_sPointCode[64];

IMPLEMENT_DYNCREATE(COperatView, CView)

BEGIN_MESSAGE_MAP(COperatView, CView)
	//{{AFX_MSG_MAP(COperatView)
	ON_WM_RBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_CREATE()
	ON_WM_TIMER()
	ON_WM_DESTROY()
	ON_WM_RBUTTONDBLCLK()
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
	ON_COMMAND(IDC_BUTTON1,COperatView::OnButton1)
	ON_COMMAND(IDC_BUTTON2,COperatView::OnButton2)
	ON_COMMAND(IDC_BUTTON3,COperatView::OnButton3)
	ON_COMMAND(IDC_BUTTON4,COperatView::OnButton4)
	ON_COMMAND(IDC_BUTTON5,COperatView::OnButton5)
	ON_COMMAND(IDC_BUTTON6,COperatView::OnButton6)
	ON_COMMAND(IDC_BUTTON7,COperatView::OnButton7)
	ON_COMMAND(IDC_BUTTON8,COperatView::OnButton8)
	ON_COMMAND(IDC_BUTTON9,COperatView::OnButton9)
	ON_COMMAND(IDC_BUTTON10,COperatView::OnButton10)
	ON_COMMAND(IDC_BUTTON11,COperatView::OnButton11)
	ON_COMMAND(IDC_BUTTON12,COperatView::OnButton12)
	ON_COMMAND(IDC_BUTTON13,COperatView::OnButton13)
	ON_COMMAND(IDC_BUTTON14,COperatView::OnButton14)
	ON_COMMAND(IDC_BUTTON15,COperatView::OnButton15)
	ON_COMMAND(IDC_BUTTON16,COperatView::OnButton16)
	ON_COMMAND(IDC_BUTTON17,COperatView::OnButton17)
	ON_COMMAND(IDC_BUTTON18,COperatView::OnButton18)
	ON_COMMAND(IDC_BUTTON19,COperatView::OnButton19)
	ON_COMMAND(IDC_BUTTON20,COperatView::OnButton20)

	ON_MESSAGE(NEW_ALARM_MESSAGE,OnNewAlarm)
	ON_MESSAGE(MAX_ALARM_MESSAGE,OnMaxAlarm)
	ON_MESSAGE(END_ALARM_MESSAGE,OnEndAlarm)
	ON_NOTIFY(NM_CLICK,IDC_DYNAMICALARM_GRID,OnClickDynamicGrid)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COperatView construction/destruction




COperatView::COperatView()
{      
	m_bAlarmProcessing=false;
    m_Button_ID[0] =IDC_BUTTON1, m_Button_ID[1] =IDC_BUTTON2, m_Button_ID[2] =IDC_BUTTON3, m_Button_ID[3] =IDC_BUTTON4;
	m_Button_ID[4] =IDC_BUTTON5, m_Button_ID[5] =IDC_BUTTON6, m_Button_ID[6] =IDC_BUTTON7, m_Button_ID[7] =IDC_BUTTON8;
	m_Button_ID[8] =IDC_BUTTON9, m_Button_ID[9] =IDC_BUTTON10,m_Button_ID[10]=IDC_BUTTON11,m_Button_ID[11]=IDC_BUTTON12;
	m_Button_ID[12]=IDC_BUTTON13,m_Button_ID[13]=IDC_BUTTON14,m_Button_ID[14]=IDC_BUTTON15,m_Button_ID[15]=IDC_BUTTON16;
	m_Button_ID[16]=IDC_BUTTON17,m_Button_ID[17]=IDC_BUTTON18,m_Button_ID[18]=IDC_BUTTON19,m_Button_ID[19]=IDC_BUTTON20;
    

	for(int i=0;i<MAX_ADNUM;i++)
	{
		Glob_Error_Count[i]=0;
		Glob_Error_Two[i]=0;
		Glob_Error_Three[i]=0;
	}
	curTask = 0;     curIndicate=0;
	data_y0=65; 	 key_y0=20+32; 	prompt_y0=20;	
	subFace=0;		 

	rows_Page=15;
	watchPointNums=0;
	BoilerPtNums= 0;	VaporPtNums = 0,GeneratorPtNums=0;
	alrmDisp=0;			newAlarm=0;
	ftw=3.0/3600.0;
	//m_Alrm_Rect.SetRect(5,5,790-5,data_y0-5);
	m_yH=760;m_xW=1020;
	Glob_CurError_Adr=0;
	m_Chart5_Flag=0;
	m_FromBoiler_Count=0;
	m_Plate_Brush=new CBrush(RGB(255,0,0));

	for(i=0;i<MAX_ADNUM;i++)	Boiler[i]=0;
	for(i=0;i<MAX_ADNUM;i++)    Vapor[i]=0;
	for(i=0;i<MAX_ADNUM;i++)	Fast_Point_Adr[i]=0;



	//给测点属性、实时数据,报警数据,历史数据(30分、24小时)分配内存
	//malloc, memcpy
	aps1 = new APS[(MAX_ADNUM+4)*(MAX_CHNUM+1)];
	aps  = aps1;
	ZeroMemory((APS*)aps,sizeof(APS)*(MAX_ADNUM+4)*(MAX_CHNUM+1));	 

	cont_tab1 = new ContTab[MAX_TOTAL+1];
	cont_tab  = cont_tab1;
	ZeroMemory((ContTab*)cont_tab,sizeof(ContTab)*(MAX_TOTAL+1));	 


	code_name_tab1 = new Code_Name_Tab[(MAX_ADNUM+4)*(MAX_CHNUM+1)];
	code_name_tab  = code_name_tab1;
	ZeroMemory((Code_Name_Tab*)code_name_tab,sizeof(Code_Name_Tab)*(MAX_ADNUM+4)*(MAX_CHNUM+1));	 


	no_add_tab1 = new No_Add_Tab[MAX_TOTAL+51];//序号: 锅炉1-300  汽机 301-500 电气501-599
	no_add_tab  = no_add_tab1;
	ZeroMemory((No_Add_Tab*)no_add_tab,sizeof(No_Add_Tab)*(MAX_TOTAL+51));	 
		no_add_tab	= no_add_tab1+MAX_TOTAL;
		no_add_tab->psNo=-1;
		no_add_tab	= no_add_tab1+MAX_TOTAL+49;
		no_add_tab->psNo=-1;
	
    Glob_Calc_Data1=new Struc_Calc_Data[MAX_CALC_COUNT+1];
	Glob_Calc_Data=Glob_Calc_Data1;
	ZeroMemory((Struc_Calc_Data*)Glob_Calc_Data,sizeof(Struc_Calc_Data)*(MAX_CALC_COUNT+1));
     
	FILE *stream;
	short nPlateBoilerNo[4];
	char  nBoilerCode[4][8];
	short nBoilerCount=0;
	m_FromBoiler_Count=0;
    if ((stream=fopen(".\\table\\GetFromBoiler.txt","r+"))!=NULL)
	{
		while(fscanf(stream,"%s",nBoilerCode[nBoilerCount])!=EOF)
		{
			fscanf(stream,"%hd",&nPlateBoilerNo[nBoilerCount]);
            nBoilerCount++;
			if (nBoilerCount>=4) break;
		}
		fclose(stream);
	}
 
    strcpy(m_sPointCode,"");
    if ((stream = fopen( ".\\table\\point.txt", "r+" ))!=NULL)
	{
        fscanf(stream,"%s",m_sPointCode);
		fclose(stream);
	}

	DataBlock	attr;
	short  swPtnum=0; 
    short Loc_Switch=0;
	short nPull;
    stream = fopen( ".\\table\\Analogdoc.txt", "r+" );
	while(fscanf( stream, "%hd %hd %s",&attr.WP_TypeIndex,&attr.WP_Number,&attr.WP_Code[0])!=EOF){
 		fscanf( stream, "%s %hd %hd",&attr.WP_Name[0],&attr.WP_OriginalIndex,&attr.Occupied_FdcsNo); 
 		fscanf( stream, "%hd %hd %f",&attr.Occupied_ChannelNo,&attr.Alert_Switch,&attr.PjtSignal_downLimit); 
		fscanf( stream, "%f %s %f",&attr.PjtSignal_upLimit,&attr.PjSignal_unit[0],&attr.Alert_downLimit); 
		fscanf( stream, "%f %f %f",&attr.Alert_upLimit,&attr.OrgnSignal_downLimit,&attr.OrgnSignal_upLimit); 
		fscanf( stream, "%s %hd %hd",&attr.OrgnSignal_unit[0],&attr.OrgnSignal_TypeIndex,&attr.Compensate_wayIndex); 
		fscanf( stream, "%hd %hd %hd %hd %hd",&attr.Compensate_Tempchange,&attr.Compensate_FdcsNo,
										&attr.Compensate_ChannelNo,&attr.AlarmGroup,&attr.Speed_Type); 
		fscanf( stream, "%s %s",&attr.Switch_Off[0],&attr.Switch_On[0]); 
  
    /////读入曲线上下限  4.19
	  
		for(i=0;i<nBoilerCount;i++)
		{
		  if ((strcmp(attr.WP_Code,nBoilerCode[i])==0))
		  {
			plate_disp.add[nPlateBoilerNo[i]]=attr.Occupied_FdcsNo;
			plate_disp.ch[nPlateBoilerNo[i]]=attr.Occupied_ChannelNo;
			code_name_tab	= code_name_tab1 + attr.Occupied_FdcsNo*(MAX_CHNUM+1)+attr.Occupied_ChannelNo;
	    	strcpy(code_name_tab->psCode,attr.WP_Code);
		    strcpy(code_name_tab->psName,attr.WP_Name);
		    code_name_tab->add = attr.Occupied_FdcsNo;
		    code_name_tab->ch  = attr.Occupied_ChannelNo;
			m_FromBoiler_Add[m_FromBoiler_Count]	  = attr.Occupied_FdcsNo;
		    m_FromBoiler_Ch[m_FromBoiler_Count]		  = attr.Occupied_ChannelNo;
			m_FromBoiler_Count++;
            strcpy(plate_disp.psCode[nPlateBoilerNo[i]],attr.WP_Code);
			aps=(APS*)aps1+attr.Occupied_FdcsNo*(MAX_CHNUM+1)+attr.Occupied_ChannelNo;
	    	aps->psNo	  =	attr.WP_Number;	
        	strcpy(aps->psCode,attr.WP_Code);
		    if(attr.Occupied_FdcsNo<50)
			{
		   	  if((attr.PjtSignal_upLimit>99999.99)||(attr.PjtSignal_upLimit<-99999.99)) attr.PjtSignal_upLimit=99999.9;
			  if((attr.PjtSignal_downLimit>99999.99)||(attr.PjtSignal_downLimit<-99999.99)) attr.PjtSignal_downLimit=-99999.99;
			}
	    	aps->sysTop	  = attr.PjtSignal_upLimit;
		    aps->sysBot	  = attr.PjtSignal_downLimit;
		    strcpy(aps->sysUnit,attr.PjSignal_unit);
			if (strstr(m_sPointCode,aps->psCode)==NULL) 
			{
		      if(attr.Alert_upLimit>attr.PjtSignal_upLimit) attr.Alert_upLimit = attr.PjtSignal_upLimit;
	       	  if(attr.Alert_upLimit< attr.Alert_downLimit)  attr.Alert_upLimit = attr.PjtSignal_upLimit;	    
		      if(attr.Alert_downLimit<attr.PjtSignal_downLimit) attr.Alert_downLimit = attr.PjtSignal_downLimit;
		      if(attr.Alert_downLimit> attr.Alert_downLimit)    attr.Alert_downLimit = attr.PjtSignal_downLimit;
			}
		    aps->alrmLl	  = attr.Alert_downLimit;
        	aps->alrmHl	  = attr.Alert_upLimit;
		    aps->Compensate_wayIndex	=attr.Compensate_wayIndex;
		    aps->Compensate_Tempchange	=attr.Compensate_Tempchange;
		    aps->Compensate_FdcsNo		=attr.Compensate_FdcsNo;
		    aps->Compensate_ChannelNo	=attr.Compensate_ChannelNo; 
			aps->AlarmGroup=attr.AlarmGroup;
			if ((aps->Compensate_FdcsNo<1)||(aps->Compensate_FdcsNo>MAX_ADNUM)) aps->Compensate_FdcsNo=0;
			if ((aps->Compensate_ChannelNo<1)||(aps->Compensate_ChannelNo>MAX_CHNUM)) aps->Compensate_ChannelNo=0;
		  }
		}
	      
		if((attr.WP_OriginalIndex!=1)&&(attr.WP_OriginalIndex!=2)) continue;
		if((attr.Occupied_FdcsNo<1)||(attr.Occupied_FdcsNo>MAX_ADNUM)) continue;	
		if((attr.Occupied_ChannelNo<1)||(attr.Occupied_ChannelNo>MAX_CHNUM)) continue;
        if(attr.WP_OriginalIndex==1) 
		{
		   if((attr.WP_Number>MAX_TURBINE)||(attr.WP_Number<1)) continue;
		}
		else
		{
           if((attr.WP_Number>MAX_GENERATOR)||(attr.WP_Number<1)) continue;
		}
     
        if ((attr.Speed_Type==1)&&(Fast_Point_Adr[attr.Occupied_FdcsNo]!=2)) Fast_Point_Adr[attr.Occupied_FdcsNo]=1;
		if (attr.Speed_Type==2) Fast_Point_Adr[attr.Occupied_FdcsNo]=2;
		aps=(APS*)aps1+attr.Occupied_FdcsNo*(MAX_CHNUM+1)+attr.Occupied_ChannelNo;
		aps->psNo	  =	attr.WP_Number;	
		strcpy(aps->psCode,attr.WP_Code);
		aps->Speed_Type=attr.Speed_Type;
		if(attr.Occupied_ChannelNo<50)
		{
			if((attr.PjtSignal_upLimit>99999.99)||(attr.PjtSignal_upLimit<-99999.99)) attr.PjtSignal_upLimit=99999.9;
			if((attr.PjtSignal_downLimit>99999.99)||(attr.PjtSignal_downLimit<-99999.99)) attr.PjtSignal_downLimit=-99999.99;
		}
		aps->sysTop	  = attr.PjtSignal_upLimit;
		aps->sysBot	  = attr.PjtSignal_downLimit;
		strcpy(aps->sysUnit,attr.PjSignal_unit);
		aps->AlarmGroup=attr.AlarmGroup;
        if (strstr(m_sPointCode,aps->psCode)==NULL) 
		{
		  if(attr.Alert_upLimit>attr.PjtSignal_upLimit) attr.Alert_upLimit = attr.PjtSignal_upLimit;
		  if(attr.Alert_upLimit< attr.Alert_downLimit)  attr.Alert_upLimit = attr.PjtSignal_upLimit;
	
  		  if(attr.Alert_downLimit<attr.PjtSignal_downLimit) attr.Alert_downLimit = attr.PjtSignal_downLimit;
		  if(attr.Alert_downLimit> attr.Alert_downLimit)    attr.Alert_downLimit = attr.PjtSignal_downLimit;
		}
		aps->alrmLl	  = attr.Alert_downLimit;
     	aps->alrmHl	  = attr.Alert_upLimit;
		aps->Compensate_wayIndex	=attr.Compensate_wayIndex;
		aps->Compensate_Tempchange	=attr.Compensate_Tempchange;
		aps->Compensate_FdcsNo		=attr.Compensate_FdcsNo;
		aps->Compensate_ChannelNo	=attr.Compensate_ChannelNo; 
		if ((aps->Compensate_FdcsNo<1)||(aps->Compensate_FdcsNo>MAX_ADNUM)) aps->Compensate_FdcsNo=0;
		if ((aps->Compensate_ChannelNo<1)||(aps->Compensate_ChannelNo>MAX_CHNUM)) aps->Compensate_ChannelNo=0;


//编号与前置机号通道号对照表
		cont_tab  = cont_tab1+watchPointNums;//attr.WP_Number;
		//cont_tab->psNo=	attr.WP_Number;
		strcpy(cont_tab->psCode,attr.WP_Code);
		cont_tab->add = attr.Occupied_FdcsNo;
		cont_tab->ch  = attr.Occupied_ChannelNo;
		

//编号与测点名称对照表
		code_name_tab	= code_name_tab1 + attr.Occupied_FdcsNo*(MAX_CHNUM+1)+attr.Occupied_ChannelNo;
		strcpy(code_name_tab->psCode,attr.WP_Code);
		strcpy(code_name_tab->psName,attr.WP_Name);
		code_name_tab->add = attr.Occupied_FdcsNo;
		code_name_tab->ch  = attr.Occupied_ChannelNo;

//前置机系统类型(锅炉 汽机)
	if(attr.WP_TypeIndex==0)
	{
		  switch(attr.WP_OriginalIndex){
		  case 0://锅炉 
		 	Boiler[attr.Occupied_FdcsNo]=1;
			BoilerPtNums++;
			break;
		  case 1://汽机
			VaporPtNums++;
			Vapor[attr.Occupied_FdcsNo]=1;
			break;
		  case 2://
            GeneratorPtNums++;
			Generator[attr.Occupied_FdcsNo]=1;
			break;
		  default:
			break;
		 }
	}
		if (attr.WP_TypeIndex!=0)   watchPointNums++;

		//序号与前置机号对照表
		if(attr.WP_TypeIndex==0)
		{  // 0:Anaval point  1:calculate point 2:digital point
		  switch(attr.WP_OriginalIndex){
	    	case 1:
		    	no_add_tab	= no_add_tab1 + attr.WP_Number;
				aps->AlarmNo=aps->psNo;
				break;
            case 2:
		    	no_add_tab	= no_add_tab1 + MAX_TURBINE+attr.WP_Number;
				aps->AlarmNo=aps->psNo+MAX_TURBINE;
				break;
	      default:
			no_add_tab	= no_add_tab1 + MAX_TOTAL+49;
			break;
		  }
		}
		else if(attr.WP_TypeIndex==2) //digital point
		{//Switch
		 
			Glob_Switch_Count++;
			Vapor[attr.Occupied_FdcsNo]=1;
			Fast_Point_Adr[attr.Occupied_FdcsNo]=1;		 
            no_add_tab= no_add_tab1+MAX_TOTAL+attr.WP_Number; 			   		 
            	//编号与开关量意义对照表
		    strcpy(swOn[attr.WP_Number],attr.Switch_On);
			strcpy(swOff[attr.WP_Number],attr.Switch_Off); 		
		}
		else
		{
          no_add_tab	= no_add_tab1 + MAX_TOTAL+49;
		}
		no_add_tab->add		= attr.Occupied_FdcsNo;
		no_add_tab->ch		= attr.Occupied_ChannelNo;
		no_add_tab->psNo	= attr.WP_Number;	
		no_add_tab->psFrom	= attr.WP_OriginalIndex;
		 
	}
	fclose(stream);


//***********lxl add 2000-4-12 Get Calculate property begin***********
   CalDataBlock Loc_Data_Block;
   Struc_Calc_File Local_Calc_File[MAX_CALC_COUNT];
   int j;

   char Loc_PjSignal_unit[12][8]={"kwh","t/h","℃","MPa","Hz"};

     
    short Boiler_Calc_Count=0,Vapor_Calc_Count=0,Generator_Calc_Count=0;

   if ((stream=fopen(".//table//CalcDoc.txt","r"))==NULL)
   {
	 AfxMessageBox("open CalcDoc.txt file error");
   }
   else
   { 
     /* */
	 Glob_Calc_Count=0;
     while ((fscanf(stream,"%hd%hd%s%s",
		     &Loc_Data_Block.WP_OriginalIndex,&Loc_Data_Block.WP_Number,
		     &Loc_Data_Block.WP_Code,&Loc_Data_Block.WP_Name))!=EOF)
	 {
       fscanf(stream,"%hd%hd%hd ",&j,&Loc_Data_Block.PjSignal_unit,&Loc_Data_Block.Calc_Type);
       fscanf(stream,"%s%10s ",&Loc_Data_Block.Calc_Code1,&Loc_Data_Block.Calc_Code2);
       switch (Loc_Data_Block.WP_OriginalIndex)
	   {
       case 0:	 
		   break;
          	  
	   case 1:   //汽机
		   Vapor_Calc_Count++;
		   no_add_tab= no_add_tab1+Loc_Data_Block.WP_Number;
		   no_add_tab->psNo=Loc_Data_Block.WP_Number;
		   no_add_tab->add=MAX_ADNUM+2;
		   no_add_tab->ch=Vapor_Calc_Count;
		   Vapor_Calc_Count%=20;		    
		   aps=aps1+(MAX_ADNUM+2)*(MAX_CHNUM+1)+Vapor_Calc_Count;
		   aps->psNo=Loc_Data_Block.WP_Number;
		   strcpy(aps->psCode,Loc_Data_Block.WP_Code);
//		   aps->psType=Loc_Data_Block.WP_OriginalIndex;
		   strcpy(aps->sysUnit,Loc_PjSignal_unit[Loc_Data_Block.PjSignal_unit]);
		   aps->anaVal=0;
		   code_name_tab=code_name_tab1+(MAX_ADNUM+2)*(MAX_CHNUM+1)+Vapor_Calc_Count;
           strcpy(code_name_tab->psCode,Loc_Data_Block.WP_Code); 
		   strcpy(code_name_tab->psName,Loc_Data_Block.WP_Name);

⌨️ 快捷键说明

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