开源改变世界

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361

推推 grbl 3年前 (2023-01-29) 200次浏览
关闭
KurtJacobson 打开了这个问题 2017 年 12 月 1 日 · 16条评论
关闭

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL#361

KurtJacobson 打开了这个问题 2017 年 12 月 1 日 · 16条评论

注释

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361

以下是我重现该问题所遵循的步骤:

  1. 使用 sim axis.ini 启动 LinuxCNC
  2. 开机并回家机器
  3. 打开终端并根据需要设置 RIP 环境
  4. 启动交互式 python 控制台并运行以下命令
>>> import linuxcnc
>>> s = linuxcnc.stat()
>>> c = linuxcnc.command()
>>> s.poll(); print s.task_mode
1
>>> c.mode(linuxcnc.MODE_MDI)
>>> s.poll(); print s.task_mode
3
>>> c.mdi('G0 X1')
>>> s.poll(); print s.task_mode
1 # Back to MANUAL_MODE, subsequent MDI commands will fail 
>>> c.mdi('G0 X0') # ERROR: "Must be in MDI mode to issue MDI command"
>>> 

这是我期望发生的事情:

我希望 LinuxCNC 保持在 MDI 模式,直到通过c.mode()或通过与 UI 的某些交互更改模式。

这是发生了什么:

似乎只要解释器​​空闲,axis 就会将 LinuxCNC 设置为手动模式,这会导致后续 MDI 命令失败。

在此之前它工作正常:

在 2.7.11 中按预期工作,即 LinuxCNC 保持在 MDI 模式,以便可以连续发出多个 MDI 命令,而不必在每个命令之前设置 MDI 模式。

有关我的硬件和软件的信息:

  • 我正在运行:我自己构建的二进制文件
  • 我正在使用这个 LinuxCNC 版本:v2.8.0-pre1-3395-gbd25a5d11
  • 我正在使用此用户界面 (GUI):axis
axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
贡献者作者

我一直无法找到引入此更改的提交,但我记得一些关于在 MDI 之后让 axis 将 LinuxCNC 返回到手动模式的事情。我相信这是为了解决 2.7 中必须先通过键盘点动以将 LinuxCNC 设置为手动模式,然后才能使用 MPG 点动的麻烦。

一般来说,返回手动模式似乎是可取的行为。问题是它至少破坏了一个用户插件(正确的术语?)probe_screen,它通过 python 接口发出一系列 MDI 命令,并期望 LinuxCNC 在执行每个命令后保持在 MDI 模式。

我已经尝试在发出每个 MDI 命令之前立即将 linuxcnc 设置为 MDI 模式,但可能有 50% 的时间失败。我猜轴在模式设置为 MDI 和实际发出 MDI 命令之间将模式设置回手动。

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
贡献者作者

这个粗略的脚本演示了即使它在发出 MDI 命令之前立即将模式设置为 MDI,不知何故 LinuxnCNC 实际上并没有设置为 MDI,或者在脚本将模式设置为 MDI 和实际发出 MDI 命令。

您可能需要运行几次,但它应该会导致错误Must be in MDI mode to issue MDI command抬起丑陋的头。

我希望我只是在这里做一些愚蠢的事情,并且有一个简单的解决方案。

#!/usr/bin/env python

import linuxcnc

s = linuxcnc.stat()
c = linuxcnc.command()

MODES = {
    linuxcnc.MODE_MANUAL: 'MANUAL',
    linuxcnc.MODE_AUTO  : 'AUTO',
    linuxcnc.MODE_MDI   : 'MDI'
    }

def print_mode():
    s.poll()
    print "Current MODE: ", MODES[s.task_mode]

print_mode()

for i in range(4):
    print '\n'
    print_mode()

    print 'Changing to MDI mode ...'
    c.mode(linuxcnc.MODE_MDI)
    c.wait_complete()

    print_mode()

    cmd = 'G0 X{}'.format(i)
    print 'Issuing MDI command: ', cmd
    c.mdi(cmd)
    c.wait_complete()
axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
合作者
gmoccapy 评论了 2017 年 12 月 1 日 通过电子邮件
axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
贡献者作者

这很有趣 Norbert,我没有注意到它发生在 Gmoccapy 中,我会再次测试它。

我确实认为它依赖于 GUI,因为当我使用 hazzy 作为 GUI 运行它时,我的小脚本运行正常。

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
合作者
gmoccapy 评论了 2017 年 12 月 1 日 通过电子邮件
axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
贡献者作者

好的,我制作了两个快速视频,展示了在 axis 和 hazzy 中运行我上面发布的脚本之间的区别。当在 hazzy 中运行时,它的行为与我预期的一样,由于c.wait_complete(). 也Must be in MDI mode to issue MDI command不会发生错误。请注意,在“BasicControls”小部件中置换的 interp 状态在每个段之间短暂地从 READ 变为 IDLE,但模式仍保持在 MDI 中。

当我在 axis 中运行脚本时,第一段似乎运行正确,但后两段“一起运行”。您可以从终端中快速连续的打印和背景图中圆锥体的运动中看出这一点。另外,我们得到了Must be in MDI mode to issue MDI command错误。此外,如果您查看 LinuxCNC 状态显示,您会看到 task_mode 在 mdi 和手动之间跳来跳去。

我认为这表明问题出在 GUI,而不是其他地方。

以下是两个视频的链接:
hazzy: https
://youtu.be/1F0vA37Maew axis: https ://youtu.be/BFbfgQmI7gY

(很抱歉针对 hazzy 进行了测试,因为它不是标准的 UI,但我知道它是如何工作的(我希望 :D)所以这是我消除其他可能原因的最简单方法。)

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
贡献者

我也遇到了这个问题,见#285

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
贡献者作者

谢谢@pkmcnc,我看到了你的问题,但我不确定这是同一件事,现在我很确定是这样。抱歉重复。

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
贡献者

我的描述不够清楚,可能。我很高兴你也发现了这个问题。It’s pretty annoying, because I have a blocking relay connected to manual mode pin (inverted, actually), and it goes on/off when the machine starts, when MDI tab is selected, also before and after every MDI command.

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
贡献者作者

@gmoccapy我不知道我的小脚本的测试效果如何,但我刚刚用它测试了 Gmoccapy,一切似乎都按预期工作。当我有机会时,我会用 probe_screen 测试 Gmoccay。

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
合作者

好消息:我想我找到了破坏它的提交。
坏消息:它是这个:a2f0de5
我试图测试哪个 JA 提交破坏了这个,但我无法构建它们中的任何一个。
我还注意到,当您在轴上单击 manual 或 mdi 时,此提交后所有版本的 task_mode 都没有正确更新,我认为这与#285
的问题相同, 我认为也会中断@andypugh车床宏:https ://forum.linuxcnc.org/41-guis/26550-lathe-macros

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
合作者

嗯,也许这是一个轴错误?
模式切换和测试脚本在 gmoccapy 上工作正常。
还没有测试过探头屏幕…

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
合作者

从修复@dngarrett 3de8778

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
合作者

我认为这可以关闭。

axis 在每个 MDI 命令后将 linuxcnc 返回到 MODE_MANUAL #361
成员

@rene-dev根据您的说明关闭。谢谢@dngarrett