SK.Kang %!s(int64=6) %!d(string=hai) anos
pai
achega
a0e00555f3

+ 132 - 4
Dev/OHV/VehicleControlSystem/ControlLayer/Conveyor.cs

@@ -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); });
+        }
+
     }
 }

+ 13 - 0
Dev/OHV/VehicleControlSystem/ControlLayer/Steering.cs

@@ -33,5 +33,18 @@ namespace VehicleControlSystem.ControlLayer
 
             return true;
         }
+
+        void SetHightVolt()
+        {
+            this.iO.WriteOutputIO("OUT_F_STEERING_DA", true);
+            this.iO.WriteOutputIO("OUT_R_STEERING_DA", true);
+            this.iO.WriteOutputIO("OUT_F_STEERING_DA", false, 500);
+            this.iO.WriteOutputIO("OUT_R_STEERING_DA", false, 500);
+        }
+
+        bool IsFrontLeft() => this.iO.IsOn("IN_F_STEERING_DETECT_LEFT");
+        bool IsFrontRight() => this.iO.IsOn("IN_F_STEERING_DETECT_RIGHT");
+        bool IsRearLeft() => this.iO.IsOn("IN_R_STEERING_DETECT_LEFT");
+        bool IsRearRight() => this.iO.IsOn("IN_R_STEERING_DETECT_RIGHT");
     }
 }

+ 1 - 0
Dev/OHV/VehicleControlSystem/ControlLayer/Vehicle.cs

@@ -245,6 +245,7 @@ namespace VehicleControlSystem.ControlLayer
             if (this.LoadCarrier(sub))
                 sql.SubCmdDAL.Delete(sub);
         }
+
         public bool LoadCarrier(SubCmd sub)
         {
             var route = sql.RouteDal.GetRoute(sub.TargetID);