From 5573b8622585f5fa6a0485a02ff90a822412d53f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83?= <15095123350@163.com> Date: Fri, 26 Jul 2024 13:50:01 +0800 Subject: [PATCH] 20240726 --- src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs | 19 +- src/Khd.Core.Wcs/Wcs/FirstFloor.cs | 285 +++++++++++---------- src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs | 38 ++- src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs | 9 + src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs | 18 +- src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs | 9 +- src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs | 17 +- src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs | 9 +- src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs | 14 + 9 files changed, 234 insertions(+), 184 deletions(-) diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index b8de40f..20087bf 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -99,6 +99,7 @@ namespace Khd.Core.Wcs.Wcs { using var scope = _host.Services.CreateScope(); using var dbContext = scope.ServiceProvider.GetRequiredService(); + List cannotIn=new List(); while (true) { try @@ -160,11 +161,10 @@ namespace Khd.Core.Wcs.Wcs //如果是4则找3,如果是1则找2 && a.b.locColumn == b.locColumn//列数相同 && string.IsNullOrEmpty(b.containerCode) - select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 - - wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 + select new { a,b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 + wmsBaseLocation ??= outBill.Where(t=> !cannotIn.Contains(t.b.locationCode)).FirstOrDefault()?.b;//先找相同物料的外侧库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => !cannotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => !cannotIn.Contains(t.locationCode)).Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 if (wmsBaseLocation != null)//如果找到库位,生成入库任务 { if (wmsBaseLocation.locDeep == 1) @@ -175,8 +175,9 @@ namespace Khd.Core.Wcs.Wcs .Any(); if (!hasLocation) { - Console.WriteLine(DateTime.Now + $":目标库位{wmsBaseLocation.locationCode}的浅库位库位状态异常,无法移库"); - _logger.Info($"目标库位{wmsBaseLocation.locationCode}的浅库位库位状态异常,无法移库"); + cannotIn.Add(wmsBaseLocation.locationCode); + Console.WriteLine(DateTime.Now + $":目标库位{cannotIn.Join(",")}的浅库位库位状态异常,无法移库"); + _logger.Info($"目标库位{cannotIn.Join(",")}的浅库位库位状态异常,无法移库"); continue; } } @@ -206,6 +207,7 @@ namespace Khd.Core.Wcs.Wcs WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); + cannotIn.Clear(); Console.WriteLine(DateTime.Now + ":二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); _logger.Info("二楼码垛输送线生成入库托盘任务成功:" + wcsTask.objid); } @@ -277,7 +279,7 @@ namespace Khd.Core.Wcs.Wcs select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 if (wmsBaseLocation != null)//如果找到库位,生成入库任务 { @@ -1275,7 +1277,6 @@ namespace Khd.Core.Wcs.Wcs dbContext.Update(location); dbContext.Add(wcsTask); dbContext.Update(stock); - dbContext.SaveChanges(); break; } } diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs index d8a6e75..5abcf8b 100644 --- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs +++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs @@ -290,9 +290,14 @@ namespace Khd.Core.Wcs.Wcs BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 1); if (Convert.ToInt32(linesignal01Value) == 1) { + bool hasTask = dbContext.WcsTask.Where(t => t.nextPointId == 6 && t.currPointId == 1).Any(); + if (hasTask) + { + continue; + } //判断task表里没有该rfid的未完成的入库 //信息,未下发去向 - var task = dbContext.WcsTask.Where(t => t.IsDelete == 0||t.IsDelete==null).Where(t => t.nextPointId == 1).OrderBy(t => t.createTime).FirstOrDefault(); + var task = dbContext.WcsTask.Where(t => t.IsDelete == 0 || t.IsDelete == null).Where(t => t.nextPointId == 1).OrderBy(t => t.createTime).FirstOrDefault(); if (task == null) { if (BigContainerCodes.Contains(RFID001Value)) @@ -510,114 +515,150 @@ namespace Khd.Core.Wcs.Wcs var wcsTasks = dbContext.WcsTask.Where(t => t.nextPointId == T01).OrderBy(t => t.createTime).ToList(); foreach (var wcsTask in wcsTasks) { - wcsTask.serialNo ??= SystemData.GetSerialNo(dbContext); - if (wcsTasks.Where(t => t.taskStatus > 0).Where(t => t.objid != wcsTask.objid).Any()) + bool hasTask = dbContext.WcsTask.Where(t => t.endPointId == wcsTask.endPointId && t.objid != wcsTask.objid).Any(); + if (!hasTask) { - _logger.Info("提升机线程:有其他任务正在执行,跳过当前任务"); - continue; - } - BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == wcsTask.floorNo); - if (wcsTask.taskStatus == 0 && Convert.ToInt32(hoisterTrayIn06Value) == 0)//创建状态,并且里面没有货物 - { - if (lineEquip.equipStatus == 1) + wcsTask.serialNo ??= SystemData.GetSerialNo(dbContext); + if (wcsTasks.Where(t => t.taskStatus > 0).Where(t => t.objid != wcsTask.objid).Any()) { - _logger.Info("提升机线程:" + wcsTask.floorNo + "楼接驳位有AGV任务,跳过当前任务"); + _logger.Info("提升机线程:有其他任务正在执行,跳过当前任务"); continue; } + BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == wcsTask.floorNo); + if (wcsTask.taskStatus == 0 && Convert.ToInt32(hoisterTrayIn06Value) == 0)//创建状态,并且里面没有货物 + { + if (lineEquip.equipStatus == 1) + { + _logger.Info("提升机线程:" + wcsTask.floorNo + "楼接驳位有AGV任务,跳过当前任务"); + continue; + } - BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo); - if (wcsTask.containerNo == StaticData.PlcDic[0].ReadRFID(floorPoint.plcpointAddress) || (string.IsNullOrEmpty(wcsTask.containerNo) && wcsTask.qty > 1)) - { - if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//当前楼层和起始楼层一致 + BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo); + if (wcsTask.containerNo == StaticData.PlcDic[0].ReadRFID(floorPoint.plcpointAddress) || (string.IsNullOrEmpty(wcsTask.containerNo) && wcsTask.qty > 1)) { - wcsTask.taskStatus = 2; - wcsTask.updateBy = "提升机线程"; - wcsTask.updateTime = DateTime.Now; - wcsTask.remark = "提升机任务执行中"; - BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); - StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); - StaticData.PlcDic[0].WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); - Console.WriteLine(DateTime.Now + ":提升机下发" + wcsTask.fromFloorNo + "楼入库指令"); - _logger.Info("提升机下发" + wcsTask.fromFloorNo + "楼入库指令"); - dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); - lineEquip.equipStatus = 1; - dbContext.Update(lineEquip); - dbContext.SaveChanges(); + if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//当前楼层和起始楼层一致 + { + wcsTask.taskStatus = 2; + wcsTask.updateBy = "提升机线程"; + wcsTask.updateTime = DateTime.Now; + wcsTask.remark = "提升机任务执行中"; + BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); + StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); + StaticData.PlcDic[0].WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); + Console.WriteLine(DateTime.Now + ":提升机下发" + wcsTask.fromFloorNo + "楼入库指令"); + _logger.Info("提升机下发" + wcsTask.fromFloorNo + "楼入库指令"); + dbContext.Update(wcsTask); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); + lineEquip.equipStatus = 1; + dbContext.Update(lineEquip); + dbContext.SaveChanges(); + } + else//当前楼层和起始楼层不一致 + { + wcsTask.taskStatus = 1; + wcsTask.updateBy = "提升机线程"; + wcsTask.updateTime = DateTime.Now; + wcsTask.remark = "提升机任务执行中"; + StaticData.PlcDic[0].WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.fromFloorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层 + StaticData.PlcDic[0].WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); + Console.WriteLine(DateTime.Now + ":提升机下发去往" + wcsTask.fromFloorNo + "楼指令"); + _logger.Info("提升机下发去往" + wcsTask.fromFloorNo + "楼指令"); + dbContext.Update(wcsTask); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 1, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); + lineEquip.equipStatus = 1; + dbContext.Update(lineEquip); + dbContext.SaveChanges(); + } } - else//当前楼层和起始楼层不一致 + } + if (wcsTask.taskStatus == 1 && Convert.ToInt32(reserialno06) == wcsTask.serialNo) + { + BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo); + if (wcsTask.containerNo == StaticData.PlcDic[0].ReadRFID(floorPoint.plcpointAddress) || (string.IsNullOrEmpty(wcsTask.containerNo) && wcsTask.qty > 1)) { - wcsTask.taskStatus = 1; + if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层 + { + wcsTask.taskStatus = 2; + wcsTask.updateBy = "提升机线程"; + wcsTask.updateTime = DateTime.Now; + wcsTask.remark = "提升机任务执行中"; + BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); + StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); + StaticData.PlcDic[0].WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); + Console.WriteLine(DateTime.Now + ":提升机下发" + wcsTask.fromFloorNo + "楼入库指令"); + _logger.Info("提升机下发" + wcsTask.fromFloorNo + "楼入库指令"); + dbContext.Update(wcsTask); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); + dbContext.SaveChanges(); + } + } + } + if (wcsTask.taskStatus == 2 && Convert.ToInt32(reserialno06) == wcsTask.serialNo) + { + if (Convert.ToInt32(hoisterTrayIn06Value) == 1)//托盘已经进提升机 + { + wcsTask.taskStatus = 3; wcsTask.updateBy = "提升机线程"; wcsTask.updateTime = DateTime.Now; - wcsTask.remark = "提升机任务执行中"; - StaticData.PlcDic[0].WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.fromFloorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层 - StaticData.PlcDic[0].WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); - Console.WriteLine(DateTime.Now + ":提升机下发去往" + wcsTask.fromFloorNo + "楼指令"); - _logger.Info("提升机下发去往" + wcsTask.fromFloorNo + "楼指令"); + wcsTask.remark = "提升机任务执行完成"; + StaticData.PlcDic[0].WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.floorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层 + Console.WriteLine(DateTime.Now + ":提升机下发去往" + wcsTask.floorNo + "楼目的地指令"); + _logger.Info("提升机下发去往" + wcsTask.floorNo + "楼目的地指令"); dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 1, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); - lineEquip.equipStatus = 1; - dbContext.Update(lineEquip); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); dbContext.SaveChanges(); } } - } - if (wcsTask.taskStatus == 1 && Convert.ToInt32(reserialno06) == wcsTask.serialNo) - { - BasePlcpoint floorPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID00" + wcsTask.fromFloorNo); - if (wcsTask.containerNo == StaticData.PlcDic[0].ReadRFID(floorPoint.plcpointAddress) || (string.IsNullOrEmpty(wcsTask.containerNo) && wcsTask.qty > 1)) + if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3,且当前楼层为任务的目的楼层 { - if (Convert.ToInt32(currentfloor06Value) == wcsTask.fromFloorNo)//提升机当前楼层为初始地楼层 + if (wcsTask.floorNo == 1)//目的楼层是1 { - wcsTask.taskStatus = 2; - wcsTask.updateBy = "提升机线程"; - wcsTask.updateTime = DateTime.Now; - wcsTask.remark = "提升机任务执行中"; - BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.fromFloorNo && t.plcpointNo.Contains("wcsrun")); - StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); - StaticData.PlcDic[0].WriteToPoint(this.serialno06.plcpointAddress, wcsTask.serialNo.ToString(), this.serialno06.plcpointLength.ToString()); - Console.WriteLine(DateTime.Now + ":提升机下发" + wcsTask.fromFloorNo + "楼入库指令"); - _logger.Info("提升机下发" + wcsTask.fromFloorNo + "楼入库指令"); - dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 2, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行中" }); - dbContext.SaveChanges(); + if (ReadEmptyLocation())//托盘库是否有任务,没有任务返回true + { + var linesignal = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == $"linesignal0{wcsTask.floorNo}").plcpointAddress); + if (linesignal != null && Convert.ToInt32(linesignal) == 0)//接驳位外侧没有东西 + { + BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}"); + var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress); + if (clearPoint != null && Convert.ToBoolean(clearValue) == true)//是否有报警 + { + Console.WriteLine(DateTime.Now + ":提升机下发报警消除指令"); + _logger.Info("提升机下发报警消除指令"); + StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, false, clearPoint.plcpointLength.ToString());//清除报警 + } + wcsTask.taskStatus = 4; + wcsTask.updateBy = "提升机线程"; + wcsTask.updateTime = DateTime.Now; + wcsTask.remark = "提升机任务执行完成"; + BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.floorNo && t.plcpointNo.Contains("wcsrun")); + StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2,表示提升机已到达目的地,让货出去 + Console.WriteLine(DateTime.Now + ":提升机下发" + wcsTask.floorNo + "楼出库指令"); + _logger.Info("提升机下发" + wcsTask.floorNo + "楼出库指令"); + dbContext.Update(wcsTask); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); + dbContext.SaveChanges(); + } + else//接驳位外侧有东西 + { + BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}"); + var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress); + if (clearPoint != null && Convert.ToBoolean(clearValue) == false) + { + StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, true, clearPoint.plcpointLength.ToString()); + } + } + } + else + { + Console.WriteLine(DateTime.Now + ":一楼托盘库有任务正在执行,等待任务执行完成"); + _logger.Info("一楼托盘库有任务正在执行,等待任务执行完成"); + } } - } - } - if (wcsTask.taskStatus == 2 && Convert.ToInt32(reserialno06) == wcsTask.serialNo) - { - if (Convert.ToInt32(hoisterTrayIn06Value) == 1)//托盘已经进提升机 - { - wcsTask.taskStatus = 3; - wcsTask.updateBy = "提升机线程"; - wcsTask.updateTime = DateTime.Now; - wcsTask.remark = "提升机任务执行完成"; - StaticData.PlcDic[0].WriteToPoint(this.targetfloor06.plcpointAddress, wcsTask.floorNo.ToString(), this.targetfloor06.plcpointLength.ToString());//目的地楼层 - Console.WriteLine(DateTime.Now + ":提升机下发去往" + wcsTask.floorNo + "楼目的地指令"); - _logger.Info("提升机下发去往" + wcsTask.floorNo + "楼目的地指令"); - dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 3, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); - dbContext.SaveChanges(); - } - } - if (wcsTask.taskStatus == 3 && Convert.ToInt32(currentfloor06Value) == wcsTask.floorNo && Convert.ToInt32(reserialno06) == wcsTask.serialNo)//任务状态为3,且当前楼层为任务的目的楼层 - { - if (wcsTask.floorNo == 1)//目的楼层是1 - { - if (ReadEmptyLocation())//托盘库是否有任务,没有任务返回true + else { var linesignal = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == $"linesignal0{wcsTask.floorNo}").plcpointAddress); - if (linesignal != null && Convert.ToInt32(linesignal) == 0)//接驳位外侧没有东西 + if (linesignal != null && Convert.ToInt32(linesignal) == 0) { - BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}"); - var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress); - if (clearPoint != null && Convert.ToBoolean(clearValue) == true)//是否有报警 - { - Console.WriteLine(DateTime.Now + ":提升机下发报警消除指令"); - _logger.Info("提升机下发报警消除指令"); - StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, false, clearPoint.plcpointLength.ToString());//清除报警 - } wcsTask.taskStatus = 4; wcsTask.updateBy = "提升机线程"; wcsTask.updateTime = DateTime.Now; @@ -630,69 +671,41 @@ namespace Khd.Core.Wcs.Wcs dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); dbContext.SaveChanges(); } - else//接驳位外侧有东西 + else { - BasePlcpoint clearPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}"); - var clearValue = StaticData.PlcDic[0].Read(clearPoint.plcpointAddress); - if (clearPoint != null && Convert.ToBoolean(clearValue) == false) - { - StaticData.PlcDic[0].WriteToPoint(clearPoint.plcpointAddress, true, clearPoint.plcpointLength.ToString()); - } + BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}"); + StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); } } - else - { - Console.WriteLine(DateTime.Now + ":一楼托盘库有任务正在执行,等待任务执行完成"); - _logger.Info("一楼托盘库有任务正在执行,等待任务执行完成"); - } } - else + else if (wcsTask.taskStatus == 4)//提升机任务结束 { - var linesignal = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == $"linesignal0{wcsTask.floorNo}").plcpointAddress); - if (linesignal != null && Convert.ToInt32(linesignal) == 0) + BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.floorNo && t.plcpointNo.Contains("wcsrun")); + var wcsRun = StaticData.PlcDic[0].Read(basePlcpoint.plcpointAddress); + if (wcsRun != null && Convert.ToInt32(wcsRun) == 0)//判断当前接驳位的任务状态,wcsrrun如果是1代表入库,2是出库,0是空闲 { - wcsTask.taskStatus = 4; + BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo); + wcsTask.nextPointId = floorEquip.objid; + wcsTask.nextPointNo = floorEquip.equipNo; + wcsTask.taskStatus = 5; wcsTask.updateBy = "提升机线程"; wcsTask.updateTime = DateTime.Now; wcsTask.remark = "提升机任务执行完成"; - BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.floorNo && t.plcpointNo.Contains("wcsrun")); - StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "2", basePlcpoint.plcpointLength.ToString());//去向为2,表示提升机已到达目的地,让货出去 - Console.WriteLine(DateTime.Now + ":提升机下发" + wcsTask.floorNo + "楼出库指令"); - _logger.Info("提升机下发" + wcsTask.floorNo + "楼出库指令"); + lineEquip.equipStatus = 0; + Console.WriteLine(DateTime.Now + ":提升机任务完成" + wcsTask.fromFloorNo + "---" + wcsTask.floorNo + "楼指令"); + _logger.Info("提升机任务完成" + wcsTask.fromFloorNo + "---" + wcsTask.floorNo + "楼指令"); + dbContext.Update(lineEquip); dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 4, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); + dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5, nextPointId = floorEquip.objid, nextPointNo = floorEquip.equipNo, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); dbContext.SaveChanges(); } - else - { - BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == $"clear0{wcsTask.floorNo}"); - StaticData.PlcDic[0].WriteToPoint(basePlcpoint.plcpointAddress, "1", basePlcpoint.plcpointLength.ToString()); - } } + break; } - else if (wcsTask.taskStatus == 4)//提升机任务结束 + else { - BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.floorNo && t.plcpointNo.Contains("wcsrun")); - var wcsRun = StaticData.PlcDic[0].Read(basePlcpoint.plcpointAddress); - if (wcsRun != null && Convert.ToInt32(wcsRun) == 0)//判断当前接驳位的任务状态,wcsrrun如果是1代表入库,2是出库,0是空闲 - { - BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo); - wcsTask.nextPointId = floorEquip.objid; - wcsTask.nextPointNo = floorEquip.equipNo; - wcsTask.taskStatus = 5; - wcsTask.updateBy = "提升机线程"; - wcsTask.updateTime = DateTime.Now; - wcsTask.remark = "提升机任务执行完成"; - lineEquip.equipStatus = 0; - Console.WriteLine(DateTime.Now + ":提升机任务完成" + wcsTask.fromFloorNo + "---" + wcsTask.floorNo + "楼指令"); - _logger.Info("提升机任务完成" + wcsTask.fromFloorNo + "---" + wcsTask.floorNo + "楼指令"); - dbContext.Update(lineEquip); - dbContext.Update(wcsTask); - dbContext.WcsTaskLog.Where(t => t.objid == wcsTask.objid).Update(t => new WcsTaskLog { taskStatus = 5, nextPointId = floorEquip.objid, nextPointNo = floorEquip.equipNo, updateBy = "提升机线程", updateTime = DateTime.Now, remark = "提升机任务执行完成" }); - dbContext.SaveChanges(); - } + continue; } - break; } } } diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index be655fd..52c8dae 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -87,7 +87,6 @@ namespace Khd.Core.Wcs.Wcs Console.WriteLine($"{DateTime.Now}:5楼接驳位上有货,无法下发Agv出库任务"); continue; } - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); BaseEquip nextEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 1); RequestAGVTaskDto agvTask = new () { @@ -96,7 +95,7 @@ namespace Khd.Core.Wcs.Wcs { new () { - positionCode=wmsBaseLocation.agvPositionCode, + positionCode=item.currPointNo, type="00" }, new () @@ -115,7 +114,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { _logger.Info("五楼Agv下发任务成功:" + message); - Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + wmsBaseLocation.agvPositionCode + "," + nextEquip.agvPositionCode); + Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + item.containerNo + "," + nextEquip.agvPositionCode); item.taskCode = reponseMessage.data; item.taskStatus = 1; lineEquip.equipStatus = 1; @@ -134,7 +133,6 @@ namespace Khd.Core.Wcs.Wcs else if (item.taskType == 33)//原材料到背板安装 { BaseEquip endEquip = StaticData.BaseEquip.First(t => t.objid == 30); - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); RequestAGVTaskDto agvTask = new() { reqCode = StaticData.SnowId.NextId().ToString(), @@ -142,7 +140,7 @@ namespace Khd.Core.Wcs.Wcs { new () { - positionCode=wmsBaseLocation.agvPositionCode, + positionCode=item.currPointNo, type="00" }, new () @@ -160,7 +158,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { _logger.Info("五楼Agv下发任务成功:" + message); - Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + wmsBaseLocation.agvPositionCode + "," + endEquip.agvPositionCode); + Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + item.currPointNo + "," + endEquip.agvPositionCode); item.taskCode = reponseMessage.data; item.taskStatus = 1; dbContext.Update(item); @@ -174,7 +172,6 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 34)//背板安装到半成品 { - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.objid == 30); var agvTask = new RequestAGVTaskDto { @@ -188,7 +185,7 @@ namespace Khd.Core.Wcs.Wcs }, new () { - positionCode=wmsBaseLocation.agvPositionCode, + positionCode=item.endPointNo, type="00" } }, @@ -201,7 +198,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { _logger.Info("五楼Agv下发任务成功:" + message); - Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + currentEquip.agvPositionCode + "," + wmsBaseLocation.agvPositionCode); + Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + currentEquip.agvPositionCode + "," + item.endPointNo); item.taskCode = reponseMessage.data; item.taskStatus = 1; dbContext.Update(item); @@ -215,7 +212,6 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 46)//原材料到拆分区 { - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.objid == 29); RequestAGVTaskDto agvTask = new() { @@ -224,7 +220,7 @@ namespace Khd.Core.Wcs.Wcs { new () { - positionCode=wmsBaseLocation.agvPositionCode, + positionCode=item.currPointNo, type="00" }, new () @@ -242,7 +238,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { _logger.Info("五楼Agv下发任务成功:" + message); - Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + wmsBaseLocation.agvPositionCode + "," + currentEquip.agvPositionCode); + Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + item.currPointNo + "," + currentEquip.agvPositionCode); item.taskCode = reponseMessage.data; item.taskStatus = 1; dbContext.Update(item); @@ -257,7 +253,6 @@ namespace Khd.Core.Wcs.Wcs else if (item.taskType == 28)//拆分区返库 { BaseEquip currentEquip = StaticData.BaseEquip.First(t => t.objid == 29); - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); RequestAGVTaskDto agvTask = new() { reqCode = StaticData.SnowId.NextId().ToString(), @@ -270,7 +265,7 @@ namespace Khd.Core.Wcs.Wcs }, new() { - positionCode = wmsBaseLocation.agvPositionCode, + positionCode = item.endPointNo, type = "00" } }, @@ -284,7 +279,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { _logger.Info("五楼Agv下发任务成功:" + message); - Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + currentEquip.agvPositionCode + "," + wmsBaseLocation.agvPositionCode); + Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + currentEquip.agvPositionCode + "," + item.endPointNo); item.taskCode = reponseMessage.data; item.taskStatus = 1; dbContext.Update(item); @@ -299,7 +294,6 @@ namespace Khd.Core.Wcs.Wcs else if (item.taskType == 47)//原材料入库 { BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 5); - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); var agvTask = new RequestAGVTaskDto { reqCode = StaticData.SnowId.NextId().ToString(), @@ -312,7 +306,7 @@ namespace Khd.Core.Wcs.Wcs }, new () { - positionCode=wmsBaseLocation.agvPositionCode, + positionCode=item.endPointNo, type="00" } }, @@ -325,7 +319,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { _logger.Info("五楼Agv下发任务成功:" + message); - Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + startEquip.agvPositionCode + "," + wmsBaseLocation.agvPositionCode); + Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + startEquip.agvPositionCode + "," + item.endPointNo); item.taskCode = reponseMessage.data; item.taskStatus = 1; dbContext.Update(item); @@ -339,8 +333,6 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 66)//移库 { - WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); - WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); var agvTask = new RequestAGVTaskDto { reqCode = StaticData.SnowId.NextId().ToString(), @@ -348,12 +340,12 @@ namespace Khd.Core.Wcs.Wcs { new () { - positionCode=fromBaseLocation.agvPositionCode, + positionCode=item.currPointNo, type="00" }, new () { - positionCode=toBaseLocation.agvPositionCode, + positionCode=item.endPointNo, type="00" } }, @@ -366,7 +358,7 @@ namespace Khd.Core.Wcs.Wcs if (reponseMessage != null && reponseMessage.message == "成功") { _logger.Info("五楼Agv下发任务成功:" + message); - Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + fromBaseLocation.agvPositionCode + "," + toBaseLocation.agvPositionCode); + Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功:" + item.currPointNo + "," + item.endPointNo); item.taskCode = reponseMessage.data; item.taskStatus = 1; dbContext.Update(item); diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs index 1a5662b..1e608be 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorCTU.cs @@ -143,6 +143,11 @@ namespace Khd.Core.Wcs.Wcs dbContext.SaveChanges(); } } + else + { + //报警 + StaticData.PlcDic[1].WriteToPoint(CtuLineWaring.plcpointAddress, true, CtuLineWaring.plcpointLength.ToString()); + } } else { @@ -234,6 +239,10 @@ namespace Khd.Core.Wcs.Wcs StaticData.PlcDic[1].WriteToPoint(CtuLineWaring.plcpointAddress, true, CtuLineWaring.plcpointLength.ToString()); } } + else + { + StaticData.PlcDic[1].WriteToPoint(CtuLineWaring.plcpointAddress, false, CtuLineWaring.plcpointLength.ToString()); + } //else if (receiveMaterial != null && Convert.ToInt32(receiveMaterial) == 0) //{ // lock (SystemData.outStockLock) diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs index ce2725d..a018e12 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs @@ -94,6 +94,7 @@ namespace Khd.Core.Wcs.Wcs List containerCodes = wmsBaseLocations .Where(t => t.locDeep == 1) .Select(t => t.containerCode).ToList();//深库位的托盘 + containerCodes.RemoveAll(t => string.IsNullOrEmpty(t)); List mesBasePalletInfos = dbContext.MesBaseBarcodeInfo .Where(t => t.materialId == wcsTask.materialId) .Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId) @@ -111,17 +112,30 @@ namespace Khd.Core.Wcs.Wcs && a.b.locColumn == b.locColumn && b.locationStatus == "1" && string.IsNullOrEmpty(b.containerCode) - select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 + select new { a,b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 WmsBaseLocation? wmsBaseLocation = null; wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 //深浅库位问题?库位入库优先级等 var AgvEquip = StaticData.BaseEquip.First(t => t.objid == 28);//5楼叉车 if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null) { + if (wmsBaseLocation.locDeep == 1) + { + bool hasLocation = wmsBaseLocations + .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) + .Where(t => t.locColumn == wmsBaseLocation.locColumn) + .Any(); + if (!hasLocation) + { + Console.WriteLine(DateTime.Now + $":目标库位{wmsBaseLocation.locationCode}的浅库位库位状态异常,无法入库"); + _logger.Info($"目标库位{wmsBaseLocation.locationCode}的浅库位库位状态异常,无法入库"); + continue; + } + } WcsTask newTask = CoreMapper.Map(wcsTask); newTask.taskStatus = 0;//创建状态 newTask.updateTime = DateTime.Now; diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index 1aef183..b170c65 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -150,7 +150,6 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 49)//小包出口-库位 { - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); BaseEquip startEquip = dbContext.BaseEquip.First(t => t.objid == item.currPointId); var agvTask = new RequestAGVTaskDto { @@ -164,7 +163,7 @@ namespace Khd.Core.Wcs.Wcs }, new () { - positionCode=wmsBaseLocation.agvPositionCode, + positionCode=item.endPointNo, type="00" } }, @@ -277,8 +276,6 @@ namespace Khd.Core.Wcs.Wcs } else if (item.taskType == 55)//2F移库 { - WmsBaseLocation fromWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); - WmsBaseLocation toWmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); var agvTask = new RequestAGVTaskDto { reqCode = StaticData.SnowId.NextId().ToString(), @@ -286,12 +283,12 @@ namespace Khd.Core.Wcs.Wcs { new() { - positionCode = fromWmsBaseLocation.agvPositionCode, + positionCode = item.currPointNo, type = "00" }, new() { - positionCode = toWmsBaseLocation.agvPositionCode, + positionCode = item.endPointNo, type = "00" } diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs index a4fcaf6..3805604 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs @@ -249,7 +249,7 @@ namespace Khd.Core.Wcs.Wcs List containerCodes = wmsBaseLocations .Where(t => t.locDeep == 1) .Select(t => t.containerCode).ToList();//深库位的有托盘 - + containerCodes.RemoveAll(t => string.IsNullOrEmpty(t)); List mesBasePalletInfos = dbContext.MesBaseBarcodeInfo .Where(t => t.saleOrderId == mesBaseBarcodeInfo.saleOrderId)//销售订单 .Where(t => t.materialId == mesBasePalletInfo.materialId)//物料Id @@ -270,10 +270,23 @@ namespace Khd.Core.Wcs.Wcs select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 wmsBaseLocation ??= outBill.FirstOrDefault()?.b;//先找相同物料的外侧库位 - wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 2);//找不到再找深库位 + wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(t => t.locDeep == 1);//找不到再找深库位 wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 if (wmsBaseLocation != null)//如果找到库位,生成入库任务 { + if (wmsBaseLocation.locDeep == 1) + { + bool hasLocation = wmsBaseLocations + .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) + .Where(t => t.locColumn == wmsBaseLocation.locColumn) + .Any(); + if (!hasLocation) + { + Console.WriteLine(DateTime.Now + $":目标库位{wmsBaseLocation.locationCode}的浅库位库位状态异常,无法入库"); + _logger.Info($"目标库位{wmsBaseLocation.locationCode}的浅库位库位状态异常,无法入库"); + continue; + } + } BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 37); var wcsTask = new WcsTask() { diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs index a64f6ed..5aae2a5 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs @@ -128,8 +128,6 @@ namespace Khd.Core.Wcs.Wcs BaseDictionary baseDictionary = StaticData.BaseDictionary.First(t => t.objid == item.taskType); if (item.taskType == 67)//移库 { - WmsBaseLocation fromBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId); - WmsBaseLocation toBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); var agvTask = new RequestAGVTaskDto { reqCode = StaticData.SnowId.NextId().ToString(), @@ -137,12 +135,12 @@ namespace Khd.Core.Wcs.Wcs { new () { - positionCode=fromBaseLocation.agvPositionCode, + positionCode=item.currPointNo, type="00" }, new () { - positionCode=toBaseLocation.agvPositionCode, + positionCode=item.endPointNo, type="00" } }, @@ -170,7 +168,6 @@ namespace Khd.Core.Wcs.Wcs else if (item.taskType == 39)//提升机-库位 { BaseEquip startEquip = StaticData.BaseEquip.First(t => t.objid == 3); - WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId); var agvTask = new RequestAGVTaskDto { reqCode = StaticData.SnowId.NextId().ToString(), @@ -183,7 +180,7 @@ namespace Khd.Core.Wcs.Wcs }, new () { - positionCode=wmsBaseLocation.agvPositionCode, + positionCode=item.endPointNo, type="00" } }, diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs index a909598..a9e4684 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs @@ -83,6 +83,7 @@ namespace Khd.Core.Wcs.Wcs .ToList(); List containerCodes = wmsBaseLocations.Where(t => t.locDeep == 1).Select(t => t.containerCode).ToList();//深库位的托盘 + containerCodes.RemoveAll(t => string.IsNullOrEmpty(t)); List mesBasePalletInfos = dbContext.MesBaseBarcodeInfo .Where(t => t.materialId == wcsTask.materialId) .Where(t=>t.saleOrderId== mesBaseBarcodeInfo.saleOrderId) @@ -108,6 +109,19 @@ namespace Khd.Core.Wcs.Wcs if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null) { + if (wmsBaseLocation.locDeep == 1) + { + bool hasLocation = wmsBaseLocations + .Where(t => t.locRow == (wmsBaseLocation.locRow % 2 == 1 ? (wmsBaseLocation.locRow + 1) : (wmsBaseLocation.locRow - 1))) + .Where(t => t.locColumn == wmsBaseLocation.locColumn) + .Any(); + if (!hasLocation) + { + Console.WriteLine(DateTime.Now + $":目标库位{wmsBaseLocation.locationCode}的浅库位库位状态异常,无法入库"); + _logger.Info($"目标库位{wmsBaseLocation.locationCode}的浅库位库位状态异常,无法入库"); + continue; + } + } dbContext.Remove(wcsTask); WcsTask newTask = CoreMapper.Map(wcsTask); newTask.objid = StaticData.SnowId.NextId();