Ver Fonte

first commit

jindou há 1 ano atrás
commit
3cb2a4b5f5
4 ficheiros alterados com 4536 adições e 0 exclusões
  1. 339 0
      LogTT_SvrV02.py
  2. 901 0
      main.py
  3. 855 0
      mainwindow.py
  4. 2441 0
      mainwindow.ui

+ 339 - 0
LogTT_SvrV02.py

@@ -0,0 +1,339 @@
+# python3.6
+import json
+import os
+import struct
+import getopt
+import random
+import sys
+from datetime import datetime
+
+import time
+
+from paho.mqtt import client as mqtt_client
+
+from binascii import *
+# import chardet
+# broker = 'vip.frp.wlphp.com'
+# port = 5801
+# topic = "/yw/#"
+
+# pyinstaller -F  -n mqtt_sub_v0004 mqtt_sub.py
+# pyinstaller -F  -n mqtt_sub_v0006 mqtt_sub.py
+# pyinstaller -F  -n mqtt_c0_v2 mqtt_c0.py
+# C:\Users\chx_s\AppData\Local\Programs\Python\Python36\Scripts\pyinstaller.exe -F  -n code_sub code_sub.py
+
+# C:\Users\chx_s\AppData\Local\Programs\Python\Python36-32\python code_sub.py
+
+
+test = {"mqtt_broker": "test-mqtt.cpyypt.cn", "mqtt_port": 9000, "mqtt_user": "admin", "mqtt_pwd": "houjianwei"}
+prod = {"mqtt_broker": "mqtt.cpyypt.cn", "mqtt_port": 9000, "mqtt_user": "cpyypt", "mqtt_pwd": "1SvTlvm1VCawSzS"}
+zz = {"mqtt_broker": "zz-mqtt.cpyypt.cn", "mqtt_port": 9000, "mqtt_user": "cpyypt", "mqtt_pwd": "oZ8hl3tYpMNEqHx"}
+
+mqtt_env = "test"
+# mqtt_env = "prod"
+mqtt_broker = 'test-mqtt.cpyypt.cn'
+mqtt_port = 9000
+mqtt_user = 'admin'
+mqtt_pwd = 'houjianwei'
+# mqtt_subtopic = 'cpyypt/logup/#'
+# mqtt_subtopic = [("cpyypt/up/#", 0), ("cpyypt/logup/#", 0)]
+mqtt_subtopic = [("cpyypt/up/9002/#", 0), ("cpyypt/down/9002/broadcast", 0)]
+mqtt_hex = 1
+version = "0.0.0.2"
+version_w_ascii = 1
+version_w_hex = 1
+
+error_msg = ""
+info_msg = ""
+
+
+# generate client ID with pub prefix randomly
+client_id = f'LogTT_Svr_{random.randint(0, 100)}'
+
+# LogTT_SN = "0"
+
+
+def time_n2s(time_n):  # 传入参数
+    data_sj = time.localtime(time_n)
+    time_str = time.strftime("%Y-%m-%d %H:%M:%S", data_sj)  # 时间戳转换正常时间
+    return time_str  # 返回日期,格式为str
+
+
+def get_f2s(f, n):
+    sf = f"%0.2f" % f
+    if len(sf) < n:
+        sf = " " * (n - len(sf)) + sf
+    return sf
+
+
+def get_log_file_name_ascii(sn):
+    # global
+    log_file_name = f"./log/LogTT_{sn}_ascii_" + datetime.now().strftime('%Y-%m-%d') + ".log"
+    return log_file_name
+
+
+def get_log_file_name_hex(sn):
+    # global
+    log_file_name = f"./log/LogTT_{sn}_hex_" + datetime.now().strftime('%Y-%m-%d') + ".log"
+    return log_file_name
+
+
+def my_unpack(s, data, i):
+    global info_msg
+    global error_msg
+    temp_msg = ""
+
+    if type(s) == str:
+        np = struct.calcsize(s)
+        try:
+            val = struct.unpack(s, data[i:(i + np)])
+            return i + np, val[0]
+
+        except:
+            temp_msg = "fun:" + sys._getframe().f_code.co_name + \
+              ",line:" + f"{sys._getframe().f_lineno}." + \
+                  f"\n出错了!!!,s={s},i={i},data={data}"
+            error_msg = error_msg + temp_msg
+            info_msg = info_msg + temp_msg
+
+            return i + np, 0
+    elif type(s) == int:
+        val = data[i:(i + s)]
+        return i + s, val
+
+
+def parse_data(data, topic):
+    global info_msg
+    global error_msg
+
+
+def subscribe(client: mqtt_client):
+    global info_msg
+    global error_msg
+
+    def on_message(client, userdata, msg):
+        LogTT_SN = str.split(msg.topic, "/")[-1]
+        head = b""
+        body = b""
+        line_feed = ""
+        start_ttl = "TTL_U="
+        start_rs232 = "RS232_U="
+        start_rs485 = "RS485_U="
+        start_fixed = "FIXED_INFO="
+        start_heart = "HEART_MSG="
+        start_pt = "PT_CMD="
+        flag_ascii = False
+        flag_hex = True
+        if msg.payload[:len(start_ttl)] == start_ttl.encode("utf-8"):
+            flag_ascii = True
+            flag_hex = True
+            head = msg.payload[:len(start_ttl)]
+            body = msg.payload[len(start_ttl):]
+
+        elif msg.payload[:len(start_rs232)] == start_rs232.encode("utf-8"):
+            flag_ascii = False
+            flag_hex = True
+            head = msg.payload[:len(start_rs232)]
+            body = msg.payload[len(start_rs232):]
+
+        elif msg.payload[:len(start_rs485)] == start_rs485.encode("utf-8"):
+            flag_ascii = False
+            flag_hex = True
+            head = msg.payload[:len(start_rs485)]
+            body = msg.payload[len(start_rs485):]
+
+        elif msg.payload[:len(start_fixed)] == start_fixed.encode("utf-8"):
+            flag_ascii = True
+            flag_hex = False
+            head = msg.payload[:len(start_fixed)]
+            body = msg.payload[len(start_fixed):]
+
+        elif msg.payload[:len(start_heart)] == start_heart.encode("utf-8"):
+            flag_ascii = True
+            flag_hex = False
+            head = msg.payload[:len(start_heart)]
+            body = msg.payload[len(start_heart):]
+
+        elif msg.payload[:len(start_pt)] == start_pt.encode("utf-8"):
+            flag_ascii = True
+            flag_hex = False
+            head = msg.payload[:len(start_pt)]
+            body = msg.payload[len(start_pt):]
+        else:
+            flag_ascii = False
+            flag_hex = True
+            body = msg.payload
+
+        if flag_ascii:
+            try:
+                body_str = body.decode('gb2312')
+            except UnicodeDecodeError:
+                try:
+                    body_str = body.decode('utf-8')
+                except UnicodeDecodeError:
+                    body_str = body.hex().upper()
+            head_str = head.decode('utf-8')
+            msg_ascii = datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] + "-->:"
+            msg_ascii = msg_ascii + f"topic:{msg.topic} msg:{head_str}\r\n{body_str}"
+            msg_ascii = msg_ascii.rstrip() + "\r\n"
+            # 输出信息
+            try:
+                with open(get_log_file_name_ascii(LogTT_SN), 'a') as f:
+                    global version_w_ascii
+                    if version_w_ascii > 0:
+                        f.write("version:" + version + "\n")
+                        version_w_ascii = 0
+                    f.write(msg_ascii)
+                    f.close()
+            except Exception as e:
+                print(str(e))
+
+            print(msg_ascii, end="")
+
+            # FIXED_INFO={"base_info":{"name":"张三","uplinkB":1010,"rsrp":-99,"tel":"13888888888","reset_times":49,"project":"LogTT","csq":23,"downlinkB":573,"rsrq":-13,"dev_type":"9002","simid":0,"muid":"20230818221817A863212A0300364949","snr":-1,"version":"9002.4.002","iccid":"89860622330053052122","imei":"869861069998891","rssi":-66,"dev_pd":"20240329","dev_sn":1},"pos_info":{"lng":0,"lat":0}}
+
+            if msg.payload[:len(start_fixed)] == start_fixed.encode("utf-8"):
+                body_dict = json.loads(body_str)
+                print(body_dict)
+
+        if flag_hex:
+            msg_hex = datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] + "-->:"
+            msg_hex = msg_hex + f"topic:{msg.topic} msg:{head.decode('utf-8')}{body.hex().upper()}"
+            # 输出信息
+            try:
+                with open(get_log_file_name_hex(LogTT_SN), 'a') as f:
+                    global version_w_hex
+                    if version_w_hex > 0:
+                        f.write("version:" + version + "\n")
+                        version_w_hex = 0
+                    f.write(msg_hex + "\r\n")
+                    f.close()
+            except Exception as e:
+                print(str(e))
+            if not flag_ascii:
+                print(msg_hex)
+
+    client.subscribe(mqtt_subtopic)
+    client.on_message = on_message
+
+
+def connect_mqtt() -> mqtt_client:
+    def on_connect(client, userdata, flags, rc):
+        if rc == 0:
+            print("Connected to MQTT Broker!")
+            subscribe(client)
+        else:
+            print("Failed to connect, return code %d\n", rc)
+
+    client = mqtt_client.Client(client_id)
+    client.username_pw_set(mqtt_user, mqtt_pwd)
+    client.on_connect = on_connect
+    client.connect(mqtt_broker, mqtt_port)
+    return client
+
+
+def on_disconnect(client, userdata, rc):
+    print("mqtt disconnect")
+
+
+def run():
+    client = connect_mqtt()
+    client.on_disconnect = on_disconnect
+    # subscribe(client)
+    client.loop_forever()
+
+
+def print_usage():
+    print('')
+    print('帮助信息:')
+    print('--env=<prod生产环境/zz郑州政务云/test测试环境> ')
+    print('')
+    print('举例:')
+    print('\r\ndbg_mqtt.exe --env=test\r\n')
+    print('\r\ndbg_mqtt.exe --env=prod\r\n')
+    print('\r\ndbg_mqtt.exe --env=zz\r\n')
+    print('\r\ndbg_mqtt.exe --env=test --subtopic=cpyypt/up/0902/0000000003,cpyypt/down/0902/0000000003\r\n')
+    print('\r\npython dbg_mqtt.py --env=prod --subtopic=cpyypt/up/0102/0000020142,cpyypt/down/0102/0000020142\r\n')
+    print('\r\npython dbg_mqtt.py --env=prod --subtopic=cpyypt/up/0101/0000001048,cpyypt/down/0101/0000001048\r\n')
+    print('')
+
+
+def main(argv):
+    global mqtt_env
+    global mqtt_broker
+    global mqtt_port
+    global mqtt_user
+    global mqtt_pwd
+    global mqtt_subtopic
+    global mqtt_hex
+
+    if not os.path.exists("log"):
+        os.makedirs("log")
+
+    # python sub2.py broker=mqtt.cpyypt.cn port=9000 user=admin pwd=houjianwei subtopic="/yw/#"
+    print("dbg_mqtt version:" + version)
+    print('输入的参数 argv=:', argv)
+
+    try:
+        opts, args = getopt.getopt(argv, "h", ["env=", "broker=", "port=", "user=", "pwd=", "subtopic=", "hex"])
+    except getopt.GetoptError:
+        print_usage()
+        sys.exit(2)
+
+    for opt, arg in opts:
+        print('解析', opt, arg)
+        if opt == '-h':
+            print_usage()
+            sys.exit()
+        elif opt == "--env":
+            mqtt_env = str(arg)
+        elif opt == "--broker":
+            mqtt_broker = str(arg)
+        elif opt == "--port":
+            mqtt_port = int(arg)
+        elif opt == "--user":
+            mqtt_user = str(arg)
+        elif opt == "--pwd":
+            mqtt_pwd = str(arg)
+        elif opt == "--subtopic":
+            st = str(arg).split(",")
+            mqtt_subtopic = [(s, 0) for s in st]
+            # mqtt_subtopic = str(arg).split(";") #[("cpyypt/up/#", 0), ("cpyypt/logup/#", 0)] ("cpyypt/#", 0)
+            print("mqtt_subtopic=", mqtt_subtopic)
+        elif opt == "--hex":
+            mqtt_hex = 1
+    if mqtt_broker == '':
+        print('【服务器地址】为空,请重新输入!')
+        print_usage()
+        sys.exit()
+    if mqtt_port == 0:
+        print('【服务器端口】为空,请重新输入!')
+        print_usage()
+        sys.exit()
+    if mqtt_subtopic == '':
+        print('【主题】为空,请重新输入!')
+        print_usage()
+        sys.exit()
+
+    if mqtt_env == "prod":
+        mqtt_broker = prod["mqtt_broker"]
+        mqtt_port = prod["mqtt_port"]
+        mqtt_user = prod["mqtt_user"]
+        mqtt_pwd = prod["mqtt_pwd"]
+    elif mqtt_env == "zz":
+        mqtt_broker = zz["mqtt_broker"]
+        mqtt_port = zz["mqtt_port"]
+        mqtt_user = zz["mqtt_user"]
+        mqtt_pwd = zz["mqtt_pwd"]
+    else:
+        mqtt_broker = test["mqtt_broker"]
+        mqtt_port = test["mqtt_port"]
+        mqtt_user = test["mqtt_user"]
+        mqtt_pwd = test["mqtt_pwd"]
+
+    run()
+
+
+if __name__ == '__main__':
+    # run()
+    main(sys.argv[1:])

+ 901 - 0
main.py

