最近对产品进行某项压力测试时,需要分析产品打印的串口数据,这就需要将串口数据保存到一个文本文档中供我们分析与查看,这项保存数据到文本文档中的功能一般的串口助手(如sscom)是支持的,但是这类调试助手保存的数据一般不带时间戳,如果出现问题,很难去确认问题出现的时间以及及进一步分析问题原因。比较简单的方案便是使用Python来编写一个测试脚本,帮助我们将接收到的串口数据及时间戳保存到我们要求的文本文档中来。
一、安装pyserial模块
在使用串口前,首先需要安装pyserial串口通信模块,以提供serial module给我们的脚本使用。pyserial支持Windows、Linux和MAC系统,Windows系统可以直接在pycharm这个IDE上对工程的Python解释器进行操作,安装pyserial软件包。Linux可以在终端中依次输入如下命令:
sudo apt install python-pip //Python2
sudo apt install python3-pip //Python3
如果已经安装了pip,则不需要上一步,直接输入如下命令即可:
pip install pyserial //Python2
pip3 install pyserial //Python3
二、编写测试脚本
在安装好pyserial模块后,便可以编写我们的测试脚本了,思路如下:1、上电确定串口参数和文件存储名称;2、配置串口;3、在while(1)中循环接收串口数据;3、接受到数据后,将时间及串口数据写入到文本文档中。
代码如下:
import serial
import datatime
import serial.tools.list_ports
def recvive_data(serial_channel)
while 1 ==1 :
data = serial.readline()
if data == '' :
continue
else :
break
return data
if __name__ == '__main__' :
comlist = serial.tools.list_ports.comports()
i = 0
for i in range(len(comlist))
com = input('Please enter com number to select com,such as COM1\r\n')
if com:
baudrate = ('Pleasr enter baudrate,such as 115200\r\n')
file_name = ('Please enter the name of the file to be stored\r\n')
if baydrate:
serial = serial.Serial(com, int(baudrate), time out = 0.005)
if serial.isOpen():
print("serial open success")
else:
print("serial open failed")
while 1 == 1:
if serial.in_waiting > 0 :
data = receive_data(serial)
print(datatime.datatime.now())
print(data.hex(' '))
if file_name:
fw = open('./' + file_name + '.TXT', 'a' ,encoding = 'UTF-8')
fw.write(str(datatime.datatime.now()))
fw.write('\r\n')
fw.write(data.hex(' '))
fw.write('\r\n')
fw.close()