فهرست منبع

视觉与锁付点参数批量设置优化及UI调整

本次提交主要内容:
- 修正视觉与机器人坐标系偏差,提升锁附点定位精度
- 锁付点速度参数由 int 改为 float,并完善批量设置初始化
- 新增锁付点局部/世界坐标系批量转换与写入
- 移除部分 ComboBox 的交互触发器,简化界面逻辑
- 优化“执行校准”按钮样式,提升UI美观性
孝锋 徐 8 ماه پیش
والد
کامیت
48ec13c725

+ 37 - 9
TeamAAS-VM/Core/Management.cs

@@ -912,7 +912,6 @@ namespace TeamAAS_VP.Core
         }
         #endregion
 
-
         #region PLC
         /// <summary>
         /// 将系统参数写入PLC
@@ -1066,22 +1065,35 @@ namespace TeamAAS_VP.Core
                                 return;
                             }
 
+                            // 获取机器人当前坐标
+                            var robot = _robotService.GetAllRobots().FirstOrDefault();
+                            if (robot == null)
+                            {
+                                SendTaskMessage($"未找到机器人,无法执行上相机锁附/组装拍照视觉任务", MessageLevel.Alarm);
+                                await plc.WriteNodeAsync(addressConfig.Out_UpCameraPutStatus.Address, (Int16)2);
+                                return;
+
+                            }
+                            var currentPosition = robot.GetRobotPos();
+
                             // 执行视觉任务
                             var _cts = new CancellationTokenSource();
                             var visionResult =await _remoteCommandService.ExecutePhotoGetSinglePoint(process, null,null, _cts.Token);
                             if (visionResult.IsSucceed)
                             {
-                                DowmCameraResults[cameraIndex] = new PointF((float)visionResult.X, (float)visionResult.Y);
+                                //披头偏差
+                                float offsetX = (float)(visionResult.X - currentPosition.X);
+                                float offsetY = (float)(visionResult.Y - currentPosition.Y);
+
+                                DowmCameraResults[cameraIndex] = new PointF(offsetX, offsetY);
                                 await plc.WriteNodeAsync(addressConfig.Out_DownCameraStatus.Address, (Int16)1);
+                                return;
                             }
                             else
                             {
                                 await plc.WriteNodeAsync(addressConfig.Out_DownCameraStatus.Address, (Int16)2);
+                                return;
                             }
-
-                            //_remoteCommandService.ExecuteNormalVisionTaskAsync()
-
-                            await plc.WriteNodeAsync(addressConfig.Out_DownCameraStatus.Address, (Int16)1);
                         }
                         else
                         {
@@ -1300,14 +1312,30 @@ namespace TeamAAS_VP.Core
                             //拍1打1 
                             if (systemConfig.WorkMode == 1)
                             {
-                                currentProduct.ScrewPoints[0].X_Position = UpCameraPutResults[1].X;
-                                currentProduct.ScrewPoints[0].Y_Position = UpCameraPutResults[1].Y;
+                                currentProduct.ScrewPoints[0].X_Position = UpCameraPutResults[1].X+ DowmCameraResults[0].X;
+                                currentProduct.ScrewPoints[0].Y_Position = UpCameraPutResults[1].Y + DowmCameraResults[0].Y;
                                 await currentProduct.ScrewPoints[0].WriteToPlcAddress(addressConfig.Out_Screw, plc);
                             }
                             //拍1打所有
                             else if (systemConfig.WorkMode == 2)
                             {
-
+                                //根据UpCameraPutResults[]中的索引1、2,和拍照点对应的Local下的坐标,从创建Local坐标系
+                                PointF worldP1=new PointF(UpCameraPutResults[1].X, UpCameraPutResults[1].Y);
+                                PointF worldP2= new PointF(UpCameraPutResults[2].X, UpCameraPutResults[2].Y);
+                                PointF localP1= new PointF(currentProduct.ScrewCameraLocalPos1.X_Position, currentProduct.ScrewCameraLocalPos1.Y_Position);
+                                PointF localP2= new PointF(currentProduct.ScrewCameraLocalPos2.X_Position, currentProduct.ScrewCameraLocalPos2.Y_Position);
+                                CoordinateTransformer local= new CoordinateTransformer(worldP1, worldP2, localP1, localP2);
+
+                                for (int i = 0; i < currentProduct.ScrewPoints.Count; i++)
+                                {
+                                    var localPoint = new PointF(currentProduct.ScrewCameraPoints[i].X_Position, currentProduct.ScrewCameraPoints[i].Y_Position);
+                                    var worldPoint= local.ToOldCoord(localPoint.X, localPoint.Y);
+                                    var point = currentProduct.ScrewCameraPoints[i].Clone();
+                                    point.X_Position = (float)worldPoint[0];
+                                    point.Y_Position = (float)worldPoint[1];
+                                    await point.WriteToPlcAddress(addressConfig.Out_ScrewCamera, plc);
+                                }
+                                await plc.WriteNodeAsync(addressConfig.Out_WorkNum.Address, (Int16)currentProduct.ScrewPoints.Count);
                             }
                             await plc.WriteNodeAsync(addressConfig.Out_CameraDone.Address, (Int16)1);
                         }

+ 18 - 8
TeamAAS-VM/ViewModels/Product/PlcPointParamsViewModel.cs

@@ -205,41 +205,41 @@ namespace TeamAAS_VP.ViewModels.Product
             set { SetProperty(ref _LockZDepth, value); }
         }
 
-        private int _LockXSpeed;
+        private float _LockXSpeed;
         /// <summary>
         /// 批量设置锁付点X轴速度
         /// </summary>
-        public int LockXSpeed
+        public float LockXSpeed
         {
             get { return _LockXSpeed; }
             set { SetProperty(ref _LockXSpeed, value); }
         }
 
-        private int _LockYSpeed;
+        private float _LockYSpeed;
         /// <summary>
         /// 批量设置锁付点Y轴速度
         /// </summary>
-        public int LockYSpeed
+        public float LockYSpeed
         {
             get { return _LockYSpeed; }
             set { SetProperty(ref _LockYSpeed, value); }
         }
 
-        private int _LockZSpeed;
+        private float _LockZSpeed;
         /// <summary>
         /// 批量设置锁付点Z轴速度
         /// </summary>
-        public int LockZSpeed
+        public float LockZSpeed
         {
             get { return _LockZSpeed; }
             set { SetProperty(ref _LockZSpeed, value); }
         }
 
-        private int _LockZDescendSpeed;
+        private float _LockZDescendSpeed;
         /// <summary>
         /// 批量设置锁付点Z轴下降速度
         /// </summary>
-        public int LockZDescendSpeed
+        public float LockZDescendSpeed
         {
             get { return _LockZDescendSpeed; }
             set { SetProperty(ref _LockZDescendSpeed, value); }
@@ -1017,6 +1017,16 @@ namespace TeamAAS_VP.ViewModels.Product
                         ProcedureModels.Add(item1);
                     }
                 }
