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

📄 processg71.c

📁 控制电机运动的G代码程序,如果对G代码不清楚,请先看懂G代码,然后再看本程序.
💻 C
📖 第 1 页 / 共 3 页
字号:
			return 2;//注释超长大于255个字符
			break;
		case 0x0d:
		     G71.CurrentNum++;
		    break;
		case 0x0a:
			*First=s;
			G71.CurrentNum++;
			if(G71.CurrentNum>=g_DataBuf.DataLength)
			{	
				buf[0]=0x0;
				*End=FALSE;
				return 255;			
			}
			return 0;//一行代码结束
			break;
		case 'A':case 'B':case 'C':case 'D':case 'E':
		case 'F':case 'G':case 'H':case 'I':case 'J':
		case 'K':case 'L':case 'M':case 'N':case 'O':
		case 'P':case 'Q':case 'R':case 'S':case 'T':
		case 'U':case 'V':case 'W':case 'X':case 'Y':case 'Z':
			*First=s;
			i=0;
			while(i<=255)//一行代码不得大于255个字符
			{
				G71.CurrentNum++;
				if(G71.CurrentNum>=g_DataBuf.DataLength)//是否超出
				{
					buf[0]=0x0;
					*End=TRUE;
					return 255;	
				}
				s=g_DataBuf.DataBuf[G71.CurrentNum];
				if((s>='0' && s<='9') || s=='.' || s=='-' || s=='+')
				{
					buf[i]=s;		//
					i++;
				}
				else if(s==0x0a)    //回车符
				{
					buf[i]=0x00;
					*End=FALSE;
					G71.CurrentNum++;
					if(G71.CurrentNum>=g_DataBuf.DataLength)
						return 255;			
					return 0;//一行代码结束
				}
				else if(s!=0x0d)	//非换行符
				{
					buf[i]=0x00;
					*End=FALSE;
					return 5;//字代码结束
				}
			}
			return 2; //数据超长	
			break;
		default:
			*First=s;
			buf[0]=0x00;
			*End=TRUE;
			return 3;//其它的字
		}
	}
}
 
INT8U G71ProcessAllCode(INT32U EndHang)
{
	INT8U 		    Error;
	INT8U 		    End;
	INT8U 		    num,len;
	INT8U 		    First,buf[255];
	INT8U           j,k;
	INT32U          Hang;
	while(1){			    
        Error=G71GetNextSeg(&First,buf,&End);
        if(Error != 0 &&  Error !=5)break;
		if(End)break;

		switch(First)
		{
		case '%':		
		case '/':		
		case '(':		
		case 0x0d:
		case 0x0a:
             break;
		case 'N':	  
			 if(strlen((char *)buf)==0){Error=71;break;}//buf中字符个数为零中返回
			 if(bN_Code==1) {Error=71;break;}
			 
			 k=0;Hang=0;j=strlen((char *)buf);
	         while(j)
	         {
	               Hang=(buf[k]-'0')+Hang*10; 
              	   k++; 
              	   j--;    
	         }
	         if(EndHang==Hang)//起始行与结束行相同
			 {
			   G71_bEnd=1;
			   G71ResetPara(); 
			 }
   		     bN_Code=TRUE;
			 break;
		case 'G':	
			len=strlen((char *)buf);
			if(len !=1 && len !=2 ){Error=71;break;}
			if(len==1) num=buf[0]-'0';
			else       num=(buf[0]-'0')*10+buf[1]-'0';
			switch(num){
			  case 0:		
			  case 1:		
			  case 2:		
			  case 3:	
			  case 4:	
				  bG_Code=1;
				  break;
			  default:
			      Error=71;
				  break;
			}
			iG_Code=num;
			break;
		case 'M':		
			len=strlen((char *)buf);
			if(len !=1 && len !=2 ){Error=71;break;}
			if(len==1) num=buf[0]-'0';
			else       num=(buf[0]-'0')*10+buf[1]-'0';
			switch(num)
			{
			  case 3:		
			  case 4:		
			  case 5:		
			  case 8:		
			  case 9:		
			  case 10:	
			  case 11:	
			  case 32:
			  case 33:
				   iM_Code=num;
				   bM_Code=1;
				   break;
			  case 0:		
				   g_IsRun=2;
				   break;
			  default:
				   Error=71;
				   break;
			}		
			break;
		case 'X':
			if(strlen((char *)buf)==0){Error=71;break;}
			if(bU_Code||bX_Code){Error=71;break;}
			G71_Pos_X=BfFromStr(buf);
			if(g_Sysparam.DiaOrRadius)G71_Pos_X=G71_Pos_X/2;
		    bX_Code=TRUE;
			break;
		case 'Z':		
			if(strlen((char *)buf)==0){Error=71;break;}
			if(bW_Code||bZ_Code){Error=71;break;}
			G71_Pos_Z=BfFromStr(buf);
			bZ_Code=TRUE;
			break;
		case 'U':	
		    if(strlen((char *)buf)==0){Error=71;break;}
			if(bX_Code||bU_Code){Error=71;break;}
			G71_Pos_U=BfFromStr(buf);
		    if(g_Sysparam.DiaOrRadius)G71_Pos_U=G71_Pos_U/2;
			bU_Code =TRUE;
			break;
		case 'W':	
			if(strlen((char *)buf)==0){Error=71;break;}
			if(bZ_Code||bW_Code){Error=71;break;}
			G71_Pos_W=BfFromStr(buf);
			bW_Code = 1;
			break;
		case 'I':		
			if(strlen((char *)buf)==0){Error=71;break;}
			if(bI_Code){Error=71;break;}
			G71_Pos_I=BfFromStr(buf);
			bI_Code = TRUE;
			break;
		case 'K':		
			if(strlen((char *)buf)==0){Error=71;break;}
			if(bK_Code){Error=71;break;}
			G71_Pos_K=BfFromStr(buf);
			bK_Code = TRUE;
			break;
		case 'R':		
			if(strlen((char *)buf)==0){Error=71;break;}
			if(bR_Code){Error=71;break;}
			G71_Pos_R=BfFromStr(buf);
			bR_Code = TRUE;
			break;
        default:
	        break;
		}
        if (Error==0)
        {
	         if(G71ProcessHangCode()==FALSE)Error=7;
	         if(G71_bEnd){Error=6;}
			 G71ResetPara();
		}
	    if (Error==6)break;
		if (Error==7)break;
		if (Error==71)break;
    }
	return Error;
}

