我正在使用Python中的串行通信模块..但收到的数据不正确..它不稳定,经常发生变化

2024-06-16 10:23:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我的基本任务是从文件中读取一些命令,在读取这些命令之后,我必须使用串行模块将这些命令串行地发送到串行端口..我为这个项目创建了许多API..包括从文件中读取,将我从文件中读取的数据转换成int格式,使其发送到串行端口,然后通过UART接收响应,UART的编程方式是,它对接收到的每个命令都给出一个特定的响应。我可以发送和接收大多数命令,但对响应中的一个命令因此,当我使用这个命令运行我的项目时,我不能正确地接收数据(我得到了不稳定的数据),但是当我制作一个程序来单独发送这个命令时(没有其他API),i、 我只用send函数来发送命令,用receive函数来得到响应。然后我就可以得到正确的响应。我测试了很多次,但直到现在我还不能调试它。如果有人能帮我,那将是一个很大的帮助。。你知道吗

我完整代码的链接如下 https://github.com/AkshatPant06/Akshat-Pant/blob/master/fileAPI.py

我只发送一条命令并得到正确响应的代码链接如下: https://github.com/AkshatPant06/Akshat-Pant/blob/master/working%20file%20for%20a%20single%20cmd

我试图更改时间延迟和超时值,但在整个程序中不起作用

我希望你能得到完整的资料,你也可以浏览一下这些文件,看看我想要的实际订单和我得到的是什么 https://github.com/AkshatPant06/Akshat-Pant/blob/master/README.md


Tags: 文件数据项目端口https命令githubmaster
1条回答
网友
1楼 · 发布于 2024-06-16 10:23:13

精简版阅读器和扩展版阅读器之间的唯一区别在于,在后者中,您向另一端的设备发送两次命令:

def recvCmd(mode):
    ser.write(serial.to_bytes(intCmd))            # Send command to the other side
    time.sleep(0.5)
    if mode==None:
        data_recv=ser.read(2)
        return data_recv
    elif mode==1:                                 # This is the mode that triggers the 4 Kb response
        ser.write(serial.to_bytes(intCmd))        # You send the command A SECOND TIME!
        time.sleep(1)
        data=b''
        timeout=time.time()+3.0
        while ser.inWaiting() or time.time()-timeout<0.0:
            if ser.inWaiting()>0:
                data+=ser.read(ser.inWaiting())
                timeout=time.time()+3.0
        return data
    elif mode==0:
        ser.write(serial.to_bytes(getDataBuff()))
        resp=ser.read(2)
        return resp

你的阅读代码是最好的,因为你可以得到它在两个版本的读者。没有理由一个工作正常而另一个失败。你知道吗

如果无法解决删除重复写入的问题,则可能需要:

-增加RX缓冲区的大小(仅适用于Windows),请参见here,您可以使用ser.set_buffer_size(rx_size = size_bigger_than_4_Kb)和/或使用Windows控制面板。我从未尝试过这种方法,但对于已知的一次性非连续交换,这可能会有所帮助。你知道吗

-尝试使用不同的编程语言。在别的地方你说你用不同的软件运行这个。Python非常好,效率也很高,但它可能不是您所要做的最好的。你知道吗

—用Python或任何其他语言实现某种流控制、硬件或软件。缺点是您需要在链接的两侧支持和实现流控制。如果您想完全确保数据流畅地流动,那么流控制就是一种方法。你知道吗

-降低波特率

相关问题 更多 >