master
1 year ago
parent 18f4c0a8a1
commit 61f33b95e7

@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Khd.Core.Domain.Dto
{
public class LocationPlcDto
{
public int Id { get; set; }
public string Station { get; set; }
public string Address { get; set; }
public string locRow { get; set; }
public string locColumn { get; set; }
public string layerNum { get; set; }
}
}

@ -1,5 +1,6 @@
//using CMS.Model;
using Jc.SnowId;
using Khd.Core.Domain.Dto;
using Khd.Core.Domain.Models;
namespace Khd.Core.Wcs.Global
@ -65,6 +66,7 @@ namespace Khd.Core.Wcs.Global
public static List<PlcConfig> PlcConfigs { get; set; }
public static int DeleteLogDay { get; internal set; }
public static List<DmsBaseAlarmRule> DmsBaseAlarmRuleList { get; set; }
public static IEnumerable<LocationPlcDto> LocationToPlcList { get; internal set; }
public static List<string> BigContainerCodes = new List<string>() { "JYHB01020001", "JYHB01020002", "JYHB01020003", "JYHB01020004" };

@ -138,7 +138,7 @@ namespace Khd.Core.Wcs
{
}
}
@ -149,17 +149,56 @@ namespace Khd.Core.Wcs
var alarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.AlarmRuleId == (long)WaringType).FirstOrDefault();
if (alarmTime != null)
{
dbContext.Remove(alarmTime);
dbContext.DmsRecordAlarmTime.Where(t=>t.AlarmId==alarmTime.AlarmId).Delete();
dbContext.DmsRecordAlarmInfo.Where(t => t.AlarmId == alarmTime.AlarmId)
.Update(t => new DmsRecordAlarmInfo() { AlarmStatus = "2" });
dbContext.SaveChanges();
}
}
catch
{
}
}
public static void SendPlcLocation(WmsBaseLocation wmsBaseLocation)
{
Task.Run(() =>
{
try
{
var locationPlcDto = StaticData.LocationToPlcList.Where(t => t.Id == wmsBaseLocation.locationId).FirstOrDefault();
if (locationPlcDto != null)
{
if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode))
{
if (wmsBaseLocation.warehouseId == 512)
{
if (wmsBaseLocation.ContainerStatus == "1")
{
StaticData.PlcDic[2].Write(locationPlcDto.Address, true);
}
else
{
StaticData.PlcDic[2].Write(locationPlcDto.Address, false);
}
}
else
{
StaticData.PlcDic[2].Write(locationPlcDto.Address, true);
}
}
else
{
StaticData.PlcDic[2].Write(locationPlcDto.Address, false);
}
}
}
catch
{
}
});
}
public readonly static object SecondTaskLock = new();