BOOLEAN G71ProcessHangCode(void)
{
    INT8U   i;

	if(iM_Code!=100 && iM_Code!=98 && iM_Code!=99)
	{
		switch(iM_Code)							//73-G7X循环中不支持辅助功能"
		{
		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)	  G71_Abs_PosX=G71_Pos_X;
			     else if(bU_Code) G71_Abs_PosX=G71_Pos_U+Get_AbsPos(1);
			     else             G71_Abs_PosX=Get_AbsPos(1);
			     if(bZ_Code)      G71_Abs_PosZ=G71_Pos_Z;
			     else if(bW_Code) G71_Abs_PosZ=G71_Pos_W+Get_AbsPos(3);
			     else             G71_Abs_PosZ=Get_AbsPos(3);
			     
			     LineValue[LineShapNum].StartX=G71_Abs_PosX;
			     LineValue[LineShapNum].StartZ=G71_Abs_PosZ;
			     LineValue[LineShapNum].EndX=G71_Abs_PosX;
			     LineValue[LineShapNum].EndZ=G71_Abs_PosZ;
			     LineValue[LineShapNum].Pos=AllNum;
			     break;   
			}
			if(bX_Code)		 G71_Abs_PosX=G71_Pos_X;
			else if(bU_Code) G71_Abs_PosX=G71_Pos_U+LineValue[LineShapNum].StartX;
			else             G71_Abs_PosX=LineValue[LineShapNum].StartX;
			if(bZ_Code)      G71_Abs_PosZ=G71_Pos_Z;
			else if(bW_Code) G71_Abs_PosZ=G71_Pos_W+LineValue[LineShapNum].StartZ;
			else             G71_Abs_PosZ=LineValue[LineShapNum].StartZ;
			
			LineValue[LineShapNum].EndX=G71_Abs_PosX;
			LineValue[LineShapNum].EndZ=G71_Abs_PosZ;
			LineValue[LineShapNum].Pos=AllNum;
			if (LineValue[LineShapNum].EndX!=LineValue[LineShapNum].StartX)		
			     LineValue[LineShapNum].K=(LineValue[LineShapNum].EndZ-LineValue[LineShapNum].StartZ)/(LineValue[LineShapNum].EndX-LineValue[LineShapNum].StartX);
			
			if (LineValue[LineShapNum].EndZ>LineValue[LineShapNum].StartZ)Zinc=1;
			else if(LineValue[LineShapNum].EndZ<LineValue[LineShapNum].StartZ)Zdec=1;
			if (Zdec==1 && Zinc==1)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)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)	  G71_Abs_PosX=G71_Pos_X;
			     else if(bU_Code) G71_Abs_PosX=G71_Pos_U+Get_AbsPos(1);
			     else             G71_Abs_PosX=Get_AbsPos(1);
			     if(bZ_Code)      G71_Abs_PosZ=G71_Pos_Z;
			     else if(bW_Code) G71_Abs_PosZ=G71_Pos_W+Get_AbsPos(3);
			     else             G71_Abs_PosZ=Get_AbsPos(3);
			     
			     LineValue[LineShapNum].StartX=G71_Abs_PosX;
			     LineValue[LineShapNum].StartZ=G71_Abs_PosZ;
			     LineValue[LineShapNum].EndX=G71_Abs_PosX;
			     LineValue[LineShapNum].EndZ=G71_Abs_PosZ;
			     LineValue[LineShapNum].Pos=AllNum;
			     break;     
			}

			if(bX_Code)		 G71_Abs_PosX=G71_Pos_X;
			else if(bU_Code) G71_Abs_PosX=G71_Pos_U+LineValue[LineShapNum].StartX;
			else             G71_Abs_PosX=LineValue[LineShapNum].StartX;
			
			if(bZ_Code)      G71_Abs_PosZ=G71_Pos_Z;
			else if(bW_Code) G71_Abs_PosZ=G71_Pos_W+LineValue[LineShapNum].StartZ;
			else             G71_Abs_PosZ=LineValue[LineShapNum].StartZ;
			
			LineValue[LineShapNum].EndX=G71_Abs_PosX;
			LineValue[LineShapNum].EndZ=G71_Abs_PosZ;
			LineValue[LineShapNum].Pos=AllNum;
			
	        if (LineValue[LineShapNum].EndX!=LineValue[LineShapNum].StartX)		
			     LineValue[LineShapNum].K=(LineValue[LineShapNum].EndZ-LineValue[LineShapNum].StartZ)/(LineValue[LineShapNum].EndX-LineValue[LineShapNum].StartX);


			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){

⌨️ 快捷键说明

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