master
1 year ago
parent df44a56389
commit f33d9dfb2e

@ -63,6 +63,8 @@ namespace Khd.Core.Wcs.Global
public static List<WcsOutWareOrder> WcsOutWareOrder = new List<WcsOutWareOrder>();
public static List<BasePlc> basePlcs = new List<BasePlc>();
public static List<PlcConfig> PlcConfigs { get; set; }
public static int DeleteLogDay { get; internal set; }
public static Dictionary<int, Dictionary<string, PlcPoint>> PlcPoints = new Dictionary<int, Dictionary<string, PlcPoint>>();
public static Dictionary<int, Plc.S7.Plc> PlcDic = new Dictionary<int, Plc.S7.Plc>();
public static JcSnowId SnowId = new JcSnowId();

@ -91,6 +91,7 @@ internal class Program
StaticData.PlcConfigs = configuration.GetSection("PlcConfigs").Get<List<PlcConfig>>();
ConnectionStrings.ConnectionString = configuration["ConnectionStrings:DefaultConnection"];
StaticData.DeleteLogDay= Convert.ToInt32(configuration["DeleteLogDays"] ?? "10");
}
private static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)

@ -387,7 +387,7 @@ namespace Khd.Core.Wcs.Wcs
.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&&t.returnFlag=="1") on a.palletInfoCode equals b.containerCode
select new { b };//等于当前任务的物料的托盘的库位信息
var outBill = from a in bill
@ -784,7 +784,7 @@ namespace Khd.Core.Wcs.Wcs
};
WcsTaskLog wcsTaskLog = CoreMapper.Map<WcsTaskLog>(wcsTask);
wmsProductInstock.executeStatus = "1";
wmsBaseLocation.locationStatus = "4";
wmsBaseLocation.locationStatus = "2";
dbContext.Add(wmsProductInstockDetail);
dbContext.Update(wmsProductInstock);
dbContext.Update(wmsBaseLocation);
@ -1410,7 +1410,7 @@ namespace Khd.Core.Wcs.Wcs
var wmsproStocks = proStock
.Where(t => t.productId == item.productId && t.saleOrderId == (item.saleOrderId == null ? 0 : item.saleOrderId) && t.warehouseId == item.warehouseId)
.Select(t => t.palletInfoCode)
.Select(t => t.locationCode)
.ToList();
List<WmsBaseLocation> AllWmsBaseLocations = dbContext.WmsBaseLocation
.Where(t => t.activeFlag == "1")
@ -1420,7 +1420,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.warehouseId == item.warehouseId).ToList();
var wmsBaseLocations = AllWmsBaseLocations
.Where(t => t.warehouseId == item.warehouseId)
.Where(t => wmsproStocks.Contains(t.containerCode))
.Where(t => wmsproStocks.Contains(t.locationCode))
.ToList();
decimal needNumber = Convert.ToDecimal(item.applyQty - item.outstockQty);
@ -1434,7 +1434,7 @@ namespace Khd.Core.Wcs.Wcs
var bill = from a in wmsBaseLocations
from b in proStock
where a.containerCode == b.palletInfoCode
where a.locationCode == b.locationCode
select new { a, b };
WmsBaseLocation? location = null;
WmsProductStock? stock = null;
@ -1447,7 +1447,7 @@ namespace Khd.Core.Wcs.Wcs
stock = b.b;
WcsTask wcsTask;
stock.updateDate = DateTime.Now;
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == location.containerCode);
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == stock.palletInfoCode);
if (mesBasePalletInfo != null)
{
if (location.locDeep == 1)//如果是深库位
@ -1482,9 +1482,7 @@ namespace Khd.Core.Wcs.Wcs
.Where(t => t.activeFlag == "1")
.Where(t => t.delFlag == "0")
.Where(t => t.locationScrapType == "1")
.Where(t => t.locationStatus == "1")
.Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault();
toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId)
.Where(t => t.warehouseId != location.locationId)
@ -1560,7 +1558,7 @@ namespace Khd.Core.Wcs.Wcs
objid = StaticData.SnowId.NextId(),
orderId = item.productOutstockId,
taskType = 50,
containerNo = location.containerCode,
containerNo = stock.palletInfoCode,
createBy = "WCS",
createTime = DateTime.Now,
taskStatus = 0,

