GRBL分析:gcode解释器(二)

article/2025/9/17 8:24:20

GCode解释器 - gc_execute_line函数解析

更新记录

2021-8-23
  • 添加函数功能描述
2021-8-24
  • 添加简单的流程绘制

函数功能描述

函数原型

uint8_t gc_execute_line(char *line);

参数 char* line

  • 在 protocol.c 文件的 protocol_main_loop 函数中,主循环内部会处理串口接收到的字符串,将接收的字符串进行过滤处理后,得到的是G代码则会在循环中调用 gc_execute_line 函数进行G代码的解析。
  • line指针指向的为 protocol.c 中声明的数组,该数组存储的为从串口中提取的有效数据信息。
static char line[LINE_BUFFER_SIZE]; // Line to be executed. Zero-terminated.

返回值

返回该条G代码的处理结果
在 report.h 文件中定义了相关的返回结果

定义宏返回值描述
STATUS_OK0G代码处理完成,无错误
STATUS_EXPECTED_COMMAND_LETTER1G代码中出现了非法字符
STATUS_BAD_NUMBER_FORMAT2数值格式无效或缺少预期值
STATUS_INVALID_STATEMENT3无法识别或支持 Grbl ‘$’ 系统命令
STATUS_NEGATIVE_VALUE4收到的预期正值的负值
STATUS_SETTING_DISABLED5
STATUS_SETTING_STEP_PULSE_MIN6
STATUS_SETTING_READ_FAIL7EEPROM 读取失败。重置并恢复为默认值
STATUS_IDLE_ERROR8
STATUS_SYSTEM_GC_LOCK9
STATUS_SOFT_LIMIT_ERROR10
STATUS_OVERFLOW11
STATUS_MAX_STEP_RATE_EXCEEDED12
STATUS_CHECK_DOOR13
STATUS_LINE_LENGTH_EXCEEDED14
STATUS_TRAVEL_EXCEEDED15
STATUS_INVALID_JOG_COMMAND16
STATUS_SETTING_DISABLED_LASER17
STATUS_GCODE_UNSUPPORTED_COMMAND20
STATUS_GCODE_MODAL_GROUP_VIOLATION21
STATUS_GCODE_UNDEFINED_FEED_RATE22
STATUS_GCODE_COMMAND_VALUE_NOT_INTEGER23
STATUS_GCODE_AXIS_COMMAND_CONFLICT24
STATUS_GCODE_WORD_REPEATED25
STATUS_GCODE_NO_AXIS_WORDS26
STATUS_GCODE_INVALID_LINE_NUMBER27
STATUS_GCODE_VALUE_WORD_MISSING28
STATUS_GCODE_UNSUPPORTED_COORD_SYS29
STATUS_GCODE_G53_INVALID_MOTION_MODE30
STATUS_GCODE_AXIS_WORDS_EXIST31
STATUS_GCODE_NO_AXIS_WORDS_IN_PLANE32
STATUS_GCODE_INVALID_TARGET33
STATUS_GCODE_ARC_RADIUS_ERROR34
STATUS_GCODE_NO_OFFSETS_IN_PLANE35
STATUS_GCODE_UNUSED_WORDS36
STATUS_GCODE_G43_DYNAMIC_AXIS_ERROR37
STATUS_GCODE_MAX_VALUE_EXCEEDED38

函数功能

  • 该函数会处理G代码,将G代码转化为一个 gc_block 结构,之后再将 gc_block 交给后面的结构进行处理。
  • 该函数仅负责G代码的解析,仅提取G代码中的数据,形成相关结构,不会对数据进行任何的处理。

内部处理流程

由于对部分G代码不是特别清楚,该部分仅描述G00,G01,G02,$J=G21G91 四种命令的处理流程

在这里插入图片描述


http://chatgpt.dhexx.cn/article/oClOiDWQ.shtml

相关文章

Marlin关于如何接收Gcode指令的详解

我研究的Marlin是1.0版本的.想用在的地方是stm32 Marlin关于接收Gcode命令最主要的函数就是: get_command() get_command()函数说实话对于我这样的学生来说程度还是挺复杂的. 为了节省大家理清代码和阅读文章的时间, 我全文用字力求精简, 别人已经写了的知识我就不会写 先上…

Gcode文件处理和执行

流程图: 1:SMC_OutQueue 不带参数>>>SMC_Interpolator 插补算法 2:CMC_CNC_REF 带参数>>>smc_NCDecoder 图型解析>>>ToolCorr 刀补>>>SmoothPath 圆弧>>>checkVelocities 速度 3:File 文件.txt/.cnc/.gcode>…

GCD简介

1. 什么是GCD GCD,全称是Grand Central Dispatch,它是C语言的API. GCD的核心 : 将block(任务)添加到queue(队列)中. 官方文档的描述: Grand Central Dispatch(GCD)是异步执行任务的技术之一。一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需定义想执行的任…

激光雕刻机的位图-GCode转换方法实践

Author:Gary Li Date:2019-5-2 1. 简介 现在有一部分3D打印机带有激光雕刻功能,自己组装一台专用的激光雕刻机也并不复杂成本也很低。但是当我们使用激光雕刻机时,激光雕刻下位机只能接受路径指令,所以我们需要把位图——也就是我们平时最常…

3d打印实用小工具--GCode Viewer在线预览GCODE文件

