123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- using DBHelper;
- using System;
- using System.Linq;
- using WCS.Core;
- using WCS.Entity;
- using WCS.Entity.Protocol;
- namespace WCS.Service.Works
- {
- [WorkTitle(typeof(ProductHandler), "穿梭车", true)]
- public class RGVWork : 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))//.Where(v => v.CODE != "2323")
- .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;
- }
- }
- [WorkTitle(typeof(ProductHandler), "双工位RGV", true)]
- public class 双工位RGV : DeviceWork<Device<IDRGV521, IDRGV520, IDRGV523>>
- {
- protected override void Do(Device<IDRGV521, IDRGV520, IDRGV523> 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_1 != 0 && v.Data2.Trigger_2 != 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;
- }
- }
- }
|