|
@@ -117,4 +117,116 @@ namespace WCS.Service.Works
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
+
|
|
|
+ [WorkTitle(typeof(ProductHandler), "双工位RGV", true)]
|
|
|
+ public class 双工位RGV : DeviceWork<Device<IRGV521, IRGV520, IRGV523>>
|
|
|
+ {
|
|
|
+ protected override void Do(Device<IRGV521, IRGV520, IRGV523> dev)
|
|
|
+ {
|
|
|
+
|
|
|
+ if (dev.Data3.Fault != 0)
|
|
|
+ {
|
|
|
+ if (dev.Entity.WakeupOn(5000))
|
|
|
+ {
|
|
|
+ WMS.DevInfo(dev.Entity.CODE, dev.Data3.Fault.ToString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Ltc.Do(dev, v => v.Data2.Trigger != 0))
|
|
|
+ return;
|
|
|
+ if (Ltc.Do(dev, v => v.Data.WorkMode != RGVMode.自动))
|
|
|
+ return;
|
|
|
+ if (Ltc.Do(dev, v => v.Data.SystemStatus != RGVRunStatus.空闲))
|
|
|
+ return;
|
|
|
+
|
|
|
+ var startStations = Device.Where(v => v.ROUTES.Any(d => d.NEXT.CODE == dev.Entity.CODE))
|
|
|
+ .Select(v => v.Device<IStation521, IStation520>()).ToArray();
|
|
|
+ startStations = Ltc.Do(startStations, (arr) => arr.Where(v => v.Data.GOODSEND > 0 && v.Data.PH_STATUS).ToArray());
|
|
|
+ if (dev.Entity.CODE == "RGV1")
|
|
|
+ startStations = Ltc.Do(startStations, (arr) => arr.Where(v => v.Data.GOODSEND > 0 && v.Data.PH_STATUS && !v.Data.REQUEST).ToArray());
|
|
|
+ if (startStations.Length == 0)
|
|
|
+ return;
|
|
|
+
|
|
|
+ //startStations = Ltc.Do(startStations, dev, (arr, dev) => arr.Where(v => dev.Entity.ROUTES.Any(d => d.NEXT.CODE == v.Data.GOODSEND.ToString())).ToArray());
|
|
|
+ //if (startStations.Length == 0)
|
|
|
+ // return;
|
|
|
+
|
|
|
+ startStations = Ltc.Do(startStations, arr => arr.Where(v => v.Data.GOODSEND.ToString() != v.Entity.CODE).ToArray());
|
|
|
+ if (startStations.Length == 0)
|
|
|
+ return;
|
|
|
+
|
|
|
+ var endEmptys = startStations.Where(v =>
|
|
|
+ {
|
|
|
+ var end = Device.Find(v.Data.GOODSEND.ToString());
|
|
|
+ var next = dev.Entity.GetNext(end.CODE).Device<IStation521>();
|
|
|
+ var res = next.Data.TASKNUM == 0 && next.Data.PH_STATUS == false;
|
|
|
+ if (res && end.CODE == "2324")
|
|
|
+ {
|
|
|
+ res = Device.Find("2071", "2072", "2073", "2074", "2075", "2076", "2077", "2078", "2079", "2017", "2019", "2022", "2024", "2029").Select(v => v.Device<IStation521>())
|
|
|
+ .Count(v => v.Data.PH_STATUS == false && v.Data.TASKNUM == 0) > 3;
|
|
|
+ if (!res)
|
|
|
+ {
|
|
|
+ Configs.UploadException(end.CODE, "库前拥堵,RGV暂停入库");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return res;
|
|
|
+ }).ToArray();
|
|
|
+
|
|
|
+ short taskType = 1;
|
|
|
+ var st = Ltc.Do(endEmptys, arr => arr.OrderBy(v => v.Entity.CODE == "2182" || v.Entity.CODE == "2181" || v.Entity.CODE == "2081" || v.Entity.CODE == "2325" ? 1 : 2)
|
|
|
+ .ThenBy(v => v.Data.GetUpdateTime())
|
|
|
+ .FirstOrDefault());
|
|
|
+ if (st == null)
|
|
|
+ {
|
|
|
+ st = startStations.OrderBy(v => v.Entity.CODE == "2182" || v.Entity.CODE == "2181" || v.Entity.CODE == "2081" || v.Entity.CODE == "2325" ? 1 : 2)
|
|
|
+ .ThenBy(v => v.Data.GetUpdateTime())
|
|
|
+ .FirstOrDefault();
|
|
|
+ taskType = 3;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (taskType == 3)
|
|
|
+ {
|
|
|
+ var target = st.Entity.Code();
|
|
|
+ if (dev.Data.DestPosition != target)
|
|
|
+ {
|
|
|
+ dev.Data2.TaskType = taskType;
|
|
|
+ dev.Data2.TaskID = 1;
|
|
|
+ dev.Data2.StartPosition = 0;
|
|
|
+ dev.Data2.DestPosition = short.Parse(st.Entity.CODE);
|
|
|
+ dev.Data2.Trigger = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var next = dev.Entity.GetNext(st.Data.GOODSEND.ToString());
|
|
|
+ if (next == null)
|
|
|
+ return;
|
|
|
+
|
|
|
+ DB.Do(db =>
|
|
|
+ {
|
|
|
+ var task = db.Default.Set<WCS_TASK>().Find(st.Data.TASKNUM);
|
|
|
+ if (task != null)
|
|
|
+ {
|
|
|
+ if (next.CODE == task.ADDRTO)
|
|
|
+ {
|
|
|
+ //task.ADDRCURRENT = dev.Entity.CODE;
|
|
|
+ task.UPDATETIME = DateTime.Now;
|
|
|
+ db.Default.SaveChanges();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ dev.Data2.TaskType = taskType;
|
|
|
+ dev.Data2.TaskID = st.Data.TASKNUM;
|
|
|
+ dev.Data2.StartPosition = short.Parse(st.Entity.CODE);
|
|
|
+ dev.Data2.DestPosition = next.Code();
|
|
|
+ dev.Data2.Trigger = 1;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override bool SelectDevice(WCS_DEVICE dev)
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|