فهرست منبع

DriveView Update

SK.Kang 6 سال پیش
والد
کامیت
5c2ddd5230

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

@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using FluentResults;
 using OHV.Common.Model;
 
 namespace OHV.Common.Events
@@ -93,6 +94,8 @@ namespace OHV.Common.Events
         public double CurrentPosition { get; set; }
 
         public Dictionary<string, object> Args { get; set; }
+
+        public Result Result { get; set; }
     }
 
     public class IOChangedMessageEventArgs: EventArgs
@@ -128,6 +131,7 @@ namespace OHV.Common.Events
             MOVE = 0,
             STOP,
             Steering,
+            SteeringState,
         }
 
         public enum eMoveDir

+ 15 - 13
Dev/OHV/OHV.Common/Model/Route.cs

@@ -8,22 +8,23 @@ using System.ComponentModel.DataAnnotations.Schema;
 
 namespace OHV.Common.Model
 {
-    public class Route
+    public enum eRoadForm
     {
-        public enum eRoadForm
-        {
-            Straight,
-            Curve,
-        }
+        Straight,
+        Curve,
+    }
 
-        public enum ePointType
-        {
-            LoadPort,
-            UnloadPort,
-            Charging,
-            Road, // 일반 길
-        }
+    public enum ePointType
+    {
+        LoadPort,
+        UnloadPort,
+        Charging,
+        Road, // 일반 길
+    }
 
+
+    public class Route
+    {
         [Key]
         public int Id { get; set; }
 
@@ -36,6 +37,7 @@ namespace OHV.Common.Model
         public double ScaleValue { get; set; }
         public double ScaleTolerance { get; set; }
         public bool UsePIO { get; set; }
+        public virtual bool IsSelected { get; set; }
 
     }
 }

+ 83 - 73
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoView.xaml

@@ -10,7 +10,10 @@
              mc:Ignorable="d" 
              Width="1130"
              Height="700"
-             Background="#455a64">
+             Background="#455a64"
+            xmlns:System="clr-namespace:System;assembly=mscorlib"
+            xmlns:SharedEnum="clr-namespace:OHV.Common.Model;assembly=OHV.Common"
+             >
 
     <prism:Dialog.WindowStyle>
         <Style TargetType="Window">
@@ -32,24 +35,24 @@
     </prism:Dialog.WindowStyle>
 
     <UserControl.Resources>
-        <Style x:Key="MaterialDesignDataGridRowHeader" TargetType="{x:Type DataGridRowHeader}">
-            <Setter Property="Template">
-                <Setter.Value>
-                    <ControlTemplate TargetType="{x:Type DataGridRowHeader}">
-                        <Grid MinWidth="24">
-                            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}">
-                                <StackPanel Orientation="Horizontal">
-                                    <ContentPresenter RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/>
-                                    <Control SnapsToDevicePixels="false" Template="{Binding ValidationErrorTemplate, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}" Visibility="{Binding (Validation.HasError), Converter={StaticResource BooleanToVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}"/>
-                                </StackPanel>
-                            </Border>
-                            <Thumb x:Name="PART_TopHeaderGripper" Style="{StaticResource MaterialDesignGridRowHeaderGripper}" VerticalAlignment="Top"/>
-                            <Thumb x:Name="PART_BottomHeaderGripper" Style="{StaticResource MaterialDesignGridRowHeaderGripper}" VerticalAlignment="Bottom"/>
-                        </Grid>
-                    </ControlTemplate>
-                </Setter.Value>
-            </Setter>
-        </Style>
+        <ResourceDictionary>
+            <ObjectDataProvider x:Key="RoadForm" MethodName="GetValues"
+                            ObjectType="{x:Type System:Enum}">
+                <ObjectDataProvider.MethodParameters>
+                    <x:Type TypeName="SharedEnum:eRoadForm"/>
+                </ObjectDataProvider.MethodParameters>
+            </ObjectDataProvider>
+            <ObjectDataProvider x:Key="PointType" MethodName="GetValues"
+                            ObjectType="{x:Type System:Enum}">
+                <ObjectDataProvider.MethodParameters>
+                    <x:Type TypeName="SharedEnum:ePointType"/>
+                </ObjectDataProvider.MethodParameters>
+            </ObjectDataProvider>
+
+            <ResourceDictionary.MergedDictionaries>
+                <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.DataGrid.xaml" />
+            </ResourceDictionary.MergedDictionaries>
+        </ResourceDictionary>
 
     </UserControl.Resources>
 
@@ -69,41 +72,42 @@
             </Grid.RowDefinitions>
 
             <!--Position Data Grid View-->
-            <Grid Grid.Row="0">
-                <DataGrid
-                      Margin="15"
-                      ItemsSource="{Binding POS}"
-                      CanUserSortColumns="True"
-                      CanUserAddRows="False"
-                      Background="{x:Null}"
-                      Width="auto"
-                      Height="auto"
-                      BorderBrush="#FF00FFD3"
-                      BorderThickness="1"
-                      SelectedItem="{Binding SelectedRow1}">
-
-                    <DataGrid.ColumnHeaderStyle>
-                        <Style TargetType="DataGridColumnHeader">
-                            <Setter Property="BorderBrush" Value="#FF00FFD3"/>
-                            <Setter Property="Foreground" Value="White"/>
-                            <Setter Property="FontSize" Value="20"/>
-                            <Setter Property="HorizontalAlignment" Value="Center"/>
-                            <Setter Property="VerticalAlignment" Value="Center"/>
-                        </Style>
-                    </DataGrid.ColumnHeaderStyle>
-                    <DataGrid.CellStyle>
-                        <Style TargetType="DataGridCell">
-                            <Setter Property="TextBlock.TextAlignment" Value="Center"/>
-                            <Setter Property="TextBlock.FontStretch" Value="UltraExpanded"/>
-                            <Setter Property="TextBlock.VerticalAlignment" Value="Center"/>
-                            <Setter Property="BorderBrush" Value="Black"/>
-                            <Setter Property="Foreground" Value="White"/>
-                            <Setter Property="FontSize" Value="15"/>
-                            <Setter Property="Width" Value="161"/>
-                            <Setter Property="Height" Value="50"/>
-                        </Style>
-                    </DataGrid.CellStyle>
-                </DataGrid>
+            <Grid Grid.Row="0" Background="#FF606E83" >
+                <ScrollViewer Background="#FF4B5663">
+                    <StackPanel>
+                        <TextBlock>Drive Point List</TextBlock>
+                        <DataGrid ItemsSource="{Binding RouteList}" CanUserSortColumns="True" CanUserAddRows="False" AutoGenerateColumns="False" materialDesign:DataGridAssist.CellPadding="13 8 8 8" 
+                                  materialDesign:DataGridAssist.ColumnHeaderPadding="8" Background="{x:Null}" >
+                            <DataGrid.Resources>
+                                <Style TargetType="{x:Type DataGridRow}">
+                                    <Style.Triggers>
+                                        <Trigger Property="IsSelected" Value="false">
+                                            <Setter Property="Background" Value="{x:Null}"></Setter>
+                                        </Trigger>
+                                    </Style.Triggers>
+                                </Style>
+                            </DataGrid.Resources>
+                            <DataGrid.Columns>
+                                <DataGridTemplateColumn >
+                                    <DataGridTemplateColumn.CellTemplate>
+                                        <DataTemplate>
+                                            <RadioButton GroupName="RouteList" IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}"></RadioButton>
+                                        </DataTemplate>
+                                    </DataGridTemplateColumn.CellTemplate>
+                                </DataGridTemplateColumn>
+
+                                <materialDesign:DataGridTextColumn Header="Name" Binding="{Binding Name}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}"></materialDesign:DataGridTextColumn>
+                                <materialDesign:DataGridTextColumn Header="PrePoint" Binding="{Binding PrePoint}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}"></materialDesign:DataGridTextColumn>
+                                <materialDesign:DataGridTextColumn Header="NextPoint" Binding="{Binding NextPoint}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}"></materialDesign:DataGridTextColumn>
+                                <materialDesign:DataGridComboBoxColumn Header="Form" SelectedValueBinding="{Binding Form}" ItemsSourceBinding="{Binding Source={StaticResource RoadForm}}"></materialDesign:DataGridComboBoxColumn>
+                                <materialDesign:DataGridComboBoxColumn Header="Type" SelectedValueBinding="{Binding Type}" ItemsSourceBinding="{Binding Source={StaticResource PointType}}"></materialDesign:DataGridComboBoxColumn>
+                                <materialDesign:DataGridTextColumn Header="Value" Binding="{Binding ScaleValue}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}"></materialDesign:DataGridTextColumn>
+                                <materialDesign:DataGridTextColumn Header="Tolerance" Binding="{Binding ScaleTolerance}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}"></materialDesign:DataGridTextColumn>
+                                <DataGridCheckBoxColumn Header="UsePIO" Binding="{Binding UsePIO}" EditingElementStyle="{StaticResource MaterialDesignDataGridCheckBoxColumnEditingStyle}"></DataGridCheckBoxColumn>
+                            </DataGrid.Columns>
+                        </DataGrid>
+                    </StackPanel>
+                </ScrollViewer>
             </Grid>
 
             <!--Axis  Grid View-->
@@ -124,7 +128,7 @@
 
                 <Border Margin="0,5,163,5" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Grid.RowSpan="4" Grid.Column="2"/>
                 <Border Margin="161,5,2,3" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Grid.RowSpan="2" Grid.Column="2" Grid.Row="2"/>
-                <Border Margin="161,0,10,78" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Grid.Column="2" Grid.ColumnSpan="3" Grid.Row="2"/>
+                <Border Margin="161,0,10,78" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Grid.Column="2" Grid.ColumnSpan="3" Grid.Row="2" RenderTransformOrigin="0.495,5.333"/>
                 <Border Margin="33,-2,34,82" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Grid.Column="2" Grid.ColumnSpan="3" Grid.RowSpan="2"/>
 
                 <Button Grid.Column="0" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
@@ -191,7 +195,7 @@
                 </Button>
 
                 <!--Steering Dir Front-->
-                <Button Grid.Column="3" Margin="10"
+                <!--<Button Grid.Column="3" Margin="10"
                         Grid.Row="2"
                         HorizontalAlignment="Stretch" 
                         Height="Auto" 
@@ -200,13 +204,17 @@
                         Command="{Binding SelectedDirection}"
                         CommandParameter="Front">
                     <StackPanel>
-                        <!--<materialDesign:PackIcon Kind="SubdirectoryArrowLeft" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        -->
+                <!--<materialDesign:PackIcon Kind="SubdirectoryArrowLeft" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                <!--
                         <TextBlock Text="Steering" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                         <TextBlock Text="Front" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                     </StackPanel>
                 </Button>
 
+                -->
                 <!--Steering Dir Back-->
+                <!--
                 <Button Grid.Column="4" Margin="10"
                         Grid.Row="2"
                         HorizontalAlignment="Stretch" 
@@ -216,37 +224,39 @@
                         Command="{Binding SelectedDirection}"
                         CommandParameter="Back">
                     <StackPanel>
-                        <!--<materialDesign:PackIcon Kind="SubdirectoryArrowLeft" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        -->
+                <!--<materialDesign:PackIcon Kind="SubdirectoryArrowLeft" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                <!--
                         <TextBlock Text="Steering" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                         <TextBlock Text="Back" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                     </StackPanel>
-                </Button>
+                </Button>-->
 
-                <Button Grid.Column="3" Margin="3"
-                        Grid.Row="3"
+                <Button Grid.Column="3" Margin="10,26,6,22"
+                        Grid.Row="2"
                         HorizontalAlignment="Stretch" 
                         Height="Auto" 
-                        BorderBrush="Gray" 
-                        BorderThickness="2" 
+                        BorderBrush="{Binding SteeringLeftBrushProperty}" 
+                        BorderThickness="5" 
                         Command="{Binding SteeringCWCommand}"
-                        CommandParameter="CW">
+                        CommandParameter="CW" Grid.RowSpan="2">
                     <StackPanel>
-                        <materialDesign:PackIcon Kind="SubdirectoryArrowLeft" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                        <TextBlock Text="Steering CW" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                        <materialDesign:PackIcon Kind="ArrowLeft" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Steering Left" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                     </StackPanel>
                 </Button>
 
-                <Button Grid.Column="4" Margin="3"
-                        Grid.Row="3"
+                <Button Grid.Column="4" Margin="6,26,10,22"
+                        Grid.Row="2"
                         HorizontalAlignment="Stretch" 
                         Height="Auto" 
-                        BorderBrush="Gray" 
-                        BorderThickness="2" 
+                        BorderBrush="{Binding SteeringRightBrushProperty}" 
+                        BorderThickness="5" 
                         Command="{Binding SteeringCCWCommand}"
-                        CommandParameter="CCW">
+                        CommandParameter="CCW" Grid.RowSpan="2">
                     <StackPanel>
-                        <materialDesign:PackIcon Kind="SubdirectoryArrowRight" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
-                        <TextBlock Text="Steering CCW" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                        <materialDesign:PackIcon Kind="ArrowRight" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Steering Right" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                     </StackPanel>
                 </Button>
 

+ 120 - 81
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs

@@ -9,9 +9,9 @@ using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.Linq;
-using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Input;
+using System.Windows.Media;
 
 namespace OHV.Module.Interactivity.PopUp
 {
@@ -100,18 +100,34 @@ namespace OHV.Module.Interactivity.PopUp
         public ICommand JogVelPopupCommand { get; set; }
         public ICommand JogCommand { get; set; }
 
-        private ObservableCollection<AxisPositionData> _pos;
-        public ObservableCollection<AxisPositionData> POS
+        #region Brushes
+        private Brush steeringLeftBrush = Brushes.Gray;
+        public Brush SteeringLeftBrushProperty
         {
-            get { return this._pos; }
-            set { this.SetProperty( ref this._pos , value ); }
+            get { return steeringLeftBrush; }
+            set { SetProperty(ref this.steeringLeftBrush, value); }
         }
 
-        private AxisPositionData _selectedRow = new AxisPositionData();
-        public AxisPositionData SelectedRow
+        private Brush steeringRightBrush = Brushes.Gray;
+        public Brush SteeringRightBrushProperty
+        {
+            get { return steeringRightBrush; }
+            set { SetProperty(ref this.steeringRightBrush, value); }
+        }
+        #endregion
+
+        private ObservableCollection<Route> _routeList;
+        public ObservableCollection<Route> RouteList
+        {
+            get { return this._routeList; }
+            set { SetProperty( ref this._routeList , value ); }
+        }
+
+        private Route _selectedRow = new Route();
+        public Route SelectedRow
         {
             get { return this._selectedRow; }
-            set { this.SetProperty( ref this._selectedRow , value ); }
+            set { SetProperty( ref this._selectedRow , value ); }
         }
 
         public SqliteDAL.DAL.AxisPositionDataDAL axisPositionDataDal;
@@ -125,12 +141,9 @@ namespace OHV.Module.Interactivity.PopUp
             this.eventAggregator.GetEvent<DirveControlPubSubEvent>().Unsubscribe( UICallbackCommunication );
             this.eventAggregator.GetEvent<DirveControlPubSubEvent>().Subscribe( UICallbackCommunication , ThreadOption.UIThread );
 
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( UICallbackCommunication );
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Subscribe( UICallbackCommunication , ThreadOption.UIThread );
-
             this.sql = _sql;
-            this.POS = new ObservableCollection<AxisPositionData>( sql.AxisPositionDataDAL.All );
-            /*Route로 변경*/
+            this.RouteList = new ObservableCollection<Route>( sql.RouteDal.All );
+            /* Route 로 변경*/
 
             this.messageController = _messageController;
 
@@ -156,42 +169,9 @@ namespace OHV.Module.Interactivity.PopUp
             this.JogCommand = new DelegateCommand<object>( ExecuteJogCommand );
         }
 
-        private void ExecuteJogCommand( object obj )
-        {
-            if(obj.ToString().Equals("+"))
-            { 
-            }
-            else
-            {
-            }
-        }
-
-        private void ExecuteJogVelPopupCommand( )
-        {
-            var numPad = new CalcuratorView();
-            var result = numPad.ShowDialog( this.JogVelocity );
-            this.JogVelocity = result;
-        }
-
-        private void UICallbackCommunication( AxisControlEventArgs args )
-        {
-            //TODO: Drive, Steering 구분
-        }
-
-        void PublishEvent( AxisControlEventArgs args )
-        {
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( args );
-        }
-
-        private void ExecuteSelectedDirection( object obj )
-        {
-            this.SelectDirection = obj.ToString();
-        }
-
         private void UICallbackCommunication( DriveControlEventArgs args )
         {
             //TODO: Drive, Steering 구분
-
             if ( args.EventDir == DriveControlEventArgs.eEventDir.ToFront )
             {
                 switch (args.ControlKind)
@@ -203,7 +183,15 @@ namespace OHV.Module.Interactivity.PopUp
                     case DriveControlEventArgs.eControlKind.Steering:
                         if (args.Result.IsSuccess)
                         {
-                            var a = args.Result.ToResult<DriveControlEventArgs.eMoveDir>().Value;
+                            var dir = args.Result.ToResult<DriveControlEventArgs.eMoveDir>().Value;
+                            this.ChangeSteeringDirection(dir == DriveControlEventArgs.eMoveDir.LEFT ? true : false);
+                        }
+                        break;
+                    case DriveControlEventArgs.eControlKind.SteeringState:
+                        if (args.Result.IsSuccess)
+                        {
+                            var dir = args.Result.ToResult<DriveControlEventArgs.eMoveDir>().Value;
+                            this.ChangeSteeringDirection(dir == DriveControlEventArgs.eMoveDir.LEFT ? true : false);
                         }
                         break;
                     default:
@@ -217,112 +205,155 @@ namespace OHV.Module.Interactivity.PopUp
             this.eventAggregator.GetEvent<DirveControlPubSubEvent>().Publish( args );
         }
 
-        private void ExecuteSteeringCCWCommand( object obj )
+        void ChangeSteeringDirection(bool isLeft)
+        {
+            if (isLeft)
+            {
+                this.SteeringLeftBrushProperty = (System.Windows.Media.Brush)new System.Windows.Media.BrushConverter().ConvertFromString("#FF00FFD3");
+                this.SteeringRightBrushProperty = Brushes.Gray;
+            }
+            else
+            {
+                this.SteeringLeftBrushProperty = Brushes.Gray;
+                this.SteeringRightBrushProperty = (System.Windows.Media.Brush)new System.Windows.Media.BrushConverter().ConvertFromString("#FF00FFD3");
+            }
+        }
+
+        #region Execute Method
+        private void ExecuteJogCommand(object obj)
+        {
+            if (obj.ToString().Equals("+"))
+            {
+            }
+            else
+            {
+            }
+        }
+
+        private void ExecuteJogVelPopupCommand()
+        {
+            var numPad = new CalcuratorView();
+            var result = numPad.ShowDialog(this.JogVelocity);
+            this.JogVelocity = result;
+        }
+
+        private void ExecuteSelectedDirection(object obj)
+        {
+            this.SelectDirection = obj.ToString();
+        }
+
+        private void ExecuteSteeringCCWCommand(object obj)
         {
             var msg = new DriveControlEventArgs
             {
-                EventDir = DriveControlEventArgs.eEventDir.ToBack ,
+                EventDir = DriveControlEventArgs.eEventDir.ToBack,
                 ControlKind = DriveControlEventArgs.eControlKind.Steering,
             };
 
-            if ( obj.ToString().Equals( "CCW" ) )
+            if (obj.ToString().Equals("CCW"))
                 msg.MoveDir = DriveControlEventArgs.eMoveDir.RIGHT;
             else
                 msg.MoveDir = DriveControlEventArgs.eMoveDir.LEFT;
 
-            this.PublishEvent( msg );
+            this.PublishEvent(msg);
         }
 
-        private void ExecuteSteeringCWCommand( object obj )
+        private void ExecuteSteeringCWCommand(object obj)
         {
             var msg = new DriveControlEventArgs
             {
-                EventDir = DriveControlEventArgs.eEventDir.ToBack ,
-                ControlKind = DriveControlEventArgs.eControlKind.Steering ,
+                EventDir = DriveControlEventArgs.eEventDir.ToBack,
+                ControlKind = DriveControlEventArgs.eControlKind.Steering,
             };
 
-            if ( obj.ToString().Equals( "CW" ) )
+            if (obj.ToString().Equals("CW"))
                 msg.MoveDir = DriveControlEventArgs.eMoveDir.LEFT;
             else
                 msg.MoveDir = DriveControlEventArgs.eMoveDir.RIGHT;
 
-            this.PublishEvent( msg );
+            this.PublishEvent(msg);
         }
 
-        private void ExecutePositionSaveCommand( )
+        private void ExecutePositionSaveCommand()
         {
-            this.messageController.ShowConfirmationPopupView( "Save To Data ?" , r =>
-            {
-                if ( r.Result == ButtonResult.OK )
-                {
+            this.messageController.ShowConfirmationPopupView("Save To Data ?", r =>
+          {
+              if (r.Result == ButtonResult.OK)
+              {
                     //value check 
                     //1차 검사 ID 값이 동일한게 있는지 ?
                     //2차 검사 Value 값 변화된것들이 있으면 변화된것들 Save 후 Update 해야함.
-                    var d = this.POS.ToList();
-                    var l = d.Distinct().ToList();
+                    var d = this.RouteList.ToList();
+                  var l = d.Distinct().ToList();
 
                     //var saveData = new ObservableCollection<AxisPositionData>();
 
                 }
-            } );   
+          });
         }
 
-        private void ExecutePositionDeleteCommand( )
+        private void ExecutePositionDeleteCommand()
         {
             var d = this.SelectedRow;
-            this.POS.Remove( d );
+            var deleteList = new List<Route>();
+            foreach (var item in this.RouteList)
+            {
+                if (item.IsSelected)
+                    deleteList.Add(item);
+            }
+            deleteList.ForEach(x => { this.RouteList.Remove(x); });
         }
 
-        private void ExecutePositionAddCommand( )
+        private void ExecutePositionAddCommand()
         {
-            this.POS.Add( new AxisPositionData() );
+            this.RouteList.Add(new Route());
         }
 
-        private void ExecuteKeyInCommadn( object obj )
+        private void ExecuteKeyInCommadn(object obj)
         {
             var numPad = new CalcuratorView();
-            var result = numPad.ShowDialog( this.TargetPosDrive );
+            var result = numPad.ShowDialog(this.TargetPosDrive);
             this.TargetPosDrive = result;
         }
 
-        private void ExecuteOriginCommand( )
+        private void ExecuteOriginCommand()
         {
             //this.SelectAxis.OriginReturn();
         }
 
-        private void ExecuteFaultResetCommand( )
+        private void ExecuteFaultResetCommand()
         {
             //this.SelectAxis.FaultReset()
         }
 
-        private void ExecuteServoOffCommand( )
+        private void ExecuteServoOffCommand()
         {
             //this.SelectAxis.ServoOff();
         }
 
-        private void ExecuteServoOnCommand( )
+        private void ExecuteServoOnCommand()
         {
             //this.SelectAxis.ServoOn();
         }
 
-        private void ExecuteCurrentToTargetCommand( )
+        private void ExecuteCurrentToTargetCommand()
         {
             this.TargetPosDrive = this.CurrentDrive;
         }
 
-        private async void ExecuteMoveToCommand( )
+        private async void ExecuteMoveToCommand()
         {
-            await Task.Run( ( ) =>
-            {
+            await Task.Run(() =>
+           {
                 //Axis.Move(this.SelectPosition);
-            } );
+            });
         }
 
-        private void ExecuteSelectPosCommand( object obj )
+        private void ExecuteSelectPosCommand(object obj)
         {
             this.SelectedPosition = obj.ToString();
 
-            switch ( this.SelectedPosition )
+            switch (this.SelectedPosition)
             {
                 case "P1":
                     break;
@@ -340,6 +371,8 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
+        #endregion
+
         #region Dialog Function
         public bool CanCloseDialog( )
         {
@@ -352,6 +385,12 @@ namespace OHV.Module.Interactivity.PopUp
 
         public void OnDialogOpened( IDialogParameters parameters )
         {
+            var msg = new DriveControlEventArgs
+            {
+                EventDir = DriveControlEventArgs.eEventDir.ToBack,
+                ControlKind = DriveControlEventArgs.eControlKind.SteeringState,
+            };
+            this.PublishEvent(msg);
         }
 
         private void CloseDialog( string parameter )

+ 2 - 11
Dev/OHV/OHV.SqliteDAL/DAL/RouteDAL.cs

@@ -7,21 +7,12 @@ using OHV.Common.Model;
 
 namespace OHV.SqliteDAL.DAL
 {
-    public class RouteDAL
+    public class RouteDAL : GenericDAL<Route>
     {
         public RouteDAL()
         {
         }
-
-        public void Add(Route route)
-        {
-            using (var db = new OHVDbContext("OHVDb"))
-            {
-                db.Set<Route>().Add(route);
-                db.SaveChanges();
-            }
-        }
-
+    
         public Route GetRoute(string name)
         {
             Route route = null;

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

@@ -122,7 +122,8 @@ namespace OHV.SqliteDAL
 
             context.Set<Alarm>().Add(new Alarm { AlarmId = 1, Kind = eAlarmKind.Axis, Name = "adfsdfds", Level = eAlarmLevel.Falut, });
 
-            context.Set<HisAlarm>().Add(new HisAlarm { AlarmId = 1, OccurTime = DateTime.Now.AddDays(-10) });
+            //context.Set<HisAlarm>().Add(new HisAlarm { AlarmId = 1, OccurTime = DateTime.Now.AddDays(-10) });
+            context.Set<Route>().Add(new Route { Id = 1, Name = "P01", PrePoint = "P00", NextPoint = "P02", ScaleTolerance = 0.5, Form = eRoadForm.Straight, ScaleValue = 0.0, Type = ePointType.LoadPort, UsePIO = true });
         }
     }
 }

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


BIN
Dev/OHV/OutRelese/DB/OHVDb.sqlite


BIN
Dev/OHV/OutRelese/OHV.Common.dll


BIN
Dev/OHV/OutRelese/OHV.Common.pdb


BIN
Dev/OHV/OutRelese/OHV.LanguageHelper.dll


BIN
Dev/OHV/OutRelese/OHV.LanguageHelper.pdb


BIN
Dev/OHV/OutRelese/OHV.Module.Interactivity.dll


BIN
Dev/OHV/OutRelese/OHV.Module.Interactivity.pdb


BIN
Dev/OHV/OutRelese/OHV.SqliteDAL.dll


BIN
Dev/OHV/OutRelese/OHV.SqliteDAL.pdb


BIN
Dev/OHV/OutRelese/VehicleControlSystem.dll


BIN
Dev/OHV/OutRelese/VehicleControlSystem.pdb


+ 208 - 149
Dev/OHV/VehicleControlSystem/ControlLayer/Clamp.cs

@@ -1,12 +1,10 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
-using System.Text;
 using System.Threading.Tasks;
+using FluentResults;
 using GSG.NET.Concurrent;
-using GSG.NET.LINQ;
 using GSG.NET.Logging;
-using GSG.NET.Utils;
 using OHV.Common.Events;
 using OHV.Common.Shareds;
 using OHV.SqliteDAL;
@@ -25,25 +23,25 @@ namespace VehicleControlSystem.ControlLayer
         IEventAggregator eventAggregator;
         TaskCancel taskCancel = new TaskCancel();
 
-        public Clamp( SqliteManager sqliteManager , IEventAggregator ea )
+        public Clamp(SqliteManager sqliteManager, IEventAggregator ea)
         {
             this.sql = sqliteManager;
             this.eventAggregator = ea;
         }
 
-        public void Init( )
+        public void Init()
         {
             this.CreateAxis();
 
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( ReceivedMessageEvent );
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Subscribe( ReceivedMessageEvent );
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe(ReceivedMessageEvent);
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Subscribe(ReceivedMessageEvent);
         }
 
-        void ReceivedMessageEvent( AxisControlEventArgs args )
+        void ReceivedMessageEvent(AxisControlEventArgs args)
         {
-            if ( args.Dir == AxisControlEventArgs.eEventDir.ToBack )
+            if (args.Dir == AxisControlEventArgs.eEventDir.ToBack)
             {
-                switch ( args.Kind )
+                switch (args.Kind)
                 {
                     case AxisControlEventArgs.eAxisControlKind.Stop:
                         break;
@@ -52,15 +50,15 @@ namespace VehicleControlSystem.ControlLayer
                     case AxisControlEventArgs.eAxisControlKind.Move:
                         break;
                     case AxisControlEventArgs.eAxisControlKind.Jog:
-                        this.ReqJog( args );
+                        this.ReqJog(args);
                         break;
                     case AxisControlEventArgs.eAxisControlKind.CurrentPosition:
                         break;
                     case AxisControlEventArgs.eAxisControlKind.ServoOn:
-                        //this.ReqServoOn( args );
+                        this.ReqServoOn( args );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.ServoOff:
-                        //this.ReqServoOff( args );
+                        this.ReqServoOff( args );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition:
                         this.ReqStartCurrentPosition();
@@ -70,10 +68,10 @@ namespace VehicleControlSystem.ControlLayer
                         this.taskCancel.WaitAll();
                         break;
                     case AxisControlEventArgs.eAxisControlKind.OriginReturn:
-                        this.ReqOriginReturn( args );
+                        this.ReqOriginReturn(args);
                         break;
                     case AxisControlEventArgs.eAxisControlKind.FaultReset:
-                        //this.ReqFaultReset( args );
+                        this.ReqFaultReset( args );
                         break;
                     default:
                         break;
@@ -81,178 +79,239 @@ namespace VehicleControlSystem.ControlLayer
             }
         }
 
-        void PublishEvent( AxisControlEventArgs args )
+
+        void PublishEvent(AxisControlEventArgs args)
+        {
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish(args);
+        }
+
+        #region Requst Method
+        private void ReqFaultReset(AxisControlEventArgs args)
+        {
+            var axis = this.axes.Where(x => x.Config.AxisName.Equals(args.AxisName)).FirstOrDefault();
+            int resultNo = axis.ResetAmpFault();
+
+            var msg = new AxisControlEventArgs
+            {
+                AxisName = args.AxisName,
+                Kind = AxisControlEventArgs.eAxisControlKind.FaultReset,
+            };
+            msg.Result = Results.Ok("Servo On");
+            this.PublishEvent(msg);
+        }
+
+        private void ReqServoOn(AxisControlEventArgs args)
         {
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( args );
+            var axis = this.axes.Where(x => x.Config.AxisName.Equals(args.AxisName)).FirstOrDefault();
+            axis.ServoOn();
+
+            var msg = new AxisControlEventArgs
+            {
+                AxisName = args.AxisName,
+                Kind = AxisControlEventArgs.eAxisControlKind.ServoOn,
+            };
+            msg.Result = Results.Ok("Servo On");
+            this.PublishEvent(msg);
         }
 
-        void ReqStartCurrentPosition( )
+        private void ReqServoOff(AxisControlEventArgs args)
         {
-            var task = Task.Factory.StartNew( ( ) =>
-             {
-                 while ( !this.taskCancel.Canceled )
-                 {
-                     LockUtils.Wait( 500 );
-
-                     this.axes.ForEach( a =>
-                     {
-
-                         var msg = new AxisControlEventArgs
-                         {
-                             AxisName = a.Config.AxisName ,
-                             Dir = AxisControlEventArgs.eEventDir.ToFront ,
-                             Kind = AxisControlEventArgs.eAxisControlKind.CurrentPosition ,
-                             CurrentPosition = NumUtils.Random( 0 , 300 ) ,
-                         };
-
-                         this.PublishEvent( msg );
-                     } );
-                 }
-             } );
-
-            this.taskCancel.Add( task );
+            var axis = this.axes.Where(x => x.Config.AxisName.Equals(args.AxisName)).FirstOrDefault();
+            axis.ServoOff();
+
+            var msg = new AxisControlEventArgs
+            {
+                AxisName = args.AxisName,
+                Kind = AxisControlEventArgs.eAxisControlKind.ServoOff,
+            };
+            msg.Result = Results.Ok("Servo Off");
+            this.PublishEvent(msg);
         }
 
-        void ReqJog( AxisControlEventArgs arg )
+        void ReqStartCurrentPosition()
         {
-            if ( arg.JogDir == AxisControlEventArgs.eJogMoveDir.Positive )
-                this.JogMove( arg.AxisName , E_JogMoveDir.Positive , 0 );
+            var task = Task.Factory.StartNew(() =>
+            {
+                double[] beforePosition = new double[this.axes.Count];
+                beforePosition.Initialize();
+
+                while (!this.taskCancel.Canceled)
+                {
+                    LockUtils.Wait(500);
+
+                    int index = 0;
+                    this.axes.ForEach(a =>
+                    {
+                        if (beforePosition[index] != a.CurrentPosition)
+                        {
+                            beforePosition[index] = a.CurrentPosition;
+
+                            var msg = new AxisControlEventArgs
+                            {
+                                AxisName = a.Config.AxisName,
+                                Dir = AxisControlEventArgs.eEventDir.ToFront,
+                                Kind = AxisControlEventArgs.eAxisControlKind.CurrentPosition,
+                                CurrentPosition = a.CurrentPosition,
+                            };
+                            this.PublishEvent(msg);
+                        }
+                        index++;
+                    });
+                }
+            });
+
+            this.taskCancel.Add(task);
+        }
+
+        void ReqJog(AxisControlEventArgs arg)
+        {
+            if (arg.JogDir == AxisControlEventArgs.eJogMoveDir.Positive)
+                this.JogMove(arg.AxisName, E_JogMoveDir.Positive, 0);
             else
-                this.JogMove( arg.AxisName , E_JogMoveDir.Negative , 0 );
+                this.JogMove(arg.AxisName, E_JogMoveDir.Negative, 0);
         }
 
-        void ReqOriginReturn( AxisControlEventArgs arg )
+        void ReqOriginReturn(AxisControlEventArgs arg)
         {
             int result = 0;
-            if ( arg.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) )
+            if (arg.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT))
                 result = this.LeftOriginReturn();
             else
                 result = this.RightOriginReturn();
 
-            //TODO: 결과를 UI에 알려 줘야 하는데.
-            if ( result != EziMOTIONPlusELib.FMM_OK ) { }
+            var msg = new AxisControlEventArgs
+            {
+                AxisName = arg.AxisName,
+                Kind = AxisControlEventArgs.eAxisControlKind.OriginReturn,
+            };
+            if (result != EziMOTIONPlusELib.FMM_OK)
+                msg.Result = Results.Fail<int>("Origin Fail").WithValue(result);
+            else
+                msg.Result = Results.Ok();
 
+            this.PublishEvent(msg);
         }
+        #endregion
 
-        void CreateAxis( )
+        void CreateAxis()
         {
-            sql.AxisConfigDAL.All.ForEach( config =>
-             {
-                 Axis.AxisConfig c = new Axis.AxisConfig
-                 {
-                     AxisName = config.Name ,
-                     AxisNo = config.Id ,
-                     Scale = config.Scale ,
-                     Address = config.Address ,
-                 };
-                 axes.Add( new EzAxis( c ) );
-             } );
-
-            this.axes.ForEach( axis =>
-             {
-                 var data = sql.AxisVelocityDataDAL.GetK( axis.Config.AxisName );
-                 Axis.AxisData axisData = new AxisData
-                 {
-                     AxisNo = data.id ,
-                     AxisName = data.AxisName ,
-                     AutoRunVelocity = data.AutoRunVelocity ,
-                     AutoRunAccelerate = data.AutoRunAccelerate ,
-                     AutoRunDecelerate = data.AutoRunDecelerate ,
-                     ManualRunVelocity = data.ManualRunVelocity ,
-                     JogFast = data.JogFast ,
-                     JogSlow = data.JogSlow ,
-                     Tolerance = data.Tolerance ,
-                 };
-
-                 axis.Initialize( axisData );
-             } );
+            sql.AxisConfigDAL.All.ForEach(config =>
+            {
+                Axis.AxisConfig c = new Axis.AxisConfig
+                {
+                    AxisName = config.Name,
+                    AxisNo = config.Id,
+                    Scale = config.Scale,
+                    Address = config.Address,
+                };
+                axes.Add(new EzAxis(c));
+            });
+
+            this.axes.ForEach(axis =>
+            {
+                var data = sql.AxisVelocityDataDAL.GetK(axis.Config.AxisName);
+                Axis.AxisData axisData = new AxisData
+                {
+                    AxisNo = data.id,
+                    AxisName = data.AxisName,
+                    AutoRunVelocity = data.AutoRunVelocity,
+                    AutoRunAccelerate = data.AutoRunAccelerate,
+                    AutoRunDecelerate = data.AutoRunDecelerate,
+                    ManualRunVelocity = data.ManualRunVelocity,
+                    JogFast = data.JogFast,
+                    JogSlow = data.JogSlow,
+                    Tolerance = data.Tolerance,
+                };
+
+                axis.Initialize(axisData);
+            });
         }
 
-        public int LeftOriginReturn( )
+        public int LeftOriginReturn()
         {
-            var servo = this.axes.Where( s => s.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single();
-            return servo.OriginReturn( true );
+            var servo = this.axes.Where(s => s.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT)).Single();
+            return servo.OriginReturn(true);
         }
 
-        public int RightOriginReturn( )
+        public int RightOriginReturn()
         {
-            var servo = this.axes.Where( s => s.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
-            return servo.OriginReturn( true );
+            var servo = this.axes.Where(s => s.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_RIGHT)).Single();
+            return servo.OriginReturn(true);
         }
 
-        public int AllOriginReturn( )
+        public int AllOriginReturn()
         {
             int result = 0;
             result = LeftOriginReturn();
-            if ( result != EziMOTIONPlusELib.FMM_OK )
+            if (result != EziMOTIONPlusELib.FMM_OK)
                 return 7;
 
             result = RightOriginReturn();
-            if ( result != EziMOTIONPlusELib.FMM_OK )
+            if (result != EziMOTIONPlusELib.FMM_OK)
                 return 8;
 
             return result;
         }
 
-        public int IsAllAxisOriginReturn( )
+        public int IsAllAxisOriginReturn()
         {
             int result = 0;
-            this.axes.ForEach( x =>
-             {
-                 if ( !x.IsOriginReturn() )
-                 {
-                     if ( x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) )
-                         result = 5;
-                     else
-                         result = 6;
-                     return;
-                 }
-             } );
+            this.axes.ForEach(x =>
+            {
+                if (!x.IsOriginReturn())
+                {
+                    if (x.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT))
+                        result = 5;
+                    else
+                        result = 6;
+                    return;
+                }
+            });
 
             return result;
         }
 
         #region Data
-        public void SavePositionData( string pos , double left , double right )
+        public void SavePositionData(string pos, double left, double right)
         {
-            var dataList = sql.AxisPositionDataDAL.GetKFromPostion( pos );
-            var sqlLeft = dataList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single();
-            var sqlRight = dataList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
+            var dataList = sql.AxisPositionDataDAL.GetKFromPostion(pos);
+            var sqlLeft = dataList.Where(x => x.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT)).Single();
+            var sqlRight = dataList.Where(x => x.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_RIGHT)).Single();
 
             sqlLeft.Value = left;
-            sql.AxisPositionDataDAL.Update( sqlLeft );
+            sql.AxisPositionDataDAL.Update(sqlLeft);
 
             sqlRight.Value = right;
-            sql.AxisPositionDataDAL.Update( sqlRight );
+            sql.AxisPositionDataDAL.Update(sqlRight);
         }
         #endregion
 
-        public int JogMove( string axisName , E_JogMoveDir dir , int velocity )
+        public int JogMove(string axisName, E_JogMoveDir dir, int velocity)
         {
-            logger.D( $"JogMove - Axis[{axisName}] / Dir[{dir}] / vel[{velocity}]" );
+            logger.D($"JogMove - Axis[{axisName}] / Dir[{dir}] / vel[{velocity}]");
 
-            var axis = this.axes.Where( x => x.Config.AxisName.Equals( axisName ) ).Single();
-            return axis.JogMove( dir , velocity );
+            var axis = this.axes.Where(x => x.Config.AxisName.Equals(axisName)).Single();
+            return axis.JogMove(dir, velocity);
         }
 
-        public int MoveToLockPosition( string axisName )
+        public int MoveToLockPosition(string axisName)
         {
-            var servo = this.axes.Where( x => x.Config.AxisName.Equals( axisName ) ).Single();
-            var axisPositionDatas = sql.AxisPositionDataDAL.GetKFromName( axisName ).ToList();
-            var data = axisPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_LOCK ) ).Single();
+            var servo = this.axes.Where(x => x.Config.AxisName.Equals(axisName)).Single();
+            var axisPositionDatas = sql.AxisPositionDataDAL.GetKFromName(axisName).ToList();
+            var data = axisPositionDatas.Where(x => x.Name.Equals(ConstString.TEACH_POSITION_LOCK)).Single();
 
-            int result = servo.Move( data.Value );
+            int result = servo.Move(data.Value);
 
             return result;
         }
 
-        public int MoveToUnlockPosition( string axisName )
+        public int MoveToUnlockPosition(string axisName)
         {
-            var servo = this.axes.Where( x => x.Config.AxisName.Equals( axisName ) ).Single();
-            var axisPositionDatas = sql.AxisPositionDataDAL.GetKFromName( axisName ).ToList();
-            var data = axisPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_UNLOCK ) ).Single();
+            var servo = this.axes.Where(x => x.Config.AxisName.Equals(axisName)).Single();
+            var axisPositionDatas = sql.AxisPositionDataDAL.GetKFromName(axisName).ToList();
+            var data = axisPositionDatas.Where(x => x.Name.Equals(ConstString.TEACH_POSITION_UNLOCK)).Single();
 
-            int result = servo.Move( data.Value );
+            int result = servo.Move(data.Value);
 
             return result;
         }
@@ -261,36 +320,36 @@ namespace VehicleControlSystem.ControlLayer
         /// 두개를 동시에 Lock
         /// </summary>
         /// <returns></returns>
-        public int Lock_Sync( )
+        public int Lock_Sync()
         {
             int result = 0;
 
             result = this.AllOriginReturn();
-            if ( result != 0 )
+            if (result != 0)
                 return result;
 
-            var leftPositionDatas = sql.AxisPositionDataDAL.GetKFromName( ConstString.AXIS_CARRIER_LOCK_LEFT ).ToList();
-            var leftData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_LOCK ) ).Single();
-            var left = this.axes.Where( x => x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single();
+            var leftPositionDatas = sql.AxisPositionDataDAL.GetKFromName(ConstString.AXIS_CARRIER_LOCK_LEFT).ToList();
+            var leftData = leftPositionDatas.Where(x => x.Name.Equals(ConstString.TEACH_POSITION_LOCK)).Single();
+            var left = this.axes.Where(x => x.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT)).Single();
 
-            var rightPositionDatas = sql.AxisPositionDataDAL.GetKFromName( ConstString.AXIS_CARRIER_LOCK_RIGHT ).ToList();
-            var rightData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_LOCK ) ).Single();
-            var right = this.axes.Where( x => x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
+            var rightPositionDatas = sql.AxisPositionDataDAL.GetKFromName(ConstString.AXIS_CARRIER_LOCK_RIGHT).ToList();
+            var rightData = leftPositionDatas.Where(x => x.Name.Equals(ConstString.TEACH_POSITION_LOCK)).Single();
+            var right = this.axes.Where(x => x.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_RIGHT)).Single();
 
-            result = left.StartMove( leftData.Value , 0 );
-            if ( result != EziMOTIONPlusELib.FMM_OK )
+            result = left.StartMove(leftData.Value, 0);
+            if (result != EziMOTIONPlusELib.FMM_OK)
                 return result;
 
-            result = right.StartMove( rightData.Value , 0 );
-            if ( result != EziMOTIONPlusELib.FMM_OK )
+            result = right.StartMove(rightData.Value, 0);
+            if (result != EziMOTIONPlusELib.FMM_OK)
                 return result;
 
             result = left.Wait4Done();
-            if ( result != EziMOTIONPlusELib.FMM_OK )
+            if (result != EziMOTIONPlusELib.FMM_OK)
                 return result;
 
             result = right.Wait4Done();
-            if ( result != EziMOTIONPlusELib.FMM_OK )
+            if (result != EziMOTIONPlusELib.FMM_OK)
                 return result;
 
 
@@ -301,36 +360,36 @@ namespace VehicleControlSystem.ControlLayer
         /// 두개의 Axis 를 동시에 Unlock
         /// </summary>
         /// <returns></returns>
-        public int Unlock_Sync( )
+        public int Unlock_Sync()
         {
             int result = 0;
 
             result = this.AllOriginReturn();
-            if ( result != 0 )
+            if (result != 0)
                 return result;
 
-            var leftPositionDatas = sql.AxisPositionDataDAL.GetKFromName( ConstString.AXIS_CARRIER_LOCK_LEFT ).ToList();
-            var leftData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_UNLOCK ) ).Single();
-            var left = this.axes.Where( x => x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single();
+            var leftPositionDatas = sql.AxisPositionDataDAL.GetKFromName(ConstString.AXIS_CARRIER_LOCK_LEFT).ToList();
+            var leftData = leftPositionDatas.Where(x => x.Name.Equals(ConstString.TEACH_POSITION_UNLOCK)).Single();
+            var left = this.axes.Where(x => x.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT)).Single();
 
-            var rightPositionDatas = sql.AxisPositionDataDAL.GetKFromName( ConstString.AXIS_CARRIER_LOCK_RIGHT ).ToList();
-            var rightData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_UNLOCK ) ).Single();
-            var right = this.axes.Where( x => x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
+            var rightPositionDatas = sql.AxisPositionDataDAL.GetKFromName(ConstString.AXIS_CARRIER_LOCK_RIGHT).ToList();
+            var rightData = leftPositionDatas.Where(x => x.Name.Equals(ConstString.TEACH_POSITION_UNLOCK)).Single();
+            var right = this.axes.Where(x => x.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_RIGHT)).Single();
 
-            result = left.StartMove( leftData.Value , 0 );
-            if ( result != EziMOTIONPlusELib.FMM_OK )
+            result = left.StartMove(leftData.Value, 0);
+            if (result != EziMOTIONPlusELib.FMM_OK)
                 return result;
 
-            result = right.StartMove( rightData.Value , 0 );
-            if ( result != EziMOTIONPlusELib.FMM_OK )
+            result = right.StartMove(rightData.Value, 0);
+            if (result != EziMOTIONPlusELib.FMM_OK)
                 return result;
 
             result = left.Wait4Done();
-            if ( result != EziMOTIONPlusELib.FMM_OK )
+            if (result != EziMOTIONPlusELib.FMM_OK)
                 return result;
 
             result = right.Wait4Done();
-            if ( result != EziMOTIONPlusELib.FMM_OK )
+            if (result != EziMOTIONPlusELib.FMM_OK)
                 return result;
 
 

+ 26 - 4
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -122,12 +122,29 @@ namespace VehicleControlSystem.ControlLayer
                         else
                             this.steering.ControlSteering();
                         break;
+                    case DriveControlEventArgs.eControlKind.SteeringState:
+                        {
+                            DriveControlEventArgs reply = new DriveControlEventArgs();
+                            reply.ControlKind = DriveControlEventArgs.eControlKind.SteeringState;
+                            if (this.steering.IsLeft())
+                                reply.Result = FluentResults.Results.Ok<DriveControlEventArgs.eMoveDir>(DriveControlEventArgs.eMoveDir.LEFT);
+                            else
+                                reply.Result = FluentResults.Results.Ok<DriveControlEventArgs.eMoveDir>(DriveControlEventArgs.eMoveDir.RIGHT);
+                            this.DriveControlEventPublish(reply);
+                        }
+                        break;
                     default:
                         break;
                 }
             }
         }
 
+        private void DriveControlEventPublish(DriveControlEventArgs args)
+        {
+            args.EventDir = DriveControlEventArgs.eEventDir.ToFront;
+            this.eventAggregator.GetEvent<DirveControlPubSubEvent>().Publish(args);
+        }
+
         public void Init()
         {
             this.CreateClamp();
@@ -143,6 +160,7 @@ namespace VehicleControlSystem.ControlLayer
             this.cancel.StopWaitAll();
         }
 
+        #region Thread
         void ThreadStart()
         {
             this.cancel.AddGo(new Action(this._ThSubCmdWorker));
@@ -233,7 +251,11 @@ namespace VehicleControlSystem.ControlLayer
             logger.D("Vehicle - _ThSubCmdWorker Dispose");
         }
 
+
+        #endregion        
+
         #region Control Action Method
+
         void Move(SubCmd sub)
         {
             if (this.MoveTo(sub.TargetID))
@@ -449,10 +471,10 @@ namespace VehicleControlSystem.ControlLayer
         #region Event
         private void Steering_OnSteeringError(object sender, int e)
         {
-            if ( e != 0)
+            if (e != 0)
             {
-	            logger.E($"[Steering] - Control Error {e}");
-	            this.autoManager.ProcessAlarm(e);
+                logger.E($"[Steering] - Control Error {e}");
+                this.autoManager.ProcessAlarm(e);
             }
             else
             {
@@ -462,7 +484,7 @@ namespace VehicleControlSystem.ControlLayer
                     ControlKind = DriveControlEventArgs.eControlKind.Steering,
                     Result = FluentResults.Results.Ok<DriveControlEventArgs.eMoveDir>(DriveControlEventArgs.eMoveDir.LEFT),
                 };
-                
+
                 this.eventAggregator.GetEvent<DirveControlPubSubEvent>().Publish(msg);
             }