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

📄 processg71.c

📁 控制电机运动的G代码程序,如果对G代码不清楚,请先看懂G代码,然后再看本程序.
💻 C
📖 第 1 页 / 共 3 页
字号:
			    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)      G71_Abs_PosX=G71_Pos_X;
			else if(bU_Code) G71_Abs_PosX=G71_Pos_U+CircleValue[CircleShapNum].StartX;
			else             G71_Abs_PosX=CircleValue[CircleShapNum].StartX;
				
			if(bZ_Code)      G71_Abs_PosZ=G71_Pos_Z;
			else if(bW_Code) G71_Abs_PosZ=G71_Pos_W+CircleValue[CircleShapNum].StartZ;
			else             G71_Abs_PosZ=CircleValue[CircleShapNum].StartZ;
			
		    if(bR_Code){
			     if(G71_Pos_R==0){DispErrCode(25);return FALSE;}
				 if(iG_Code==3)G71_Pos_R=-G71_Pos_R;
				 if(GetCircleCenter(G71_Abs_PosX-CircleValue[CircleShapNum].StartX,G71_Abs_PosZ-CircleValue[CircleShapNum].StartZ,G71_Pos_R,&G71_Abs_PosI,&G71_Abs_PosK)){DispErrCode(29);return FALSE;}
				 G71_Abs_PosI+=CircleValue[CircleShapNum].StartX;
				 G71_Abs_PosK+=CircleValue[CircleShapNum].StartZ;
			}
			else
			{
			 	 if(bI_Code) G71_Abs_PosI=G71_Pos_I+CircleValue[CircleShapNum].StartX;
				 else        G71_Abs_PosI=CircleValue[CircleShapNum].StartX;
				 if(bK_Code) G71_Abs_PosK=G71_Pos_K+CircleValue[CircleShapNum].StartZ;
				 else        G71_Abs_PosK=CircleValue[CircleShapNum].StartZ;
			}

			CircleValue[CircleShapNum].EndX=G71_Abs_PosX;
			CircleValue[CircleShapNum].EndZ=G71_Abs_PosZ;
			CircleValue[CircleShapNum].I=G71_Abs_PosI;
			CircleValue[CircleShapNum].K=G71_Abs_PosK;
			CircleValue[CircleShapNum].R=G71_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 G71ConstructionFunc1(FP32  Xpos)//解释
{

    INT8U      i,Num;
    BOOLEAN    b_Line;
	BOOLEAN    b_Circle;

    b_Circle=0;b_Line=0;
	for (i=1;i<=AllNum;i++)
	{
         if(Xpos<=LineValue[i].EndX && Xpos>=LineValue[i].StartX)
	     {
	         Num=i;b_Line=TRUE;break;
	     }
	     if(Xpos<=CircleValue[i].EndX && Xpos>=CircleValue[i].StartX)
	     {
		     Num=i;b_Circle=TRUE;break;
	     }	   
	}
    if(b_Line)
    {
         if(LineValue[Num].K==0)  return  LineValue[Num].EndZ;
	     return (Xpos-LineValue[Num].StartX)*LineValue[Num].K+LineValue[Num].StartZ;
	}
	if(b_Circle)
	{
	     if(!bit && CircleValue[Num].Cw==3)
	          return -sqrt(CircleValue[Num].R*CircleValue[Num].R-(Xpos-CircleValue[Num].I)*(Xpos-CircleValue[Num].I))+CircleValue[Num].K;
	     if(!bit && CircleValue[Num].Cw==2)
	          return sqrt(CircleValue[Num].R*CircleValue[Num].R-(Xpos-CircleValue[Num].I)*(Xpos-CircleValue[Num].I))+CircleValue[Num].K;
	     if(bit && CircleValue[Num].Cw==3)
	          return -sqrt(CircleValue[Num].R*CircleValue[Num].R-(Xpos-CircleValue[Num].I)*(Xpos-CircleValue[Num].I))+CircleValue[Num].K;
	     if(bit && CircleValue[Num].Cw==2)
	          return sqrt(CircleValue[Num].R*CircleValue[Num].R-(Xpos-CircleValue[Num].I)*(Xpos-CircleValue[Num].I))+CircleValue[Num].K;	
	}
	DispErrCode(38);//"运动中计算错误,系统溢出"
	return 0;	//add by zxj at 2006.10.23
}


FP32 G71ConstructionFunc(FP32  Xpos)//解释
{

    INT8U      i,Num;
    BOOLEAN    b_Line;
	BOOLEAN    b_Circle;
    b_Circle=0;b_Line=0;
    if(inner==TRUE)
    {
    	for (i=1;i<=AllNum;i++)
		{
	         if(Xpos<=LineValue[i].EndX && Xpos>=LineValue[i].StartX )
		     {
		         Num=i;b_Line=TRUE;break;
		     }

		     if(Xpos<=CircleValue[i].EndX && Xpos>=CircleValue[i].StartX)
		     {
			     Num=i;b_Circle=TRUE;break;
		     }	 

		}
    }
    else if(inner==FALSE)
    {
		for (i=AllNum;i>=1;i--)
		{
		     if(Xpos<=LineValue[i].StartX && Xpos>=LineValue[i].EndX )
		     {

		      	 Num=i;b_Line=TRUE;break;
		     }
 
		     if(Xpos<=CircleValue[i].StartX && Xpos>=CircleValue[i].EndX )
		     {
		     	 Num=i;b_Circle=TRUE;break;
		     }  
		}
	}
    if(b_Line)
    {
         if(LineValue[Num].K==0)  return  LineValue[Num].EndZ;
         return (Xpos-LineValue[Num].StartX)*LineValue[Num].K+LineValue[Num].StartZ;//垂直高度*斜率=水平距离
         if(inner==FALSE)
         {
         return LineValue[Num].EndZ-(LineValue[Num].StartX-Xpos)/LineValue[Num].K;
         }
	     
	}
	if(b_Circle)
	{
	     if(!bit && CircleValue[Num].Cw==3)
	          return -sqrt(CircleValue[Num].R*CircleValue[Num].R-(Xpos-CircleValue[Num].I)*(Xpos-CircleValue[Num].I))+CircleValue[Num].K;
	     if(!bit && CircleValue[Num].Cw==2)
	          return sqrt(CircleValue[Num].R*CircleValue[Num].R-(Xpos-CircleValue[Num].I)*(Xpos-CircleValue[Num].I))+CircleValue[Num].K;
	     if(bit && CircleValue[Num].Cw==3)
	     {
	     	if(inner==FALSE)return sqrt(CircleValue[Num].R*CircleValue[Num].R-(Xpos-CircleValue[Num].I)*(Xpos-CircleValue[Num].I))+CircleValue[Num].K;
	     	return -sqrt(CircleValue[Num].R*CircleValue[Num].R-(Xpos-CircleValue[Num].I)*(Xpos-CircleValue[Num].I))+CircleValue[Num].K;
	     }
	     if(bit && CircleValue[Num].Cw==2)
	     {	
	     	if(inner==FALSE) return -sqrt(CircleValue[Num].R*CircleValue[Num].R-(Xpos-CircleValue[Num].I)*(Xpos-CircleValue[Num].I))+CircleValue[Num].K;	//内圆
			return sqrt(CircleValue[Num].R*CircleValue[Num].R-(Xpos-CircleValue[Num].I)*(Xpos-CircleValue[Num].I))+CircleValue[Num].K;						//外圆
	     
	     }     
	}
	DispErrCode(38);//"运动中计算错误,系统溢出"
	return 0;	//add by zxj at 2006.10.23
}


INT32U G71FindStartHang(INT32U Hang)
{

    INT32U     i;
	INT8U      j,k,Err;
	INT8U      buf[10];
	INT32U     FindHang;
    
    i=g_DataBuf.ProgAdd[g_Usrparam.CurrentFileNum];//当前程序号
    //Uart_Printf("\n 当前程序文件 i=%d",i);
    while(1)
    {
        if (g_DataBuf.DataBuf[i]=='N')
        {
	      j=0;i++;Err=0;
	      while(g_DataBuf.DataBuf[i]>='0'&&g_DataBuf.DataBuf[i]<='9')//0-9数字
	      {
		     buf[j]=g_DataBuf.DataBuf[i];							//取指令
		     j++;i++;
		     if (i>=g_DataBuf.DataLength)return 0xfffff;
		     if (j>6){Err=1;break;}									//数字长度大于6
		  }
	      if (Err==0)
	      {
	          k=0;FindHang=0;
	          while(j)
	          {
	               FindHang=(buf[k]-'0')+FindHang*10; 				//去掉N
              	   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 G71ResetPara(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;
    
   G71_Pos_U=0;	
   G71_Pos_W=0;
   G71_Pos_X=0;
   G71_Pos_Z=0;
   G71_Pos_I=0;
   G71_Pos_K=0;
   G71_Pos_R=0;
   G71.XaddPerTime=0;
   G71.Zremain=0;
   G71.Xremain=0;
   G71.BackValue=0;
   G71.StartHang=0;
   G71.EndHang=0; // 结束行
   
}

/*

BOOLEAN G71Motion(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=TRUE;
			      break;
			   }
			   if (LineValue[k].Pos==j)
			   {
			      bLine=TRUE;
                  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=FALSE;bLine=FALSE;	      
	 }
     return TRUE;
}
*/

⌨️ 快捷键说明

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