|
|
|
|
@ -2,19 +2,20 @@
|
|
|
|
|
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
|
|
|
|
|
{
|
|
|
|
|
public class SystemTimer
|
|
|
|
|
{
|
|
|
|
|
private readonly LoggerUtils _logger = new ();
|
|
|
|
|
private readonly LoggerUtils _logger = new();
|
|
|
|
|
private readonly IHost host;
|
|
|
|
|
|
|
|
|
|
public SystemTimer(IHost host)
|
|
|
|
|
@ -65,9 +66,98 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
IsBackground = true
|
|
|
|
|
};
|
|
|
|
|
deleteLogsThread.Start();
|
|
|
|
|
|
|
|
|
|
//var AgvAlarmThread = new Thread(AgvAlarmLogic)
|
|
|
|
|
//{
|
|
|
|
|
// Name = "AgvAlarmThread",
|
|
|
|
|
// IsBackground = true
|
|
|
|
|
//};
|
|
|
|
|
//AgvAlarmThread.Start();
|
|
|
|
|
Console.WriteLine($"{DateTime.Now}: SystemTimer started");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 定时清除日志文件
|
|
|
|
|
/// </summary>
|
|
|
|
|
@ -192,12 +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);
|
|
|
|
|
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
|
|
|
|
|
{
|
|
|
|
|
@ -208,6 +344,7 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex2)
|
|
|
|
|
{
|
|
|
|
|
errorCount++;
|
|
|
|
|
_logger.Error("Plc短线重连失败" + ex2.Message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -220,14 +357,60 @@ 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;
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
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());
|
|
|
|
|
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
|
|
|
|
|
{
|
|
|
|
|
@ -238,6 +421,7 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex2)
|
|
|
|
|
{
|
|
|
|
|
errorCount++;
|
|
|
|
|
_logger.Error("Plc短线重连失败" + ex2.Message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@ -250,14 +434,60 @@ 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;
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
|
|
|
|
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());
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
@ -270,6 +500,7 @@ namespace Khd.Core.Wcs.Wcs
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex2)
|
|
|
|
|
{
|
|
|
|
|
errorCount++;
|
|
|
|
|
_logger.Error("Plc短线重连失败" + ex2.Message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|