何时冲洗Pyserial缓冲区?

时间:2018-10-08 17:02:37

标签: python serial-port pyserial

我正在与Pyserial一起工作,并且对围绕刷新输入和输出缓冲区的最佳做法有疑问。目前,我在发送命令之前重置输出缓冲区,并在读取回复之前重置输入。似乎我偶尔会错过回复的开始,因此我正在考虑在发送命令之前修改程序以重置输入缓冲区。我也正在考虑链接我的发送和接收函数,以便发送始终调用接收并希望收紧循环。

    def send_cmd(self, cmd_to_send):
        self.ser.reset_output_buffer()
        self.ser.write(cmd_to_send)

    def receive_cmd(self):
        self.ser.reset_input_buffer()
        # Read logic below

考虑过渡到这种情况

    def send_cmd(self, cmd_to_send):
        self.ser.reset_output_buffer()
        self.ser.reset_input_buffer()
        self.ser.write(cmd_to_send)
        self.receive_cmd()

    def receive_cmd(self):
        # Read logic below

2 个答案:

答案 0 :(得分:0)

在端口配置中,键timeout让您在与端口的每次通信中等待一段时间。

我通常使用此参数来防止端口缓冲区出现问题。试试这个,也许没必要冲洗。

答案 1 :(得分:0)

这篇文章获得了不错的流量,所以我只是想让大家知道我从来没有找到这个问题的答案。我尝试了各种配置,但最终刷新似乎更多地依赖于硬件本身而不是软件。我确实最终过渡到了我提到的代码,它似乎有所帮助,尽管略有帮助。所以我会推荐这样的东西:

def send_cmd(self, cmd_to_send):
    self.ser.reset_output_buffer()
    self.ser.reset_input_buffer()
    self.ser.write(cmd_to_send)
    self.receive_cmd()

def receive_cmd(self):
    # Read logic below

如果有人能提供更好的答案,我仍然会很感激:)

编辑:我也根据需要单独读取字节。正如爱德华多在另一个答案中提到的那样,使用 readlines() 可能会取得更大的成功。