yongsunghwang 5 роки тому
батько
коміт
c4971cf940

+ 4 - 0
Dev/OHV/OHV.Common/Events/MessageEventArgs.cs

@@ -100,6 +100,10 @@ namespace OHV.Common.Events
             ReqBatteryState,
 
             ReqRouteManager,
+
+            ReqDirveSpeed,
+            ReqSpeedProfile,
+            ReqJogSpeed,
         }
 
         public eVCSMessageKind Kind { get; set; }

+ 71 - 56
Dev/OHV/OHV.Module.Interactivity/PopUp/ServoConfigView.xaml

@@ -8,9 +8,9 @@
              xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
              prism:ViewModelLocator.AutoWireViewModel="True"
              mc:Ignorable="d" 
-             Width="1000"
-             Height="600"
-             Background="#263238">
+             Width="1920"
+             Height="1080"
+             Background="#CC282C34">
 
     <prism:Dialog.WindowStyle>
         <Style TargetType="Window">
@@ -22,6 +22,7 @@
             <Setter Property="BorderThickness" Value="1"/>
             <Setter Property="BorderBrush" Value="{DynamicResource BorderSolidNormal}"/>
             <Setter Property="Template" Value="{DynamicResource WindowTemplateKey}"/>
+            <Setter Property="WindowState" Value="Maximized"/>
 
             <!--<Style.Triggers>
                 <Trigger Property="ResizeMode" Value="CanResizeWithGrip">
@@ -31,8 +32,8 @@
         </Style>
     </prism:Dialog.WindowStyle>
 
-    <Border BorderBrush="Gray" BorderThickness="2">
-        <Grid>
+    <Border BorderBrush="Gray" BorderThickness="2" Width="1000" Height="600">
+        <Grid Background="#37474f">
             <Grid.ColumnDefinitions>
                 <ColumnDefinition/>
                 <ColumnDefinition Width="130"/>
@@ -43,7 +44,7 @@
             </Grid.RowDefinitions>
 
             <Grid Grid.Row="0">
-                <TextBlock Margin="15,0,0,0" Text="Drive Config View" FontSize="25" Foreground="White"/>
+                <TextBlock Margin="15,0,0,0" Text="Drive Config View" FontSize="22" Foreground="White"/>
             </Grid>
 
             <Grid Grid.Row="1" Background="{x:Null}">
@@ -66,45 +67,49 @@
                 <Grid.ColumnDefinitions>
                     <ColumnDefinition Width="*"/>
                     <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width=".3*"/>
                 </Grid.ColumnDefinitions>
 
                 <Grid Grid.ColumnSpan="2" Background="#163238">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Margin="15,0,0,0" Text="Settings Auto" Foreground="Orange" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="20"/>
+                        <TextBlock Margin="15,0,0,0" Text="Drive Speed" Foreground="Orange" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="20"/>
                     </Border>
                 </Grid>
 
                 <Grid Grid.Row="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Acceleration m/s^2" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <!--<TextBlock Text="Acceleration m/s^2" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>-->
+                        <TextBlock Text="Linear [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
                     </Border>
                 </Grid>
 
                 <Grid Grid.Row="2">
