g代码如下

T1M6
G17
G0Z5.000
G0X0.000Y0.000S15000M3
G0X6.920Y10.816Z5.000
G1Z0.000F240.0
G1X6.461Y10.758F600.0
G3X6.009Y10.361I0.268J-0.763
G1X5.922Y9.917
Y9.008
G3X6.873Y8.456I0.675J0.067
G3X7.237Y8.775I-0.216J0.614
G3X7.291Y9.325I-1.167J0.392
G1X8.406
G3X8.606Y8.584I0.778J-0.187
G3X9.574I0.484J0.573
G3X9.775Y9.008I-0.363J0.431
G1Y10.071
G3X8.816Y10.816I-0.838J-0.089
G1Y16.796
X10.009
X10.034Y11.219
G3X11.329Y9.669I2.077J0.420
G1Y3.814
G3X10.251Y2.999I0.918J-2.336
G3X9.833Y1.768I1.632J-1.239
G1X14.947
G0Z5.000
G0X0.000Y0.000
G0Z5.000
G0X0.000Y0.000
M30

c语言程序:

struct coord
{
double x;
double y;
double z;
double i;
double j;
};//g代码参数结构体
struct coord cord[20];
void get012()//读取g代码中012
{int h=1;int m;double centerx,centery,R,theta,theta0,deltatheta;if(is2!=0)h=is2;for(m=0;m<h;m++){printf("%s",buf);switch (buf[1]){case '0':{ if(buf[2]=='Z')break;else{//printf("H%d %f %f",m,cord[m+1].x,cord[0].x);quickcoord(cord[0].x*200,cord[m+1].x*200,cord[0].y*200,cord[m+1].y*200);//快速进给函数cord[0].x=cord[m+1].x;cord[0].y=cord[m+1].y;}                                break; }case '1':{  if(buf[2]=='7'){printf("  xy\n");break;}else if(buf[2]=='Z')break;else {printf("    linerun:%f %f %f %f\n",cord[0].x*200,cord[0].y*200,cord[m+1].x*200,cord[m+1].y*200);LineRunin(cord[0].x*200,cord[0].y*200,cord[m+1].x*200,cord[m+1].y*200,1);//直线插补函数cord[0].x=cord[m+1].x;cord[0].y=cord[m+1].y;}break; }case '2': printf("    scircle:\n"); centerx=cord[0].x+cord[m+1].i;centery=cord[0].y+cord[m+1].j;                                  R=sqrt(cord[m+1].i*cord[m+1].i+cord[m+1].j*cord[m+1].j);  if(cord[m+1].i==0&&cord[m+1].j>0)theta=3/2.*PI; else if(cord[m+1].i==0&&cord[m+1].j<0)theta=1/2.*PI;                                        else if(cord[m+1].i>0)theta=atan(cord[m+1].j/cord[m+1].i)+PI;else if(cord[m+1].i<0&&cord[m+1].j>0)                                       theta=atan(cord[m+1].j/cord[m+1].i)+2*PI;else if(cord[m+1].i<0&&(cord[m+1].j<0||cord[m+1].j==0))theta=atan(cord[m+1].j/cord[m+1].i);if(centerx==cord[m+1].x&&centery>cord[m+1].y)theta0=3/2.*PI; else if(centerx==cord[m+1].x&&centery<cord[m+1].y)theta0=1/2.*PI;   else if(centerx>cord[m+1].x)theta0=atan((cord[m+1].y-centery)/(cord[m+1].x-centerx))+PI;else if(centerx<cord[m+1].x&&centery<cord[m+1].y)theta0=atan((cord[m+1].y-centery)/(cord[m+1].x-centerx));
else if(centerx<cord[m+1].x&&(centery>cord[m+1].y||centery==cord[m+1].y))theta0=atan((cord[m+1].y-centery)/(cord[m+1].x-centerx))+2*PI;deltatheta=theta0-theta;if(deltatheta>0)deltatheta=deltatheta-2*PI;                  CircleRunin(R*200,theta,deltatheta);//圆弧插补函数cord[0].x=cord[m+1].x;cord[0].y=cord[m+1].y;break;case '3': printf("    ncircle:\n"); centerx=cord[0].x+cord[m+1].i;centery=cord[0].y+cord[m+1].j;R=sqrt(cord[m+1].i*cord[m+1].i+cord[m+1].j*cord[m+1].j);if(cord[m+1].i==0&&cord[m+1].j>0)theta=3/2.*PI;   else if(cord[m+1].i==0&&cord[m+1].j<0)theta=1/2.*PI;                                     else if(cord[m+1].i>0)theta=atan(cord[m+1].j/cord[m+1].i)+PI;else if(cord[m+1].i<0&&cord[m+1].j>0)theta=atan(cord[m+1].j/cord[m+1].i)+2*PI;else if(cord[m+1].i<0&&(cord[m+1].j<0||cord[m+1].j==0))theta=atan(cord[m+1].j/cord[m+1].i);if(centerx==cord[m+1].x&&centery>cord[m+1].y)theta0=3/2.*PI;   else if(centerx==cord[m+1].x&&centery<cord[m+1].y)theta0=1/2.*PI;   else if(centerx>cord[m+1].x)theta0=atan((cord[m+1].y-centery)/(cord[m+1].x-centerx))+PI;else if(centerx<cord[m+1].x&&centery<cord[m+1].y)theta0=atan((cord[m+1].y-centery)/(cord[m+1].x-centerx));else if(centerx<cord[m+1].x&&(centery>cord[m+1].y||centery==cord[m+1].y))theta0=atan((cord[m+1].y-centery)/(cord[m+1].x-centerx))+2*PI;deltatheta=theta0-theta;if(deltatheta<0)deltatheta=deltatheta+2*PI;CircleRunin(R*200,theta,deltatheta);//圆弧插补函数cord[0].x=cord[m+1].x;cord[0].y=cord[m+1].y;break; default:break;}if(cord[m+1].z>cord[0].z)//z??????z???{raisez();//提刀函数//printf("raise z:%f\n",cord[1].z);cord[0].z=cord[m+1].z;}if(cord[m+1].z<cord[0].z){downz();//落刀函数//printf("drop z:%f\n",cord[1].z);cord[0].z=cord[m+1].z;}}
}
void getxyz()//读取g代码中xyz坐标
{int i;is2=0;//printf("%s",buf);cord[1].y = cord[0].y; cord[1].x = cord[0].x;cord[1].z=cord[0].z;for(i=2;buf[i]!='\0';i++){switch(buf[i]){case '\n':if (buf[i + 1] == '\0' || buf[i + 1] == 'X' || buf[i + 1] == 'Y' || buf[i + 1] == 'Z'){is2++;cord[is2 + 1].y = cord[is2].y; cord[is2 + 1].x = cord[is2].x;cord[is2 + 1].z = cord[is2].z;}break;case 'X':cord[is2+1].x=atof(&buf[i+1]);break;case 'Y':cord[is2+1].y=atof(&buf[i+1]);break;case 'Z':cord[is2+1].z=atof(&buf[i+1]);break;case 'I':if(is2==0)cord[1].i = atof(&buf[i+1]);break;case 'J':if(is2==0)cord[1].j = atof(&buf[i+1]);break;default:break;}}
}int main(void){    int i=0;int f=0;int j=0;delay_init();//ÔÚËùÓÐinitÇ°Motor_Init();LED_GPIO_Config();NVIC_Configuration();Key_GPIO_Config();        USARTx_Config();Microswitch_Init();//ÏÞλ¿ª¹ØEXTIX_Init();TIM3_PWM_Init(199,7199);LED1(1);flag = 1;downz();printf("%f %f",cord[0].x,cord[0].y);while(1)                            {   if(ok==1)  {printf("%s %d %d",buf,num,flag);for(j=0;j<num;){if(flag==1){if (buf1[j] == 'o')//??g???????o,??????{buf[i] = '\n';buf[i+1] = '\0';//printf("%so\t", buf);getxyz();get012();i = 0;f = 0;}if (f == 1 && buf1[j] == 'G'){ buf[i] = '\0'; //printf("%sG\t", buf); getxyz();get012();i = 0;f=0;}if (buf1[j] == 'G')//?G???????buf????    f = 1;if (f == 1){buf[i] = buf1[j]; //printf("%c",buf[i]);i++;}j++;}                  }printf("finish! ");num=0;ok=0;    }        LED1(flag);//XPosition('+');} }

解析g代码c语言程序相关推荐

  1. g代码解释程序 java_解析g代码c语言程序

    g代码如下 T1M6 G17 G0Z5.000 G0X0.000Y0.000S15000M3 G0X6.920Y10.816Z5.000 G1Z0.000F240.0 G1X6.461Y10.758F ...

  2. c语言分隔符的作用,句子分割代码(C语言程序的语句分隔符是)

    C#代码中sql 语句段分割 sql server 查询分析器能分析到底当前语句是否结束 可能中间有多个回车. 涉及程序设计 语义的解释.这个很麻烦, 我记得 看过一篇解析语法的程序设计,很麻烦.还是 ...

  3. 万年历定时关机c语言代码,C语言程序设计能力教程电子万年历设计.doc

    C语言程序设计能力教程电子万年历设计.doc 电子科技大学成都学院课程设计报告电子科技大学成都学院电子工程系课程设计报告课 程 名 称 C语言程序设计能力教程 设 计 题 目 万 年 历 指 导 教师 ...

  4. 抖音程序员表白代码c语言,程序员过情人节:教你做抖音同款表白程序!

    原标题:程序员过情人节:教你做抖音同款表白程序! 最近抖音上一个很简单的vbs告白编程代码视频火了,双击这个编程代码编写的软件后会弹出一个窗口显示一段话,点击确定后会显示下一句.这个小程序很有意思也很 ...

  5. c语言spi测试代码,C语言程序SPI

    #ifndef _V_SPI_ SPCR = (1/ 使能SPI接口,主机模式,LSB低位在先,模式0,16分频,SPI时钟约1MHz #endif } void un_init_SPI(void) ...

  6. c语言9999是合法常量吗,只会G代码不会宏程序,都不敢说自己是老师傅!

    原标题:只会G代码不会宏程序,都不敢说自己是老师傅! 一.变量 普通加工程序直接用数值指定G代码和移动距离:例如,GO1和X100.0.使用用户宏程序时,数值可以直接指定或用变量指定.当用变量时,变量 ...

  7. 吴章金: 实例解析 Linux C 语言程序之变量类型

    license: "cc-by-nc-nd-4.0" "本文从编译.二进制程序文件和运行角度逐级解析了 Linux C 语言程序中几种变量类型" 吴章金老师&l ...

  8. Altium Designer 生成 Mach3 G代码的程序

    Altium Designer做PCB设计,还是很方便的,最近头脑发热,在网上买了一套CNC机床,用来做钻孔用,但是翻来翻去,基本上所有的软件都是铣削功能,而且很多软件很复杂.翻了好几天,发现没有什么 ...

  9. SM3_CNC,轴组,G代码解析,CNC运动控制

    选中对象> 按F1 //获取帮助 说明:  核心函数  SMC_NCInterpreter     // SMC_NC解释器 SMC_Interpolator  插补算法 SM3_CNC库文档 ...

  10. CNC加工中心的G代码详细解析

    G代码是数控程序中的指令.一般都称为G指令. 1. 代码功能 代码名称-功能简述 G00------快速定位 G01------直线插补 G02------顺时针方向圆弧插补 G03------逆时针 ...

最新文章

  1. 剑指offer 算法 (位运算)
  2. java 堆大小的最大值_优化Java堆大小的5个技巧
  3. 基本的Testbench的搭建
  4. python二级简书_12月4日,总结发现杯,备战python二级
  5. win7 64位出现桌面右键鼠标显示忙碌
  6. tableau linux无网络安装_四十二、Linux网络管理,软件安装,进程管理总结
  7. php 使用phpize报错Cannot find config.m4. Make sure that you run ‘/usr/bin/phpize‘ in the top l
  8. 信息系统项目管理师 高级 论文备考专题 老师现场写论文
  9. 云计算 third day
  10. java后台通过http请求下载文件
  11. EDIFACT 标准
  12. 从svn拉下的代码无状态图标(绿色对勾)的解决方法
  13. 硬件设计中电容电感磁珠总结
  14. C#-WinForm登录窗体实现记住密码的功能(仿QQ实现)
  15. (附Matlab程序)(二)基于DCT编码的图像压缩:对分解后的每个数据小方块进行DCT及IDCT变换
  16. 1100 Mars Numbers (20分)
  17. 白云先生推荐书单之夷狄篇
  18. 包含重复元素的全排列
  19. 最近在“折腾”SmartQ5
  20. 职场中你的岗位竞聘PPT是怎么做的?

热门文章

  1. QCC3040---UI tones module
  2. 公益/广告-bloggerads广告是为了钱?[非推广文章哈]
  3. 【Oracle】《Oracle Database 10g SQL 开发指南》中示例文件store_schema.sql的bug修复
  4. 【舞女编程语言】:Ballerina 最新版和Ballerina Central
  5. linux烧录到手机,新人求教,怎么烧录Linux系统到一个小芯片上?
  6. C#简单实现office转pdf、pdf转图片
  7. css单线边框_css中的border-collapse属性如何设置表格边框线?(代码示例)
  8. 免费动态域名解析软件dnspod每步nat123体会
  9. 通过PS制作逼真的车窗玻璃雨滴效果
  10. 你知道如何从零开始学c++游戏编程吗