利用ChatGPT设计了两个通过串口收发信息的程序,接收端在收到信息后,将信息拆解再插入数据库,目前在串口通信时,一条100余字节的信息,第一次发送时只会接收到信息的1/3,第二次发送时,接收到第一次发送信息的后2/3和第二次的1/3组合,第三次又是第二次的2/3和第三次的1/3组合,以此类推。
实际使用中会发送至少100-200字符的信息,请教如何做到接收信息的完整。以下为发送端的部分代码:
def send_data(self):
try:
# 获取勾选项状态
selected_options = [option for option, var in self.options.items() if var.get() == 1]
# 获取单选项内容
alert_type = self.alert_type_var.get()
# 获取填写项内容
author = self.author_var.get()
# 获取当前时间
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
# 获取文本编辑框内容
message = self.text_box.get("1.0", tk.END)
# 构建数据字符串
data_to_send = f"Tables: {', '.join(selected_options)} | EventKind: {alert_type} | Event: {message} | team: 清风班组 | Writer: {author} | DT: {current_time} | subKind: 其他 | MSG_From: QX2 | ENDHERE"
# 调用串口通信实例的 send_data 方法发送数据
self.serial_communicator.send_data(data_to_send)
print("Sending data:", data_to_send)
except Exception as e:
print(f"Error sending data: {e}")
接收端的代码:
def receive_data(self):
while True:
try:
if self.serial_communicator and self.serial_communicator.is_open:
# 清空队列中的旧数据
with self.receive_queue.mutex:
self.receive_queue.queue.clear()
# 从串口读取数据
received_data = self.serial_communicator.readline().decode('utf-8')
# 判断是否包含结束符号
if 'ENDHERE' in received_data:
# 找到结束符号时,截取到结束符号之前的部分
received_data = received_data.split('ENDHERE')[0]
print(received_data)
# 将接收到的数据放入队列
self.receive_queue.put(received_data)
# 立即处理接收到的数据
self.process_received_data()
except Exception as e:
print(f"Error receiving data: {e}")