-                        <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Deceleration m/s^2" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
-                        </Border>
-                    </Grid>
-                    <Grid Grid.Row="3">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Creep Speed m/s" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <TextBlock Text="Curve [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
                     </Border>
-                        </Grid>
+                </Grid>
 
-                    <Grid Grid.Row="4">
-                        <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Creep Distance" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
-                        </Border>
-                    </Grid>
+                <Grid Grid.Row="4" Grid.ColumnSpan="2" Background="#163238">
+                    <Border BorderBrush="Gray" BorderThickness="1">
+                        <TextBlock Margin="15,0,0,0" Text="Speed Profile" Foreground="Orange" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="20"/>
+                    </Border>
+                </Grid>
 
                 <Grid Grid.Row="5">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Linear Speed(m/s) [Max: 2.5, Min: 0.5]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <TextBlock Text="Acceleration [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
                     </Border>
                 </Grid>
+
                 <Grid Grid.Row="6">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Curve Speed(m/s) [Max: 0.5, Min:0.05]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <TextBlock Text="Deceleration [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                    </Border>
+                </Grid>
+                
+                <Grid Grid.Row="7">
+                    <Border BorderBrush="Gray" BorderThickness="1">
+                        <TextBlock Text="Creep [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
                     </Border>
                 </Grid>
                 <!--<Grid Grid.Row="7">
@@ -118,64 +123,64 @@
                     </Border>
                 </Grid>-->
 
-                <Grid Grid.Row="7">
+                <Grid Grid.Row="8">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Steering Change Timeout (s)" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <TextBlock Text="CreepDistance [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
                     </Border>
                 </Grid>
 
                 <Grid Grid.Row="10" Grid.ColumnSpan="2" Background="#163238">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Margin="15,0,0,0" Text="Settings Manual" Foreground="Orange" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="20"/>
+                        <TextBlock Margin="15,0,0,0" Text="Jog Speed" Foreground="Orange" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="20"/>
                     </Border>
                 </Grid>
 
                 <Grid Grid.Row="11">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Max Linear Speed(m/s)" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
-                    </Border>
-                </Grid>
-
-                <Grid Grid.Row="12">
-                    <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Max Curve Speed(m/s)" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
-                    </Border>
-                </Grid>
-
-                <Grid Grid.Row="13">
-                    <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Command TimeOut(msec)" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <TextBlock Text="Jog Speed [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
                     </Border>
                 </Grid>
 
                 <Grid Grid.Row="1" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="{Binding Acceleration, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <Button Background="{x:Null}" BorderBrush="{x:Null}" Command="{Binding InputNumberCommand}" CommandParameter="Linear">
+                            <TextBlock Text="{Binding LinearSpeed, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        </Button>
                     </Border>
                 </Grid>
                 <Grid Grid.Row="2" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="{Binding Deceleration, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <Button Background="{x:Null}" BorderBrush="{x:Null}" Command="{Binding InputNumberCommand}" CommandParameter="Curve">
+                            <TextBlock Text="{Binding CurveSpeed, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        </Button>
                     </Border>
                 </Grid>
-                <Grid Grid.Row="3" Grid.Column="1">
+                
+                <!--<Grid Grid.Row="3" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
                         <TextBlock Text="{Binding CreepSped, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
                     </Border>
-                </Grid>
-                <Grid Grid.Row="4" Grid.Column="1">
+                </Grid>-->
+                
+                <Grid Grid.Row="5" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="{Binding CreepDistance, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <Button Background="{x:Null}" BorderBrush="{x:Null}" Command="{Binding InputNumberCommand}" CommandParameter="Accel">
+                            <TextBlock Text="{Binding Acceleration, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        </Button>
                     </Border>
                 </Grid>
-                <Grid Grid.Row="5" Grid.Column="1">
+                <Grid Grid.Row="6" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="{Binding LinearSpeed, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <Button Background="{x:Null}" BorderBrush="{x:Null}" Command="{Binding InputNumberCommand}" CommandParameter="Decel">
+                            <TextBlock Text="{Binding Deceleration, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        </Button>
                     </Border>
                 </Grid>
-                <Grid Grid.Row="6" Grid.Column="1">
+                <Grid Grid.Row="7" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="{Binding CurveSpeed, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <Button Background="{x:Null}" BorderBrush="{x:Null}" Command="{Binding InputNumberCommand}" CommandParameter="Creep">
+                            <TextBlock Text="{Binding CreepSpeed, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        </Button>
                     </Border>
                 </Grid>
                 <!--<Grid Grid.Row="7" Grid.Column="1">
@@ -188,27 +193,37 @@
                         <TextBlock Text="0.000 m/s" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
                     </Border>
                 </Grid>-->
-                <Grid Grid.Row="7" Grid.Column="1">
+                <Grid Grid.Row="8" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="{Binding SteeringChageTimeout, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <Button Background="{x:Null}" BorderBrush="{x:Null}" Command="{Binding InputNumberCommand}" CommandParameter="CreepDistance">
+                            <TextBlock Text="{Binding CreepDistance, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        </Button>
                     </Border>
                 </Grid>
 
                 <Grid Grid.Row="11" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="{Binding ManualMaxLinearSpeed, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <Button Background="{x:Null}" BorderBrush="{x:Null}" Command="{Binding InputNumberCommand}" CommandParameter="JogSpeed">
+                            <TextBlock Text="{Binding JogSpeed, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        </Button>
+                    </Border>
+                </Grid>
+
+                <Grid Grid.Row="1" Grid.RowSpan="2" Grid.Column="2">
+                    <Border BorderBrush="Gray" BorderThickness="1">
+                        <Button Content="Save" Margin="10" Width="auto" Height="auto" Command="{Binding SaveDriveSpeed}"/>
                     </Border>
                 </Grid>
 
-                <Grid Grid.Row="12" Grid.Column="1">
+                <Grid Grid.Row="7" Grid.RowSpan="2" Grid.Column="2">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="{Binding ManualMaxCurveSpeed, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <Button Content="Save" Margin="10" Width="auto" Height="auto" Command="{Binding SaveSpeedProfile}"/>
                     </Border>
                 </Grid>
 
-                <Grid Grid.Row="13" Grid.Column="1">
+                <Grid Grid.Row="11" Grid.RowSpan="1" Grid.Column="2">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="{Binding ManualCommandTimeout, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <Button Content="Save" Margin="5" Width="auto" Height="auto" Command="{Binding SaveJogSpeed}"/>
                     </Border>
                 </Grid>
             </Grid>
@@ -248,5 +263,5 @@
             </Grid>
         </Grid>
     </Border>
-   
+
 </UserControl>

+ 112 - 1
Dev/OHV/OHV.Module.Interactivity/PopUp/ServoConfigViewModel.cs

@@ -118,6 +118,17 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
+        private double jogSpeed;
+
+        public double JogSpeed
+        {
+            get { return jogSpeed; }
+            set 
+            {
+                this.SetProperty(ref this.jogSpeed, value);
+            }
+        }
+
         #endregion
 
         #region Manual
@@ -156,19 +167,111 @@ namespace OHV.Module.Interactivity.PopUp
         #endregion
         #endregion
 
+        public ICommand SaveDriveSpeed { get; set; }
+        public ICommand SaveSpeedProfile { get; set; }
+        public ICommand SaveJogSpeed { get; set; }
+        public ICommand InputNumberCommand { get; set; }
 
         IEventAggregator eventAggregator = null;
         SqliteManager sql;
+        MessageController messageController;
+
+        VCSMessagePubSubEvent vcsMessagePublisher;
 
-        public ServoConfigViewModel(IEventAggregator ea, SqliteManager _sql )
+        public ServoConfigViewModel(IEventAggregator ea, SqliteManager _sql, MessageController _messageController)
         {
             this.eventAggregator = ea;
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallbackCommunication );
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallbackCommunication , ThreadOption.UIThread );
 
+            this.messageController = _messageController;
+
+            vcsMessagePublisher = this.eventAggregator.GetEvent<VCSMessagePubSubEvent>();
+
+            InputNumberCommand = new DelegateCommand<object>(ExecuteInputNumberCommand);
+
+            SaveDriveSpeed = new DelegateCommand(SaveToDriveSpeed);
+            SaveSpeedProfile = new DelegateCommand(SaveToSpeedProfile);
+            SaveJogSpeed = new DelegateCommand(SaveToJogSpeed);
+
             this.sql = _sql;
         }
 
+        private void ExecuteInputNumberCommand(object obj)
+        {
+            var numPad = new CalcuratorView();
+            var result = numPad.ShowDialog(0);
+
+            if(result < 0)
+            {
+                this.messageController.ShowNotificationView("Value Error");
+                return;
+            }
+
+            if (obj.Equals("Linear"))
+                this.LinearSpeed = Convert.ToDouble(result);
+            else if (obj.Equals("Curve"))
+                this.CurveSpeed = Convert.ToDouble(result);
+            else if (obj.Equals("Accel"))
+                this.Acceleration = Convert.ToDouble(result);
+            else if (obj.Equals("Decel"))
+                this.Deceleration = Convert.ToDouble(result);
+            else if (obj.Equals("Creep"))
+                this.CreepSpeed = Convert.ToDouble(result);
+            else if (obj.Equals("CreepDistance"))
+                this.CreepDistance = Convert.ToDouble(result);
+            else if (obj.Equals("JogSpeed"))
+                this.JogSpeed = Convert.ToDouble(result);
+        }
+
+        private void SaveToJogSpeed()
+        {
+            var msg = new VCSMessageEventArgs
+            {
+                Kind = VCSMessageEventArgs.eVCSMessageKind.ReqDirveSpeed,
+                Args = new Dictionary<string, object>(),
+            };
+
+            msg.Args.Add("JogSpeed", JogSpeed);
+
+            this.Publish(msg);
+        }
+
+        private void SaveToSpeedProfile()
+        {
+            var msg = new VCSMessageEventArgs
+            {
+                Kind = VCSMessageEventArgs.eVCSMessageKind.ReqDirveSpeed,
+                Args = new Dictionary<string, object>(),
+            };
+
+            msg.Args.Add("Accel", this.Acceleration);
+            msg.Args.Add("Decel", this.Deceleration);
+            msg.Args.Add("Creep", this.CreepSpeed);
+            msg.Args.Add("CreepDistance", this.CreepDistance);
+
+            this.Publish(msg);
+        }
+
+        private void SaveToDriveSpeed()
+        {
+            var msg = new VCSMessageEventArgs
+            {
+                Kind = VCSMessageEventArgs.eVCSMessageKind.ReqDirveSpeed,
+                Args = new Dictionary<string, object>(),
+            };
+
+            msg.Args.Add("Linear", this.LinearSpeed);
+            msg.Args.Add("Curve", this.CurveSpeed);
+
+            this.Publish(msg);
+        }
+
+        void Publish(VCSMessageEventArgs msg)
+        {
+            this.vcsMessagePublisher.Publish(msg);
+        }
+
         private void UICallbackCommunication( GUIMessageEventArgs obj )
         {
             if(obj.Kind == GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange)
@@ -177,6 +280,14 @@ namespace OHV.Module.Interactivity.PopUp
                 {
                     switch(obj.ModelPropertyName)
                     {
+                        case "Acceleration":
+                            break;
+                        case "Deceleration":
+                            break;
+                        case "CreepSped":
+                            break;
+                        case "CreepDistance":
+                            break;
                     }
                 }
             }

+ 0 - 1
Dev/OHV/OHV.Module.ListViews/Views/SubCommandListViewModel.cs

@@ -102,7 +102,6 @@ namespace OHV.Module.ListViews.Views
             //UI 초기화
             this.TargetID = "None";
             this.SelectedCommandType = eSubCommandType.Move;
-
         }
 
         private void ExecuteDeleteCommand()

+ 12 - 0
Dev/OHV/OHV.Module.MainViews/Views/SettingsView.xaml

@@ -43,6 +43,18 @@
                             </StackPanel>
                         </Button>
 
+                        <Button HorizontalAlignment="Stretch"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            Margin="20"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            Command="{Binding DriveConfigPopup}"
+                            Height="150" Width="220">
+                            <StackPanel>
+                                <materialDesign:PackIcon Kind="HighOccupancyVehicleLane" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="100"/>
+                                <TextBlock FontSize="30" Text="Parameters" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                            </StackPanel>
+                        </Button>
+
                         <Button HorizontalAlignment="Stretch"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             Margin="20"

+ 11 - 4
Dev/OHV/OHV.Module.MainViews/Views/SettingsViewModel.cs

@@ -8,14 +8,14 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Input;
-using VehicleControlSystem;
+//using VehicleControlSystem;
 
 namespace OHV.Module.MainViews.Views
 {
     public class SettingsViewModel : BindableBase
     {
         IEventAggregator eventAggregator = null;
-        VCSystem vcSystem = null;
+        //VCSystem vcSystem = null;
         MessageController msgController = null;
 
         public ICommand ServoConfigCommand { get; set; }
@@ -26,11 +26,12 @@ namespace OHV.Module.MainViews.Views
         public ICommand ConveyorPopup { get; set; }
         public ICommand LockPopup { get; set; }
         public ICommand DriveTeachPopup { get; set; }
+        public ICommand DriveConfigPopup { get; set; }
 
-        public SettingsViewModel( IEventAggregator _ea , VCSystem _vcSystem , MessageController _msgController )
+        public SettingsViewModel( IEventAggregator _ea /*, VCSystem _vcSystem*/ , MessageController _msgController )
         {
             this.eventAggregator = _ea;
-            this.vcSystem = _vcSystem;
+            //this.vcSystem = _vcSystem;
             this.msgController = _msgController;
 
             this.ServoConfigCommand = new DelegateCommand( ExecuteServoConfigCommand );
@@ -41,6 +42,12 @@ namespace OHV.Module.MainViews.Views
             this.ConveyorPopup = new DelegateCommand( ExecuteConveyorCommand );
             this.LockPopup = new DelegateCommand( ExecuteLockPopupCommand );
             this.DriveTeachPopup = new DelegateCommand( ExecuteDriveTeachPopupCommand );
+            this.DriveConfigPopup = new DelegateCommand(ExecuteDriveConfigPopupCommand);
+        }
+
+        private void ExecuteDriveConfigPopupCommand()
+        {
+            this.msgController.ShowServoConfigPopupView();
         }
 
         private void ExecuteLockPopupCommand( )

+ 2 - 0
Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs

@@ -332,7 +332,9 @@ namespace OHV.Vehicle.Concept
             var msg = new VCSMessageEventArgs
             {
                 Kind = VCSMessageEventArgs.eVCSMessageKind.ReqBuzzerStop,
+                Args = new Dictionary<string, object>(),
             };
+
             vcsMessagePublisher.Publish( msg );
 
             this.ExecuteTextCommand();