开源改变世界

在 Gmocappy 中按下按钮时,输出会通电两次。 #645

推推 grbl 3年前 (2023-01-29) 135次浏览
关闭
bobbevins 打开了这个问题 2019 年 9 月 8 日 · 8条评论
关闭

在 Gmocappy 中按下按钮时,输出会通电两次。#645

bobbevins 打开了这个问题 2019 年 9 月 8 日 · 8条评论

注释

在 Gmocappy 中按下按钮时,输出会通电两次。 #645

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

  1. 在 Gmocappy 中按下按钮会导致 halui.motion.is-on 在实际变高并保持高电平之前产生脉冲。

这是我期望发生的事情:

halui.motion.is-on 在打开之前不应有脉冲,并保持打开直到再次按下按钮。

这是发生了什么:

按下 gmocappy 中的 on 按钮会导致 motion.motion-enabled 在打开之前产生脉冲。motion.motion-enabled 触发 halui.motion.is-on。

这是运行 gmocappy。在具有相同配置的同一台机器上,Axis gui 没有此行为。

在此之前它工作正常:

我不知道什么时候改变了。

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

  • 我正在使用这个 Linux 发行版 Debian 9.9 Stretch:

  • 我正在使用此内核版本 4.9.0-9-rt-amd64 SMP PREEMPT RT Debian):

  • 我在跑步 …

    • 版本
  • 发生这种情况时,我正在使用此用户界面 gmocappy。轴没有这种行为。

在 Gmocappy 中按下按钮时,输出会通电两次。 #645
合作者

如果我是对的,您确实会使用 gmoccapy 3.0.8,因为这是最新的。我刚刚在 SIM Config 中使用 gmoccapy 3.0.8 进行了测试,我只能通过快速单击 ON 按钮来重现它。
您能否提供更多详细信息,我如何比在 hal show 中看到更好?

诺伯特

在 Gmocappy 中按下按钮时,输出会通电两次。 #645
作者
鲍比文 评论了 2019 年 9 月 10 日  

在透视中看它。使用 halui,motion.is-on 或 motion.motion-enabled
你应该在它打开之前看到一个脉冲。
您还可以在论坛中查看有两个人的视频和 halscope 的帖子。我不是唯一拥有此功能的人。另外,我刚刚尝试了 sim 卡,它正在这样做。

https://forum.linuxcnc.org/38-general-linuxcnc-questions/37317-gmocappy-fires-relay-twice?start=10

我正在使用 2.9 pre 附带的最新版本。我相信是3.08。

在 Gmocappy 中按下按钮时,输出会通电两次。 #645
合作者

你好@ALL,

我能够重现该行为。所以现在只是找到原因并修复错误。
我带来的不便表示歉意。

诺伯特

在 Gmocappy 中按下按钮时,输出会通电两次。 #645
合作者

好的,错误不是来自切换按钮的代码,而是来自 hal 状态。发送打开机器的命令发送两个 hal 状态命令,第一个是关闭,第二个是打开。
这需要一些时间来修复,所以请耐心等待。

诺伯特

在 Gmocappy 中按下按钮时,输出会通电两次。 #645
合作者

这似乎是切换按钮中的代码与打开和关闭状态的两个 Hal 状态回调之间的交互。

我添加了调试打印:

def on_tbtn_on_toggled(self, widget, data=None):
    print 'toggle on',widget.get_active(),self.stat.task_state == linuxcnc.STATE_ESTOP
    if widget.get_active():
        if self.stat.task_state == linuxcnc.STATE_ESTOP:
            widget.set_active(False)
            return
            (snip the rest of code was still here)

然后短路 hal_glib 回调:

def on_hal_status_state_on(self, widget):
    return

现在,当您切换按钮时,您有时会看到屏幕被启用然后立即关闭,您将看到调试打印确认这一点。(它不会停留,因为 hal_glib 回调不会运行)

现在也将 hal_status_state_off 短路:

def on_hal_status_state_off(self, widget):
    return

现在它在调试语句中关闭和打开。

因此,我认为您需要重新考虑用于打开和关闭 linuxcnc 的代码,因为现在按钮执行此操作,而 hal_status 也执行此操作。

看看是否对您有帮助。

在 Gmocappy 中按下按钮时,输出会通电两次。 #645
合作者

我在 qtvcp 中使用的一个想法是,如果按钮与 linuxcnc 的状态不同步(无论出于何种原因),您可以通过编程方式切换按钮,但之后会阻止任何代码。
它有点复杂,但希望我足够干净,你明白了。

在 Gmocappy 中按下按钮时,输出会通电两次。 #645
合作者

您是否注意到,急停复位会发出机器关闭信号?
并且机器似乎也发出急停复位信号!

诺伯特

在 Gmocappy 中按下按钮时,输出会通电两次。 #645
合作者

通过后来的更新之一解决。我测试了 2.8 版本和 gmoccapy 3.1.0,错误消失了。

诺伯特