瀏覽代碼

LockServoView Event Update

ys-hwang 6 年之前
父節點
當前提交
2f305fa7b4

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

@@ -70,6 +70,7 @@ namespace OHV.Common.Events
             ServoOff,
             ReqCurrentPosition,
             ReqStopCurrentPosition,
+            FaultReset,
         }
 
         public enum eJogMoveDir
@@ -78,6 +79,13 @@ namespace OHV.Common.Events
             Negative,
         }
 
+        public enum eAxises
+        {
+            LEFT = 0,
+            RIGHT,
+        }
+
+        public eAxises Axis { get; set; }
         public eEventDir Dir { get; set; }
         public eAxisControlKind Kind { get; set; }
         public eJogMoveDir JogDir { get; set; }

文件差異過大導致無法顯示
+ 1 - 1
Dev/OHV/OHV.Module.Interactivity/ConfirmationPopupView.xaml


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

@@ -195,6 +195,10 @@
       <Project>{712d75b5-89dd-4064-bc4b-2f9d9f157604}</Project>
       <Name>OHV.LanguageHelper</Name>
     </ProjectReference>
+    <ProjectReference Include="..\OHV.SqliteDAL\OHV.SqliteDAL.csproj">
+      <Project>{122D81C8-9AB9-4CED-80D2-9C4F2F9DEB4C}</Project>
+      <Name>OHV.SqliteDAL</Name>
+    </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <Import Project="..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets" Condition="Exists('..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets')" />

+ 252 - 40
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoView.xaml

@@ -8,8 +8,8 @@
              xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
              prism:ViewModelLocator.AutoWireViewModel="True"
              mc:Ignorable="d" 
-             Width="800"
-             Height="600"
+             Width="1130"
+             Height="700"
              Background="#455a64">
 
     <prism:Dialog.WindowStyle>
@@ -31,6 +31,28 @@
         </Style>
     </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>
+
+    </UserControl.Resources>
+
     <Grid>
         <Grid.ColumnDefinitions>
             <ColumnDefinition/>
@@ -38,6 +60,227 @@
             <ColumnDefinition Width="130"/>
         </Grid.ColumnDefinitions>
 
+        <Grid Grid.Column="0" Margin="15"
+              Background="#37474f">
+            
+            <Grid.RowDefinitions>
+                <RowDefinition Height="*"/>
+                <RowDefinition Height="*"/>
+            </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="#FF00FFD3"/>
+                            <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>
+
+            <!--Axis  Grid View-->
+            <Grid Grid.Row="1">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="*"/>
+                    <RowDefinition Height="*"/>
+                    <RowDefinition Height="*"/>
+                    <RowDefinition Height="*"/>
+                </Grid.RowDefinitions>
+                <Grid.ColumnDefinitions>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="*"/>
+                    <ColumnDefinition Width="*"/>
+                </Grid.ColumnDefinitions>
+
+                <Button Grid.Column="0" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                    <StackPanel>
+                        <TextBlock HorizontalAlignment="Center"><Run Text="Target"/></TextBlock>
+                        <TextBlock HorizontalAlignment="Center"><Run Text="Pos"/></TextBlock>
+                    </StackPanel>
+                </Button>
+
+                <Button Grid.Column="0" Grid.Row="2" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                    <StackPanel>
+                        <TextBlock HorizontalAlignment="Center"><Run Text="Current"/></TextBlock>
+                        <TextBlock HorizontalAlignment="Center"><Run Text="Pos"/></TextBlock>
+                    </StackPanel>
+                </Button>
+
+                <Button Grid.Column="0" Grid.Row="3" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                    <StackPanel>
+                        <TextBlock HorizontalAlignment="Center"><Run Text="Difference"/></TextBlock>
+                        <TextBlock HorizontalAlignment="Center"><Run Text="Pos"/></TextBlock>
+                    </StackPanel>
+                </Button>
+
+                <Button Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners"
+                            Command="{Binding SelectAxisCommand}"
+                            CommandParameter="Left">
+                    <TextBlock><Run Text="Drive1"/></TextBlock>
+                </Button>
+
+                <Button Background="{x:Null}" Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                    <Button.InputBindings>
+                        <MouseBinding Gesture="LeftClick" Command="{Binding KeyInTargetPosCommand}" CommandParameter="Left"/>
+                    </Button.InputBindings>
+                    <TextBlock><Run Text="{Binding TargetPosDrive, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                </Button>
+
+                <Button Background="{x:Null}" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                    <TextBlock><Run Text="{Binding CurrentDrive, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                </Button>
+
+                <Button Background="{x:Null}" Grid.Column="1" Grid.Row="3" HorizontalAlignment="Stretch" Margin="5" Height="auto"
+                            Style="{StaticResource MaterialDesignRaisedButton}"
+                            materialDesign:ButtonAssist.CornerRadius="10"
+                            ToolTip="MaterialDesignRaisedButton with Round Corners">
+                    <TextBlock><Run Text="{Binding DifferenceDrive, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
+                </Button>
+            </Grid>
+        </Grid>
+
+        <Grid Grid.Column="1" Background="#263238">
+            <StackPanel>
+                <Button Margin="7, 20" HorizontalAlignment="Stretch" Height="60" BorderBrush="Gray" BorderThickness="2" 
+                        Command="{Binding PositionAddCommand}">
+                    <StackPanel>
+                        <!--<materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        <TextBlock Text="Add" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="7, 20" HorizontalAlignment="Stretch" Height="60" BorderBrush="Gray" BorderThickness="2" 
+                        Command="{Binding PositionDeleteCommand}">
+                    <StackPanel>
+                        <!--<materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        <TextBlock Text="Delete" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="7, 20" HorizontalAlignment="Stretch" Height="60" BorderBrush="Gray" BorderThickness="2" 
+                        Command="{Binding PositionSaveCommand}">
+                    <StackPanel>
+                        <!--<materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        <TextBlock Text="Save" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <!--Move TO / Current To Target-->
+                <Button Margin="7, 50" HorizontalAlignment="Stretch" Height="60" BorderBrush="Gray" BorderThickness="2" 
+                        Command="{Binding MoveToCommand}">
+                    <StackPanel>
+                        <!--<materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        <TextBlock Text="Move To" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="7,0" HorizontalAlignment="Stretch" Height="60" BorderBrush="Gray" BorderThickness="2" 
+                        Command="{Binding CurrentToTargetCommand}">
+                    <StackPanel>
+                        <!--<materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        <TextBlock Text="Current To" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                        <TextBlock Text="Target" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+            </StackPanel>
+        </Grid>
+
+        <Grid Grid.Column="2" 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" Command="{Binding ServoOnCommand}">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Servo On" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding ServoOffCommand}">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="PowerPlugOff" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Servo Off" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding FaultResetCommand}">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="CircleArrows" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Fault Reset" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding OriginCommand}">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="Origin" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Origin" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
+                    </StackPanel>
+                </Button>
+
+                <Button Margin="5" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding CloseDialogCommand}" CommandParameter="true">
+                    <StackPanel>
+                        <materialDesign:PackIcon Kind="ExitToApp" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                        <TextBlock Text="Close" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
+                    </StackPanel>
+                </Button>
+            </StackPanel>
+        </Grid>
+    </Grid>
+
+    <!--<Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition/>
+            <ColumnDefinition Width="130"/>
+            <ColumnDefinition Width="130"/>
+        </Grid.ColumnDefinitions>
+
         <Grid Grid.Column="0">
             <Grid Margin="15,15" Background="#37474f">
                 <Grid.RowDefinitions>
@@ -65,7 +308,7 @@
 
                     <Border BorderBrush="#FF00FFD3" BorderThickness="2" Grid.RowSpan="4" Grid.Column="3" Margin="95,3,0,0"/>
 
-                    <!--Column1-->
+                    
                     <Button Background="{x:Null}" Grid.Column="0" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
@@ -109,7 +352,7 @@
 
                     </Button>
 
-                    <!--Column2-->
+                    
                     <Button Grid.Column="1" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
@@ -143,7 +386,7 @@
                         <TextBlock><Run Text="{Binding DifferenceDriveLeft, StringFormat=0.000, FallbackValue=0.000}"/></TextBlock>
                     </Button>
 
-                    <!--Column3-->
+                    
                     <Button Grid.Column="2" Grid.Row="0" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
@@ -190,19 +433,6 @@
                 </Grid>
 
                 <Grid Grid.Row="1">
-                    <!--<Grid.ColumnDefinitions>
-                        <ColumnDefinition Width="*"/>
-                        <ColumnDefinition Width="*"/>
-                        <ColumnDefinition Width="*"/>
-                        <ColumnDefinition Width="*"/>
-                        <ColumnDefinition Width="*"/>
-                    </Grid.ColumnDefinitions>
-                    <Grid.RowDefinitions>
-                        <RowDefinition Height="*"/>
-                        <RowDefinition Height="*"/>
-                        <RowDefinition Height="*"/>
-                    </Grid.RowDefinitions>-->
-
                     <StackPanel Margin="50,0,0,90" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Left">
                         <Button
                             Style="{StaticResource MaterialDesignRaisedButton}"
@@ -218,21 +448,6 @@
                             </StackPanel>
                         </Button>
 
-                        <!--<materialDesign:Badged
-                            Badge="Current Pos"
-                            BadgeColorZoneMode="Dark"
-                            BadgePlacementMode="Top"
-                            BadgeForeground="Aqua"
-                            VerticalAlignment="Center"
-                            HorizontalAlignment="Center"
-                            Height="auto">
-                            <Button Margin="15" VerticalAlignment="Center" HorizontalAlignment="Center" Height="50" >
-                                <StackPanel>
-                                    <TextBlock Text="0.000"/>
-                                </StackPanel>
-                            </Button>
-                        </materialDesign:Badged>-->
-
                         <Button
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
@@ -288,8 +503,6 @@
                             </StackPanel>
                         </Button>
                     </StackPanel>
-                    <!--JogVelocity, Jog(-), Jog(+)-->
-
                 </Grid>
 
                 <Grid Grid.Column="1">
@@ -333,7 +546,7 @@
                 </Grid>
             </Grid>
         </Grid>
-
+        
         <Grid Grid.Column="1" Background="#37474f">
             <StackPanel>
                 <Button Margin="7,20" HorizontalAlignment="Stretch" Height="90" BorderBrush="Gray" BorderThickness="2"
@@ -341,7 +554,7 @@
                         materialDesign:ShadowAssist.ShadowDepth="Depth5"
                         Command="{Binding MoveToCommand}">
                     <StackPanel>
-                        <!--<materialDesign:PackIcon Kind="GearBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        <materialDesign:PackIcon Kind="GearBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
                         <TextBlock Text="Move To" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                     </StackPanel>
                 </Button>
@@ -352,7 +565,7 @@
                         materialDesign:ShadowAssist.ShadowDepth="Depth5"
                         Command="{Binding CurrentToTargetCommand}">
                     <StackPanel>
-                        <!--<materialDesign:PackIcon Kind="GearBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        <materialDesign:PackIcon Kind="GearBox" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
                         <TextBlock Text="Current" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                         <TextBlock Text="To Target" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                     </StackPanel>
@@ -399,6 +612,5 @@
                 </Button>
             </StackPanel>
         </Grid>
-
-    </Grid>
+    </Grid>-->
 </UserControl>

+ 67 - 2
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs

@@ -1,9 +1,12 @@
-using Prism.Commands;
+using OHV.Common.Model;
+using OHV.SqliteDAL;
+using Prism.Commands;
 using Prism.Events;
 using Prism.Mvvm;
 using Prism.Services.Dialogs;
 using System;
 using System.Collections.Generic;
+using System.Collections.ObjectModel;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -103,10 +106,34 @@ namespace OHV.Module.Interactivity.PopUp
         public ICommand OriginCommand { get; set; }
 
         public IEventAggregator eventAggregator;
+        public ICommand PositionAddCommand { get; set; }
+        public ICommand PositionDeleteCommand { get; set; }
+        public ICommand PositionSaveCommand { get; set; }
 
-        public DriveServoViewModel( IEventAggregator _ea )
+        private ObservableCollection<AxisPositionData> _pos;
+        public ObservableCollection<AxisPositionData> POS
+        {
+            get { return this._pos; }
+            set { this.SetProperty( ref this._pos , value ); }
+        }
+
+        private AxisPositionData _selectedRow = new AxisPositionData();
+        public AxisPositionData SelectedRow
+        {
+            get { return this._selectedRow; }
+            set { this.SetProperty( ref this._selectedRow , value ); }
+        }
+
+        public SqliteDAL.DAL.AxisPositionDataDAL axisPositionDataDal;
+        SqliteManager sql;
+        MessageController messageController;
+        //SelectionList selectionItems;
+
+        public DriveServoViewModel( IEventAggregator _ea, SqliteManager _sql, MessageController _messageController )
         {
             this.eventAggregator = _ea;
+            this.sql = _sql;
+            this.messageController = _messageController;
 
             this.SelectAxisCommand = new DelegateCommand<object>( ExecuteSelectAxisCommand );
             this.SelectPosCommand = new DelegateCommand<object>( ExecuteSelectPosCommand );
@@ -118,6 +145,44 @@ namespace OHV.Module.Interactivity.PopUp
             this.ServoOffCommand = new DelegateCommand( ExecuteServoOffCommand );
             this.FaultResetCommand = new DelegateCommand( ExecuteFaultResetCommand );
             this.OriginCommand = new DelegateCommand( ExecuteOriginCommand );
+
+            this.PositionAddCommand = new DelegateCommand( ExecutePositionAddCommand );
+            this.PositionDeleteCommand = new DelegateCommand( ExecutePositionDeleteCommand );
+            this.PositionSaveCommand = new DelegateCommand( ExecutePositionSaveCommand );
+
+            this.POS = new ObservableCollection<AxisPositionData>( sql.AxisPositionDataDAL.All );
+        }
+
+        private void ExecutePositionSaveCommand( )
+        {
+            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();
+
+                    //d.ForEach(x=>
+                    //{
+                    //    x.Id.Equals()
+                    //} )
+                    //sql.AxisPositionDataDAL.Update(this.POS);
+                }
+            } );
+        }
+
+        private void ExecutePositionDeleteCommand( )
+        {
+            var d = this.SelectedRow;
+            this.POS.Remove( d );
+        }
+
+        private void ExecutePositionAddCommand( )
+        {
+            this.POS.Add( new AxisPositionData() );
         }
 
         private void ExecuteKeyInCommadn( object obj )

+ 8 - 4
Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoView.xaml

@@ -113,7 +113,9 @@
                             materialDesign:ButtonAssist.CornerRadius="10"
                             ToolTip="MaterialDesignRaisedButton with Round Corners"
                             Command="{Binding SelectAxisCommand}"
-                            CommandParameter="Axis_CarrierLock_Left">
+                            CommandParameter="Axis_CarrierLock_Left"
+                            BorderBrush="{Binding SelectControl}"
+                            BorderThickness="2">
                         <StackPanel>
                             <TextBlock VerticalAlignment="Center"
                                        HorizontalAlignment="Center">
@@ -153,7 +155,9 @@
                             materialDesign:ButtonAssist.CornerRadius="10"
                             ToolTip="MaterialDesignRaisedButton with Round Corners"
                             Command="{Binding SelectAxisCommand}"
-                            CommandParameter="Axis_CarrierLock_Right">
+                            CommandParameter="Axis_CarrierLock_Right"
+                            BorderBrush="{Binding SelectControl}"
+                            BorderThickness="2">
                         <StackPanel>
                             <TextBlock VerticalAlignment="Center"
                                        HorizontalAlignment="Center">
@@ -189,7 +193,7 @@
 
                     <Button Margin="3" HorizontalAlignment="Stretch" Grid.Column="4" Grid.Row="1" Width="Auto" Height="Auto" BorderBrush="Gray" BorderThickness="2"
                             Command="{Binding SelectPosCommand}"
-                            CommandParameter="Lock">
+                            CommandParameter="Teach_Postion_Lock">
                         <StackPanel>
                             <TextBlock Text="Pos" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                             <TextBlock Text="Lock" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
@@ -197,7 +201,7 @@
                     </Button>
                     <Button Margin="3" HorizontalAlignment="Stretch" Grid.Column="4" Grid.Row="2" Width="Auto" Height="Auto" BorderBrush="Gray" BorderThickness="2"
                             Command="{Binding SelectPosCommand}"
-                            CommandParameter="UnLock">
+                            CommandParameter="Teach_Postion_Unlock">
                         <StackPanel>
                             <TextBlock Text="Pos" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                             <TextBlock Text="UnLock" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>

+ 165 - 80
Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoViewModel.cs

@@ -1,11 +1,13 @@
 using OHV.Common.Events;
 using OHV.Common.Shareds;
+using OHV.SqliteDAL;
 using Prism.Commands;
 using Prism.Events;
 using Prism.Mvvm;
 using Prism.Services.Dialogs;
 using System;
 using System.Collections.Generic;
+using System.Drawing;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -17,7 +19,7 @@ namespace OHV.Module.Interactivity.PopUp
     {
         private DelegateCommand<string> _closeDialogCommand;
         public DelegateCommand<string> CloseDialogCommand =>
-            _closeDialogCommand ?? (_closeDialogCommand = new DelegateCommand<string>(CloseDialog));
+            _closeDialogCommand ?? ( _closeDialogCommand = new DelegateCommand<string>( CloseDialog ) );
 
         private string _title = "LockServoView";
         public string Title
@@ -25,7 +27,7 @@ namespace OHV.Module.Interactivity.PopUp
             get { return this._title; }
             set
             {
-                this.SetProperty(ref this._title, value);
+                this.SetProperty( ref this._title , value );
             }
         }
 
@@ -33,7 +35,7 @@ namespace OHV.Module.Interactivity.PopUp
         public string SelectAxis
         {
             get => this._selectAxis;
-            set { this.SetProperty(ref this._selectAxis, value); }
+            set { this.SetProperty( ref this._selectAxis , value ); }
         }
 
         private string _selectedPosition = string.Empty;
@@ -42,7 +44,7 @@ namespace OHV.Module.Interactivity.PopUp
             get => this._selectedPosition;
             set
             {
-                this.SetProperty(ref this._selectedPosition, value);
+                this.SetProperty( ref this._selectedPosition , value );
             }
         }
 
@@ -51,21 +53,21 @@ namespace OHV.Module.Interactivity.PopUp
         public double TargetPosLockLeft
         {
             get { return this._targetPosLockLeft; }
-            set { this.SetProperty(ref this._targetPosLockLeft, value); }
+            set { this.SetProperty( ref this._targetPosLockLeft , value ); }
         }
 
         private double _currentLockLeft;
         public double CurrentLockLeft
         {
             get { return this._currentLockLeft; }
-            set { this.SetProperty(ref this._currentLockLeft, value); }
+            set { this.SetProperty( ref this._currentLockLeft , value ); }
         }
 
         private double _differenceLockLeft;
         public double DifferenceLockLeft
         {
             get { return this._differenceLockLeft; }
-            set { this.SetProperty(ref this._differenceLockLeft, value); }
+            set { this.SetProperty( ref this._differenceLockLeft , value ); }
         }
         #endregion
 
@@ -74,24 +76,30 @@ namespace OHV.Module.Interactivity.PopUp
         public double TargetPosLockRight
         {
             get { return this._targetPosLockRight; }
-            set { this.SetProperty(ref this._targetPosLockRight, value); }
+            set { this.SetProperty( ref this._targetPosLockRight , value ); }
         }
 
         private double _currentLockRight;
         public double CurrentLockRight
         {
             get { return this._currentLockRight; }
-            set { this.SetProperty(ref this._currentLockRight, value); }
+            set { this.SetProperty( ref this._currentLockRight , value ); }
         }
 
         private double _differenceLockRight;
         public double DifferenceLockRight
         {
             get { return this._differenceLockRight; }
-            set { this.SetProperty(ref this._differenceLockRight, value); }
+            set { this.SetProperty( ref this._differenceLockRight , value ); }
         }
         #endregion
 
+        Brush _selectControl = Brushes.Gray;
+        public Brush SelectControl
+        {
+            get { return this._selectControl; }
+            set { SetProperty( ref this._selectControl , value ); }
+        }
 
         public ICommand SelectAxisCommand { get; set; }
         public ICommand KeyInTargetPosCommand { get; set; }
@@ -109,84 +117,105 @@ namespace OHV.Module.Interactivity.PopUp
 
         IEventAggregator eventAggregator;
         MessageController messageController;
+        SqliteManager sql;
 
-        public LockServoViewModel(IEventAggregator ea, MessageController _messageController )
+        public LockServoViewModel( IEventAggregator ea , MessageController _messageController , SqliteManager _sql )
         {
-            this.SelectAxisCommand = new DelegateCommand<object>(ExecuteSelectAxisCommand);
-            this.SelectPosCommand = new DelegateCommand<object>(ExecuteSelectPosCommand);
-            this.MoveToCommand = new DelegateCommand(ExecuteMoveToCommand);
-            this.CurrentToTargetCommand = new DelegateCommand(ExecuteCurrentToTargetCommand);
-            this.KeyInTargetPosCommand = new DelegateCommand<object>(ExecuteKeyInCommand);
-
-            this.ServoOnCommand = new DelegateCommand(ExecuteServoOnCommand);
-            this.ServoOffCommand = new DelegateCommand(ExecuteServoOffCommand);
-            this.FaultResetCommand = new DelegateCommand(ExecuteFaultResetCommand);
-            this.OriginCommand = new DelegateCommand(ExecuteOriginCommand);
+            this.SelectAxisCommand = new DelegateCommand<object>( ExecuteSelectAxisCommand );
+            this.SelectPosCommand = new DelegateCommand<object>( ExecuteSelectPosCommand );
+            this.MoveToCommand = new DelegateCommand( ExecuteMoveToCommand );
+            this.CurrentToTargetCommand = new DelegateCommand( ExecuteCurrentToTargetCommand );
+            this.KeyInTargetPosCommand = new DelegateCommand<object>( ExecuteKeyInCommand );
+
+            this.ServoOnCommand = new DelegateCommand<object>( ExecuteServoOnCommand );
+            this.ServoOffCommand = new DelegateCommand<object>( ExecuteServoOffCommand );
+            this.FaultResetCommand = new DelegateCommand<object>( ExecuteFaultResetCommand );
+            this.OriginCommand = new DelegateCommand<object>( ExecuteOriginCommand );
             this.SelectedPosDataSave = new DelegateCommand<object>( ExecuteSelectedPosDataSave );
 
-            this.JogCommand = new DelegateCommand<object>(ExecuteJogCommand);
+            this.JogCommand = new DelegateCommand<object>( ExecuteJogCommand );
 
             this.eventAggregator = ea;
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe(UICallbackCommunication);
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Subscribe(UICallbackCommunication, ThreadOption.UIThread);
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( UICallbackCommunication );
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Subscribe( UICallbackCommunication , ThreadOption.UIThread );
 
             this.messageController = _messageController;
+
+            this.sql = _sql;
         }
 
         private void ExecuteSelectedPosDataSave( object obj )
         {
-            // save data Send 
-            // currentPos, posName ,AxisName
-            string axis = string.Empty;
-            double currentPos;
+            List<Common.Model.AxisPositionData> dataList = null;
 
             this.messageController.ShowConfirmationPopupView( "Position Data Save ?" , r =>
             {
                 if ( r.Result == ButtonResult.OK )
                 {
-                    switch(this.SelectAxis )
+                    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;
+                        sql.AxisPositionDataDAL.Update( sqlAxisLeft );
+                    }
+                    else if ( this.SelectAxis == ConstString.AXIS_CARRIER_LOCK_RIGHT )
                     {
-                        case ConstString.AXIS_CARRIER_LOCK_LEFT:
-                            axis = ConstString.AXIS_CARRIER_LOCK_LEFT;
-                            currentPos = this.CurrentLockLeft;
-                            break;
-                        case ConstString.AXIS_CARRIER_LOCK_RIGHT:
-                            axis = ConstString.AXIS_CARRIER_LOCK_RIGHT;
-                            currentPos = this.CurrentLockRight;
-                            break;
+                        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.CurrentLockLeft;
+                        sql.AxisPositionDataDAL.Update( sqlAxisRight );
                     }
-                    //Publish( currentPos , this.SelectedPosition , axis );
+                    else
+                    { }
                 }
             } );
         }
 
-        private void ExecuteJogCommand(object obj)
+        private void ExecuteJogCommand( object obj )
         {
             var msg = new AxisControlEventArgs
             {
-                Dir = AxisControlEventArgs.eEventDir.ToBack,
-                Kind = AxisControlEventArgs.eAxisControlKind.Jog,
-                AxisName = this.SelectAxis,
+                Dir = AxisControlEventArgs.eEventDir.ToBack ,
+                Kind = AxisControlEventArgs.eAxisControlKind.Jog ,
+                AxisName = this.SelectAxis ,
             };
 
-            if (obj.ToString().Equals("+"))
+            if ( obj.ToString().Equals( "+" ) )
                 msg.JogDir = AxisControlEventArgs.eJogMoveDir.Positive;
             else
                 msg.JogDir = AxisControlEventArgs.eJogMoveDir.Negative;
 
-            this.PublishEvent(msg);
+            this.PublishEvent( msg );
         }
 
-        void PublishEvent(AxisControlEventArgs args)
+        void PublishEvent( AxisControlEventArgs args )
         {
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish(args);
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( args );
         }
 
-        void UICallbackCommunication(AxisControlEventArgs args)
+        void UICallbackCommunication( AxisControlEventArgs args )
         {
-            if (args.Dir == AxisControlEventArgs.eEventDir.ToFront)
+            if ( args.Dir == AxisControlEventArgs.eEventDir.ToFront )
             {
-                switch (args.Kind)
+                switch ( args.Kind )
                 {
                     case AxisControlEventArgs.eAxisControlKind.Stop:
                         break;
@@ -197,7 +226,7 @@ namespace OHV.Module.Interactivity.PopUp
                     case AxisControlEventArgs.eAxisControlKind.Jog:
                         break;
                     case AxisControlEventArgs.eAxisControlKind.CurrentPosition:
-                        if (args.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT))
+                        if ( args.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) )
                             this.CurrentLockLeft = args.CurrentPosition;
                         else
                             this.CurrentLockRight = args.CurrentPosition;
@@ -212,57 +241,113 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
-        private void ExecuteOriginCommand()
+        private void ExecuteOriginCommand( object obj )
         {
-        }
+            var msg = new AxisControlEventArgs
+            {
+                Dir = AxisControlEventArgs.eEventDir.ToBack ,
+                Kind = AxisControlEventArgs.eAxisControlKind.OriginReturn ,
+                AxisName = this.SelectAxis ,
+            };
 
-        private void ExecuteFaultResetCommand()
+            if ( obj.ToString().Equals( "Left" ) )
+                msg.Axis = AxisControlEventArgs.eAxises.LEFT;
+            else
+                msg.Axis = AxisControlEventArgs.eAxises.RIGHT;
+
+            this.PublishEvent( msg );
+        }   
+
+        private void ExecuteFaultResetCommand( object obj )
         {
+            var msg = new AxisControlEventArgs
+            {
+                Dir = AxisControlEventArgs.eEventDir.ToBack ,
+                Kind = AxisControlEventArgs.eAxisControlKind.FaultReset ,
+                AxisName = this.SelectAxis ,
+            };
+
+            if ( obj.ToString().Equals( "Left" ) )
+                msg.Axis = AxisControlEventArgs.eAxises.LEFT;
+            else
+                msg.Axis = AxisControlEventArgs.eAxises.RIGHT;
+
+            this.PublishEvent( msg );
         }
 
-        private void ExecuteServoOffCommand()
+        private void ExecuteServoOffCommand( object obj )
         {
+            //TODO: lib direct 사용할지 ? 
+
+            var msg = new AxisControlEventArgs
+            {
+                Dir = AxisControlEventArgs.eEventDir.ToBack ,
+                Kind = AxisControlEventArgs.eAxisControlKind.ServoOff ,
+                AxisName = this.SelectAxis ,
+            };
+
+            if ( obj.ToString().Equals( "Left" ) )
+                msg.Axis = AxisControlEventArgs.eAxises.LEFT;
+            else
+                msg.Axis = AxisControlEventArgs.eAxises.RIGHT;
+
+            this.PublishEvent( msg );
         }
 
-        private void ExecuteServoOnCommand()
+        private void ExecuteServoOnCommand( object obj )
         {
+            //TODO: lib direct 사용할지 ? Event 처리할지 ?
+
+            var msg = new AxisControlEventArgs
+            {
+                Dir = AxisControlEventArgs.eEventDir.ToBack ,
+                Kind = AxisControlEventArgs.eAxisControlKind.ServoOn ,
+                AxisName = this.SelectAxis ,
+            };
+
+            if ( obj.ToString().Equals( "Left" ) )
+                msg.Axis = AxisControlEventArgs.eAxises.LEFT;
+            else
+                msg.Axis = AxisControlEventArgs.eAxises.RIGHT;
+
+            this.PublishEvent( msg );
         }
 
-        private void ExecuteKeyInCommand( object obj)
+        private void ExecuteKeyInCommand( object obj )
         {
-            if (obj.ToString().Equals("Left"))
+            if ( obj.ToString().Equals( "Left" ) )
             {
                 var numPad = new CalcuratorView();
-                var result = numPad.ShowDialog(this.TargetPosLockLeft);
+                var result = numPad.ShowDialog( this.TargetPosLockLeft );
                 this.TargetPosLockLeft = result;
             }
             else
             {
                 var numPad = new CalcuratorView();
-                var result = numPad.ShowDialog(this.TargetPosLockRight);
+                var result = numPad.ShowDialog( this.TargetPosLockRight );
                 this.TargetPosLockRight = result;
             }
         }
 
-        private void ExecuteCurrentToTargetCommand()
+        private void ExecuteCurrentToTargetCommand( )
         {
             this.TargetPosLockLeft = this.CurrentLockLeft;
             this.TargetPosLockRight = this.CurrentLockRight;
         }
 
-        private async void ExecuteMoveToCommand()
+        private async void ExecuteMoveToCommand( )
         {
-            await Task.Run(() =>
-           {
-                //Axis.Move(this.SelectPosition);
-            });
+            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 "Lock":
                     break;
@@ -273,44 +358,44 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
-        private void ExecuteSelectAxisCommand(object obj)
+        private void ExecuteSelectAxisCommand( object obj )
         {
             this.SelectAxis = obj.ToString();
         }
 
         #region Dialog 
-        public bool CanCloseDialog()
+        public bool CanCloseDialog( )
         {
             //throw new NotImplementedException();
             return true;
         }
 
-        public void OnDialogClosed()
+        public void OnDialogClosed( )
         {
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish(new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack, Kind = AxisControlEventArgs.eAxisControlKind.ReqStopCurrentPosition});
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe(UICallbackCommunication);
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack , Kind = AxisControlEventArgs.eAxisControlKind.ReqStopCurrentPosition } );
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( UICallbackCommunication );
         }
 
-        public void OnDialogOpened(IDialogParameters parameters)
+        public void OnDialogOpened( IDialogParameters parameters )
         {
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish(new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack, Kind = AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition });
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack , Kind = AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition } );
         }
 
-        public virtual void RaiseRequestClose(IDialogResult dialogResult)
+        public virtual void RaiseRequestClose( IDialogResult dialogResult )
         {
-            RequestClose?.Invoke(dialogResult);
+            RequestClose?.Invoke( dialogResult );
         }
 
-        private void CloseDialog(string parameter)
+        private void CloseDialog( string parameter )
         {
             ButtonResult result = ButtonResult.None;
 
-            if (parameter?.ToLower() == "true")
+            if ( parameter?.ToLower() == "true" )
                 result = ButtonResult.OK;
-            else if (parameter?.ToLower() == "false")
+            else if ( parameter?.ToLower() == "false" )
                 result = ButtonResult.Cancel;
 
-            RaiseRequestClose(new DialogResult(result));
+            RaiseRequestClose( new DialogResult( result ) );
         }
         #endregion
     }

+ 1 - 1
Dev/OHV/OHV.SqliteDAL/DAL/AbstractDAL.cs

@@ -17,7 +17,7 @@ namespace OHV.SqliteDAL.DAL
         void Edit(TEntity entity);
     }
 
-    public  class GenericDAL<T> where T : class
+    public class GenericDAL<T> where T : class
     {
         public List<T> All
         {

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

@@ -16,6 +16,21 @@
     <Deterministic>true</Deterministic>
     <NuGetPackageImportStamp>
     </NuGetPackageImportStamp>
+    <PublishUrl>게시\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <PlatformTarget>AnyCPU</PlatformTarget>
@@ -26,6 +41,7 @@
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>true</Prefer32Bit>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
     <PlatformTarget>AnyCPU</PlatformTarget>
@@ -187,7 +203,13 @@
   <ItemGroup>
     <None Include="App.config" />
   </ItemGroup>
-  <ItemGroup />
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
   <ItemGroup>
     <None Include="Config\log4net.xml">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>

+ 148 - 142
Dev/OHV/VehicleControlSystem/ControlLayer/Clamp.cs

@@ -25,25 +25,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,13 +52,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 );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.ServoOff:
+                        //this.ReqServoOff( args );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition:
                         this.ReqStartCurrentPosition();
@@ -68,6 +70,10 @@ namespace VehicleControlSystem.ControlLayer
                         this.taskCancel.WaitAll();
                         break;
                     case AxisControlEventArgs.eAxisControlKind.OriginReturn:
+                        this.ReqOriginReturn( args );
+                        break;
+                    case AxisControlEventArgs.eAxisControlKind.FaultReset:
+                        //this.ReqFaultReset( args );
                         break;
                     default:
                         break;
@@ -75,178 +81,178 @@ namespace VehicleControlSystem.ControlLayer
             }
         }
 
-        void PublishEvent(AxisControlEventArgs args)
+        void PublishEvent( AxisControlEventArgs args )
         {
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish(args);
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( args );
         }
 
-        void ReqStartCurrentPosition()
+        void ReqStartCurrentPosition( )
         {
-            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 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 );
         }
 
-        void ReqJog(AxisControlEventArgs arg)
+        void ReqJog( AxisControlEventArgs arg )
         {
-            if (arg.JogDir == AxisControlEventArgs.eJogMoveDir.Positive)
-                this.JogMove(arg.AxisName, E_JogMoveDir.Positive, 0);
+            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();
 
-            //결과를 UI에 알려 줘야 하는데.
-            if (result != EziMOTIONPlusELib.FMM_OK) { }
+            //TODO: 결과를 UI에 알려 줘야 하는데.
+            if ( result != EziMOTIONPlusELib.FMM_OK ) { }
 
         }
 
-        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;
         }
@@ -255,36 +261,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;
 
 
@@ -295,36 +301,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;