Forráskód Böngészése

Merge branch 'master' of http://unque781.synology.me:3000/GSI/OHV

# Conflicts:
#	Dev/OHV/OHV.SqliteDAL/DAL/AbstractDAL.cs
unque781 6 éve
szülő
commit
4a9407cfc0
31 módosított fájl, 828 hozzáadás és 514 törlés
  1. 5 3
      Dev/OHV/OHV.Common/Events/MessageEventArgs.cs
  2. 1 0
      Dev/OHV/OHV.Common/Shareds/ConstString.cs
  3. 5 2
      Dev/OHV/OHV.Module.Interactivity/PopUp/BatteryConfigView.xaml
  4. 5 4
      Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlView.xaml
  5. 184 233
      Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlViewModel.cs
  6. 23 11
      Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoView.xaml
  7. 86 39
      Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs
  8. 33 22
      Dev/OHV/OHV.Module.Interactivity/PopUp/ServoConfigView.xaml
  9. 189 55
      Dev/OHV/OHV.Module.Interactivity/PopUp/ServoConfigViewModel.cs
  10. 4 0
      Dev/OHV/OHV.Module.ListViews/OHV.Module.ListViews.csproj
  11. 9 9
      Dev/OHV/OHV.Module.ListViews/Views/CommandListView.xaml
  12. 4 2
      Dev/OHV/OHV.Module.ListViews/Views/CommandListViewModel.cs
  13. 8 0
      Dev/OHV/OHV.Module.ListViews/Views/SubCommandListView.xaml.cs
  14. 8 0
      Dev/OHV/OHV.Module.ListViews/Views/SubCommandListViewModel.cs
  15. 3 3
      Dev/OHV/OHV.Module.MainViews/Views/AutoView.xaml
  16. 1 1
      Dev/OHV/OHV.Module.Status/VehicleStatusViewModel.cs
  17. 17 1
      Dev/OHV/OHV.SqliteDAL/SqliteManager.cs
  18. 20 19
      Dev/OHV/OHV.Vehicle/Concept/AnimatedSplashScreenWindow.xaml
  19. BIN
      Dev/OHV/OHV.Vehicle/Config/IO.xlsx
  20. 1 1
      Dev/OHV/OHV.Vehicle/OHV.Vehicle.csproj
  21. 1 1
      Dev/OHV/VehicleControlSystem/ControlLayer/Clamp.cs
  22. 77 10
      Dev/OHV/VehicleControlSystem/ControlLayer/MQ/ZmqManager.cs
  23. 2 0
      Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Advantech/Advantech.cs
  24. 2 0
      Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Peak/Peak.cs
  25. 70 67
      Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs
  26. 5 4
      Dev/OHV/VehicleControlSystem/Managers/HostManager.cs
  27. 58 21
      Dev/OHV/VehicleControlSystem/VCSystem.cs
  28. 1 1
      Dev/OHV/VehicleControlSystem/VehicleControlSystem.csproj
  29. 1 1
      Dev/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger/Config/log4net.xml
  30. 4 0
      Dev/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger/FormMain.cs
  31. 1 4
      Dev/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger/ZmqManager.cs

+ 5 - 3
Dev/OHV/OHV.Common/Events/MessageEventArgs.cs

@@ -45,9 +45,10 @@ namespace OHV.Common.Events
 
             RspRouteManager,
 
-            ReqDirveSpeed,
-            ReqSpeedProfile,
-            ReqJogSpeed,
+            RspDirveSpeed,
+            RspSpeedProfile,
+            RspJogSpeed,
+            RspParamsSave,
         }
 
         //Property 이름임.
@@ -108,6 +109,7 @@ namespace OHV.Common.Events
             ReqDirveSpeed,
             ReqSpeedProfile,
             ReqJogSpeed,
+            ReqParamsSave,
         }
 
         public eVCSMessageKind Kind { get; set; }

+ 1 - 0
Dev/OHV/OHV.Common/Shareds/ConstString.cs

@@ -36,5 +36,6 @@ namespace OHV.Common.Shareds
         public const string AutoMode = "AutoMode";
         public const string ManualMode = "ManualMode";
         public const string Vehicle = "Vehicle";
+        public const string ZmqManager = "ZmqManager";
     }
 }

+ 5 - 2
Dev/OHV/OHV.Module.Interactivity/PopUp/BatteryConfigView.xaml

@@ -51,7 +51,10 @@
             </Grid.RowDefinitions>
 
             <Grid Grid.Row="0">
-                <TextBlock Grid.Row="0" Margin="5" Text="Battery View" FontSize="25" Foreground="White" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                <StackPanel Orientation="Horizontal">
+                    <TextBlock Grid.Row="0" Margin="5" Text="Battery View" FontSize="25" Foreground="White" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+                    <!--<materialDesign:PackIcon Margin="10,0,0,0" Kind="OfflineBolt" VerticalAlignment="Center" HorizontalAlignment="Center" Height="Auto" Width="auto"/>-->
+                </StackPanel>
                 <StackPanel VerticalAlignment="Center"
                         HorizontalAlignment="Right"
                         Margin="1">
@@ -130,7 +133,7 @@
                                VerticalAlignment="Center"
                                HorizontalAlignment="Center"
                                Foreground="Orange" FontSize="20">
-                                <Run Text="{Binding BatteryState}"/>
+                                <Run Text="{Binding BatteryState, FallbackValue=None}"/>
                             </TextBlock>
                         </Border>
 

+ 5 - 4
Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlView.xaml

@@ -127,7 +127,7 @@
                                 <Button HorizontalAlignment="Stretch"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
-                            Command="{Binding ConveyorRunCommand}"
+                            Command="{Binding ConveyorRunCommand}" Background="{Binding CWOnBrush, FallbackValue=DodgerBlue}"
                             CommandParameter="CW"
                             Height="Auto" Width="154"
                             Margin="10">
@@ -142,7 +142,7 @@
                             materialDesign:ButtonAssist.CornerRadius="10"
                             Height="Auto" Width="154"
                             Margin="10"
-                            Command="{Binding ConveyorRunCommand}"
+                            Command="{Binding ConveyorRunCommand}" Background="{Binding CCWOnBrush, FallbackValue=DodgerBlue}"
                             CommandParameter="CCW">
                                     <StackPanel>
                                         <materialDesign:PackIcon Kind="RotateLeft" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
@@ -260,8 +260,9 @@
                                     </StackPanel>
                                 </Button>
 
-                                <Button Style="{StaticResource MaterialDesignRaisedButton}" materialDesign:ButtonAssist.CornerRadius="10" Height="Auto" Width="Auto" Margin="10" Command="{Binding PIOCharge}"
-                            CommandParameter="PBStop">
+                                <Button Style="{StaticResource MaterialDesignRaisedButton}" 
+                                        materialDesign:ButtonAssist.CornerRadius="10" Height="Auto" Width="Auto" Margin="10" Command="{Binding PIOCharge}"
+                                        CommandParameter="PBStop">
                                     <StackPanel RenderTransformOrigin="0.5,0.5" >
                                         <materialDesign:PackIcon Kind="BatteryOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
                                         <TextBlock Text="PIO Battery Stop" VerticalAlignment="Stretch" HorizontalAlignment="Center" />

+ 184 - 233
Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlViewModel.cs

@@ -23,7 +23,7 @@ namespace OHV.Module.Interactivity.PopUp
     {
         private DelegateCommand<string> _closeDialogCommand;
         public DelegateCommand<string> CloseDialogCommand =>
-            _closeDialogCommand ?? ( _closeDialogCommand = new DelegateCommand<string>( CloseDialog ) );
+            _closeDialogCommand ?? (_closeDialogCommand = new DelegateCommand<string>(CloseDialog));
 
         public event Action<IDialogResult> RequestClose;
 
@@ -34,30 +34,28 @@ namespace OHV.Module.Interactivity.PopUp
             get { return this._title; }
             set
             {
-                this.SetProperty( ref this._title , value );
+                this.SetProperty(ref this._title, value);
             }
         }
 
         #region Brushes
-        private Brush _cvError = Brushes.Gray;
-        public Brush CvError { get { return _cvError; } set { SetProperty( ref _cvError , value ); } }
+        private Brush cWOnBrush = Brushes.DodgerBlue;
 
-        private Brush _cvStop = Brushes.Gray;
-        public Brush CvStop { get { return _cvStop; } set { SetProperty( ref _cvStop , value ); } }
+        public Brush CWOnBrush
+        {
+            get { return cWOnBrush; }
+            set { SetProperty(ref this.cWOnBrush, value); }
+        }
 
-        private Brush _cvSlowStop = Brushes.Gray;
-        public Brush CvSlowStop { get { return _cvSlowStop; } set { SetProperty( ref _cvSlowStop , value ); } }
+        private Brush cCWOnBrush = Brushes.DodgerBlue;
 
-        private Brush _cvEntryIn = Brushes.Gray;
-        public Brush CvEntryIn { get { return _cvEntryIn; } set { SetProperty( ref _cvEntryIn , value ); } }
-        private Brush _cvRun = Brushes.Gray;
-        public Brush CvRun { get { return _cvRun; } set { SetProperty( ref _cvRun , value ); } }
+        public Brush CCWOnBrush
+        {
+            get { return cCWOnBrush; }
+            set { SetProperty(ref this.cCWOnBrush, value); }
+        }
 
-        private Brush _cvCW = Brushes.Gray;
-        public Brush CvCW { get { return _cvCW; } set { SetProperty( ref _cvCW , value ); } }
 
-        private Brush _cvCCW = Brushes.Gray;
-        public Brush CvCCW { get { return _cvCCW; } set { SetProperty( ref _cvCCW , value ); } }
 
         private Brush _axisLeftIsOrg = Brushes.Red;
         private Brush _axisLeftAmpFault = Brushes.Gray;
@@ -72,7 +70,7 @@ namespace OHV.Module.Interactivity.PopUp
             get { return this._axisLeftIsServoOn; }
             set
             {
-                this.SetProperty( ref this._axisLeftIsServoOn , value );
+                this.SetProperty(ref this._axisLeftIsServoOn, value);
             }
         }
 
@@ -81,7 +79,7 @@ namespace OHV.Module.Interactivity.PopUp
             get { return _axisLeftIsOrg; }
             set
             {
-                SetProperty( ref _axisLeftIsOrg , value );
+                SetProperty(ref _axisLeftIsOrg, value);
             }
         }
         public Brush AxisLeftAmpFault
@@ -89,7 +87,7 @@ namespace OHV.Module.Interactivity.PopUp
             get { return _axisLeftAmpFault; }
             set
             {
-                SetProperty( ref _axisLeftAmpFault , value );
+                SetProperty(ref _axisLeftAmpFault, value);
             }
         }
 
@@ -98,7 +96,7 @@ namespace OHV.Module.Interactivity.PopUp
             get { return this._axisRightIsServoOn; }
             set
             {
-                this.SetProperty( ref this._axisRightIsServoOn, value );
+                this.SetProperty(ref this._axisRightIsServoOn, value);
             }
         }
 
@@ -107,7 +105,7 @@ namespace OHV.Module.Interactivity.PopUp
             get { return _axisRightIsOrg; }
             set
             {
-                SetProperty( ref _axisRightIsOrg , value );
+                SetProperty(ref _axisRightIsOrg, value);
             }
         }
         public Brush AxisRightAmpFault
@@ -115,7 +113,7 @@ namespace OHV.Module.Interactivity.PopUp
             get { return _axisRightAmpFault; }
             set
             {
-                SetProperty( ref _axisRightAmpFault , value );
+                SetProperty(ref _axisRightAmpFault, value);
             }
         }
 
@@ -131,196 +129,148 @@ namespace OHV.Module.Interactivity.PopUp
 
         List<BitBlock> allIOList = new List<BitBlock>();
 
-        EzIO iO = null; 
-
         VCSystem VCSystem;
         EzIO IO = null;
 
-        public ConveyorControlViewModel( IEventAggregator _ea , MessageController _msg, VCSystem vcSystem)
+        public ConveyorControlViewModel(IEventAggregator _ea, MessageController _msg, VCSystem vcSystem)
         {
             this.eventAggregator = _ea;
 
             this.VCSystem = vcSystem;
             this.IO = VCSystem.IO as EzIO;
             this.IO.OnChangedIO += IO_OnChangedIO;
-            this.GetSensorState(this.IO);
 
             /*Lock&UnLock Publish Event*/
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( AxisUICallbackCommunication );
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Subscribe( AxisUICallbackCommunication , ThreadOption.UIThread );
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe(AxisUICallbackCommunication);
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Subscribe(AxisUICallbackCommunication, ThreadOption.UIThread);
 
             /*GUI Pubsub Event*/
-            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallbackCommunication );
-            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallbackCommunication, ThreadOption.UIThread );
+            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe(UICallbackCommunication);
+            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe(UICallbackCommunication, ThreadOption.UIThread);
 
             this.messageController = _msg;
 
-            this.ConveyorRunCommand = new DelegateCommand<object>( ExecuteCvCommand );
-            this.PosMoveCommand = new DelegateCommand<object>( ExecutePosMoveCommand );
-            this.LoadUnloadCommand = new DelegateCommand<string>( ExecuteLoadUnloadCommand );
-            this.PIOCharge = new DelegateCommand<string>( ExecutePIOChargeCommand );
+            this.ConveyorRunCommand = new DelegateCommand<object>(ExecuteCvCommand);
+            this.PosMoveCommand = new DelegateCommand<object>(ExecutePosMoveCommand);
+            this.LoadUnloadCommand = new DelegateCommand<string>(ExecuteLoadUnloadCommand);
+            this.PIOCharge = new DelegateCommand<string>(ExecutePIOChargeCommand);
 
         }
 
-        private void ExecutePIOChargeCommand( string obj )
+        private void ExecutePIOChargeCommand(string obj)
         {
-            this.messageController.ShowConfirmationPopupView( $"PIO Battery Charge ?" , r =>
-            {
-                if(r.Result == ButtonResult.OK)
-                {
-                    if(obj.ToString().Equals("PB"))
-                    {
-                        var msg = new VCSMessageEventArgs()
-                        {
-                            Kind = VCSMessageEventArgs.eVCSMessageKind.ReqPIOBatteryCharge ,
-                            MessageText = obj.ToString(),
-                        };
-                        this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
-                    }
-                    else
-                    {
-                        var msg = new VCSMessageEventArgs()
-                        {
-                            Kind = VCSMessageEventArgs.eVCSMessageKind.ReqPIOBatteryChargeStop,
-                        };
-                        this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
-                    }
-                }
-            } );
-        }
-
-        private void ExecuteLoadUnloadCommand( string obj )
-        {
-            this.messageController.ShowConfirmationPopupView( $"Conveyor Move Start ?" , r =>
+            this.messageController.ShowConfirmationPopupView($"PIO Battery Charge ?", r =>
+          {
+              if (r.Result == ButtonResult.OK)
               {
-                  if ( r.Result == ButtonResult.OK )
+                  var msg = new VCSMessageEventArgs();
+
+                  switch (obj)
                   {
-                      if ( obj.ToString().Equals( "Load" ) )
-                      {
-                          var msg = new VCSMessageEventArgs()
-                          {
-                              Kind = VCSMessageEventArgs.eVCSMessageKind.ReqConveyorLoad ,
-                          };
-                          this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
-                      }
-                      else if ( obj.ToString().Equals( "Unload" ) )
-                      {
-                          var msg = new VCSMessageEventArgs()
-                          {
-                              Kind = VCSMessageEventArgs.eVCSMessageKind.ReqConveyorUnload ,
-                          };
-                          this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
-                      }
-                      else if ( obj.ToString().Equals( "PL" ) )
-                      {
-                          var msg = new VCSMessageEventArgs()
-                          {
-                              MessageText = obj.ToString(),
-                              Kind = VCSMessageEventArgs.eVCSMessageKind.ReqPIOConveyor,
-                          };
-                          this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
-                      }
-                      else if ( obj.ToString().Equals( "PU" ) )
-                      {
-                          var msg = new VCSMessageEventArgs()
-                          {
-                              MessageText = obj.ToString() ,
-                              Kind = VCSMessageEventArgs.eVCSMessageKind.ReqPIOConveyor ,
-                          };
-                          this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
-                      }
-                      else { }
+                      case "PB":
+                          msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqPIOBatteryCharge;
+                          msg.MessageText = obj.ToString();
+                          break;
+                      case "PBStop":
+                          msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqPIOBatteryChargeStop;
+                          msg.MessageText = obj.ToString();
+                          break;
+
+                      default:
+                          break;
                   }
-              } );
+
+                  this.VcsMessagePublish(msg);
+              }
+          });
         }
 
-        private void GetSensorState( EzIO _iO )
+        private void ExecuteLoadUnloadCommand(string obj)
         {
-            //if ( _iO.IsOn( "IN_CV_ERROR" ) )
-            //    this.CvError = Brushes.LimeGreen;
-
-            if(_iO.IsOn( "IN_CV_DETECT_00" ) )
-                this.CvEntryIn = Brushes.LimeGreen;
-
-            if ( _iO.IsOn( "IN_CV_DETECT_01" ) )
-                this.CvSlowStop = Brushes.LimeGreen;
+            this.messageController.ShowConfirmationPopupView($"Conveyor Move Start ?", r =>
+            {
+                if (r.Result == ButtonResult.OK)
+                {
+                    var msg = new VCSMessageEventArgs();
 
-            if ( _iO.IsOn( "IN_CV_DETECT_02" ) )
-                this.CvStop = Brushes.LimeGreen;
+                    switch (obj)
+                    {
+                        case "Load":
+                            msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqConveyorLoad;
+                            break;
+                        case "Unload":
+                            msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqConveyorUnload;
+                            break;
+                        case "PL":
+                            msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqPIOConveyor;
+                            msg.MessageText = obj.ToString();
+                            break;
+                        case "PU":
+                            msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqPIOConveyor;
+                            msg.MessageText = obj.ToString();
+                            break;
 
-            if ( _iO.IsOn( "OUT_CV_RUN" , false ) )
-                this.CvRun = Brushes.LimeGreen;
+                        default:
+                            break;
+                    }
 
-            if(_iO.IsOn( "OUT_CV_CWCCW", false ) )
-            {
-                this.CvCW = Brushes.LimeGreen;
-                this.CvCCW = Brushes.Gray;
-            }
-            else
-            {
-                this.CvCW = Brushes.Gray;
-                this.CvCCW = Brushes.LimeGreen;
-            }
+                    this.VcsMessagePublish(msg);
+                }
+            });
         }
 
-        private void IO_OnChangedIO( BitBlock bit )
+        void VcsMessagePublish(VCSMessageEventArgs msg)
         {
-            if ( bit.Tag.Equals( "IN_CV_ERROR" ) )
-                this.CvError = Brushes.LimeGreen;
-            else
-                this.CvError = Brushes.Gray;
-
-            if ( bit.Tag.Equals( "IN_CV_DETECT_00" ) )
-                this.CvEntryIn = Brushes.LimeGreen;
-            else
-                this.CvEntryIn = Brushes.Gray;
-
-            if ( bit.Tag.Equals( "IN_CV_DETECT_01" ) )
-                this.CvSlowStop = Brushes.LimeGreen;
-            else
-                this.CvSlowStop = Brushes.Gray;
-
-            if ( bit.Tag.Equals( "IN_CV_DETECT_02" ) )
-                this.CvStop = Brushes.LimeGreen;
-            else
-                this.CvStop = Brushes.Gray;
-
-            if ( bit.Tag.Equals( "OUT_CV_RUN" ) )
-                this.CvRun = Brushes.LimeGreen;
-            else
-                this.CvRun = Brushes.Gray;
+            this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish(msg);
+        }
 
-            if ( bit.Tag.Equals( "OUT_CV_CWCCW" ) )
-            {
-                this.CvCW = Brushes.LimeGreen;
-                this.CvCCW = Brushes.Gray;
-            }
-            else
+        private void IO_OnChangedIO(BitBlock bit)
+        {
+            if (bit.Tag.Equals("OUT_CV_RUN"))
             {
-                this.CvCW = Brushes.Gray;
-                this.CvCCW = Brushes.LimeGreen;
+                if (IO.IsOn("OUT_CV_RUN", false))
+                {
+                    if (IO.IsOn("OUT_CV_CWCCW", false))
+                    {
+                        this.CWOnBrush = Brushes.DodgerBlue;
+                        this.CCWOnBrush = Brushes.LimeGreen;
+                    }
+                    else
+                    {
+                        this.CWOnBrush = Brushes.LimeGreen;
+                        this.CCWOnBrush = Brushes.DodgerBlue;
+                    }
+                }
+                else
+                {
+                    this.CWOnBrush = Brushes.DodgerBlue;
+                    this.CCWOnBrush = Brushes.DodgerBlue;
+                }
             }
         }
 