使用solidworks2018绘制了一个零件 使用simplify3d进行切片 然后点击保存了这个文件。 没想到打印的时候,竟然打印成了这个零件。 原因是拷贝错了文件,而自己切片成功之后的GCode文件也无法预览,最后造成了时间和材料的浪费。 那么怎么需要打…

三轴XYZ平台生成gcode文件

1. 生成gcode坐标文件 gcode文件中保存的是需要绘制图形的路径信息,这里我们采用开源矢量图形编辑软件 Inkscape并通过Unicorn G-Code插件来生成 gcode坐标文件。 将软件资料包\Inkscape.rar 压缩文件解压到电脑上任意磁盘,软件内已安装 Unicorn G-Code插…

GRBL三:gcode代码解析

GRBL三:gcode代码解析 1.G00X_Y_Z_ :快速定位指令,_代表具体数值 可以同时针对X轴Y轴Z轴移动,只快速定位,不切削加工,相当于快速的移动到那个点上去 数值代表绝对位置 2.G01X_Y_Z_F_:直线差补 F指定进给速度mm/min…

3D打印gcode命令大全及解析

*G0:快速移动 *G1:控制移动 坐标轴XYZE移动控制(G0和G1一样) 例子:G0 F2000 X30 Y30 Z30 E3 *G2:顺时针画弧 *G3:逆时针画弧 此命令有两种形式:IJ-form和R-form。I指定了X偏移…

GCode软件使用说明书

欢迎使用GCode软件,本软件仅为辅助生成G代码软件...... 操作说明: 1、打开软件GCode.exe, (1)点击“文件”即可选择“新建”、“打开”、“保存”等功能,或者点击主界面快捷键; (…

在 VS Code 中阅读 G-code 及 3D 打印机 gcode 常用指令介绍

1. 在 VS Code 中阅读 G-code 直接以文本格式在 VS Code 中打开 .gcode 文件,会发现没有语法高亮。 安装插件实现语法高亮和悬浮显示命令解释。 1.1 安装插件「G-Code」 1.2 配置 settings.json 文件 1.2.1 打开 VS Code 设置(快捷键: Ctrl 逗号) 1…

二分图最大匹配及匈牙利、HK算法

二分图最大匹配 在二分图中,最大匹配是指选出尽可能多的边使得任意两边没有公共端点。 增广路 设 M M M为二分图 G G G已匹配的边的集合,若 P P P是图 G G G中一条连接两个未匹配顶点的路径(起点终点分别在两个集合)&#xff0…

用最大流解决二分图最大匹配 Bipartite Matching

有A B C三个老师,D E F三门课,A能教E, B能教D和F,C能教D和E。要求每个老师只能教一门课,求分配方案。 这是一个典型的二分图最大匹配问题,二分图是只graph的顶点可以分为两部分,每部分内部顶点直接无连接&…

二分图最大匹配-匈牙利算法

今天介绍 匈牙利算法 : 匈牙利算法,是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,由匈牙利数学家Edmonds于1965年提出,因而得名。 先介绍一下增广路径&#x…

求解分配问题(二) 二分图最大匹配算法

我的前一篇文章介绍了对于分配问题的Kuhn-Munkre算法,该算法其实可以看作是邻接矩阵形式的匈牙利算法,如果更抽象地看这个算法,它可以看成是一个二分图匹配算法的变体算法,具体的说,是二分图最大权重匹配算法。我打算也…

二分图最大匹配(匈牙利算法,Dinic网络流算法)

二分图最大匹配 二分图最大匹配问题: 有两个集合A,B,两个集合间有多条边连接集合中的点,且单个集合中的点各不相连,求两集合的点能两两配对的最大匹配数. (参考:)二分图最大匹配——匈牙利算法 匈牙利算法: A集合记录各点与B集合相连的点,B集合记录某点与A集合中匹配的点.遍历…

二分图最大匹配与最大独立集

一.概念部分 1.什么是二分图? 通俗的说法:就是可以把图分成两部分,每一部分任意两点之间没有关系(同一部落),两部分之间点可能存在多种关系。 2.怎么判断二分图? (1)…

二分图最大匹配及最大权匹配

二分图最大匹配学习 一.二分图的基本知识二.二分图最大匹配什么是二分图最大匹配怎么求二分图最大匹配 三.二分图最大权匹配四.例题训练三.最小点覆盖数 一位大佬的神级解释 本以为有了网络流,就不用再学匈牙利了,但在做题的过程中,发现有些…

二分图最大匹配问题(匈牙利算法)

什么是二分图 如果一个无向图的的顶点可以分为两个互不相交的子集A和B,那么它就是二分图。也就是说,A、B内部不存在连边,所有连边都一头连着A中的顶点,另一头连着B中的顶点。 什么是二分图最大匹配? 二分图最大匹配…

二分图 二分图最大匹配

首先来说一下什么是二分图。 二分图 二分图又称作二部图,是图论中的一种特殊模型。 设G(V, E)是一个无向图。如果顶点集V可分割为两个互不相交的子集X和Y,并且图中每条边连接的两个顶点一个在X中,另一个在Y中,则称图G为二分图。…

二分图最大匹配(最大流)

先举个例子,有N台计算机和K个任务,每个计算机只能执行一个任务,但可以执行多种任务。现在给出N和K,和其关系,求出最多能处理的任务数。 这就是典型的二分图,整张图被分为两半,一半是电脑&#…