Преглед изворни кода

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

DESKTOP-Kang пре 6 година
родитељ
комит
c78e5afe7f

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

@@ -195,6 +195,7 @@ namespace OHV.Common.Events
 
         
         public double CurrentPosition { get; set; }
+        public string PositionTag { get; set; }
 
         public eJogMoveDir JogDir { get; set; }
         public eEventDir EventDir { get; set; }
@@ -212,7 +213,15 @@ namespace OHV.Common.Events
             ToFront,
         }
 
+        public enum eControlKind
+        {
+            USE,
+            ON,
+            OFF,
+            STATE
+        }
 
+        public eControlKind ControlKind { get; set; }
         public string OutPutTag { get; set; }
         public eEventDir EventDir { get; set; }
         public object Args { get; set; }

+ 10 - 6
Dev/OHV/OHV.Module.Interactivity/OHV.Module.Interactivity.csproj

@@ -36,12 +36,20 @@
     <Reference Include="CommonServiceLocator, Version=2.0.4.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
       <HintPath>..\packages\CommonServiceLocator.2.0.4\lib\net45\CommonServiceLocator.dll</HintPath>
     </Reference>
-    <Reference Include="DynamicExpresso.Core, Version=2.3.1.0, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\DynamicExpresso.Core.2.3.1\lib\net45\DynamicExpresso.Core.dll</HintPath>
+    <Reference Include="DynamicExpresso.Core">
+      <HintPath>..\Assambly\DynamicExpresso.Core.dll</HintPath>
     </Reference>
     <Reference Include="FluentResults">
       <HintPath>..\Assambly\FluentResults.dll</HintPath>
     </Reference>
+    <Reference Include="GSG.NET, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Assambly\GSG.NET.dll</HintPath>
+    </Reference>
+    <Reference Include="GSG.NET.WPF, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Assambly\GSG.NET.WPF.dll</HintPath>
+    </Reference>
     <Reference Include="MaterialDesignColors, Version=1.2.2.920, Culture=neutral, processorArchitecture=MSIL">
       <HintPath>..\packages\MaterialDesignColors.1.2.2\lib\net45\MaterialDesignColors.dll</HintPath>
     </Reference>
@@ -217,10 +225,6 @@
     </Page>
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\..\..\GSG\GSG\GSG.NET.WPF\GSG.NET.WPF.csproj">
-      <Project>{6b91fca2-0a26-41d5-8959-a6f27645dacd}</Project>
-      <Name>GSG.NET.WPF</Name>
-    </ProjectReference>
     <ProjectReference Include="..\OHV.Common\OHV.Common.csproj">
       <Project>{0d1f7fbc-bfb0-4ee4-852d-e2a8d62c5708}</Project>
       <Name>OHV.Common</Name>

+ 38 - 8
Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlView.xaml

@@ -164,7 +164,38 @@
                     </Grid.ColumnDefinitions>
                     
                     
-                    <Grid Grid.Column="0"></Grid>
+                    <Grid Grid.Column="0">
+                        <StackPanel VerticalAlignment="Center"
+                                    HorizontalAlignment="Center">
+                            <Button Background="{x:Null}">
+                                <StackPanel Orientation="Horizontal">
+                                    <Ellipse Margin="0,0,18,0" Width="20" Height="20" Fill="{Binding AxisLeftIsMove, FallbackValue=Red}"/>
+                                    <TextBlock Text="Axis-L IsMove"/>
+                                </StackPanel>
+                            </Button>
+
+                            <Button Background="{x:Null}">
+                                <StackPanel Orientation="Horizontal">
+                                    <Ellipse Margin="0,0,33,0" Width="20" Height="20" Fill="{Binding AxisLeftFault, FallbackValue=Red}"/>
+                                    <TextBlock Text="Axis-L Fault"/>
+                                </StackPanel>
+                            </Button>
+
+                            <Button Background="{x:Null}">
+                                <StackPanel Orientation="Horizontal">
+                                    <Ellipse Margin="0,0,16,0" Width="20" Height="20" Fill="{Binding AxisRightIsMove, FallbackValue=Red}"/>
+                                    <TextBlock Text="Axis-R IsMove"/>
+                                </StackPanel>
+                            </Button>
+
+                            <Button Background="{x:Null}">
+                                <StackPanel Orientation="Horizontal">
+                                    <Ellipse Margin="0,0,30,0" Width="20" Height="20" Fill="{Binding AxisRightFault, FallbackValue=Red}"/>
+                                    <TextBlock Text="Axis-R Fault"/>
+                                </StackPanel>
+                            </Button>
+                        </StackPanel>
+                    </Grid>
 
                     <Grid Grid.Column="1">
                         <StackPanel VerticalAlignment="Top" HorizontalAlignment="Center" Margin="20">
@@ -172,7 +203,7 @@
                             VerticalAlignment="Top" Width="Auto" Height="50"
                             HorizontalAlignment="Left"/>
                         </StackPanel>
-                        
+
                         <StackPanel Orientation="Horizontal"
                                 HorizontalAlignment="Center">
 
@@ -184,6 +215,7 @@
                                 CommandParameter="Lock">
                                 <StackPanel>
                                     <materialDesign:PackIcon Kind="ElectricSwitchClosed" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                                    <TextBlock Text="Clamp" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
                                     <TextBlock Text="Lock" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
                                 </StackPanel>
                             </Button>
@@ -196,16 +228,14 @@
                                 CommandParameter="UnLock">
                                 <!--<Button.InputBindings>
                                 <MouseBinding Gesture="LeftClick" Command="{Binding KeyInTargetPosCommand}" CommandParameter="Left"/>
-                            </Button.InputBindings>-->
+                                </Button.InputBindings>-->
                                 <StackPanel>
-                                    <materialDesign:PackIcon Kind="ElectricSwitch" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>
+                                    <materialDesign:PackIcon Kind="ElectricSwitch" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>                                    <TextBlock Text="Clamp" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
                                     <TextBlock Text="UnLock" VerticalAlignment="Stretch" HorizontalAlignment="Center" />
                                 </StackPanel>
                             </Button>
-
                         </StackPanel>
                     </Grid>
-
                     
                 </Grid>
             </Grid>
@@ -213,8 +243,8 @@
 
         <Grid Grid.Column="1" Background="#263238">
             <Border Margin="1" BorderBrush="#FF00FFD3" BorderThickness="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
-            <StackPanel VerticalAlignment="Bottom">
-                <Button Margin="5,0,5,10" HorizontalAlignment="Stretch" Height="Auto" BorderBrush="Gray" BorderThickness="2" Command="{Binding CloseDialogCommand}" CommandParameter="true">
+            <StackPanel VerticalAlignment="Top">
+                <Button Margin="5,10,5,0" 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" />

+ 59 - 10
Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlViewModel.cs

@@ -66,7 +66,6 @@ namespace OHV.Module.Interactivity.PopUp
                     {
                         Dir = AxisControlEventArgs.eEventDir.ToBack ,
                         Kind = AxisControlEventArgs.eAxisControlKind.Move ,
-                        Axis = AxisControlEventArgs.eAxises.LR_SYNC ,
                     };
 
                     switch ( selectedPos )
@@ -93,15 +92,53 @@ namespace OHV.Module.Interactivity.PopUp
         {
             if ( _args.Dir == AxisControlEventArgs.eEventDir.ToFront )
             {
-
+                switch ( _args.Kind )
+                {
+                    case AxisControlEventArgs.eAxisControlKind.NONE:
+                        break;
+                    case AxisControlEventArgs.eAxisControlKind.OriginReturn:
+                        break;
+                    case AxisControlEventArgs.eAxisControlKind.Stop:
+                        break;
+                    case AxisControlEventArgs.eAxisControlKind.EStop:
+                        break;
+                    case AxisControlEventArgs.eAxisControlKind.Move:
+                        //Sync Move Success Return
+                        
+                        break;
+                    case AxisControlEventArgs.eAxisControlKind.Jog:
+                        break;
+                    case AxisControlEventArgs.eAxisControlKind.ServoOn:
+                        break;
+                    case AxisControlEventArgs.eAxisControlKind.ServoOff:
+                        break;
+                    case AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition:
+                        break;
+                    case AxisControlEventArgs.eAxisControlKind.ReqStopCurrentPosition:
+                        break;
+                    case AxisControlEventArgs.eAxisControlKind.FaultReset:
+                        break;
+                    case AxisControlEventArgs.eAxisControlKind.AxisState:
+                        break;
+                }
             }
         }
 
         private void UICallbackCommunivation( IOControlEventArgs _args )
         {
-            if ( _args.EventDir == IOControlEventArgs.eEventDir.ToFront )
+            if ( _args.EventDir == IOControlEventArgs.eEventDir.ToBack )
             {
-
+                switch ( _args.ControlKind )
+                {
+                    case IOControlEventArgs.eControlKind.USE:
+                        break;
+                    case IOControlEventArgs.eControlKind.ON:
+                        break;
+                    case IOControlEventArgs.eControlKind.OFF:
+                        break;
+                    case IOControlEventArgs.eControlKind.STATE:
+                        break;
+                }
             }
         }
 
@@ -109,6 +146,7 @@ namespace OHV.Module.Interactivity.PopUp
         {
             var type = _obj.ToString();
             var order = string.Empty;
+
             switch(type)
             {
                 case "CW":
@@ -124,6 +162,7 @@ namespace OHV.Module.Interactivity.PopUp
 
             var msg = new IOControlEventArgs
             {
+                EventDir = IOControlEventArgs.eEventDir.ToBack,
                 OutPutTag = order.ToString()
             };
 
@@ -146,7 +185,7 @@ namespace OHV.Module.Interactivity.PopUp
             this.eventAggregator.GetEvent<IOControlPubSubEvent>().Publish( new IOControlEventArgs { EventDir = IOControlEventArgs.eEventDir.ToBack } );
             this.eventAggregator.GetEvent<IOControlPubSubEvent>().Unsubscribe( UICallbackCommunivation );
 
-            //TODO: - [03-14 ys-hwang] - Closed 해제 처리해줄때 Kind == OriginReturn 값이 들어와버림 그래서 NONE 생성 
+            //TODO:[03-14 ys-hwang] - Closed 해제 처리해줄때 Kind == OriginReturn 값이 들어와버림 그래서 NONE 생성 
             this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs 
             { 
                 Dir = AxisControlEventArgs.eEventDir.ToBack, 
@@ -158,15 +197,25 @@ namespace OHV.Module.Interactivity.PopUp
         public void OnDialogOpened( IDialogParameters parameters )
         {
             /*IO*/
+            var ioMsg = new IOControlEventArgs
+            {
+                EventDir = IOControlEventArgs.eEventDir.ToBack ,
+                ControlKind = IOControlEventArgs.eControlKind.STATE
+            };
+            this.PublishEvent( ioMsg );
+
             this.eventAggregator.GetEvent<IOControlPubSubEvent>().Publish( new IOControlEventArgs { EventDir = IOControlEventArgs.eEventDir.ToBack } );
 
             /*Lock Axis*/
-            //TODO: - [03-14 ys-hwang] - Opened 할당 시 Kind == OriginReturn 값이 들어와버림 그래서 NONE 생성 
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs 
-            { 
-                Dir = AxisControlEventArgs.eEventDir.ToBack,
+            var axisMsg = new AxisControlEventArgs
+            {
+                Dir = AxisControlEventArgs.eEventDir.ToBack ,
                 Kind = AxisControlEventArgs.eAxisControlKind.NONE
-            } );
+            };
+
+            this.AxisPublishEvent(axisMsg);
+
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack , Kind = AxisControlEventArgs.eAxisControlKind.NONE } );
         }
 
         private void CloseDialog( string parameter )

+ 112 - 113
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs

@@ -17,7 +17,6 @@ using System.Windows.Media;
 
 namespace OHV.Module.Interactivity.PopUp
 {
-    //Todo: DataGrid Scroll 동작 수정 필요.
     public class DriveServoViewModel : BindableBase, IDialogAware
     {
         private DelegateCommand<string> _closeDialogCommand;
@@ -56,7 +55,7 @@ namespace OHV.Module.Interactivity.PopUp
         public double DriveTargetPos
         {
             get { return this._driveTargetPos; }
-            set { this.SetProperty(ref this._driveTargetPos, value); }
+            set { this.SetProperty(ref this._driveTargetPos , value); }
         }
 
         private double _currentDrive;
@@ -126,13 +125,6 @@ namespace OHV.Module.Interactivity.PopUp
             set { SetProperty(ref this._routeList, value); }
         }
 
-        private Route selectedRoute;
-        public Route SelectedRoute
-        {
-            get { return selectedRoute; }
-            set { SetProperty(ref this.selectedRoute, value); }
-        }
-
         public SqliteDAL.DAL.AxisPositionDataDAL axisPositionDataDal;
         SqliteManager sql;
         MessageController messageController;
@@ -140,11 +132,11 @@ namespace OHV.Module.Interactivity.PopUp
         public DriveServoViewModel(IEventAggregator _ea, SqliteManager _sql, MessageController _messageController)
         {
             this.eventAggregator = _ea;
-            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe(DriveControlCallBack);
-            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Subscribe(DriveControlCallBack, ThreadOption.UIThread);
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe( DriveControlCallBack );
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Subscribe( DriveControlCallBack , ThreadOption.UIThread );
 
-            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe(UICallBackCommunication);
-            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe(UICallBackCommunication, ThreadOption.UIThread);
+            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallBackCommunication );
+            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallBackCommunication , ThreadOption.UIThread );
 
             this.sql = _sql;
             this.RouteList = new ObservableCollection<Route>(sql.RouteDal.All);
@@ -173,18 +165,18 @@ namespace OHV.Module.Interactivity.PopUp
             this.JogCommand = new DelegateCommand<object>(ExecuteJogCommand);
         }
 
