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

📄 lfp.cpp

📁 基于PC104平台
💻 CPP
📖 第 1 页 / 共 2 页
字号:
///////////////           LYX_addP.CPP		////////////////
#include "LFP.H"
/////////////////////////////////////////////////////////
extern void insertsoe( SOE1 *ptr );
extern void insertyxbw( yx_bw_tt *ptr );
extern INT16U port_yx[MAXYXNO/16];  //yx
void CLfp::initial(BYTE portno)
{
  int i,temp;
  iportno=portno;  //set current port no
  dataque.start=0;
  dataque.next=0;
  dataque.count=0;
  dataque.size=256;
  sendinfo.current_send_ptr=0;
  sendinfo.current_send_flag=FALSE;
  sendinfo.start_a_send=FALSE;
  sendinfo.send_ack=FALSE;
  sendinfo.send_nak=FALSE;
  send_protect_flag=FALSE;
  isatimer[iportno].querycount=0;
  isatimer[iportno].checktime=0;
  isatimer[iportno].querylimit=port_set[iportno].query_gap*3;
  isatimer[iportno].checklimit=port_set[iportno].chk_time_gap*100L;
  BH_YC_add=YC_add=YX_add=c20_add=sub_addr1=port_set[iportno].start_address;
  for(i=0;i<DEVICENUM;i++)  WatchDev[i]=0;       //ggg 1.14
  for(i=0;i<10; i++)   first_on_time[i]=0;
  yk_flag=FALSE;   //ggg 12.23
  c1_c20_switch=TRUE;
  frame_type=0;
}//initial()

unsigned int CLfp::lfpyxno(BYTE Attach_port,BYTE Device_Add,BYTE Inter_YXNO,BYTE ActType)
{
  unsigned int temp=0;
  BOOLEAN temp_flag=FALSE;
  while((temp<datasource.protect_yx)&&(temp_flag==FALSE))
  {
	if((protect_yx[temp][0]==(Attach_port+1))&&(protect_yx[temp][1]==Device_Add)
	  &&(protect_yx[temp][2]==Inter_YXNO) )//&&(protect_yx[temp][3]==ActType))
	  temp_flag=TRUE;
	else
	  temp++;
  }//while((temp<datasource.protect_yx)&&(temp_flag==FALSE))
  if((temp_flag==FALSE)&&(temp>=datasource.protect_yx))
	temp=0xffff;
  return(temp);
}//unsigned int CLfp::lfpyxnolfpyxno(BYTE Attach_port,BYTE Device_Add,BYTE Inter_YXNO,BYTE ActType)*/

unsigned int CLfp::lfpycno(BYTE Attach_port,BYTE Device_Add,BYTE Inter_YCNO)
{
  unsigned int temp=0;
  BOOLEAN temp_flag=FALSE;
  while((temp<datasource.protect_yc)&&(temp_flag==FALSE))
  {
	if((yc_define[temp][0]==(Attach_port + 1))&&(yc_define[temp][1]==Device_Add)
		&&(yc_define[temp][2]==Inter_YCNO))
	  temp_flag=TRUE;
	else
	  temp++;
  }//while((temp<datasource.protect_yx)&&(temp_flag==FALSE))
  if((temp_flag==FALSE)&&(temp>=datasource.protect_yc))
	temp=0xffff;
  return(temp);
}//unsigned int CLfp::lfpycno(BYTE Attach_port,BYTE Device_Add,BYTE Inter_YCNO)


void CLfp::send_ack()
{	unsigned int buffer[5];
	buffer[0]=c20_ack;
	buffer[1]=LFP_ACK;
	buffer[2]=0x01;
	buffer[3]=0;
	buffer[4]=4;
	LFP_send(buffer,5);
}//send_ack();

void CLfp::send_nak()
{	unsigned int buffer[5];
	buffer[0]=0;
	buffer[1]=LFP_NAK;
	buffer[2]=0x01;
	buffer[3]=0;
	buffer[4]=4;
	LFP_send(buffer,5);
}//send_ack();

