📄 server1.cpp
字号:
Val=Cfg3.cfg3[File4.info[fzNo].fzindex][PortNo].sensor;
break;
case 4:
Val=Cfg4.cfg4[File4.info[fzNo].fzindex][PortNo].sensor;
break;
}
return Val;
}
void Server1::cd_err_dj(int cdNo)
{
// TODO: Add your implementation code here
int m;
int ErrNum=errorrecord.ErrorNum;
//判测点故障及报警
for(m=0;m<ErrNum;m++)
{
if(errorrecord.ErrorRec[m].errorflag==1)
{
if(errorrecord.ErrorRec[m].addr_sensor==Timedata.NowdataRec[cdNo].addr_sensor)
break;
}
}
if(m==ErrNum)
{
ErrNum=ErrNum+1;
errorrecord.ErrorNum=ErrNum;
errorrecord.ErrorRec[ErrNum-1].fz_cd_num=cdNo;
errorrecord.ErrorRec[ErrNum-1].addr_sensor=Timedata.NowdataRec[cdNo].addr_sensor;
errorrecord.ErrorRec[ErrNum-1].errorflag=1;
SYSTEMTIME start_time;
GetLocalTime(&start_time); // address of system time structure
errorrecord.ErrorRec[ErrNum-1].start_time=dateCal(start_time.wYear,start_time.wMonth,start_time.wDay,start_time.wHour,start_time.wMinute,start_time.wSecond);
if (Timedata.NowdataRec[cdNo].nowdata==-100)
errorrecord.ErrorRec[ErrNum-1].error_type=1;
if (Timedata.NowdataRec[cdNo].nowdata==-200)
errorrecord.ErrorRec[ErrNum-1].error_type=2;
if (Timedata.NowdataRec[cdNo].nowdata==-300)
errorrecord.ErrorRec[ErrNum-1].error_type=3;
alarm_old_dj(cdNo);
}
}
STDMETHODIMP Server1::cd_errold_dj(int cdNo)
{
// TODO: Add your implementation code here
int i,j;
int ErrNum=errorrecord.ErrorNum;
int ErrOldNum=erroroldrecord.ErrorCun;
for (j=0;j<ErrNum;j++)
{
if (errorrecord.ErrorRec[j].errorflag==1)
{
/*****************解除测点故障******************/
if (errorrecord.ErrorRec[j].addr_sensor==Timedata.NowdataRec[cdNo].addr_sensor)
{
SYSTEMTIME end_time;
GetLocalTime(&end_time); // address of system time structure
DATE dt2=dateCal(end_time.wYear,end_time.wMonth,end_time.wDay,end_time.wHour,end_time.wMinute,end_time.wSecond);
DATE dt1=errorrecord.ErrorRec[j].start_time;
if(dt1!=dt2){
ErrOldNum=ErrOldNum+1;
erroroldrecord.ErrorCun=ErrOldNum;
erroroldrecord.ErroroldRec[ErrOldNum-1].errorflag=1;
erroroldrecord.ErroroldRec[ErrOldNum-1].start_time=dt1;
erroroldrecord.ErroroldRec[ErrOldNum-1].addr_sensor=Timedata.NowdataRec[cdNo].addr_sensor;
erroroldrecord.ErroroldRec[ErrOldNum-1].end_time=dt2;
erroroldrecord.ErroroldRec[ErrOldNum-1].error_type=errorrecord.ErrorRec[j].error_type;
}
/*************从实时测点故障中移去******************/
if(j==ErrNum-1)
{
ErrNum=ErrNum-1;
errorrecord.ErrorNum=ErrNum;
}
else
{
for(i=j+1;i<ErrNum;i++)
{
errorrecord.ErrorRec[i-1]=errorrecord.ErrorRec[i];
}
ErrNum=ErrNum-1;
errorrecord.ErrorNum=ErrNum;
}
}
}
}
return S_OK;
}
STDMETHODIMP Server1::Get_kaijutu_tab(int kaitu_No,int *addr_sensor,int * timenow,long *kjt0,long *kjt1,long *kjt2,long *kjt3)
{
// TODO: Add your implementation code here
*addr_sensor=ktp.kaijutu[kaitu_No].addr_sensor;
*timenow=ktp.kaijutu[kaitu_No].timenow;
*kjt0=ktp.kaijutu[kaitu_No].kjt[0];
*kjt1=ktp.kaijutu[kaitu_No].kjt[1];
*kjt2=ktp.kaijutu[kaitu_No].kjt[2];
*kjt3=ktp.kaijutu[kaitu_No].kjt[3];
return S_OK;
}
STDMETHODIMP Server1::Get_Alar(int alarNo,int *addr_sensor,float *maxv,float *minv,float *avgv,DATE *start_time, DATE *end_time)
{
// TODO: Add your implementation code here
*addr_sensor=alarmoldrecord.AlarmOldRec[alarNo].addr_sensor;
*maxv=alarmoldrecord.AlarmOldRec[alarNo].maxv;
*minv=alarmoldrecord.AlarmOldRec[alarNo].minv;
*avgv=alarmoldrecord.AlarmOldRec[alarNo].avgv;
*start_time=alarmoldrecord.AlarmOldRec[alarNo].start_time;
*end_time=alarmoldrecord.AlarmOldRec[alarNo].end_time;
return S_OK;
}
STDMETHODIMP Server1::Set_Alar_Num(int Num)
{
// TODO: Add your implementation code here
alarmoldrecord.AlarmCun=Num;
return S_OK;
}
STDMETHODIMP Server1::Set_Err_Num(int Num)
{
// TODO: Add your implementation code here
erroroldrecord.ErrorCun=Num;
return S_OK;
}
STDMETHODIMP Server1::Get_Err(int errNo,int *addr_sensor,BYTE *errorflag,BYTE *error_type,DATE *start_time, DATE *end_time)
{
// TODO: Add your implementation code here
*addr_sensor=erroroldrecord.ErroroldRec[errNo].addr_sensor;
*errorflag=erroroldrecord.ErroroldRec[errNo].errorflag;
*error_type=erroroldrecord.ErroroldRec[errNo].error_type;
*start_time=erroroldrecord.ErroroldRec[errNo].start_time;
*end_time=erroroldrecord.ErroroldRec[errNo].end_time;
return S_OK;
}
STDMETHODIMP Server1::Get_Alar_Num(int *AlarNum)
{
// TODO: Add your implementation code here
*AlarNum=alarmoldrecord.AlarmCun;
return S_OK;
}
STDMETHODIMP Server1::Get_Err_Num(int *ErrNum)
{
// TODO: Add your implementation code here
*ErrNum=erroroldrecord.ErrorCun;
return S_OK;
}
STDMETHODIMP Server1::Get_NowData_Num(int *Num)
{
// TODO: Add your implementation code here
*Num=Timedata.DataNum;
return S_OK;
}
STDMETHODIMP Server1::Get_Kaijutu_Num(int *Num)
{
// TODO: Add your implementation code here
*Num=ktp.numb;
return S_OK;
}
int Server1::if_leapyear(int year)
{
int leap_year;
if(year % 4==0)
{
if(year%100==0)
{
if(year%400==0)
leap_year=1;
else
leap_year=0;
}
else leap_year=1;
}
else
leap_year=0;
return leap_year;
}
DATE Server1::dateCal(int year,int month,int day,int hour,int minute,int second)
{
int i;
DATE tmpdate=0;
for(i=1900;i<year;i++)
{
if (if_leapyear(i)==1)
tmpdate+=366;
else
tmpdate+=365;
}
tmpdate+=1;
tmpdate+=day;
for(i=1;i<month;i++)
{
if((i==1) || (i==3) || (i==5) || (i==7) || (i==8) || (i==10))
tmpdate+=31;
else if(i==2)
{
if(if_leapyear(year)==1)
tmpdate+=29;
else
tmpdate+=28;
}
else
tmpdate+=30;
}
tmpdate+=(double)hour/24;
tmpdate+=(double)minute/(24*60);
tmpdate+=(double)second/(24*60*60);
return tmpdate;
}
void Server1::fz_err_dj(int stNo)
{
// TODO: Add your implementation code here
int i,j;
int ErrNum=errorrecord.ErrorNum;
for (j=0;j<ErrNum;j++)
{
if (errorrecord.ErrorRec[j].errorflag==2)
{
if (errorrecord.ErrorRec[j].addr_sensor==stNo)
break;
}
}
/***********************登记分站故障********************/
if (j==ErrNum)
{
ErrNum=ErrNum+1;
errorrecord.ErrorNum=ErrNum;
errorrecord.ErrorRec[ErrNum-1].fz_cd_num=stNo;
errorrecord.ErrorRec[ErrNum-1].errorflag=2;
errorrecord.ErrorRec[ErrNum-1].error_type=0;
SYSTEMTIME start_time;
GetLocalTime(&start_time); // address of system time structure
errorrecord.ErrorRec[ErrNum-1].start_time=dateCal(start_time.wYear,start_time.wMonth,start_time.wDay,start_time.wHour,start_time.wMinute,start_time.wSecond);
errorrecord.ErrorRec[ErrNum-1].addr_sensor = stNo;
}
int Num1=alarmrecord.AlarmNum;
int Num2=alarmoldrecord.AlarmCun;
for(i=0;i<Num1;i++) //解除报警
{
int index=alarmrecord.AlarmRec[i].addr_sensor/50;
int sensor=alarmrecord.AlarmRec[i].addr_sensor%50;
if(File6.file6[sensor][index].addr==stNo)
{
Num2+=1;
alarmoldrecord.AlarmCun=Num2;
alarmoldrecord.AlarmOldRec[Num2-1].addr_sensor=alarmrecord.AlarmRec[i].addr_sensor;
alarmoldrecord.AlarmOldRec[Num2-1].start_time=alarmrecord.AlarmRec[i].start_time;
SYSTEMTIME end_time;
GetLocalTime(&end_time); // address of system time structure
alarmoldrecord.AlarmOldRec[Num2-1].end_time=dateCal(end_time.wYear,end_time.wMonth,end_time.wDay,end_time.wHour,end_time.wMinute,end_time.wSecond);
alarmoldrecord.AlarmOldRec[Num2-1].avgv=alarmrecord.AlarmRec[i].avgv;
alarmoldrecord.AlarmOldRec[Num2-1].maxv=alarmrecord.AlarmRec[i].maxv;
alarmoldrecord.AlarmOldRec[Num2-1].minv=alarmrecord.AlarmRec[i].minv;
if(i==Num1-1)
{
Num1-=1;
alarmrecord.AlarmNum=Num1;
}
else
{
for(j=i+1;j<Num1;j++)
{
alarmrecord.AlarmRec[j-1]=alarmrecord.AlarmRec[j];
}
Num1-=1;
alarmrecord.AlarmNum=Num1;
}
break;
}
}
}
STDMETHODIMP Server1::fz_errold_dj(int stNo)
{
// TODO: Add your implementation code here
int j,k;
int ErrNum=errorrecord.ErrorNum;
int ErrOldNum=erroroldrecord.ErrorCun;
for (j=0;j<ErrNum;j++)
{
if (errorrecord.ErrorRec[j].errorflag==2)
{
/*****************解除分站故障*************************/
if (errorrecord.ErrorRec[j].addr_sensor==stNo)
{
SYSTEMTIME end_time;
GetLocalTime(&end_time); // address of system time structure
DATE dt2=dateCal(end_time.wYear,end_time.wMonth,end_time.wDay,end_time.wHour,end_time.wMinute,end_time.wSecond);
DATE dt1=errorrecord.ErrorRec[j].start_time;
if(dt1!=dt2){
ErrOldNum=ErrOldNum+1;
erroroldrecord.ErrorCun=ErrOldNum;
erroroldrecord.ErroroldRec[ErrOldNum-1].errorflag=2;
erroroldrecord.ErroroldRec[ErrOldNum-1].start_time=errorrecord.ErrorRec[j].start_time;
erroroldrecord.ErroroldRec[ErrOldNum-1].error_type=errorrecord.ErrorRec[j].error_type;
erroroldrecord.ErroroldRec[ErrOldNum-1].addr_sensor=stNo;
erroroldrecord.ErroroldRec[ErrOldNum-1].val=errorrecord.ErrorRec[j].val;
_mbscpy(erroroldrecord.ErroroldRec[ErrOldNum-1].name,errorrecord.ErrorRec[j].name);
_mbscpy(erroroldrecord.ErroroldRec[ErrOldNum-1].describe,errorrecord.ErrorRec[j].describe);
erroroldrecord.ErroroldRec[ErrOldNum-1].end_time=dt2;
}
/*************从实时分站故障中移去******************/
if(j==ErrNum-1)
{
ErrNum=ErrNum-1;
errorrecord.ErrorNum=ErrNum;
}
else
{
for(k=j+1;k<ErrNum;k++)
{
errorrecord.ErrorRec[k-1]=errorrecord.ErrorRec[k];
}
ErrNum=ErrNum-1;
errorrecord.ErrorNum=ErrNum;
}
}
}
}
return S_OK;
}
int Server1::Get_st_state(int stNo)
{
return (stinfo.stinfo[stNo]);
}
STDMETHODIMP Server1::Get_station_state(int stNo, int *state)
{
// TODO: Add your implementation code here
*state=Get_st_state(stNo);
return S_OK;
}
int Server1::get_cd_num()
{
return (Timedata.DataNum);
}
STDMETHODIMP Server1::Get_Error_Num(int *Num)
{
// TODO: Add your implementation code here
int i,status,cd_num;
int Num1=alarmrecord.AlarmNum;
int Num2=alarmoldrecord.AlarmCun;
int stNo=0;
for(i=0;i<Num1;i++) // 分站休眠解除报警
{
int index=alarmrecord.AlarmRec[i].addr_sensor/50;
int sensor=alarmrecord.AlarmRec[i].addr_sensor%50;
stNo=File6.file6[sensor][index].addr;
// if(File6.file6[sensor][index].addr==stNo)
if((File4.flag[stNo]&0x80)!=0)
{
Num2+=1;
alarmoldrecord.AlarmCun=Num2;
alarmoldrecord.AlarmOldRec[Num2-1].addr_sensor=alarmrecord.AlarmRec[i].addr_sensor;
alarmoldrecord.AlarmOldRec[Num2-1].start_time=alarmrecord.AlarmRec[i].start_time;
SYSTEMTIME end_time;
GetLocalTime(&end_time); // address of system time structure
alarmoldrecord.AlarmOldRec[Num2-1].end_time=dateCal(end_time.wYear,end_time.wMonth,end_time.wDay,end_time.wHour,end_time.wMinute,end_time.wSecond);
alarmoldrecord.AlarmOldRec[Num2-1].avgv=alarmrecord.AlarmRec[i].avgv;
alarmoldrecord.AlarmOldRec[Num2-1].maxv=alarmrecord.AlarmRec[i].maxv;
alarmoldrecord.AlarmOldRec[Num2-1].minv=alarmrecord.AlarmRec[i].minv;
if(i==Num1-1)
{
Num1-=1;
alarmrecord.AlarmNum=Num1;
}
else
{
for(int j=i+1;j<Num1;j++)//修改
{
alarmrecord.AlarmRec[j-1]=alarmrecord.AlarmRec[j];
}
Num1-=1;
alarmrecord.AlarmNum=Num1;
}
break;
}
}
for(i=1;i<255;i++)
{
status=Get_st_state(i);
if(status==2)
fz_err_dj(i);
}
cd_num=get_cd_num();
for (i=0; i<cd_num; i++)
{
status=get_cd_state(i);
if(status==1) //模拟量
cd_err_dj(i);
}
*Num=errorrecord.ErrorNum;
return S_OK;
}
STDMETHODIMP Server1::Get_Error(int gz_No, int *Err_Flag,int *fz_cd_No)
{
// TODO: Add your implementation code here
*Err_Flag=errorrecord.ErrorRec[gz_No].errorflag;
*fz_cd_No=errorrecord.ErrorRec[gz_No].fz_cd_num;
return S_OK;
}
int Server1::get_cd_state(int cdNo)
{
int Bltx;
int Ret;
int fz,port; //分站号及端口号
Bltx = Get_Bltx(File6.file6[Timedata.NowdataRec[cdNo].addr_sensor % 50][Timedata.NowdataRec[cdNo].addr_sensor / 50].addr, File6.file6[Timedata.NowdataRec[cdNo].addr_sensor % 50][Timedata.NowdataRec[cdNo].addr_sensor / 50].port);
switch (File3.file3[Timedata.NowdataRec[cdNo].addr_sensor % 50].property)
{
case 1: //模拟量
if((Timedata.NowdataRec[cdNo].nowdata==-100) || (Timedata.NowdataRec[cdNo].nowdata==-200) || (Timedata.NowdataRec[cdNo].nowdata==-300))
Ret=1;
else
{
if((File2.file2[Bltx].flag & 0x06) !=0)
{
if((File2.file2[Bltx].flag & 0x06) ==6) //处理上下报警
{
if((Timedata.NowdataRec[cdNo].nowdata >=File2.file2[Bltx].up_alarm) ||
(Timedata.NowdataRec[cdNo].nowdata <=File2.file2[Bltx].down_alarm))
Ret=2;
else
{
Ret=0;
if((Timedata.NowdataRec[cdNo].nowdata <File2.file2[Bltx].up_remove_alarm) ||
(Timedata.NowdataRec[cdNo].nowdata >File2.file2[Bltx].down_remove_alarm) )
Ret=5;
}
}else{
if((File2.file2[Bltx].flag & 0x02) !=0) //上限报警
{
if(Timedata.NowdataRec[cdNo].nowdata >=File2.file2[Bltx].up_alarm)
Ret=2;
else{
Ret=0;
if(Timedata.NowdataRec[cdNo].nowdata <File2.file2[Bltx].up_remove_alarm)
Ret=5;
}
}else if((File2.file2[Bltx].flag & 0x04) !=0)//下限报警
{
if(Timedata.NowdataRec[cdNo].nowdata <=File2.file2[Bltx].down_alarm)
Ret=2;
else{
Ret=0;
if(Timedata.NowdataRec[cdNo].nowdata >File2.file2[Bltx].down_remove_alarm)
Ret=5;
}
}
}
}else if(scanflg) Ret=6;
}
break;
case 2:
break;
case 0x11:// 导出模拟量
int i;
int k;
for(i=0;i<devpoint.count;i++)
{
k=devpoint.dv[i].position*50+File2.file2[devpoint.dv[i].sensor].su_index;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -