ys-hwang 6 лет назад
Родитель
Сommit
eef332823d

+ 14 - 12
Dev/OHV/OHV.Common/Events/MessageEventArgs.cs

@@ -34,7 +34,7 @@ namespace OHV.Common.Events
         public string MessageKey { get; set; }
         public string MessageText { get; set; }
         public Command Command { get; set; }
-        public Dictionary<string, object> Dic { get; set; }
+        public Dictionary<string , object> Dic { get; set; }
         public object Args { get; set; }
         public FluentResults.Result Result { get; set; }
 
@@ -62,13 +62,14 @@ namespace OHV.Common.Events
             ReqAlarmReset,
             ReqVehicleModeChange,
             ReqEStop,
+            ReqBuzzerStop,
         }
 
         public eVCSMessageKind Kind { get; set; }
         public string MessageKey { get; set; }
         public string MessageText { get; set; }
         public Command Command { get; set; }
-        public Dictionary<string, object> Args { get; set; }
+        public Dictionary<string , object> Args { get; set; }
     }
 
     public class AxisControlEventArgs : EventArgs
@@ -94,6 +95,7 @@ namespace OHV.Common.Events
             FaultReset,
             AxisState,
             SyncMove,
+            SyncState,
         }
 
         public enum eJogMoveDir
@@ -118,7 +120,7 @@ namespace OHV.Common.Events
         public string AxisName { get; set; }
         public double CurrentPosition { get; set; }
 
-        public Dictionary<string, object> Args { get; set; }
+        public Dictionary<string , object> Args { get; set; }
 
         public Result Result { get; set; }
 
@@ -131,13 +133,13 @@ namespace OHV.Common.Events
         }
     }
 
-    public class IOChangedMessageEventArgs: EventArgs
-    {
-        public object Args { get; set; }
-    }
+    public class IOChangedMessageEventArgs : EventArgs
+        {
+            public object Args { get; set; }
+        }
 
-    public class HostConnectedEventArgs : EventArgs 
-    { 
+    public class HostConnectedEventArgs : EventArgs
+    {
         public enum eConnectedState
         {
             Disconnected,
@@ -145,7 +147,7 @@ namespace OHV.Common.Events
         }
         public eConnectedState State { get; set; }
 
-        public HostConnectedEventArgs(eConnectedState state)
+        public HostConnectedEventArgs( eConnectedState state )
         {
             this.State = state;
         }
@@ -187,7 +189,7 @@ namespace OHV.Common.Events
             LEFT = 0,
             RIGHT,
         }
-        
+
         public enum eCvDir
         {
             NONE = -1,
@@ -196,7 +198,7 @@ namespace OHV.Common.Events
             STOP
         }
 
-        
+
         public double CurrentPosition { get; set; }
         public int TargetRouteID { get; set; }
 

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

@@ -63,6 +63,13 @@
 		Left,
 		Right,
 	}
+
+	public enum eClampState
+	{
+		NONE = 0,
+		LOCK,
+		UNLOCK
+	}
     #endregion
 
     #region Opertation

+ 18 - 7
Dev/OHV/OHV.Module.Interactivity/PopUp/ConveyorControlViewModel.cs

@@ -59,11 +59,11 @@ namespace OHV.Module.Interactivity.PopUp
         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 _axisLeftIsOrg = Brushes.Red;
+        private Brush _axisLeftAmpFault = Brushes.Gray;
 
-        private Brush _axisRightIsOrg = Brushes.Red;// = Brushes.Gray;
-        private Brush _axisRightAmpFault = Brushes.Gray;// = Brushes.Gray;
+        private Brush _axisRightIsOrg = Brushes.Red;
+        private Brush _axisRightAmpFault = Brushes.Gray;
 
         public Brush AxisLeftIsOrg
         {
@@ -118,10 +118,7 @@ namespace OHV.Module.Interactivity.PopUp
             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 );
@@ -151,6 +148,20 @@ namespace OHV.Module.Interactivity.PopUp
 
             if ( _iO.IsOn( "IN_CV_DETECT_02" ) )
                 this.CvStop = Brushes.LimeGreen;
+
+            if ( _iO.IsOn( "OUT_CV_RUN" , false ) )
+                this.CvRun = Brushes.LimeGreen;
+
+            if(_iO.IsOn( "OUT_CV_CWCCW", false ) )
+            {
+                this.CvCW = Brushes.LimeGreen;
+                this.CvCCW = Brushes.Gray;
+            }
+            else
+            {
+                this.CvCW = Brushes.Gray;
+                this.CvCCW = Brushes.LimeGreen;
+            }
         }
 
         private void IO_OnChangedIO( BitBlock bit )

+ 7 - 7
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoView.xaml

@@ -278,10 +278,10 @@
         <!--Sub Drive Menu-->
         <Grid Grid.Column="1" Background="#263238">
             <StackPanel Orientation="Vertical" VerticalAlignment="Top">
-                <Button Margin="7, 10" HorizontalAlignment="Stretch" Height="60" BorderBrush="Gray" BorderThickness="2" 
+                <!--<Button Margin="7, 10" HorizontalAlignment="Stretch" Height="60" BorderBrush="Gray" BorderThickness="2" 
                         Command="{Binding PositionAddCommand}">
                     <StackPanel>
-                        <!--<materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        --><!--<materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>--><!--
                         <TextBlock Text="Add" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                     </StackPanel>
                 </Button>
@@ -289,23 +289,23 @@
                 <Button Margin="7, 10" HorizontalAlignment="Stretch" Height="60" BorderBrush="Gray" BorderThickness="2" 
                         Command="{Binding PositionDeleteCommand}">
                     <StackPanel>
-                        <!--<materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        --><!--<materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>--><!--
                         <TextBlock Text="Delete" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                     </StackPanel>
-                </Button>
+                </Button>-->
 
             </StackPanel>
 
             <StackPanel Grid.Column="1" VerticalAlignment="Center" Orientation="Vertical"
                         Margin="0,130,0,0">
-                <Button Margin="7" HorizontalAlignment="Stretch" Height="60" BorderBrush="Gray" BorderThickness="2" 
+                <!--<Button Margin="7" HorizontalAlignment="Stretch" Height="60" BorderBrush="Gray" BorderThickness="2" 
                         Command="{Binding CurrentToTargetCommand}">
                     <StackPanel>
-                        <!--<materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>-->
+                        --><!--<materialDesign:PackIcon Kind="PowerSettings" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="42" Width="auto"/>--><!--
                         <TextBlock Text="Current To" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                         <TextBlock Text="Target" VerticalAlignment="Stretch" HorizontalAlignment="Center"/>
                     </StackPanel>
-                </Button>
+                </Button>-->
 
                 <Button Margin="7" HorizontalAlignment="Stretch" Height="60" BorderBrush="Gray" BorderThickness="2" 
                         Command="{Binding MoveToCommand}">

+ 40 - 25
Dev/OHV/OHV.Module.Interactivity/PopUp/DriveServoViewModel.cs

@@ -129,7 +129,7 @@ namespace OHV.Module.Interactivity.PopUp
         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 );
@@ -140,32 +140,32 @@ namespace OHV.Module.Interactivity.PopUp
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallBackCommunication , ThreadOption.UIThread );
 
             this.sql = _sql;
-            this.RouteList = new ObservableCollection<Route>(sql.RouteDal.All);
+            this.RouteList = new ObservableCollection<Route>( sql.RouteDal.All );
 
             this.messageController = _messageController;
 
-            this.SelectPosCommand = new DelegateCommand<object>(ExecuteSelectPosCommand);
-            this.MoveToCommand = new DelegateCommand(ExecuteMoveToCommand);
-            this.CurrentToTargetCommand = new DelegateCommand(ExecuteCurrentToTargetCommand);
-            this.KeyInTargetPosCommand = new DelegateCommand<object>(ExecuteKeyInCommadn);
+            this.SelectPosCommand = new DelegateCommand<object>( ExecuteSelectPosCommand );
+            this.MoveToCommand = new DelegateCommand( ExecuteMoveToCommand );
+            this.CurrentToTargetCommand = new DelegateCommand( ExecuteCurrentToTargetCommand );
+            this.KeyInTargetPosCommand = new DelegateCommand<object>( ExecuteKeyInCommadn );
 
-            this.ServoOnCommand = new DelegateCommand(ExecuteServoOnCommand);
-            this.ServoOffCommand = new DelegateCommand(ExecuteServoOffCommand);
-            this.FaultResetCommand = new DelegateCommand(ExecuteFaultResetCommand);
-            this.OriginCommand = new DelegateCommand(ExecuteOriginCommand);
+            this.ServoOnCommand = new DelegateCommand( ExecuteServoOnCommand );
+            this.ServoOffCommand = new DelegateCommand( ExecuteServoOffCommand );
+            this.FaultResetCommand = new DelegateCommand( ExecuteFaultResetCommand );
+            this.OriginCommand = new DelegateCommand( ExecuteOriginCommand );
 
-            this.PositionAddCommand = new DelegateCommand(ExecutePositionAddCommand);
-            this.PositionDeleteCommand = new DelegateCommand(ExecutePositionDeleteCommand);
-            this.PositionSaveCommand = new DelegateCommand(ExecutePositionSaveCommand);
+            this.PositionAddCommand = new DelegateCommand( ExecutePositionAddCommand );
+            this.PositionDeleteCommand = new DelegateCommand( ExecutePositionDeleteCommand );
+            this.PositionSaveCommand = new DelegateCommand( ExecutePositionSaveCommand );
 
-            this.SelectedDirection = new DelegateCommand<object>(ExecuteSelectedDirection);
-            this.SteeringCWCommand = new DelegateCommand<object>(ExecuteSteeringCWCommand);
-            this.SteeringCCWCommand = new DelegateCommand<object>(ExecuteSteeringCCWCommand);
+            this.SelectedDirection = new DelegateCommand<object>( ExecuteSelectedDirection );
+            this.SteeringCWCommand = new DelegateCommand<object>( ExecuteSteeringCWCommand );
+            this.SteeringCCWCommand = new DelegateCommand<object>( ExecuteSteeringCCWCommand );
 
-            this.JogVelPopupCommand = new DelegateCommand(ExecuteJogVelPopupCommand);
-            this.JogCommand = new DelegateCommand<object>(ExecuteJogCommand);
+            this.JogVelPopupCommand = new DelegateCommand( ExecuteJogVelPopupCommand );
+            this.JogCommand = new DelegateCommand<object>( ExecuteJogCommand );
         }
-
+        
         private void UICallBackCommunication( GUIMessageEventArgs obj )
         {
             //Property 상태가 바뀔때 마다 표현만 하면 된다?
@@ -220,8 +220,6 @@ namespace OHV.Module.Interactivity.PopUp
 
         private void ChagneVehicleState( eVehicleState v )
         {
-            //TODO:[20/03/20 ys-hwang] Vehicle Manual Move 할때? 상태를 보고 해야?, 아니면 Manual 이니까???? 
-            // 아니면 busy 상태 확인만 ?
             switch ( v )
             {
                 case eVehicleState.None:
@@ -347,6 +345,12 @@ namespace OHV.Module.Interactivity.PopUp
         #region Execute Method
         private void ExecuteJogCommand(object obj)
         {
+            if ( this.JogVelocity <= 0 )
+            {
+                this.messageController.ShowNotificationView( "Check Jog Velocity" );
+                return;
+            }
+
             var msg = new DriveControlEventArgs
             {
                 EventDir = DriveControlEventArgs.eEventDir.ToBack,
@@ -413,7 +417,16 @@ namespace OHV.Module.Interactivity.PopUp
               if (r.Result == ButtonResult.OK)
               {
                     //TODO:[20/03/18 ys-hwang] DB Table Update
-              }
+                    // check selected table
+                    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();                    
+                }
             });
         }
 
@@ -461,7 +474,6 @@ namespace OHV.Module.Interactivity.PopUp
             {
                 if ( r.Result == ButtonResult.OK )
                 {
-                    //TODO: How to use
                 }
             } );
         }
@@ -517,9 +529,12 @@ namespace OHV.Module.Interactivity.PopUp
                 if ( r.Result == ButtonResult.OK )
                 {
                     //TODO:[20/03/20 ys-hwang] RoutList.IsSelected Check
-                    //if(this.RouteList.Any( x => x.IsSelected != true ))
-                    //    return;
                     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();
 

+ 7 - 6
Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoView.xaml

@@ -331,9 +331,9 @@
                             Grid.Column="1"
                             HorizontalAlignment="Stretch"
                             Height="auto"
-                            Command="{Binding JogCommand}" CommandParameter="-">
+                            Command="{Binding JogCommand}" CommandParameter="-" Width="90">
                                 <StackPanel>
-                                    <materialDesign:PackIcon Kind="ArrowLeftBoldCircleOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="30" Width="auto"/>
+                                    <materialDesign:PackIcon Kind="MinusBoxOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="30" Width="auto"/>
                                     <TextBlock><Run Text="Jog(-)"/></TextBlock>
                                 </StackPanel>
                             </RepeatButton>
@@ -347,9 +347,10 @@
                             BadgeForeground="Aqua"
                             VerticalAlignment="Center"
                             HorizontalAlignment="Center">
-                                <Button Margin="15" VerticalAlignment="Center" HorizontalAlignment="Center" Height="60" Width="Auto" >
+                                <Button Margin="15" VerticalAlignment="Center" HorizontalAlignment="Center" Height="80" Width="70"
+                                        Command="{Binding JogVelPopupCommand}">
                                     <StackPanel>
-                                        <TextBlock Text="0.000"/>
+                                        <TextBlock Text="{Binding JogVelocity, StringFormat={}{0:0.000}, FallbackValue=0.00}" Foreground="Orange" FontSize="20"/>
                                     </StackPanel>
                                 </Button>
                             </materialDesign:Badged>
@@ -360,9 +361,9 @@
                             Grid.Column="3"
                             HorizontalAlignment="Stretch"
                             Height="auto"
-                            Command="{Binding JogCommand}" CommandParameter="+">
+                            Command="{Binding JogCommand}" CommandParameter="+" Width="90">
                                 <StackPanel>
-                                    <materialDesign:PackIcon Kind="ArrowRightBoldCircleOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="30" Width="auto"/>
+                                    <materialDesign:PackIcon Kind="PlusBoxOutline" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="30" Width="auto"/>
                                     <TextBlock><Run Text="Jog(+)"/></TextBlock>
                                 </StackPanel>
                             </RepeatButton>

+ 23 - 1
Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoViewModel.cs

@@ -49,6 +49,13 @@ namespace OHV.Module.Interactivity.PopUp
             }
         }
 
+        double _jogVelocity;
+        public double JogVelocity
+        {
+            get { return this._jogVelocity; }
+            set { this.SetProperty( ref this._jogVelocity , value ); }
+        }
+
         #region Binding Lock Left
         private double _targetPosLockLeft;
         public double TargetPosLockLeft
@@ -184,6 +191,7 @@ namespace OHV.Module.Interactivity.PopUp
         public ICommand OriginCommand { get; set; }
         public ICommand JogCommand { get; set; }
         public ICommand SelectedPosDataSave { get; set; }
+        public ICommand JogVelPopupCommand { get; set; }
 
         public event Action<IDialogResult> RequestClose;
 
@@ -206,6 +214,7 @@ namespace OHV.Module.Interactivity.PopUp
 
             this.SelectedPosDataSave = new DelegateCommand<object>( ExecuteSelectedPosDataSave );
             this.JogCommand = new DelegateCommand<object>( ExecuteJogCommand );
+            this.JogVelPopupCommand = new DelegateCommand( ExecuteJogVelPopup );
 
             this.eventAggregator = ea;
             this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( AxisUICallbackCommunication );
@@ -227,6 +236,14 @@ namespace OHV.Module.Interactivity.PopUp
             this.PosLockBrush = Brushes.Orange;
         }
 
+        private void ExecuteJogVelPopup( )
+        {
+            var numPad = new CalcuratorView();
+            var result = numPad.ShowDialog( this.JogVelocity );
+
+            this.JogVelocity = result;
+        }
+
         private void UICallbackCommunication( GUIMessageEventArgs obj )
         {
             if ( obj.Kind == GUIMessageEventArgs.eGUIMessageKind.ModelPropertyChange )
@@ -285,6 +302,12 @@ namespace OHV.Module.Interactivity.PopUp
 
         private void ExecuteJogCommand( object obj )
         {
+            if ( this.JogVelocity <= 0 )
+            {
+                this.messageController.ShowNotificationView( "Check Jog Velocity" );
+                return;
+            }
+
             var msg = new AxisControlEventArgs
             {
                 Dir = AxisControlEventArgs.eEventDir.ToBack ,
@@ -328,7 +351,6 @@ namespace OHV.Module.Interactivity.PopUp
                     case AxisControlEventArgs.eAxisControlKind.NONE:
                         break;
                     case AxisControlEventArgs.eAxisControlKind.OriginReturn:
-                        //TODO:[20/03/20 sy-hwang] Origin 시작 시 UI Lock 여부 ?
                         break;
                     case AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition:
                         break;

+ 4 - 2
Dev/OHV/OHV.Module.Status/VehicleStatusView.xaml

@@ -33,7 +33,7 @@
                         Grid.Row="1">
                 <TextBlock Margin="5" Text="Clamp" Foreground="Silver" FontSize="25"/>
                 <TextBlock Margin="5" HorizontalAlignment="Center" 
-                           Text="{Binding ClampState, FallbackValue=OFF}" Foreground="Orange" FontSize="30"/>
+                           Text="{Binding ClampState, FallbackValue=NONE}" Foreground="Orange" FontSize="30"/>
             </StackPanel>
 
             <StackPanel Orientation="Vertical"
@@ -44,7 +44,9 @@
 
                 <TextBlock Margin="5" Text="Conveyor" Foreground="Silver" FontSize="25"/>
                 <TextBlock Margin="5" HorizontalAlignment="Center" 
-                           Text="{Binding CvState, FallbackValue=OFF}" Foreground="Orange" FontSize="30"/>
+                           Text="{Binding CvState, FallbackValue=NONE}" Foreground="Orange" FontSize="20"/>
+                <TextBlock Margin="5" HorizontalAlignment="Center" 
+                           Text="{Binding CvDir, FallbackValue=NONE}" Foreground="Orange" FontSize="20"/>
             </StackPanel>
 
             <StackPanel Orientation="Vertical"

+ 116 - 2
Dev/OHV/OHV.Module.Status/VehicleStatusViewModel.cs

@@ -1,5 +1,6 @@
 using GSG.NET.Extensions;
 using OHV.Common.Events;
+using OHV.Common.Model;
 using OHV.Common.Shareds;
 using Prism.Events;
 using Prism.Mvvm;
@@ -9,6 +10,7 @@ using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
 using VehicleControlSystem;
+using VehicleControlSystem.ControlLayer.IO;
 
 namespace OHV.Module.Status
 {
@@ -39,17 +41,107 @@ namespace OHV.Module.Status
             set { this.SetProperty( ref this._cvState , value ); }
         }
 
+        string _cvDir = "IDLE";
+        public string CvDir
+        {
+            get { return this._cvDir; }
+            set { this.SetProperty( ref this._cvDir , value ); }
+        }
+
+        double _vehicleCurrentPos;
+        public double VehicleCurrentPos
+        {
+            get { return this._vehicleCurrentPos; }
+            set { this.SetProperty( ref this._vehicleCurrentPos , value ); }
+        }
+
+        string _vehicleCurrentTag;
+        public string VehicleCurrentTag
+        {
+            get { return this._vehicleCurrentTag; }
+            set { this.SetProperty( ref this._vehicleCurrentTag , value ); }
+        }
+
+        EzIO IO = null;
+
         public VehicleStatusViewModel(IEventAggregator _ea, VCSystem _vcSystem )
         {
             this.eventAggregator = _ea;
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Unsubscribe( UICallBackCommunication );
             this.eventAggregator.GetEvent<GUIMessagePubSubEvent>().Subscribe( UICallBackCommunication , ThreadOption.UIThread );
 
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Unsubscribe( DriveUICallBackCommunication );
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Subscribe( DriveUICallBackCommunication , ThreadOption.UIThread );
+            this.eventAggregator.GetEvent<DriveControlPubSubEvent>().Publish( new DriveControlEventArgs { EventDir = DriveControlEventArgs.eEventDir.ToBack , ControlKind = DriveControlEventArgs.eControlKind.VehicleState } );
+
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( new AxisControlEventArgs { Dir = AxisControlEventArgs.eEventDir.ToBack , Kind = AxisControlEventArgs.eAxisControlKind.SyncState } );
+
             this.vcSystem = _vcSystem;
 
             vcSystem.autoManager.OnOperationModeChanged += ( mode ) => { this.VehicleState = mode.ToString(); };
             
-            
+            this.IO = _vcSystem.IO as EzIO;
+            this.IO.OnChangedIO += IO_OnChangedIO;
+            if ( IO.IsOn( "OUT_CV_RUN", false ) )
+                this.CvState = "RUN";
+            else
+                this.CvState = "IDLE";
+        }
+
+        private void DriveUICallBackCommunication( DriveControlEventArgs obj )
+        {
+            if(obj.EventDir == DriveControlEventArgs.eEventDir.ToFront)
+            {
+                switch ( obj.ControlKind )
+                {
+                    case DriveControlEventArgs.eControlKind.NONE:
+                        break;
+                    case DriveControlEventArgs.eControlKind.MOVE:
+                        break;
+                    case DriveControlEventArgs.eControlKind.STOP:
+                        break;
+                    case DriveControlEventArgs.eControlKind.Steering:
+                        break;
+                    case DriveControlEventArgs.eControlKind.SteeringState:
+                        break;
+                    case DriveControlEventArgs.eControlKind.ReqCurrentPos:
+                        break;
+                    case DriveControlEventArgs.eControlKind.ReqStopCurrentPos:
+                        break;
+                    case DriveControlEventArgs.eControlKind.FaultReset:
+                        break;
+                    case DriveControlEventArgs.eControlKind.DriveON:
+                        break;
+                    case DriveControlEventArgs.eControlKind.DriveOFF:
+                        break;
+                    case DriveControlEventArgs.eControlKind.JOG:
+                        break;
+                    case DriveControlEventArgs.eControlKind.VehicleState:
+                        var state = CastTo<VehicleInfo>.From<object>( obj.Args );
+                        this.VehicleCurrentPos = state.CurrentPosition;
+                        break;
+                    case DriveControlEventArgs.eControlKind.Conveyor:
+                        break;
+                }
+            }
+        }
+
+        private void IO_OnChangedIO( BitBlock bit )
+        {
+            if ( bit.Tag.Equals( "OUT_CV_RUN" ) )
+                this.CvState = "RUN";
+
+            if ( bit.Tag.Equals( "OUT_CV_CWCCW" ) && bit.Tag.Equals("OUT_CV_RUN"))
+                this.CvDir = "CW";
+            else if ( !bit.Tag.Equals( "OUT_CV_CWCCW" ) && bit.Tag.Equals( "OUT_CV_RUN" ) )
+                this.CvDir = "CCW";
+            else
+                this.CvDir = "IDLE";
+                
+            if ( bit.Tag.Equals( "IN_CV_ERROR" ) )
+                this.CvState = "ERROR";
+            else
+                this.CvState = "IDLE";
         }
 
         private void UICallBackCommunication( GUIMessageEventArgs obj )
@@ -60,13 +152,35 @@ namespace OHV.Module.Status
                 {
                     switch(obj.ModelPropertyName)
                     {
-                        case "SteeringState":
+                        case "ClampState":
+                            var state = CastTo<eClampState>.From<object>( obj.Args );
+                            this.ChangedClampState( state );
+                            break;
+                        case "Currenttag":
+                            var tag = CastTo<string>.From<object>(obj.Args);
+                            this.VehicleCurrentTag = tag;
                             break;
                     }
                 }
             }
         }
 
+        private void ChangedClampState( eClampState state )
+        {
+            switch ( state )
+            {
+                case eClampState.NONE:
+                    this.ClampState = eClampState.NONE.ToString();
+                    break;
+                case eClampState.LOCK:
+                    this.ClampState = eClampState.LOCK.ToString();
+                    break;
+                case eClampState.UNLOCK:
+                    this.ClampState = eClampState.UNLOCK.ToString();
+                    break;
+            }
+        }
+
         public void Init( ) { }
     }
 }

+ 13 - 3
Dev/OHV/OHV.Vehicle/Concept/D_MainWindowViewModel.cs

@@ -204,7 +204,6 @@ namespace OHV.Vehicle.Concept
         private DeskTopInfo dti = new DeskTopInfo();
         SqliteManager sql;
 
-
         public D_MainWindowViewModel( IEventAggregator _ea , VCSystem cSystem , IRegionManager _regionManager , MessageController _msgController, SqliteManager _sql )
         {
             this.regionManager = _regionManager;
@@ -216,6 +215,7 @@ namespace OHV.Vehicle.Concept
             vcsMessagePublisher = this.eventAggregator.GetEvent<VCSMessagePubSubEvent>();
 
             this.VCSystem = cSystem;
+            
             this.messageController = _msgController;
             this.sql = _sql;
 
@@ -231,6 +231,7 @@ namespace OHV.Vehicle.Concept
             this.StopCommand = new DelegateCommand(ExecuteStopCommand);
             this.AlarmResetCommand = new DelegateCommand( ExecuteAlarmResetCommand);
             this.EmergencyStopCommand = new DelegateCommand(ExecuteEStop);
+            this.BuzzerStopCommand = new DelegateCommand( ExecuteBuzzerStop );
 
             DispatcherTimer dateTimer = new DispatcherTimer();
             dateTimer.Tick += (object sender, EventArgs e) =>
@@ -246,6 +247,15 @@ namespace OHV.Vehicle.Concept
             GSG.NET.Quartz.QuartzUtils.Invoke("RESOURCE_CHECK", GSG.NET.Quartz.QuartzUtils.GetExpnSecond(1), QuzOnResourceUsage);
         }
 
+        private void ExecuteBuzzerStop( )
+        {
+            var msg = new VCSMessageEventArgs
+            {
+                Kind = VCSMessageEventArgs.eVCSMessageKind.ReqBuzzerStop ,
+            };
+            vcsMessagePublisher.Publish( msg );
+        }
+
         void QuzOnResourceUsage()
         {
             this.CPU = GSG.NET.OSView.Mgnt.CpuUseRate();
@@ -264,9 +274,9 @@ namespace OHV.Vehicle.Concept
         {
             var msg = new VCSMessageEventArgs
             {
-                Kind = VCSMessageEventArgs.eVCSMessageKind.ReqEStop,
+                Kind = VCSMessageEventArgs.eVCSMessageKind.ReqEStop ,
             };
-            vcsMessagePublisher.Publish(msg);
+            vcsMessagePublisher.Publish( msg );
         }
 
         private void ExecuteAlarmResetCommand( )

+ 72 - 4
Dev/OHV/VehicleControlSystem/ControlLayer/Clamp.cs

@@ -27,6 +27,12 @@ namespace VehicleControlSystem.ControlLayer
         TaskCancel taskCancel = new TaskCancel();
 
         //TODO:[20/03/25 ys-hwang] Clamp State 필요함.
+        eClampState _clampState;
+        public eClampState ClampState
+        {
+            get { return this._clampState; }
+            set { this.SetField( ref this._clampState , value ); }
+        }
 
         public Clamp(SqliteManager sqliteManager, IEventAggregator ea)
         {
@@ -53,7 +59,7 @@ namespace VehicleControlSystem.ControlLayer
                     case AxisControlEventArgs.eAxisControlKind.EStop:
                         break;
                     case AxisControlEventArgs.eAxisControlKind.Move:
-                        this.ReqOrderByMove( args );
+                        //this.ReqOrderByMove( args );
                         break;
                     case AxisControlEventArgs.eAxisControlKind.Jog:
                         this.ReqJog( args );
@@ -82,7 +88,10 @@ namespace VehicleControlSystem.ControlLayer
                     case eAxisControlKind.AxisState:
                         break;
                     case eAxisControlKind.SyncMove:
-                        this.ReqSyncMove(args);
+                        this.ReqSyncMove( args );
+                        break;
+                    case eAxisControlKind.SyncState:
+                        this.ReqSyncState( args );
                         break;
                     default:
                         break;
@@ -90,6 +99,8 @@ namespace VehicleControlSystem.ControlLayer
             }
         }
 
+        
+
         void PublishEvent(AxisControlEventArgs args)
         {
             args.Dir = AxisControlEventArgs.eEventDir.ToFront;
@@ -97,6 +108,37 @@ namespace VehicleControlSystem.ControlLayer
         }
 
         #region Request Method
+        private void ReqSyncState( AxisControlEventArgs args )
+        {
+            var leftPositionDatas = sql.AxisPositionDataDAL.GetKFromName( ConstString.AXIS_CARRIER_LOCK_LEFT ).ToList();
+            var leftLockData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_LOCK ) ).Single();
+            var leftUnLockData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_UNLOCK ) ).Single();
+            
+            var left = this.axes.Where( x => x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single();
+
+            var rightPositionDatas = sql.AxisPositionDataDAL.GetKFromName( ConstString.AXIS_CARRIER_LOCK_RIGHT ).ToList();
+            var rightLockData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_LOCK ) ).Single();
+            var rightUnLockData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_UNLOCK ) ).Single();
+            
+            var right = this.axes.Where( x => x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
+
+            if ( left.CurrentPosition == leftLockData.Value && right.CurrentPosition == rightLockData.Value )
+                this.ClampState = eClampState.LOCK;
+            else if ( left.CurrentPosition == leftUnLockData.Value && right.CurrentPosition == rightUnLockData.Value )
+                this.ClampState = eClampState.UNLOCK;
+            else
+                this.ClampState = eClampState.NONE;
+
+            this.ClampState = eClampState.NONE;
+
+            var msg = new AxisControlEventArgs
+            {
+                Kind = eAxisControlKind.SyncState
+            };
+
+            this.PublishEvent( msg );
+        }
+
         private void ReqSyncMove( AxisControlEventArgs args )
         {
             var result = 0;
@@ -109,17 +151,41 @@ namespace VehicleControlSystem.ControlLayer
             {
                 result = this.Lock_Sync();
                 if ( result == 0 )
+                {
                     reply.Result = Results.Ok();
+                    this.ClampState = eClampState.LOCK;
+                }
                 else
-                    reply.Result = Results.Fail( $"{result} Failed" );
+                {
+                    var alarm = this.sql.AlarmDAL.GetK( result );
+                    if ( alarm == null )
+                        alarm = new Alarm() { Name = "UnKnown Alarm" , Text = "Not Define" };
+                    
+                    var error = new Error().WithMetadata( "Alarm" , alarm );
+                    reply.Result = Results.Fail(error);
+
+                    this.ClampState = eClampState.NONE;
+                }
             }            
             else
             {
                 result = this.Unlock_Sync();
                 if ( result == 0 )
+                {
                     reply.Result = Results.Ok();
+                    this.ClampState = eClampState.UNLOCK;
+                }
                 else
-                    reply.Result = Results.Fail( $"{result} Failed" );
+                {
+                    var alarm = this.sql.AlarmDAL.GetK( result );
+                    if ( alarm == null )
+                        alarm = new Alarm() { Name = "UnKnown Alarm" , Text = "Not Define" };
+
+                    var error = new Error().WithMetadata( "Alarm" , alarm );
+                    reply.Result = Results.Fail( error );
+
+                    this.ClampState = eClampState.NONE;
+                }
             }
 
             this.PublishEvent( reply );
@@ -466,6 +532,7 @@ namespace VehicleControlSystem.ControlLayer
                 return 1;
 #endif
 
+            this.ClampState = eClampState.LOCK;
             return EziMOTIONPlusELib.FMM_OK;
         }
 
@@ -509,6 +576,7 @@ namespace VehicleControlSystem.ControlLayer
                 return 4;
 #endif
 
+            this.ClampState = eClampState.UNLOCK;
             return EziMOTIONPlusELib.FMM_OK;
         }
     }

+ 23 - 1
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -96,6 +96,13 @@ namespace VehicleControlSystem.ControlLayer
             set { SetField( ref this.isContain , value ); }
         }
 
+        eClampState _clampState;
+        public eClampState ClampState
+        {
+            get { return this._clampState; }
+            set { this.SetField( ref this._clampState , value ); }
+        }
+
         private eSteeringState steeringState;
         public eSteeringState SteeringState
         {
@@ -712,7 +719,7 @@ namespace VehicleControlSystem.ControlLayer
                 return false;
             }
 
-            //Load, Unload 가 끝나면 메인 Command 를 완료 했다고 판.
+            //Load, Unload 가 끝나면 메인 Command 를 완료 했다고 판.
             sql.CommandDAL.UpdateState( sub.CmdID , eCommandState.Complete );
             sql.SubCmdDAL.Delete( sub );
 
@@ -1226,6 +1233,7 @@ namespace VehicleControlSystem.ControlLayer
         {
             this.clamp = new Clamp( this.sql , this.eventAggregator );
             this.clamp.Init();
+            this.clamp.PropertyChanged += Clamp_PropertyChanged;
         }
         void CreateDrive( )
         {
@@ -1363,6 +1371,20 @@ namespace VehicleControlSystem.ControlLayer
             }
         }
 
+        private void Clamp_PropertyChanged( object sender , System.ComponentModel.PropertyChangedEventArgs e )
+        {
+            //TODO:[20/03/26 ys-hwang] Clamp State
+
+            var property = sender.GetType().GetProperty( e.PropertyName );
+            var newValue = property.GetValue( sender , null );
+
+            if ( e.PropertyName.Equals( "ClampState" ) )
+            {
+                var v = CastTo<eClampState>.From<object>( newValue );
+                this.ClampState = v;
+            }
+        }
+
         private void IO_OnChangedIO( BitBlock bit )
         {
             if ( bit.Tag.Equals( "IN_CV_DETECT_01" ) )

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

@@ -110,7 +110,7 @@ namespace VehicleControlSystem
         #region RspMessage Method
         void ReceivedMessageEvent(VCSMessageEventArgs msg)
         {
-            switch (msg.Kind)
+            switch ( msg.Kind )
             {
                 case VCSMessageEventArgs.eVCSMessageKind.ReqIOObject:
                     ReqIOObjectMessage();
@@ -129,16 +129,26 @@ namespace VehicleControlSystem
                     ReqAlarmReset();
                     break;
                 case VCSMessageEventArgs.eVCSMessageKind.ReqVehicleModeChange:
-                    this.ReqVehicleModeChange(msg);
+                    this.ReqVehicleModeChange( msg );
                     break;
                 case VCSMessageEventArgs.eVCSMessageKind.ReqEStop:
                     ReqEStop();
                     break;
+                case VCSMessageEventArgs.eVCSMessageKind.ReqBuzzerStop:
+                    ReqBuzzerStop();
+                    break;
                 default:
                     break;
             }
         }
 
+        private void ReqBuzzerStop( )
+        {
+            this.IO.OutputOff( "OUT_BUZZER_00" );
+            this.IO.OutputOff( "OUT_BUZZER_01" );
+            this.IO.OutputOff( "OUT_BUZZER_02" );
+        }
+
         private void ReqAlarmReset()
         {
             this.autoManager.IsErrorProcessing = false;

+ 0 - 54
Dev/OHV/ViewTest/CustomControl1.cs

@@ -1,54 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
-
-namespace ViewTest
-{
-    /// <summary>
-    /// XAML 파일에서 이 사용자 지정 컨트롤을 사용하려면 1a 또는 1b단계를 수행한 다음 2단계를 수행하십시오.
-    ///
-    /// 1a단계) 현재 프로젝트에 있는 XAML 파일에서 이 사용자 지정 컨트롤 사용.
-    /// 이 XmlNamespace 특성을 사용할 마크업 파일의 루트 요소에 이 특성을 
-    /// 추가합니다.
-    ///
-    ///     xmlns:MyNamespace="clr-namespace:ViewTest"
-    ///
-    ///
-    /// 1b단계) 다른 프로젝트에 있는 XAML 파일에서 이 사용자 지정 컨트롤 사용.
-    /// 이 XmlNamespace 특성을 사용할 마크업 파일의 루트 요소에 이 특성을 
-    /// 추가합니다.
-    ///
-    ///     xmlns:MyNamespace="clr-namespace:ViewTest;assembly=ViewTest"
-    ///
-    /// 또한 XAML 파일이 있는 프로젝트의 프로젝트 참조를 이 프로젝트에 추가하고
-    /// 다시 빌드하여 컴파일 오류를 방지해야 합니다.
-    ///
-    ///     솔루션 탐색기에서 대상 프로젝트를 마우스 오른쪽 단추로 클릭하고
-    ///     [참조 추가]->[프로젝트]를 차례로 클릭한 다음 이 프로젝트를 선택합니다.
-    ///
-    ///
-    /// 2단계)
-    /// 계속 진행하여 XAML 파일에서 컨트롤을 사용합니다.
-    ///
-    ///     <MyNamespace:CustomControl1/>
-    ///
-    /// </summary>
-    public class CustomControl1 : Control
-    {
-        static CustomControl1()
-        {
-            DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
-        }
-    }
-}

+ 0 - 55
Dev/OHV/ViewTest/Properties/AssemblyInfo.cs

@@ -1,55 +0,0 @@
-using System.Reflection;
-using System.Resources;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using System.Windows;
-
-// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 
-// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
-// 이러한 특성 값을 변경하세요.
-[assembly: AssemblyTitle("ViewTest")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("ViewTest")]
-[assembly: AssemblyCopyright("Copyright ©  2020")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
-// 표시되지 않습니다.  COM에서 이 어셈블리의 형식에 액세스하려면 
-// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
-[assembly: ComVisible(false)]
-
-//지역화 가능 애플리케이션 빌드를 시작하려면 다음을 설정하세요.
-//.csproj 파일에서 <PropertyGroup> 내에 <UICulture>CultureYouAreCodingWith</UICulture>를
-//설정하십시오. 예를 들어 소스 파일에서 영어(미국)를
-//사용하는 경우 <UICulture>를 en-US로 설정합니다. 그런 다음 아래
-//NeutralResourceLanguage 특성의 주석 처리를 제거합니다. 아래 줄의 "en-US"를 업데이트하여
-//프로젝트 파일의 UICulture 설정과 일치시킵니다.
-
-//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
-
-
-[assembly:ThemeInfo(
-    ResourceDictionaryLocation.None, //테마별 리소스 사전의 위치
-                             //(페이지 또는 응용 프로그램 리소스 사진에
-                             // 리소스가 없는 경우에 사용됨)
-    ResourceDictionaryLocation.SourceAssembly //제네릭 리소스 사전의 위치
-                                      //(페이지 또는 응용 프로그램 리소스 사진에
-                                      // 리소스가 없는 경우에 사용됨)
-)]
-
-
-// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
-//
-//      주 버전
-//      부 버전 
-//      빌드 번호
-//      수정 버전
-//
-// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
-// 기본값으로 할 수 있습니다.
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]

+ 0 - 62
Dev/OHV/ViewTest/Properties/Resources.Designer.cs

@@ -1,62 +0,0 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-//     이 코드는 도구를 사용하여 생성되었습니다.
-//     런타임 버전:4.0.30319.42000
-//
-//     파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
-//     이러한 변경 내용이 손실됩니다.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace ViewTest.Properties {
-    
-    
-    /// <summary>
-    ///   지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
-    /// </summary>
-    // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
-    // 클래스에서 자동으로 생성되었습니다.
-    // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여
-    // ResGen을 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
-    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    internal class Resources {
-        
-        private static global::System.Resources.ResourceManager resourceMan;
-        
-        private static global::System.Globalization.CultureInfo resourceCulture;
-        
-        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        internal Resources() {
-        }
-        
-        /// <summary>
-        ///   이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
-        /// </summary>
-        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Resources.ResourceManager ResourceManager {
-            get {
-                if ((resourceMan == null)) {
-                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ViewTest.Properties.Resources", typeof(Resources).Assembly);
-                    resourceMan = temp;
-                }
-                return resourceMan;
-            }
-        }
-        
-        /// <summary>
-        ///   이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
-        ///   재정의합니다.
-        /// </summary>
-        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
-        internal static global::System.Globalization.CultureInfo Culture {
-            get {
-                return resourceCulture;
-            }
-            set {
-                resourceCulture = value;
-            }
-        }
-    }
-}

+ 0 - 117
Dev/OHV/ViewTest/Properties/Resources.resx

@@ -1,117 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>

+ 0 - 30
Dev/OHV/ViewTest/Properties/Settings.Designer.cs

@@ -1,30 +0,0 @@
-//------------------------------------------------------------------------------
-// <auto-generated>
-//     This code was generated by a tool.
-//     Runtime Version:4.0.30319.42000
-//
-//     Changes to this file may cause incorrect behavior and will be lost if
-//     the code is regenerated.
-// </auto-generated>
-//------------------------------------------------------------------------------
-
-namespace ViewTest.Properties
-{
-    
-    
-    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
-    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
-    {
-        
-        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-        
-        public static Settings Default
-        {
-            get
-            {
-                return defaultInstance;
-            }
-        }
-    }
-}

+ 0 - 7
Dev/OHV/ViewTest/Properties/Settings.settings

@@ -1,7 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
-<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
-  <Profiles>
-    <Profile Name="(Default)" />
-  </Profiles>
-  <Settings />
-</SettingsFile>

+ 0 - 18
Dev/OHV/ViewTest/Themes/Generic.xaml

@@ -1,18 +0,0 @@
-<ResourceDictionary
-    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:local="clr-namespace:ViewTest">
-    <Style TargetType="{x:Type local:CustomControl1}">
-        <Setter Property="Template">
-            <Setter.Value>
-                <ControlTemplate TargetType="{x:Type local:CustomControl1}">
-                    <Border Background="{TemplateBinding Background}"
-                            BorderBrush="{TemplateBinding BorderBrush}"
-                            BorderThickness="{TemplateBinding BorderThickness}">
-
-                    </Border>
-                </ControlTemplate>
-            </Setter.Value>
-        </Setter>
-    </Style>
-</ResourceDictionary>

+ 0 - 16
Dev/OHV/ViewTest/UserControl1.xaml

@@ -1,16 +0,0 @@
-<UserControl x:Class="ViewTest.UserControl1"
-             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
-             xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
-             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
-             xmlns:local="clr-namespace:ViewTest"
-             mc:Ignorable="d" 
-             d:DesignHeight="450" d:DesignWidth="800"
-             
-             xmlns:prism="http://prismlibrary.com/"
-             prism:ViewModelLocator.AutoWireViewModel="True">
-    <Grid>
-            
-    </Grid>
-</UserControl>

+ 0 - 28
Dev/OHV/ViewTest/UserControl1.xaml.cs

@@ -1,28 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
-
-namespace ViewTest
-{
-    /// <summary>
-    /// UserControl1.xaml에 대한 상호 작용 논리
-    /// </summary>
-    public partial class UserControl1 : UserControl
-    {
-        public UserControl1( )
-        {
-            InitializeComponent();
-        }
-    }
-}

+ 0 - 122
Dev/OHV/ViewTest/ViewTest.csproj

@@ -1,122 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{A9F51664-1F9F-4C97-9C1E-0E02D2FD5920}</ProjectGuid>
-    <OutputType>library</OutputType>
-    <RootNamespace>ViewTest</RootNamespace>
-    <AssemblyName>ViewTest</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <WarningLevel>4</WarningLevel>
-    <Deterministic>true</Deterministic>
-    <NuGetPackageImportStamp>
-    </NuGetPackageImportStamp>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>bin\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>bin\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-  </PropertyGroup>
-  <ItemGroup>
-    <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="MaterialDesignColors, Version=1.2.2.920, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\MaterialDesignColors.1.2.2\lib\net45\MaterialDesignColors.dll</HintPath>
-    </Reference>
-    <Reference Include="MaterialDesignThemes.Wpf, Version=3.0.1.920, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\MaterialDesignThemes.3.0.1\lib\net45\MaterialDesignThemes.Wpf.dll</HintPath>
-    </Reference>
-    <Reference Include="Prism, Version=7.2.0.1422, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
-      <HintPath>..\packages\Prism.Core.7.2.0.1422\lib\net45\Prism.dll</HintPath>
-    </Reference>
-    <Reference Include="Prism.Wpf, Version=7.2.0.1422, Culture=neutral, PublicKeyToken=40ee6c3a2184dc59, processorArchitecture=MSIL">
-      <HintPath>..\packages\Prism.Wpf.7.2.0.1422\lib\net45\Prism.Wpf.dll</HintPath>
-    </Reference>
-    <Reference Include="System" />
-    <Reference Include="System.Configuration" />
-    <Reference Include="System.Data" />
-    <Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
-      <HintPath>..\packages\System.ValueTuple.4.5.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath>
-    </Reference>
-    <Reference Include="System.Windows.Interactivity, Version=4.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
-      <HintPath>..\packages\Prism.Wpf.7.2.0.1422\lib\net45\System.Windows.Interactivity.dll</HintPath>
-    </Reference>
-    <Reference Include="System.Xml" />
-    <Reference Include="Microsoft.CSharp" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Data.DataSetExtensions" />
-    <Reference Include="System.Net.Http" />
-    <Reference Include="System.Xaml">
-      <RequiredTargetFramework>4.0</RequiredTargetFramework>
-    </Reference>
-    <Reference Include="WindowsBase" />
-    <Reference Include="PresentationCore" />
-    <Reference Include="PresentationFramework" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="UserControl1.xaml.cs">
-      <DependentUpon>UserControl1.xaml</DependentUpon>
-    </Compile>
-    <Page Include="Themes\Generic.xaml">
-      <Generator>MSBuild:Compile</Generator>
-      <SubType>Designer</SubType>
-    </Page>
-    <Compile Include="CustomControl1.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Page Include="UserControl1.xaml">
-      <SubType>Designer</SubType>
-      <Generator>MSBuild:Compile</Generator>
-    </Page>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Properties\AssemblyInfo.cs">
-      <SubType>Code</SubType>
-    </Compile>
-    <Compile Include="Properties\Resources.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DesignTime>True</DesignTime>
-      <DependentUpon>Resources.resx</DependentUpon>
-    </Compile>
-    <Compile Include="Properties\Settings.Designer.cs">
-      <AutoGen>True</AutoGen>
-      <DependentUpon>Settings.settings</DependentUpon>
-      <DesignTimeSharedInput>True</DesignTimeSharedInput>
-    </Compile>
-    <EmbeddedResource Include="Properties\Resources.resx">
-      <Generator>ResXFileCodeGenerator</Generator>
-      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
-    </EmbeddedResource>
-    <None Include="packages.config" />
-    <None Include="Properties\Settings.settings">
-      <Generator>SettingsSingleFileGenerator</Generator>
-      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
-    </None>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <Import Project="..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets" Condition="Exists('..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets')" />
-  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
-    <PropertyGroup>
-      <ErrorText>이 프로젝트는 이 컴퓨터에 없는 NuGet 패키지를 참조합니다. 해당 패키지를 다운로드하려면 NuGet 패키지 복원을 사용하십시오. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkID=322105를 참조하십시오. 누락된 파일은 {0}입니다.</ErrorText>
-    </PropertyGroup>
-    <Error Condition="!Exists('..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MaterialDesignThemes.3.0.1\build\MaterialDesignThemes.targets'))" />
-  </Target>
-</Project>

+ 0 - 9
Dev/OHV/ViewTest/packages.config

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-  <package id="CommonServiceLocator" version="2.0.4" targetFramework="net45" />
-  <package id="MaterialDesignColors" version="1.2.2" targetFramework="net45" />
-  <package id="MaterialDesignThemes" version="3.0.1" targetFramework="net45" />
-  <package id="Prism.Core" version="7.2.0.1422" targetFramework="net45" />
-  <package id="Prism.Wpf" version="7.2.0.1422" targetFramework="net45" />
-  <package id="System.ValueTuple" version="4.5.0" targetFramework="net45" />
-</packages>