add-添加监听提升机报警信息及声光控制

master
liuwf 1 year ago
parent 15dada26c1
commit 34cfb1a366

@ -30,6 +30,7 @@ namespace Khd.Core.Domain.Dto.waring
,
,
,
,
}
}

@ -37,6 +37,8 @@ namespace Khd.Core.Wcs.Global
public static List<WmsWarehouseMaterial> WmsWarehouseMaterial = new List<WmsWarehouseMaterial>();
public static List<MesBasePalletInfo> MesBasePalletInfo = new List<MesBasePalletInfo>();
public static List<BaseDictionary> BaseDictionary = new List<BaseDictionary>();
// 记录实时报警记录缓存
public static List<DmsRecordAlarmTime> HositerDmsRecordAlarmTimes = new List<DmsRecordAlarmTime>();
private static object baseEquipLock = new object();
private static List<BaseEquip> _baseEquip = new List<BaseEquip>();

@ -46,6 +46,7 @@ namespace Khd.Core.Wcs
StaticData.BaseEquip = dbContext.BaseEquip.ToList();//设备信息
StaticData.BaseDictionary = dbContext.BaseDictionary.ToList();//字典表Agv任务模板
StaticData.DmsBaseAlarmRuleList = dbContext.DmsBaseAlarmRule.ToList();
StaticData.HositerDmsRecordAlarmTimes = dbContext.DmsRecordAlarmTime.ToList();
foreach (var plcConfig in StaticData.PlcConfigs)
{
if (!StaticData.PlcDic.Any(t => t.Key == plcConfig.Code))

@ -15,6 +15,8 @@ namespace Khd.Core.Wcs
private static object serialLock = new object();
public static long GetSerialNo(DefaultDbContext dbContext)
{
lock (serialLock)
@ -147,6 +149,48 @@ namespace Khd.Core.Wcs
}
public static void InsertWaringLog(DefaultDbContext dbContext, string WaringType, string message = "")
{
try
{
var alarmRule = StaticData.DmsBaseAlarmRuleList.Where(t => t.AlarmReason == WaringType).FirstOrDefault();
if (alarmRule != null)
{
// var alarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.AlarmRuleId == alarmRule.AlarmRuleId).FirstOrDefault();
var alarmTime = StaticData.HositerDmsRecordAlarmTimes.Where(t => t.AlarmRuleId == alarmRule.AlarmRuleId).FirstOrDefault();
if (alarmTime == null)
{
alarmTime = new DmsRecordAlarmTime()
{
AlarmId = StaticData.SnowId.NextId(),
AlarmRuleId = alarmRule.AlarmRuleId,
DeviceId = alarmRule.DeviceId,
AlarmBeginTime = DateTime.Now,
ContinueTime = alarmRule.ContinueTime,
AlarmReason = alarmRule.AlarmReason,
HandleSuggest = alarmRule.HandleSuggest,
CreateBy = "WCS",
CreateTime = DateTime.Now,
AlarmData = message
};
var dmsRecordAlarmInfo = CoreMapper.Map<DmsRecordAlarmInfo>(alarmTime);
dmsRecordAlarmInfo.NoticeStatus = "0";
dmsRecordAlarmInfo.AlarmStatus = "0";
dbContext.Add(dmsRecordAlarmInfo);
dbContext.Add(alarmTime);
dbContext.SaveChanges();
StaticData.HositerDmsRecordAlarmTimes.Add(alarmTime);
}
}
}
catch
{
}
}
public static void DeleteWaringLog(DefaultDbContext dbContext, WaringType WaringType)
{
@ -166,6 +210,28 @@ namespace Khd.Core.Wcs
}
public static void DeleteWaringLog(DefaultDbContext dbContext, string WaringType)
{
try
{
// var alarmTime = dbContext.DmsRecordAlarmTime.Where(t => t.AlarmReason == WaringType).FirstOrDefault();
var alarmTime = StaticData.HositerDmsRecordAlarmTimes.Where(t => t.AlarmReason == WaringType).FirstOrDefault();
if (alarmTime != null)
{
dbContext.DmsRecordAlarmTime.Where(t => t.AlarmId == alarmTime.AlarmId).Delete();
dbContext.DmsRecordAlarmInfo.Where(t => t.AlarmId == alarmTime.AlarmId)
.Update(t => new DmsRecordAlarmInfo() { AlarmStatus = "2" });
StaticData.HositerDmsRecordAlarmTimes.Remove(alarmTime);
}
}
catch
{
}
}
public static void SendPlcLocation(WmsBaseLocation wmsBaseLocation)
{
Task.Run(() =>

@ -64,6 +64,12 @@ namespace Khd.Core.Wcs.Wcs
/// </summary>
private readonly BasePlcpoint mesClose;
/// <summary>
/// 提升机所有楼层报警灯控制闪烁
/// </summary>
private BasePlcpoint hoisterAllLight;
public FirstFloor(IHost host)
{
this._host = host;
@ -813,17 +819,28 @@ namespace Khd.Core.Wcs.Wcs
Outtpyes.Add(5);
warningMsg = "MES屏蔽已打开无法下发任务";
StaticData.PlcDic[0].WriteToPoint(this.targetfloor06.plcpointAddress, Convert.ToString(currentfloor06Value), this.targetfloor06.plcpointLength.ToString());
// continue;
////控制报警灯闪烁
//this.hoisterAllLight = StaticData.BasePlcpointList.FirstOrDefault(t => t.plcpointNo == "hoisterAllLight");
//StaticData.PlcDic[0].Write(this.hoisterAllLight.plcpointAddress, 1);
}
}
transaction.Dispose();
if (Outtpyes.Count > 0)
{
SystemData.InsertWaringLog(dbContext, WaringType., warningMsg);
//控制报警灯闪烁
this.hoisterAllLight = StaticData.BasePlcpointList.FirstOrDefault(t => t.plcpointNo == "hoisterAllLight");
if (warningMsg!= "MES屏蔽已打开无法下发任务") //MES屏蔽无需下发清空输送线提示即报警灯亮
{
StaticData.PlcDic[0].Write(this.hoisterAllLight.plcpointAddress, 1); ///提升机每层楼报警灯亮
}
}
else
{
SystemData.DeleteWaringLog(dbContext, WaringType.);
//关闭 控制报警灯闪烁
this.hoisterAllLight = StaticData.BasePlcpointList.FirstOrDefault(t => t.plcpointNo == "hoisterAllLight");
StaticData.PlcDic[0].Write(this.hoisterAllLight.plcpointAddress, 0);
}
}
catch (Exception ex)

@ -13,6 +13,7 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
using System.Diagnostics;
using Z.EntityFramework.Plus;
namespace Khd.Core.Wcs.Wcs
@ -861,15 +862,19 @@ namespace Khd.Core.Wcs.Wcs
}
/// <summary>
/// 获取Plc的值
/// 获取Plc的值 及报警信息同步
/// </summary>
private void BasePlcPointUpdateLogic()
{
try
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start(); // 开始计时
using var scope = host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<Plc.S7.Plc> plcs = StaticData.PlcDic.Values.ToList();
foreach (var item in StaticData.BasePlcpointList.Where(t => !string.IsNullOrEmpty(t.plcpointAddress)))
{
if (!string.IsNullOrEmpty(item.plcpointAddress))
@ -879,7 +884,24 @@ namespace Khd.Core.Wcs.Wcs
if (item.plcpointNo.Contains("RFID"))
item.definefield1 = plcs.Where(t => t.IP == item.definefield3).First().ReadRFID(item.plcpointAddress)?.ToString();
else
item.definefield1 = plcs.Where(t => t.IP == item.definefield1).First().Read(item.plcpointAddress)?.ToString();
{
item.definefield1 = plcs.Where(t => t.IP == item.definefield3).First().Read(item.plcpointAddress)?.ToString();
#region 提升机报警点位,需要添加报警记录
if (item.plcpointNo.Contains("提升机报警采集专用点位"))
{
if(item.definefield1 == "True" || item.definefield1 == "1")
{ //添加报警
SystemData.InsertWaringLog(dbContext, item.plcpointName, item.plcpointName);
}
else
{
//如有报警需消除
SystemData.DeleteWaringLog(dbContext, item.plcpointName);
}
}
#endregion
}
}
catch
{
@ -887,8 +909,12 @@ namespace Khd.Core.Wcs.Wcs
}
}
}
dbContext.UpdateRange(StaticData.BasePlcpointList.Where(t => !string.IsNullOrEmpty(t.plcpointAddress)));
dbContext.SaveChanges();
stopwatch.Stop(); // 停止计时
// Console.WriteLine($"BasePlcPointUpdateLogic 方法执行时间: {stopwatch.ElapsedMilliseconds} 毫秒");
}
catch
{

@ -146,6 +146,7 @@
Focusable="False"
HeadersVisibility="Column"
IsReadOnly="True"
LoadingRow="dgData_LoadingRow"
RowHeaderWidth="0"
SelectionMode="Single" FontSize="16" HorizontalAlignment="Left" >
@ -186,6 +187,14 @@
FontSize="20"
Header="处理建议"
IsReadOnly="True" />
<DataGridTextColumn
Width="100*"
Binding="{Binding AlarmStatus}"
CanUserSort="False"
ElementStyle="{StaticResource dgCell}"
FontSize="20"
Header="处理状态"
IsReadOnly="True" />
<DataGridTextColumn
Width="140*"

@ -59,6 +59,17 @@ namespace Khd.Core.Wpf.WindowPage
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List<DmsRecordAlarmInfo> list = await dbContext.DmsRecordAlarmInfo.Where(x => x.DeviceId == 6 ).OrderByDescending(x => x.CreateTime).Take(500).ToListAsync();
list.ForEach(x =>
{
if (x.AlarmStatus == "0")
{
x.AlarmStatus = "未处理";
}
else
{
x.AlarmStatus = "已恢复";
}
});
Dispatcher.Invoke(() =>
{
this.LoadMaterial0.ItemsSource = null;
@ -81,6 +92,17 @@ namespace Khd.Core.Wpf.WindowPage
using var scope = _host.Services.CreateScope();
using var dbContext = scope.ServiceProvider.GetRequiredService<DefaultDbContext>();
List< DmsRecordAlarmInfo > list = await dbContext.DmsRecordAlarmInfo.Where(x => x.DeviceId ==6 && x.CreateTime>= startTime && x.CreateTime <= endTime).OrderByDescending(x => x.CreateTime).ToListAsync();
list.ForEach(x =>
{
if (x.AlarmStatus == "0")
{
x.AlarmStatus = "未处理";
}
else
{
x.AlarmStatus = "已恢复";
}
});
Dispatcher.Invoke(() =>
{
this.LoadMaterial0.ItemsSource = null;

Loading…
Cancel
Save