开源改变世界

hal.get_value() 不应要求创建组件 #621

推推 grbl 3年前 (2023-01-29) 185次浏览
关闭
3 个任务中的第 1 个
lorenzncode 打开了这个问题 2019 年 7 月 4 日 · 3条评论
关闭
3 个任务中的第 1 个

hal.get_value() 不应要求创建组件#621

lorenzncode 打开了这个问题 2019 年 7 月 4 日 · 3条评论

注释

hal.get_value() 不应要求创建组件 #621
贡献者

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

  1. 在独立的 Python 脚本中调用 hal.get_value() 而不创建组件

我正在运行用于探测的独立 Python 脚本 – 从终端手动调用。我对 hal.get_value() 的理解是它可用于获取任何引脚、参数或信号的值,而不仅仅是那些来自用户空间组件的值。事实上,如果我首先创建一个虚拟组件,它确实有效。请求是 hal.get_value() 不应要求创建组件。

h = hal.component(“dummy”)
h.ready()

if hal.get_value(‘motion.probe-input’):
print(‘Probe is tripped – is the probe plugged in?’)
返回 -1

这是我期望发生的事情:

我希望 hal.get_value() 返回引脚的值。

这是发生了什么:

返回错误信息:

RuntimeError:在创建组件之前无法调用

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

  • 我正在使用这个 Linux 发行版和版本(通常显示为lsb_release -a):
    Linux Mint 19.1 Tessa
  • 我正在使用这个内核版本(显示为uname -a):
    Linux 平台 4.19.1- rt3 使用 Tcl_SetResult 和 Tcl_GetStringResult  #1 SMP PREEMPT RT Sat Mar 2 19:53:32 EST 2019
  • 我在跑步 …
    • 来自 linuxcnc.org 的二进制版本(包括 buildbot.linuxcnc.org)
    • 我自己构建的二进制文件
    • 来自 linuxcnc.org 之外的其他来源的二进制版本
  • 我正在使用这个 LinuxCNC 版本(显示在包管理器中,或者对于 git 版本,scripts/get-version-from-git):
    Branch 2.8,我认为最后构建于 6 月 25 日
  • 我正在使用此用户界面 (GUI)(例如 AXIS、Touchy、gmoccapy 等):
    AXIS
  • 我正在使用此接口硬件供应商和芯片组(例如,并行端口、以太网端口、FPGA 卡):
    Mesa 5i25
hal.get_value() 不应要求创建组件 #621
合作者

要访问 HAL,需要有一个共享内存指针。这是在制作组件时创建的。这就是为什么需要一个组件。我认为没有任何解决办法。唯一可以做的就是隐藏创建虚拟组件的细节,这对我来说似乎不是一个好的解决方案。

hal.get_value() 不应要求创建组件 #621
贡献者作者

感谢您确认该组件是必需的。我将继续创建一个虚拟组件,以便在我的脚本中使用 hal.get_value()。

hal.get_value() 不应要求创建组件 #621
合作者

我不认为这适用于你,但任何其他阅读:
如果你有对任何其他组件的引用,例如,如果你正在使用处理程序文件扩展 gladevcp,你可以使用该组件而不是构建一个虚拟组件。