1.去背板拆分,条码准确寻找

2.成品出库到一楼有时候生成上来的任务
3.plc取走空托盘信号以后,agv取走托盘之后需要给plc已取走信号,并监听plc取走空托盘信号消失以后,复位已取走信号
master
1 year ago
parent 512b4d6d17
commit 77b62be697

@ -2054,7 +2054,7 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
if (endEquip.equipType == 12 || endEquip.equipType == 13)//原材料到柜体验收区,背板安装
else if (endEquip.equipType == 12)//原材料到柜体验收区,背板安装
{
bool hasTask = dbContext.WcsTask.Where(t => t.currPointId == endEquip.objid || t.endPointId == endEquip.objid).Any();
if (!hasTask)
@ -2063,7 +2063,6 @@ namespace Khd.Core.Wcs.Wcs
{
var wmsRawStocks = rawStock
.Where(t => t.materialId == item.materialId && t.warehouseId == item.warehouseId)
.WhereIf(endEquip.equipType == 13, t => t.completeFlag == "0")
.WhereIf(endEquip.equipType == 12, t => t.completeFlag == "1")
.Where(t => t.saleOrderId == (item.saleOrderId == null ? 0 : item.saleOrderId))
.Where(t => t.totalAmount > t.frozenAmount)
@ -2276,6 +2275,198 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
else if (endEquip.equipType == 13)
{
var stock = dbContext.WmsRawStock.Where(t => t.instockBatch == item.materialBatch).FirstOrDefault();
if (stock != null)
{
var location = dbContext.WmsBaseLocation
.Where(t => t.locationStatus == "1")
.Where(t => t.locationCode == stock.locationCode).FirstOrDefault();
if (location != null)
{
List<WmsBaseLocation> AllWmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.warehouseId == item.warehouseId).ToList();
decimal? needNumber = item.outstockAmount - item.realOutstockAmount;
BaseEquip agvEquip = StaticData.BaseEquip.First(t => t.objid == 28);
BaseEquip lineEquip = StaticData.BaseEquip.First(t => t.equipNo == item.endStationCode);
WcsTask wcsTask;
int qty = 0;
if (stock.totalAmount - stock.frozenAmount <= needNumber)//该料箱全部出
{
qty = Convert.ToInt32(stock.totalAmount - stock.frozenAmount);
stock.updateDate = DateTime.Now;
}
else
{
qty = Convert.ToInt32(needNumber);
stock.updateDate = DateTime.Now;
}
MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.barcodeInfo == stock.instockBatch).FirstOrDefault();
if (mesBaseBarcodeInfo != null)
{
if (location.locDeep == 1)
{
int? row = 0;
if (location.locRow % 2 == 1)//五楼原材料与其他的深浅库位相反
{
row = location.locRow + 1;
}
else
{
row = location.locRow - 1;//5
}
WmsBaseLocation? wmsBaseLocation = AllWmsBaseLocations
.Where(t => t.locRow == row)
.Where(t => t.locColumn == location.locColumn)
.Where(t => t.warehouseId == location.warehouseId).FirstOrDefault();
if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1")
{
WmsRawStock? wmsRawStock = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode);
if (wmsRawStock != null)
{
WmsBaseLocation? toLocation = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId)
.Where(t => t.locDeep == 1)
.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();
toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId)
.Where(t => t.warehouseId != location.locationId)
.Where(t => string.IsNullOrEmpty(t.containerCode))
.FirstOrDefault();
if (toLocation != null)
{
if (toLocation.locDeep == 1)
{
bool hasLocation = AllWmsBaseLocations
.Where(t => t.locRow == (toLocation.locRow % 2 == 1 ? (toLocation.locRow + 1) : (toLocation.locRow - 1)))
.Where(t => t.locColumn == toLocation.locColumn)
.Any();
if (!hasLocation)
{
Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库");
_logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库");
continue;
}
}
var RemoveTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
orderId = item.rawOutstockId,
taskType = 66,
containerNo = wmsRawStock.palletInfoCode,
createBy = "WCS",
createTime = DateTime.Now.AddSeconds(-10),
taskStatus = 0,
materialId = item.materialId,
currPointId = wmsBaseLocation.locationId,
currPointNo = wmsBaseLocation.locationCode,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
endPointId = toLocation.locationId,
endPointNo = toLocation.locationCode,
equipmentNo = agvEquip.equipNo,
useFlag = 1,
qty = qty
};
toLocation.locationStatus = "4";
toLocation.updateBy = "WCS";
toLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.locationStatus = "4";
dbContext.Update(toLocation);
dbContext.Update(wmsBaseLocation);
dbContext.Add(RemoveTask);
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(RemoveTask);
dbContext.Add(wcsTaskLog);
}
else
{
continue;
}
}
else
{
continue;
}
}
else if (wmsBaseLocation != null && wmsBaseLocation.locationStatus != "1")
{
Console.WriteLine(DateTime.Now + $":{wmsBaseLocation.locationCode}库位状态异常,无法移库");
_logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库");
continue;
}
else
{
Console.WriteLine(DateTime.Now + $":{location.locationCode}浅库位状态异常,无法移库");
_logger.Info($"{location.locationCode}浅库位状态异常,无法移库");
continue;
}
}
wcsTask = new WcsTask()
{
objid = StaticData.SnowId.NextId(),
orderId = item.rawOutstockId,
taskType = endEquip.equipType == 12 ? 46 : 33,//如果是12那么就是原材料到柜体验收区,如果是13那么就是原材料到背板安装区
containerNo = location.containerCode,
createBy = "WCS",
createTime = DateTime.Now,
taskStatus = 0,
materialId = item.materialId,
currPointId = location.locationId,
currPointNo = location.locationCode,
nextPointId = agvEquip.objid,
nextPointNo = agvEquip.equipNo,
endPointId = lineEquip.objid,
endPointNo = lineEquip.equipNo,
equipmentNo = agvEquip.equipNo,
useFlag = 1,
qty = qty
};
//location是出库的库位mesBaseBarcodeInfo是条码信息表数据item是出库申请单
WmsRawOutstockDetail wmsProductOutstockDetail = new WmsRawOutstockDetail()
{
rawOutstockDetailId = StaticData.SnowId.NextId(),
rawOutstockId = item.rawOutstockId,
materialId = item.materialId,
createDate = DateTime.Now,
createBy = "WCS",
taskCode = wcsTask.objid.ToString(),
executeStatus = "1",
locationCode = location.locationCode,
outstockAmount = qty,
planAmount = item.outstockAmount,
warehouseId = item.warehouseId,
materialBarcode = mesBaseBarcodeInfo.barcodeInfo,
instockBatch = mesBaseBarcodeInfo.batchCode,
stackAmount = qty,
outstockPerson = "WCS",
outstockTime = DateTime.Now,
outstockWay = "2",
materialProductionDate = mesBaseBarcodeInfo.productionDate
};
if (item.beginTime == null)
{
item.beginTime = DateTime.Now;
}
SystemData.LockOutLocation(location, dbContext);
dbContext.Add(wmsProductOutstockDetail);
location.locationStatus = "6";
location.updateBy = "WCS";
location.updateTime = DateTime.Now;
endEquip.emptyCount = 1;
dbContext.Update(endEquip);
dbContext.Update(location);
dbContext.Add(wcsTask);
dbContext.Update(item);
dbContext.Update(stock);
WcsTaskLog wcsTaskLog1 = CoreMapper.Map<WcsTaskLog>(wcsTask);
dbContext.Add(wcsTaskLog1);
dbContext.SaveChanges();
}
}
}
}
}
}
}