@ -290,14 +290,18 @@ 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();
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 = dbContext.WcsTask.Where(t => t.IsDelete == 0 || t.IsDelete == null).Where(t => t.nextPointId == 1).OrderBy(t => t.createTime).FirstOrDefault();
var task = wcsTasks.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))

@ -114,7 +114,7 @@ namespace Khd.Core.Wcs.Wcs
if (reponseMessage != null && reponseMessage.message == "成功")
{
_logger.Info("五楼Agv下发任务成功" + message);
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + item.containerNo + "," + nextEquip.agvPositionCode);
Console.WriteLine(DateTime.Now + ":五楼Agv下发任务成功" + item.currPointNo + "," + nextEquip.agvPositionCode);
item.taskCode = reponseMessage.data;
item.taskStatus = 1;
lineEquip.equipStatus = 1;
@ -427,20 +427,30 @@ namespace Khd.Core.Wcs.Wcs
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.currPointNo).FirstOrDefault();
if (wmsRawStock != null)
{
wmsRawStock.locationCode = item.currPointNo;
wmsRawStock.locationCode = item.endPointNo;
dbContext.Update(wmsRawStock);
}
else
else if(wmsRawStock == null)
{
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo);
if (wmsProductStock != null)
{
wmsProductStock.locationCode = item.currPointNo;
wmsProductStock.locationCode = item.endPointNo;
dbContext.Update(wmsProductStock);
}
else
{
continue;
}
}
else
{
continue;
}
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
{
returnFlag="0",
locationStatus = "1",
containerCode = null,
updateTime = DateTime.Now
@ -448,6 +458,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation
{
locationStatus = "1",
returnFlag=wmsBaseLocation.returnFlag,
containerCode = item.containerNo,
updateTime = DateTime.Now
});
@ -517,9 +528,9 @@ namespace Khd.Core.Wcs.Wcs
wmsRawOutstockDetail.executeStatus = "2";
wmsRawOutstock.executeStatus = "2";
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
wmsBaseLocation.returnFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.returnFlag = "0";
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
dbContext.Update(wmsRawOutstock);
@ -543,7 +554,7 @@ namespace Khd.Core.Wcs.Wcs
wmsBaseLocation.updateBy = "WCS";
var mesBasePalletInfo = dbContext.MesBasePalletInfo.Where(t => t.palletInfoCode == item.containerNo).FirstOrDefault();
var wmsProductInstock = dbContext.WmsProductInstock
.Where(t => t.executeStatus == "1" && t.productType == "2" && t.warehouseFloor == 5)
.Where(t => t.executeStatus == "1" && t.productType == "2" && t.warehouseId == 521)
.FirstOrDefault();
if (mesBasePalletInfo != null && wmsProductInstock != null)
{
@ -626,10 +637,10 @@ namespace Khd.Core.Wcs.Wcs
_logger.Info("五楼Agv完成任务成功" + item.ToJsonString());
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.endPointId);
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.returnFlag = "1";
wmsBaseLocation.containerCode = item.containerNo;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
wmsBaseLocation.returnFlag = "1";
MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == item.containerNo);
if (mesBasePalletInfo != null)
{
@ -705,12 +716,13 @@ namespace Khd.Core.Wcs.Wcs
materialId = mesBasePalletInfo.materialId,
qualityStatus = "0",
rawStockId = StaticData.SnowId.NextId(),
completeFlag = "1",
completeFlag = item.fromFloorNo==4?"0":"1",
instockBatch = mesBaseBarcodeInfo.barcodeInfo,
updateBy = "WCS",
updateDate = DateTime.Now,
warehouseId = 511,
};
wmsBaseLocation.returnFlag = "0";
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 5);
lineEquip.equipStatus = 0;
dbContext.Update(lineEquip);

