Kaynağa Gözat

feat(camera): 添加相机控制软件自动启动功能

- 添加 isSoftwareStarted 标记跟踪相机控制软件启动状态
- 实现 digiCamControl 软件自动启动和初始化等待机制
- 添加 SmartShooter 软件自动启动支持
- 优化相机未连接时的错误处理和用户提示信息
- 改进软件启动后的相机状态重检机制
- 统一不同相机控制类型的错误消息显示逻辑
panqiuyao 2 gün önce
ebeveyn
işleme
7e5d9b1cda
1 değiştirilmiş dosya ile 58 ekleme ve 26 silme
  1. 58 26
      electron/controller/camera.js

+ 58 - 26
electron/controller/camera.js

@@ -9,6 +9,7 @@ const {
 const { readConfigFile } = require('../utils/config');
 
 let  isOPen = true
+let isSoftwareStarted = false; // 标记相机控制软件是否已经启动
 class CameraController extends Controller {
   constructor(ctx) {
     super(ctx);
@@ -19,41 +20,75 @@ class CameraController extends Controller {
       console.log('==================');
       console.log(readConfigFile());
       if(readConfigFile().controlType === 'digiCamControl'){
-
         console.log('========1==========');
-        await getParams('iso').catch(e=>{
+
+        // 首先尝试获取相机参数
+        let res = await getParams('iso').catch(e=>{
+          console.log('getParams failed:', e);
           isOPen = false;
-        })
-        if(!isOPen){
-          await checkCameraControlCmdExists()
-          await  CMD('All_Minimize')
-          await closeCameraControlTips()
-          isOPen = true
-        }
-        const res = await getParams('iso')
-        if(res  === '未将对象引用设置到对象的实例。'){
-          return {
-            status:-1,
-            msg:"相机未连接,请链接相机。",
+          return null;
+        });
+
+        if(res === '未将对象引用设置到对象的实例。' || !res){
+          // 相机未连接,检查是否需要启动软件
+          if (!isSoftwareStarted) {
+            console.log('启动 digiCamControl 软件...');
+            await checkCameraControlCmdExists();
+            await CMD('All_Minimize');
+            await closeCameraControlTips();
+            isSoftwareStarted = true;
+            console.log('digiCamControl 软件启动完成,等待初始化...');
+            await new Promise(resolve => setTimeout(resolve, 5000)); // 等待软件初始化
+
+            // 软件启动后再次检查相机状态
+            res = await getParams('iso').catch(e=>{
+              console.log('软件启动后检查相机失败:', e);
+              return null;
+            });
+          }
+
+          // 如果仍然失败,返回错误
+          if(res === '未将对象引用设置到对象的实例。' || !res) {
+            return {
+              status:-1,
+              msg: isSoftwareStarted ? "相机硬件未连接,请检查相机连接。" : "相机控制软件启动失败。",
+            }
           }
         }
+
         return {
           status:2,
           msg:res,
         }
-
-
       }else{
+        // SmartShooter 逻辑
         let res = await checkCamera().catch(e=>{
+          Log.info('checkCamera:'+e);
           isOPen = false;
         })
 
         if(res?.device_status  === -1 ){
-          isOPen = false;
-          await checkCameraControlCmdExists()
-          isOPen = true
-          await new Promise(resolve => setTimeout(resolve, 10000)); // 等待5秒
-          res = await checkCamera()
+          // 相机未连接,检查是否需要启动软件
+          if (!isSoftwareStarted) {
+            Log.info('启动 SmartShooter 软件...');
+            await checkCameraControlCmdExists();
+            isSoftwareStarted = true;
+            Log.info('SmartShooter 软件启动完成,等待初始化...');
+            await new Promise(resolve => setTimeout(resolve, 10000)); // 等待软件初始化
+
+            // 软件启动后再次检查相机状态
+            res = await checkCamera().catch(e=>{
+              Log.info('软件启动后检查相机失败:'+e);
+            });
+          }
+
+          // 无论是否启动了软件,如果相机还是未连接,返回相应状态
+          if (res?.device_status === -1) {
+            return {
+              status: -1,
+              msg: isSoftwareStarted ? "相机硬件未连接,请检查相机连接。" : "相机控制软件启动失败。",
+            };
+          }
         }
 
         if(res?.device_status  === 2){
@@ -64,20 +99,17 @@ class CameraController extends Controller {
           };
         }
 
-
         return {
           status:-1,
           msg:"相机未连接,请链接相机。",
         }
-
-
       }
 
 
     } catch (error) {
 
-      let msg = '请安装digiCamControl软件,并打开digiCamControl软件的web服务,端口为5513'
-      if(readConfigFile().controlType === 'SmartShooter') msg = '请安装SmartShooter5软件'
+      let msg = '请安装SmartShooter5软件'
+      if(readConfigFile().controlType === 'digiCamControl') msg = '请安装digiCamControl软件,并打开digiCamControl软件的web服务,端口为5513'
       return {
         status:-1,
         msg,