Parcourir la source

Drive View Steering 표시 변경, Drive, Lock View Open 시 Request Message Async 변경

DESKTOP-Kang il y a 6 ans
Parent
commit
2c74913e8e

BIN
Dev/OHV/Assambly/OHVConnector.dll


BIN
Dev/OHV/Assambly/OHVConnector.pdb


+ 149 - 139
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs

@@ -21,7 +21,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 = "DriveServoView";
         public string Title
@@ -29,7 +29,7 @@ namespace OHV.Module.Interactivity.PopUp
             get { return this._title; }
             set
             {
-                this.SetProperty(ref this._title, value);
+                this.SetProperty( ref this._title, value );
             }
         }
 
@@ -39,7 +39,7 @@ namespace OHV.Module.Interactivity.PopUp
             get => this._selectedPosition;
             set
             {
-                this.SetProperty(ref this._selectedPosition, value);
+                this.SetProperty( ref this._selectedPosition, value );
             }
         }
 
@@ -47,7 +47,7 @@ namespace OHV.Module.Interactivity.PopUp
         public string SelectDirection
         {
             get => this._selectDirection;
-            set { this.SetProperty(ref this._selectDirection, value); }
+            set { this.SetProperty( ref this._selectDirection, value ); }
         }
 
         #region Motor Left Binding Value
@@ -55,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 _currentPosition;
@@ -65,21 +65,21 @@ namespace OHV.Module.Interactivity.PopUp
         public double CurrentPosition
         {
             get { return this._currentPosition; }
-            set { this.SetProperty(ref this._currentPosition , value); }
+            set { this.SetProperty( ref this._currentPosition, value ); }
         }
 
         private double _differenceDrive;
         public double DifferenceDrive
         {
             get { return this._differenceDrive; }
-            set { this.SetProperty(ref this._differenceDrive, value); }
+            set { this.SetProperty( ref this._differenceDrive, value ); }
         }
 
         private double _jogVelocity = 5;
         public double JogVelocity
         {
             get { return this._jogVelocity; }
-            set { this.SetProperty(ref this._jogVelocity, value); }
+            set { this.SetProperty( ref this._jogVelocity, value ); }
         }
         #endregion
 
@@ -110,14 +110,14 @@ namespace OHV.Module.Interactivity.PopUp
         public Brush SteeringLeftBrushProperty
         {
             get { return steeringLeftBrush; }
-            set { SetProperty(ref this.steeringLeftBrush, value); }
+            set { SetProperty( ref this.steeringLeftBrush, value ); }
         }
 
         private Brush steeringRightBrush = Brushes.Gray;
         public Brush SteeringRightBrushProperty
         {
             get { return steeringRightBrush; }
-            set { SetProperty(ref this.steeringRightBrush, value); }
+            set { SetProperty( ref this.steeringRightBrush, value ); }
         }
         #endregion
 
@@ -125,21 +125,21 @@ namespace OHV.Module.Interactivity.PopUp
         public ObservableCollection<Route> RouteList
         {
             get { return this._routeList; }
-            set { SetProperty(ref this._routeList, value); }
+            set { SetProperty( ref this._routeList, value ); }
         }
 
         public SqliteDAL.DAL.AxisPositionDataDAL axisPositionDataDal;
         SqliteManager sql;
         MessageController messageController;
 
-        public DriveServoViewModel( IEventAggregator _ea , SqliteManager _sql , MessageController _messageController )
+        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>().Subscribe( DriveControlCallBack, ThreadOption.UIThread );
 
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallBackCommunication );
-            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallBackCommunication , ThreadOption.UIThread );
+            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallBackCommunication, ThreadOption.UIThread );
 
             this.sql = _sql;
             this.RouteList = new ObservableCollection<Route>( sql.RouteDal.All );
@@ -167,7 +167,7 @@ namespace OHV.Module.Interactivity.PopUp
             this.JogVelPopupCommand = new DelegateCommand( ExecuteJogVelPopupCommand );
             this.JogCommand = new DelegateCommand<object>( ExecuteJogCommand );
         }
-        
+
         private void UICallBackCommunication( GUIMessageEventArgs obj )
         {
             if ( obj.Kind == GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange )
@@ -190,7 +190,7 @@ namespace OHV.Module.Interactivity.PopUp
                             break;
                         case "CurrentPosition":
                             {
-                                var v = CastTo<double>.From<object>(obj.Args);
+                                var v = CastTo<double>.From<object>( obj.Args );
                                 this.CurrentPosition = v;
                             }
                             break;
@@ -232,32 +232,37 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
-        private void DriveControlCallBack( DriveControlEventArgs args)
+        private void DriveControlCallBack( DriveControlEventArgs args )
         {
-            if (args.EventDir == DriveControlEventArgs.eEventDir.ToFront)
+            if ( args.EventDir == DriveControlEventArgs.eEventDir.ToFront )
             {
                 switch ( args.ControlKind )
                 {
                     case DriveControlEventArgs.eControlKind.NONE:
                         break;
                     case DriveControlEventArgs.eControlKind.MOVE:
-                        ResponseMove(args);
+                        ResponseMove( args );
                         break;
                     case DriveControlEventArgs.eControlKind.STOP:
                         break;
                     case DriveControlEventArgs.eControlKind.Steering:
-                        //if ( args.Result.IsSuccess )
-                        //{
-                        //    var dir = args.Result.ToResult<DriveControlEventArgs.eMoveDir>().Value;
-                        //    this.ChangeSteeringDirection( dir == DriveControlEventArgs.eMoveDir.LEFT ? true : false );
-                        //}
+                        if ( args.Result.IsSuccess )
+                        {
+                            var dir = args.Result.ToResult<eSteeringState>().Value;
+                            this.ChangeSteeringDirection( dir );
+
+                        }
                         break;
                     case DriveControlEventArgs.eControlKind.SteeringState:
-                        //if ( args.Result.IsSuccess )
-                        //{
-                        //    var dir = args.Result.ToResult<DriveControlEventArgs.eMoveDir>().Value;
-                        //    this.ChangeSteeringDirection( dir == DriveControlEventArgs.eMoveDir.LEFT ? true : false );
-                        //}
+                        if ( args.Result.IsSuccess )
+                        {
+                            var dir = args.Result.ToResult<eSteeringState>().Value;
+                            this.ChangeSteeringDirection( dir );
+                        }
+                        else
+                        {
+                            this.ChangeSteeringDirection( eSteeringState.None );
+                        }
                         break;
                     case DriveControlEventArgs.eControlKind.ReqCurrentPos:
                         this.CurrentPosition = args.CurrentPosition;
@@ -273,7 +278,7 @@ namespace OHV.Module.Interactivity.PopUp
                     case DriveControlEventArgs.eControlKind.JOG:
                         break;
                     case DriveControlEventArgs.eControlKind.VehicleState:
-                        ResponseVehicleState(args);
+                        ResponseVehicleState( args );
                         break;
                     default:
                         break;
@@ -281,47 +286,47 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
-        private void ResponseVehicleState(DriveControlEventArgs args)
+        private void ResponseVehicleState( DriveControlEventArgs args )
         {
             var state = CastTo<VehicleInfo>.From<object>( args.Args );
 
-            this.CurrentPosition = state.CurrentPosition;            
+            this.CurrentPosition = state.CurrentPosition;
         }
 
         private void ResponseMove( DriveControlEventArgs args )
         {
             var msg = string.Empty;
-            if(args.Result.IsSuccess)
+            if ( args.Result.IsSuccess )
             {
                 msg = "Move Successs";
             }
             else
             {
                 var error = args.Result.Errors.FirstOrDefault();
-                var alarm = error.Metadata[ "Alarm" ] as Alarm;
+                var alarm = error.Metadata["Alarm"] as Alarm;
                 msg = alarm.Name + " " + alarm.Text;
             }
 
             this.messageController.ShowNotificationView( msg );
         }
 
-        void PublishEvent(DriveControlEventArgs args)
+        void PublishEvent( DriveControlEventArgs args )
         {
             args.EventDir = DriveControlEventArgs.eEventDir.ToBack;
-            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish(args);
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish( args );
         }
 
-        void ChangeSteeringDirection(eSteeringState state)
+        void ChangeSteeringDirection( eSteeringState state )
         {
             if ( state == eSteeringState.Left )
             {
-                this.SteeringLeftBrushProperty = ( Brush )new BrushConverter().ConvertFromString( "#FF00FFD3" );
+                this.SteeringLeftBrushProperty = (Brush)new BrushConverter().ConvertFromString( "#FF00FFD3" );
                 this.SteeringRightBrushProperty = Brushes.Gray;
             }
             else if ( state == eSteeringState.Right )
             {
                 this.SteeringLeftBrushProperty = Brushes.Gray;
-                this.SteeringRightBrushProperty = ( Brush )new BrushConverter().ConvertFromString( "#FF00FFD3" );
+                this.SteeringRightBrushProperty = (Brush)new BrushConverter().ConvertFromString( "#FF00FFD3" );
             }
             else
             {
@@ -331,7 +336,7 @@ namespace OHV.Module.Interactivity.PopUp
         }
 
         #region Execute Method
-        private void ExecuteJogCommand(object obj)
+        private void ExecuteJogCommand( object obj )
         {
             if ( this.JogVelocity <= 0 )
             {
@@ -356,17 +361,17 @@ namespace OHV.Module.Interactivity.PopUp
         private void ExecuteJogVelPopupCommand()
         {
             var numPad = new CalcuratorView();
-            var result = numPad.ShowDialog(this.JogVelocity);
+            var result = numPad.ShowDialog( this.JogVelocity );
 
             this.JogVelocity = result;
         }
 
-        private void ExecuteSelectedDirection(object obj)
+        private void ExecuteSelectedDirection( object obj )
         {
             this.SelectDirection = obj.ToString();
         }
 
-        private void ExecuteSteeringCCWCommand(object obj)
+        private void ExecuteSteeringCCWCommand( object obj )
         {
             var msg = new DriveControlEventArgs
             {
@@ -374,15 +379,15 @@ namespace OHV.Module.Interactivity.PopUp
                 ControlKind = DriveControlEventArgs.eControlKind.Steering,
             };
 
-            if (obj.ToString().Equals("CCW"))
+            if ( obj.ToString().Equals( "CCW" ) )
                 msg.MoveDir = DriveControlEventArgs.eMoveDir.RIGHT;
             else
                 msg.MoveDir = DriveControlEventArgs.eMoveDir.LEFT;
 
-            this.PublishEvent(msg);
+            this.PublishEvent( msg );
         }
 
-        private void ExecuteSteeringCWCommand(object obj)
+        private void ExecuteSteeringCWCommand( object obj )
         {
             var msg = new DriveControlEventArgs
             {
@@ -390,87 +395,87 @@ namespace OHV.Module.Interactivity.PopUp
                 ControlKind = DriveControlEventArgs.eControlKind.Steering,
             };
 
-            if (obj.ToString().Equals("CW"))
+            if ( obj.ToString().Equals( "CW" ) )
                 msg.MoveDir = DriveControlEventArgs.eMoveDir.LEFT;
             else
                 msg.MoveDir = DriveControlEventArgs.eMoveDir.RIGHT;
 
-            this.PublishEvent(msg);
+            this.PublishEvent( msg );
         }
 
         private void ExecutePositionSaveCommand()
-        { 
-            this.messageController.ShowConfirmationPopupView("Save To Data ?", r =>
-            {
-              if (r.Result == ButtonResult.OK)
-              {
-                    var result = this.RouteList.Any( x => x.IsSelected != false );
+        {
+            this.messageController.ShowConfirmationPopupView( "Save To Data ?", r =>
+             {
+                 if ( r.Result == ButtonResult.OK )
+                 {
+                     var result = this.RouteList.Any( x => x.IsSelected != false );
 
-                    if ( !result )
-                    {
-                        this.messageController.ShowNotificationView( "Pos Not Selected" );
-                        return;
-                    }
+                     if ( !result )
+                     {
+                         this.messageController.ShowNotificationView( "Pos Not Selected" );
+                         return;
+                     }
 
-                    var ll = this.RouteList.Where( x => x.IsSelected ).FirstOrDefault();                    
-                }
-            });
+                     var ll = this.RouteList.Where( x => x.IsSelected ).FirstOrDefault();
+                 }
+             } );
         }
 
         private void ExecutePositionDeleteCommand()
         {
-            this.messageController.ShowConfirmationPopupView( "Select To Delete ?" , r =>
-            {
-                if ( r.Result == ButtonResult.OK )
-                {
-                    var deleteList = new List<Route>();
+            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 ); } );
-                }
-            } );
+                   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" );
-                }
-            } );
+                   this.messageController.ShowNotificationView( "Create Success" );
+               }
+           } );
         }
 