@ -290,11 +290,6 @@ namespace Khd.Core.Wcs.Wcs
if (Convert.ToInt32(linesignal01Value) == 1)
{
var wcsTasks = dbContext.WcsTask.ToList();
var hasTask = wcsTasks.Where(t => t.nextPointId == 6 && (t.currPointId == 1 || t.endPointId == 1 && t.taskStatus < 5 && t.taskStatus >= 1)).Any();
if (hasTask)
{
continue;
}
//判断task表里没有该rfid的未完成的入库
//信息,未下发去向
var task = wcsTasks.Where(t => t.IsDelete == 0 || t.IsDelete == null)
@ -331,7 +326,7 @@ namespace Khd.Core.Wcs.Wcs
}
else
{
hasTask = wcsTasks.Where(t => t.containerNo == RFID001Value).Any();
var hasTask = wcsTasks.Where(t => t.containerNo == RFID001Value).Any();
if (!hasTask)
{
//根据托盘号获取物料码

@ -1,4 +1,5 @@
using Khd.Core.Domain.Dto.webapi;
using Castle.Components.DictionaryAdapter.Xml;
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
using Khd.Core.EntityFramework;
using Khd.Core.Library;
@ -24,6 +25,7 @@ namespace Khd.Core.Wcs.Wcs
int FloorNo { get; set; }
private readonly BasePlcpoint putTrayPoint;
private readonly BasePlcpoint getTrayPoint;
private bool IsTrayGet { get; set; }
public ThirdFloorAGV(IHost host, int floor)
{
this._host = host;
@ -48,10 +50,43 @@ namespace Khd.Core.Wcs.Wcs
FZJThread.IsBackground = true;
FZJThread.Start();
Thread MonitorTraySignalThread= new Thread(MonitorTraySignal);
MonitorTraySignalThread.Name = "ThirdFloorAGVTraySignal";
MonitorTraySignalThread.IsBackground = true;
MonitorTraySignalThread.Start();
Console.WriteLine(DateTime.Now + ":三楼AGV 启动上件扫描监听");
_logger.Info("三楼AGV 启动上件扫描监听");
}
private void MonitorTraySignal()
{
BasePlcpoint GetTrayPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "getTray");
BasePlcpoint GetTrayOverPoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "GetTrayOver");
while (true)
{
while (IsTrayGet)
{
try
{
var getTrayValue = StaticData.PlcDic[2].Read(GetTrayPoint.plcpointAddress);
if (getTrayValue != null && !Convert.ToBoolean(getTrayValue))
{
StaticData.PlcDic[2].WriteToPoint(GetTrayOverPoint.plcpointAddress, false, GetTrayOverPoint.plcpointLength.ToString());
IsTrayGet = false;
_logger.Info("三楼AGV 托盘已取走");
}
}
catch
{
}
Thread.Sleep(3000);
}
Thread.Sleep(3000);
}
}
private void MonitorInFZJPoint(object? obj)
{
using var scope = _host.Services.CreateScope();
@ -707,6 +742,9 @@ namespace Khd.Core.Wcs.Wcs
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
if (mesBasePalletInfo != null)
{
BasePlcpoint basePlcpoint = StaticData.BasePlcpointList.First(t => t.plcpointNo == "GetTrayOver");
StaticData.PlcDic[2].WriteToPoint(basePlcpoint.plcpointAddress, true, basePlcpoint.plcpointLength.ToString());
IsTrayGet = true;
MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.Where(t => t.palletInfoCode == item.containerNo).FirstOrDefault();
if (mesBaseBarcodeInfo != null)
{

Loading…
Cancel
Save