python serial串口调试中的可能会产生的一些数据读取异常的问题_serial timeout

调试记录

记录下几种常见的坑
1.timeout与sleep的相对时间设置的不对

if __name__ == '\_\_main\_\_':

    #创建端口对象
    ser =serial.Serial()
    try:
        #传入参数
        ser = serial.Serial("COM5", 115200, timeout=0.01)

        #连续发送信息
        while 1:
            #传入一个16进制数组
            ser.write(bytes([0x01, 0x04, 0x01, 0xA1, 0x00, 0x17, 0xE0, 0x1A]))

            #设置发送间隔时间为0.3s
            time.sleep(0.3)

            #打印输出的16进制信息
            #print(hexShow(ser.read\_all()))
            print(hexArray(ser.read_all()))

    except Exception as e:
        print('端口连接失败,错误原因:\n',e)
#关闭串口
sys.exit()


这里的代码中,timeout为0.01,sleep为0.3,让我们看看运行结果
在这里插入图片描述
如果我们将timeout设置为0.3,sleep设置为0.01,也就是timeout>sleep的情况,再让我们看看结果

01 04 2e 00 39 00 2f 00 40 00 00 00 32 00 6e 00 00 00 0a 00 64 00 00 00 0a 00 d2 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 0f 00 00 0a dd 





58 72 02 27 00 23 00 40 00 00 00 32 00 5a 00 00 00 0a 00 6e 00 00 00 0a 00 96 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 0f 00 00 a3 b0



01 04 2e 00 27 00 23 00 40 00 00 00 32 00 
50 00 00 00 0a 00 82 00 00 00 00 00 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 0f 00 00 9a 88 

#以下省略无数行

结论:一般情况下,timeout都设置为0.01较为稳妥,但是具体能不能设置为0.01还需要根据波特率自己调试,但是sleep的设定最好不要远小于timeout,这样会造成读取数据异常

2.串口连接异常
如果串口没有连接好,很容易出现串口连接成功但是不出数据的现象,在看到串口成功连接但是却没有数据产生,应该看看传输线连接好了没有,我有好几次调试了半天没有出数据才发现原来是串口的一根线断了,虽然断了一根线但是COM口还是可以正常连接的!

3.串口没有打开
串口通信编程一定要牢记流程:
(1)实例化串口
(2)设置串口参数
(3)打开串口
(4)写入数据
(5)读取数据
(6)关闭串口
(ps:养成随手关流的好习惯)

替代方案 cushy-serial

cushy-serial是一个轻量级的Serial框架,初衷是希望使Serial编程变得更加简单、快捷,因此,相较于传统的pyserial,该框架可以更加快速地构建起一个serial程序,其可以兼容pyserial的所有特性,并且自定义serial消息异步回调,无需花费精力在多线程上,项目地址:https://github.com/Undertone0809/cushy-serial

  • 快速上手
pip install cushy-serial --upgrade 

  • 下面是一个简单的serial程序,当python客户端接收到来自串口的信息时会自动回调
from cushy_serial import CushySerial  
  
serial = CushySerial("COM1", 9600)  
serial.send("I am python client")  
  
  
@serial.on\_message()  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值