diff --git a/src/Khd.Core.Wcs/MainCentralControl.cs b/src/Khd.Core.Wcs/MainCentralControl.cs index a403b38..6efadfb 100644 --- a/src/Khd.Core.Wcs/MainCentralControl.cs +++ b/src/Khd.Core.Wcs/MainCentralControl.cs @@ -57,7 +57,7 @@ namespace Khd.Core.Wcs plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot); try { - plc.Open(); + //plc.Open(); Console.WriteLine(DateTime.Now + ":连接到PLC:" + plcConfig.IP); } catch @@ -69,13 +69,13 @@ namespace Khd.Core.Wcs } //SystemTimer systemTimer = new SystemTimer(_host); //systemTimer.Start(); - //创建任务 - CreateTaskByRecord createTaskByRecord = new(_host); - createTaskByRecord.StartPoint(); + ////创建任务 + //CreateTaskByRecord createTaskByRecord = new(_host); + //createTaskByRecord.StartPoint(); - //一楼提升机以及接驳位 - FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]); - firstFloor.StartPoint(); + ////一楼提升机以及接驳位 + //FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]); + //firstFloor.StartPoint(); ////二层接驳位 //var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First(); @@ -97,25 +97,25 @@ namespace Khd.Core.Wcs ThirdFloorPoint thirdFloorPoint = new(_host, StaticData.PlcDic[0], ThirdBaseFloorEquip.floorNo.Value); thirdFloorPoint.StartPoint(); - //三层AGV - var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First(); - ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[2], ThirdFloorAgvEquip.floorNo.Value); - thirdFloorAGV.StartPoint(); + ////三层AGV + //var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First(); + //ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[2], ThirdFloorAgvEquip.floorNo.Value); + //thirdFloorAGV.StartPoint(); - //五层接驳位 - var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First(); - FiveFloorPoint fifthFloorPoint = new(_host, StaticData.PlcDic[0], FifthBaseFloorEquip.floorNo.Value); - fifthFloorPoint.StartPoint(); + ////五层接驳位 + //var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First(); + //FiveFloorPoint fifthFloorPoint = new(_host, StaticData.PlcDic[0], FifthBaseFloorEquip.floorNo.Value); + //fifthFloorPoint.StartPoint(); ////五层CTU //var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First(); //FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[1], FiveFloorCTUEquip.floorNo.Value); //fiveFloorCTU.StartPoint(); - //五层AGV - var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First(); - FiveFloorAGV fifthFloorAGV = new(_host, StaticData.PlcDic[0], FifthFloorAgvEquip.floorNo.Value); - fifthFloorAGV.StartPoint(); + ////五层AGV + //var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First(); + //FiveFloorAGV fifthFloorAGV = new(_host, StaticData.PlcDic[0], FifthFloorAgvEquip.floorNo.Value); + //fifthFloorAGV.StartPoint(); //背负式Agv //var FifthFloorBearAgvEquip = StaticData.BaseEquip.Where(t => t.objid == 28).First(); diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index 6a05908..e0cc84d 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -47,9 +47,9 @@ namespace Khd.Core.Wcs.Wcs ////三楼去翻转机任务 //var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic); //createThirdOutTaskThread.Start(); - //二楼成品出库任务 - var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic); - CreateSecondProductTaskThread.Start(); + ////二楼成品出库任务 + //var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic); + //CreateSecondProductTaskThread.Start(); ////三楼托盘收集架满5个或10个时出库合盘任务 //var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic); //createEmptyTrayThread.Start(); diff --git a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs index 93c6bd6..1fcbd6d 100644 --- a/src/Khd.Core.Wcs/Wcs/FirstFloor.cs +++ b/src/Khd.Core.Wcs/Wcs/FirstFloor.cs @@ -156,7 +156,7 @@ namespace Khd.Core.Wcs.Wcs BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i); bool hasCmd = dbContext.WcsCmd.Where(t => t.nextPointId == i || t.currPointId == i).Any(); bool hasTask = dbContext.WcsTask.Where(t => (t.currPointId == i || t.endPointId == i) && t.taskStatus >= 1 && t.nextPointId == 6).Any(); - if (!hasCmd|| !hasTask) + if (!hasCmd || !hasTask) { baseEquip.equipStatus = 0; dbContext.Update(baseEquip); @@ -656,20 +656,25 @@ namespace Khd.Core.Wcs.Wcs } else if (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 = "提升机任务执行完成"; - lineEquip.equipStatus = 0; - Console.WriteLine(DateTime.Now + ":提升机任务完成" + wcsTask.fromFloorNo + "---" + wcsTask.floorNo + "楼指令"); - LogManager.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(); + 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) + { + 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 + "楼指令"); + LogManager.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(); + } } break; } diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs index 526189a..767ca68 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorAGV.cs @@ -877,14 +877,14 @@ namespace Khd.Core.Wcs.Wcs warehouseFloor = 5, stockType = "1", totalAmount = 1, - saleOrderId = mesBaseBarcodeInfo.saleOrderId, + saleOrderId = mesBaseBarcodeInfo.saleOrderId==null?0:mesBaseBarcodeInfo.saleOrderId, safeFlag = mesBaseBarcodeInfo.safeFlag, supplierId = mesBaseBarcodeInfo.manufacturerId, materialId = mesBasePalletInfo.materialId, qualityStatus = "0", rawStockId = StaticData.SnowId.NextId(), completeFlag = "1", - instockBatch = mesBaseBarcodeInfo.batchCode, + instockBatch = mesBaseBarcodeInfo.barcodeInfo, updateBy = "WCS", updateDate = DateTime.Now, warehouseId = 511 @@ -893,7 +893,7 @@ namespace Khd.Core.Wcs.Wcs lineEquip.equipStatus = 0; dbContext.Update(lineEquip); dbContext.Add(wmsRawStock); - dbContext.Add(wmsBaseLocation); + dbContext.Update(wmsBaseLocation); dbContext.Remove(item); dbContext.Remove(wcsCmd); dbContext.SaveChanges(); diff --git a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs index fba28f1..d89002e 100644 --- a/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/FiveFloorPoint.cs @@ -67,10 +67,9 @@ namespace Khd.Core.Wcs.Wcs if (Convert.ToInt32(isSignal) == 1) { //获取条码信息 - var palletNo = Convert.ToString(rfid); BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == FloorNo); var wcsTask = dbContext.WcsTask.OrderBy(t => t.createTime) - .FirstOrDefault(t => t.containerNo == palletNo && t.nextPointId == baseEquip.objid); + .FirstOrDefault(t => t.containerNo == rfid && t.nextPointId == baseEquip.objid); if (wcsTask != null) { if (wcsTask.taskStatus == 5)//入库,提升机任务是完成状态 @@ -101,7 +100,7 @@ namespace Khd.Core.Wcs.Wcs from b in wmsBaseLocations where a.b.layerNum == b.layerNum && b.locDeep == 2 - && a.b.locRow == b.locRow + && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow + 1 : a.b.locRow - 1) && a.b.locColumn == b.locColumn && b.locationStatus == "1" && b.outstockFlag == "0" @@ -115,7 +114,7 @@ namespace Khd.Core.Wcs.Wcs wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 //深浅库位问题?库位入库优先级等 - var AgvEquip = StaticData.BaseEquip.First(t => t.floorNo == 5 && t.equipType == 5);// + var AgvEquip = StaticData.BaseEquip.First(t => t.objid == 28);// if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null) { WcsTask newTask = CoreMapper.Map(wcsTask); diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs index f256acd..e7a7c16 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorAGV.cs @@ -2,6 +2,7 @@ using Khd.Core.Domain.Models; using Khd.Core.EntityFramework; using Khd.Core.Library.Mapper; +using Khd.Core.Plc.S7; using Khd.Core.Wcs.Global; using Masuit.Tools; using Masuit.Tools.Logging; diff --git a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs index 0646579..74ccd06 100644 --- a/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs +++ b/src/Khd.Core.Wcs/Wcs/SecondFloorLine.cs @@ -201,6 +201,8 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.materialId == mesBasePalletInfo.materialId) .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 + //wmsBaseLocations.Where(t=>t.locDeep==2&&string.IsNullOrEmpty()).ToList(); + var bill = from a in mesBasePalletInfos join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode select new { b };//等于当前任务的物料的托盘的库位信息 @@ -209,7 +211,7 @@ namespace Khd.Core.Wcs.Wcs from b in wmsBaseLocations where a.b.layerNum == b.layerNum && b.locDeep == 2 - && a.b.locRow == b.locRow + && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) && a.b.locColumn == b.locColumn && b.locationStatus == "1" && b.outstockFlag == "0" diff --git a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs index d87184b..c08e152 100644 --- a/src/Khd.Core.Wcs/Wcs/SystemTimer.cs +++ b/src/Khd.Core.Wcs/Wcs/SystemTimer.cs @@ -15,7 +15,7 @@ namespace Khd.Core.Wcs.Wcs { private readonly IHost host; private Plc.S7.Plc Plc30 = StaticData.PlcDic[0]; - private Plc.S7.Plc Plc31 = StaticData.PlcDic[0]; + private Plc.S7.Plc Plc31 = StaticData.PlcDic[1]; private Plc.S7.Plc Plc220 = StaticData.PlcDic[2]; public SystemTimer(IHost host) diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs index b77c79c..858678e 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorAGV.cs @@ -747,7 +747,7 @@ namespace Khd.Core.Wcs.Wcs { rawStockId = StaticData.SnowId.NextId(), activeFlag = "1", - saleOrderId = item.orderId, + saleOrderId = mesBaseBarcodeInfo.saleOrderId==null?0:mesBaseBarcodeInfo.saleOrderId, stockType = "1", supplierId = mesBaseBarcodeInfo.manufacturerId, qualityStatus = "1", @@ -755,7 +755,7 @@ namespace Khd.Core.Wcs.Wcs createBy = "WCS", createDate = DateTime.Now, frozenAmount = 0, - instockBatch = mesBaseBarcodeInfo.batchCode, + instockBatch = mesBaseBarcodeInfo.barcodeInfo, instockDate = DateTime.Now, locationCode = wmsBaseLocation.locationCode, materialId = mesBaseBarcodeInfo.materialId, diff --git a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs index d07ca97..bcf34f1 100644 --- a/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs +++ b/src/Khd.Core.Wcs/Wcs/ThirdFloorPoint.cs @@ -79,24 +79,26 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.materialId == wcsTask.materialId) .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 + var bill = from a in mesBasePalletInfos - join b in wmsBaseLocations.Where(t => t.locDeep == 1) on a.palletInfoCode equals b.containerCode + join b in wmsBaseLocations.Where(t => t.locDeep == 1 && !string.IsNullOrEmpty(t.containerCode)) on a.palletInfoCode equals b.containerCode select new { b };//等于当前任务的物料的托盘的库位信息 - var outBill = from a in bill - from b in wmsBaseLocations + + var outBill = from b in wmsBaseLocations + from a in bill where a.b.layerNum == b.layerNum && b.locDeep == 2 - && a.b.locRow == b.locRow + && b.locRow == (a.b.locRow % 2 == 0 ? a.b.locRow - 1 : a.b.locRow + 1) && a.b.locColumn == b.locColumn && b.locationStatus == "1" && b.outstockFlag == "0" && b.instockFlag == "0" && string.IsNullOrEmpty(b.containerCode) - select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 + select new { 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();//找不到再找任意库位 if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null) @@ -117,8 +119,8 @@ namespace Khd.Core.Wcs.Wcs wmsBaseLocation.instockFlag = "1"; wmsBaseLocation.locationStatus = "2"; dbContext.Update(wmsBaseLocation); - dbContext.Add(wcsTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Add(newTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(newTask); dbContext.Add(wcsTaskLog); dbContext.SaveChanges(); }