Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
一段时间不活动后python串行读取问题_Python_Python 2.7_Serial Port_Usb_Pyserial - Fatal编程技术网

一段时间不活动后python串行读取问题

一段时间不活动后python串行读取问题,python,python-2.7,serial-port,usb,pyserial,Python,Python 2.7,Serial Port,Usb,Pyserial,我有一个arduino板,它不断地将值转储到串行端口(USB)。该数据由使用pySerial库的python脚本的机器读入。我使用的代码如下: import serial import time ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1) while True: ser.flushInput() #Clear the serial input buffer print "Value:"

我有一个arduino板,它不断地将值转储到串行端口(USB)。该数据由使用pySerial库的python脚本的机器读入。我使用的代码如下:

import serial
import time

ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1)

while True:
        ser.flushInput() #Clear the serial input buffer
        print "Value:"
        print ser.readline()
        print ser.readline()
        print ser.readline()

        time.sleep(30) #Wait for 30 seconds
这可以完美地工作,并提供以下输出:

Value:

162

162

162

Value:

162

162

162
但当我在循环中给出比30秒大得多的延迟时,比如说1分钟或更高:

time.sleep(60) #Wait for 60 seconds
我开始有问题了。将打印第一组值。从那时起,ser.readline()总是超时,产生空值

输出:

Value:
162

162

162

Value:



Value:
为什么串行模块显示这种行为

最初,我用来读取序列值的机器是一个运行Raspian linux的Raspberry Pi板。我认为问题可能是由于RPi在遇到空闲时间时将USB推迟到一些低功耗睡眠。但我在我的笔记本电脑上测试了相同的代码,然后也出现了相同的问题,这意味着可能是其他问题

我想构建一个系统,需要全天候运行,并在某些事件发生时读取序列值,因此这种行为是不可接受的


请解释一下这个问题。

您可以试着阅读以下内容:

print ser.read(ser.inWaiting())
我看到您正在使用
ser.readline()
,它应该等待
\n
或直到超时,但请尝试一下
ser.read()
,它仍将以相同的方式打印出来(只要您收到的内容之间有
\n


现在你说持续传输的频率是多少?。我想知道如果读线超时,是否有任何方法会丢失输入的数据。

为什么需要
时间。最后是sleep(30)
语句?这只是一个测试代码。我想要的实际系统应该是这样工作的:1。等待事件12。如果发生事件1,则获取序列值,直到事件2发生3。继续重复步骤1和步骤2我正在寻找的事件1并不经常发生。因此,在完成步骤2之后,可能需要1分钟以上的时间才能发生下一次Event1,之后串行读取会给出空值。上述测试代码中的延迟用于模拟等待Event1的时间延迟。如果超过1分钟,系统将无法正常工作!我无法创建您的设置类型。。。无法测试。但您可以在循环中尝试
ser.inWaiting()
语句,看看在这种情况下它返回什么。