Browse Source

현장 커밋

SK.Kang 6 years ago
parent
commit
73c52cc656

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

@@ -12,7 +12,7 @@ using VehicleControlSystem.ControlLayer.Serial.DataModel;
 
 namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
 {
-    public class Advantech
+    public class Advantech : ICanConnecter
     {
         AdvCANIO device;
         string canPortName;
@@ -97,7 +97,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
             this.device = new AdvCANIO();
         }
 
-        internal void Enqueue( object o )
+        public void Enqueue( object o )
         {
             this.qqW.Enqueue( o );
         }

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

@@ -6,7 +6,10 @@ using System.Threading.Tasks;
 
 namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
 {
-    interface IConectionNet
+    interface ICanConnecter
     {
+        bool IsConnected { get; set; }
+        void Enqueue( object o );
+        void _ThreadPoolingReceiveData();
     }
 }

+ 5 - 5
Dev/OHV/VehicleControlSystem/ControlLayer/Serial/BatteryTabos/Peak/Peak.cs

@@ -18,10 +18,10 @@ using VehicleControlSystem.ControlLayer.Serial.DataModel;
 
 namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
 {
-    public class Peak
+    public class Peak : ICanConnecter
     {
         /// <summary>
-        /// Peack USB Handle
+        /// Peak USB Handle
         /// </summary>
         UInt16 handle = PCANBasic.PCAN_USBBUS1;
 
@@ -85,7 +85,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
             this.manager = mrg;
         }
 
-        internal void Enqueue(object o )
+        public void Enqueue(object o )
         {
             this.qqW.Enqueue( o );
         }
@@ -222,7 +222,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
         /// </summary>
         /// <param name="auto"></param>
         
-        public int Write(eSendMode mode)
+        int Write(eSendMode mode)
         {
             var data = new TPCANMsg();
             data.DATA = new byte[ 8 ];
@@ -253,7 +253,7 @@ namespace VehicleControlSystem.ControlLayer.Serial.BatteryTabos
             return 0;
         }
 
-        public int Write(bool auto = false)
+        int Write(bool auto = false)
         {
             var data = new TPCANMsg();
             data.DATA = new byte[ 8 ];

+ 105 - 89
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -57,7 +57,7 @@ namespace VehicleControlSystem.ControlLayer
             get { return currentTag; }
             set
             {
-                if ( SetField( ref this.currentTag , value ) )
+                if ( SetField( ref this.currentTag, value ) )
                 {
                     var info = sql.VehicleInfoDAL.GetInfo();
                     info.CurrentTag = value;
@@ -77,7 +77,7 @@ namespace VehicleControlSystem.ControlLayer
             get { return currentPosition; }
             set
             {
-                if ( SetField( ref this.currentPosition , value ) )
+                if ( SetField( ref this.currentPosition, value ) )
                 {
                 }
             }
@@ -87,41 +87,41 @@ namespace VehicleControlSystem.ControlLayer
         public double CurrentSpeed
         {
             get { return currentSpeed; }
-            set { SetField( ref this.currentSpeed , value ); }
+            set { SetField( ref this.currentSpeed, value ); }
         }
 
         private double currentTorque;
         public double CurrentTorque
         {
             get { return currentTorque; }
-            set { SetField( ref this.currentTorque , value ); }
+            set { SetField( ref this.currentTorque, value ); }
         }
 
         private bool isContain;
         public bool IsContain
         {
             get { return isContain; }
-            set { SetField( ref this.isContain , value ); }
+            set { SetField( ref this.isContain, value ); }
         }
 
         eClampState _clampState;
         public eClampState ClampState
         {
             get { return this._clampState; }
-            set { this.SetField( ref this._clampState , value ); }
+            set { this.SetField( ref this._clampState, value ); }
         }
 
         private eSteeringState steeringState;
         public eSteeringState SteeringState
         {
             get { return steeringState; }
-            set { SetField( ref this.steeringState , value ); }
+            set { SetField( ref this.steeringState, value ); }
         }
 
         private int _obstacleDrive;
-        public int ObstacleDrive { get { return this._obstacleDrive; } set { SetField( ref this._obstacleDrive , value ); } }
+        public int ObstacleDrive { get { return this._obstacleDrive; } set { SetField( ref this._obstacleDrive, value ); } }
         private int _obstacleCurve;
-        public int ObstacleCurve { get { return this._obstacleCurve; } set { SetField( ref this._obstacleCurve , value ); } }
+        public int ObstacleCurve { get { return this._obstacleCurve; } set { SetField( ref this._obstacleCurve, value ); } }
 
         private eObstacleState obstacleState = eObstacleState.Normal;
         public eObstacleState ObstacleStateProperty
@@ -129,7 +129,7 @@ namespace VehicleControlSystem.ControlLayer
             get { return obstacleState; }
             set
             {
-                if ( SetField( ref this.obstacleState , value ) )
+                if ( SetField( ref this.obstacleState, value ) )
                 {
                     if ( value == eObstacleState.Blocked )
                         this.VehicleStateProperty = eVehicleState.Blocked;
@@ -143,7 +143,7 @@ namespace VehicleControlSystem.ControlLayer
             get { return vehicleState; }
             set
             {
-                if ( SetField( ref this.vehicleState , value ) )
+                if ( SetField( ref this.vehicleState, value ) )
                 {
                     var info = sql.VehicleInfoDAL.GetInfo();
                     info.VehicleState = value;
@@ -158,7 +158,7 @@ namespace VehicleControlSystem.ControlLayer
             get { return machineMode; }
             set
             {
-                if ( SetField( ref this.machineMode , value ) )
+                if ( SetField( ref this.machineMode, value ) )
                 {
                     var info = sql.VehicleInfoDAL.GetInfo();
                     info.MachineMode = value;
@@ -192,70 +192,70 @@ namespace VehicleControlSystem.ControlLayer
         public double BatteryVoltage
         {
             get { return this.batteryVoltage; }
-            set { this.SetField( ref this.batteryVoltage , value ); }
+            set { this.SetField( ref this.batteryVoltage, value ); }
         }
 
         double batteryCurrent;
         public double BatteryCurrent
         {
             get { return this.batteryCurrent; }
-            set { this.SetField( ref this.batteryCurrent , value ); }
+            set { this.SetField( ref this.batteryCurrent, value ); }
         }
 
         double batteryState;
         public double BatteryState
         {
             get { return this.batteryState; }
-            set { this.SetField( ref this.batteryState , value ); }
+            set { this.SetField( ref this.batteryState, value ); }
         }
 
         double batteryChargeTime;
         public double BatteryChargeTime
         {
             get { return this.batteryChargeTime; }
-            set { this.SetField( ref this.batteryChargeTime , value ); }
+            set { this.SetField( ref this.batteryChargeTime, value ); }
         }
 
         double batteryDisChargeTime;
         public double BatteryDisChargeTime
         {
             get { return this.batteryDisChargeTime; }
-            set { this.SetField( ref this.batteryDisChargeTime , value ); }
+            set { this.SetField( ref this.batteryDisChargeTime, value ); }
         }
 
         double batteryStateOfCharge;
         public double BatteryStateOfCharge
         {
             get { return this.batteryStateOfCharge; }
-            set { this.SetField( ref this.batteryStateOfCharge , value ); }
+            set { this.SetField( ref this.batteryStateOfCharge, value ); }
         }
 
         double batteryStateOfHealth;
         public double BatteryStateOfHealth
         {
             get { return this.batteryStateOfHealth; }
-            set { this.SetField( ref this.batteryStateOfHealth , value ); }
+            set { this.SetField( ref this.batteryStateOfHealth, value ); }
         }
 
         double batteryCapacity;
         public double BatteryCapacity
         {
             get { return this.batteryCapacity; }
-            set { this.SetField( ref this.batteryCapacity , value ); }
+            set { this.SetField( ref this.batteryCapacity, value ); }
         }
 
         double batteryEnergy;
         public double BatteryEnergy
         {
             get { return this.batteryEnergy; }
-            set { this.SetField( ref this.batteryEnergy , value ); }
+            set { this.SetField( ref this.batteryEnergy, value ); }
         }
 
         double batteryTemperature;
         public double BatteryTemperature
         {
             get { return this.batteryTemperature; }
-            set { this.SetField( ref this.batteryTemperature , value ); }
+            set { this.SetField( ref this.batteryTemperature, value ); }
         }
 
         bool batteryIsConnect;
@@ -266,8 +266,8 @@ namespace VehicleControlSystem.ControlLayer
                 this.BatteryIsConnect = this.bMUManager.IsConnected;
                 return this.bMUManager.IsConnected;
             }
-            set { this.SetField( ref this.batteryIsConnect , value ); }
-        } 
+            set { this.SetField( ref this.batteryIsConnect, value ); }
+        }
         #endregion
         public bool IsError { get; set; }
 
@@ -469,11 +469,11 @@ namespace VehicleControlSystem.ControlLayer
 
         public void ReqConveyorMove( string dir )
         {
-            if ( dir.Equals("CW") ) 
+            if ( dir.Equals( "CW" ) )
                 this.OnOffConveyor( true, false );
-            else if ( dir.Equals("CCW")) 
+            else if ( dir.Equals( "CCW" ) )
                 this.OnOffConveyor( true, true );
-            else if ( dir.Equals("STOP") )
+            else if ( dir.Equals( "STOP" ) )
                 this.OnOffConveyor( false, false );
         }
 
@@ -531,7 +531,7 @@ namespace VehicleControlSystem.ControlLayer
             this.bMUManager.Disconnect();
         }
 
-#region Request Method
+        #region Request Method
         private void ReqVehicleState( DriveControlEventArgs args )
         {
             VehicleInfo state = new VehicleInfo();
@@ -539,7 +539,7 @@ namespace VehicleControlSystem.ControlLayer
             state.CurrentSpeed = this.CurrentSpeed;
             state.CurrentTag = this.CurrentTag;
             state.CurrentTorque = this.CurrentTorque;
-            
+
             state.Voltage = this.BatteryVoltage;
             state.Current = this.BatteryCurrent;
             state.BatteryState = this.BatteryState;
@@ -653,9 +653,9 @@ namespace VehicleControlSystem.ControlLayer
 
             this.DriveControlEventPublish( msg );
         }
-#endregion
+        #endregion
 
-#region Thread
+        #region Thread
         void ThreadStart()
         {
             this.cancel.AddGo( new Action( this._ThSubCmdWorker ) );
@@ -770,9 +770,9 @@ namespace VehicleControlSystem.ControlLayer
             logger.D( "Vehicle - _ThSubCmdWorker Dispose" );
         }
 
-#endregion
+        #endregion
 
-#region Control Action Method
+        #region Control Action Method
         public void EStop()
         {
             OnOffConveyor( false );
@@ -783,7 +783,7 @@ namespace VehicleControlSystem.ControlLayer
             this.OccurVehicleAlarm( 23 );
         }
 
-#region For Moving
+        #region For Moving
         void Move( SubCmd sub )
         {
             if ( this.MoveTo( sub.TargetID ) )
@@ -836,7 +836,7 @@ namespace VehicleControlSystem.ControlLayer
                 this.VehicleStateProperty = eVehicleState.Idle;
             }
 
-            PhysicalCheckupLogger.Instance.UploadPhysicalCheckupLog();
+            //PhysicalCheckupLogger.Instance.UploadPhysicalCheckupLog();
 
             return result;
         }
@@ -898,7 +898,7 @@ namespace VehicleControlSystem.ControlLayer
 
         Task CheckCrossPoint()
         {
-            var task = Task.Run( () => 
+            var task = Task.Run( () =>
             {
                 long sTime = SwUtils.CurrentTimeMillis;
 
@@ -914,7 +914,7 @@ namespace VehicleControlSystem.ControlLayer
 
             return task;
         }
-#endregion
+        #endregion
 
         public bool LoadCarrier( SubCmd sub )
         {
@@ -1004,9 +1004,9 @@ namespace VehicleControlSystem.ControlLayer
             this.VehicleStateProperty = eVehicleState.Charge;
 
             this.iO.OutputOn( "OUT_PIO_SENSOR_ONOFF" );
-            
+
             this.PIOBatteryCharge( subCmd );
-            
+
             this.iO.OutputOff( "OUT_PIO_SENSOR_ONOFF" );
 
             sql.CommandDAL.UpdateState( subCmd.CmdID, eCommandState.Complete );
@@ -1090,9 +1090,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" ) )
@@ -1122,11 +1122,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>
@@ -1178,7 +1178,7 @@ namespace VehicleControlSystem.ControlLayer
         bool IsInverterError() => !this.iO.IsOn( "IN_CV_ERROR" ); //Normal Close 로 생각 됨.
         bool IsLifterPositinCheck() => this.iO.IsOn( "IN_LIFTER_POSITION_DETECT" );
         bool IsLifterDuplication() => this.iO.IsOn( "IN_LIFTER_DUPLICATION_DETECT" );
-        bool IsPIOInterLockOn() => this.iO.IsOn( "OUT_PIO_INTERLOCK" );
+        bool IsPIOInterLockOn() => this.iO.IsOn( "IN_PIO_INTERLOCK" );
 
         public int ConveyorLoad() => this.conveyor.ConveyorLoad();
 
@@ -1216,14 +1216,15 @@ namespace VehicleControlSystem.ControlLayer
             if ( this.IsInverterError() )
                 return 16;
 
-            if ( this.IsLifterPositinCheck() )
+            if ( !this.IsLifterPositinCheck() )
                 return 14;
 
-            if ( !this.IsLifterDuplication() )
-            {
-                this.OnFailReport?.Invoke( eFailCode.Load_PortHasNotCarrier );
-                return 0;
-            }
+            //Todo: Sensor Setting 이 후 주석 풀기.
+            //if ( !this.IsLifterDuplication() )
+            //{
+            //    this.OnFailReport?.Invoke( eFailCode.Load_PortHasNotCarrier );
+            //    return 0;
+            //}
 
             if ( this.IsDetectedCenter() )
             {
@@ -1235,10 +1236,10 @@ namespace VehicleControlSystem.ControlLayer
             loggerPIO.I( $"Start Load PIO - [{targetName}]" );
             this.OnPIOStart?.Invoke( true );
 
-            this.iO.WriteOutputIO( "OUT_PIO_RECEIVE_RUN" , true );
-            loggerPIO.I( "[Vehicle] - 4 Receive Run On" );
+            this.iO.WriteOutputIO( "OUT_PIO_RECEIVABLE", true );
+            loggerPIO.I( "[Vehicle] - 4 Receivable" );
 
-            if ( !this.iO.WaitChangeInputIO( true , pioTimeout , "IN_PIO_SENDABLE" ) )
+            if ( !this.iO.WaitChangeInputIO( true, pioTimeout, "IN_PIO_SENDABLE" ) )
             {
                 PIOClear();
                 loggerPIO.E( "[Port] - 4 Ready Time Out" );
@@ -1248,28 +1249,31 @@ namespace VehicleControlSystem.ControlLayer
             loggerPIO.E( "[Port] - 4 Ready On" );
 
             this.SetConveyorSpeed( true );
-            this.OnOffConveyor( true , true );
-            this.iO.WriteOutputIO( "OUT_PIO_RECEIVE_RUN" , true, 1000 );
+            this.OnOffConveyor( true, true );
+            this.iO.WriteOutputIO( "OUT_PIO_RECEIVE_RUN", true, 1000 ); //1Sec 이후 On
             loggerPIO.I( "[Vehicle] - Conveyor Run" );
             this.OnConveyorStart?.Invoke( true );
 
-            if ( !this.iO.WaitChangeInputIO( true , pioTimeout , "IN_PIO_SEND_RUN" ) )
+            if ( !this.iO.WaitChangeInputIO( true, pioTimeout, "IN_PIO_SEND_RUN" ) )
             {
-                this.OnOffConveyor( false , true );
+                this.OnOffConveyor( false, true );
                 PIOClear();
                 loggerPIO.E( "[Port] - 5 Sending Run Time Out" );
                 this.OnFailReport?.Invoke( eFailCode.LoadPIOInterlockTimeout );
                 return 0;
             }
+            loggerPIO.I( "[Port] - 5 Sending Run On" );
 
             bool isStartDetected = false;
             var sTime = SwUtils.CurrentTimeMillis;
             while ( true )
             {
-                if ( SwUtils.Gt( sTime , 20 * ConstUtils.ONE_SECOND ) )
+                LockUtils.Wait( 10 );
+
+                if ( SwUtils.Gt( sTime, 20 * ConstUtils.ONE_SECOND ) )
                 {
                     PIOClear();
-                    this.OnOffConveyor( false , true );
+                    this.OnOffConveyor( false, true );
                     loggerPIO.E( "[Vehicle] Conveyor Wait Time Out" );
                     this.OnFailReport?.Invoke( eFailCode.LoadPIOInterlockTimeout );
 
@@ -1302,16 +1306,22 @@ namespace VehicleControlSystem.ControlLayer
             this.OnOffConveyor( false ); //Stop
             PIOClear();
             this.OnConveyorStop?.Invoke( true );
+            loggerPIO.I( "[Vehicle] Conveyor Stop" );
 
-            this.iO.WriteOutputIO( "OUT_PIO_RECIVE_COMPLITE" , true );
-            if ( !this.iO.WaitChangeInputIO(true, pioTimeout, "IN_PIO_SEND_COMPLITE" ) )
+            this.iO.WriteOutputIO( "OUT_PIO_RECIVE_COMPLITE", true );
+            loggerPIO.I( "[Vehicle] Receive Complete On" );
+            if ( !this.iO.WaitChangeInputIO( true, pioTimeout, "IN_PIO_SEND_COMPLITE" ) )
             {
                 this.iO.WriteOutputIO( "OUT_PIO_RECIVE_COMPLITE", false );
                 loggerPIO.E( "[Port]  IN_PIO_SEND_COMPLITE On Time Out" );
             }
-            this.iO.WriteOutputIO( "OUT_PIO_RECIVE_COMPLITE", false );
+            loggerPIO.I( "[Port] Send Complete On" );
+
+            this.iO.WriteOutputIO( "OUT_PIO_RECIVE_COMPLITE", false, 1000 );
 
             this.OnLoadComplete?.Invoke();
+
+            loggerPIO.I( $"End Load PIO - [{targetName}]" );
 #endif
 
             return 0;
@@ -1357,7 +1367,7 @@ namespace VehicleControlSystem.ControlLayer
                 return 0;
             }
 
-            if ( this.IsLifterPositinCheck() )
+            if ( !this.IsLifterPositinCheck() )
                 return 13;
 
             PIOClear();
@@ -1371,18 +1381,19 @@ namespace VehicleControlSystem.ControlLayer
                 return 0;
             }
 
-            this.iO.WriteOutputIO( "OUT_PIO_READY" , true );
+            this.iO.WriteOutputIO( "OUT_PIO_READY", true );
             loggerPIO.I( "[Vehicle] - 1 Ready On" );
 
-            if ( !this.iO.WaitChangeInputIO( true , pioTimeout , "IN_PIO_RECEIVE_RUN" ) )
+            if ( !this.iO.WaitChangeInputIO( true, pioTimeout, "IN_PIO_RECEIVE_RUN" ) )
             {
                 PIOClear();
                 loggerPIO.E( "[Port] - 2 Receive CV Run Timeout" );
                 this.OnFailReport?.Invoke( eFailCode.UnlaodPIOInterlockTimeout );
                 return 0;
             }
+            loggerPIO.E( "[Port] - 2 Receive CV Run On" );
 
-            this.iO.WriteOutputIO( "OUT_PIO_SENDING_RUN" , true );
+            this.iO.WriteOutputIO( "OUT_PIO_SENDING_RUN", true );
             loggerPIO.I( "[Vehicle] - 2 Send Run On" );
 
             this.SetConveyorSpeed( true );
@@ -1392,10 +1403,10 @@ namespace VehicleControlSystem.ControlLayer
             var sTime = SwUtils.CurrentTimeMillis;
             while ( true )
             {
-                if ( SwUtils.Gt( sTime , 20 * ConstUtils.ONE_SECOND ) )
+                if ( SwUtils.Gt( sTime, 20 * ConstUtils.ONE_SECOND ) )
                 {
                     PIOClear();
-                    this.OnOffConveyor( false , true );
+                    this.OnOffConveyor( false, true );
                     loggerPIO.E( "[Port] Conveyor Wait Time Out" );
                     this.OnFailReport?.Invoke( eFailCode.UnlaodPIOInterlockTimeout );
 
@@ -1409,7 +1420,10 @@ namespace VehicleControlSystem.ControlLayer
                 if ( !IsDetectedLoadStart() && !IsDetectedCenter() )
                 {
                     if ( this.iO.IsOn( "IN_PIO_RECEIVE_COMPLITE" ) )
+                    {
+                        loggerPIO.I( "[Port] - 3 Receive Complete On" );
                         break;
+                    }
                 }
             }
 
@@ -1420,12 +1434,14 @@ namespace VehicleControlSystem.ControlLayer
             this.OnConveyorStop?.Invoke( false );
             PIOClear();
 
-            this.iO.WriteOutputIO( "OUT_PIO_SEND_COMPLITE" , true );
+            this.iO.WriteOutputIO( "OUT_PIO_SEND_COMPLITE", true );
             Thread.Sleep( 1000 );
-            this.iO.WriteOutputIO( "OUT_PIO_SEND_COMPLITE" , false );
+            this.iO.WriteOutputIO( "OUT_PIO_SEND_COMPLITE", false );
+            loggerPIO.I( "[Vehicle] - 3 Send Complete OnOff" );
 
             this.OnUnloadComplete?.Invoke();
 #endif
+            loggerPIO.I( $"End Unload PIO - [{targetName}]" );
 
             return 0;
         }
@@ -1436,11 +1452,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 );
@@ -1471,7 +1487,7 @@ namespace VehicleControlSystem.ControlLayer
             this.bMUManager.OnChangedReceivedData += BMUManager_OnChangedReceivedData;
             this.bMUManager.OnFirstColtd += BMUManager_OnFirstColtd;
 
-            this.bMUManager.Connect(BMUManager.eCANSelect.Advantech);
+            this.bMUManager.Connect( BMUManager.eCANSelect.Advantech );
         }
 
         private void BMUManager_OnDisconnect( string obj, bool state )
@@ -1488,7 +1504,7 @@ namespace VehicleControlSystem.ControlLayer
         private void BMUManager_OnFirstColtd( List<ReceivedData> obj )
         {
         }
-        
+
         private void BMUManager_OnChangedReceivedData( Serial.DataModel.ReceivedData obj )
         {
             var kind = CastTo<eDataKind>.From<Enum>( obj.DataKind );
@@ -1503,7 +1519,7 @@ namespace VehicleControlSystem.ControlLayer
                 case eDataKind.BatteryState:
                     if ( obj.Value == null )
                         return;
-                    this.BatteryState = ( double )obj.Value;
+                    this.BatteryState = (double)obj.Value;
                     break;
                 case eDataKind.ChargeCompleteTime:
                     if ( obj.Value == null || obj.Value <= 0 )
@@ -1513,31 +1529,31 @@ namespace VehicleControlSystem.ControlLayer
                 case eDataKind.DisChargeCompleteTime:
                     if ( obj.Value == null || obj.Value <= 0 )
                         return;
-                    this.BatteryDisChargeTime = ( double )obj.Value / obj.Scale;
+                    this.BatteryDisChargeTime = (double)obj.Value / obj.Scale;
                     break;
                 case eDataKind.SOC:
-                    this.BatteryStateOfCharge = ( double )obj.Value * obj.Scale;
+                    this.BatteryStateOfCharge = (double)obj.Value * obj.Scale;
                     break;
                 case eDataKind.SOH:
-                    this.BatteryStateOfHealth = ( double )obj.Value * obj.Scale;
+                    this.BatteryStateOfHealth = (double)obj.Value * obj.Scale;
                     break;
                 case eDataKind.ResidualCapacity:
-                    this.BatteryCapacity = ( double )obj.Value * obj.Scale;
+                    this.BatteryCapacity = (double)obj.Value * obj.Scale;
                     break;
                 case eDataKind.ResidualEnergy:
-                    this.BatteryEnergy = ( double )obj.Value * obj.Scale;
+                    this.BatteryEnergy = (double)obj.Value * obj.Scale;
                     break;
                 case eDataKind.Temperature:
-                    this.BatteryTemperature = ( double )obj.Value * obj.Scale;
+                    this.BatteryTemperature = (double)obj.Value * obj.Scale;
                     break;
                 default:
                     break;
             }
         }
 
-#endregion
+        #endregion
 
-#region Help Method
+        #region Help Method
         /// <summary>
         /// 현재 좌표 값이 등록된 Route 에 맞는 위치인지 확인한다.
         /// 판단 기준은 Route 에 Tolerance 범위를 사용.
@@ -1621,9 +1637,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 );
@@ -1693,7 +1709,7 @@ namespace VehicleControlSystem.ControlLayer
             if ( e != 0 )
             {
                 logger.E( $"[Steering] - Control Error {e}" );
-                this.OccurVehicleAlarm( e ) ;
+                this.OccurVehicleAlarm( e );
             }
             else
             {
@@ -1708,6 +1724,6 @@ namespace VehicleControlSystem.ControlLayer
             }
 
         }
-#endregion
+        #endregion
     }
 }

+ 86 - 4
Dev/OHV/VehicleControlSystem/Managers/PhysicalCheckupLogger.cs

@@ -1,6 +1,8 @@
 using FluentFTP;
 using GSG.NET.Logging;
 using GSG.NET.ObjectBase;
+using GSG.NET.TCP;
+using GSG.NET.Utils;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -18,24 +20,31 @@ namespace VehicleControlSystem.Managers
     {
         Logger logger = Logger.GetLogger( "PhysicalCheckup" );
 
+        TcpConnector h = new TcpConnector();
+        const byte CR = 0x0d;
+
+        public string PLCAddress { get; set; }
+        public int PLCPort { get; set; }
+        public string PLCFolderName { get; set; }
+        public string FTPFolderName { get; set; }
+
         private PhysicalCheckupLogger()
         {
         }
 
-        public void DriveStateLog(string speed, string torque, bool isFront = true )
+        public void DriveStateLog( string speed, string torque, bool isFront = true )
         {
             if ( isFront )
                 logger.I( $"[Front] - Speed : {speed} / Torque : {torque}" );
-            else 
+            else
                 logger.I( $"[Rear] - Speed : {speed} / Torque : {torque}" );
         }
 
-        //192.168.127.188 Moxa 용성 IP
         public async Task UploadPhysicalCheckupLogAsync()
         {
             var token = new CancellationToken();
 
-            using ( var ftp = new FtpClient( "192.168.127.188") )
+            using ( var ftp = new FtpClient( "192.168.127.188" ) )
             {
                 await ftp.ConnectAsync( token );
 
@@ -44,9 +53,82 @@ namespace VehicleControlSystem.Managers
 
                 // upload a folder and all its files, and delete extra files on the server
                 //ftp.UploadDirectory( @"C:\website\assets\", @"/public_html/assets", FtpFolderSyncMode.Mirror );
+
+                //ToDo: Delete Files
             }
+
+
+        }
+
+        public void DownloadPLCLog()
+        {
+            using ( var ftp = new FtpClient( "192.168.0.20", "KVID", "1234" ) )
+            {
+                ftp.Connect();
+
+
+                // download a folder and all its files
+                ftp.DownloadDirectory( @"C:\website\logs\", @"/public_html/logs", FtpFolderSyncMode.Update );
+
+                // download a folder and all its files, and delete extra files on disk
+                //await ftp.DownloadDirectoryAsync( @"C:\website\dailybackup\", @"/public_html/", FtpFolderSyncMode.Mirror );
+
+                ftp.DeleteFile( "/full/or/relative/path/to/file" );
+            }
+        }
+
+
+        /// <summary>
+        /// 주행 시작 시 진단 PLC Bit On
+        /// </summary>
+        /// <returns></returns>
+        public bool SetPLCStartDrive()
+        {
+            this.h.Connect( new TcpComm
+            {
+                Active = true,
+                Ip = this.PLCAddress,
+                PortNo = this.PLCPort,
+            } );
+
+            if ( !h.Connected )
+                return false;
+
+            var mb = new MemoryBuffer();
+            mb.AppendAscii( "WR MR100 1" );
+            mb.Append( CR );
+            this.h.WriteFlush( mb.ToBytes );
+
+            h.CloseSocket();
+
+            return true;
         }
 
+        /// <summary>
+        /// 주행 정지 시 진단 PLC Bit Off
+        /// </summary>
+        /// <returns></returns>
+        public bool ResetPLCStartDrive()
+        {
+            this.h.Connect( new TcpComm
+            {
+                Active = true,
+                Ip = this.PLCAddress,
+                PortNo = this.PLCPort,
+            } );
+
+            if ( !h.Connected )
+                return false;
+
+            var mb = new MemoryBuffer();
+            mb.AppendAscii( "WR MR100 0" );
+            mb.Append( CR );
+            this.h.WriteFlush( mb.ToBytes );
+
+            h.CloseSocket();
+
+            return true;
+        }
 
     }
 }

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

@@ -136,7 +136,7 @@
     <Compile Include="ControlLayer\Serial\BatteryTabos\Config.cs" />
     <Compile Include="ControlLayer\Serial\BatteryTabos\Delegates.cs" />
     <Compile Include="ControlLayer\Serial\BatteryTabos\EnumBatteryStatus.cs" />
-    <Compile Include="ControlLayer\Serial\BatteryTabos\IConectionNet.cs" />
+    <Compile Include="ControlLayer\Serial\BatteryTabos\ICanConnecter.cs" />
     <Compile Include="ControlLayer\Serial\BatteryTabos\Manager.cs" />
     <Compile Include="ControlLayer\Serial\BatteryTabos\Peak\PCANBasic.cs" />
     <Compile Include="ControlLayer\Serial\BatteryTabos\Peak\Peak.cs" />