|
|
@@ -5,6 +5,7 @@ using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using GSG.NET.Logging;
|
|
|
using GSG.NET.Utils;
|
|
|
+using GSG.NET.LINQ;
|
|
|
using VehicleControlSystem.ControlLayer.IO;
|
|
|
|
|
|
namespace VehicleControlSystem.ControlLayer
|
|
|
@@ -19,7 +20,7 @@ namespace VehicleControlSystem.ControlLayer
|
|
|
this.iO = io;
|
|
|
}
|
|
|
|
|
|
- int OnOffConveyor(bool isOn, bool isCW)
|
|
|
+ int OnOffConveyor(bool isOn, bool isCW = false)
|
|
|
{
|
|
|
if (IsInverterError())
|
|
|
return 16;
|
|
|
@@ -37,6 +38,14 @@ namespace VehicleControlSystem.ControlLayer
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+ void SetConveyorSpeed(bool IsHight)
|
|
|
+ {
|
|
|
+ if (IsHight)
|
|
|
+ this.iO.WriteOutputIO("OUT_CV_DA", true);
|
|
|
+ else
|
|
|
+ this.iO.WriteOutputIO("OUT_CV_DA", false);
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 입구 감지 로딩시 감속 사용
|
|
|
/// </summary>
|
|
|
@@ -50,6 +59,8 @@ namespace VehicleControlSystem.ControlLayer
|
|
|
bool IsDetectedCenter() => this.iO.IsOn("IN_CV_DETECT_01");
|
|
|
bool IsDetectedLoadStop() => this.iO.IsOn("IN_CV_DETECT_02");
|
|
|
bool IsInverterError() => this.iO.IsOn("IN_CV_ERROR");
|
|
|
+ bool IsLifterPositinCheck() => this.iO.IsOn("IN_LIFTER_POSITION_DETECT");
|
|
|
+ bool IsLifterDuplication() => this.iO.IsOn("IN_LIFTER_DUPLICATION_DETECT");
|
|
|
|
|
|
int Load_Carrier()
|
|
|
{
|
|
|
@@ -99,20 +110,137 @@ namespace VehicleControlSystem.ControlLayer
|
|
|
|
|
|
public int PIOAndLoad(string targetName)
|
|
|
{
|
|
|
+ if (this.IsInverterError())
|
|
|
+ return 16;
|
|
|
+
|
|
|
+ if (this.IsLifterPositinCheck())
|
|
|
+ return 14;
|
|
|
+
|
|
|
+ if (this.IsLifterDuplication())
|
|
|
+ return 11;
|
|
|
+
|
|
|
+ PIOClear();
|
|
|
loggerPIO.I($"Start Load PIO - [{targetName}]");
|
|
|
|
|
|
- this.iO.write
|
|
|
+ this.iO.WriteOutputIO("OUT_PIO_RECEIVE_RUN", true);
|
|
|
+ loggerPIO.I("[Vehicle] - 4 Receive Run On");
|
|
|
+
|
|
|
+ if ( !this.iO.WaitChangeInputIO(true, 1000, "IN_PIO_SENDABLE"))
|
|
|
+ {
|
|
|
+ PIOClear();
|
|
|
+ loggerPIO.E("[Port] - 4 Ready Time Out");
|
|
|
+ return 10;
|
|
|
+ }
|
|
|
+ loggerPIO.E("[Port] - 4 Ready On");
|
|
|
+
|
|
|
+ this.SetConveyorSpeed(true);
|
|
|
+ this.OnOffConveyor(true, true);
|
|
|
+ this.iO.WriteOutputIO("OUT_PIO_RECEIVE_RUN", true);
|
|
|
+ loggerPIO.I("[Vehicle] - Conveyor Run");
|
|
|
|
|
|
+ if ( !this.iO.WaitChangeInputIO(true, 1000, "IN_PIO_SEND_RUN"))
|
|
|
+ {
|
|
|
+ this.OnOffConveyor(false, true);
|
|
|
+ PIOClear();
|
|
|
+ loggerPIO.E("[Port] - 5 Sending Run Time Out");
|
|
|
+ return 10;
|
|
|
+ }
|
|
|
+
|
|
|
+ bool isStartDetected = false;
|
|
|
+ var sTime = SwUtils.CurrentTimeMillis;
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ if ( SwUtils.Gt(sTime, 20 * ConstUtils.ONE_SECOND))
|
|
|
+ {
|
|
|
+ PIOClear();
|
|
|
+ this.OnOffConveyor(false, true);
|
|
|
+ loggerPIO.E("[Vehicle] Conveyor Wait Time Out");
|
|
|
+ return 10; //Conveyor Moving Timeout
|
|
|
+ }
|
|
|
|
|
|
+ if (this.IsDetectedLoadStart() && !isStartDetected)
|
|
|
+ isStartDetected = true;
|
|
|
+
|
|
|
+ if (!this.IsDetectedLoadStart() && isStartDetected)
|
|
|
+ this.SetConveyorSpeed(false);
|
|
|
+
|
|
|
+ if (this.IsDetectedLoadStop()) break;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.OnOffConveyor(false); //Stop
|
|
|
+ PIOClear();
|
|
|
+
|
|
|
+ this.iO.WriteOutputIO("OUT_PIO_RECIVE_COMPLITE", true);
|
|
|
+ this.iO.WriteOutputIO("OUT_PIO_RECIVE_COMPLITE", false, 1000);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- public int PIOAndUnload()
|
|
|
+ public int PIOAndUnload(string targetName)
|
|
|
{
|
|
|
- loggerPIO.I("Start Unload PIO");
|
|
|
+ if (this.IsInverterError())
|
|
|
+ return 16;
|
|
|
+
|
|
|
+ if (this.IsLifterDuplication())
|
|
|
+ return 15;
|
|
|
+
|
|
|
+ if (this.IsLifterPositinCheck())
|
|
|
+ return 13;
|
|
|
+
|
|
|
+ PIOClear();
|
|
|
+ loggerPIO.I($"Start Unload PIO - [{targetName}]");
|
|
|
+
|
|
|
+ if (!this.iO.IsOn("IN_PIO_READY"))
|
|
|
+ {
|
|
|
+ loggerPIO.E("[Port] - 1 Ready not On");
|
|
|
+ return 12;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.iO.WriteOutputIO("OUT_PIO_READY", true);
|
|
|
+ loggerPIO.I("[Vehicle] - 1 Ready On");
|
|
|
+
|
|
|
+ if ( !this.iO.WaitChangeInputIO(true, 1000, "IN_PIO_RECEIVE_RUN"))
|
|
|
+ {
|
|
|
+ PIOClear();
|
|
|
+ loggerPIO.E("[Port] - 2 Receive CV Run Timeout");
|
|
|
+ return 12;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.iO.WriteOutputIO("", true);
|
|
|
+ loggerPIO.I("[Vehicle] - 2 Send Run On");
|
|
|
+
|
|
|
+ this.SetConveyorSpeed(true);
|
|
|
+ this.OnOffConveyor(true);
|
|
|
+
|
|
|
+ var sTime = SwUtils.CurrentTimeMillis;
|
|
|
+ while (true)
|
|
|
+ {
|
|
|
+ if (SwUtils.Gt(sTime, 20 * ConstUtils.ONE_SECOND))
|
|
|
+ {
|
|
|
+ PIOClear();
|
|
|
+ this.OnOffConveyor(false, true);
|
|
|
+ loggerPIO.E("[Port] Conveyor Wait Time Out");
|
|
|
+ return 12; //Conveyor Moving Timeout
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.iO.IsOn("IN_PIO_RECEIVE_COMPLITE"))
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.OnOffConveyor(false); //Stop
|
|
|
+ PIOClear();
|
|
|
+
|
|
|
+ this.iO.WriteOutputIO("OUT_PIO_SEND_COMPLITE", true);
|
|
|
+ this.iO.WriteOutputIO("OUT_PIO_SEND_COMPLITE", false, 1000);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+ 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.iO.OutputOff(x); });
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|