master
1 year ago
parent 4d04a4e706
commit cc396e6ac1

@ -57,7 +57,7 @@ namespace Khd.Core.Wcs
plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot); plc = new Plc.S7.Plc(plcConfig.CpuType, plcConfig.IP, plcConfig.Port, plcConfig.Rack, plcConfig.Slot);
try try
{ {
plc.Open(); //plc.Open();
Console.WriteLine(DateTime.Now + ":连接到PLC" + plcConfig.IP); Console.WriteLine(DateTime.Now + ":连接到PLC" + plcConfig.IP);
} }
catch catch
@ -69,13 +69,13 @@ namespace Khd.Core.Wcs
} }
//SystemTimer systemTimer = new SystemTimer(_host); //SystemTimer systemTimer = new SystemTimer(_host);
//systemTimer.Start(); //systemTimer.Start();
//创建任务 ////创建任务
CreateTaskByRecord createTaskByRecord = new(_host); //CreateTaskByRecord createTaskByRecord = new(_host);
createTaskByRecord.StartPoint(); //createTaskByRecord.StartPoint();
//一楼提升机以及接驳位 ////一楼提升机以及接驳位
FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]); //FirstFloor firstFloor = new(_host, StaticData.PlcDic[0]);
firstFloor.StartPoint(); //firstFloor.StartPoint();
////二层接驳位 ////二层接驳位
//var SecondBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 2 && t.equipType == 1).First(); //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 thirdFloorPoint = new(_host, StaticData.PlcDic[0], ThirdBaseFloorEquip.floorNo.Value);
thirdFloorPoint.StartPoint(); thirdFloorPoint.StartPoint();
//三层AGV ////三层AGV
var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First(); //var ThirdFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 3 && t.equipType == 4).First();
ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[2], ThirdFloorAgvEquip.floorNo.Value); //ThirdFloorAGV thirdFloorAGV = new(_host, StaticData.PlcDic[2], ThirdFloorAgvEquip.floorNo.Value);
thirdFloorAGV.StartPoint(); //thirdFloorAGV.StartPoint();
//五层接驳位 ////五层接驳位
var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First(); //var FifthBaseFloorEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 1).First();
FiveFloorPoint fifthFloorPoint = new(_host, StaticData.PlcDic[0], FifthBaseFloorEquip.floorNo.Value); //FiveFloorPoint fifthFloorPoint = new(_host, StaticData.PlcDic[0], FifthBaseFloorEquip.floorNo.Value);
fifthFloorPoint.StartPoint(); //fifthFloorPoint.StartPoint();
////五层CTU ////五层CTU
//var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First(); //var FiveFloorCTUEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 6).First();
//FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[1], FiveFloorCTUEquip.floorNo.Value); //FiveFloorCTU fiveFloorCTU = new(_host, StaticData.PlcDic[1], FiveFloorCTUEquip.floorNo.Value);
//fiveFloorCTU.StartPoint(); //fiveFloorCTU.StartPoint();
//五层AGV ////五层AGV
var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First(); //var FifthFloorAgvEquip = StaticData.BaseEquip.Where(t => t.floorNo == 5 && t.equipType == 5).First();
FiveFloorAGV fifthFloorAGV = new(_host, StaticData.PlcDic[0], FifthFloorAgvEquip.floorNo.Value); //FiveFloorAGV fifthFloorAGV = new(_host, StaticData.PlcDic[0], FifthFloorAgvEquip.floorNo.Value);
fifthFloorAGV.StartPoint(); //fifthFloorAGV.StartPoint();
//背负式Agv //背负式Agv
//var FifthFloorBearAgvEquip = StaticData.BaseEquip.Where(t => t.objid == 28).First(); //var FifthFloorBearAgvEquip = StaticData.BaseEquip.Where(t => t.objid == 28).First();

@ -47,9 +47,9 @@ namespace Khd.Core.Wcs.Wcs
////三楼去翻转机任务 ////三楼去翻转机任务
//var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic); //var createThirdOutTaskThread = new Thread(CreateThirdOutTaskLogic);
//createThirdOutTaskThread.Start(); //createThirdOutTaskThread.Start();
//二楼成品出库任务 ////二楼成品出库任务
var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic); //var CreateSecondProductTaskThread = new Thread(CreateSecondProductTaskLogic);
CreateSecondProductTaskThread.Start(); //CreateSecondProductTaskThread.Start();
////三楼托盘收集架满5个或10个时出库合盘任务 ////三楼托盘收集架满5个或10个时出库合盘任务
//var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic); //var createEmptyTrayThread = new Thread(CreateEmptyTrayLogic);
//createEmptyTrayThread.Start(); //createEmptyTrayThread.Start();

