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

📄 gcode.c

📁 This is a CNCPro source file. It is include the G-Code interpreter source.
💻 C
📖 第 1 页 / 共 3 页
字号:
        }
     }
   
   if(ch=='G')
     switch((int)num)
       {case 0: ENT_TYPE=LINE_G0_ENT; break;
        case 1: ENT_TYPE=LINE_ENT; break;
        case 2: ENT_TYPE=arc; rot=CW; break;
        case 3: ENT_TYPE=arc; rot=CCW; break;
        case 4: dwell=ON; break;
        case 17:
        case 18:
        case 19: if(arc==XY_ARC_ENT) {I=I-(*gcode).x_coord[(*ctrl).cs]*(*ctrl).pty; J=J-(*gcode).y_coord[(*ctrl).cs]*(*ctrl).pty;}
                 if(arc==YZ_ARC_ENT) {I=I-(*gcode).y_coord[(*ctrl).cs]*(*ctrl).pty; J=J-(*gcode).z_coord[(*ctrl).cs]*(*ctrl).pty;}
                 if(arc==ZX_ARC_ENT) {I=I-(*gcode).z_coord[(*ctrl).cs]*(*ctrl).pty; J=J-(*gcode).x_coord[(*ctrl).cs]*(*ctrl).pty;}
                 if(num==17) {arc=XY_ARC_ENT; I=I+(*gcode).x_coord[(*ctrl).cs]*(*ctrl).pty; J=J+(*gcode).y_coord[(*ctrl).cs]*(*ctrl).pty;}
                 if(num==18) {arc=ZX_ARC_ENT; I=I+(*gcode).z_coord[(*ctrl).cs]*(*ctrl).pty; J=J+(*gcode).x_coord[(*ctrl).cs]*(*ctrl).pty;}
                 if(num==19) {arc=YZ_ARC_ENT; I=I+(*gcode).y_coord[(*ctrl).cs]*(*ctrl).pty; J=J+(*gcode).z_coord[(*ctrl).cs]*(*ctrl).pty;}
                 break;
        case 74:
        case 20: if((*software).units==IN) break;
                 ch='S'; num=140;
                 if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                 break;
        case 75:
        case 21: if((*software).units==MM) break;
                 ch='S'; num=141;
                 if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                 break;
        case 43: new_tool=ON; break;
        case 49: (*world).z_pos=(*world).z_pos+(*gcode).tool_len[(*gcode).tnum];
                 (*gcode).tnum=0; GMTtext(software, ctrl, gcode);
                 break;
        case 50: factor=1; break;
        case 51: new_scale=ON; break;
        case 53:
        case 54:
        case 55:
        case 56:
        case 57:
        case 58:
        case 59: X=X+(*gcode).x_coord[(*ctrl).cs]*(*ctrl).pty; Y=Y+(*gcode).y_coord[(*ctrl).cs]*(*ctrl).pty;
                 Z=Z+(*gcode).z_coord[(*ctrl).cs]*(*ctrl).pty; A=A+(*gcode).a_coord[(*ctrl).cs]*(*ctrl).pty;
                 if(arc==XY_ARC_ENT) {I=I+(*gcode).x_coord[(*ctrl).cs]*(*ctrl).pty; J=J+(*gcode).y_coord[(*ctrl).cs]*(*ctrl).pty;}
                 if(arc==YZ_ARC_ENT) {I=I+(*gcode).y_coord[(*ctrl).cs]*(*ctrl).pty; J=J+(*gcode).z_coord[(*ctrl).cs]*(*ctrl).pty;}
                 if(arc==ZX_ARC_ENT) {I=I+(*gcode).z_coord[(*ctrl).cs]*(*ctrl).pty; J=J+(*gcode).x_coord[(*ctrl).cs]*(*ctrl).pty;}
                 (*ctrl).cs=num-53;
                 X=X-(*gcode).x_coord[(*ctrl).cs]*(*ctrl).pty; Y=Y-(*gcode).y_coord[(*ctrl).cs]*(*ctrl).pty;
                 Z=Z-(*gcode).z_coord[(*ctrl).cs]*(*ctrl).pty; A=A-(*gcode).a_coord[(*ctrl).cs]*(*ctrl).pty;
                 if(arc==XY_ARC_ENT) {I=I-(*gcode).x_coord[(*ctrl).cs]*(*ctrl).pty; J=J-(*gcode).y_coord[(*ctrl).cs]*(*ctrl).pty;}
                 if(arc==YZ_ARC_ENT) {I=I-(*gcode).y_coord[(*ctrl).cs]*(*ctrl).pty; J=J-(*gcode).z_coord[(*ctrl).cs]*(*ctrl).pty;}
                 if(arc==ZX_ARC_ENT) {I=I-(*gcode).z_coord[(*ctrl).cs]*(*ctrl).pty; J=J-(*gcode).x_coord[(*ctrl).cs]*(*ctrl).pty;}
                 GMTtext(software, ctrl, gcode); break;
        case 60: if(version==LITE) break;
                 if((*ctrl).cvv==OFF) break;
                 (*ctrl).cvv=OFF; GMTtext(software, ctrl, gcode);
                 if(dcycle81==ON || dcycle83==ON || line_by_line==ON) break;
                 x=x_now; y=y_now; z=z_now; a=a_now; angle=angle_now; ent_type=ent_type_now; *world=world_now;
                 x_now=y_now=z_now=a_now=angle_now=0;
                 ent_type_now=LINE_ENT; fd_ch=TRUE;
                 ch='*'; goto START_MOVE;
        case 64: if(version==LITE) break;
                 if((*ctrl).cvv==ON) break;
                 (*ctrl).cvv=ON; GMTtext(software, ctrl, gcode);
                 break;
        case 70: if((*software).a_follow==INDEPENDANT) break;
                 ch='S'; num=130;
                 if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                 break;
        case 71: if((*software).a_follow==FOLLOW_X) break;
                 ch='S'; num=131;
                 if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                 break;
        case 72: if((*software).a_follow==FOLLOW_Y) break;
                 ch='S'; num=132;
                 if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                 break;
        case 73: if((*software).a_follow==FOLLOW_Z) break;
                 ch='S'; num=133;
                 if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                 break;
        case 80: if(version==LITE) break;
                 if(dcycle81==OFF && dcycle83==OFF) break;
                 dcycle81=dcycle83=OFF;
                 break;
        case 81: if(version==LITE) break;
                 if(dcycle81==ON) break;
                 if(dcycle83==ON) dcycle83=OFF;
                 ch='S'; num=150;
                 if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                 break;
        case 83: if(version==LITE) break;
                 if(dcycle83==ON) break;
                 if(dcycle81==ON) dcycle81=OFF;
                 ch='S'; num=155;
                 if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                 break;
        case 90: (*ctrl).pty=ABS;
                 X=(*world).x_pos-(*gcode).x_coord[(*ctrl).cs];
                 Y=(*world).y_pos-(*gcode).y_coord[(*ctrl).cs];
                 Z=(*world).z_pos-(*gcode).z_coord[(*ctrl).cs];
                 A=(*world).a_pos-(*gcode).a_coord[(*ctrl).cs];
                 if(arc==XY_ARC_ENT) {I=(*world).x_pos-(*gcode).x_coord[(*ctrl).cs]; J=(*world).y_pos-(*gcode).y_coord[(*ctrl).cs];}
                 if(arc==YZ_ARC_ENT) {I=(*world).y_pos-(*gcode).y_coord[(*ctrl).cs]; J=(*world).z_pos-(*gcode).z_coord[(*ctrl).cs];}
                 if(arc==ZX_ARC_ENT) {I=(*world).z_pos-(*gcode).z_coord[(*ctrl).cs]; J=(*world).x_pos-(*gcode).x_coord[(*ctrl).cs];}
                 GMTtext(software, ctrl, gcode); break;
        case 91: (*ctrl).pty=REL; X=Y=Z=A=I=J=0; GMTtext(software, ctrl, gcode); break;
        case 92: if((*ctrl).cs==0) {par=TRUE; set_coord=ON;} break;
        default: msg=INVALID_CODE; break;
       }
   if(ch=='M')
     switch((int)num)
       {case 3: if((*ctrl).M03==ON) break;
                ch='S'; num=120;
                if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                break;
        case 5: if((*ctrl).M03==OFF) break;
                ch='S'; num=121;
                if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                break;
        case 7: if((*ctrl).M07==ON) break;
                ch='S'; num=122;
                if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                break;
        case 8: if((*ctrl).M08==ON) break;
                ch='S'; num=124;
                if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                break;
        case 9: if((*ctrl).M08==OFF && (*ctrl).M07==OFF) break;
                 ch='S'; num=125;
                if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                break;
        case 10: if((*ctrl).M10==ON) break;
                 ch='S'; num=126;
                 if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                 break;
        case 11: if((*ctrl).M10==OFF) break;
                 ch='S'; num=127;
                 if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                 break;
        case 6: z=(*gcode).tool_ch_z-(*world).z_pos-(*gcode).tool_len[(*gcode).tnum]; a=(*gcode).tool_ch_a-(*world).a_pos;
                x=y=0; angle=NULL; ent_type=LINE_G0_ENT;
                ch='S'; num=110; goto START_MOVE;
        case 0:
        case 30:
        case 99: ch='S'; if(num==0) num=100; else if(num==30) num=101; else num=102;
                 if((*ctrl).cvv==ON && line_by_line==OFF && dcycle81==OFF && dcycle83==OFF) {x=y=z=a=0; angle=NULL; ent_type=LINE_ENT; goto START_MOVE;}
                 break;
        case 100: //rotate +90 about x axis
                  rotate_x(software, hardware, world);
                  update_display(software, (*world).x_pos*(*ctrl).pty, (*world).y_pos*(*ctrl).pty,
                                 (*world).z_pos*(*ctrl).pty, (*world).a_pos*(*ctrl).pty, 0, 0, (*ctrl).frate, ALL);
                  break;
        case 101: //rotate -90 about x axis
                  rotate_x(software, hardware, world); rotate_x(software, hardware, world); rotate_x(software, hardware, world);
                  update_display(software, (*world).x_pos*(*ctrl).pty, (*world).y_pos*(*ctrl).pty,
                                 (*world).z_pos*(*ctrl).pty, (*world).a_pos*(*ctrl).pty, 0, 0, (*ctrl).frate, ALL);
                  break;
        case 102: //rotate +90 about y axis
                  rotate_y(software, hardware, world);
                  update_display(software, (*world).x_pos*(*ctrl).pty, (*world).y_pos*(*ctrl).pty,
                                 (*world).z_pos*(*ctrl).pty, (*world).a_pos*(*ctrl).pty, 0, 0, (*ctrl).frate, ALL);
                  break;
        case 103: //rotate -90 about y axis
                  rotate_y(software, hardware, world); rotate_y(software, hardware, world); rotate_y(software, hardware, world);
                  update_display(software, (*world).x_pos*(*ctrl).pty, (*world).y_pos*(*ctrl).pty,
                                 (*world).z_pos*(*ctrl).pty, (*world).a_pos*(*ctrl).pty, 0, 0, (*ctrl).frate, ALL);
                  break;
        case 104: //rotate +90 about z axis
                  rotate_z(software, hardware, world);
                  update_display(software, (*world).x_pos*(*ctrl).pty, (*world).y_pos*(*ctrl).pty,
                                 (*world).z_pos*(*ctrl).pty, (*world).a_pos*(*ctrl).pty, 0, 0, (*ctrl).frate, ALL);
                  break;
        case 105: //rotate -90 about z axis
                  rotate_z(software, hardware, world); rotate_z(software, hardware, world); rotate_z(software, hardware, world);
                  update_display(software, (*world).x_pos*(*ctrl).pty, (*world).y_pos*(*ctrl).pty,
                                 (*world).z_pos*(*ctrl).pty, (*world).a_pos*(*ctrl).pty, 0, 0, (*ctrl).frate, ALL);
                  break;
        case 106: //switch z and a
                  switch_z_a(software, hardware, world);
                  update_display(software, (*world).x_pos*(*ctrl).pty, (*world).y_pos*(*ctrl).pty,
                                 (*world).z_pos*(*ctrl).pty, (*world).a_pos*(*ctrl).pty, 0, 0, (*ctrl).frate, ALL);
                  break;
        default: msg=INVALID_CODE; break;
       }
   if(ch=='S')
     switch((int)num)
       {case 100: init_M00=ON; msg=M0; break;
        case 101: init_M30=ON; msg=M30; break;
        case 102: init_M30=ON; msg=M99; break;
        case 110: x=(*gcode).tool_ch_x-(*world).x_pos; y=(*gcode).tool_ch_y-(*world).y_pos;
                  a=z=0; angle=NULL; ent_type=LINE_G0_ENT;
                  ch='M'; num=0; goto START_MOVE;
        case 120: if((*hardware).io1_on==HIGH) set_io_bit(hardware, (*hardware).io1_bit);
                  else clear_io_bit(hardware, (*hardware).io1_bit); 
                  (*ctrl).M03=ON; GMTtext(software, ctrl, gcode); break;
        case 121: if((*hardware).io1_on==HIGH) clear_io_bit(hardware, (*hardware).io1_bit);
                  else set_io_bit(hardware, (*hardware).io1_bit); 
                  (*ctrl).M03=OFF; GMTtext(software, ctrl, gcode); break;
        case 122: if((*hardware).io2_on==HIGH) set_io_bit(hardware, (*hardware).io2_bit);
                  else clear_io_bit(hardware, (*hardware).io2_bit); 
                  (*ctrl).M07=ON; GMTtext(software, ctrl, gcode); break;
        case 124: if((*hardware).io3_on==HIGH) set_io_bit(hardware, (*hardware).io3_bit);
                  else clear_io_bit(hardware, (*hardware).io3_bit); 
                  (*ctrl).M08=ON; GMTtext(software, ctrl, gcode); break;
        case 125: if((*hardware).io2_on==HIGH) clear_io_bit(hardware, (*hardware).io2_bit);
                  else set_io_bit(hardware, (*hardware).io2_bit);
                  if((*hardware).io3_on==HIGH) clear_io_bit(hardware, (*hardware).io3_bit);
                  else set_io_bit(hardware, (*hardware).io3_bit); 
                  (*ctrl).M07=(*ctrl).M08=OFF; GMTtext(software, ctrl, gcode); break;
        case 126: if((*hardware).io4_on==HIGH) set_io_bit(hardware, (*hardware).io4_bit);
                  else clear_io_bit(hardware, (*hardware).io4_bit);
                  (*ctrl).M10=ON; GMTtext(software, ctrl, gcode); break;
        case 127: if((*hardware).io4_on==HIGH) clear_io_bit(hardware, (*hardware).io4_bit);
                  else set_io_bit(hardware, (*hardware).io4_bit); 
                  (*ctrl).M10=OFF; GMTtext(software, ctrl, gcode); break;
        case 130: (*software).a_follow=INDEPENDANT; break;
        case 131: (*software).a_follow=FOLLOW_X; break;
        case 132: (*software).a_follow=FOLLOW_Y; break;
        case 133: (*software).a_follow=FOLLOW_Z; break;
        case 140: X=X/25.4; Y=Y/25.4; Z=Z/25.4; A=change_aux_unit(software, A, IN); I=I/25.4; J=J/25.4;
                  cur_sp=cur_sp/25.4; (*ctrl).frate=(*ctrl).frate/25.4;
                  change_pt_units(software, world, IN, IN);
                  change_gcode_units(software, gcode, IN, IN);
                  change_units(hardware, software, IN, IN);
                  GMTtext(software, ctrl, gcode); break;

⌨️ 快捷键说明

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