Explorar o código

Popup-ui event 수정

ys-hwang %!s(int64=6) %!d(string=hai) anos
pai
achega
d1c228f526

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

@@ -93,6 +93,7 @@ namespace OHV.Common.Events
             ReqStopCurrentPosition,
             FaultReset,
             AxisState,
+            SyncMove,
         }
 
         public enum eJogMoveDir
@@ -101,13 +102,6 @@ namespace OHV.Common.Events
             Negative,
         }
 
-        public enum eAxises
-        {
-            LEFT = 0,
-            RIGHT,
-            LR_SYNC
-        }
-
         /// <summary>
         /// ConveyorPopupView -> Move 하기 위해 구분용으로 생성함
         /// </summary>
@@ -118,7 +112,6 @@ namespace OHV.Common.Events
         }
 
         public ePosDir PosDir { get; set; }
-        public eAxises Axis { get; set; }
         public eEventDir Dir { get; set; }
         public eAxisControlKind Kind { get; set; }
         public eJogMoveDir JogDir { get; set; }
@@ -168,6 +161,7 @@ namespace OHV.Common.Events
 
         public enum eControlKind
         {
+            NONE = -1,
             MOVE = 0,
             STOP,
             Steering,
@@ -179,7 +173,7 @@ namespace OHV.Common.Events
             DriveOFF,
             JOG,
             VehicleState,
-
+            Conveyor
         }
 
         public enum eJogMoveDir
@@ -193,11 +187,21 @@ namespace OHV.Common.Events
             LEFT = 0,
             RIGHT,
         }
+        
+        public enum eCvDir
+        {
+            NONE = -1,
+            CW = 0,
+            CCW,
+            STOP
+        }
 
         
         public double CurrentPosition { get; set; }
         public int TargetRouteID { get; set; }
 
+        public eCvDir CvDir { get; set; }
+
         public eJogMoveDir JogDir { get; set; }
         public eEventDir EventDir { get; set; }
         public eControlKind ControlKind { get; set; }
@@ -228,4 +232,31 @@ namespace OHV.Common.Events
         public object Args { get; set; }
     }
 
+    public class ObstacleControlEventArgs
+    {
+        public enum eEventDir
+        {
+            ToBack,
+            ToFront,
+        }
+
+        public enum eControlKind
+        {
+            NONE = -1,
+            DRIVE = 0,
+            CURVE,
+            STATE,
+            INFO,
+            SAVE
+        }
+
+        public int Drive { get; set; }
+        public int Curve { get; set; }
+        public string ObstacleState { get; set; }
+
+        public FluentResults.Result Result { get; set; }
+        public eControlKind ControlKind { get; set; }
+        public eEventDir EventDir { get; set; }
+        public object Args { get; set; }
+    }
 }

+ 2 - 0
Dev/OHV/OHV.Common/Events/PubSubEvent.cs

@@ -24,4 +24,6 @@ namespace OHV.Common.Events
     public class VehicleCommandListChanged : PubSubEvent<string> { }
     public class VehicleSubCmdListChanged : PubSubEvent<string> { }
 
+    public class ObstacleControlPubSubEvent : PubSubEvent<ObstacleControlEventArgs> { }
+
 }

+ 0 - 4
Dev/OHV/OHV.Common/OHV.Common.csproj

@@ -79,11 +79,7 @@
     <Compile Include="Model\SelectionItem.cs" />
     <Compile Include="Model\SelectionList.cs" />
     <Compile Include="Model\SubCmd.cs" />
-<<<<<<< HEAD
-    <Compile Include="Model\VehicleState.cs" />
-=======
     <Compile Include="Model\VehicleInfo.cs" />
->>>>>>> 06cd50a7615cca64bd11a5a71d408533b013704d
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Shareds\ConstString.cs" />
     <Compile Include="Shareds\SharedEnumType.cs" />

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

@@ -53,6 +53,8 @@
         Abnormal,
         Blocked,
         Decelerate,
+		DRIVE,
+		CURVE
     }
 
 	public enum eSteeringState

+ 14 - 14
Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlView.xaml

@@ -61,43 +61,43 @@
                         
                         <Button Background="{x:Null}">
                             <StackPanel Orientation="Horizontal">
-                                <Ellipse Margin="0,0,16,0" Width="20" Height="20" Fill="{Binding CvRun, FallbackValue=Red}"/>
-                                <TextBlock Text="CV RUN"/>
+                                <Ellipse Margin="0,0,16,0" Width="20" Height="20" Fill="{Binding CvError, FallbackValue=Gray}"/>
+                                <TextBlock Text="CV ERROR"/>
                             </StackPanel>
                         </Button>
 
                         <Button Background="{x:Null}">
                             <StackPanel Orientation="Horizontal">
-                                <Ellipse Margin="0,0,16,0" Width="20" Height="20" Fill="{Binding CvCWCCW, FallbackValue=Red}"/>
+                                <Ellipse Margin="0,0,38,0" Width="20" Height="20" Fill="{Binding CvCW, FallbackValue=Gray}"/>
                                 <TextBlock Text="CV CW"/>
                             </StackPanel>
                         </Button>
 
                         <Button Background="{x:Null}">
                             <StackPanel Orientation="Horizontal">
-                                <Ellipse Margin="0,0,16,0" Width="20" Height="20" Fill="{Binding CvCWCCW, FallbackValue=Red}"/>
+                                <Ellipse Margin="0,0,30,0" Width="20" Height="20" Fill="{Binding CvCCW, FallbackValue=Gray}"/>
                                 <TextBlock Text="CV CCW"/>
                             </StackPanel>
                         </Button>
 
                         <Button Background="{x:Null}">
                             <StackPanel Orientation="Horizontal">
-                                <Ellipse Margin="0,0,16,0" Width="20" Height="20" Fill="{Binding CvEntryIn, FallbackValue=Red}"/>
+                                <Ellipse Margin="0,0,16,0" Width="20" Height="20" Fill="{Binding CvEntryIn, FallbackValue=Gray}"/>
                                 <TextBlock Text="CV EntryIn"/>
                             </StackPanel>
                         </Button>
 
                         <Button Background="{x:Null}">
                             <StackPanel Orientation="Horizontal">
-                                <Ellipse Margin="0,0,16,0" Width="20" Height="20" Fill="{Binding CvSlowStop, FallbackValue=Red}"/>
+                                <Ellipse Margin="0,0,16,0" Width="20" Height="20" Fill="{Binding CvSlowStop, FallbackValue=Gray}"/>
                                 <TextBlock Text="CV Slow-S"/>
                             </StackPanel>
                         </Button>
 
                         <Button Background="{x:Null}">
                             <StackPanel Orientation="Horizontal">
-                                <Ellipse Margin="0,0,16,0" Width="20" Height="20" Fill="{Binding CvStop, FallbackValue=Red}"/>
-                                <TextBlock Text="CV Stop-S"/>
+                                <Ellipse Margin="0,0,30,0" Width="20" Height="20" Fill="{Binding CvStop, FallbackValue=Gray}"/>
+                                <TextBlock Text="CV Stop"/>
                             </StackPanel>
                         </Button>
 
@@ -169,28 +169,28 @@
                                     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"/>
+                                    <Ellipse Margin="0,0,18,0" Width="20" Height="20" Fill="{Binding AxisLeftIsOrg, FallbackValue=Gray}"/>
+                                    <TextBlock Text="Axis-L Is ORG"/>
                                 </StackPanel>
                             </Button>
 
                             <Button Background="{x:Null}">
                                 <StackPanel Orientation="Horizontal">
-                                    <Ellipse Margin="0,0,33,0" Width="20" Height="20" Fill="{Binding AxisLeftFault, FallbackValue=Red}"/>
+                                    <Ellipse Margin="0,0,33,0" Width="20" Height="20" Fill="{Binding AxisLeftAmpFault, FallbackValue=Gray}"/>
                                     <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"/>
+                                    <Ellipse Margin="0,0,16,0" Width="20" Height="20" Fill="{Binding AxisRightIsOrg, FallbackValue=Gray}"/>
+                                    <TextBlock Text="Axis-R Is ORG"/>
                                 </StackPanel>
                             </Button>
 
                             <Button Background="{x:Null}">
                                 <StackPanel Orientation="Horizontal">
-                                    <Ellipse Margin="0,0,30,0" Width="20" Height="20" Fill="{Binding AxisRightFault, FallbackValue=Red}"/>
+                                    <Ellipse Margin="0,0,30,0" Width="20" Height="20" Fill="{Binding AxisRightAmpFault, FallbackValue=Gray}"/>
                                     <TextBlock Text="Axis-R Fault"/>
                                 </StackPanel>
                             </Button>

+ 205 - 90
Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlViewModel.cs

@@ -1,5 +1,6 @@
 using GSG.NET.Extensions;
 using OHV.Common.Events;
+using OHV.Common.Model;
 using OHV.Common.Shareds;
 using Prism.Commands;
 using Prism.Events;
@@ -11,6 +12,8 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Input;
+using System.Windows.Media;
+using VehicleControlSystem;
 using VehicleControlSystem.ControlLayer.IO;
 using static OHV.Common.Events.AxisControlEventArgs;
 
@@ -35,6 +38,68 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
+        #region Brushes
+        private Brush _cvError = Brushes.Gray;
+        public Brush CvError { get { return _cvError; } set { SetProperty( ref _cvError , value ); } }
+
+        private Brush _cvStop = Brushes.Gray;
+        public Brush CvStop { get { return _cvStop; } set { SetProperty( ref _cvStop , value ); } }
+
+        private Brush _cvSlowStop = Brushes.Gray;
+        public Brush CvSlowStop { get { return _cvSlowStop; } set { SetProperty( ref _cvSlowStop , value ); } }
+
+        private Brush _cvEntryIn = Brushes.Gray;
+        public Brush CvEntryIn { get { return _cvEntryIn; } set { SetProperty( ref _cvEntryIn , value ); } }
+        private Brush _cvRun = Brushes.Gray;
+        public Brush CvRun { get { return _cvRun; } set { SetProperty( ref _cvRun , value ); } }
+
+        private Brush _cvCW = Brushes.Gray;
+        public Brush CvCW { get { return _cvCW; } set { SetProperty( ref _cvCW , value ); } }
+
+        private Brush _cvCCW = Brushes.Gray;
+        public Brush CvCCW { get { return _cvCCW; } set { SetProperty( ref _cvCCW , value ); } }
+
+        private Brush _axisLeftIsOrg = Brushes.Red;// = Brushes.Gray;
+        private Brush _axisLeftAmpFault = Brushes.Gray;// = Brushes.Gray;
+
+        private Brush _axisRightIsOrg = Brushes.Red;// = Brushes.Gray;
+        private Brush _axisRightAmpFault = Brushes.Gray;// = Brushes.Gray;
+
+        public Brush AxisLeftIsOrg
+        {
+            get { return _axisLeftIsOrg; }
+            set
+            {
+                SetProperty( ref _axisLeftIsOrg , value );
+            }
+        }
+        public Brush AxisLeftAmpFault
+        {
+            get { return _axisLeftAmpFault; }
+            set
+            {
+                SetProperty( ref _axisLeftAmpFault , value );
+            }
+        }
+        public Brush AxisRightIsOrg
+        {
+            get { return _axisRightIsOrg; }
+            set
+            {
+                SetProperty( ref _axisRightIsOrg , value );
+            }
+        }
+        public Brush AxisRightAmpFault
+        {
+            get { return _axisRightAmpFault; }
+            set
+            {
+                SetProperty( ref _axisRightAmpFault , value );
+            }
+        }
+
+        #endregion
+
         public ICommand ConveyorRunCommand { get; set; }
         public ICommand PosMoveCommand { get; set; }
 
@@ -43,13 +108,20 @@ namespace OHV.Module.Interactivity.PopUp
 
         List<BitBlock> allIOList = new List<BitBlock>();
 
-        public ConveyorControlViewModel( IEventAggregator _ea , MessageController _msg)
+        VCSystem VCSystem;
+        EzIO IO = null;
+
+        public ConveyorControlViewModel( IEventAggregator _ea , MessageController _msg, VCSystem _vcSystem)
         {
             this.eventAggregator = _ea;
 
-            /*IO Publish Event*/
-            //this.eventAggregator.GetEvent<IOControlPubSubEvent>().Unsubscribe( UICallbackCommunivation );
-            //this.eventAggregator.GetEvent<IOControlPubSubEvent>().Subscribe( UICallbackCommunivation , ThreadOption.UIThread );
+            this.VCSystem = _vcSystem;
+            this.IO = VCSystem.IO as EzIO;
+            this.IO.OnChangedIO += IO_OnChangedIO;
+
+            this.GetSensorState(this.IO);
+            //if ( this.IO.IsOn( "IN_CV_ERROR" ) )
+            //    this.CvError = Brushes.LimeGreen;
 
             /*Lock&UnLock Publish Event*/
             this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( AxisUICallbackCommunication );
@@ -65,9 +137,63 @@ namespace OHV.Module.Interactivity.PopUp
             this.PosMoveCommand = new DelegateCommand<object>( ExecutePosMoveCommand );
         }
 
+        private void GetSensorState( EzIO _iO )
+        {
+            //IO_OnChangedIO 중복됨 어쩌지
+            if ( _iO.IsOn( "IN_CV_ERROR" ) )
+                this.CvError = Brushes.LimeGreen;
+
+            if(_iO.IsOn( "IN_CV_DETECT_00" ) )
+                this.CvEntryIn = Brushes.LimeGreen;
+
+            if ( _iO.IsOn( "IN_CV_DETECT_01" ) )
+                this.CvSlowStop = Brushes.LimeGreen;
+
+            if ( _iO.IsOn( "IN_CV_DETECT_02" ) )
+                this.CvStop = Brushes.LimeGreen;
+        }
+
+        private void IO_OnChangedIO( BitBlock bit )
+        {
+            if ( bit.Tag.Equals( "IN_CV_ERROR" ) )
+                this.CvError = Brushes.LimeGreen;
+            else
+                this.CvError = Brushes.Gray;
+
+            if ( bit.Tag.Equals( "IN_CV_DETECT_00" ) )
+                this.CvEntryIn = Brushes.LimeGreen;
+            else
+                this.CvEntryIn = Brushes.Gray;
+
+            if ( bit.Tag.Equals( "IN_CV_DETECT_01" ) )
+                this.CvSlowStop = Brushes.LimeGreen;
+            else
+                this.CvSlowStop = Brushes.Gray;
+
+            if ( bit.Tag.Equals( "IN_CV_DETECT_02" ) )
+                this.CvStop = Brushes.LimeGreen;
+            else
+                this.CvStop = Brushes.Gray;
+
+            if ( bit.Tag.Equals( "OUT_CV_CWCCW" ) )
+            {
+                this.CvCW = Brushes.LimeGreen;
+                this.CvCCW = Brushes.Gray;
+            }
+            else
+            {
+                this.CvCW = Brushes.Gray;
+                this.CvCCW = Brushes.LimeGreen;
+            }
+        }
+
+        private void RspIOState( VCSMessageEventArgs args )
+        {
+            //var ioAll = args.Args as EzIO;
+        }
+
         private void UICallbackCommunication( GUIMessageEventArgs _args )
         {
-            //TODO:[20/03/20 ys-hwang] Conveyor 에서 Vehicle 상태를 쓸 항목이 있으런지? 쓴다면 State만??
             if( _args.Kind == GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange)
             {
                 if( _args.MessageKey.Equals(MessageKey.Vehicle))
@@ -83,30 +209,6 @@ namespace OHV.Module.Interactivity.PopUp
                     }
                 }
             }
-
-            switch ( _args.Kind )
-            {
-                case GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange:
-                    break;
-                case GUIMessageEventArgs.eGUIMessageKind.RspIOObject:
-                    break;
-                case GUIMessageEventArgs.eGUIMessageKind.RspIOMapList:
-                    break;
-                case GUIMessageEventArgs.eGUIMessageKind.RspCommandList:
-                    break;
-                case GUIMessageEventArgs.eGUIMessageKind.RspAutoModeChange:
-                    break;
-                case GUIMessageEventArgs.eGUIMessageKind.RspManualModeChange:
-                    break;
-                case GUIMessageEventArgs.eGUIMessageKind.RspAlarmReset:
-                    break;
-                case GUIMessageEventArgs.eGUIMessageKind.RspVehicleModeChange:
-                    break;
-                case GUIMessageEventArgs.eGUIMessageKind.RspEStop:
-                    break;
-                case GUIMessageEventArgs.eGUIMessageKind.RspVihicleState:
-                    break;
-            }
         }
 
         private void ChangeObstacleState( eObstacleState _reply )
@@ -125,7 +227,7 @@ namespace OHV.Module.Interactivity.PopUp
                     var msg = new AxisControlEventArgs
                     {
                         Dir = AxisControlEventArgs.eEventDir.ToBack ,
-                        Kind = AxisControlEventArgs.eAxisControlKind.Move ,
+                        Kind = AxisControlEventArgs.eAxisControlKind.SyncMove ,
                     };
 
                     switch ( selectedPos )
@@ -163,8 +265,7 @@ namespace OHV.Module.Interactivity.PopUp
                     case AxisControlEventArgs.eAxisControlKind.EStop:
                         break;
                     case AxisControlEventArgs.eAxisControlKind.Move:
-                        //Sync Move Success Return
-                        
+                        ResponseMove( _args );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.Jog:
                         break;
@@ -181,74 +282,93 @@ namespace OHV.Module.Interactivity.PopUp
                     case AxisControlEventArgs.eAxisControlKind.AxisState:
                         AxisState( _args );
                         break;
+                    case eAxisControlKind.SyncMove:
+                        if ( _args.Result.IsSuccess )
+                            this.messageController.ShowNotificationView( "Success" );
+                        else
+                            this.messageController.ShowNotificationView( "Fail" );
+                        break;
                 }
             }
         }
 
-        private void AxisState( AxisControlEventArgs args )
+        private void ResponseMove( AxisControlEventArgs _args )
         {
-            var left = args.Args[ "Left" ] as AxisState;
-            var right = args.Args[ "Right" ] as AxisState;
+            var msg = string.Empty;
 
-            //this.IsLeftServoOn = left.IsServoOn;
-            //this.IsLeftServoOriginReturn = left.IsOriginReturn;
-            //this.IsLeftServoFault = left.IsAmpFault;
-            //this.CurrentLockLeft = left.CurrentPosition;
+            if ( _args.Result.IsSuccess )
+                msg = ( "Move Success" );
+            else
+            {
+                var error = _args.Result.Errors.FirstOrDefault();
+                var alarm = error.Metadata[ "Alarm" ] as Alarm;
+                msg = alarm.Name + " " + alarm.Text;
+            }
 
-            //this.IsRightServoOn = right.IsServoOn;
-            //this.IsRightServoOriginReturn = right.IsOriginReturn;
-            //this.IsRightServoFault = right.IsAmpFault;
-            //this.CurrentLockRight = right.CurrentPosition;
+            this.messageController.ShowNotificationView( msg );
         }
 
-        private void UICallbackCommunivation( IOControlEventArgs _args )
+        private void AxisState( AxisControlEventArgs args )
         {
-            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;
-                }
-            }
+            var left = args.Args[ "Left" ] as AxisState;
+            var right = args.Args[ "Right" ] as AxisState;
+
+            if ( left.IsOriginReturn )
+                this.AxisLeftIsOrg = Brushes.LimeGreen;
+            else
+                this.AxisLeftIsOrg = Brushes.Red;
+
+            if ( left.IsAmpFault )
+                this.AxisLeftAmpFault = Brushes.Red;
+            else
+                this.AxisLeftAmpFault = Brushes.Gray;
+
+            if ( right.IsOriginReturn )
+                this.AxisRightIsOrg = Brushes.LimeGreen;
+            else
+                this.AxisRightIsOrg = Brushes.Red;
+
+            if ( right.IsAmpFault )
+                this.AxisRightAmpFault = Brushes.Red;
+            else
+                this.AxisRightAmpFault = Brushes.Gray;
         }
 
         private void ExecuteCvCommand( object _obj )
         {
             var type = _obj.ToString();
-            var order = string.Empty;
+            DriveControlEventArgs.eCvDir dir = DriveControlEventArgs.eCvDir.NONE;
 
-            switch(type)
+            switch ( type )
             {
                 case "CW":
-                    order = "OUT_CV_CWCCW";
+                    dir = DriveControlEventArgs.eCvDir.CW;
                     break;
                 case "CCW":
-                    order = "OUT_CV_CWCCW";
+                    dir = DriveControlEventArgs.eCvDir.CCW;
                     break;
                 case "STOP":
-                    order = "STOP";
+                    dir = DriveControlEventArgs.eCvDir.STOP;
                     break;
             }
 
-            var msg = new IOControlEventArgs
+            var msg = new DriveControlEventArgs
             {
-                EventDir = IOControlEventArgs.eEventDir.ToBack,
-                OutPutTag = order.ToString()
+                EventDir = DriveControlEventArgs.eEventDir.ToBack ,
+                ControlKind = DriveControlEventArgs.eControlKind.Conveyor ,
+                CvDir = dir
             };
-
             this.PublishEvent( msg );
         }
 
-        private void PublishEvent( IOControlEventArgs _args )
+        private void PublishEvent( DriveControlEventArgs _args )
+        {
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish( _args );
+        }
+
+        private void IOPublish( VCSMessageEventArgs _args )
         {
-            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Publish( _args );
+            this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( _args );
         }
 
         #region Dialog
@@ -259,42 +379,37 @@ namespace OHV.Module.Interactivity.PopUp
 
         public void OnDialogClosed( )
         {
-            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Publish( new IOControlEventArgs { EventDir = IOControlEventArgs.eEventDir.ToBack } );
-            this.eventAggregator.GetEvent<IOControlPubSubEvent>().Unsubscribe( UICallbackCommunivation );
-
-            //TODO:[03-14 ys-hwang] - Closed 해제 처리해줄때 Kind == OriginReturn 값이 들어와버림 그래서 NONE 생성 
             this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs 
             { 
                 Dir = AxisControlEventArgs.eEventDir.ToBack, 
                 Kind = AxisControlEventArgs.eAxisControlKind.NONE 
             } );
             this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( AxisUICallbackCommunication );
+
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish( new DriveControlEventArgs { EventDir = DriveControlEventArgs.eEventDir.ToBack , ControlKind = DriveControlEventArgs.eControlKind.ReqStopCurrentPos } );
+            //this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe( DriveControlCallBack );
+
+            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallbackCommunication );
         }
 
         public void OnDialogOpened( IDialogParameters parameters )
         {
             /*IO*/
-            var 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 } );
+            var msg = new VCSMessageEventArgs() { Kind = VCSMessageEventArgs.eVCSMessageKind.ReqIOObject };
+            this.eventAggregator.GetEvent<VCSMessagePubSubEvent>().Publish( msg );
 
             /*Lock Axis*/
-            var axisMsg = new AxisControlEventArgs
-            {
-                Dir = AxisControlEventArgs.eEventDir.ToBack ,
-                Kind = AxisControlEventArgs.eAxisControlKind.NONE
-            };
-
-            this.AxisPublishEvent(axisMsg);
-
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack , Kind = AxisControlEventArgs.eAxisControlKind.NONE } );
+            //var axisMsg = new AxisControlEventArgs
+            //{
+            //    Dir = AxisControlEventArgs.eEventDir.ToBack ,
+            //    Kind = AxisControlEventArgs.eAxisControlKind.NONE
+            //};
+            //this.AxisPublishEvent(axisMsg);
+
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack , Kind = AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition } );
         }
 
+
         private void CloseDialog( string parameter )
         {
             ButtonResult result = ButtonResult.None;

+ 5 - 6
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs

@@ -253,6 +253,8 @@ namespace OHV.Module.Interactivity.PopUp
             {
                 switch ( args.ControlKind )
                 {
+                    case DriveControlEventArgs.eControlKind.NONE:
+                        break;
                     case DriveControlEventArgs.eControlKind.MOVE:
                         ResponseMove(args);
                         break;
@@ -296,11 +298,8 @@ namespace OHV.Module.Interactivity.PopUp
 
         private void ResponseVehicleState(DriveControlEventArgs args)
         {
-<<<<<<< HEAD
-            var state = CastTo<VehicleState>.From<object>( args.Args );
-=======
-            var state = CastTo<VehicleInfo>.From<object>(args.Args);
->>>>>>> 06cd50a7615cca64bd11a5a71d408533b013704d
+            var state = CastTo<VehicleInfo>.From<object>( args.Args );
+
             this.CurrentDrive = state.CurrentPosition;
         }
 
@@ -564,7 +563,7 @@ namespace OHV.Module.Interactivity.PopUp
             };
             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 } );
         }
 
         private void CloseDialog(string parameter)

+ 3 - 3
Dev/OHV/OHV.Module.Interactivity/PopUp/InOutViewModel.cs

@@ -52,13 +52,13 @@ namespace OHV.Module.Interactivity.PopUp
 
         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 )
         {
-            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 )

+ 79 - 168
Dev/OHV/OHV.Module.Interactivity/PopUp/OpticalReadingConfigView.xaml

@@ -39,146 +39,14 @@
 
         <Grid Grid.Column="0" Margin="15" Background="#37474f">
             <Grid.ColumnDefinitions>
-                <ColumnDefinition Width="*"/>
-                <ColumnDefinition Width="*"/>
-                <ColumnDefinition Width="*"/>
+                <ColumnDefinition/>
+                <ColumnDefinition Width="2*"/>
             </Grid.ColumnDefinitions>
 
