|
|
@@ -5,6 +5,7 @@ using ServiceCenter.Logs;
|
|
|
using ServiceCenter.SqlSugars;
|
|
|
using SqlSugar;
|
|
|
using System.ComponentModel;
|
|
|
+using System.Threading.Tasks;
|
|
|
using WCS.Core;
|
|
|
using WCS.Entity;
|
|
|
using WCS.Entity.Protocol.BCR;
|
|
|
@@ -58,6 +59,15 @@ namespace WCS.WorkEngineering.Systems.装箱码垛
|
|
|
if (item == null)
|
|
|
{
|
|
|
MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"扫码器{obj.Entity.Code}条码{bcrCode}找不到对应任务", Time = DateTime.Now }));
|
|
|
+ var error = new BaseErrorinfoWcs()
|
|
|
+ {
|
|
|
+ ContBarCode = bcrCode,
|
|
|
+ Message = $"码垛异常排出口|5251,扫码器{obj.Entity.Code},根据条码{bcrCode}查询出的任务不是码垛出库任务,自动异常排出,{DateTime.UtcNow.ToString("yyyyMMddHHmmfff")}",
|
|
|
+ Count = 1,
|
|
|
+ Memo = "WCS"
|
|
|
+ };
|
|
|
+ error.UpdataErrorinfo();
|
|
|
+ Circling(obj, 5038, 5173, bcrCode);
|
|
|
continue;
|
|
|
}
|
|
|
if (item.AddrTo != "8090" && item.AddrTo != "8092" && item.AddrTo != "8096" && item.AddrTo != "8098")
|
|
|
@@ -65,13 +75,13 @@ namespace WCS.WorkEngineering.Systems.装箱码垛
|
|
|
var error = new BaseErrorinfoWcs()
|
|
|
{
|
|
|
ContBarCode = bcrCode,
|
|
|
- Message = $"码垛异常排出口|5180,扫码器{obj.Entity.Code},根据条码{bcrCode}查询出的任务不是码垛出库任务,自动异常排出,{DateTime.UtcNow.ToString("yyyyMMddHHmmfff")}",
|
|
|
+ Message = $"码垛异常排出口|5251,扫码器{obj.Entity.Code},根据条码{bcrCode}查询出的任务不是码垛出库任务,自动异常排出,{DateTime.UtcNow.ToString("yyyyMMddHHmmfff")}",
|
|
|
Count = 1,
|
|
|
Memo = "WCS"
|
|
|
};
|
|
|
error.UpdataErrorinfo();
|
|
|
|
|
|
- Circling(obj, 5041, 5180, bcrCode);
|
|
|
+ Circling(obj, 5038, 5180, bcrCode);
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
@@ -87,12 +97,12 @@ namespace WCS.WorkEngineering.Systems.装箱码垛
|
|
|
var error = new BaseErrorinfoWcs()
|
|
|
{
|
|
|
ContBarCode = bcrCode,
|
|
|
- Message = $"码垛入缓存扫码口|5041,扫码器{obj.Entity.Code},根据条码{bcrCode}查询出的任务状态大于或等于码垛抓取扫码,自动异常排出,{DateTime.UtcNow.ToString("yyyyMMddHHmmfff")}",
|
|
|
+ Message = $"码垛入缓存扫码口|5251,扫码器{obj.Entity.Code},根据条码{bcrCode}查询出的任务状态大于或等于码垛抓取扫码,自动异常排出,{DateTime.UtcNow.ToString("yyyyMMddHHmmfff")}",
|
|
|
Count = 1,
|
|
|
Memo = "WCS"
|
|
|
};
|
|
|
error.UpdataErrorinfo();
|
|
|
- Circling(obj, 5041, 5180, bcrCode);
|
|
|
+ Circling(obj, 5251, 5180, bcrCode);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -103,11 +113,11 @@ namespace WCS.WorkEngineering.Systems.装箱码垛
|
|
|
|
|
|
if (task.Robot is "Robot1" or "")
|
|
|
{
|
|
|
- cacheList = new List<string>() { "5100", "5086" };
|
|
|
+ cacheList = new List<string>() { /*"5100",*/ "5086", "5070", "5056" };
|
|
|
}
|
|
|
else if (task.Robot is "Robot2" or "")
|
|
|
{
|
|
|
- cacheList = new List<string>() { "5070", "5056" };
|
|
|
+ cacheList = new List<string>() { "5310", "5295", "5280", "5265" };
|
|
|
}
|
|
|
//当前任务是否正在码垛
|
|
|
var isPallet = db.Default.Queryable<Palletizing>().Any(v => v.PalletizState == 0 && v.ID == task.PalletizingID);
|
|
|
@@ -131,9 +141,7 @@ namespace WCS.WorkEngineering.Systems.装箱码垛
|
|
|
.Where(x => x.PalletizingID == task.PalletizingID && cacheList.Contains(x.AddrNext) && x.Status < TaskStatus.码垛缓存放行)
|
|
|
.ToList()
|
|
|
.GroupBy(x => x.AddrNext)
|
|
|
- .Where(x => x.Count() < 13)
|
|
|
- .OrderByDescending(x => x.Count())
|
|
|
- .FirstOrDefault();
|
|
|
+ .Where(x => x.Count() < 13).MaxBy(x => x.Count());
|
|
|
|
|
|
if (addNext == null || addNext.Count() >= 13)
|
|
|
{
|
|
|
@@ -141,7 +149,7 @@ namespace WCS.WorkEngineering.Systems.装箱码垛
|
|
|
var addrNextList = db.Default.Queryable<WCS_TaskInfo>().Where(x => x.Type == TaskType.OutDepot && x.BusType == "装箱码垛" && x.Status == TaskStatus.码垛缓存扫码)
|
|
|
.ToList().Select(x => x.AddrNext).Distinct().ToList();
|
|
|
//找到没有被使用过的下一个地址
|
|
|
- var caches = cacheList.Where(x => !addrNextList.Contains(x)).OrderByDescending(x => x.ToShort()).ToList();
|
|
|
+ var caches = cacheList.Where(x => !addrNextList.Contains(x)).OrderBy(x => x.ToShort()).ToList();
|
|
|
if (caches == null || caches.Count < 1) //没有可以使用的缓存位了,绕圈去
|
|
|
{
|
|
|
//是正在码垛的箱
|
|
|
@@ -159,7 +167,7 @@ namespace WCS.WorkEngineering.Systems.装箱码垛
|
|
|
var error1 = new BaseErrorinfoWcs()
|
|
|
{
|
|
|
ContBarCode = bcrCode,
|
|
|
- Message = $"入缓存扫码|5040,当前正在码垛工字轮条码{bcrCode}已无可用缓存道,直接去往码垛位,{DateTime.Now:yyyyMMddHH}",
|
|
|
+ Message = $"入缓存扫码|5251,当前正在码垛工字轮条码{bcrCode}已无可用缓存道,直接去往码垛位,{DateTime.Now:yyyyMMddHH}",
|
|
|
Count = 1,
|
|
|
Memo = "WCS"
|
|
|
};
|
|
|
@@ -170,7 +178,7 @@ namespace WCS.WorkEngineering.Systems.装箱码垛
|
|
|
var error = new BaseErrorinfoWcs()
|
|
|
{
|
|
|
ContBarCode = bcrCode,
|
|
|
- Message = $"入缓存扫码|5040,条码{bcrCode}已无可用缓存道,{DateTime.Now:yyyyMMddHH}",
|
|
|
+ Message = $"入缓存扫码|5251,条码{bcrCode}已无可用缓存道,{DateTime.Now:yyyyMMddHH}",
|
|
|
Count = 1,
|
|
|
Memo = "WCS"
|
|
|
};
|
|
|
@@ -178,38 +186,24 @@ namespace WCS.WorkEngineering.Systems.装箱码垛
|
|
|
Circling(obj, task.ID, 5173, bcrCode);
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
if (caches.Count == 1) //可以使用的缓存位只有一个
|
|
|
{
|
|
|
- //先获取任务所在机械臂的最早一条未结束的码垛信息
|
|
|
- //0:正在码垛 1:码垛结束 2:等待码垛
|
|
|
- var pallet = db.Default.Queryable<Palletizing>().Where(v => v.PalletizState != 1 && v.Robot == task.Robot)
|
|
|
- .OrderBy(x => x.AddTime)
|
|
|
- .First();
|
|
|
- //var pallet = db.Default.Queryable<Palletizing>().With(SqlWith.NoLock).Where(v => v.PalletizState == 0 && v.Equip == task.AddrTo).First();
|
|
|
- if (pallet.ID != task.PalletizingID) //不是当前机械臂的第一箱(最早一箱)
|
|
|
+ if (db.Default.Queryable<WCS_TaskInfo>().Count(x => x.PalletizingID == task.PalletizingID && x.Status < Entity.TaskStatus.码垛缓存扫码) > 10)
|
|
|
{
|
|
|
- if (!db.Default.Queryable<WCS_TaskInfo>().Any(x => x.PalletizingID == pallet.ID && x.Status < Entity.TaskStatus.码垛抓取扫码 && addrNextList.Contains(x.AddrNext)))
|
|
|
- {
|
|
|
- //获取当前任务对应码垛信息
|
|
|
- var curPallet = db.Default.Queryable<Palletizing>().With(SqlWith.NoLock).First(x => x.ID == task.PalletizingID);
|
|
|
- //当前机械臂中在当前任务码垛信息前未结束的码垛信息
|
|
|
- var palletIds = db.Default.Queryable<Palletizing>().With(SqlWith.NoLock)
|
|
|
- .Where(x => x.PalletizState != 1 && x.Robot == task.Robot && x.AddTime < curPallet.AddTime)
|
|
|
- .Select(x => x.ID).ToList();
|
|
|
+ //获取同机械臂正在码垛的另一箱任务,同一时间同一机械臂只能有一箱在码垛
|
|
|
+ var pallet = db.Default.Queryable<Palletizing>().Where(v => v.PalletizState == 0 && v.Robot == task.Robot && v.ID != task.PalletizingID).First();
|
|
|
|
|
|
- //判断正在码垛的箱是否全部大于等于码垛扫码的,如果不是,就需要留下一条线用来走上一箱的最后几个轮子
|
|
|
- var isOut = db.Default.Queryable<WCS_TaskInfo>().With(SqlWith.NoLock).Any(x => palletIds.Contains(x.PalletizingID) && x.Status < Entity.TaskStatus.码垛抓取扫码);
|
|
|
- //if (isOut)
|
|
|
- //{
|
|
|
- // World.Log($"目标位置{task.AddrTo},正在码垛箱未全部离开码垛合流点,如有异常请检查正在码垛箱是否有任务小于码垛合流状态");
|
|
|
- // throw new Exception($"目标位置{task.AddrTo},正在码垛箱未全部离开码垛合流点,如有异常请检查正在码垛箱是否有任务小于码垛合流状态");
|
|
|
- //}
|
|
|
- if (isOut)
|
|
|
+ //判断获取到的码垛箱是否有未进入码垛缓存放行的任务
|
|
|
+ if (pallet != null && db.Default.Queryable<WCS_TaskInfo>().Any(x => x.PalletizingID == pallet.ID && x.Status < Entity.TaskStatus.码垛缓存扫码))
|
|
|
+ {
|
|
|
+ //没有已经分配缓存道的任务
|
|
|
+ if (!db.Default.Queryable<WCS_TaskInfo>().Any(x => x.PalletizingID == pallet.ID && x.Status == Entity.TaskStatus.码垛缓存扫码))
|
|
|
{
|
|
|
var error = new BaseErrorinfoWcs()
|
|
|
{
|
|
|
ContBarCode = bcrCode,
|
|
|
- Message = $"入缓存扫码|5040,,{task.PalletizingID}的上一箱未全部经过抓取扫码,需要流出缓存行走上一箱的产品,因此此产品绕圈去,{DateTime.Now:yyyyMMddHH}",
|
|
|
+ Message = $"入缓存扫码|5251,,{task.PalletizingID}的同机械臂的另外一箱任务还没有占用任何一个缓存道,需要留出缓存行走另一箱的产品,因此此产品绕圈去,{DateTime.Now:yyyyMMddHH}",
|
|
|
Count = 1,
|
|
|
Memo = "WCS"
|
|
|
};
|
|
|
@@ -219,6 +213,36 @@ namespace WCS.WorkEngineering.Systems.装箱码垛
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ //if (pallet.ID != task.PalletizingID) //不是当前机械臂的第一箱(最早一箱)
|
|
|
+ //{
|
|
|
+ // if (!db.Default.Queryable<WCS_TaskInfo>().Any(x => x.PalletizingID == pallet.ID && x.Status < Entity.TaskStatus.码垛抓取扫码 && addrNextList.Contains(x.AddrNext)))
|
|
|
+ // {
|
|
|
+ // //获取当前任务对应码垛信息
|
|
|
+ // var curPallet = db.Default.Queryable<Palletizing>().With(SqlWith.NoLock).First(x => x.ID == task.PalletizingID);
|
|
|
+ // //当前机械臂中在当前任务码垛信息前未结束的码垛信息
|
|
|
+ // var palletIds = db.Default.Queryable<Palletizing>().With(SqlWith.NoLock)
|
|
|
+ // .Where(x => x.PalletizState != 1 && x.Robot == task.Robot && x.AddTime < curPallet.AddTime)
|
|
|
+ // .Select(x => x.ID).ToList();
|
|
|
+
|
|
|
+ // //判断正在码垛的箱是否全部大于等于码垛扫码的,如果不是,就需要留下一条线用来走上一箱的最后几个轮子
|
|
|
+ // var isOut = db.Default.Queryable<WCS_TaskInfo>().With(SqlWith.NoLock).Any(x => palletIds.Contains(x.PalletizingID) && x.Status < Entity.TaskStatus.码垛抓取扫码);
|
|
|
+
|
|
|
+ // if (isOut)
|
|
|
+ // {
|
|
|
+ // var error = new BaseErrorinfoWcs()
|
|
|
+ // {
|
|
|
+ // ContBarCode = bcrCode,
|
|
|
+ // Message = $"入缓存扫码|5251,,{task.PalletizingID}的上一箱未全部经过抓取扫码,需要流出缓存行走上一箱的产品,因此此产品绕圈去,{DateTime.Now:yyyyMMddHH}",
|
|
|
+ // Count = 1,
|
|
|
+ // Memo = "WCS"
|
|
|
+ // };
|
|
|
+ // error.UpdataErrorinfo();
|
|
|
+ // Circling(obj, task.ID, 5173, bcrCode);
|
|
|
+ // return;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //}
|
|
|
}
|
|
|
//判断当前箱的
|
|
|
var cache = caches.FirstOrDefault();
|
|
|
@@ -305,7 +329,7 @@ namespace WCS.WorkEngineering.Systems.装箱码垛
|
|
|
|
|
|
public override bool Select(Device dev)
|
|
|
{
|
|
|
- return dev.Code == "5040";
|
|
|
+ return dev.Code == "5251";
|
|
|
}
|
|
|
|
|
|
public void Circling(Device<IBCR83, IStation525> obj, int taskNumber, short next, string bcrCode)
|