@ -103,9 +103,8 @@ namespace Khd.Core.Wcs.Wcs
.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 && wcsTask.fromFloorNo == 4 ? t.returnFlag == "1" : t.returnFlag == "0") on a.palletInfoCode equals b.containerCode
select new { b };//等于当前任务的物料的托盘的库位信息
var outBill = from a in bill
from b in wmsBaseLocations
where b.locDeep == 2
@ -113,13 +112,13 @@ 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.Where(t=>!canNotIn.Contains(t.b.locationCode)).FirstOrDefault()?.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();//找不到再找任意库位
//深浅库位问题?库位入库优先级等
//深浅库位问题?库位入库优先级等
var AgvEquip = StaticData.BaseEquip.First(t => t.objid == 28);//5楼叉车
if (wmsBaseLocations.Count > 0 && wmsBaseLocation != null)
@ -207,7 +206,7 @@ namespace Khd.Core.Wcs.Wcs
{
if (ex is PlcException)
{
}
else
{

@ -489,8 +489,7 @@ namespace Khd.Core.Wcs.Wcs
if (item.currPointId == lineEquip.objid)
{
var lineSignal02 = StaticData.PlcDic[0].Read(StaticData.BasePlcpointList.First(t => t.plcpointNo == "linesignal02").plcpointAddress);
var rfid = StaticData.PlcDic[0].ReadRFID(StaticData.BasePlcpointList.First(t => t.plcpointNo == "RFID002").plcpointAddress);
if (lineSignal02 != null && rfid != null && rfid == item.containerNo && lineSignal02.ToString() == "1")
if (lineSignal02 != null && lineSignal02.ToString() == "1")
{
var agvTask = new RequestAGVTaskDto
{
@ -743,7 +742,7 @@ namespace Khd.Core.Wcs.Wcs
var wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == item.currPointNo);
if (wmsProductStock != null)
{
wmsProductStock.locationCode = item.currPointNo;
wmsProductStock.locationCode = item.endPointNo;
dbContext.Update(wmsProductStock);
}
dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation
@ -755,7 +754,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WmsBaseLocation.Where(t => t.locationId == item.endPointId).Update(t => new WmsBaseLocation
{
locationStatus = "1",
containerCode = item.containerNo,
containerCode = item.endPointNo,
updateTime = DateTime.Now
});
dbContext.Remove(item);

@ -18,9 +18,6 @@ namespace Khd.Core.Wcs.Wcs
{
private readonly LoggerUtils _logger = new LoggerUtils();
private readonly IHost host;
private Plc.S7.Plc Plc30 = StaticData.PlcDic[0];
private Plc.S7.Plc Plc31 = StaticData.PlcDic[1];
private Plc.S7.Plc Plc220 = StaticData.PlcDic[2];
public SystemTimer(IHost host)
{
@ -73,6 +70,10 @@ namespace Khd.Core.Wcs.Wcs
Console.WriteLine($"{DateTime.Now}: SystemTimer started");
}
/// <summary>
/// 定时清除日志文件
/// </summary>
/// <param name="obj"></param>
private void DeleteLogsLogic(object? obj)
{
while (true)
@ -89,7 +90,7 @@ namespace Khd.Core.Wcs.Wcs
{
if (DateTime.TryParse(dirName, out DateTime dt))
{
if (dt < DateTime.Now.AddDays(-5))
if (dt < DateTime.Now.AddDays(-StaticData.DeleteLogDay))
{
Directory.Delete(s, true);
_logger.Info($"日志{dirName}已删除");
@ -107,6 +108,10 @@ namespace Khd.Core.Wcs.Wcs
}
}
/// <summary>
/// 删除任务
/// </summary>
/// <param name="obj"></param>
private void DeleteTaskLogic(object? obj)
{
using var scope = host.Services.CreateScope();
@ -432,11 +437,11 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(cardStatus);
dbContext.SaveChanges();
var quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
StaticData.PlcDic[2].WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
var XPlc = basePlcs.First(t => t.Name.Contains('X'));
var Ylc = basePlcs.First(t => t.Name.Contains('Y'));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosY.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosY.ToString(), XPlc.type);
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
}
}
catch
@ -472,11 +477,11 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Update(cardStatus);
dbContext.SaveChanges();
var quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
StaticData.PlcDic[2].WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
var XPlc = basePlcs.First(t => t.Name.Contains('X'));
var Ylc = basePlcs.First(t => t.Name.Contains('Y'));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
}
}
catch
@ -502,21 +507,21 @@ namespace Khd.Core.Wcs.Wcs
{
WcsCmd wcsCmd = wcsCmds.First();
var endPlc = basePlcs.Where(t => t.Name.Contains("目的地")).First();
Plc220.WriteToPoint(endPlc.Address, wcsCmd.nextPointId.ToString(), endPlc.type);
StaticData.PlcDic[2].WriteToPoint(endPlc.Address, wcsCmd.nextPointId.ToString(), endPlc.type);
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
Plc220.WriteToPoint(startPlc.Address, wcsCmd.currPointId.ToString(), startPlc.type);
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, wcsCmd.currPointId.ToString(), startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
string cmdType = StaticData.BaseDictionary.First(t => t.objid == wcsCmd.cmdType).ToPlc;
Plc220.WriteToPoint(cmdPlc.Address, cmdType, cmdPlc.type);
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, cmdType, cmdPlc.type);
}
else
{
var endPlc = basePlcs.Where(t => t.Name.Contains("目的地")).First();
this.Plc220.WriteToPoint(endPlc.Address, "0", endPlc.type);
StaticData.PlcDic[2].WriteToPoint(endPlc.Address, "0", endPlc.type);
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
Plc220.WriteToPoint(startPlc.Address, "0", startPlc.type);
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, "0", startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
Plc220.WriteToPoint(cmdPlc.Address, "0", cmdPlc.type);
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, "0", cmdPlc.type);
}
var data = new
{
@ -529,31 +534,31 @@ namespace Khd.Core.Wcs.Wcs
{
var cardStatus = reponse.data.First(t => t.RobotCode == "2034");
var quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
StaticData.PlcDic[2].WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
var XPlc = basePlcs.First(t => t.Name.Contains('X'));
var Ylc = basePlcs.First(t => t.Name.Contains('Y'));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼背负式").ToList();
cardStatus = reponse.data.First(t => t.RobotCode == "6011");
quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
StaticData.PlcDic[2].WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
XPlc = basePlcs.First(t => t.Name.Contains('X'));
Ylc = basePlcs.First(t => t.Name.Contains('Y'));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
basePlcs = StaticData.basePlcs.Where(t => t.Station == "5楼CTU").ToList();
cardStatus = reponse.data.First(t => t.RobotCode == "8161");
quantityPlc = basePlcs.First(t => t.Name.Contains("电量"));
this.Plc220.WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
StaticData.PlcDic[2].WriteToPoint(quantityPlc.Address, cardStatus.Battery, quantityPlc.type);
XPlc = basePlcs.First(t => t.Name.Contains("X"));
Ylc = basePlcs.First(t => t.Name.Contains("Y"));
this.Plc220.WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
this.Plc220.WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
}
}
@ -573,21 +578,21 @@ namespace Khd.Core.Wcs.Wcs
{
WcsCmd wcsCmd = wcsCmds.First();
var endPlc = basePlcs.Where(t => t.Name.Contains("目的地")).First();
Plc220.WriteToPoint(endPlc.Address, wcsCmd.nextPointId.ToString(), endPlc.type);
StaticData.PlcDic[2].WriteToPoint(endPlc.Address, wcsCmd.nextPointId.ToString(), endPlc.type);
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
Plc220.WriteToPoint(startPlc.Address, wcsCmd.currPointId.ToString(), startPlc.type);
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, wcsCmd.currPointId.ToString(), startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
string cmdType = StaticData.BaseDictionary.First(t => t.objid == wcsCmd.cmdType).ToPlc;
Plc220.WriteToPoint(cmdPlc.Address, cmdType, cmdPlc.type);
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, cmdType, cmdPlc.type);
}
else
{
var endPlc = basePlcs.Where(t => t.Name.Contains("目的地")).First();
this.Plc220.WriteToPoint(endPlc.Address, "0", endPlc.type);
StaticData.PlcDic[2].WriteToPoint(endPlc.Address, "0", endPlc.type);
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
Plc220.WriteToPoint(startPlc.Address, "0", startPlc.type);
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, "0", startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
Plc220.WriteToPoint(cmdPlc.Address, "0", cmdPlc.type);
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, "0", cmdPlc.type);
}
}
@ -625,13 +630,13 @@ namespace Khd.Core.Wcs.Wcs
var endPlcs = basePlcs.Where(t => t.Name.Contains("目的地")).OrderBy(t => t.Name).ToList();
for (int i = 0; i < endPlcs.Count; i++)
{
this.Plc220.WriteToPoint(endPlcs[i].Address, endList[i].ToString(), endPlcs[i].type);
StaticData.PlcDic[2].WriteToPoint(endPlcs[i].Address, endList[i].ToString(), endPlcs[i].type);
}
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
Plc220.WriteToPoint(startPlc.Address, wcsCmd.currPointId.ToString(), startPlc.type);
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, wcsCmd.currPointId.ToString(), startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
string cmdType = StaticData.BaseDictionary.First(t => t.objid == wcsCmd.cmdType).ToPlc;
Plc220.WriteToPoint(cmdPlc.Address, cmdType, cmdPlc.type);
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, cmdType, cmdPlc.type);
}
else
@ -639,12 +644,12 @@ namespace Khd.Core.Wcs.Wcs
var endPlcs = basePlcs.Where(t => t.Name.Contains("目的地")).OrderBy(t => t.Name).ToList();
for (int i = 0; i < endPlcs.Count; i++)
{
this.Plc220.WriteToPoint(endPlcs[i].Address, "0", endPlcs[i].type);
StaticData.PlcDic[2].WriteToPoint(endPlcs[i].Address, "0", endPlcs[i].type);
}
var startPlc = basePlcs.First(t => t.Name.Contains("起始点"));
Plc220.WriteToPoint(startPlc.Address, "0", startPlc.type);
StaticData.PlcDic[2].WriteToPoint(startPlc.Address, "0", startPlc.type);
var cmdPlc = basePlcs.First(t => t.Name.Contains("任务代号"));
Plc220.WriteToPoint(cmdPlc.Address, "0", cmdPlc.type);
StaticData.PlcDic[2].WriteToPoint(cmdPlc.Address, "0", cmdPlc.type);
}
}
@ -663,27 +668,27 @@ namespace Khd.Core.Wcs.Wcs
{
if (item.a.plcpointNo.Contains("RFID"))
{
string? rfid = Plc31.ReadRFID(item.a.plcpointAddress);
string? rfid = StaticData.PlcDic[1].ReadRFID(item.a.plcpointAddress);
if (!string.IsNullOrEmpty(rfid))
{
rfid = rfid[(rfid.IndexOf("C") + 1)..];
Plc220.WriteToPoint(item.b.Address, rfid, item.b.type);
StaticData.PlcDic[2].WriteToPoint(item.b.Address, rfid, item.b.type);
}
else
{
Plc220.WriteToPoint(item.b.Address, "0", item.b.type);
StaticData.PlcDic[2].WriteToPoint(item.b.Address, "0", item.b.type);
}
}
else
{
var value = Plc31.Read(item.a.plcpointAddress);
var value = StaticData.PlcDic[1].Read(item.a.plcpointAddress);
if (value != null && !string.IsNullOrEmpty(value.ToString()))
{
Plc220.WriteToPoint(item.b.Address, value.ToString(), item.b.type);
StaticData.PlcDic[2].WriteToPoint(item.b.Address, value.ToString(), item.b.type);
}
else
{
Plc220.WriteToPoint(item.b.Address, "0", item.b.type);
StaticData.PlcDic[2].WriteToPoint(item.b.Address, "0", item.b.type);
}
}
}
@ -705,27 +710,27 @@ namespace Khd.Core.Wcs.Wcs
{
if (item.a.plcpointNo.Contains("RFID"))
{
string? rfid = Plc30.ReadRFID(item.a.plcpointAddress);
string? rfid = StaticData.PlcDic[0].ReadRFID(item.a.plcpointAddress);
if (!string.IsNullOrEmpty(rfid))
{
rfid = rfid[(rfid.IndexOf("JYHB") + 4)..];
Plc220.WriteToPoint(item.b.Address, rfid, item.b.type);
StaticData.PlcDic[2].WriteToPoint(item.b.Address, rfid, item.b.type);
}
else
{
Plc220.WriteToPoint(item.b.Address, "0", item.b.type);
StaticData.PlcDic[2].WriteToPoint(item.b.Address, "0", item.b.type);
}
}
else
{
var value = Plc30.Read(item.a.plcpointAddress);
var value = StaticData.PlcDic[0].Read(item.a.plcpointAddress);
if (value != null && !string.IsNullOrEmpty(value.ToString()))
{
Plc220.WriteToPoint(item.b.Address, value.ToString(), item.b.type);
StaticData.PlcDic[2].WriteToPoint(item.b.Address, value.ToString(), item.b.type);
}
else
{
Plc220.WriteToPoint(item.b.Address, "0", item.b.type);
StaticData.PlcDic[2].WriteToPoint(item.b.Address, "0", item.b.type);
}
}
}

