📄 server3.cpp
字号:
{ //
if ((dt-perstmb[rfid].localtm)<3600*0.0000115741)//在同一处的时间大于1小时时@05-4-17
*bl=1;
else
if(perstmb[rfid].exittm>0) perstmb[rfid].lastreno=0;
}
/*
if(perstmb[rfid].lastreno==0)
{ //处理上到地面后,若还在上井探头晃动,当时间大于2分钟后再记录其轨迹
ddt=dt-perstmb[rfid].exittm;
if(ddt>0.0014)
*bl=0;
else
*bl=1;
}else{ //
*bl=0;
for(i=0;i<rtinfo.count;i++)
{ //已经在上井探头但是现在又来另一个上井头就不记录了
if(rtinfo.st[i].reno==perstmb[rfid].lastreno)
{
if(rtinfo.st[i].stype==3)
{
if(rtinfo.st[i].stno==stno && (dt-perstmb[rfid].localtm)<3600*0.0000115741)//在同一处的时间大于1小时时@05-4-17
{
*bl=1;
break;
}
}
}
}
}*/
}
void Cpersonproc::processchkup()
{
int i,no;
for(i=0;i<adlst.count;i++)
{
if(adlst.addr[i].addtyp==1)
{
no=adlst.addr[i].addrno;
break;
}
}
for(i=0;i<chkct;i++)
{
perstmb[chkup[i]].exittm=perstmb[chkup[i]].localtm;
perstmb[chkup[i]].tag|=2;
perstmb[chkup[i]].up_rno=perstmb[chkup[i]].lastreno;
tjupdown(chkup[i]);
perstmb[chkup[i]].entrytm=0;
perstmb[chkup[i]].addrno=no;
perstmb[chkup[i]].lastreno=0x8000;
}
chkct=0;
}
void Cpersonproc::testxutj()
{
int i;
// bool bl=0;
//int pct=0;
for(i=0;i<rj_ct;i++)
trctjb[i]=trclst[i];
for(i=0;i<upct;i++)
uptj[i]=uptjb[i];
for(i=0;i<almct;i++)
almtj[i]=almtjb[i];
for(i=0;i<rjalarmct;i++)
rjalarmtj[i]=rjalarmtjb[i];
for(i=0;i<fieldlistct;i++)
fieldtj[i]=fieldtjb[i];
traceNum=rj_ct;
up_ct=upct;
alm_ct=almct;
rjalarm_ct=rjalarmct;
fieldlist_ct=fieldlistct;
trac_flg=1;
}
bool Cpersonproc::getreno(int no,short dirc,short *rno,short *styp,short *ref,short *alm)
{
int i;
for(i=0;i<rtinfo.count;i++)
{
if((rtinfo.st[i].stno==no)&&(rtinfo.st[i].dirc==dirc))
{
*rno=rtinfo.st[i].reno;
*styp=rtinfo.st[i].stype;
*ref=rtinfo.st[i].reflg;
*alm=rtinfo.st[i].alarm;
rtinfo.st[i].state++;
return 1;
}
}
return 0;
}
bool Cpersonproc::trace_rec(short rid,short rno,double dt,short addr)
{
if(getnwd(rj_ct,rid))
{
trclst[rj_ct].reno=rno;
trclst[rj_ct].personID=rid;
trclst[rj_ct].dt=dt;
trclst[rj_ct].addrno=addr;
rj_ct++;
return 1;
}
return 0;
}
bool Cpersonproc::getnwd(int no,short rid)
{
int i=0;
int j;
while((i<prst.count)&&(rid!=prst.pl[i].rfid)&&(rid!=prst.pl[i].rfidbak))
i++;
if(i<prst.count)
{
for(j=0;j<16;j++)
trclst[no].name[j]=prst.pl[i].name[j];
trclst[no].name[15]=0;
for(j=0;j<16;j++)
trclst[no].depart[j]=prst.pl[i].depart[j];
trclst[no].depart[15]=0;
trclst[no].workno=prst.pl[i].workno;
return 1;
}
return 0;
}
short Cpersonproc::checklocal(short rid)
{
int i;
for(i=0;i<adlst.count;i++)
{
if(perstmb[rid].addrno==adlst.addr[i].addrno)
return adlst.addr[i].addtyp;
}
return 1;
}
void Cpersonproc::tjupdown(short rid)
{
int i,j;
i=0;
while((i<prst.count)&&(rid!=prst.pl[i].rfid)&&(rid!=prst.pl[i].rfidbak))
i++;
if(i<prst.count)
{
for(j=0;j<16;j++)
uptjb[upct].name[j]=prst.pl[i].name[j];
uptjb[upct].name[15]=0;
for(j=0;j<16;j++)
uptjb[upct].depart[j]=prst.pl[i].depart[j];
uptjb[upct].depart[15]=0;
uptjb[upct].personID=rid;
uptjb[upct].workno=prst.pl[i].workno;
uptjb[upct].updtm=perstmb[rid].exittm;
uptjb[upct].downdtm=perstmb[rid].entrytm;
uptjb[upct].dw_rno=perstmb[rid].dw_rno;
uptjb[upct].up_rno=perstmb[rid].up_rno;
uptjb[upct].tag=perstmb[rid].tag;
upct++;
}
}
void Cpersonproc::tjaddr(short rid,short rno,short styp,double dt,double curdt,short *prevAddrNo,short *addrno,bool *upflg)
{
int i,j;
//扫描区域表
*upflg=0;
*addrno=0;
for(i=0;i<adlst.count;i++)
{
//扫描表项的四个进入方向标志
for(j=0;j<8;j++)
{
if((adlst.addr[i].ent[j]==rno)&&(adlst.addr[i].ent[j]!=0))
{
//进入区域
// if(perstmb[rid].addrno!=adlst.addr[i].addrno)
// {
//不是连续进入
if(styp==2)
{
if(checklocal(rid)==1)
{
if(perstmb[rid].entrytm!=0)
{
double dtm=dt-perstmb[rid].entrytm; //设置6小时门限
if(dtm>0.25) perstmb[rid].entrytm=dt;
}else perstmb[rid].entrytm=dt;
perstmb[rid].dw_rno=rno;
perstmb[rid].exittm=0;
perstmb[rid].tag=0;
}//else return;
}else if(styp==3)
{
if(checklocal(rid)==0)
{
//perstmb[rid].entrytm=0;
perstmb[rid].up_rno=rno;
if(dt>=perstmb[rid].entrytm)
perstmb[rid].exittm=dt;
else{
perstmb[rid].exittm=curdt;
perstmb[rid].tag&=2;
}
*upflg=1;
}//else return;
}else if(perstmb[rid].entrytm==0)
{
perstmb[rid].entrytm=dt;
perstmb[rid].exittm=0;
perstmb[rid].dw_rno=rno;
perstmb[rid].tag=1;
}
*prevAddrNo=perstmb[rid].addrno;
if(perstmb[rid].addrno!=adlst.addr[i].addrno)
perstmb[rid].entryAddrtm=dt;
perstmb[rid].addrno=adlst.addr[i].addrno;
perstmb[rid].localtm=dt;
perstmb[rid].lastreno=rno;// | 0x8000;
*addrno=perstmb[rid].addrno;
return;
// }
}
}
}
return ;
}
DATE Cpersonproc::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;
}
int Cpersonproc::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;
}
/////////////////////////////////////////////////////////////////////////////
// Crjinteface
DATE Crjinteface::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;
}
int Crjinteface::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;
}
STDMETHODIMP Server3::reloadOPC()
{
// TODO: Add your implementation code here
HANDLE hd;
DWORD err;
long ct;
bool bl;
hd=OpenSemaphore(SEMAPHORE_ALL_ACCESS,0,"REINIT");
if(hd!=NULL)
bl=ReleaseSemaphore(hd,1,&ct);
if(!bl)
err=GetLastError();
return S_OK;
}
bool Server3::initmnl(int n, int sensor, long vl)
{
int pinlul,pinluh;
pinlul = File5.file5[File2.file2[sensor].pl_index].pinlul;
pinluh = File5.file5[File2.file2[sensor].pl_index].pinluh;
if((File3.file3[(Timedata.NowdataRec[n].addr_sensor % 50)].cgqindex==11)&&(vl>=(pinluh+10)))
{
pinlul=Files.TSsensor.PLL;
pinluh=Files.TSsensor.PLH;
}
if (pinluh>0)
{
if (vl>pinluh+50)
{
Timedata.NowdataRec[n].nowdata=-300;
Timedata.NowdataRec[n].data1=-300;
Timedata.NowdataRec[n].data2=-300;
Timedata.NowdataRec[n].data3=0;
Timedata.NowdataRec[n].data4=0;
return false;
}else{
if(pinlul!=0)
{
if(vl==0)
{
Timedata.NowdataRec[n].nowdata=-100;
Timedata.NowdataRec[n].data1=-100;
Timedata.NowdataRec[n].data2=-100;
Timedata.NowdataRec[n].data3=0;
Timedata.NowdataRec[n].data4=0;
return false;
}else{
if(vl<pinlul-5)
{
Timedata.NowdataRec[n].nowdata=-200;
Timedata.NowdataRec[n].data1=-200;
Timedata.NowdataRec[n].data2=-200;
Timedata.NowdataRec[n].data3=0;
Timedata.NowdataRec[n].data4=0;
return false;
}
}
}
}
}
return true;
}
void Server3::setmnl(int n, int sensor, long vl)
{
int pinlul;
pinlul = File5.file5[File2.file2[sensor].pl_index].pinlul;
if(Timedata.NowdataRec[n].nowdata<=-100)
{
if((File3.file3[(Timedata.NowdataRec[n].addr_sensor % 50)].cgqindex==11)&&(vl>=Files.TSsensor.PLL))
{
Timedata.NowdataRec[n].nowdata = (vl - Files.TSsensor.PLL) * Files.TSsensor.BLXS + Files.TSsensor.PC;
}else
Timedata.NowdataRec[n].nowdata = (vl - pinlul) * File2.file2[sensor].scale_data + File2.file2[sensor].x_scale;
Timedata.NowdataRec[n].data1=Timedata.NowdataRec[n].nowdata;
Timedata.NowdataRec[n].data2=Timedata.NowdataRec[n].nowdata;
Timedata.NowdataRec[n].data3=Timedata.NowdataRec[n].nowdata;
Timedata.NowdataRec[n].data4=1;
}else{
if((File3.file3[(Timedata.NowdataRec[n].addr_sensor % 50)].cgqindex==11)&&(vl>=Files.TSsensor.PLL))
{
Timedata.NowdataRec[n].nowdata = (vl - Files.TSsensor.PLL) * Files.TSsensor.BLXS + Files.TSsensor.PC;
}else
Timedata.NowdataRec[n].nowdata = (vl - pinlul) * File2.file2[sensor].scale_data + File2.file2[sensor].x_scale;
if(Timedata.NowdataRec[n].data1<Timedata.NowdataRec[n].nowdata)
Timedata.NowdataRec[n].data1=Timedata.NowdataRec[n].nowdata;
if((Timedata.NowdataRec[n].data2>Timedata.NowdataRec[n].nowdata)||(Timedata.NowdataRec[n].data2==0))
Timedata.NowdataRec[n].data2=Timedata.NowdataRec[n].nowdata;
Timedata.NowdataRec[n].data3+=Timedata.NowdataRec[n].nowdata;
Timedata.NowdataRec[n].data4++;
}
}
void Server3::setkgl(int n, long vl)
{
SYSTEMTIME pdt;
DATE curtime;
int tm;
float vltmp;
GetLocalTime(&pdt);
tm=pdt.wMinute*60+pdt.wSecond;
curtime=Server2::dateCal(pdt.wYear,pdt.wMonth,pdt.wDay,pdt.wHour,pdt.wMinute,pdt.wSecond);
if(Timedata.NowdataRec[n].nowdata==-1)
{
Timedata.NowdataRec[n].nowdata=vl;
Timedata.NowdataRec[n].timeflag=tm;
}else{
vltmp=Timedata.NowdataRec[n].nowdata;
Timedata.NowdataRec[n].nowdata=vl;
if(vltmp!=vl)
{
if(vl!=0)
{
Timedata.NowdataRec[n].data3+=1;
Server3::setkgch(Timedata.NowdataRec[n].addr_sensor,curtime,curtime,0,1); //统计开关状态变化
}
else
{
Timedata.NowdataRec[n].data4+=1;
Server3::setkgch(Timedata.NowdataRec[n].addr_sensor,curtime,curtime,0,0); //统计开关状态变化
}
}
if(vltmp!=0)
{
if(tm > Timedata.NowdataRec[n].timeflag)
Timedata.NowdataRec[n].data1 = Timedata.NowdataRec[n].data1 + tm - Timedata.NowdataRec[n].timeflag;
Timedata.NowdataRec[n].timeflag = tm;
}else{
if (tm > Timedata.NowdataRec[n].timeflag)
Timedata.NowdataRec[n].data2 = Timedata.NowdataRec[n].data2 + tm - Timedata.NowdataRec[n].timeflag;
Timedata.NowdataRec[n].timeflag = tm;
}
}
}
STDMETHODIMP Server3::killClient()
{
// TODO: Add your implementation code here
long ct;
bool bl;
DWORD err;
bl=ReleaseSemaphore(termhd,10,&ct);
if(!bl)
err=GetLastError();
return S_OK;
}
STDMETHODIMP Server3::gethost(short *rb)
{
// TODO: Add your implementation code here
if(comsertype)
*rb=1;
else
*rb=0;
return S_OK;
}
STDMETHODIMP Server3::ifrjst(int n, int *rb)
{
// TODO: Add your implementation code here
// int i;
*rb=0;
if(Translate[n].flag)
{
if((File4.flag[Translate[n].stno]&4)!=0)
*rb=1;
}
return S_OK;
}
STDMETHODIMP Server3::getErrct(int *ct)
{
// TODO: Add your implementation code here
*ct=errorrecord.ErrorNum;
return S_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -