Forráskód Böngészése

현장 수정 내용 Update

SK.Kang 6 éve
szülő
commit
6b8afa2997

+ 9 - 0
Dev/OHV/OHV.Module.Interactivity/PopUp/LockServoView.xaml.cs

@@ -20,9 +20,18 @@ namespace OHV.Module.Interactivity.PopUp
     /// </summary>
     public partial class LockServoView : UserControl
     {
+        LockServoViewModel ViewModel { get => this.DataContext as LockServoViewModel; }
+
         public LockServoView( )
         {
             InitializeComponent();
+
+            this.Loaded += LockServoView_Loaded;
+        }
+
+        private void LockServoView_Loaded( object sender, RoutedEventArgs e )
+        {
+            this.ViewModel.Init();
         }
 
         private void Button_PreviewMouseDown( object sender , MouseButtonEventArgs e )

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

@@ -231,6 +231,10 @@ namespace OHV.Module.Interactivity.PopUp
             this.sql = _sql;
 
             //초기 선택 축
+        }
+
+        public void Init()
+        {
             this.SelectAxis = ConstString.AXIS_CARRIER_LOCK_LEFT;
             this.LeftAxisBrush = Brushes.Orange;
 

+ 3 - 3
Dev/OHV/OHV.Module.MainViews/Views/HistoryView.xaml

@@ -58,7 +58,7 @@
                                 </DataGridTextColumn.HeaderStyle>
                             </materialDesign:DataGridTextColumn>
 
-                            <materialDesign:DataGridTextColumn Header="Kind" Width="150" Binding="{Binding Kind}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}">
+                            <!--<materialDesign:DataGridTextColumn Header="Kind" Width="150" Binding="{Binding Kind}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}">
                                 <DataGridTextColumn.HeaderStyle>
                                     <Style TargetType="{x:Type DataGridColumnHeader}" BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}">
                                         <Setter Property="VerticalContentAlignment" Value="Center"/>
@@ -76,9 +76,9 @@
                                         <Setter Property="Foreground" Value="White"/>
                                     </Style>
                                 </DataGridTextColumn.HeaderStyle>
-                            </materialDesign:DataGridTextColumn>
+                            </materialDesign:DataGridTextColumn>-->
 
-                            <materialDesign:DataGridTextColumn Header="Text" Width="150" Binding="{Binding Text}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}">
+                            <materialDesign:DataGridTextColumn Header="Text" Width="300" Binding="{Binding Text}" EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnPopupEditingStyle}">
                                 <DataGridTextColumn.HeaderStyle>
                                     <Style TargetType="{x:Type DataGridColumnHeader}" BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}">
                                         <Setter Property="VerticalContentAlignment" Value="Center"/>

+ 8 - 5
Dev/OHV/OHV.Module.MainViews/Views/HistoryViewModel.cs

@@ -28,26 +28,27 @@ namespace OHV.Module.MainViews.Views
         public HistoryViewModel( SqliteManager _sql )
         {
             this.sql = _sql;
+            this.AlarmResetCommand = new DelegateCommand( ExecuteAlarmResetCommand );
+
             var ll = sql.HisAlarmDAL.All;
             if ( ll == null )
                 this.AlarmList = new List<HisAlarm>();
             else
-                this.AlarmList = ll;
+                this.AlarmList = ll.OrderByDescending( x => x.OccurTime ).ToList();
 
             this.sql.HisAlarmDAL.ChangedProperty += HisAlarmDAL_ChangedProperty;
-            this.AlarmResetCommand = new DelegateCommand( ExecuteAlarmResetCommand );
         }
 
         private void HisAlarmDAL_ChangedProperty()
         {
             //TODO: AlarmList Null Exception 발생함.
-            if ( this.AlarmList.Count <= 0 )
+           if ( this.AlarmList.Count <= 0 )
                 return;
 
             this.AlarmList.Clear();
             this.AlarmList = null;
 
-            this.AlarmList = sql.HisAlarmDAL.All;
+            this.AlarmList = sql.HisAlarmDAL.All.OrderByDescending( x => x.OccurTime ).ToList();
         }
 
         async private void ExecuteAlarmResetCommand( )
@@ -62,6 +63,8 @@ namespace OHV.Module.MainViews.Views
             //this.AlarmList = e;
         }
 
-        public void Init( ) { }
+        public void Init( ) 
+        {
+        }
     }
 }

+ 1 - 1
Dev/OHV/OHV.Vehicle/Config/log4net.xml

@@ -37,7 +37,7 @@
 	-->
 
   <appender name="PhysicalCheckupFileAppender" type="GSG.NET.Logging.FileAppender, GSG.NET">
-    <threshold value="WARN"/>
+    <threshold value="INFO"/>
     <file value="C:\LOG\OHV\Vehicle\PhysicalCheckup\PhysicalCheckup.log" />
     <appendToFile value="true" />
     <rollingStyle value="Date" />

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

@@ -54,7 +54,7 @@
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Remote|AnyCPU'">
     <DebugSymbols>true</DebugSymbols>
-    <OutputPath>\\192.168.127.20\VCS\</OutputPath>
+    <OutputPath>\\192.168.127.20\vcs\</OutputPath>
     <DefineConstants>TRACE;DEBUG</DefineConstants>
     <DebugType>full</DebugType>
     <PlatformTarget>AnyCPU</PlatformTarget>

+ 222 - 217
Dev/OHV/VehicleControlSystem/ControlLayer/Clamp.cs

@@ -6,6 +6,7 @@ using System.Threading.Tasks;
 using FluentResults;
 using GSG.NET.Concurrent;
 using GSG.NET.Logging;
+using GSG.NET.Utils;
 using OHV.Common.Events;
 using OHV.Common.Model;
 using OHV.Common.Shareds;
@@ -31,10 +32,10 @@ namespace VehicleControlSystem.ControlLayer
         public eClampState ClampState
         {
             get { return this._clampState; }
-            set { this.SetField( ref this._clampState , value ); }
+            set { this.SetField( ref this._clampState, value ); }
         }
 
-        public Clamp(SqliteManager sqliteManager, IEventAggregator ea)
+        public Clamp( SqliteManager sqliteManager, IEventAggregator ea )
         {
             this.sql = sqliteManager;
             this.eventAggregator = ea;
@@ -44,72 +45,76 @@ namespace VehicleControlSystem.ControlLayer
         {
             this.CreateAxis();
 
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe(ReceivedMessageEvent);
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Subscribe(ReceivedMessageEvent);
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Unsubscribe( ReceivedMessageEvent );
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Subscribe( ReceivedMessageEvent );
         }
 
-        void ReceivedMessageEvent(AxisControlEventArgs args)
+        void ReceivedMessageEvent( AxisControlEventArgs args )
         {
-            if (args.Dir == AxisControlEventArgs.eEventDir.ToBack)
+            if ( args.Dir == AxisControlEventArgs.eEventDir.ToBack )
             {
-                switch ( args.Kind )
+                Task.Factory.StartNew( () =>
                 {
-                    case AxisControlEventArgs.eAxisControlKind.Stop:
-                        this.ReqStop();
-                        break;
-                    case AxisControlEventArgs.eAxisControlKind.EStop:
-                        break;
-                    case AxisControlEventArgs.eAxisControlKind.Move:
-                        this.ReqOrderByMove( args );
-                        break;
-                    case AxisControlEventArgs.eAxisControlKind.Jog:
-                        this.ReqJog( args );
-                        break;
-                    case AxisControlEventArgs.eAxisControlKind.ServoOn:
-                        this.ReqServoOn( args );
-                        break;
-                    case AxisControlEventArgs.eAxisControlKind.ServoOff:
-                        this.ReqServoOff( args );
-                        break;
-                    case AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition:
-                        this.ReqStartAxisState();
-                        break;
-                    case AxisControlEventArgs.eAxisControlKind.ReqStopCurrentPosition:
-                        this.taskCancel.Cancel();
-                        this.taskCancel.WaitAll();
-                        break;
-                    case AxisControlEventArgs.eAxisControlKind.OriginReturn:
-                        this.ReqOriginReturn( args );
-                        break;
-                    case AxisControlEventArgs.eAxisControlKind.FaultReset:
-                        this.ReqFaultReset( args );
-                        break;
-                    case eAxisControlKind.NONE:
-                        break;
-                    case eAxisControlKind.AxisState:
-                        break;
-                    case eAxisControlKind.SyncMove:
-                        this.ReqSyncMove( args );
-                        break;
-                    case eAxisControlKind.SyncState:
-                        this.ReqSyncState( args );
-                        break;
-                    default:
-                        break;
-                }
+                    var arg = ObjectCopyUtils.DeepClone( args );
+                    switch ( arg.Kind )
+                    {
+                        case AxisControlEventArgs.eAxisControlKind.Stop:
+                            ReqStop();
+                            break;
+                        case AxisControlEventArgs.eAxisControlKind.EStop:
+                            break;
+                        case AxisControlEventArgs.eAxisControlKind.Move:
+                            ReqOrderByMove( arg );
+                            break;
+                        case AxisControlEventArgs.eAxisControlKind.Jog:
+                            ReqJog( arg );
+                            break;
+                        case AxisControlEventArgs.eAxisControlKind.ServoOn:
+                            ReqServoOn( arg );
+                            break;
+                        case AxisControlEventArgs.eAxisControlKind.ServoOff:
+                            ReqServoOff( arg );
+                            break;
+                        case AxisControlEventArgs.eAxisControlKind.ReqCurrentPosition:
+                            ReqStartAxisState();
+                            break;
+                        case AxisControlEventArgs.eAxisControlKind.ReqStopCurrentPosition:
+                            taskCancel.Cancel();
+                            taskCancel.WaitAll();
+                            break;
+                        case AxisControlEventArgs.eAxisControlKind.OriginReturn:
+                            ReqOriginReturn( arg );
+                            break;
+                        case AxisControlEventArgs.eAxisControlKind.FaultReset:
+                            ReqFaultReset( arg );
+                            break;
+                        case eAxisControlKind.NONE:
+                            break;
+                        case eAxisControlKind.AxisState:
+                            break;
+                        case eAxisControlKind.SyncMove:
+                            ReqSyncMove( arg );
+                            break;
+                        case eAxisControlKind.SyncState:
+                            ReqSyncState( arg );
+                            break;
+                        default:
+                            break;
+                    }
+                } );
             }
         }
 
-        private void ReqStop( )
+        private void ReqStop()
         {
-            logger.D( $"JogMove - Stop Command");
+            logger.D( $"JogMove - Stop Command" );
             this.axes.ForEach( x => { x.Stop(); } );
         }
 
-        void PublishEvent(AxisControlEventArgs args)
+        void PublishEvent( AxisControlEventArgs args )
         {
             args.Dir = AxisControlEventArgs.eEventDir.ToFront;
-            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish(args);
+            this.eventAggregator.GetEvent<AxisControlPubSubEvent>().Publish( args );
         }
 
         #region Request Method
@@ -118,13 +123,13 @@ namespace VehicleControlSystem.ControlLayer
             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 )
@@ -164,14 +169,14 @@ namespace VehicleControlSystem.ControlLayer
                 {
                     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);
+                        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();
@@ -184,9 +189,9 @@ namespace VehicleControlSystem.ControlLayer
                 {
                     var alarm = this.sql.AlarmDAL.GetK( result );
                     if ( alarm == null )
-                        alarm = new Alarm() { Name = "UnKnown Alarm" , Text = "Not Define" };
+                        alarm = new Alarm() { Name = "UnKnown Alarm", Text = "Not Define" };
 
-                    var error = new Error().WithMetadata( "Alarm" , alarm );
+                    var error = new Error().WithMetadata( "Alarm", alarm );
                     reply.Result = Results.Fail( error );
 
                     this.ClampState = eClampState.NONE;
@@ -196,9 +201,9 @@ namespace VehicleControlSystem.ControlLayer
             this.PublishEvent( reply );
         }
 
-        private void ReqFaultReset(AxisControlEventArgs args)
+        private void ReqFaultReset( AxisControlEventArgs args )
         {
-            var axis = this.axes.Where(x => x.Config.AxisName.Equals(args.AxisName)).FirstOrDefault();
+            var axis = this.axes.Where( x => x.Config.AxisName.Equals( args.AxisName ) ).FirstOrDefault();
             int resultNo = axis.ResetAmpFault();
 
             var msg = new AxisControlEventArgs
@@ -207,13 +212,13 @@ namespace VehicleControlSystem.ControlLayer
                 Dir = AxisControlEventArgs.eEventDir.ToFront,
                 Kind = AxisControlEventArgs.eAxisControlKind.FaultReset,
             };
-            msg.Result = Results.Ok("Servo Fault Reset");
-            this.PublishEvent(msg);
+            msg.Result = Results.Ok( "Servo Fault Reset" );
+            this.PublishEvent( msg );
         }
 
-        private void ReqServoOn(AxisControlEventArgs args)
+        private void ReqServoOn( AxisControlEventArgs args )
         {
-            var axis = this.axes.Where(x => x.Config.AxisName.Equals(args.AxisName)).FirstOrDefault();
+            var axis = this.axes.Where( x => x.Config.AxisName.Equals( args.AxisName ) ).FirstOrDefault();
             axis.ServoOn();
 
             var msg = new AxisControlEventArgs
@@ -222,13 +227,13 @@ namespace VehicleControlSystem.ControlLayer
                 Dir = AxisControlEventArgs.eEventDir.ToFront,
                 Kind = AxisControlEventArgs.eAxisControlKind.ServoOn,
             };
-            msg.Result = Results.Ok("Servo On");
-            this.PublishEvent(msg);
+            msg.Result = Results.Ok( "Servo On" );
+            this.PublishEvent( msg );
         }
 
-        private void ReqServoOff(AxisControlEventArgs args)
+        private void ReqServoOff( AxisControlEventArgs args )
         {
-            var axis = this.axes.Where(x => x.Config.AxisName.Equals(args.AxisName)).FirstOrDefault();
+            var axis = this.axes.Where( x => x.Config.AxisName.Equals( args.AxisName ) ).FirstOrDefault();
             axis.ServoOff();
 
             var msg = new AxisControlEventArgs
@@ -237,22 +242,22 @@ namespace VehicleControlSystem.ControlLayer
                 Dir = AxisControlEventArgs.eEventDir.ToFront,
                 Kind = AxisControlEventArgs.eAxisControlKind.ServoOff,
             };
-            msg.Result = Results.Ok("Servo Off");
-            this.PublishEvent(msg);
+            msg.Result = Results.Ok( "Servo Off" );
+            this.PublishEvent( msg );
         }
 
         void ReqStartAxisState()
         {
-            var task = Task.Factory.StartNew(() =>
-            {
-                double[] beforePosition = new double[this.axes.Count];
-                beforePosition.Initialize();
+            var task = Task.Factory.StartNew( () =>
+             {
+                 double[] beforePosition = new double[this.axes.Count];
+                 beforePosition.Initialize();
 
-                while (!this.taskCancel.Canceled)
-                {
-                    LockUtils.Wait(500);
+                 while ( !this.taskCancel.Canceled )
+                 {
+                     LockUtils.Wait( 500 );
 
-                    int index = 0;
+                     int index = 0;
                     //this.axes.ForEach(a =>
                     //{
                     //    if (beforePosition[index] != a.CurrentPosition)
@@ -271,41 +276,41 @@ namespace VehicleControlSystem.ControlLayer
                     //    index++;
                     //});
                     var msg = new AxisControlEventArgs();
-                    msg.Kind = AxisControlEventArgs.eAxisControlKind.AxisState;
-                    msg.Args = new Dictionary<string, object>();
-                    this.axes.ForEach(a => 
-                    {
-                        var state = new AxisState();
-                        state.IsServoOn = a.IsServoOn();
-                        state.IsOriginReturn = a.IsOriginReturn();
-                        state.IsAmpFault = a.IsAmpFault();
-                        state.CurrentPosition = a.CurrentPosition;
-
-                        if (a.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT))
-                            msg.Args.Add("Left", state);
-                        else
-                            msg.Args.Add("Right", state);
-                    });
-                    this.PublishEvent(msg);
-                }
-            });
-
-            this.taskCancel.Add(task);
+                     msg.Kind = AxisControlEventArgs.eAxisControlKind.AxisState;
+                     msg.Args = new Dictionary<string, object>();
+                     this.axes.ForEach( a =>
+                     {
+                         var state = new AxisState();
+                         state.IsServoOn = a.IsServoOn();
+                         state.IsOriginReturn = a.IsOriginReturn();
+                         state.IsAmpFault = a.IsAmpFault();
+                         state.CurrentPosition = a.CurrentPosition;
+
+                         if ( a.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) )
+                             msg.Args.Add( "Left", state );
+                         else
+                             msg.Args.Add( "Right", state );
+                     } );
+                     this.PublishEvent( msg );
+                 }
+             } );
+
+            this.taskCancel.Add( task );
         }
 
-        void ReqJog(AxisControlEventArgs arg)
+        void ReqJog( AxisControlEventArgs arg )
         {
             var velocity = arg.JogVelocity;
-            if (arg.JogDir == AxisControlEventArgs.eJogMoveDir.Positive)
-                this.JogMove(arg.AxisName, E_JogMoveDir.Positive, velocity);
+            if ( arg.JogDir == AxisControlEventArgs.eJogMoveDir.Positive )
+                this.JogMove( arg.AxisName, E_JogMoveDir.Positive, velocity );
             else
-                this.JogMove(arg.AxisName, E_JogMoveDir.Negative, velocity);
+                this.JogMove( arg.AxisName, E_JogMoveDir.Negative, velocity );
         }
 
-        void ReqOriginReturn(AxisControlEventArgs arg)
+        void ReqOriginReturn( AxisControlEventArgs arg )
         {
             int result = 0;
-            if (arg.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT))
+            if ( arg.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) )
                 result = this.LeftOriginReturn();
             else
                 result = this.RightOriginReturn();
@@ -320,27 +325,27 @@ namespace VehicleControlSystem.ControlLayer
             else
                 msg.Result = Results.Ok();
 
-            this.PublishEvent(msg);
+            this.PublishEvent( msg );
         }
 
-        void ReqOrderByMove(AxisControlEventArgs arg)
+        void ReqOrderByMove( AxisControlEventArgs arg )
         {
             var msg = new AxisControlEventArgs();
             msg.Kind = AxisControlEventArgs.eAxisControlKind.Move;
             msg.PosDir = arg.PosDir;
             int result = 0;
 
-            if (arg.PosDir == AxisControlEventArgs.ePosDir.Lock)
+            if ( arg.PosDir == AxisControlEventArgs.ePosDir.Lock )
             {
                 result = this.MoveToLockPosition( arg.AxisName );
-                if (result != 0)
+                if ( result != 0 )
                 {
-                    var alarm = this.sql.AlarmDAL.GetK(result);
-                    if (alarm == null)
+                    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);
-                    msg.Result = Results.Fail(error);
+                    var error = new Error().WithMetadata( "Alarm", alarm );
+                    msg.Result = Results.Fail( error );
                 }
                 else
                 {
@@ -350,14 +355,14 @@ namespace VehicleControlSystem.ControlLayer
             else
             {
                 result = this.MoveToUnlockPosition( arg.AxisName );
-                if (result != 0)
+                if ( result != 0 )
                 {
-                    var alarm = this.sql.AlarmDAL.GetK(result);
-                    if (alarm == null)
+                    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);
-                    msg.Result = Results.Fail(error);
+                    var error = new Error().WithMetadata( "Alarm", alarm );
+                    msg.Result = Results.Fail( error );
                 }
                 else
                 {
@@ -365,77 +370,77 @@ namespace VehicleControlSystem.ControlLayer
                 }
             }
 
-            this.PublishEvent(msg);
+            this.PublishEvent( msg );
         }
 
         #endregion
 
         public void ClampEStop()
         {
-            this.axes.ForEach(x => { x.EmergencyStop(); });
+            this.axes.ForEach( x => { x.EmergencyStop(); } );
         }
 
         void CreateAxis()
         {
-            sql.AxisConfigDAL.All.ForEach(config =>
-            {
-                Axis.AxisConfig c = new Axis.AxisConfig
-                {
-                    AxisName = config.Name,
-                    Scale = config.Scale,
-                    Address = config.Address,
-                    AxisNo = config.Id,
-                };
+            sql.AxisConfigDAL.All.ForEach( config =>
+             {
+                 Axis.AxisConfig c = new Axis.AxisConfig
+                 {
+                     AxisName = config.Name,
+                     Scale = config.Scale,
+                     Address = config.Address,
+                     AxisNo = config.Id,
+                 };
 
                 //if ( config.Name.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) )
                 //    c.AxisNo = 40;
                 //else
                 //    c.AxisNo = 41;
 
-                axes.Add(new EzAxis(c));
-            });
-
-            this.axes.ForEach(axis =>
-            {
-                var data = sql.AxisVelocityDataDAL.GetK(axis.Config.AxisName);
-                Axis.AxisData axisData = new AxisData
-                {
-                    AxisNo = data.id,
-                    AxisName = data.AxisName,
-                    AutoRunVelocity = data.AutoRunVelocity,
-                    AutoRunAccelerate = data.AutoRunAccelerate,
-                    AutoRunDecelerate = data.AutoRunDecelerate,
-                    ManualRunVelocity = data.ManualRunVelocity,
-                    JogFast = data.JogFast,
-                    JogSlow = data.JogSlow,
-                    Tolerance = data.Tolerance,
-                };
-
-                axis.Initialize(axisData);
-            });
+                axes.Add( new EzAxis( c ) );
+             } );
+
+            this.axes.ForEach( axis =>
+             {
+                 var data = sql.AxisVelocityDataDAL.GetK( axis.Config.AxisName );
+                 Axis.AxisData axisData = new AxisData
+                 {
+                     AxisNo = data.id,
+                     AxisName = data.AxisName,
+                     AutoRunVelocity = data.AutoRunVelocity,
+                     AutoRunAccelerate = data.AutoRunAccelerate,
+                     AutoRunDecelerate = data.AutoRunDecelerate,
+                     ManualRunVelocity = data.ManualRunVelocity,
+                     JogFast = data.JogFast,
+                     JogSlow = data.JogSlow,
+                     Tolerance = data.Tolerance,
+                 };
+
+                 axis.Initialize( axisData );
+             } );
         }
 
         public int LeftOriginReturn()
         {
-            var servo = this.axes.Where(s => s.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT)).Single();
-            return servo.OriginReturn(true);
+            var servo = this.axes.Where( s => s.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single();
+            return servo.OriginReturn( true );
         }
 
         public int RightOriginReturn()
         {
-            var servo = this.axes.Where(s => s.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_RIGHT)).Single();
-            return servo.OriginReturn(true);
+            var servo = this.axes.Where( s => s.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
+            return servo.OriginReturn( true );
         }
 
         public int AllOriginReturn()
         {
             int result = 0;
             result = LeftOriginReturn();
-            if (result != EziMOTIONPlusELib.FMM_OK)
+            if ( result != EziMOTIONPlusELib.FMM_OK )
                 return 7;
 
             result = RightOriginReturn();
-            if (result != EziMOTIONPlusELib.FMM_OK)
+            if ( result != EziMOTIONPlusELib.FMM_OK )
                 return 8;
 
             return result;
@@ -444,62 +449,62 @@ namespace VehicleControlSystem.ControlLayer
         public int IsAllAxisOriginReturn()
         {
             int result = 0;
-            this.axes.ForEach(x =>
-            {
-                if (!x.IsOriginReturn())
-                {
-                    if (x.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT))
-                        result = 5;
-                    else
-                        result = 6;
-                    return;
-                }
-            });
+            this.axes.ForEach( x =>
+             {
+                 if ( !x.IsOriginReturn() )
+                 {
+                     if ( x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) )
+                         result = 5;
+                     else
+                         result = 6;
+                     return;
+                 }
+             } );
 
             return result;
         }
 
         #region Data
-        public void SavePositionData(string pos, double left, double right)
+        public void SavePositionData( string pos, double left, double right )
         {
-            var dataList = sql.AxisPositionDataDAL.GetKFromPostion(pos);
-            var sqlLeft = dataList.Where(x => x.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT)).Single();
-            var sqlRight = dataList.Where(x => x.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_RIGHT)).Single();
+            var dataList = sql.AxisPositionDataDAL.GetKFromPostion( pos );
+            var sqlLeft = dataList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single();
+            var sqlRight = dataList.Where( x => x.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
 
             sqlLeft.Value = left;
-            sql.AxisPositionDataDAL.Update(sqlLeft);
+            sql.AxisPositionDataDAL.Update( sqlLeft );
 
             sqlRight.Value = right;
-            sql.AxisPositionDataDAL.Update(sqlRight);
+            sql.AxisPositionDataDAL.Update( sqlRight );
         }
         #endregion
 
-        public int JogMove(string axisName, E_JogMoveDir dir, int velocity)
+        public int JogMove( string axisName, E_JogMoveDir dir, int velocity )
         {
-            logger.D($"JogMove - Axis[{axisName}] / Dir[{dir}] / vel[{velocity}]");
+            logger.D( $"JogMove - Axis[{axisName}] / Dir[{dir}] / vel[{velocity}]" );
 
-            var axis = this.axes.Where(x => x.Config.AxisName.Equals(axisName)).Single();
-            return axis.JogMove(dir, velocity);
+            var axis = this.axes.Where( x => x.Config.AxisName.Equals( axisName ) ).Single();
+            return axis.JogMove( dir, velocity );
         }
 
-        public int MoveToLockPosition(string axisName)
+        public int MoveToLockPosition( string axisName )
         {
-            var servo = this.axes.Where(x => x.Config.AxisName.Equals(axisName)).Single();
-            var axisPositionDatas = sql.AxisPositionDataDAL.GetKFromName(axisName).ToList();
-            var data = axisPositionDatas.Where(x => x.Name.Equals(ConstString.TEACH_POSITION_LOCK)).Single();
+            var servo = this.axes.Where( x => x.Config.AxisName.Equals( axisName ) ).Single();
+            var axisPositionDatas = sql.AxisPositionDataDAL.GetKFromName( axisName ).ToList();
+            var data = axisPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_LOCK ) ).Single();
 
-            int result = servo.Move(data.Value);
+            int result = servo.Move( data.Value );
 
             return result;
         }
 
-        public int MoveToUnlockPosition(string axisName)
+        public int MoveToUnlockPosition( string axisName )
         {
-            var servo = this.axes.Where(x => x.Config.AxisName.Equals(axisName)).Single();
-            var axisPositionDatas = sql.AxisPositionDataDAL.GetKFromName(axisName).ToList();
-            var data = axisPositionDatas.Where(x => x.Name.Equals(ConstString.TEACH_POSITION_UNLOCK)).Single();
+            var servo = this.axes.Where( x => x.Config.AxisName.Equals( axisName ) ).Single();
+            var axisPositionDatas = sql.AxisPositionDataDAL.GetKFromName( axisName ).ToList();
+            var data = axisPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_UNLOCK ) ).Single();
 
-            int result = servo.Move(data.Value);
+            int result = servo.Move( data.Value );
 
             return result;
         }
@@ -516,31 +521,31 @@ namespace VehicleControlSystem.ControlLayer
             int result = 0;
 
             result = this.IsAllAxisOriginReturn();
-            if (result != 0)
+            if ( result != 0 )
                 return result;
 
-            var leftPositionDatas = sql.AxisPositionDataDAL.GetKFromName(ConstString.AXIS_CARRIER_LOCK_LEFT).ToList();
-            var leftData = leftPositionDatas.Where(x => x.Name.Equals(ConstString.TEACH_POSITION_LOCK)).Single();
-            var left = this.axes.Where(x => x.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT)).Single();
+            var leftPositionDatas = sql.AxisPositionDataDAL.GetKFromName( ConstString.AXIS_CARRIER_LOCK_LEFT ).ToList();
+            var leftData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_LOCK ) ).Single();
+            var left = this.axes.Where( x => x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single();
 
-            var rightPositionDatas = sql.AxisPositionDataDAL.GetKFromName(ConstString.AXIS_CARRIER_LOCK_RIGHT).ToList();
-            var rightData = leftPositionDatas.Where(x => x.Name.Equals(ConstString.TEACH_POSITION_LOCK)).Single();
-            var right = this.axes.Where(x => x.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_RIGHT)).Single();
+            var rightPositionDatas = sql.AxisPositionDataDAL.GetKFromName( ConstString.AXIS_CARRIER_LOCK_RIGHT ).ToList();
+            var rightData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_LOCK ) ).Single();
+            var right = this.axes.Where( x => x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
 
-            result = left.StartMove(leftData.Value, 0);
-            if (result != EziMOTIONPlusELib.FMM_OK)
+            result = left.StartMove( leftData.Value, 0 );
+            if ( result != EziMOTIONPlusELib.FMM_OK )
                 return 1;
 
-            result = right.StartMove(rightData.Value, 0);
-            if (result != EziMOTIONPlusELib.FMM_OK)
+            result = right.StartMove( rightData.Value, 0 );
+            if ( result != EziMOTIONPlusELib.FMM_OK )
                 return 3;
 
             result = left.Wait4Done();
-            if (result != EziMOTIONPlusELib.FMM_OK)
+            if ( result != EziMOTIONPlusELib.FMM_OK )
                 return 1;
 
             result = right.Wait4Done();
-            if (result != EziMOTIONPlusELib.FMM_OK)
+            if ( result != EziMOTIONPlusELib.FMM_OK )
                 return 1;
 #endif
 
@@ -560,31 +565,31 @@ namespace VehicleControlSystem.ControlLayer
             int result = 0;
 
             result = this.IsAllAxisOriginReturn();
-            if (result != 0)
+            if ( result != 0 )
                 return result;
 
-            var leftPositionDatas = sql.AxisPositionDataDAL.GetKFromName(ConstString.AXIS_CARRIER_LOCK_LEFT).ToList();
-            var leftData = leftPositionDatas.Where(x => x.Name.Equals(ConstString.TEACH_POSITION_UNLOCK)).Single();
-            var left = this.axes.Where(x => x.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_LEFT)).Single();
+            var leftPositionDatas = sql.AxisPositionDataDAL.GetKFromName( ConstString.AXIS_CARRIER_LOCK_LEFT ).ToList();
+            var leftData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_UNLOCK ) ).Single();
+            var left = this.axes.Where( x => x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_LEFT ) ).Single();
 
-            var rightPositionDatas = sql.AxisPositionDataDAL.GetKFromName(ConstString.AXIS_CARRIER_LOCK_RIGHT).ToList();
-            var rightData = leftPositionDatas.Where(x => x.Name.Equals(ConstString.TEACH_POSITION_UNLOCK)).Single();
-            var right = this.axes.Where(x => x.Config.AxisName.Equals(ConstString.AXIS_CARRIER_LOCK_RIGHT)).Single();
+            var rightPositionDatas = sql.AxisPositionDataDAL.GetKFromName( ConstString.AXIS_CARRIER_LOCK_RIGHT ).ToList();
+            var rightData = leftPositionDatas.Where( x => x.Name.Equals( ConstString.TEACH_POSITION_UNLOCK ) ).Single();
+            var right = this.axes.Where( x => x.Config.AxisName.Equals( ConstString.AXIS_CARRIER_LOCK_RIGHT ) ).Single();
 
-            result = left.StartMove(leftData.Value, 0);
-            if (result != EziMOTIONPlusELib.FMM_OK)
+            result = left.StartMove( leftData.Value, 0 );
+            if ( result != EziMOTIONPlusELib.FMM_OK )
                 return 2;
 
-            result = right.StartMove(rightData.Value, 0);
-            if (result != EziMOTIONPlusELib.FMM_OK)
+            result = right.StartMove( rightData.Value, 0 );
+            if ( result != EziMOTIONPlusELib.FMM_OK )
                 return 4;
 
             result = left.Wait4Done();
-            if (result != EziMOTIONPlusELib.FMM_OK)
+            if ( result != EziMOTIONPlusELib.FMM_OK )
                 return 2;
 
             result = right.Wait4Done();
-            if (result != EziMOTIONPlusELib.FMM_OK)
+            if ( result != EziMOTIONPlusELib.FMM_OK )
                 return 4;
 #endif
 

+ 1 - 1
Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Advantech/Advantech.cs

@@ -197,8 +197,8 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
                 {
                     if ( !IsConnected )
                     {
+                        Thread.Sleep( 1000 );
                         this.TryToConnect();
-                        Thread.Sleep( 500 );
                         continue;
                     }
 

+ 34 - 84
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -503,6 +503,10 @@ namespace VehicleControlSystem.ControlLayer
 
         public int InitializationVehicle()
         {
+#if SIMULATION
+            this.VehicleStateProperty = eVehicleState.Idle;
+            return 0;
+#else
             int result = 0;
             if ( this.IsDetectedCenter() ) //자제가 있으면 Lock
                 result = this.clamp.Lock_Sync();
@@ -515,6 +519,7 @@ namespace VehicleControlSystem.ControlLayer
             this.VehicleStateProperty = eVehicleState.Idle;
 
             return result;
+#endif
         }
 
         public void Dispose()
@@ -525,7 +530,7 @@ namespace VehicleControlSystem.ControlLayer
             this.bMUManager.Disconnect();
         }
 
-        #region Request Method
+#region Request Method
         private void ReqVehicleState( DriveControlEventArgs args )
         {
             VehicleInfo state = new VehicleInfo();
@@ -647,18 +652,18 @@ namespace VehicleControlSystem.ControlLayer
 
             this.DriveControlEventPublish( msg );
         }
-        #endregion
+#endregion
 
-        #region Thread
+#region Thread
         void ThreadStart()
         {
             this.cancel.AddGo( new Action( this._ThSubCmdWorker ) );
-            this.cancel.AddGo( new Action( this._ThObstacleChecker ) );
+            this.cancel.AddGo( new Action( this._ThVehicleStateCheck ) );
         }
 
         //장애물 감지 Thread
         //장애물 감지 패턴 변경도 여기 하자.
-        private void _ThObstacleChecker()
+        private void _ThVehicleStateCheck()
         {
             while ( !this.cancel.Canceled )
             {
@@ -689,7 +694,7 @@ namespace VehicleControlSystem.ControlLayer
             //이미 알람이면 체크 안함.
             if ( this.VehicleStateProperty == eVehicleState.Abnormal ) return;
 
-            if ( this.iO.IsConnectError ) return;
+            if ( !this.iO.IsConnectError ) return;
 
             if ( this.iO.IsOn( "IN_EMS_SW" ) ) this.OccurVehicleAlarm( 28 );
             if ( !this.iO.IsOn( "IN_CP_ON_SAFETY" ) ) this.OccurVehicleAlarm( 31 );
@@ -764,9 +769,9 @@ namespace VehicleControlSystem.ControlLayer
             logger.D( "Vehicle - _ThSubCmdWorker Dispose" );
         }
 
-        #endregion
+#endregion
 
-        #region Control Action Method
+#region Control Action Method
         public void EStop()
         {
             OnOffConveyor( false );
@@ -777,7 +782,7 @@ namespace VehicleControlSystem.ControlLayer
             this.OccurVehicleAlarm( 23 );
         }
 
-        #region For Moving
+#region For Moving
         void Move( SubCmd sub )
         {
             if ( this.MoveTo( sub.TargetID ) )
@@ -830,6 +835,8 @@ namespace VehicleControlSystem.ControlLayer
                 this.VehicleStateProperty = eVehicleState.Idle;
             }
 
+            PhysicalCheckupLogger.Instance.UploadPhysicalCheckupLog();
+
             return result;
         }
 
@@ -868,6 +875,8 @@ namespace VehicleControlSystem.ControlLayer
                     }
                 }
 
+                PhysicalCheckupLogger.Instance.DriveStateLog( this.motion.CurrentSpeed.ToString(), this.motion.CurrentTorque.ToString() );
+
                 //20.04.04 Kang Drive 측으로 상태만 알려주면 알아서 처리함.
                 //if ( this.ObstacleStateProperty != eObstacleState.Normal )
                 //{
@@ -904,7 +913,7 @@ namespace VehicleControlSystem.ControlLayer
 
             return task;
         }
-        #endregion
+#endregion
 
         public bool LoadCarrier( SubCmd sub )
         {
@@ -1080,9 +1089,9 @@ namespace VehicleControlSystem.ControlLayer
             return 0;
         }
 
-        #endregion
+#endregion
 
-        #region Check Method
+#region Check Method
         bool CheckObstacle()
         {
             //if ( this.iO.IsOn( "IN_OBSTRUCTION_DETECT_SAFETY" ) || this.iO.IsOn( "IN_OBSTRUCTION_DETECT_ERROR" ) )
@@ -1112,11 +1121,11 @@ namespace VehicleControlSystem.ControlLayer
             return false;
         }
 
-        #endregion
+#endregion
 
-        #region Mechanical Method
+#region Mechanical Method
 
-        #region Conveyor
+#region Conveyor
         /// <summary>
         /// (Run = true, CW = true CCW = false)
         /// </summary>
@@ -1170,68 +1179,9 @@ namespace VehicleControlSystem.ControlLayer
         bool IsLifterDuplication() => this.iO.IsOn( "IN_LIFTER_DUPLICATION_DETECT" );
         bool IsPIOInterLockOn() => this.iO.IsOn( "OUT_PIO_INTERLOCK" );
 
-        public int ConveyorLoad()
-        {
-            if ( IsDetectedCenter() )
-                return 9;
-
-            logger.D( "[Manual Load] - Conveyor On" );
-            OnOffConveyor( true, true );
-
-            bool isStartDetected = false;
-            long sTime = SwUtils.CurrentTimeMillis;
-            while ( true )
-            {
-                if ( SwUtils.Gt( sTime, 20 * ConstUtils.ONE_SECOND ) ) //Wait 20Sec
-                {
-                    OnOffConveyor( false, true );
-                    return 10;
-                }
-
-                if ( this.IsDetectedLoadStart() && !isStartDetected )
-                    isStartDetected = true;
-
-                if ( !this.IsDetectedLoadStart() && isStartDetected )
-                {
-                    this.SetConveyorSpeed( false );
-                    logger.D( "[Manual Load] - Conveyor Slow State" );
-                }
-
-                if ( IsDetectedLoadStop() )
-                    break;
-            }
-            OnOffConveyor( false );
-            logger.D( "[Manual Load] - Conveyor Off" );
-
-            return 0;
-        }
-
-        public int ConveyorUnload()
-        {
-            if ( !IsDetectedCenter() )
-                return 11;
-
-            logger.D( "[Manual Unload] - Conveyor On" );
-            OnOffConveyor( true, false );
-
-            long sTime = SwUtils.CurrentTimeMillis;
-            while ( true )
-            {
-                if ( SwUtils.Gt( sTime, 20 * ConstUtils.ONE_SECOND ) ) //Wait 20Sec
-                {
-                    OnOffConveyor( false, false );
-                    return 12;
-                }
-
-                if ( !IsDetectedLoadStart() && !IsDetectedCenter() )
-                    break;
-            }
-            Thread.Sleep( 2000 );
-            OnOffConveyor( false );
-            logger.D( "[Manual Unload] - Conveyor Off" );
+        public int ConveyorLoad() => this.conveyor.ConveyorLoad();
 
-            return 0;
-        }
+        public int ConveyorUnload() => this.conveyor.ConveyorUnload();
 
         public int PIOAndLoad( string targetName )
         {
@@ -1480,11 +1430,11 @@ namespace VehicleControlSystem.ControlLayer
             pio.FwEach( x => { this.iO.OutputOff( x ); } );
         }
 
-        #endregion
+#endregion
 
-        #endregion
+#endregion
 
-        #region Hardware Create Method
+#region Hardware Create Method
         void CreateSteering()
         {
             this.steering = new Steering( this.iO, this.sql, this.eventAggregator );
@@ -1579,9 +1529,9 @@ namespace VehicleControlSystem.ControlLayer
             }
         }
 
-        #endregion
+#endregion
 
-        #region Help Method
+#region Help Method
         /// <summary>
         /// 현재 좌표 값이 등록된 Route 에 맞는 위치인지 확인한다.
         /// 판단 기준은 Route 에 Tolerance 범위를 사용.
@@ -1665,9 +1615,9 @@ namespace VehicleControlSystem.ControlLayer
             else
                 return;
         }
-        #endregion
+#endregion
 
-        #region Event Subscribe 
+#region Event Subscribe 
         private void Motion_PropertyChanged( object sender, System.ComponentModel.PropertyChangedEventArgs e )
         {
             var property = sender.GetType().GetProperty( e.PropertyName );
@@ -1752,6 +1702,6 @@ namespace VehicleControlSystem.ControlLayer
             }
 
         }
-        #endregion
+#endregion
     }
 }

+ 35 - 2
Dev/OHV/VehicleControlSystem/Managers/PhysicalCheckupLogger.cs

@@ -1,4 +1,6 @@
-using GSG.NET.Logging;
+using FluentFTP;
+using GSG.NET.Logging;
+using GSG.NET.ObjectBase;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -11,8 +13,39 @@ namespace VehicleControlSystem.Managers
     /// 아날로그 입력 정보를 종합하여 로그로 남기는 역할
     /// FTP 를 이용하여 파일 전송
     /// </summary>
-    class PhysicalCheckupLogger
+    class PhysicalCheckupLogger : SingletonBase<PhysicalCheckupLogger>
     {
         Logger logger = Logger.GetLogger( "PhysicalCheckup" );
+
+        private PhysicalCheckupLogger()
+        {
+        }
+
+        public void DriveStateLog(string speed, string torque, bool isFront = true )
+        {
+            if ( isFront )
+                logger.I( $"[Front] - Speed : {speed} / Torque : {torque}" );
+            else 
+                logger.I( $"[Rear] - Speed : {speed} / Torque : {torque}" );
+        }
+
+        //192.168.127.188 Moxa 용성 IP
+        public void UploadPhysicalCheckupLog()
+        {
+            using ( var ftp = new FtpClient( "192.168.127.188") )
+            {
+                ftp.Connect();
+
+
+                // upload a folder and all its files
+                ftp.UploadDirectory( @"C:\LOG\OHV\Vehicle\PhysicalCheckup\", @"/FTP_TEST", FtpFolderSyncMode.Update );
+
+                // upload a folder and all its files, and delete extra files on the server
+                //ftp.UploadDirectory( @"C:\website\assets\", @"/public_html/assets", FtpFolderSyncMode.Mirror );
+
+            }
+        }
+
+
     }
 }

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

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