فهرست منبع

独立执行命令

rambo 8 ماه پیش
والد
کامیت
8f402fec15
5فایلهای تغییر یافته به همراه132 افزوده شده و 4 حذف شده
  1. 2 2
      python/config.ini
  2. 56 0
      python/docs/socket命令.md
  3. 48 0
      python/mcu/DeviceControl.py
  4. 2 2
      python/mcu/ProgramItem.py
  5. 24 0
      python/sockets/message_handler.py

+ 2 - 2
python/config.ini

@@ -4,12 +4,12 @@ app_name=智慧拍-后端应用
 # 应用版本号
 version=1.0.0
 # 应用host地址
-host=127.0.0.1
+host=10.56.42.51
 # 应用服务启动名称
 app_run=api:app
 # 端口号
 port=7074
-debug=false
+debug=true
 env=dev
 # 线程数
 works=1

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

@@ -209,4 +209,60 @@ _(该命令用于单独自定义配置中某一项的单独调整测试,不进
     "msg_type": "photo_take"
 }
 ```
+
+#### 修改配置-独立操作MCU
+* data中参数释义:
+    * msg: 消息文本内容
+    * data :
+        * camera_height:相机高度
+        * after_delay:拍照后延迟
+        * camera_angle:相机角度
+        * led_switch:led开关;true:开;false:关
+        * number_focus:对焦次数;这里因为后端不控制拍照,所以无效
+        * id:固定0
+        * take_picture:固定false;这里因为后端不控制拍照,所以无效
+        * mode_type:模式类型;如:执行左脚程序
+        * turntable_position:转盘位置
+        * action_name:动作名称;如:侧视图
+        * turntable_angle:转盘角度
+        * shoe_upturn:是否翻转;true:翻转;false:不翻转
+        * action_index:固定1
+        * pre_delay:1;拍照后延迟;这里因为后端不控制拍照,所以无效
+* type:当该字段为run_mcu_single时,代表独立执行MCU设备
+##### 请求示例
+```python
+{
+    "data": {
+        "camera_height": 300,
+        "after_delay": 1,
+        "camera_angle": 20,
+        "led_switch": true,
+        "number_focus": 1,
+        "id": 0,
+        "take_picture": false,
+        "mode_type": "执行左脚程序",
+        "turntable_position": 200,
+        "action_name": "侧视图",
+        "turntable_angle": 300,
+        "shoe_upturn": false,
+        "action_index": 1,
+        "pre_delay": 1
+    },
+    "type": "run_mcu_single"
+}
+```
+##### 响应示例
+###### 当 msg_type 为run_mcu_single时,代表独立执行MCU设备完成,前端将此命令作为完成依据
+```python
+{
+    "code": 0,
+    "msg": "执行完成",
+    "status": 2,
+    "data": null,
+    "msg_type": "run_mcu_single_finish"
+}
+```
+
+
+
 ##### 未完待续.....

+ 48 - 0
python/mcu/DeviceControl.py

@@ -1239,6 +1239,54 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
             )
             self.msg_type = "mcu"
 
+    async def run_mcu_config_single(self, config_info, goods_art_no):
+        '''独立拍照  仅作测试用'''
+        if self.checkDevice() == False:
+            return
+        if config_info:
+            self.action_state = 1
+            self.msg_type = "mcu"
+            await asyncio.sleep(0.1)
+            image_index = -1
+            program_item = ProgramItem(
+                    websocket_manager=self.websocket_manager,
+                    action_data=config_info,
+                    mcu=self,
+                    goods_art_no=goods_art_no,
+                    image_index=image_index,
+                )
+            print("self.action_state===>", self.action_state)
+            if self.action_state != 1:
+                # 异常终止
+                print("action异常终止")
+                return
+            self.msg_type = "photo_take"
+            if not program_item.run(1):
+                self.sendSocketMessage(
+                        code=1,
+                        msg="{} 执行失败~".format(program_item.action_name),
+                        device_status=0,
+                    )
+                self.to_deal_device(device_name="buzzer", times=3)
+                return
+            else:
+                # self.show_info("{}执行完成~".format(action.action_name))
+                self.sendSocketMessage(
+                        code=0,
+                        msg="{} 执行完成~".format(program_item.action_name),
+                        data={"goods_art_no": goods_art_no},
+                        device_status=2,
+                    )
+            self.msg_type = "mcu"
+        self.action_state = 2
+        self.msg_type = "run_mcu_single_finish"
+        self.sendSocketMessage(
+                code=0,
+                msg=f"执行完成",
+                device_status=2,
+            )
+        self.msg_type = "mcu"
+
 
 async def checkMcuConnection(device_ctrl: DeviceControl):
     if device_ctrl.is_running == True:

+ 2 - 2
python/mcu/ProgramItem.py

@@ -205,8 +205,8 @@ class ProgramItem(BaseClass):
                 time.sleep(0.1)
 
     def do_run(self, *args):
-        if not self.goods_art_no:  # and self.action_name != "初始化位置"
-            return False
+        # if not self.goods_art_no:  # and self.action_name != "初始化位置"
+        #     return False
         start_time = time.time()
         # ============连接MCU 处理步进电机与舵机等
         if settings.IS_MCU:

+ 24 - 0
python/sockets/message_handler.py

@@ -115,6 +115,30 @@ async def handlerSend(
                 device_ctrl.run_mcu_config(action_list, goods_art_no, action_info),
                 name="run_mcu_config",
             )
+        case "run_mcu_single":
+            msg_type = "mcu"
+            try:
+                # 判断拍照软件是否初始化
+                digicam = DigiCam()
+                camera_is_connect = digicam.checkCameraConnect()
+                if camera_is_connect is not True:
+                    data = manager.jsonMessage(
+                        code=1, msg="相机未连接,请检查", msg_type=msg_type
+                    )
+                    await manager.send_personal_message(data, websocket)
+                    return
+                digicam.getCaptureFolderPath()
+            except:
+                data = manager.jsonMessage(
+                    code=1, msg="digicam未初始化,请检查", msg_type=msg_type
+                )
+                await manager.send_personal_message(data, websocket)
+                return
+            device_ctrl = DeviceControl(websocket_manager=manager)
+            loop.create_task(
+                device_ctrl.run_mcu_config_single(data, None),
+                name="run_mcu_single",
+            )
         case "handler_take_picture":
             blue_tooth = BlueToothMode(websocket_manager=manager)
             loop.create_task(