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

📄 server3.cpp

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