@ -741,7 +741,6 @@ namespace Khd.Core.Wcs.Wcs
transaction.Commit();
}
}
SystemData.DeleteWaringLog(dbContext, WaringType.);
break;
}
else
@ -760,6 +759,7 @@ namespace Khd.Core.Wcs.Wcs
continue;
}
}
SystemData.DeleteWaringLog(dbContext, WaringType.);
}
catch (Exception ex)
{

@ -509,6 +509,8 @@ namespace Khd.Core.Wcs.Wcs
dbContext.SaveChanges();
dbContextTransaction.Commit();
SystemData.SendPlcLocation(wmsBaseLocation);
SystemData.SendPlcLocation(toLocation);
}
catch (Exception ex)
{
@ -527,10 +529,10 @@ namespace Khd.Core.Wcs.Wcs
{
Console.WriteLine(DateTime.Now + ":五楼AGV线程完成任务" + item.currPointNo + "," + item.endPointNo);
_logger.Info("五楼Agv完成任务成功" + item.ToJsonString());
var wmsProductOutstock = dbContext.WmsProductOutstock.FirstOrDefault(t => t.productOutstockId == item.orderId);
if ( wmsProductOutstock != null)
if (wmsProductOutstock != null)
{
var wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locationId == item.currPointId).First();
WmsProductStock wmsProductStock = dbContext.WmsProductStock.First(t => t.locationCode == wmsBaseLocation.locationCode);
@ -557,8 +559,8 @@ namespace Khd.Core.Wcs.Wcs
newWmsProductOutstockDetail.updateDate = DateTime.Now;
newWmsProductOutstockDetail.beginTime = DateTime.Now;
newWmsProductOutstockDetail.endTime = DateTime.Now;
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null;
@ -585,6 +587,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
SystemData.SendPlcLocation(wmsBaseLocation);
}
}
else if (item.taskType == StaticTaskType.FiveRawToBack)//原材料到背板安装
@ -594,26 +597,26 @@ namespace Khd.Core.Wcs.Wcs
WmsRawOutstock? wmsRawOutstock = dbContext.WmsRawOutstock.Where(t => t.rawOutstockId == item.orderId).FirstOrDefault();
if (wmsRawOutstock != null)
{
wmsRawOutstock.realOutstockAmount += 1;
wmsRawOutstock.executeStatus = "2";
wmsRawOutstock.endTime = DateTime.Now;
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
wmsBaseLocation.returnFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
dbContext.Update(wmsRawOutstock);
dbContext.Update(wmsBaseLocation);
dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete();
dbContext.WcsTask.Remove(item);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
wmsRawOutstock.realOutstockAmount += 1;
wmsRawOutstock.executeStatus = "2";
wmsRawOutstock.endTime = DateTime.Now;
WmsBaseLocation wmsBaseLocation = dbContext.WmsBaseLocation.First(t => t.locationId == item.currPointId);
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
wmsBaseLocation.returnFlag = "0";
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null;
wmsBaseLocation.updateTime = DateTime.Now;
wmsBaseLocation.updateBy = "WCS";
dbContext.Update(wmsRawOutstock);
dbContext.Update(wmsBaseLocation);
dbContext.WmsRawStock.Where(t => t.locationCode == wmsBaseLocation.locationCode).Delete();
dbContext.WcsTask.Remove(item);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
SystemData.SendPlcLocation(wmsBaseLocation);
}
}
else if (item.taskType == StaticTaskType.FiveHalfIn)//半成品入库
@ -674,7 +677,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.SaveChanges();
//}
SystemData.SendPlcLocation(wmsBaseLocation);
}
}
else if (item.taskType == StaticTaskType.FiveRawToSplit)//原材料到柜体拆分
@ -719,7 +722,7 @@ namespace Khd.Core.Wcs.Wcs
newWmsRawOutstockDetail.createDate = DateTime.Now;
newWmsRawOutstockDetail.stackAmount = 1;
wmsBaseLocation.locationStatus = "1";
wmsBaseLocation.containerCode = null;
@ -733,7 +736,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
SystemData.SendPlcLocation(wmsBaseLocation);
}
}
else if (item.taskType == StaticTaskType.FiveRawSplitReturn)//柜体拆分到原材料
@ -781,7 +784,7 @@ namespace Khd.Core.Wcs.Wcs
WmsRawInstock.returnFlag = null;
WmsRawInstock.executeStatus = "2";
WmsRawInstock.updateDate = DateTime.Now;
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
dbContext.Update(WmsRawInstock);
dbContext.Add(wmsRawStock);
@ -792,6 +795,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
SystemData.SendPlcLocation(wmsBaseLocation);
}
}
@ -809,12 +813,12 @@ namespace Khd.Core.Wcs.Wcs
var mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode);
if (mesBaseBarcodeInfo != null)
{
if (mesBaseBarcodeInfo.PurchaseOrderId == -1)
{ // 虚拟托盘号,合并的物料分别插入WmsRawInstock
List<MesSaleOrderRelate> mesSaleOrderRelates = dbContext.MesSaleOrderRelate.Where(x => x.SaleOrderId == mesBaseBarcodeInfo.saleOrderId).ToList();
List<WmsRawInstock>? wmsRawInstocks = new List<WmsRawInstock>();
foreach(var mesSaleOrderRelate in mesSaleOrderRelates)
foreach (var mesSaleOrderRelate in mesSaleOrderRelates)
{
WmsRawInstock wmsRawInstock = new WmsRawInstock()
{
@ -837,9 +841,9 @@ namespace Khd.Core.Wcs.Wcs
poNo = mesBaseBarcodeInfo.poNo,
warehouseId = 511
};
wmsRawInstocks.Add(wmsRawInstock);
wmsRawInstocks.Add(wmsRawInstock);
}
if(wmsRawInstocks.Count > 0)
if (wmsRawInstocks.Count > 0)
{
dbContext.WmsRawInstock.AddRange(wmsRawInstocks);
}
@ -897,7 +901,7 @@ namespace Khd.Core.Wcs.Wcs
warehouseId = 511,
};
SystemData.UnLockOutLocation(wmsBaseLocation, dbContext);
wmsBaseLocation.returnFlag = "0";
BaseEquip lineEquip = dbContext.BaseEquip.First(t => t.objid == 5);
lineEquip.equipStatus = 0;
@ -907,6 +911,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Remove(item);
dbContext.SaveChanges();
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
SystemData.SendPlcLocation(wmsBaseLocation);
}
}
}

