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