diff --git a/test2.py b/test2.py index 688a580..6dd4c8d 100644 --- a/test2.py +++ b/test2.py @@ -1,43 +1,100 @@ +# import socket + +# # 设备信息 +# IP = "192.168.250.63" +# PORT = 502 +# TIMEOUT = 10 # 超时时间(秒) + +# def parse_weight(raw_data): +# """解析原始数据,提取重量(如从 b'ST,NT, +0000175\r\n' 中提取 175)""" +# try: +# # 1. 字节串解码为字符串(去除 b'' 包裹) +# data_str = raw_data.decode('utf-8').strip() # strip() 去除首尾的换行符\r\n和空格 +# # 此时 data_str 应为 'ST,NT, +0000175' + +# # 2. 按逗号分割字符串,取第三个字段(包含重量的部分) +# parts = data_str.split(',') # 分割后为 ['ST', 'NT', '+0000175'] +# weight_part = parts[2].strip() # 得到 '+0000175' + +# # 3. 提取纯数字(去除可能的正负号和前导零) +# # 方法:替换掉非数字字符,再转换为整数 +# weight_num = int(''.join(filter(str.isdigit, weight_part))) +# return weight_num +# except (IndexError, ValueError, UnicodeDecodeError) as e: +# print(f"解析失败:{e},原始数据:{raw_data}") +# return None + +# # 创建TCP连接并持续读取 +# with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: +# try: +# s.settimeout(TIMEOUT) +# s.connect((IP, PORT)) +# print(f"✅ 已连接到 {IP}:{PORT},开始持续读取重量...\n") + +# while True: # 循环读取 +# data = s.recv(1024) # 接收数据 +# if data: +# print(f"原始数据:{data}") +# weight = parse_weight(data) +# if weight is not None: +# print(f"解析出重量:{weight}\n") +# else: +# print("❌ 未收到数据,等待下一次...\n") +# except ConnectionRefusedError: +# print(f"❌ 连接失败:{IP}:{PORT} 拒绝连接") +# except socket.timeout: +# print(f"❌ 超时:{TIMEOUT}秒内未收到数据") +# except Exception as e: +# print(f"❌ 发生错误:{e}") + import socket +import time # 导入时间模块,用于记录时间戳 # 设备信息 IP = "192.168.250.63" PORT = 502 TIMEOUT = 10 # 超时时间(秒) + def parse_weight(raw_data): """解析原始数据,提取重量(如从 b'ST,NT, +0000175\r\n' 中提取 175)""" try: - # 1. 字节串解码为字符串(去除 b'' 包裹) - data_str = raw_data.decode('utf-8').strip() # strip() 去除首尾的换行符\r\n和空格 - # 此时 data_str 应为 'ST,NT, +0000175' - - # 2. 按逗号分割字符串,取第三个字段(包含重量的部分) - parts = data_str.split(',') # 分割后为 ['ST', 'NT', '+0000175'] - weight_part = parts[2].strip() # 得到 '+0000175' - - # 3. 提取纯数字(去除可能的正负号和前导零) - # 方法:替换掉非数字字符,再转换为整数 - weight_num = int(''.join(filter(str.isdigit, weight_part))) + data_str = raw_data.decode("utf-8").strip() + parts = data_str.split(",") + weight_part = parts[2].strip() + weight_num = int("".join(filter(str.isdigit, weight_part))) return weight_num except (IndexError, ValueError, UnicodeDecodeError) as e: print(f"解析失败:{e},原始数据:{raw_data}") return None + # 创建TCP连接并持续读取 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: try: s.settimeout(TIMEOUT) s.connect((IP, PORT)) print(f"✅ 已连接到 {IP}:{PORT},开始持续读取重量...\n") - + + last_receive_time = None # 记录上一次收到有效数据的时间戳(初始为None) + while True: # 循环读取 data = s.recv(1024) # 接收数据 if data: print(f"原始数据:{data}") weight = parse_weight(data) if weight is not None: - print(f"解析出重量:{weight}\n") + current_time = time.time() # 当前时间戳(秒,带小数) + print(f"解析出重量:{weight}") + + # 计算与上一次有效数据的时间间隔 + if last_receive_time is not None: + interval = current_time - last_receive_time # 间隔时间(秒) + print(f"与上一次数据的间隔:{interval:.3f} 秒\n") # 保留3位小数 + else: + print("(首次收到数据,无间隔记录)\n") + + last_receive_time = current_time # 更新上一次时间戳 else: print("❌ 未收到数据,等待下一次...\n") except ConnectionRefusedError: @@ -45,4 +102,4 @@ with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: except socket.timeout: print(f"❌ 超时:{TIMEOUT}秒内未收到数据") except Exception as e: - print(f"❌ 发生错误:{e}") \ No newline at end of file + print(f"❌ 发生错误:{e}")