Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DMM、Python和串行端口:在循环过程中,通信突然停止_Python_Serial Port_Pyserial - Fatal编程技术网

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

DMM、Python和串行端口:在循环过程中,通信突然停止,python,serial-port,pyserial,Python,Serial Port,Pyserial,我用安捷伦DMM来测量。 我使用Python2.7和PySerial模块与它通信。 想法:使用FOR循环,我从数字万用表中读取数据并获取数据。 直到某个时刻,每次都是不同的时刻,它都工作得很好 例如:如果我将循环设置为测量20k次,它会在1k次后突然停止,下一次尝试时,它可能会在5k次后停止。。。。 stops—意味着DMM停止发送数据,python保持一种等待状态。我的脚本卡住了,我必须终止它。没有错误,我也不知道为什么。 我尝试在测量之间添加超时(睡眠),但这并不能解决问题。 以下是我的脚本

我用安捷伦DMM来测量。 我使用Python2.7和PySerial模块与它通信。 想法:使用FOR循环,我从数字万用表中读取数据并获取数据。 直到某个时刻,每次都是不同的时刻,它都工作得很好

例如:如果我将循环设置为测量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~

您可以在创建
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
}
ser=serial.serial(
端口='com3',
波特率=19200,
奇偶校验=串行。奇偶校验\u无,
停止位=串行。停止位\u一,
bytesize=serial.EIGHTBITS,

TimeOUT=3,考虑添加超时。当基础设备停止发送数据时,使用阻塞读语句将挂起。非常感谢您的快速响应。我想尝试一下。谢谢!谢谢您的帮助!另一个帮助命令使用:输出=SER(Read(Seri.InWestIn)),而不是问18个字符。谢谢: