注释
@rene-dev当你说“jog in x”时,你是说你正在使用右箭头键吗?单击并按住“+”点动按钮? |
啊!我正在使用箭头键。当我使用 +- 按钮时不会发生。 |
我无法在我的真实机器上重现它,只能在我的虚拟机开发环境中重现。 |
我什至无法在 VMWare 上重现它 |
在 X 中,按住一个键实际上会导致 KeyRelease/KeyPress 事件流。Tk 不过滤这些,而是将它们分别发送到 porogram。当 KeyRelease 紧随 KeyPress 事件后,AXIS 推断出一个键被按住,它代表一个被按住的键。当 Linux 未虚拟化并且 AXIS UI 在显示它的计算机本地运行时,这似乎工作得很好。 但是,当涉及到remote X、其他远程软件(如VNC)或虚拟化软件(如Virtualbox)时,AXIS 的预期可能会被破坏。 我认为您可以通过使用“xev”程序来大致测试一下是否属于这种情况。运行“xev”,然后定位窗口,以便您可以聚焦它,同时仍能看到启动它的终端。按住任意键。在 xev 窗口中,您应该看到这些重复的事件,并且对于每个 KeyRelease 事件和紧随其后的 KeyPress 事件,“时间”字段应该包含相同的时间戳。如果时间戳有时不同,那么 AXIS 可能会将其检测为“真正的”按键释放事件。 有关详细信息,请参阅https://stackoverflow.com/questions/2100654/ignore-auto-repeat-in-x11-applications ,但由于 Tk API 的限制,AXIS 并未完全实现此处描述的算法。AXIS 不能直接调用 XPending 和 XPeekEvent 之类的 API,但是 在现代 X 服务器中,显然还有 XkbSetDetectableAutoRepeat,它允许控制如何在每个客户端的基础上传递自动重复事件。然而,如果不编写 Tcl 扩展,这也不能直接从 AXIS 中使用。互联网上很少提及此功能,但它显然至少可以追溯到 2010 年(尽管该线程描述它不能可靠地工作)。在决定 XkbSetDetectableAutoRepeat 是 AXIS 现在在我们想要支持的所有平台上使用的启发式方法的可行替代方案之前,需要进行调查。这也可能会影响重复键的行为方式,例如,如果您想在 MDI 输入字段中按住左箭头。 https://nikit.tcl-lang.org/page/Disable+autorepeat+under+X11提供了一个用于调用 XkbSetDetectableAutoRepeat 的 Tcl/Tk 扩展。 |
不使用 virtualbox 也会发生此问题。 使用此键盘(不会发生使用其他键盘)
当你保持按下一个键时,它开始产生这个事件(使用 evtest):
是否可以禁用键绑定以在轴 gui 中慢跑并使用具有去抖动功能的 hal_input 组件? |
是否可以尝试使用不同的键盘? |
是的,这是一台带有工业金属键盘的真机。我们有一个解决问题的吊坠,但这种行为很奇怪。 是否可以在 axis gui 中禁用键盘点动? 我可以使用 hal_input 组件和去抖动输出。 |
我创建了一个组件来过滤来自 hal_input 键引脚的信号并避免这种行为。
linuxcnc/src/emc/usr_intf/axis/scripts/axis.py 第 3650 至 3663 行 d121abd
我可以在 axis.py 中评论这一行,但最好创建一个 pin 来禁用/启用轴 gui 的慢跑。这可能吗? 编辑:它会起作用吗?纳罗贡@ 17f6859 |
您应该能够使用 .axisrc 文件取消绑定引脚: |
以下是我重现该问题所遵循的步骤:
这是我期望发生的事情:
连续速度命令
这是发生了什么:
vel 命令有时会下降到 0
在此之前它工作正常:
我不知道这是否有效,大多数配置不使用该引脚。
有关我的硬件和软件的信息:
d459474在伸展