From 5a98d1bea7f421307a1f4f9958e6fad8d4e3c899 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 14 Jul 2025 10:48:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B5=8B=E8=AF=95cd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/em/cd.py | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/apps/em/cd.py b/apps/em/cd.py index 73592048..63f05f4f 100644 --- a/apps/em/cd.py +++ b/apps/em/cd.py @@ -16,7 +16,7 @@ def get_checksum(body_msg): def handle_bytes(arr): if len(arr) < 8: - return "返回数据长度错误" + return f"返回数据长度错误-{arr}" if arr[0] != 0xEB or arr[1] != 0x90: return "数据头不正确" @@ -208,3 +208,36 @@ def get_tyy_data(*args, retry=1): raise ParseError(f'采集器返回数据错误-{res}') else: return res + + +def get_tyy_data_3(*args, retry=2): + host, port = args[0], int(args[1]) + for attempt in range(retry): + try: + # 每次请求都新建连接(确保无共享状态) + with socket.create_connection((host, port), timeout=10) as sc: + sc.sendall(b"R") + + # 接收完整响应(避免数据不完整) + # resp = b"" + # while True: + # chunk = sc.recv(4096) + # if not chunk: + # break + # resp += chunk + resp = sc.recv(4096) + if not resp: + raise ParseError("设备未启动") + + res = handle_bytes(resp) + if isinstance(res, str): + raise ParseError(f"采集器返回数据错误: {res}") + return res + except (socket.timeout, ConnectionError) as e: + if attempt == retry - 1: # 最后一次尝试失败才报错 + raise ParseError(f"采集器连接失败: {str(e)}") + time.sleep(0.5) # 失败后等待 1s 再重试 + except ParseError: + raise + except Exception as e: + raise ParseError(f"未知错误: {str(e)}") \ No newline at end of file