📄 server3.cpp
字号:
if(!console0out.flag)
{
console0out.stno=stnum;
console0out.ordercode=state;
console0out.flag=1;
return S_OK;
}else{
return S_OK;
}
}
STDMETHODIMP Server3::get_nwd_ct(int *nct)
{
// TODO: Add your implementation code here
*nct=Timedata.DataNum;
return S_OK;
}
STDMETHODIMP Server3::getoneptinf(int addr_sensor, float *ndt, float *dt1, float *dt2, float *dt3, float *dt4, int *state, int *alm,int *rcdw,short *rb)
{
// TODO: Add your implementation code here
int n,sensor,stno,index;
*rb=0;
n=0;
while((n<Timedata.DataNum)&&(Timedata.NowdataRec[n].addr_sensor!=addr_sensor))
n++;
if(Timedata.NowdataRec[n].addr_sensor==addr_sensor)
{
*ndt=Timedata.NowdataRec[n].nowdata;
*dt1=Timedata.NowdataRec[n].data1;
*dt2=Timedata.NowdataRec[n].data2;
*dt3=Timedata.NowdataRec[n].data3;
*dt4=Timedata.NowdataRec[n].data4;
*rcdw=Timedata.NowdataRec[n].rcdw;
*alm=0;
sensor=addr_sensor % 50;
index=addr_sensor/50;
stno=File6.file6[sensor][index].addr;
*state=stinfo.stinfo[stno];
n=0;
while((n<alarmrecord.AlarmNum)&&(alarmrecord.AlarmRec[n].addr_sensor!=addr_sensor))
n++;
if((alarmrecord.AlarmRec[n].addr_sensor==addr_sensor)&&(n<alarmrecord.AlarmNum)) *alm=4;
for(n=0;n<errorrecord.ErrorNum;n++)
{
if(errorrecord.ErrorRec[n].errorflag==1)
{
if(errorrecord.ErrorRec[n].addr_sensor==addr_sensor)
{
*alm=errorrecord.ErrorRec[n].error_type;
break;
}
}
}
}else{
*rb=1;
return S_OK;
}
return S_OK;
}
STDMETHODIMP Server3::getalarmct(int *almct)
{
// TODO: Add your implementation code here
*almct=alarmrecord.AlarmNum;
return S_OK;
}
STDMETHODIMP Server3::getErrorct(int *abc)
{
// TODO: Add your implementation code here
*abc=errorrecord.ErrorNum;
return S_OK;
}
STDMETHODIMP Server3::get_stinfo(short *st)
{
// TODO: Add your implementation code here
for(int i=0;i<255;i++)
st[i]=File4.flag[i];
return S_OK;
}
STDMETHODIMP Server3::setcontrol(int stno,int ctr_ord)
{
// TODO: Add your implementation code here
if(!console1out.flag)
{
console1out.stno=stno;
console1out.length=2;
console1out.kc[0]=ctr_ord & 0x00ff;
console1out.kc[1]=(ctr_ord & 0xff00)>>8;
console1out.flag=1;
return S_OK;
}else{
return S_OK;
}
}
STDMETHODIMP Server3::getonektp(int addr_sensor,short *ctm,long *kt0,long *kt1,long *kt2,long *kt3,short *rb)
{
// TODO: Add your implementation code here
int i;
*rb=0;
for(i=0;i<ktp.numb;i++)
{
if(addr_sensor==ktp.kaijutu[i].addr_sensor)
{
*ctm=ktp.kaijutu[i].timenow;
*kt0=ktp.kaijutu[i].kjt[0];
*kt1=ktp.kaijutu[i].kjt[1];
*kt2=ktp.kaijutu[i].kjt[2];
*kt3=ktp.kaijutu[i].kjt[3];
return S_OK;
}
}
*rb=1;
return S_OK;
}
STDMETHODIMP Server3::loadsysfile()
{
// TODO: Add your implementation code here
int i;
Server1::Read_File();
for(i=0;i<rtinfo.count;i++)
File4.flag[rtinfo.st[i].stno]=4;
fz_ini_req=1;
scanflg=true;
Server2::setEventRecord(5,0,0);
if(otherpcname[0]!=0) Server2::remote_read_File();
return S_OK;
}
STDMETHODIMP Server3::getflag(int *stno)
{
// TODO: Add your implementation code here
*stno=stations[0].stno;
return S_OK;
}
STDMETHODIMP Server3::getonealarm(int no, int *addr_sensor, DATE *starttime, float *maxv, float *minv, float *avgv,short *rb)
{
// TODO: Add your implementation code here
*rb=0;
if(no>=alarmrecord.AlarmNum)
{
*rb=1;
return S_OK;
}
*addr_sensor=alarmrecord.AlarmRec[no].addr_sensor;
*starttime=alarmrecord.AlarmRec[no].start_time;
*maxv=alarmrecord.AlarmRec[no].maxv;
*minv=alarmrecord.AlarmRec[no].minv;
*avgv=alarmrecord.AlarmRec[no].avgv;
return S_OK;
}
STDMETHODIMP Server3::getoneError(int no, int *addr_sensor, DATE *starttime, short *errflag, short *errtyp,short *rb)
{
// TODO: Add your implementation code here
*rb=0;
if(no>=errorrecord.ErrorNum)
{
*rb=1;
return S_OK;
}
*addr_sensor=errorrecord.ErrorRec[no].addr_sensor;
*starttime=errorrecord.ErrorRec[no].start_time;
*errflag=errorrecord.ErrorRec[no].errorflag;
*errtyp=errorrecord.ErrorRec[no].error_type;
return S_OK;
}
STDMETHODIMP Server3::getststate(short stno, short *state,short *kzstate)
{
// TODO: Add your implementation code here
*state=stinfo.stinfo[stno];
*kzstate=kckz[stno];
return S_OK;
}
/*STDMETHODIMP Server3::getcurrent(short *currentno, short *state, float *percent)
{
// TODO: Add your implementation code here
short n;
n=stinfo.currentstno;
*currentno=n;
*state=stinfo.stinfo[n];
// if (n==11)
// n=n;
//*percent=(float)(stinfo.overtimecount+stinfo.xorerrcount)/stinfo.normalcount;
*percent=(float)stinfo.overtimecount/(stinfo.overtimecount+stinfo.xorerrcount+stinfo.normalcount);
return S_OK;
}*/
STDMETHODIMP Server3::set_stinfo(short *st)
{
// TODO: Add your implementation code here
short i;
for(i=0;i<255;i++)
File4.flag[i]=st[i];
return S_OK;
}
STDMETHODIMP Server3::getstinfo(short *currentno, float *percent, int *ct,unsigned char *state, unsigned char *info)
{
// TODO: Add your implementation code here
short n;
int St_num;
n=stinfo.currentstno;
*currentno=n;
*percent=(float)stinfo.overtimecount/(stinfo.overtimecount+stinfo.xorerrcount+stinfo.normalcount);
for(n=0;n<255;n++)
state[n]=stinfo.stinfo[n];
St_num=stinfo.infoCt;///////
if (St_num > 255) St_num=255;//////
for(n=0;n<St_num;n++)/////// for(n=0;n<stinfo.infoCt;n++)
info[n]=stinfo.info[n];
stinfo.info[0]=0;
*ct=St_num;//stinfo.infoCt;
return S_OK;
}
/////////////////////////////////////////////////////////////////////////////
// Cpersonproc
STDMETHODIMP Cpersonproc::InterfaceSupportsErrorInfo(REFIID riid)
{
static const IID* arr[] =
{
&IID_Ipersonproc
};
for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if (InlineIsEqualGUID(*arr[i],riid))
return S_OK;
}
return S_FALSE;
}
STDMETHODIMP Cpersonproc::ifrjst(int n,int *rb)
{
// TODO: Add your implementation code here
// int i;
SYSTEMTIME pdt;
*rb=0;
GetLocalTime(&pdt);
if((!trac_flg)) //tmok&&
{
testxutj();
rj_ct=0;
upct=0;
almct=0;
rjalarmct=0;
fieldlistct=0;
tmok=0;
lastime[0]=pdt.wHour;
lastime[1]=pdt.wMinute;
lastime[2]=pdt.wSecond;
}
//if(setm_flg) writedtm();
if(chkct>0) processchkup();
if(Translate[n].flag)
{
if((File4.flag[Translate[n].stno]&4)!=0)
*rb=1;
}
return S_OK;
}
void Cpersonproc::Write_rj_MemData()
{
// TODO: Add your implementation code here
FILE *file;
char path[_MAX_PATH]="";
unsigned char tmp[_MAX_PATH]="";
char fn[_MAX_PATH];
_mbscpy(tmp,Curpath);
Server1::unsigned_To_signed(tmp,path);
strcpy(fn,path);
strcat(fn,"\\MemData.rdt");
if ((file=fopen(fn,"wb+"))==NULL)
{
return ;
}
fwrite(&staTrouble,sizeof(staTrouble),1,file); //保存分站状态@05-4-17
for(int i=0;i<4096;i++)
{
fwrite(&perstmb[i],sizeof(perstmb[0]),1,file);
}
fclose(file);
}
short Cpersonproc::stno_of_addrno(short addrno)
{
short ret=0,j,m;
for(short i=0;i<adlst.count;i++)
{
if(adlst.addr[i].addrno==addrno)
{
for(j=0;j<8;j++)
{
for(m=0;m<rtinfo.count;m++)
{
if(adlst.addr[i].ent[j]==rtinfo.st[m].reno)
ret=rtinfo.st[m].stno;
}
}
}
}
return ret;
}
STDMETHODIMP Cpersonproc::processrj(int n)
{
// TODO: Add your implementation code here
int info[500];
short stno,i,j,ref,alm,bl;
short p,q;
short rfid,dirc,rno,addrno;
short prevAddrNo;
DATE dtmp,currentdt;
short styp;
bool up_flg;
SYSTEMTIME pdt;
short dtmoffset;
short prevstno,dat,qyno,fzno;
DATE prevlocaltm;
j=0;
stno=Translate[n].stno;//取站号
// 取当前时间
GetLocalTime(&pdt);
currentdt=dateCal(pdt.wYear,pdt.wMonth,pdt.wDay,pdt.wHour,pdt.wMinute,pdt.wSecond);
// 将分站信息导入info中
j=0;
if (Translate[n].bufsize>1){
#ifdef FiledAlarm
for(i=0;i<Translate[n].bufsize-3;i++) //贺改2005-3-7
#else
for(i=0;i<Translate[n].bufsize-2;i++)
#endif
{
info[j]=Translate[n].buf[i+1]*256+Translate[n].buf[i];
i++;
j++;
}
dtmoffset=Translate[n].buf[i+1]*256+Translate[n].buf[i];
}
Translate[n].flag=0;// 清分站信息标志
if(staTrouble && Translate[n].bufsize<=1) //写分站内容已读空状态05-4-17
staRecvNull[stno]=true; //05-4-17
if (Translate[n].bufsize==1)
goto setcontrolflg;
// 分解info信息
for(i=0;i<j;i++)
{
rfid=info[i]&0x3fff;//取单个射频码rfid
dat=dtmoffset-info[i+1];
if((rfid!=0)&&(rfid<4096)&&(dat>=0))
{
dirc=(info[i]&0xc000)>>14;//取方向
// dtmp=rstm[stno]+(double)info[i+1]/86400;//取时间
dtmp=currentdt-(double)(dat*0.0000115741);//取时间
if(dtmp>currentdt) dtmp=currentdt;
//根据分站、方向获取探头号、探头类型
bl=0;
if(getreno(stno,dirc,&rno,&styp,&ref,&alm))
{
if(styp==3 && (perstmb[rfid].lastreno==rno || perstmb[rfid].lastreno==0)) preprocessReno(rfid,dtmp,stno,&bl); //05-06-11 add
if(perstmb[rfid].lastreno!=rno)
{
//if(styp==3) preprocessReno(rfid,dtmp,stno,&bl); //05-06-11 del
//05-4-17 分站故障处理
/*if(JudgeTrouble(rfid,rno,dtmp,styp,addrno,alm)) //有分站故障
{
bl=1;
}*/
//05-4-17
if(bl==0)
{
// perstmb[rfid].lastreno=rno; 2004-8-18 lpf resume
// 处理下井时间
//if((ref!=0)&&(styp==3)&&(checklocal(rfid)==1)) 2004-8-12 lpf resume
if((ref!=0)&&(styp==3)&&(checklocal(rfid)==1)&&(dtmp>perstmb[rfid].localtm)) //2004-8-12 lpf add
{
perstmb[rfid].entrytm=dtmp;
perstmb[rfid].dw_rno=rno;
}
// 区域登记统计
// tjaddr(rfid,rno,styp,dtmp,currentdt,&addrno,&up_flg);2004-8-12 lpf resume
up_flg=false;//2004-8-12 lpf add start
DATE tmpdate=perstmb[rfid].entryAddrtm;
if(dtmp>perstmb[rfid].localtm)
{
prevstno=perstmb[rfid].lastreno;//全国加
prevlocaltm=perstmb[rfid].localtm;//全国加
perstmb[rfid].lastreno=rno; //2004-8-18 lpf change
prevAddrNo=0;//全国加
tjaddr(rfid,rno,styp,dtmp,currentdt,&prevAddrNo,&addrno,&up_flg);
#ifdef FiledAlarm
SetControl(stno,prevstno,prevAddrNo,addrno);//贺改
#endif
if(prevAddrNo!=addrno && addrno>0)//全国加
{
if(prevAddrNo>0)
{
for(p=0;p<adlst.count;p++)
{
if(prevAddrNo==adlst.addr[p].addrno)
{
if(adlst.addr[p].addtyp==0)
{
fieldtjb[fieldlistct].rfid=rfid;
fieldtjb[fieldlistct].addrno=prevAddrNo;
fieldtjb[fieldlistct].intime=tmpdate;//perstmb[rfid].entryAddrtm;
fieldtjb[fieldlistct].outtime=dtmp;
fieldlistct++;
}
break;
}
}
}
}
}
else
{
addrno=0;
for(p=0;p<adlst.count;p++)
{
for(q=0;q<8;q++)
{
if((adlst.addr[p].ent[q]==rno)&&(adlst.addr[p].ent[q]!=0))
{
addrno=adlst.addr[p].addrno;
}
}
}
} //2004-8-12 lpf add end
// 上下井统计
if(up_flg)
{
tjupdown(rfid);
if((Files.net_flag)&&(net_uptj_ct<400))
{
net_uptj[net_uptj_ct]=uptjb[upct-1];
net_uptj_ct++;
}
perstmb[rfid].entrytm=0;
// perstmb[rfid].lastreno=0;
}
if(styp!=4)
{
if(trace_rec(rfid,rno,dtmp,addrno))
{
if((Files.net_flag)&&(net_trc_ct<2000))
{
net_trace[net_trc_ct]=trclst[rj_ct-1];
net_trc_ct++;
}
if(alm!=0)
{
almtjb[almct]=trclst[rj_ct-1];
if((Files.net_flag)&&(net_alm_ct<1000))
{
net_alarm[net_alm_ct]=almtjb[almct];
net_alm_ct++;
}
almct++;
}//if(alm!=0)
}//if(trace_rec(rfid,rno,dtmp,addrno))
}//if(styp!=4)
}//if(bl==0)
}//if(perstmb[rfid].lastreno!=rno)
else
{
if(styp==3 && dtmp>perstmb[rfid].localtm) perstmb[rfid].localtm=dtmp;
}
}//if(getreno(stno,dirc,&rno,&styp,&ref,&alm))
}//if((rfid!=0)&&(rfid<4096)&&(dat>=0))
i++;
}//for(i=0;i<j;i++)
Write_rj_MemData();
goto rightflg;
setcontrolflg:
for(i=0;i<adlst.count;i++)//贺加
{
if(stno_of_addrno(adlst.addr[i].addrno)==stno)
{
qyno=adlst.addr[i].addrno;
SetControl(stno,prevstno,prevAddrNo,qyno);
}
}
rightflg:
if((!trac_flg)) //((rj_ct>50)||tmok)&& 贺改2005-3-7
{
testxutj();
rj_ct=0;
upct=0;
almct=0;
rjalarmct=0;
fieldlistct=0;
tmok=0;
lastime[0]=pdt.wHour;
lastime[1]=pdt.wMinute;
lastime[2]=pdt.wSecond;
}
return S_OK;
}
void Cpersonproc::preprocessReno(short rfid,DATE dt,short stno,short *bl)
{
int i;
DATE ddt;
*bl=0;
if(perstmb[rfid].lastreno==0)
{ //处理上到地面后,若还在上井探头晃动,当时间大于15分钟后再记录其轨迹
ddt=dt-perstmb[rfid].exittm;
if(ddt>0.0104167) //if(ddt>0.0014)
*bl=0;
else
*bl=1;
}
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -