📄 fdcsmanage.cpp
字号:
// FdcsManage.cpp : implementation file
//
#include "stdafx.h"
#include "math.h"
//#include "OperView.h"
#include "FdcsManage.h"
#include "FdcsData.h"
#include "Global.h"
#include "DataType.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFdcsManage
IMPLEMENT_DYNCREATE(CFdcsManage, CCmdTarget)
CFdcsManage::CFdcsManage()
{
}
CFdcsManage::~CFdcsManage()
{
}
BEGIN_MESSAGE_MAP(CFdcsManage, CCmdTarget)
//{{AFX_MSG_MAP(CFdcsManage)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFdcsManage message handlers
short firstGet=1;
short CFdcsManage::DataGet(short Fast_Type,CWnd *pWnd)
{
CFdcsData fdcs;
short i,chi,m;
short chNum=15,Loc_Return=0,Loc_ThreeError_Flag=0;
float tval,fval;
short tst,err;
APS *compensateAps;
CTime nTime;
for(short adr=1;adr<MAX_ADNUM;adr++)
{
if ((Vapor[adr]!=1)) continue;
if (Fast_Point_Adr[adr]!=Fast_Type) continue;
m=(adr+Glob_CurError_Adr)%MAX_ADNUM;
if (Glob_Error_Three[m]>=3)
{
Loc_ThreeError_Flag=1;
if ((m!=Glob_CurError_Adr)&&(Loc_Return==0))
{
Loc_Return=m;
Glob_CurError_Adr=m;
}
}
if (Glob_Error_Count[adr]!=0)
{
Glob_Error_Count[adr]--;
continue;
}
if(poll[adr] == 42) chNum=15;
else chNum=20;
switch(poll[adr])
{
case 9:
case 42:
err=fdcs.Fdcs_Coll(adr);
aps = aps1 + adr*(MAX_CHNUM+1)+1;
if (err<0) // error! data is invalidate,set a err single
{
if (aps->last_err<0) for( i=1;i<=chNum;i++)
{
aps=aps1 + adr*(MAX_CHNUM+1)+i;
aps->st=err-25;
}
//*******lxl add in 2000-5-8 begin check error return*******
aps->last_err = err;
if ((err==-2)||(err==-1))
{
Glob_Error_Two[adr]++;
if (Glob_Error_Two[adr]>=3) Glob_Error_Count[adr]=10;
}
else if ((err==-3))
{
Glob_Error_Three[adr]++;
if (Glob_Error_Three[adr]>=3)
{
Glob_Error_Count[adr]=50;
}
}
continue;
}
aps->last_err = err;
Glob_Error_Two[adr]=0;
Glob_Error_Three[adr]=0;
//******lxl add in 2000-5-8 end*************
for( chi=1;chi<=chNum;chi++)
{
aps = aps1 + adr*(MAX_CHNUM+1)+chi;
if (aps->psNo<=0) continue;
tval= fdcs.getAnaVal(chi);
tst=fdcs.getSt(chi);
if(tst>=0){
switch(aps->Compensate_wayIndex)
{
case 0://0 直馈
break;
case 1://1 通道
compensateAps = aps1+aps->Compensate_FdcsNo*(MAX_CHNUM+1)+aps->Compensate_ChannelNo;
tval+=compensateAps->anaVal;
break;
case 2://2 迁移
tval+=aps->Compensate_Tempchange;
break;
default:
break;
}
}
if(tst>=0)
{
if(firstGet)
aps->anaVal = tval;
else
{
if (aps->Speed_Type==0)
{
fval= tval/2+aps->anaVal/2;
aps->anaVal = fval;
}
else
aps->anaVal = tval;
}
if (strstr(m_sPointCode,aps->psCode)==NULL)
{
if((aps->anaVal>aps->alrmLl)&&(aps->anaVal<aps->alrmHl)) tst=0;
else tst=1;
if(aps->anaVal>aps->sysTop){tst=1;}
if(aps->anaVal<aps->sysBot){aps->anaVal=aps->sysBot;tst=1;}
}
else
{
if((aps->anaVal>fabs(aps->alrmLl))&&(aps->anaVal<fabs(aps->alrmHl))) tst=0;
else tst=1;
}
}
if ((aps->AlarmGroup>=0)&&(aps->AlarmGroup<10)) //如果该测点没有设置为报警,测取消报警处理
{
switch(tst)
{
case 1:
case 2:
case 3:
case 4:
aps = aps1 + adr*(MAX_CHNUM+1)+chi;
nTime=CTime::GetCurrentTime();
if((aps->st==0))
{//为出现越限报警
aps->alrmtime=nTime.GetTime();
pWnd->SendMessage(NEW_ALARM_MESSAGE,adr*100+chi,0);
}
else if (aps->st>0)
{
nTime=CTime::GetCurrentTime();
if (nTime.GetTime()>=(aps->alrmtime+120))
{
pWnd->SendMessage(MAX_ALARM_MESSAGE,adr*100+chi,0);
aps->alrmtime=nTime.GetTime();
}
}
else
{
tst=0;
}
aps->st=tst;
break;
case 0:
case -1:
default:
aps = aps1 + adr*(MAX_CHNUM+1)+chi;
if (aps->st>0) // 报警
{
pWnd->SendMessage(END_ALARM_MESSAGE,adr*100+chi,0);
}
aps->st = tst;
break;
} //switch st
}
else
{
if (tst>=0) tst=0;
}
aps->st = tst;
}// chi=1 to chNum
break;
case 22:
case 23:
case 25:
if((Station==0)||(Station==2))
{
err=fdcs.Fdcs_RdSt(adr);
if(err<0)
{
for( i=1;i<=chNum;i++)
{
aps = aps1 + adr*(MAX_CHNUM+1)+i;
aps->st = -1;
}
//*******lxl add in 2000-5-8 begin check error return*******
if ((err==-2)||(err==-1))
{
Glob_Error_Two[adr]++;
if (Glob_Error_Two[adr]>=3) // after 210*3 second
{
Glob_Error_Count[adr]=10;
}
}
else if ((err==-3))
{
Glob_Error_Three[adr]++;
if (Glob_Error_Three[adr]>=3)
{
Glob_Error_Count[adr]=50;
}
}
//******lxl add in 2000-5-8 end*************
//return
continue; //lxl change return to continue in 2000-4-8
}
Glob_Error_Two[adr]=0;
Glob_Error_Three[adr]=0;
// lxl add in 2000-5-8 begin
// lxl add in 2000-5-8 end
for(i=1;i<=chNum;i++)
{
aps = aps1 + adr*(MAX_CHNUM+1)+i;
aps->swVal = fdcs.getSwVal(i);
}
}
break;
default:
break;
}
}
if (Loc_ThreeError_Flag==0)
{
// if (Glob_CurError_Adr>0) Loc_Return=100;
Glob_CurError_Adr=0;
}
//计算温差报警
short nMaxAddCh[4],nMinAddCh[4];
float nMaxData[4],nMinData[4];
for(i=0;i<4;i++)
{
nMaxData[i]=0;nMinData[i]=1000;
nMaxAddCh[i]=nMinAddCh[i]=0;
}
for(adr=1;adr<MAX_ADNUM;adr++)
{
if(Vapor[adr]!=1) continue;
if (Fast_Point_Adr[adr]!=Fast_Type) continue;
for( chi=1;chi<=chNum;chi++)
{
aps = aps1 + adr*(MAX_CHNUM+1)+chi;
if (aps->psNo<=0) continue;
switch(aps->AlarmGroup)
{
case 10:
if (aps->anaVal>=nMaxData[0])
{
nMaxData[0]=aps->anaVal;
nMaxAddCh[0]=adr*100+chi;
}
if (aps->anaVal<=nMinData[0])
{
nMinData[0]=aps->anaVal;
nMinAddCh[0]=adr*100+chi;
}
break;
case 11:
if (aps->anaVal>=nMaxData[1])
{
nMaxData[1]=aps->anaVal;
nMaxAddCh[1]=adr*100+chi;
}
if (aps->anaVal<=nMinData[1])
{
nMinData[1]=aps->anaVal;
nMinAddCh[1]=adr*100+chi;
}
break;
default:
break;
}
}
}
if ((nMaxData[0]-nMinData[0])>=0.06)
{
aps = aps1 + nMaxAddCh[0]/100*(MAX_CHNUM+1)+nMaxAddCh[0]%100;
aps->st=1;
aps = aps1 + nMinAddCh[0]/100*(MAX_CHNUM+1)+nMinAddCh[0]%100;
aps->st=1;
}
if ((nMaxData[1]-nMinData[1])>=0.06)
{
aps = aps1 + nMaxAddCh[1]/100*(MAX_CHNUM+1)+nMaxAddCh[1]%100;
aps->st=1;
aps = aps1 + nMinAddCh[1]/100*(MAX_CHNUM+1)+nMinAddCh[1]%100;
aps->st=1;
}
for(adr=1;adr<MAX_ADNUM;adr++)
{
if(Vapor[adr]!=1) continue;
for( chi=1;chi<=chNum;chi++)
{
aps = aps1 + adr*(MAX_CHNUM+1)+chi;
if (aps->psNo<=0) continue;
if (aps->AlarmGroup<10) continue;
switch(aps->st)
{
case 1:
aps = aps1 + adr*(MAX_CHNUM+1)+chi;
nTime=CTime::GetCurrentTime();
if(aps->oldst!=1)
{//为出现越限报警
aps->alrmtime=nTime.GetTime();
pWnd->SendMessage(NEW_ALARM_MESSAGE,adr*100+chi,0);
}
aps->oldst=aps->st;
break;
default: //只要出现过报警
aps = aps1 + adr*(MAX_CHNUM+1)+chi;
if (aps->oldst==1) // 报警
{
pWnd->SendMessage(END_ALARM_MESSAGE,adr*100+chi,0);
}
aps->oldst=aps->st;
break;
}
}
}
return Loc_Return;
}
void CFdcsManage::DataProcess(short adr){
}
void CFdcsManage::SwitchProcess(short adr){
}
void CFdcsManage::TimingData(void)
{
CTime tt;
short mon,day,hour,minu,sec;
tt=CTime::GetCurrentTime();
mon = tt.GetMonth(); //1-12
day = tt.GetDay(); //1-31
hour = tt.GetHour(); //0-23
minu = tt.GetMinute(); //0-59
sec = tt.GetSecond(); //0-59
firstGet=0;
if(((minu==0)||(minu==30))&&(sec<10))
{
/* Glob_MinuBegin_SaveFalg%=2;
if (Glob_MinuBegin_SaveFalg==0)
{
Glob_MinuBegin_SaveFalg=1;
}
if((hour==0)&&(minu==0)&&(sec<10))
{
Glob_DayBegin_SaveFalg%=2;
if (Glob_DayBegin_SaveFalg==0)
{
Glob_DayBegin_SaveFalg=1;
AlrmPos=0; AlrmSavePos=0; dwAlrmFile=0;
SwAlrmPos=0; SwAlrmSavePos=0;
// pAlrmHead=pAlrmEnd=analrm1;
// pSwAlrmHead=pSwAlrmEnd=swalrm1;
dwAlrmFile=0;
}
}*/
}
if(((minu%3)==2)&&(sec<3))//定时存储历史数据
{
SaveMinuData( mon, day, hour, minu);
}
if(((minu==29)||(minu==59))&&(sec>53))//定时存储历史数据
{
/* Glob_MinuBegin_SaveFalg=2;
Glob_MinuEnd_SaveFalg%=2;
if (Glob_MinuEnd_SaveFalg==0)
{
SaveMinuData( mon, day, hour, minu);
Glob_MinuEnd_SaveFalg=1;
}
*/ }
if(((minu%6)==1)&&(sec<3)){//定时存储报警数据
SaveTotalData( mon );
}
if(((minu%15)==3)&&(sec<3)){//定时存储报警数据
SaveDayData(mon,day);
}
if ((hour==23)&&(minu==59)&&(sec>45))
{
}
}
void CFdcsManage::SaveMinuData(short mon,short day,short hour,short minu)
{
}
void CFdcsManage::SaveDayData(short mon,short day)
{
}
void CFdcsManage::SaveAlrmData(short mon,short day)
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -