我正在考虑在Linux的C / C ++中实现一种守护进程/服务,它将通过shell(使用linux-gpib库)与特定的gpib设备进行通信。
这个想法是守护进程将扫描所有现有设备,并为每个设备创建一个文件/管道/dev/gpib#-*
(其中*
将是指定gpib总线上的地址)。使用方式可以是/dev/com#
。然后我可以输入命令行:
echo "*IDN?" > /dev/gpib1-12
会发送“* IDN?”到目前为止,这是一个和平的蛋糕......
当我想从设备中检索数据时,问题就开始了。我想让它以类似的方式工作,以便
cat /dev/gpib1-12
会写出设备要说的内容......但是我不知道我发送到设备的哪个命令会让设备返回一个字符串(值),哪个不会。所以我的选择是:
/dev/gpib#-*
管道读取时才查询设备。这必须通过'信号'和'等待'来提供。由于显而易见的原因(性能和/或延迟障碍)我不想实现解决方案 1 。我不知道如何做另一件事......我觉得,必须有可能在ol'mighty linux上实现,但是怎么样?我确实阅读了this,我认为函数select()
的一些旋转是正确的前进方向,但我无法弄清楚如何将它用于我的问题。我也偶然发现了this,那个人解释了如何做类似的事情,但是不同(代码 mosfet.c )。
问题是:如何通过信令,等待或中断立即检测并尝试从管道/ FIFO /文件的另一端读取?
Thanx寻求答案。
答案 0 :(得分:1)
如果您只需要一个适合您的gpib设备的终端,您可以使用python(甚至更好的ipython)。
linux-gpib附带python包装器(用于代码外观here)。所以在你的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。这为您提供了标签完成等等。