注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

记录创意的火花

天天学习,好好向上

 
 
 

日志

 
 

基于GT400运动控制卡的G代码解释执行  

2010-01-11 14:40:40|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

/*XY数控平台*/
#include <stdio.h>
#include <math.h>
#include <process.h>
#include <stdlib.h>
#include <afxwin.h>
#include "GT400SG.H"
void error(short rtn)             //返回值处理函数,rtn为函数返回值
{
 switch(rtn)
 {
 case -1:printf("error:communciation error\n"); break;
 case 0:break;
 case 1:printf("error:comand error\n");break;
 case 2:
 case 3:
 case 4:
 case 5:
 case 7:
  printf("error:parameter error\n");break;
 case 6:printf("error:map is error\n");break;
 default:
  break;
 }
}
void AxisInitial()                //控制轴初始化函数
{
 short rtn;

 for(int i=0;i<4;i++)
 {
  rtn=GT_Axis(i);            error(rtn);
  rtn=GT_ClrSts();           error(rtn);
  rtn=GT_StepPulse();        error(rtn);
        rtn=GT_AxisOn();           error(rtn);
 }
}
void GTInitial()                  //运动控制卡初始化函数
{
 short rtn;
 rtn=GT_Open();                 error(rtn);
 rtn=GT_Reset();                error(rtn);
 rtn=GT_SwitchtoCardNo(1);      error(rtn);
 rtn=GT_SetSmplTm(200);         error(rtn);
 for(int i=0;i<5;i++)
 {
  rtn=GT_Axis(i);
        rtn=GT_SetIntrMsk(0);
 }
}
void InputCfg()                   //专用输入信号参数设置
{
 short rtn;
 unsigned short Lmtsense=0xF;
 /*unsigned int Encsense=0;*/                                     //此为伺服电机编码器初始化部分 
 rtn=GT_LmtSns(Lmtsense);       error(rtn);
   /* rtn=GT_EncSns(Encsense);       error(rtn);*/                 //此为伺服电机编码器初始化部分
}
void MapAxis()                    //单位换算坐标映射
{
 short rtn;
 double cnt1[5]={2000,0,0,0,0};
    double cnt2[5]={0,2000,0,0,0};
 rtn=GT_MapAxis(1,cnt1);        error(rtn);
 rtn=GT_MapAxis(2,cnt2);        error(rtn);
}
void Quit()                    //结束程序时关闭各轴
{
 short rtn;
 for(unsigned short i=1;i<5;i++)
 {
  rtn=GT_Axis(i);            error(rtn);
  rtn=GT_AxisOff();          error(rtn);
  rtn=GT_Update();           error(rtn);
 }
}
void home(long pos)            //复位函数
{
 unsigned short status;
 short rtn;
 long actl_pos;
    rtn=GT_ClrSts();               error(rtn);
 rtn=GT_CaptHome();             error(rtn);
 rtn=GT_PrflT();                error(rtn);
 rtn=GT_SetVel(4);              error(rtn);
 rtn=GT_SetAcc(1);              error(rtn);
 rtn=GT_SetPos(pos);            error(rtn);
 rtn=GT_Update();               error(rtn);
 rtn=GT_GetSts(&status);        error(rtn);
 while(!(status&0x8))
 {
  if(status&0x1)
   return;
  rtn=GT_GetSts(&status);    error(rtn);
 }
 rtn=GT_GetCapt(&pos);           error(rtn);
 rtn=GT_SetPos(pos);            error(rtn);
 rtn=GT_Update();               error(rtn);
 rtn=GT_ClrSts();               error(rtn);
 rtn=GT_GetSts(&status);        error(rtn);
    while(!(status&0x1))
 {
  rtn=GT_GetSts(&status);    error(rtn);
 }
 rtn=GT_ZeroPos();              error(rtn);
}
int ReadNum(FILE *fp,char c,float *a)         /*从文件中读取一个非空字符并判断是否为指定字符,是则将其后的字符串存入指定位置*/
{
 char ch;
 do
 {
  ch=fgetc(fp);
 }while(ch==' '||ch=='\n');
    if(ch==c)
 {
  fscanf(fp,"%f",a);
  return 1;
 }
 else
 {
  fseek(fp,-1L,1);
  return 0;
 }
}
void main()
{
 short rtn;                                
 int g;
 char ch;
 char fileaddr[40];
 float r,v,x1,y1,x2,y2,f1,a1,d1=0,x3=0,y3=0;                  //x3为刀补后的终点坐标增量,d1为刀补半径
 float *x,*y,*f,*a,*d;
 FILE *fp;
 x=&x1;
 x1=x2=0;
 y=&y1;
 y1=y2=0;
 f=&f1;
 a=&a1;
 d=&d1;
 GTInitial();
 InputCfg();
 AxisInitial();
 MapAxis();
 printf("请输入源程序文件地址:\n");
 scanf("%s",fileaddr);
 printf("正在打开源程序........\n");
 if((fp=fopen(fileaddr,"r"))==NULL)
 {
  printf("无法找到源程序文件!\n按任意键退出!\n");
  getchar();
  exit(1);
 }
 rtn=GT_StrtList();                  error(rtn);
 rtn=GT_MvXY(0,0,0.01,0.00000001);  error(rtn);
 rtn=GT_EndList();                  error(rtn);
 rtn=GT_StrtMtn();                   error(rtn);
 ch=fgetc(fp);
 do
 {
  x1=x2;
  y1=y2;
  if(ch!='N')
  {
   printf("00程序格式错误!\n按任意键退出\n");
   getchar();
   exit(1);
  }
  do
  {
   ch=fgetc(fp);
  }while(ch!=' '&&ch!='\n');
  if(ReadNum(fp,'G',a))
   g=(int)(*a);
        ReadNum(fp,'D',d);
  ReadNum(fp,'X',x);
  ReadNum(fp,'Y',y);
                ReadNum(fp,'R',r);
  if (ReadNum(fp,'F',f))
  {
   v=*f/300000;
   if (ReadNum(fp,'L',a))
   {
    if (fgetc(fp)=='F')
    {
     switch(g)
     {
     case 01:                                                                                                                              short rtn
                                                rtn=GT_AddList();               error(rtn);
      rtn=GT_SetSynVel(v);            error(rtn);
      rtn=GT_SetSynAcc(1);   error(rtn);     //加速度0.9m/min
                                                rtn=GT_LnXY(x2,y2);             error(rtn);
      rtn=GT_EndList();               error(rtn);        
      break;
     case 02:
      short rtn
                                                rtn=GT_SetSynVel(v);            error(rtn);
      rtn=GT_SetSynAcc(1);   error(rtn);     //加速度0.9m/min
                                                rtn=GT_ArcXYP(x2,y2,r,-1);      error(rtn);
                                                break;
     case 03:
                                                short rtn
                                                rtn=GT_SetSynVel(v);            error(rtn);
      rtn=GT_SetSynAcc(1);   error(rtn);     //加速度0.9m/min
                                                rtn=GT_ArcXYP(x2,y2,r,1);      error(rtn);
      
             break;
     default:printf("01 程序格式错误!\n按任意键退出\n");
      getchar();
      exit(1);
      break;
     }
    }
    else
    {
     printf("02程序格式错误!\n按任意键退出\n");
     getchar();
     exit(1);
    }
    do
    {
     ch=fgetc(fp);
    } while(ch==' '||ch=='\n');
   }
  }


 }while (ch!=EOF);
 rtn=GT_StrtMtn();                                  error(rtn);
 fclose(fp);
 printf("按任意键急停!\n");
 getchar();
 Quit();
 printf("程序运行结束\n");
}

  评论这张
 
阅读(1823)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017