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

📄 nbbclass.cpp

📁 基于PC104平台
💻 CPP
📖 第 1 页 / 共 4 页
字号:
void CNbb::dropdata()
{
  if(dataque.count>0)
  {
    dataque.start++;
    if(dataque.start>=dataque.size)dataque.start=0;
    dataque.count--;
  }//if(dataque.count>0)
}//void CNbb::dropdata()
unsigned int CNbb::mod(unsigned int par1,unsigned int par2)
{
 if(par1>=par2)return(0);
 else return(par1);
}//unsigned int CNbb::mod(unsigned int par1,unsigned int par2)
void CNbb::getportcmd()
{
  int i;
  BYTE temp_buf[256];
  unsigned int temp;
  if(displaymode==FALSE)while(get_in(nportno))putdata(getchin[nportno]);
  else while(get_in(nportno)){ putdata(getchin[nportno]&0xff); disprbuf(getchin[nportno]&0xff,nportno);}
//  if(dataque.count>70)
//  temp = 0;
  while((dataque.count>=1)&&(dataque.buf[dataque.start]!=0xeb))dropdata();   //campare head character
  if(dataque.count<20)return;
  else if((dataque.buf[dataque.start]==0xeb)&&(dataque.buf[mod(dataque.start+1,dataque.size)]==0x90)
  &&((dataque.buf[mod(dataque.start+2,dataque.size)]==0x71)||(dataque.buf[mod(dataque.start+2,dataque.size)]==0x70))
  &&((dataque.buf[mod(dataque.start+3,dataque.size)]==0x61)||(dataque.buf[mod(dataque.start+3,dataque.size)]==0xc2)||(dataque.buf[mod(dataque.start+3,dataque.size)]==0xb3)
  ||(dataque.buf[mod(dataque.start+3,dataque.size)]==0x7a)||(dataque.buf[mod(dataque.start+3,dataque.size)]==0xf9)))
  {
    if(dataque.count<(dataque.buf[mod(dataque.start+4,dataque.size)]*6+8))return;
    else
    {
      for(i=0;i<6;i++){ temp_buf[i]=dataque.buf[mod(dataque.start+i+2,dataque.size)];}
      if(get_crc_code(temp_buf)!=(temp_buf[5]&0xff)){ dropdata(); return;  }
      else
      {
	if(displaymode==FALSE)for(i=0;i<3;i++){disprbuf(0xeb,nportno);disprbuf(0x90,nportno);}
	dropdata();dropdata();
	temp=dataque.buf[mod(dataque.start+2,dataque.size)]*6+6;
	for(i=0;i<temp;i++){temp_buf[i]=dataque.buf[dataque.start]; dropdata();if(displaymode==FALSE)disprbuf(temp_buf[i],nportno);}
	identify_packet(temp_buf);
      }//
    }//else
  }//else if((dataque.buf[dataque.start]==0x68)&&(dataque.buf[mod(dataque.start+3,dataque.size)]==0x68)
  else if(dataque.buf[dataque.start]==0xeb){dropdata(); return;}
}//void CNbb::getportcmd()
void CNbb::getACsample()
{
  int i;
  BYTE temp_buf[1024];
  unsigned int temp;
  if(displaymode==FALSE)while(get_in(nportno))putdata(getchin[nportno]);
  else while(get_in(nportno)){ putdata(getchin[nportno]&0xff); disptbuf(getchin[nportno]&0xff,nportno);}
  while((dataque.count>=1)&&(dataque.buf[dataque.start]!=0xeb))dropdata();   //campare head character
  if(dataque.count<14)return;
  else if((dataque.buf[dataque.start]==0xeb)&&(dataque.buf[mod(dataque.start+1,dataque.size)]==0x90)
  &&((dataque.buf[mod(dataque.start+2,dataque.size)]==0x71)||(dataque.buf[mod(dataque.start+2,dataque.size)]==0x70))
  &&((dataque.buf[mod(dataque.start+3,dataque.size)]==0x61)||(dataque.buf[mod(dataque.start+3,dataque.size)]==0xc2)||(dataque.buf[mod(dataque.start+3,dataque.size)]==0xb3)
  ||(dataque.buf[mod(dataque.start+3,dataque.size)]==0xf4)||(dataque.buf[mod(dataque.start+3,dataque.size)]==0x85)))
  {
    if(dataque.count<(dataque.buf[mod(dataque.start+4,dataque.size)]*6+8))return;
    else
    {
      for(i=0;i<6;i++){ temp_buf[i]=dataque.buf[mod(dataque.start+i+2,dataque.size)];}
      if(get_crc_code(temp_buf)!=(temp_buf[5]&0xff)){dropdata(); return;  }
      else
      {
	if(displaymode==FALSE)for(i=0;i<3;i++){disptbuf(0xeb,nportno);disptbuf(0x90,nportno);}
	dropdata();dropdata();
	temp=dataque.buf[mod(dataque.start+2,dataque.size)]*6+6;
	for(i=0;i<temp;i++){temp_buf[i]=dataque.buf[dataque.start]; dropdata();if(displaymode==FALSE)disptbuf(temp_buf[i],nportno);}
	processACsample(temp_buf);
      }//
    }//else
  }//else if((dataque.buf[dataque.start]==0x68)&&(dataque.buf[mod(dataque.start+3,dataque.size)]==0x68)
  else if(dataque.buf[dataque.start]==0xeb){dropdata(); return;}
}//void CNbb::getACsample()
void CNbb::processACsample(BYTE* pointer)
{
  int i,len;
  unsigned int temp;
  if((packet_crc_check(pointer))&&(((*pointer)==0x71)||((*pointer)==0x70))&&((*(pointer+1))==0x61))
  {
    len=port_set[nportno].len_a/2;   //you must know first is frequence
    for(i=0;i<len;i++)
    {
      if(packet_crc_check(pointer+i*6+6))
      {
	if(port_set[nportno].ext_flag==FALSE)temp=((*(pointer+i*6+13))&0xff)+(((*(pointer+i*6+14))&0x0f)<<8);
	else temp=((*(pointer+i*6+7))&0xff)+(((*(pointer+i*6+8))&0x0f)<<8);
	ACsample[port_set[nportno].len_b+i*2]=temp;
	if(port_set[nportno].ext_flag==FALSE)temp=((*(pointer+i*6+15))&0xff)+(((*(pointer+i*6+16))&0x0f)<<8);
	else temp=((*(pointer+i*6+9))&0xff)+(((*(pointer+i*6+10))&0x0f)<<8);
	ACsample[port_set[nportno].len_b+i*2+1]=temp;
      }//if(packet_crc_check(pointer+i*6+6))
    }//for(i=0;i<len;i++)
  }//if((packet_crc_check(pointer))&&((*pointer)==0x71)&&((*(pointer+1))==0x61))
  if((packet_crc_check(pointer))&&(((*pointer)==0x71)||((*pointer)==0x70))&&((*(pointer+1))==0xf4)&&(port_set[nportno].ext_flag==TRUE))
  {
    len=port_set[nportno].len_c;
    for(i=0;i<len;i++)
    {
      DC_sample_yx[i*2]=(*(pointer+7+i*6))+((*(pointer+8+i*6))<<8);
      DC_sample_yx[i*2+1]=(*(pointer+9+i*6))+((*(pointer+10+i*6))<<8);
    }//for(i=0;i<len;i++)
    if(DC_sample_state==STATE0)DC_sample_state=STATE1;//for flag the DC sample yx collect state         defined in nbbclass.h
    else if(DC_sample_state==STATE1)DC_sample_state=STATE2;//for flag the DC sample yx collect state         defined in nbbclass.h
  }//if((packet_crc_check(pointer))&&((*pointer)==0x71)&&((*(pointer+1))==0xf4)&&(port_set[nportno].ext_flag==TRUE))
}//void CNbb::processACsample(BYTE* pointer)
void CNbb::send_control_packet(BYTE ctlbyte,BYTE type,BYTE num,BYTE source,BYTE target)
{
  int ptr=0x00;
  packetbuf[ptr++]=ctlbyte;
  packetbuf[ptr++]=type;
  packetbuf[ptr++]=num;
  packetbuf[ptr++]=source;
  packetbuf[ptr++]=target;
  packetbuf[ptr]=get_crc_code(packetbuf);
  send_packet(packetbuf);
}//void CNbb::send_control_packet(BYTE ctlbyte,BYTE type,BYTE num,BYTE source,BYTE target)
void CNbb::send_yx_packet()
{
  int ptr=0;
  unsigned int temp;
  unsigned int yx1,yx2;
  if(yxfuncode[nportno]>0xff)yxfuncode[nportno]=0xf0;
  yx1=port_yx[(yxfuncode[nportno]-0xf0)*2];
  yx2=port_yx[(yxfuncode[nportno]-0xf0)*2+1];
  packetbuf[ptr++]=yxfuncode[nportno];
  temp=yx1;
  packetbuf[ptr++]=(BYTE)(temp&0xff);
  temp=yx1>>0x08;
  packetbuf[ptr++]=(BYTE)(temp&0xff);
  temp=yx2;
  packetbuf[ptr++]=(BYTE)(temp&0xff);
  temp=yx2>>0x08;
  packetbuf[ptr++]=(BYTE)(temp&0xff);
  packetbuf[ptr]=get_crc_code(packetbuf);
  yxfuncode[nportno]++;
  if(yxfuncode[nportno]>0xff)yxfuncode[nportno]=0xf0;
  send_packet(packetbuf);
}//void CNbb::send_yx_packet()
void CNbb::send_ym_packet()
{
  int ptr=0x00;
  unsigned long templ;
  if(ymfuncode[nportno]>0xdf)ymfuncode[nportno]=0xa0;
  packetbuf[ptr++]=ymfuncode[nportno];
  templ=sport_ym[ymfuncode[nportno]-0xa0];
  packetbuf[ptr++]=(BYTE)(templ&0xff);
  templ=sport_ym[ymfuncode[nportno]-0xa0];
  templ>>=8;
  packetbuf[ptr++]=(BYTE)(templ&0xff);
  templ=sport_ym[ymfuncode[nportno]-0xa0];
  templ>>=16;
  packetbuf[ptr++]=(BYTE)(templ&0xff);
  templ=sport_ym[ymfuncode[nportno]-0xa0];
  templ>>=24;
  packetbuf[ptr++]=(BYTE)(templ&0xff);
  packetbuf[ptr]=get_crc_code(packetbuf);
  ymfuncode[nportno]++;
  if(ymfuncode[nportno]>0xdf)ymfuncode[nportno]=0xa0;
  send_packet(packetbuf);
}//void CNbb::send_ym_packet()
void CNbb::send_yc_packet()
{
  int ptr=0;
  unsigned int temp;
  unsigned int yc1,yc2;
  if(ycfuncode[nportno]>0x7f)ycfuncode[nportno]=0x00;
  yc1=port_yc[nportno][(ycfuncode[nportno])*2];
  yc2=port_yc[nportno][(ycfuncode[nportno])*2+1];
  packetbuf[ptr++]=ycfuncode[nportno];
  temp=yc1;
  packetbuf[ptr++]=(BYTE)(temp&0xff);
  temp=yc1>>0x08;
  packetbuf[ptr++]=(BYTE)(temp&0x0f);
  temp=yc2;
  packetbuf[ptr++]=(BYTE)(temp&0xff);
  temp=yc2>>0x08;
  packetbuf[ptr++]=(BYTE)(temp&0x0f);
  packetbuf[ptr]=get_crc_code(packetbuf);
  ycfuncode[nportno]++;
  if(ycfuncode[nportno]>0x7f)ycfuncode[nportno]=0x00;
  send_packet(packetbuf);
}//void CNbb::send_yc_packet()
void CNbb::send_prot_packet()
{
  int i;
  int ptr=0;
  if(protfuncode[nportno]>0x7f)protfuncode[nportno]=0x00;
  packetbuf[ptr++]=protfuncode[nportno];
  for(i=0;i<4;i++)
  {
    if(protectbuf[0].tcount>0)
    {
      packetbuf[ptr++]=protectbuf[0].tbuf[protectbuf[0].tstart];
      protectbuf[0].tcount--;
      protectbuf[0].tstart++;
      if(protectbuf[0].tstart>=protectbuf[0].tsize)protectbuf[0].tstart=0;
      if(protectbuf[0].tcount==0x00)
      {
	protectbuf[i].tstart=0;
	protectbuf[i].tnext=0;
      }//if(protectbuf[0].tcount==0x00)
    }//if(protectbuf[0].tcount>0)
    else packetbuf[ptr++]=0x00;
  }//for(i=0;i<4;i++)
  packetbuf[ptr]=get_crc_code(packetbuf);
  protfuncode[nportno]++;
  if(protfuncode[nportno]>0x7f)protfuncode[nportno]=0x00;
  send_packet(packetbuf);
}//void CNbb::send_prot_packet()
void CNbb::send_yk_return()
{
  int ptr=0x00;
  packetbuf[ptr++]=0xe1;
//  if(port_set[8].ext_flag==TRUE)
  {
    if((ykret.ykretobj==(datasource.board_yk+hardwareset[0].xk4*4))
    ||(ykret.ykretobj==(datasource.board_yk+hardwareset[0].xk4*4+2)))
    {
      if(ykret.ykretcmd==YKCTRIP)
      {
	ykret.ykretobj++;
	ykret.ykretcmd=YKCCLOSE;
      }//if(ykret.ykretcmd==YKCTRIP)
    }//if((ykret.ykretobj==(datasource.board_yk+hardwareset[0].xk4*4))
  }//if(port_set[8].ext_flag==TRUE)
  packetbuf[ptr++]=ykret.ykretcmd;
  packetbuf[ptr++]=(BYTE)(ykret.ykretobj&0xff);
  packetbuf[ptr++]=ykret.ykretcmd;
  packetbuf[ptr++]=(BYTE)(ykret.ykretobj&0xff);
  packetbuf[ptr]=get_crc_code(packetbuf);
  send_packet(packetbuf);
}//void CNbb::send_yk_return()

