📄 operatview.cpp
字号:
// 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 + -