@ -193,6 +193,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
StaticData.PlcDic[1].WriteToPoint(CtuLineWaring.plcpointAddress, false, CtuLineWaring.plcpointLength.ToString());
SystemData.SendPlcLocation(wmsBaseLocation);
}
}
}
@ -244,6 +245,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Add(wcsTaskLog);
dbContext.SaveChanges();
StaticData.PlcDic[1].WriteToPoint(CtuLineWaring.plcpointAddress, false, CtuLineWaring.plcpointLength.ToString());
SystemData.SendPlcLocation(wmsBaseLocation);
}
}
}

@ -746,6 +746,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.SaveChanges();
_logger.Info("二楼AGV线程完成任务" + item.objid);
SystemData.SendPlcLocation(wmsBaseLocation);
}
// }
//}
@ -796,7 +797,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog() { taskStatus = 8 });
dbContext.SaveChanges();
_logger.Info("二楼AGV线程完成任务" + item.objid);
SystemData.SendPlcLocation(wmsBaseLocation);
}
}
else if (item.taskType == StaticTaskType.SecondLiftToTransit)//空托盘入周转位
@ -933,6 +934,9 @@ namespace Khd.Core.Wcs.Wcs
transaction.Commit();
dbContext.SaveChanges();
SystemData.SendPlcLocation(wmsBaseLocation);
SystemData.SendPlcLocation(toLocation);
_logger.Info("二楼AGV线程完成任务" + item.objid);
}
catch (Exception ex)

@ -1,4 +1,5 @@
using AngleSharp.Common;
using Khd.Core.Domain.Dto;
using Khd.Core.Domain.Dto.waring;
using Khd.Core.Domain.Dto.webapi;
using Khd.Core.Domain.Models;
@ -92,19 +93,19 @@ namespace Khd.Core.Wcs.Wcs
using var scope = host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<BasePlc> basePlcs = dbContext.BasePlc.Where(t => t.Station.Contains("库位")).ToList();
var list = basePlcs.Select(t => new
StaticData.LocationToPlcList = basePlcs.Select(t => new
{
t.Id,
Station = t.Station.Replace("库位", ""),
t.Address,
locRow = t.Name.Substring(t.Name.IndexOf('[') + 1, 1),
locColumn = t.Name.Substring(t.Name.IndexOf(',') + 1).Replace("]", "").Replace("五楼半成品[", ""),
}).Select(t => new
}).Select(t => new LocationPlcDto
{
t.Id,
t.Station,
t.Address,
t.locRow,
Id= t.Id,
Station= t.Station,
Address= t.Address,
locRow= t.locRow,
locColumn = t.locColumn.Substring(0, t.locColumn.IndexOf(',') == -1 ? t.locColumn.Length : t.locColumn.IndexOf(',')),
layerNum = t.locColumn.IndexOf(',') == -1 ? "1" : t.locColumn.Substring(t.locColumn.IndexOf(',') == -1 ? 0 : t.locColumn.IndexOf(',') + 1)
});
@ -114,7 +115,7 @@ namespace Khd.Core.Wcs.Wcs
try
{
var locations = dbContext.WmsBaseLocation.OrderBy(t => t.locRow).OrderBy(t => t.locColumn).ToList();
foreach (var item in list)
foreach (var item in StaticData.LocationToPlcList)
{
WmsBaseLocation? wmsBaseLocation = locations.Where(t => t.locRow.ToString() == item.locRow)
.Where(t => t.locColumn.ToString() == item.locColumn)
@ -369,7 +370,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
if (errorCount > 20)
if (errorCount > 3)
{
_logger.Error($"Plc220短线重连失败超过{errorCount}次");
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
@ -396,25 +397,9 @@ namespace Khd.Core.Wcs.Wcs
//}
}
StaticData.PlcDic[2].Read(HeartBeat30.plcpointAddress);
if (errorCount > 0 && isOver)
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
SystemData.DeleteWaringLog(dbContext, WaringType.Plc);
//var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 15).FirstOrDefault();
//if (dmsRecordAlarmTime != null)
//{
// dbContext.DmsRecordAlarmTime.Remove(dmsRecordAlarmTime);
// dbContext.DmsRecordAlarmInfo.Where(t => t.AlarmId == dmsRecordAlarmTime.AlarmId).Update(t => new DmsRecordAlarmInfo
// {
// AlarmEndTime = DateTime.Now,
// AlarmStatus = "1",
// UpdateBy = "WCS",
// UpdateTime = DateTime.Now
// });
// dbContext.SaveChanges();
// errorCount = 0;
//}
}
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
SystemData.DeleteWaringLog(dbContext, WaringType.Plc);
}
catch
{
@ -450,7 +435,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
if (errorCount > 20)
if (errorCount > 3)
{
_logger.Error($"Plc30短线重连失败超过{errorCount}次");
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
@ -479,25 +464,8 @@ namespace Khd.Core.Wcs.Wcs
}
heartBeatCount = !heartBeatCount;
StaticData.PlcDic[0].WriteToPoint(HeartBeat30.plcpointAddress, heartBeatCount, HeartBeat30.plcpointLength?.ToString());
if (errorCount > 0 && isOver)
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
SystemData.DeleteWaringLog(dbContext, WaringType.Plc);
//var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 13).FirstOrDefault();
//if (dmsRecordAlarmTime != null)
//{
// dbContext.DmsRecordAlarmTime.Remove(dmsRecordAlarmTime);
// dbContext.DmsRecordAlarmInfo.Where(t => t.AlarmId == dmsRecordAlarmTime.AlarmId).Update(t => new DmsRecordAlarmInfo
// {
// AlarmEndTime = DateTime.Now,
// AlarmStatus = "1",
// UpdateBy = "WCS",
// UpdateTime = DateTime.Now
// });
// dbContext.SaveChanges();
// errorCount = 0;
//}
}
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
SystemData.DeleteWaringLog(dbContext, WaringType.Plc);
}
catch
{
@ -533,7 +501,7 @@ namespace Khd.Core.Wcs.Wcs
{
try
{
if (errorCount > 20)
if (errorCount > 3)
{
_logger.Error($"Plc31短线重连失败超过{errorCount}次");
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
@ -561,25 +529,8 @@ namespace Khd.Core.Wcs.Wcs
}
heartBeatCount = !heartBeatCount;
StaticData.PlcDic[1].WriteToPoint(HeartBeat31.plcpointAddress, heartBeatCount, HeartBeat31.plcpointLength?.ToString());
if (errorCount > 0 && isOver)
{
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
SystemData.DeleteWaringLog(dbContext, WaringType.U线Plc);
//var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 14).FirstOrDefault();
//if (dmsRecordAlarmTime != null)
//{
// dbContext.DmsRecordAlarmTime.Remove(dmsRecordAlarmTime);
// dbContext.DmsRecordAlarmInfo.Where(t => t.AlarmId == dmsRecordAlarmTime.AlarmId).Update(t => new DmsRecordAlarmInfo
// {
// AlarmEndTime = DateTime.Now,
// AlarmStatus = "1",
// UpdateBy = "WCS",
// UpdateTime = DateTime.Now
// });
// dbContext.SaveChanges();
// errorCount = 0;
//}
}
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
SystemData.DeleteWaringLog(dbContext, WaringType.U线Plc);
}
catch (Exception ex)
{

@ -645,6 +645,9 @@ namespace Khd.Core.Wcs.Wcs
dbContext.SaveChanges();
transaction.Commit();
SystemData.SendPlcLocation(wmsBaseLocation);
SystemData.SendPlcLocation(toLocation);
}
catch (Exception ex)
{
@ -725,6 +728,8 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.SaveChanges();
SystemData.SendPlcLocation(wmsBaseLocation);
}
}
}
@ -812,6 +817,8 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Add(wcsTask);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.SaveChanges();
SystemData.SendPlcLocation(wmsBaseLocation);
}
}
@ -850,6 +857,7 @@ namespace Khd.Core.Wcs.Wcs
dbContext.Remove(item);
dbContext.WcsTaskLog.Where(t => t.objid == item.objid).Update(t => new WcsTaskLog { taskStatus = 6 });
dbContext.SaveChanges();
}
}
else if (item.taskType == StaticTaskType.ThirdBinToTransit)//收集架-周转区

@ -161,7 +161,6 @@ namespace Khd.Core.Wcs.Wcs
if (wmsBaseLocation != null)
{
dbContext.Remove(wcsTask);
WcsTask newTask = CoreMapper.Map<WcsTask>(wcsTask);
newTask.objid = StaticData.SnowId.NextId();

@ -15,14 +15,14 @@
// "Slot": 1,
// "Code": 0
//}, //
{
"IP": "192.168.2.31",
"Port": 102, //102
"CpuType": 40,
"Rack": 0,
"Slot": 1,
"Code": 1
}, //U线
//{
// "IP": "192.168.2.31",
// "Port": 102, //102
// "CpuType": 40,
// "Rack": 0,
// "Slot": 1,
// "Code": 1
//}, //U线
{
"IP": "192.168.2.220",
"Port": 102, //102

Loading…
Cancel
Save