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

📄 cncparse.c

📁 根据数控编程需要
💻 C
📖 第 1 页 / 共 5 页
字号:
      break;

    case F:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(F);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Fnum++;
      addNumCheck(Fnum,"F");
      if (token == NUM) {
	Fcode = atof(tokenString);
	OverLimit=F_stmt(data,Fcode);

      }
      match(NUM);
      break;

    case P:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(P);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Pnum++;
      addNumCheck(Pnum,"P");
      if (token == NUM) {
	Pcode = atof(tokenString);
       if ((strlen(tokenString)>7)&&(Pcode>0)) {
	   	CNC_ERR=130;
		CNC_IsErr=1;

       	}
	OverLimit=P_stmt(data,Pcode);
	OverLimitError(OverLimit,"P value");
      }
      match(NUM);
      break;

    case Q:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(Q);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Qnum++;
      addNumCheck(Qnum,"Q");
      if (token == NUM) {
	Qcode = atof(tokenString);

	OverLimit=Q_stmt(data,Qcode);
	OverLimitError(OverLimit,"Q value");
      }
      match(NUM);
      break;

    case R:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(R);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Rnum++;
      addNumCheck(Rnum,"R");
      if (IKRFlag==1) {
      	addIKRNumCheck(Rnum+Inum);
      	addIKRNumCheck(Rnum+Knum);
      	}
      if (token == NUM) {
	Rcode = atof(tokenString);
	OverLimit=R_stmt(data,Rcode);
	OverLimitError(OverLimit,"R value");
      }
      match(NUM);
      break;

    case H:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(H);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Hnum++;
      addNumCheck(Hnum,"H");
      if (token == NUM) {
	Hcode = atof(tokenString);
	if (Hcode!=(int)(Hcode)) {
		DecimalError1();

		}
	OverLimit=H_stmt(data,Hcode);
	OverLimitError(OverLimit,"H value");
      }
      match(NUM);
      break;

    case I:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(I);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Inum++;
      addNumCheck(Inum,"I");
      if (IKRFlag==1) {
      	addIKRNumCheck(Inum+Rnum);
      	}
      if (token == NUM) {
	Icode = atof(tokenString);
	OverLimit=I_stmt(data,Icode);
	OverLimitError(OverLimit,"I value");
      }
      match(NUM);
      break;

    case K:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(K);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Knum++;
      addNumCheck(Knum,"K");
      if (IKRFlag==1) {
      	addIKRNumCheck(Knum+Rnum);
      	}
      if (token == NUM) {
	Kcode = atof(tokenString);
	OverLimit=K_stmt(data,Kcode);
	OverLimitError(OverLimit,"K value");
      }
      match(NUM);
      break;

   case J:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(J);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Jnum++;
      addNumCheck(Jnum,"J");

      if (token == NUM) {
	Jcode = atof(tokenString);
	OverLimit=J_stmt(data,Jcode);
	OverLimitError(OverLimit,"J value");
      }
      match(NUM);
      break;  

    case X:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(X);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Xnum++;
      addNumCheck(Xnum,"X");
      if (Unum>=1) {
      	addXUYVZWNumCheck();
      	}
      if (token == NUM) {
	Xcode = atof(tokenString);
	OverLimit=X_stmt(data,Xcode);

      }
      match(NUM);
      break;

    case Y:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(Y);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Ynum++;
      addNumCheck(Ynum,"Y");
      if (Vnum>=1) {
      	addXUYVZWNumCheck();
      	}
      if (token == NUM) {
	Ycode = atof(tokenString);
	OverLimit=Y_stmt(data,Ycode);

      }
      match(NUM);
      break;

    case Z:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(Z);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Znum++;
      addNumCheck(Znum,"Z");
      if (Wnum>=1) {
      	addXUYVZWNumCheck();
      	}
      if (token == NUM) {
	Zcode = atof(tokenString);
	OverLimit=Z_stmt(data,Zcode);

      }
      match(NUM);
      break;

    case U:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(U);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Unum++;
      addNumCheck(Unum,"U");
      if (Xnum>=1) {
      	addXUYVZWNumCheck();
      	}
      if (token == NUM) {
	Ucode = atof(tokenString);
	OverLimit=U_stmt(data,Ucode);

      }
      match(NUM);
      break;

    case V:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(V);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Vnum++;
      addNumCheck(Vnum,"V");
      if (Ynum>=1) {
      	addXUYVZWNumCheck();
      	}
      if (token == NUM) {
	Vcode = atof(tokenString);
	OverLimit=V_stmt(data,Vcode);

      }
      match(NUM);
      break;

    case W:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(W);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Wnum++;
      addNumCheck(Wnum,"W");
      if (Znum>=1) {
      	addXUYVZWNumCheck();
      	}
      if (token == NUM) {
	Wcode = atof(tokenString);
	OverLimit=W_stmt(data,Wcode);

      }
      match(NUM);
      break;

    case O:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(O);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Onum++;
      addNumCheck(Onum,"O");
      if (token == NUM) {
	Ocode = atof(tokenString);
	if (Ocode!=(int)(Ocode)) {
		DecimalError1();

		}
       if ((strlen(tokenString)>4)&&(Ocode>0)) {
	   	CNC_ERR=130;
		CNC_IsErr=1;

       	}
	OverLimit=O_stmt(data,Ocode);
	OverLimitError(OverLimit,"O value");
      }
      match(NUM);
      break;

    case L:
    	NPositionErrorFlag=1;
    	ParseFlag[lineno]=1;
      match(L);
      if (token==VAR) {
      	G65Flag=1;
      	match(VAR);
      	}
      Lnum++;
      addNumCheck(Lnum,"L");
      if (token == NUM) {
	Lcode = atof(tokenString);
	if (Lcode!=(int)(Lcode)) {
		DecimalError1();

		}
	OverLimit=L_stmt(data,Lcode);
	OverLimitError(OverLimit,"L value");
      }
      match(NUM);
      break;

    case A:
    case B:
    case C:
    case D:
    case E:
   AddressUnknowError();

      break;

    default:
      syntaxError();
      token = getToken();
      break;
    } //end case
  }

  if (token == ENDLINE) {
    data->EOB=DataBlockEnd;
    data->numCtrl=lineno;
    if ((data->numCtrl==0)&&(data->Ocode==-1)&&(MDI_Flag==0)) {
		if (xx==1) {
				CNC_ERR=4;
			CNC_IsErr=1;

			}
    	}
    }
  data->bBusy = NoBusy;
  return;

  
}


int G_stmt(dataInterp *data,int Gcode) {
  int flag=0;  //用于标记-#和#,0:# 1:-#
  int GHasInvalidCode = FALSE;  
  if (G65Flag==0) {
  	switch (Gcode) {
  		case  4:                 //00:G04 G10 G28 G39 G50 G65 G70 G71 G72 G73 G74 G75 G7
  		case  10:
  		case  28:
  		case  39:
  		case  50:
  		case  65:
  		case  70:
  		case  71:
  		case  72:
  		case  73:
  		case  74:
  		case  75:
  		case  76:
  			data->Gcode[0]=Gcode;
  			break;

  		case  0:                  //01: G00 G01 G02 G03 G32 G33 G90 G92 G94 
  		case  1:
  		case  2:       	
  		case  3:       	
  		case  32:       	
  		case  33:  
		case  34:
  		case  90:       	
  		case  92:       	
  		case  94:       	
  		data->Gcode[1]=Gcode;
		
  			break;

  		case  96:               //02: G96 G97
  		case  97:
  			data->Gcode[2]=Gcode;
  			break;

  		case  98:             //03: G98 G99
  		case  99:
  			data->Gcode[3]=Gcode;
  			break;

  		case  20:           //06: G20 G21
  		case  21:
  			data->Gcode[4]=Gcode;
  			break;

  		case  40:           //07: G40 G41 G42
  		case  41:
  		case  42:	
  			data->Gcode[5]=Gcode;
  			break;

  		default:
  			GHasInvalidCode = TRUE;    //has invalide code
  			break;
  			}
  	}
    else if (G65Flag==1) {
  	G65Flag=0;
  	if (Gcode<0) {
  		flag=1;
  		Gcode=-Gcode;
  		}
 /* 	if ((Gcode<200)||((Gcode>231)&&(Gcode<9200))||(Gcode>9231)) {
  		VarOverLimitError();
//return;
  		}*/
  	if ((Gcode<200)||((Gcode>231)&&(Gcode<500))||((Gcode>515)&&(Gcode<9200))||((Gcode>9231)&&(Gcode<9500))||(Gcode>9515)) {
  		VarOverLimitError();
  		}
  	else if ((Gcode>=200)&&(Gcode<=231)){
  		switch ((int)(MacroBuf[Gcode-200])) {
  			case  4:                 //00:G04 G10 G28 G39 G50 G65 G70 G71 G72 G73 G74 G75 G7
  			case  10:
  			case  28:
  			case  39:
  			case  50:
  			case  65:
  			case  70:
  		       case  71:
          		case  72:
          		case  73:
         		case  74:
       		case  75:
        		case  76:
         			if (flag==1) {
         				data->Gcode[0]=-MacroBuf[Gcode-200];
         				}
         			else {
         				data->Gcode[0]=MacroBuf[Gcode-200];
         				}
          			break;

       		case  0:                  //01: G00 G01 G02 G03 G32 G33 G90 G92 G94 
         	    	case  1:
       		case  2:       	
       		case  3:       	
       		case  32:       	
         		case  33:       	
       		case  90:       	
        		case  92:       	
        		case  94:       	
         			if (flag==1) {
         				data->Gcode[1]=-MacroBuf[Gcode-200];
         				}
         			else {
         				data->Gcode[1]=MacroBuf[Gcode-200];
         				}
          			break;

        		case  96:               //02: G96 G97
       		case  97:
         			if (flag==1) {
         				data->Gcode[2]=-MacroBuf[Gcode-200];
         				}
         			else {
         				data->Gcode[2]=MacroBuf[Gcode-200];
         				}
          			break;

        		case  98:             //03: G98 G99
        		case  99:
         			if (flag==1) {
         				data->Gcode[3]=-MacroBuf[Gcode-200];
         				}
         			else {
         				data->Gcode[3]=MacroBuf[Gcode-200];
         				}
          			break;
 
        		case  20:           //06: G20 G21
       		case  21:
         			if (flag==1) {
         				data->Gcode[4]=-MacroBuf[Gcode-200];

⌨️ 快捷键说明

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