2

我正在使用安捷伦数字万用表进行测量。我使用 Python 2.7 和 PySerial 模块与它通信。想法:使用 FOR 循环,我从 DMM 读取数据并获取数据。它工作正常,直到某个点,每次不同点。

例如:如果我将循环设置为测量 20k 次,它会在 1k 次后突然停止,下次尝试它可能会在 5k 次后停止....停止 - 表示 DMM 停止发送数据,python 保持在一种等待状态. 我的脚本卡住了,我必须终止它。没有错误,我不知道为什么。我尝试在测量之间添加超时(睡眠),但这并不能解决问题。以下是我的脚本中的主要命令:

# configure the serial connections 
ser = serial.Serial(
    port='com3',
    baudrate=19200,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
}


ser.write("CONF:CURRent:DC" + '\r\n')
time.sleep(1)
ser.write("SENS:CURR:DC:RANGe:UPP 0.05" + '\r\n')
time.sleep(1.5)

for m in range (0, 2000):
try:
    ser.write('READ?' + '\r\n')
    out += ser.read(18)
    print "out = ",out
except:
    print "error!"

循环正在运行,有时它“存活”到最后,但大多数时候它只是停止,请指教。请注意,我从不进入“例外”部分。添加“尝试”没有帮助......

谢谢!

~ 海豚 ~

4

1 回答 1

1

您可以在创建serial.Serial对象时设置超时。有 2 个参数用于指定读取和写入超时。这是一个例子:

ser = serial.Serial(
    port='com3',
    baudrate=19200,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=3, # <------ read timeout in seconds (can be floating)
    writeTimeout=3, # <-------------- write timeout in seconds (can be floating
}

以下是有关这些参数可以采用的值的文档说明:

timeout = None:永远等待

timeout = 0:非阻塞模式(读取时立即返回)

timeout = x:将超时设置为 x 秒(允许浮动)

于 2012-08-06T06:35:14.370 回答