我正在使用Python 2.7.9中的Agilent IVI驱动程序,似乎无法在特定的Windows 7计算机上使用“经过验证的”代码。它在其他机器上成功执行。
虽然这个问题似乎仅限于一个工具,但它似乎是一个更广泛的Python问题,所以我转向Stack Overflow寻求帮助。任何帮助或见解都会很棒。
以下代码
# Import the TLB
from comtypes.client import GetModule, CreateObject
GetModule('AgInfiniium.dll')
# Pull in the coefficients and classes, we'll need those
from comtypes.gen.AgilentInfiniiumLib import *
# Instantiate the driver
OScope = CreateObject('AgilentInfiniium.AgilentInfiniium')
# Make constants of our settings
Address = "TCPIP0::10.254.0.222::INSTR"
resetOScope = False
# Open a connection to the scope
OScope.Initialize(Address,False,resetOScope,'')
# Make a measurement
print OScope.Measurements.Item("Channel1").ReadWaveformMeasurement(
MeasFunction=AgilentInfiniiumMeasurementAmplitude, MaxTime=10)
产生以下错误:
Traceback (most recent call last):
File "P:\Aperture\Validation\WMI_BGA_Board\TestMatrixCode\scopeTest2.py", line 29, in <module>
print OScope.Measurements.Item("Channel1").ReadWaveformMeasurement(MeasFunction=AgilentInfiniiumMeasurementAmplitude ,MaxTime=10)
File "C:\Python27\lib\site-packages\comtypes-1.1.0-py2.7.egg\comtypes\__init__.py", line 656, in call_with_inout
rescode = list(rescode)
TypeError: 'c_double' object is not iterable
在我有限的调试尝试中,我看到了这个call_with_inout
函数尝试将我的Python参数转换为以下C ++函数的参数:
public void ReadWaveformMeasurement(
AgilentInfiniiumMeasurementEnum MeasFunction,
AgilentInfiniiumTimeOutEnum MaxTime,
ref double pMeasurement)
它为pMeasurement
指针创建某种变量,最终为c_double
类型,然后抱怨它不可迭代。
在这一点上,这似乎是这台机器的本地。我已经去了卸载Python,重新安装Agilent驱动程序,并尝试两个版本的comtypes(1.1.0和1.1.1)。然而问题仍然存在。有任何想法吗?感谢。