@@ -0,0 +1,901 @@
+# -*- coding: gb2312 -*-
+
+import time
+from os import path, makedirs
+import sys
+from datetime import datetime
+from PyQt5.QtWidgets import QApplication, QMainWindow
+from PyQt5.QtCore import pyqtSignal
+from PyQt5.QtCore import QUrl
+from PyQt5.QtCore import QTimer
+from PyQt5.QtWebEngineWidgets import QWebEngineView
+from PyQt5.QtGui import QTextCursor
+from mainwindow import *
+import logging
+from platform import node
+from paho.mqtt import client as mqtt_client
+from json import loads as json_loads, dumps as json_dumps, JSONDecodeError
+from threading import Thread
+from requests import get as requests_get
+
+
+# pyinstaller.exe -D -n LogTT_tools_V0.0.0.2 main.py
+# pyinstaller.exe -w -F -n LogTT_tools_V0.0.0.3 main.py
+
+client_id = "LogTT_tool_" + node()
+g_client = mqtt_client.Client(client_id)
+mqtt_broker = 'test-mqtt.cpyypt.cn'
+mqtt_port = 9000
+mqtt_user = 'admin'
+mqtt_pwd = 'houjianwei'
+mqtt_keepalive = 5
+mqtt_timer_time_out = 3*1000
+# mqtt_subtopic = [("cpyypt/up/9002/#", 0), ("cpyypt/down/9002/broadcast", 0)]
+mqtt_subtopic = [("cpyypt/up/9002/#", 0)]
+mqtt_pubtopic = "cpyypt/down/9002/0000000001"
+
+version = "0.0.0.3"
+version_w_ascii = 1
+version_w_hex = 1
+
+error_msg = ""
+info_msg = ""
+
+start_ttl = "TTL_U="
+start_rs232 = "RS232_U="
+start_rs485 = "RS485_U="
+start_fixed = "FIXED_INFO="
+start_heart = "HEART_MSG="
+start_pt = "PT_CMD="
+data_buf = {}
+
+LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
+logging.basicConfig(filename='formater.log', level=logging.DEBUG, format=LOG_FORMAT)
+logging.debug("\n\n................")
+
+def get_log_file_name_ascii(sn):
+    # global
+    log_file_name = f"./log/LogTT_{sn}_ascii_" + datetime.now().strftime('%Y-%m-%d') + ".log"
+    return log_file_name
+
+
+def get_log_file_name_hex(sn):
+    # global
+    log_file_name = f"./log/LogTT_{sn}_hex_" + datetime.now().strftime('%Y-%m-%d') + ".log"
+    return log_file_name
+
+def is_valid_json(json_str):
+    try:
+        json_loads(json_str)
+        return True
+    except JSONDecodeError:
+        return False
+
+class MyWindow(QMainWindow, Ui_MainWindow):
+    map_refresh_signal = pyqtSignal(int, float, float)
+    rx_data_signal = pyqtSignal(str, str, str)
+    mqtt_connect_state_signal = pyqtSignal(str)
+    log_display_update_signal = pyqtSignal(str)
+
+    def __init__(self, parent=None):
+        print("__init__")
+        logging.info("__init__")
+
+        super(MyWindow, self).__init__(parent)
+        self.setupUi(self)
+        self.initUI()
+        self.set_svr_env = "test"
+        self.sn_current = 0
+        self.mqtt_connect_state = "未连接"
+
+        browser = QWebEngineView()
+        self.browser = browser
+        self.horizontalLayout.layout().addWidget(self.browser)
+        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 1024, 600))
+
+        # self.pushButton_set_subscribe.clicked.connect(lambda: {self.mqtt_subscribe(g_client), Thread(target=g_client.loop_forever, daemon=True).start()})
+        self.pushButton_set_subscribe.clicked.connect(lambda: {self.mqtt_subscribe(g_client)})
+        self.mqtt_connect(g_client)
+        self.mqtt_subscribe(g_client)
+        self.mqtt_disconnect(g_client)
+        self.mqtt_thread = Thread(target=g_client.loop_forever, daemon=True)
+        self.mqtt_thread.start()
+
+        if not path.exists("log"):
+            makedirs("log")
+        self.textEdit_log_0rx_display.setText("")
+        self.textEdit_log_0rx_display.moveCursor(QTextCursor.End)
+        self.textEdit_log_0rx_display.document().setMaximumBlockCount(10000)
+        self.display_clear()
+
+    def initUI(self):
+        print("initUI")
+        logging.info("initUI")
+        self.setWindowTitle("LogTT_tools:test-" + version + ",未连接")
+        # self.tabWidget.setCurrentIndex(self.tabWidget.indexOf(self.tab_lsb))
+
+        # self.comboBox_log_sn.currentIndexChanged.connect(self.comboBox_log_sn_change)
+        self.comboBox_log_sn.activated.connect(self.display_update)
+        self.comboBox_log_sn.activated.connect(self.sn_update_something)
+
+        self.pushButton_log_rx_clr.clicked.connect(self.log_rx_clr)
+
+        self.map_refresh_signal.connect(self.map_refresh)
+        self.rx_data_signal.connect(self.parse_data)
+        self.mqtt_connect_state_signal.connect(self.mainWindow_title_update)
+        self.log_display_update_signal.connect(self.log_display_update)
+
+        self.pushButton_set_create.clicked.connect(self.set_create)
+        self.pushButton_set_send.clicked.connect(self.set_send)
+        self.pushButton_set_create_send.clicked.connect(self.set_create_send)
+
+        # self.pushButton_set_send.clicked.connect(lambda: {self.publish(g_client)})
+        self.pushButton_set_connect.clicked.connect(lambda: {self.connect(g_client)})
+
+        self.comboBox_set_svr.activated.connect(self.set_svr)
+        self.checkBox_set_io_up_enable.clicked.connect(self.set_io_up_able)
+        self.checkBox_set_io_up_disable.clicked.connect(self.set_io_up_disable)
+        self.checkBox_set_io_down_enable.clicked.connect(self.set_io_down_able)
+        self.checkBox_set_io_down_disable.clicked.connect(self.set_io_down_disable)
+        self.checkBox_set_io_parameter.clicked.connect(self.set_io_parameter)
+        self.checkBox_set_io_cfg.clicked.connect(self.set_io_cfg)
+
+        self.checkBox_set_default_tx_sn.clicked.connect(self.set_default_tx_sn)
+        self.lineEdit_tx_sn.textChanged.connect(self.set_tx_sn_change)
+
+        self.pushButton_lsb_refresh.clicked.connect(self.lsb_get_fixed_info)
+        self.pushButton_log_send.clicked.connect(self.log_send)
+        self.pushButton_log_refresh.clicked.connect(self.log_refresh)
+        # self.lineEdit_log_rx_buf_max.textChanged.connect(self.log_rx_buf_max)
+        self.pushButton_log_2rs485_0on.clicked.connect(self.log_rs485_up_enable)
+        self.pushButton_log_2rs485_1off.clicked.connect(self.log_rs485_up_disable)
+
+    def timer_test_f(self, str):
+        print("mqtt timer_test_f," + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
+        self.timer_test_t.start(3*1000)  # 10秒后重连
+
+    def mqtt_timer_f(self):
+        print("mqtt mqtt_timer_f," + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
+        # self.mqtt_timer.start(3*1000)  # 10秒后重连
+
+    def log_rx_clr(self):
+        self.textEdit_log_0rx_display.setText("")
+
+    def mainWindow_title_update(self, state):
+        self.setWindowTitle("LogTT_tools:" + "test-" + version + "," + state)
+        if state == "已连接":
+            self.mqtt_subscribe(g_client)
+
+    def mqtt_connect(self, client):
+        print("mqtt mqtt_connect," + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
+        try:
+            def on_connect(client, userdata, flags, rc):
+                if rc == 0:
+                    print("Connected to MQTT Broker!" + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
+                    self.mqtt_connect_state_signal.emit("已连接")
+                else:
+                    print("Failed to connect, return code %d\n", rc)
+                    self.mqtt_connect_state_signal.emit("连接失败")
+                    # self.mqtt_timer.start(mqtt_timer_time_out)  # 10秒后重连
+
+            client.username_pw_set(mqtt_user, mqtt_pwd)
+            client.on_connect = on_connect
+            client.connect(mqtt_broker, mqtt_port, mqtt_keepalive)
+            print("[√]连接成功," + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
+
+        except Exception as e:
+            print("[!]Connect error")
+            print("[×]连接失败," + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
+            pass
+
+    def mqtt_disconnect(self, client):
+        print("mqtt mqtt_disconnect," + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
+
+        def on_disconnect(client, userdata, rc):
+            print("self.sender()", self.sender())
+            if rc != 0:
+                print("Unexpected disconnection." + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
+            else:
+                print("Disconnected from MQTT." + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
+            # 更新 UI 线程
+            self.mqtt_connect_state_signal.emit("已断开")
+
+        client.on_disconnect = on_disconnect
+
+    def mqtt_subscribe(self, client):
+        print("mqtt mqtt_subscribe," + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
+        global info_msg
+        global error_msg
+
+        def on_message(client, userdata, msg):
+            LogTT_SN = str.split(msg.topic, "/")[-1]
+            head = b""
+            body = b""
+            cmd_type = ""
+            flag_ascii = False
+            flag_hex = True
+            if msg.payload[:len(start_ttl)] == start_ttl.encode("utf-8"):
+                cmd_type = start_ttl
+                flag_ascii = True
+                flag_hex = True
+                head = msg.payload[:len(start_ttl)]
+                body = msg.payload[len(start_ttl):]
+
+            elif msg.payload[:len(start_rs232)] == start_rs232.encode("utf-8"):
+                cmd_type = start_rs232
+                flag_ascii = False
+                flag_hex = True
+                head = msg.payload[:len(start_rs232)]
+                body = msg.payload[len(start_rs232):]
+
+            elif msg.payload[:len(start_rs485)] == start_rs485.encode("utf-8"):
+                cmd_type = start_rs485
+                flag_ascii = False
+                flag_hex = True
+                head = msg.payload[:len(start_rs485)]
+                body = msg.payload[len(start_rs485):]
+
+            elif msg.payload[:len(start_fixed)] == start_fixed.encode("utf-8"):
+                cmd_type = start_fixed
+                flag_ascii = True
+                flag_hex = False
+                head = msg.payload[:len(start_fixed)]
+                body = msg.payload[len(start_fixed):]
+
+            elif msg.payload[:len(start_heart)] == start_heart.encode("utf-8"):
+                cmd_type = start_heart
+                flag_ascii = True
+                flag_hex = False
+                head = msg.payload[:len(start_heart)]
+                body = msg.payload[len(start_heart):]
+
+            elif msg.payload[:len(start_pt)] == start_pt.encode("utf-8"):
+                cmd_type = start_pt
+                flag_ascii = True
+                flag_hex = False
+                head = msg.payload[:len(start_pt)]
+                body = msg.payload[len(start_pt):]
+            else:
+                cmd_type = ""
+                flag_ascii = False
+                flag_hex = True
+                body = msg.payload
+
+
+            if flag_ascii:
+                try:
+                    body_str = body.decode('gb2312')
+                except UnicodeDecodeError:
+                    try:
+                        body_str = body.decode('utf-8')
+                    except UnicodeDecodeError:
+                        body_str = body.hex().upper()
+                head_str = head.decode('utf-8')
+                msg_ascii = datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] + "-->:"
+                msg_ascii = msg_ascii + f"topic:{msg.topic} msg:{head_str}\r\n{body_str}"
+                msg_ascii = msg_ascii.rstrip() + "\r\n"
+                # 输出信息
+                try:
+                    with open(get_log_file_name_ascii(LogTT_SN), 'a') as f:
+                        global version_w_ascii
+                        if version_w_ascii > 0:
+                            f.write("version:" + version + "\n")
+                            version_w_ascii = 0
+                        f.write(msg_ascii)
+                        f.close()
+                except Exception as e:
+                    print(str(e))
+
+                print(msg_ascii, end="")
+                if self.comboBox_log_sn.currentIndex() == -1:
+                    # self.textEdit_log_0rx_display.append(msg_ascii)
+                    self.log_display_update_signal.emit(msg_ascii)
+                elif self.comboBox_log_sn.currentText() == LogTT_SN:
+                    # self.textEdit_log_0rx_display.append(msg_ascii)
+                    self.log_display_update_signal.emit(msg_ascii)
+
+                self.rx_data_signal.emit(LogTT_SN, head_str, body_str)
+                # self.parse_data(LogTT_SN, head_str, body_str)
+
+
+            if flag_hex:
+                msg_hex = datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3] + "-->:"
+                msg_hex = msg_hex + f"topic:{msg.topic} msg:{head.decode('utf-8')}{body.hex().upper()}"
+                # 输出信息
+                try:
+                    with open(get_log_file_name_hex(LogTT_SN), 'a') as f:
+                        global version_w_hex
+                        if version_w_hex > 0:
+                            f.write("version:" + version + "\n")
+                            version_w_hex = 0
+                        f.write(msg_hex + "\r\n")
+                        f.close()
+                except Exception as e:
+                    print(str(e))
+                if not flag_ascii:
+                    print(msg_hex)
+                    # self.textEdit_log_0rx_display.append(msg_ascii)
+                    self.log_display_update_signal.emit(msg_hex)
+
+        client.subscribe(mqtt_subtopic)
+        client.on_message = on_message
+        print("[√]订阅成功," + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
+
+    def mqtt_publish_test(self, client):
+        print("mqtt mqtt_publish_test," + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
+        try:
+            msg = "qqqqqqqqqqqqqqq"
+
+            result = client.publish(mqtt_pubtopic, msg)
+            # result: [0, 1]
+            status = result[0]
+
+            if status == 0:
+                print(f"[√]发送成功, Send `{msg}` to topic `{mqtt_pubtopic}`")
+            else:
+                print(f"[×]发送失败, Failed to send message to topic {mqtt_pubtopic}")
+
+        except:
+            print("[!]请先连接服务器!")
+
+    def parse_data(self, sn, head, body):
+
+        if data_buf.get(sn) is None:
+            data_buf[sn] = {}
+        if data_buf[sn].get("base_info") is None:
+            data_buf[sn]["base_info"] = {}
+        if data_buf[sn].get("pos_info") is None:
+            data_buf[sn]["pos_info"] = {}
+        data_buf[sn]["heart_time_stamp"] = datetime.now().strftime('%H:%M:%S.%f')[:-3]
+
+        # start_fixed = "FIXED_INFO="
+        # start_heart = "HEART_MSG="
+        # FIXED_INFO={"base_info":{"name":"张三","uplinkB":1010,"rsrp":-99,"tel":"13888888888","reset_times":49,"project":"LogTT","csq":23,"downlinkB":573,"rsrq":-13,"dev_type":"9002","simid":0,"muid":"20230818221817A863212A0300364949","snr":-1,"version":"9002.4.002","iccid":"89860622330053052122","imei":"869861069998891","rssi":-66,"dev_pd":"20240329","dev_sn":1},"pos_info":{"lng":0,"lat":0}}
+
+        # if head == start_fixed or head == start_heart:
+        if is_valid_json(body):
+            body_dict = json_loads(body)
+            if body_dict["base_info"]:
+                base_info = body_dict["base_info"]
+                if base_info.get("project"):    data_buf[sn]["base_info"]["project"]    = base_info.get("project")
+                if base_info.get("version"):    data_buf[sn]["base_info"]["version"]    = base_info.get("version")
+                if base_info.get("name"):       data_buf[sn]["base_info"]["name"]       = base_info.get("name")
+                if base_info.get("tel"):        data_buf[sn]["base_info"]["tel"]        = base_info.get("tel")
+                if base_info.get("dev_type"):   data_buf[sn]["base_info"]["dev_type"]   = base_info.get("dev_type")
+                if base_info.get("dev_sn"):     data_buf[sn]["base_info"]["dev_sn"]     = str(sn)
+                if base_info.get("dev_pd"):     data_buf[sn]["base_info"]["dev_pd"]     = base_info.get("dev_pd")
+                if base_info.get("reset_times"): data_buf[sn]["base_info"]["reset_times"] = base_info.get("reset_times")
+                if base_info.get("imei"):       data_buf[sn]["base_info"]["imei"]       = base_info.get("imei")
+                if base_info.get("muid"):       data_buf[sn]["base_info"]["muid"]       = base_info.get("muid")
+                if base_info.get("iccid"):      data_buf[sn]["base_info"]["iccid"]      = base_info.get("iccid")
+                if base_info.get("simid"):      data_buf[sn]["base_info"]["simid"]      = base_info.get("simid")
+                if base_info.get("csq"):        data_buf[sn]["base_info"]["csq"]        = base_info.get("csq")
+                if base_info.get("rssi"):       data_buf[sn]["base_info"]["rssi"]       = base_info.get("rssi")
+                if base_info.get("snr"):        data_buf[sn]["base_info"]["snr"]        = base_info.get("snr")
+                if base_info.get("rsrq"):       data_buf[sn]["base_info"]["rsrq"]       = base_info.get("rsrq")
+                if base_info.get("rsrp"):       data_buf[sn]["base_info"]["rsrp"]       = base_info.get("rsrp")
+                if base_info.get("uplinkB"):    data_buf[sn]["base_info"]["uplinkB"]    = base_info.get("uplinkB")
+                if base_info.get("downlinkB"):  data_buf[sn]["base_info"]["downlinkB"]  = base_info.get("downlinkB")
+
+            if body_dict["pos_info"]:
+                pos_info = body_dict["pos_info"]
+                if pos_info.get("lng"): data_buf[sn]["pos_info"]["lng"] = pos_info.get("lng")
+                if pos_info.get("lat"): data_buf[sn]["pos_info"]["lat"] = pos_info.get("lat")
+        # 更新数据
+        self.data_update(sn)
+
+    def data_update(self, sn):
+
+        self.comboBox_log_sn_add(sn)
+        self.display_update(sn)
+        self.dev_list_refresh(sn)
+
+        if self.comboBox_log_sn.currentIndex() != -1:
+            sn_cur = self.comboBox_log_sn.currentText()
+            if sn == sn_cur:
+                if data_buf.get(sn_cur):
+                    if data_buf[sn_cur].get("pos_info"):
+                        lng = data_buf[sn_cur]["pos_info"].get("lng", 116.1666213)
+                        lat = data_buf[sn_cur]["pos_info"].get("lat", 39.9007607)
+                        # self.map_refresh_signal.emit(sn_cur, float(lng), float(lat))
+
+    def comboBox_log_sn_change(self):
+        # self.sn_current = sn
+        self.display_update()
+
+    def comboBox_log_sn_add(self, sn):
+        if sn == "0000000116":
+            return
+        if self.comboBox_log_sn.findText(sn) == -1:
+            self.comboBox_log_sn.addItem(sn)
+            num_items = self.comboBox_log_sn.count()
+            current_text = self.comboBox_log_sn.currentText()
+            # 插入,且排序
+            text_list = []
+            for index in range(num_items):
+                text_list.append(self.comboBox_log_sn.itemText(index))
+            text_list = sorted(text_list)
+            for index in range(num_items):
+                self.comboBox_log_sn.setItemText(index, text_list[index])
+            self.comboBox_log_sn.setCurrentText(current_text)
+
+    def display_base_info_clear(self):
+        self.label_log_01dev_type.setText("设备类型:")
+        self.label_log_02sn.setText("设备SN:")
+        self.label_log_03reset_times.setText("复位次数:")
+        self.label_log_04app_ver.setText("固件版本:")
+        self.label_log_05name.setText("姓名:")
+        self.label_log_06telephone.setText("电话:")
+        self.label_log_09imei.setText("IMEI:")
+        self.label_log_10iccid.setText("ICCID:")
+        self.label_log_11rssi.setText("信号强度:")
+        self.label_log_12snr.setText("信噪比:")
+
+    def display_pos_info_clear(self):
+        self.label_log_07longitude.setText("经度:")
+        self.label_log_08latitude.setText("维度:")
+
+    def display_clear(self):
+        self.display_base_info_clear()
+        self.display_pos_info_clear()
+        self.groupBox_log_1base.setTitle("日志设备基础信息")
+
+    def display_update(self, sn=0):
+        sn_cur = self.comboBox_log_sn.currentText()
+        if sn_cur in data_buf:
+            if data_buf[sn_cur]["base_info"]:
+                base_info = data_buf[sn_cur]["base_info"]
+                self.label_log_01dev_type.setText("设备类型:" + base_info.get("dev_type", ""))
+                self.label_log_02sn.setText("设备SN:" + str(sn_cur))
+                self.label_log_03reset_times.setText("复位次数:" + str(base_info.get("reset_times", 0)))
+                self.label_log_04app_ver.setText("固件版本:" + base_info.get("version", ""))
+                self.label_log_05name.setText("姓名:" + base_info.get("name", ""))
+                self.label_log_06telephone.setText("电话:" + base_info.get("tel", ""))
+                self.label_log_09imei.setText("IMEI:" + base_info.get("imei", ""))
+                self.label_log_10iccid.setText("ICCID:" + base_info.get("iccid", ""))
+                self.label_log_11rssi.setText("信号强度:" + str(base_info.get("rssi", 0)))
+                self.label_log_12snr.setText("信噪比:" + str(base_info.get("snr", 0)))
+            else:
+                self.display_base_info_clear()
+            if data_buf[sn_cur]["pos_info"]:
+                pos_info = data_buf[sn_cur]["pos_info"]
+                lng = pos_info.get("lng", 0) if pos_info.get("lng", 0) != 0 else 116.1666213
+                self.label_log_07longitude.setText("经度:" + str(lng))
+
+                lat = pos_info.get("lat", 0) if pos_info.get("lat", 0) != 0 else 39.9007607
+                self.label_log_08latitude.setText("维度:" + str(lat))
+            else:
+                self.display_pos_info_clear()
+            self.groupBox_log_1base.setTitle("日志设备基础信息:" + str(data_buf[sn_cur]["heart_time_stamp"]))
+
+        else:
+            self.display_clear()
+
+        self.label_lsb_01dev_type.setText(self.label_log_01dev_type.text())
+        self.label_lsb_02sn.setText(self.label_log_02sn.text())
+        self.label_lsb_03reset_times.setText(self.label_log_03reset_times.text())
+        self.label_lsb_04app_ver.setText(self.label_log_04app_ver.text())
+        self.label_lsb_05name.setText(self.label_log_05name.text())
+        self.label_lsb_06telephone.setText(self.label_log_06telephone.text())
+        self.label_lsb_09imei.setText(self.label_log_09imei.text())
+        self.label_lsb_10iccid.setText(self.label_log_10iccid.text())
+        self.label_lsb_11rssi.setText(self.label_log_11rssi.text())
+        self.label_lsb_12snr.setText(self.label_log_12snr.text())
+        self.label_lsb_07longitude.setText(self.label_log_07longitude.text())
+        self.label_lsb_08latitude.setText(self.label_log_08latitude.text())
+
+        self.groupBox_lsb_1base.setTitle(self.groupBox_log_1base.title())
+
+    def sn_update_something(self):
+        if self.checkBox_set_default_tx_sn.isChecked():
+            sn_text = self.comboBox_log_sn.currentText()
+            sn_num = int(sn_text)
+            sn_text = f"%u" % sn_num
+            self.lineEdit_tx_sn.setText(sn_text)
+            # self.lineEdit_5pub_topic.setText("cpyypt/down/9002/" + self.lineEdit_tx_sn.text().zfill(10))
+
+    def dev_list_refresh(self, sn):
+        dev_str = self.plainTextEdit_log_dev_list.toPlainText()
+        dev_list = str.split(dev_str)
+        # dev_list = [dev for dev in data_buf.keys()]
+        if sn not in dev_list:
+            # print(dev_list)
+            dev_list.append(sn)
+            dev_list = sorted(dev_list)
+            dev_text = ""
+            for dev in dev_list:
+                dev_text = dev_text + str(dev) + "\n"
+            self.plainTextEdit_log_dev_list.setPlainText(dev_text)
+
+    def mqtt_send_data(self, client, pub_topic, userdata):
+
+        try:
+            result = client.publish(pub_topic, userdata)
+            # result: [0, 1]
+            status = result[0]
+
+            if status == 0:
+                msg = f"[√]发送成功, Send `{userdata}` to topic `{pub_topic}`"
+
+            else:
+                msg = f"[×]发送失败, Failed to send message to topic {pub_topic}"
+        except:
+            msg = "[!]请先连接服务器!"
+
+        # self.textEdit_log_0rx_display.append(msg + "\n")
+        self.log_display_update_signal.emit(msg + "\n")
+
+    def log_display_update(self, text):
+        # 当前光标是否在最后
+        cursor_end = False
+        position = self.textEdit_log_0rx_display.textCursor().position()
+        length = len(self.textEdit_log_0rx_display.toPlainText())
+
+        if position == length:
+            cursor_end = True
+
+        self.textEdit_log_0rx_display.append(text)
+
+
+        # 是否将光标移动到最后
+        if cursor_end:
+            self.textEdit_log_0rx_display.moveCursor(QTextCursor.End)
+
+    def log_rx_buf_max(self):
+        max_text = self.lineEdit_log_rx_buf_max.text()
+        max_num = 10000
+        try:
+            max_num = int(max_text)
+        except ValueError:
+            max_num = 10000
+
+        if max_num <= 100:
+            max_num = 100
+            self.lineEdit_log_rx_buf_max.setText(max_num)
+        if max_num >= 100000:
+            max_num = 100000
+            self.lineEdit_log_rx_buf_max.setText(f'{max_num}')
+        self.textEdit_log_0rx_display.document().setMaximumBlockCount(max_num)
+
+    def log_refresh(self):
+        if self.comboBox_log_sn.currentIndex() != -1:
+            sn_cur = self.comboBox_log_sn.currentText()
+            send_topic = "cpyypt/down/9002/" + sn_cur
+            send_data = 'PT_CMD={"get_fixed_info": "true"}'
+            self.mqtt_send_data(g_client, send_topic, send_data)
+
+    def log_send(self):
+        if self.comboBox_log_sn.currentIndex() != -1:
+            sn_cur = self.comboBox_log_sn.currentText()
+
+            cmd_header = "TTD_TTL"
+            cmd_tail = ""
+
+            io_select = self.comboBox_tx_io_select.currentIndex()
+            if io_select == 0:
+                cmd_header = 'TTD_TTL'
+            elif io_select == 1:
+                cmd_header = 'TTD_RS232'
+            elif io_select == 2:
+                cmd_header = 'TTD_RS485'
+
+            if self.radioButton_log_1tx_ascii.isChecked():
+                cmd_header = cmd_header + "_A="
+                if self.checkBox_r_n.isChecked():
+                    cmd_tail = "\r\n"
+            else:
+                cmd_header = cmd_header + "_H="
+
+            cmd_body = self.textEdit_log_1tx.toPlainText()
+
+            send_data = cmd_header + cmd_body + cmd_tail
+            send_topic = "cpyypt/down/9002/" + sn_cur
+
+            self.mqtt_send_data(g_client, send_topic, send_data)
+
+    def log_rs485_up_enable(self):
+        if self.comboBox_log_sn.currentIndex() != -1:
+            sn_cur = self.comboBox_log_sn.currentText()
+            send_data = 'PT_CMD={"rs485_cfg": {"up_enable": 1}}'
+            send_topic = "cpyypt/down/9002/" + sn_cur
+            self.mqtt_send_data(g_client, send_topic, send_data)
+
+    def log_rs485_up_disable(self):
+        if self.comboBox_log_sn.currentIndex() != -1:
+            sn_cur = self.comboBox_log_sn.currentText()
+            send_data = 'PT_CMD={"rs485_cfg": {"up_enable": 0}}'
+            send_topic = "cpyypt/down/9002/" + sn_cur
+            self.mqtt_send_data(g_client, send_topic, send_data)
+
+    def map_refresh(self, sn=0, longitude=116.1798005, latitude=39.9030239):
+        print("map_refresh")
+        self.map_get_regeocode(sn, longitude, latitude)
+        self.map_load_static_map(sn, longitude, latitude)
+
+    def map_get_regeocode(self, sn=0, longitude=116.1798005, latitude=39.9030239, key='ebe21d6ee4409542d070b8be762ab0a5'):
+        # print(longitude, latitude, key)
+        # 构建请求URL
+        url = f"https://restapi.amap.com/v3/geocode/regeo?key={key}&location={longitude},{latitude}"
+        # 发送请求
+        response = requests_get(url)
+        # 解析JSON响应
+        data = response.json()
+        text = "信号基站位置信息:"
+        if data['status'] == '1':
+            # 打印地理编码结果
+            geo_result = data['regeocode']
+            # print(f"地址: {geo_result['formatted_address']}")
+            # print(f"省: {geo_result['addressComponent']['province']}")
+            # print(f"市: {geo_result['addressComponent']['city']}")
+            # print(f"区: {geo_result['addressComponent']['district']}")
+
+            text = text + f"\n省: {geo_result['addressComponent']['province']}"
+            text = text + f"\n市: {geo_result['addressComponent']['city']}"
+            text = text + f"\n区: {geo_result['addressComponent']['district']}"
+            text = text + f"\n地址: {geo_result['formatted_address']}"
+
+
+        else:
+            text = "逆向地理编码失败"
+        print(text)
+        self.textEdit_lsb_address.setText(text)
+
+
+    def map_load_static_map(self, sn=0, longitude=116.1798005, latitude=39.9030239, key='ebe21d6ee4409542d070b8be762ab0a5'):
+        # 高德地图URL,location为初始定位,可以是城市名或经纬度
+        location_str = f'{longitude},{latitude}'
+        #print(self, sn, longitude, latitude, key)
+        #location_str = "116.1798005,39.9030239"
+        url = f"https://restapi.amap.com/v3/geocode/regeo?key=ebe21d6ee4409542d070b8be762ab0a5&location=116.1798005,39.9030239"
+        # url = f"https://restapi.amap.com/v3/geocode/regeo?output=xml&location=116.1798005,39.9030239&key=ebe21d6ee4409542d070b8be762ab0a5&radius=1000&extensions=all"
+        url = f"https://restapi.amap.com/v3/staticmap?location={location_str}&zoom=13&size=1024*600&markers=mid,,A:{location_str}&key={key}"
+
+        print(url)
+        self.browser.load(QUrl(url))
+        # self.setCentralWidget(self.browser)
+        # self.browser.show()
+
+    def lsb_get_fixed_info(self):
+        sn_cur = ""
+        send_cmd_flag = False
+        if self.comboBox_log_sn.currentIndex() != -1:
+            sn_cur = self.comboBox_log_sn.currentText()
+        else:
+            return
+
+        if data_buf.get(sn_cur):
+            if data_buf[sn_cur].get("pos_info"):
+                lng = data_buf[sn_cur]["pos_info"].get("lng", 116.1666213)
+                lat = data_buf[sn_cur]["pos_info"].get("lat", 39.9007607)
+                self.map_refresh(sn_cur, lng, lat)
+            else:
+                send_cmd_flag = True
+        else:
+            send_cmd_flag = True
+
+
+        if send_cmd_flag:
+            send_topic = "cpyypt/down/9002/" + sn_cur
+            send_data = 'PT_CMD={"get_fixed_info": "true"}'
+            self.mqtt_send_data(g_client, send_topic, send_data)
+
+    def set_svr(self):
+        index_cur = self.comboBox_set_svr.currentIndex()
+        if index_cur == 0:
+            self.lineEdit_set_0ip.setText("test-******")
+            self.lineEdit_set_1port.setText("******")
+            self.lineEdit_set_2usr.setText("******")
+            self.lineEdit_set_3password.setText("******")
+            self.set_svr_env = "test"
+        elif index_cur == 1:
+            self.lineEdit_set_0ip.setText("prod-******")
+            self.lineEdit_set_1port.setText("******")
+            self.lineEdit_set_2usr.setText("******")
+            self.lineEdit_set_3password.setText("******")
+            self.set_svr_env = "prod"
+        else:
+            self.set_svr_env = "usr_def"
+
+    def set_create(self):
+        # PT_CMD={"imei_check":"869861069999337","reboot":"true","dev_cfg":{"dev_type":"9002","dev_sn":5,"dev_pd":"20240329"}}
+        # PT_CMD={"reboot":"true","dev_cfg":{"dev_type":"9002","dev_sn":"0000000001","dev_pd":"20240322"},"reg_cfg":{"name":"李四","tel":"13999999999"}}
+        set_dict = {}
+        # 下发指令,是否绑定IMEI
+        if self.checkBox_set_bind_imei.isChecked():
+            set_dict["imei_check"] = self.lineEdit_0imei.text()
+        else:
+            set_dict.pop("imei_check", None)
+
+        # 获取基础信息
+        if self.checkBox_set_get_fixed_info.isChecked():
+            set_dict["get_fixed_info"] = "true"
+        else:
+            set_dict.pop("get_fixed_info", None)
+
+        # 恢复默认参数
+        if self.checkBox_set_default_cfg.isChecked():
+            set_dict["default_cfg"] = "true"
+        else:
+            set_dict.pop("default_cfg", None)
+
+        # 重启
+        if self.checkBox_set_reboot.isChecked():
+            set_dict["reboot"] = "true"
+        else:
+            set_dict.pop("reboot", None)
+
+        # 设备信息
+        if self.checkBox_set_dev_cfg.isChecked():
+            set_dict["dev_cfg"] = {}
+            set_dict["dev_cfg"]["dev_sn"] = self.lineEdit_set_dev_sn.text()
+            set_dict["dev_cfg"]["dev_pd"] = self.lineEdit_set_dev_pd.text()
+        else:
+            set_dict.pop("dev_cfg", None)
+
+        # 注册信息
+        if self.checkBox_set_reg_cfg.isChecked():
+            set_dict["reg_cfg"] = {}
+            set_dict["reg_cfg"]["name"] = self.lineEdit_set_reg_name.text()
+            set_dict["reg_cfg"]["tel"] = self.lineEdit_set_reg_tel.text()
+        else:
+            set_dict.pop("reg_cfg", None)
+
+        # 服务器信息
+        if self.checkBox_set_svr_cfg.isChecked():
+            set_dict["svr_cfg"] = {}
+            set_dict["svr_cfg"]["svr_ip"] = self.lineEdit_set_svr_cfg.text()
+            set_dict["svr_cfg"]["svr_port"] = self.lineEdit_set_svr_port.text()
+            set_dict["svr_cfg"]["svr_usr_name"] = self.lineEdit_set_svr_usr_name.text()
+            set_dict["svr_cfg"]["svr_usr_pwd"] = self.lineEdit_set_svr_usr_pwd.text()
+        else:
+            set_dict.pop("svr_cfg", None)
+
+        # 接口参数
+        io_name = self.comboBox_set_io_select.currentText() + "_cfg"
+        if self.checkBox_set_io_cfg.isChecked():
+            io_name = io_name.lower()
+            set_dict[io_name] = {}
+            if self.checkBox_set_io_up_enable.isChecked():
+                set_dict[io_name]["up_enable"] = 1
+            if self.checkBox_set_io_up_disable.isChecked():
+                set_dict[io_name]["up_enable"] = 0
+            if (not self.checkBox_set_io_up_enable.isChecked()) and (not self.checkBox_set_io_up_disable.isChecked()):
+                set_dict[io_name].pop("up_enable", None)
+
+            if self.checkBox_set_io_down_enable.isChecked():
+                set_dict[io_name]["down_enable"] = 1
+            if self.checkBox_set_io_down_disable.isChecked():
+                set_dict[io_name]["down_enable"] = 0
+            if (not self.checkBox_set_io_down_enable.isChecked()) and (not self.checkBox_set_io_down_disable.isChecked()):
+                set_dict[io_name].pop("down_enable", None)
+
+            if self.checkBox_set_io_parameter.isChecked():
+                if self.lineEdit_set_baud_rate.text() != "":
+                    set_dict[io_name]["baud_rate"]      = int(self.lineEdit_set_baud_rate.text())
+                if self.lineEdit_set_data_bits.text() != "":
+                    set_dict[io_name]["data_bits"]      = int(self.lineEdit_set_data_bits.text())
+                if self.lineEdit_set_stop_bits.text() != "":
+                    set_dict[io_name]["stop_bits"]      = int(self.lineEdit_set_stop_bits.text())
+                if self.lineEdit_set_partiy.text() != "":
+                    set_dict[io_name]["partiy"]         = int(self.lineEdit_set_partiy.text())
+                '''
+                if self.lineEdit_set_bit_order.text() != "":
+                    set_dict[io_name]["bit_order"]      = int(self.lineEdit_set_bit_order.text())
+                if self.lineEdit_set_buff_size.text() != "":
+                    set_dict[io_name]["buff_size"]      = int(self.lineEdit_set_buff_size.text())
+                if self.lineEdit_set_rs485_gpio.text() != "":
+                    set_dict[io_name]["rs485_gpio"]     = int(self.lineEdit_set_rs485_gpio.text())
+                if self.lineEdit_set_rs485_level.text() != "":
+                    set_dict[io_name]["rs485_level"]    = int(self.lineEdit_set_rs485_level.text())
+                if self.lineEdit_set_rs485_delay.text() != "":
+                    set_dict[io_name]["rs485_delay"]    = int(self.lineEdit_set_rs485_delay.text())
+                '''
+        else:
+            set_dict.pop(io_name, None)
+
+        set_str = json_dumps(set_dict, ensure_ascii=False)
+        print(set_str)
+        if len(set_str) > 4:
+            self.textEdit_set_tx.setText("PT_CMD=" + set_str)
+
+    def set_send(self):
+        print("mqtt set_send," + datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3])
+        send_topic = self.lineEdit_5pub_topic.text()
+        send_data = self.textEdit_set_tx.toPlainText()
+        self.mqtt_send_data(g_client, send_topic, send_data)
+
+    def set_create_send(self):
+        self.set_create()
+        self.set_send()
+
+    def set_io_up_able(self):
+        if self.checkBox_set_io_up_enable.isChecked():
+            self.checkBox_set_io_up_disable.setChecked(False)
+            self.checkBox_set_io_cfg.setChecked(True)
+        if (not self.checkBox_set_io_parameter.isChecked()) and \
+                (not self.checkBox_set_io_up_enable.isChecked()) and \
+                (not self.checkBox_set_io_up_disable.isChecked()) and \
+                (not self.checkBox_set_io_down_enable.isChecked()) and \
+                (not self.checkBox_set_io_down_disable.isChecked()):
+            self.checkBox_set_io_cfg.setChecked(False)
+
+    def set_io_up_disable(self):
+        if self.checkBox_set_io_up_disable.isChecked():
+            self.checkBox_set_io_up_enable.setChecked(False)
+            self.checkBox_set_io_cfg.setChecked(True)
+        if (not self.checkBox_set_io_parameter.isChecked()) and \
+                (not self.checkBox_set_io_up_enable.isChecked()) and \
+                (not self.checkBox_set_io_up_disable.isChecked()) and \
+                (not self.checkBox_set_io_down_enable.isChecked()) and \
+                (not self.checkBox_set_io_down_disable.isChecked()):
+            self.checkBox_set_io_cfg.setChecked(False)
+
+    def set_io_down_able(self):
+        if self.checkBox_set_io_down_enable.isChecked():
+            self.checkBox_set_io_down_disable.setChecked(False)
+            self.checkBox_set_io_cfg.setChecked(True)
+        if (not self.checkBox_set_io_parameter.isChecked()) and \
+                (not self.checkBox_set_io_up_enable.isChecked()) and \
+                (not self.checkBox_set_io_up_disable.isChecked()) and \
+                (not self.checkBox_set_io_down_enable.isChecked()) and \
+                (not self.checkBox_set_io_down_disable.isChecked()):
+            self.checkBox_set_io_cfg.setChecked(False)
+
+    def set_io_down_disable(self):
+        if self.checkBox_set_io_down_disable.isChecked():
+            self.checkBox_set_io_down_enable.setChecked(False)
+            self.checkBox_set_io_cfg.setChecked(True)
+        if (not self.checkBox_set_io_parameter.isChecked()) and \
+                (not self.checkBox_set_io_up_enable.isChecked()) and \
+                (not self.checkBox_set_io_up_disable.isChecked()) and \
+                (not self.checkBox_set_io_down_enable.isChecked()) and \
+                (not self.checkBox_set_io_down_disable.isChecked()):
+            self.checkBox_set_io_cfg.setChecked(False)
+
+    def set_io_parameter(self):
+        if self.checkBox_set_io_parameter.isChecked():
+            self.checkBox_set_io_cfg.setChecked(True)
+        if (not self.checkBox_set_io_parameter.isChecked()) and \
+                (not self.checkBox_set_io_up_enable.isChecked()) and \
+                (not self.checkBox_set_io_up_disable.isChecked()) and \
+                (not self.checkBox_set_io_down_enable.isChecked()) and \
+                (not self.checkBox_set_io_down_disable.isChecked()):
+            self.checkBox_set_io_cfg.setChecked(False)
+
+    def set_io_cfg(self):
+        if not self.checkBox_set_io_parameter.isChecked():
+            self.checkBox_set_io_parameter.setChecked(False)
+            self.checkBox_set_io_up_enable.setChecked(False)
+            self.checkBox_set_io_up_disable.setChecked(False)
+            self.checkBox_set_io_down_enable.setChecked(False)
+            self.checkBox_set_io_down_disable.setChecked(False)
+
+    def set_default_tx_sn(self):
+        if self.checkBox_set_default_tx_sn.isChecked():
+            self.lineEdit_tx_sn.setEnabled(False)
+            self.lineEdit_5pub_topic.setEnabled(False)
+        else:
+            self.lineEdit_tx_sn.setEnabled(True)
+            self.lineEdit_5pub_topic.setEnabled(True)
+
+    def set_tx_sn_change(self):
+        sn = self.lineEdit_tx_sn.text()
+        sn_str = sn.zfill(10)
+        self.lineEdit_5pub_topic.setText("cpyypt/down/9002/" + sn_str)
+
+def main():
+    app = QApplication(sys.argv)  # 创建一个QApplication,也就是你要开发的软件app
+    myWin = MyWindow()  # 创建一个QMainWindow,用来装载你需要的各种组件、控件,myWin()类的实例化对象
+    myWin.show()  # 执行QMainWindow的show()方法,显示这个QMainWindow
+
+    # 捕获并处理异常
+    try:
+        sys.exit(app.exec_())
+        # sys.exit(app.exec_())  # 使用exit()或者点击关闭按钮退出QApplication
+    except SystemExit as e:
+        # 异常处理代码
+        print(f"程序异常退出: {e}")
+        # 这里可以添加额外的处理代码,例如保存状态、清理资源等
+
+if __name__ == '__main__':
+    main()

+ 855 - 0
mainwindow.py

@@ -0,0 +1,855 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'mainwindow.ui'
+#
+# Created by: PyQt5 UI code generator 5.15.6
+#
+# WARNING: Any manual changes made to this file will be lost when pyuic5 is
+# run again.  Do not edit this file unless you know what you are doing.
+
+
+from PyQt5 import QtCore, QtGui, QtWidgets
+
+
+class Ui_MainWindow(object):
+    def setupUi(self, MainWindow):
+        MainWindow.setObjectName("MainWindow")
+        MainWindow.resize(1246, 851)
+        self.centralwidget = QtWidgets.QWidget(MainWindow)
+        self.centralwidget.setObjectName("centralwidget")
+        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
+        self.gridLayout.setObjectName("gridLayout")
+        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
+        self.tabWidget.setObjectName("tabWidget")
+        self.tab_log = QtWidgets.QWidget()
+        self.tab_log.setObjectName("tab_log")
+        self.groupBox_log_1base = QtWidgets.QGroupBox(self.tab_log)
+        self.groupBox_log_1base.setGeometry(QtCore.QRect(10, 10, 781, 121))
+        self.groupBox_log_1base.setObjectName("groupBox_log_1base")
+        self.label_log_01dev_type = QtWidgets.QLabel(self.groupBox_log_1base)
+        self.label_log_01dev_type.setGeometry(QtCore.QRect(20, 20, 121, 16))
+        self.label_log_01dev_type.setObjectName("label_log_01dev_type")
+        self.label_log_02sn = QtWidgets.QLabel(self.groupBox_log_1base)
+        self.label_log_02sn.setGeometry(QtCore.QRect(220, 20, 151, 16))
+        self.label_log_02sn.setObjectName("label_log_02sn")
+        self.label_log_03reset_times = QtWidgets.QLabel(self.groupBox_log_1base)
+        self.label_log_03reset_times.setGeometry(QtCore.QRect(470, 20, 141, 16))
+        self.label_log_03reset_times.setObjectName("label_log_03reset_times")
+        self.label_log_04app_ver = QtWidgets.QLabel(self.groupBox_log_1base)
+        self.label_log_04app_ver.setGeometry(QtCore.QRect(620, 20, 161, 16))
+        self.label_log_04app_ver.setObjectName("label_log_04app_ver")
+        self.label_log_05name = QtWidgets.QLabel(self.groupBox_log_1base)
+        self.label_log_05name.setGeometry(QtCore.QRect(20, 50, 121, 16))
+        self.label_log_05name.setObjectName("label_log_05name")
+        self.label_log_06telephone = QtWidgets.QLabel(self.groupBox_log_1base)
+        self.label_log_06telephone.setGeometry(QtCore.QRect(220, 50, 221, 16))
+        self.label_log_06telephone.setObjectName("label_log_06telephone")
+        self.label_log_07longitude = QtWidgets.QLabel(self.groupBox_log_1base)
+        self.label_log_07longitude.setGeometry(QtCore.QRect(470, 50, 141, 16))
+        self.label_log_07longitude.setObjectName("label_log_07longitude")
+        self.label_log_08latitude = QtWidgets.QLabel(self.groupBox_log_1base)
+        self.label_log_08latitude.setGeometry(QtCore.QRect(620, 50, 141, 16))
+        self.label_log_08latitude.setObjectName("label_log_08latitude")
+        self.label_log_09imei = QtWidgets.QLabel(self.groupBox_log_1base)
+        self.label_log_09imei.setGeometry(QtCore.QRect(20, 80, 171, 16))
+        self.label_log_09imei.setObjectName("label_log_09imei")
+        self.label_log_10iccid = QtWidgets.QLabel(self.groupBox_log_1base)
+        self.label_log_10iccid.setGeometry(QtCore.QRect(220, 80, 221, 16))
+        self.label_log_10iccid.setObjectName("label_log_10iccid")
+        self.label_log_11rssi = QtWidgets.QLabel(self.groupBox_log_1base)
+        self.label_log_11rssi.setGeometry(QtCore.QRect(470, 80, 91, 16))
+        self.label_log_11rssi.setObjectName("label_log_11rssi")
+        self.label_log_12snr = QtWidgets.QLabel(self.groupBox_log_1base)
+        self.label_log_12snr.setGeometry(QtCore.QRect(620, 80, 141, 16))
+        self.label_log_12snr.setObjectName("label_log_12snr")
+        self.groupBox_log_2up_onoff = QtWidgets.QGroupBox(self.tab_log)
+        self.groupBox_log_2up_onoff.setGeometry(QtCore.QRect(870, 620, 181, 121))
+        self.groupBox_log_2up_onoff.setObjectName("groupBox_log_2up_onoff")
+        self.label_6 = QtWidgets.QLabel(self.groupBox_log_2up_onoff)
+        self.label_6.setGeometry(QtCore.QRect(10, 30, 41, 16))
+        self.label_6.setObjectName("label_6")
+        self.label_7 = QtWidgets.QLabel(self.groupBox_log_2up_onoff)
+        self.label_7.setGeometry(QtCore.QRect(10, 60, 41, 16))
+        self.label_7.setObjectName("label_7")
+        self.label_8 = QtWidgets.QLabel(self.groupBox_log_2up_onoff)
+        self.label_8.setGeometry(QtCore.QRect(10, 90, 41, 16))
+        self.label_8.setObjectName("label_8")
+        self.pushButton_log_0ttl_0on = QtWidgets.QPushButton(self.groupBox_log_2up_onoff)
+        self.pushButton_log_0ttl_0on.setEnabled(False)
+        self.pushButton_log_0ttl_0on.setGeometry(QtCore.QRect(60, 20, 51, 28))
+        self.pushButton_log_0ttl_0on.setObjectName("pushButton_log_0ttl_0on")
+        self.pushButton_log_0ttl_1off = QtWidgets.QPushButton(self.groupBox_log_2up_onoff)
+        self.pushButton_log_0ttl_1off.setEnabled(False)
+        self.pushButton_log_0ttl_1off.setGeometry(QtCore.QRect(120, 20, 51, 28))
+        self.pushButton_log_0ttl_1off.setObjectName("pushButton_log_0ttl_1off")
+        self.pushButton_log_1rs232_0on = QtWidgets.QPushButton(self.groupBox_log_2up_onoff)
+        self.pushButton_log_1rs232_0on.setEnabled(False)
+        self.pushButton_log_1rs232_0on.setGeometry(QtCore.QRect(60, 50, 51, 28))
+        self.pushButton_log_1rs232_0on.setObjectName("pushButton_log_1rs232_0on")
+        self.pushButton_log_1rs232_1off = QtWidgets.QPushButton(self.groupBox_log_2up_onoff)
+        self.pushButton_log_1rs232_1off.setEnabled(False)
+        self.pushButton_log_1rs232_1off.setGeometry(QtCore.QRect(120, 50, 51, 28))
+        self.pushButton_log_1rs232_1off.setObjectName("pushButton_log_1rs232_1off")
+        self.pushButton_log_2rs485_0on = QtWidgets.QPushButton(self.groupBox_log_2up_onoff)
+        self.pushButton_log_2rs485_0on.setGeometry(QtCore.QRect(60, 80, 51, 28))
+        self.pushButton_log_2rs485_0on.setObjectName("pushButton_log_2rs485_0on")
+        self.pushButton_log_2rs485_1off = QtWidgets.QPushButton(self.groupBox_log_2up_onoff)
+        self.pushButton_log_2rs485_1off.setGeometry(QtCore.QRect(120, 80, 51, 28))
+        self.pushButton_log_2rs485_1off.setObjectName("pushButton_log_2rs485_1off")
+        self.textEdit_log_0rx_display = QtWidgets.QTextEdit(self.tab_log)
+        self.textEdit_log_0rx_display.setGeometry(QtCore.QRect(0, 140, 1051, 471))
+        self.textEdit_log_0rx_display.setLayoutDirection(QtCore.Qt.LeftToRight)
+        self.textEdit_log_0rx_display.setAutoFillBackground(False)
+        self.textEdit_log_0rx_display.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
+        self.textEdit_log_0rx_display.setObjectName("textEdit_log_0rx_display")
+        self.textEdit_log_1tx = QtWidgets.QTextEdit(self.tab_log)
+        self.textEdit_log_1tx.setGeometry(QtCore.QRect(0, 640, 601, 101))
+        self.textEdit_log_1tx.setObjectName("textEdit_log_1tx")
+        self.radioButton_log_1tx_ascii = QtWidgets.QRadioButton(self.tab_log)
+        self.radioButton_log_1tx_ascii.setEnabled(True)
+        self.radioButton_log_1tx_ascii.setGeometry(QtCore.QRect(700, 710, 71, 19))
+        self.radioButton_log_1tx_ascii.setChecked(True)
+        self.radioButton_log_1tx_ascii.setObjectName("radioButton_log_1tx_ascii")
+        self.radioButton_log_0tx_hex = QtWidgets.QRadioButton(self.tab_log)
+        self.radioButton_log_0tx_hex.setEnabled(True)
+        self.radioButton_log_0tx_hex.setGeometry(QtCore.QRect(780, 710, 71, 19))
+        self.radioButton_log_0tx_hex.setChecked(False)
+        self.radioButton_log_0tx_hex.setObjectName("radioButton_log_0tx_hex")
+        self.label = QtWidgets.QLabel(self.tab_log)
+        self.label.setGeometry(QtCore.QRect(700, 630, 101, 16))
+        self.label.setObjectName("label")
+        self.comboBox_tx_io_select = QtWidgets.QComboBox(self.tab_log)
+        self.comboBox_tx_io_select.setGeometry(QtCore.QRect(700, 650, 131, 22))
+        self.comboBox_tx_io_select.setObjectName("comboBox_tx_io_select")
+        self.comboBox_tx_io_select.addItem("")
+        self.comboBox_tx_io_select.addItem("")
+        self.comboBox_tx_io_select.addItem("")
+        self.pushButton_log_send = QtWidgets.QPushButton(self.tab_log)
+        self.pushButton_log_send.setGeometry(QtCore.QRect(610, 640, 81, 51))
+        self.pushButton_log_send.setObjectName("pushButton_log_send")
+        self.groupBox_log_3rx_display_format = QtWidgets.QGroupBox(self.tab_log)
+        self.groupBox_log_3rx_display_format.setGeometry(QtCore.QRect(910, 20, 120, 81))
+        self.groupBox_log_3rx_display_format.setObjectName("groupBox_log_3rx_display_format")
+        self.checkBox_log_1rx_dis_hex = QtWidgets.QCheckBox(self.groupBox_log_3rx_display_format)
+        self.checkBox_log_1rx_dis_hex.setGeometry(QtCore.QRect(0, 40, 51, 19))
+        self.checkBox_log_1rx_dis_hex.setObjectName("checkBox_log_1rx_dis_hex")
+        self.checkBox_log_0rx_dis_ascii = QtWidgets.QCheckBox(self.groupBox_log_3rx_display_format)
+        self.checkBox_log_0rx_dis_ascii.setGeometry(QtCore.QRect(0, 20, 51, 19))
+        self.checkBox_log_0rx_dis_ascii.setChecked(True)
+        self.checkBox_log_0rx_dis_ascii.setObjectName("checkBox_log_0rx_dis_ascii")
+        self.checkBox_log_2rx_time_stamp = QtWidgets.QCheckBox(self.groupBox_log_3rx_display_format)
+        self.checkBox_log_2rx_time_stamp.setGeometry(QtCore.QRect(0, 60, 111, 19))
+        self.checkBox_log_2rx_time_stamp.setChecked(True)
+        self.checkBox_log_2rx_time_stamp.setObjectName("checkBox_log_2rx_time_stamp")
+        self.comboBox_log_sn = QtWidgets.QComboBox(self.tab_log)
+        self.comboBox_log_sn.setGeometry(QtCore.QRect(1060, 100, 161, 31))
+        self.comboBox_log_sn.setObjectName("comboBox_log_sn")
+        self.pushButton_log_rx_clr = QtWidgets.QPushButton(self.tab_log)
+        self.pushButton_log_rx_clr.setGeometry(QtCore.QRect(910, 110, 121, 28))
+        self.pushButton_log_rx_clr.setObjectName("pushButton_log_rx_clr")
+        self.plainTextEdit_log_dev_list = QtWidgets.QPlainTextEdit(self.tab_log)
+        self.plainTextEdit_log_dev_list.setGeometry(QtCore.QRect(1060, 140, 161, 601))
+        self.plainTextEdit_log_dev_list.setPlainText("")
+        self.plainTextEdit_log_dev_list.setObjectName("plainTextEdit_log_dev_list")
+        self.label_log_dev_list = QtWidgets.QLabel(self.tab_log)
+        self.label_log_dev_list.setGeometry(QtCore.QRect(1060, 80, 101, 21))
+        self.label_log_dev_list.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
+        self.label_log_dev_list.setObjectName("label_log_dev_list")
+        self.pushButton_log_refresh = QtWidgets.QPushButton(self.tab_log)
+        self.pushButton_log_refresh.setGeometry(QtCore.QRect(800, 20, 91, 101))
+        self.pushButton_log_refresh.setObjectName("pushButton_log_refresh")
+        self.label_5 = QtWidgets.QLabel(self.tab_log)
+        self.label_5.setGeometry(QtCore.QRect(1060, 10, 151, 31))
+        self.label_5.setObjectName("label_5")
+        self.lineEdit_log_rx_buf_max = QtWidgets.QLineEdit(self.tab_log)
+        self.lineEdit_log_rx_buf_max.setEnabled(False)
+        self.lineEdit_log_rx_buf_max.setGeometry(QtCore.QRect(1060, 50, 161, 21))
+        self.lineEdit_log_rx_buf_max.setObjectName("lineEdit_log_rx_buf_max")
+        self.checkBox_r_n = QtWidgets.QCheckBox(self.tab_log)
+        self.checkBox_r_n.setGeometry(QtCore.QRect(610, 710, 91, 19))
+        self.checkBox_r_n.setChecked(True)
+        self.checkBox_r_n.setObjectName("checkBox_r_n")
+        self.tabWidget.addTab(self.tab_log, "")
+        self.tab_lsb = QtWidgets.QWidget()
+        self.tab_lsb.setObjectName("tab_lsb")
+        self.groupBox_lsb_1base = QtWidgets.QGroupBox(self.tab_lsb)
+        self.groupBox_lsb_1base.setGeometry(QtCore.QRect(10, 10, 781, 121))
+        self.groupBox_lsb_1base.setObjectName("groupBox_lsb_1base")
+        self.label_lsb_01dev_type = QtWidgets.QLabel(self.groupBox_lsb_1base)
+        self.label_lsb_01dev_type.setGeometry(QtCore.QRect(20, 20, 121, 16))
+        self.label_lsb_01dev_type.setObjectName("label_lsb_01dev_type")
+        self.label_lsb_02sn = QtWidgets.QLabel(self.groupBox_lsb_1base)
+        self.label_lsb_02sn.setGeometry(QtCore.QRect(220, 20, 151, 16))
+        self.label_lsb_02sn.setObjectName("label_lsb_02sn")
+        self.label_lsb_03reset_times = QtWidgets.QLabel(self.groupBox_lsb_1base)
+        self.label_lsb_03reset_times.setGeometry(QtCore.QRect(470, 20, 141, 16))
+        self.label_lsb_03reset_times.setObjectName("label_lsb_03reset_times")
+        self.label_lsb_04app_ver = QtWidgets.QLabel(self.groupBox_lsb_1base)
+        self.label_lsb_04app_ver.setGeometry(QtCore.QRect(620, 20, 161, 16))
+        self.label_lsb_04app_ver.setObjectName("label_lsb_04app_ver")
+        self.label_lsb_05name = QtWidgets.QLabel(self.groupBox_lsb_1base)
+        self.label_lsb_05name.setGeometry(QtCore.QRect(20, 50, 121, 16))
+        self.label_lsb_05name.setObjectName("label_lsb_05name")
+        self.label_lsb_06telephone = QtWidgets.QLabel(self.groupBox_lsb_1base)
+        self.label_lsb_06telephone.setGeometry(QtCore.QRect(220, 50, 221, 16))
+        self.label_lsb_06telephone.setObjectName("label_lsb_06telephone")
+        self.label_lsb_07longitude = QtWidgets.QLabel(self.groupBox_lsb_1base)
+        self.label_lsb_07longitude.setGeometry(QtCore.QRect(470, 50, 141, 16))
+        self.label_lsb_07longitude.setObjectName("label_lsb_07longitude")
+        self.label_lsb_08latitude = QtWidgets.QLabel(self.groupBox_lsb_1base)
+        self.label_lsb_08latitude.setGeometry(QtCore.QRect(620, 50, 141, 16))
+        self.label_lsb_08latitude.setObjectName("label_lsb_08latitude")
+        self.label_lsb_09imei = QtWidgets.QLabel(self.groupBox_lsb_1base)
+        self.label_lsb_09imei.setGeometry(QtCore.QRect(20, 80, 171, 16))
+        self.label_lsb_09imei.setObjectName("label_lsb_09imei")
+        self.label_lsb_10iccid = QtWidgets.QLabel(self.groupBox_lsb_1base)
+        self.label_lsb_10iccid.setGeometry(QtCore.QRect(220, 80, 221, 16))
+        self.label_lsb_10iccid.setObjectName("label_lsb_10iccid")
+        self.label_lsb_11rssi = QtWidgets.QLabel(self.groupBox_lsb_1base)
+        self.label_lsb_11rssi.setGeometry(QtCore.QRect(470, 80, 141, 16))
+        self.label_lsb_11rssi.setObjectName("label_lsb_11rssi")
+        self.label_lsb_12snr = QtWidgets.QLabel(self.groupBox_lsb_1base)
+        self.label_lsb_12snr.setGeometry(QtCore.QRect(620, 80, 141, 16))
+        self.label_lsb_12snr.setObjectName("label_lsb_12snr")
+        self.widget_web = QtWidgets.QWidget(self.tab_lsb)
+        self.widget_web.setGeometry(QtCore.QRect(100, 149, 1024, 601))
+        self.widget_web.setObjectName("widget_web")
+        self.horizontalLayoutWidget = QtWidgets.QWidget(self.widget_web)
+        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(0, 0, 761, 351))
+        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
+        self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
+        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.pushButton_lsb_refresh = QtWidgets.QPushButton(self.tab_lsb)
+        self.pushButton_lsb_refresh.setGeometry(QtCore.QRect(1110, 20, 101, 91))
+        self.pushButton_lsb_refresh.setObjectName("pushButton_lsb_refresh")
+        self.textEdit_lsb_address = QtWidgets.QTextEdit(self.tab_lsb)
+        self.textEdit_lsb_address.setGeometry(QtCore.QRect(800, 20, 301, 111))
+        self.textEdit_lsb_address.setObjectName("textEdit_lsb_address")
+        self.tabWidget.addTab(self.tab_lsb, "")
+        self.tab_set = QtWidgets.QWidget()
+        self.tab_set.setObjectName("tab_set")
+        self.groupBox_set_0tools = QtWidgets.QGroupBox(self.tab_set)
+        self.groupBox_set_0tools.setGeometry(QtCore.QRect(0, 10, 851, 101))
+        self.groupBox_set_0tools.setObjectName("groupBox_set_0tools")
+        self.pushButton_set_connect = QtWidgets.QPushButton(self.groupBox_set_0tools)
+        self.pushButton_set_connect.setEnabled(False)
+        self.pushButton_set_connect.setGeometry(QtCore.QRect(750, 30, 93, 28))
+        self.pushButton_set_connect.setObjectName("pushButton_set_connect")
+        self.lineEdit_set_0ip = QtWidgets.QLineEdit(self.groupBox_set_0tools)
+        self.lineEdit_set_0ip.setGeometry(QtCore.QRect(130, 30, 151, 21))
+        self.lineEdit_set_0ip.setObjectName("lineEdit_set_0ip")
+        self.lineEdit_set_1port = QtWidgets.QLineEdit(self.groupBox_set_0tools)
+        self.lineEdit_set_1port.setGeometry(QtCore.QRect(290, 30, 121, 21))
+        self.lineEdit_set_1port.setObjectName("lineEdit_set_1port")
+        self.lineEdit_4sub_topic = QtWidgets.QLineEdit(self.groupBox_set_0tools)
+        self.lineEdit_4sub_topic.setEnabled(False)
+        self.lineEdit_4sub_topic.setGeometry(QtCore.QRect(130, 70, 611, 21))
+        self.lineEdit_4sub_topic.setObjectName("lineEdit_4sub_topic")
+        self.lineEdit_set_2usr = QtWidgets.QLineEdit(self.groupBox_set_0tools)
+        self.lineEdit_set_2usr.setGeometry(QtCore.QRect(430, 30, 151, 21))
+        self.lineEdit_set_2usr.setObjectName("lineEdit_set_2usr")
+        self.lineEdit_set_3password = QtWidgets.QLineEdit(self.groupBox_set_0tools)
+        self.lineEdit_set_3password.setGeometry(QtCore.QRect(590, 30, 151, 21))
+        self.lineEdit_set_3password.setObjectName("lineEdit_set_3password")
+        self.label_3 = QtWidgets.QLabel(self.groupBox_set_0tools)
+        self.label_3.setGeometry(QtCore.QRect(20, 70, 72, 15))
+        self.label_3.setObjectName("label_3")
+        self.comboBox_set_svr = QtWidgets.QComboBox(self.groupBox_set_0tools)
+        self.comboBox_set_svr.setGeometry(QtCore.QRect(10, 30, 111, 22))
+        self.comboBox_set_svr.setObjectName("comboBox_set_svr")
+        self.comboBox_set_svr.addItem("")
+        self.comboBox_set_svr.addItem("")
+        self.comboBox_set_svr.addItem("")
+        self.pushButton_set_subscribe = QtWidgets.QPushButton(self.groupBox_set_0tools)
+        self.pushButton_set_subscribe.setEnabled(False)
+        self.pushButton_set_subscribe.setGeometry(QtCore.QRect(750, 70, 93, 28))
+        self.pushButton_set_subscribe.setObjectName("pushButton_set_subscribe")
+        self.groupBox_set_1log = QtWidgets.QGroupBox(self.tab_set)
+        self.groupBox_set_1log.setGeometry(QtCore.QRect(0, 120, 851, 631))
+        self.groupBox_set_1log.setObjectName("groupBox_set_1log")
+        self.pushButton_set_send = QtWidgets.QPushButton(self.groupBox_set_1log)
+        self.pushButton_set_send.setGeometry(QtCore.QRect(692, 590, 61, 28))
+        self.pushButton_set_send.setObjectName("pushButton_set_send")
+        self.checkBox_set_bind_imei = QtWidgets.QCheckBox(self.groupBox_set_1log)
+        self.checkBox_set_bind_imei.setGeometry(QtCore.QRect(30, 20, 121, 19))
+        self.checkBox_set_bind_imei.setObjectName("checkBox_set_bind_imei")
+        self.checkBox_set_default_cfg = QtWidgets.QCheckBox(self.groupBox_set_1log)
+        self.checkBox_set_default_cfg.setEnabled(True)
+        self.checkBox_set_default_cfg.setGeometry(QtCore.QRect(170, 70, 121, 19))
+        self.checkBox_set_default_cfg.setObjectName("checkBox_set_default_cfg")
+        self.pushButton_set_tx_clr = QtWidgets.QPushButton(self.groupBox_set_1log)
+        self.pushButton_set_tx_clr.setGeometry(QtCore.QRect(702, 520, 121, 28))
+        self.pushButton_set_tx_clr.setObjectName("pushButton_set_tx_clr")
+        self.checkBox_set_reboot = QtWidgets.QCheckBox(self.groupBox_set_1log)
+        self.checkBox_set_reboot.setGeometry(QtCore.QRect(310, 70, 121, 19))
+        self.checkBox_set_reboot.setObjectName("checkBox_set_reboot")
+        self.textEdit_set_tx = QtWidgets.QTextEdit(self.groupBox_set_1log)
+        self.textEdit_set_tx.setGeometry(QtCore.QRect(30, 516, 651, 111))
+        self.textEdit_set_tx.setObjectName("textEdit_set_tx")
+        self.groupBox_dev_set = QtWidgets.QGroupBox(self.groupBox_set_1log)
+        self.groupBox_dev_set.setGeometry(QtCore.QRect(30, 130, 411, 311))
+        self.groupBox_dev_set.setObjectName("groupBox_dev_set")
+        self.groupBox_dev_cfg = QtWidgets.QGroupBox(self.groupBox_dev_set)
+        self.groupBox_dev_cfg.setGeometry(QtCore.QRect(10, 20, 391, 80))
+        self.groupBox_dev_cfg.setObjectName("groupBox_dev_cfg")
+        self.lineEdit_dev_0type = QtWidgets.QLineEdit(self.groupBox_dev_cfg)
+        self.lineEdit_dev_0type.setEnabled(False)
+        self.lineEdit_dev_0type.setGeometry(QtCore.QRect(170, 10, 211, 21))
+        self.lineEdit_dev_0type.setObjectName("lineEdit_dev_0type")
+        self.label_9 = QtWidgets.QLabel(self.groupBox_dev_cfg)
+        self.label_9.setGeometry(QtCore.QRect(90, 10, 72, 15))
+        self.label_9.setObjectName("label_9")
+        self.lineEdit_set_dev_sn = QtWidgets.QLineEdit(self.groupBox_dev_cfg)
+        self.lineEdit_set_dev_sn.setGeometry(QtCore.QRect(170, 30, 211, 21))
+        self.lineEdit_set_dev_sn.setObjectName("lineEdit_set_dev_sn")
+        self.label_10 = QtWidgets.QLabel(self.groupBox_dev_cfg)
+        self.label_10.setGeometry(QtCore.QRect(90, 30, 72, 15))
+        self.label_10.setObjectName("label_10")
+        self.lineEdit_set_dev_pd = QtWidgets.QLineEdit(self.groupBox_dev_cfg)
+        self.lineEdit_set_dev_pd.setGeometry(QtCore.QRect(170, 50, 211, 21))
+        self.lineEdit_set_dev_pd.setObjectName("lineEdit_set_dev_pd")
+        self.label_11 = QtWidgets.QLabel(self.groupBox_dev_cfg)
+        self.label_11.setGeometry(QtCore.QRect(90, 50, 72, 15))
+        self.label_11.setObjectName("label_11")
+        self.checkBox_set_dev_cfg = QtWidgets.QCheckBox(self.groupBox_dev_cfg)
+        self.checkBox_set_dev_cfg.setGeometry(QtCore.QRect(20, 20, 21, 19))
+        self.checkBox_set_dev_cfg.setText("")
+        self.checkBox_set_dev_cfg.setObjectName("checkBox_set_dev_cfg")
+        self.groupBox_reg_cfg = QtWidgets.QGroupBox(self.groupBox_dev_set)
+        self.groupBox_reg_cfg.setGeometry(QtCore.QRect(10, 100, 391, 51))
+        self.groupBox_reg_cfg.setObjectName("groupBox_reg_cfg")
+        self.label_12 = QtWidgets.QLabel(self.groupBox_reg_cfg)
+        self.label_12.setGeometry(QtCore.QRect(90, 10, 72, 15))
+        self.label_12.setObjectName("label_12")
+        self.label_13 = QtWidgets.QLabel(self.groupBox_reg_cfg)
+        self.label_13.setGeometry(QtCore.QRect(90, 30, 72, 15))
+        self.label_13.setObjectName("label_13")
+        self.lineEdit_set_reg_name = QtWidgets.QLineEdit(self.groupBox_reg_cfg)
+        self.lineEdit_set_reg_name.setGeometry(QtCore.QRect(170, 10, 211, 21))
+        self.lineEdit_set_reg_name.setObjectName("lineEdit_set_reg_name")
+        self.lineEdit_set_reg_tel = QtWidgets.QLineEdit(self.groupBox_reg_cfg)
+        self.lineEdit_set_reg_tel.setGeometry(QtCore.QRect(170, 30, 211, 21))
+        self.lineEdit_set_reg_tel.setObjectName("lineEdit_set_reg_tel")
+        self.checkBox_set_reg_cfg = QtWidgets.QCheckBox(self.groupBox_reg_cfg)
+        self.checkBox_set_reg_cfg.setGeometry(QtCore.QRect(20, 20, 21, 19))
+        self.checkBox_set_reg_cfg.setText("")
+        self.checkBox_set_reg_cfg.setObjectName("checkBox_set_reg_cfg")
+        self.groupBox_svr_cfg = QtWidgets.QGroupBox(self.groupBox_dev_set)
+        self.groupBox_svr_cfg.setGeometry(QtCore.QRect(10, 170, 391, 111))
+        self.groupBox_svr_cfg.setObjectName("groupBox_svr_cfg")
+        self.lineEdit_set_svr_usr_name = QtWidgets.QLineEdit(self.groupBox_svr_cfg)
+        self.lineEdit_set_svr_usr_name.setGeometry(QtCore.QRect(170, 60, 211, 21))
+        self.lineEdit_set_svr_usr_name.setObjectName("lineEdit_set_svr_usr_name")
+        self.label_14 = QtWidgets.QLabel(self.groupBox_svr_cfg)
+        self.label_14.setGeometry(QtCore.QRect(60, 20, 111, 16))
+        self.label_14.setObjectName("label_14")
+        self.label_15 = QtWidgets.QLabel(self.groupBox_svr_cfg)
+        self.label_15.setGeometry(QtCore.QRect(60, 40, 111, 16))
+        self.label_15.setObjectName("label_15")
+        self.lineEdit_set_svr_cfg = QtWidgets.QLineEdit(self.groupBox_svr_cfg)
+        self.lineEdit_set_svr_cfg.setGeometry(QtCore.QRect(170, 20, 211, 21))
+        self.lineEdit_set_svr_cfg.setObjectName("lineEdit_set_svr_cfg")
+        self.label_16 = QtWidgets.QLabel(self.groupBox_svr_cfg)
+        self.label_16.setGeometry(QtCore.QRect(60, 60, 111, 16))
+        self.label_16.setObjectName("label_16")
+        self.lineEdit_set_svr_port = QtWidgets.QLineEdit(self.groupBox_svr_cfg)
+        self.lineEdit_set_svr_port.setGeometry(QtCore.QRect(170, 40, 211, 21))
+        self.lineEdit_set_svr_port.setObjectName("lineEdit_set_svr_port")
+        self.lineEdit_set_svr_usr_pwd = QtWidgets.QLineEdit(self.groupBox_svr_cfg)
+        self.lineEdit_set_svr_usr_pwd.setGeometry(QtCore.QRect(170, 80, 211, 21))
+        self.lineEdit_set_svr_usr_pwd.setObjectName("lineEdit_set_svr_usr_pwd")
+        self.label_17 = QtWidgets.QLabel(self.groupBox_svr_cfg)
+        self.label_17.setGeometry(QtCore.QRect(60, 80, 111, 16))
+        self.label_17.setObjectName("label_17")
+        self.checkBox_set_svr_cfg = QtWidgets.QCheckBox(self.groupBox_svr_cfg)
+        self.checkBox_set_svr_cfg.setEnabled(False)
+        self.checkBox_set_svr_cfg.setGeometry(QtCore.QRect(20, 20, 21, 19))
+        self.checkBox_set_svr_cfg.setText("")
+        self.checkBox_set_svr_cfg.setObjectName("checkBox_set_svr_cfg")
+        self.groupBox_io_cfg = QtWidgets.QGroupBox(self.groupBox_set_1log)
+        self.groupBox_io_cfg.setGeometry(QtCore.QRect(450, 20, 391, 421))
+        self.groupBox_io_cfg.setObjectName("groupBox_io_cfg")
+        self.comboBox_set_io_select = QtWidgets.QComboBox(self.groupBox_io_cfg)
+        self.comboBox_set_io_select.setGeometry(QtCore.QRect(90, 70, 87, 22))
+        self.comboBox_set_io_select.setObjectName("comboBox_set_io_select")
+        self.comboBox_set_io_select.addItem("")
+        self.comboBox_set_io_select.addItem("")
+        self.comboBox_set_io_select.addItem("")
+        self.lineEdit_set_stop_bits = QtWidgets.QLineEdit(self.groupBox_io_cfg)
+        self.lineEdit_set_stop_bits.setGeometry(QtCore.QRect(90, 200, 131, 21))
+        self.lineEdit_set_stop_bits.setObjectName("lineEdit_set_stop_bits")
+        self.label_18 = QtWidgets.QLabel(self.groupBox_io_cfg)
+        self.label_18.setGeometry(QtCore.QRect(10, 140, 72, 15))
+        self.label_18.setObjectName("label_18")
+        self.label_19 = QtWidgets.QLabel(self.groupBox_io_cfg)
+        self.label_19.setGeometry(QtCore.QRect(10, 170, 72, 15))
+        self.label_19.setObjectName("label_19")
+        self.lineEdit_set_baud_rate = QtWidgets.QLineEdit(self.groupBox_io_cfg)
+        self.lineEdit_set_baud_rate.setGeometry(QtCore.QRect(90, 140, 131, 21))
+        self.lineEdit_set_baud_rate.setObjectName("lineEdit_set_baud_rate")
+        self.label_20 = QtWidgets.QLabel(self.groupBox_io_cfg)
+        self.label_20.setGeometry(QtCore.QRect(10, 200, 72, 15))
+        self.label_20.setObjectName("label_20")
+        self.lineEdit_set_data_bits = QtWidgets.QLineEdit(self.groupBox_io_cfg)
+        self.lineEdit_set_data_bits.setGeometry(QtCore.QRect(90, 170, 131, 21))
+        self.lineEdit_set_data_bits.setObjectName("lineEdit_set_data_bits")
+        self.lineEdit_set_buff_size = QtWidgets.QLineEdit(self.groupBox_io_cfg)
+        self.lineEdit_set_buff_size.setGeometry(QtCore.QRect(90, 290, 131, 21))
+        self.lineEdit_set_buff_size.setObjectName("lineEdit_set_buff_size")
+        self.label_21 = QtWidgets.QLabel(self.groupBox_io_cfg)
+        self.label_21.setGeometry(QtCore.QRect(10, 260, 72, 15))
+        self.label_21.setObjectName("label_21")
+        self.lineEdit_set_bit_order = QtWidgets.QLineEdit(self.groupBox_io_cfg)
+        self.lineEdit_set_bit_order.setGeometry(QtCore.QRect(90, 260, 131, 21))
+        self.lineEdit_set_bit_order.setObjectName("lineEdit_set_bit_order")
+        self.lineEdit_set_partiy = QtWidgets.QLineEdit(self.groupBox_io_cfg)
+        self.lineEdit_set_partiy.setGeometry(QtCore.QRect(90, 230, 131, 21))
+        self.lineEdit_set_partiy.setObjectName("lineEdit_set_partiy")
+        self.label_22 = QtWidgets.QLabel(self.groupBox_io_cfg)
+        self.label_22.setGeometry(QtCore.QRect(10, 230, 72, 15))
+        self.label_22.setObjectName("label_22")
+        self.label_23 = QtWidgets.QLabel(self.groupBox_io_cfg)
+        self.label_23.setGeometry(QtCore.QRect(10, 290, 72, 15))
+        self.label_23.setObjectName("label_23")
+        self.lineEdit_set_rs485_gpio = QtWidgets.QLineEdit(self.groupBox_io_cfg)
+        self.lineEdit_set_rs485_gpio.setGeometry(QtCore.QRect(90, 320, 131, 21))
+        self.lineEdit_set_rs485_gpio.setObjectName("lineEdit_set_rs485_gpio")
+        self.label_24 = QtWidgets.QLabel(self.groupBox_io_cfg)
+        self.label_24.setGeometry(QtCore.QRect(10, 320, 72, 15))
+        self.label_24.setObjectName("label_24")
+        self.lineEdit_set_rs485_delay = QtWidgets.QLineEdit(self.groupBox_io_cfg)
+        self.lineEdit_set_rs485_delay.setGeometry(QtCore.QRect(90, 380, 131, 21))
+        self.lineEdit_set_rs485_delay.setObjectName("lineEdit_set_rs485_delay")
+        self.label_25 = QtWidgets.QLabel(self.groupBox_io_cfg)
+        self.label_25.setGeometry(QtCore.QRect(10, 380, 72, 15))
+        self.label_25.setObjectName("label_25")
+        self.label_26 = QtWidgets.QLabel(self.groupBox_io_cfg)
+        self.label_26.setGeometry(QtCore.QRect(10, 350, 72, 15))
+        self.label_26.setObjectName("label_26")
+        self.lineEdit_set_rs485_level = QtWidgets.QLineEdit(self.groupBox_io_cfg)
+        self.lineEdit_set_rs485_level.setGeometry(QtCore.QRect(90, 350, 131, 21))
+        self.lineEdit_set_rs485_level.setObjectName("lineEdit_set_rs485_level")
+        self.checkBox_set_io_cfg = QtWidgets.QCheckBox(self.groupBox_io_cfg)
+        self.checkBox_set_io_cfg.setGeometry(QtCore.QRect(120, 20, 151, 19))
+        self.checkBox_set_io_cfg.setObjectName("checkBox_set_io_cfg")
+        self.checkBox_set_io_up_enable = QtWidgets.QCheckBox(self.groupBox_io_cfg)
+        self.checkBox_set_io_up_enable.setGeometry(QtCore.QRect(280, 140, 101, 19))
+        self.checkBox_set_io_up_enable.setObjectName("checkBox_set_io_up_enable")
+        self.checkBox_set_io_down_enable = QtWidgets.QCheckBox(self.groupBox_io_cfg)
+        self.checkBox_set_io_down_enable.setGeometry(QtCore.QRect(280, 290, 101, 19))
+        self.checkBox_set_io_down_enable.setObjectName("checkBox_set_io_down_enable")
+        self.checkBox_set_io_parameter = QtWidgets.QCheckBox(self.groupBox_io_cfg)
+        self.checkBox_set_io_parameter.setGeometry(QtCore.QRect(60, 110, 131, 19))
+        self.checkBox_set_io_parameter.setObjectName("checkBox_set_io_parameter")
+        self.line = QtWidgets.QFrame(self.groupBox_io_cfg)
+        self.line.setGeometry(QtCore.QRect(30, 100, 331, 16))
+        self.line.setFrameShape(QtWidgets.QFrame.HLine)
+        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
+        self.line.setObjectName("line")
+        self.line_2 = QtWidgets.QFrame(self.groupBox_io_cfg)
+        self.line_2.setGeometry(QtCore.QRect(250, 130, 20, 271))
+        self.line_2.setFrameShape(QtWidgets.QFrame.VLine)
+        self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
+        self.line_2.setObjectName("line_2")
+        self.label_2 = QtWidgets.QLabel(self.groupBox_io_cfg)
+        self.label_2.setGeometry(QtCore.QRect(190, 70, 121, 16))
+        self.label_2.setObjectName("label_2")
+        self.line_3 = QtWidgets.QFrame(self.groupBox_io_cfg)
+        self.line_3.setGeometry(QtCore.QRect(30, 50, 331, 16))
+        self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
+        self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
+        self.line_3.setObjectName("line_3")
+        self.checkBox_set_io_up_disable = QtWidgets.QCheckBox(self.groupBox_io_cfg)
+        self.checkBox_set_io_up_disable.setGeometry(QtCore.QRect(280, 170, 101, 19))
+        self.checkBox_set_io_up_disable.setObjectName("checkBox_set_io_up_disable")
+        self.checkBox_set_io_down_disable = QtWidgets.QCheckBox(self.groupBox_io_cfg)
+        self.checkBox_set_io_down_disable.setGeometry(QtCore.QRect(280, 320, 101, 19))
+        self.checkBox_set_io_down_disable.setObjectName("checkBox_set_io_down_disable")
+        self.lineEdit_0imei = QtWidgets.QLineEdit(self.groupBox_set_1log)
+        self.lineEdit_0imei.setGeometry(QtCore.QRect(172, 20, 161, 21))
+        self.lineEdit_0imei.setObjectName("lineEdit_0imei")
+        self.label_4 = QtWidgets.QLabel(self.groupBox_set_1log)
+        self.label_4.setGeometry(QtCore.QRect(40, 470, 72, 15))
+        self.label_4.setObjectName("label_4")
+        self.lineEdit_5pub_topic = QtWidgets.QLineEdit(self.groupBox_set_1log)
+        self.lineEdit_5pub_topic.setEnabled(False)
+        self.lineEdit_5pub_topic.setGeometry(QtCore.QRect(130, 470, 461, 21))
+        self.lineEdit_5pub_topic.setObjectName("lineEdit_5pub_topic")
+        self.lineEdit_tx_sn = QtWidgets.QLineEdit(self.groupBox_set_1log)
+        self.lineEdit_tx_sn.setEnabled(False)
+        self.lineEdit_tx_sn.setGeometry(QtCore.QRect(620, 470, 113, 21))
+        self.lineEdit_tx_sn.setObjectName("lineEdit_tx_sn")
+        self.pushButton_set_create = QtWidgets.QPushButton(self.groupBox_set_1log)
+        self.pushButton_set_create.setGeometry(QtCore.QRect(692, 560, 61, 28))
+        self.pushButton_set_create.setObjectName("pushButton_set_create")
+        self.checkBox_set_get_fixed_info = QtWidgets.QCheckBox(self.groupBox_set_1log)
+        self.checkBox_set_get_fixed_info.setGeometry(QtCore.QRect(30, 70, 121, 19))
+        self.checkBox_set_get_fixed_info.setObjectName("checkBox_set_get_fixed_info")
+        self.checkBox_set_default_tx_sn = QtWidgets.QCheckBox(self.groupBox_set_1log)
+        self.checkBox_set_default_tx_sn.setGeometry(QtCore.QRect(750, 470, 81, 19))
+        self.checkBox_set_default_tx_sn.setChecked(True)
+        self.checkBox_set_default_tx_sn.setObjectName("checkBox_set_default_tx_sn")
+        self.pushButton_set_create_send = QtWidgets.QPushButton(self.groupBox_set_1log)
+        self.pushButton_set_create_send.setGeometry(QtCore.QRect(760, 560, 71, 61))
+        self.pushButton_set_create_send.setObjectName("pushButton_set_create_send")
+        self.tabWidget.addTab(self.tab_set, "")
+        self.tab_burn = QtWidgets.QWidget()
+        self.tab_burn.setObjectName("tab_burn")
+        self.label_27 = QtWidgets.QLabel(self.tab_burn)
+        self.label_27.setGeometry(QtCore.QRect(90, 60, 72, 15))
+        self.label_27.setObjectName("label_27")
+        self.comboBox_2 = QtWidgets.QComboBox(self.tab_burn)
+        self.comboBox_2.setGeometry(QtCore.QRect(170, 60, 87, 22))
+        self.comboBox_2.setObjectName("comboBox_2")
+        self.comboBox_2.addItem("")
+        self.comboBox_2.addItem("")
+        self.comboBox_2.addItem("")
+        self.comboBox_2.addItem("")
+        self.comboBox_2.addItem("")
+        self.comboBox_2.addItem("")
+        self.comboBox_2.addItem("")
+        self.comboBox_2.addItem("")
+        self.comboBox_2.addItem("")
+        self.comboBox_2.addItem("")
+        self.label_28 = QtWidgets.QLabel(self.tab_burn)
+        self.label_28.setGeometry(QtCore.QRect(270, 60, 91, 16))
+        self.label_28.setObjectName("label_28")
+        self.label_29 = QtWidgets.QLabel(self.tab_burn)
+        self.label_29.setGeometry(QtCore.QRect(640, 60, 111, 20))
+        self.label_29.setObjectName("label_29")
+        self.lineEdit_29 = QtWidgets.QLineEdit(self.tab_burn)
+        self.lineEdit_29.setGeometry(QtCore.QRect(770, 60, 113, 21))
+        self.lineEdit_29.setObjectName("lineEdit_29")
+        self.pushButton_4 = QtWidgets.QPushButton(self.tab_burn)
+        self.pushButton_4.setGeometry(QtCore.QRect(90, 120, 121, 81))
+        self.pushButton_4.setObjectName("pushButton_4")
+        self.textEdit_2 = QtWidgets.QTextEdit(self.tab_burn)
+        self.textEdit_2.setGeometry(QtCore.QRect(230, 120, 361, 87))
+        self.textEdit_2.setObjectName("textEdit_2")
+        self.pushButton_5 = QtWidgets.QPushButton(self.tab_burn)
+        self.pushButton_5.setGeometry(QtCore.QRect(90, 230, 93, 41))
+        self.pushButton_5.setObjectName("pushButton_5")
+        self.label_30 = QtWidgets.QLabel(self.tab_burn)
+        self.label_30.setGeometry(QtCore.QRect(221, 240, 41, 31))
+        self.label_30.setObjectName("label_30")
+        self.textEdit_3 = QtWidgets.QTextEdit(self.tab_burn)
+        self.textEdit_3.setGeometry(QtCore.QRect(270, 230, 621, 41))
+        self.textEdit_3.setObjectName("textEdit_3")
+        self.pushButton_6 = QtWidgets.QPushButton(self.tab_burn)
+        self.pushButton_6.setGeometry(QtCore.QRect(90, 320, 93, 28))
+        self.pushButton_6.setObjectName("pushButton_6")
+        self.lineEdit_30 = QtWidgets.QLineEdit(self.tab_burn)
+        self.lineEdit_30.setGeometry(QtCore.QRect(220, 320, 113, 21))
+        self.lineEdit_30.setObjectName("lineEdit_30")
+        self.pushButton_7 = QtWidgets.QPushButton(self.tab_burn)
+        self.pushButton_7.setGeometry(QtCore.QRect(540, 320, 93, 28))
+        self.pushButton_7.setObjectName("pushButton_7")
+        self.lineEdit_31 = QtWidgets.QLineEdit(self.tab_burn)
+        self.lineEdit_31.setGeometry(QtCore.QRect(650, 320, 113, 21))
+        self.lineEdit_31.setObjectName("lineEdit_31")
+        self.pushButton_8 = QtWidgets.QPushButton(self.tab_burn)
+        self.pushButton_8.setGeometry(QtCore.QRect(90, 370, 93, 28))
+        self.pushButton_8.setObjectName("pushButton_8")
+        self.lineEdit_32 = QtWidgets.QLineEdit(self.tab_burn)
+        self.lineEdit_32.setGeometry(QtCore.QRect(270, 370, 361, 21))
+        self.lineEdit_32.setObjectName("lineEdit_32")
+        self.label_31 = QtWidgets.QLabel(self.tab_burn)
+        self.label_31.setGeometry(QtCore.QRect(221, 370, 61, 21))
+        self.label_31.setObjectName("label_31")
+        self.label_32 = QtWidgets.QLabel(self.tab_burn)
+        self.label_32.setGeometry(QtCore.QRect(711, 370, 51, 21))
+        self.label_32.setObjectName("label_32")
+        self.pushButton_9 = QtWidgets.QPushButton(self.tab_burn)
+        self.pushButton_9.setGeometry(QtCore.QRect(90, 430, 671, 28))
+        self.pushButton_9.setObjectName("pushButton_9")
+        self.lineEdit_33 = QtWidgets.QLineEdit(self.tab_burn)
+        self.lineEdit_33.setGeometry(QtCore.QRect(770, 370, 113, 21))
+        self.lineEdit_33.setObjectName("lineEdit_33")
+        self.pushButton_10 = QtWidgets.QPushButton(self.tab_burn)
+        self.pushButton_10.setGeometry(QtCore.QRect(600, 120, 131, 81))
+        self.pushButton_10.setObjectName("pushButton_10")
+        self.lineEdit_34 = QtWidgets.QLineEdit(self.tab_burn)
+        self.lineEdit_34.setGeometry(QtCore.QRect(740, 130, 151, 61))
+        self.lineEdit_34.setObjectName("lineEdit_34")
+        self.pushButton_11 = QtWidgets.QPushButton(self.tab_burn)
+        self.pushButton_11.setGeometry(QtCore.QRect(90, 280, 93, 28))
+        self.pushButton_11.setObjectName("pushButton_11")
+        self.label_33 = QtWidgets.QLabel(self.tab_burn)
+        self.label_33.setGeometry(QtCore.QRect(220, 280, 191, 31))
+        self.label_33.setObjectName("label_33")
+        self.pushButton_12 = QtWidgets.QPushButton(self.tab_burn)
+        self.pushButton_12.setGeometry(QtCore.QRect(90, 470, 671, 28))
+        self.pushButton_12.setObjectName("pushButton_12")
+        self.pushButton_13 = QtWidgets.QPushButton(self.tab_burn)
+        self.pushButton_13.setGeometry(QtCore.QRect(800, 420, 93, 71))
+        self.pushButton_13.setObjectName("pushButton_13")
+        self.textEdit_4 = QtWidgets.QTextEdit(self.tab_burn)
+        self.textEdit_4.setGeometry(QtCore.QRect(90, 510, 801, 221))
+        self.textEdit_4.setObjectName("textEdit_4")
+        self.tabWidget.addTab(self.tab_burn, "")
+        self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
+        MainWindow.setCentralWidget(self.centralwidget)
+        self.menubar = QtWidgets.QMenuBar(MainWindow)
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 1246, 26))
+        self.menubar.setObjectName("menubar")
+        MainWindow.setMenuBar(self.menubar)
+        self.statusbar = QtWidgets.QStatusBar(MainWindow)
+        self.statusbar.setObjectName("statusbar")
+        MainWindow.setStatusBar(self.statusbar)
+
+        self.retranslateUi(MainWindow)
+        self.tabWidget.setCurrentIndex(0)
+        QtCore.QMetaObject.connectSlotsByName(MainWindow)
+
+    def retranslateUi(self, MainWindow):
+        _translate = QtCore.QCoreApplication.translate
+        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
+        self.groupBox_log_1base.setTitle(_translate("MainWindow", "日志设备基础信息"))
+        self.label_log_01dev_type.setText(_translate("MainWindow", "设备类型:9002"))
+        self.label_log_02sn.setText(_translate("MainWindow", "设备SN:1"))
+        self.label_log_03reset_times.setText(_translate("MainWindow", "复位次数:0"))
+        self.label_log_04app_ver.setText(_translate("MainWindow", "固件版本:9002.4.002"))
+        self.label_log_05name.setText(_translate("MainWindow", "姓名:张三"))
+        self.label_log_06telephone.setText(_translate("MainWindow", "电话:13888888888"))
+        self.label_log_07longitude.setText(_translate("MainWindow", "经度:116.1798005"))
+        self.label_log_08latitude.setText(_translate("MainWindow", "维度:039.9030239"))
+        self.label_log_09imei.setText(_translate("MainWindow", "IMEI:869861069998891"))
+        self.label_log_10iccid.setText(_translate("MainWindow", "ICCID:89860622330053052122"))
+        self.label_log_11rssi.setText(_translate("MainWindow", "信号强度:70"))
+        self.label_log_12snr.setText(_translate("MainWindow", "信噪比:13"))
+        self.groupBox_log_2up_onoff.setTitle(_translate("MainWindow", "上行接口开关"))
+        self.label_6.setText(_translate("MainWindow", "TTL"))
+        self.label_7.setText(_translate("MainWindow", "RS232"))
+        self.label_8.setText(_translate("MainWindow", "RS485"))
+        self.pushButton_log_0ttl_0on.setText(_translate("MainWindow", "开"))
+        self.pushButton_log_0ttl_1off.setText(_translate("MainWindow", "关"))
+        self.pushButton_log_1rs232_0on.setText(_translate("MainWindow", "开"))
+        self.pushButton_log_1rs232_1off.setText(_translate("MainWindow", "关"))
+        self.pushButton_log_2rs485_0on.setText(_translate("MainWindow", "开"))
+        self.pushButton_log_2rs485_1off.setText(_translate("MainWindow", "关"))
+        self.textEdit_log_0rx_display.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
+"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+"p, li { white-space: pre-wrap; }\n"
+"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2024-03-29 20:34:09.576--&gt;:topic:cpyypt/up/9002/0000000001 msg:TTL_U=</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">uart3 rcv prot Data Info: </p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">    fe fe 02 dc  08 00 00 03  61 20 14 00  02 01 20 00 </p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">    00 00 04 09  a7 0c 00 00  00 00 00 00  00 00 2f 9b </p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">business return Data Info: </p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">    fe fe 01 00  00 00 00 64  00 00 2f 00  4b 00 00 00 </p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">    00 04 09 00  00 00 01 20  00 fe fe 02  dc 08 00 00 </p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">    03 61 20 14  00 02 01 20  00 00 00 04  09 a7 0c 00 </p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">    00 00 00 00  00 00 00 2f  9b d0 6d </p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">version:0.0.0.9</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2024-03-29 20:36:33.147--&gt;:topic:cpyypt/up/9002/0000000001 msg:FIXED_INFO=</p>\n"
+"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">{&quot;base_info&quot;:{&quot;name&quot;:&quot;张三&quot;,&quot;uplinkB&quot;:1090,&quot;rsrp&quot;:-96,&quot;tel&quot;:&quot;13888888888&quot;,&quot;reset_times&quot;:12,&quot;project&quot;:&quot;LogTT&quot;,&quot;csq&quot;:21,&quot;downlinkB&quot;:881,&quot;rsrq&quot;:-6,&quot;dev_type&quot;:&quot;9002&quot;,&quot;simid&quot;:0,&quot;muid&quot;:&quot;20230818221817A863212A0300364949&quot;,&quot;snr&quot;:14,&quot;version&quot;:&quot;9002.4.002&quot;,&quot;iccid&quot;:&quot;89860622330053052122&quot;,&quot;imei&quot;:&quot;869861069998891&quot;,&quot;rssi&quot;:-70,&quot;dev_pd&quot;:&quot;20240329&quot;,&quot;dev_sn&quot;:1},&quot;pos_info&quot;:{&quot;lng&quot;:0,&quot;lat&quot;:0}}</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2024-03-29 20:36:33.227--&gt;:topic:cpyypt/up/9002/0000000001 msg:HEART_MSG=</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">{&quot;base_info&quot;:{&quot;uplinkB&quot;:1623,&quot;rsrp&quot;:-96,&quot;snr&quot;:14,&quot;csq&quot;:21,&quot;dev_sn&quot;:1,&quot;downlinkB&quot;:1015,&quot;rsrq&quot;:-6,&quot;dev_type&quot;:&quot;9002&quot;,&quot;rssi&quot;:-70},&quot;pos_info&quot;:{&quot;lng&quot;:&quot;116.1798005&quot;,&quot;lat&quot;:&quot;039.9030239&quot;}}</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2024-03-29 20:38:37.837--&gt;:topic:cpyypt/up/9002/0000000001 msg:FIXED_INFO=</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">{&quot;base_info&quot;:{&quot;name&quot;:&quot;张三&quot;,&quot;uplinkB&quot;:1090,&quot;rsrp&quot;:-97,&quot;tel&quot;:&quot;13888888888&quot;,&quot;reset_times&quot;:13,&quot;project&quot;:&quot;LogTT&quot;,&quot;csq&quot;:21,&quot;downlinkB&quot;:881,&quot;rsrq&quot;:-6,&quot;dev_type&quot;:&quot;9002&quot;,&quot;simid&quot;:0,&quot;muid&quot;:&quot;20230818221817A863212A0300364949&quot;,&quot;snr&quot;:12,&quot;version&quot;:&quot;9002.4.002&quot;,&quot;iccid&quot;:&quot;89860622330053052122&quot;,&quot;imei&quot;:&quot;869861069998891&quot;,&quot;rssi&quot;:-71,&quot;dev_pd&quot;:&quot;20240329&quot;,&quot;dev_sn&quot;:1},&quot;pos_info&quot;:{&quot;lng&quot;:0,&quot;lat&quot;:0}}</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2024-03-29 20:38:37.905--&gt;:topic:cpyypt/up/9002/0000000001 msg:HEART_MSG=</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">{&quot;base_info&quot;:{&quot;uplinkB&quot;:1623,&quot;rsrp&quot;:-97,&quot;snr&quot;:12,&quot;csq&quot;:21,&quot;dev_sn&quot;:1,&quot;downlinkB&quot;:1015,&quot;rsrq&quot;:-6,&quot;dev_type&quot;:&quot;9002&quot;,&quot;rssi&quot;:-71},&quot;pos_info&quot;:{&quot;lng&quot;:&quot;116.1798005&quot;,&quot;lat&quot;:&quot;039.9030239&quot;}}</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2024-03-29 20:40:42.603--&gt;:topic:cpyypt/up/9002/0000000001 msg:FIXED_INFO=</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">{&quot;base_info&quot;:{&quot;name&quot;:&quot;张三&quot;,&quot;uplinkB&quot;:1090,&quot;rsrp&quot;:-96,&quot;tel&quot;:&quot;13888888888&quot;,&quot;reset_times&quot;:14,&quot;project&quot;:&quot;LogTT&quot;,&quot;csq&quot;:21,&quot;downlinkB&quot;:881,&quot;rsrq&quot;:-6,&quot;dev_type&quot;:&quot;9002&quot;,&quot;simid&quot;:0,&quot;muid&quot;:&quot;20230818221817A863212A0300364949&quot;,&quot;snr&quot;:14,&quot;version&quot;:&quot;9002.4.002&quot;,&quot;iccid&quot;:&quot;89860622330053052122&quot;,&quot;imei&quot;:&quot;869861069998891&quot;,&quot;rssi&quot;:-70,&quot;dev_pd&quot;:&quot;20240329&quot;,&quot;dev_sn&quot;:1},&quot;pos_info&quot;:{&quot;lng&quot;:0,&quot;lat&quot;:0}}</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2024-03-29 20:40:42.665--&gt;:topic:cpyypt/up/9002/0000000001 msg:HEART_MSG=</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">{&quot;base_info&quot;:{&quot;uplinkB&quot;:1623,&quot;rsrp&quot;:-96,&quot;snr&quot;:14,&quot;csq&quot;:21,&quot;dev_sn&quot;:1,&quot;downlinkB&quot;:1015,&quot;rsrq&quot;:-6,&quot;dev_type&quot;:&quot;9002&quot;,&quot;rssi&quot;:-70},&quot;pos_info&quot;:{&quot;lng&quot;:&quot;116.1798005&quot;,&quot;lat&quot;:&quot;039.9030239&quot;}}</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2024-03-29 20:42:47.131--&gt;:topic:cpyypt/up/9002/0000000001 msg:FIXED_INFO=</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">{&quot;base_info&quot;:{&quot;name&quot;:&quot;张三&quot;,&quot;uplinkB&quot;:1010,&quot;rsrp&quot;:-97,&quot;tel&quot;:&quot;13888888888&quot;,&quot;reset_times&quot;:15,&quot;project&quot;:&quot;LogTT&quot;,&quot;csq&quot;:21,&quot;downlinkB&quot;:573,&quot;rsrq&quot;:-6,&quot;dev_type&quot;:&quot;9002&quot;,&quot;simid&quot;:0,&quot;muid&quot;:&quot;20230818221817A863212A0300364949&quot;,&quot;snr&quot;:16,&quot;version&quot;:&quot;9002.4.002&quot;,&quot;iccid&quot;:&quot;89860622330053052122&quot;,&quot;imei&quot;:&quot;869861069998891&quot;,&quot;rssi&quot;:-71,&quot;dev_pd&quot;:&quot;20240329&quot;,&quot;dev_sn&quot;:1},&quot;pos_info&quot;:{&quot;lng&quot;:0,&quot;lat&quot;:0}}</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2024-03-29 20:42:47.281--&gt;:topic:cpyypt/up/9002/0000000001 msg:HEART_MSG=</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">{&quot;base_info&quot;:{&quot;uplinkB&quot;:1543,&quot;rsrp&quot;:-97,&quot;snr&quot;:16,&quot;csq&quot;:21,&quot;dev_sn&quot;:1,&quot;downlinkB&quot;:975,&quot;rsrq&quot;:-6,&quot;dev_type&quot;:&quot;9002&quot;,&quot;rssi&quot;:-71},&quot;pos_info&quot;:{&quot;lng&quot;:&quot;116.1798005&quot;,&quot;lat&quot;:&quot;039.9030239&quot;}}version:0.0.0.9</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">version:0.0.0.9</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2024-03-29 20:44:52.056--&gt;:topic:cpyypt/up/9002/0000000001 msg:FIXED_INFO=</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">{&quot;base_info&quot;:{&quot;name&quot;:&quot;张三&quot;,&quot;uplinkB&quot;:1010,&quot;rsrp&quot;:-96,&quot;tel&quot;:&quot;13888888888&quot;,&quot;reset_times&quot;:16,&quot;project&quot;:&quot;LogTT&quot;,&quot;csq&quot;:21,&quot;downlinkB&quot;:573,&quot;rsrq&quot;:-6,&quot;dev_type&quot;:&quot;9002&quot;,&quot;simid&quot;:0,&quot;muid&quot;:&quot;20230818221817A863212A0300364949&quot;,&quot;snr&quot;:13,&quot;version&quot;:&quot;9002.4.002&quot;,&quot;iccid&quot;:&quot;89860622330053052122&quot;,&quot;imei&quot;:&quot;869861069998891&quot;,&quot;rssi&quot;:-70,&quot;dev_pd&quot;:&quot;20240329&quot;,&quot;dev_sn&quot;:1},&quot;pos_info&quot;:{&quot;lng&quot;:0,&quot;lat&quot;:0}}</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2024-03-29 20:44:52.138--&gt;:topic:cpyypt/up/9002/0000000001 msg:HEART_MSG=</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">{&quot;base_info&quot;:{&quot;uplinkB&quot;:1543,&quot;rsrp&quot;:-96,&quot;snr&quot;:13,&quot;csq&quot;:21,&quot;dev_sn&quot;:1,&quot;downlinkB&quot;:707,&quot;rsrq&quot;:-6,&quot;dev_type&quot;:&quot;9002&quot;,&quot;rssi&quot;:-70},&quot;pos_info&quot;:{&quot;lng&quot;:&quot;116.1798005&quot;,&quot;lat&quot;:&quot;039.9030239&quot;}}</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">version:0.0.0.1</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">version:0.0.0.1</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">2024-03-29 20:50:35.286--&gt;:topic:cpyypt/down/9002/broadcast msg:PT_CMD=</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">{&quot;rs485_cfg&quot;:{&quot;up_enable&quot;:&quot;1&quot;},&quot;ttl_cfg&quot;:{&quot;up_enable&quot;:&quot;1&quot;}}</p>\n"
+"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
+        self.textEdit_log_1tx.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
+"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+"p, li { white-space: pre-wrap; }\n"
+"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">BB06FF8900000177</p></body></html>"))
+        self.radioButton_log_1tx_ascii.setText(_translate("MainWindow", "ASCII"))
+        self.radioButton_log_0tx_hex.setText(_translate("MainWindow", "HEX"))
+        self.label.setText(_translate("MainWindow", "下行通道选择"))
+        self.comboBox_tx_io_select.setItemText(0, _translate("MainWindow", "TTL"))
+        self.comboBox_tx_io_select.setItemText(1, _translate("MainWindow", "RS232"))
+        self.comboBox_tx_io_select.setItemText(2, _translate("MainWindow", "RS485"))
+        self.pushButton_log_send.setText(_translate("MainWindow", "发送"))
+        self.groupBox_log_3rx_display_format.setTitle(_translate("MainWindow", "接收显示格式"))
+        self.checkBox_log_1rx_dis_hex.setText(_translate("MainWindow", "HEX"))
+        self.checkBox_log_0rx_dis_ascii.setText(_translate("MainWindow", "ASCII"))
+        self.checkBox_log_2rx_time_stamp.setText(_translate("MainWindow", "带时间戳"))
+        self.pushButton_log_rx_clr.setText(_translate("MainWindow", "清空接收缓存区"))
+        self.label_log_dev_list.setText(_translate("MainWindow", "设备SN列表:"))
+        self.pushButton_log_refresh.setText(_translate("MainWindow", "刷新\n"
+"基础信息"))
+        self.label_5.setText(_translate("MainWindow", "接收缓冲区\n"
+"最多显示行数:"))
+        self.lineEdit_log_rx_buf_max.setText(_translate("MainWindow", "10000"))
+        self.checkBox_r_n.setText(_translate("MainWindow", "\\r\\n"))
+        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_log), _translate("MainWindow", "日志界面"))
+        self.groupBox_lsb_1base.setTitle(_translate("MainWindow", "日志设备基础信息"))
+        self.label_lsb_01dev_type.setText(_translate("MainWindow", "设备类型:9002"))
+        self.label_lsb_02sn.setText(_translate("MainWindow", "设备SN:1"))
+        self.label_lsb_03reset_times.setText(_translate("MainWindow", "复位次数:0"))
+        self.label_lsb_04app_ver.setText(_translate("MainWindow", "固件版本:9002.4.002"))
+        self.label_lsb_05name.setText(_translate("MainWindow", "姓名:张三"))
+        self.label_lsb_06telephone.setText(_translate("MainWindow", "电话:13888888888"))
+        self.label_lsb_07longitude.setText(_translate("MainWindow", "经度:116.1798005"))
+        self.label_lsb_08latitude.setText(_translate("MainWindow", "维度:039.9030239"))
+        self.label_lsb_09imei.setText(_translate("MainWindow", "IMEI:869861069998891"))
+        self.label_lsb_10iccid.setText(_translate("MainWindow", "ICCID:89860622330053052122"))
+        self.label_lsb_11rssi.setText(_translate("MainWindow", "信号强度:70"))
+        self.label_lsb_12snr.setText(_translate("MainWindow", "信噪比:13"))
+        self.pushButton_lsb_refresh.setText(_translate("MainWindow", "刷新\n"
+"基站位置信息"))
+        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_lsb), _translate("MainWindow", "基站位置显示"))
+        self.groupBox_set_0tools.setTitle(_translate("MainWindow", "本软件设置"))
+        self.pushButton_set_connect.setText(_translate("MainWindow", "连接"))
+        self.lineEdit_set_0ip.setText(_translate("MainWindow", "test-***"))
+        self.lineEdit_set_1port.setText(_translate("MainWindow", "***"))
+        self.lineEdit_4sub_topic.setText(_translate("MainWindow", "cpyypt/up/9002/#"))
+        self.lineEdit_set_2usr.setText(_translate("MainWindow", "***"))
+        self.lineEdit_set_3password.setText(_translate("MainWindow", "***"))
+        self.label_3.setText(_translate("MainWindow", "sub_topic"))
+        self.comboBox_set_svr.setItemText(0, _translate("MainWindow", "测试服务器"))
+        self.comboBox_set_svr.setItemText(1, _translate("MainWindow", "生产服务器"))
+        self.comboBox_set_svr.setItemText(2, _translate("MainWindow", "自定义服务器"))
+        self.pushButton_set_subscribe.setText(_translate("MainWindow", "订阅"))
+        self.groupBox_set_1log.setTitle(_translate("MainWindow", "日志设备设置"))
+        self.pushButton_set_send.setText(_translate("MainWindow", "发送"))
+        self.checkBox_set_bind_imei.setText(_translate("MainWindow", "配置指令绑定IMEI"))
+        self.checkBox_set_default_cfg.setText(_translate("MainWindow", "恢复默认参数"))
+        self.pushButton_set_tx_clr.setText(_translate("MainWindow", "清空"))
+        self.checkBox_set_reboot.setText(_translate("MainWindow", "重启"))
+        self.textEdit_set_tx.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
+"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+"p, li { white-space: pre-wrap; }\n"
+"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">PT_CMD={&quot;get_fixed_info&quot;: &quot;true&quot;}</p></body></html>"))
+        self.groupBox_dev_set.setTitle(_translate("MainWindow", "设备参数"))
+        self.groupBox_dev_cfg.setTitle(_translate("MainWindow", "dev_cfg"))
+        self.lineEdit_dev_0type.setText(_translate("MainWindow", "9002"))
+        self.label_9.setText(_translate("MainWindow", "dev_type"))
+        self.lineEdit_set_dev_sn.setText(_translate("MainWindow", "5"))
+        self.label_10.setText(_translate("MainWindow", "dev_sn"))
+        self.lineEdit_set_dev_pd.setText(_translate("MainWindow", "20240808"))
+        self.label_11.setText(_translate("MainWindow", "dev_pd"))
+        self.groupBox_reg_cfg.setTitle(_translate("MainWindow", "reg_cfg"))
+        self.label_12.setText(_translate("MainWindow", "name"))
+        self.label_13.setText(_translate("MainWindow", "tel"))
+        self.lineEdit_set_reg_name.setText(_translate("MainWindow", "张三"))
+        self.lineEdit_set_reg_tel.setText(_translate("MainWindow", "13888888888"))
+        self.groupBox_svr_cfg.setTitle(_translate("MainWindow", "svr_cfg"))
+        self.lineEdit_set_svr_usr_name.setText(_translate("MainWindow", "usr"))
+        self.label_14.setText(_translate("MainWindow", "svr_ip"))
+        self.label_15.setText(_translate("MainWindow", "svr_port"))
+        self.lineEdit_set_svr_cfg.setText(_translate("MainWindow", "test-mqtt.cpyypt.cn"))
+        self.label_16.setText(_translate("MainWindow", "svr_usr_name"))
+        self.lineEdit_set_svr_port.setText(_translate("MainWindow", "9000"))
+        self.lineEdit_set_svr_usr_pwd.setText(_translate("MainWindow", "password"))
+        self.label_17.setText(_translate("MainWindow", "svr_usr_pwd"))
+        self.groupBox_io_cfg.setTitle(_translate("MainWindow", "接口参数"))
+        self.comboBox_set_io_select.setItemText(0, _translate("MainWindow", "TTL"))
+        self.comboBox_set_io_select.setItemText(1, _translate("MainWindow", "RS232"))
+        self.comboBox_set_io_select.setItemText(2, _translate("MainWindow", "RS485"))
+        self.lineEdit_set_stop_bits.setText(_translate("MainWindow", "1"))
+        self.label_18.setText(_translate("MainWindow", "baud_rate"))
+        self.label_19.setText(_translate("MainWindow", "data_bits"))
+        self.lineEdit_set_baud_rate.setText(_translate("MainWindow", "115200"))
+        self.label_20.setText(_translate("MainWindow", "stop_bits"))
+        self.lineEdit_set_data_bits.setText(_translate("MainWindow", "8"))
+        self.lineEdit_set_buff_size.setText(_translate("MainWindow", "1024"))
+        self.label_21.setText(_translate("MainWindow", "bit_order"))
+        self.lineEdit_set_bit_order.setText(_translate("MainWindow", "5"))
+        self.lineEdit_set_partiy.setText(_translate("MainWindow", "0"))
+        self.label_22.setText(_translate("MainWindow", "partiy"))
+        self.label_23.setText(_translate("MainWindow", "buff_size"))
+        self.lineEdit_set_rs485_gpio.setText(_translate("MainWindow", "2"))
+        self.label_24.setText(_translate("MainWindow", "rs485_gpio"))
+        self.lineEdit_set_rs485_delay.setText(_translate("MainWindow", "2000"))
+        self.label_25.setText(_translate("MainWindow", "rs485_delay"))
+        self.label_26.setText(_translate("MainWindow", "rs485_level"))
+        self.lineEdit_set_rs485_level.setText(_translate("MainWindow", "0"))
+        self.checkBox_set_io_cfg.setText(_translate("MainWindow", "配置接口参数"))
+        self.checkBox_set_io_up_enable.setText(_translate("MainWindow", "使能上行"))
+        self.checkBox_set_io_down_enable.setText(_translate("MainWindow", "使能下行"))
+        self.checkBox_set_io_parameter.setText(_translate("MainWindow", "参数"))
+        self.label_2.setText(_translate("MainWindow", "选择接口类型"))
+        self.checkBox_set_io_up_disable.setText(_translate("MainWindow", "禁止上行"))
+        self.checkBox_set_io_down_disable.setText(_translate("MainWindow", "禁止下行"))
+        self.lineEdit_0imei.setText(_translate("MainWindow", "869861069999337"))
+        self.label_4.setText(_translate("MainWindow", "pub_topic"))
+        self.lineEdit_5pub_topic.setText(_translate("MainWindow", "cpyypt/down/9002/0000000001"))
+        self.lineEdit_tx_sn.setText(_translate("MainWindow", "1"))
+        self.pushButton_set_create.setText(_translate("MainWindow", "生成"))
+        self.checkBox_set_get_fixed_info.setText(_translate("MainWindow", "获取基础信息"))
+        self.checkBox_set_default_tx_sn.setText(_translate("MainWindow", "默认SN"))
+        self.pushButton_set_create_send.setText(_translate("MainWindow", "生成\n"
+"发送"))
+        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_set), _translate("MainWindow", "设置界面"))
+        self.label_27.setText(_translate("MainWindow", "设备类型"))
+        self.comboBox_2.setItemText(0, _translate("MainWindow", "0101"))
+        self.comboBox_2.setItemText(1, _translate("MainWindow", "0102"))
+        self.comboBox_2.setItemText(2, _translate("MainWindow", "0201"))
+        self.comboBox_2.setItemText(3, _translate("MainWindow", "0202"))
+        self.comboBox_2.setItemText(4, _translate("MainWindow", "0301"))
+        self.comboBox_2.setItemText(5, _translate("MainWindow", "0302"))
+        self.comboBox_2.setItemText(6, _translate("MainWindow", "0103"))
+        self.comboBox_2.setItemText(7, _translate("MainWindow", "0104"))
+        self.comboBox_2.setItemText(8, _translate("MainWindow", "0902"))
+        self.comboBox_2.setItemText(9, _translate("MainWindow", "0904"))
+        self.label_28.setText(_translate("MainWindow", "加油机路由器"))
+        self.label_29.setText(_translate("MainWindow", "目标固件版本"))
+        self.lineEdit_29.setText(_translate("MainWindow", "02023107"))
+        self.pushButton_4.setText(_translate("MainWindow", "查询\n"
+"本地存储的固件\n"
+"剩余空间"))
+        self.textEdit_2.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
+"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+"p, li { white-space: pre-wrap; }\n"
+"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">本地存储的固件,</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">剩余存储空间        260KB</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">D0Z1_02023105.bin        65KB</p>\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">D0Z1_02023107.bin        67KB</p></body></html>"))
+        self.pushButton_5.setText(_translate("MainWindow", "将指定固件\n"
+"下载到本地"))
+        self.label_30.setText(_translate("MainWindow", "URL"))
+        self.textEdit_3.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
+"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+"p, li { white-space: pre-wrap; }\n"
+"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">https://oil-prod-public.oss-cn-beijing.aliyuncs.com/upgrade/apk/20240325/D0Z1_02023107.bin</p></body></html>"))
+        self.pushButton_6.setText(_translate("MainWindow", "按页擦除"))
+        self.lineEdit_30.setText(_translate("MainWindow", "页号"))
+        self.pushButton_7.setText(_translate("MainWindow", "整片擦除"))
+        self.lineEdit_31.setText(_translate("MainWindow", "..."))
+        self.pushButton_8.setText(_translate("MainWindow", "写固件包"))
+        self.lineEdit_32.setText(_translate("MainWindow", "D0Z1_02023105.bin"))
+        self.label_31.setText(_translate("MainWindow", "固件名"))
+        self.label_32.setText(_translate("MainWindow", "首地址"))
+        self.pushButton_9.setText(_translate("MainWindow", "校验固件"))
+        self.lineEdit_33.setText(_translate("MainWindow", "0x80000000"))
+        self.pushButton_10.setText(_translate("MainWindow", "删除\n"
+"指定的固件\n"
+"以便释放存储空间"))
+        self.lineEdit_34.setText(_translate("MainWindow", "D0Z1_02023105.bin"))
+        self.pushButton_11.setText(_translate("MainWindow", "连接引导模式"))
+        self.label_33.setText(_translate("MainWindow", "未连接/已超时/已连接"))
+        self.pushButton_12.setText(_translate("MainWindow", "一键烧写"))
+        self.pushButton_13.setText(_translate("MainWindow", "清除日志"))
+        self.textEdit_4.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
+"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+"p, li { white-space: pre-wrap; }\n"
+"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
+"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">操作日志...</p>\n"
+"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>"))
+        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_burn), _translate("MainWindow", "在线刷机"))
+import rsc_rc

