林豪 左 il y a 3 ans
Parent
commit
fa27f13af5

+ 174 - 0
Projects/永冠/WCS.Service/Works/Stations/22车间.cs

@@ -0,0 +1,174 @@
+using DBHelper;
+using System;
+using System.Linq;
+using WCS.Core;
+using WCS.Entity;
+using WCS.Entity.Protocol;
+using WCS.Service.Helpers;
+
+namespace WCS.Service.Works.Stations
+{
+    [WorkTitle(typeof(ProductHandler), "_22车间入库", true)]
+    public class _22车间入库 : DeviceWork<Device<IStation521, IStation520>>
+    {
+        protected override void Do(Device<IStation521, IStation520> dev)
+        {
+            if (!SystemConfigHelpers.GetDeviceConfig(dev.Entity.CODE)) throw new Exception($"已禁止[{dev.Entity.CODE}]入库,请联系机修确认");
+            if (Ltc.Do(dev, v => v.Data2.CONFIRM == true)) throw new Exception($"设备[{dev.Entity.CODE}]确认信号未清除,请检查PLC中上一个任务是否完成状态异常");
+            if (Ltc.Do(dev, v => !v.Data.REQUEST)) return;
+
+            var bcr = dev.Entity.BCR();
+            var barcode = bcr.CONTENT.Trim('\r');
+            if (barcode == "") throw new Exception($"[{dev.Entity.CODE}]扫码失败");
+
+            var addr = 3013;
+            var next = dev.Entity.GetNext(addr.ToString());
+            if (next == null) throw new Exception($"缺少[{dev.Entity.CODE}]-[{addr}]路径信息,请检查路径配置");
+
+            var station = dev.Entity.CODE;
+
+            short outTemp = 0, inTemp = 0;
+            bool flag = false;
+            Device<IStation521, IStation520>[] arr = null;
+
+            string trafficControl = "";
+
+            outTemp = 3001;
+            inTemp = 3005;
+            trafficControl = "3012-3060-3006-3004";
+            arr = Device.Find("3012", "3060", "3006", "3004").Select(v => v.Device<IStation521, IStation520>()).ToArray();
+            var rgv = Device.Find("RGV8").Device<IRGV521, IRGV520>();
+            if (rgv.Data2.Trigger != 0) throw new Exception("RGV8任务触发中");
+            if (rgv.Data.DestPosition == 3006 && rgv.Data.SystemStatus != RGVRunStatus.空闲) flag = true;
+
+            if (arr.Any(v => v.Data2.CONFIRM)) throw new Exception($"设备集[{trafficControl}]存在确认信号,请检查是否为异常状况");
+
+            flag = arr.Where(v => v.Data.GOODSEND == outTemp).Any() || flag;
+
+            var nextcode = next.Code();
+            if (flag) nextcode = inTemp;
+
+            DB.Do(db =>
+            {
+                var flag = db.Default.Set<WCS_AGVTask>().Where(v => v.TaskType == AGVTaskType.入库).Where(v => v.Station == station)
+                .Where(v => (v.Status == AGVTaskStatus.完成)).Any();
+                if (!flag && !dev.Data.RES1) throw new Exception($"[{dev.Entity.CODE}]已扫码等待AGV交互完成");
+
+                var arr = db.Default.Set<WCS_AGVTask>().Where(v => v.TaskType == AGVTaskType.入库 && v.Status == AGVTaskStatus.完成)
+               .Where(v => v.Station == station).ToArray();
+                foreach (var t in arr)
+                {
+                    t.Status = AGVTaskStatus.完成扫码;
+                    t.UpdateTime = DateTime.Now;
+                }
+                db.Default.SaveChanges();
+
+                var info = WMS.InBound(barcode, dev.Entity.CODE);
+
+                var task = new WCS_TASK();
+                task.BARCODE = info.ContainerCode;
+                task.WMSTASK = int.Parse(info.WMSTaskNum);
+                task.TYPE = TaskType.入库;
+                task.STATUS = WCS.Entity.TaskStatus.执行中;
+                task.ADDRFROM = dev.Entity.CODE;
+                task.ADDRTO = addr.ToString();
+                task.STARTTIME = DateTime.Now;
+                task.UPDATEUSER = "WCS";
+                task.UPDATETIME = DateTime.Now;
+                task.FLOOR = 2;
+                task.ADDRNEXT = nextcode.ToString();
+
+                db.Default.Set<WCS_TASK>().Add(task);
+                db.Default.SaveChanges();
+
+                dev.Data2.TASKNUM = task.ID;
+                dev.Data2.GOODSEND = nextcode;
+                dev.Data2.CONFIRM = true;
+            });
+        }
+
+        protected override bool SelectDevice(WCS_DEVICE dev)
+        {
+            return new string[] { "3001" }.Contains(dev.CODE);
+        }
+    }
+
+    [WorkTitle(typeof(ProductHandler), "_22车间入库缓存", true)]
+    public class _22车间入库缓存 : DeviceWork<Device<IStation521, IStation520>>
+    {
+        protected override void Do(Device<IStation521, IStation520> dev)
+        {
+            if (Ltc.Do(dev, v => v.Data2.CONFIRM == true))
+            {
+                return;
+            }
+
+            if (Ltc.Do(dev, v => v.Data.TASKNUM == 0))
+                return;
+
+            if (Ltc.Do(dev, v => v.Data.PH_STATUS == false))
+                return;
+
+            short inTemp = 0, outTemp = 0;
+            short addrTo = 0;
+            Device<IStation521, IStation520>[] arr = null;
+
+            outTemp = 3001;
+            inTemp = 3005;
+            addrTo = 3001;
+            arr = Device.Find("3060", "3006", "0334", "3001", "3012").Select(v => v.Device<IStation521, IStation520>()).ToArray();
+
+            var rgv = Device.Find("RGV8").Device<IRGV521, IRGV520>();
+            if (rgv.Data2.Trigger != 0) throw new Exception("RGV8任务触发中");
+            if (rgv.Data.DestPosition == 3006 && rgv.Data.SystemStatus != RGVRunStatus.空闲 && rgv.Data.PH_Status) throw new Exception("交通管制,RGV8正在出库");
+
+            if (Ltc.Do(dev, v => v.Data.GOODSEND != inTemp))
+                return;
+
+            var inTempDev = Device.Find(inTemp.ToString()).Device<IStation521>();
+            if (inTempDev.Data.TASKNUM < 10000)
+                return;
+
+            if (!inTempDev.Data.PH_STATUS)
+                return;
+
+            if (arr.Any(v => v.Data2.CONFIRM))
+                return;
+
+            var toDev = Device.Find(addrTo.ToString()).Device<IStation521>();
+            if (toDev.Data.PH_STATUS)
+            {
+                if (toDev.Data.TASKNUM < 10000)
+                    return;
+                if (toDev.Data.GOODSEND != toDev.Entity.Code())
+                    return;
+            }
+
+            if (arr.Where(v => v.Data.GOODSEND == outTemp || v.Data.GOODSEND == addrTo).Any())
+                throw new Exception("交通管制");
+
+            var station = dev.Entity.CODE;
+
+            DB.Do(db =>
+            {
+                var task = db.Default.Set<WCS_TASK>().Find(dev.Data.TASKNUM);
+                if (task == null)
+                    throw new Exception($"任务号{dev.Data.TASKNUM}不存在");
+
+                var next = Device.Find(addrTo.ToString()).GetNext(task.ADDRTO);
+                task.ADDRNEXT = next.CODE;
+                task.UPDATETIME = DateTime.Now;
+                db.Default.SaveChanges();
+
+                dev.Data2.TASKNUM = dev.Data.TASKNUM;
+                dev.Data2.GOODSEND = next.Code();
+                dev.Data2.CONFIRM = true;
+            });
+        }
+
+        protected override bool SelectDevice(WCS_DEVICE dev)
+        {
+            return new string[] { "3005" }.Contains(dev.CODE);
+        }
+    }
+}

+ 15 - 6
Projects/永冠/WCS.Service/Works/Stations/AGV交互.cs

@@ -126,7 +126,7 @@ namespace WCS.Service.Works.Stations
     {
         protected override bool SelectDevice(WCS_DEVICE dev)
         {
-            return new string[] { "2122", "2131", "2143", "2088" }.Contains(dev.CODE);
+            return new string[] { "2122", "2131", "2143", "2088", "3001" }.Contains(dev.CODE);
         }
 
         protected override void Do(Device<IStation521, IStation520, IStation523> dev)
@@ -134,7 +134,7 @@ namespace WCS.Service.Works.Stations
             var station = dev.Entity.CODE;
             DB.Do(db =>
             {
-                var agvTasks = db.Default.Set<WCS_AGVTask>().Where(v => v.Station == station).Where(v => v.Status < AGVTaskStatus.完成).Where(v => v.TaskType == AGVTaskType.入库).OrderBy(v=>v.CreateTime).ToArray();
+                var agvTasks = db.Default.Set<WCS_AGVTask>().Where(v => v.Station == station).Where(v => v.Status < AGVTaskStatus.完成).Where(v => v.TaskType == AGVTaskType.入库).OrderBy(v => v.CreateTime).ToArray();
 
                 foreach (var agvtask in agvTasks)
                 {
@@ -202,6 +202,12 @@ namespace WCS.Service.Works.Stations
                                 arr = Device.Find("2122", "2119", "2120", "2272").Select(v => v.Device<IStation521, IStation520>()).ToArray();
                                 arrout = Device.Find("2328", "2119", "2122").Select(v => v.Device<IStation521, IStation520>()).ToArray();
                             }
+                            else if (station == "3001")
+                            {
+                                inTemp = 3005;
+                                arr = Device.Find("3001", "3005").Select(v => v.Device<IStation521, IStation520>()).ToArray();
+                                arrout = Device.Find("3001", "3012").Select(v => v.Device<IStation521, IStation520>()).ToArray();
+                            }
                             if (inTemp > 0)
                             {
                                 if (arr.Any(v => v.Data2.CONFIRM)) continue;
@@ -210,7 +216,7 @@ namespace WCS.Service.Works.Stations
                                 var flag = arr.Any(v => v.Data.GOODSEND == inTemp);
                                 if (flag) throw new Exception($"[{station}]交通管制,入库缓存位已被占用");
 
-                                flag = arrout.Any(v => v.Data.GOODSEND == dev.Entity.Code());
+                                flag = arrout.Any(v => v.Data.GOODSEND == dev.Entity.Code() && v.Data.GOODSEND == 3060);
                                 if (flag) throw new Exception($"交通管制,{station}被出库任务占用");
                             }
                             else
@@ -304,7 +310,7 @@ namespace WCS.Service.Works.Stations
     {
         protected override bool SelectDevice(WCS_DEVICE dev)
         {
-            return new string[] { "2086", "2122", "2131", "2143" }.Contains(dev.CODE);
+            return new string[] { "2086", "2122", "2131", "2143", "3001" }.Contains(dev.CODE);
         }
 
         protected override void Do(Device<IStation521, IStation520, IStation523> dev)
@@ -362,6 +368,10 @@ namespace WCS.Service.Works.Stations
                                     addrNext = "2385";
                                 else if (agvtask.Station == "2086")
                                     addrNext = "2325";
+                                else if (agvtask.Station == "3001")
+                                {
+                                    addrNext = "3001";
+                                }
 
                                 var task = new WCS_TASK
                                 {
@@ -380,7 +390,6 @@ namespace WCS.Service.Works.Stations
                                     ADDRNEXT = addrNext
                                 };
                                 db.Default.Set<WCS_TASK>().Add(task);
-                                db.Default.SaveChanges();
 
                                 agvtask.Status = AGVTaskStatus.确认;
                                 agvtask.UpdateTime = DateTime.Now;
@@ -498,4 +507,4 @@ namespace WCS.Service.Works.Stations
             });
         }
     }
-}
+}