浏览代码

```
feat(mcu): 添加获取设备状态命令功能

新增get_mcu_info命令类型,用于获取MCU设备的详细运行状态信息,
包括相机高度、相机角度、转盘状态、翻板状态等设备状态数据。

docs(socket): 更新socket命令文档添加设备状态查询说明

完善socket命令文档,添加get_mcu_info命令的请求格式、响应示例
和各状态字段说明,便于开发者查阅和使用。

refactor(DeviceControl): 优化MCU设备控制类日志输出

移除调试用的print语句,统一使用logger记录设备初始化和异常
数据信息,并添加设备状态查询相关消息类型的设置。
```

rambo 1 周之前
父节点
当前提交
16ab6e4ee1
共有 3 个文件被更改,包括 54 次插入3 次删除
  1. 35 0
      python/docs/socket命令.md
  2. 10 3
      python/mcu/DeviceControl.py
  3. 9 0
      python/sockets/message_handler.py

+ 35 - 0
python/docs/socket命令.md

@@ -1108,4 +1108,39 @@ _(该命令用于单独自定义配置中某一项的单独调整测试,不进
     "msg_type": "segment_progress"
 }
 ```
+##### 发送获取设备状态命令
+* data:null
+* msg_type:固定为[get_mcu_info]
+```
+{
+    "type": "get_mcu_info",
+    "data": null
+}
+```
+###### 响应示例-成功
+* state_camera_motor:相机高度状态
+* state_camera_steering:相机角度状态
+* state_turntable_steering:转盘状态
+* state_move_turntable_steering:转盘前后移动状态
+* state_overturn_steering:翻板状态
+```
+{
+    "code": 0,
+    "msg": "获取mcu设备运行状态信息",
+    "status": 2,
+    "data": {
+        "_type": "show_mcu_info",
+        "plugins_mode": "mcu",
+        "data": "激光状态;1,相机高度状态:2,相机角度状态:2,转盘状态:2,转盘前后移动状态:2,翻板状态:2,flag:52",
+        "data_state": {
+            "state_camera_motor": 2,
+            "state_camera_steering": 2,
+            "state_turntable_steering": 2,
+            "state_overturn_steering": 2,
+            "state_move_turntable_steering": 2
+        }
+    },
+    "msg_type": "get_mcu_info"
+}
+```
 ##### 未完待续.....

+ 10 - 3
python/mcu/DeviceControl.py

@@ -422,7 +422,7 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
             if self.send_data_queue:
                 # self.sendSocketMessage(msg="正在发送命令", device_status=1)
                 data = self.send_data_queue.pop(0)
-                print("\033[1;32;40m 正在发送命令 \033[0m",data)
+                # print("\033[1;32;40m 正在发送命令 \033[0m",data)
                 self.serial_ins.write_cmd(data)
                 # self.sendSocketMessage(msg="命令发送完成", device_status=2)
             else:
@@ -456,9 +456,11 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
             data = receive_data[1:].decode()
             if "设备初始化完成" in data:
                 self.init_state = True
+                logger.info("设备初始化完成:%s", data)
                 self.sendSocketMessage(msg=data, device_status=2)
-            print("115  print_mcu_error_data:", data)
-            logger.info("115  print_mcu_error_data:%s", data)
+            else:
+                print("设备异常数据打印:", data)
+                logger.info("115  设备异常数据打印:%s", data)
         except BaseException as e:
             print("117 error {}".format(e))
             logger.info("117 error %s", e)
@@ -599,6 +601,7 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
         if not receive_data:
             return False
         command = receive_data[0]
+        print("get_basic_info_mcu",command)
         if command in self.deal_code_func_dict:
             self.deal_code_func_dict[command](receive_data)
 
@@ -898,7 +901,9 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
                     "state_overturn_steering": self.state_overturn_steering,
                 },
             }
+            self.msg_type = "get_mcu_info"
             self.sendSocketMessage(msg="获取mcu设备运行状态信息", data=message)
+            self.msg_type = "mcu"
             # print("转盘:{},时间:{}".format(self.state_turntable_steering, time.time()))
 
         if len(receive_data) == 8:
@@ -942,7 +947,9 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
             ):
                 self.init_state = True
                 self.sendSocketMessage(msg="设备初始化完成", device_status=2)
+            self.msg_type = "get_mcu_info"
             self.sendSocketMessage(msg="获取mcu设备运行状态信息", data=message)
+            self.msg_type = "mcu"
         # 检查是否成功初始化
         if self.is_just_init_time is False:
             if self.mcu_move_state == 2:

+ 9 - 0
python/sockets/message_handler.py

@@ -176,6 +176,15 @@ async def handlerSend(
             # 是否强制初始化
             is_force_init = False
             loop.create_task(device_ctrl.initDevice(is_force_init), name="init_mcu")
+        case "get_mcu_info":
+            device_ctrl = DeviceControl(
+                websocket_manager=manager, smart_shooter=smart_shooter
+            )
+            if not device_ctrl.is_running:
+                device_ctrl.sendSocketMessage(
+                    code=1, msg="mcu设备未连接,请先连接设备", device_status=0
+                )
+            device_ctrl.send_get_all_info_to_mcu()
         case "control_mcu":
             device_name = data.get("device_name")
             value = data.get("value")