@ -156,7 +156,7 @@ namespace Khd.Core.Wcs.Wcs
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i); BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == i);
bool hasCmd = dbContext.WcsCmd.Where(t => t.nextPointId == i || t.currPointId == i).Any(); 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(); 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; baseEquip.equipStatus = 0;
dbContext.Update(baseEquip); dbContext.Update(baseEquip);
@ -656,20 +656,25 @@ namespace Khd.Core.Wcs.Wcs
} }
else if (wcsTask.taskStatus == 4) else if (wcsTask.taskStatus == 4)
{ {
BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo); BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.floorNo == wcsTask.floorNo && t.plcpointNo.Contains("wcsrun"));
wcsTask.nextPointId = floorEquip.objid; var wcsRun = StaticData.PlcDic[0].Read(basePlcpoint.plcpointAddress);
wcsTask.nextPointNo = floorEquip.equipNo; if (wcsRun != null && Convert.ToInt32(wcsRun) == 0)
wcsTask.taskStatus = 5; {
wcsTask.updateBy = "提升机线程"; BaseEquip floorEquip = StaticData.BaseEquip.First(t => t.objid == wcsTask.floorNo);
wcsTask.updateTime = DateTime.Now; wcsTask.nextPointId = floorEquip.objid;
wcsTask.remark = "提升机任务执行完成"; wcsTask.nextPointNo = floorEquip.equipNo;
lineEquip.equipStatus = 0; wcsTask.taskStatus = 5;
Console.WriteLine(DateTime.Now + ":提升机任务完成" + wcsTask.fromFloorNo + "---" + wcsTask.floorNo + "楼指令"); wcsTask.updateBy = "提升机线程";
LogManager.Info("提升机任务完成" + wcsTask.fromFloorNo + "---" + wcsTask.floorNo + "楼指令"); wcsTask.updateTime = DateTime.Now;
dbContext.Update(lineEquip); wcsTask.remark = "提升机任务执行完成";
dbContext.Update(wcsTask); lineEquip.equipStatus = 0;
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 = "提升机任务执行完成" }); Console.WriteLine(DateTime.Now + ":提升机任务完成" + wcsTask.fromFloorNo + "---" + wcsTask.floorNo + "楼指令");
dbContext.SaveChanges(); 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; break;
} }

@ -877,14 +877,14 @@ namespace Khd.Core.Wcs.Wcs
warehouseFloor = 5, warehouseFloor = 5,
stockType = "1", stockType = "1",
totalAmount = 1, totalAmount = 1,
saleOrderId = mesBaseBarcodeInfo.saleOrderId, saleOrderId = mesBaseBarcodeInfo.saleOrderId==null?0:mesBaseBarcodeInfo.saleOrderId,
safeFlag = mesBaseBarcodeInfo.safeFlag, safeFlag = mesBaseBarcodeInfo.safeFlag,
supplierId = mesBaseBarcodeInfo.manufacturerId, supplierId = mesBaseBarcodeInfo.manufacturerId,
materialId = mesBasePalletInfo.materialId, materialId = mesBasePalletInfo.materialId,
qualityStatus = "0", qualityStatus = "0",
rawStockId = StaticData.SnowId.NextId(), rawStockId = StaticData.SnowId.NextId(),
completeFlag = "1", completeFlag = "1",
instockBatch = mesBaseBarcodeInfo.batchCode, instockBatch = mesBaseBarcodeInfo.barcodeInfo,
updateBy = "WCS", updateBy = "WCS",
updateDate = DateTime.Now, updateDate = DateTime.Now,
warehouseId = 511 warehouseId = 511
@ -893,7 +893,7 @@ namespace Khd.Core.Wcs.Wcs
lineEquip.equipStatus = 0; lineEquip.equipStatus = 0;
dbContext.Update(lineEquip); dbContext.Update(lineEquip);
dbContext.Add(wmsRawStock); dbContext.Add(wmsRawStock);
dbContext.Add(wmsBaseLocation); dbContext.Update(wmsBaseLocation);
dbContext.Remove(item); dbContext.Remove(item);
dbContext.Remove(wcsCmd); dbContext.Remove(wcsCmd);
dbContext.SaveChanges(); dbContext.SaveChanges();

@ -67,10 +67,9 @@ namespace Khd.Core.Wcs.Wcs
if (Convert.ToInt32(isSignal) == 1) if (Convert.ToInt32(isSignal) == 1)
{ {
//获取条码信息 //获取条码信息
var palletNo = Convert.ToString(rfid);
BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == FloorNo); BaseEquip baseEquip = StaticData.BaseEquip.First(t => t.equipType == 1 && t.floorNo == FloorNo);
var wcsTask = dbContext.WcsTask.OrderBy(t => t.createTime) 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 != null)
{ {
if (wcsTask.taskStatus == 5)//入库,提升机任务是完成状态 if (wcsTask.taskStatus == 5)//入库,提升机任务是完成状态
@ -101,7 +100,7 @@ namespace Khd.Core.Wcs.Wcs
from b in wmsBaseLocations from b in wmsBaseLocations
where a.b.layerNum == b.layerNum where a.b.layerNum == b.layerNum
&& b.locDeep == 2 && 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 && a.b.locColumn == b.locColumn
&& b.locationStatus == "1" && b.locationStatus == "1"
&& b.outstockFlag == "0" && b.outstockFlag == "0"
@ -115,7 +114,7 @@ namespace Khd.Core.Wcs.Wcs
wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位 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) if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null)
{ {
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask); WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);