-        private void ExecuteKeyInCommadn(object obj)
+        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 )
+               {
+               }
+           } );
         }
 
         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 );
@@ -480,8 +485,8 @@ namespace OHV.Module.Interactivity.PopUp
         {
             var msg = new DriveControlEventArgs
             {
-                EventDir = DriveControlEventArgs.eEventDir.ToBack ,
-                ControlKind = DriveControlEventArgs.eControlKind.DriveOFF ,
+                EventDir = DriveControlEventArgs.eEventDir.ToBack,
+                ControlKind = DriveControlEventArgs.eControlKind.DriveOFF,
             };
 
             this.PublishEvent( msg );
@@ -491,8 +496,8 @@ namespace OHV.Module.Interactivity.PopUp
         {
             var msg = new DriveControlEventArgs
             {
-                EventDir = DriveControlEventArgs.eEventDir.ToBack ,
-                ControlKind = DriveControlEventArgs.eControlKind.DriveON ,
+                EventDir = DriveControlEventArgs.eEventDir.ToBack,
+                ControlKind = DriveControlEventArgs.eControlKind.DriveON,
             };
 
             this.PublishEvent( msg );
@@ -500,43 +505,43 @@ namespace OHV.Module.Interactivity.PopUp
 
         private void ExecuteCurrentToTargetCommand()
         {
-            this.messageController.ShowConfirmationPopupView( "Current To Target ?" , r =>
-            {
-                if ( r.Result == ButtonResult.OK )
-                {
-                    this.DriveTargetPos = this.CurrentPosition;
-                }
-            } );
+            this.messageController.ShowConfirmationPopupView( "Current To Target ?", r =>
+           {
+               if ( r.Result == ButtonResult.OK )
+               {
+                   this.DriveTargetPos = this.CurrentPosition;
+               }
+           } );
         }
 
         private void ExecuteMoveToCommand()
         {
-            this.messageController.ShowConfirmationPopupView( "Move To Selected Position ?" , r =>
-            {
-                if ( r.Result == ButtonResult.OK )
-                {
-                    var result = this.RouteList.Any( x => x.IsSelected != false );
-                    if ( !result )
-                    {
-                        this.messageController.ShowNotificationView( "Pos Not Selected" );
-                        return;
-                    }
+            this.messageController.ShowConfirmationPopupView( "Move To Selected Position ?", r =>
+           {
+               if ( r.Result == ButtonResult.OK )
+               {
+                   var result = this.RouteList.Any( x => x.IsSelected != false );
+                   if ( !result )
+                   {
+                       this.messageController.ShowNotificationView( "Pos Not Selected" );
+                       return;
+                   }
 
-                    var ll = this.RouteList.Where(x => x.IsSelected).FirstOrDefault();
+                   var ll = this.RouteList.Where( x => x.IsSelected ).FirstOrDefault();
 
-                    var msg = new DriveControlEventArgs
-                    {
-                        EventDir = DriveControlEventArgs.eEventDir.ToBack,
-                        ControlKind = DriveControlEventArgs.eControlKind.MOVE,
-                        TargetRouteID = ll.Id,
-                    };
+                   var msg = new DriveControlEventArgs
+                   {
+                       EventDir = DriveControlEventArgs.eEventDir.ToBack,
+                       ControlKind = DriveControlEventArgs.eControlKind.MOVE,
+                       TargetRouteID = ll.Id,
+                   };
 
-                    this.PublishEvent( msg );
-                }
-            } );
+                   this.PublishEvent( msg );
+               }
+           } );
         }
 
-        private void ExecuteSelectPosCommand(object obj)
+        private void ExecuteSelectPosCommand( object obj )
         {
             this.SelectedPosition = obj.ToString();
         }
@@ -551,37 +556,42 @@ 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>().Publish( new DriveControlEventArgs { EventDir = DriveControlEventArgs.eEventDir.ToBack, ControlKind = DriveControlEventArgs.eControlKind.ReqStopCurrentPos } );
             this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe( DriveControlCallBack );
         }
 
-        public void OnDialogOpened(IDialogParameters parameters)
+        public async void OnDialogOpened( IDialogParameters parameters )
         {
-            var msg = new DriveControlEventArgs
+            Task task = Task.Run( () =>
             {
-                EventDir = DriveControlEventArgs.eEventDir.ToBack,
-                ControlKind = DriveControlEventArgs.eControlKind.SteeringState,
-            };
-            this.PublishEvent(msg);
+                var msg = new DriveControlEventArgs
+                {
+                    EventDir = DriveControlEventArgs.eEventDir.ToBack,
+                    ControlKind = DriveControlEventArgs.eControlKind.SteeringState,
+                };
+                this.PublishEvent( msg );
+
+                this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish( new DriveControlEventArgs { EventDir = DriveControlEventArgs.eEventDir.ToBack, ControlKind = DriveControlEventArgs.eControlKind.VehicleState } );
+            } );
 
-            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish( new DriveControlEventArgs { EventDir = DriveControlEventArgs.eEventDir.ToBack , ControlKind = DriveControlEventArgs.eControlKind.VehicleState } );
+            await task;
         }
 
-        private void CloseDialog(string parameter)
+        private void CloseDialog( string parameter )
         {
             ButtonResult result = ButtonResult.None;
 
-            if (parameter?.ToLower() == "true")
+            if ( parameter?.ToLower() == "true" )
                 result = ButtonResult.OK;
-            else if (parameter?.ToLower() == "false")
+            else if ( parameter?.ToLower() == "false" )
                 result = ButtonResult.Cancel;
 
-            RaiseRequestClose(new DialogResult(result));
+            RaiseRequestClose( new DialogResult( result ) );
         }
 
-        public virtual void RaiseRequestClose(IDialogResult dialogResult)
+        public virtual void RaiseRequestClose( IDialogResult dialogResult )
         {
-            RequestClose?.Invoke(dialogResult);
+            RequestClose?.Invoke( dialogResult );
         }
         #endregion
     }

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

@@ -9,6 +9,7 @@ using Prism.Services.Dialogs;
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Threading.Tasks;
 using System.Windows.Input;
 using System.Windows.Media;
 using static OHV.Common.Events.AxisControlEventArgs;
@@ -635,9 +636,10 @@ namespace OHV.Module.Interactivity.PopUp
             this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( AxisUICallbackCommunication );
         }
 
-        public void OnDialogOpened( IDialogParameters parameters )
+        public async void OnDialogOpened( IDialogParameters parameters )
         {
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack , Kind = AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition } );
+            Action action = new Action(() => this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack, Kind = AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition } ) );
+            await Task.Run( action );
         }
 
         public virtual void RaiseRequestClose( IDialogResult dialogResult )

+ 9 - 10
Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/BMUManager.cs

@@ -17,14 +17,10 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
     {
         static Logger logger = Logger.GetLogger();
 
-        Peak peakCom = null;
-        Advantech adCom = null;
-
         ICanConnecter can = null;
 
         public Config BMUConfig { get; set; }
         public bool IsConnected { get { return this.can.IsConnected; } }
-        //public bool IsConnected { get { return this.peakCom.IsConnected; } }
 
         internal Dictionary<eDataKind, ReceivedData> ReceivedDataDic = new Dictionary<eDataKind , DataModel.ReceivedData>();
         protected TsQueue<QueObject> qq = new TsQueue<QueObject>( 512 );
@@ -216,6 +212,9 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
     #region Public Method
         public void Connect(eCANSelect select)
         {
+#if SIMULATION
+            return;
+#else
             //외부 전달 시작
             this.cancel.AddGo( _ThPullQueue );
 
@@ -232,22 +231,22 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
                     this.cancel.AddGo( this.can._ThreadPoolingReceiveData );
                     break;
             }
+#endif
         }
 
         public void Disconnect()
         {
+#if SIMULATION
+            return;
+#else
             collectNo = 0;
             //Thread Stop
             this.cancel.Cancel();
             this.qq.Enqueue( new QoDispose() );
             this.cancel.StopWaitAll();
+#endif
         }
 
