Gcode头文件分析

Gcode部分就是GRBL中的G代码解释器,因此本部分比较复杂,但是文件整体组成较为简单,只有三个函数和三个结构体以及一些其他变量组成(虽然只有三个函数,但是确实整个项目中代码数量最多的)需要理解gcode解释器,首先需要了解解释器中使用的相关数据结构,因此第一步就是分析gcode部分数据结构!!!

2020-4-14更新

  • 更新了G代码描述块的注释,以及相关G代码在GRBL中的宏定义

2020-4-12更新


gcode解释器的数据结构

数据结构部分

这里我删除了源码中已经被注释的部分

  • 首先是一个整体的结构 block,整个是gcode完成解释之后形成的数据结构,包含了gcode的全部信息,交给后面运动规划部分
typedef struct {uint8_t non_modal_command;    //非模态命令gc_modal_t modal;             //该部分主要记录一些G代码的描述信息gc_values_t values;           //主要记录G代码中的数据部分
} parser_block_t;
//注意:当此结构为零时,上面定义了设置系统的默认值。
//改结构记录了当前block的相关描述信息
//相关G代码信息可以查看附录
typedef struct {uint8_t motion;          // {G0,G1,G2,G3,G38.2,G80} 运动模式uint8_t feed_rate;       // {G93,G94}   给进速度uint8_t units;           // {G20,G21} 单位uint8_t distance;        // {G90,G91} 距离uint8_t plane_select;    // {G17,G18,G19} 平面选择uint8_t tool_length;     // {G43.1,G49} 协调选择uint8_t coord_select;    // {G54,G55,G56,G57,G58,G59} 工件坐标系选择uint8_t program_flow;    // {M0,M1,M2,M30} 程序状态控制uint8_t coolant;         // {M7,M8,M9} 冷却液控制uint8_t spindle;         // {M3,M4,M5} 主轴控制uint8_t override;        // {M56}
} gc_modal_t;

//block块的数据部分,G代码中的坐标信息翻译成此部分

typedef struct {float f;         // 给进速度float ijk[3];    // I,J,K 弧线原点坐标(相对当前位置的坐标)uint8_t l;       // G10 or canned cycles parametersint32_t n;       // 行号float p;         // G10 or dwell parametersfloat r;         // 圆弧半径float s;         // 主轴转速uint8_t t;       // 工具选择float xyz[3];    // xyz移动值(圆弧的终点坐标)
} gc_values_t;
typedef struct {gc_modal_t modal;float spindle_speed;          // 主轴速度float feed_rate;              // 给进速度 mm/minuint8_t tool;                 // 工具编号 未使用int32_t line_number;          // 最后发送给的行号float position[N_AXIS];       // 解释器认为工具位于代码中的此位置float coord_system[N_AXIS];    // 当前工作坐标(G54+),存储与机器坐标的偏移,mm为单位,调用时从EEPROM加载float coord_offset[N_AXIS];    // 保留相对于G92的坐标偏移(工作坐标),mm单位,复位后清零// machine zero in mm. Non-persistent. Cleared upon reset and boot.float tool_length_offset;      // 启用时跟踪刀具的长度
} parser_state_t;
extern parser_state_t gc_state;

附录

  • 附录1:G代码解释
G代码 注释 GRBL中对应的宏定义 对应的值
G0 快速定位 MOTION_MODE_SEEK 0
G1 直线插补 MOTION_MODE_LINEAR 1
G2 圆弧插补 MOTION_MODE_CW_ARC 2
G3 螺旋线运动 MOTION_MODE_CCW_ARC 3
G38.2 探针 MOTION_MODE_PROBE_TOWARD 140
G80 运动模式取消 MOTION_MODE_NONE 80
G93 FEED_RATE_MODE_INVERSE_TIME 1
G94 FEED_RATE_MODE_UNITS_PER_MIN 0
G20 英制尺寸 UNITS_MODE_INCHES
G21 公制尺寸 UNITS_MODE_MM 0
G90 绝对值位置 DISTANCE_MODE_ABSOLUTE 0
G91 相对值位置 DISTANCE_MODE_INCREMENTAL 1
G17 XY平面选择 PLANE_SELECT_XY 0
G18 ZX平面选择 PLANE_SELECT_ZX 1
G19 YZ平面选择 PLANE_SELECT_YZ 2
G43.1 刀具长度补偿
G49 刀具长度补偿取消
G54 工件坐标系1
G55 工件坐标系2
G56 工件坐标系3
G57 工件坐标系4
G58 工件坐标系5
G59 工件坐标系6
M0 程序停 PROGRAM_FLOW_PAUSED 3
M1 选择停止 PROGRAM_FLOW_OPTIONAL_STOP 1
M2 程序终止 PROGRAM_FLOW_COMPLETED_M2 2
M30 程序结束 PROGRAM_FLOW_COMPLETED_M30
M7
M8 冷却液开
M9 冷却液关
M3 主轴顺时针旋转
M4 主轴逆时针旋转
M5 主轴停止
M56 停车动作超驰控制

