DMM,Python和串口:在循环期间 - 通信突然停止

时间:2012-08-06 06:18:11

标签: python serial-port pyserial

我正在使用Agilent DMM进行测量。 我使用Python 2.7和PySerial模块与它通信。 想法:使用FOR循环,我从DMM读取并获取数据。 它工作正常,直到某一点,每次都是不同的点。

例如:如果我设置循环测量20k次,它会在1k次后突然停止,然后尝试它可能在5k次后停止.... stops - 表示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!"

循环正在运行,有时它会“存活”直到结束,但大部分时间它都会停止,请提供建议。请注意,我从未进入“除外”部分。添加“尝试”没有帮助...

谢谢!

~Dolphin~

1 个答案:

答案 0 :(得分: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 = 0:非阻塞模式(读取后立即返回)

     

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