GRBL分析:gcode解释器(一)
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解释器(一)相关推荐
- 记一次 JVM 源码分析(4.解释器与方法执行)
简介 miniJVM 作为一个 mini 的 Java VM,实现了 Switch 解释器,并不支持主流 JVM 的 JIT 或者更为复杂的 AOT.但这样对于我们了解字节码的执行已经足够了. 字节码 ...
- Dalvik解释器源码到VMP分析
前言 学习这块的主要目的还是想知道vmp是如何实现的,如何与系统本身的虚拟机配合工作,所以简单的学习了Dalvik的源码并对比分析了数字公司的解释器.笔记结构如下: dalvik解释器分析 dalvi ...
- GRBL v1.1版本命令说明
这次翻译了一下Grbl的命令wiki说明,内容比较多,如果有什么错误的地方,请在下方留言,欢迎相互交流学习 Grbl v1.1 command Source websit: https://githu ...
- grbl学习之旅---protocol篇
protocol.c和protocol.h是实现控制grbl的方法和程序执行协议.涉及到了system.h;stepper.h;print.h;report.h; system.h 是系统级命令和实时 ...
- ArtistV1——艺术家V1[STM32F1 | 写字机 | GRBL | LVGL | WIFI]
ArtistV1--艺术家V1 项目已开源至Github:点我传送 项目演示视频bilibili:点我传送 目录 ArtistV1--艺术家V1 一.项目总览 基本介绍: 硬件介绍: 软件控制部分: ...
- 组合模式详解附有代码案例分析(包含透明组合模式、安全组合模式的代码示例)
组合模式 一.组合模式的概念和角色 (一).组合模式的概念 (二).组合模式的角色 二.组合模式的应用场景 三.透明组合模式的代码示例 四.安全组合模式的代码示例 五.组合模式的优缺点 (一).优点 ...
- 模板方法模式详解附有代码案例分析(包含模板方法模式重构JDBC操作业务代码示例)
模板方法模式 一.模板方法模式的概念和角色 (一).模板方法模式的概念 (二).模板方法模式的角色 二.模板方法模式的应用场景 三. 模板方法模式的代码示例 四.模板方法模式重构JDBC操作业务 五. ...
- 大话设计模式之爱你一万年:第二十三章 行为模式:解释器模式:在也不用担心工资计算错误了:3.解释器模式之简单计算器3.0
上面的在上面的这个代码中,我们目前并没有看出解释器模式的优势,感觉代码反而变复杂了呐,引入了好几个类. 我们发现在的计算器只能解释a+b这种类型的表达式,如果表达式是a+b+c- 的呢,上面的代码就无 ...
- 二十:解释器模式:语言的力量
a. 探索解释器模式 解释器模式是一种行为型设计模式,用于解决特定领域的问题.当一个语言需要解释执行,且可以将该语言中的句子表示为抽象语法树时,就适合使用解释器模式.解释器模式主要包括抽象表达式.终结 ...
- 3D打印和cnc 2
3d 打印和cnc 从gcode 的角度情况来看分两种 A:gocde 解释器在上位机 这个下位机有可能是没有mcu芯片的,比如直驱gpio 方式. linuxcnc 和machinekit和klip ...
最新文章
- java2实用教程--第二章基本数据类型与数组
- Windows 11 再惹“众怒”!网友:微软就是逼我去买新电脑!
- 在DataGireView中加筛选条件
- 单线程实现检索当当网泄露的1GB用户数据
- 【Java】HashMap的数据结构、源码解析 - 公开课笔记
- WebSocket webshop后台服务器的一些全局数据结构
- python输入一个字母_python – Tkinter输入的第一个字母
- python用缩进来标明代码的层次关系_8-1-Python设计案例.pptx
- 本地同时修改2个版本
- python优雅编程_Python优雅地可视化数据
- 调用java的webservice返回null
- c语言写识别电压的程序,PIC单片机C语言编程实例——交流电压测量
- 汽车故障诊断技术【2】
- 大话开发板技术支持——在www.ouravr.com上看到一个老兄对一个开发板淘宝代理提出控诉之后...
- 20150802厦门大学华为校园提前批招聘机试体验题三:Word Maze(单词迷宫)
- searchableSelect下拉框插件增加按拼音及首拼搜索
- c#FileStream文件读写可能会出现乱码
- 定时器 java qua_kettle整合到web项目并运用quartz实现定时任务
- 关于Sunday算法以及实现
- Android ANR问题总结