@ -2,6 +2,7 @@
using Khd.Core.Domain.Models; using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework; using Khd.Core.EntityFramework;
using Khd.Core.Library.Mapper; using Khd.Core.Library.Mapper;
using Khd.Core.Plc.S7;
using Khd.Core.Wcs.Global; using Khd.Core.Wcs.Global;
using Masuit.Tools; using Masuit.Tools;
using Masuit.Tools.Logging; using Masuit.Tools.Logging;

@ -201,6 +201,8 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.materialId == mesBasePalletInfo.materialId) .Where(t => t.materialId == mesBasePalletInfo.materialId)
.Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料
//wmsBaseLocations.Where(t=>t.locDeep==2&&string.IsNullOrEmpty()).ToList();
var bill = from a in mesBasePalletInfos 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) on a.palletInfoCode equals b.containerCode
select new { b };//等于当前任务的物料的托盘的库位信息 select new { b };//等于当前任务的物料的托盘的库位信息
@ -209,7 +211,7 @@ namespace Khd.Core.Wcs.Wcs
from b in wmsBaseLocations from b in wmsBaseLocations
where a.b.layerNum == b.layerNum where a.b.layerNum == b.layerNum
&& b.locDeep == 2 && 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 && a.b.locColumn == b.locColumn
&& b.locationStatus == "1" && b.locationStatus == "1"
&& b.outstockFlag == "0" && b.outstockFlag == "0"

@ -15,7 +15,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
private readonly IHost host; private readonly IHost host;
private Plc.S7.Plc Plc30 = StaticData.PlcDic[0]; 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]; private Plc.S7.Plc Plc220 = StaticData.PlcDic[2];
public SystemTimer(IHost host) public SystemTimer(IHost host)

@ -747,7 +747,7 @@ namespace Khd.Core.Wcs.Wcs
{ {
rawStockId = StaticData.SnowId.NextId(), rawStockId = StaticData.SnowId.NextId(),
activeFlag = "1", activeFlag = "1",
saleOrderId = item.orderId, saleOrderId = mesBaseBarcodeInfo.saleOrderId==null?0:mesBaseBarcodeInfo.saleOrderId,
stockType = "1", stockType = "1",
supplierId = mesBaseBarcodeInfo.manufacturerId, supplierId = mesBaseBarcodeInfo.manufacturerId,
qualityStatus = "1", qualityStatus = "1",
@ -755,7 +755,7 @@ namespace Khd.Core.Wcs.Wcs
createBy = "WCS", createBy = "WCS",
createDate = DateTime.Now, createDate = DateTime.Now,
frozenAmount = 0, frozenAmount = 0,
instockBatch = mesBaseBarcodeInfo.batchCode, instockBatch = mesBaseBarcodeInfo.barcodeInfo,
instockDate = DateTime.Now, instockDate = DateTime.Now,
locationCode = wmsBaseLocation.locationCode, locationCode = wmsBaseLocation.locationCode,
materialId = mesBaseBarcodeInfo.materialId, materialId = mesBaseBarcodeInfo.materialId,

@ -79,24 +79,26 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.materialId == wcsTask.materialId) .Where(t => t.materialId == wcsTask.materialId)
.Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料 .Where(t => containerCodes.Contains(t.palletInfoCode)).ToList();//深库位的托盘的物料等于当前任务的物料
var bill = from a in mesBasePalletInfos 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 };//等于当前任务的物料的托盘的库位信息 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 where a.b.layerNum == b.layerNum
&& b.locDeep == 2 && 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 && a.b.locColumn == b.locColumn
&& b.locationStatus == "1" && b.locationStatus == "1"
&& b.outstockFlag == "0" && b.outstockFlag == "0"
&& b.instockFlag == "0" && b.instockFlag == "0"
&& string.IsNullOrEmpty(b.containerCode) && string.IsNullOrEmpty(b.containerCode)
select new { a.b };//在上面的基础上获取对应托盘的外侧库位的空库位信息 select new { b };//在上面的基础上获取对应托盘的外侧库位的空库位信息
WmsBaseLocation? wmsBaseLocation = null; WmsBaseLocation? wmsBaseLocation = null;
wmsBaseLocation ??= outBill.FirstOrDefault()?.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();//找不到再找任意库位 wmsBaseLocation ??= wmsBaseLocations.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();//找不到再找任意库位
if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null) if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null)
@ -117,8 +119,8 @@ namespace Khd.Core.Wcs.Wcs
wmsBaseLocation.instockFlag = "1"; wmsBaseLocation.instockFlag = "1";
wmsBaseLocation.locationStatus = "2"; wmsBaseLocation.locationStatus = "2";
dbContext.Update(wmsBaseLocation); dbContext.Update(wmsBaseLocation);
dbContext.Add(wcsTask); dbContext.Add(newTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask); WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(newTask);
dbContext.Add(wcsTaskLog); dbContext.Add(wcsTaskLog);
dbContext.SaveChanges(); dbContext.SaveChanges();
} }

Loading…
Cancel
Save