⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server3.cpp

📁 DCOM 上位机和嵌入式系统通信
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	{  //
		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 + -