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_OK | 0 | G代码处理完成,无错误 |
STATUS_EXPECTED_COMMAND_LETTER | 1 | G代码中出现了非法字符 |
STATUS_BAD_NUMBER_FORMAT | 2 | 数值格式无效或缺少预期值 |
STATUS_INVALID_STATEMENT | 3 | 无法识别或支持 Grbl ‘$’ 系统命令 |
STATUS_NEGATIVE_VALUE | 4 | 收到的预期正值的负值 |
STATUS_SETTING_DISABLED | 5 | |
STATUS_SETTING_STEP_PULSE_MIN | 6 | |
STATUS_SETTING_READ_FAIL | 7 | EEPROM 读取失败。重置并恢复为默认值 |
STATUS_IDLE_ERROR | 8 | |
STATUS_SYSTEM_GC_LOCK | 9 | |
STATUS_SOFT_LIMIT_ERROR | 10 | |
STATUS_OVERFLOW | 11 | |
STATUS_MAX_STEP_RATE_EXCEEDED | 12 | |
STATUS_CHECK_DOOR | 13 | |
STATUS_LINE_LENGTH_EXCEEDED | 14 | |
STATUS_TRAVEL_EXCEEDED | 15 | |
STATUS_INVALID_JOG_COMMAND | 16 | |
STATUS_SETTING_DISABLED_LASER | 17 | |
STATUS_GCODE_UNSUPPORTED_COMMAND | 20 | |
STATUS_GCODE_MODAL_GROUP_VIOLATION | 21 | |
STATUS_GCODE_UNDEFINED_FEED_RATE | 22 | |
STATUS_GCODE_COMMAND_VALUE_NOT_INTEGER | 23 | |
STATUS_GCODE_AXIS_COMMAND_CONFLICT | 24 | |
STATUS_GCODE_WORD_REPEATED | 25 | |
STATUS_GCODE_NO_AXIS_WORDS | 26 | |
STATUS_GCODE_INVALID_LINE_NUMBER | 27 | |
STATUS_GCODE_VALUE_WORD_MISSING | 28 | |
STATUS_GCODE_UNSUPPORTED_COORD_SYS | 29 | |
STATUS_GCODE_G53_INVALID_MOTION_MODE | 30 | |
STATUS_GCODE_AXIS_WORDS_EXIST | 31 | |
STATUS_GCODE_NO_AXIS_WORDS_IN_PLANE | 32 | |
STATUS_GCODE_INVALID_TARGET | 33 | |
STATUS_GCODE_ARC_RADIUS_ERROR | 34 | |
STATUS_GCODE_NO_OFFSETS_IN_PLANE | 35 | |
STATUS_GCODE_UNUSED_WORDS | 36 | |
STATUS_GCODE_G43_DYNAMIC_AXIS_ERROR | 37 | |
STATUS_GCODE_MAX_VALUE_EXCEEDED | 38 |
函数功能
- 该函数会处理G代码,将G代码转化为一个 gc_block 结构,之后再将 gc_block 交给后面的结构进行处理。
- 该函数仅负责G代码的解析,仅提取G代码中的数据,形成相关结构,不会对数据进行任何的处理。
内部处理流程
由于对部分G代码不是特别清楚,该部分仅描述G00,G01,G02,$J=G21G91 四种命令的处理流程