徐孝锋 8 月之前
父節點
當前提交
14b6916cdd

+ 75 - 1
TeamAAS-VM/Core/Management.cs

@@ -936,6 +936,7 @@ namespace TeamAAS_VP.Core
             nodeValues.Add(addressConfig.Out_FixedCameraPickNum.Address, (Int16)systemConfiguration.FixedCameraPickNum);
             nodeValues.Add(addressConfig.Out_FixedCameraPutNum.Address, (Int16)systemConfiguration.FixedCameraPutNum);
             nodeValues.Add(addressConfig.Out_FixedCameracheckNum.Address, (Int16)systemConfiguration.FixedCameracheckNum);
+            nodeValues.Add(addressConfig.Out_ScrewTeachNum.Address, (Int16)systemConfiguration.ScrewTeachNum);
 
             var res = await plc.WriteNodesAsync(nodeValues);
         }
@@ -963,6 +964,8 @@ namespace TeamAAS_VP.Core
                 addressConfig.In_WorkDone.Address,
                 addressConfig.In_MesCheck.Address,
                 addressConfig.In_RequestPosition.Address,
+                addressConfig.In_ScrewTeachExe.Address,
+                addressConfig.In_PickINC.Address,
             };
 
             //订阅PLC地址变化
@@ -1086,7 +1089,7 @@ namespace TeamAAS_VP.Core
                             if (robot == null)
                             {
                                 SendTaskMessage($"未找到机器人,无法执行上相机锁附/组装拍照视觉任务", MessageLevel.Alarm);
-                                await plc.WriteNodeAsync(addressConfig.Out_UpCameraPutStatus.Address, (Int16)2);
+                                await plc.WriteNodeAsync(addressConfig.Out_DownCameraStatus.Address, (Int16)2);
                                 return;
 
                             }
@@ -1118,6 +1121,64 @@ namespace TeamAAS_VP.Core
                         }
                     }
                 }
+                // 触发下相机拍照披头
+                if (addressConfig.In_ScrewTeachExe.Address.Contains(tuple.nodeId))
+                {
+                    if (tuple.value is bool state)
+                    {
+                        if (state)
+                        {
+                            SendTaskMessage($"触发下相机拍照...", MessageLevel.Debug);
+                            //相机的编号
+                            Int16 cameraIndex = plc.ReadNode<Int16>(addressConfig.In_DowmCameraNum.Address);
+                            SendTaskMessage($"编号:{cameraIndex}", MessageLevel.Info);
+
+                            // 获取流程
+                            var process = _productService.GetCurrentProductProcedureModelById(currentProduct.FixedUpCamera1ProcedureId);
+                            if (process == null)
+                            {
+                                SendTaskMessage($"固定向上相机1视觉流程,流程ID:{currentProduct.FixedUpCamera1ProcedureId}", MessageLevel.Alarm);
+                                await plc.WriteNodeAsync(addressConfig.Out_ScrewTeachOk.Address, (Int16)2);
+                                return;
+                            }
+
+                            // 获取机器人当前坐标
+                            var robot = _robotService.GetAllRobots().FirstOrDefault();
+                            if (robot == null)
+                            {
+                                SendTaskMessage($"未找到机器人,无法执行上相机锁附/组装拍照视觉任务", MessageLevel.Alarm);
+                                await plc.WriteNodeAsync(addressConfig.Out_ScrewTeachOk.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)
+                            {
+                                //披头偏差
+                                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_ScrewTeachOk.Address, (Int16)1);
+                                return;
+                            }
+                            else
+                            {
+                                await plc.WriteNodeAsync(addressConfig.Out_ScrewTeachOk.Address, (Int16)2);
+                                return;
+                            }
+                        }
+                        else
+                        {
+                            SendTaskMessage($"触发下相机拍照信号已关闭", MessageLevel.Alarm);
+                            await plc.WriteNodeAsync(addressConfig.Out_ScrewTeachOk.Address, (Int16)0);
+                        }
+                    }
+                }
                 // 触发上相机取料拍照
                 else if (addressConfig.In_UpCameraPickExe.Address.Contains(tuple.nodeId))
                 {
@@ -1430,6 +1491,19 @@ namespace TeamAAS_VP.Core
                         }
                     }
                 }
+                // 螺丝供料器螺丝递减
+                else if (addressConfig.In_PickINC.Address.Contains(tuple.nodeId))
+                {
+                    if (tuple.value is bool state)
+                    {
+                        if (state)
+                        {
+                            SendTaskMessage($"螺丝供料器...", MessageLevel.Info);
+                            await plc.WriteNodeAsync(addressConfig.In_PickINC.Address, false);
+                        }
+                        
+                    }
+                }
             }
             catch (Exception ex)
             {

+ 5 - 2
TeamAAS-VM/Core/Robots/XYZU_Robot.cs

@@ -373,8 +373,11 @@ namespace TeamAAS_VP.Core.Robots
 
         public bool Move(RPoint position) => Go(position);
         public Task<bool> MoveAsync(RPoint position) => GoAsync(position);
-        public bool Jump(RPoint position, double? LimZ) => Go(position);
-        public Task<bool> JumpAsync(RPoint position, double? LimZ) => GoAsync(position);
+        public bool Jump(RPoint position, double? LimZ)
+        {
+            return CalibMotion(position,LimZ);
+        }
+        public Task<bool> JumpAsync(RPoint position, double? LimZ) => CalibMotionAsync(position,LimZ);
         public bool Jog(string axis, double distance)
         {
             //»ñÈ¡µ±Ç°»úÆ÷ÈË×ø±ê

+ 63 - 0
TeamAAS-VM/Models/PLC/PlcAddressConfig.cs

@@ -267,6 +267,27 @@ namespace TeamAAS_VP.Models.PLC
             get { return _CheckCamera; }
             set { SetProperty(ref _CheckCamera, value); }
         }
+
+        private PlcAddress _Out_ScrewTeachNum;
+        /// <summary>
+        /// 披头矫正的模式,1:初始化时矫正,2:每个产品矫正一次,3:每颗螺丝矫正一次
+        /// </summary>
+        public PlcAddress Out_ScrewTeachNum
+        {
+            get { return _Out_ScrewTeachNum; }
+            set { SetProperty(ref _Out_ScrewTeachNum, value); }
+        }
+
+        private PlcAddress _Out_ScrewTeachOk;
+        /// <summary>
+        /// 下相机矫正披头的结果,1:OK,2:NG
+        /// </summary>
+        public PlcAddress Out_ScrewTeachOk
+        {
+            get { return _Out_ScrewTeachOk; }
+            set { SetProperty(ref _Out_ScrewTeachOk, value); }
+        }
+
         #endregion
 
         #region 从PLC读取的地址
@@ -480,6 +501,27 @@ namespace TeamAAS_VP.Models.PLC
             set { SetProperty(ref _In_PressureValue, value); }
         }
 
+        private PlcAddress _In_ScrewTeachExe;
+        /// <summary>
+        /// 触发披头视觉矫正
+        /// </summary>
+        public PlcAddress In_ScrewTeachExe
+        {
+            get { return _In_ScrewTeachExe; }
+            set { SetProperty(ref _In_ScrewTeachExe, value); }
+        }
+
+        private PlcAddress _In_PickINC;
+        /// <summary>
+        /// 取一颗螺丝出发信号
+        /// </summary>
+        public PlcAddress In_PickINC
+        {
+            get { return _In_PickINC; }
+            set { SetProperty(ref _In_PickINC, value); }
+        }
+
+
         #endregion
 
         public PlcAddressConfig()
@@ -720,6 +762,17 @@ namespace TeamAAS_VP.Models.PLC
             Out_CheckCamera.Feeder.Address = "ns=4;s=DB_Communication|FromPC.Point_CheckCamera[{0}].Feeder";
             Out_CheckCamera.ScrewProNum.Address = "ns=4;s=DB_Communication|FromPC.Point_CheckCamera[{0}].ScrewProNum";
 
+            Out_ScrewTeachNum = Ensure(Out_ScrewTeachNum);
+            Out_ScrewTeachNum.Address = "ns=4;s=DB_Communication|FromPC.ScrewTeachNum";
+            Out_ScrewTeachNum.DataType = "int16";
+            Out_ScrewTeachNum.Description = "披头矫正的模式,1:初始化时矫正,2:每个产品矫正一次,3:每颗螺丝矫正一次";
+
+            Out_ScrewTeachOk = Ensure(Out_ScrewTeachOk);
+            Out_ScrewTeachOk.Address = "ns=4;s=DB_Communication|FromPC.ScrewTeachOK";
+            Out_ScrewTeachOk.DataType = "int16";
+            Out_ScrewTeachOk.Description = "下相机矫正披头的结果,1:OK,2:NG";
+
+
             // 4. In_* 默认(假定从 PLC 读到 PC,使用 ToPC 前缀)
             In_Code = Ensure(In_Code);
             In_Code.Address = "ns=4;s=DB_Communication|ToPC.Mes[0].Code";
@@ -826,6 +879,16 @@ namespace TeamAAS_VP.Models.PLC
             In_PressureValue.DataType = "float";
             In_PressureValue.Description = "压力值";
 
+            In_ScrewTeachExe = Ensure(In_ScrewTeachExe);
+            In_ScrewTeachExe.Address = "ns=4;s=DB_Communication|ToPC.ScrewTeachExe";
+            In_ScrewTeachExe.DataType = "bool";
+            In_ScrewTeachExe.Description = "触发披头视觉矫正";
+
+            In_PickINC = Ensure(In_PickINC);
+            In_PickINC.Address = "ns=4;s=DB_Communication|ToPC.PickINC";
+            In_PickINC.DataType = "bool";
+            In_PickINC.Description = "取一颗螺丝触发信号";
+
             // 说明:若项目中 PlcAddress 的实际属性名或类型与此不同(例如使用枚举、不同字段名),
             // 请根据实际类型调整赋值。本方法主要提供合理的默认字符串地址、数据类型及描述,便于后续从配置覆盖。
         }

+ 10 - 0
TeamAAS-VM/Models/SystemConfiguration.cs

@@ -186,6 +186,16 @@ namespace TeamAAS_VP.Models
             set => SetProperty(ref _FixedCameracheckNum, value);
         }
 
+        private Int16 _ScrewTeachNum = 0;
+        /// <summary>
+        /// 披头矫正的模式,1:初始化时矫正,2:每个产品矫正一次,3:每颗螺丝矫正一次
+        /// </summary>
+        public Int16 ScrewTeachNum
+        {
+            get => _ScrewTeachNum;
+            set => SetProperty(ref _ScrewTeachNum, value);
+        }
+
         /// <summary>
         /// 字体大小子设置
         /// </summary>

+ 12 - 1
TeamAAS-VM/ViewModels/SettingViewModel.cs

@@ -1317,6 +1317,7 @@ namespace TeamAAS_VP.ViewModels
                 FixedCameraPickNum = sys.FixedCameraPickNum;
                 FixedCameraPutNum = sys.FixedCameraPutNum;
                 FixedCameracheckNum = sys.FixedCameracheckNum;
+                ScrewTeachNum = sys.ScrewTeachNum;
             }
 
             if (isFirstLoad)
@@ -1469,6 +1470,16 @@ namespace TeamAAS_VP.ViewModels
             set => SetProperty(ref _FixedCameracheckNum, value);
         }
 
+        private Int16 _ScrewTeachNum = 0;
+        /// <summary>
+        /// 披头矫正的模式,1:初始化时矫正,2:每个产品矫正一次,3:每颗螺丝矫正一次
+        /// </summary>
+        public Int16 ScrewTeachNum
+        {
+            get => _ScrewTeachNum;
+            set => SetProperty(ref _ScrewTeachNum, value);
+        }
+
         async void ExecuteSaveSystemParametersCommand()
         {
             var view = new ShowMessage($"AAS", "是否保存系统参数?");
@@ -1487,7 +1498,7 @@ namespace TeamAAS_VP.ViewModels
                     sysConfig.FixedCameraPickNum = FixedCameraPickNum;
                     sysConfig.FixedCameraPutNum = FixedCameraPutNum;
                     sysConfig.FixedCameracheckNum = FixedCameracheckNum;
-
+                    sysConfig.ScrewTeachNum= ScrewTeachNum;
 
                     _configService.SaveSystemConfiguration(sysConfig);
                     await management.WriteSystemParameterToPlcAsync(sysConfig);

+ 4 - 0
TeamAAS-VM/Views/HomeView.xaml

@@ -149,6 +149,10 @@
                                         </DataTemplate>
                                     </DataGridTemplateColumn.CellTemplate>
                                 </DataGridTemplateColumn>
+                                <DataGridTextColumn Header="压力"
+                                                    Binding="{Binding Pressure, StringFormat={}{0:F3}}"
+                                                    Width="auto"
+                                                    IsReadOnly="True" />
                                 <DataGridTextColumn Header="详情"
                                                     Binding="{Binding ResultDetails}"
                                                     Width="auto"

+ 17 - 1
TeamAAS-VM/Views/SettingView.xaml

@@ -2047,6 +2047,7 @@
                             <RowDefinition Height="Auto" />
                             <RowDefinition Height="Auto" />
                             <RowDefinition Height="Auto" />
+                            <RowDefinition Height="Auto" />
                             <RowDefinition Height="40" />
                         </Grid.RowDefinitions>
 
@@ -2192,9 +2193,24 @@
                                            Minimum="0"
                                            Maximum="100"
                                            FontSize="{DynamicResource Font.Size.Body3}" />
+                        <!-- 披头矫正的模式 -->
+                        <TextBlock Grid.Row="9"
+                                   Grid.Column="0"
+                                   Style="{StaticResource MaterialDesignSubtitle1TextBlock}"
+                                   VerticalAlignment="Center"
+                                   HorizontalAlignment="Right"
+                                   Margin="0,6,10,6"
+                                   Text="披头矫正的模式:" />
+                        <mah:NumericUpDown Grid.Row="9"
+                                           Grid.Column="1"
+                                           Margin="0,6"
+                                           Value="{Binding ScrewTeachNum,Mode=TwoWay}"
+                                           Minimum="0"
+                                           Maximum="100"
+                                           FontSize="{DynamicResource Font.Size.Body3}" />
 
                         <!-- 保存按钮 -->
-                        <StackPanel Grid.Row="9"
+                        <StackPanel Grid.Row="10"
                                     Grid.ColumnSpan="3"
                                     Orientation="Horizontal"
                                     HorizontalAlignment="Right"