+ 2441 - 0
mainwindow.ui

@@ -0,0 +1,2441 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>1246</width>
+    <height>851</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QGridLayout" name="gridLayout">
+    <item row="0" column="0">
+     <widget class="QTabWidget" name="tabWidget">
+      <property name="currentIndex">
+       <number>0</number>
+      </property>
+      <widget class="QWidget" name="tab_log">
+       <attribute name="title">
+        <string>日志界面</string>
+       </attribute>
+       <widget class="QGroupBox" name="groupBox_log_1base">
+        <property name="geometry">
+         <rect>
+          <x>10</x>
+          <y>10</y>
+          <width>781</width>
+          <height>121</height>
+         </rect>
+        </property>
+        <property name="title">
+         <string>日志设备基础信息</string>
+        </property>
+        <widget class="QLabel" name="label_log_01dev_type">
+         <property name="geometry">
+          <rect>
+           <x>20</x>
+           <y>20</y>
+           <width>121</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>设备类型:9002</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_log_02sn">
+         <property name="geometry">
+          <rect>
+           <x>220</x>
+           <y>20</y>
+           <width>151</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>设备SN:1</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_log_03reset_times">
+         <property name="geometry">
+          <rect>
+           <x>470</x>
+           <y>20</y>
+           <width>141</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>复位次数:0</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_log_04app_ver">
+         <property name="geometry">
+          <rect>
+           <x>620</x>
+           <y>20</y>
+           <width>161</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>固件版本:9002.4.002</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_log_05name">
+         <property name="geometry">
+          <rect>
+           <x>20</x>
+           <y>50</y>
+           <width>121</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>姓名:张三</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_log_06telephone">
+         <property name="geometry">
+          <rect>
+           <x>220</x>
+           <y>50</y>
+           <width>221</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>电话:13888888888</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_log_07longitude">
+         <property name="geometry">
+          <rect>
+           <x>470</x>
+           <y>50</y>
+           <width>141</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>经度:116.1798005</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_log_08latitude">
+         <property name="geometry">
+          <rect>
+           <x>620</x>
+           <y>50</y>
+           <width>141</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>维度:039.9030239</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_log_09imei">
+         <property name="geometry">
+          <rect>
+           <x>20</x>
+           <y>80</y>
+           <width>171</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>IMEI:869861069998891</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_log_10iccid">
+         <property name="geometry">
+          <rect>
+           <x>220</x>
+           <y>80</y>
+           <width>221</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>ICCID:89860622330053052122</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_log_11rssi">
+         <property name="geometry">
+          <rect>
+           <x>470</x>
+           <y>80</y>
+           <width>91</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>信号强度:70</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_log_12snr">
+         <property name="geometry">
+          <rect>
+           <x>620</x>
+           <y>80</y>
+           <width>141</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>信噪比:13</string>
+         </property>
+        </widget>
+       </widget>
+       <widget class="QGroupBox" name="groupBox_log_2up_onoff">
+        <property name="geometry">
+         <rect>
+          <x>870</x>
+          <y>620</y>
+          <width>181</width>
+          <height>121</height>
+         </rect>
+        </property>
+        <property name="title">
+         <string>上行接口开关</string>
+        </property>
+        <widget class="QLabel" name="label_6">
+         <property name="geometry">
+          <rect>
+           <x>10</x>
+           <y>30</y>
+           <width>41</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>TTL</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_7">
+         <property name="geometry">
+          <rect>
+           <x>10</x>
+           <y>60</y>
+           <width>41</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>RS232</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_8">
+         <property name="geometry">
+          <rect>
+           <x>10</x>
+           <y>90</y>
+           <width>41</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>RS485</string>
+         </property>
+        </widget>
+        <widget class="QPushButton" name="pushButton_log_0ttl_0on">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="geometry">
+          <rect>
+           <x>60</x>
+           <y>20</y>
+           <width>51</width>
+           <height>28</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>开</string>
+         </property>
+        </widget>
+        <widget class="QPushButton" name="pushButton_log_0ttl_1off">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="geometry">
+          <rect>
+           <x>120</x>
+           <y>20</y>
+           <width>51</width>
+           <height>28</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>关</string>
+         </property>
+        </widget>
+        <widget class="QPushButton" name="pushButton_log_1rs232_0on">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="geometry">
+          <rect>
+           <x>60</x>
+           <y>50</y>
+           <width>51</width>
+           <height>28</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>开</string>
+         </property>
+        </widget>
+        <widget class="QPushButton" name="pushButton_log_1rs232_1off">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="geometry">
+          <rect>
+           <x>120</x>
+           <y>50</y>
+           <width>51</width>
+           <height>28</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>关</string>
+         </property>
+        </widget>
+        <widget class="QPushButton" name="pushButton_log_2rs485_0on">
+         <property name="geometry">
+          <rect>
+           <x>60</x>
+           <y>80</y>
+           <width>51</width>
+           <height>28</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>开</string>
+         </property>
+        </widget>
+        <widget class="QPushButton" name="pushButton_log_2rs485_1off">
+         <property name="geometry">
+          <rect>
+           <x>120</x>
+           <y>80</y>
+           <width>51</width>
+           <height>28</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>关</string>
+         </property>
+        </widget>
+       </widget>
+       <widget class="QTextEdit" name="textEdit_log_0rx_display">
+        <property name="geometry">
+         <rect>
+          <x>0</x>
+          <y>140</y>
+          <width>1051</width>
+          <height>471</height>
+         </rect>
+        </property>
+        <property name="layoutDirection">
+         <enum>Qt::LeftToRight</enum>
+        </property>
+        <property name="autoFillBackground">
+         <bool>false</bool>
+        </property>
+        <property name="sizeAdjustPolicy">
+         <enum>QAbstractScrollArea::AdjustIgnored</enum>
+        </property>
+        <property name="html">
+         <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2024-03-29 20:34:09.576--&amp;gt;:topic:cpyypt/up/9002/0000000001 msg:TTL_U=&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;uart3 rcv prot Data Info: &lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;    fe fe 02 dc  08 00 00 03  61 20 14 00  02 01 20 00 &lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;    00 00 04 09  a7 0c 00 00  00 00 00 00  00 00 2f 9b &lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;business return Data Info: &lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;    fe fe 01 00  00 00 00 64  00 00 2f 00  4b 00 00 00 &lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;    00 04 09 00  00 00 01 20  00 fe fe 02  dc 08 00 00 &lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;    03 61 20 14  00 02 01 20  00 00 00 04  09 a7 0c 00 &lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;    00 00 00 00  00 00 00 2f  9b d0 6d &lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;version:0.0.0.9&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2024-03-29 20:36:33.147--&amp;gt;:topic:cpyypt/up/9002/0000000001 msg:FIXED_INFO=&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;{&amp;quot;base_info&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;张三&amp;quot;,&amp;quot;uplinkB&amp;quot;:1090,&amp;quot;rsrp&amp;quot;:-96,&amp;quot;tel&amp;quot;:&amp;quot;13888888888&amp;quot;,&amp;quot;reset_times&amp;quot;:12,&amp;quot;project&amp;quot;:&amp;quot;LogTT&amp;quot;,&amp;quot;csq&amp;quot;:21,&amp;quot;downlinkB&amp;quot;:881,&amp;quot;rsrq&amp;quot;:-6,&amp;quot;dev_type&amp;quot;:&amp;quot;9002&amp;quot;,&amp;quot;simid&amp;quot;:0,&amp;quot;muid&amp;quot;:&amp;quot;20230818221817A863212A0300364949&amp;quot;,&amp;quot;snr&amp;quot;:14,&amp;quot;version&amp;quot;:&amp;quot;9002.4.002&amp;quot;,&amp;quot;iccid&amp;quot;:&amp;quot;89860622330053052122&amp;quot;,&amp;quot;imei&amp;quot;:&amp;quot;869861069998891&amp;quot;,&amp;quot;rssi&amp;quot;:-70,&amp;quot;dev_pd&amp;quot;:&amp;quot;20240329&amp;quot;,&amp;quot;dev_sn&amp;quot;:1},&amp;quot;pos_info&amp;quot;:{&amp;quot;lng&amp;quot;:0,&amp;quot;lat&amp;quot;:0}}&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2024-03-29 20:36:33.227--&amp;gt;:topic:cpyypt/up/9002/0000000001 msg:HEART_MSG=&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;{&amp;quot;base_info&amp;quot;:{&amp;quot;uplinkB&amp;quot;:1623,&amp;quot;rsrp&amp;quot;:-96,&amp;quot;snr&amp;quot;:14,&amp;quot;csq&amp;quot;:21,&amp;quot;dev_sn&amp;quot;:1,&amp;quot;downlinkB&amp;quot;:1015,&amp;quot;rsrq&amp;quot;:-6,&amp;quot;dev_type&amp;quot;:&amp;quot;9002&amp;quot;,&amp;quot;rssi&amp;quot;:-70},&amp;quot;pos_info&amp;quot;:{&amp;quot;lng&amp;quot;:&amp;quot;116.1798005&amp;quot;,&amp;quot;lat&amp;quot;:&amp;quot;039.9030239&amp;quot;}}&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2024-03-29 20:38:37.837--&amp;gt;:topic:cpyypt/up/9002/0000000001 msg:FIXED_INFO=&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;{&amp;quot;base_info&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;张三&amp;quot;,&amp;quot;uplinkB&amp;quot;:1090,&amp;quot;rsrp&amp;quot;:-97,&amp;quot;tel&amp;quot;:&amp;quot;13888888888&amp;quot;,&amp;quot;reset_times&amp;quot;:13,&amp;quot;project&amp;quot;:&amp;quot;LogTT&amp;quot;,&amp;quot;csq&amp;quot;:21,&amp;quot;downlinkB&amp;quot;:881,&amp;quot;rsrq&amp;quot;:-6,&amp;quot;dev_type&amp;quot;:&amp;quot;9002&amp;quot;,&amp;quot;simid&amp;quot;:0,&amp;quot;muid&amp;quot;:&amp;quot;20230818221817A863212A0300364949&amp;quot;,&amp;quot;snr&amp;quot;:12,&amp;quot;version&amp;quot;:&amp;quot;9002.4.002&amp;quot;,&amp;quot;iccid&amp;quot;:&amp;quot;89860622330053052122&amp;quot;,&amp;quot;imei&amp;quot;:&amp;quot;869861069998891&amp;quot;,&amp;quot;rssi&amp;quot;:-71,&amp;quot;dev_pd&amp;quot;:&amp;quot;20240329&amp;quot;,&amp;quot;dev_sn&amp;quot;:1},&amp;quot;pos_info&amp;quot;:{&amp;quot;lng&amp;quot;:0,&amp;quot;lat&amp;quot;:0}}&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2024-03-29 20:38:37.905--&amp;gt;:topic:cpyypt/up/9002/0000000001 msg:HEART_MSG=&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;{&amp;quot;base_info&amp;quot;:{&amp;quot;uplinkB&amp;quot;:1623,&amp;quot;rsrp&amp;quot;:-97,&amp;quot;snr&amp;quot;:12,&amp;quot;csq&amp;quot;:21,&amp;quot;dev_sn&amp;quot;:1,&amp;quot;downlinkB&amp;quot;:1015,&amp;quot;rsrq&amp;quot;:-6,&amp;quot;dev_type&amp;quot;:&amp;quot;9002&amp;quot;,&amp;quot;rssi&amp;quot;:-71},&amp;quot;pos_info&amp;quot;:{&amp;quot;lng&amp;quot;:&amp;quot;116.1798005&amp;quot;,&amp;quot;lat&amp;quot;:&amp;quot;039.9030239&amp;quot;}}&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2024-03-29 20:40:42.603--&amp;gt;:topic:cpyypt/up/9002/0000000001 msg:FIXED_INFO=&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;{&amp;quot;base_info&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;张三&amp;quot;,&amp;quot;uplinkB&amp;quot;:1090,&amp;quot;rsrp&amp;quot;:-96,&amp;quot;tel&amp;quot;:&amp;quot;13888888888&amp;quot;,&amp;quot;reset_times&amp;quot;:14,&amp;quot;project&amp;quot;:&amp;quot;LogTT&amp;quot;,&amp;quot;csq&amp;quot;:21,&amp;quot;downlinkB&amp;quot;:881,&amp;quot;rsrq&amp;quot;:-6,&amp;quot;dev_type&amp;quot;:&amp;quot;9002&amp;quot;,&amp;quot;simid&amp;quot;:0,&amp;quot;muid&amp;quot;:&amp;quot;20230818221817A863212A0300364949&amp;quot;,&amp;quot;snr&amp;quot;:14,&amp;quot;version&amp;quot;:&amp;quot;9002.4.002&amp;quot;,&amp;quot;iccid&amp;quot;:&amp;quot;89860622330053052122&amp;quot;,&amp;quot;imei&amp;quot;:&amp;quot;869861069998891&amp;quot;,&amp;quot;rssi&amp;quot;:-70,&amp;quot;dev_pd&amp;quot;:&amp;quot;20240329&amp;quot;,&amp;quot;dev_sn&amp;quot;:1},&amp;quot;pos_info&amp;quot;:{&amp;quot;lng&amp;quot;:0,&amp;quot;lat&amp;quot;:0}}&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2024-03-29 20:40:42.665--&amp;gt;:topic:cpyypt/up/9002/0000000001 msg:HEART_MSG=&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;{&amp;quot;base_info&amp;quot;:{&amp;quot;uplinkB&amp;quot;:1623,&amp;quot;rsrp&amp;quot;:-96,&amp;quot;snr&amp;quot;:14,&amp;quot;csq&amp;quot;:21,&amp;quot;dev_sn&amp;quot;:1,&amp;quot;downlinkB&amp;quot;:1015,&amp;quot;rsrq&amp;quot;:-6,&amp;quot;dev_type&amp;quot;:&amp;quot;9002&amp;quot;,&amp;quot;rssi&amp;quot;:-70},&amp;quot;pos_info&amp;quot;:{&amp;quot;lng&amp;quot;:&amp;quot;116.1798005&amp;quot;,&amp;quot;lat&amp;quot;:&amp;quot;039.9030239&amp;quot;}}&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2024-03-29 20:42:47.131--&amp;gt;:topic:cpyypt/up/9002/0000000001 msg:FIXED_INFO=&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;{&amp;quot;base_info&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;张三&amp;quot;,&amp;quot;uplinkB&amp;quot;:1010,&amp;quot;rsrp&amp;quot;:-97,&amp;quot;tel&amp;quot;:&amp;quot;13888888888&amp;quot;,&amp;quot;reset_times&amp;quot;:15,&amp;quot;project&amp;quot;:&amp;quot;LogTT&amp;quot;,&amp;quot;csq&amp;quot;:21,&amp;quot;downlinkB&amp;quot;:573,&amp;quot;rsrq&amp;quot;:-6,&amp;quot;dev_type&amp;quot;:&amp;quot;9002&amp;quot;,&amp;quot;simid&amp;quot;:0,&amp;quot;muid&amp;quot;:&amp;quot;20230818221817A863212A0300364949&amp;quot;,&amp;quot;snr&amp;quot;:16,&amp;quot;version&amp;quot;:&amp;quot;9002.4.002&amp;quot;,&amp;quot;iccid&amp;quot;:&amp;quot;89860622330053052122&amp;quot;,&amp;quot;imei&amp;quot;:&amp;quot;869861069998891&amp;quot;,&amp;quot;rssi&amp;quot;:-71,&amp;quot;dev_pd&amp;quot;:&amp;quot;20240329&amp;quot;,&amp;quot;dev_sn&amp;quot;:1},&amp;quot;pos_info&amp;quot;:{&amp;quot;lng&amp;quot;:0,&amp;quot;lat&amp;quot;:0}}&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2024-03-29 20:42:47.281--&amp;gt;:topic:cpyypt/up/9002/0000000001 msg:HEART_MSG=&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;{&amp;quot;base_info&amp;quot;:{&amp;quot;uplinkB&amp;quot;:1543,&amp;quot;rsrp&amp;quot;:-97,&amp;quot;snr&amp;quot;:16,&amp;quot;csq&amp;quot;:21,&amp;quot;dev_sn&amp;quot;:1,&amp;quot;downlinkB&amp;quot;:975,&amp;quot;rsrq&amp;quot;:-6,&amp;quot;dev_type&amp;quot;:&amp;quot;9002&amp;quot;,&amp;quot;rssi&amp;quot;:-71},&amp;quot;pos_info&amp;quot;:{&amp;quot;lng&amp;quot;:&amp;quot;116.1798005&amp;quot;,&amp;quot;lat&amp;quot;:&amp;quot;039.9030239&amp;quot;}}version:0.0.0.9&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;version:0.0.0.9&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2024-03-29 20:44:52.056--&amp;gt;:topic:cpyypt/up/9002/0000000001 msg:FIXED_INFO=&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;{&amp;quot;base_info&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;张三&amp;quot;,&amp;quot;uplinkB&amp;quot;:1010,&amp;quot;rsrp&amp;quot;:-96,&amp;quot;tel&amp;quot;:&amp;quot;13888888888&amp;quot;,&amp;quot;reset_times&amp;quot;:16,&amp;quot;project&amp;quot;:&amp;quot;LogTT&amp;quot;,&amp;quot;csq&amp;quot;:21,&amp;quot;downlinkB&amp;quot;:573,&amp;quot;rsrq&amp;quot;:-6,&amp;quot;dev_type&amp;quot;:&amp;quot;9002&amp;quot;,&amp;quot;simid&amp;quot;:0,&amp;quot;muid&amp;quot;:&amp;quot;20230818221817A863212A0300364949&amp;quot;,&amp;quot;snr&amp;quot;:13,&amp;quot;version&amp;quot;:&amp;quot;9002.4.002&amp;quot;,&amp;quot;iccid&amp;quot;:&amp;quot;89860622330053052122&amp;quot;,&amp;quot;imei&amp;quot;:&amp;quot;869861069998891&amp;quot;,&amp;quot;rssi&amp;quot;:-70,&amp;quot;dev_pd&amp;quot;:&amp;quot;20240329&amp;quot;,&amp;quot;dev_sn&amp;quot;:1},&amp;quot;pos_info&amp;quot;:{&amp;quot;lng&amp;quot;:0,&amp;quot;lat&amp;quot;:0}}&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2024-03-29 20:44:52.138--&amp;gt;:topic:cpyypt/up/9002/0000000001 msg:HEART_MSG=&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;{&amp;quot;base_info&amp;quot;:{&amp;quot;uplinkB&amp;quot;:1543,&amp;quot;rsrp&amp;quot;:-96,&amp;quot;snr&amp;quot;:13,&amp;quot;csq&amp;quot;:21,&amp;quot;dev_sn&amp;quot;:1,&amp;quot;downlinkB&amp;quot;:707,&amp;quot;rsrq&amp;quot;:-6,&amp;quot;dev_type&amp;quot;:&amp;quot;9002&amp;quot;,&amp;quot;rssi&amp;quot;:-70},&amp;quot;pos_info&amp;quot;:{&amp;quot;lng&amp;quot;:&amp;quot;116.1798005&amp;quot;,&amp;quot;lat&amp;quot;:&amp;quot;039.9030239&amp;quot;}}&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;version:0.0.0.1&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;version:0.0.0.1&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;2024-03-29 20:50:35.286--&amp;gt;:topic:cpyypt/down/9002/broadcast msg:PT_CMD=&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;{&amp;quot;rs485_cfg&amp;quot;:{&amp;quot;up_enable&amp;quot;:&amp;quot;1&amp;quot;},&amp;quot;ttl_cfg&amp;quot;:{&amp;quot;up_enable&amp;quot;:&amp;quot;1&amp;quot;}}&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
+       </widget>
+       <widget class="QTextEdit" name="textEdit_log_1tx">
+        <property name="geometry">
+         <rect>
+          <x>0</x>
+          <y>640</y>
+          <width>601</width>
+          <height>101</height>
+         </rect>
+        </property>
+        <property name="html">
+         <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;BB06FF8900000177&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
+       </widget>
+       <widget class="QRadioButton" name="radioButton_log_1tx_ascii">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+        <property name="geometry">
+         <rect>
+          <x>700</x>
+          <y>710</y>
+          <width>71</width>
+          <height>19</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>ASCII</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+       <widget class="QRadioButton" name="radioButton_log_0tx_hex">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+        <property name="geometry">
+         <rect>
+          <x>780</x>
+          <y>710</y>
+          <width>71</width>
+          <height>19</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>HEX</string>
+        </property>
+        <property name="checked">
+         <bool>false</bool>
+        </property>
+       </widget>
+       <widget class="QLabel" name="label">
+        <property name="geometry">
+         <rect>
+          <x>700</x>
+          <y>630</y>
+          <width>101</width>
+          <height>16</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>下行通道选择</string>
+        </property>
+       </widget>
+       <widget class="QComboBox" name="comboBox_tx_io_select">
+        <property name="geometry">
+         <rect>
+          <x>700</x>
+          <y>650</y>
+          <width>131</width>
+          <height>22</height>
+         </rect>
+        </property>
+        <item>
+         <property name="text">
+          <string>TTL</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>RS232</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>RS485</string>
+         </property>
+        </item>
+       </widget>
+       <widget class="QPushButton" name="pushButton_log_send">
+        <property name="geometry">
+         <rect>
+          <x>610</x>
+          <y>640</y>
+          <width>81</width>
+          <height>51</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>发送</string>
+        </property>
+       </widget>
+       <widget class="QGroupBox" name="groupBox_log_3rx_display_format">
+        <property name="geometry">
+         <rect>
+          <x>910</x>
+          <y>20</y>
+          <width>120</width>
+          <height>81</height>
+         </rect>
+        </property>
+        <property name="title">
+         <string>接收显示格式</string>
+        </property>
+        <widget class="QCheckBox" name="checkBox_log_1rx_dis_hex">
+         <property name="geometry">
+          <rect>
+           <x>0</x>
+           <y>40</y>
+           <width>51</width>
+           <height>19</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>HEX</string>
+         </property>
+        </widget>
+        <widget class="QCheckBox" name="checkBox_log_0rx_dis_ascii">
+         <property name="geometry">
+          <rect>
+           <x>0</x>
+           <y>20</y>
+           <width>51</width>
+           <height>19</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>ASCII</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+        <widget class="QCheckBox" name="checkBox_log_2rx_time_stamp">
+         <property name="geometry">
+          <rect>
+           <x>0</x>
+           <y>60</y>
+           <width>111</width>
+           <height>19</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>带时间戳</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </widget>
+       <widget class="QComboBox" name="comboBox_log_sn">
+        <property name="geometry">
+         <rect>
+          <x>1060</x>
+          <y>100</y>
+          <width>161</width>
+          <height>31</height>
+         </rect>
+        </property>
+       </widget>
+       <widget class="QPushButton" name="pushButton_log_rx_clr">
+        <property name="geometry">
+         <rect>
+          <x>910</x>
+          <y>110</y>
+          <width>121</width>
+          <height>28</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>清空接收缓存区</string>
+        </property>
+       </widget>
+       <widget class="QPlainTextEdit" name="plainTextEdit_log_dev_list">
+        <property name="geometry">
+         <rect>
+          <x>1060</x>
+          <y>140</y>
+          <width>161</width>
+          <height>601</height>
+         </rect>
+        </property>
+        <property name="plainText">
+         <string/>
+        </property>
+       </widget>
+       <widget class="QLabel" name="label_log_dev_list">
+        <property name="geometry">
+         <rect>
+          <x>1060</x>
+          <y>80</y>
+          <width>101</width>
+          <height>21</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>设备SN列表:</string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+        </property>
+       </widget>
+       <widget class="QPushButton" name="pushButton_log_refresh">
+        <property name="geometry">
+         <rect>
+          <x>800</x>
+          <y>20</y>
+          <width>91</width>
+          <height>101</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>刷新
+基础信息</string>
+        </property>
+       </widget>
+       <widget class="QLabel" name="label_5">
+        <property name="geometry">
+         <rect>
+          <x>1060</x>
+          <y>10</y>
+          <width>151</width>
+          <height>31</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>接收缓冲区
+最多显示行数:</string>
+        </property>
+       </widget>
+       <widget class="QLineEdit" name="lineEdit_log_rx_buf_max">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="geometry">
+         <rect>
+          <x>1060</x>
+          <y>50</y>
+          <width>161</width>
+          <height>21</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>10000</string>
+        </property>
+       </widget>
+       <widget class="QCheckBox" name="checkBox_r_n">
+        <property name="geometry">
+         <rect>
+          <x>610</x>
+          <y>710</y>
+          <width>91</width>
+          <height>19</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>\r\n</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </widget>
+      <widget class="QWidget" name="tab_lsb">
+       <attribute name="title">
+        <string>基站位置显示</string>
+       </attribute>
+       <widget class="QGroupBox" name="groupBox_lsb_1base">
+        <property name="geometry">
+         <rect>
+          <x>10</x>
+          <y>10</y>
+          <width>781</width>
+          <height>121</height>
+         </rect>
+        </property>
+        <property name="title">
+         <string>日志设备基础信息</string>
+        </property>
+        <widget class="QLabel" name="label_lsb_01dev_type">
+         <property name="geometry">
+          <rect>
+           <x>20</x>
+           <y>20</y>
+           <width>121</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>设备类型:9002</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_lsb_02sn">
+         <property name="geometry">
+          <rect>
+           <x>220</x>
+           <y>20</y>
+           <width>151</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>设备SN:1</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_lsb_03reset_times">
+         <property name="geometry">
+          <rect>
+           <x>470</x>
+           <y>20</y>
+           <width>141</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>复位次数:0</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_lsb_04app_ver">
+         <property name="geometry">
+          <rect>
+           <x>620</x>
+           <y>20</y>
+           <width>161</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>固件版本:9002.4.002</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_lsb_05name">
+         <property name="geometry">
+          <rect>
+           <x>20</x>
+           <y>50</y>
+           <width>121</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>姓名:张三</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_lsb_06telephone">
+         <property name="geometry">
+          <rect>
+           <x>220</x>
+           <y>50</y>
+           <width>221</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>电话:13888888888</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_lsb_07longitude">
+         <property name="geometry">
+          <rect>
+           <x>470</x>
+           <y>50</y>
+           <width>141</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>经度:116.1798005</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_lsb_08latitude">
+         <property name="geometry">
+          <rect>
+           <x>620</x>
+           <y>50</y>
+           <width>141</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>维度:039.9030239</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_lsb_09imei">
+         <property name="geometry">
+          <rect>
+           <x>20</x>
+           <y>80</y>
+           <width>171</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>IMEI:869861069998891</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_lsb_10iccid">
+         <property name="geometry">
+          <rect>
+           <x>220</x>
+           <y>80</y>
+           <width>221</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>ICCID:89860622330053052122</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_lsb_11rssi">
+         <property name="geometry">
+          <rect>
+           <x>470</x>
+           <y>80</y>
+           <width>141</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>信号强度:70</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_lsb_12snr">
+         <property name="geometry">
+          <rect>
+           <x>620</x>
+           <y>80</y>
+           <width>141</width>
+           <height>16</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>信噪比:13</string>
+         </property>
+        </widget>
+       </widget>
+       <widget class="QWidget" name="widget_web" native="true">
+        <property name="geometry">
+         <rect>
+          <x>100</x>
+          <y>149</y>
+          <width>1024</width>
+          <height>601</height>
+         </rect>
+        </property>
+        <widget class="QWidget" name="horizontalLayoutWidget">
+         <property name="geometry">
+          <rect>
+           <x>0</x>
+           <y>0</y>
+           <width>761</width>
+           <height>351</height>
+          </rect>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout"/>
+        </widget>
+       </widget>
+       <widget class="QPushButton" name="pushButton_lsb_refresh">
+        <property name="geometry">
+         <rect>
+          <x>1110</x>
+          <y>20</y>
+          <width>101</width>
+          <height>91</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>刷新
+基站位置信息</string>
+        </property>
+       </widget>
+       <widget class="QTextEdit" name="textEdit_lsb_address">
+        <property name="geometry">
+         <rect>
+          <x>800</x>
+          <y>20</y>
+          <width>301</width>
+          <height>111</height>
+         </rect>
+        </property>
+       </widget>
+      </widget>
+      <widget class="QWidget" name="tab_set">
+       <attribute name="title">
+        <string>设置界面</string>
+       </attribute>
+       <widget class="QGroupBox" name="groupBox_set_0tools">
+        <property name="geometry">
+         <rect>
+          <x>0</x>
+          <y>10</y>
+          <width>851</width>
+          <height>101</height>
+         </rect>
+        </property>
+        <property name="title">
+         <string>本软件设置</string>
+        </property>
+        <widget class="QPushButton" name="pushButton_set_connect">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="geometry">
+          <rect>
+           <x>750</x>
+           <y>30</y>
+           <width>93</width>
+           <height>28</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>连接</string>
+         </property>
+        </widget>
+        <widget class="QLineEdit" name="lineEdit_set_0ip">
+         <property name="geometry">
+          <rect>
+           <x>130</x>
+           <y>30</y>
+           <width>151</width>
+           <height>21</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>test-***</string>
+         </property>
+        </widget>
+        <widget class="QLineEdit" name="lineEdit_set_1port">
+         <property name="geometry">
+          <rect>
+           <x>290</x>
+           <y>30</y>
+           <width>121</width>
+           <height>21</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>***</string>
+         </property>
+        </widget>
+        <widget class="QLineEdit" name="lineEdit_4sub_topic">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="geometry">
+          <rect>
+           <x>130</x>
+           <y>70</y>
+           <width>611</width>
+           <height>21</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>cpyypt/up/9002/#</string>
+         </property>
+        </widget>
+        <widget class="QLineEdit" name="lineEdit_set_2usr">
+         <property name="geometry">
+          <rect>
+           <x>430</x>
+           <y>30</y>
+           <width>151</width>
+           <height>21</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>***</string>
+         </property>
+        </widget>
+        <widget class="QLineEdit" name="lineEdit_set_3password">
+         <property name="geometry">
+          <rect>
+           <x>590</x>
+           <y>30</y>
+           <width>151</width>
+           <height>21</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>***</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_3">
+         <property name="geometry">
+          <rect>
+           <x>20</x>
+           <y>70</y>
+           <width>72</width>
+           <height>15</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>sub_topic</string>
+         </property>
+        </widget>
+        <widget class="QComboBox" name="comboBox_set_svr">
+         <property name="geometry">
+          <rect>
+           <x>10</x>
+           <y>30</y>
+           <width>111</width>
+           <height>22</height>
+          </rect>
+         </property>
+         <item>
+          <property name="text">
+           <string>测试服务器</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>生产服务器</string>
+          </property>
+         </item>
+         <item>
+          <property name="text">
+           <string>自定义服务器</string>
+          </property>
+         </item>
+        </widget>
+        <widget class="QPushButton" name="pushButton_set_subscribe">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="geometry">
+          <rect>
+           <x>750</x>
+           <y>70</y>
+           <width>93</width>
+           <height>28</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>订阅</string>
+         </property>
+        </widget>
+       </widget>
+       <widget class="QGroupBox" name="groupBox_set_1log">
+        <property name="geometry">
+         <rect>
+          <x>0</x>
+          <y>120</y>
+          <width>851</width>
+          <height>631</height>
+         </rect>
+        </property>
+        <property name="title">
+         <string>日志设备设置</string>
+        </property>
+        <widget class="QPushButton" name="pushButton_set_send">
+         <property name="geometry">
+          <rect>
+           <x>692</x>
+           <y>590</y>
+           <width>61</width>
+           <height>28</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>发送</string>
+         </property>
+        </widget>
+        <widget class="QCheckBox" name="checkBox_set_bind_imei">
+         <property name="geometry">
+          <rect>
+           <x>30</x>
+           <y>20</y>
+           <width>121</width>
+           <height>19</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>配置指令绑定IMEI</string>
+         </property>
+        </widget>
+        <widget class="QCheckBox" name="checkBox_set_default_cfg">
+         <property name="enabled">
+          <bool>true</bool>
+         </property>
+         <property name="geometry">
+          <rect>
+           <x>170</x>
+           <y>70</y>
+           <width>121</width>
+           <height>19</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>恢复默认参数</string>
+         </property>
+        </widget>
+        <widget class="QPushButton" name="pushButton_set_tx_clr">
+         <property name="geometry">
+          <rect>
+           <x>702</x>
+           <y>520</y>
+           <width>121</width>
+           <height>28</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>清空</string>
+         </property>
+        </widget>
+        <widget class="QCheckBox" name="checkBox_set_reboot">
+         <property name="geometry">
+          <rect>
+           <x>310</x>
+           <y>70</y>
+           <width>121</width>
+           <height>19</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>重启</string>
+         </property>
+        </widget>
+        <widget class="QTextEdit" name="textEdit_set_tx">
+         <property name="geometry">
+          <rect>
+           <x>30</x>
+           <y>516</y>
+           <width>651</width>
+           <height>111</height>
+          </rect>
+         </property>
+         <property name="html">
+          <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;PT_CMD={&amp;quot;get_fixed_info&amp;quot;: &amp;quot;true&amp;quot;}&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+         </property>
+        </widget>
+        <widget class="QGroupBox" name="groupBox_dev_set">
+         <property name="geometry">
+          <rect>
+           <x>30</x>
+           <y>130</y>
+           <width>411</width>
+           <height>311</height>
+          </rect>
+         </property>
+         <property name="title">
+          <string>设备参数</string>
+         </property>
+         <widget class="QGroupBox" name="groupBox_dev_cfg">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>20</y>
+            <width>391</width>
+            <height>80</height>
+           </rect>
+          </property>
+          <property name="title">
+           <string>dev_cfg</string>
+          </property>
+          <widget class="QLineEdit" name="lineEdit_dev_0type">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <property name="geometry">
+            <rect>
+             <x>170</x>
+             <y>10</y>
+             <width>211</width>
+             <height>21</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>9002</string>
+           </property>
+          </widget>
+          <widget class="QLabel" name="label_9">
+           <property name="geometry">
+            <rect>
+             <x>90</x>
+             <y>10</y>
+             <width>72</width>
+             <height>15</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>dev_type</string>
+           </property>
+          </widget>
+          <widget class="QLineEdit" name="lineEdit_set_dev_sn">
+           <property name="geometry">
+            <rect>
+             <x>170</x>
+             <y>30</y>
+             <width>211</width>
+             <height>21</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>5</string>
+           </property>
+          </widget>
+          <widget class="QLabel" name="label_10">
+           <property name="geometry">
+            <rect>
+             <x>90</x>
+             <y>30</y>
+             <width>72</width>
+             <height>15</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>dev_sn</string>
+           </property>
+          </widget>
+          <widget class="QLineEdit" name="lineEdit_set_dev_pd">
+           <property name="geometry">
+            <rect>
+             <x>170</x>
+             <y>50</y>
+             <width>211</width>
+             <height>21</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>20240808</string>
+           </property>
+          </widget>
+          <widget class="QLabel" name="label_11">
+           <property name="geometry">
+            <rect>
+             <x>90</x>
+             <y>50</y>
+             <width>72</width>
+             <height>15</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>dev_pd</string>
+           </property>
+          </widget>
+          <widget class="QCheckBox" name="checkBox_set_dev_cfg">
+           <property name="geometry">
+            <rect>
+             <x>20</x>
+             <y>20</y>
+             <width>21</width>
+             <height>19</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string/>
+           </property>
+          </widget>
+         </widget>
+         <widget class="QGroupBox" name="groupBox_reg_cfg">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>100</y>
+            <width>391</width>
+            <height>51</height>
+           </rect>
+          </property>
+          <property name="title">
+           <string>reg_cfg</string>
+          </property>
+          <widget class="QLabel" name="label_12">
+           <property name="geometry">
+            <rect>
+             <x>90</x>
+             <y>10</y>
+             <width>72</width>
+             <height>15</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>name</string>
+           </property>
+          </widget>
+          <widget class="QLabel" name="label_13">
+           <property name="geometry">
+            <rect>
+             <x>90</x>
+             <y>30</y>
+             <width>72</width>
+             <height>15</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>tel</string>
+           </property>
+          </widget>
+          <widget class="QLineEdit" name="lineEdit_set_reg_name">
+           <property name="geometry">
+            <rect>
+             <x>170</x>
+             <y>10</y>
+             <width>211</width>
+             <height>21</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>张三</string>
+           </property>
+          </widget>
+          <widget class="QLineEdit" name="lineEdit_set_reg_tel">
+           <property name="geometry">
+            <rect>
+             <x>170</x>
+             <y>30</y>
+             <width>211</width>
+             <height>21</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>13888888888</string>
+           </property>
+          </widget>
+          <widget class="QCheckBox" name="checkBox_set_reg_cfg">
+           <property name="geometry">
+            <rect>
+             <x>20</x>
+             <y>20</y>
+             <width>21</width>
+             <height>19</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string/>
+           </property>
+          </widget>
+         </widget>
+         <widget class="QGroupBox" name="groupBox_svr_cfg">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>170</y>
+            <width>391</width>
+            <height>111</height>
+           </rect>
+          </property>
+          <property name="title">
+           <string>svr_cfg</string>
+          </property>
+          <widget class="QLineEdit" name="lineEdit_set_svr_usr_name">
+           <property name="geometry">
+            <rect>
+             <x>170</x>
+             <y>60</y>
+             <width>211</width>
+             <height>21</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>usr</string>
+           </property>
+          </widget>
+          <widget class="QLabel" name="label_14">
+           <property name="geometry">
+            <rect>
+             <x>60</x>
+             <y>20</y>
+             <width>111</width>
+             <height>16</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>svr_ip</string>
+           </property>
+          </widget>
+          <widget class="QLabel" name="label_15">
+           <property name="geometry">
+            <rect>
+             <x>60</x>
+             <y>40</y>
+             <width>111</width>
+             <height>16</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>svr_port</string>
+           </property>
+          </widget>
+          <widget class="QLineEdit" name="lineEdit_set_svr_cfg">
+           <property name="geometry">
+            <rect>
+             <x>170</x>
+             <y>20</y>
+             <width>211</width>
+             <height>21</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>test-mqtt.cpyypt.cn</string>
+           </property>
+          </widget>
+          <widget class="QLabel" name="label_16">
+           <property name="geometry">
+            <rect>
+             <x>60</x>
+             <y>60</y>
+             <width>111</width>
+             <height>16</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>svr_usr_name</string>
+           </property>
+          </widget>
+          <widget class="QLineEdit" name="lineEdit_set_svr_port">
+           <property name="geometry">
+            <rect>
+             <x>170</x>
+             <y>40</y>
+             <width>211</width>
+             <height>21</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>9000</string>
+           </property>
+          </widget>
+          <widget class="QLineEdit" name="lineEdit_set_svr_usr_pwd">
+           <property name="geometry">
+            <rect>
+             <x>170</x>
+             <y>80</y>
+             <width>211</width>
+             <height>21</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>password</string>
+           </property>
+          </widget>
+          <widget class="QLabel" name="label_17">
+           <property name="geometry">
+            <rect>
+             <x>60</x>
+             <y>80</y>
+             <width>111</width>
+             <height>16</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string>svr_usr_pwd</string>
+           </property>
+          </widget>
+          <widget class="QCheckBox" name="checkBox_set_svr_cfg">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <property name="geometry">
+            <rect>
+             <x>20</x>
+             <y>20</y>
+             <width>21</width>
+             <height>19</height>
+            </rect>
+           </property>
+           <property name="text">
+            <string/>
+           </property>
+          </widget>
+         </widget>
+        </widget>
+        <widget class="QGroupBox" name="groupBox_io_cfg">
+         <property name="geometry">
+          <rect>
+           <x>450</x>
+           <y>20</y>
+           <width>391</width>
+           <height>421</height>
+          </rect>
+         </property>
+         <property name="title">
+          <string>接口参数</string>
+         </property>
+         <widget class="QComboBox" name="comboBox_set_io_select">
+          <property name="geometry">
+           <rect>
+            <x>90</x>
+            <y>70</y>
+            <width>87</width>
+            <height>22</height>
+           </rect>
+          </property>
+          <item>
+           <property name="text">
+            <string>TTL</string>
+           </property>
+          </item>
+          <item>
+           <property name="text">
+            <string>RS232</string>
+           </property>
+          </item>
+          <item>
+           <property name="text">
+            <string>RS485</string>
+           </property>
+          </item>
+         </widget>
+         <widget class="QLineEdit" name="lineEdit_set_stop_bits">
+          <property name="geometry">
+           <rect>
+            <x>90</x>
+            <y>200</y>
+            <width>131</width>
+            <height>21</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>1</string>
+          </property>
+         </widget>
+         <widget class="QLabel" name="label_18">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>140</y>
+            <width>72</width>
+            <height>15</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>baud_rate</string>
+          </property>
+         </widget>
+         <widget class="QLabel" name="label_19">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>170</y>
+            <width>72</width>
+            <height>15</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>data_bits</string>
+          </property>
+         </widget>
+         <widget class="QLineEdit" name="lineEdit_set_baud_rate">
+          <property name="geometry">
+           <rect>
+            <x>90</x>
+            <y>140</y>
+            <width>131</width>
+            <height>21</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>115200</string>
+          </property>
+         </widget>
+         <widget class="QLabel" name="label_20">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>200</y>
+            <width>72</width>
+            <height>15</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>stop_bits</string>
+          </property>
+         </widget>
+         <widget class="QLineEdit" name="lineEdit_set_data_bits">
+          <property name="geometry">
+           <rect>
+            <x>90</x>
+            <y>170</y>
+            <width>131</width>
+            <height>21</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>8</string>
+          </property>
+         </widget>
+         <widget class="QLineEdit" name="lineEdit_set_buff_size">
+          <property name="geometry">
+           <rect>
+            <x>90</x>
+            <y>290</y>
+            <width>131</width>
+            <height>21</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>1024</string>
+          </property>
+         </widget>
+         <widget class="QLabel" name="label_21">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>260</y>
+            <width>72</width>
+            <height>15</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>bit_order</string>
+          </property>
+         </widget>
+         <widget class="QLineEdit" name="lineEdit_set_bit_order">
+          <property name="geometry">
+           <rect>
+            <x>90</x>
+            <y>260</y>
+            <width>131</width>
+            <height>21</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>5</string>
+          </property>
+         </widget>
+         <widget class="QLineEdit" name="lineEdit_set_partiy">
+          <property name="geometry">
+           <rect>
+            <x>90</x>
+            <y>230</y>
+            <width>131</width>
+            <height>21</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>0</string>
+          </property>
+         </widget>
+         <widget class="QLabel" name="label_22">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>230</y>
+            <width>72</width>
+            <height>15</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>partiy</string>
+          </property>
+         </widget>
+         <widget class="QLabel" name="label_23">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>290</y>
+            <width>72</width>
+            <height>15</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>buff_size</string>
+          </property>
+         </widget>
+         <widget class="QLineEdit" name="lineEdit_set_rs485_gpio">
+          <property name="geometry">
+           <rect>
+            <x>90</x>
+            <y>320</y>
+            <width>131</width>
+            <height>21</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>2</string>
+          </property>
+         </widget>
+         <widget class="QLabel" name="label_24">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>320</y>
+            <width>72</width>
+            <height>15</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>rs485_gpio</string>
+          </property>
+         </widget>
+         <widget class="QLineEdit" name="lineEdit_set_rs485_delay">
+          <property name="geometry">
+           <rect>
+            <x>90</x>
+            <y>380</y>
+            <width>131</width>
+            <height>21</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>2000</string>
+          </property>
+         </widget>
+         <widget class="QLabel" name="label_25">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>380</y>
+            <width>72</width>
+            <height>15</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>rs485_delay</string>
+          </property>
+         </widget>
+         <widget class="QLabel" name="label_26">
+          <property name="geometry">
+           <rect>
+            <x>10</x>
+            <y>350</y>
+            <width>72</width>
+            <height>15</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>rs485_level</string>
+          </property>
+         </widget>
+         <widget class="QLineEdit" name="lineEdit_set_rs485_level">
+          <property name="geometry">
+           <rect>
+            <x>90</x>
+            <y>350</y>
+            <width>131</width>
+            <height>21</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>0</string>
+          </property>
+         </widget>
+         <widget class="QCheckBox" name="checkBox_set_io_cfg">
+          <property name="geometry">
+           <rect>
+            <x>120</x>
+            <y>20</y>
+            <width>151</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>配置接口参数</string>
+          </property>
+         </widget>
+         <widget class="QCheckBox" name="checkBox_set_io_up_enable">
+          <property name="geometry">
+           <rect>
+            <x>280</x>
+            <y>140</y>
+            <width>101</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>使能上行</string>
+          </property>
+         </widget>
+         <widget class="QCheckBox" name="checkBox_set_io_down_enable">
+          <property name="geometry">
+           <rect>
+            <x>280</x>
+            <y>290</y>
+            <width>101</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>使能下行</string>
+          </property>
+         </widget>
+         <widget class="QCheckBox" name="checkBox_set_io_parameter">
+          <property name="geometry">
+           <rect>
+            <x>60</x>
+            <y>110</y>
+            <width>131</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>参数</string>
+          </property>
+         </widget>
+         <widget class="Line" name="line">
+          <property name="geometry">
+           <rect>
+            <x>30</x>
+            <y>100</y>
+            <width>331</width>
+            <height>16</height>
+           </rect>
+          </property>
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+         </widget>
+         <widget class="Line" name="line_2">
+          <property name="geometry">
+           <rect>
+            <x>250</x>
+            <y>130</y>
+            <width>20</width>
+            <height>271</height>
+           </rect>
+          </property>
+          <property name="orientation">
+           <enum>Qt::Vertical</enum>
+          </property>
+         </widget>
+         <widget class="QLabel" name="label_2">
+          <property name="geometry">
+           <rect>
+            <x>190</x>
+            <y>70</y>
+            <width>121</width>
+            <height>16</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>选择接口类型</string>
+          </property>
+         </widget>
+         <widget class="Line" name="line_3">
+          <property name="geometry">
+           <rect>
+            <x>30</x>
+            <y>50</y>
+            <width>331</width>
+            <height>16</height>
+           </rect>
+          </property>
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+         </widget>
+         <widget class="QCheckBox" name="checkBox_set_io_up_disable">
+          <property name="geometry">
+           <rect>
+            <x>280</x>
+            <y>170</y>
+            <width>101</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>禁止上行</string>
+          </property>
+         </widget>
+         <widget class="QCheckBox" name="checkBox_set_io_down_disable">
+          <property name="geometry">
+           <rect>
+            <x>280</x>
+            <y>320</y>
+            <width>101</width>
+            <height>19</height>
+           </rect>
+          </property>
+          <property name="text">
+           <string>禁止下行</string>
+          </property>
+         </widget>
+        </widget>
+        <widget class="QLineEdit" name="lineEdit_0imei">
+         <property name="geometry">
+          <rect>
+           <x>172</x>
+           <y>20</y>
+           <width>161</width>
+           <height>21</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>869861069999337</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="label_4">
+         <property name="geometry">
+          <rect>
+           <x>40</x>
+           <y>470</y>
+           <width>72</width>
+           <height>15</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>pub_topic</string>
+         </property>
+        </widget>
+        <widget class="QLineEdit" name="lineEdit_5pub_topic">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="geometry">
+          <rect>
+           <x>130</x>
+           <y>470</y>
+           <width>461</width>
+           <height>21</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>cpyypt/down/9002/0000000001</string>
+         </property>
+        </widget>
+        <widget class="QLineEdit" name="lineEdit_tx_sn">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="geometry">
+          <rect>
+           <x>620</x>
+           <y>470</y>
+           <width>113</width>
+           <height>21</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>1</string>
+         </property>
+        </widget>
+        <widget class="QPushButton" name="pushButton_set_create">
+         <property name="geometry">
+          <rect>
+           <x>692</x>
+           <y>560</y>
+           <width>61</width>
+           <height>28</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>生成</string>
+         </property>
+        </widget>
+        <widget class="QCheckBox" name="checkBox_set_get_fixed_info">
+         <property name="geometry">
+          <rect>
+           <x>30</x>
+           <y>70</y>
+           <width>121</width>
+           <height>19</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>获取基础信息</string>
+         </property>
+        </widget>
+        <widget class="QCheckBox" name="checkBox_set_default_tx_sn">
+         <property name="geometry">
+          <rect>
+           <x>750</x>
+           <y>470</y>
+           <width>81</width>
+           <height>19</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>默认SN</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+        <widget class="QPushButton" name="pushButton_set_create_send">
+         <property name="geometry">
+          <rect>
+           <x>760</x>
+           <y>560</y>
+           <width>71</width>
+           <height>61</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>生成
+发送</string>
+         </property>
+        </widget>
+       </widget>
+      </widget>
+      <widget class="QWidget" name="tab_burn">
+       <attribute name="title">
+        <string>在线刷机</string>
+       </attribute>
+       <widget class="QLabel" name="label_27">
+        <property name="geometry">
+         <rect>
+          <x>90</x>
+          <y>60</y>
+          <width>72</width>
+          <height>15</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>设备类型</string>
+        </property>
+       </widget>
+       <widget class="QComboBox" name="comboBox_2">
+        <property name="geometry">
+         <rect>
+          <x>170</x>
+          <y>60</y>
+          <width>87</width>
+          <height>22</height>
+         </rect>
+        </property>
+        <item>
+         <property name="text">
+          <string>0101</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>0102</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>0201</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>0202</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>0301</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>0302</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>0103</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>0104</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>0902</string>
+         </property>
+        </item>
+        <item>
+         <property name="text">
+          <string>0904</string>
+         </property>
+        </item>
+       </widget>
+       <widget class="QLabel" name="label_28">
+        <property name="geometry">
+         <rect>
+          <x>270</x>
+          <y>60</y>
+          <width>91</width>
+          <height>16</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>加油机路由器</string>
+        </property>
+       </widget>
+       <widget class="QLabel" name="label_29">
+        <property name="geometry">
+         <rect>
+          <x>640</x>
+          <y>60</y>
+          <width>111</width>
+          <height>20</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>目标固件版本</string>
+        </property>
+       </widget>
+       <widget class="QLineEdit" name="lineEdit_29">
+        <property name="geometry">
+         <rect>
+          <x>770</x>
+          <y>60</y>
+          <width>113</width>
+          <height>21</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>02023107</string>
+        </property>
+       </widget>
+       <widget class="QPushButton" name="pushButton_4">
+        <property name="geometry">
+         <rect>
+          <x>90</x>
+          <y>120</y>
+          <width>121</width>
+          <height>81</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>查询
+本地存储的固件
+剩余空间</string>
+        </property>
+       </widget>
+       <widget class="QTextEdit" name="textEdit_2">
+        <property name="geometry">
+         <rect>
+          <x>230</x>
+          <y>120</y>
+          <width>361</width>
+          <height>87</height>
+         </rect>
+        </property>
+        <property name="html">
+         <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;本地存储的固件,&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;剩余存储空间		260KB&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;D0Z1_02023105.bin		65KB&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;D0Z1_02023107.bin		67KB&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
+       </widget>
+       <widget class="QPushButton" name="pushButton_5">
+        <property name="geometry">
+         <rect>
+          <x>90</x>
+          <y>230</y>
+          <width>93</width>
+          <height>41</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>将指定固件
+下载到本地</string>
+        </property>
+       </widget>
+       <widget class="QLabel" name="label_30">
+        <property name="geometry">
+         <rect>
+          <x>221</x>
+          <y>240</y>
+          <width>41</width>
+          <height>31</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>URL</string>
+        </property>
+       </widget>
+       <widget class="QTextEdit" name="textEdit_3">
+        <property name="geometry">
+         <rect>
+          <x>270</x>
+          <y>230</y>
+          <width>621</width>
+          <height>41</height>
+         </rect>
+        </property>
+        <property name="html">
+         <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;https://oil-prod-public.oss-cn-beijing.aliyuncs.com/upgrade/apk/20240325/D0Z1_02023107.bin&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
+       </widget>
+       <widget class="QPushButton" name="pushButton_6">
+        <property name="geometry">
+         <rect>
+          <x>90</x>
+          <y>320</y>
+          <width>93</width>
+          <height>28</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>按页擦除</string>
+        </property>
+       </widget>
+       <widget class="QLineEdit" name="lineEdit_30">
+        <property name="geometry">
+         <rect>
+          <x>220</x>
+          <y>320</y>
+          <width>113</width>
+          <height>21</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>页号</string>
+        </property>
+       </widget>
+       <widget class="QPushButton" name="pushButton_7">
+        <property name="geometry">
+         <rect>
+          <x>540</x>
+          <y>320</y>
+          <width>93</width>
+          <height>28</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>整片擦除</string>
+        </property>
+       </widget>
+       <widget class="QLineEdit" name="lineEdit_31">
+        <property name="geometry">
+         <rect>
+          <x>650</x>
+          <y>320</y>
+          <width>113</width>
+          <height>21</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>...</string>
+        </property>
+       </widget>
+       <widget class="QPushButton" name="pushButton_8">
+        <property name="geometry">
+         <rect>
+          <x>90</x>
+          <y>370</y>
+          <width>93</width>
+          <height>28</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>写固件包</string>
+        </property>
+       </widget>
+       <widget class="QLineEdit" name="lineEdit_32">
+        <property name="geometry">
+         <rect>
+          <x>270</x>
+          <y>370</y>
+          <width>361</width>
+          <height>21</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>D0Z1_02023105.bin</string>
+        </property>
+       </widget>
+       <widget class="QLabel" name="label_31">
+        <property name="geometry">
+         <rect>
+          <x>221</x>
+          <y>370</y>
+          <width>61</width>
+          <height>21</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>固件名</string>
+        </property>
+       </widget>
+       <widget class="QLabel" name="label_32">
+        <property name="geometry">
+         <rect>
+          <x>711</x>
+          <y>370</y>
+          <width>51</width>
+          <height>21</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>首地址</string>
+        </property>
+       </widget>
+       <widget class="QPushButton" name="pushButton_9">
+        <property name="geometry">
+         <rect>
+          <x>90</x>
+          <y>430</y>
+          <width>671</width>
+          <height>28</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>校验固件</string>
+        </property>
+       </widget>
+       <widget class="QLineEdit" name="lineEdit_33">
+        <property name="geometry">
+         <rect>
+          <x>770</x>
+          <y>370</y>
+          <width>113</width>
+          <height>21</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>0x80000000</string>
+        </property>
+       </widget>
+       <widget class="QPushButton" name="pushButton_10">
+        <property name="geometry">
+         <rect>
+          <x>600</x>
+          <y>120</y>
+          <width>131</width>
+          <height>81</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>删除
+指定的固件
+以便释放存储空间</string>
+        </property>
+       </widget>
+       <widget class="QLineEdit" name="lineEdit_34">
+        <property name="geometry">
+         <rect>
+          <x>740</x>
+          <y>130</y>
+          <width>151</width>
+          <height>61</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>D0Z1_02023105.bin</string>
+        </property>
+       </widget>
+       <widget class="QPushButton" name="pushButton_11">
+        <property name="geometry">
+         <rect>
+          <x>90</x>
+          <y>280</y>
+          <width>93</width>
+          <height>28</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>连接引导模式</string>
+        </property>
+       </widget>
+       <widget class="QLabel" name="label_33">
+        <property name="geometry">
+         <rect>
+          <x>220</x>
+          <y>280</y>
+          <width>191</width>
+          <height>31</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>未连接/已超时/已连接</string>
+        </property>
+       </widget>
+       <widget class="QPushButton" name="pushButton_12">
+        <property name="geometry">
+         <rect>
+          <x>90</x>
+          <y>470</y>
+          <width>671</width>
+          <height>28</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>一键烧写</string>
+        </property>
+       </widget>
+       <widget class="QPushButton" name="pushButton_13">
+        <property name="geometry">
+         <rect>
+          <x>800</x>
+          <y>420</y>
+          <width>93</width>
+          <height>71</height>
+         </rect>
+        </property>
+        <property name="text">
+         <string>清除日志</string>
+        </property>
+       </widget>
+       <widget class="QTextEdit" name="textEdit_4">
+        <property name="geometry">
+         <rect>
+          <x>90</x>
+          <y>510</y>
+          <width>801</width>
+          <height>221</height>
+         </rect>
+        </property>
+        <property name="html">
+         <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;操作日志...&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
+       </widget>
+      </widget>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menubar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>1246</width>
+     <height>26</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources>
+  <include location="rsc.qrc"/>
+ </resources>
+ <connections/>
+</ui>