void CLfp::send_C1_C20()
{
  unsigned int test,temp2;
  unsigned int temp,temp1;
	unsigned int buffer[5];
	WatchDev[c20_add]++;
		if(WatchDev[c20_add]>500) WatchDev[c20_add]=100;
		if(WatchDev[c20_add]>3){
		   temp=lfpyxno(iportno,c20_add,140,1);
			if (temp!=0xffff) {
			   temp1=temp2=temp;
			   test=0x01;
			   temp1/=16;
			   temp2-=temp1*16;
			   test<<=temp2;
			   prot_yx[temp1]|=test;  //save yx value
			   }
		   }

	buffer[0]=c20_add;
	buffer[1]=LFP_C20;
	buffer[3]=0;
	buffer[2]=1;
	buffer[4]=4;
	c20_ack=c20_add;
	c20_add++;
	if(c20_add>(port_set[iportno].start_address+port_set[iportno].mon_num-1))
	c20_add=port_set[iportno].start_address;
	LFP_send(buffer,5);
}//send_C20();*/

void CLfp::send_C8()//adjust lfp clock
{
  int temp_year;
  unsigned int temp;
  unsigned int buffer[13];
  struct date d;
  struct time t;
  getdate(&d);
  gettime(&t);
    temp=(unsigned int)(t.ti_hund);
  temp=temp*10+random(10);
  temp_year=d.da_year;
  if(temp_year>=2000)
	temp_year-=2000;
  else
	temp_year-=1900;
  buffer[0] =0xff;
  buffer[1] =LFP_C8;
  buffer[2] =1;
  buffer[3]=0;
  buffer[4] =12;
  buffer[5] =((BYTE)temp_year)&0xff;
  buffer[6] =((BYTE)d.da_mon)&0xff;
  buffer[7] =((BYTE)d.da_day)&0xff;
  buffer[8] =((BYTE)t.ti_hour)&0xff;
  buffer[9] =((BYTE)t.ti_min)&0xff;
  buffer[10]=((BYTE)t.ti_sec)&0xff;
  buffer[11]=temp&0xff;
  buffer[12]=(temp>>8)&0xff;
  LFP_send(buffer,13);
}//send_C8();

void CLfp::send_bh_yc()
{
  unsigned int buffer[5];

	buffer[0]=BH_YC_add;
	buffer[1]=LFP_BH_YC;
	buffer[2]=1;
	buffer[3]=0;	///\buffer[3]=1;
	buffer[4]=4;
	LFP_send(buffer,5);
	BH_YC_add++;
	if(BH_YC_add>(port_set[iportno].start_address+port_set[iportno].mon_num-1))
	 BH_YC_add=port_set[iportno].start_address;
}//send_bh_yc();

void CLfp::send_C15()
{
  unsigned int buffer[5];

	buffer[0]=YC_add;
	buffer[1]=LFP_C15;
	buffer[2]=1;
	buffer[3]=0;	///\buffer[3]=1;
	buffer[4]=4;
	LFP_send(buffer,5);
	YC_add++;
	if(YC_add>(port_set[iportno].start_address+port_set[iportno].mon_num-1))
	 YC_add=port_set[iportno].start_address;
}//send_C15();

void CLfp::send_C19()
{
	unsigned int buffer[5];
	buffer[0]=YX_add;
	buffer[1]=LFP_C19;
	buffer[2]=1;
	buffer[3]=0;
	buffer[4]=4;
	LFP_send(buffer,5);
	YX_add++;
	if(YX_add>(port_set[iportno].start_address+port_set[iportno].mon_num-1))
	{
	  YX_add=port_set[iportno].start_address;
	  if (first_on_time[iportno]<3) first_on_time[iportno]++;
	}
}//send_C19()