+
+                //对锁付点的批量设置进行初始化
+                LockPointStartZ = SelectProduct.ScrewPoints.FirstOrDefault()?.Z_Position_Start ?? 0;
+                LockZDepth= SelectProduct.ScrewPoints.FirstOrDefault() != null ? (SelectProduct.ScrewPoints.FirstOrDefault().Z_Position_Start - SelectProduct.ScrewPoints.FirstOrDefault().Z_Position_Stop) : 0;
+                LockXSpeed= SelectProduct.ScrewPoints.FirstOrDefault()?.X_Velocity ?? 100;
+                LockYSpeed= SelectProduct.ScrewPoints.FirstOrDefault()?.Y_Velocity ?? 100;
+                LockZSpeed= SelectProduct.ScrewPoints.FirstOrDefault()?.Z_Velocity_Start ?? 100;
+                LockZDescendSpeed= SelectProduct.ScrewPoints.FirstOrDefault()?.Z_Velocity_Stop ?? 100;
+                LockFeederNumber= SelectProduct.ScrewPoints.FirstOrDefault()?.Feeder ?? 1;
+                LockScrewProgramNumber= SelectProduct.ScrewPoints.FirstOrDefault()?.ScrewProNum ?? 1;
             }
             catch (Exception ex)
             {

+ 1 - 0
TeamAAS-VM/Views/Product/PlcPointParams.xaml

@@ -372,6 +372,7 @@
                                             </ComboBox>
                                             <Button Content="执行校准"
                                                     Margin="10,0,0,0"
+                                                    materialDesign:ButtonAssist.CornerRadius="5"
                                                     Command="{Binding AutoCorrectPickPointCommand}" />
                                         </StackPanel>
                                     </ScrollViewer>

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

@@ -242,12 +242,6 @@
                               SelectedItem="{Binding FixedUpCamera1Procedure}"
                               materialDesign:TextFieldAssist.HasClearButton="True"
                               materialDesign:HintAssist.Hint="{lex:Loc 选择需要配置的流程}">
-                        <b:Interaction.Triggers>
-                            <b:EventTrigger EventName="PreviewMouseDown">
-                                <b:CallMethodAction  TargetObject="{Binding}"
-                                                     MethodName="ComboBox_MouseDown"></b:CallMethodAction>
-                            </b:EventTrigger>
-                        </b:Interaction.Triggers>
                         <ComboBox.ItemTemplate>
                             <DataTemplate>
                                 <StackPanel Orientation="Horizontal">
@@ -271,12 +265,6 @@
                               SelectedItem="{Binding FixedUpCamera2Procedure}"
                               materialDesign:TextFieldAssist.HasClearButton="True"
                               materialDesign:HintAssist.Hint="{lex:Loc 选择需要配置的流程}">
-                        <b:Interaction.Triggers>
-                            <b:EventTrigger EventName="PreviewMouseDown">
-                                <b:CallMethodAction  TargetObject="{Binding}"
-                                                     MethodName="ComboBox_MouseDown"></b:CallMethodAction>
-                            </b:EventTrigger>
-                        </b:Interaction.Triggers>
                         <ComboBox.ItemTemplate>
                             <DataTemplate>
                                 <StackPanel Orientation="Horizontal">
@@ -300,12 +288,6 @@
                               SelectedItem="{Binding FixedDownCameraProcedure}"
                               materialDesign:TextFieldAssist.HasClearButton="True"
                               materialDesign:HintAssist.Hint="{lex:Loc 选择需要配置的流程}">
-                        <b:Interaction.Triggers>
-                            <b:EventTrigger EventName="PreviewMouseDown">
-                                <b:CallMethodAction  TargetObject="{Binding}"
-                                                     MethodName="ComboBox_MouseDown"></b:CallMethodAction>
-                            </b:EventTrigger>
-                        </b:Interaction.Triggers>
                         <ComboBox.ItemTemplate>
                             <DataTemplate>
                                 <StackPanel Orientation="Horizontal">
@@ -329,12 +311,6 @@
                               SelectedItem="{Binding MoveDownCameraLockPhotoProcedure}"
                               materialDesign:TextFieldAssist.HasClearButton="True"
                               materialDesign:HintAssist.Hint="{lex:Loc 选择需要配置的流程}">
-                        <b:Interaction.Triggers>
-                            <b:EventTrigger EventName="PreviewMouseDown">
-                                <b:CallMethodAction  TargetObject="{Binding}"
-                                                     MethodName="ComboBox_MouseDown"></b:CallMethodAction>
-                            </b:EventTrigger>
-                        </b:Interaction.Triggers>
                         <ComboBox.ItemTemplate>
                             <DataTemplate>
                                 <StackPanel Orientation="Horizontal">
@@ -348,7 +324,6 @@
                             </DataTemplate>
                         </ComboBox.ItemTemplate>
                     </ComboBox>
-
                 </Grid>
             </Grid>