-        private void UICallBackCommunication(GUIMessageEventArgs obj)
+        private void UICallBackCommunication( GUIMessageEventArgs obj )
         {
-            if ( obj.Kind == GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange)
+            if ( obj.Kind == GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange )
             {
-                if (obj.MessageKey.Equals(MessageKey.Vehicle))
+                if ( obj.MessageKey.Equals( MessageKey.Vehicle ) )
                 {
-                    switch (obj.ModelPropertyName )
+                    switch ( obj.ModelPropertyName )
                     {
                         case "SteeringState":
                             {
-                                var dir = CastTo<eSteeringState>.From<object>(obj.Args);
-                                this.ChangeSteeringDirection(dir);
+                                var dir = CastTo<eSteeringState>.From<object>( obj.Args );
+                                this.ChangeSteeringDirection( dir );
                             }
                             break;
                         default:
@@ -194,31 +186,33 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
-        private void DriveControlCallBack(DriveControlEventArgs args)
+        private void DriveControlCallBack( DriveControlEventArgs args)
         {
-            //TODO: Drive, Steering 구분
+            //TODO:[20/03/19 ys-hwang] Drive UI return msg popup
+
             if (args.EventDir == DriveControlEventArgs.eEventDir.ToFront)
             {
-                switch (args.ControlKind)
+                switch ( args.ControlKind )
                 {
                     case DriveControlEventArgs.eControlKind.MOVE:
+                        ResponseMove(args);
                         break;
                     case DriveControlEventArgs.eControlKind.STOP:
                         break;
                     case DriveControlEventArgs.eControlKind.Steering:
-                        //if (args.Result.IsSuccess)
+                        //if ( args.Result.IsSuccess )
                         //{
                         //    var dir = args.Result.ToResult<DriveControlEventArgs.eMoveDir>().Value;
-                        //    this.ChangeSteeringDirection(dir == DriveControlEventArgs.eMoveDir.LEFT ? true : false);
+                        //    this.ChangeSteeringDirection( dir == DriveControlEventArgs.eMoveDir.LEFT ? true : false );
                         //}
-                        //break;
+                        break;
                     case DriveControlEventArgs.eControlKind.SteeringState:
-                        //if (args.Result.IsSuccess)
+                        //if ( args.Result.IsSuccess )
                         //{
                         //    var dir = args.Result.ToResult<DriveControlEventArgs.eMoveDir>().Value;
-                        //    this.ChangeSteeringDirection(dir == DriveControlEventArgs.eMoveDir.LEFT ? true : false);
+                        //    this.ChangeSteeringDirection( dir == DriveControlEventArgs.eMoveDir.LEFT ? true : false );
                         //}
-                        //break;
+                        break;
                     case DriveControlEventArgs.eControlKind.ReqCurrentPos:
                         this.CurrentDrive = args.CurrentPosition;
                         break;
@@ -238,6 +232,23 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
+        private void ResponseMove( DriveControlEventArgs args )
+        {
+            var msg = string.Empty;
+            if(args.Result.IsSuccess)
+            {
+                msg = "Move Successs";
+            }
+            else
+            {
+                var error = args.Result.Errors.FirstOrDefault();
+                var alarm = error.Metadata[ "Alarm" ] as Alarm;
+                msg = alarm.Name + " " + alarm.Text;
+            }
+
+            this.messageController.ShowNotificationView( msg );
+        }
+
         void PublishEvent(DriveControlEventArgs args)
         {
             this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish(args);
@@ -245,15 +256,15 @@ namespace OHV.Module.Interactivity.PopUp
 
         void ChangeSteeringDirection(eSteeringState state)
         {
-            if (state == eSteeringState.Left)
+            if ( state == eSteeringState.Left )
             {
-                this.SteeringLeftBrushProperty = (System.Windows.Media.Brush)new System.Windows.Media.BrushConverter().ConvertFromString("#FF00FFD3");
+                this.SteeringLeftBrushProperty = ( System.Windows.Media.Brush )new System.Windows.Media.BrushConverter().ConvertFromString( "#FF00FFD3" );
                 this.SteeringRightBrushProperty = Brushes.Gray;
             }
-            else if (state == eSteeringState.Right)
+            else if ( state == eSteeringState.Right )
             {
                 this.SteeringLeftBrushProperty = Brushes.Gray;
-                this.SteeringRightBrushProperty = (System.Windows.Media.Brush)new System.Windows.Media.BrushConverter().ConvertFromString("#FF00FFD3");
+                this.SteeringRightBrushProperty = ( System.Windows.Media.Brush )new System.Windows.Media.BrushConverter().ConvertFromString( "#FF00FFD3" );
             }
             else
             {
@@ -271,18 +282,19 @@ namespace OHV.Module.Interactivity.PopUp
                 ControlKind = DriveControlEventArgs.eControlKind.JOG,
             };
 
-            if (obj.ToString().Equals("+"))
+            if ( obj.ToString().Equals( "+" ) )
                 msg.JogDir = DriveControlEventArgs.eJogMoveDir.Positive;
             else
                 msg.JogDir = DriveControlEventArgs.eJogMoveDir.Negative;
 
-            this.PublishEvent(msg);
+            this.PublishEvent( msg );
         }
 
         private void ExecuteJogVelPopupCommand()
         {
             var numPad = new CalcuratorView();
             var result = numPad.ShowDialog(this.JogVelocity);
+
             this.JogVelocity = result;
         }
 
@@ -324,132 +336,125 @@ namespace OHV.Module.Interactivity.PopUp
         }
 
         private void ExecutePositionSaveCommand()
-        {
+        { 
             this.messageController.ShowConfirmationPopupView("Save To Data ?", r =>
             {
-                if (r.Result == ButtonResult.OK)
-                {
-                    var ll = this.RouteList.ToList();
-                    ll.ForEach(x =>
-                    {
-                        var route = sql.RouteDal.GetK(x.Id);
-                        if (route == null) //DB 에 없다고 판단 추가
-                            sql.RouteDal.Add(x);
-                        else //Update
-                            sql.RouteDal.Update(x);
-                    });
-                    this.RefreshRouteList();
-                }
+              if (r.Result == ButtonResult.OK)
+              {
+                    //TODO:[20/03/18 ys-hwang] DB Table Update
+              }
             });
         }
 
         private void ExecutePositionDeleteCommand()
         {
-            this.messageController.ShowConfirmationPopupView("Select To Delete ?", r =>
-          {
-              if (r.Result == ButtonResult.OK)
-              {
-                  var deleteList = new List<Route>();
-
-                  foreach (var item in this.RouteList)
-                  {
-                      if (item.IsSelected)
-                          deleteList.Add(item);
-                  }
-                  deleteList.ForEach(x => { this.RouteList.Remove(x); });
-              }
-              this.RefreshRouteList();
-          });
+            this.messageController.ShowConfirmationPopupView( "Select To Delete ?" , r =>
+            {
+                if ( r.Result == ButtonResult.OK )
+                {
+                    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()
         {
-            this.messageController.ShowConfirmationPopupView("Position Add ?", r =>
-          {
-              if (r.Result == ButtonResult.OK)
-              {
-                  this.RouteList.Add(new Route());
-              }
-          });
+            this.messageController.ShowConfirmationPopupView( "Position Add ?" , r =>
+            {
+                if ( r.Result == ButtonResult.OK )
+                {
+                    this.RouteList.Add( new Route() );
+
+                    this.messageController.ShowNotificationView( "Create Success" );
+                }
+            } );
         }
 
         private void ExecuteKeyInCommadn(object obj)
         {
             var numPad = new CalcuratorView();
-            var result = numPad.ShowDialog(this.DriveTargetPos);
+            var result = numPad.ShowDialog(this.DriveTargetPos );
             this.DriveTargetPos = result;
         }
 
         private void ExecuteOriginCommand()
         {
-            this.messageController.ShowConfirmationPopupView("Origin ?", r =>
-          {
-              if (r.Result == ButtonResult.OK)
-              {
+            this.messageController.ShowConfirmationPopupView( "Origin ?" , r =>
+            {
+                if ( r.Result == ButtonResult.OK )
+                {
                     //TODO: How to use
                 }
-          });
+            } );
         }
 
         private void ExecuteFaultResetCommand()
         {
             var msg = new DriveControlEventArgs
             {
-                EventDir = DriveControlEventArgs.eEventDir.ToBack,
-                ControlKind = DriveControlEventArgs.eControlKind.FaultReset,
+                EventDir = DriveControlEventArgs.eEventDir.ToBack ,
+                ControlKind = DriveControlEventArgs.eControlKind.FaultReset ,
             };
 
-            this.PublishEvent(msg);
+            this.PublishEvent( msg );
         }
 
         private void ExecuteServoOffCommand()
         {
             var msg = new DriveControlEventArgs
             {
-                EventDir = DriveControlEventArgs.eEventDir.ToBack,
-                ControlKind = DriveControlEventArgs.eControlKind.DriveOFF,
+                EventDir = DriveControlEventArgs.eEventDir.ToBack ,
+                ControlKind = DriveControlEventArgs.eControlKind.DriveOFF ,
             };
 
-            this.PublishEvent(msg);
+            this.PublishEvent( msg );
         }
 
         private void ExecuteServoOnCommand()
         {
             var msg = new DriveControlEventArgs
             {
-                EventDir = DriveControlEventArgs.eEventDir.ToBack,
-                ControlKind = DriveControlEventArgs.eControlKind.DriveON,
+                EventDir = DriveControlEventArgs.eEventDir.ToBack ,
+                ControlKind = DriveControlEventArgs.eControlKind.DriveON ,
             };
 
-            this.PublishEvent(msg);
+            this.PublishEvent( msg );
         }
 
         private void ExecuteCurrentToTargetCommand()
         {
-            this.messageController.ShowConfirmationPopupView("Current To Target ?", r =>
-          {
-              if (r.Result == ButtonResult.OK)
-              {
-                  this.DriveTargetPos = this.CurrentDrive;
-              }
-          });
+            this.messageController.ShowConfirmationPopupView( "Current To Target ?" , r =>
+            {
+                if ( r.Result == ButtonResult.OK )
+                {
+                    this.DriveTargetPos = this.CurrentDrive;
+                }
+            } );
         }
 
         private void ExecuteMoveToCommand()
         {
-            this.messageController.ShowConfirmationPopupView("Move To Pos ?", r =>
-          {
-              if (r.Result == ButtonResult.OK)
-              {
-                  var msg = new DriveControlEventArgs
-                  {
-                      EventDir = DriveControlEventArgs.eEventDir.ToBack,
-                      ControlKind = DriveControlEventArgs.eControlKind.MOVE,
-                  };
+            this.messageController.ShowConfirmationPopupView( "Move To Pos ?" , r =>
+            {
+                if ( r.Result == ButtonResult.OK )
+                {
+                    var msg = new DriveControlEventArgs
+                    {
+                        EventDir = DriveControlEventArgs.eEventDir.ToBack ,
+                        ControlKind = DriveControlEventArgs.eControlKind.MOVE ,
+                        //PositionTag = 
+                    };
 
-                  this.PublishEvent(msg);
-              }
-          });
+                    this.PublishEvent( msg );
+                }
+            } );
         }
 
         private void ExecuteSelectPosCommand(object obj)
@@ -459,12 +464,6 @@ namespace OHV.Module.Interactivity.PopUp
 
         #endregion
 
-        void RefreshRouteList()
-        {
-            this.RouteList.Clear();
-            this.RouteList.AddRange(sql.RouteDal.All);
-        }
-
         #region Dialog Function
         public bool CanCloseDialog()
         {
@@ -473,8 +472,8 @@ namespace OHV.Module.Interactivity.PopUp
 
         public void OnDialogClosed()
         {
-            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish(new DriveControlEventArgs { EventDir = DriveControlEventArgs.eEventDir.ToBack, ControlKind = DriveControlEventArgs.eControlKind.ReqStopCurrentPos });
-            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe(DriveControlCallBack);
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish( new DriveControlEventArgs { EventDir = DriveControlEventArgs.eEventDir.ToBack , ControlKind = DriveControlEventArgs.eControlKind.ReqStopCurrentPos } );
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe( DriveControlCallBack );
         }
 
         public void OnDialogOpened(IDialogParameters parameters)
@@ -486,7 +485,7 @@ namespace OHV.Module.Interactivity.PopUp
             };
             this.PublishEvent(msg);
 
-            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish(new DriveControlEventArgs { EventDir = DriveControlEventArgs.eEventDir.ToBack, ControlKind = DriveControlEventArgs.eControlKind.ReqCurrentPos });
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish( new DriveControlEventArgs { EventDir = DriveControlEventArgs.eEventDir.ToBack , ControlKind = DriveControlEventArgs.eControlKind.ReqCurrentPos } );
         }
 
         private void CloseDialog(string parameter)

+ 1 - 1
Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoView.xaml

@@ -212,7 +212,7 @@
                     <Button Grid.Column="3" Grid.Row="1" HorizontalAlignment="Stretch" Margin="5" Height="auto"
                             Style="{StaticResource MaterialDesignRaisedButton}"
                             materialDesign:ButtonAssist.CornerRadius="10"
-                            ToolTip="MaterialDesignRaisedButton with Round Corners" Background="{c:Binding 'IsLeftServoOn ? media:Brushes.DodgerBlue : media:Brushes.Transparent'}">
+                            Background="{c:Binding 'IsLeftServoOn ? media:Brushes.DodgerBlue : media:Brushes.Transparent'}">
                         <StackPanel>
                             <TextBlock HorizontalAlignment="Center"><Run Text="Servo On"/></TextBlock>
                         </StackPanel>

+ 9 - 2
Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoViewModel.cs

@@ -437,8 +437,15 @@ namespace OHV.Module.Interactivity.PopUp
             {
                 if (r.Result == ButtonResult.OK)
                 {
-                    this.TargetPosLockLeft = this.CurrentLockLeft;
-                    this.TargetPosLockRight = this.CurrentLockRight;
+                    switch(this.SelectAxis)
+                    {
+                        case ConstString.AXIS_CARRIER_LOCK_LEFT:
+                            this.TargetPosLockLeft = this.CurrentLockLeft;
+                            break;
+                        case ConstString.AXIS_CARRIER_LOCK_RIGHT:
+                            this.TargetPosLockRight = this.CurrentLockRight;
+                            break;
+                    }
                 }
             });
         }

+ 59 - 13
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -179,8 +179,35 @@ namespace VehicleControlSystem.ControlLayer
 
             this.eventAggregator = ea;
 
-            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe(ReceiveDriveControlEvent);
-            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Subscribe(ReceiveDriveControlEvent);
+            /*Drive*/
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe( ReceiveDriveControlEvent );
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Subscribe( ReceiveDriveControlEvent );
+
+            /*IO*/
+            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Unsubscribe( ReceiveIOControlEvent );
+            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Subscribe( ReceiveIOControlEvent );
+        }
+
+        private void ReceiveIOControlEvent( IOControlEventArgs _args )
+        {
+            if ( this.autoManager.OperationModeProperty != eOperatationMode.ManualMode )
+                return;
+
+            var msg = _args;
+            if(msg.EventDir == IOControlEventArgs.eEventDir.ToBack)
+            {
+                switch ( msg.ControlKind )
+                {
+                    case IOControlEventArgs.eControlKind.USE:
+                        break;
+                    case IOControlEventArgs.eControlKind.ON:
+                        break;
+                    case IOControlEventArgs.eControlKind.OFF:
+                        break;
+                    case IOControlEventArgs.eControlKind.STATE:
+                        break;
+                }
+            }
         }
 
         private void ReceiveDriveControlEvent(DriveControlEventArgs _args)
@@ -194,6 +221,7 @@ namespace VehicleControlSystem.ControlLayer
                 switch (msg.ControlKind)
                 {
                     case DriveControlEventArgs.eControlKind.MOVE:
+                        this.ReqMoveToPos(_args);
                         break;
                     case DriveControlEventArgs.eControlKind.STOP:
                         break;
@@ -239,6 +267,10 @@ namespace VehicleControlSystem.ControlLayer
             }
         }
 
+
+
+        //private void DriveControlEventPublish( DriveControlEventArgs args ) { }
+
         private void DriveControlEventPublish(DriveControlEventArgs args)
         {
             args.EventDir = DriveControlEventArgs.eEventDir.ToFront;
@@ -276,6 +308,21 @@ namespace VehicleControlSystem.ControlLayer
         }
 
         #region Request Method
+
+        private void ReqMoveToPos( DriveControlEventArgs args )
+        {
+            var drive = 0;
+            //var result = drive.Move( args.PositionTag );
+
+            var msg = new DriveControlEventArgs
+            {
+                ControlKind = DriveControlEventArgs.eControlKind.FaultReset
+            };
+
+            msg.Result = Results.Ok( "Position Move" );
+            this.DriveControlEventPublish( msg );
+        }
+
         void ReqFaultReset(DriveControlEventArgs _args)
         {
             //TODO:[20/03/18 ys-hwang] Drive Assign
@@ -285,7 +332,7 @@ namespace VehicleControlSystem.ControlLayer
 
             var msg = new DriveControlEventArgs
             {
-
+                ControlKind = DriveControlEventArgs.eControlKind.FaultReset
             };
 
             msg.Result = Results.Ok("Drive On");
@@ -313,14 +360,14 @@ namespace VehicleControlSystem.ControlLayer
                 {
                     LockUtils.Wait(500);
 
-                    var msg = new DriveControlEventArgs
-                    {
-                        EventDir = DriveControlEventArgs.eEventDir.ToFront,
-                        ControlKind = DriveControlEventArgs.eControlKind.ReqCurrentPos,
-                         //CurrentPosition = drive.CurrentPosition,
+                     var msg = new DriveControlEventArgs
+                     {
+                         EventDir = DriveControlEventArgs.eEventDir.ToFront ,
+                         ControlKind = DriveControlEventArgs.eControlKind.ReqCurrentPos ,
+                         CurrentPosition = new Random().Next(0, 1000),
                      };
-
-                     //this.DriveControlEventPublish( msg );
+                     
+                     this.DriveControlEventPublish( msg );
                  }
             });
 
@@ -329,13 +376,12 @@ namespace VehicleControlSystem.ControlLayer
 
         void ReqDriveOn(DriveControlEventArgs _args)
         {
-            //TODO:[20/03/18 ys-hwang] Drive On
             var drive = "Drive Name";
             //drive.On();
 
             var msg = new DriveControlEventArgs
             {
-
+                ControlKind = DriveControlEventArgs.eControlKind.DriveON
             };
             msg.Result = Results.Ok("Drive On");
 
@@ -349,7 +395,7 @@ namespace VehicleControlSystem.ControlLayer
 
             var msg = new DriveControlEventArgs
             {
-
+                ControlKind = DriveControlEventArgs.eControlKind.DriveOFF
             };
             msg.Result = Results.Ok("Drive On");