📄 plc_gshd.cld
字号:
i_sv_Alm1=P[51]/10; i_sv_Alm2=1<<(P[51]%10);
if(P[51]==0) i_sv_Alm2=0;
}
else
{
i_sv_Alm1=i_sv_Alm2=0;
i_sv_X_Alm1=(P[51]%100)/10; i_sv_X_Alm2=1<<(P[51]%10);
if((P[51]%100)==0) i_sv_X_Alm2=0;
i_sv_Y_Alm1=P[51]/1000; i_sv_Y_Alm2=1<<((P[51]/100)%10);
if((P[51]/100)==0) i_sv_Y_Alm2=0;
i_sv_Z_Alm1=(P[53]%100)/10; i_sv_Z_Alm2=1<<(P[53]%10);
if((P[53]%100)==0) i_sv_Z_Alm2=0;
i_sv_A_Alm1=P[53]/1000; i_sv_A_Alm2=1<<((P[53]/100)%10);
if((P[53]/100)==0) i_sv_A_Alm2=0;
}
if(((P[52]/100)==0)&&(P[54]==0))
{
i_sv_Rdy1=P[52]/10; i_sv_Rdy2=1<<(P[52]%10);
if(P[52]==0) i_sv_Rdy2=0;
}
else
{
i_sv_Rdy1=i_sv_Rdy2=0;
i_sv_X_Rdy1=(P[52]%100)/10; i_sv_X_Rdy2=1<<(P[52]%10);
if((P[52]%100)==0) i_sv_X_Rdy2=0;
i_sv_Y_Rdy1=P[52]/1000; i_sv_Y_Rdy2=1<<((P[52]/100)%10);
if((P[52]/100)==0) i_sv_Y_Rdy2=0;
i_sv_Z_Rdy1=(P[54]%100)/10; i_sv_Z_Rdy2=1<<(P[54]%10);
if((P[54]%100)==0) i_sv_Z_Rdy2=0;
i_sv_A_Rdy1=P[54]/1000; i_sv_A_Rdy2=1<<((P[54]/100)%10);
if((P[54]/100)==0) i_sv_A_Rdy2=0;
}
i_Spdl_Alm1 =P[55]/10; i_Spdl_Alm2 =1<<(P[55]%10);
i_sm_z_s1 =P[56]/10; i_sm_z_s2 =1<<(P[56]%10);
i_sm_sok1 =P[57]/10; i_sm_sok2 =1<<(P[57]%10);
i_Spdl_Ori_Fin1 =P[58]/10; i_Spdl_Ori_Fin2 =1<<(P[58]%10);
i_Cool_Alm1 =P[60]/10; i_Cool_Alm2 =1<<(P[60]%10);
i_YeYa_Alm1 =P[61]/10; i_YeYa_Alm2 =1<<(P[61]%10);
i_RunHua_Alm1 =P[62]/10; i_RunHua_Alm2 =1<<(P[62]%10);
i_Tank_QF_OK1 =P[63]/10; i_Tank_QF_OK2 =1<<(P[63]%10);
e_cycle_lamp1 = P[75]/1000; e_cycle_lamp2 =1<<((P[75]/100)%10);
e_cycle_switch1 =(P[75]%100)/10; e_cycle_switch2 =1<<(P[75]%10);
e_feedhold_lamp1 = P[76]/1000; e_feedhold_lamp2 =1<<((P[76]/100)%10);
e_feedhold_switch1=(P[76]%100)/10; e_feedhold_switch2=1<<(P[76]%10);
e_toolctrl_lamp1 = P[77]/1000; e_toolctrl_lamp2 =1<<((P[77]/100)%10);
e_toolctrl_switch1=(P[77]%100)/10; e_toolctrl_switch2=1<<(P[77]%10);
e_alm_lamp1=(E_Alm_Lamp%100)/10; e_alm_lamp2 =1<<(E_Alm_Lamp%10);
e_SpdlStep_lamp1 = P[78]/1000; e_SpdlStep_lamp2 =1<<((P[78]/100)%10);
e_SpdlStep_switch1=(P[78]%100)/10; e_SpdlStep_switch2=1<<(P[78]%10);
X_Home_Direction= P[94]%10;
Y_Home_Direction=(P[94]%100)/10;
Z_Home_Direction=(P[94]%1000)/100;
A_Home_Direction= P[94]/1000;
if(X_Home_Direction>1) X_Home_Direction=1;
if(Y_Home_Direction>1) Y_Home_Direction=1;
if(Z_Home_Direction>1) Z_Home_Direction=1;
if(A_Home_Direction>1) A_Home_Direction=1;
if(P[96]==0) XY_Switch=0;
else XY_Switch=1;
Manual_GongSi=0;
if(P[19]%100) Manual_GongSi=1;
GongSi_H_switch1=(P[19]%10000)/1000;GongSi_H_switch2=1<<((P[19]/100)%10);
if(((P[19]%10000)/100)==0) GongSi_H_switch2=0;
GongSi_L_switch1=(P[19]%100)/10; GongSi_L_switch2=1<<(P[19]%10);
}
void plc1(void)
{
unsigned p,n;
int i,j,k,l,ax;
plc1_time=16;
//-----------test by xjc 2004.04.02---------------
if((get_axis_den(2)==0))R[31]=1;
else R[31]=0;
R_c[13]=(*F_l[23]%125000)/1000;//*axis_pout(axis)
R_c[14]=(*F_l[23]%1000)/10;
if(R_c[13]<0){R_c[13]=-R_c[13];R[12]=255;}
if(R_c[14]<0)R_c[14]=-R_c[14];
R_c[17]=(*G_l[21]%125000)/1000;//*axis_pic_a(axis)
R_c[18]=(*G_l[21]%1000)/10;
if(R_c[17]<0){R_c[17]=-R_c[17];R[16]=255;}
if(R_c[18]<0)R_c[18]=-R_c[18];
R_l[20/4]=get_axis_pos(2);
R_c[25]=(R_l[20/4]%125000)/1000;
R_c[26]=(R_l[20/4]%1000)/10;
if(R_c[25]<0){R_c[25]=-R_c[25];R[24]=255;}
if(R_c[26]<0)R_c[26]=-R_c[26];
//-----------test by xjc 2004.04.02---------------
for(ax=0,p=1,n=2;ax<4;ax++,p<<=2,n<<=2)
{
if(X[0+P[97]]&p) *axis_ctrl(ax)|= AX_LSP;
else *axis_ctrl(ax)&=~AX_LSP;
if(X[0+P[97]]&n) *axis_ctrl(ax)|= AX_LSN;
else *axis_ctrl(ax)&=~AX_LSN;
}
if((((X[i_sv_Alm1]&i_sv_Alm2)==0)&&i_sv_Alm2)
||(((X[i_sv_X_Alm1]&i_sv_X_Alm2)==0)&&i_sv_X_Alm2)
||(((X[i_sv_Y_Alm1]&i_sv_Y_Alm2)==0)&&i_sv_Y_Alm2)
||(((X[i_sv_Z_Alm1]&i_sv_Z_Alm2)==0)&&i_sv_Z_Alm2)
||(((X[i_sv_A_Alm1]&i_sv_A_Alm2)==0)&&i_sv_A_Alm2)
) sv_Alm=1;
else sv_Alm=0;
if((((X[i_sv_Rdy1]&i_sv_Rdy2)==0)&&i_sv_Rdy2)
||(((X[i_sv_X_Rdy1]&i_sv_X_Rdy2)==0)&&i_sv_X_Rdy2)
||(((X[i_sv_Y_Rdy1]&i_sv_Y_Rdy2)==0)&&i_sv_Y_Rdy2)
||(((X[i_sv_Z_Rdy1]&i_sv_Z_Rdy2)==0)&&i_sv_Z_Rdy2)
||(((X[i_sv_A_Rdy1]&i_sv_A_Rdy2)==0)&&i_sv_A_Rdy2)
) sv_Rdy=0;
else sv_Rdy=1;
if((X[i_estop1]&i_estop2)==0) reset_lamp_dwell=0;
if(reset_dwell>0)
{
asm cli
*ch_ctrl(0)&=~CH_MODE_MSK;
asm sti
if(reset_dwell>40) reset_dwell-=16;
if((X[i_estop1]&i_estop2)||(P[99]==1)) reset_dwell-=16;
else *ch_ctrl(0)|=CH_ESTOP;
return;
}
else reset_dwell=0;
if(P[99]==0) //work only with hnc-21
{
//RESET
if((X[i_estop1]&(~R[i_estop1+100])&i_estop2)||(reset_lamp_dwell>3)){
*ch_ctrl(0)&=~CH_ESTOP;
*ch_ctrl(0)|= CH_RESET;
{if((X[2]&0x4)!=0x4) //2004.2.24
{
Y[1]|=0x10;
R[500]=1;
}
} //*/
if(reset_lamp_dwell==0){ reset_lamp_dwell=4; reset(); }
if(*ch_stat(0)&CH_RESET_LAMP) reset_lamp_dwell--;
}
else *ch_ctrl(0)&=~CH_RESET;
//ESTOP
if((*ch_stat(0)&CH_RESET_LAMP)==0)
{
if(((X[i_estop1]&i_estop2)==0)||((sv_Rdy==0)&&(sv_en!=0)))
{ *ch_ctrl(0)|=CH_ESTOP;sv_en=run_enable=0;}
else if(((*ch_stat(0)&CH_ALARM_LAMP)==0)) run_enable=1;
else run_enable=0;
}
else run_enable=0;
// SERVO ENABLE
if(((*ch_ctrl(0)&CH_ESTOP)==0)&&((*ch_stat(0)&CH_RESET_LAMP)==0))
{
for(i=0;i<4;i++)
{
if((*axis_stat(i)&AX_EXIST)&&((*axis_stat(i)&AX_SV_ENBL)==0))
goto sv_disable;
}
if((X[i_estop1]&i_estop2)&&(sv_n==1))
{
if(sv_dwll>0) sv_dwll-= plc1_time;
else sv_dwll = 0;
if((sv_en==0)&&(sv_dwll==0))
{
switch(sv_stag)
{
case 0: Y[0]|=0x02; sv_dwll=(1000+P_i[65]); sv_stag=1; break;
case 1: Y[0]&=~2;
if(sv_Alm) break;
Y[0]|=0x09; sv_dwll=(1000+P_i[66]); sv_stag=2; break;
case 2: Y[0]|=0x04; sv_dwll=(2000+P_i[67]); sv_stag=3; break;
case 3: if(sv_Rdy==0) break;
Y[0]|=0x10; sv_dwll=(1000+P_i[68]); sv_stag=4; break;
case 4: Y[0]&=~8; sv_n=0; sv_stag=0; sv_en=1;
}
}
else if(sv_dwll==0){ Y[0]&=~2;Y[0]|=0x15; sv_dwll=0; }
}
}
else {
sv_disable:
Y[0]&=~0x15;
}
auto_enable=X[0+P[97]]? 0:run_enable;
if((*sys_ext_alm()&0xf003)||((spdl_dangwei==-1)&&(P[25]<5)))
auto_enable=0;
}
else
{
*ch_ctrl(0)&=~CH_ESTOP;
sv_en=1;
}
// cycle start sw
if(mod_m00_m01(0)&(CH_M00|CH_M01)) {
*ch_ctrl(0)|=CH_FEEDHOLD_SW;
*ch_ctrl(0)&=~CH_CYCLE_SW;
mod_m00_m01(0)&=~(CH_M00|CH_M01);
}
else
{
if((X[35]&0X40)
||((P[76]%100)&&(X[e_feedhold_switch1]&e_feedhold_switch2))
||(((*F_ui[0])|(*F_ui[10])|(*F_ui[20])|(*F_ui[30]))&3)
)
{
*ch_ctrl(0)&=~CH_CYCLE_SW;
*ch_ctrl(0)|=CH_FEEDHOLD_SW;
}
else
{
if((X[31]&0X40)||
((P[75]%100)&&(X[e_cycle_switch1]&e_cycle_switch2)))
*ch_ctrl(0)|= CH_CYCLE_SW;
else
{ *ch_ctrl(0)&=~CH_CYCLE_SW; *ch_ctrl(0)&=~CH_FEEDHOLD_SW;}
}
}
// home switch
for(ax=0,p=1;ax<4;ax++,p<<=1)
{
*axis_ctrl(ax)&=~AX_HOME_SW;
if(((X[1+P[97]]&p)&&(P[99]==0))||((X[40]&p)&&(P[99]==1)))
*axis_ctrl(ax)|= AX_HOME_SW;
}
if(P[99]==0)
{
if((sv_en)||((sv_stag>2)&&(sv_dwll==0)))
{
// if(((X[i_Spdl_Alm1]&i_Spdl_Alm2)==0)&&(P[55])) *sys_ext_alm()|= 1;
// else *sys_ext_alm()&=~1;
if(((X[i_Spdl_Alm1]&i_Spdl_Alm2)==0)||(P[55]==0)) *sys_ext_alm()&=~1; //pend
else *sys_ext_alm()|= 1; //pend
if((spdl_dangwei==-1)&&(P[25]<5)) *sys_ext_alm()|= 4;
else *sys_ext_alm()&=~4;
if(((X[i_sv_Rdy1]&i_sv_Rdy2)==0)&&i_sv_Rdy2) *sys_ext_alm()|=0x2;
else *sys_ext_alm()&=~0x2;
if(((X[i_sv_X_Rdy1]&i_sv_X_Rdy2)==0)&&i_sv_X_Rdy2)*sys_ext_alm()|=0x1000;
if(((X[i_sv_Y_Rdy1]&i_sv_Y_Rdy2)==0)&&i_sv_Y_Rdy2)*sys_ext_alm()|=0x2000;
if(((X[i_sv_Z_Rdy1]&i_sv_Z_Rdy2)==0)&&i_sv_Z_Rdy2)*sys_ext_alm()|=0x4000;
if(((X[i_sv_A_Rdy1]&i_sv_A_Rdy2)==0)&&i_sv_A_Rdy2)*sys_ext_alm()|=0x8000;
}
if((sv_stag)&&(sv_dwll==0))
{
if(((X[i_sv_Alm1]&i_sv_Alm2)==0)&&i_sv_Alm2) *sys_ext_alm()|=0x2;
else *sys_ext_alm()&=~0x2;
if(((X[i_sv_X_Alm1]&i_sv_X_Alm2)==0)&&i_sv_X_Alm2) *sys_ext_alm()|=0x1000;
if(((X[i_sv_Y_Alm1]&i_sv_Y_Alm2)==0)&&i_sv_Y_Alm2) *sys_ext_alm()|=0x2000;
if(((X[i_sv_Z_Alm1]&i_sv_Z_Alm2)==0)&&i_sv_Z_Alm2) *sys_ext_alm()|=0x4000;
if(((X[i_sv_A_Alm1]&i_sv_A_Alm2)==0)&&i_sv_A_Alm2) *sys_ext_alm()|=0x8000;
}
if(sv_en)
{
if((X[i_Tank_QF_OK1]&i_Tank_QF_OK2)||(P[63]==0))*sys_ext_alm()&=~0x100;
else *sys_ext_alm()|= 0x100;
if((X[i_Cool_Alm1]&i_Cool_Alm2)||(P[60]==0)) *sys_ext_alm()&=~0x200;
else *sys_ext_alm()|= 0x200;
if((X[i_YeYa_Alm1]&i_YeYa_Alm2)||(P[61]==0)) *sys_ext_alm()&=~0x400;
else *sys_ext_alm()|= 0x400;
// if((X[i_RunHua_Alm1]&i_RunHua_Alm2)||(P[62]==0))*sys_ext_alm()&=~0X800;
// else *sys_ext_alm()|= 0X800;
if(((X[i_RunHua_Alm1]&i_RunHua_Alm2)==0)||(P[62]==0)) *sys_ext_alm()&=~0X800; //pend
else *sys_ext_alm()|= 0X800; //pend *sys_ext_alm()|= 0X800;
}
}
if(((sv_en==1)||(P[99]==1))&&(P[90]==0))
{
if((*axis_stat(0)&AX_COORD_SETUP)==0) *sys_ext_alm()|= 0x10;
else *sys_ext_alm()&=~0x10;
if((*axis_stat(1)&AX_COORD_SETUP)==0) *sys_ext_alm()|= 0x20;
else *sys_ext_alm()&=~0x20;
if((*axis_stat(2)&AX_COORD_SETUP)==0) *sys_ext_alm()|= 0x40;
else *sys_ext_alm()&=~0x40;
}
else *sys_ext_alm()&=~0x70;
if(E_Alm_Lamp)
{
if(
(((*sys_ext_alm())&0xf0d)&&((E_Alm_Lamp/100)==0))||
(((*sys_ext_alm())&0xff0f)&&((E_Alm_Lamp/100)==1))||
((*sys_ext_alm())&&((E_Alm_Lamp/100)==2))
)
Y[e_alm_lamp1]|= e_alm_lamp2;
else
Y[e_alm_lamp1]&=~e_alm_lamp2;
}
if(spdl_ctrl&3)
{
if((X[i_sm_sok1]&i_sm_sok2)||(P[57]==0))spdl_stat=spdl_ctrl;
else spdl_stat=spdl_ctrl|0x80;
}
else
{
// if((X[i_sm_z_s1]&i_sm_z_s2)||(P[56]==0))spdl_stat=spdl_ctrl;
// else spdl_stat=spdl_ctrl|0x80;
if(((X[i_sm_z_s1]&i_sm_z_s2)==0)||(P[56]==0))spdl_stat=spdl_ctrl; //pend
else spdl_stat=spdl_ctrl|0x80; //pend
}
if(P[99]!=0) auto_enable=run_enable=1;
//------------------spindle control---------------
if(((spdl_dangwei==-1)&&(spdlcd_eng==0))||(*sys_ext_alm()&1)||(Y[0]&0x40)||(Y[1]&4)
//||(get_axis_pos(2)>5))//031210
)//||(*F_l[23]>5))
{
out_dac(0);
spdl_ctrl=0;
Y[1]&=~3;
*ch_spdl_speed(0)=0;
}
else if(spdl_ctrl&3)
{
//Get the spindle speed
i=(long) spdl_cmd*spdl_override/100;
if(i>P_i[1+spdl_dangwei*4]) i=P_i[1+spdl_dangwei*4];
if(i<P_i[0+spdl_dangwei*4]) i=P_i[0+spdl_dangwei*4];
if(spdlcd_eng==0) *ch_spdl_speed(0)=i;
else *ch_spdl_speed(0)=P_i[21];
//Get the spindle motor speed
if((P_i[2+spdl_dangwei*4]>0)&&(P_i[3+spdl_dangwei*4]>0))
i=(long) i*P_i[3+spdl_dangwei*4]/P_i[2+spdl_dangwei*4];
if(P_i[16]>0) { if(i>P_i[16]) i=P_i[16];}
else { if(i>1500) i=1500;}
if(spdlcd_eng){ if(P_i[21]<150) i=P_i[21];
else i=150; }
//give spindle the right gong si speed
//default is 100--1000rpm
//if its seted the Max is 2000rpm
if((*ch_M_code(0)==103)||(*ch_M_code(0)==104)||(*ch_M_code(0)==100))
{
if(GS_Spdl_Speed_Max>0)
{
if(i>GS_Spdl_Speed_Max) i=GS_Spdl_Speed_Max;
else if(i>2000) i=2000;
}
else if(i>1000) i=1000;
if(GS_Spdl_Speed_Min>0)
{
if(i<GS_Spdl_Speed_Min) i=GS_Spdl_Speed_Min;
else if(i<P_i[0+spdl_dangwei*4]) i=P_i[0+spdl_dangwei*4];
}
else if(100<P_i[0+spdl_dangwei*4])
{
if(i<P_i[0+spdl_dangwei*4]) i=P_i[0+spdl_dangwei*4];
}
else if(i<100) i=100;
}
GS_Spdl_Com_Speed=i;
//give spindle the right gong si speed
//display the spindle command speed 20031119
if(spdlcd_eng==0) *ch_spdl_speed(0)=i;
else *ch_spdl_speed(0)=P_i[21];
//give spindle gong si yu ting liang
if(GS_Spdl_Yuting_k2<=0) GS_Spdl_Yuting_Pos_u=0;
else
{
if(GS_Spdl_Yuting_k1>0) GS_Spdl_Yuting_Pos
=(long) GS_Spdl_Com_Speed*(long) GS_Spdl_Com_Speed*((long) GS_Spdl_Yuting_k1);
else if(GS_Spdl_Yuting_ktemp>0)
{
R_l[688/4]=(long) GS_Spdl_Com_Speed*GS_Spdl_Com_Speed;
R_l[684/4]=R_l[688/4]*((long) GS_Spdl_Yuting_ktemp);
GS_Spdl_Yuting_Pos
=(long) GS_Spdl_Com_Speed*(long) GS_Spdl_Com_Speed*((long) GS_Spdl_Yuting_ktemp);
}
else
GS_Spdl_Yuting_Pos=0;
//if((P_i[2+spdl_dangwei*4]>0)&&(P_i[3+spdl_dangwei*4]>0))
// GS_Spdl_Yuting_Pos=(long) (GS_Spdl_Yuting_Pos*P_i[3+spdl_dangwei*4])/((long) (GS_Spdl_Yuting_k2*P_i[2+spdl_dangwei*4]));
//else
GS_Spdl_Yuting_Pos=(long) (GS_Spdl_Yuting_Pos/((long) GS_Spdl_Yuting_k2));
}
*ch_tapping_dec(0)=GS_Spdl_Yuting_Pos_u;
//give spindle gong si yu ting liang
//give spindel the right speed when its at the bottom
//the permited is 0--200
/* 20040703
if(GS_Spdl_AtBottom==1)
{
if(GS_Spdl_Speed_AtBottom<=0) i=0;
else if(GS_Spdl_Speed_AtBottom<=100)
i=GS_Spdl_Speed_AtBottom;//666
else i=100;
}
*/
//-----------test to meet the right speed-----------
j=Spdl_Moter_Count_Max_Speed/10;
k=i%j;
l=i/j;
if((P[2]>0)&&(P[3]>0)){ j=j*P[2]/P[3]; k=k*P[2]/P[3]; }
if(l>9){l=9;k=j;}
if(l>0)i=(long)(3276*l)+(long)(3276)*(long)(k+P_i[l+39])/(long)(j+P_i[l+39]-P_i[l+40]);
else if(j>P_i[40]) i=(long)(3276)*(long)k/(long)(j-P_i[40]);
else i=3276;
if((l==9)&&(k>=(j-P_i[l+40]))) i=0x7fff;
//-----------test to meet the right speed-----------
//-------old mode-------
//i=(long) i*0x7fff/Spdl_Moter_Count_Max_Speed;
//-------old mode-------
if((Spdl_Dir_Change_Mode==1)&&(spdl_ctrl==2)) i=-i;
out_dac(i);
}
else *ch_spdl_speed(0)=0;
if((Y[34]&0x10)||(*ch_ctrl(0)&CH_ESTOP)||(run_enable==0))
{
handwheel(0,-1,0);
spdl_ctrl=0;
}
Y[34]&=~0xE0;
switch(spdl_ctrl)
{
case 1:
//if(get_axis_pos(2)<=5){//031210
if(*F_l[23]<=5){
Y[34]|=0x20;
if(Spdl_Dir_Change_Mode==0) Y[1]&=~2;
Y[1]|=1;
}
break;
case 2:
//if(get_axis_pos(2)<=5){//031210
if(*F_l[23]<=5){
Y[34]|=0x80;
if(Spdl_Dir_Change_Mode==0) { Y[1]&=~1; Y[1]|=2; }
if(Spdl_Dir_Change_Mode==1) Y[1]|=1;
}
break;
case 0:
Y[34]|=0x40;
Y[1]&=~1;
if(Spdl_Dir_Change_Mode==0) Y[1]&=~2;
}
switch(spdl_ctrl) {
case 1:
case 4:
if((X[2]&R[102]&1)==1)
{ Y[1]&=~2; Y[1]|=1; break;}
else break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -