📄 fdcsmanage.cpp
字号:
void CFdcsManage::SaveSwAlrmData(short mon,short day)
{
}
void CFdcsManage::SaveTotalData(short mon)
{
char fileName[30];
FILE *ftpA;
sprintf(fileName,".\\table\\total%02d.txt",mon);
if((ftpA=fopen(fileName,"w"))==NULL) return;
//Struc_Calc_Data *Glob_Calc_Data;
// Struc_Calc_Aps *Glob_Calc_aps;
for(int i=0;i<Glob_Calc_Count;i++)
{
Glob_Calc_Data=Glob_Calc_Data1+i;
if (Glob_Calc_Data->Calc_Type==1)
{
aps=aps1+Glob_Calc_Data->Own_add*(MAX_CHNUM+1)+Glob_Calc_Data->Own_ch;
fprintf(ftpA,"%s %f ",aps->psCode,aps->anaVal);
}
}
fclose(ftpA);
}
void CFdcsManage::ReadTotalData(short mon)
{
char fileName[30];
FILE *ftpA;
sprintf(fileName,".\\table\\total%02d.txt",mon);
if((ftpA=fopen(fileName,"r"))==NULL) return;
char Local_Code[MAX_CALC_COUNT][8];
float Local_Float[MAX_CALC_COUNT];
int j=0;
//Struc_Calc_Data *Glob_Calc_Data;
// Struc_Calc_Aps *Glob_Calc_aps;
while((fscanf(ftpA, "%s %f",Local_Code[j],&Local_Float[j])!=EOF)&&(j<MAX_CALC_COUNT)) j++;
fclose(ftpA);
if (j==0) return;
for(int i=0;i<Glob_Calc_Count;i++)
{
Glob_Calc_Data=Glob_Calc_Data1+i;
if (Glob_Calc_Data->Calc_Type==1)
{
aps=aps1+(Glob_Calc_Data->Own_add)*(MAX_CHNUM+1)+Glob_Calc_Data->Own_ch;
for(int k=0;k<j;k++)
{
if (strcmp(aps->psCode,Local_Code[k])==0)
{
aps->anaVal=Local_Float[k];
break;
}
}
}
}
}
void CFdcsManage::Def_Find_AlrmPoint(int Local_Alrm_Head, int Local_Alrm_Foot, time_t Local_Alrm_Time, int *Local_Alrm_Return)
{
}
short CFdcsManage::FastPoint_DataGet(short Fast_Type)
{
return 0;
}
void CFdcsManage::GetDataFromBoiler(short adr,short ch)
{
short err,tst;
CFdcsData fdcs;
float tval,fval;
APS *aps,*compensateAps;
if (Glob_Error_Count[adr]!=0)
{
Glob_Error_Count[adr]--;
}
else
{
switch(poll[adr])
{
case 9:
case 42:
err=fdcs.Fdcs_Coll(adr);
aps = aps1 + adr*(MAX_CHNUM+1)+ch;
if (err<0) // lxl change in 200-5-8
{
if (aps->last_err<0) aps->st=err-25;
aps->last_err=err;
if ((err==-2)||(err==-1))
{
Glob_Error_Two[adr]++;
Glob_Error_Count[adr]=(Glob_Error_Two[adr]*3);
if (Glob_Error_Two[adr]==30) // after 435*3 second
{
Glob_Error_Count[adr]=0;
Glob_Error_Two[adr]=0;
}
}
else if ((err==-3))
{
Glob_Error_Three[adr]++;
Glob_Error_Count[adr]=(Glob_Error_Three[adr])*3;
if (Glob_Error_Three[adr]==4) // 1+2+3+4=10 after
{
Glob_Error_Count[adr]=0;
}
if (Glob_Error_Three[adr]==10) //1+2+3+4+5+6=21
{
Glob_Error_Count[adr]=0;
Glob_Error_Three[adr]=0;
}
}
}
else
{
aps->last_err = err;
Glob_Error_Two[adr]=0;
Glob_Error_Three[adr]=0;
//******lxl add in 2000-5-8 end*************
tval= fdcs.getAnaVal(ch);
if(tval>aps->sysTop){ tval = aps->sysTop; aps->st = -1;}
if(tval<aps->sysBot){ tval = aps->sysBot; aps->st = -1;}
tst=fdcs.getSt(ch);
switch(aps->Compensate_wayIndex)
{
case 1:
compensateAps = aps1+aps->Compensate_FdcsNo*(MAX_CHNUM+1)+aps->Compensate_ChannelNo;
tval+=compensateAps->anaVal;
if((tval>aps->alrmLl)&&(tval<=aps->alrmHl)) tst=0;
case 2://2 迁移
tval+=aps->Compensate_Tempchange;
if((tval>aps->alrmLl)&&(tval<=aps->alrmHl)) tst=0;
else tst=1;
break;
default:
break;
}
if(tst>=0)
{
if(firstGet)
{
aps->anaVal = tval;
}
else
{
fval = tval/2+aps->anaVal/2;
aps->anaVal = fval;
}
}
if(tst>0)
if((aps->anaVal>=aps->alrmLl)&&(aps->anaVal<=aps->alrmHl)) tst=0;
aps->st = tst;
}
break;
default:
break;
}
}
}
BOOL CFdcsManage::DataGetGenerator(CWnd *pWnd)
{
//当有二级报警时返回false
//采集发电机温度
BOOL bResult=true;
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 ((Generator[adr]!=1)) 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;
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
{
aps->anaVal = tval;
}
if((aps->anaVal>aps->alrmLl)&&(aps->anaVal<aps->alrmHl)) tst=0;
else tst=1;
if(aps->anaVal>aps->sysTop){ aps->anaVal=aps->sysTop;tst=-1;}
if(aps->anaVal<aps->sysBot){ aps->anaVal=aps->sysBot;tst=-1;}
switch(aps->AlarmGroup)
{
case 7:
if (aps->anaVal>=90)
{
tst=2;
bResult=false; //二级越限
}
break;
case 8:
break;
case 9:
if (aps->anaVal>=85)
{
tst=2;
bResult=false; //二级越限
}
break;
default:
break;
}
}
aps->st = tst;
}// chi=1 to chNum
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]=200;
nMaxAddCh[i]=nMinAddCh[i]=0;
}
for(adr=1;adr<MAX_ADNUM;adr++)
{
if ((Generator[adr]!=1)) continue;
for( chi=1;chi<=chNum;chi++)
{
aps = aps1 + adr*(MAX_CHNUM+1)+chi;
if (aps->st<0) continue;
if (aps->psNo<=0) continue;
switch(aps->AlarmGroup)
{
case 7:
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 8:
break;
case 9:
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;
}
}
}
float nOneData[]={8,8}; //一级温差
float nTwoData[]={14,12};//二级温差
for(i=0;i<2;i++)
{
if ((nMaxData[i]-nMinData[i])>=nOneData[i])
{
aps = aps1 + nMaxAddCh[i]/100*(MAX_CHNUM+1)+nMaxAddCh[i]%100;
aps->st=1;
aps = aps1 + nMinAddCh[i]/100*(MAX_CHNUM+1)+nMinAddCh[i]%100;
aps->st=1;
}
if ((nMaxData[i]-nMinData[i])>=nTwoData[i])
{
aps = aps1 + nMaxAddCh[i]/100*(MAX_CHNUM+1)+nMaxAddCh[i]%100;
aps->st=2;
aps = aps1 + nMinAddCh[i]/100*(MAX_CHNUM+1)+nMinAddCh[i]%100;
aps->st=2;
bResult=false; //二级报警
}
}
//线圈温度报警
for(adr=1;adr<MAX_ADNUM;adr++)
{
if ((Generator[adr]!=1)) continue;
for( chi=1;chi<=chNum;chi++)
{
aps = aps1 + adr*(MAX_CHNUM+1)+chi;
if (aps->psNo<=0) continue;
if ((aps->AlarmGroup!=7)) continue;
switch(aps->st)
{
case 2:
aps = aps1 + adr*(MAX_CHNUM+1)+chi;
nTime=CTime::GetCurrentTime();
if(aps->oldst!=2)
{//为出现越限报警
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==2) // 报警
{
pWnd->SendMessage(END_ALARM_MESSAGE,adr*100+chi,0);
}
aps->oldst=aps->st;
break;
}//switch st
}
}
//出水温度报警;
for(adr=1;adr<MAX_ADNUM;adr++)
{
if ((Generator[adr]!=1)) continue;
for( chi=1;chi<=chNum;chi++)
{
aps = aps1 + adr*(MAX_CHNUM+1)+chi;
if (aps->psNo<=0) continue;
if ((aps->AlarmGroup!=9)) continue;
switch(aps->st)
{
case 2:
aps = aps1 + adr*(MAX_CHNUM+1)+chi;
nTime=CTime::GetCurrentTime();
if(aps->oldst!=2)
{//为出现越限报警
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==2) // 报警
{
pWnd->SendMessage(END_ALARM_MESSAGE,adr*100+chi,0);
}
aps->oldst=aps->st;
break;
}//switch st
}
}
return bResult;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -