Browse Source

锁付点位批量设置与拍照点CAD导入功能增强

本次提交实现了锁付点位参数的批量设置功能,支持批量配置Z轴、速度、供料器编号等参数,并新增锁付拍照点产品坐标的手动输入与CAD导入。界面同步优化,提升了操作便捷性和批量管理效率。
孝锋 徐 8 months ago
parent
commit
61c92b0f32

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

@@ -236,6 +236,26 @@ namespace TeamAAS_VP.Models
             set { SetProperty(ref _ScrewCameraPoints, value); }
         }
 
+        private PlcPoint _ScrewCameraLocalPos1= new PlcPoint();
+        /// <summary>
+        /// 锁付拍照点1对应的产品坐标系中的点位
+        /// </summary>
+        public PlcPoint ScrewCameraLocalPos1
+        {
+            get { return _ScrewCameraLocalPos1; }
+            set { SetProperty(ref _ScrewCameraLocalPos1, value); }
+        }
+
+        private PlcPoint _ScrewCameraLocalPos2 = new PlcPoint();
+        /// <summary>
+        /// 锁付拍照点2对应的产品坐标系中的点位
+        /// </summary>
+        public PlcPoint ScrewCameraLocalPos2
+        {
+            get { return _ScrewCameraLocalPos2; }
+            set { SetProperty(ref _ScrewCameraLocalPos2, value); }
+        }
+
         private ObservableCollection<PlcPoint> _ScrewPoints = new ObservableCollection<PlcPoint>();
         /// <summary>
         /// 锁附点位参数集合

+ 208 - 1
TeamAAS-VM/ViewModels/Product/PlcPointParamsViewModel.cs

@@ -184,6 +184,87 @@ namespace TeamAAS_VP.ViewModels.Product
                 SetProperty(ref _SelectProcedure, value);
             }
         }
+
+        private float _LockPointStartZ;
+        /// <summary>
+        /// 批量设置锁付点的起始Z坐标
+        /// </summary>
+        public float LockPointStartZ
+        {
+            get { return _LockPointStartZ; }
+            set { SetProperty(ref _LockPointStartZ, value); }
+        }
+
+        private float _LockZDepth;
+        /// <summary>
+        /// 批量设置锁付点Z深度
+        /// </summary>
+        public float LockZDepth
+        {
+            get { return _LockZDepth; }
+            set { SetProperty(ref _LockZDepth, value); }
+        }
+
+        private int _LockXSpeed;
+        /// <summary>
+        /// 批量设置锁付点X轴速度
+        /// </summary>
+        public int LockXSpeed
+        {
+            get { return _LockXSpeed; }
+            set { SetProperty(ref _LockXSpeed, value); }
+        }
+
+        private int _LockYSpeed;
+        /// <summary>
+        /// 批量设置锁付点Y轴速度
+        /// </summary>
+        public int LockYSpeed
+        {
+            get { return _LockYSpeed; }
+            set { SetProperty(ref _LockYSpeed, value); }
+        }
+
+        private int _LockZSpeed;
+        /// <summary>
+        /// 批量设置锁付点Z轴速度
+        /// </summary>
+        public int LockZSpeed
+        {
+            get { return _LockZSpeed; }
+            set { SetProperty(ref _LockZSpeed, value); }
+        }
+
+        private int _LockZDescendSpeed;
+        /// <summary>
+        /// 批量设置锁付点Z轴下降速度
+        /// </summary>
+        public int LockZDescendSpeed
+        {
+            get { return _LockZDescendSpeed; }
+            set { SetProperty(ref _LockZDescendSpeed, value); }
+        }
+
+        private Int16 _LockFeederNumber;
+        /// <summary>
+        /// 批量设置锁付点供料器编号
+        /// </summary>
+        public Int16 LockFeederNumber
+        {
+            get { return _LockFeederNumber; }
+            set { SetProperty(ref _LockFeederNumber, value); }
+        }
+
+        private Int16 _LockScrewProgramNumber;
+        /// <summary>
+        /// 批量设置锁付点螺丝程序编号
+        /// </summary>
+        public Int16 LockScrewProgramNumber
+        {
+            get { return _LockScrewProgramNumber; }
+            set { SetProperty(ref _LockScrewProgramNumber, value); }
+        }
+
         #endregion
 
         #region 命令
@@ -238,7 +319,7 @@ namespace TeamAAS_VP.ViewModels.Product
 
         private DelegateCommand _DeletePointCommand;
         public DelegateCommand DeletePointCommand =>
-            _DeletePointCommand ?? (_DeletePointCommand = new DelegateCommand(ExecuteDeletePointCommand));
+            _DeletePointCommand ?? (_DeletePointCommand = new DelegateCommand(ExecuteDeletePointCommand, CanExecuteDeletePointCommand).ObservesProperty(()=>SelectedPointInDataGrid));
 
         private DelegateCommand _MovePointUpCommand;
         public DelegateCommand MovePointUpCommand => _MovePointUpCommand ?? (_MovePointUpCommand = new DelegateCommand(ExecuteMovePointUpCommand, CanMovePointUp));
@@ -250,6 +331,28 @@ namespace TeamAAS_VP.ViewModels.Product
         public DelegateCommand ImportCadPointCommand =>
             _ImportCadPointCommand ?? (_ImportCadPointCommand = new DelegateCommand(ExecuteImportCadPointCommand));
 
+        private DelegateCommand _ImportCadLockCameraPointCommand;
+        public DelegateCommand ImportCadLockCameraPointCommand =>
+            _ImportCadLockCameraPointCommand ?? (_ImportCadLockCameraPointCommand = new DelegateCommand(ExecuteImportCadLockCameraPointCommand));
+
+        private DelegateCommand _ApplyLockPointStartZCommand;
+        public DelegateCommand ApplyLockPointStartZCommand =>
+            _ApplyLockPointStartZCommand ?? (_ApplyLockPointStartZCommand = new DelegateCommand(ExecuteApplyLockPointStartZCommand));
+
+        private DelegateCommand _ApplyLockPointDepthCommand;
+        public DelegateCommand ApplyLockPointDepthCommand =>
+            _ApplyLockPointDepthCommand ?? (_ApplyLockPointDepthCommand = new DelegateCommand(ExecuteApplyLockPointDepthCommand));
+
+        private DelegateCommand _ApplyLockPointSpeedCommand;
+        public DelegateCommand ApplyLockPointSpeedCommand =>
+            _ApplyLockPointSpeedCommand ?? (_ApplyLockPointSpeedCommand = new DelegateCommand(ExecuteApplyLockPointSpeedCommand));
+
+        private DelegateCommand _ApplyLockPointFeederAndScrewProgramCommand;
+        public DelegateCommand ApplyLockPointFeederAndScrewProgramCommand =>
+            _ApplyLockPointFeederAndScrewProgramCommand ?? (_ApplyLockPointFeederAndScrewProgramCommand = new DelegateCommand(ExecuteApplyLockPointFeederAndScrewProgramCommand));
+
+        
+
         #endregion
 
         #region 事件
@@ -635,6 +738,11 @@ namespace TeamAAS_VP.ViewModels.Product
             _MovePointDownCommand?.RaiseCanExecuteChanged();
         }
 
+        bool CanExecuteDeletePointCommand()
+        {
+            return SelectedPointInDataGrid != null;
+        }
+
         private bool CanMovePointUp()
         {
             return SelectedPointInDataGrid != null && Points.IndexOf(SelectedPointInDataGrid) > 0;
@@ -760,6 +868,105 @@ namespace TeamAAS_VP.ViewModels.Product
                 _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 });
             }
         }
+
+        /// <summary>
+        /// 导入锁付拍照引导的产品坐标系中的点位
+        /// </summary>
+        async void ExecuteImportCadLockCameraPointCommand()
+        {
+            try
+            {
+                var view = new DxfView();
+
+                //show the dialog
+                var result = await DialogHost.Show(view, "RootDialog", null, null, null);
+                if (result != null)
+                {
+                    var cadPoints = view.Points;
+                    if (cadPoints != null && cadPoints.Count == 2)
+                    {
+                        //弹窗提示用户是否确认要导入锁付拍照引导的起始点和结束点
+                        if (MessageBox.Show($"确认要导入锁付拍照引导的起始点和结束点吗?", "导入点位", MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes)
+                        {
+                            return;
+                        }
+                        //导入点位
+                        //起始点
+                        var startPoint = cadPoints[0];
+                        SelectProduct.ScrewCameraLocalPos1.X_Position = startPoint.X;
+                        SelectProduct.ScrewCameraLocalPos1.Y_Position = startPoint.Y;
+
+                        //结束点
+                        var endPoint = cadPoints[1];
+                        SelectProduct.ScrewCameraLocalPos2.X_Position = endPoint.X;
+                        SelectProduct.ScrewCameraLocalPos2.Y_Position = endPoint.Y;
+
+                        _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = $"{Lang.完成}!", Duration = 0.4 });
+                    }
+                    else
+                    {
+                        _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = "请导入两个点,分别为锁付拍照引导的起始点和结束点!", Duration = 1 });
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.WriteLogError("导入CAD点位时出错!", ex);
+                _eventAggregator.GetEvent<SnackbarMessageNotification>().Publish(new MessageParameter() { Msg = ex.Message, Duration = 1 });
+            }
+        }
+
+        /// <summary>
+        /// 批量设置锁付点的供料器编号和螺丝程序编号
+        /// </summary>
+        void ExecuteApplyLockPointFeederAndScrewProgramCommand()
+        {
+            //遍历所有点位,设置供料器编号和螺丝程序编号
+            foreach (var point in Points)
+            {
+                point.Feeder = LockFeederNumber;
+                point.ScrewProNum = LockScrewProgramNumber;
+            }
+        }
+
+        /// <summary>
+        /// 批量设置锁付点的速度
+        /// </summary>
+        void ExecuteApplyLockPointSpeedCommand()
+        {
+            //遍历所有点位,设置速度
+            foreach (var point in Points)
+            {
+                point.X_Velocity = LockXSpeed;
+                point.Y_Velocity = LockYSpeed;
+                point.Z_Velocity_Start = LockZSpeed;
+                point.Z_Velocity_Stop = LockZDescendSpeed;
+            }
+        }
+
+        /// <summary>
+        /// 批量设置锁付点的Z深度
+        /// </summary>
+        void ExecuteApplyLockPointDepthCommand()
+        {
+            //遍历所有点位,设置Z深度
+            foreach (var point in Points)
+            {
+                point.Z_Position_Stop = point.Z_Position_Start - LockZDepth;
+            }
+        }
+
+        /// <summary>
+        /// 批量设置锁付点的起始Z坐标
+        /// </summary>
+        void ExecuteApplyLockPointStartZCommand()
+        {
+            //遍历所有点位,设置起始Z坐标
+            foreach (var point in Points)
+            {
+                point.Z_Position_Start = LockPointStartZ;
+            }
+        }
         #endregion
 
         #region 继承

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

@@ -139,6 +139,7 @@
                         <ColumnDefinition Width="auto" />
                     </Grid.ColumnDefinitions>
                     <DockPanel Grid.Column="0">
+                        <!--选项列表-->
                         <ListBox Height="80"
                                  DockPanel.Dock="Top"
                                  SelectedIndex="{Binding SelectedIndex}"
@@ -221,31 +222,58 @@
                                 <TextBlock Text="复检点位" />
                             </ListBoxItem>
                         </ListBox>