GRBL分析:gcode解释器(一)相关推荐

  1. 记一次 JVM 源码分析(4.解释器与方法执行)

    简介 miniJVM 作为一个 mini 的 Java VM,实现了 Switch 解释器,并不支持主流 JVM 的 JIT 或者更为复杂的 AOT.但这样对于我们了解字节码的执行已经足够了. 字节码 ...

  2. Dalvik解释器源码到VMP分析

    前言 学习这块的主要目的还是想知道vmp是如何实现的,如何与系统本身的虚拟机配合工作,所以简单的学习了Dalvik的源码并对比分析了数字公司的解释器.笔记结构如下: dalvik解释器分析 dalvi ...

  3. GRBL v1.1版本命令说明

    这次翻译了一下Grbl的命令wiki说明,内容比较多,如果有什么错误的地方,请在下方留言,欢迎相互交流学习 Grbl v1.1 command Source websit: https://githu ...

  4. grbl学习之旅---protocol篇

    protocol.c和protocol.h是实现控制grbl的方法和程序执行协议.涉及到了system.h;stepper.h;print.h;report.h; system.h 是系统级命令和实时 ...

  5. ArtistV1——艺术家V1[STM32F1 | 写字机 | GRBL | LVGL | WIFI]

    ArtistV1--艺术家V1 项目已开源至Github:点我传送 项目演示视频bilibili:点我传送 目录 ArtistV1--艺术家V1 一.项目总览 基本介绍: 硬件介绍: 软件控制部分: ...

  6. 组合模式详解附有代码案例分析(包含透明组合模式、安全组合模式的代码示例)

    组合模式 一.组合模式的概念和角色 (一).组合模式的概念 (二).组合模式的角色 二.组合模式的应用场景 三.透明组合模式的代码示例 四.安全组合模式的代码示例 五.组合模式的优缺点 (一).优点 ...

  7. 模板方法模式详解附有代码案例分析(包含模板方法模式重构JDBC操作业务代码示例)

    模板方法模式 一.模板方法模式的概念和角色 (一).模板方法模式的概念 (二).模板方法模式的角色 二.模板方法模式的应用场景 三. 模板方法模式的代码示例 四.模板方法模式重构JDBC操作业务 五. ...

  8. 大话设计模式之爱你一万年:第二十三章 行为模式:解释器模式:在也不用担心工资计算错误了:3.解释器模式之简单计算器3.0

    上面的在上面的这个代码中,我们目前并没有看出解释器模式的优势,感觉代码反而变复杂了呐,引入了好几个类. 我们发现在的计算器只能解释a+b这种类型的表达式,如果表达式是a+b+c- 的呢,上面的代码就无 ...

  9. 二十:解释器模式:语言的力量

    a. 探索解释器模式 解释器模式是一种行为型设计模式,用于解决特定领域的问题.当一个语言需要解释执行,且可以将该语言中的句子表示为抽象语法树时,就适合使用解释器模式.解释器模式主要包括抽象表达式.终结 ...

  10. 3D打印和cnc 2

    3d 打印和cnc 从gcode 的角度情况来看分两种 A:gocde 解释器在上位机 这个下位机有可能是没有mcu芯片的,比如直驱gpio 方式. linuxcnc 和machinekit和klip ...

最新文章

  1. java2实用教程--第二章基本数据类型与数组
  2. Windows 11 再惹“众怒”!网友:微软就是逼我去买新电脑!
  3. 在DataGireView中加筛选条件
  4. 单线程实现检索当当网泄露的1GB用户数据
  5. 【Java】HashMap的数据结构、源码解析 - 公开课笔记
  6. WebSocket webshop后台服务器的一些全局数据结构
  7. python输入一个字母_python – Tkinter输入的第一个字母
  8. python用缩进来标明代码的层次关系_8-1-Python设计案例.pptx
  9. 本地同时修改2个版本
  10. python优雅编程_Python优雅地可视化数据
  11. 调用java的webservice返回null
  12. c语言写识别电压的程序,PIC单片机C语言编程实例——交流电压测量
  13. 汽车故障诊断技术【2】
  14. 大话开发板技术支持——在www.ouravr.com上看到一个老兄对一个开发板淘宝代理提出控诉之后...
  15. 20150802厦门大学华为校园提前批招聘机试体验题三:Word Maze(单词迷宫)
  16. searchableSelect下拉框插件增加按拼音及首拼搜索
  17. c#FileStream文件读写可能会出现乱码
  18. 定时器 java qua_kettle整合到web项目并运用quartz实现定时任务
  19. 关于Sunday算法以及实现
  20. Android ANR问题总结

热门文章

  1. 虚拟服务器软件,VMware ESXi(服务器虚拟化软件) V7.0 官方版
  2. h5 默认为移动端页面_HTML5默认登录页面
  3. Adams入门详解与实例(第2版)pdf电子书
  4. APP专项测试方法和工具的使用
  5. 个人理财系统springboot项目开发(一)需求分析文档
  6. 基于Python实现网页版之复杂图片去水印
  7. 数据包络分析(DEA)详解(以第八届宁夏省赛为例)
  8. Magisk中文文档
  9. 【ES6-阮一峰博客阅读笔记】
  10. 使用深度学习进行表检测、信息提取和构建