Răsfoiți Sursa

点动安全提示与代码规范优化

- 点动距离≥10mm时增加用户确认弹窗,提升操作安全性
- 点位示教操作增加确认提示,防止误操作
- 优化属性赋值、命令等代码风格,统一格式
- 调整MotionCommand枚举顺序,保持业务一致性
- 批量点位参数初始化格式优化
- 其它细节修正,提升代码健壮性与可读性
孝锋 徐 8 luni în urmă
părinte
comite
6f47f06cce

+ 22 - 13
TeamAAS-VM/Controls/RobotManual.xaml.cs

@@ -288,45 +288,54 @@ namespace TeamAAS_VP.Controls
             if (Robot == null || !Robot.IsConnected) return;
             try
             {
-                Robot.Timeout = 6000000;
                 var items = ((string)obj).Split(':');
+                //如果移动距离大于10mm,则提示用户确认
+                double distance = double.Parse(items[1]);
+                if (Math.Abs(distance) >= 10)
+                {
+                    if (MessageBox.Show($"确认要点动距离 {distance} mm 吗?", "确认点动", MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes)
+                    {
+                        return;
+                    }
+                }
+                Robot.Timeout = 6000000;
                 switch (items[0])
                 {
                     case "X+":
-                        await Robot.JogAsync("X", double.Parse(items[1]));
+                        await Robot.JogAsync("X", distance);
                         break;
                     case "X-":
-                        await Robot.JogAsync("X", -double.Parse(items[1]));
+                        await Robot.JogAsync("X", -distance);
                         break;
                     case "Y+":
-                        await Robot.JogAsync("Y", double.Parse(items[1]));
+                        await Robot.JogAsync("Y", distance);
                         break;
                     case "Y-":
-                        await Robot.JogAsync("Y", -double.Parse(items[1]));
+                        await Robot.JogAsync("Y", -distance);
                         break;
                     case "Z+":
-                        await Robot.JogAsync("Z", double.Parse(items[1]));
+                        await Robot.JogAsync("Z", distance);
                         break;
                     case "Z-":
-                        await Robot.JogAsync("Z", -double.Parse(items[1]));
+                        await Robot.JogAsync("Z", -distance);
                         break;
                     case "U+":
-                        await Robot.JogAsync("U", double.Parse(items[1]));
+                        await Robot.JogAsync("U", distance);
                         break;
                     case "U-":
-                        await Robot.JogAsync("U", -double.Parse(items[1]));
+                        await Robot.JogAsync("U", -distance);
                         break;
                     case "V+":
-                        await Robot.JogAsync("V", double.Parse(items[1]));
+                        await Robot.JogAsync("V", distance);
                         break;
                     case "V-":
-                        await Robot.JogAsync("V", -double.Parse(items[1]));
+                        await Robot.JogAsync("V", -distance);
                         break;
                     case "W+":
-                        await Robot.JogAsync("W", double.Parse(items[1]));
+                        await Robot.JogAsync("W", distance);
                         break;
                     case "W-":
-                        await Robot.JogAsync("W", -double.Parse(items[1]));
+                        await Robot.JogAsync("W", -distance);
                         break;
                     default:
                         break;

+ 3 - 3
TeamAAS-VM/Enums/MotionCommand.cs

@@ -12,8 +12,8 @@ namespace TeamAAS_VP.Enums
     /// </summary>
     public enum MotionCommand
     {
-        Go=0,
-        Jump=1,
-        Move=2,
+        Jump=0,
+        Go = 1,
+        Move =2,
     }
 }

+ 24 - 14
TeamAAS-VM/ViewModels/DebugMod/RobotManualStepViewModel.cs

@@ -1,4 +1,5 @@
-using Prism.Commands;
+using MathNet.Numerics;
+using Prism.Commands;
 using Prism.Events;
 using Prism.Ioc;
 using Prism.Mvvm;
@@ -236,45 +237,54 @@ namespace TeamAAS_VP.ViewModels.DebugMod
             if (Robot == null || !Robot.IsConnected) return;
             try
             {
-                Robot.Timeout = 6000000;
                 var items = ((string)obj).Split(':');
+                //如果移动距离大于10mm,则提示用户确认
+                double distance = double.Parse(items[1]);
+                if (Math.Abs(distance) >= 10)
+                {
+                    if (MessageBox.Show($"确认要点动距离 {distance} mm 吗?", "确认点动", MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes)
+                    {
+                        return;
+                    }
+                }
+                Robot.Timeout = 6000000;
                 switch (items[0])
                 {
                     case "X+":
-                        await Robot.JogAsync("X", double.Parse(items[1]));
+                        await Robot.JogAsync("X", distance);
                         break;
                     case "X-":
-                        await Robot.JogAsync("X", -double.Parse(items[1]));
+                        await Robot.JogAsync("X", -distance);
                         break;
                     case "Y+":
-                        await Robot.JogAsync("Y", double.Parse(items[1]));
+                        await Robot.JogAsync("Y", distance);
                         break;
                     case "Y-":
-                        await Robot.JogAsync("Y", -double.Parse(items[1]));
+                        await Robot.JogAsync("Y", -distance);
                         break;
                     case "Z+":
-                        await Robot.JogAsync("Z", double.Parse(items[1]));
+                        await Robot.JogAsync("Z", distance);
                         break;
                     case "Z-":
-                        await Robot.JogAsync("Z", -double.Parse(items[1]));
+                        await Robot.JogAsync("Z", -distance);
                         break;
                     case "U+":
-                        await Robot.JogAsync("U", double.Parse(items[1]));
+                        await Robot.JogAsync("U", distance);
                         break;
                     case "U-":
-                        await Robot.JogAsync("U", -double.Parse(items[1]));
+                        await Robot.JogAsync("U", -distance);
                         break;
                     case "V+":
-                        await Robot.JogAsync("V", double.Parse(items[1]));
+                        await Robot.JogAsync("V", distance);
                         break;
                     case "V-":
-                        await Robot.JogAsync("V", -double.Parse(items[1]));
+                        await Robot.JogAsync("V", -distance);
                         break;
                     case "W+":
-                        await Robot.JogAsync("W", double.Parse(items[1]));
+                        await Robot.JogAsync("W", distance);
                         break;
                     case "W-":
-                        await Robot.JogAsync("W", -double.Parse(items[1]));
+                        await Robot.JogAsync("W", -distance);
                         break;
                     default:
                         break;

+ 55 - 38
TeamAAS-VM/ViewModels/Product/PlcPointParamsViewModel.cs

@@ -322,7 +322,7 @@ namespace TeamAAS_VP.ViewModels.Product
 
         private DelegateCommand _DeletePointCommand;
         public DelegateCommand DeletePointCommand =>
-            _DeletePointCommand ?? (_DeletePointCommand = new DelegateCommand(ExecuteDeletePointCommand, CanExecuteDeletePointCommand).ObservesProperty(()=>SelectedPointInDataGrid));
+            _DeletePointCommand ?? (_DeletePointCommand = new DelegateCommand(ExecuteDeletePointCommand, CanExecuteDeletePointCommand).ObservesProperty(() => SelectedPointInDataGrid));
 
         private DelegateCommand _MovePointUpCommand;
         public DelegateCommand MovePointUpCommand => _MovePointUpCommand ?? (_MovePointUpCommand = new DelegateCommand(ExecuteMovePointUpCommand, CanMovePointUp));
@@ -412,45 +412,56 @@ namespace TeamAAS_VP.ViewModels.Product
             if (Robot == null || !Robot.IsConnected) return;
             try
             {
-                Robot.Timeout = 6000000;
                 var items = ((string)obj).Split(':');
+                //如果移动距离大于10mm,则提示用户确认
+                double distance = double.Parse(items[1]);
+                if (Math.Abs(distance) >= 10)
+                {
+                    if (MessageBox.Show($"确认要点动距离 {distance} mm 吗?", "确认点动", MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes)
+                    {
+                        return;
+                    }
+                }
+
+                Robot.Timeout = 6000000;
+
                 switch (items[0])
                 {
                     case "X+":
-                        await Robot.JogAsync("X", double.Parse(items[1]));
+                        await Robot.JogAsync("X", distance);
                         break;
                     case "X-":
-                        await Robot.JogAsync("X", -double.Parse(items[1]));
+                        await Robot.JogAsync("X", -distance);
                         break;
                     case "Y+":
-                        await Robot.JogAsync("Y", double.Parse(items[1]));
+                        await Robot.JogAsync("Y", distance);
                         break;
                     case "Y-":
-                        await Robot.JogAsync("Y", -double.Parse(items[1]));
+                        await Robot.JogAsync("Y", -distance);
                         break;
                     case "Z+":
-                        await Robot.JogAsync("Z", double.Parse(items[1]));
+                        await Robot.JogAsync("Z", distance);
                         break;
                     case "Z-":
-                        await Robot.JogAsync("Z", -double.Parse(items[1]));
+                        await Robot.JogAsync("Z", -distance);
                         break;
                     case "U+":
-                        await Robot.JogAsync("U", double.Parse(items[1]));
+                        await Robot.JogAsync("U", distance);
                         break;
                     case "U-":
-                        await Robot.JogAsync("U", -double.Parse(items[1]));
+                        await Robot.JogAsync("U", -distance);
                         break;
                     case "V+":
-                        await Robot.JogAsync("V", double.Parse(items[1]));
+                        await Robot.JogAsync("V", distance);
                         break;
                     case "V-":
-                        await Robot.JogAsync("V", -double.Parse(items[1]));
+                        await Robot.JogAsync("V", -distance);
                         break;
                     case "W+":
-                        await Robot.JogAsync("W", double.Parse(items[1]));
+                        await Robot.JogAsync("W", distance);
                         break;
                     case "W-":
-                        await Robot.JogAsync("W", -double.Parse(items[1]));
+                        await Robot.JogAsync("W", -distance);
                         break;
                     default:
                         break;
@@ -477,18 +488,18 @@ namespace TeamAAS_VP.ViewModels.Product
             {
                 return;
             }
-            if (SelectedPoint==null)
+            if (SelectedPoint == null)
             {
                 return;
             }
             var values = (object[])parameter;
             var point = new RPoint()
             {
-                X= SelectedPoint.X_Position,
-                Y= SelectedPoint.Y_Position,
-                Z= SelectedPoint.Z_Position_Start,
-                U=SelectedPoint.U_Position,
-                V= SelectedPoint.R_Position,
+                X = SelectedPoint.X_Position,
+                Y = SelectedPoint.Y_Position,
+                Z = SelectedPoint.Z_Position_Start,
+                U = SelectedPoint.U_Position,
+                V = SelectedPoint.R_Position,
             };
             MotionCommand motionCmd = (MotionCommand)values[1];
             if (Robot == null || !Robot.IsConnected) return;
@@ -528,6 +539,12 @@ namespace TeamAAS_VP.ViewModels.Product
 
             try
             {
+                //弹窗用户是否确认要示教该点位
+                if (MessageBox.Show($"确认要示教点位 {SelectedPoint.Number} 吗?", "示教点位", MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes)
+                {
+                    return;
+                }
+
                 var curpos = await Robot.GetRobotPosAsync();
                 SelectedPoint.X_Position = curpos.X;
                 SelectedPoint.Y_Position = curpos.Y;
@@ -664,7 +681,7 @@ namespace TeamAAS_VP.ViewModels.Product
                 case 0:
 
                     Points = SelectProduct.PickCameraPoints;
-                    PickPoints= SelectProduct.PickPoints;
+                    PickPoints = SelectProduct.PickPoints;
                     break;
                 case 1:
                     Points = SelectProduct.PickPoints;
@@ -845,12 +862,12 @@ namespace TeamAAS_VP.ViewModels.Product
                                     Number = startNumber + i,
                                     X_Position = point.X,
                                     Y_Position = point.Y,
-                                    X_Velocity=100,
-                                    Y_Velocity=100,
-                                    Z_Velocity_Start=100,
-                                    Z_Velocity_Stop=100,
-                                    U_Velocity=100,
-                                    R_Velocity=100,
+                                    X_Velocity = 100,
+                                    Y_Velocity = 100,
+                                    Z_Velocity_Start = 100,
+                                    Z_Velocity_Stop = 100,
+                                    U_Velocity = 100,
+                                    R_Velocity = 100,
                                 });
                             }
                         }
@@ -1154,13 +1171,13 @@ namespace TeamAAS_VP.ViewModels.Product
 
                 //对锁付点的批量设置进行初始化
                 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;
+                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)
             {
@@ -1199,7 +1216,7 @@ namespace TeamAAS_VP.ViewModels.Product
             set { SetProperty(ref _SelectedCameraForPickPoint, value); }
         }
 
-        
+
         private ObservableCollection<PlcPoint> _PickPoints = new ObservableCollection<PlcPoint>();
         /// <summary>
         /// 取料点位集合
@@ -1224,7 +1241,7 @@ namespace TeamAAS_VP.ViewModels.Product
         private DelegateCommand _AutoCorrectPickPointCommand;
         public DelegateCommand AutoCorrectPickPointCommand =>
             _AutoCorrectPickPointCommand ?? (_AutoCorrectPickPointCommand = new DelegateCommand(ExecuteAutoCorrectPickPointCommand, CanExecuteAutoCorrectPickPointCommand)
-            .ObservesProperty(()=> SelectedCameraForPickPoint).ObservesProperty(() => SelectedPickPoint).ObservesProperty(() => SelectProcedure).ObservesProperty(() => IsExecutingAutoCorrectPickPoint));
+            .ObservesProperty(() => SelectedCameraForPickPoint).ObservesProperty(() => SelectedPickPoint).ObservesProperty(() => SelectProcedure).ObservesProperty(() => IsExecutingAutoCorrectPickPoint));
 
         //
         private bool _IsExecutingAutoCorrectPickPoint = false;
@@ -1273,7 +1290,7 @@ namespace TeamAAS_VP.ViewModels.Product
 
                 var _cts = new CancellationTokenSource();
                 // 2. 执行拍照并获取识别结果
-                var recognitionResult =await _remoteCommandService.ExecutePhotoGetSinglePoint(SelectProcedure, null, new double[] { rpoint.X, rpoint.Y, 0 }, _cts.Token);
+                var recognitionResult = await _remoteCommandService.ExecutePhotoGetSinglePoint(SelectProcedure, null, new double[] { rpoint.X, rpoint.Y, 0 }, _cts.Token);
                 if (!recognitionResult.IsSucceed)
                 {
                     if (DialogHost.IsDialogOpen("RootDialog"))
@@ -1310,7 +1327,7 @@ namespace TeamAAS_VP.ViewModels.Product
 
         bool CanExecuteAutoCorrectPickPointCommand()
         {
-            return SelectedCameraForPickPoint!=null && SelectedPickPoint!=null && SelectProcedure!=null && !IsExecutingAutoCorrectPickPoint;
+            return SelectedCameraForPickPoint != null && SelectedPickPoint != null && SelectProcedure != null && !IsExecutingAutoCorrectPickPoint;
         }
 
         #endregion