-        public void test()
-        {
-            var clone = this.ReceivedDataDic.Values.FirstOrDefault(); 
-            this.qq.Enqueue( new QoReceivedDataChanged { Arg0 = clone } );
-        }
-    #endregion
+#endregion
     }
 }

+ 40 - 77
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -124,7 +124,7 @@ namespace VehicleControlSystem.ControlLayer
         private int _obstacleCurve;
         public int ObstacleCurve { get { return this._obstacleCurve; } set { SetField( ref this._obstacleCurve, value ); } }
         private int obstacleCurrent;
-        public int ObstacleCurrent { get { return this.ObstacleCurrent; } set { SetField( ref this.obstacleCurrent , value ); } }
+        public int ObstacleCurrent { get { return this.ObstacleCurrent; } set { SetField( ref this.obstacleCurrent, value ); } }
 
         private eObstacleState obstacleState = eObstacleState.Normal;
         public eObstacleState ObstacleStateProperty
@@ -434,9 +434,12 @@ namespace VehicleControlSystem.ControlLayer
                             var reply = new DriveControlEventArgs();
                             reply.ControlKind = DriveControlEventArgs.eControlKind.SteeringState;
                             if ( this.steering.IsLeft() )
-                                reply.Result = FluentResults.Results.Ok<DriveControlEventArgs.eMoveDir>( DriveControlEventArgs.eMoveDir.LEFT );
+                                reply.Result = FluentResults.Results.Ok<eSteeringState>( eSteeringState.Left );
+                            else if ( this.steering.IsRight() )
+                                reply.Result = FluentResults.Results.Ok<eSteeringState>( eSteeringState.Right );
                             else
-                                reply.Result = FluentResults.Results.Ok<DriveControlEventArgs.eMoveDir>( DriveControlEventArgs.eMoveDir.RIGHT );
+                                reply.Result = FluentResults.Results.Fail(new Error());
+
                             this.DriveControlEventPublish( reply );
                         }
                         break;
@@ -927,7 +930,7 @@ namespace VehicleControlSystem.ControlLayer
             //}
             int result = 0;
 
-            this.iO.OutputOff( "OUT_PIO_SENSOR_ONOFF" );
+            this.PIOSensorOn();
             result = this.PIOAndLoad( sub.TargetID );
             if ( result != 0 )
             {
@@ -935,7 +938,7 @@ namespace VehicleControlSystem.ControlLayer
                 this.OccurVehicleAlarm( result );
                 return false;
             }
-            this.iO.OutputOn( "OUT_PIO_SENSOR_ONOFF" );
+            this.PIOSensorOff();
 
             //PIO 내부 이동.
             //result = this.clamp.Lock_Sync();
@@ -974,7 +977,7 @@ namespace VehicleControlSystem.ControlLayer
             //    return false;
             //}
 
-            this.iO.OutputOff( "OUT_PIO_SENSOR_ONOFF" );
+            this.PIOSensorOn();
 
             int result = 0;
             result = this.PIOAndUnload( sub.TargetID );
@@ -984,7 +987,8 @@ namespace VehicleControlSystem.ControlLayer
                 this.OccurVehicleAlarm( result );
                 return false;
             }
-            this.iO.OutputOn( "OUT_PIO_SENSOR_ONOFF" );
+
+            this.PIOSensorOff();
 
             sql.CommandDAL.UpdateState( sub.CmdID, eCommandState.Complete );
             sql.SubCmdDAL.Delete( sub );
@@ -998,11 +1002,8 @@ namespace VehicleControlSystem.ControlLayer
         {
             this.VehicleStateProperty = eVehicleState.Charge;
 
-            this.iO.OutputOff( "OUT_PIO_SENSOR_ONOFF" );
-
-            this.PIOBatteryCharge( subCmd );
-
-            this.iO.OutputOn( "OUT_PIO_SENSOR_ONOFF" );
+            int result = 0;
+            result = this.StartBatteryCharge();
 
             sql.CommandDAL.UpdateState( subCmd.CmdID, eCommandState.Complete );
             sql.SubCmdDAL.Delete( subCmd );
@@ -1084,67 +1085,10 @@ namespace VehicleControlSystem.ControlLayer
             return 0;
         }
 
-        public bool IsCharging { get; set; } = true;
-        public void ManualBatteryCharge()
+        public int StartBatteryCharge()
         {
-            this.VehicleStateProperty = eVehicleState.Charge;
-
-            var pioTimeout = sql.ConfigDal.GetValueToInt( ConstString.PIOTimeOut );
-
-            PIOClear();
-            if ( !this.iO.IsOn( "IN_PIO_READY" ) )
-            {
-                loggerPIO.E( "[Port] - 1 Ready not On" );
-                this.OccurVehicleAlarm( 25 );
-                return;
-            }
-
-            this.iO.WriteOutputIO( "OUT_PIO_READY", true );
-            loggerPIO.I( "[Vehicle] - 1 Ready On" );
-
-            if ( !this.iO.WaitChangeInputIO( true, pioTimeout, "IN_PIO_RECEIVE_RUN" ) )
-            {
-                PIOClear();
-                loggerPIO.E( "[Port] - 2 Receive CV Run Timeout" );
-                this.OccurVehicleAlarm( 26 );
-                return;
-            }
-
-            this.iO.WriteOutputIO( "OUT_PIO_SENDING_RUN", true );
-            loggerPIO.I( "[Vehicle] - 2 Send Run On" );
-
-            var sTime = SwUtils.CurrentTimeMillis;
-            while ( true )
-            {
-                LockUtils.Wait( 10 );
-
-                if ( !this.iO.IsOn( "IN_PIO_READY" ) || this.iO.IsOn( "IN_PIO_RECEIVE_RUN" ) )
-                    break;
+            this.PIOSensorOn();
 
-                if ( !this.IsCharging )
-                    break;
-            }
-            this.IsCharging = true;
-
-            if ( !this.iO.WaitChangeInputIO( true, pioTimeout, "IN_PIO_RECEIVE_COMPLITE" ) )
-            {
-                PIOClear();
-                loggerPIO.E( "[Port] - 3 Receive Complete Timeout" );
-                this.OccurVehicleAlarm( 26 );
-                return;
-            }
-
-            PIOClear();
-
-            this.iO.WriteOutputIO( "OUT_PIO_SEND_COMPLITE", true );
-            Thread.Sleep( 1000 );
-            this.iO.WriteOutputIO( "OUT_PIO_SEND_COMPLITE", false );
-
-            this.VehicleStateProperty = eVehicleState.Idle;
-        }
-
-        public void StartBatteryCharge()
-        {
             var pioTimeout = sql.ConfigDal.GetValueToInt( ConstString.PIOTimeOut );
 
             PIOClear();
@@ -1157,7 +1101,7 @@ namespace VehicleControlSystem.ControlLayer
             {
                 PIOClear();
                 loggerPIO.E( "[Port] - 4 Ready Time Out" );
-                return;
+                return 9999;
             }
             loggerPIO.E( "[Port] - 4 Ready On" );
 
@@ -1169,14 +1113,16 @@ namespace VehicleControlSystem.ControlLayer
             {
                 PIOClear();
                 loggerPIO.E( "[Port] - 5 Sending Run Time Out" );
-                return;
+                return 9999;
             }
             loggerPIO.I( "[Port] - 5 Sending Run On" );
 
             this.VehicleStateProperty = eVehicleState.Charge;
+
+            return 0;
         }
 
-        public void StopBatteryCharge()
+        public int StopBatteryCharge()
         {
             loggerPIO.I( $"Stop Battery Charge PIO" );
 
@@ -1190,12 +1136,18 @@ namespace VehicleControlSystem.ControlLayer
             {
                 this.iO.WriteOutputIO( "OUT_PIO_RECIVE_COMPLITE", false );
                 loggerPIO.E( "[Port]  IN_PIO_SEND_COMPLITE On Time Out" );
+                return 9999;
             }
             loggerPIO.I( "[Port] Send Complete On" );
 
-            this.iO.WriteOutputIO( "OUT_PIO_RECIVE_COMPLITE", false, 1000 );
+            Thread.Sleep( 1000 );
+            this.iO.WriteOutputIO( "OUT_PIO_RECIVE_COMPLITE", false );
+
+            this.PIOSensorOff();
 
             this.VehicleStateProperty = eVehicleState.Idle;
+
+            return 0;
         }
 
         #endregion
@@ -1242,6 +1194,17 @@ namespace VehicleControlSystem.ControlLayer
 
         #region Mechanical Method
 
+        #region IO
+        /// <summary>
+        /// Out Put 을 On 이면 Sensor Off
+        /// </summary>
+        public void PIOSensorOn() => this.iO.OutputOff( "OUT_PIO_SENSOR_ONOFF" );
+        /// <summary>
+        /// Out Put 을 Off 이면 Sensor On
+        /// </summary>
+        public void PIOSensorOff() => this.iO.OutputOn( "OUT_PIO_SENSOR_ONOFF" );
+        #endregion
+
         #region Drive
         public void DriveServoOff() => this.drive.ServoOff();
         public void DriveServoOn() => this.drive.ServoOn();
@@ -1400,7 +1363,7 @@ namespace VehicleControlSystem.ControlLayer
 
             loggerPIO.I( $"End Load PIO - [{targetName}]" );
 #endif
-            result = this.clamp.Lock_Sync();
+            int result = this.clamp.Lock_Sync();
             if ( result != 0 )
             {
                 this.OccurVehicleAlarm( result );
@@ -1585,7 +1548,7 @@ namespace VehicleControlSystem.ControlLayer
             this.bMUManager.Connect( canType );
         }
 
-        private void BMUManager_OnDisconnect( string obj)
+        private void BMUManager_OnDisconnect( string obj )
         {
             this.BatteryIsConnect = false;
             this.OccurVehicleAlarm( 32 );

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

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