如何在Pyserial Xbee通信中退出while循环?

0 投票
2 回答
554 浏览
提问于 2025-04-18 00:17

在我的项目中,我需要通过一个xbee模块把字节数据发送到另一个xbee。我有一段Python代码运行得很好,但有一个问题。

在下面的接收代码中,我需要在所有数据成功接收后添加一些额外的语句。问题是,由于有一个一直循环的条件(用于持续接收数据包),我添加的任何语句都会无限执行。有没有什么办法可以检查“是否所有数据包都已成功接收”,然后退出这个循环,执行其他语句呢?

import serial

ser = serial.Serial(port='COM28', baudrate=9600, parity=serial.PARITY_NONE,    stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS, timeout=0)

c=0
data=[]
msgparts=[]

while True:
  if ser.inWaiting():
     val = ser.readline(ser.inWaiting())
     print val
     print(val)
     fn1="image%s" %c
     c=c+1
     f = open(fn1, 'wb')
     f.write(val)
     print fn1
     f.close()
     msgparts.append(val) 

     #### Here I want to add new statements       

2 个回答

0

不要在循环的开头写:

while True:

你可以从下面这个开始:

message_complete = False
while not message_complete:

然后在循环里面加一行,比如:

if val[-1:] == '\n': 
    message_complete = True

(如果换行符是消息的结束标志)

当然,break语句在这里也能用。

你是怎么判断消息是否完成的呢?

0

我不知道怎么检查所有的消息部分是否都收到了,不过你可以用 break 来跳出循环。

撰写回答