-        private void UICallbackCommunication( GUIMessageEventArgs _args )
+        private void UICallbackCommunication(GUIMessageEventArgs _args)
         {
             var msg = string.Empty;
 
-            if ( _args.Kind == GUIMessageEventArgs.eGUIMessageKind.RspPIOConveyor)
+            if (_args.Kind == GUIMessageEventArgs.eGUIMessageKind.RspPIOConveyor)
             {
-                switch ( _args.MessageText )
+                switch (_args.MessageText)
                 {
+                    //PIO Load
                     case "PL":
                         {
-                            if ( _args.Result.IsSuccess )
+                            if (_args.Result.IsSuccess)
                                 msg = "SUCCESS";
                             else
                                 msg = "FAIL";
                         }
                         break;
+
+                    //PIO Unload
                     case "PU":
                         {
-                            if ( _args.Result.IsSuccess )
+                            if (_args.Result.IsSuccess)
                                 msg = "SUCCESS";
                             else
                                 msg = "FAIL";
@@ -329,59 +279,59 @@ namespace OHV.Module.Interactivity.PopUp
                         break;
                 }
 
-                this.messageController.ShowNotificationView( msg );
+                this.messageController.ShowNotificationView(msg);
 
             }
             else if (_args.Kind == GUIMessageEventArgs.eGUIMessageKind.RspPIOBatteryCharge)
             {
-                if ( _args.Result.IsSuccess )
+                if (_args.Result.IsSuccess)
                     msg = "SUCCESS";
                 else
                     msg = "FAIL";
 
-                this.messageController.ShowNotificationView( msg );
+                this.messageController.ShowNotificationView(msg);
             }
         }
 
-        private void ExecutePosMoveCommand( object obj )
+        private void ExecutePosMoveCommand(object obj)
         {
-            this.messageController.ShowConfirmationPopupView( "Clamp Move ?" , r =>
-            {
-                if ( r.Result == ButtonResult.OK )
-                {
-                    var selectedPos = obj.ToString();
+            this.messageController.ShowConfirmationPopupView("Clamp Move ?", r =>
+          {
+              if (r.Result == ButtonResult.OK)
+              {
+                  var selectedPos = obj.ToString();
 
-                    var msg = new AxisControlEventArgs
-                    {
-                        Dir = eEventDir.ToBack ,
-                        Kind = eAxisControlKind.SyncMove ,
-                    };
+                  var msg = new AxisControlEventArgs
+                  {
+                      Dir = eEventDir.ToBack,
+                      Kind = eAxisControlKind.SyncMove,
+                  };
 
-                    switch ( selectedPos )
-                    {
-                        case "Lock":
-                            msg.PosDir = ePosDir.Lock;
-                            break;
-                        case "UnLock":
-                            msg.PosDir = ePosDir.UnLock;
-                            break;
-                    }
+                  switch (selectedPos)
+                  {
+                      case "Lock":
+                          msg.PosDir = ePosDir.Lock;
+                          break;
+                      case "UnLock":
+                          msg.PosDir = ePosDir.UnLock;
+                          break;
+                  }
 
-                    this.AxisPublishEvent( msg );
-                }
-            } );
+                  this.AxisPublishEvent(msg);
+              }
+          });
         }
 
-        private void AxisPublishEvent( AxisControlEventArgs msg )
+        private void AxisPublishEvent(AxisControlEventArgs msg)
         {
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( msg );
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish(msg);
         }
 
-        private void AxisUICallbackCommunication( AxisControlEventArgs _args )
+        private void AxisUICallbackCommunication(AxisControlEventArgs _args)
         {
-            if ( _args.Dir == eEventDir.ToFront )
+            if (_args.Dir == eEventDir.ToFront)
             {
-                switch ( _args.Kind )
+                switch (_args.Kind)
                 {
                     case eAxisControlKind.NONE:
                         break;
@@ -392,7 +342,7 @@ namespace OHV.Module.Interactivity.PopUp
                     case eAxisControlKind.EStop:
                         break;
                     case eAxisControlKind.Move:
-                        ResponseMove( _args );
+                        ResponseMove(_args);
                         break;
                     case eAxisControlKind.Jog:
                         break;
@@ -407,127 +357,128 @@ namespace OHV.Module.Interactivity.PopUp
                     case eAxisControlKind.FaultReset:
                         break;
                     case eAxisControlKind.AxisState:
-                        AxisState( _args );
+                        AxisState(_args);
                         break;
                     case eAxisControlKind.SyncMove:
-                        if ( _args.Result.IsSuccess )
-                            this.messageController.ShowNotificationView( "Success" );
+                        if (_args.Result.IsSuccess)
+                            this.messageController.ShowNotificationView("Success");
                         else
-                            this.messageController.ShowNotificationView( "Fail" );
+                            this.messageController.ShowNotificationView("Fail");
                         break;
                 }
             }
         }
 
-        private void ResponseMove( AxisControlEventArgs _args )
+        private void ResponseMove(AxisControlEventArgs _args)
         {
             var msg = string.Empty;
 
-            if ( _args.Result.IsSuccess )
-                msg = ( "Move Success" );
+            if (_args.Result.IsSuccess)
+                msg = ("Move Success");
             else
             {
                 var error = _args.Result.Errors.FirstOrDefault();
-                var alarm = error.Metadata[ "Alarm" ] as Alarm;
+                var alarm = error.Metadata["Alarm"] as Alarm;
                 msg = alarm.Name + " " + alarm.Text;
             }
 
-            this.messageController.ShowNotificationView( msg );
+            this.messageController.ShowNotificationView(msg);
         }
 
-        private void AxisState( AxisControlEventArgs args )
+        private void AxisState(AxisControlEventArgs args)
         {
-            var left = args.Args[ "Left" ] as AxisState;
-            var right = args.Args[ "Right" ] as AxisState;
+            var left = args.Args["Left"] as AxisState;
+            var right = args.Args["Right"] as AxisState;
 
             /*Left*/
-            if ( left.IsServoOn )
+            if (left.IsServoOn)
                 this.AxisLeftIsServoOn = Brushes.LimeGreen;
             else
                 this.AxisLeftIsServoOn = Brushes.Gray;
 
-            if ( left.IsOriginReturn )
+            if (left.IsOriginReturn)
                 this.AxisLeftIsOrg = Brushes.LimeGreen;
             else
                 this.AxisLeftIsOrg = Brushes.Gray;
 
-            if ( left.IsAmpFault )
+            if (left.IsAmpFault)
                 this.AxisLeftAmpFault = Brushes.Red;
             else
                 this.AxisLeftAmpFault = Brushes.Gray;
 
             /*Right*/
-            if ( right.IsServoOn )
+            if (right.IsServoOn)
                 this.AxisRightIsServoOn = Brushes.LimeGreen;
             else
                 this.AxisRightIsServoOn = Brushes.Gray;
 
-            if ( right.IsOriginReturn )
+            if (right.IsOriginReturn)
                 this.AxisRightIsOrg = Brushes.LimeGreen;
             else
                 this.AxisRightIsOrg = Brushes.Gray;
 
-            if ( right.IsAmpFault )
+            if (right.IsAmpFault)
                 this.AxisRightAmpFault = Brushes.Red;
             else
                 this.AxisRightAmpFault = Brushes.Gray;
         }
 
-        private void ExecuteCvCommand( object _obj )
+        private void ExecuteCvCommand(object _obj)
         {
             var dir = _obj.ToString();
             var msg = new VCSMessageEventArgs()
             {
-                Kind = VCSMessageEventArgs.eVCSMessageKind.ReqConveyorMove ,
+                Kind = VCSMessageEventArgs.eVCSMessageKind.ReqConveyorMove,
                 MessageText = dir
             };
-            this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
+
+            this.VcsMessagePublish(msg);
         }
 
         #region Dialog
-        public bool CanCloseDialog( )
+        public bool CanCloseDialog()
         {
             return true;
         }
 
-        public void OnDialogClosed( )
+        public void OnDialogClosed()
         {
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs 
-            { 
-                Dir = AxisControlEventArgs.eEventDir.ToBack, 
-                Kind = AxisControlEventArgs.eAxisControlKind.NONE 
-            } );
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( AxisUICallbackCommunication );
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish(new AxisControlEventArgs
+            {
+                Dir = AxisControlEventArgs.eEventDir.ToBack,
+                Kind = AxisControlEventArgs.eAxisControlKind.NONE
+            });
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe(AxisUICallbackCommunication);
 
-            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish( new DriveControlEventArgs { EventDir = DriveControlEventArgs.eEventDir.ToBack , ControlKind = DriveControlEventArgs.eControlKind.ReqStopCurrentPos } );
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish(new DriveControlEventArgs { EventDir = DriveControlEventArgs.eEventDir.ToBack, ControlKind = DriveControlEventArgs.eControlKind.ReqStopCurrentPos });
 
-            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallbackCommunication );
+            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe(UICallbackCommunication);
         }
 
-        public void OnDialogOpened( IDialogParameters parameters )
+        public void OnDialogOpened(IDialogParameters parameters)
         {
             var msg = new VCSMessageEventArgs() { Kind = VCSMessageEventArgs.eVCSMessageKind.ReqIOObject };
-            this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
+            this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish(msg);
 
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack , Kind = AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition } );
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish(new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack, Kind = AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition });
         }
 
 
-        private void CloseDialog( string parameter )
+        private void CloseDialog(string parameter)
         {
             ButtonResult result = ButtonResult.None;
 
-            if ( parameter?.ToLower() == "true" )
+            if (parameter?.ToLower() == "true")
                 result = ButtonResult.OK;
-            else if ( parameter?.ToLower() == "false" )
+            else if (parameter?.ToLower() == "false")
                 result = ButtonResult.Cancel;
 
-            RaiseRequestClose( new DialogResult( result ) );
+            RaiseRequestClose(new DialogResult(result));
         }
 
-        public virtual void RaiseRequestClose( IDialogResult dialogResult )
+        public virtual void RaiseRequestClose(IDialogResult dialogResult)
         {
-            RequestClose?.Invoke( dialogResult );
+            RequestClose?.Invoke(dialogResult);
         }
         #endregion
     }

+ 23 - 11
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoView.xaml

@@ -155,13 +155,22 @@
                                 <RowDefinition Height="*"/>
                             </Grid.RowDefinitions>
 
-                            <Border BorderBrush="Gray" BorderThickness="1" Grid.Column="0" Grid.RowSpan="2">
-                                <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
-                                    <TextBlock  Foreground="Orange" FontSize="20">
-                                        Vehicle
+                            <Border BorderBrush="Gray" BorderThickness="1" Grid.Column="0">
+                                <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
+                                    <materialDesign:PackIcon Kind="QrcodeScan" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="50" Width="auto"/>
+                                    <!--<TextBlock  Foreground="Orange" FontSize="20">
+                                        Current
+                                    </TextBlock>-->
+                                    <TextBlock Margin="15,0,0,0" HorizontalAlignment="Center" VerticalAlignment="Center"  Foreground="Orange" FontSize="20">
+                                        MCR
                                     </TextBlock>
-                                    <TextBlock HorizontalAlignment="Center"  Foreground="Orange" FontSize="20">
-                                        Drive
+                                </StackPanel>
+                            </Border>
+
+                            <Border BorderBrush="Gray" BorderThickness="1" Grid.Row="1">
+                                <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
+                                    <TextBlock HorizontalAlignment="Center"  Foreground="White" FontSize="20">
+                                        <Run Text="{Binding CurrentMCR, FallbackValue=0}"/>
                                     </TextBlock>
                                 </StackPanel>
                             </Border>
@@ -172,7 +181,7 @@
                                         Current
                                     </TextBlock>
                                     <TextBlock HorizontalAlignment="Center"  Foreground="Orange" FontSize="20">
-                                        Position
+                                        Tag
                                     </TextBlock>
                                 </StackPanel>
                             </Border>
@@ -180,7 +189,7 @@
                             <Border BorderBrush="Gray" BorderThickness="1" Grid.Column="1" Grid.Row="1">
                                 <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
                                     <TextBlock HorizontalAlignment="Center"  Foreground="White" FontSize="20">
-                                        0.00
+                                        <Run Text="{Binding CurrentTag, FallbackValue=0}"/>
                                     </TextBlock>
                                 </StackPanel>
                             </Border>
@@ -188,7 +197,10 @@
                             <Border BorderBrush="Gray" BorderThickness="1" Grid.Column="2" Grid.Row="0">
                                 <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
                                     <TextBlock HorizontalAlignment="Center"  Foreground="Orange" FontSize="20">
-                                        AutoReadyFlag
+                                        CanReady
+                                    </TextBlock>
+                                    <TextBlock HorizontalAlignment="Center"  Foreground="Orange" FontSize="20">
+                                        State
                                     </TextBlock>
                                 </StackPanel>
                             </Border>
@@ -209,7 +221,7 @@
                                 <ColumnDefinition Width="*"/>
                             </Grid.ColumnDefinitions>
 
-                            <Border BorderThickness="1" BorderBrush="#FF00FFD3" Margin="22,0,209,0"/>
+                            <Border BorderThickness="1" BorderBrush="#FF00FFD3" Margin="22,6,209,-6"/>
                             <Grid Grid.Column="0" Margin="70,10,0,10">
                                 <Button Width="150"
                                     HorizontalAlignment="Stretch" 
@@ -529,7 +541,7 @@
             <Grid Grid.Column="2" Background="#263238" Grid.RowSpan="2">
                 <Border Margin="1,1,0,1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Left" Width="128"/>
                 <StackPanel VerticalAlignment="Top">
-                    <Button Margin="10,10,10,5" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoOnCommand}">
+                    <Button Background="{Binding DriveOnStateBrush, FallbackValue=DodgerBlue}" Margin="10,10,10,5" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoOnCommand}">
                         <StackPanel>
                             <materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
                             <TextBlock Text="Servo On" VerticalAlignment="Stretch" HorizontalAlignment="Center" FontSize="19"/>

+ 86 - 39
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs

@@ -16,6 +16,8 @@ using System.Threading.Tasks;
 using System.Windows.Controls;
 using System.Windows.Input;
 using System.Windows.Media;
+using VehicleControlSystem;
+using VehicleControlSystem.ControlLayer.MQ;
 
 namespace OHV.Module.Interactivity.PopUp
 {
@@ -77,7 +79,7 @@ namespace OHV.Module.Interactivity.PopUp
             set { this.SetProperty( ref this._differenceDrive, value ); }
         }
 
-        private double _jogVelocity = 5;
+        private double _jogVelocity = 3.0;
         public double JogVelocity
         {
             get { return this._jogVelocity; }
@@ -122,6 +124,20 @@ namespace OHV.Module.Interactivity.PopUp
             get { return steeringRightBrush; }
             set { SetProperty( ref this.steeringRightBrush, value ); }
         }
+
+        Brush driveOnStateBrush = Brushes.DodgerBlue;
+        public Brush DriveOnStateBrush
+        {
+            get { return this.driveOnStateBrush; }
+            set { SetProperty(ref this.driveOnStateBrush, value); }
+        }
+
+        Brush driveOffStateBrush = Brushes.DodgerBlue;
+        public Brush DriveOffStateBrush
+        {
+            get { return this.driveOffStateBrush; }
+            set { SetProperty(ref this.driveOffStateBrush, value); }
+        }
         #endregion
 
         private ObservableCollection<Route> _routeList;
@@ -150,14 +166,14 @@ namespace OHV.Module.Interactivity.PopUp
             set { this.SetProperty(ref this.autoReadyFlagColor, value); }
         }
 
-        private string  currentMCR;
+        private string  currentMCR = "None";
         public string  CurrentMCR
         {
             get { return currentMCR; }
             set { this.SetProperty(ref this.currentMCR, value); }
         }
 
-        private string currentTag;
+        private string currentTag = "None";
 
         public string CurrentTag
         {
@@ -165,10 +181,9 @@ namespace OHV.Module.Interactivity.PopUp
             set { SetProperty(ref this.currentTag, value); }
         }
 
-
-
-
-        public DriveServoViewModel( IEventAggregator _ea, SqliteManager _sql, MessageController _messageController )
+        ZmqManager zmqManager;
+       
+        public DriveServoViewModel( IEventAggregator _ea, SqliteManager _sql, MessageController _messageController, VCSystem system )
         {
             this.eventAggregator = _ea;
             this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe( DriveControlCallBack );
@@ -181,6 +196,9 @@ namespace OHV.Module.Interactivity.PopUp
 
             this.messageController = _messageController;
 
+            this.zmqManager = system.ZmqManager;
+            system.ZmqManager.PropertyChanged += ZmqManager_PropertyChanged;
+
             this.SelectPosCommand = new DelegateCommand<object>( ExecuteSelectPosCommand );
             this.MoveToCommand = new DelegateCommand( ExecuteMoveToCommand );
             this.CurrentToTargetCommand = new DelegateCommand( ExecuteCurrentToTargetCommand );
@@ -200,6 +218,56 @@ namespace OHV.Module.Interactivity.PopUp
 
             this.JogVelPopupCommand = new DelegateCommand( ExecuteJogVelPopupCommand );
             this.JogCommand = new DelegateCommand<object>( ExecuteJogCommand );
+
+            this.InitializeData();
+        }
+
+        private void InitializeData()
+        {
+            this.CurrentMCR = this.zmqManager.CurrentMCR;
+            this.CurrentTag = this.zmqManager.GetCurrentPointNo().ToString();
+
+
+            //TODO: Drive 상태 Update (On/Off, Fault)
+            //if (zmqManager.IsDriveOn)
+            //    this.DriveOnStateBrush = Brushes.LimeGreen;
+            //else
+            //    this.DriveOnStateBrush = Brushes.DodgerBlue;
+
+            DriveAutoReadyState(this.zmqManager.IsCanStanbyLocation);
+        }
+
+        private void ZmqManager_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
+        {
+            var property = sender.GetType().GetProperty(e.PropertyName);
+            var newValue = property.GetValue(sender, null);
+
+            switch(e.PropertyName)
+            {
+                case "CurrentTag":
+                    this.CurrentTag = CastTo<int>.From<object>(newValue).ToString();
+                    break;
+
+                case "CurrentMCR":
+                    this.CurrentMCR = CastTo<string>.From<object>(newValue);
+                    break;
+
+                case "IsCanStanbyLocation":
+                    {
+                        var ll = CastTo<bool>.From<object>(newValue);
+                        DriveAutoReadyState(ll);
+                    }
+                    break;
+                case "IsDriveOn":
+                    {
+                        var result = CastTo<bool>.From<object>(newValue);
+                        if (result)
+                            this.DriveOnStateBrush = Brushes.LimeGreen;
+                        else
+                            this.DriveOnStateBrush = Brushes.DodgerBlue;
+                    }
+                    break;
+            }
         }
 
         private void ExecuteSteeringMove( object obj )
@@ -222,7 +290,7 @@ namespace OHV.Module.Interactivity.PopUp
         {
             if ( obj.Kind == GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange )
             {
-                if ( obj.MessageKey.Equals( MessageKey.Vehicle ) )
+                if ( obj.MessageKey.Equals( MessageKey.Vehicle ) ) 
                 {
                     switch ( obj.ModelPropertyName )
                     {
@@ -244,26 +312,12 @@ namespace OHV.Module.Interactivity.PopUp
                                 this.CurrentPosition = v;
                             }
                             break;
-                        case "CurrentTag":
-                            this.CurrentTag = CastTo<int>.From<object>( obj.Args ).ToString();
-                            break;
 
                         case "CurrentSpeed":
                             break;
-                        case "CurrentTorque":
-                            break;
-
-                        case "AutoReadyState":
-                            {
-                                var ll = CastTo<eVehicleAutoReadyState>.From<object>(obj.Args);
-                                DriveAutoReadyState(ll);
-                            }
-                            break;
 
-                        case "CurrentMCR":
-                            CurrentMCR = CastTo<string>.From<object>( obj.Args );
+                        case "CurrentTorque":
                             break;
-
                         default:
                             break;
                     }
@@ -276,24 +330,17 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
-        void DriveAutoReadyState(eVehicleAutoReadyState state)
+        void DriveAutoReadyState(bool state)
         {
-            switch (state)
+            if(state)
             {
-                case eVehicleAutoReadyState.OK:
-                    {
-                        this.AutoReadyFlag = "OK";
-                        this.AutoReadyFlagColor = Brushes.LimeGreen;
-                    }
-                    break;
-                case eVehicleAutoReadyState.NG:
-                    {
-                        this.AutoReadyFlag = "NG";
-                        this.AutoReadyFlagColor = Brushes.Red;
-                    }
-                    break;
-                default:
-                    break;
+                this.AutoReadyFlag = "OK";
+                this.AutoReadyFlagColor = Brushes.LimeGreen;
+            }
+            else
+            {
+                this.AutoReadyFlag = "NG";
+                this.AutoReadyFlagColor = Brushes.Gray;
             }
         }
 

+ 33 - 22
Dev/OHV/OHV.Module.Interactivity/PopUp/ServoConfigView.xaml

@@ -32,8 +32,8 @@
         </Style>
     </prism:Dialog.WindowStyle>
 
-    <Border BorderBrush="Gray" BorderThickness="2" Width="1000" Height="600">
-        <Grid Background="#37474f">
+    <Border BorderBrush="Gray" BorderThickness="2" Width="1000" Height="800" Background="#163238">
+        <Grid Margin="15" Background="#37474f">
             <Grid.ColumnDefinitions>
                 <ColumnDefinition/>
                 <ColumnDefinition Width="130"/>
@@ -79,13 +79,13 @@
                 <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="Linear [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <TextBlock Text="Linear [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                     </Border>
                 </Grid>
 
                 <Grid Grid.Row="2">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Curve [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <TextBlock Text="Curve [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                     </Border>
                 </Grid>
 
@@ -97,19 +97,19 @@
 
                 <Grid Grid.Row="5">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Acceleration [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <TextBlock Text="Acceleration [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                     </Border>
                 </Grid>
 
                 <Grid Grid.Row="6">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Deceleration [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <TextBlock Text="Deceleration [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                     </Border>
                 </Grid>
                 
                 <Grid Grid.Row="7">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Creep [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <TextBlock Text="Creep [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                     </Border>
                 </Grid>
                 <!--<Grid Grid.Row="7">
@@ -125,7 +125,7 @@
 
                 <Grid Grid.Row="8">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="CreepDistance [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <TextBlock Text="CreepDistance [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                     </Border>
                 </Grid>
 
@@ -137,21 +137,21 @@
 
                 <Grid Grid.Row="11">
                     <Border BorderBrush="Gray" BorderThickness="1">
-                        <TextBlock Text="Jog Speed [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="17"/>
+                        <TextBlock Text="Jog Speed [m/s]" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                     </Border>
                 </Grid>
 
                 <Grid Grid.Row="1" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
                         <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"/>
+                            <TextBlock Text="{Binding LinearSpeed, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                         </Button>
                     </Border>
                 </Grid>
                 <Grid Grid.Row="2" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
                         <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"/>
+                            <TextBlock Text="{Binding CurveSpeed, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                         </Button>
                     </Border>
                 </Grid>
@@ -165,21 +165,21 @@
                 <Grid Grid.Row="5" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
                         <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"/>
+                            <TextBlock Text="{Binding Acceleration, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                         </Button>
                     </Border>
                 </Grid>
                 <Grid Grid.Row="6" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
                         <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"/>
+                            <TextBlock Text="{Binding Deceleration, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                         </Button>
                     </Border>
                 </Grid>
                 <Grid Grid.Row="7" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
                         <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"/>
+                            <TextBlock Text="{Binding CreepSpeed, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                         </Button>
                     </Border>
                 </Grid>
@@ -196,7 +196,7 @@
                 <Grid Grid.Row="8" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
                         <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"/>
+                            <TextBlock Text="{Binding CreepDistance, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                         </Button>
                     </Border>
                 </Grid>
@@ -204,28 +204,28 @@
                 <Grid Grid.Row="11" Grid.Column="1">
                     <Border BorderBrush="Gray" BorderThickness="1">
                         <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"/>
+                            <TextBlock Text="{Binding JogSpeed, StringFormat={}{0:0.00 m/s}, FallbackValue=0.00 m/s}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="20"/>
                         </Button>
                     </Border>
                 </Grid>
 
-                <Grid Grid.Row="1" Grid.RowSpan="2" Grid.Column="2">
+                <!--<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 Grid.Row="7" Grid.RowSpan="2" Grid.Column="2">
+                <!--<Grid Grid.Row="7" Grid.RowSpan="2" Grid.Column="2">
                     <Border BorderBrush="Gray" BorderThickness="1">
                         <Button Content="Save" Margin="10" Width="auto" Height="auto" Command="{Binding SaveSpeedProfile}"/>
                     </Border>
-                </Grid>
+                </Grid>-->
 
-                <Grid Grid.Row="11" Grid.RowSpan="1" Grid.Column="2">
+                <!--<Grid Grid.Row="11" Grid.RowSpan="1" Grid.Column="2">
                     <Border BorderBrush="Gray" BorderThickness="1">
                         <Button Content="Save" Margin="5" Width="auto" Height="auto" Command="{Binding SaveJogSpeed}"/>
                     </Border>
-                </Grid>
+                </Grid>-->
             </Grid>
 
             <!--<Grid Grid.Row="1">
@@ -252,6 +252,17 @@
 
             <Grid Grid.Column="2" HorizontalAlignment="Stretch" Background="#263238" Grid.RowSpan="2">
                 <Border Margin="1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
+                <StackPanel VerticalAlignment="Top" Margin="0,30,0,0">
+                    <Button Margin="10,0,10,10" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2"
+                        Style="{DynamicResource MaterialDesignRaisedButton}"
+                        materialDesign:ShadowAssist.ShadowDepth="Depth5"
+                        Command="{Binding SaveToAllCommand}">
+                        <StackPanel>
+                            <materialDesign:PackIcon Kind="ContentSave" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                            <TextBlock Text="SAVE" FontSize="20" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                        </StackPanel>
+                    </Button>
+                </StackPanel>
                 <StackPanel VerticalAlignment="Bottom">
                     <Button Margin="10,0,10,10" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2" Command="{Binding CloseDialogCommand}" CommandParameter="true">
                         <StackPanel>

+ 189 - 55
Dev/OHV/OHV.Module.Interactivity/PopUp/ServoConfigViewModel.cs

@@ -1,4 +1,5 @@
 using GSG.NET.Extensions;
+using MaterialDesignThemes.Wpf;
 using OHV.Common.Events;
 using OHV.Common.Model;
 using OHV.Common.Shareds;
@@ -9,6 +10,7 @@ using Prism.Mvvm;
 using Prism.Services.Dialogs;
 using System;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Drawing;
 using System.Linq;
 using System.Text;
@@ -16,6 +18,7 @@ using System.Threading.Tasks;
 using System.Windows;
 using System.Windows.Input;
 using System.Windows.Threading;
+using VehicleControlSystem;
 
 namespace OHV.Module.Interactivity.PopUp
 {
@@ -170,7 +173,8 @@ namespace OHV.Module.Interactivity.PopUp
         public ICommand SaveDriveSpeed { get; set; }
         public ICommand SaveSpeedProfile { get; set; }
         public ICommand SaveJogSpeed { get; set; }
-        public ICommand InputNumberCommand { get; set; }
+        public ICommand InputNumberCommand { get; set;}
+        public ICommand SaveToAllCommand { get; set; }
 
         IEventAggregator eventAggregator = null;
         SqliteManager sql;
@@ -178,53 +182,175 @@ namespace OHV.Module.Interactivity.PopUp
 
         VCSMessagePubSubEvent vcsMessagePublisher;
 
-        public ServoConfigViewModel(IEventAggregator ea, SqliteManager _sql, MessageController _messageController)
+        public ServoConfigViewModel(IEventAggregator ea, SqliteManager _sql, MessageController _messageController, VCSystem system)
         {
             this.eventAggregator = ea;
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallbackCommunication );
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallbackCommunication , ThreadOption.UIThread );
 
+            system.ZmqManager.PropertyChanged += ZmqManager_PropertyChanged;
+
             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);
+            SaveDriveSpeed = new DelegateCommand(ReqSaveToDriveSpeed);
+            SaveSpeedProfile = new DelegateCommand(ReqSaveToSpeedProfile);
+            SaveJogSpeed = new DelegateCommand(ReqSaveToJogSpeed);
+
+            SaveToAllCommand = new DelegateCommand(ExecuteSaveToAllCommand);
 
             this.sql = _sql;
         }
-        
+
+
+
+        private void ZmqManager_PropertyChanged(object sender, PropertyChangedEventArgs e)
+        {
+            var property = sender.GetType().GetProperty(e.PropertyName);
+            var newValue = property.GetValue(sender, null);
+
+            switch(e.PropertyName)
+            {
+                case "LinearSpeed":
+                    this.LinearSpeed = CastTo<double>.From<object>(newValue);
+                    break;
+                case "CurveSpeed":
+                    this.CurveSpeed = CastTo<double>.From<object>(newValue);
+                    break;
+                case "JogSPeed":
+                    this.JogSpeed = CastTo<double>.From<object>(newValue);
+                    break;
+                case "AccelSpeed":
+                    this.Acceleration = CastTo<double>.From<object>(newValue);
+                    break;
+                case "DecelSpeed":
+                    this.Deceleration = CastTo<double>.From<object>(newValue);
+                    break;
+                case "CreepSpeed":
+                    this.CreepSpeed = CastTo<double>.From<object>(newValue);
+                    break;
+                case "CreepDistance":
+                    this.CreepDistance = CastTo<double>.From<object>(newValue);
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        private void ExecuteSaveToAllCommand()
+        {
+            //TODO: 0710 Max Limit ++
+            if (this.Acceleration <= 0)
+            {
+                this.messageController.ShowNotificationView("Acceleration Error !", false);
+                return;
+            }
+
+            if (this.Deceleration <= 0)
+            {
+                this.messageController.ShowNotificationView("Deceleration Error !", false);
+                return;
+            }
+
+            if (this.CreepSpeed <= 0)
+            {
+                this.messageController.ShowNotificationView("CreepSpeed Error !", false);
+                return;
+            }
+
+            if (this.CreepDistance <= 0)
+            {
+                this.messageController.ShowNotificationView("CreepDistance Error !", false);
+                return;
+            }
+
+            if (this.LinearSpeed <= 0)
+            {
+                this.messageController.ShowNotificationView("LinearSpeed Error !", false);
+                return;
+            }
+
+            if (this.CurveSpeed <= 0)
+            {
+                this.messageController.ShowNotificationView("CurveSPeed Error !", false);
+                return;
+            }
+
+            if (this.JogSpeed <= 0)
+            {
+                this.messageController.ShowNotificationView("JogSpeed Error !", false);
+                return;
+            }
+
+            this.messageController.ShowConfirmationPopupView(" Params Save ? ", r =>
+            {
+                if (r.Result == ButtonResult.OK)
+                {
+                    var msg = new VCSMessageEventArgs
+                    {
+                        Kind = VCSMessageEventArgs.eVCSMessageKind.ReqParamsSave,
+                        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);
+
+                    msg.Args.Add("JogSpeed", JogSpeed);
+
+                    msg.Args.Add("Linear", this.LinearSpeed);
+                    msg.Args.Add("Curve", this.CurveSpeed);
+
+                    this.Publish(msg);
+                }
+            });
+        }
+
         private void ExecuteInputNumberCommand(object obj)
         {
             var numPad = new CalcuratorView();
             var result = numPad.ShowDialog(0);
 
-            if(result < 0)
+            if(result < 0 || result > 3)
             {
-                this.messageController.ShowNotificationView("Value Error");
+                this.messageController.ShowNotificationView("Value Error ! [0 ~ 3]");
                 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);
+
+            switch(obj)
+            {
+                case "Linear":
+                    this.LinearSpeed = Convert.ToDouble(result);
+                    break;
+                case "Curve":
+                    this.CurveSpeed = Convert.ToDouble(result);
+                    break;
+                case "Accel":
+                    this.Acceleration = Convert.ToDouble(result);
+                    break;
+                case "Decel":
+                    this.Deceleration = Convert.ToDouble(result);
+                    break;
+                case "Creep":
+                    this.CreepSpeed = Convert.ToDouble(result);
+                    break;
+                case "CreepDistance":
+                    this.CreepDistance = Convert.ToDouble(result);
+                    break;
+                case "JogSpeed":
+                    this.JogSpeed = Convert.ToDouble(result);
+                    break;
+
+                default:
+                    break;
+            }
         }
 
-        private void SaveToJogSpeed()
+        private void ReqSaveToJogSpeed()
         {
             var msg = new VCSMessageEventArgs
             {
@@ -237,7 +363,7 @@ namespace OHV.Module.Interactivity.PopUp
             this.Publish(msg);
         }
 
-        private void SaveToSpeedProfile()
+        private void ReqSaveToSpeedProfile()
         {
             var msg = new VCSMessageEventArgs
             {
@@ -253,7 +379,7 @@ namespace OHV.Module.Interactivity.PopUp
             this.Publish(msg);
         }
 
-        private void SaveToDriveSpeed()
+        private void ReqSaveToDriveSpeed()
         {
             var msg = new VCSMessageEventArgs
             {
@@ -321,7 +447,7 @@ namespace OHV.Module.Interactivity.PopUp
                     break;
                 case GUIMessageEventArgs.eGUIMessageKind.RspRouteManager:
                     break;
-                case GUIMessageEventArgs.eGUIMessageKind.ReqDirveSpeed:
+                case GUIMessageEventArgs.eGUIMessageKind.RspDirveSpeed:
                     {
                         if (obj.Result.IsFailed)
                             this.messageController.ShowNotificationView("Fail!! Set Drive Speed", false);
@@ -329,7 +455,7 @@ namespace OHV.Module.Interactivity.PopUp
                             this.messageController.ShowNotificationView("Success");
                     }
                     break;
-                case GUIMessageEventArgs.eGUIMessageKind.ReqSpeedProfile:
+                case GUIMessageEventArgs.eGUIMessageKind.RspSpeedProfile:
                     {
                         if (obj.Result.IsFailed)
                             this.messageController.ShowNotificationView("Fail!! Set SpeedProfile", false);
@@ -337,7 +463,7 @@ namespace OHV.Module.Interactivity.PopUp
                             this.messageController.ShowNotificationView("Success");
                     }
                     break;
-                case GUIMessageEventArgs.eGUIMessageKind.ReqJogSpeed:
+                case GUIMessageEventArgs.eGUIMessageKind.RspJogSpeed:
                     {
                         if (obj.Result.IsFailed)
                             this.messageController.ShowNotificationView("Fail!! Set JogSpeed", false);
@@ -345,6 +471,14 @@ namespace OHV.Module.Interactivity.PopUp
                             this.messageController.ShowNotificationView("Success");
                     }
                     break;
+                case GUIMessageEventArgs.eGUIMessageKind.RspParamsSave:
+                    {
+                        if (obj.Result.IsFailed)
+                            this.messageController.ShowNotificationView("Save Fail", false);
+                        else
+                            this.messageController.ShowNotificationView("Success");
+                    }
+                    break;
             }
         }
 
@@ -352,32 +486,32 @@ namespace OHV.Module.Interactivity.PopUp
         {
             if (args.MessageKey.Equals(MessageKey.Vehicle))
             {
-                switch(args.ModelPropertyName)
-                {
-                    case "LinearSpeed":
-                        this.LinearSpeed = CastTo<double>.From<object>(args);
-                        break;
-                    case "CurveSpeed":
-                        this.CurveSpeed = CastTo<double>.From<object>(args);
-                        break;
-                    case "JogSPeed":
-                        this.JogSpeed = CastTo<double>.From<object>(args);
-                        break;
-                    case "AccelSpeed":
-                        this.Acceleration = CastTo<double>.From<object>(args);
-                        break;
-                    case "DecelSpeed":
-                        this.Deceleration = CastTo<double>.From<object>(args);
-                        break;
-                    case "CreepSpeed":
-                        this.CreepSpeed = CastTo<double>.From<object>(args);
-                        break;
-                    case "CreepDistance":
-                        this.CreepDistance = CastTo<double>.From<object>(args);
-                        break;
-                    default:
-                        break;
-                }
+                //switch(args.ModelPropertyName)
+                //{
+                //    case "LinearSpeed":
+                //        this.LinearSpeed = CastTo<double>.From<object>(args);
+                //        break;
+                //    case "CurveSpeed":
+                //        this.CurveSpeed = CastTo<double>.From<object>(args);
+                //        break;
+                //    case "JogSPeed":
+                //        this.JogSpeed = CastTo<double>.From<object>(args);
+                //        break;
+                //    case "AccelSpeed":
+                //        this.Acceleration = CastTo<double>.From<object>(args);
+                //        break;
+                //    case "DecelSpeed":
+                //        this.Deceleration = CastTo<double>.From<object>(args);
+                //        break;
+                //    case "CreepSpeed":
+                //        this.CreepSpeed = CastTo<double>.From<object>(args);
+                //        break;
+                //    case "CreepDistance":
+                //        this.CreepDistance = CastTo<double>.From<object>(args);
+                //        break;
+                //    default:
+                //        break;
+                //}
             }
         }
 

+ 4 - 0
Dev/OHV/OHV.Module.ListViews/OHV.Module.ListViews.csproj

@@ -59,6 +59,10 @@
     <Reference Include="FluentResults">
       <HintPath>..\Assambly\FluentResults.dll</HintPath>
     </Reference>
+    <Reference Include="GSG.NET, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Assambly\GSG.NET.dll</HintPath>
+    </Reference>
     <Reference Include="MaterialDesignColors, Version=1.2.6.1513, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>..\packages\MaterialDesignColors.1.2.6\lib\net45\MaterialDesignColors.dll</HintPath>
     </Reference>

+ 9 - 9
Dev/OHV/OHV.Module.ListViews/Views/CommandListView.xaml

@@ -78,7 +78,7 @@
                         </DataGridTemplateColumn.CellTemplate>
                     </DataGridTemplateColumn>
 
-                    <materialDesign:DataGridTextColumn Header="Target" Binding="{Binding TargetID}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}"></materialDesign:DataGridTextColumn>
+                    <materialDesign:DataGridTextColumn FontSize="20" Header="Target" Binding="{Binding TargetID}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}"></materialDesign:DataGridTextColumn>
                     <materialDesign:DataGridTextColumn Header="Type" Binding="{Binding Type}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}"></materialDesign:DataGridTextColumn>
                     <materialDesign:DataGridTextColumn Header="State" Binding="{Binding State}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}"></materialDesign:DataGridTextColumn>
                     <materialDesign:DataGridTextColumn Header="CreateTime" Binding="{Binding CreateTime}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}"></materialDesign:DataGridTextColumn>
@@ -90,10 +90,10 @@
             <Grid Background="#263238" Grid.Column="1">
                 <Grid.RowDefinitions>
                     <RowDefinition Height="30"/>
-                    <RowDefinition Height="Auto"/>
+                    <RowDefinition Height="140"/>
                     <RowDefinition Height="*"/>
                 </Grid.RowDefinitions>
-                <TextBlock Text="Add / Delete" Style="{DynamicResource MaterialDesignTextBlock}" Foreground="Orange" VerticalAlignment="Center" Margin="10,0"/>
+                <TextBlock FontSize="20" Text="Add / Delete" Style="{DynamicResource MaterialDesignTextBlock}" Foreground="Orange" VerticalAlignment="Center" Margin="10,0"/>
 
                 <Grid Grid.Row="1" Margin="20,10,20,15" VerticalAlignment="Center" Background="#263238">
                     <Grid.RowDefinitions>
@@ -101,23 +101,23 @@
                         <RowDefinition Height="*"/>
                     </Grid.RowDefinitions>
 
-                    <Grid Margin="0,10,0,0" Grid.Row="0" Height="25" Background="#263238">
+                    <Grid Margin="0,5,0,0" Grid.Row="0" Height="40" Background="#263238">
                         <Grid.ColumnDefinitions>
                             <ColumnDefinition Width="120"/>
                             <ColumnDefinition Width="*"/>
                         </Grid.ColumnDefinitions>
-                        <TextBlock Text="TargetID" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center"/>
-                        <ComboBox ItemsSource="{Binding TargetIDList}" SelectedItem="{Binding TargetID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  Grid.Column="1">
+                        <TextBlock FontSize="20" Text="TargetID" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center"/>
+                        <ComboBox Height="Auto" Width="Auto" FontSize="20" ItemsSource="{Binding TargetIDList}" SelectedItem="{Binding TargetID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1">
                         </ComboBox>
                     </Grid>
 
-                    <Grid Margin="0,10,0,0" Grid.Row="1" Height="25">
+                    <Grid Margin="0,5,0,0" Grid.Row="1" Height="40">
                         <Grid.ColumnDefinitions>
                             <ColumnDefinition Width="120"/>
                             <ColumnDefinition Width="*"/>
                         </Grid.ColumnDefinitions>
-                        <TextBlock Text="Type" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center"/>
-                        <ComboBox ItemsSource="{Binding Source={StaticResource CommandType}}" SelectedItem="{Binding SelectedCommandType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  Grid.Column="1">
+                        <TextBlock FontSize="20" Text="Type" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center"/>
+                        <ComboBox FontSize="20" ItemsSource="{Binding Source={StaticResource CommandType}}" SelectedItem="{Binding SelectedCommandType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  Grid.Column="1">
                         </ComboBox>
                     </Grid>
 

+ 4 - 2
Dev/OHV/OHV.Module.ListViews/Views/CommandListViewModel.cs

@@ -121,7 +121,6 @@ namespace OHV.Module.ListViews.Views
                 this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
             }
 
-
             //UI 초기화
             this.TargetID = "None";
             this.SelectedCommandType = eCommandType.Move;
@@ -131,7 +130,10 @@ namespace OHV.Module.ListViews.Views
         {
             //TODO: null Exception
             //TODO: Application Exit 중 Null Exception 발생됨 -> 또 발생됨 06/29/20:02
-            //if ( this.CommandList.Count <= 0 )
+            //if (this.CommandList.Count <= 0)
+            //    return;
+
+            //if (Application.Current == null)
             //    return;
 
             Application.Current.Dispatcher.Invoke(() =>

+ 8 - 0
Dev/OHV/OHV.Module.ListViews/Views/SubCommandListView.xaml.cs

@@ -23,6 +23,14 @@ namespace OHV.Module.ListViews.Views
         public SubCommandListView()
         {
             InitializeComponent();
+
+            this.Unloaded += SubCommandListView_Unloaded;
+        }
+
+        private void SubCommandListView_Unloaded(object sender, RoutedEventArgs e)
+        {
+            var viewModel = this.DataContext as SubCommandListViewModel;
+            viewModel.Dispose();
         }
     }
 }

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

@@ -33,6 +33,7 @@ namespace OHV.Module.ListViews.Views
             set { SetProperty( ref this.selectedCommandType , value ); }
         }
 
+
         private List<string> targetIDList;
         public List<string> TargetIDList
         {
@@ -73,6 +74,12 @@ namespace OHV.Module.ListViews.Views
             this.eventAggregator.GetEvent<VehicleSubCmdListChanged>().Subscribe(UICallbackCommunication);
         }
 
+        internal void Dispose()
+        {
+            this.sql.SubCmdDAL.OnChangeTable -= SubCmdDAL_ChangedProperty;
+            this.eventAggregator.GetEvent<VehicleSubCmdListChanged>().Unsubscribe(UICallbackCommunication);
+        }
+
         private void SubCmdDAL_ChangedProperty()
         {
             RefreshLIst();
@@ -121,6 +128,7 @@ namespace OHV.Module.ListViews.Views
         {
             //TODO: Null Exception Check 
             //TODO: Application 종료 시 TaskCancledException 발생됨 -> 또 발생됨 06/29/20:02
+
             Application.Current.Dispatcher.Invoke(() =>
             {
                 this.SubCmdList.Clear();

+ 3 - 3
Dev/OHV/OHV.Module.MainViews/Views/AutoView.xaml

@@ -18,9 +18,9 @@
 
         <Grid Margin="15" Background="#263238">
             <Grid.RowDefinitions>
-                <RowDefinition />
-                <RowDefinition />
-                <RowDefinition />
+                <RowDefinition Height="*" />
+                <RowDefinition Height=".8*" />
+                <RowDefinition Height=".8*" />
             </Grid.RowDefinitions>
 
             <ContentControl Grid.Row="0" prism:RegionManager.RegionName="{x:Static OHVCommonShareds:RegionNames.VehicleCommandList}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="auto" Height="auto"/>

+ 1 - 1
Dev/OHV/OHV.Module.Status/VehicleStatusViewModel.cs

@@ -91,7 +91,7 @@ namespace OHV.Module.Status
 
             this.sqliteManager = sql;
 
-            this.VehicleCurrentTag = sql.VehicleInfoDAL.GetAll().FirstOrDefault().CurrentTag;
+            //this.VehicleCurrentTag = sql.VehicleInfoDAL.GetAll().FirstOrDefault().CurrentTag;
         }
 
         private void DriveUICallBackCommunication( DriveControlEventArgs obj )

+ 17 - 1
Dev/OHV/OHV.SqliteDAL/SqliteManager.cs

@@ -12,7 +12,7 @@ using Prism.Modularity;
 namespace OHV.SqliteDAL
 {
     [Module(ModuleName = "SqliteManager")]
-    public class SqliteManager : ISqlManager, IModule
+    public class SqliteManager : ISqlManager, IModule, IDisposable
     {
         public IGenericRepository<Config> ConfigDal { get; set; }
         //public RouteDAL RouteDal { get; set; }
@@ -50,5 +50,21 @@ namespace OHV.SqliteDAL
         public void OnInitialized(IContainerProvider containerProvider)
         {
         }
+
+        public void Dispose()
+        {
+            ConfigDal.Dispose();
+            SubCmdDAL.Dispose();
+            CommandDAL.Dispose();
+
+            this.AxisConfigDAL.Dispose();
+            this.AxisPositionDataDAL.Dispose();
+            this.AxisVelocityDataDAL.Dispose();
+            this.AlarmDAL.Dispose();
+            this.VehicleInfoDAL.Dispose();
+            this.HisAlarmDAL.Dispose();
+            this.RouteDal.Dispose();
+
+        }
     }
 }

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 20 - 19
Dev/OHV/OHV.Vehicle/Concept/AnimatedSplashScreenWindow.xaml


BIN
Dev/OHV/OHV.Vehicle/Config/IO.xlsx


+ 1 - 1
Dev/OHV/OHV.Vehicle/OHV.Vehicle.csproj

@@ -65,7 +65,7 @@
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote1|AnyCPU'">
     <DebugSymbols>true</DebugSymbols>
-    <OutputPath>\\192.168.127.10\vcs\</OutputPath>
+    <OutputPath>\\192.168.0.100\VCS\</OutputPath>
     <DefineConstants>TRACE;DEBUG</DefineConstants>
     <DebugType>full</DebugType>
     <PlatformTarget>AnyCPU</PlatformTarget>

+ 1 - 1
Dev/OHV/VehicleControlSystem/ControlLayer/Clamp.cs

@@ -258,7 +258,7 @@ namespace VehicleControlSystem.ControlLayer
                  {
                      LockUtils.Wait( 500 );
 
-                     int index = 0;
+                     //int index = 0;
                      //this.axes.ForEach(a =>
                      //{
                      //    if (beforePosition[index] != a.CurrentPosition)

+ 77 - 10
Dev/OHV/VehicleControlSystem/ControlLayer/MQ/ZmqManager.cs

@@ -14,6 +14,8 @@ using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using System.Threading;
+using VehicleControlSystem.ControlLayer.IO;
 using VehicleControlSystem.ControlLayer.Serial.BatteryTabos;
 using VehicleControlSystem.ControlLayer.Serial.DataModel;
 using VehicleControlSystem.Managers;
@@ -31,6 +33,13 @@ namespace VehicleControlSystem.ControlLayer.MQ
         ClearWarning = 9,
     }
 
+    public enum eDriveState
+    {
+        ServoOff,
+        ServoOn,
+        Fault,
+    }
+
     public class ZmqMessage
     {
         public string Key { get; set; }
@@ -49,6 +58,7 @@ namespace VehicleControlSystem.ControlLayer.MQ
         NetMQPoller poller = null;
         NetMQPoller subPoller = null;
         NetMQMonitor monitor = null;
+        NetMQMonitor pubMonitor = null;
 
         BMUManager bMUManager = null;
         Steering steering = null;
@@ -67,6 +77,19 @@ namespace VehicleControlSystem.ControlLayer.MQ
         }
 
         #region Properties
+
+        private eDriveState driveState = eDriveState.ServoOff;
+
+        public eDriveState DriveState
+         {
+            get { return driveState; }
+            set 
+            {
+                SetField(ref this.driveState, value);
+            }
+        }
+
+
         private eSteeringState requestSteering = eSteeringState.None;
         public eSteeringState RequestSteering
         {
@@ -249,10 +272,29 @@ namespace VehicleControlSystem.ControlLayer.MQ
             get { return jogSpeed; }
             set { SetField(ref this.jogSpeed, value); }
         }
+
+        private bool isDriveOn;
+
+        public bool IsDriveOn
+        {
+            get { return isDriveOn; }
+            set 
+            {
+                if(SetField(ref this.isDriveOn, value))
+                {
+
+                }
+            }
+        }
+
         #endregion
 
-        public ZmqManager( BMUManager bMU, Steering steering )
+        IO.EzIO iO = null;
+
+        public ZmqManager( BMUManager bMU, Steering steering, IIO io )
         {
+            this.iO = io as EzIO;
+
             NetMQ.NetMQConfig.Cleanup();
 
             this.bMUManager = bMU;
@@ -262,6 +304,14 @@ namespace VehicleControlSystem.ControlLayer.MQ
         public void Init()
         {
             pub = new PublisherSocket();
+
+            this.pubMonitor = new NetMQMonitor(pub, "inproc://pub.inproc", SocketEvents.Accepted);
+            this.pubMonitor.Accepted += (s, e) =>
+            {
+                PublishSyncData();
+                //logger.D("pub Connected");
+            };
+            this.pubMonitor.StartAsync();
             pub.Bind( "tcp://127.0.0.1:5570" );
 
             sub = new SubscriberSocket();
@@ -293,6 +343,14 @@ namespace VehicleControlSystem.ControlLayer.MQ
             this.bMUManager.OnChangedReceivedData += BMUManager_OnChangedReceivedData;
         }
 
+        void PublishSyncData()
+        {
+            if ( this.iO.IsOn("IN_CV_DETECT_01"))
+                Publish("Contain", true.ToString());
+            else
+                Publish("Contain", false.ToString());
+        }
+
         private void SynchronizedParmeter()
         {
             this.IsReqConnected = true;
@@ -300,7 +358,7 @@ namespace VehicleControlSystem.ControlLayer.MQ
             CurrentPointNo = GetCurrentPointNo();
             SetCurrentSteeringState(this.steering.GetSteeringState());
 
-            this.LinearSpeed = this.GetDriveLinerSpeed();
+            this.LinearSpeed = this.GetDriveLinerSpeed(); 
             this.CurveSpeed = this.GetDriveCurveSpeed();
             this.JogSPeed = this.GetJogSpeed();
             this.AccelSpeed = this.GetAccelSpeed();
@@ -352,6 +410,9 @@ namespace VehicleControlSystem.ControlLayer.MQ
             this.monitor.Stop();
             this.monitor.Dispose();
 
+            this.pubMonitor.Stop();
+            this.pubMonitor.Dispose();
+
             this.poller.Stop();
             this.poller.Dispose();
 
@@ -360,6 +421,8 @@ namespace VehicleControlSystem.ControlLayer.MQ
 
             this.sub.Dispose();
             this.req.Dispose();
+            this.rep.Dispose();
+            this.pub.Dispose();
         }
 
         object lockPulish = new object();
@@ -1071,7 +1134,7 @@ namespace VehicleControlSystem.ControlLayer.MQ
         #endregion
 
         #region Get/Set Parameter
-        internal double GetJogSpeed()
+        public double GetJogSpeed()
         {
             var rll = this.RequestDrive( "getm", "4053" );
             if ( rll.Count == 0 )
@@ -1107,7 +1170,7 @@ namespace VehicleControlSystem.ControlLayer.MQ
             return true;
         }
 
-        internal double GetDriveLinerSpeed()
+        public double GetDriveLinerSpeed()
         {
             var rll = this.RequestDrive( "getm", "3016" );
             if ( rll.Count == 0 )
@@ -1121,7 +1184,7 @@ namespace VehicleControlSystem.ControlLayer.MQ
 
             return ret;
         }
-        internal double GetDriveCurveSpeed()
+        public double GetDriveCurveSpeed()
         {
             var rll = this.RequestDrive( "getm", "3016" );
             if ( rll.Count == 0 )
@@ -1136,8 +1199,9 @@ namespace VehicleControlSystem.ControlLayer.MQ
             return ret;
         }
 
-        internal double GetAccelSpeed()
+        public double GetAccelSpeed()
         {
+            //TODO: GetAccelSpeed(???) Value 입력 필요
             var rll = this.RequestDrive("getm", "9999");
             if(rll.Count == 0)
             {
@@ -1151,8 +1215,9 @@ namespace VehicleControlSystem.ControlLayer.MQ
             return ret;
         }
 
-        internal double GetDecelSpeed()
+        public double GetDecelSpeed()
         {
+            //TODO: GetDecelSpeed(??) Value 입력 필요
             var rll = this.RequestDrive("getm", "9999");
             if (rll.Count == 0)
             {
@@ -1166,8 +1231,9 @@ namespace VehicleControlSystem.ControlLayer.MQ
             return ret;
         }
 
-        internal double GetCreepSpeed()
+        public double GetCreepSpeed()
         {
+            //TODO: GetCreepSpeed(???) Vlaue 입력 필요
             var rll = this.RequestDrive("getm", "9999");
             if (rll.Count == 0)
             {
@@ -1181,8 +1247,9 @@ namespace VehicleControlSystem.ControlLayer.MQ
             return ret;
         }
 
-        internal double GetCreepDistance()
+        public double GetCreepDistance()
         {
+            //TODO: GetCreepDistance(???) Vlaue 입력 필요
             var rll = this.RequestDrive("getm", "9999");
             if (rll.Count == 0)
             {
@@ -1231,6 +1298,6 @@ namespace VehicleControlSystem.ControlLayer.MQ
             return true;
         }
 
-#endregion
+        #endregion
     }
 }

+ 2 - 0
Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Advantech/Advantech.cs

@@ -230,10 +230,12 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
                 catch ( ObjectDisposedException exception )
                 {
                     this.CanError( );
+                    logger.E(exception);
                 }
                 catch ( IOException exception )
                 {
                     this.CanError(  );
+                    logger.E(exception);
                 }
                 catch ( Exception exception )
                 {

+ 2 - 0
Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Peak/Peak.cs

@@ -167,10 +167,12 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
                 }
                 catch ( ObjectDisposedException exception )
                 {
+                    logger.E(exception);
                     this.CanError(  );
                 }
                 catch ( IOException exception )
                 {
+                    logger.E(exception);
                     this.CanError(  );
                 }
                 catch ( Exception exception )

+ 70 - 67
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -79,7 +79,7 @@ namespace VehicleControlSystem.ControlLayer
                 {
                     var info = this.refObjects.Sqlite.VehicleInfoDAL.GetAll().FirstOrDefault();
                     info.CurrentTag = value.ToString();
-                    this.refObjects.Sqlite.VehicleInfoDAL.Update( info );
+                    //this.refObjects.Sqlite.VehicleInfoDAL.Update( info );
 
                     this.OnCurrentTagChanged?.Invoke( value );
                 }
@@ -173,7 +173,7 @@ namespace VehicleControlSystem.ControlLayer
                 {
                     var info = this.refObjects.Sqlite.VehicleInfoDAL.GetAll().FirstOrDefault();
                     info.VehicleState = value;
-                    this.refObjects.Sqlite.VehicleInfoDAL.Update( info );
+                    //this.refObjects.Sqlite.VehicleInfoDAL.Update( info );
                 }
             }
         }
@@ -188,7 +188,7 @@ namespace VehicleControlSystem.ControlLayer
                 {
                     var info = this.refObjects.Sqlite.VehicleInfoDAL.GetAll().FirstOrDefault();
                     info.MachineMode = value;
-                    this.refObjects.Sqlite.VehicleInfoDAL.Update( info );
+                    //this.refObjects.Sqlite.VehicleInfoDAL.Update( info );
                 }
             }
         }
@@ -469,6 +469,13 @@ namespace VehicleControlSystem.ControlLayer
             set { SetField(ref this.jogSpeed , value); }
         }
 
+        private bool isCanStanbyLocation;
+
+        public bool IsCanStanbyLocation
+        {
+            get { return isCanStanbyLocation; }
+            set { this.SetField(ref this.isCanStanbyLocation, value); }
+        }
 
         #endregion
 
@@ -714,7 +721,7 @@ namespace VehicleControlSystem.ControlLayer
             v.VehicleState = eVehicleState.None;
             v.MachineMode = eMachineMode.LocalMode;
 
-            refObjects.Sqlite.VehicleInfoDAL.Update( v );
+            //refObjects.Sqlite.VehicleInfoDAL.Update( v );
         }
 
         public int InitializationVehicle()
@@ -811,14 +818,18 @@ namespace VehicleControlSystem.ControlLayer
 
         void ReqFaultReset( DriveControlEventArgs _args )
         {
-            var drive = 0;
+            var ll = this.refObjects.ZmqManager.SetDriveControl(eDriveControl.ResetFault);
 
-            //var result = drive.ResetAmpFault();
+            if(ll == 38)
+            {
+                logger.E($"Servo Fault Reset Error");
+            }
 
             var msg = new DriveControlEventArgs
             {
                 ControlKind = DriveControlEventArgs.eControlKind.FaultReset
             };
+            msg.Result = Results.Ok("Drive Fault Reset");
 
             msg.Result = Results.Ok( "Drive On" );
             this.DriveControlEventPublish( msg );
@@ -1363,7 +1374,7 @@ namespace VehicleControlSystem.ControlLayer
 #if SIMULATION
             this.PIOSensorOn();
 
-            var pioTimeout = CastTo<int>.From<string>( sql.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
+            var pioTimeout = CastTo<int>.From<string>( refObjects.Sqlite.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
 
             PIOClear();
             loggerPIO.I( $"Start Battery Charge PIO" );
@@ -1441,7 +1452,7 @@ namespace VehicleControlSystem.ControlLayer
 #if SIMULATION
             loggerPIO.I( $"Stop Battery Charge PIO" );
 
-            var pioTimeout = CastTo<int>.From<string>( sql.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
+            var pioTimeout = CastTo<int>.From<string>( refObjects.Sqlite.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
 
             this.PIOClear();
 
@@ -2223,92 +2234,86 @@ namespace VehicleControlSystem.ControlLayer
                     }
                     break;
 
+                case "CurrentMCR":
+                    
+                    break;
+
                 case "RearDriveState":
                     {
-                        var v = CastTo<DriveState>.From<object>( newValue );
-                        this.RearDriveState = v;
+                        this.RearDriveState = CastTo<DriveState>.From<object>( newValue );
                     }
                     break;
 
                 case "FrontLoadFactor":
                     {
-                        var v = CastTo<double>.From<object>( newValue );
-                        this.FrontLoadFactor = v;
-                        this.FrontTorque = Math.Truncate( ( ( v * 1.9 ) / 1000 ) * 100 ) / 100;
+                        this.FrontLoadFactor = CastTo<double>.From<object>( newValue );
+                        this.FrontTorque = Math.Truncate( ( (FrontLoadFactor * 1.9 ) / 1000 ) * 100 ) / 100;
                     }
                     break;
 
                 case "FrontRPM":
                     {
-                        var v = CastTo<double>.From<object>( newValue );
-                        this.FrontRpm = v;
+                        this.FrontRpm = CastTo<double>.From<object>( newValue );
 
-                        var ll = ( ( ( ( v / 60 ) * ( 2 * Math.PI ) ) * 0.06 ) / 10 );
+                        var ll = ( ( ( (FrontRpm / 60 ) * ( 2 * Math.PI ) ) * 0.06 ) / 10 );
                         this.FrontSpeed = Math.Truncate( ll * 100 ) / 100;
                     }
                     break;
 
                 case "RearLoadFactor":
                     {
-                        var v = CastTo<double>.From<object>( newValue );
-                        this.RearLoadFactor = v;
-                        this.RearTorque = Math.Truncate( ( ( v * 1.9 ) / 1000 ) * 100 ) / 100;
+                        this.RearLoadFactor = CastTo<double>.From<object>( newValue );
+                        this.RearTorque = Math.Truncate( ( (RearLoadFactor * 1.9 ) / 1000 ) * 100 ) / 100;
                     }
                     break;
 
                 case "RearRPM":
                     {
-                        var v = CastTo<double>.From<object>( newValue );
-                        this.RearRpm = v;
+                        this.RearRpm = CastTo<double>.From<object>( newValue );
 
-                        var ll = ( ( ( ( v / 60 ) * ( 2 * Math.PI ) ) * 0.06 ) / 10 );
+                        var ll = ( ( ( (RearRpm / 60 ) * ( 2 * Math.PI ) ) * 0.06 ) / 10 );
                         this.RearSpeed = Math.Truncate( ll * 100 ) / 100;
                     }
                     break;
 
-                case "AutoReadyState":
-                    {
-                        var v = CastTo<eVehicleAutoReadyState>.From<object>(newValue);
-                        this.AutoReadyState = v;
-                    }
-                    break;
-
-                case "LinearSpeed":
-                    {
-                        this.LinearSpeed = CastTo<double>.From<object>(newValue);
-                    }
-                    break;
-                case "CurveSpeed":
-                    {
-                        this.CurveSpeed = CastTo<double>.From<object>(newValue);
-                    }
-                    break;
-                case "JogSPeed":
-                    {
-                        this.JogSPeed = CastTo<double>.From<object>(newValue);
-                    }
-                    break;
-                case "AccelSpeed":
-                    {
-                        this.AccelSpeed = CastTo<double>.From<object>(newValue);
-                    }
-                    break;
-                case "DecelSpeed":
-                    {
-                        this.DecelSpeed = CastTo<double>.From<object>(newValue);
-                    }
-                    break;
-                case "CreepSpeed":
-                    {
-                        this.CreepSpeed = CastTo<double>.From<object>(newValue);
-                    }
-                    break;
-                case "CreepDistance":
-                    {
-                        this.CreepDistance = CastTo<double>.From<object>(newValue);
-                    }
-                    break;
-
+                //case "LinearSpeed":
+                //    {
+                //        this.LinearSpeed = CastTo<double>.From<object>(newValue);
+                //    }
+                //    break;
+                //case "CurveSpeed":
+                //    {
+                //        this.CurveSpeed = CastTo<double>.From<object>(newValue);
+                //    }
+                //    break;
+                //case "JogSPeed":
+                //    {
+                //        this.JogSPeed = CastTo<double>.From<object>(newValue);
+                //    }
+                //    break;
+                //case "AccelSpeed":
+                //    {
+                //        this.AccelSpeed = CastTo<double>.From<object>(newValue);
+                //    }
+                //    break;
+                //case "DecelSpeed":
+                //    {
+                //        this.DecelSpeed = CastTo<double>.From<object>(newValue);
+                //    }
+                //    break;
+                //case "CreepSpeed":
+                //    {
+                //        this.CreepSpeed = CastTo<double>.From<object>(newValue);
+                //    }
+                //    break;
+                //case "CreepDistance":
+                //    {
+                //        this.CreepDistance = CastTo<double>.From<object>(newValue);
+                //    }
+                //    break;
+                //case "IsCanStanbyLocation":
+                //    this.IsCanStanbyLocation = CastTo<bool>.From<object>(newValue);
+                //    break;
                 default:
                     break;
             }
@@ -2385,8 +2390,6 @@ namespace VehicleControlSystem.ControlLayer
                         this.RearDriveState = v;
                     }
                     break;
-
-                
                 default:
                     break;
             }

+ 5 - 4
Dev/OHV/VehicleControlSystem/Managers/HostManager.cs

@@ -406,8 +406,9 @@ namespace VehicleControlSystem.Managers
 
             var cmd = new Command();
 
-            var info = sql.VehicleInfoDAL.GetAll().FirstOrDefault();
-            if ( info.MachineMode == eMachineMode.LocalMode )
+            var info = this.vehicle.MachineMode;/*sql.VehicleInfoDAL.GetAll().FirstOrDefault();*/
+            
+            if ( info == eMachineMode.LocalMode )
             {
                 loggerHost.E( $"[OCS] Cmd - Current Mode Local Mode " );
                 return;
@@ -485,8 +486,8 @@ namespace VehicleControlSystem.Managers
         {
             var cmd = new Command();
 
-            var info = sql.VehicleInfoDAL.GetAll().FirstOrDefault();
-            if ( info.MachineMode == eMachineMode.LocalMode )
+            var info = this.vehicle.MachineMode;/*sql.VehicleInfoDAL.GetAll().FirstOrDefault();*/
+            if ( info == eMachineMode.LocalMode )
             {
                 msg.SubCode = "999";
                 this.Reply( msg );

+ 58 - 21
Dev/OHV/VehicleControlSystem/VCSystem.cs

@@ -39,7 +39,7 @@ namespace VehicleControlSystem
         IEventAggregator eventAggregator = null;
 
         public IIO IO = null;
-        ZmqManager zmqManager = null;
+        public ZmqManager ZmqManager { get; set; }
         BMUManager bMUManager = null;
         Conveyor conveyor = null;
         Steering steering = null;
@@ -117,11 +117,11 @@ namespace VehicleControlSystem
             this.steering = new Steering(this.IO, this.sql, this.eventAggregator);
 
             //ZeroMQ
-            this.zmqManager = new ZmqManager(this.bMUManager, this.steering);
-            this.zmqManager.Init();
+            this.ZmqManager = new ZmqManager(this.bMUManager, this.steering, this.IO);
+            this.ZmqManager.Init();
 
             //Drive
-            this.drive = new GSIDrive(this.sql, this.steering, this.zmqManager);
+            this.drive = new GSIDrive(this.sql, this.steering, this.ZmqManager);
             this.drive.Init();
 
             //Process
@@ -138,7 +138,7 @@ namespace VehicleControlSystem
             refObject.Conveyor = this.conveyor;
             refObject.Clamp = this.clamp;
             refObject.Steering = this.steering;
-            refObject.ZmqManager = this.zmqManager;
+            refObject.ZmqManager = this.ZmqManager;
             refObject.Alarms = this.Alarms;
             refObject.Sqlite = this.sql;
             refObject.AutoManager = this.autoManager;
@@ -272,49 +272,86 @@ namespace VehicleControlSystem
                 case VCSMessageEventArgs.eVCSMessageKind.ReqRouteManager:
                     break;
                 case VCSMessageEventArgs.eVCSMessageKind.ReqDirveSpeed:
-                    this.SetDriveSpeed(msg);
+                    this.ReqSetDriveSpeed(msg);
                     break;
                 case VCSMessageEventArgs.eVCSMessageKind.ReqSpeedProfile:
-                    this.SetSpeedProfile(msg);
+                    this.ReqSetSpeedProfile(msg);
                     break;
                 case VCSMessageEventArgs.eVCSMessageKind.ReqJogSpeed:
-                    this.SetJogSpeed(msg);
+                    this.ReqSetJogSpeed(msg);
+                    break;
+                case VCSMessageEventArgs.eVCSMessageKind.ReqParamsSave:
+                    this.ReqParamsSave(msg);
                     break;
                 default:
                     break;
             }
         }
 
-        private void SetJogSpeed(VCSMessageEventArgs msg)
+        private void ReqParamsSave(VCSMessageEventArgs msg)
+        {
+            var reply = new GUIMessageEventArgs
+            {
+                Kind = GUIMessageEventArgs.eGUIMessageKind.RspParamsSave,
+                Result = FluentResults.Results.Fail("Fail ReqParamsSave"),
+            };
+
+            var result = this.ZmqManager.SetJogSpeed((double)msg.Args["JogSpeed"]);
+            if (!result)
+            {
+                GUIMessageEventPublish(reply);
+                return;
+            }
+
+            result = this.ZmqManager.SetDriveSpeed(msg.Args["Linear"].ToString(), msg.Args["Curve"].ToString());
+            if (!result)
+            {
+                logger.E($"Set DriveSPeed Error");
+                return;
+            }
+
+            result = this.ZmqManager.SetDriveSpeedProfile(msg.Args["Accel"].ToString(), msg.Args["Decel"].ToString(),
+                    msg.Args["Creep"].ToString(), msg.Args["CreepDistance"].ToString());
+            if (!result)
+            {
+                logger.E($"Set SpeedProfile Error");
+                return;
+            }
+
+            reply.Result = FluentResults.Results.Ok();
+            GUIMessageEventPublish(reply);
+        }
+
+        private void ReqSetJogSpeed(VCSMessageEventArgs msg)
         {
             var reply = new GUIMessageEventArgs
             {
-                Kind = GUIMessageEventArgs.eGUIMessageKind.ReqJogSpeed,
+                Kind = GUIMessageEventArgs.eGUIMessageKind.RspJogSpeed,
                 Result = FluentResults.Results.Fail("Fail SetJogSpeed"),
             };
 
             if (msg.Args.ContainsKey("JogSpeed"))
             {
-                if(this.zmqManager.SetJogSpeed((double)msg.Args["JogSpeed"]))
+                if (this.ZmqManager.SetJogSpeed((double)msg.Args["JogSpeed"]))
                 {
                     reply.Result = FluentResults.Results.Ok();
-                }    
+                }
             }
 
             GUIMessageEventPublish(reply);
         }
 
-        private void SetSpeedProfile(VCSMessageEventArgs msg)
+        private void ReqSetSpeedProfile(VCSMessageEventArgs msg)
         {
             var reply = new GUIMessageEventArgs
             {
-                Kind = GUIMessageEventArgs.eGUIMessageKind.ReqSpeedProfile,
+                Kind = GUIMessageEventArgs.eGUIMessageKind.RspSpeedProfile,
                 Result = FluentResults.Results.Fail("Fail SetSpeedProfile"),
             };
 
             if (msg.Args.ContainsKey("Accel") && msg.Args.ContainsKey("Decel") && msg.Args.ContainsKey("Creep") && msg.Args.ContainsKey("CreepDistance"))
             {
-                if(this.zmqManager.SetDriveSpeedProfile(msg.Args["Accel"].ToString(), msg.Args["Decel"].ToString(),
+                if (this.ZmqManager.SetDriveSpeedProfile(msg.Args["Accel"].ToString(), msg.Args["Decel"].ToString(),
                     msg.Args["Creep"].ToString(), msg.Args["CreepDistance"].ToString()))
                 {
                     reply.Result = FluentResults.Results.Ok();
@@ -324,17 +361,17 @@ namespace VehicleControlSystem
             GUIMessageEventPublish(reply);
         }
 
-        private void SetDriveSpeed(VCSMessageEventArgs msg)
+        private void ReqSetDriveSpeed(VCSMessageEventArgs msg)
         {
             var reply = new GUIMessageEventArgs
             {
-                Kind = GUIMessageEventArgs.eGUIMessageKind.ReqDirveSpeed,
+                Kind = GUIMessageEventArgs.eGUIMessageKind.RspDirveSpeed,
                 Result = FluentResults.Results.Fail("Fail SetSpeedProfile"),
             };
 
             if (msg.Args.ContainsKey("Linear") && msg.Args.ContainsKey("Curve"))
             {
-                if(this.zmqManager.SetDriveSpeed(msg.Args["Linear"].ToString(), msg.Args["Curve"].ToString()))
+                if (this.ZmqManager.SetDriveSpeed(msg.Args["Linear"].ToString(), msg.Args["Curve"].ToString()))
                 {
                     reply.Result = FluentResults.Results.Ok();
                 }
@@ -551,7 +588,7 @@ namespace VehicleControlSystem
                     return;
                 }
 
-                if (!zmqManager.SetOperationState(eOperatationMode.AutoMode))
+                if (!ZmqManager.SetOperationState(eOperatationMode.AutoMode))
                 {
                     this.autoManager.ProcessAlarm(38);
                     return;
@@ -563,7 +600,7 @@ namespace VehicleControlSystem
             }
             else
             {
-                if (!zmqManager.SetOperationState(eOperatationMode.ManualMode))
+                if (!ZmqManager.SetOperationState(eOperatationMode.ManualMode))
                 {
                     this.autoManager.ProcessAlarm(38);
                     return;
@@ -602,7 +639,7 @@ namespace VehicleControlSystem
 
             this.bMUManager.Disconnect();
             this.drive.Dispose();
-            this.zmqManager.Dispose();
+            this.ZmqManager.Dispose();
 
             (this.IO as IDisposable).Dispose(); //IO 는 마지막에 정리함.
         }

+ 1 - 1
Dev/OHV/VehicleControlSystem/VehicleControlSystem.csproj

@@ -18,7 +18,7 @@
     <DebugType>full</DebugType>
     <Optimize>false</Optimize>
     <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>TRACE;DEBUG</DefineConstants>
+    <DefineConstants>TRACE;DEBUG;SIMULATION</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>3</WarningLevel>
   </PropertyGroup>

+ 1 - 1
Dev/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger/Config/log4net.xml

@@ -118,7 +118,7 @@
 		<file value="C:\LOG\OHV\Vehicle\Vehicle_WARN.log" />
 		<appendToFile value="true" />
 		<rollingStyle value="Date" />
-		<backupDays value="180" />
+		<backupDays value="10" />
 		<datePattern value="-MMdd'.log'" />
 		<layout type="log4net.Layout.PatternLayout">
 			<conversionPattern value="%d{MM-dd HH:mm:ss.fff} %2t %p %m%n" />

+ 4 - 0
Dev/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger/FormMain.cs

@@ -194,6 +194,10 @@ namespace OHVDriveLogger
                     buffered.Flush();
             }
 
+
+
+
+
             this.plc.WriteBit( "DRIVE_LOGGING_ONOFF", false );
 
             //LockUtils.Wait( 200 );

+ 1 - 4
Dev/OHVDriveLogger/OHVDriveLogger/OHVDriveLogger/ZmqManager.cs

@@ -89,7 +89,7 @@ namespace OHVDriveLogger
             set { currentMCR = value; }
         }
 
-        private string isContain;
+        private string isContain = "false";
 
         public string IsContain
         {
@@ -113,9 +113,6 @@ namespace OHVDriveLogger
             set { batterySOC = value; }
         }
 
-
-
-
         public ZmqManager()
         {
             NetMQ.NetMQConfig.Cleanup();