G91指令不可用 #384

推推 grbl 3年前 (2023-02-05) 375次浏览
关闭
Noobman 打开了这个问题 2013 年 2 月 7 日 · 10 条评论
关闭

G91指令不可用#384

Noobman 打开了这个问题 2013 年 2 月 7 日 · 10 条评论

评论

G91指令不可用 #384

相当重要的 G91 命令似乎与“software_endstops true”交互不当。

描述:我需要移动到床的中心,比如位置 x100 y100,然后使用 G91 x0y0 并具有以下与该位置相关的所有命令。但是解析器似乎根本不接受负向运动,所以当我这样做时,我松开了大部分床区域,因为在更远的地方,似乎只允许正向运动。当我设置“min_software_endstops false”时,我可以进行负向运动,这可能会导致允许过多的运动,并破坏和过度击中我的设置​​无法承受的硬件停止位。一种替代方法是将床中心调整为 0 并始终使用一半的负空间,但这是一个快速修复/解决问题的方法,因为这并没有反映出 G91 命令在我看来应该如何工作。

预期行为:移动空间为 0-200,移动到 100,使用 G91 *0 相对于此位置有进一步的移动,仍然有可能移动到相对于最后一个 G91 位置从 -100 到 +100 的整个范围,而软件终点站是真的。

G91指令不可用 #384

有一些选项可以指定它(MAX_POS、MIN_POS 和 MANUAL_*_HOME_POS)。
但是 99%(甚至更多)使用床的左下角作为 0,0。不是中心。

G91指令不可用 #384
作者

它很简单,但我认为我没有正确表达自己的意思,所以我会尝试将其付诸实践:我总是使用负数来铣削 pcb。假设我将 Z 向上移动 10mm。然后我需要这个位置作为 Z 轴的新零点(G92 或 M206 似乎不起作用)。此外,我需要确保有与此位置相关的进一步移动,因此 G91。然后在 -0.2 处进行铣削或在 -1.75 处进行钻孔,因此坐标移动在机器边界内的临时负空间中。在具备这些先决条件的同时,如果我按 G28 返回原点,则原点应该转到 G92/M206 点而不是绝对零(硬件停止点)。

G28 ;原点
G0 X100 ;移动 100
G92 X0 或 M206 X0 ;设置新的零点; 或 M206 x100 或 G28 x100 在归位点(似乎都不起作用)
G91 ;将相对模式设置到该位置(似乎不起作用)
G0 X-10 ;
预期行为:最后一行应该将头部移动到绝对 90 度位置 (=100-10)。
经验结果:但它却像试图达到绝对值 -10 一样击中了硬件终点;

我不能让 G92 或 M206 和 G91 那样工作。但我发现暂时允许将 0.0.0 参考更改为其他点而不是家很重要,并进一步相对使用该位置,因此允许负坐标从该参考移动,同时保持在尺寸边界内。所有用于 pcb 铣削的软件链都在负空间中生成 gcode。我还没有找到一个至少对 Z 不使用负空间的实例。这通常不是问题,因为让这些 g 代码像它们在标题 (~start.gcode) 中应该的那样工作,应该没有必要将机器配置更改为通常的 reprap 以外的任何其他配置 – 左下角为 0.0. 但是又不能让它像那样工作。

解决方法是为了举例说明,不可用:1) 分割床,所以只能使用一个部分,所以它充其量是有限的,以及 2) 设置“min_software_endstops false”将允许负坐标移动,但要注意的是将允许任何类型的负面动作,但要注意它可能会变得危险。可以一直检查终点站,但随后它失去了一个功能,事情不必那样。

这些 gcode G92 M206 和 G91 是否有效,或者以与我预期不同的方式工作?我查看了 marlin_main.cpp 但不能说任何可疑的东西,这就是为什么我更怀疑“software_endstops”的组合,我怀疑它可能链接到它,因为它看起来不一样,只是我宁愿保留这个方面作为一个功能 – 不能承受不幸.

G91指令不可用 #384
贡献者

我的叉子允许原点在床的中间:
https ://github.com/nophead/Marlin 。不确定 G91 是否有效。

2013 年 2 月 7 日 10:12,Noobman [email protected]写道:

它很简单,但我认为我没有正确表达自己的意思,所以我会尝试将其付诸
实践:我总是使用负数来铣削 pcb。假设我将 Z
向上移动 10mm。然后我需要这个位置作为 Z 轴的新零点(G92 或
M206 似乎不起作用)。此外,我需要确保有
与此位置相关的进一步移动,因此 G91。然后在 -0.2 处进行铣削或
在 -1.75 处进行钻孔,因此坐标移动在
机器边界内的临时负空间中。在具备这些先决条件的同时,如果我按 G28
返回原点,则原点应该转到 G92/M206 点而不是绝对零
(硬件停止点)。

G28 ;原点
G0 X100 ;移动 100
G92 X0 或 M206 X0 ;设置新的零点; 或 M206 x100 或 G28 x100 在
归位点(似乎都不起作用)
G91 ;将相对模式设置到该位置(似乎不起作用)
G0 X-10 ;
预期行为:最后一行应该将头部移动到
绝对 90 度位置 (=100-10)。
经验结果:但它却像
试图达到绝对值 -10 一样击中了硬件终点;

