DMM、Python和串口:在循环过程中,通信突然停止

2024-06-09 14:13:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我用安捷伦数字万用表来测量。 我使用python2.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!"

循环正在运行,有时它“生存”到结束,但大多数时候它只是停止,请建议。请注意,我从来没有进入“除了”部分。加上“试试”没用。。。在

谢谢你!在

~海豚~


Tags: 模块脚本fortimeserial数字sleepdc
1条回答
网友
1楼 · 发布于 2024-06-09 14:13:58

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

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: wait forever

timeout = 0: non-blocking mode (return immediately on read)

timeout = x: set timeout to x seconds (float allowed)

相关问题 更多 >