我正在与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
答案 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() 可能会取得更大的成功。