-
+                        <!--点位列表操作按钮面板-->
                         <StackPanel DockPanel.Dock="Bottom"
                                     Orientation="Horizontal">
                             <Button Content="添加点"
                                     Margin="5,2"
                                     MinWidth="80"
+                                    materialDesign:ButtonAssist.CornerRadius="5"
                                     Command="{Binding AddPointCommand}" />
                             <Button Content="删除点"
                                     Margin="5,2"
                                     MinWidth="80"
+                                    materialDesign:ButtonAssist.CornerRadius="5"
                                     Command="{Binding DeletePointCommand}" />
                             <Button Content="上移"
                                     Margin="5,2"
                                     MinWidth="80"
+                                    materialDesign:ButtonAssist.CornerRadius="5"
                                     Command="{Binding MovePointUpCommand}" />
                             <Button Content="下移"
                                     Margin="5,2"
                                     MinWidth="80"
+                                    materialDesign:ButtonAssist.CornerRadius="5"
                                     Command="{Binding MovePointDownCommand}" />
                             <Button Content="CAD导入点位"
                                     Margin="5,2"
                                     MinWidth="80"
-                                    Command="{Binding ImportCadPointCommand}" />
+                                    d:Visibility="Visible"
+                                    materialDesign:ButtonAssist.CornerRadius="5"
+                                    Command="{Binding ImportCadPointCommand}">
+                                <Button.Style>
+                                    <Style TargetType="Button" BasedOn="{StaticResource MaterialDesignRaisedDarkButton}">
+                                        <Setter Property="Visibility"
+                                                Value="Collapsed" />
+                                        <Style.Triggers>
+                                            <!-- 当 SelectedIndex == 0 时显示此面板 -->
+                                            <DataTrigger Binding="{Binding SelectedIndex}"
+                                                         Value="4">
+                                                <Setter Property="Visibility"
+                                                        Value="Visible" />
+                                            </DataTrigger>
+                                        </Style.Triggers>
+                                    </Style>
+                                </Button.Style>
+                            </Button>
                         </StackPanel>
+                        <Border BorderBrush="LightGray"
+                                BorderThickness="1"
+                                Height="1"
+                                DockPanel.Dock="Bottom" /> 
+
                         <DockPanel>
+                            <!--不同点位类型的操作面板-->
                             <StackPanel DockPanel.Dock="Bottom"
                                         Orientation="Vertical">
                                 <!--取料拍照点位面板-->
@@ -348,10 +376,274 @@
                                         </StackPanel>
                                     </ScrollViewer>
                                 </StackPanel>
