📄 processg73.c
字号:
case 10:
case 11:
case 32:
case 33:
iM_Code=num;
bM_Code=1;
break;
case 0:
g_IsRun=2;
break;
default:
Error=73;
break;
}
break;
case 'X':
if(strlen((char *)buf)==0){Error=73;break;}
if(bU_Code||bX_Code){Error=73;break;}
G73_Pos_X=BfFromStr(buf);
if(g_Sysparam.DiaOrRadius)G73_Pos_X=G73_Pos_X/2;
bX_Code=TRUE;
break;
case 'Z':
if(strlen((char *)buf)==0){Error=73;break;}
if(bW_Code||bZ_Code){Error=73;break;}
G73_Pos_Z=BfFromStr(buf);
bZ_Code=TRUE;
break;
case 'U':
if(strlen((char *)buf)==0){Error=73;break;}
if(bX_Code||bU_Code){Error=73;break;}
G73_Pos_U=BfFromStr(buf);
if(g_Sysparam.DiaOrRadius)G73_Pos_U=G73_Pos_U/2;
bU_Code =TRUE;
break;
case 'W':
if(strlen((char *)buf)==0){Error=73;break;}
if(bZ_Code||bW_Code){Error=73;break;}
G73_Pos_W=BfFromStr(buf);
bW_Code = 1;
break;
case 'I':
if(strlen((char *)buf)==0){Error=73;break;}
if(bI_Code){Error=73;break;}
G73_Pos_I=BfFromStr(buf);
bI_Code = TRUE;
break;
case 'K':
if(strlen((char *)buf)==0){Error=73;break;}
if(bK_Code){Error=73;break;}
G73_Pos_K=BfFromStr(buf);
bK_Code = TRUE;
break;
case 'R':
if(strlen((char *)buf)==0){Error=73;break;}
if(bR_Code){Error=73;break;}
G73_Pos_R=BfFromStr(buf);
bR_Code = TRUE;
break;
default:
break;
}
if (Error==0){
if (G73ProcessHangCode()==FALSE)Error=7;
if (G73_bEnd)Error=6;
G73ResetPara();
}
if (Error==73)break;
if (Error==6)break;
if (Error==7)break;
}
return Error;
}
BOOLEAN G73ProcessHangCode(void)
{
INT8U i;
if(iM_Code!=100 && iM_Code!=98&& iM_Code!=99)
{
switch(iM_Code)
{
case 3:case 4:case 5:case 8:case 9:case 10:case 11:
case 12:case 13:case 32:case 33:case 41:case 42:case 43:case 44:
DispErrCode(73);
return FALSE;
}
g_DelayTime=g_Sysparam.M_DelayTime/5;
if(WaitDelayEnd())return TRUE;
}
if(iM_Code==99 || iM_Code==98 || (iM_Code>=50 && iM_Code<=59))
{
DispErrCode(23);
return FALSE;
}
if(bX_Code||bZ_Code||bU_Code||bW_Code)
{
switch(iG_Code)
{
case 0:
LineShapNum++;
AllNum++;
if (AllNum!=1){
for (i=1;i<MAXNUMBER;i++){
if (CircleValue[i].Pos==(AllNum-1)){
LineValue[LineShapNum].StartX=CircleValue[i].EndX;
LineValue[LineShapNum].StartZ=CircleValue[i].EndZ;
break;
}
if (LineValue[i].Pos==(AllNum-1)){
LineValue[LineShapNum].StartX=LineValue[i].EndX;
LineValue[LineShapNum].StartZ=LineValue[i].EndZ;
break;
}
}
}
else{
if(bX_Code) G73_Abs_PosX=G73_Pos_X;
else if(bU_Code) G73_Abs_PosX=G73_Pos_U+Get_AbsPos(1);
else G73_Abs_PosX=Get_AbsPos(1);
if(bZ_Code) G73_Abs_PosZ=G73_Pos_Z;
else if(bW_Code) G73_Abs_PosZ=G73_Pos_W+Get_AbsPos(3);
else G73_Abs_PosZ=Get_AbsPos(3);
LineValue[LineShapNum].StartX=G73_Abs_PosX;
LineValue[LineShapNum].StartZ=G73_Abs_PosZ;
LineValue[LineShapNum].EndX=G73_Abs_PosX;
LineValue[LineShapNum].EndZ=G73_Abs_PosZ;
LineValue[LineShapNum].Pos=AllNum;
break;
}
if(bX_Code) G73_Abs_PosX=G73_Pos_X;
else if(bU_Code) G73_Abs_PosX=G73_Pos_U+LineValue[LineShapNum].StartX;
else G73_Abs_PosX=LineValue[LineShapNum].StartX;
if(bZ_Code) G73_Abs_PosZ=G73_Pos_Z;
else if(bW_Code) G73_Abs_PosZ=G73_Pos_W+LineValue[LineShapNum].StartZ;
else G73_Abs_PosZ=LineValue[LineShapNum].StartZ;
LineValue[LineShapNum].EndX=G73_Abs_PosX;
LineValue[LineShapNum].EndZ=G73_Abs_PosZ;
LineValue[LineShapNum].Pos=AllNum;
if (LineValue[LineShapNum].EndX!=LineValue[LineShapNum].StartX)
LineValue[LineShapNum].K=(LineValue[LineShapNum].EndX-LineValue[LineShapNum].StartX)/(LineValue[LineShapNum].EndZ-LineValue[LineShapNum].StartZ);
if (LineValue[LineShapNum].EndZ>LineValue[LineShapNum].StartZ)Zinc=1;
else if (LineValue[LineShapNum].EndZ<LineValue[LineShapNum].StartZ)Zdec=1;
if (Zdec==1&&Zinc==1){DispErrCode(24);return FALSE;}
if (LineValue[LineShapNum].EndX>LineValue[LineShapNum].StartX)Xinc=1;
else if (LineValue[LineShapNum].EndX<LineValue[LineShapNum].StartX)Xdec=1;
if (Xdec==1&&Xinc==1){DispErrCode(24);return FALSE;}
break;
case 1:
LineShapNum++;
AllNum++;
if (AllNum!=1){
for (i=1;i<MAXNUMBER;i++){
if (CircleValue[i].Pos==(AllNum-1)){
LineValue[LineShapNum].StartX=CircleValue[i].EndX;
LineValue[LineShapNum].StartZ=CircleValue[i].EndZ;
break;
}
if (LineValue[i].Pos==(AllNum-1)){
LineValue[LineShapNum].StartX=LineValue[i].EndX;
LineValue[LineShapNum].StartZ=LineValue[i].EndZ;
break;
}
}
}
else{
if(bX_Code) G73_Abs_PosX=G73_Pos_X;
else if(bU_Code) G73_Abs_PosX=G73_Pos_U+Get_AbsPos(1);
else G73_Abs_PosX=Get_AbsPos(1);
if(bZ_Code) G73_Abs_PosZ=G73_Pos_Z;
else if(bW_Code) G73_Abs_PosZ=G73_Pos_W+Get_AbsPos(3);
else G73_Abs_PosZ=Get_AbsPos(3);
LineValue[LineShapNum].StartX=G73_Abs_PosX;
LineValue[LineShapNum].StartZ=G73_Abs_PosZ;
LineValue[LineShapNum].EndX=G73_Abs_PosX;
LineValue[LineShapNum].EndZ=G73_Abs_PosZ;
LineValue[LineShapNum].Pos=AllNum;
break;
}
if(bX_Code) G73_Abs_PosX=G73_Pos_X;
else if(bU_Code) G73_Abs_PosX=G73_Pos_U+LineValue[LineShapNum].StartX;
else G73_Abs_PosX=LineValue[LineShapNum].StartX;
if(bZ_Code) G73_Abs_PosZ=G73_Pos_Z;
else if(bW_Code) G73_Abs_PosZ=G73_Pos_W+LineValue[LineShapNum].StartZ;
else G73_Abs_PosZ=LineValue[LineShapNum].StartZ;
LineValue[LineShapNum].EndX=G73_Abs_PosX;
LineValue[LineShapNum].EndZ=G73_Abs_PosZ;
LineValue[LineShapNum].Pos=AllNum;
if (LineValue[LineShapNum].EndX!=LineValue[LineShapNum].StartX)
LineValue[LineShapNum].K=(LineValue[LineShapNum].EndX-LineValue[LineShapNum].StartX)/(LineValue[LineShapNum].EndZ-LineValue[LineShapNum].StartZ);
if (LineValue[LineShapNum].EndZ>LineValue[LineShapNum].StartZ)Zinc=1;
else if (LineValue[LineShapNum].EndZ<LineValue[LineShapNum].StartZ)Zdec=1;
if (Zdec==1&&Zinc==1){DispErrCode(24);return FALSE;}
if (LineValue[LineShapNum].EndX>LineValue[LineShapNum].StartX)Xinc=1;
else if (LineValue[LineShapNum].EndX<LineValue[LineShapNum].StartX)Xdec=1;
if (Xdec==1&&Xinc==1){DispErrCode(24);return FALSE;}
break;
case 2:
case 3:
CircleShapNum++;
AllNum++;
if (AllNum!=1){
for (i=1;i<MAXNUMBER;i++){
if (CircleValue[i].Pos==(AllNum-1)){
CircleValue[CircleShapNum].StartX=CircleValue[i].EndX;
CircleValue[CircleShapNum].StartZ=CircleValue[i].EndZ;
break;
}
if (LineValue[i].Pos==(AllNum-1)){
CircleValue[CircleShapNum].StartX=LineValue[i].EndX;
CircleValue[CircleShapNum].StartZ=LineValue[i].EndZ;
break;
}
}
}
else{
DispErrCode(22);
return FALSE;
}
if(bX_Code) G73_Abs_PosX=G73_Pos_X;
else if(bU_Code) G73_Abs_PosX=G73_Pos_U+CircleValue[CircleShapNum].StartX;
else G73_Abs_PosX=CircleValue[CircleShapNum].StartX;
if(bZ_Code) G73_Abs_PosZ=G73_Pos_Z;
else if(bW_Code) G73_Abs_PosZ=G73_Pos_W+CircleValue[CircleShapNum].StartZ;
else G73_Abs_PosZ=CircleValue[CircleShapNum].StartZ;
if(bR_Code){
if(G73_Pos_R==0){DispErrCode(25);return FALSE;}
if(iG_Code==3)G73_Pos_R=-G73_Pos_R;
if(GetCircleCenter(G73_Abs_PosX-CircleValue[CircleShapNum].StartX,G73_Abs_PosZ-CircleValue[CircleShapNum].StartZ,G73_Pos_R,&G73_Abs_PosI,&G73_Abs_PosK)){DispErrCode(29);return FALSE;}
G73_Abs_PosI+=CircleValue[CircleShapNum].StartX;
G73_Abs_PosK+=CircleValue[CircleShapNum].StartZ;
}
else
{
if(bI_Code) G73_Abs_PosI=G73_Pos_I+CircleValue[CircleShapNum].StartX;
else G73_Abs_PosI=CircleValue[CircleShapNum].StartX;
if(bK_Code) G73_Abs_PosK=G73_Pos_K+CircleValue[CircleShapNum].StartZ;
else G73_Abs_PosK=CircleValue[CircleShapNum].StartZ;
}
CircleValue[CircleShapNum].EndX=G73_Abs_PosX;
CircleValue[CircleShapNum].EndZ=G73_Abs_PosZ;
CircleValue[CircleShapNum].I=G73_Abs_PosI;
CircleValue[CircleShapNum].K=G73_Abs_PosK;
CircleValue[CircleShapNum].R=G73_Pos_R;
CircleValue[CircleShapNum].Pos=AllNum;
CircleValue[CircleShapNum].Cw=iG_Code;
if (CircleValue[CircleShapNum].EndZ>CircleValue[CircleShapNum].StartZ)Zinc=1;
else if (CircleValue[CircleShapNum].EndZ<CircleValue[CircleShapNum].StartZ)Zdec=1;
if (Zdec==1&&Zinc==1){DispErrCode(24);return FALSE;}
if (CircleValue[CircleShapNum].EndX>CircleValue[CircleShapNum].StartX)Xinc=1;
else if (CircleValue[CircleShapNum].EndX<CircleValue[CircleShapNum].StartX)Xdec=1;
if (Xdec==1&&Xinc==1){DispErrCode(24);return FALSE;}
break;
default:
DispErrCode(37);return FALSE;
break;
}
}
return TRUE;
}
FP32 G73ConstructionFunc(FP32 Xpos){
INT8U i,Num;
BOOLEAN b_Line;
BOOLEAN b_Circle;
for (i=1;i<AllNum;i++){
if(Xpos<=LineValue[i].EndX&&Xpos>=LineValue[i].StartX)
{
Num=i;b_Line=1;
}
else if(Xpos<=CircleValue[i].EndX&&Xpos>=CircleValue[i].StartX)
{
Num=i;b_Circle=1;
}
else{;}
}
if(b_Line){
return (Xpos-LineValue[Num].StartX)*LineValue[Num].K+LineValue[Num].StartZ;
}
if(b_Circle){
return sqrt(CircleValue[Num].R*CircleValue[Num].R-(Xpos-CircleValue[Num].I)*(Xpos-CircleValue[Num].I))+CircleValue[Num].K;
}
return 0.0;
}
INT32U G73FindStartHang(INT32U Hang){
INT32U i;
INT8U j,k,Err;
INT8U buf[10];
INT32U FindHang;
i=g_DataBuf.ProgAdd[g_Usrparam.CurrentFileNum];
while(1){
if (g_DataBuf.DataBuf[i]=='N'){
j=0;i++;Err=0;
while(g_DataBuf.DataBuf[i]>='0'&&g_DataBuf.DataBuf[i]<='9'){
buf[j]=g_DataBuf.DataBuf[i];
j++;i++;
if (i>=g_DataBuf.DataLength)return 0xfffff;
if (j>6){Err=1;break;}
}
if (Err==0){
k=0;FindHang=0;
while(j){
FindHang=(buf[k]-'0')+FindHang*10;
k++;
j--;
}
if (Hang==FindHang){
return i;
}
}
else{;}
}
else{
i++;
if (i>=g_DataBuf.DataLength)return 0xfffff;
if (g_DataBuf.DataBuf[i]=='%'){
return 0xfffff;
}
}
}
}
void G73ResetPara(void){
bX_Code=0;
bZ_Code=0;
bU_Code=0;
bW_Code=0;
bI_Code=0;
bK_Code=0;
bR_Code=0;
bM_Code=0;
bG_Code=0;
bN_Code=0;
iM_Code=0;
iG_Code=0;
G73_Pos_U=0;
G73_Pos_W=0;
G73_Pos_X=0;
G73_Pos_Z=0;
G73_Pos_I=0;
G73_Pos_K=0;
G73_Pos_R=0;
G73.Xremain=0;
G73.Zremain=0;
G73.StartHang=0;
G73.EndHang=0;
G73.Xaction=0;
G73.Zaction=0;
G73.LoopCount=0;
}
/*
BOOLEAN G73Motion(void)
{
INT8U j,k,ret;
BOOLEAN bCircle,bLine;
g_Current_ASpeed=g_Current_PSpeed*g_Current_Inp_Rate;
if(g_Current_ASpeed>g_Sysparam.Max_FastSpeed)
g_Current_ASpeed=g_Sysparam.Max_FastSpeed;
Set_InpSpeed(g_Current_ASpeed);
while(1){
g_MoveMode=1;
G01_AbsPos(LineValue[1].StartX,LineValue[1].StartZ);
ret=WaitMotionEnd();
if(ret==255)return TRUE;
if(ret==0)break;
}
bCircle=0;bLine=0;
for (j=2;j<=AllNum;j++){
for (k=1;k<MAXNUMBER;k++){
if (CircleValue[k].Pos==j){
bCircle=1;
break;
}
if (LineValue[k].Pos==j){
bLine=1;
break;
}
}
if (bLine){
g_Current_ASpeed=g_Current_PSpeed*g_Current_Inp_Rate;
if(g_Current_ASpeed>g_Sysparam.Max_FastSpeed)
g_Current_ASpeed=g_Sysparam.Max_FastSpeed;
Set_InpSpeed(g_Current_ASpeed);
while(1){
g_MoveMode=1;
G01_AbsPos(LineValue[k].EndX,LineValue[k].EndZ);
ret=WaitMotionEnd();
if(ret==255)return TRUE;
if(ret==0)break;
}
}
if (bCircle){
g_Current_ASpeed=g_Current_PSpeed*g_Current_Inp_Rate;
if(g_Current_ASpeed>g_Sysparam.Max_FastSpeed)
g_Current_ASpeed=g_Sysparam.Max_FastSpeed;
Set_InpSpeed(g_Current_ASpeed);
//if(CircleValue[k].Cw==2)
//{
// ret=G02G03_CW_ZX(CircleValue[k].EndX,CircleValue[k].EndZ,0,CircleValue[k].I,CircleValue[k].K,FALSE);
// if(ret)return TRUE;
//}
//else
//{
// ret=G02G03_CW_ZX(CircleValue[k].EndX,CircleValue[k].EndZ,0,CircleValue[k].I,CircleValue[k].K,TRUE);
// if(ret)return TRUE;
//}
while(1){
if(CircleValue[CircleShapNum].Cw==2)
G02_AbsPos(CircleValue[k].EndX,CircleValue[k].EndZ,CircleValue[k].I,CircleValue[k].K);
else
G03_AbsPos(CircleValue[k].EndX,CircleValue[k].EndZ,CircleValue[k].I,CircleValue[k].K);
g_MoveMode=1;
ret=WaitMotionEnd();
if(ret==255)return TRUE;//停止运行
if(ret==0)break;//运行结束
}
}
bCircle=0;bLine=0;
}
return TRUE;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -