Bladeren bron

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

DESKTOP-Kang 6 jaren geleden
bovenliggende
commit
6f16f23ab8
31 gewijzigde bestanden met toevoegingen van 516 en 765 verwijderingen
  1. 3 10
      Dev/OHV/OHV.Common/Model/SubCmd.cs
  2. 9 0
      Dev/OHV/OHV.Common/Shareds/SharedEnumType.cs
  3. 21 23
      Dev/OHV/OHV.Module.Interactivity/PopUp/BatteryConfigView.xaml
  4. 13 7
      Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlView.xaml
  5. 42 60
      Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlViewModel.cs
  6. 19 8
      Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoView.xaml
  7. 3 21
      Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs
  8. 2 2
      Dev/OHV/OHV.Module.Interactivity/PopUp/InOutControlView.xaml
  9. 1 32
      Dev/OHV/OHV.Module.Interactivity/PopUp/InOutControlViewModel.cs
  10. 23 17
      Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoView.xaml
  11. 48 113
      Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoViewModel.cs
  12. 43 15
      Dev/OHV/OHV.Module.Interactivity/PopUp/OpticalReadingConfigView.xaml
  13. 31 80
      Dev/OHV/OHV.Module.Interactivity/PopUp/OpticalReadingConfigViewModel.cs
  14. 14 6
      Dev/OHV/OHV.Module.Interactivity/PopUp/ServoConfigView.xaml
  15. 12 5
      Dev/OHV/OHV.Module.ListViews/Views/SubCommandListView.xaml
  16. 50 0
      Dev/OHV/OHV.Module.ListViews/Views/SubCommandListViewModel.cs
  17. 0 14
      Dev/OHV/OHV.Module.MainViews/Views/HistoryView.xaml
  18. 2 60
      Dev/OHV/OHV.Module.MainViews/Views/TeachView.xaml
  19. 1 18
      Dev/OHV/OHV.Module.MainViews/Views/UnitView.xaml
  20. 1 0
      Dev/OHV/OHV.SqliteDAL/OHVDbInitializer.cs
  21. 8 16
      Dev/OHV/OHV.Vehicle/Concept/D_MainWindow.xaml
  22. 0 1
      Dev/OHV/OHV.Vehicle/Concept/D_MainWindow.xaml.cs
  23. 1 19
      Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs
  24. BIN
      Dev/OHV/OHV.Vehicle/Config/IO.xlsx
  25. 1 1
      Dev/OHV/OHV.Vehicle/MainWindowViewModel.cs
  26. 14 138
      Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Advantech/Advantech.cs
  27. 0 1
      Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/BMUManager.cs
  28. 82 69
      Dev/OHV/VehicleControlSystem/ControlLayer/Steering.cs
  29. 58 19
      Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs
  30. 10 9
      Dev/OHV/VehicleControlSystem/Managers/Scheduler.cs
  31. 4 1
      Dev/OHV/VehicleControlSystem/VCSystem.cs

+ 3 - 10
Dev/OHV/OHV.Common/Model/SubCmd.cs

@@ -1,4 +1,5 @@
-using System;
+using OHV.Common.Shareds;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -11,14 +12,6 @@ namespace OHV.Common.Model
     /// </summary>
     public class SubCmd
     {
-        public enum eType
-        {
-            Move,
-            Load,
-            Unload,
-            Charge,
-        }
-
         public enum eCmdType
         {
             Auto,
@@ -43,7 +36,7 @@ namespace OHV.Common.Model
         public string CmdID { get; set; }
         public string TargetID { get; set; }
 
-        public eType Type { get; set; }
+        public eSubCommandType Type { get; set; }
 
         public eCmdType CmdType { get; set; }
         public eSubCmdState State { get; set; }

+ 9 - 0
Dev/OHV/OHV.Common/Shareds/SharedEnumType.cs

@@ -130,6 +130,15 @@
 		AbortByHost,
 		AbortByAbnormal,
 	}
+
+	public enum eSubCommandType
+	{
+		Move,
+		Load,
+		Unload,
+		Charge,
+	}
+
 	#endregion
 
 	public enum eAlarmLevel

+ 21 - 23
Dev/OHV/OHV.Module.Interactivity/PopUp/BatteryConfigView.xaml

@@ -44,14 +44,27 @@
             <ColumnDefinition Width="*"/>
             <ColumnDefinition Width="130"/>
         </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="50"/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
+
+        <Grid Grid.Row="0">
+            <TextBlock Grid.Row="0" Margin="5" Text="Battery View" FontSize="25" Foreground="White" HorizontalAlignment="Left" VerticalAlignment="Center"/>
+            <StackPanel VerticalAlignment="Center"
+                        HorizontalAlignment="Right"
+                        Margin="1">
+                <Button Margin="1" HorizontalAlignment="Center" Height="45" BorderBrush="Gray" BorderThickness="1" Background="{x:Null}">
+                    <StackPanel Orientation="Horizontal">
+                        <Ellipse Margin="3" Fill="{Binding BatteryConnectBrush, FallbackValue=Gray}" Width="30" Height="30"/>
+                        <TextBlock Margin="2" Text="{Binding BatteryConnect, FallbackValue=DisConnecting}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+            </StackPanel>
+        </Grid>
 
-        <Grid Grid.Column="0">
+            <Grid Grid.Column="0" Grid.Row="1">
             <Grid Margin="15" Background="#37474f">
-                <Grid.RowDefinitions>
-                    <RowDefinition/>
-                    <RowDefinition/>
-                </Grid.RowDefinitions>
-
                 <Grid Grid.Row="0">
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="*"/>
@@ -65,10 +78,9 @@
                         <RowDefinition Height="*"/>
                         <RowDefinition Height="*"/>
                         <RowDefinition Height="*"/>
+                        <RowDefinition Height="*"/>
                     </Grid.RowDefinitions>
 
-                    <!--Voltage-->
-                    <TextBlock Grid.Row="0" Text="Battery View" FontSize="20" Foreground="White"/>
                     <Button Grid.Column="0" Grid.Row="0"
                             Content="Voltage" Margin="3" VerticalAlignment="Bottom"/>
 
@@ -198,24 +210,10 @@
                         </TextBlock>
                     </Border>
                 </Grid>
-
-                <Grid Grid.Row="1" Margin="5">
-                    <Border BorderBrush="Gray" BorderThickness="1"/>
-                    <StackPanel VerticalAlignment="Center"
-                                HorizontalAlignment="Center">
-                        <Button Margin="5" HorizontalAlignment="Center" Height="Auto" BorderBrush="Gray" BorderThickness="1">
-                            <StackPanel Orientation="Horizontal">
-                                <Ellipse Margin="5" Fill="{Binding BatteryConnectBrush, FallbackValue=Gray}" Width="30" Height="30"/>
-                                <TextBlock Margin="15" Text="{Binding BatteryConnect, FallbackValue=DisConnecting}" VerticalAlignment="Center" HorizontalAlignment="Center" />
-                            </StackPanel>
-                        </Button>
-                    </StackPanel>
-                </Grid>
-                
             </Grid>
         </Grid>
 
-        <Grid Grid.Column="1" Background="#263238">
+        <Grid Grid.Column="1" Background="#263238" Grid.RowSpan="2">
             <Border Margin="1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
             <StackPanel VerticalAlignment="Bottom">
                 <Button Margin="10,0,10,10" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2" Command="{Binding CloseDialogCommand}" CommandParameter="true">

+ 13 - 7
Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlView.xaml

@@ -9,7 +9,7 @@
              prism:ViewModelLocator.AutoWireViewModel="True"
              xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
              Background="#455a64"
-             Height="600"
+             Height="650"
              Width="800">
 
     <prism:Dialog.WindowStyle>
@@ -36,8 +36,16 @@
             <ColumnDefinition Width="*"/>
             <ColumnDefinition Width="130"/>
         </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="40"/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
 
-        <Grid Grid.Column="0">
+        <Grid Grid.Row="0">
+            <TextBlock Margin="15,0,0,0" Text="Conveyor View" FontSize="25" Foreground="White"/>
+        </Grid>
+        
+        <Grid Grid.Column="0" Grid.Row="1">
             <Grid Margin="15" Background="#37474f">
                 <Grid.RowDefinitions>
                     <RowDefinition Height="*"/>
@@ -53,8 +61,6 @@
                         <ColumnDefinition Width="*"/>
                     </Grid.ColumnDefinitions>
 
-                    <TextBlock Text="Conveyor View" FontSize="20" Foreground="White"/>
-
                     <StackPanel Grid.Column="0"
                                 Orientation="Vertical"
                                 HorizontalAlignment="Center"
@@ -62,8 +68,8 @@
 
                         <Button Background="{x:Null}" HorizontalContentAlignment="Left">
                             <StackPanel Orientation="Horizontal">
-                                <Ellipse Margin="0,0,16,0" Width="20" Height="20" Fill="{Binding CvError, FallbackValue=Gray}"/>
-                                <TextBlock Text="CV ERROR" />
+                                <Ellipse Margin="0,0,16,0" Width="20" Height="20" Fill="{Binding CvRun, FallbackValue=Gray}"/>
+                                <TextBlock Text="CV Running" />
                             </StackPanel>
                         </Button>
 
@@ -293,7 +299,7 @@
             </Grid>
         </Grid>
 
-        <Grid Grid.Column="1" Background="#263238">
+        <Grid Grid.Column="1" Grid.RowSpan="2" Background="#263238">
             <Border Margin="1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
             <StackPanel VerticalAlignment="Bottom">
                 <Button Margin="10,0,10,10" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2" Command="{Binding CloseDialogCommand}" CommandParameter="true">

+ 42 - 60
Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlViewModel.cs

@@ -162,29 +162,34 @@ namespace OHV.Module.Interactivity.PopUp
 
         private void ExecuteLoadUnloadCommand( string obj )
         {
-            if ( obj.ToString().Equals( "Load" ) )
-            {
-                var msg = new VCSMessageEventArgs()
-                {
-                    Kind = VCSMessageEventArgs.eVCSMessageKind.ReqConveyorLoad,
-                };
-                this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
-            }
-            else
-            {
-                var msg = new VCSMessageEventArgs()
-                {
-                    Kind = VCSMessageEventArgs.eVCSMessageKind.ReqConveyorUnload,
-                };
-                this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
-            }
+            this.messageController.ShowConfirmationPopupView( $"Conveyor Move Start ?" , r =>
+              {
+                  if ( r.Result == ButtonResult.OK )
+                  {
+                      if ( obj.ToString().Equals( "Load" ) )
+                      {
+                          var msg = new VCSMessageEventArgs()
+                          {
+                              Kind = VCSMessageEventArgs.eVCSMessageKind.ReqConveyorLoad ,
+                          };
+                          this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
+                      }
+                      else
+                      {
+                          var msg = new VCSMessageEventArgs()
+                          {
+                              Kind = VCSMessageEventArgs.eVCSMessageKind.ReqConveyorUnload ,
+                          };
+                          this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
+                      }
+                  }
+              } );
         }
 
         private void GetSensorState( EzIO _iO )
         {
-            //IO_OnChangedIO 중복됨 어쩌지
-            if ( _iO.IsOn( "IN_CV_ERROR" ) )
-                this.CvError = Brushes.LimeGreen;
+            //if ( _iO.IsOn( "IN_CV_ERROR" ) )
+            //    this.CvError = Brushes.LimeGreen;
 
             if(_iO.IsOn( "IN_CV_DETECT_00" ) )
                 this.CvEntryIn = Brushes.LimeGreen;
@@ -244,11 +249,6 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
-        private void RspIOState( VCSMessageEventArgs args )
-        {
-            //var ioAll = args.Args as EzIO;
-        }
-
         private void UICallbackCommunication( GUIMessageEventArgs _args )
         {
             if( _args.Kind == GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange)
@@ -257,21 +257,13 @@ namespace OHV.Module.Interactivity.PopUp
                 {
                     switch(_args.ModelPropertyName)
                     {
-                        case "ObstacleStateProperty":
-                            {
-                                var reply = CastTo<eObstacleState>.From<object>( _args.Args );
-                                this.ChangeObstacleState( reply );
-                            }
+                        case "":
                             break;
                     }
                 }
             }
         }
 
-        private void ChangeObstacleState( eObstacleState _reply )
-        {
-        }
-
         private void ExecutePosMoveCommand( object obj )
         {
             this.messageController.ShowConfirmationPopupView( "Carrier Move To ?" , r =>
@@ -282,17 +274,17 @@ namespace OHV.Module.Interactivity.PopUp
 
                     var msg = new AxisControlEventArgs
                     {
-                        Dir = AxisControlEventArgs.eEventDir.ToBack ,
-                        Kind = AxisControlEventArgs.eAxisControlKind.SyncMove ,
+                        Dir = eEventDir.ToBack ,
+                        Kind = eAxisControlKind.SyncMove ,
                     };
 
                     switch ( selectedPos )
                     {
                         case "Lock":
-                            msg.PosDir = AxisControlEventArgs.ePosDir.Lock;
+                            msg.PosDir = ePosDir.Lock;
                             break;
                         case "UnLock":
-                            msg.PosDir = AxisControlEventArgs.ePosDir.UnLock;
+                            msg.PosDir = ePosDir.UnLock;
                             break;
                     }
 
@@ -308,34 +300,34 @@ namespace OHV.Module.Interactivity.PopUp
 
         private void AxisUICallbackCommunication( AxisControlEventArgs _args )
         {
-            if ( _args.Dir == AxisControlEventArgs.eEventDir.ToFront )
+            if ( _args.Dir == eEventDir.ToFront )
             {
                 switch ( _args.Kind )
                 {
-                    case AxisControlEventArgs.eAxisControlKind.NONE:
+                    case eAxisControlKind.NONE:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.OriginReturn:
+                    case eAxisControlKind.OriginReturn:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.Stop:
+                    case eAxisControlKind.Stop:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.EStop:
+                    case eAxisControlKind.EStop:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.Move:
+                    case eAxisControlKind.Move:
                         ResponseMove( _args );
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.Jog:
+                    case eAxisControlKind.Jog:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.ServoOn:
+                    case eAxisControlKind.ServoOn:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.ServoOff:
+                    case eAxisControlKind.ServoOff:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition:
+                    case eAxisControlKind.ReqCurrentPosition:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.ReqStopCurrentPosition:
+                    case eAxisControlKind.ReqStopCurrentPosition:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.FaultReset:
+                    case eAxisControlKind.FaultReset:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.AxisState:
+                    case eAxisControlKind.AxisState:
                         AxisState( _args );
                         break;
                     case eAxisControlKind.SyncMove:
@@ -455,25 +447,15 @@ namespace OHV.Module.Interactivity.PopUp
             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>().Unsubscribe( DriveControlCallBack );
 
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallbackCommunication );
         }
 
         public void OnDialogOpened( IDialogParameters parameters )
         {
-            /*IO*/
             var msg = new VCSMessageEventArgs() { Kind = VCSMessageEventArgs.eVCSMessageKind.ReqIOObject };
             this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
 
-            /*Lock Axis*/
-            //var axisMsg = new AxisControlEventArgs
-            //{
-            //    Dir = AxisControlEventArgs.eEventDir.ToBack ,
-            //    Kind = AxisControlEventArgs.eAxisControlKind.NONE
-            //};
-            //this.AxisPublishEvent(axisMsg);
-
             this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack , Kind = AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition } );
         }
 

+ 19 - 8
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoView.xaml

@@ -9,10 +9,10 @@
              prism:ViewModelLocator.AutoWireViewModel="True"
              mc:Ignorable="d" 
              Width="1130"
-             Height="700"
+             Height="750"
              Background="#455a64"
-            xmlns:System="clr-namespace:System;assembly=mscorlib"
-            xmlns:SharedEnum="clr-namespace:OHV.Common.Model;assembly=OHV.Common"
+             xmlns:System="clr-namespace:System;assembly=mscorlib"
+             xmlns:SharedEnum="clr-namespace:OHV.Common.Model;assembly=OHV.Common"
              >
 
     <prism:Dialog.WindowStyle>
@@ -62,8 +62,20 @@
             <ColumnDefinition Width="130"/>
             <ColumnDefinition Width="130"/>
         </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="30"/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
+
+        <Grid Grid.Row="0">
+            <TextBlock Margin="15,0,0,0" FontSize="25" Foreground="White">
+                <Run>
+                    Drive View
+                </Run>
+            </TextBlock>
+        </Grid>
 
-        <Grid Grid.Column="0" Margin="15"
+        <Grid Grid.Column="0" Margin="15" Grid.Row="1"
               Background="#37474f">
 
             <Grid.RowDefinitions>
@@ -75,7 +87,6 @@
             <Grid Grid.Row="0" Background="#FF606E83">
                 <!--<TextBlock VerticalAlignment="Top" HorizontalAlignment="Left" Foreground="White">Drive Point List</TextBlock>-->
                 <DockPanel>
-                    <!--<ScrollViewer Background="#FF4B5663" Foreground="White">-->
                         <DataGrid ItemsSource="{Binding RouteList}" CanUserSortColumns="True" CanUserAddRows="False" AutoGenerateColumns="False" materialDesign:DataGridAssist.CellPadding="13 8 8 8" 
                                   materialDesign:DataGridAssist.ColumnHeaderPadding="8" Background="{x:Null}" Foreground="White" IsSynchronizedWithCurrentItem="True" SelectedItem="{Binding SelectedRoute, Mode=TwoWay}"
                                   >
@@ -173,7 +184,7 @@
                             materialDesign:ButtonAssist.CornerRadius="10"
                             Command="{Binding SelectAxisCommand}"
                             CommandParameter="Left">
-                    <TextBlock><Run Text="Drive1" FontSize="20"/></TextBlock>
+                    <TextBlock><Run Text="Drive" FontSize="20"/></TextBlock>
                 </Button>
 
                 <Button Background="{x:Null}" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
@@ -277,7 +288,7 @@
         </Grid>
 
         <!--Sub Drive Menu-->
-        <Grid Grid.Column="1" Background="#263238">
+        <Grid Grid.Column="1" Background="#37474f" Grid.RowSpan="2">
             <StackPanel Orientation="Vertical" VerticalAlignment="Top">
                 <!--<Button Margin="7, 10" HorizontalAlignment="Stretch" Height="60" BorderBrush="Gray" BorderThickness="2" 
                         Command="{Binding PositionAddCommand}">
@@ -319,7 +330,7 @@
         </Grid>
 
         <!--Right Drive Menu-->
-        <Grid Grid.Column="2" Background="#263238">
+        <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}">

+ 3 - 21
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs

@@ -135,7 +135,6 @@ namespace OHV.Module.Interactivity.PopUp
             this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe( DriveControlCallBack );
             this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Subscribe( DriveControlCallBack , ThreadOption.UIThread );
 
-            /*상태 회신을 받기 위함*/
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallBackCommunication );
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallBackCommunication , ThreadOption.UIThread );
 
@@ -168,8 +167,6 @@ namespace OHV.Module.Interactivity.PopUp
         
         private void UICallBackCommunication( GUIMessageEventArgs obj )
         {
-            //Property 상태가 바뀔때 마다 표현만 하면 된다?
-
             if ( obj.Kind == GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange )
             {
                 if ( obj.MessageKey.Equals( MessageKey.Vehicle ) )
@@ -188,12 +185,6 @@ namespace OHV.Module.Interactivity.PopUp
                                 this.ChagneVehicleState( v );
                             }
                             break;
-                        case "ObstacleStateProperty":
-                            {
-                                var reply = CastTo<eObstacleState>.From<object>( obj.Args );
-                                this.ChangeObstacleState( reply );
-                            }
-                            break;
                         case "CurrentPosition":
                             {
                                 var v = CastTo<double>.From<object>(obj.Args);
@@ -213,11 +204,6 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
-        private void ChangeObstacleState( eObstacleState reply )
-        {
-            
-        }
-
         private void ChagneVehicleState( eVehicleState v )
         {
             switch ( v )
@@ -245,8 +231,6 @@ namespace OHV.Module.Interactivity.PopUp
 
         private void DriveControlCallBack( DriveControlEventArgs args)
         {
-            //TODO:[20/03/19 ys-hwang] Drive UI return msg popup
-
             if (args.EventDir == DriveControlEventArgs.eEventDir.ToFront)
             {
                 switch ( args.ControlKind )
@@ -327,13 +311,13 @@ namespace OHV.Module.Interactivity.PopUp
         {
             if ( state == eSteeringState.Left )
             {
-                this.SteeringLeftBrushProperty = ( System.Windows.Media.Brush )new System.Windows.Media.BrushConverter().ConvertFromString( "#FF00FFD3" );
+                this.SteeringLeftBrushProperty = ( Brush )new BrushConverter().ConvertFromString( "#FF00FFD3" );
                 this.SteeringRightBrushProperty = Brushes.Gray;
             }
             else if ( state == eSteeringState.Right )
             {
                 this.SteeringLeftBrushProperty = Brushes.Gray;
-                this.SteeringRightBrushProperty = ( System.Windows.Media.Brush )new System.Windows.Media.BrushConverter().ConvertFromString( "#FF00FFD3" );
+                this.SteeringRightBrushProperty = ( Brush )new BrushConverter().ConvertFromString( "#FF00FFD3" );
             }
             else
             {
@@ -416,9 +400,8 @@ namespace OHV.Module.Interactivity.PopUp
             {
               if (r.Result == ButtonResult.OK)
               {
-                    //TODO:[20/03/18 ys-hwang] DB Table Update
-                    // check selected table
                     var result = this.RouteList.Any( x => x.IsSelected != false );
+
                     if ( !result )
                     {
                         this.messageController.ShowNotificationView( "Pos Not Selected" );
@@ -528,7 +511,6 @@ namespace OHV.Module.Interactivity.PopUp
             {
                 if ( r.Result == ButtonResult.OK )
                 {
-                    //TODO:[20/03/20 ys-hwang] RoutList.IsSelected Check
                     var result = this.RouteList.Any( x => x.IsSelected != false );
                     if ( !result )
                     {

+ 2 - 2
Dev/OHV/OHV.Module.Interactivity/PopUp/InOutControlView.xaml

@@ -127,8 +127,8 @@
 
         <Grid Grid.Column="1" Background="#263238">
             <Border Margin="1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
-            <StackPanel>
-                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" 
+            <StackPanel VerticalAlignment="Bottom">
+                <Button Margin="10,0,10,10" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2" 
                         Command="{Binding CloseDialogCommand}" CommandParameter="true">
                     <StackPanel>
                         <materialDesign:PackIcon Kind="ExitToApp" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>

+ 1 - 32
Dev/OHV/OHV.Module.Interactivity/PopUp/InOutControlViewModel.cs

@@ -1,13 +1,8 @@
-using OHV.Common.Events;
-using Prism.Commands;
+using Prism.Commands;
 using Prism.Events;
 using Prism.Mvvm;
 using Prism.Services.Dialogs;
 using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 using System.Windows.Input;
 
 namespace OHV.Module.Interactivity.PopUp
@@ -37,35 +32,12 @@ namespace OHV.Module.Interactivity.PopUp
         public InOutControlViewModel( IEventAggregator _ea )
         {
             this.eventAggregator = _ea;
-            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Unsubscribe( UICallbackCommunivation );
-            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Subscribe( UICallbackCommunivation, ThreadOption.UIThread );
 
             this.OutPutCommand = new DelegateCommand<object>( ExecuteOutPutCommand );
         }
 
-        private void UICallbackCommunivation( IOControlEventArgs _args )
-        {
-            if(_args.EventDir == IOControlEventArgs.eEventDir.ToFront)
-            {
-
-            }
-        }
-
-        void PublishEvent( IOControlEventArgs _args )
-        {
-            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Publish( _args );
-        }
-
         private void ExecuteOutPutCommand( object _obj )
         {
-            //ON 인지 ? OFF 인지 ? 
-
-            var msg = new IOControlEventArgs
-            {
-                OutPutTag = _obj.ToString()
-            };
-
-            this.PublishEvent( msg );
         }
 
         #region Dialog 
@@ -76,13 +48,10 @@ namespace OHV.Module.Interactivity.PopUp
 
         public void OnDialogClosed( )
         {
-            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Publish( new IOControlEventArgs { EventDir = IOControlEventArgs.eEventDir.ToBack } );
-            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Unsubscribe( UICallbackCommunivation );
         }
 
         public void OnDialogOpened( IDialogParameters parameters )
         {
-            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Publish( new IOControlEventArgs { EventDir = IOControlEventArgs.eEventDir.ToBack } );
         }
 
         public virtual void RaiseRequestClose( IDialogResult dialogResult )

+ 23 - 17
Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoView.xaml

@@ -12,8 +12,8 @@
              mc:Ignorable="d" 
              xmlns:c ="clr-namespace:GSG.NET.WPF.CalcBinding;assembly=GSG.NET.WPF"
              xmlns:media ="clr-namespace:System.Windows.Media;assembly=PresentationCore"
-             Width="800"
-             Height="650"
+             Width="900"
+             Height="700"
              Background="#455a64">
 
     <prism:Dialog.WindowStyle>
@@ -63,8 +63,16 @@
             <ColumnDefinition Width="130"/>
             <ColumnDefinition Width="130"/>
         </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="30"/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
 
-        <Grid Grid.Column="0">
+        <Grid Grid.Row="0">
+            <TextBlock Margin="15,0,0,0" Text="Lock View" FontSize="25" Foreground="White"/>
+        </Grid>
+
+        <Grid Grid.Column="0" Grid.Row="1">
             <Grid Margin="15,15" Background="#37474f">
                 <Grid.RowDefinitions>
                     <RowDefinition/>
@@ -86,15 +94,13 @@
                         <ColumnDefinition Width="*"/>
                     </Grid.ColumnDefinitions>
 
-
-                    <!--Column1-->
                     <Button Background="{x:Null}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
                             ToolTip="MaterialDesignRaisedButton with Round Corners">
                         <StackPanel>
-                            <TextBlock HorizontalAlignment="Center"><Run Text="Axis"/></TextBlock>
-                            <TextBlock HorizontalAlignment="Center"><Run Text="Select"/></TextBlock>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Axis" FontSize="20"/></TextBlock>
+                            <TextBlock HorizontalAlignment="Center"><Run Text="Select" FontSize="20"/></TextBlock>
                         </StackPanel>
 
                     </Button>
@@ -143,9 +149,9 @@
                         <StackPanel>
                             <TextBlock VerticalAlignment="Center"
                                        HorizontalAlignment="Center">
-                                <Run Text="Clamp"/>
+                                <Run Text="Clamp" FontSize="20"/>
                             </TextBlock>
-                            <TextBlock><Run Text="Axis Left" /></TextBlock>
+                            <TextBlock><Run Text="Axis Left" FontSize="20"/></TextBlock>
                         </StackPanel>
                     </Button>
 
@@ -185,9 +191,9 @@
                         <StackPanel>
                             <TextBlock VerticalAlignment="Center"
                                        HorizontalAlignment="Center">
-                                <Run Text="Clamp"/>
+                                <Run Text="Clamp" FontSize="20"/>
                             </TextBlock>
-                            <TextBlock><Run Text="Axis Right"/></TextBlock>
+                            <TextBlock><Run Text="Axis Rigt" FontSize="20"/></TextBlock>
                         </StackPanel>
                     </Button>
 
@@ -222,13 +228,13 @@
                            Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
                             ToolTip="MaterialDesignRaisedButton with Round Corners">
-                        <TextBlock><Run Text="Left Axis"/></TextBlock>
+                        <TextBlock><Run Text="Left Axis" FontSize="20"/></TextBlock>
                     </Button>
                     <Button Background="{x:Null}" Grid.Column="4" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                            Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
                             ToolTip="MaterialDesignRaisedButton with Round Corners">
-                        <TextBlock><Run Text="Right Axis"/></TextBlock>
+                        <TextBlock><Run Text="Right Axis" FontSize="18"/></TextBlock>
                     </Button>
 
                     <Button Grid.Column="3" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
@@ -257,7 +263,7 @@
                     </Button>
 
                     <!--Right-->
-                    <Border BorderBrush="#FF00FFD3" BorderThickness="2" Margin="7,79,20,-9" Grid.ColumnSpan="5" RenderTransformOrigin="0.5,0.5" Grid.Row="3">
+                    <Border BorderBrush="#FF00FFD3" BorderThickness="2" Margin="7,79,20,-5" Grid.ColumnSpan="5" RenderTransformOrigin="0.5,0.5" Grid.Row="3">
                         <Border.RenderTransform>
                             <TransformGroup>
                                 <ScaleTransform ScaleX="-1"/>
@@ -292,7 +298,7 @@
                         </StackPanel>
                     </Button>
 
-                    <Border BorderBrush="#FF00FFD3" BorderThickness="2" Grid.Column="1" Margin="78,102,18,-269" Grid.Row="3"/>
+                    <Border BorderBrush="#FF00FFD3" BorderThickness="2" Grid.Column="1" Margin="78,102,39,-269" Grid.Row="3"/>
 
                 </Grid>
 
@@ -449,7 +455,7 @@
             </Grid>
         </Grid>
 
-        <Grid Grid.Column="1" Background="#37474f">
+        <Grid Grid.Column="1" Background="#37474f" Grid.RowSpan="2">
             <StackPanel>
                 <Button Margin="10,10,10,5" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2" Command="{Binding MoveToCommand}"
                         Style="{DynamicResource MaterialDesignRaisedButton}"
@@ -475,7 +481,7 @@
             </StackPanel>
         </Grid>
 
-        <Grid Grid.Column="2" HorizontalAlignment="Stretch" Background="#263238">
+        <Grid Grid.Column="2" HorizontalAlignment="Stretch" Background="#263238" Grid.RowSpan="2">
             <Border Margin="1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
             <StackPanel>
                 <Button Margin="10,10,10,5" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoOnCommand}">

+ 48 - 113
Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoViewModel.cs

@@ -9,7 +9,6 @@ using Prism.Services.Dialogs;
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Threading.Tasks;
 using System.Windows.Input;
 using System.Windows.Media;
 using static OHV.Common.Events.AxisControlEventArgs;
@@ -180,6 +179,7 @@ namespace OHV.Module.Interactivity.PopUp
 
         #endregion
 
+        #region ICommand
         public ICommand SelectAxisCommand { get; set; }
         public ICommand KeyInTargetPosCommand { get; set; }
         public ICommand SelectPosCommand { get; set; }
@@ -192,8 +192,8 @@ namespace OHV.Module.Interactivity.PopUp
         public ICommand JogCommand { get; set; }
         public ICommand SelectedPosDataSave { get; set; }
         public ICommand JogVelPopupCommand { get; set; }
-
-        public ICommand JogStopCommand { get; set; }
+        public ICommand JogStopCommand { get; set; } 
+        #endregion
 
         public event Action<IDialogResult> RequestClose;
 
@@ -234,7 +234,14 @@ namespace OHV.Module.Interactivity.PopUp
             this.SelectAxis = ConstString.AXIS_CARRIER_LOCK_LEFT;
             this.LeftAxisBrush = Brushes.Orange;
 
+            List<AxisPositionData> positionList = null;
+            positionList = sql.AxisPositionDataDAL.GetKFromPostion( ConstString.TEACH_POSITION_LOCK );
+            this.TargetPosLockLeft = positionList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single().Value;
+
             //초기 Pos 선택
+            positionList = sql.AxisPositionDataDAL.GetKFromPostion( ConstString.TEACH_POSITION_LOCK );
+            this.TargetPosLockRight = positionList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single().Value;
+
             this.SelectedPosition = ConstString.TEACH_POSITION_LOCK;
             this.PosLockBrush = Brushes.Orange;
         }
@@ -243,8 +250,8 @@ namespace OHV.Module.Interactivity.PopUp
         {
             var msg = new AxisControlEventArgs
             {
-                Dir = AxisControlEventArgs.eEventDir.ToBack ,
-                Kind = AxisControlEventArgs.eAxisControlKind.Stop,
+                Dir = eEventDir.ToBack ,
+                Kind = eAxisControlKind.Stop,
                 AxisName = this.SelectAxis ,
             };
 
@@ -272,7 +279,7 @@ namespace OHV.Module.Interactivity.PopUp
 
         private void ExecuteSelectedPosDataSave( object obj )
         {
-            List<Common.Model.AxisPositionData> dataList = null;
+            List<AxisPositionData> dataList = null;
 
             this.messageController.ShowConfirmationPopupView( "Position Data Save ?" , r =>
             {
@@ -289,54 +296,12 @@ namespace OHV.Module.Interactivity.PopUp
                     }
 
                     var sqlAxisLeft = dataList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single();
-                    //sqlAxisLeft.Value = this.CurrentLockLeft;
                     sqlAxisLeft.Value = this.TargetPosLockLeft;
                     sql.AxisPositionDataDAL.Update( sqlAxisLeft );
 
                     var sqlAxisRight = dataList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
-                    //sqlAxisRight.Value = this.CurrentLockRight;
                     sqlAxisRight.Value = this.TargetPosLockRight;
                     sql.AxisPositionDataDAL.Update( sqlAxisRight );
-                    //if ( this.SelectAxis == ConstString.AXIS_CARRIER_LOCK_LEFT )
-                    //{
-                    //    switch ( this.SelectedPosition )
-                    //    {
-                    //        case ConstString.TEACH_POSITION_LOCK:
-                    //            dataList = sql.AxisPositionDataDAL.GetKFromPostion( ConstString.TEACH_POSITION_LOCK );
-                    //            break;
-                    //        case ConstString.TEACH_POSITION_UNLOCK:
-                    //            dataList = sql.AxisPositionDataDAL.GetKFromPostion( ConstString.TEACH_POSITION_UNLOCK );
-                    //            break;
-                    //    }
-
-                    //    var sqlAxisLeft = dataList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single();
-                    //    //sqlAxisLeft.Value = this.CurrentLockLeft;
-                    //    sqlAxisLeft.Value = this.TargetPosLockLeft;
-                    //    sql.AxisPositionDataDAL.Update( sqlAxisLeft );
-
-                    //    var sqlAxisRight = dataList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
-                    //    //sqlAxisRight.Value = this.CurrentLockRight;
-                    //    sqlAxisRight.Value = this.TargetPosLockRight;
-                    //    sql.AxisPositionDataDAL.Update( sqlAxisRight );
-                    //}
-                    //else if ( this.SelectAxis == ConstString.AXIS_CARRIER_LOCK_RIGHT )
-                    //{
-                    //    switch ( this.SelectedPosition )
-                    //    {
-                    //        case ConstString.TEACH_POSITION_LOCK:
-                    //            dataList = sql.AxisPositionDataDAL.GetKFromPostion( ConstString.TEACH_POSITION_LOCK );
-                    //            break;
-                    //        case ConstString.TEACH_POSITION_UNLOCK:
-                    //            dataList = sql.AxisPositionDataDAL.GetKFromPostion( ConstString.TEACH_POSITION_UNLOCK );
-                    //            break;
-                    //    }
-                    //    var sqlAxisRight = dataList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
-                    //    //sqlAxisRight.Value = this.CurrentLockRight;
-                    //    sqlAxisRight.Value = this.TargetPosLockRight;
-                    //    sql.AxisPositionDataDAL.Update( sqlAxisRight );
-                    //}
-                    //else
-                    //{ }
                 }
             } );
         }
@@ -351,54 +316,54 @@ namespace OHV.Module.Interactivity.PopUp
 
             var msg = new AxisControlEventArgs
             {
-                Dir = AxisControlEventArgs.eEventDir.ToBack,
-                Kind = AxisControlEventArgs.eAxisControlKind.Jog,
+                Dir = eEventDir.ToBack,
+                Kind = eAxisControlKind.Jog,
                 AxisName = this.SelectAxis,
                 JogVelocity = Convert.ToInt32( this.JogVelocity ),
             };
 
             if ( obj.ToString().Equals( "+" ) )
-                msg.JogDir = AxisControlEventArgs.eJogMoveDir.Positive;
+                msg.JogDir = eJogMoveDir.Positive;
             else
-                msg.JogDir = AxisControlEventArgs.eJogMoveDir.Negative;
+                msg.JogDir = eJogMoveDir.Negative;
 
             this.PublishEvent( msg );
         }
 
         void PublishEvent( AxisControlEventArgs args )
         {
-            args.Dir = AxisControlEventArgs.eEventDir.ToBack;
+            args.Dir = eEventDir.ToBack;
             this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( args );
         }
 
         void AxisUICallbackCommunication( AxisControlEventArgs args )
         {
-            if ( args.Dir == AxisControlEventArgs.eEventDir.ToFront )
+            if ( args.Dir == eEventDir.ToFront )
             {
                 switch ( args.Kind )
                 {
-                    case AxisControlEventArgs.eAxisControlKind.Stop:
+                    case eAxisControlKind.Stop:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.EStop:
+                    case eAxisControlKind.EStop:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.Move:
+                    case eAxisControlKind.Move:
                         RspMove( args );
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.Jog:
+                    case eAxisControlKind.Jog:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.ServoOn:
+                    case eAxisControlKind.ServoOn:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.ServoOff:
+                    case eAxisControlKind.ServoOff:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.NONE:
+                    case eAxisControlKind.NONE:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.OriginReturn:
+                    case eAxisControlKind.OriginReturn:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition:
+                    case eAxisControlKind.ReqCurrentPosition:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.ReqStopCurrentPosition:
+                    case eAxisControlKind.ReqStopCurrentPosition:
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.FaultReset:
+                    case eAxisControlKind.FaultReset:
                         {
                             var msg = string.Empty;
                             if ( args.Result.IsSuccess )
@@ -409,7 +374,7 @@ namespace OHV.Module.Interactivity.PopUp
                             this.messageController.ShowNotificationView( msg );
                         }
                         break;
-                    case AxisControlEventArgs.eAxisControlKind.AxisState:
+                    case eAxisControlKind.AxisState:
                         AxisState( args );
                         break;
                     default:
@@ -440,7 +405,7 @@ namespace OHV.Module.Interactivity.PopUp
 
             if ( args.Result.IsSuccess )
             {
-                if ( args.PosDir == AxisControlEventArgs.ePosDir.Lock )
+                if ( args.PosDir == ePosDir.Lock )
                     msg = "Clamp Lock Success";
                 else
                     msg = "Clamp Unlock Success";
@@ -459,8 +424,8 @@ namespace OHV.Module.Interactivity.PopUp
         {
             var msg = new AxisControlEventArgs
             {
-                Dir = AxisControlEventArgs.eEventDir.ToBack ,
-                Kind = AxisControlEventArgs.eAxisControlKind.OriginReturn ,
+                Dir = eEventDir.ToBack ,
+                Kind = eAxisControlKind.OriginReturn ,
                 AxisName = this.SelectAxis ,
             };
 
@@ -471,8 +436,8 @@ namespace OHV.Module.Interactivity.PopUp
         {
             var msg = new AxisControlEventArgs
             {
-                Dir = AxisControlEventArgs.eEventDir.ToBack ,
-                Kind = AxisControlEventArgs.eAxisControlKind.FaultReset ,
+                Dir = eEventDir.ToBack ,
+                Kind = eAxisControlKind.FaultReset ,
                 AxisName = this.SelectAxis ,
             };
 
@@ -483,8 +448,8 @@ namespace OHV.Module.Interactivity.PopUp
         {
             var msg = new AxisControlEventArgs
             {
-                Dir = AxisControlEventArgs.eEventDir.ToBack ,
-                Kind = AxisControlEventArgs.eAxisControlKind.ServoOff ,
+                Dir = eEventDir.ToBack ,
+                Kind = eAxisControlKind.ServoOff ,
                 AxisName = this.SelectAxis ,
             };
 
@@ -495,8 +460,8 @@ namespace OHV.Module.Interactivity.PopUp
         {
             var msg = new AxisControlEventArgs
             {
-                Dir = AxisControlEventArgs.eEventDir.ToBack ,
-                Kind = AxisControlEventArgs.eAxisControlKind.ServoOn ,
+                Dir = eEventDir.ToBack ,
+                Kind = eAxisControlKind.ServoOn ,
                 AxisName = this.SelectAxis ,
             };
 
@@ -505,15 +470,15 @@ namespace OHV.Module.Interactivity.PopUp
 
         private void ExecuteKeyInCommand( object obj )
         {
+            var numPad = new CalcuratorView();
+
             if ( obj.ToString().Equals( "Left" ) )
             {
-                var numPad = new CalcuratorView();
                 var result = numPad.ShowDialog( this.TargetPosLockLeft );
                 this.TargetPosLockLeft = result;
             }
             else
             {
-                var numPad = new CalcuratorView();
                 var result = numPad.ShowDialog( this.TargetPosLockRight );
                 this.TargetPosLockRight = result;
             }
@@ -556,13 +521,13 @@ namespace OHV.Module.Interactivity.PopUp
                     if ( r.Result == ButtonResult.OK )
                     {
                         var msg = new AxisControlEventArgs();
-                        msg.Kind = AxisControlEventArgs.eAxisControlKind.Move;
+                        msg.Kind = eAxisControlKind.Move;
                         msg.AxisName = this.SelectAxis;
 
                         if ( SelectedPosition.Equals( ConstString.TEACH_POSITION_LOCK ) )
-                            msg.PosDir = AxisControlEventArgs.ePosDir.Lock;
+                            msg.PosDir = ePosDir.Lock;
                         else
-                            msg.PosDir = AxisControlEventArgs.ePosDir.UnLock;
+                            msg.PosDir = ePosDir.UnLock;
 
                         this.PublishEvent( msg );
                     }
@@ -572,7 +537,7 @@ namespace OHV.Module.Interactivity.PopUp
 
         private void ExecuteSelectPosCommand( object obj )
         {
-            List<Common.Model.AxisPositionData> positionList = null;
+            List<AxisPositionData> positionList = null;
             this.SelectedPosition = obj.ToString();
 
             if ( obj.Equals( ConstString.TEACH_POSITION_LOCK ) )
@@ -586,7 +551,6 @@ namespace OHV.Module.Interactivity.PopUp
                 this.PosUnlockBrush = Brushes.Orange;
             }
 
-
             switch ( this.SelectedPosition )
             {
                 case ConstString.TEACH_POSITION_LOCK:
@@ -601,35 +565,6 @@ namespace OHV.Module.Interactivity.PopUp
 
             var sqlAxisRight = positionList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
             this.TargetPosLockRight = sqlAxisRight.Value;
-
-            //if ( this.SelectAxis == ConstString.AXIS_CARRIER_LOCK_LEFT )
-            //{
-            //    switch ( this.SelectedPosition )
-            //    {
-            //        case ConstString.TEACH_POSITION_LOCK:
-            //            dataList = sql.AxisPositionDataDAL.GetKFromPostion( ConstString.TEACH_POSITION_LOCK );
-            //            break;
-            //        case ConstString.TEACH_POSITION_UNLOCK:
-            //            dataList = sql.AxisPositionDataDAL.GetKFromPostion( ConstString.TEACH_POSITION_UNLOCK );
-            //            break;
-            //    }
-            //    var sqlAxisLeft = dataList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single();
-            //    this.TargetPosLockLeft = sqlAxisLeft.Value;
-            //}
-            //else
-            //{
-            //    switch ( this.SelectedPosition )
-            //    {
-            //        case ConstString.TEACH_POSITION_LOCK:
-            //            dataList = sql.AxisPositionDataDAL.GetKFromPostion( ConstString.TEACH_POSITION_LOCK );
-            //            break;
-            //        case ConstString.TEACH_POSITION_UNLOCK:
-            //            dataList = sql.AxisPositionDataDAL.GetKFromPostion( ConstString.TEACH_POSITION_UNLOCK );
-            //            break;
-            //    }
-            //    var sqlAxisRight = dataList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
-            //    this.TargetPosLockRight = sqlAxisRight.Value;
-            //}
         }
 
         private void ExecuteSelectAxisCommand( object obj )
@@ -637,13 +572,13 @@ namespace OHV.Module.Interactivity.PopUp
             if ( obj.ToString().Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) )
             {
                 this.LeftAxisBrush = Brushes.Orange;
-                this.RightAxisBrush = System.Windows.Media.Brushes.Gray;
+                this.RightAxisBrush = Brushes.Gray;
                 this.SelectAxis = ConstString.AXIS_CARRIER_LOCK_LEFT;
             }
             else
             {
                 this.RightAxisBrush = Brushes.Orange;
-                this.LeftAxisBrush = System.Windows.Media.Brushes.Gray;
+                this.LeftAxisBrush = Brushes.Gray;
                 this.SelectAxis = ConstString.AXIS_CARRIER_LOCK_RIGHT;
             }
         }

+ 43 - 15
Dev/OHV/OHV.Module.Interactivity/PopUp/OpticalReadingConfigView.xaml

@@ -36,8 +36,16 @@
             <ColumnDefinition Width="*"/>
             <ColumnDefinition Width="130"/>
         </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="30"/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
 
-        <Grid Grid.Column="0" Margin="15" Background="#37474f">
+        <Grid Grid.Row="0">
+            <TextBlock Margin="15,0,0,0" Text="Detect View" FontSize="25" Foreground="White"/>
+        </Grid>
+
+        <Grid Grid.Column="0" Grid.Row="1" Margin="15" Background="#37474f">
             <Grid.RowDefinitions>
                 <RowDefinition Height="*"/>
                 <RowDefinition Height="*"/>
@@ -50,17 +58,17 @@
             <StackPanel VerticalAlignment="Center"
                         HorizontalAlignment="Center"
                         Grid.Column="0" Margin="85,15">
-                
+
             </StackPanel>
-            <TextBlock Text="Safe Detect View" FontSize="20" Foreground="White"/>
 
             <Grid Grid.Row="0">
                 <Border BorderBrush="Gray" BorderThickness="1"/>
                 <StackPanel VerticalAlignment="Center" 
-                                HorizontalAlignment="Center">
+                                HorizontalAlignment="Left"
+                            Margin="30">
                     <Button Height="60">
                         <StackPanel>
-                            <TextBlock><Run Text=" Lazer State " FontSize="20"/></TextBlock>
+                            <TextBlock><Run Text="SafeDetect State" FontSize="20"/></TextBlock>
                         </StackPanel>
                     </Button>
 
@@ -70,14 +78,11 @@
                         </StackPanel>
                     </Button>
                 </StackPanel>
-            </Grid>
 
-            <Grid Grid.Row="1">
-                <Border BorderBrush="Gray" BorderThickness="1"/>
                 <StackPanel Orientation="Horizontal"
                                 VerticalAlignment="Center"
-                                HorizontalAlignment="Center">
-                    <StackPanel Margin="5"
+                                HorizontalAlignment="Right">
+                    <StackPanel Margin="30"
                                     VerticalAlignment="Center"
                                     HorizontalAlignment="Center">
 
@@ -94,10 +99,23 @@
                                 <TextBlock><Run Text="{Binding CurrentPattern, FallbackValue=NONE}" FontSize="25" Foreground="Orange"/></TextBlock>
                             </StackPanel>
                         </Button>
+                    </StackPanel>
+                </StackPanel>
+            </Grid>
 
-                        <!--<Button Height="60">
+            <Grid Grid.Row="1">
+                <Border BorderBrush="Gray" BorderThickness="1"/>
+                <StackPanel Orientation="Horizontal"
+                            VerticalAlignment="Center"
+                            HorizontalAlignment="Center">
+                    <StackPanel Orientation="Vertical"
+                                HorizontalAlignment="Center"
+                                VerticalAlignment="Center"
+                                Margin="5">
+
+                        <Button Height="60">
                             <StackPanel>
-                                <TextBlock><Run Text="Current Pattern" FontSize="20"/></TextBlock>
+                                <TextBlock><Run Text="Pattern Seting" FontSize="20"/></TextBlock>
                             </StackPanel>
                         </Button>
 
@@ -105,9 +123,9 @@
                                     Command="{Binding PatternResultKyein}"
                                     CommandParameter="D">
                             <StackPanel>
-                                <TextBlock><Run Text="{Binding ObstacleDrive, FallbackValue=0}" FontSize="25" Foreground="Orange"/></TextBlock>
+                                <TextBlock><Run Text="{Binding SetPattern, FallbackValue=0}" FontSize="25" Foreground="Orange"/></TextBlock>
                             </StackPanel>
-                        </Button>-->
+                        </Button>
                     </StackPanel>
                 </StackPanel>
             </Grid>
@@ -150,7 +168,7 @@
         </Grid>
 
         <!--Right Main Menu Grid-->
-        <Grid Grid.Column="2" Background="#263238">
+        <Grid Grid.Column="2" Background="#263238" Grid.RowSpan="2">
             <Border Margin="1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
 
             <StackPanel VerticalAlignment="Top">
@@ -165,6 +183,16 @@
             </StackPanel>
 
             <StackPanel VerticalAlignment="Bottom">
+
+                <Button Margin="10,0,10,7" HorizontalAlignment="Stretch" Height="90" 
+                        BorderBrush="Gray" BorderThickness="2" 
+                        Command="{Binding DetectPatternSave}" CommandParameter="true">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="CalendarExport" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Save" FontSize="20" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
+                    </StackPanel>
+                </Button>
+
                 <Button Margin="10,0,10,7" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2" 
                         Command="{Binding CloseDialogCommand}" CommandParameter="true">
                     <StackPanel>

+ 31 - 80
Dev/OHV/OHV.Module.Interactivity/PopUp/OpticalReadingConfigViewModel.cs

@@ -34,17 +34,17 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
-        private int _obstacleDrive;
-        public int ObstacleDrive
+        private int currentPattern;
+        public int CurrentPattern
         {
-            get { return this._obstacleDrive; }
-            set { this.SetProperty( ref this._obstacleDrive , value ); }
+            get { return this.currentPattern; }
+            set { this.SetProperty( ref this.currentPattern , value ); }
         }
-        private int _obstacleCurve;
-        public int ObstacleCurve
+        private int setPattern;
+        public int SetPattern
         {
-            get { return this._obstacleCurve; }
-            set { this.SetProperty( ref this._obstacleCurve , value ); }
+            get { return this.setPattern; }
+            set { this.SetProperty( ref this.setPattern , value ); }
         }
 
         string _obstacleState;
@@ -54,16 +54,6 @@ namespace OHV.Module.Interactivity.PopUp
             set { this.SetProperty( ref this._obstacleState , value ); }
         }
 
-        string currentPattern;
-        public string CurrentPattern
-        {
-            get { return this.currentPattern; }
-            set
-            {
-                this.SetProperty( ref this.currentPattern , value );
-            }
-        }
-
         public ICommand DetectPatternSave { get; set; }
         public ICommand ResultPattern { get; set; }
         public ICommand PatternResultKyein { get; set; }
@@ -106,35 +96,14 @@ namespace OHV.Module.Interactivity.PopUp
                     case ObstacleControlEventArgs.eControlKind.STATE:
                         break;
                     case ObstacleControlEventArgs.eControlKind.INFO:
-                        this.ObstacleDrive = obj.Drive;
-                        this.ObstacleCurve = obj.Curve;
                         this.ObstacleState = obj.ObstacleState;
                         break;
                     case ObstacleControlEventArgs.eControlKind.SAVE:
-                        ResponsePatternSave(obj);
                         break;
                 }
             }
         }
 
-        private void ResponsePatternSave( ObstacleControlEventArgs args)
-        {
-            var msg = string.Empty;
-            if ( args.Result.IsSuccess )
-            {
-                msg = "Save Successs";
-            }
-            else
-            {
-                //var error = args.Result.Errors.FirstOrDefault();
-                //var alarm = error.Metadata[ "Alarm" ] as Alarm;
-                //msg = alarm.Name + " " + alarm.Text;
-                msg = "Save Fail";
-            }
-
-            this.messageController.ShowNotificationView( msg );
-        }
-
         private void UICallbackCommunication( GUIMessageEventArgs obj )
         {
             // 상태변화 Response
@@ -148,15 +117,9 @@ namespace OHV.Module.Interactivity.PopUp
                             var lazer = CastTo<eObstacleState>.From<object>( obj.Args );
                             this.ChangeObstacleState( lazer );
                             break;
-                        case "ObstacleDrive":
-                            var drive = CastTo<int>.From<object>( obj.Args );
-                            this.ObstacleDrive = drive;
-                            this.CurrentPattern = " Drive ";
-                            break;
-                        case "ObstacleCurve":
-                            var curve = CastTo<int>.From<object>( obj.Args );
-                            this.ObstacleCurve = curve;
-                            this.CurrentPattern = " Curve ";
+                        case "ObstaclePattern":
+                            var current = CastTo<int>.From<object>( obj.Args );
+                            this.CurrentPattern = current;
                             break;
                         default:
                             break;
@@ -166,12 +129,7 @@ namespace OHV.Module.Interactivity.PopUp
 
             if ( obj.Kind == GUIMessageEventArgs.eGUIMessageKind.RspObstaclePatternNo ) 
             {
-                if ( Convert.ToInt32( obj.MessageText ) <= 0 )
-                    this.CurrentPattern = "Drive";
-                else
-                    this.CurrentPattern = "Curve";
-
-                //this.ObstacleDrive = Convert.ToInt32( obj.MessageText );
+                this.CurrentPattern = Convert.ToInt32( obj.MessageText );
             }
         }
 
@@ -191,14 +149,14 @@ namespace OHV.Module.Interactivity.PopUp
         {
             var numpad = new CalcuratorView();
 
-            var result =  numpad.ShowDialog( this.ObstacleDrive );
-            this.ObstacleCurve = (int)result;
+            var result =  numpad.ShowDialog( this.CurrentPattern );
+            this.SetPattern = (int)result;
 
-            var msg = new VCSMessageEventArgs();
-            msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternChg;
-            msg.MessageText = this.ObstacleCurve.ToString();
+            //var msg = new VCSMessageEventArgs();
+            //msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternChg;
+            //msg.MessageText = this.ObstacleCurve.ToString();
 
-            this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
+            //this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
 
             //if (obj.ToString().Equals("D"))
             //{
@@ -212,31 +170,25 @@ namespace OHV.Module.Interactivity.PopUp
             //}
         }
 
-        private void ExecuteResultPattern(object _obj)
-        {
-        }
-
-        private byte ConvertToByte( BitArray _bitArray)
-        {
-            byte[] bytes = new byte[ 1 ];
-            _bitArray.CopyTo( bytes , 0 );
-
-            return bytes[ 0 ];
-        }
-
         private void ExecuteDetectPatternSave( )
         {
             this.messageController.ShowConfirmationPopupView( "Pattern Save ?" , r =>
             {
                 if ( r.Result == ButtonResult.OK )
                 {
-                    var msg = new ObstacleControlEventArgs
-                    {
-                        Curve = this.ObstacleCurve ,
-                        Drive = this.ObstacleDrive,
-                        ControlKind = ObstacleControlEventArgs.eControlKind.SAVE
-                    };
-                    this.ObstaclePublishEvent( msg );
+                    //var msg = new ObstacleControlEventArgs
+                    //{
+                    //    Curve = this.ObstacleCurve ,
+                    //    Drive = this.ObstacleDrive,
+                    //    ControlKind = ObstacleControlEventArgs.eControlKind.SAVE
+                    //};
+                    //this.ObstaclePublishEvent( msg );
+
+                    var msg = new VCSMessageEventArgs();
+                    msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternChg;
+                    msg.MessageText = this.SetPattern.ToString();
+
+                    this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
                 }
             } );
         }
@@ -263,7 +215,6 @@ namespace OHV.Module.Interactivity.PopUp
         {
             this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( new VCSMessageEventArgs() { Kind = VCSMessageEventArgs.eVCSMessageKind.ReqObstaclePatternNo } );
             this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Publish( new ObstacleControlEventArgs { EventDir = ObstacleControlEventArgs.eEventDir.ToBack , ControlKind = ObstacleControlEventArgs.eControlKind.INFO } );
-            //this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Publish( new ObstacleControlEventArgs { EventDir = ObstacleControlEventArgs.eEventDir.ToBack , ControlKind = ObstacleControlEventArgs.eControlKind.CURVE } );
         }
 
         private void CloseDialog( string parameter )

+ 14 - 6
Dev/OHV/OHV.Module.Interactivity/PopUp/ServoConfigView.xaml

@@ -36,8 +36,16 @@
             <ColumnDefinition/>
             <ColumnDefinition Width="130"/>
         </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="30"/>
+            <RowDefinition Height="*"/>
+        </Grid.RowDefinitions>
 
-        <Grid Grid.Column="0">
+        <Grid Grid.Row="0">
+            <TextBlock Margin="15,0,0,0" Text="Drive View" FontSize="25" Foreground="White"/>
+        </Grid>
+
+        <Grid Grid.Column="0" Grid.Row="1">
             <Grid Margin="15,15" Background="#37474f">
                 <Grid.RowDefinitions>
                     <RowDefinition Height="*"/>
@@ -46,8 +54,8 @@
 
                 <Grid Grid.Row="0">
                     <Border Margin="5" BorderBrush="Gray" BorderThickness="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
-                    <Button Background="{x:Null}" Foreground="Orange" Margin="10,10,568,226" Height="Auto">
-                        <TextBlock Text="Drive" FontSize="30"/>
+                    <Button Background="{x:Null}" Foreground="Orange" Margin="10,10,657,226" Height="Auto">
+                        <TextBlock Text="Drive" FontSize="20"/>
                     </Button>
                     <StackPanel Orientation="Horizontal"
                                 HorizontalAlignment="Center"
@@ -73,8 +81,8 @@
 
                 <Grid Grid.Row="1">
                     <Border Margin="5" BorderBrush="Gray" BorderThickness="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
-                    <Button Background="{x:Null}" Foreground="Orange" Margin="10,10,568,226" Height="Auto">
-                        <TextBlock Text="Lock Servo" FontSize="30"/>
+                    <Button Background="{x:Null}" Foreground="Orange" Margin="10,10,657,226" Height="Auto">
+                        <TextBlock Text="Lock Servo" FontSize="20"/>
                     </Button>
                     <StackPanel Orientation="Horizontal"
                                 HorizontalAlignment="Center"
@@ -197,7 +205,7 @@
             </Grid>
         </Grid>
 
-        <Grid Grid.Column="2" HorizontalAlignment="Stretch" Background="#263238">
+        <Grid Grid.Column="2" HorizontalAlignment="Stretch" Background="#263238" Grid.RowSpan="2">
             <Border Margin="1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
             <StackPanel VerticalAlignment="Bottom">
                 <Button Margin="10,0,10,10" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2" Command="{Binding CloseDialogCommand}" CommandParameter="true">

+ 12 - 5
Dev/OHV/OHV.Module.ListViews/Views/SubCommandListView.xaml

@@ -4,6 +4,8 @@
              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
              xmlns:local="clr-namespace:OHV.Module.ListViews.Views"
+             xmlns:Shared="clr-namespace:OHV.Common.Shareds;assembly=OHV.Common"
+             xmlns:System="clr-namespace:System;assembly=mscorlib"
              mc:Ignorable="d" 
              xmlns:prism="http://prismlibrary.com/"
              prism:ViewModelLocator.AutoWireViewModel="True"
@@ -12,13 +14,13 @@
 
     <UserControl.Resources>
         <ResourceDictionary>
-            <!--<ObjectDataProvider x:Key="CommandType" MethodName="GetValues"
+            <ObjectDataProvider x:Key="SubCommandType" MethodName="GetValues"
                             ObjectType="{x:Type System:Enum}">
                 <ObjectDataProvider.MethodParameters>
-                    <x:Type TypeName="Shared:eCommandType"/>
+                    <x:Type TypeName="Shared:eSubCommandType"/>
                 </ObjectDataProvider.MethodParameters>
             </ObjectDataProvider>
-            <ObjectDataProvider x:Key="CommandState" MethodName="GetValues"
+            <!--<ObjectDataProvider x:Key="CommandState" MethodName="GetValues"
                             ObjectType="{x:Type System:Enum}">
                 <ObjectDataProvider.MethodParameters>
                     <x:Type TypeName="Shared:eCommandState"/>
@@ -101,7 +103,9 @@
                             <ColumnDefinition Width="*"/>
                         </Grid.ColumnDefinitions>
                         <TextBlock Text="ID" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center"/>
-                        <TextBlock Grid.Column="1" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding SelectedSubCmdID, Mode=OneWay}"/>
+                        <!--<TextBlock Grid.Column="1" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding SelectedSubCmdID, Mode=OneWay}"/>-->
+                        <ComboBox 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">
@@ -110,12 +114,15 @@
                             <ColumnDefinition Width="*"/>
                         </Grid.ColumnDefinitions>
                         <TextBlock Text="Type" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center"/>
-                        <TextBlock Grid.Column="1" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding SelectedSubCmdType, Mode=OneWay}"/>
+                        <ComboBox ItemsSource="{Binding Source={StaticResource SubCommandType}}" SelectedItem="{Binding SelectedCommandType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  Grid.Column="1">
+                        </ComboBox>
+                        <!--<TextBlock Grid.Column="1" Style="{DynamicResource MaterialDesignTextBlock}" VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding SelectedSubCmdType, Mode=OneWay}"/>-->
                     </Grid>
 
                 </Grid>
 
                 <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Row="2" VerticalAlignment="Top" Margin="0,15,0,0">
+                    <Button Height="45" Content="Add" Command="{Binding AddCommand}" Width="100" Margin="0,0,10,0"/>
                     <Button Height="45" Content="Delete" Command="{Binding DeleteCommand}" Width="100"/>
                 </StackPanel>
             </Grid>

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

@@ -8,6 +8,7 @@ using System.Windows;
 using System.Windows.Input;
 using OHV.Common.Events;
 using OHV.Common.Model;
+using OHV.Common.Shareds;
 using OHV.SqliteDAL;
 using Prism.Commands;
 using Prism.Events;
@@ -24,9 +25,32 @@ namespace OHV.Module.ListViews.Views
             get { return this._subcmdList; }
             set { SetProperty(ref this._subcmdList, value); }
         }
+
+        private eSubCommandType selectedCommandType;
+        public eSubCommandType SelectedCommandType
+        {
+            get { return selectedCommandType; }
+            set { SetProperty( ref this.selectedCommandType , value ); }
+        }
+
+        private List<string> targetIDList;
+        public List<string> TargetIDList
+        {
+            get { return targetIDList; }
+            set { SetProperty( ref this.targetIDList , value ); }
+        }
+
+        private string targetID;
+        public string TargetID
+        {
+            get { return targetID; }
+            set { SetProperty( ref this.targetID , value ); }
+        }
+
         #endregion
 
         public ICommand DeleteCommand { get; set; }
+        public ICommand AddCommand { get; set; }
 
         IEventAggregator eventAggregator;
         SqliteManager sql;
@@ -40,6 +64,10 @@ namespace OHV.Module.ListViews.Views
             this.SubCmdList = new ObservableCollection<SubCmd>(sql.SubCmdDAL.All);
 
             this.DeleteCommand = new DelegateCommand(ExecuteDeleteCommand);
+            this.AddCommand = new DelegateCommand( ExecuteAddCommand );
+
+            this.TargetIDList = sql.RouteDal.All.Select( x => x.Name ).ToList();
+            this.TargetIDList.Add( "None" );
 
             this.eventAggregator.GetEvent<VehicleSubCmdListChanged>().Unsubscribe(UICallbackCommunication);
             this.eventAggregator.GetEvent<VehicleSubCmdListChanged>().Subscribe(UICallbackCommunication);
@@ -55,6 +83,28 @@ namespace OHV.Module.ListViews.Views
             this.RefreshLIst();
         }
 
+        private void ExecuteAddCommand( )
+        {
+            //var route = sql.RouteDal.GetRoute( TargetID );
+            //if ( route == null )
+            //    messageController.ShowNotificationView( "Not Found TargetID" );
+            //else
+            //{
+            //    SubCmd cmd = new SubCmd() { TargetID = TargetID , Type = SelectedCommandType };
+
+            //    var msg = new VCSMessageEventArgs();
+            //    msg.Kind = VCSMessageEventArgs.eVCSMessageKind.ReqAddCommand;
+            //    msg.Command = cmd;
+
+            //    this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
+            //}
+
+            //UI 초기화
+            this.TargetID = "None";
+            this.SelectedCommandType = eSubCommandType.Move;
+
+        }
+
         private void ExecuteDeleteCommand()
         {
             List<SubCmd> deleteList = new List<SubCmd>();

+ 0 - 14
Dev/OHV/OHV.Module.MainViews/Views/HistoryView.xaml

@@ -37,13 +37,6 @@
                         </DataGrid.Resources>
 
                         <DataGrid.Columns>
-                            <!--<DataGridTemplateColumn >
-                                <DataGridTemplateColumn.CellTemplate>
-                                    <DataTemplate>
-                                        <RadioButton GroupName="AlarmList" IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}"></RadioButton>
-                                    </DataTemplate>
-                                </DataGridTemplateColumn.CellTemplate>
-                            </DataGridTemplateColumn>-->
 
                             <materialDesign:DataGridTextColumn Header="OccurTime" Width="150" Binding="{Binding OccurTime }" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}">
                                 <DataGridTextColumn.HeaderStyle>
@@ -114,15 +107,8 @@
                                     </Style>
                                 </DataGridTextColumn.HeaderStyle>
                             </materialDesign:DataGridTextColumn>
-
                         </DataGrid.Columns>
 
-                        <!--<DataGrid.RowStyle>
-                            <Style TargetType="TextBlock">
-                                <Setter Property="TextAlignment" Value="Center"/>
-                            </Style>
-                        </DataGrid.RowStyle>-->
-
                     </DataGrid>
                 </DockPanel>
             </Grid>

+ 2 - 60
Dev/OHV/OHV.Module.MainViews/Views/TeachView.xaml

@@ -21,16 +21,6 @@
 
         <Grid Grid.Column="0">
             <Grid Margin="15,15" Background="#263238">
-                <!--<Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="*"/>
-                    <ColumnDefinition Width="*"/>
-                    <ColumnDefinition Width="*"/>
-                </Grid.ColumnDefinitions>-->
-
-                <!--<Grid.RowDefinitions>
-                    <RowDefinition Height="*"/>
-                    <RowDefinition Height="*"/>
-                </Grid.RowDefinitions>-->
 
                 <StackPanel Orientation="Horizontal"
                             VerticalAlignment="Center"
@@ -60,7 +50,7 @@
                         </StackPanel>
                     </Button>
 
-                    <Button HorizontalAlignment="Stretch"
+                    <!--<Button HorizontalAlignment="Stretch"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             Margin="20"
                             materialDesign:ButtonAssist.CornerRadius="10"
@@ -70,56 +60,8 @@
                             <materialDesign:PackIcon Kind="CursorDefaultClickOutline" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="100"/>
                             <TextBlock FontSize="30" Text="I/O Control" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                         </StackPanel>
-                    </Button>
+                    </Button>-->
                 </StackPanel>
-
-                <!--<DockPanel Grid.Column="0">
-                    <StackPanel VerticalAlignment="Center">
-                        <Button HorizontalAlignment="Stretch"
-                            Style="{StaticResource MaterialDesignRaisedButton}"
-                            Margin="20"
-                            materialDesign:ButtonAssist.CornerRadius="10"
-                            Command="{Binding DriveTeachPopup}"
-                            Height="150" Width="250">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="CarTractionControl" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="100"/>
-                                <TextBlock FontSize="20" Text="Drive Teach" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </StackPanel>
-                </DockPanel>
-
-                <DockPanel Grid.Column="1">
-                    <StackPanel VerticalAlignment="Center">
-                        <Button HorizontalAlignment="Stretch"
-                            Style="{StaticResource MaterialDesignRaisedButton}"
-                            Margin="20"
-                            materialDesign:ButtonAssist.CornerRadius="10"
-                            Command="{Binding LockPopup}"
-                             Height="150" Width="250">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="PackageUp" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="100"/>
-                                <TextBlock FontSize="20" Text="Lock Teach" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </StackPanel>
-                </DockPanel>
-
-                <DockPanel Grid.Column="2">
-                    <StackPanel VerticalAlignment="Center">
-                        <Button HorizontalAlignment="Stretch"
-                            Style="{StaticResource MaterialDesignRaisedButton}"
-                            Margin="20"
-                            materialDesign:ButtonAssist.CornerRadius="10"
-                            Command="{Binding InOutControlPopup}"
-                            Height="150" Width="250">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="CursorDefaultClickOutline" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="100"/>
-                                <TextBlock FontSize="20" Text="I/O Control" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>
-                    </StackPanel>
-                </DockPanel>-->
             </Grid>
         </Grid>
     </Grid>

+ 1 - 18
Dev/OHV/OHV.Module.MainViews/Views/UnitView.xaml

@@ -21,11 +21,6 @@
 
         <Grid Grid.Column="0">
             <Grid Margin="15,15" Background="#263238">
-                <!--<Grid.ColumnDefinitions>
-                    <ColumnDefinition Width="*"/>
-                    <ColumnDefinition Width="*"/>
-                    <ColumnDefinition Width="*"/>
-                </Grid.ColumnDefinitions>-->
 
                 <Grid.RowDefinitions>
                     <RowDefinition Height="*"/>
@@ -93,18 +88,6 @@
                             </StackPanel>
                         </Button>
 
-                        <!--<Button HorizontalAlignment="Stretch"
-                            Style="{StaticResource MaterialDesignRaisedButton}"
-                            Margin="20"
-                            materialDesign:ButtonAssist.CornerRadius="20"
-                            Command="{Binding SteerPopup}"
-                            Height="150" Width="220">
-                            <StackPanel>
-                                <materialDesign:PackIcon Kind="CarHandBrake" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="auto" Height="100"/>
-                                <TextBlock FontSize="30" Text="Steering" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
-                            </StackPanel>
-                        </Button>-->
-
                         <Button HorizontalAlignment="Stretch"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             Margin="20"
@@ -113,7 +96,7 @@
                             Height="150" Width="220">
                             <StackPanel>
                                 <materialDesign:PackIcon Kind="WifiStrength2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="auto" Height="100"/>
-                                <TextBlock FontSize="30" Text="Safe Detect" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                                <TextBlock FontSize="30" Text="Detect" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                             </StackPanel>
                         </Button>
 

+ 1 - 0
Dev/OHV/OHV.SqliteDAL/OHVDbInitializer.cs

@@ -187,6 +187,7 @@ namespace OHV.SqliteDAL
                 new Alarm { AlarmId = 30, Kind = eAlarmKind.Axis, Name = "System", Text="CP Off 24V",Solution="", Description="", Level = eAlarmLevel.Falut, },
                 new Alarm { AlarmId = 31, Kind = eAlarmKind.Axis, Name = "System", Text="CP Off Safety",Solution="", Description="", Level = eAlarmLevel.Falut, },
                 new Alarm { AlarmId = 32, Kind = eAlarmKind.Axis, Name = "BMS", Text="Battery Manage System Disconnected",Solution="", Description="", Level = eAlarmLevel.Falut, },
+                new Alarm { AlarmId = 33, Kind = eAlarmKind.Axis, Name = "Steering", Text="Steering State Abnormal",Solution="", Description="", Level = eAlarmLevel.Falut, },
             } );
 
             //context.Set<HisAlarm>().Add(new HisAlarm { AlarmId = 1, OccurTime = DateTime.Now.AddDays(-10) });

+ 8 - 16
Dev/OHV/OHV.Vehicle/Concept/D_MainWindow.xaml

@@ -44,18 +44,6 @@
                    materialDesign:ShadowAssist.ShadowDepth="Depth5" Background="{Binding OcsBrush, FallbackValue={x:Null}}">
                     OCS
                 </Button>
-
-                <!--<Button Margin="10,0,10,0"
-                    Style="{DynamicResource MaterialDesignFloatingActionMiniButton}"
-                    materialDesign:ShadowAssist.ShadowDepth="Depth5" Background="{Binding BatteryBrush, FallbackValue={x:Null}}">
-                    Battery
-                </Button>
-
-                <Button Margin="10,0,10,0"
-                    Style="{DynamicResource MaterialDesignFloatingActionMiniButton}"
-                    materialDesign:ShadowAssist.ShadowDepth="Depth5" Background="{Binding LaserBrush, FallbackValue={x:Null}}">
-                    Laser
-                </Button>-->
             </StackPanel>
 
             <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,10,0">
@@ -158,12 +146,13 @@
                             <Button Content="Vehicle IP" Margin="3" Background="{x:Null}"/>
                             <Button Content="OCS IP" Margin="3" Background="{x:Null}"/>
                             <Button Content="Version" Margin="3" Background="{x:Null}"/>
-                            <Button Margin="3" Height="50" Background="{x:Null}">
+                            <Button Content="CPU" Margin="3" Background="{x:Null}"/>
+                            <!--<Button Margin="3" Height="50" Background="{x:Null}">
                                 <StackPanel>
                                     <TextBlock HorizontalAlignment="Center"><Run>Last Builded</Run></TextBlock>
                                     <TextBlock HorizontalAlignment="Center"><Run>Time</Run></TextBlock>
                                 </StackPanel>
-                            </Button>
+                            </Button>-->
                         </StackPanel>
 
                         <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center">
@@ -171,9 +160,12 @@
                             <Button Content="{Binding VehicleIP, FallbackValue=127.0.0.1}" Margin="3" Background="{x:Null}"/>
                             <Button Content="{Binding OcsIP, FallbackValue=192.168.0.10}" Margin="3" Background="{x:Null}"/>
                             <Button Content="{Binding SwVersion, FallbackValue=OHV.1.0.0.1}" Margin="3" Background="{x:Null}"/>
-                            <Button Height="50" Margin="3" Background="{x:Null}">
-                                <TextBlock Text="{Binding LastBuildedTime, FallbackValue=2020-03-09 14:53:06, StringFormat=' \{0:yyyy-MM-dd HH:mm:ss\}'}"/>
+                            <Button Margin="0,4,0,0" Height="30" Width="auto" Background="{x:Null}">
+                                <TextBlock HorizontalAlignment="Center"><Run Text="{Binding CPU, StringFormat={}{0:0.0} %, FallbackValue=0%}"/></TextBlock>
                             </Button>
+                            <!--<Button Height="50" Margin="3" Background="{x:Null}">
+                                <TextBlock Text="{Binding LastBuildedTime, FallbackValue=2020-03-09 14:53:06, StringFormat=' \{0:yyyy-MM-dd HH:mm:ss\}'}"/>
+                            </Button>-->
                         </StackPanel>
                     </StackPanel>
                 </Grid>

+ 0 - 1
Dev/OHV/OHV.Vehicle/Concept/D_MainWindow.xaml.cs

@@ -25,7 +25,6 @@ namespace OHV.Vehicle.Concept
                 this.Loaded += MainWindow_Loaded;
                 this.Closing += MainWindow_Closing;
             }
-
         }
 
         private void GridMain_MouseLeftButtonDown( object sender , MouseButtonEventArgs e )

+ 1 - 19
Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs

@@ -153,8 +153,6 @@ namespace OHV.Vehicle.Concept
 
         #region Brushes
         private Brush _ocsBrush;// = Brushes.Gray;
-        private Brush _batteryBrush;// = Brushes.Gray;
-        private Brush _laserBrush;// = Brushes.Gray;
 
         public Brush OcsBrush
         {
@@ -164,22 +162,6 @@ namespace OHV.Vehicle.Concept
                 SetProperty(ref _ocsBrush, value);
             }
         }
-        public Brush BatteryBrush
-        {
-            get { return _batteryBrush; }
-            set
-            {
-                SetProperty(ref _batteryBrush, value);
-            }
-        }
-        public Brush LaserBrush
-        {
-            get { return this._laserBrush; }
-            set
-            {
-                SetProperty(ref _laserBrush, value);
-            }
-        }
 
         #endregion
 
@@ -205,7 +187,7 @@ namespace OHV.Vehicle.Concept
         IRegionManager regionManager;
         public Common.Events.HostConnectedEventArgs.eConnectedState State { get; set; }
 
-        private DeskTopInfo dti = new DeskTopInfo();
+        DeskTopInfo dti = new DeskTopInfo();
         SqliteManager sql;
 
         public D_MainWindowViewModel( IEventAggregator _ea , VCSystem cSystem , IRegionManager _regionManager , MessageController _msgController, SqliteManager _sql )

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


+ 1 - 1
Dev/OHV/OHV.Vehicle/MainWindowViewModel.cs

@@ -40,7 +40,7 @@ namespace OHV.Vehicle
             }
         }
 
-        private string _vehicleID = "Gv#000001";
+        private string _vehicleID = "OHV#001";
         public string VehicleID
         {
             get { return this._vehicleID; }

+ 14 - 138
Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Advantech/Advantech.cs

@@ -14,7 +14,6 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
 {
     public class Advantech
     {
-        //UInt16 handle = PCANBasic.PCAN_USBBUS1;
         AdvCANIO device;
         string canPortName;
 
@@ -37,6 +36,8 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
             set
             {
                 if ( this.isConnected == value ) return;
+                    this.isConnected = value;
+                
                 if ( value )
                     this.manager._OnConnected();
                 else
@@ -119,7 +120,6 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
 
         void TryToConnect( )
         {
-            //var a = AdvCANIO.OPERATION_ERROR; == -1
             this.qqW.Clear();
 
             var d = this.device.acCanClose();
@@ -127,13 +127,13 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
 
             var ret = this.device.acCanOpen( this.canPortName, false , 500 , 500 );
 
-            if(ret < 0)
+            if(ret < AdvCANIO.SUCCESS)
             {
                 throw new Exception( "AdvCAN Open Error" );
             }
 
             ret = this.device.acEnterResetMode();
-            if ( ret < 0 )
+            if ( ret < AdvCANIO.SUCCESS )
             {
                 throw new Exception( "AdvCAN Reset Error" );
             }
@@ -146,7 +146,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
             //}
 
             ret = this.device.acSetBaud(500);
-            if ( ret < 0 )
+            if ( ret < AdvCANIO.SUCCESS )
             {
                 throw new Exception( "AdvCAN BaudRate Set Error" );
             }
@@ -181,8 +181,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
                 throw new Exception( "AdvCAN EnterWorkMode Error" );
             }
 
-            //this.IsConnected = true;
-            if ( this.Write( eSendMode.MANUAL ) <= 0 )
+            if ( this.Write( eSendMode.MANUAL ) <= AdvCANIO.SUCCESS )
             {
                 throw new Exception( "AdvCan Write Error" );
             }
@@ -199,22 +198,16 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
                     if ( !IsConnected )
                     {
                         this.TryToConnect();
-                        Thread.Sleep( 1000 );
+                        Thread.Sleep( 500 );
                         continue;
                     }
 
-                    //if ( !GetStatus() )
-                    //{
-                    //    this.DisConnect();
-                    //    continue;
-                    //}
-
                     object o = this.qqW.Dequeue();
 
                     if ( o is PollingObject ) //Scan 을 주기적 으로 진행.
                     {
-                        //this.PollingBattery();
                         this.Write(eSendMode.MANUAL);
+
                         this.ReadMessage();
                     }
                     //else if ( o is ISetData ) //하나의 명령을 수행.
@@ -247,42 +240,6 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
                     logger.E( $"eSlnet {exception.Message}" );
                 }
             }
-
-        }
-
-        private void PollingBattery( )
-        {
-            var ll = this.manager.ReceivedDataDic.Values.ToList();
-            ll.ForEach( x =>
-            {
-                var kind = CastTo<eDataKind>.From<Enum>( x.DataKind );
-                switch ( kind )
-                {
-                    case eDataKind.Voltage:
-                        break;
-                    case eDataKind.Current:
-                        break;
-                    case eDataKind.BatteryState:
-                        break;
-                    case eDataKind.ChargeCompleteTime:
-                        break;
-                    case eDataKind.DisChargeCompleteTime:
-                        break;
-                    case eDataKind.SOC:
-                        break;
-                    case eDataKind.SOH:
-                        break;
-                    case eDataKind.ResidualCapacity:
-                        break;
-                    case eDataKind.ResidualEnergy:
-                        break;
-                    case eDataKind.Temperature:
-                        break;
-                    default:
-                        break;
-                }
-            } );
-
         }
 
         /// <summary>
@@ -315,7 +272,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
                     break;
             }
 
-            var ret = this.device.acCanWrite( msg , 1 , ref pulNumberofWritten );
+            var ret = this.device.acCanWrite( msg , (uint)msg.Length , ref pulNumberofWritten );
 
             if(ret == AdvCANIO.TIME_OUT)
             {
@@ -327,19 +284,14 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
             {
                 CanError();
                 logger.E( "Battery Operation Error" );
-                return -1;
+                return -2;
             }
 
             return 1;
         }
 
-        //TPCANStatus PeakCanWrite( uint handle , TPCANMsg msg )
-        //{
-        //    return PCANBasic.Write( ( ushort )handle , ref msg );
-        //}
-
         /// <summary>
-        /// Reading start 전 Connection 상태 체크
+        /// Adv Can Buffer Read
         /// </summary>
         /// <returns></returns>
         void ReadMessage( )
@@ -371,7 +323,8 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
         {
             //null check battery receive
             var ll = recv.Select( x => x.data ).ToList();
-            if ( !ll.Any() )
+            
+            if ( ll.Count <= 0 && !ll.Any() )
                 return;
 
             ll.ForEach( r =>
@@ -431,7 +384,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
             var result = rs.Cast<object>().ToList();
         }
 
-        void CanError(  )
+        void CanError()
         {
             //var result = PCANBasic.Uninitialize( this.handle );
             //this.IsConnected = false;
@@ -440,82 +393,5 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
             //logger.E( $"[Battery Advantech] - {e.Message} -" );
             this.IsConnected = false;
         }
-
-        bool GetStatus( )
-        {
-            //var result = PCANBasic.GetStatus( this.handle );
-            bool state = false;
-
-            //switch ( result )
-            //{
-            //    case TPCANStatus.PCAN_ERROR_OK:
-            //        state = true;
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_XMTFULL:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_OVERRUN:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_BUSLIGHT:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_BUSHEAVY:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_BUSPASSIVE:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_BUSOFF:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_ANYBUSERR:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_QRCVEMPTY:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_QOVERRUN:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_QXMTFULL:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_REGTEST:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_NODRIVER:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_HWINUSE:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_NETINUSE:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_ILLHW:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_ILLNET:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_ILLCLIENT:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_RESOURCE:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_ILLPARAMTYPE:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_ILLPARAMVAL:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_UNKNOWN:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_ILLDATA:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_ILLMODE:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_CAUTION:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_INITIALIZE:
-            //        break;
-            //    case TPCANStatus.PCAN_ERROR_ILLOPERATION:
-            //        break;
-            //}
-
-            //this.errormsg = result.ToString();
-            return state;
-        }
-
-        private void DisConnect( )
-        {
-            //this.IsConnected = false;
-            //PCANBasic.Reset( this.handle );
-            //PCANBasic.Uninitialize( this.handle );
-
-            this.manager._OnDisconnected();
-        }
     }
 }

+ 0 - 1
Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/BMUManager.cs

@@ -98,7 +98,6 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
 
         protected void EnqueueToNet( object o )
         {
-            //this.com.Enqueue( o );
             this.adCom.Enqueue( o );
         }
 

+ 82 - 69
Dev/OHV/VehicleControlSystem/ControlLayer/Steering.cs

@@ -24,10 +24,10 @@ namespace VehicleControlSystem.ControlLayer
         public eSteeringState SteeringState
         {
             get { return steeringState; }
-            set { SetField(ref this.steeringState, value); }
+            set { SetField( ref this.steeringState , value ); }
         }
 
-        public Steering(IIO io, SqliteManager sql, IEventAggregator ea)
+        public Steering( IIO io , SqliteManager sql , IEventAggregator ea )
         {
             this.iO = io as EzIO;
             this.sql = sql;
@@ -35,113 +35,126 @@ namespace VehicleControlSystem.ControlLayer
             this.iO.OnChangedIO += IO_OnChangedIO;
         }
 
-        private void IO_OnChangedIO(BitBlock bit)
+        private void IO_OnChangedIO( BitBlock bit )
         {
-            if (bit.Tag.Equals("IN_F_STEERING_DETECT_LEFT") || bit.Tag.Equals("IN_F_STEERING_DETECT_RIGHT"))
+            if ( bit.Tag.Equals( "IN_F_STEERING_DETECT_LEFT" ) || bit.Tag.Equals( "IN_F_STEERING_DETECT_RIGHT" ) )
                 this.GetSteeringState();
-            if (bit.Tag.Equals("IN_R_STEERING_DETECT_LEFT") || bit.Tag.Equals("IN_R_STEERING_DETECT_RIGHT"))
+            if ( bit.Tag.Equals( "IN_R_STEERING_DETECT_LEFT" ) || bit.Tag.Equals( "IN_R_STEERING_DETECT_RIGHT" ) )
                 this.GetSteeringState();
         }
 
-        void GetSteeringState()
+        void GetSteeringState( )
         {
             eSteeringState frontState = eSteeringState.None;
-            if (this.IsFrontLeft() && this.IsFrontRight())
+            if ( this.IsFrontLeft() && this.IsFrontRight() )
                 frontState = eSteeringState.None;
-            if (!this.IsFrontLeft() && !this.IsFrontRight())
+            if ( !this.IsFrontLeft() && !this.IsFrontRight() )
                 frontState = eSteeringState.None;
 
-            if (this.IsFrontLeft() && !this.IsFrontRight())
+            if ( this.IsFrontLeft() && !this.IsFrontRight() )
                 frontState = eSteeringState.Left;
-            if (!this.IsFrontLeft() && this.IsFrontRight())
+            if ( !this.IsFrontLeft() && this.IsFrontRight() )
                 frontState = eSteeringState.Right;
 
             eSteeringState rearState = eSteeringState.None;
-            if (this.IsRearLeft() && this.IsRearRight())
+            if ( this.IsRearLeft() && this.IsRearRight() )
                 rearState = eSteeringState.None;
-            if (!this.IsRearLeft() && !this.IsRearRight())
+            if ( !this.IsRearLeft() && !this.IsRearRight() )
                 rearState = eSteeringState.None;
 
-            if (this.IsRearLeft() && !this.IsRearRight())
+            if ( this.IsRearLeft() && !this.IsRearRight() )
                 rearState = eSteeringState.Left;
-            if (!this.IsRearLeft() && this.IsRearRight())
+            if ( !this.IsRearLeft() && this.IsRearRight() )
                 rearState = eSteeringState.Right;
 
-            if (frontState == eSteeringState.Left && rearState == eSteeringState.Left)
+            if ( frontState == eSteeringState.Left && rearState == eSteeringState.Left )
                 this.SteeringState = eSteeringState.Left;
-            else if (frontState == eSteeringState.Right && rearState == eSteeringState.Right)
+            else if ( frontState == eSteeringState.Right && rearState == eSteeringState.Right )
                 this.SteeringState = eSteeringState.Right;
             else
                 this.SteeringState = eSteeringState.None;
         }
 
         object lockObj = new object();
-        public int ControlSteering(bool isLeft = false)
+        bool isExecuteSteering = false;
+        public int ControlSteering( bool isLeft = false )
         {
-            lock (lockObj)
+            if ( this.isExecuteSteering )
+                return 0;
+
+            this.isExecuteSteering = true;
+
+            if ( isLeft ) //Left IO 가 직진 이라고 생각하자.
             {
-                if (isLeft) //Left IO 가 직진 이라고 생각하자.
+                this.iO.WriteOutputIO( "OUT_F_STEERING_CWCCW" , false );
+                this.iO.WriteOutputIO( "OUT_R_STEERING_CWCCW" , true );
+                this.SetHightVolt();
+                if ( this.SteeringState == eSteeringState.Left )
                 {
-                    this.iO.WriteOutputIO("OUT_F_STEERING_CWCCW", false);
-                    this.iO.WriteOutputIO("OUT_R_STEERING_CWCCW", false);
-                    this.SetHightVolt();
+                    this.isExecuteSteering = false;
+                    return 0;
                 }
-                else
+            }
+            else
+            {
+                this.iO.WriteOutputIO( "OUT_F_STEERING_CWCCW" , true );
+                this.iO.WriteOutputIO( "OUT_R_STEERING_CWCCW" , false );
+                this.SetHightVolt();
+                if ( this.SteeringState == eSteeringState.Right )
                 {
-                    this.iO.WriteOutputIO("OUT_F_STEERING_CWCCW", true);
-                    this.iO.WriteOutputIO("OUT_R_STEERING_CWCCW", true);
-                    this.SetHightVolt();
+                    this.isExecuteSteering = false;
+                    return 0;
                 }
-
-                var task = Task<bool>.Run(() =>
-                {
-                    long sTime = SwUtils.CurrentTimeMillis;
-                    while (true)
-                    {
-                        if (SwUtils.Gt(sTime, 5 * ConstUtils.ONE_SECOND)) //Wait 20Sec
-                            return false;
-
-                        if (isLeft)
-                        {
-                            if (this.IsFrontLeft() && this.IsRearLeft())
-                                break;
-                        }
-                        else
-                        {
-                            if (this.IsFrontRight() && this.IsRearRight())
-                                break;
-                        }
-                    }
-                    return true;
-                }).ContinueWith(t =>
-                {
-                    if (!t.Result)
-                    {
-                        this.OnSteeringError?.BeginInvoke(this, 9999, null, null);
-                    }
-                    else
-                        this.OnSteeringError?.BeginInvoke(this, 0, null, null);
-                });
-
             }
 
+            var task = Task<bool>.Run( ( ) =>
+             {
+                 long sTime = SwUtils.CurrentTimeMillis;
+                 while ( true )
+                 {
+                     if ( SwUtils.Gt( sTime , 5 * ConstUtils.ONE_SECOND ) ) //Wait 20Sec
+                         return false;
+
+                     if ( isLeft )
+                     {
+                         if ( this.IsFrontLeft() && this.IsRearLeft() )
+                             break;
+                     }
+                     else
+                     {
+                         if ( this.IsFrontRight() && this.IsRearRight() )
+                             break;
+                     }
+                 }
+                 return true;
+             } ).ContinueWith( t =>
+                  {
+                      if ( !t.Result )
+                          this.OnSteeringError?.BeginInvoke( this , 33 , null , null );
+                      else
+                          this.OnSteeringError?.BeginInvoke( this , 0 , null , null );
+
+                      GetSteeringState();
+                      this.isExecuteSteering = false;
+                  } );
+
             return 0;
         }
-        
-        void SetHightVolt()
+
+        void SetHightVolt( )
         {
-            this.iO.WriteOutputIO("OUT_F_STEERING_DA", true);
-            this.iO.WriteOutputIO("OUT_R_STEERING_DA", true);
-            this.iO.WriteOutputIO("OUT_F_STEERING_DA", false, 500);
-            this.iO.WriteOutputIO("OUT_R_STEERING_DA", false, 500);
+            this.iO.WriteOutputIO( "OUT_F_STEERING_DA" , true );
+            this.iO.WriteOutputIO( "OUT_R_STEERING_DA" , true );
+            this.iO.WriteOutputIO( "OUT_F_STEERING_DA" , false , 500 );
+            this.iO.WriteOutputIO( "OUT_R_STEERING_DA" , false , 500 );
         }
 
-        bool IsFrontLeft() => this.iO.IsOn("IN_F_STEERING_DETECT_LEFT");
-        bool IsFrontRight() => this.iO.IsOn("IN_F_STEERING_DETECT_RIGHT");
-        bool IsRearLeft() => this.iO.IsOn("IN_R_STEERING_DETECT_LEFT");
-        bool IsRearRight() => this.iO.IsOn("IN_R_STEERING_DETECT_RIGHT");
+        bool IsFrontLeft( ) => this.iO.IsOn( "IN_F_STEERING_DETECT_LEFT" );
+        bool IsFrontRight( ) => this.iO.IsOn( "IN_F_STEERING_DETECT_RIGHT" );
+        bool IsRearLeft( ) => this.iO.IsOn( "IN_R_STEERING_DETECT_LEFT" );
+        bool IsRearRight( ) => this.iO.IsOn( "IN_R_STEERING_DETECT_RIGHT" );
 
-        public bool IsLeft() => this.IsFrontLeft() && this.IsRearLeft();
-        public bool IsRight() => this.IsFrontRight() && this.IsRearRight();
+        public bool IsLeft( ) => this.IsFrontLeft() && this.IsRearLeft();
+        public bool IsRight( ) => this.IsFrontRight() && this.IsRearRight();
     }
 }

+ 58 - 19
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -188,34 +188,74 @@ namespace VehicleControlSystem.ControlLayer
         public bool IsMoving { get; set; }
 
         double batteryVoltage;
-        public double BatteryVoltage { get { return this.batteryVoltage; } set { this.SetField( ref this.batteryVoltage , value ); } }
+        public double BatteryVoltage 
+        { 
+            get { return this.batteryVoltage; } 
+            set { this.SetField( ref this.batteryVoltage , value );} 
+        }
 
         double batteryCurrent;
-        public double BatteryCurrent { get { return this.batteryCurrent; } set{this.SetField(ref this.batteryCurrent, value); } }
+        public double BatteryCurrent 
+        { 
+            get { return this.batteryCurrent; } 
+            set{this.SetField(ref this.batteryCurrent, value); } 
+        }
 
         double batteryState;
-        public double BatteryState { get { return this.batteryState; } set { this.SetField( ref this.batteryState , value); } }
+        public double BatteryState 
+        { 
+            get { return this.batteryState; } 
+            set { this.SetField( ref this.batteryState , value); } 
+        }
 
         double batteryChargeTime;
-        public double BatteryChargeTime { get { return this.batteryChargeTime; } set { this.SetField( ref this.batteryChargeTime , value ); } }
+        public double BatteryChargeTime 
+        { 
+            get { return this.batteryChargeTime; } 
+            set { this.SetField( ref this.batteryChargeTime , value ); } 
+        }
 
         double batteryDisChargeTime;
-        public double BatteryDisChargeTime { get { return this.batteryDisChargeTime; } set { this.SetField( ref this.batteryDisChargeTime , value ); } }
+        public double BatteryDisChargeTime 
+        { 
+            get { return this.batteryDisChargeTime; } 
+            set { this.SetField( ref this.batteryDisChargeTime , value ); } 
+        }
 
         double batteryStateOfCharge;
-        public double BatteryStateOfCharge { get { return this.batteryStateOfCharge; } set { this.SetField( ref this.batteryStateOfCharge , value ); } }
+        public double BatteryStateOfCharge 
+        { 
+            get { return this.batteryStateOfCharge; } 
+            set { this.SetField( ref this.batteryStateOfCharge , value ); } 
+        }
 
         double batteryStateOfHealth;
-        public double BatteryStateOfHealth { get { return this.batteryStateOfHealth; } set { this.SetField( ref this.batteryStateOfHealth , value ); } }
+        public double BatteryStateOfHealth 
+        { 
+            get { return this.batteryStateOfHealth; } 
+            set { this.SetField( ref this.batteryStateOfHealth , value ); } 
+        }
 
         double batteryCapacity;
-        public double BatteryCapacity { get { return this.batteryCapacity; } set { this.SetField( ref this.batteryCapacity , value ); } }
+        public double BatteryCapacity 
+        { 
+            get { return this.batteryCapacity; } 
+            set { this.SetField( ref this.batteryCapacity , value ); } 
+        }
 
         double batteryEnergy;
-        public double BatteryEnergy { get { return this.batteryEnergy; } set { this.SetField( ref this.batteryEnergy , value ); } }
+        public double BatteryEnergy 
+        { 
+            get { return this.batteryEnergy; } 
+            set { this.SetField( ref this.batteryEnergy , value ); } 
+        }
 
         double batteryTemperature;
-        public double BatteryTemperature { get { return this.batteryTemperature; } set { this.SetField( ref this.batteryTemperature , value ); } }
+        public double BatteryTemperature 
+        { 
+            get { return this.batteryTemperature; } 
+            set { this.SetField( ref this.batteryTemperature , value ); } 
+        }
 
         bool batteryIsConnect;
         public bool BatteryIsConnect 
@@ -682,22 +722,22 @@ namespace VehicleControlSystem.ControlLayer
 
                     switch ( subCmd.Type )
                     {
-                        case SubCmd.eType.Move:
+                        case eSubCommandType.Move:
                             this.CurrentSubCommand = subCmd;
                             this.Move( subCmd );
                             break;
 
-                        case SubCmd.eType.Load:
+                        case eSubCommandType.Load:
                             this.CurrentSubCommand = subCmd;
                             this.LoadCarrier( subCmd );
                             break;
 
-                        case SubCmd.eType.Unload:
+                        case eSubCommandType.Unload:
                             this.CurrentSubCommand = subCmd;
                             this.UnloadCarrier( subCmd );
                             break;
 
-                        case SubCmd.eType.Charge:
+                        case eSubCommandType.Charge:
                             this.CurrentSubCommand = subCmd;
                             this.BatteryCharge( subCmd );
                             break;
@@ -1182,6 +1222,7 @@ namespace VehicleControlSystem.ControlLayer
                 if ( !IsDetectedLoadStart() && !IsDetectedCenter() )
                     break;
             }
+            Thread.Sleep( 2000 );
             OnOffConveyor( false );
             logger.D( "[Manual Unload] - Conveyor Off" );
 
@@ -1479,7 +1520,7 @@ namespace VehicleControlSystem.ControlLayer
         private void BMUManager_OnFirstColtd( List<ReceivedData> obj )
         {
         }
-
+        
         private void BMUManager_OnChangedReceivedData( Serial.DataModel.ReceivedData obj )
         {
             var kind = CastTo<eDataKind>.From<Enum>( obj.DataKind );
@@ -1489,7 +1530,7 @@ namespace VehicleControlSystem.ControlLayer
                     this.BatteryVoltage = (double)obj.Value * obj.Scale;
                     break;
                 case eDataKind.Current:
-                    this.BatteryCurrent = ( double )obj.Value * obj.Scale;
+                    this.BatteryCurrent = (double)obj.Value * obj.Scale;
                     break;
                 case eDataKind.BatteryState:
                     if ( obj.Value == null )
@@ -1661,8 +1702,6 @@ namespace VehicleControlSystem.ControlLayer
 
         private void Clamp_PropertyChanged( object sender, System.ComponentModel.PropertyChangedEventArgs e )
         {
-            //TODO:[20/03/26 ys-hwang] Clamp State
-
             var property = sender.GetType().GetProperty( e.PropertyName );
             var newValue = property.GetValue( sender, null );
 
@@ -1686,7 +1725,7 @@ namespace VehicleControlSystem.ControlLayer
             if ( e != 0 )
             {
                 logger.E( $"[Steering] - Control Error {e}" );
-                this.autoManager.ProcessAlarm( e );
+                this.OccurVehicleAlarm( e ) ;
             }
             else
             {

+ 10 - 9
Dev/OHV/VehicleControlSystem/Managers/Scheduler.cs

@@ -10,6 +10,7 @@ using GSG.NET.Logging;
 using GSG.NET.Utils;
 using OHV.Common.Events;
 using OHV.Common.Model;
+using OHV.Common.Shareds;
 using OHV.SqliteDAL;
 using Prism.Events;
 
@@ -161,7 +162,7 @@ namespace VehicleControlSystem.Managers
                             case OHV.Common.Shareds.eCommandType.MoveNLoad:
                             case OHV.Common.Shareds.eCommandType.MoveNUnload:
                             case OHV.Common.Shareds.eCommandType.Charging:
-                                CreateSubCommand( cmd, SubCmd.eType.Move );
+                                CreateSubCommand( cmd, eSubCommandType.Move );
                                 break;
                             default:
                                 break;
@@ -183,19 +184,19 @@ namespace VehicleControlSystem.Managers
 
                             if ( cmd.Type == OHV.Common.Shareds.eCommandType.MoveNLoad )
                             {
-                                if ( this.CreateSubCommand( cmd, SubCmd.eType.Load ) )
+                                if ( this.CreateSubCommand( cmd, eSubCommandType.Load ) )
                                     cmd.IsSecondCommanded = true;
                                 break;
                             }
                             else if ( cmd.Type == OHV.Common.Shareds.eCommandType.MoveNUnload )
                             {
-                                if ( this.CreateSubCommand( cmd, SubCmd.eType.Unload ) )
+                                if ( this.CreateSubCommand( cmd, eSubCommandType.Unload ) )
                                     cmd.IsSecondCommanded = true;
                                 break;
                             }
                             else if ( cmd.Type == OHV.Common.Shareds.eCommandType.Charging )
                             {
-                                if ( this.CreateSubCommand( cmd, SubCmd.eType.Charge ) )
+                                if ( this.CreateSubCommand( cmd, eSubCommandType.Charge ) )
                                     cmd.IsSecondCommanded = true;
                                 break;
                             }
@@ -221,18 +222,18 @@ namespace VehicleControlSystem.Managers
             }
         }
 
-        private bool CreateSubCommand( Command cmd, SubCmd.eType type )
+        private bool CreateSubCommand( Command cmd, eSubCommandType type )
         {
             //명령을 만들기 전에 Vehicle 의 상태를 확인하여 만들자.
             switch ( type )
             {
-                case SubCmd.eType.Move:
+                case eSubCommandType.Move:
                     break;
-                case SubCmd.eType.Load:
+                case eSubCommandType.Load:
                     break;
-                case SubCmd.eType.Unload:
+                case eSubCommandType.Unload:
                     break;
-                case SubCmd.eType.Charge:
+                case eSubCommandType.Charge:
                     break;
                 default:
                     break;

+ 4 - 1
Dev/OHV/VehicleControlSystem/VCSystem.cs

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
 using GSG.NET;
 using GSG.NET.Extensions;
@@ -254,7 +255,9 @@ namespace VehicleControlSystem
             if ( !this.IO.IsOn( "IN_MC_ON" ) )
             {
                 this.IO.WriteOutputIO( "OUT_SAFETY_RESET", true );
-                this.IO.WriteOutputIO( "OUT_SAFETY_RESET", false, 3000 );
+                Thread.Sleep( 2000 );
+                this.IO.WriteOutputIO( "OUT_SAFETY_RESET" , false );
+                Thread.Sleep( 1000 );
             }
         }