-                                
-                                
-                                
+
+                                <!--锁付拍照面板-->
+                                <StackPanel x:Name="LockCameraPanel"
+                                            Orientation="Vertical"
+                                            d:Visibility="Visible">
+                                    <StackPanel.Style>
+                                        <Style TargetType="StackPanel">
+                                            <Setter Property="Visibility"
+                                                    Value="Collapsed" />
+                                            <Style.Triggers>
+                                                <!-- 当 SelectedIndex == 4 时显示此面板 -->
+                                                <DataTrigger Binding="{Binding SelectedIndex}"
+                                                             Value="3">
+                                                    <Setter Property="Visibility"
+                                                            Value="Visible" />
+                                                </DataTrigger>
+                                            </Style.Triggers>
+                                        </Style>
+                                    </StackPanel.Style>
+                                    <ScrollViewer HorizontalScrollBarVisibility="Auto"
+                                                  VerticalScrollBarVisibility="Disabled">
+                                        <StackPanel Orientation="Vertical">
+                                            <TextBlock Text="拍1锁多时,相机拍照位置对应的产品坐标系中位置" />
+                                            <StackPanel Orientation="Horizontal"
+                                                        HorizontalAlignment="Left">
+
+                                                <TextBlock Text="拍照1:"
+                                                           VerticalAlignment="Center" />
+                                                
+                                                <TextBlock Margin="5,0,0,0"
+                                                           VerticalAlignment="Center"
+                                                           Text="X:" />
+                                                <TextBox MinWidth="60"
+                                                         Text="{Binding SelectProduct.ScrewCameraLocalPos1.X_Position, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
+                                                <TextBlock Margin="5,0,0,0"
+                                                           VerticalAlignment="Center"
+                                                           Text="Y:" />
+                                                <TextBox MinWidth="60"
+                                                         Text="{Binding SelectProduct.ScrewCameraLocalPos1.Y_Position, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
+                                            </StackPanel>
+                                            <StackPanel Orientation="Horizontal"
+                                                        HorizontalAlignment="Left">
+
+                                                <TextBlock Text="拍照2:"
+                                                           VerticalAlignment="Center" />
+
+                                                <TextBlock Margin="5,0,0,0"
+                                                           VerticalAlignment="Center"
+                                                           Text="X:" />
+                                                <TextBox MinWidth="60"
+                                                         Text="{Binding SelectProduct.ScrewCameraLocalPos2.X_Position, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
+                                                <TextBlock Margin="5,0,0,0"
+                                                           VerticalAlignment="Center"
+                                                           Text="Y:" />
+                                                <TextBox MinWidth="60"
+                                                         Text="{Binding SelectProduct.ScrewCameraLocalPos2.Y_Position, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
+                                            </StackPanel>
+                                            <!--通过CAD导入点位按钮-->
+                                            <Button Content="通过CAD导入点位"
+                                                    Margin="0,5,0,0"
+                                                    MinWidth="100"
+                                                    HorizontalAlignment="Left"
+                                                    materialDesign:ButtonAssist.CornerRadius="5"
+                                                    Command="{Binding ImportCadLockCameraPointCommand}" />
+                                        </StackPanel>
+                                    </ScrollViewer>
+                                </StackPanel>
+
+                                <!--锁付点位面板-->
+                                <StackPanel x:Name="LockPointPanel"
+                                            Orientation="Vertical"
+                                            d:Visibility="Visible">
+                                    <StackPanel.Style>
+                                        <Style TargetType="StackPanel">
+                                            <Setter Property="Visibility"
+                                                    Value="Collapsed" />
+                                            <Style.Triggers>
+                                                <!-- 当 SelectedIndex == 4 时显示此面板 -->
+                                                <DataTrigger Binding="{Binding SelectedIndex}"
+                                                             Value="4">
+                                                    <Setter Property="Visibility"
+                                                            Value="Visible" />
+                                                </DataTrigger>
+                                            </Style.Triggers>
+                                        </Style>
+                                    </StackPanel.Style>
+                                    <ScrollViewer HorizontalScrollBarVisibility="Auto"
+                                                  VerticalScrollBarVisibility="Disabled">
+                                        <StackPanel Orientation="Vertical">
+                                            
+                                            <StackPanel Orientation="Horizontal"
+                                                        HorizontalAlignment="Left">
+                                                <TextBlock Text="批量设置所有锁付点的起始Z轴高度:" VerticalAlignment="Center"/>
+                                                <TextBlock Text="起始Z轴高度:"
+                                                           Margin="5,0,0,0"
+                                                           VerticalAlignment="Center" />
+                                                <mah:NumericUpDown Value="{Binding LockPointStartZ, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
+                                                                   Minimum="-9999.000"
+                                                                   Maximum="9999.000"
+                                                                   Interval="0.1"
+                                                                   StringFormat="F3"
+                                                                   MinWidth="60"
+                                                                   HorizontalAlignment="Stretch"
+                                                                   VerticalAlignment="Center"
+                                                                   Margin="0"
+                                                                   Padding="2" />
+                                                <TextBlock Margin="0"
+                                                           VerticalAlignment="Center"
+                                                           Text="mm" />
+                                                <!--应用按钮-->
+                                                <Button Content="应用"
+                                                        Margin="10,0,0,0"
+                                                        MinWidth="60"
+                                                        HorizontalAlignment="Left"
+                                                        materialDesign:ButtonAssist.CornerRadius="5"
+                                                        Command="{Binding ApplyLockPointStartZCommand}" />
+                                            </StackPanel>
+                                            <StackPanel Orientation="Horizontal"
+                                                        HorizontalAlignment="Left">
+                                                <TextBlock Text="批量设置所有锁付点的锁付深度:"
+                                                           VerticalAlignment="Center" />
+                                                <TextBlock Text="锁付深度:"
+                                                           Margin="5,0,0,0"
+                                                           VerticalAlignment="Center" />
+                                                <mah:NumericUpDown Value="{Binding LockZDepth, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
+                                                                   Minimum="-9999.000"
+                                                                   Maximum="9999.000"
+                                                                   Interval="0.1"
+                                                                   StringFormat="F3"
+                                                                   MinWidth="60"
+                                                                   HorizontalAlignment="Stretch"
+                                                                   VerticalAlignment="Center"
+                                                                   Margin="0"
+                                                                   Padding="2" />
+                                                <TextBlock Margin="0"
+                                                           VerticalAlignment="Center"
+                                                           Text="mm" />
+                                                <!--应用按钮-->
+                                                <Button Content="应用"
+                                                        Margin="10,0,0,0"
+                                                        MinWidth="60"
+                                                        HorizontalAlignment="Left"
+                                                        materialDesign:ButtonAssist.CornerRadius="5"
+                                                        Command="{Binding ApplyLockPointDepthCommand}" />
+                                            </StackPanel>
+                                            <StackPanel Orientation="Horizontal"
+                                                        HorizontalAlignment="Left">
+                                                <TextBlock Text="批量设置所有锁付点的各轴速度:"
+                                                           VerticalAlignment="Center" />
+                                                <TextBlock Text="X轴速度:"
+                                                           Margin="5,0,0,0"
+                                                           VerticalAlignment="Center" />
+                                                <mah:NumericUpDown Value="{Binding LockXSpeed, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
+                                                                   Minimum="0"
+                                                                   Maximum="20000"
+                                                                   Interval="1"
+                                                                   StringFormat="F1"
+                                                                   MinWidth="60"
+                                                                   HorizontalAlignment="Stretch"
+                                                                   VerticalAlignment="Center"
+                                                                   Margin="0"
+                                                                   Padding="2" />
+                                                <TextBlock Margin="0"
+                                                           VerticalAlignment="Center"
+                                                           Text="mm/s" />
+                                                <TextBlock Text="Y轴速度:"
+                                                           Margin="5,0,0,0"
+                                                           VerticalAlignment="Center" />
+                                                <mah:NumericUpDown Value="{Binding LockYSpeed, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
+                                                                   Minimum="0"
+                                                                   Maximum="20000"
+                                                                   Interval="1"
+                                                                   StringFormat="F1"
+                                                                   MinWidth="60"
+                                                                   HorizontalAlignment="Stretch"
+                                                                   VerticalAlignment="Center"
+                                                                   Margin="0"
+                                                                   Padding="2" />
+                                                <TextBlock Margin="0"
+                                                           VerticalAlignment="Center"
+                                                           Text="mm/s" />
+                                                <TextBlock Text="Z轴速度:"
+                                                           Margin="5,0,0,0"
+                                                           VerticalAlignment="Center" />
+                                                <mah:NumericUpDown Value="{Binding LockZSpeed, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
+                                                                   Minimum="0"
+                                                                   Maximum="20000"
+                                                                   Interval="1"
+                                                                   StringFormat="F1"
+                                                                   MinWidth="60"
+                                                                   HorizontalAlignment="Stretch"
+                                                                   VerticalAlignment="Center"
+                                                                   Margin="0"
+                                                                   Padding="2" />
+                                                <TextBlock Margin="0"
+                                                           VerticalAlignment="Center"
+                                                           Text="mm/s" />
+                                                <TextBlock Text="Z轴锁付下降速度:"
+                                                           Margin="5,0,0,0"
+                                                           VerticalAlignment="Center" />
+                                                <mah:NumericUpDown Value="{Binding LockZDescendSpeed, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
+                                                                   Minimum="0"
+                                                                   Maximum="20000"
+                                                                   Interval="1"
+                                                                   StringFormat="F1"
+                                                                   MinWidth="60"
+                                                                   HorizontalAlignment="Stretch"
+                                                                   VerticalAlignment="Center"
+                                                                   Margin="0"
+                                                                   Padding="2" />
+                                                <TextBlock Margin="0"
+                                                           VerticalAlignment="Center"
+                                                           Text="mm/s" />
+                                                <!--应用按钮-->
+                                                <Button Content="应用"
+                                                        Margin="10,0,0,0"
+                                                        MinWidth="60"
+                                                        HorizontalAlignment="Left"
+                                                        materialDesign:ButtonAssist.CornerRadius="5"
+                                                        Command="{Binding ApplyLockPointSpeedCommand}" />
+                                            </StackPanel>
+                                            <!--批量设置所有锁付点的供料器编号和电批程序编号-->
+                                            <StackPanel Orientation="Horizontal"
+                                                        HorizontalAlignment="Left">
+                                                <TextBlock Text="批量设置所有锁付点的供料器编号和电批程序编号:"
+                                                           VerticalAlignment="Center" />
+                                                <TextBlock Text="供料器编号:"
+                                                           Margin="5,0,0,0"
+                                                           VerticalAlignment="Center" />
+                                                <mah:NumericUpDown Value="{Binding LockFeederNumber, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
+                                                                   Minimum="0"
+                                                                   Maximum="9999"
+                                                                   Interval="1"
+                                                                   StringFormat="F0"
+                                                                   MinWidth="60"
+                                                                   HorizontalAlignment="Stretch"
+                                                                   VerticalAlignment="Center"
+                                                                   Margin="0"
+                                                                   Padding="2" />
+                                                <TextBlock Text="电批程序编号:"
+                                                           Margin="5,0,0,0"
+                                                           VerticalAlignment="Center" />
+                                                <mah:NumericUpDown Value="{Binding LockScrewProgramNumber, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
+                                                                   Minimum="0"
+                                                                   Maximum="100"
+                                                                   Interval="1"
+                                                                   StringFormat="F0"
+                                                                   MinWidth="60"
+                                                                   HorizontalAlignment="Stretch"
+                                                                   VerticalAlignment="Center"
+                                                                   Margin="0"
+                                                                   Padding="2" />
+                                                <!--应用按钮-->
+                                                <Button Content="应用"
+                                                        Margin="10,0,0,0"
+                                                        MinWidth="60"
+                                                        HorizontalAlignment="Left"
+                                                        materialDesign:ButtonAssist.CornerRadius="5"
+                                                        Command="{Binding ApplyLockPointFeederAndScrewProgramCommand}" />
+                                            </StackPanel>
+
+                                        </StackPanel>
+                                    </ScrollViewer>
+                                </StackPanel>
+
+
                             </StackPanel>
+                            <!--点位表-->
                             <DataGrid x:Name="dgPoints"
                                       AutoGenerateColumns="False"
                                       CanUserAddRows="False"
@@ -806,6 +1098,8 @@
                                   Background="DeepSkyBlue"
                                   VerticalAlignment="Stretch"
                                   HorizontalAlignment="Right" />
+
+                    <!--运动控制区-->
                     <Viewbox Grid.Column="1">
                         <Grid Grid.Row="1">
                             <Grid.ColumnDefinitions>