gpt4 book ai didi

python - Python 中长期串行连接出现 IO 错误 [Errno 5]

转载 作者:太空宇宙 更新时间:2023-11-03 17:18:09 25 4
gpt4 key购买 nike

我正在 Ubuntu 上运行一个相当简单的 python 代码,用于与 Arduino 进行通信。该代码按预期运行大约 15 分钟,然后抛出 I/O 错误 [Errno 5]。我搜索了许多有关此错误消息的线程,但似乎找不到适合我需要的解决方案。

Python 代码通过串口向 Arduino 发送命令,Arduino 执行该命令的任何操作。当抛出此错误时,Arduino 会被迫放弃其原始端口号。它从“/dev/ttyACM1”到“/dev/ttyACM2”

起初我以为这与 Arduino 的自动重置功能有关,我在 Reset 和 +5V 引脚之间使用 120 欧姆电阻绕过了该功能。这并没有解决问题。

接下来,我认为这是因为 Ubuntu 机器因不活动而自行挂起,因此我禁用了省电功能,但没有任何改善。

此外,我将最初运行 python 代码的终端 session 保持打开状态。

我确定问题与串行端口号问题有关,因为错误是由失败的 ser.write 命令触发的

产生此错误的Python代码的子例程如下:

def sc_loop(ptime,maxiter, file):

iter = 1 ## Initialize cycle count
totalvol = 0
cyclevol = 0
while iter < maxiter:
ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
print >>file, st, " - pump cycle #", iter
## Tell the arduino to begin pumping
ser.write("1".encode())
pump = ser.readline()
if pump == 'P':
ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
print >>file, st, " - Sample chamber pump turned ON"
ts = time.time()
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
print >>file, st, " - Sample chamber pump turned ON"
time.sleep(ptime)
ser.write("2".encode())
ts2 = time.time()
st2 = datetime.datetime.fromtimestamp(ts2).strftime('%Y-%m-%d %H:%M:%S')
print >>file, st2, " - Sample Chamber Pump turned OFF"
print >>file, st2, " - Pump was on for",ts2-ts, "seconds"
cyclevol = 0.0667*(ts2-ts)
print >>file, st2, " - ", cyclevol," mL of sample were pumped this cycle"
totalvol = totalvol+cyclevol
print >>file, st2, " - ", totalvol, " mL of sample have been pumped so far"
time.sleep(3)
runcamera(file) ## Run camera
## imaged = raw_input("Sample is ready for imaging [Press any key once imaged] ")
iter = iter+1
return

这段代码可以完美地工作,尽管是暂时的。我的问题是,Python 代码运行 10-15 分钟后,是什么原因导致此错误?

提前致谢!

最佳答案

看一下:

http://ubuntuforums.org/showthread.php?t=2057988

该问题是由于 udev 为设备提供动态名称造成的。一段时间后,arduino 被机器重新注册,并被分配一个新的端口号。它被分配了一个新的端口号,因为驱动程序在几乎同时“删除”和“添加”arduino 时会打嗝。

为 udev 创建新规则来为设备分配静态端口将会有所帮助。

关于python - Python 中长期串行连接出现 IO 错误 [Errno 5],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com