void CLfp::send_ykpre()
{
	unsigned int buffer[11];
	buffer[0]=comyk_tbl[comyk_info.yk_order][1];
	buffer[1]=0x52;
	buffer[2]=1;
	buffer[3]=0;
	buffer[4]=10;
	buffer[5]=comyk_tbl[comyk_info.yk_order][2];
	buffer[7]=(~comyk_tbl[comyk_info.yk_order][2])&0x00ff;
	buffer[9]=comyk_tbl[comyk_info.yk_order][2];
	buffer[6]=comyk_info.yk_cmd;
	buffer[8]=(~comyk_info.yk_cmd)&0x00ff;
	buffer[10]=comyk_info.yk_cmd;
	comyk_info.Y_PRESET=FALSE;
	LFP_send(buffer,11);
}
void CLfp::send_ykexec()
{

	unsigned int buffer[11];
	yk_flag=FALSE;
	buffer[0]=comyk_tbl[comyk_info.yk_order][1];
	buffer[1]=0x53;
	buffer[2]=1;
	buffer[3]=0;
	buffer[4]=10;
	buffer[5]=comyk_tbl[comyk_info.yk_order][2];
	buffer[7]=(~comyk_tbl[comyk_info.yk_order][2])&0x00ff;
	buffer[9]=comyk_tbl[comyk_info.yk_order][2];
	buffer[6]=comyk_info.yk_cmd;
	buffer[8]=(~comyk_info.yk_cmd)&0x00ff;
	buffer[10]=comyk_info.yk_cmd;
	comyk_info.Y_EXEC=FALSE;
	LFP_send(buffer,11);

}//send_C19()
void CLfp::send_ykesc()
{
	unsigned int buffer[11];
	yk_flag=FALSE;
	buffer[1]=0x57;
	buffer[2]=1;
	buffer[3]=0;
	buffer[4]=10;
	buffer[5]=comyk_tbl[comyk_info.yk_order][2];
	buffer[7]=(~comyk_tbl[comyk_info.yk_order][2])&0x00ff;
	buffer[9]=comyk_tbl[comyk_info.yk_order][2];
	buffer[0]=comyk_tbl[comyk_info.yk_order][1];
	buffer[6]=comyk_info.yk_cmd;
	buffer[8]=(~comyk_info.yk_cmd)&0x00ff;
	buffer[10]=comyk_info.yk_cmd;
	comyk_info.Y_ESC=FALSE;
	LFP_send(buffer,11);
}//send_C19()

void CLfp::LFP_send(BYTE *pointer,int len)
{ 	int i;
	BYTE result;
	askbuf[0]=0xeb;
	askbuf[1]=0x90;
	askbuf[2]=0xeb;
	askbuf[3]=0x90;
	askbuf[4]=0x02;
	for(i=0;i<len;i++)
	  askbuf[i+5]=*(pointer+i);
	result=check(pointer,len);
	askbuf[5+len]=result&0xff;
	askbuf[6+len]=(result>>8)&0xff;
	askbuf[7+len]=0x03;
	sendinfo.current_num_nosend=8+len;
}//FLP_send();
/********************  process  send   information end  ******************/
/********************process receive information begin  ******************/
void CLfp::process_R1()
{
  sendinfo.send_ack=TRUE;
}//process_R1*/

void CLfp::process_R2(BYTE *pointer)
{
	for( int i = 0; i < (*(pointer+4)+1); i++ )
	{
	  protectbuf[0].tbuf[protectbuf[0].tnext]=(*(pointer+i))&0xff;
	  protectbuf[0].tnext++;
	  if(protectbuf[0].tnext>=protectbuf[0].tsize)   
	    protectbuf[0].tnext=0;
	  protectbuf[0].tcount++;
	  if(protectbuf[0].tcount>protectbuf[0].tsize)
	  {
	    protectbuf[0].tcount=protectbuf[0].tsize;
	    protectbuf[0].tstart++;
	    if(protectbuf[0].tstart>=protectbuf[0].tsize)
	      protectbuf[0].tstart=0;
	  }
	}
}

void CLfp::process_R8()
{
  sendinfo.send_ack=TRUE;
}//process_R1*/

void CLfp::process_R15(BYTE *pointer)
{
  unsigned int test,temp2;
  unsigned int temp,len,temp1;
  phaddre=*(pointer+1);

  if((yc_define[0][0]!=4096)||(yc_define[1][0]!=4096))
  {
	  len = *(pointer+5)-4;
	  for(int i=0;i<len/2;i++)
	  {
	temp=lfpycno(iportno,phaddre,i);
	if(temp!=0xffff)
	{
		 temp1=*(pointer+2*i+7);
		 temp1<<=8;
		 temp1+=*(pointer+2*i+6);
//		 if((temp1&0x800)!=0)
//		 temp1=temp1;
		 temp1=temp1&0xfff;
		 if(yc_define[temp][3]==0) return;
		 if(yc_define[temp][3]==1) lfp_yc[temp]=temp1; //wwa 2002.1.3
		 else if(yc_define[temp][3]==3) lfp_yc[temp]=(45+(float)temp1/204.7)*40;  //ggg 2002.1.3  FOR HZ
		 else  {if((temp1&0x800)==0) lfp_yc[temp]=(float)temp1/20.47;
				else {lfp_yc[temp]=((float)((~temp1)&0x7ff))/20.47;
					  lfp_yc[temp]=(~lfp_yc[temp])&0xfff;
					  }   }
		/* else {lfp_yc[temp]=(float)(temp1&0x7ff)/((float)yc_define[temp][3]/100);  //ggg 2002.1.3
			   x1=lfp_yc[temp];
			   lfp_yc[temp]=lfp_yc[temp]|(temp1&0x800);
			  x2=lfp_yc[temp];
			  if(temp==81)
			  x3=x2;
			  }*/
		 //lfp_yc[temp]=temp1;  //gggtest &0xfff;
	 }
	   }
   }
}

void CLfp::process_BH_YC(BYTE *pointer)
{
  unsigned int test,temp2;
  unsigned int temp,len,temp1;
  phaddre=*(pointer+1);

  if((yc_define[0][0]!=4096)||(yc_define[1][0]!=4096))
  {
	  len=(*(pointer+5))-4;
	  for(int i=0;i<len/2;i++)
	  {
	temp=lfpycno(iportno,phaddre,(i+8));
	if(temp!=0xffff)
	{
		 temp1=*(pointer+2*i+7);
		 temp1<<=8;
		 temp1+=*(pointer+2*i+6);
//		 if((temp1&0x800)!=0)
//		 temp1=temp1;
		 temp1=temp1&0xffff;
		 lfp_yc[temp]=temp1; //ggg 2002.1.3
         if(lfp_yc[temp]>2047) lfp_yc[temp]/=10;

		


	 }
	   }
   }
}

void CLfp::process_R17(BYTE *pointer)
{
	 if((*(pointer+6)==((~(*(pointer+8)))&0x00ff))
	   &&(*(pointer+6)==*(pointer+10)
	   &&(*(pointer+6)==comyk_tbl[comyk_info.yk_order][2]))
	   &&(*(pointer+7)==((~(*(pointer+9)))&0x00ff))
	   &&(*(pointer+7)==*(pointer+11))
	   &&(*(pointer+7)==comyk_info.yk_cmd))
	   comyk_info.Y_CHECK=TRUE;
}    // yk check

void CLfp::process_R19(BYTE *pointer)
{
  unsigned int test1;
  unsigned int test4,test3;
  unsigned int temp,tempt;
  unsigned int tempd[5];
  unsigned int temp1,temp2,temp3,temp4;
  struct time_tt soe_time;
  phaddre=*(pointer+1);
  if(datasource.protect_yx==0)
	return;
  for(int i=0;i<4;i++)
  {
	tempt=(*(pointer+7+i*2))&0xff;
	tempt<<=8;
	tempt+=(*(pointer+6+2*i))&0xff;
	tempd[i]=tempt;
  }
  if((protect_yx[0][0]!=4096)||(protect_yx[1][0]!=4096))
  {
	for(int i=0;i<39;i++)
	{
	temp=lfpyxno(iportno,phaddre,i,1);
	if(temp!=0xffff)
	{
	  temp1=temp2=temp;//17*(add-1)+temp;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -