فهرست منبع

Merge branch 'LCD组装' of http://49.235.130.76/XXF_1122/DaisyNPILine into LCD组装

KWD 7 ماه پیش
والد
کامیت
7fac79126f

+ 105 - 29
TeamAAS-VM/Core/Management.cs

@@ -1279,8 +1279,8 @@ namespace TeamAAS_VP.Core
                                         float toolX = (float)(visionResults[0].X + visionResults[1].X) / 2;
                                         float toolY = (float)(visionResults[0].Y + visionResults[1].Y) / 2;
                                         _FixedUpCameraAngle = Common.CalculateAngleBetweenPointsDegrees(new PointF((float)visionResults[0].X, (float)visionResults[0].Y), new PointF((float)visionResults[1].X, (float)visionResults[1].Y));
-                                        DowmCameraResults[cameraIndex] = new OpenCvSharp.Point3f(toolX, toolX, (float)_FixedUpCameraAngle);
-                                        DownTool = new PointF(toolX, toolX);
+                                        DowmCameraResults[cameraIndex] = new OpenCvSharp.Point3f(toolX, toolY, (float)_FixedUpCameraAngle);
+                                        DownTool = new PointF(toolX, toolY);
                                         await plc.WriteNodeAsync(addressConfig.Out_DownCameraStatus.Address, (Int16)1);
                                         return;
                                     }
@@ -1375,8 +1375,8 @@ namespace TeamAAS_VP.Core
                                         float toolX = (float)(visionResults[0].X + visionResults[1].X) / 2;
                                         float toolY = (float)(visionResults[0].Y + visionResults[1].Y) / 2;
                                         _FixedUpCameraAngle = Common.CalculateAngleBetweenPointsDegrees(new PointF((float)visionResults[0].X, (float)visionResults[0].Y), new PointF((float)visionResults[1].X, (float)visionResults[1].Y));
-                                        DowmCameraResults[cameraIndex] = new OpenCvSharp.Point3f(toolX, toolX, (float)_FixedUpCameraAngle);
-                                        DownTool = new PointF(toolX, toolX);
+                                        DowmCameraResults[cameraIndex] = new OpenCvSharp.Point3f(toolX, toolY, (float)_FixedUpCameraAngle);
+                                        DownTool = new PointF(toolX, toolY);
                                         await plc.WriteNodeAsync(addressConfig.Out_DownCameraStatus.Address, (Int16)1);
                                         return;
                                     }
@@ -1495,7 +1495,7 @@ namespace TeamAAS_VP.Core
                             if (robot == null)
                             {
                                 SendTaskMessage($"未找到机器人,无法执行上相机锁附/组装拍照视觉任务", MessageLevel.Alarm);
-                                await plc.WriteNodeAsync(addressConfig.Out_DownCameraStatus.Address, (Int16)2);
+                                await plc.WriteNodeAsync(addressConfig.Out_UpCameraPickStatus.Address, (Int16)2);
                                 return;
 
                             }
@@ -1567,7 +1567,7 @@ namespace TeamAAS_VP.Core
                                 {
                                     float tool1X = (float)(visionResults[0].X - visionResults[0].X);
                                     float tool1Y = (float)(visionResults[0].Y - visionResults[0].Y);
-                                    float tool2X = (float)(visionResults[1].Y - visionResults[1].Y);
+                                    float tool2X = (float)(visionResults[1].X - visionResults[1].X);
                                     float tool2Y = (float)(visionResults[1].Y - visionResults[1].Y);
                                     float toolX = (tool1X + tool2X) / 2;
                                     float toolY = (tool1Y + tool2Y) / 2;
@@ -1730,7 +1730,7 @@ namespace TeamAAS_VP.Core
                         {
                             SendTaskMessage($"触发上相机检测拍照...", MessageLevel.Debug);
                             //相机的编号
-                            //Int16 cameraIndex = plc.ReadNode<Int16>(addressConfig.Out_UPCameracheckNum.Address);
+                            Int16 cameraIndex = plc.ReadNode<Int16>(addressConfig.Out_UPCameracheckNum.Address);
 
                             if (isDryMode)
                             {
@@ -1738,6 +1738,37 @@ namespace TeamAAS_VP.Core
                                 return;
                             }
 
+                            //视觉流程ID
+                            Guid procedureId = Guid.Empty;
+                            //获取锁付拍照的点位
+                            var pos = currentProduct.CheckCameraPoints.FirstOrDefault(p => p.Number == cameraIndex);
+                            if (pos != null)
+                            {
+                                procedureId = pos.VisionProcessID;
+                            }
+
+                            // 获取流程
+                            var process = _productService.GetCurrentProductProcedureModelById(procedureId);
+                            if (process == null)
+                            {
+                                SendTaskMessage(string.Format("未找到点位:{0}的视觉流程:{1}", cameraIndex, procedureId), MessageLevel.Alarm);
+                                await plc.WriteNodeAsync(addressConfig.Out_UPCameracheckStatus.Address, (Int16)2);
+                                return;
+                            }
+
+                            // 执行视觉任务
+                            var _cts = new CancellationTokenSource();
+                            var visionResult = await _remoteCommandService.ExecutePhotoGetSinglePoint(process, null, null, _cts.Token, cameraIndex, null);
+                            if (visionResult.IsSucceed)
+                            {
+                                await plc.WriteNodeAsync(addressConfig.Out_UPCameracheckStatus.Address, (Int16)1);
+                                SendTaskMessage($"点位{cameraIndex}检测OK", MessageLevel.Debug);
+                            }
+                            else
+                            {
+                                await plc.WriteNodeAsync(addressConfig.Out_UPCameracheckStatus.Address, (Int16)2);
+                                SendTaskMessage($"点位{cameraIndex}检测NG", MessageLevel.Error);
+                            }
                             await plc.WriteNodeAsync(addressConfig.Out_UPCameracheckStatus.Address, (Int16)1);
                         }
                         else
@@ -1767,11 +1798,66 @@ namespace TeamAAS_VP.Core
                             //相机的编号
                             //Int16 cameraIndex = plc.ReadNode<Int16>(addressConfig.In_FixedCameraPickNum.Address);
 
+                            if (currentProduct.IndependentCamer1AuxProcedureId == Guid.Empty)
+                            {
+                                await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (Int16)2);
+                                return;
+                            }
+                            if (currentProduct.IndependentCamer2AuxProcedureId == Guid.Empty)
+                            {
+                                await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (Int16)2);
+                                return;
+                            }
+                            if (currentProduct.IndependentCamer3AuxProcedureId == Guid.Empty)
+                            {
+                                await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (Int16)2);
+                                return;
+                            }
+                            if (currentProduct.IndependentCamer4AuxProcedureId == Guid.Empty)
+                            {
+                                await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (Int16)2);
+                                return;
+                            }
+
+                            //获取四个独立相机的流程id
+                            var process1 = _productService.GetCurrentProductProcedureModelById(currentProduct.IndependentCamer1AuxProcedureId);
+                            var process2 = _productService.GetCurrentProductProcedureModelById(currentProduct.IndependentCamer2AuxProcedureId);
+                            var process3 = _productService.GetCurrentProductProcedureModelById(currentProduct.IndependentCamer3AuxProcedureId);
+                            var process4 = _productService.GetCurrentProductProcedureModelById(currentProduct.IndependentCamer4AuxProcedureId);
+
+                            // 执行视觉任务
+                            var _cts = new CancellationTokenSource();
+                            var task1 = _remoteCommandService.ExecutePhotoGetSinglePoint(process1, null, null, _cts.Token, 1, null);
+                            var task2 = _remoteCommandService.ExecutePhotoGetSinglePoint(process2, null, null, _cts.Token, 2, null);
+                            var task3 = _remoteCommandService.ExecutePhotoGetSinglePoint(process3, null, null, _cts.Token, 3, null);
+                            var task4 = _remoteCommandService.ExecutePhotoGetSinglePoint(process4, null, null, _cts.Token, 4, null);
+
+                            var visionResults = await Task.WhenAll(task1, task2, task3, task4);
                             if (isDryMode)
                             {
                                 await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (Int16)1);
                                 return;
                             }
+                            if (visionResults[0].IsSucceed && visionResults[1].IsSucceed && visionResults[2].IsSucceed && visionResults[3].IsSucceed)
+                            {
+
+                                Vector<double> p1 = Vector<double>.Build.Dense(new double[] { visionResults[1].X, visionResults[1].Y });
+                                Vector<double> p2 = Vector<double>.Build.Dense(new double[] { visionResults[2].X, visionResults[2].Y });
+                                Vector<double> p3 = Vector<double>.Build.Dense(new double[] { visionResults[3].X, visionResults[3].Y });
+                                Vector<double> p4 = Vector<double>.Build.Dense(new double[] { visionResults[0].X, visionResults[0].Y });
+
+                                var center = RectangleCenterCalculator.CalculateByPCAWithKnownOrder(new List<Vector<double>> { p1, p2, p3, p4 });
+                                UpCameraPutResults[1].X = (float)center.Center[0];
+                                UpCameraPutResults[1].Y = (float)center.Center[1];
+                                UpCameraPutResults[1].Z = (float)center.MajorAxisAngle;
+                                SendTaskMessage($"LCD拍照结果:X={UpCameraPutResults[1].X},Y={UpCameraPutResults[1].Y},Angle={UpCameraPutResults[1].Z}", MessageLevel.Info);
+                            }
+                            else
+                            {
+
+                                await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (Int16)2);
+                                return;
+                            }
 
                             await plc.WriteNodeAsync(addressConfig.Out_FixedCameraPickStatus.Address, (Int16)1);
                         }
@@ -1890,32 +1976,32 @@ namespace TeamAAS_VP.Core
                             //相机的编号
                             //Int16 cameraIndex = plc.ReadNode<Int16>(addressConfig.In_FixedCameracheckNum.Address);
 
-                            if (currentProduct.IndependentCamer1AuxProcedureId == Guid.Empty)
+                            if (currentProduct.IndependentCamer1CheckProcedureId == Guid.Empty)
                             {
                                 await plc.WriteNodeAsync(addressConfig.Out_FixedCameracheckStatus.Address, (Int16)2);
                                 return;
                             }
-                            if (currentProduct.IndependentCamer2AuxProcedureId == Guid.Empty)
+                            if (currentProduct.IndependentCamer2CheckProcedureId == Guid.Empty)
                             {
                                 await plc.WriteNodeAsync(addressConfig.Out_FixedCameracheckStatus.Address, (Int16)2);
                                 return;
                             }
-                            if (currentProduct.IndependentCamer3AuxProcedureId == Guid.Empty)
+                            if (currentProduct.IndependentCamer3CheckProcedureId == Guid.Empty)
                             {
                                 await plc.WriteNodeAsync(addressConfig.Out_FixedCameracheckStatus.Address, (Int16)2);
                                 return;
                             }
-                            if (currentProduct.IndependentCamer4AuxProcedureId == Guid.Empty)
+                            if (currentProduct.IndependentCamer4CheckProcedureId == Guid.Empty)
                             {
                                 await plc.WriteNodeAsync(addressConfig.Out_FixedCameracheckStatus.Address, (Int16)2);
                                 return;
                             }
 
                             //获取四个独立相机的流程id
-                            var process1 = _productService.GetCurrentProductProcedureModelById(currentProduct.IndependentCamer1AuxProcedureId);
-                            var process2 = _productService.GetCurrentProductProcedureModelById(currentProduct.IndependentCamer2AuxProcedureId);
-                            var process3 = _productService.GetCurrentProductProcedureModelById(currentProduct.IndependentCamer3AuxProcedureId);
-                            var process4 = _productService.GetCurrentProductProcedureModelById(currentProduct.IndependentCamer4AuxProcedureId);
+                            var process1 = _productService.GetCurrentProductProcedureModelById(currentProduct.IndependentCamer1CheckProcedureId);
+                            var process2 = _productService.GetCurrentProductProcedureModelById(currentProduct.IndependentCamer2CheckProcedureId);
+                            var process3 = _productService.GetCurrentProductProcedureModelById(currentProduct.IndependentCamer3CheckProcedureId);
+                            var process4 = _productService.GetCurrentProductProcedureModelById(currentProduct.IndependentCamer4CheckProcedureId);
 
                             // 执行视觉任务
                             var _cts = new CancellationTokenSource();
@@ -1932,26 +2018,16 @@ namespace TeamAAS_VP.Core
                             }
                             if (visionResults[0].IsSucceed && visionResults[1].IsSucceed && visionResults[2].IsSucceed && visionResults[3].IsSucceed)
                             {
-                                
-                                Vector<double> p1 = Vector<double>.Build.Dense(new double[] { visionResults[1].X, visionResults[1].Y });
-                                Vector<double> p2 = Vector<double>.Build.Dense(new double[] { visionResults[2].X, visionResults[2].Y });
-                                Vector<double> p3 = Vector<double>.Build.Dense(new double[] { visionResults[3].X, visionResults[3].Y });
-                                Vector<double> p4 = Vector<double>.Build.Dense(new double[] { visionResults[0].X, visionResults[0].Y });
-
-                                var center = RectangleCenterCalculator.CalculateByPCAWithKnownOrder(new List<Vector<double>> { p1, p2, p3, p4 });
-                                UpCameraPutResults[1].X = (float)center.Center[0];
-                                UpCameraPutResults[1].Y = (float)center.Center[1];
-                                UpCameraPutResults[1].Z = (float)center.MajorAxisAngle;
-                                SendTaskMessage($"LCD拍照结果:X={UpCameraPutResults[1].X},Y={UpCameraPutResults[1].Y},Angle={UpCameraPutResults[1].Z}", MessageLevel.Info);
+                                SendTaskMessage($"固定相机检测OK", MessageLevel.Debug);
+                                await plc.WriteNodeAsync(addressConfig.Out_FixedCameracheckStatus.Address, (Int16)1);
+                                return;
                             }
                             else
                             {
-                                
+                                SendTaskMessage($"固定相机检测NG", MessageLevel.Error);
                                 await plc.WriteNodeAsync(addressConfig.Out_FixedCameracheckStatus.Address, (Int16)2);
                                 return;
                             }
-
-                            await plc.WriteNodeAsync(addressConfig.Out_FixedCameracheckStatus.Address, (Int16)1);
                         }
                         else
                         {

+ 8 - 0
TeamAAS-VM/Interfaces/ILightManagerService.cs

@@ -71,6 +71,14 @@ namespace TeamAAS_VP.Interfaces
         /// <returns>操作成功返回 true,否则返回 false。</returns>
         Task<bool> SetGlobalChannelBrightnessAsync(int globalChannelId, int brightness);
 
+        /// <summary>
+        /// 获取指定全局通道的亮度值。
+        /// </summary>
+        /// <param name="globalChannelId">目标全局通道 Id。</param>
+        /// <param name="brightness">亮度值,通常在 0 到 100 范围内(具体范围请参照实现)。</param>
+        /// <returns>操作成功返回 true,否则返回 false。</returns>
+        Task<int> GetGlobalChannelBrightnessAsync(int globalChannelId);
+
         /// <summary>
         /// 打开指定的全局通道(将其置于开启状态)。
         /// </summary>

+ 1 - 1
TeamAAS-VM/Models/Lights/ChannelConfig.cs

@@ -58,7 +58,7 @@ namespace TeamAAS_VP.Models.Lights
             set { SetProperty(ref _GlobalIndex, value); }
         }
 
-        private int _DefaultBrightness = 100;
+        private int _DefaultBrightness = 255;
         /// <summary>
         /// 默认亮度(百分比)。
         /// 范围通常为 0 到 100,表示通道的默认亮度设置。默认值为 100(表示最大亮度)。

+ 40 - 0
TeamAAS-VM/Models/Product/ProductModel.cs

@@ -316,6 +316,46 @@ namespace TeamAAS_VP.Models
             set { SetProperty(ref _IndependentCamer4AuxProcedureId, value); }
         }
 
+        private Guid _IndependentCamer1CheckProcedureId;
+        /// <summary>
+        /// 独立移动模组相机1检测任务拍照流程ID
+        /// </summary>
+        public Guid IndependentCamer1CheckProcedureId
+        {
+            get { return _IndependentCamer1CheckProcedureId; }
+            set { SetProperty(ref _IndependentCamer1CheckProcedureId, value); }
+        }
+
+        private Guid _IndependentCamer2CheckProcedureId;
+        /// <summary>
+        /// 独立移动模组相机2检测任务拍照流程ID
+        /// </summary>
+        public Guid IndependentCamer2CheckProcedureId
+        {
+            get { return _IndependentCamer2CheckProcedureId; }
+            set { SetProperty(ref _IndependentCamer2CheckProcedureId, value); }
+        }
+
+        private Guid _IndependentCamer3CheckProcedureId;
+        /// <summary>
+        /// 独立移动模组相机3检测任务拍照流程ID
+        /// </summary>
+        public Guid IndependentCamer3CheckProcedureId
+        {
+            get { return _IndependentCamer3CheckProcedureId; }
+            set { SetProperty(ref _IndependentCamer3CheckProcedureId, value); }
+        }
+
+        private Guid _IndependentCamer4CheckProcedureId;
+        /// <summary>
+        /// 独立移动模组相机4检测任务拍照流程ID
+        /// </summary>
+        public Guid IndependentCamer4CheckProcedureId
+        {
+            get { return _IndependentCamer4CheckProcedureId; }
+            set { SetProperty(ref _IndependentCamer4CheckProcedureId, value); }
+        }
+
         /// <summary>
         /// 移动向上的相机模板角度
         /// </summary>

+ 2 - 2
TeamAAS-VM/Properties/AssemblyInfo.cs

@@ -51,5 +51,5 @@ using System.Windows;
 //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
 //通过使用 "*",如下所示:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.2.1.2")]
-[assembly: AssemblyFileVersion("1.2.1.2")]
+[assembly: AssemblyVersion("1.2.1.3")]
+[assembly: AssemblyFileVersion("1.2.1.3")]

+ 16 - 0
TeamAAS-VM/Services/LightManagerService.cs

@@ -215,6 +215,22 @@ namespace TeamAAS_VP.Services
             return result;
         }
 
+        /// <summary>
+        /// 获取指定全局通道的亮度值。
+        /// </summary>
+        /// <param name="globalChannelId">全局通道ID</param>
+        /// <returns>操作是否成功</returns>
+        public async Task<int> GetGlobalChannelBrightnessAsync(int globalChannelId)
+        {
+            if (!_globalChannels.TryGetValue(globalChannelId, out var channel))
+                return -1;
+
+            var result = await channel.GetBrightnessAsync();
+            // 触发状态变化事件,通知外部当前通道的开关与亮度状态
+            ChannelStatusChanged?.Invoke(this, new LightChannelEventArgs(channel, channel.IsOn, channel.Brightness));
+            return result;
+        }
+
         /// <summary>
         /// 打开指定的全局通道。
         /// </summary>

+ 9 - 0
TeamAAS-VM/Services/RemoteCommandService.cs

@@ -1470,6 +1470,7 @@ namespace TeamAAS_VP.Services
                 }
                 DateTime nowtime = DateTime.Now;
                 LogHelper.WriteLogInfo("开始采集图像");
+                Thread.Sleep(250);
                 var image = camera.Grab();
                 if (image == null)
                 {
@@ -1705,6 +1706,13 @@ namespace TeamAAS_VP.Services
 
                     SendTaskMessage(Lang.拍照OK, MessageLevel.Debug);
 
+                    if (procedure.CalibrationId == Guid.Empty)
+                    {
+                        //没有关联校准时,则执行检测任务
+                        await RecordPhotoCaptureAsync(procedure, robotCoord, true, new double[] { 0, 0, 0 }, new double[] { 0, 0, 0 }, string.Empty, positionIndex, remark);
+                        return (true, 0, 0, 0);
+                    }
+
                     // 3. 获取视觉输出结果
                     LogHelper.WriteLogInfo("开始获取视觉输出结果");
                     //获取相机校准
@@ -2332,6 +2340,7 @@ namespace TeamAAS_VP.Services
                     {
                         LogHelper.WriteLogInfo($"设置光源通道{lightChannel.GlobalIndex}打开失败!");
                     }
+                    await Task.Delay(200);
                     isSucceed = await _lightManagerService.SetGlobalChannelBrightnessAsync(lightChannel.GlobalIndex, lightChannel.DefaultBrightness);
                     if (!isSucceed)
                     {

+ 3 - 0
TeamAAS-VM/ViewModels/Product/CameraParamsViewModel.cs

@@ -460,6 +460,9 @@ namespace TeamAAS_VP.ViewModels.Product
             {
                 if (!(parameter is ChannelConfig channel)) return;
                 await _lightManagerService.TurnOnGlobalChannelAsync(channel.GlobalIndex);
+
+                int value = await _lightManagerService.GetGlobalChannelBrightnessAsync(channel.GlobalIndex);
+                channel.DefaultBrightness = value;
             }
             catch (Exception ex)
             {

+ 101 - 0
TeamAAS-VM/ViewModels/Product/ProductParamsViewModel.cs

@@ -340,6 +340,74 @@ namespace TeamAAS_VP.ViewModels.Product
             }
         }
 
+        private ProcedureModel _IndependentCamer1CheckProcedureId;
+        /// <summary>
+        /// 独立移动模组相机1检测任务拍照流程ID
+        /// </summary>
+        public ProcedureModel IndependentCamer1CheckProcedureId
+        {
+            get { return _IndependentCamer1CheckProcedureId; }
+            set
+            {
+                SetProperty(ref _IndependentCamer1CheckProcedureId, value);
+                if (value != null)
+                {
+                    SelectProduct.IndependentCamer1CheckProcedureId = value.Id;
+                }
+            }
+        }
+
+        private ProcedureModel _IndependentCamer2CheckProcedureId;
+        /// <summary>
+        /// 独立移动模组相机2检测任务拍照流程ID
+        /// </summary>
+        public ProcedureModel IndependentCamer2CheckProcedureId
+        {
+            get { return _IndependentCamer2CheckProcedureId; }
+            set
+            {
+                SetProperty(ref _IndependentCamer2CheckProcedureId, value);
+                if (value != null)
+                {
+                    SelectProduct.IndependentCamer2CheckProcedureId = value.Id;
+                }
+            }
+        }
+
+        private ProcedureModel _IndependentCamer3CheckProcedureId;
+        /// <summary>
+        /// 独立移动模组相机3检测任务拍照流程ID
+        /// </summary>
+        public ProcedureModel IndependentCamer3CheckProcedureId
+        {
+            get { return _IndependentCamer3CheckProcedureId; }
+            set
+            {
+                SetProperty(ref _IndependentCamer3CheckProcedureId, value);
+                if (value != null)
+                {
+                    SelectProduct.IndependentCamer3CheckProcedureId = value.Id;
+                }
+            }
+        }
+
+        private ProcedureModel _IndependentCamer4CheckProcedureId;
+        /// <summary>
+        /// 独立移动模组相机4检测任务拍照流程ID
+        /// </summary>
+        public ProcedureModel IndependentCamer4CheckProcedureId
+        {
+            get { return _IndependentCamer4CheckProcedureId; }
+            set
+            {
+                SetProperty(ref _IndependentCamer4CheckProcedureId, value);
+                if (value != null)
+                {
+                    SelectProduct.IndependentCamer4CheckProcedureId = value.Id;
+                }
+            }
+        }
+
         #endregion
 
         #region 命令
@@ -490,6 +558,22 @@ namespace TeamAAS_VP.ViewModels.Product
                 SelectProduct.IndependentCamer4AuxProcedureId = Guid.Empty;
             }
 
+            if (IndependentCamer1CheckProcedureId == null)
+            {
+                SelectProduct.IndependentCamer1CheckProcedureId = Guid.Empty;
+            }
+            if (IndependentCamer2CheckProcedureId == null)
+            {
+                SelectProduct.IndependentCamer2CheckProcedureId = Guid.Empty;
+            }
+            if (IndependentCamer3CheckProcedureId == null)
+            {
+                SelectProduct.IndependentCamer3CheckProcedureId = Guid.Empty;
+            }
+            if (IndependentCamer4CheckProcedureId == null)
+            {
+                SelectProduct.IndependentCamer4CheckProcedureId = Guid.Empty;
+            }
 
         }
 
@@ -612,6 +696,23 @@ namespace TeamAAS_VP.ViewModels.Product
                 {
                     IndependentCamer4ProductProcedureId = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.IndependentCamer4ProductProcedureId);
                 }
+
+                if (SelectProduct.IndependentCamer1CheckProcedureId != Guid.Empty)
+                {
+                    IndependentCamer1CheckProcedureId = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.IndependentCamer1CheckProcedureId);
+                }
+                if (SelectProduct.IndependentCamer2CheckProcedureId != Guid.Empty)
+                {
+                    IndependentCamer2CheckProcedureId = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.IndependentCamer2CheckProcedureId);
+                }
+                if (SelectProduct.IndependentCamer3CheckProcedureId != Guid.Empty)
+                {
+                    IndependentCamer3CheckProcedureId = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.IndependentCamer3CheckProcedureId);
+                }
+                if (SelectProduct.IndependentCamer4CheckProcedureId != Guid.Empty)
+                {
+                    IndependentCamer4CheckProcedureId = ProcedureModels.FirstOrDefault(p => p.Id == SelectProduct.IndependentCamer4CheckProcedureId);
+                }
             }
             catch (Exception ex)
             {

+ 1 - 1
TeamAAS-VM/Views/HomeView.xaml

@@ -429,7 +429,7 @@
                             <DataTemplate>
                                 <Border BorderThickness="0"
                                         HorizontalAlignment="Left">
-                                    <Label MaxWidth="300"
+                                    <Label MaxWidth="800"
                                            BorderThickness="0"
                                            Background="Transparent"
                                            Margin="0"

+ 5 - 5
TeamAAS-VM/Views/Product/PlcPointParams.xaml.cs

@@ -39,7 +39,7 @@ namespace TeamAAS_VP.Views.Product
             {
                 try
                 {
-                    var visible = VM.SelectedIndex == 3 ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
+                    var visible = VM.SelectedIndex == 3 || VM.SelectedIndex == 5 ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed;
                     this.Dispatcher.BeginInvoke(new Action(() =>
                     {
                         if (colProcedure != null)
@@ -73,12 +73,12 @@ namespace TeamAAS_VP.Views.Product
         {
             if (e.PropertyName == "Image")
             {
-                if (this.display.Image==null)
+                if (this.display.Image == null)
                 {
                     this.display.Image = VM.Image;
                     //图像中心点坐标
-                    _imageWidth= this.display.Image.Width;
-                    _imageHeight= this.display.Image.Height;
+                    _imageWidth = this.display.Image.Width;
+                    _imageHeight = this.display.Image.Height;
                     CogGraphicCollection graphic = new CogGraphicCollection();
                     CogCreateLineTool line1 = new CogCreateLineTool();
                     CogCreateLineTool line2 = new CogCreateLineTool();
@@ -101,7 +101,7 @@ namespace TeamAAS_VP.Views.Product
                 {
                     this.display.Image = VM.Image;
                     //如果图像的长宽发生变化,则重新绘制十字线
-                    if (_imageWidth!= this.display.Image.Width|| _imageHeight!= this.display.Image.Height)
+                    if (_imageWidth != this.display.Image.Width || _imageHeight != this.display.Image.Height)
                     {
                         _imageWidth = this.display.Image.Width;
                         _imageHeight = this.display.Image.Height;

+ 97 - 0
TeamAAS-VM/Views/Product/ProductParams.xaml

@@ -131,6 +131,10 @@
                         <RowDefinition Height="auto" />
                         <RowDefinition Height="auto" />
                         <RowDefinition Height="auto" />
+                        <RowDefinition Height="auto" />
+                        <RowDefinition Height="auto" />
+                        <RowDefinition Height="auto" />
+                        <RowDefinition Height="auto" />
                     </Grid.RowDefinitions>
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="auto" />
@@ -611,6 +615,99 @@
                             </DataTemplate>
                         </ComboBox.ItemTemplate>
                     </ComboBox>
+
+                    <!--独立向下相机1检测拍照流程ID-->
+                    <TextBlock Grid.Row="17"
+                               Grid.Column="0"
+                               Text="独立向下相机1检测拍照流程ID: " />
+                    <ComboBox Grid.Row="17"
+                              Grid.Column="1"
+                              ItemsSource="{Binding ProcedureModels}"
+                              SelectedItem="{Binding IndependentCamer1CheckProcedureId}"
+                              materialDesign:TextFieldAssist.HasClearButton="True"
+                              materialDesign:HintAssist.Hint="{lex:Loc 选择需要配置的流程}">
+                        <ComboBox.ItemTemplate>
+                            <DataTemplate>
+                                <StackPanel Orientation="Horizontal">
+                                    <materialDesign:PackIcon Kind="VideoOutline" />
+                                    <TextBlock Text="{Binding CameraName}"
+                                               Margin="6,0" />
+                                    <materialDesign:PackIcon Kind="ProgressWrench" />
+                                    <TextBlock Text="{Binding Name}"
+                                               Margin="6,0" />
+                                </StackPanel>
+                            </DataTemplate>
+                        </ComboBox.ItemTemplate>
+                    </ComboBox>
+                    <!--独立向下相机2检测拍照流程ID-->
+                    <TextBlock Grid.Row="18"
+                               Grid.Column="0"
+                               Text="独立向下相机2检测拍照流程ID: " />
+                    <ComboBox Grid.Row="18"
+                              Grid.Column="1"
+                              ItemsSource="{Binding ProcedureModels}"
+                              SelectedItem="{Binding IndependentCamer2CheckProcedureId}"
+                              materialDesign:TextFieldAssist.HasClearButton="True"
+                              materialDesign:HintAssist.Hint="{lex:Loc 选择需要配置的流程}">
+                        <ComboBox.ItemTemplate>
+                            <DataTemplate>
+                                <StackPanel Orientation="Horizontal">
+                                    <materialDesign:PackIcon Kind="VideoOutline" />
+                                    <TextBlock Text="{Binding CameraName}"
+                                               Margin="6,0" />
+                                    <materialDesign:PackIcon Kind="ProgressWrench" />
+                                    <TextBlock Text="{Binding Name}"
+                                               Margin="6,0" />
+                                </StackPanel>
+                            </DataTemplate>
+                        </ComboBox.ItemTemplate>
+                    </ComboBox>
+                    <!--独立向下相机3检测拍照流程ID-->
+                    <TextBlock Grid.Row="19"
+                               Grid.Column="0"
+                               Text="独立向下相机3检测拍照流程ID: " />
+                    <ComboBox Grid.Row="19"
+                              Grid.Column="1"
+                              ItemsSource="{Binding ProcedureModels}"
+                              SelectedItem="{Binding IndependentCamer3CheckProcedureId}"
+                              materialDesign:TextFieldAssist.HasClearButton="True"
+                              materialDesign:HintAssist.Hint="{lex:Loc 选择需要配置的流程}">
+                        <ComboBox.ItemTemplate>
+                            <DataTemplate>
+                                <StackPanel Orientation="Horizontal">
+                                    <materialDesign:PackIcon Kind="VideoOutline" />
+                                    <TextBlock Text="{Binding CameraName}"
+                                               Margin="6,0" />
+                                    <materialDesign:PackIcon Kind="ProgressWrench" />
+                                    <TextBlock Text="{Binding Name}"
+                                               Margin="6,0" />
+                                </StackPanel>
+                            </DataTemplate>
+                        </ComboBox.ItemTemplate>
+                    </ComboBox>
+                    <!--独立向下相机4检测拍照流程ID-->
+                    <TextBlock Grid.Row="20"
+                               Grid.Column="0"
+                               Text="独立向下相机4检测拍照流程ID: " />
+                    <ComboBox Grid.Row="20"
+                              Grid.Column="1"
+                              ItemsSource="{Binding ProcedureModels}"
+                              SelectedItem="{Binding IndependentCamer4CheckProcedureId}"
+                              materialDesign:TextFieldAssist.HasClearButton="True"
+                              materialDesign:HintAssist.Hint="{lex:Loc 选择需要配置的流程}">
+                        <ComboBox.ItemTemplate>
+                            <DataTemplate>
+                                <StackPanel Orientation="Horizontal">
+                                    <materialDesign:PackIcon Kind="VideoOutline" />
+                                    <TextBlock Text="{Binding CameraName}"
+                                               Margin="6,0" />
+                                    <materialDesign:PackIcon Kind="ProgressWrench" />
+                                    <TextBlock Text="{Binding Name}"
+                                               Margin="6,0" />
+                                </StackPanel>
+                            </DataTemplate>
+                        </ComboBox.ItemTemplate>
+                    </ComboBox>
                 </Grid>
             </Grid>