📄 cncparse.c
字号:
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 + -