注释
@109JB: 这是一个已知的问题。Grbl 将在警报后设置 g 代码标准默认值,这是您显示的第二行,但如果解锁,它不会执行启动行。我之前在一些先前的线程中讨论过这个问题。这个想法是,如果用户解锁警报,执行启动行可能不是最好的主意。大多数时候它应该没问题,但我看到一些用户在他们的启动行中放置了 G0、G1、G28/30。如果存在解锁且机器位置未知,则存在问题。 我想一个解决方案是使它成为一个编译选项,以便在警报解锁后执行启动行。但这为大量增长的行为列表增加了一个选项。另一种解决方案是检查是否有任何运动命令被写入启动行并防止它们被保存。 后一种解决方案是最好的,并且现在使用最近重构的 g 代码解析器应该更容易实现。(之前很难知道/昂贵地找出并检查一行中的命令。) |
@chamnit |
警报是出现问题的全部状态。据我了解,专业的 CNC 控制器总是会重置所有内容,包括解析器状态。这样做是为了减少重新启动作业时潜在的人为错误(解析器状态不同) 我想可以保持 gcode 状态,但我宁愿让系统尽可能健壮,即使它强制执行可能有点不方便的事情。 |
虽然商用 CNC 确实会重置解析器状态,但我知道没有哪台商用机器不允许用户选择 G20/G21 中的哪一个是默认设置。这可以设置,以便机器启动或重置为用户定义的单位(英寸/毫米)。事实上,在某些商用机器上,如果默认为 G20 并且程序包含 G21 指令,则会生成错误(Fanuc 和 Haas 控件会出现这种情况)。 在 GRBL 的情况下,默认值始终为 G21,用户无法选择,发送 G20 命令不会导致错误。这并不是什么大问题,但考虑到 $13 单位报告模式保留了用户设置,但 G20/G21 在出现警报后会恢复为 G21。这可能会导致用户混淆。当机器将以公制单位动作时,但显示器显示为英寸。 至少这一设置 (G20/G21) 应可供用户选择作为默认行为。自从发现这一点以来,我已经在我的 GUI 中实现了这一点,并且在任何 $X 命令之后立即发送用户可选择的 G20/G21,但我觉得这很重要,应该在 GRBL 中解决。 |
我注意到在发出警报后,例如硬限制跳闸或在“运行”状态下重置会导致所有解析器状态值都设置为 GRBL 默认值。例如报警状态为:
G1 G56 G18 G20 G91 G94 M0 M5 M9 T0 F100.0 S0.0
解锁后为:
G0 G54 G17 G21 G90 G94 M0 M5 M9 T0 F0.0 S0.0
无论用户是否定义了任何已定义的 $N 启动字符串,都会发生上述情况。
警报重置所有解析器状态信息是否有原因。我相信 GRBL 应该在警报之前保留有效的解析器状态值,并且应该在解锁之后应用这些值。或者,至少,解析器状态应反映警报后解锁后的 $N 值。