Python VISA 串口轮询函数
我遇到了一个关于我的GPIB仪器的问题。这个仪器比较旧,标注的是IEEE-488-1978版本。我一直在尝试找到这个版本的IEEE-488的参考手册,但一直没有成功。
问题在于,要读取这个仪器的状态寄存器,需要使用串行轮询功能(参考手册上是这么说的)。我不知道怎么在Python中用PyVISA来实现这个功能。
举个例子,我用来从设备读取数据的命令是_instrument.ask("RV")_
,其中_RV_
表示_读取版本_
。另外,如果我想设置一个参数,比如温度,我会用_instrument.write("ST20.00")_
,这里的_ST20.00_
表示_将温度设置为20.00摄氏度_
。
我一直在寻找一个ASCII命令,想通过_ask_
这个Python/VISA命令发送给仪器,并希望能返回_状态寄存器字节_
,但似乎没有什么可行的办法。
如果有人有建议,关于如何用Python/VISA实现串行轮询功能,那可能会解决我的问题。
1 个回答
3
在1975年,IEEE(电气和电子工程师协会)制定了一个叫做IEEE-488-1975的标准,这个标准描述了一种数字通信总线,有时候也叫做GPIB。这个标准在1978年进行了修订。它主要讲的是硬件接口,但没有涉及命令和数据的具体格式。到了1987年,他们推出了IEEE-488.2-1987标准,里面描述了标准代码、格式、协议和常用命令。
现在回到你的问题。
pyvisas中的visa.GpibInstrument
类有一个叫做stb
的属性,你可以用它来访问状态字节。以下是源代码:
@property
def stb(self):
"""Service request status register."""
return vpp43.read_stb(self.vi)
所以你可以简单地这样做:
instrument = visa.instrument('GPIB::01') # Assuming a GPIB device on channel 1
print instrument.stb # Print status register
如果你的设备符合IEEE-488.2标准,你还有一个额外的选择。你可以发送一个常用命令*STB?
instrument = visa.instrument('GPIB::01') # Assuming a GPIB device on channel 1
print instrument.ask('*STB?') # Print status register