📄 nbbclass.cpp
字号:
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 + -