|
|
|
|
@ -2,13 +2,14 @@
|
|
|
|
|
using Khd.Core.Domain.Models;
|
|
|
|
|
using Khd.Core.EntityFramework;
|
|
|
|
|
using Khd.Core.Library;
|
|
|
|
|
using Khd.Core.Library.Mapper;
|
|
|
|
|
using Khd.Core.Plc.S7;
|
|
|
|
|
using Khd.Core.Wcs.Global;
|
|
|
|
|
using Masuit.Tools;
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
using Microsoft.Extensions.Hosting;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using Khd.Core.Domain.Dto.TaskType;
|
|
|
|
|
using Z.EntityFramework.Plus;
|
|
|
|
|
|
|
|
|
|
namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
{
|
|
|
|
|
@ -75,19 +76,83 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
Console.WriteLine($"{DateTime.Now}: SystemTimer started");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void AgvAlarmLogic(object? obj)
|
|
|
|
|
private void AgvAlarmLogic()
|
|
|
|
|
{
|
|
|
|
|
using var scope = host.Services.CreateScope();
|
|
|
|
|
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
using var transaction = dbContext.Database.BeginTransaction();
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
|
|
|
|
|
var dmsBaseDeviceLedgers = dbContext.DmsBaseDeviceLedger.ToList();
|
|
|
|
|
var wcsAgvStatuses = dbContext.WcsAgvStatus.ToList();
|
|
|
|
|
var agvStatus = from a in dmsBaseDeviceLedgers
|
|
|
|
|
from b in wcsAgvStatuses
|
|
|
|
|
where a.DeviceCode == b.RobotCode
|
|
|
|
|
select new
|
|
|
|
|
{
|
|
|
|
|
a.DeviceId,
|
|
|
|
|
b.Online,
|
|
|
|
|
b.Status
|
|
|
|
|
};
|
|
|
|
|
foreach (var item in agvStatus)
|
|
|
|
|
{
|
|
|
|
|
var dmsBaseAlarmRule = StaticData.DmsBaseAlarmRuleList.Where(t => t.Status == item.Status).FirstOrDefault();
|
|
|
|
|
if (dmsBaseAlarmRule != null)
|
|
|
|
|
{
|
|
|
|
|
DmsRecordAlarmTime alarmTime = new DmsRecordAlarmTime
|
|
|
|
|
{
|
|
|
|
|
AlarmBeginTime = DateTime.Now,
|
|
|
|
|
AlarmReason = dmsBaseAlarmRule.AlarmReason,
|
|
|
|
|
HandleSuggest = dmsBaseAlarmRule.HandleSuggest,
|
|
|
|
|
AlarmRuleId = dmsBaseAlarmRule.AlarmRuleId,
|
|
|
|
|
ContinueTime = dmsBaseAlarmRule.ContinueTime,
|
|
|
|
|
CreateBy = "WCS",
|
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
|
DeviceId = item.DeviceId,
|
|
|
|
|
};
|
|
|
|
|
var dmsRecordAlarmInfo = CoreMapper.Map<DmsRecordAlarmInfo>(alarmTime);
|
|
|
|
|
dmsRecordAlarmInfo.AlarmStatus = "0";
|
|
|
|
|
dmsRecordAlarmInfo.NoticeStatus = "0";
|
|
|
|
|
dbContext.Add(dmsRecordAlarmInfo);
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
transaction.Commit();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
var alarmTime = dbContext.DmsRecordAlarmTime
|
|
|
|
|
.Where(t => t.CreateBy == "WCS")
|
|
|
|
|
.Where(t => t.DeviceId == item.DeviceId)
|
|
|
|
|
.FirstOrDefault();
|
|
|
|
|
if (alarmTime != null)
|
|
|
|
|
{
|
|
|
|
|
dbContext.Remove(alarmTime);
|
|
|
|
|
dbContext.DmsRecordAlarmInfo
|
|
|
|
|
.Where(t => t.AlarmId == alarmTime.AlarmId)
|
|
|
|
|
.Update(t => new DmsRecordAlarmInfo
|
|
|
|
|
{
|
|
|
|
|
AlarmEndTime = DateTime.Now,
|
|
|
|
|
UpdateBy = "WCS",
|
|
|
|
|
UpdateTime = DateTime.Now
|
|
|
|
|
});
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
transaction.Commit();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
transaction.Rollback();
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Thread.Sleep(3000);
|
|
|
|
|
}
|
|
|
|
|
@ -217,14 +282,58 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void PlcHearBeat220Logic()
|
|
|
|
|
{
|
|
|
|
|
using var scope = host.Services.CreateScope();
|
|
|
|
|
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
|
|
|
|
|
BasePlcpoint HeartBeat30 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "putTray");
|
|
|
|
|
int errorCount = 0;
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (errorCount > 20)
|
|
|
|
|
{
|
|
|
|
|
_logger.Error($"Plc220短线重连失败超过{errorCount}次");
|
|
|
|
|
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
|
|
|
|
|
var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 15).FirstOrDefault();
|
|
|
|
|
if (dmsRecordAlarmTime == null)
|
|
|
|
|
{
|
|
|
|
|
var alarmTime = new DmsRecordAlarmTime
|
|
|
|
|
{
|
|
|
|
|
DeviceId = 15,
|
|
|
|
|
AlarmBeginTime = DateTime.Now,
|
|
|
|
|
AlarmReason = "Plc220短线重连失败",
|
|
|
|
|
HandleSuggest = "检查Plc220网络连接",
|
|
|
|
|
AlarmRuleId = 4,
|
|
|
|
|
ContinueTime = 10000,
|
|
|
|
|
CreateBy = "WCS",
|
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
|
};
|
|
|
|
|
var dmsRecordAlarmInfo = CoreMapper.Map<DmsRecordAlarmInfo>(alarmTime);
|
|
|
|
|
dmsRecordAlarmInfo.AlarmStatus = "0";
|
|
|
|
|
dmsRecordAlarmInfo.NoticeStatus = "0";
|
|
|
|
|
dbContext.Add(dmsRecordAlarmInfo);
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
StaticData.PlcDic[2].Read(HeartBeat30.plcpointAddress);
|
|
|
|
|
errorCount = 0;
|
|
|
|
|
if (errorCount > 0)
|
|
|
|
|
{
|
|
|
|
|
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
@ -248,6 +357,8 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void PlcHeartBeat30Logic()
|
|
|
|
|
{
|
|
|
|
|
using var scope = host.Services.CreateScope();
|
|
|
|
|
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
|
|
|
|
|
BasePlcpoint HeartBeat30 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "HeartBeat30");
|
|
|
|
|
bool heartBeatCount = false;
|
|
|
|
|
int errorCount = 0;
|
|
|
|
|
@ -255,9 +366,51 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (errorCount > 20)
|
|
|
|
|
{
|
|
|
|
|
_logger.Error($"Plc30短线重连失败超过{errorCount}次");
|
|
|
|
|
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
|
|
|
|
|
var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 13).FirstOrDefault();
|
|
|
|
|
if (dmsRecordAlarmTime == null)
|
|
|
|
|
{
|
|
|
|
|
var alarmTime = new DmsRecordAlarmTime
|
|
|
|
|
{
|
|
|
|
|
DeviceId = 13,
|
|
|
|
|
AlarmBeginTime = DateTime.Now,
|
|
|
|
|
AlarmReason = "Plc30短线重连失败",
|
|
|
|
|
HandleSuggest = "检查Plc30网络连接",
|
|
|
|
|
AlarmRuleId = 4,
|
|
|
|
|
ContinueTime = 10000,
|
|
|
|
|
CreateBy = "WCS",
|
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
|
};
|
|
|
|
|
var dmsRecordAlarmInfo = CoreMapper.Map<DmsRecordAlarmInfo>(alarmTime);
|
|
|
|
|
dmsRecordAlarmInfo.AlarmStatus = "0";
|
|
|
|
|
dmsRecordAlarmInfo.NoticeStatus = "0";
|
|
|
|
|
dbContext.Add(dmsRecordAlarmInfo);
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
heartBeatCount = !heartBeatCount;
|
|
|
|
|
StaticData.PlcDic[0].WriteToPoint(HeartBeat30.plcpointAddress, heartBeatCount, HeartBeat30.plcpointLength?.ToString());
|
|
|
|
|
errorCount = 0;
|
|
|
|
|
if (errorCount > 0)
|
|
|
|
|
{
|
|
|
|
|
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
@ -281,6 +434,8 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void PlcHeartBeat31Logic()
|
|
|
|
|
{
|
|
|
|
|
using var scope = host.Services.CreateScope();
|
|
|
|
|
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
|
|
|
|
|
BasePlcpoint HeartBeat31 = StaticData.BasePlcpointList.First(t => t.plcpointNo == "CTUHeart");
|
|
|
|
|
bool heartBeatCount = false;
|
|
|
|
|
int errorCount = 0;
|
|
|
|
|
@ -288,9 +443,51 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (errorCount > 20)
|
|
|
|
|
{
|
|
|
|
|
_logger.Error($"Plc31短线重连失败超过{errorCount}次");
|
|
|
|
|
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
|
|
|
|
|
var dmsRecordAlarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.CreateBy == "WCS" && t.DeviceId == 14).FirstOrDefault();
|
|
|
|
|
if (dmsRecordAlarmTime == null)
|
|
|
|
|
{
|
|
|
|
|
var alarmTime = new DmsRecordAlarmTime
|
|
|
|
|
{
|
|
|
|
|
DeviceId = 14,
|
|
|
|
|
AlarmBeginTime = DateTime.Now,
|
|
|
|
|
AlarmReason = "Plc31短线重连失败",
|
|
|
|
|
HandleSuggest = "检查Plc31网络连接",
|
|
|
|
|
AlarmRuleId = 4,
|
|
|
|
|
ContinueTime = 10000,
|
|
|
|
|
CreateBy = "WCS",
|
|
|
|
|
CreateTime = DateTime.Now,
|
|
|
|
|
};
|
|
|
|
|
var dmsRecordAlarmInfo = CoreMapper.Map<DmsRecordAlarmInfo>(alarmTime);
|
|
|
|
|
dmsRecordAlarmInfo.AlarmStatus = "0";
|
|
|
|
|
dmsRecordAlarmInfo.NoticeStatus = "0";
|
|
|
|
|
dbContext.Add(dmsRecordAlarmInfo);
|
|
|
|
|
dbContext.SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
heartBeatCount = !heartBeatCount;
|
|
|
|
|
StaticData.PlcDic[1].WriteToPoint(HeartBeat31.plcpointAddress, heartBeatCount, HeartBeat31.plcpointLength?.ToString());
|
|
|
|
|
errorCount = 0;
|
|
|
|
|
if (errorCount > 0)
|
|
|
|
|
{
|
|
|
|
|
dbContext.ChangeTracker.Entries().ToList().ForEach(e => e.Reload());
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
|