|
|
@@ -3,6 +3,7 @@ using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Diagnostics;
|
|
|
using System.Linq;
|
|
|
+using System.Runtime.Remoting.Messaging;
|
|
|
using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
|
using FluentResults;
|
|
|
@@ -1549,6 +1550,7 @@ namespace VehicleControlSystem.ControlLayer
|
|
|
/// Out Put 을 Off 이면 Sensor On
|
|
|
/// </summary>
|
|
|
public void PIOSensorOff() => this.refObjects.IO.OutputOn( "OUT_PIO_SENSOR_ONOFF" );
|
|
|
+ public bool IsChargeCylinderForword() => this.refObjects.IO.IsOn( "IN_CHARGE_CYL_FWD_DETECT" );
|
|
|
|
|
|
/// <summary>
|
|
|
/// 충전 중일때 MTL PIO Bit 가 살아 있다
|
|
|
@@ -1581,6 +1583,12 @@ namespace VehicleControlSystem.ControlLayer
|
|
|
public int ConveyorLoad() => this.refObjects.Conveyor.ConveyorLoad();
|
|
|
public int ConveyorUnload() => this.refObjects.Conveyor.ConveyorUnload();
|
|
|
|
|
|
+ void PIOClear()
|
|
|
+ {
|
|
|
+ string[] pio = { "OUT_PIO_READY", "OUT_PIO_SENDING_RUN", "OUT_PIO_SEND_COMPLITE", "OUT_PIO_RECEIVABLE", "OUT_PIO_RECEIVE_RUN", "OUT_PIO_RECIVE_COMPLITE", "OUT_PIO_INTERLOCK" };
|
|
|
+ pio.FwEach( x => { this.refObjects.IO.OutputOff( x ); } );
|
|
|
+ }
|
|
|
+
|
|
|
public int PIOAndLoad( string targetName )
|
|
|
{
|
|
|
#if SIMULATION
|
|
|
@@ -1914,10 +1922,210 @@ namespace VehicleControlSystem.ControlLayer
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- void PIOClear()
|
|
|
+ public int ManualPIOAndLoad( )
|
|
|
{
|
|
|
- string[] pio = { "OUT_PIO_READY", "OUT_PIO_SENDING_RUN", "OUT_PIO_SEND_COMPLITE", "OUT_PIO_RECEIVABLE", "OUT_PIO_RECEIVE_RUN", "OUT_PIO_RECIVE_COMPLITE", "OUT_PIO_INTERLOCK" };
|
|
|
- pio.FwEach( x => { this.refObjects.IO.OutputOff( x ); } );
|
|
|
+ loggerPIO.I( $"Start Load PIO - [{this.CurrentTag}]" );
|
|
|
+
|
|
|
+ PIOClear();
|
|
|
+
|
|
|
+ this.PIOSensorOn();
|
|
|
+ LockUtils.Wait( 500 );
|
|
|
+
|
|
|
+ int result = ConstInt.EXECUTE_SUCCESS;
|
|
|
+
|
|
|
+ var pioTimeout = Convert.ToInt32( this.refObjects.Sqlite.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
|
|
|
+
|
|
|
+ result = this.refObjects.Clamp.Unlock_Sync();
|
|
|
+ if ( result != 0 )
|
|
|
+ {
|
|
|
+ this.OccurVehicleAlarm( result );
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( this.refObjects.Conveyor.IsInverterError() )
|
|
|
+ return 16;
|
|
|
+
|
|
|
+ if ( this.refObjects.Conveyor.IsDetectedCenter() )
|
|
|
+ return 9;
|
|
|
+
|
|
|
+ if ( !this.refObjects.Conveyor.IsLifterPositinCheck() )
|
|
|
+ {
|
|
|
+ loggerPIO.E( "[Port] - Lift Position Check Error" );
|
|
|
+ return 14;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.refObjects.IO.WriteOutputIO( "OUT_PIO_RECEIVABLE", true );
|
|
|
+ loggerPIO.I( "[Vehicle] - 4 Receivable" );
|
|
|
+
|
|
|
+ if ( !this.refObjects.IO.WaitChangeInputIO( true, 1 * ConstUtils.ONE_SECOND, "IN_PIO_SENDABLE" ) )
|
|
|
+ {
|
|
|
+ PIOClear();
|
|
|
+ loggerPIO.E( "[Port] - 4 Ready Time Out" );
|
|
|
+ TimerUtils.Once( 1000, this.OnFailReport, eFailCode.LoadPIOInterlockTimeout );
|
|
|
+ //this.OnFailReport?.Invoke( eFailCode.LoadPIOInterlockTimeout );
|
|
|
+ return 18;
|
|
|
+ }
|
|
|
+ loggerPIO.I( "[Port] - 4 Ready On" );
|
|
|
+
|
|
|
+ //this.conveyor.SetConveyorSpeed( true );
|
|
|
+ this.refObjects.Conveyor.OnOffConveyor( true, true );
|
|
|
+ this.refObjects.IO.WriteOutputIO( "OUT_PIO_RECEIVE_RUN", true, 1000 ); //1Sec 이후 On
|
|
|
+ loggerPIO.I( "[Vehicle] - Conveyor Run" );
|
|
|
+ this.OnConveyorStart?.Invoke( true );
|
|
|
+
|
|
|
+ if ( !this.refObjects.IO.WaitChangeInputIO( true, pioTimeout, "IN_PIO_SEND_RUN" ) )
|
|
|
+ {
|
|
|
+ this.refObjects.Conveyor.OnOffConveyor( false, true );
|
|
|
+ PIOClear();
|
|
|
+ loggerPIO.E( "[Port] - 5 Sending Run Time Out" );
|
|
|
+ return 18;
|
|
|
+ }
|
|
|
+ loggerPIO.I( "[Port] - 5 Sending Run On" );
|
|
|
+
|
|
|
+ bool isStartDetected = false;
|
|
|
+ var sTime = SwUtils.CurrentTimeMillis;
|
|
|
+ while ( true )
|
|
|
+ {
|
|
|
+ LockUtils.Wait( 10 );
|
|
|
+
|
|
|
+ if ( SwUtils.Gt( sTime, 20 * ConstUtils.ONE_SECOND ) )
|
|
|
+ {
|
|
|
+ PIOClear();
|
|
|
+ this.refObjects.Conveyor.OnOffConveyor( false, true );
|
|
|
+ loggerPIO.E( "[Vehicle] Conveyor Wait Time Out" );
|
|
|
+ return 10; //Conveyor Time Out
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( this.refObjects.Conveyor.IsDetectedLoadStart() && !isStartDetected )
|
|
|
+ isStartDetected = true;
|
|
|
+
|
|
|
+ if ( !this.refObjects.Conveyor.IsDetectedLoadStart() && isStartDetected ) { }
|
|
|
+
|
|
|
+ if ( this.refObjects.Conveyor.IsDetectedLoadStop() ) break;
|
|
|
+
|
|
|
+ if ( this.refObjects.Conveyor.IsPIOInterLockOn() )
|
|
|
+ {
|
|
|
+ PIOClear();
|
|
|
+ this.refObjects.Conveyor.OnOffConveyor( false ); //Stop
|
|
|
+ loggerPIO.E( "[Port] PIO InterLock On " );
|
|
|
+ return 19; //
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.refObjects.Conveyor.OnOffConveyor( false ); //Stop
|
|
|
+ PIOClear();
|
|
|
+ loggerPIO.I( "[Vehicle] Conveyor Stop" );
|
|
|
+
|
|
|
+ this.refObjects.IO.WriteOutputIO( "OUT_PIO_RECIVE_COMPLITE", true );
|
|
|
+ loggerPIO.I( "[Vehicle] Receive Complete On" );
|
|
|
+
|
|
|
+ if ( !this.refObjects.IO.WaitChangeInputIO( true, pioTimeout, "IN_PIO_SEND_COMPLITE" ) )
|
|
|
+ {
|
|
|
+ this.refObjects.IO.WriteOutputIO( "OUT_PIO_RECIVE_COMPLITE", false );
|
|
|
+ loggerPIO.E( "[Port] IN_PIO_SEND_COMPLITE On Time Out" );
|
|
|
+ }
|
|
|
+ loggerPIO.I( "[Port] Send Complete On" );
|
|
|
+
|
|
|
+ this.refObjects.IO.WriteOutputIO( "OUT_PIO_RECIVE_COMPLITE", false, 1000 );
|
|
|
+
|
|
|
+ loggerPIO.I( $"End Load PIO - [{this.CurrentTag}]" );
|
|
|
+
|
|
|
+ result = this.refObjects.Clamp.Lock_Sync();
|
|
|
+ if ( result != 0 )
|
|
|
+ {
|
|
|
+ this.OccurVehicleAlarm( result );
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public int ManualPIOAndUnlaod( )
|
|
|
+ {
|
|
|
+ loggerPIO.I( $"Start Unload PIO -[{this.CurrentTag}]" );
|
|
|
+
|
|
|
+ PIOClear();
|
|
|
+ this.PIOSensorOn();
|
|
|
+ LockUtils.Wait( 500 );
|
|
|
+
|
|
|
+ int result = 0;
|
|
|
+
|
|
|
+ var pioTimeout = Convert.ToInt32( this.refObjects.Sqlite.ConfigDal.GetById( ConstString.PIOTimeOut ).Value );
|
|
|
+
|
|
|
+ if ( this.refObjects.Conveyor.IsInverterError() )
|
|
|
+ return 16;
|
|
|
+
|
|
|
+ if ( !this.refObjects.Conveyor.IsDetectedCenter() )
|
|
|
+ {
|
|
|
+ return 11;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( !this.refObjects.Conveyor.IsLifterPositinCheck() )
|
|
|
+ {
|
|
|
+ loggerPIO.E( "[Port] - Lift Position Check Error" );
|
|
|
+ return 13;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( !this.refObjects.IO.WaitChangeInputIO( true, 1 * ConstUtils.ONE_SECOND, "IN_PIO_READY" ) )
|
|
|
+ {
|
|
|
+ loggerPIO.E( "[Port] - 1 Ready not On" );
|
|
|
+ return 17;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.refObjects.IO.WriteOutputIO( "OUT_PIO_READY", true );
|
|
|
+ loggerPIO.I( "[Vehicle] - 1 Ready On" );
|
|
|
+
|
|
|
+ if ( !this.refObjects.IO.WaitChangeInputIO( true, 1 * ConstUtils.ONE_SECOND, "IN_PIO_RECEIVE_RUN" ) )
|
|
|
+ {
|
|
|
+ PIOClear();
|
|
|
+ loggerPIO.E( "[Port] - 2 Receive CV Run Timeout" );
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ loggerPIO.I( "[Port] - 2 Receive CV Run On" );
|
|
|
+
|
|
|
+ result = this.refObjects.Clamp.Unlock_Sync();
|
|
|
+ if ( result != 0 )
|
|
|
+ {
|
|
|
+ this.OccurVehicleAlarm( result );
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.refObjects.IO.WriteOutputIO( "OUT_PIO_SENDING_RUN", true );
|
|
|
+ loggerPIO.I( "[Vehicle] - 2 Send Run On" );
|
|
|
+
|
|
|
+ this.refObjects.Conveyor.OnOffConveyor( true );
|
|
|
+
|
|
|
+ var sTime = SwUtils.CurrentTimeMillis;
|
|
|
+ while ( true )
|
|
|
+ {
|
|
|
+ if ( SwUtils.Gt( sTime, 20 * ConstUtils.ONE_SECOND ) )
|
|
|
+ {
|
|
|
+ PIOClear();
|
|
|
+ this.refObjects.Conveyor.OnOffConveyor( false, true );
|
|
|
+ loggerPIO.E( "[Port] Conveyor Wait Time Out" );
|
|
|
+ return 12; //Conveyor Moving Timeout
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( !this.refObjects.Conveyor.IsDetectedLoadStart() && !this.refObjects.Conveyor.IsDetectedCenter() )
|
|
|
+ {
|
|
|
+ if ( this.refObjects.IO.IsOn( "IN_PIO_RECEIVE_COMPLITE" ) )
|
|
|
+ {
|
|
|
+ loggerPIO.I( "[Port] - 3 Receive Complete On" );
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.refObjects.Conveyor.OnOffConveyor( false ); //Stop
|
|
|
+ PIOClear();
|
|
|
+
|
|
|
+ this.refObjects.IO.WriteOutputIO( "OUT_PIO_SEND_COMPLITE", true );
|
|
|
+ LockUtils.Wait( 1000 );
|
|
|
+ this.refObjects.IO.WriteOutputIO( "OUT_PIO_SEND_COMPLITE", false );
|
|
|
+ loggerPIO.I( "[Vehicle] - 3 Send Complete OnOff" );
|
|
|
+ loggerPIO.I( $"End Unload PIO - [{CurrentTag}]" );
|
|
|
+
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
#endregion
|