1

我正在考虑在 C/C++ 中为 linux 实现一种守护进程/服务,它将通过 shell(使用 linux-gpib 库)与特定的 gpib 设备进行通信。这个想法是,守护进程将扫描所有现有设备,并为每个设备创建一个文件/管道/dev/gpib#-**它们在指定 gpib 总线上的地址在哪里)。用途如 of /dev/com#。然后我可以输入命令行:

echo "*IDN?" > /dev/gpib1-12

哪个会发送“*IDN?” 连接到 1 号机上的设备 12。到目前为止,一切顺利...

当我想从设备中检索数据时,问题就开始了。我希望它类比地工作,这样

cat /dev/gpib1-12

会写出设备要说的内容......但我不知道我发送到设备的哪个命令会使设备返回一个字符串(值)而哪个不会。所以我的选择是:

  1. 反复检查(while-loop)设备是否有任何要回复的内容,然后将其发送到相应的管道。
    -或者-
  2. 仅当客户端程序尝试从/dev/gpib#-*管道读取时才查询设备。这必须通过“信号”和“等待”来提供。

出于明显的原因(性能和/或延迟障碍),我不想实施解决方案1。我不知道如何做另一件事……我觉得,它必须可以在 ol'mighty linux 上实现,但是如何实现呢?我确实读过这个,我认为该功能的一些旋转select()是正确的前进方向,但我不知道如何使用它来解决我的问题。我也偶然发现了这个,那个家伙解释了如何做类似的事情,但又如此不同(代码mosfet.c)。

问题是:如何通过信号、等待或中断从管道/FIFO/文件的另一端读取尝试立即检测并做出反应?

感谢您的回答。


PS:这里是早上七点半(是的,又是一个不眠之夜),所以请原谅我蹩脚的
英语……我正在询问(通过文件 I/O 访问单个设备)是否可以通过 linux-gpib 库,请告诉我。我确实阅读了 linux-gpib 的文档和 src,但没有发现任何帮助。所有 linux-gpib 库提供的都是与 C、Python 等的绑定。
PPS:是否有其他替代方法可以使用管道?

4

1 回答 1

1

如果您只需要一个不错的 gpib 设备终端,您可以使用 python(甚至更好的 ipython)。

linux-gpib 带有 python 包装器(代码看这里)。所以在你的shell中通过键入python 在python解释器中打开python,你可以像这样轻松地与设备通信

>>>import Gpib
>>>device = Gpib.Gpib(pad=2)

这将打开与主地址 2 的 gpib 设备的连接。要与它通信,只需执行以下操作

>>>device.write('*IDN?')
>>>device.read()
'HEWLETT-PACKARD,33120A,0,8.0-5.0-1.0'

为了进一步简化它,使用 ipython 而不是普通的 python。这为您提供了制表符补全功能等等。

于 2014-01-20T20:41:23.470 回答