소스 검색

老版本

rambo 4 달 전
부모
커밋
6d4e3e5877
3개의 변경된 파일82개의 추가작업 그리고 16개의 파일을 삭제
  1. 20 0
      python/mcu/DeviceControl.py
  2. 26 5
      python/mcu/ProgramItem.py
  3. 36 11
      python/sockets/message_handler.py

+ 20 - 0
python/mcu/DeviceControl.py

@@ -1625,6 +1625,26 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
                 )
             self.msg_type = "mcu"
 
+    async def only_take_photo(self, goods_art_no, image_index, record_id):
+        await asyncio.sleep(0.1)
+        print("only_take_photo=====>",goods_art_no, image_index, record_id)
+        if goods_art_no == "":
+            print("only_take_photo 数据查询异常")
+            return
+        # 关闭led
+        self.controlDevice("laser_position", 0)
+        program_item = ProgramItem(
+            websocket_manager=self.websocket_manager,
+            action_data={},
+            mcu=self,
+            goods_art_no=goods_art_no,
+            image_index=image_index,
+            record_id=record_id,
+        )
+        program_item.digicam_take_picture()
+        # 打开led
+        self.controlDevice("laser_position", 1)
+
 
 async def checkMcuConnection(device_ctrl: DeviceControl):
     if device_ctrl.is_running == True:

+ 26 - 5
python/mcu/ProgramItem.py

@@ -7,11 +7,20 @@ import time
 from .capture.module_digicam import DigiCam
 from .capture.module_watch_dog import FileEventHandler
 
+
 class ProgramItem(BaseClass):
     # program_sign = Signal(dict)
     # program_refresh_photo_list_sign = Signal()
 
-    def __init__(self,websocket_manager, action_data:any, mcu, goods_art_no:str=None,image_index:int=-1,record_id:int=-1):
+    def __init__(
+        self,
+        websocket_manager,
+        action_data: any,
+        mcu,
+        goods_art_no: str = None,
+        image_index: int = -1,
+        record_id: int = -1,
+    ):
         super().__init__(BaseClass)
         # 1 表示等待中,2表示没有等待
         self.wait_state = 2
@@ -94,7 +103,7 @@ class ProgramItem(BaseClass):
         }
         if self.is_wait:
             msg = "{}--等待".format(self.action_name)
-            self.sendSocketMessage(msg=msg,device_status=0)
+            self.sendSocketMessage(msg=msg, device_status=0)
         else:
             msg = "{}".format(self.action_name)
             self.sendSocketMessage(msg=msg, device_status=2)
@@ -138,12 +147,12 @@ class ProgramItem(BaseClass):
                 # 外部终止,停止运行
                 return False
             cr_time = time.time()
-            print(cr_time - _s, cr_time,_s)
+            print(cr_time - _s, cr_time, _s)
             if cr_time - _s > 8:
                 self.error_info_text = "MCU检测运动未停止,自动退出"
                 self.set_state(state_value=99)  # 标记异常
                 print("MCU检测运动未停止,自动退出")
-                self.sendSocketMessage(msg=self.error_info_text,device_status=-1)
+                self.sendSocketMessage(msg=self.error_info_text, device_status=-1)
                 return False
                 # return True
             # 存在时间间隙,导致误认为所有设备已完成运动
@@ -219,7 +228,11 @@ class ProgramItem(BaseClass):
             if self.mode_type != "其他配置" and self.check_mcu_move_is_stop() is False:
                 # MCU运动是否有停止检查,设定超时时间
                 return
-            print("{} 检查停止时间1:{}".format(self.action_name, time.time() - start_time))
+            print(
+                "{} 检查停止时间1:{}".format(
+                    self.action_name, time.time() - start_time
+                )
+            )
             if self.is_led:
                 self.mcu.to_deal_device(device_name="laser_position", value=1)
             else:
@@ -281,6 +294,14 @@ class ProgramItem(BaseClass):
             time.sleep(self.after_delay_time)
         return True
 
+    def digicam_take_picture(self):
+        self.mcu.to_deal_device(device_name="buzzer", times=1)
+        # 用于临时拍照计数
+        is_af = True
+        self.capture_one.photograph(is_af=is_af)
+        self.last_photograph_time = time.time()  # 记录最近一次拍照时间
+        print("仅拍照执行完成")
+
     def rephotograph_one_pic(self, *args):
         """
         1、获取最近一张照片

+ 36 - 11
python/sockets/message_handler.py

@@ -6,6 +6,7 @@ from mcu.BlueToothMode import BlueToothMode
 from databases import DeviceConfig, SqlQuery, CRUD, PhotoRecord, SysConfigs
 from mcu.capture.module_digicam import DigiCam
 
+
 # socket消息发送逻辑处理方法
 async def handlerSend(
     manager: ConnectionManager, receiveData: str, websocket: WebSocket
@@ -30,7 +31,7 @@ async def handlerSend(
             pass
         case "forward_message":
             data = receiveData.get("data")
-            dictMsg = {"code":code,"msg":msg,"data":data}
+            dictMsg = {"code": code, "msg": msg, "data": data}
             await manager.broadcast(dictMsg)
         case "connect_mcu":
             device_ctrl = DeviceControl(websocket_manager=manager)
@@ -48,7 +49,7 @@ async def handlerSend(
         case "init_mcu":
             device_ctrl = DeviceControl(websocket_manager=manager)
             # 是否强制初始化
-            is_force_init = data.get("value",False)
+            is_force_init = data.get("value", False)
             loop.create_task(device_ctrl.initDevice(is_force_init), name="init_mcu")
         case "control_mcu":
             device_name = data.get("device_name")
@@ -56,9 +57,7 @@ async def handlerSend(
             if (device_name == "" or device_name == None) or (
                 value == "" or value == None
             ):
-                data = manager.jsonMessage(
-                    code=1, msg="参数错误", msg_type="mcu"
-                )
+                data = manager.jsonMessage(code=1, msg="参数错误", msg_type="mcu")
                 await manager.send_personal_message(data, websocket)
                 return
             device_ctrl = DeviceControl(websocket_manager=manager)
@@ -74,7 +73,7 @@ async def handlerSend(
             msg_type = "run_mcu"
             action_info = data.get("action", "执行左脚程序")
             goods_art_no = data.get("goods_art_no", None)
-            if goods_art_no == None or goods_art_no =="":
+            if goods_art_no == None or goods_art_no == "":
                 # 判断货号是否存在
                 data = manager.jsonMessage(
                     code=1, msg="goods_art_no不能为空", msg_type=msg_type
@@ -92,7 +91,9 @@ async def handlerSend(
                 action_flag = "right"
             tab_id = action_configs_json.get(action_flag)
             photoRecord = CRUD(PhotoRecord)
-            goods_art_record = photoRecord.read(session,conditions={"goods_art_no": goods_art_no})
+            goods_art_record = photoRecord.read(
+                session, conditions={"goods_art_no": goods_art_no}
+            )
             if goods_art_record != None:
                 data = manager.jsonMessage(
                     code=1,
@@ -130,7 +131,7 @@ async def handlerSend(
                 blue_tooth.remote_control_v2.handlerTakePhoto(),
                 name="run_mcu_config",
             )
-        case "re_take_picture":#重拍
+        case "re_take_picture":  # 重拍
             # try:
             #     # 判断拍照软件是否初始化
             #     digicam = DigiCam()
@@ -166,9 +167,7 @@ async def handlerSend(
             image_index = goods_art_record.image_index
             crud = CRUD(DeviceConfig)
             condtions = {"id": action_id}
-            device_action = crud.read(
-                session, conditions=condtions
-            )
+            device_action = crud.read(session, conditions=condtions)
             device_result = dict(device_action.__dict__)
             if device_action == None:
                 # 判断是否有可用配置
@@ -229,6 +228,32 @@ async def handlerSend(
                 device_ctrl.sendCommand(data.get("command", None)),
                 name="sendCommand",
             )
+        case "digicam_take_picture":
+            msg_type = "re_take_picture"
+            id = data.get("id", 0)
+            goods_art_no = data.get("goods_art_no", "")
+            session = SqlQuery()
+            photoRecord = CRUD(PhotoRecord)
+            goods_art_record = photoRecord.read(session, conditions={"id": id})
+            if goods_art_record == None:
+                data = manager.jsonMessage(
+                    code=1,
+                    msg=f"记录不存在,请核实后重新操作~",
+                    msg_type=msg_type,
+                )
+                await manager.send_personal_message(data, websocket)
+                return
+            reset_data = {"image_path": None}
+            photoRecord.update(session, id, **reset_data)
+            device_ctrl = DeviceControl(websocket_manager=manager)
+            loop.create_task(
+                device_ctrl.only_take_photo(
+                    goods_art_no=goods_art_no,
+                    image_index=goods_art_record.image_index,
+                    record_id=id,
+                ),
+                name="sendCommand",
+            )
         case _:
             data = manager.jsonMessage(code=1, msg="未知消息")
             await manager.send_personal_message(data, websocket)