void CNbb::send_yx_bw()
{
  int ptr=0x00;
  unsigned int temp;
  yx_bw_tt tempyxbw;

  if( isyxbw( nportno ) == TRUE ) {
	getyxbw( &tempyxbw, nportno );

	packetbuf[ptr++] = tempyxbw.func_code;

	temp = tempyxbw.two_yx_word[0];
	packetbuf[ptr++] = temp & 0xff;
	packetbuf[ptr++] = ( temp >> 8 ) & 0xff;		// get yx word 0-15

	temp = tempyxbw.two_yx_word[1];
	packetbuf[ptr++] = temp & 0xff;
	packetbuf[ptr++] = ( temp >> 8 ) & 0xff;		// get yx word 16-31

	packetbuf[ptr++] = get_crc_code( packetbuf );

	send_packet( packetbuf );
  }
}//void CNbb::send_yx_bw()

void CNbb::make_soe_packet()
{
  int temp;
  int ptr=0x00;
  struct date d;
  struct time t;
  SOE1 tempsoe;        //SOE saver  SOE1 defined in common.h
  if( issoe( nportno ) == TRUE ) {
	getsoe( &tempsoe, nportno );

	packbuf1[ptr++] = 0x80;

	temp = tempsoe.time.mil_second;
	packbuf1[ptr++] = temp & 0xff;
	packbuf1[ptr++] = ( temp >> 8 ) & 0x03;

	packbuf1[ptr++] = tempsoe.time.second & 0x3f;
	packbuf1[ptr++] = tempsoe.time.minute & 0x3f;
	packbuf1[ptr++] = get_crc_code( packbuf1 );

	ptr = 0x00;
	packbuf2[ptr++] = 0x81;

	packbuf2[ptr++] = tempsoe.time.hour & 0x1f;
	packbuf2[ptr++] = tempsoe.time.day & 0x1f;

	temp = tempsoe.orderno;
	packbuf2[ptr++] = temp & 0xff;
	temp &= 0x0f00;
	temp >>= 8;
	if( tempsoe.status == 0xaa ) temp |= 0x80;
	packbuf2[ptr++] = temp;
	packbuf2[ptr++] = get_crc_code( packbuf2 );
  }//if(soe_ctl[nportno].count!=0x00)
}//void CNbb::make_soe_packet()
void CNbb::send_soe_packet(int selectcode)
{
  if(selectcode==1)
  {
	make_soe_packet();
	send_packet(packbuf1);
  }//if(selectcode==1)
  if(selectcode==2)send_packet(packbuf2);
}//void CNbb::send_soe_packet(int selectcode)

BOOLEAN CNbb::isstepoff()
{
  if((step_1[nportno]==OFF)&&(step_2[nportno]==OFF)
	  &&(step_3[nportno]==OFF)&&(step_4[nportno]==OFF)
	  &&(step_5[nportno]==OFF)&&(step_6[nportno]==OFF)
      &&(step_7[nportno]==OFF)&&(step_8[nportno]==OFF))
    return(TRUE);
  else return(FALSE);
}//BOOLEAN CNbb::isstepoff()
void CNbb::stepoff()
{
  step_1[nportno]=OFF;
  step_2[nportno]=OFF;
  step_3[nportno]=OFF;
  step_4[nportno]=OFF;
  step_5[nportno]=OFF;
  step_6[nportno]=OFF;
  step_7[nportno]=OFF;
  step_8[nportno]=OFF;
}//void CNbb::stepoff()
void CNbb::senda()
{
  BYTE tmp=0;
  if(isstepoff())step_1[nportno]=ON;
  if(step_1[nportno]==ON)
  {
	save_len[nportno]=port_set[nportno].len_a;
	ycfuncode[nportno]=0;
	save_count[nportno]=0;
	send_packet(sync_code);
	step_1[nportno]=OFF;
	step_2[nportno]=ON;
	return;
  }//if(step_1[nportno]==ON)
  if(step_2[nportno]==ON)
  {
	send_control_packet(0x71,0x61,save_len[nportno],0,0);
	step_2[nportno]=OFF;
	step_3[nportno]=ON;
	return;
  }//if(step_2[nportno]==ON)
  if(step_3[nportno]==ON)
  {
	tmp=save_count[nportno];
	if(tmp<save_len[nportno])
	{
	  if((isyxbw(nportno)==TRUE)&&(save_len[nportno]>=(tmp+3)))
	  {
	send_yx_bw();
	step_3[nportno]=OFF;
	step_4[nportno]=ON;
	tmp++;
	if(tmp>=save_len[nportno])
	{
	  stepoff();
	  framea[nportno]=OFF;
	}//if(tmp>=save_len[nportno])
	ycfuncode[nportno]++;
	save_count[nportno]=tmp;
	return;
      }//if((yx_bw_log[nportno].count!=0)&&(save_len[nportno]>=(tmp+3)))
      if((ykret.ykretflag[nportno]==TRUE)&&(save_len[nportno]>=(tmp+3)))
      {
	send_yk_return();
	step_3[nportno]=OFF;
	step_6[nportno]=ON;
	tmp++;
	if(tmp>=save_len[nportno])
	{
	  stepoff();
	  framea[nportno]=OFF;
	}//if(tmp>=save_len[nportno])
	ycfuncode[nportno]++;
	save_count[nportno]=tmp;
	return;
	  }//if((ykret.ykretflag[nportno]==TRUE)&&(save_len[nportno]>=(tmp+3)))
      send_yc_packet();
      tmp++;
      if(tmp>=save_len[nportno])
      {
	stepoff();
	framea[nportno]=OFF;
      }//if(tmp>=save_len[nportno])
      save_count[nportno]=tmp;
      return;
    }//if(tmp<save_len[nportno])
    return;
  }//if(step_3[nportno]==ON)
  if(step_4[nportno]==ON)
  {
    tmp=save_count[nportno];
	send_yx_bw();
    step_4[nportno]=OFF;
    step_5[nportno]=ON;
    tmp++;
    if(tmp>=save_len[nportno])
    {
      stepoff();
      framea[nportno]=OFF;
    }//if(tmp>=save_len[nportno])
    ycfuncode[nportno]++;
    save_count[nportno]=tmp;
    return;
  }//if(step_4[nportno]==ON)

  if(step_5[nportno]==ON)
  {
	tmp=save_count[nportno];
    send_yx_bw();
    step_5[nportno]=OFF;
    step_3[nportno]=ON;
    tmp++;
    if(tmp>=save_len[nportno])
    {
      stepoff();
      framea[nportno]=OFF;
    }//if(tmp>=save_len[nportno])
    ycfuncode[nportno]++;
    save_count[nportno]=tmp;
    return;
  }//if(step_5[nportno]==ON)
  if(step_6[nportno]==ON)
  {

⌨️ 快捷键说明

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