首页 > 解决方案 > Pyserial 包不会从 COM 端口读取所有数据(始终只读取 6000 到 6150 字节)

问题描述

我写了一个小的 pyserial 接口,在发出命令后从 COM 端口读取数据。例如:在我的情况下,我的系统有很多网络接口,所以我需要使用ifconfig命令验证所有接口是否都已启动。但是当我给出这个命令时,命令的输出在最后几行被截断。输出的近似大小(以字节为单位)为 6500-7000 字节,但我一直只收到大约 6000-6150 字节。请在下面找到我的代码'''

import serial
import time
com_serial = serial.Serial("COM6", 115200, timeout = 10)
com_serial.reset_input_buffer()
com_serial.write(b"ifconfig\n")
data_all = b" "
time.sleep(5)
while True:
   bytetoread = com_serial.inWaiting()
   time.sleep(2)
   print ("Bytetoread: " , bytetoread)
   data = com_serial.read(bytetoread)
   data_all += data
   if bytetoread < 1:
      break
print ("Data:", data_all)
com_serial.close()

''' **输出:Bytetoread:3967 Bytetoread:179 Bytetoread:2049 Bytetoread:0 **数据:*********最后缺少数据。我不确定为什么日志丢失?

我尝试了另一种方法。'''

import serial
import time
com_serial = serial.Serial("COM6", 115200, timeout = 10)
com_serial.reset_input_buffer()
com_serial.write(b"ifconfig\n")
time.sleep(5)
data_all = b" "   
data_all = com_serial.read(100000000)
print (data_all)
com_serial.close()

'''

在这里,最后几个日志也被截断。

标签: pythonserial-portpyserial

解决方案


根本原因似乎是 Tx 和 Rx 串行缓冲区的缓冲区大小不足。通过使用 .set_buffer_size() 增加缓冲区大小解决了这个问题。

'''
import serial
import time
com_serial = serial.Serial("COM6", 115200, timeout = 10)
com_serial.set_buffer_size(rx_size = 12800, tx_size = 12800)
com_serial.reset_input_buffer()
com_serial.write(b"ifconfig\n")
data_all = b" "   
data_all = com_serial.read(100000000)
print (data_all)
com_serial.close()

'''


推荐阅读