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