@ -545,7 +545,7 @@ namespace Khd.Core.Wcs.Wcs
var wmsRawStock = dbContext.WmsRawStock.Where(t => t.locationCode == item.endPointNo).FirstOrDefault();
if (wmsRawStock != null)
{
wmsRawStock.locationCode = item.currPointNo;
wmsRawStock.locationCode = item.endPointNo;
dbContext.Update(wmsRawStock);
}
dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).Update(t => new WmsBaseLocation

@ -5,6 +5,7 @@
//"DefaultConnection": "server=localhost;port=3306;database=jyhb;uid=root;pwd=root;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
//"DefaultConnection": "server=175.27.215.92;port=3306;database=hwjy-cloud;uid=kehaida;pwd=khd2024;charset='utf8';persistsecurityinfo=True;SslMode=None;Allow User Variables=True"
},
"DeleteLogDays": 10,//
"PlcConfigs": [
{
"IP": "192.168.2.30",

@ -1945,6 +1945,49 @@
</StackPanel>
</StackPanel>
</TabItem>
<TabItem x:Name="ScanReturnManager" Header="扫描退库" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" Background="#213269" VerticalContentAlignment="Center" Foreground="White" Width="160" Height="100" Margin="5">
<StackPanel Height="1060" Width="1703" Background="#213269" Canvas.Left="175" Canvas.Top="110" Orientation="Horizontal">
<StackPanel Orientation="Horizontal" Width="1750">
<StackPanel Orientation="Vertical" Margin="20,5,0,0">
<Grid Width="1650" Height="1000">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="167*"/>
<RowDefinition Height="167*"/>
<RowDefinition Height="167*"/>
<RowDefinition Height="166.667"/>
<RowDefinition Height="167*"/>
<RowDefinition Height="167*"/>
<RowDefinition Height="83*"/>
</Grid.RowDefinitions>
<TextBlock Text="扫描退库" Foreground="White" FontSize="50" Grid.ColumnSpan="6" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="扫描料箱号:" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<TextBlock Text="扫描条码号:" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<TextBlock Text="退库数量:" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="75"/>
<hc:TextBox x:Name="txtReturnBox" hc:InfoElement.ShowClearButton="True" FontSize="50" LostFocus="txtInBox_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="1" Grid.Column="3" Grid.ColumnSpan="3"/>
<Button Click="barClear_Click" HorizontalAlignment="Right" Height="100" Panel.ZIndex="1" Width="100" Margin="0,0,130,0" Grid.Column="5" Grid.Row="2">
<Image Source="..\Resources\cancel.png"/>
</Button>
<Button Click="boxClear_Click" HorizontalAlignment="Right" Height="100" Panel.ZIndex="1" Width="100" Margin="0,0,130,0" Grid.Column="5" Grid.Row="1">
<Image Source="..\Resources\cancel.png"/>
</Button>
<hc:TextBox x:Name="txtReturnBarCode" hc:InfoElement.ShowClearButton="True" FontSize="50" LostFocus="txtInBarCode_TextChanged" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="2" Grid.Column="3" Grid.ColumnSpan="3"/>
<hc:TextBox x:Name="txtReturnScan" FontSize="50" IsReadOnly="True" Width="700" HorizontalAlignment="Left" VerticalAlignment="Center" Height="130" Grid.Row="3" Grid.Column="3" Grid.ColumnSpan="3" />
<Button Content="确认退库" Grid.Row="4" Grid.ColumnSpan="6" Width="500" Height="100" FontSize="50" Background="#346DFF" Foreground="White" Click="ReturnRawBaseLocaltion_Click"/>
<Button Content="一键收料" Grid.Row="5" Grid.ColumnSpan="6" Width="500" Height="100" FontSize="50" Background="#346DFF" Foreground="White" Click="callPlc_Click"/>
<Button Content="执行CTU入库任务" Visibility="Hidden" Click="btnCtuInConfirmBox_Click" Grid.Row="5" Grid.ColumnSpan="6" Width="500" Height="100" FontSize="50" Background="#346DFF" Foreground="White"/>
</Grid>
</StackPanel>
</StackPanel>
</StackPanel>
</TabItem>
<TabItem x:Name="ScanOutManager" Header="扫描出库" Style="{StaticResource DefaultItem}" FontSize="25" HorizontalContentAlignment="Center" Background="#213269" VerticalContentAlignment="Center" Foreground="White" Width="160" Height="100" Margin="5">
<StackPanel Height="1060" Width="1703" Background="#213269" Canvas.Left="175" Canvas.Top="110" Orientation="Horizontal">
<StackPanel Orientation="Horizontal" Width="1750">

@ -284,7 +284,7 @@ namespace Khd.Core.Wpf.Form
List<string> list = wmsRawOutstocks.Select(t => t.endStationCode).ToList();
Dispatcher.Invoke(() =>
{
this.OutOrder.Text = "待出库单:\n" + list.Join("\n");
this.OutOrder.Text = "待出库单:\n" + list.Distinct().Join("\n");
});
var baseEquip = dbContext.BaseEquip.First(t => t.objid == 10);
@ -1527,7 +1527,91 @@ namespace Khd.Core.Wpf.Form
LogManager.Error(ex);
MessageBox.Show("入库失败");
}
//20240717102819RB045
}
/// <summary>
/// 入库扫描
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ReturnRawBaseLocaltion_Click(object sender, RoutedEventArgs e)
{
try
{
if (!string.IsNullOrEmpty(txtInBox.Text) && !string.IsNullOrEmpty(txtInBarCode.Text))
{
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
WmsRawReturn? wmsRawReturn = dbContext.WmsRawReturn.Where(t => t.executeStatus == "1").FirstOrDefault();
if (wmsRawReturn == null)
{
MessageBox.Show("未查询到退库任务!");
return;
}
var material = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == txtInBarCode.Text);
var container = dbContext.WmsBaseLocation.FirstOrDefault(t => t.containerCode == txtInBox.Text && t.warehouseId == 512);
List<WmsRawStock> wmsRawStocks = dbContext.WmsRawStock
.Where(t => txtInBarCode.Text == t.instockBatch)
.Where(t => t.warehouseFloor == 5 && t.warehouseId == 512).ToList();
if (wmsRawStocks.Count > 0)
{
MessageBox.Show($"该条码已入库!料箱号为{wmsRawStocks.First().palletInfoCode},库位号为{wmsRawStocks.First().locationCode}");
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
return;
}
if (container == null)
{
MessageBox.Show("未查询到该容器!");
txtInBox.Text = string.Empty;
return;
}
if (material == null)
{
MessageBox.Show("未查询到该条码内容!");
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
return;
}
var newRawStock = new WmsRawStock()
{
materialId = material.materialId,
supplierId = material.manufacturerId,
instockBatch = txtInBarCode.Text,
locationCode = container.locationCode,
stockType = "1",
palletInfoCode = container.containerCode,
totalAmount = material.batchFlag == "1" ? material.amount : 1,
activeFlag = "1",
occupyAmount = 0,
completeFlag = "1",
frozenAmount = 0,
instockDate = System.DateTime.Now,
rawStockId = Global.SnowId.NextId(),
saleOrderId = material.saleOrderId == null ? 0 : material.saleOrderId,
warehouseFloor = 5,
warehouseId = 512,
createBy = "扫描退库",
createDate = System.DateTime.Now,
safeFlag = material.safeFlag
};
dbContext.WmsRawStock.Add(newRawStock);
dbContext.SaveChanges();
MessageBox.Show("入库成功!");
txtInBarCode.Text = string.Empty;
txtInScan.Text = string.Empty;
txtInBarCode.Focus();
}
else
{
MessageBox.Show("请先扫描容器号和条码!");
}
}
catch (Exception ex)
{
LogManager.Error(ex);
MessageBox.Show("入库失败");
}
}
/// <summary>
/// 入库容器改变
@ -2374,6 +2458,11 @@ namespace Khd.Core.Wpf.Form
var lineSignalValue = SystemData.PlcDic[0].Read(lineSignal.plcpointAddress);
if (lineSignalValue != null && Convert.ToInt32(lineSignalValue) == 1)
{
if (!ReadEmptyLocation())
{
MessageBox.Show("有任务正在执行");
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
@ -2406,7 +2495,7 @@ namespace Khd.Core.Wpf.Form
LogManager.Error(ex);
}
}
private void OneOut_Click(object sender, RoutedEventArgs e)
{
try
@ -2415,6 +2504,11 @@ namespace Khd.Core.Wpf.Form
var lineSignalValue = SystemData.PlcDic[0].Read(lineSignal.plcpointAddress);
if (lineSignalValue != null && Convert.ToInt32(lineSignalValue) == 0)
{
if (!ReadEmptyLocation())
{
MessageBox.Show("有任务正在执行");
return;
}
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
BaseEquip baseEquip = dbContext.BaseEquip.First(t => t.objid == 40);
@ -2460,6 +2554,11 @@ namespace Khd.Core.Wpf.Form
emptyCount.ShowDialog();
if (EmptyCountForm.IsSelect)
{
if (!ReadEmptyLocation())
{
MessageBox.Show("有任务正在执行");
return;
}
int emptyTaskCount = EmptyCountForm.EmptyTaskCount;
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
@ -2499,6 +2598,11 @@ namespace Khd.Core.Wpf.Form
{
try
{
if (!ReadEmptyLocation())
{
MessageBox.Show("有任务正在执行");
return;
}
BasePlcpoint lineSignal = SystemData.BasePlcpoints.First(t => t.plcpointNo == "linesignal01");
var lineSignalValue = SystemData.PlcDic[0].Read(lineSignal.plcpointAddress);
if (lineSignalValue != null && Convert.ToInt32(lineSignalValue) == 0)
@ -2543,7 +2647,7 @@ namespace Khd.Core.Wpf.Form
{
try
{
lock (updateLock)
//lock (updateLock)
{
EmptyCountForm emptyCountForm = new EmptyCountForm(0, 10);
emptyCountForm.ShowDialog();

Loading…
Cancel
Save