|
|
@@ -0,0 +1,136 @@
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using GSG.NET.Logging;
|
|
|
+using GSG.NET.Utils;
|
|
|
+using VehicleControlSystem.ControlLayer.IO;
|
|
|
+
|
|
|
+namespace VehicleControlSystem.ControlLayer
|
|
|
+{
|
|
|
+ public class Conveyor
|
|
|
+ {
|
|
|
+ Logger logger = Logger.GetLogger();
|
|
|
+ EzIO ezIO = null;
|
|
|
+
|
|
|
+ public Conveyor(EzIO io)
|
|
|
+ {
|
|
|
+ this.ezIO = io;
|
|
|
+ }
|
|
|
+
|
|
|
+ int OnOffConveyor( bool isOn, bool isLoad = false )
|
|
|
+ {
|
|
|
+ if ( IsInverterError() )
|
|
|
+ return 16;
|
|
|
+
|
|
|
+ if ( isLoad )
|
|
|
+ this.ezIO.OutputOn( "OUT_CV_CWCCW" );
|
|
|
+ else
|
|
|
+ this.ezIO.OutputOff( "OUT_CV_CWCCW" );
|
|
|
+
|
|
|
+ if ( isOn )
|
|
|
+ this.ezIO.OutputOn( "OUT_CV_RUN" );
|
|
|
+ else
|
|
|
+ this.ezIO.OutputOff( "OUT_CV_RUN" );
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ void SetConveyorSpeed( bool IsHight )
|
|
|
+ {
|
|
|
+ if ( IsHight )
|
|
|
+ this.ezIO.WriteOutputIO( "OUT_CV_DA", true );
|
|
|
+ else
|
|
|
+ this.ezIO.WriteOutputIO( "OUT_CV_DA", false );
|
|
|
+ }
|
|
|
+
|
|
|
+ bool IsCvRun() => this.ezIO.IsOn( "OUT_CV_RUN" );
|
|
|
+ bool IsCvCWCCW() => this.ezIO.IsOn( "OUT_CV_CWCCW" );
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 입구 감지 로딩시 감속 사용
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ bool IsDetectedLoadStart() => this.ezIO.IsOn( "IN_CV_DETECT_00" );
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 실물 감지
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ public bool IsDetectedCenter() => this.ezIO.IsOn( "IN_CV_DETECT_01" );
|
|
|
+
|
|
|
+ public bool IsDetectedLoadStop() => this.ezIO.IsOn( "IN_CV_DETECT_02" );
|
|
|
+ bool IsInverterError() => !this.ezIO.IsOn( "IN_CV_ERROR" ); //Normal Close 로 생각 됨.
|
|
|
+ public bool IsLifterPositinCheck() => this.ezIO.IsOn( "IN_LIFTER_POSITION_DETECT" );
|
|
|
+ public bool IsLifterDuplication() => this.ezIO.IsOn( "IN_LIFTER_DUPLICATION_DETECT" );
|
|
|
+ public bool IsPIOInterLockOn() => this.ezIO.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" );
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|