|
|
|
|
@ -102,10 +102,10 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
locColumn = t.Name.Substring(t.Name.IndexOf(',') + 1).Replace("]", "").Replace("五楼半成品[", ""),
|
|
|
|
|
}).Select(t => new LocationPlcDto
|
|
|
|
|
{
|
|
|
|
|
Id= t.Id,
|
|
|
|
|
Station= t.Station,
|
|
|
|
|
Address= t.Address,
|
|
|
|
|
locRow= 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)
|
|
|
|
|
});
|
|
|
|
|
@ -399,7 +399,7 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
StaticData.PlcDic[2].Read(HeartBeat30.plcpointAddress);
|
|
|
|
|
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
|
|
|
|
|
SystemData.DeleteWaringLog(dbContext, WaringType.设备Plc通讯异常);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
@ -608,10 +608,96 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
CtuCmdLogic();
|
|
|
|
|
UpdatePlcPointValue();
|
|
|
|
|
BasePlcPointUpdateLogic();
|
|
|
|
|
AgvWaringLogic();
|
|
|
|
|
Thread.Sleep(500);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void AgvWaringLogic()
|
|
|
|
|
{
|
|
|
|
|
using var scope = host.Services.CreateScope();
|
|
|
|
|
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
dbContext.Database.BeginTransaction();
|
|
|
|
|
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
|
|
|
|
|
var dmsBaseAlarmRules = StaticData.DmsBaseAlarmRuleList.Where(t => t.DeviceId == -1).ToList();
|
|
|
|
|
var wcsAgvStatuses = dbContext.WcsAgvStatus.ToList();
|
|
|
|
|
var robotCodes = wcsAgvStatuses.Select(t => long.Parse(t.RobotCode)).ToList();
|
|
|
|
|
var dmsRecordAlarmTimes = dbContext.DmsRecordAlarmTime.Where(t => robotCodes.Contains(t.DeviceId)).ToList();
|
|
|
|
|
foreach (var agvStatus in wcsAgvStatuses)
|
|
|
|
|
{
|
|
|
|
|
var dmsBaseAlarmRule = dmsBaseAlarmRules.Where(t => t.Status.ToString() == agvStatus.Status).FirstOrDefault();
|
|
|
|
|
var dmsRecordAlarmTime = dmsRecordAlarmTimes
|
|
|
|
|
.Where(t => t.DeviceId == int.Parse(agvStatus.RobotCode)).FirstOrDefault();
|
|
|
|
|
if (dmsBaseAlarmRule != null)
|
|
|
|
|
{
|
|
|
|
|
if (dmsRecordAlarmTime == null)
|
|
|
|
|
{
|
|
|
|
|
dmsRecordAlarmTime=new DmsRecordAlarmTime
|
|
|
|
|
{
|
|
|
|
|
DeviceId = int.Parse(agvStatus.RobotCode),
|
|
|
|
|
AlarmBeginTime = DateTime.Now,
|
|
|
|
|
AlarmReason = dmsBaseAlarmRule.AlarmReason,
|
|
|
|
|
HandleSuggest = dmsBaseAlarmRule.HandleSuggest,
|
|
|
|
|
AlarmRuleId = dmsBaseAlarmRule.AlarmRuleId,
|
|
|
|
|
ContinueTime = dmsBaseAlarmRule.ContinueTime,
|
|
|
|
|
CreateBy = "WCS",
|
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
|
};
|
|
|
|
|
var dmsRecordAlarmInfo = CoreMapper.Map<DmsRecordAlarmInfo>(dmsRecordAlarmTime);
|
|
|
|
|
dmsRecordAlarmInfo.NoticeStatus = "0";
|
|
|
|
|
dmsRecordAlarmInfo.AlarmStatus = "0";
|
|
|
|
|
dbContext.Add(dmsRecordAlarmInfo);
|
|
|
|
|
dbContext.Add(dmsRecordAlarmTime);
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (dmsRecordAlarmTime.AlarmReason != dmsBaseAlarmRule.AlarmReason)
|
|
|
|
|
{
|
|
|
|
|
dbContext.Remove(dmsRecordAlarmTime);
|
|
|
|
|
dbContext.DmsRecordAlarmInfo.Where(t => t.AlarmId == dmsRecordAlarmTime.AlarmId)
|
|
|
|
|
.Update(t => new DmsRecordAlarmInfo { AlarmStatus = "2", AlarmEndTime = DateTime.Now });
|
|
|
|
|
var newDmsRecordAlarmTime = new DmsRecordAlarmTime
|
|
|
|
|
{
|
|
|
|
|
DeviceId = int.Parse(agvStatus.RobotCode),
|
|
|
|
|
AlarmBeginTime = DateTime.Now,
|
|
|
|
|
AlarmReason = dmsBaseAlarmRule.AlarmReason,
|
|
|
|
|
HandleSuggest = dmsBaseAlarmRule.HandleSuggest,
|
|
|
|
|
AlarmRuleId = dmsBaseAlarmRule.AlarmRuleId,
|
|
|
|
|
ContinueTime = dmsBaseAlarmRule.ContinueTime,
|
|
|
|
|
CreateBy = "WCS",
|
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
|
};
|
|
|
|
|
var dmsRecordAlarmInfo = CoreMapper.Map<DmsRecordAlarmInfo>(newDmsRecordAlarmTime);
|
|
|
|
|
dmsRecordAlarmInfo.NoticeStatus = "0";
|
|
|
|
|
dmsRecordAlarmInfo.AlarmStatus = "0";
|
|
|
|
|
dbContext.Add(dmsRecordAlarmInfo);
|
|
|
|
|
dbContext.Add(newDmsRecordAlarmTime);
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (dmsRecordAlarmTime != null)
|
|
|
|
|
{
|
|
|
|
|
dbContext.Remove(dmsRecordAlarmTime);
|
|
|
|
|
dbContext.DmsRecordAlarmInfo.Where(t => t.AlarmId == dmsRecordAlarmTime.AlarmId)
|
|
|
|
|
.Update(t => new DmsRecordAlarmInfo { AlarmStatus = "2", AlarmEndTime = DateTime.Now });
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
dbContext.Database.CommitTransaction();
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
dbContext.Database.RollbackTransaction();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 五楼AGV状态
|
|
|
|
|
/// </summary>
|
|
|
|
|
@ -778,9 +864,16 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
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'));
|
|
|
|
|
var status = basePlcs.First(t => t.Name.Contains("Status")); if (cardStatus.Online.ToLower() == "true")
|
|
|
|
|
{
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(status.Address, cardStatus.Status, status.type);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(status.Address, -1, status.type);
|
|
|
|
|
}
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
|
|
|
|
|
|
|
|
|
|
#region 经过走廊区域报警
|
|
|
|
|
var Agv3FLED = StaticData.BasePlcpointList.First(t => t.id == 76);
|
|
|
|
|
if (Agv3FLED != null)
|
|
|
|
|
@ -835,6 +928,15 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
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'));
|
|
|
|
|
var status = basePlcs.First(t => t.Name.Contains("Status"));
|
|
|
|
|
if (cardStatus.Online.ToLower() == "true")
|
|
|
|
|
{
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(status.Address, cardStatus.Status, status.type);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(status.Address, -1, status.type);
|
|
|
|
|
}
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
|
|
|
|
|
|
|
|
|
|
@ -915,6 +1017,15 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
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'));
|
|
|
|
|
var status = basePlcs.First(t => t.Name.Contains("Status"));
|
|
|
|
|
if(cardStatus.Online.ToLower()== "true")
|
|
|
|
|
{
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(status.Address, cardStatus.Status, status.type);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(status.Address, -1, status.type);
|
|
|
|
|
}
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
|
|
|
|
|
|
|
|
|
|
@ -925,6 +1036,15 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
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'));
|
|
|
|
|
status = basePlcs.First(t => t.Name.Contains("Status"));
|
|
|
|
|
if (cardStatus.Online.ToLower() == "true")
|
|
|
|
|
{
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(status.Address, cardStatus.Status, status.type);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(status.Address, -1, status.type);
|
|
|
|
|
}
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
|
|
|
|
|
|
|
|
|
|
@ -935,6 +1055,15 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
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"));
|
|
|
|
|
status = basePlcs.First(t => t.Name.Contains("Status"));
|
|
|
|
|
if (cardStatus.Online.ToLower() == "true")
|
|
|
|
|
{
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(status.Address, cardStatus.Status, status.type);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(status.Address, -1, status.type);
|
|
|
|
|
}
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(XPlc.Address, cardStatus.PosX.ToString(), XPlc.type);
|
|
|
|
|
StaticData.PlcDic[2].WriteToPoint(Ylc.Address, cardStatus.PosY.ToString(), Ylc.type);
|
|
|
|
|
}
|
|
|
|
|
|