我不能让 G92 或 M206 和 G91 那样工作。但我发现
暂时允许将 0.0.0 参考更改为其他
点而不是家很重要,并进一步相对使用该位置,因此
允许负坐标从该参考移动,同时保持在
尺寸边界内。
所有用于 pcb 铣削的软件链都在负空间中生成 gcode 。我还没有找到一个
至少对 Z 不使用负空间的实例。这通常不是问题,因为让这些
g 代码像它们在标题 (~start.gcode) 中应该的那样工作,应该
没有必要将机器配置更改为与平常不同的任何其他配置
reprap – 左下角为 0.0。但是又不能让它像那样工作。

解决方法是为了举例说明,不可用:1) 分割
床,所以只能使用一个部分,所以它充其量是有限的,以及 2)
设置“min_software_endstops false”将允许负坐标移动,
但要注意的是将允许任何类型的负面动作,但要
注意它可能会变得危险。可以一直检查终点站,
但随后它失去了一个功能,事情不必那样。


直接回复此电子邮件或在 GitHub 上查看它 https://github.com/ErikZalm/Marlin/issues/384#issuecomment-13229323。

G91指令不可用 #384
作者

您好,感谢回复。是的,我也可以把 origin 放在床的中间,只是在实践中不方便。大多数情况下,PCB 的底部(完全)作为负坐标生成,而 y 完全作为正坐标生成,这意味着只有部分床可作为最大 PCB 尺寸使用,因此在比较中存在局限性。如果能够根据情况自由设置 0.0.0 参考,我可以将它设置在不同的角落,从而使用整个空间。或者,另一种使它成为可能的方法我也可以禁用软件停止,但这感觉绝对是错误的事情。或者最终可以求助于脚本操作 gcode 以适应给定的机器设置,但这更像是用右手抓左耳。

确实存在替代方案,可以找到变通办法,甚至是链式上下文。我绕过了这些话题,因为 pcb-milling on reprap 并不是什么新鲜事。由于这样的原因,可能只是在某种程度上限制了凸轮链的选择。但是这些 gcode 的工作集将大大简化事情并提供大量无价的自由。无论如何,它们应该如何工作。所以自然而然的事情就是解决这里的问题,至少是长期的。

G91指令不可用 #384

你可以看看我的马林鱼克隆。可以使用 G 代码在运行时调整最小/最大和起始位置,并可选择将其存储到 eeprom。在您的情况下,您只需要调整配置和重新安置。

此外,我认为您的 G92 被解释为“将当前绝对位置更改为参数中的值”,因此在 G92X0 机器认为它位于绝对 X0 上并且不可能发生负向运动之后。

G91 切换到相对坐标 – 应该不需要调整绝对位置,但你所有的 PCB G 代码必须在相对坐标中:
G90 ; 绝对模式
G0 X100 ; x=100
G91 ; 相对模式
G0 X-10 ; x=90

M206 – 在我看来,Marlin 中的这个命令被“修复”了几次,以匹配不同作者的需求/解释。它目前很破(G28X0.5 不同于 G28X1 与非零 M206)。

G91指令不可用 #384
作者

我觉得你说得比我好。

因此,G92 被解释为“绝对位置的变化”,因此在 G92 X0 认为其处于绝对零位并且不可能出现负向运动之后。好吧,这正是我们应该期待的。我在中间移动并在那里做 G92,我得到了什么:我松了 3/4 空间……为什么?做什么的?谁会想要这样的 gcode 命令?那就是我想说的其中一件事:没有理由那样做。

拥有这样的命令没有多大意义,除非它不会缩小空间并允许负向移动。这就是它应该做的,在整个空间的范围内。

关于命令的描述,我将其视为一种行为。我相信命令描述中的“改变它的绝对零”这个词是为了解释它的行为,而不是固件的胆量。所以我宁愿把它当作描述而不是“本身”的实现。所以我认为这只是一个词的选择,它确实很好地总结了它的行为,但仅此而已。

所以固件可以“伪造”它,也许通过简单地将其未来的 G0/1/2/3 相对于那个“伪造”的零进行翻译,然后像往常一样进一步传递它们,这样它就可以“模仿”那个位置的零。不必为了一个简单的 gcode 命令而全神贯注。并且可能不应该改变它的实际零,所以永远不要忘记它在哪里,因为这只会导致坏事。

所以我认为它应该保留在 G92 之后进行全面移动的能力。

因此必须允许在定义的空间中进行负向移动。并且不允许那些超越(否则我们为什么要定义空间)。至少恕我直言。

G91指令不可用 #384
贡献者

Marlin 当前使用“固定坐标”系统制作,其中假定相同的 X、Y、Z 始终位于机器中的相同位置。使用 CNC 铣削时情况并非如此,这就是您遇到问题的原因。

Marlin 从来不是为铣削而建造的,我在某处读到它存在一些速度非常慢的问题。

G91指令不可用 #384
作者

是的,这就是为什么我总是使用不同的固件来正确处理这个问题:)
但是,到了我觉得我应该放弃的地步,让我在这样做之前总结一下:

至少事情更清楚了,我的观点是 G92 命令并不意味着像现在这样让床的部分不可用。它旨在伪造/模仿参考点更改/平移,并保持可用的全尺寸床,并通过允许负向移动来实现。它的描述“0 的变化”是对其行为的描述,而不是它的实现。因此(至少)实际的 G92 有点偏离它需要的样子。这会影响与床尺寸、软件停止等相关的更多内容和命令。就是这样,我走了,干杯:)