-            <!--<Border Grid.Column="0" Margin="23,22,23,17" BorderBrush="#FF00FFD3" BorderThickness="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>-->
-
-            <!--InPut-->
-            <!--<StackPanel Orientation="Vertical"
-                        VerticalAlignment="Center"
-                        HorizontalAlignment="Center"
-                        Grid.Column="0">
-
-                <materialDesign:Badged
-                    Badge="Detect Pattern"
-                    BadgeColorZoneMode="Dark"
-                    BadgePlacementMode="Top">
-                    <Button IsEnabled="False" Background="{x:Null}">
-                        <StackPanel>
-                            <TextBlock><Run Text="Pattern List"/></TextBlock>
-                        </StackPanel>
-                    </Button>
-                </materialDesign:Badged>
-
-                <ToggleButton Margin="15"
-                         Style="{StaticResource MaterialDesignActionToggleButton}"
-                         ToolTip="MaterialDesignActionLightToggleButton"
-                         Width="60"
-                         Height="60"
-                         Command="{Binding ResultPattern}"
-                         CommandParameter="1"
-                         IsChecked="{Binding ResultPatternOne}">
-                    <ToggleButton.Content>
-                        <materialDesign:PackIcon Height="30" Width="30" Kind="CloseBoxOutline"/>
-                    </ToggleButton.Content>
-                    <materialDesign:ToggleButtonAssist.OnContent>
-                        <materialDesign:PackIcon Height="30" Width="30" Kind="LedOn"/>
-                    </materialDesign:ToggleButtonAssist.OnContent>
-                </ToggleButton>
-
-                <TextBlock Text="Set Out#1" Margin="0,-15,0,0"
-                           VerticalAlignment="Center"
-                           HorizontalAlignment="Center"
-                           Foreground="Orange"/>
-
-                <ToggleButton Margin="15"
-                         Style="{StaticResource MaterialDesignActionToggleButton}"
-                         ToolTip="MaterialDesignActionLightToggleButton"
-                         Width="60"
-                         Height="60"
-                         Command="{Binding ResultPattern}"
-                         CommandParameter="2"
-                         IsChecked="{Binding ResultPatternTwo}">
-                    <ToggleButton.Content>
-                        <materialDesign:PackIcon Height="30" Width="30"
-                        Kind="CloseBoxOutline" />
-
-                    </ToggleButton.Content>
-                    <materialDesign:ToggleButtonAssist.OnContent>
-                        <materialDesign:PackIcon Height="30" Width="30"
-                        Kind="LedOn" />
-                    </materialDesign:ToggleButtonAssist.OnContent>
-                </ToggleButton>
-                <TextBlock Text="Set Out#2" Margin="0,-15,0,0"
-                           VerticalAlignment="Center"
-                           HorizontalAlignment="Center"
-                           Foreground="Orange"/>
-
-                <ToggleButton Margin="15"
-                         Style="{StaticResource MaterialDesignActionToggleButton}"
-                         ToolTip="MaterialDesignActionLightToggleButton"
-                         Width="60"
-                         Height="60"
-                         Command="{Binding ResultPattern}"
-                         CommandParameter="3"
-                         IsChecked="{Binding ResultPatternThree}">
-                    <ToggleButton.Content>
-                        <materialDesign:PackIcon Height="30" Width="30"
-                        Kind="CloseBoxOutline" />
-                    </ToggleButton.Content>
-                    <materialDesign:ToggleButtonAssist.OnContent>
-                        <materialDesign:PackIcon Height="30" Width="30"
-                        Kind="LedOn" />
-                    </materialDesign:ToggleButtonAssist.OnContent>
-                </ToggleButton>
-                <TextBlock Text="Set Out#3" Margin="0,-15,0,0"
-                           VerticalAlignment="Center"
-                           HorizontalAlignment="Center"
-                           Foreground="Orange"/>
-
-                <ToggleButton Margin="15"
-                         Style="{StaticResource MaterialDesignActionToggleButton}"
-                         ToolTip="MaterialDesignActionLightToggleButton"
-                         Width="60"
-                         Height="60"
-                         Command="{Binding ResultPattern}"
-                         CommandParameter="4"
-                         IsChecked="{Binding ResultPatternFour}">
-                    <ToggleButton.Content>
-                        <materialDesign:PackIcon Height="30" Width="30"
-                        Kind="CloseBoxOutline" />
-                    </ToggleButton.Content>
-                    <materialDesign:ToggleButtonAssist.OnContent>
-                        <materialDesign:PackIcon Height="30" Width="30"
-                        Kind="LedOn" />
-                    </materialDesign:ToggleButtonAssist.OnContent>
-                </ToggleButton>
-                <TextBlock Text="Set Out#4" Margin="0,-15,0,0"
-                           VerticalAlignment="Center"
-                           HorizontalAlignment="Center"
-                           Foreground="Orange"/>
-
-                <ToggleButton Margin="15"
-                         Style="{StaticResource MaterialDesignActionToggleButton}"
-                         ToolTip="MaterialDesignActionLightToggleButton"
-                         Width="60"
-                         Height="60"
-                         Command="{Binding ResultPattern}"
-                         CommandParameter="5"
-                         IsChecked="{Binding ResultPatternFive}">
-                    <ToggleButton.Content>
-                        <materialDesign:PackIcon Height="30" Width="30"
-                        Kind="CloseBoxOutline" />
-                    </ToggleButton.Content>
-                    <materialDesign:ToggleButtonAssist.OnContent>
-                        <materialDesign:PackIcon Height="30" Width="30"
-                        Kind="LedOn" />
-                    </materialDesign:ToggleButtonAssist.OnContent>
-                </ToggleButton>
-                <TextBlock Text="Set Out#5" Margin="0,-15,0,0"
-                           VerticalAlignment="Center"
-                           HorizontalAlignment="Center"
-                           Foreground="Orange"/>
-            </StackPanel>-->
-
-            <!--OutPut-->
             <Border Grid.Column="0" Margin="39,10" BorderBrush="#FF00FFD3" BorderThickness="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/>
             <StackPanel VerticalAlignment="Center"
                         HorizontalAlignment="Center"
-                        Grid.Column="0">
+                        Grid.Column="0" Margin="85,15">
                 <materialDesign:Badged Margin="5"
                                        Badge="Detect Area#1"
                                        BadgeColorZoneMode="Dark">
@@ -218,53 +86,96 @@
                 </materialDesign:Badged>
             </StackPanel>
 
-            <StackPanel Grid.Column="1"
-                        VerticalAlignment="Center"
-                        HorizontalAlignment="Right"
-                        Margin="15">
-                <Button Height="60">
-                    <StackPanel>
-                        <TextBlock><Run Text="Drive Pattern" FontSize="20"/></TextBlock>
-                    </StackPanel>
-                </Button>
-
-                <Button Background="{x:Null}" Height="60"
-                        Command="{Binding PatternResultKyein}"
-                        CommandParameter="D">
-                    <StackPanel>
-                        <TextBlock><Run Text="{Binding DrivePatternResult, FallbackValue=0}" FontSize="25" Foreground="Orange"/></TextBlock>
+            <Grid Grid.Column="0">
+                
+            </Grid>
+
+            <Grid Grid.Column="1">
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="*"/>
+                    <RowDefinition Height="*"/>
+                </Grid.RowDefinitions>
+
+                <Grid Grid.Row="0">
+                    <Border BorderBrush="Gray" BorderThickness="1"/>
+                    <StackPanel VerticalAlignment="Center"
+                                HorizontalAlignment="Center">
+                        <Button Height="60">
+                            <StackPanel>
+                                <TextBlock><Run Text="Obsatcle State" FontSize="20"/></TextBlock>
+                            </StackPanel>
+                        </Button>
+
+                        <Button Background="{x:Null}" Height="60">
+                            <StackPanel>
+                                <TextBlock><Run Text="{Binding ObstacleState, FallbackValue=NONE}" FontSize="25" Foreground="Orange"/></TextBlock>
+                            </StackPanel>
+                        </Button>
                     </StackPanel>
-                </Button>
-            </StackPanel>
+                </Grid>
+                
+                
+                <Grid Grid.Row="1">
+                    <Border BorderBrush="Gray" BorderThickness="1"/>
+                    <StackPanel Orientation="Horizontal"
+                                VerticalAlignment="Center"
+                                HorizontalAlignment="Center">
+                        <StackPanel Margin="5"
+                                    VerticalAlignment="Center"
+                                    HorizontalAlignment="Center">
+
+                            <Button Height="60">
+                                <StackPanel>
+                                    <TextBlock><Run Text="Drive Pattern" FontSize="20"/></TextBlock>
+                                </StackPanel>
+                            </Button>
+
+                            <Button Background="{x:Null}" Height="60"
+                                    Command="{Binding PatternResultKyein}"
+                                    CommandParameter="D">
+                                <StackPanel>
+                                    <TextBlock><Run Text="{Binding ObstacleDrive, FallbackValue=0}" FontSize="25" Foreground="Orange"/></TextBlock>
+                                </StackPanel>
+                            </Button>
+                        </StackPanel>
 
-            <StackPanel Grid.Column="2"
+                        <StackPanel Margin="5"
                         VerticalAlignment="Center"
-                        HorizontalAlignment="Left"
-                        Margin="15">
-                <Button Height="60">
-                    <StackPanel>
-                        <TextBlock><Run Text="Curve Pattern" FontSize="20"/></TextBlock>
-                    </StackPanel>
-                </Button>
+                        HorizontalAlignment="Center">
 
-                <Button Background="{x:Null}" Height="60"
+                            <Button Height="60">
+                                <StackPanel>
+                                    <TextBlock><Run Text="Curve Pattern" FontSize="20"/></TextBlock>
+                                </StackPanel>
+                            </Button>
+
+                            <Button Background="{x:Null}" Height="60"
                         Command="{Binding PatternResultKyein}"
                         CommandParameter="C">
-                    <!--<Button.InputBindings>
+                                <!--<Button.InputBindings>
                         <MouseBinding Gesture="LeftClick" Command="{Binding KeyInTargetPosCommand}" CommandParameter="Left"/>
                     </Button.InputBindings>-->
-                    
-                    <StackPanel>
-                        <TextBlock><Run Text="{Binding CurvePatternResult, FallbackValue=0}" FontSize="25" Foreground="Orange"/></TextBlock>
+
+                                <StackPanel>
+                                    <TextBlock><Run Text="{Binding ObstacleCurve, FallbackValue=0}" FontSize="25" Foreground="Orange"/></TextBlock>
+                                </StackPanel>
+                            </Button>
+                        </StackPanel>
                     </StackPanel>
-                </Button>
-            </StackPanel>
+                    
+                </Grid>
+
+            </Grid>
+
+           
+
+           
         </Grid>
 
         <!--Right Sub Menu Grid-->
         <Grid Grid.Column="1" Background="#37474f">
             <StackPanel>
-                
+
             </StackPanel>
         </Grid>
 

+ 120 - 100
Dev/OHV/OHV.Module.Interactivity/PopUp/OpticalReadingConfigViewModel.cs

@@ -1,4 +1,6 @@
-using OHV.Common.Events;
+using GSG.NET.Extensions;
+using OHV.Common.Events;
+using OHV.Common.Shareds;
 using Prism.Commands;
 using Prism.Events;
 using Prism.Mvvm;
@@ -11,6 +13,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using System.Windows.Input;
+using VehicleControlSystem;
 
 namespace OHV.Module.Interactivity.PopUp
 {
@@ -20,89 +23,6 @@ namespace OHV.Module.Interactivity.PopUp
         public DelegateCommand<string> CloseDialogCommand =>
             _closeDialogCommand ?? ( _closeDialogCommand = new DelegateCommand<string>( CloseDialog ) );
 
-        Brush _opReaderOutFirst = Brushes.Gray;
-        Brush _opReaderOutSecond = Brushes.Gray;
-        Brush _opReaderOutThird = Brushes.Gray;
-
-        public Brush OpReaderOutFirst
-        {
-            get { return this._opReaderOutFirst; }
-            set { this.SetProperty( ref this._opReaderOutFirst , value ); }
-        }
-        public Brush OpReaderOutSecond
-        {
-            get { return this._opReaderOutSecond; }
-            set { this.SetProperty( ref this._opReaderOutSecond , value ); }
-        }
-        public Brush OpreaderOutThird
-        {
-            get { return this._opReaderOutThird; }
-            set { this.SetProperty( ref this._opReaderOutThird , value ); }
-        }
-
-        private int _curvePatternResult;
-        public int CurvePatternResult
-        {
-            get { return this._curvePatternResult; }
-            set { this.SetProperty( ref this._curvePatternResult , value ); }
-        }
-
-        private int _drivePatternResult;
-        public int DrivePatternResult
-        {
-            get { return this._drivePatternResult; }
-            set { this.SetProperty( ref this._drivePatternResult , value ); }
-        }
-
-        private bool _resultPatternOne;
-        public bool ResultPatternOne
-        {
-            get { return this._resultPatternOne; }
-            set 
-            { 
-                this.SetProperty( ref this._resultPatternOne , value );
-            }
-        }
-
-        private bool _resultPatternTwo;
-        public bool ResultPatternTwo
-        {
-            get { return this._resultPatternTwo; }
-            set
-            {
-                this.SetProperty( ref this._resultPatternTwo , value );
-            }
-        }
-
-        private bool _resultPatternThree;
-        public bool ResultPatternThree
-        {
-            get { return this._resultPatternThree; }
-            set
-            {
-                this.SetProperty( ref this._resultPatternThree , value );
-            }
-        }
-
-        private bool _resultPatternFour;
-        public bool ResultPatternFour
-        {
-            get { return this._resultPatternFour; }
-            set
-            {
-                this.SetProperty( ref this._resultPatternFour , value );
-            }
-        }
-
-        private bool _resultPatternFive;
-        public bool ResultPatternFive
-        {
-            get { return this._resultPatternFive; }
-            set
-            {
-                this.SetProperty( ref this._resultPatternFive , value );
-            }
-        }
 
         private string _title = "SteeringConfigView";
         public string Title
@@ -127,6 +47,13 @@ namespace OHV.Module.Interactivity.PopUp
             set { this.SetProperty( ref this._obstacleCurve , value ); }
         }
 
+        string _obstacleState;
+        public string ObstacleState
+        {
+            get { return this._obstacleState; }
+            set { this.SetProperty( ref this._obstacleState , value ); }
+        }
+
         public ICommand DetectPatternSave { get; set; }
         public ICommand ResultPattern { get; set; }
         public ICommand PatternResultKyein { get; set; }
@@ -143,33 +70,114 @@ namespace OHV.Module.Interactivity.PopUp
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallbackCommunication );
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallbackCommunication, ThreadOption.UIThread );
 
+            this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Unsubscribe( ObstacleCallBackCommunication );
+            this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Subscribe( ObstacleCallBackCommunication , ThreadOption.UIThread );
+
             this.messageController = _msg;
 
             this.DetectPatternSave = new DelegateCommand( ExecuteDetectPatternSave );
-            this.ResultPattern = new DelegateCommand<object>( ExecuteResultPattern );
+            //this.ResultPattern = new DelegateCommand<object>( ExecuteResultPattern );
             this.PatternResultKyein = new DelegateCommand<object>( ExecutePatternResultKyein );
         }
 
+        private void ObstacleCallBackCommunication( ObstacleControlEventArgs obj )
+        {
+            // PopUp시 Sync
+            if(obj.EventDir == ObstacleControlEventArgs.eEventDir.ToFront)
+            {
+                switch ( obj.ControlKind )
+                {
+                    case ObstacleControlEventArgs.eControlKind.NONE:
+                        break;
+                    case ObstacleControlEventArgs.eControlKind.DRIVE:
+                        break;
+                    case ObstacleControlEventArgs.eControlKind.CURVE:
+                        break;
+                    case ObstacleControlEventArgs.eControlKind.STATE:
+                        break;
+                    case ObstacleControlEventArgs.eControlKind.INFO:
+                        this.ObstacleDrive = obj.Drive;
+                        this.ObstacleCurve = obj.Curve;
+                        this.ObstacleState = obj.ObstacleState;
+                        break;
+                    case ObstacleControlEventArgs.eControlKind.SAVE:
+                        ResponsePatternSave(obj);
+                        break;
+                }
+            }
+        }
+
+        private void ResponsePatternSave( ObstacleControlEventArgs args)
+        {
+            var msg = string.Empty;
+            if ( args.Result.IsSuccess )
+            {
+                msg = "Save Successs";
+            }
+            else
+            {
+                //var error = args.Result.Errors.FirstOrDefault();
+                //var alarm = error.Metadata[ "Alarm" ] as Alarm;
+                //msg = alarm.Name + " " + alarm.Text;
+                msg = "Save Fail";
+            }
+
+            this.messageController.ShowNotificationView( msg );
+        }
+
         private void UICallbackCommunication( GUIMessageEventArgs obj )
         {
+            // 상태변화 Response
+            if(obj.Kind == GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange)
+            {
+                if(obj.MessageKey.Equals(MessageKey.Vehicle))
+                {
+                    switch(obj.ModelPropertyName)
+                    {
+                        case "ObstacleStateProperty":
+                            var lazer = CastTo<eObstacleState>.From<object>( obj.Args );
+                            this.ChangeObstacleState( lazer );
+                            break;
+                        case "ObstacleDrive":
+                            var drive = CastTo<int>.From<object>( obj.Args );
+                            this.ObstacleDrive = drive;
+                            break;
+                        case "ObstacleCurve":
+                            var curve = CastTo<int>.From<object>( obj.Args );
+                            this.ObstacleCurve = curve;
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            }
+        }
 
+        private void ChangeObstacleState( eObstacleState lazer )
+        {
+            if ( lazer == eObstacleState.Abnormal )
+                this.ObstacleState = "Abnormal";
+            else if ( lazer == eObstacleState.Blocked )
+                this.ObstacleState = "Blocked";
+            else if ( lazer == eObstacleState.Decelerate )
+                this.ObstacleState = "Decelerate";
+            else
+                this.ObstacleState = "NORMAL";
         }
 
         private void ExecutePatternResultKyein( object obj)
         {
             var numpad = new CalcuratorView();
-            var result = numpad.ShowDialog(0);
-
-            var pattern = obj.ToString();
 
-            switch(pattern)
+            if (obj.ToString().Equals("D"))
+            {
+                var result = numpad.ShowDialog( this.ObstacleDrive );
+                this.ObstacleDrive = (int)result;
+            }
+            else
             {
-                case "C":
-                    this.CurvePatternResult = Convert.ToInt32( result );
-                    break;
-                case "D":
-                    this.DrivePatternResult = Convert.ToInt32( result );
-                    break;
+                var result = numpad.ShowDialog( this.ObstacleCurve );
+                this.ObstacleCurve = (int)result;
             }
         }
 
@@ -191,15 +199,23 @@ namespace OHV.Module.Interactivity.PopUp
             {
                 if ( r.Result == ButtonResult.OK )
                 {
-                    //bool[] bitResult = new bool[] { this.ResultPatternOne , this.ResultPatternTwo , this.ResultPatternThree , this.ResultPatternFour , this.ResultPatternFive };
-                    //var result = new System.Collections.BitArray( bitResult );
-                    //this.PatternResult = ConvertToByte( result );
-
-                    //this.Publish(this.PatternResult);
+                    var msg = new ObstacleControlEventArgs
+                    {
+                        Curve = this.ObstacleCurve ,
+                        Drive = this.ObstacleDrive,
+                        ControlKind = ObstacleControlEventArgs.eControlKind.SAVE
+                    };
+                    this.ObstaclePublishEvent( msg );
                 }
             } );
         }
 
+        private void ObstaclePublishEvent(ObstacleControlEventArgs _args)
+        {
+            _args.EventDir = ObstacleControlEventArgs.eEventDir.ToBack;
+            this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Publish( _args );
+        }
+
         #region Dialog Function
         public bool CanCloseDialog( )
         {
@@ -208,10 +224,14 @@ namespace OHV.Module.Interactivity.PopUp
 
         public void OnDialogClosed( )
         {
+            this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Publish( new ObstacleControlEventArgs { EventDir = ObstacleControlEventArgs.eEventDir.ToBack , ControlKind = ObstacleControlEventArgs.eControlKind.INFO } );
+            this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Unsubscribe( ObstacleCallBackCommunication );
         }
 
         public void OnDialogOpened( IDialogParameters parameters )
         {
+            this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Publish( new ObstacleControlEventArgs { EventDir = ObstacleControlEventArgs.eEventDir.ToBack , ControlKind = ObstacleControlEventArgs.eControlKind.INFO } );
+            //this.eventAggregator.GetEvent<ObstacleControlPubSubEvent>().Publish( new ObstacleControlEventArgs { EventDir = ObstacleControlEventArgs.eEventDir.ToBack , ControlKind = ObstacleControlEventArgs.eControlKind.CURVE } );
         }
 
         private void CloseDialog( string parameter )

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

@@ -37,6 +37,10 @@
     <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="GSG.NET, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Assambly\GSG.NET.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>

+ 7 - 10
Dev/OHV/OHV.Module.Status/VehicleStatusView.xaml

@@ -31,9 +31,9 @@
                         HorizontalAlignment="Center"
                         Grid.Column="0"
                         Grid.Row="1">
-                <TextBlock Margin="5" Text="Clamp State" Foreground="Silver" FontSize="25"/>
+                <TextBlock Margin="5" Text="Clamp" Foreground="Silver" FontSize="25"/>
                 <TextBlock Margin="5" HorizontalAlignment="Center" 
-                           Text="{Binding VehicleClampState, FallbackValue=OFF}" Foreground="Orange" FontSize="30"/>
+                           Text="{Binding ClampState, FallbackValue=OFF}" Foreground="Orange" FontSize="30"/>
             </StackPanel>
 
             <StackPanel Orientation="Vertical"
@@ -44,7 +44,7 @@
 
                 <TextBlock Margin="5" Text="Conveyor" Foreground="Silver" FontSize="25"/>
                 <TextBlock Margin="5" HorizontalAlignment="Center" 
-                           Text="{Binding VehicleCVState, FallbackValue=OFF}" Foreground="Orange" FontSize="30"/>
+                           Text="{Binding CvState, FallbackValue=OFF}" Foreground="Orange" FontSize="30"/>
             </StackPanel>
 
             <StackPanel Orientation="Vertical"
@@ -69,7 +69,7 @@
                            Text="{Binding VehicleState, FallbackValue=IDLE}" Foreground="Orange" FontSize="30"/>
             </StackPanel>
 
-            <StackPanel Orientation="Vertical"
+            <!--<StackPanel Orientation="Vertical"
                         VerticalAlignment="Center"
                         HorizontalAlignment="Left" 
                         Grid.Column="0"
@@ -95,11 +95,9 @@
                         <TextBlock Text="CV EntryIN"/>
                     </StackPanel>
                 </Button>
+            </StackPanel>-->
 
-                
-            </StackPanel>
-
-            <StackPanel Orientation="Vertical"
+            <!--<StackPanel Orientation="Vertical"
                         VerticalAlignment="Center"
                         HorizontalAlignment="Left" 
                         Grid.Column="1"
@@ -125,8 +123,7 @@
                         <TextBlock Text="CV-ERROR"/>
                     </StackPanel>
                 </Button>
-
-            </StackPanel>
+            </StackPanel>-->
         </Grid>
     </Grid>
 </UserControl>

+ 38 - 4
Dev/OHV/OHV.Module.Status/VehicleStatusViewModel.cs

@@ -1,4 +1,7 @@
-using Prism.Events;
+using GSG.NET.Extensions;
+using OHV.Common.Events;
+using OHV.Common.Shareds;
+using Prism.Events;
 using Prism.Mvvm;
 using System;
 using System.Collections.Generic;
@@ -20,18 +23,49 @@ namespace OHV.Module.Status
             set { this.SetProperty( ref this._vehicleState , value ); }
         }
         IEventAggregator eventAggregator;
-        
+
+
+        string _clampState = string.Empty;
+        public string ClampState
+        {
+            get { return this._clampState; }
+            set { this.SetProperty( ref this._clampState , value ); }
+        }
+
+        string _cvState = string.Empty;
+        public string CvState
+        {
+            get { return this._cvState; }
+            set { this.SetProperty( ref this._cvState , value ); }
+        }
 
         public VehicleStatusViewModel(IEventAggregator _ea, VCSystem _vcSystem )
         {
             this.eventAggregator = _ea;
+            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallBackCommunication );
+            this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallBackCommunication , ThreadOption.UIThread );
 
             this.vcSystem = _vcSystem;
 
             vcSystem.autoManager.OnOperationModeChanged += ( mode ) => { this.VehicleState = mode.ToString(); };
-            //this.vcSystem.autoManager.OperationModeChanged += () => { };//AutoManager_OperationModeChanged;
+            
+            
+        }
+
+        private void UICallBackCommunication( GUIMessageEventArgs obj )
+        {
+            if(obj.Kind == GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange)
+            {
+                if(obj.MessageKey.Equals(MessageKey.Vehicle))
+                {
+                    switch(obj.ModelPropertyName)
+                    {
+                        case "SteeringState":
+                            break;
+                    }
+                }
+            }
         }
-        
 
         public void Init( ) { }
     }

+ 4 - 4
Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs

@@ -350,7 +350,7 @@ namespace OHV.Vehicle.Concept
                 regionManager.RequestNavigate("MainView", selectItem);
         }
 
-        void VehicleModeChang(bool isAutoMode)
+        void VehicleModeChange(bool isAutoMode)
         {
             if (isAutoMode)
             {
@@ -398,8 +398,8 @@ namespace OHV.Vehicle.Concept
         {
             if ( obj.Result.IsSuccess)
             {
-                if (obj.MessageKey.Equals(MessageKey.AutoMode)) { this.VehicleModeChang(true); }
-                if (obj.MessageKey.Equals(MessageKey.ManualMode)) { this.VehicleModeChang(false); }
+                if (obj.MessageKey.Equals(MessageKey.AutoMode)) { this.VehicleModeChange(true); }
+                if (obj.MessageKey.Equals(MessageKey.ManualMode)) { this.VehicleModeChange(false); }
             }
             else
             {
@@ -413,7 +413,7 @@ namespace OHV.Vehicle.Concept
             {
                 var hisAlarm = args.Args as HisAlarm;
                 this.messageController.ShowNotificationView(args.MessageText);
-                this.VehicleModeChang(false);//알람이 발생하면 자동으로 Manual Mode 로 변경됨
+                this.VehicleModeChange(false);//알람이 발생하면 자동으로 Manual Mode 로 변경됨
             }
 
             if (args.MessageKey.Equals(MessageKey.Vehicle))

+ 44 - 7
Dev/OHV/VehicleControlSystem/ControlLayer/Clamp.cs

@@ -26,6 +26,8 @@ namespace VehicleControlSystem.ControlLayer
         IEventAggregator eventAggregator;
         TaskCancel taskCancel = new TaskCancel();
 
+        //TODO:[20/03/25 ys-hwang] Clamp State 필요함.
+
         public Clamp(SqliteManager sqliteManager, IEventAggregator ea)
         {
             this.sql = sqliteManager;
@@ -44,23 +46,23 @@ namespace VehicleControlSystem.ControlLayer
         {
             if (args.Dir == AxisControlEventArgs.eEventDir.ToBack)
             {
-                switch (args.Kind)
+                switch ( args.Kind )
                 {
                     case AxisControlEventArgs.eAxisControlKind.Stop:
                         break;
                     case AxisControlEventArgs.eAxisControlKind.EStop:
                         break;
                     case AxisControlEventArgs.eAxisControlKind.Move:
-                        this.ReqOrderByMove(args);
+                        this.ReqOrderByMove( args );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.Jog:
-                        this.ReqJog(args);
+                        this.ReqJog( args );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.ServoOn:
-                        this.ReqServoOn(args);
+                        this.ReqServoOn( args );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.ServoOff:
-                        this.ReqServoOff(args);
+                        this.ReqServoOff( args );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition:
                         this.ReqStartAxisState();
@@ -70,10 +72,17 @@ namespace VehicleControlSystem.ControlLayer
                         this.taskCancel.WaitAll();
                         break;
                     case AxisControlEventArgs.eAxisControlKind.OriginReturn:
-                        this.ReqOriginReturn(args);
+                        this.ReqOriginReturn( args );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.FaultReset:
-                        this.ReqFaultReset(args);
+                        this.ReqFaultReset( args );
+                        break;
+                    case eAxisControlKind.NONE:
+                        break;
+                    case eAxisControlKind.AxisState:
+                        break;
+                    case eAxisControlKind.SyncMove:
+                        this.ReqSyncMove(args);
                         break;
                     default:
                         break;
@@ -88,6 +97,34 @@ namespace VehicleControlSystem.ControlLayer
         }
 
         #region Request Method
+        private void ReqSyncMove( AxisControlEventArgs args )
+        {
+            var result = 0;
+            var reply = new AxisControlEventArgs
+            {
+                Kind = eAxisControlKind.SyncMove
+            };
+
+            if ( args.PosDir == ePosDir.Lock )
+            {
+                result = this.Lock_Sync();
+                if ( result == 0 )
+                    reply.Result = Results.Ok();
+                else
+                    reply.Result = Results.Fail( $"{result} Failed" );
+            }            
+            else
+            {
+                result = this.Unlock_Sync();
+                if ( result == 0 )
+                    reply.Result = Results.Ok();
+                else
+                    reply.Result = Results.Fail( $"{result} Failed" );
+            }
+
+            this.PublishEvent( reply );
+        }
+
         private void ReqFaultReset(AxisControlEventArgs args)
         {
             var axis = this.axes.Where(x => x.Config.AxisName.Equals(args.AxisName)).FirstOrDefault();

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 379 - 319
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs


+ 1 - 1
Dev/OHV/VehicleControlSystem/Managers/AutoManager.cs

@@ -206,7 +206,7 @@ namespace VehicleControlSystem.Managers
                     switch (this.AutoModeStateProperty)
                     {
                         case eAutoModeState.ErrorStop:
-                                this.AutoModeStateProperty = eAutoModeState.WaitStop;
+                            this.AutoModeStateProperty = eAutoModeState.WaitStop;
                             break;
                         case eAutoModeState.WaitStop:
                             this.AutoModeStateProperty = eAutoModeState.Stop;

+ 2 - 2
Dev/OHV/VehicleControlSystem/VCSystem.cs

@@ -25,7 +25,7 @@ namespace VehicleControlSystem
     {
         Scheduler scheduler = null;
         IEventAggregator eventAggregator = null;
-        IIO IO = null;
+        public IIO IO = null;
         public AutoManager autoManager = null;
         HostManager hostManager = null;
         Vehicle vehicle = null;
@@ -201,7 +201,7 @@ namespace VehicleControlSystem
             else
             {
                 this.autoManager.AutoModeStateProperty = OHV.Common.Shareds.eAutoModeState.WaitStop;
-                msg = new GUIMessageEventArgs { Kind = GUIMessageEventArgs.eGUIMessageKind.RspManualModeChange, Result = FluentResults.Results.Ok() };
+                msg = new GUIMessageEventArgs {Kind = GUIMessageEventArgs.eGUIMessageKind.RspManualModeChange, Result = FluentResults.Results.Ok() };
             }
 
             GUIMessageEventPublish(msg);