change-设备实时状态采集

dev
liuwf 3 months ago
parent 8269973804
commit 20bd269fa3

@ -0,0 +1,19 @@
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base;
using System.Collections.Generic;
namespace SlnMesnac.Repository.service
{
/// <summary>
/// 设备参数实时状态表服务接口
/// </summary>
public interface IDmsRealtimeStatusService : IBaseService<DmsRealtimeStatus>
{
/// <summary>
/// 获取生产控制系统监听的所有设备参数状态列表
/// </summary>
/// <returns></returns>
public List<DmsRealtimeStatus> GetAllList();
}
}

@ -0,0 +1,56 @@
using Microsoft.Extensions.DependencyInjection;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* (c) 2024 WenJY
* CLR4.0.30319.42000
* LAPTOP-E0N2L34V
* SlnMesnac.Repository.service.Impl
* 50d84911-9088-4fd3-b85a-151411028afc
*
* WenJY
* wenjy@mesnac.com
* 2024-04-08 16:47:57
* V1.0.0
*
*
*--------------------------------------------------------------------
*
*
*
*
* V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.Repository.service.Impl
{
public class DmsRealtimeStatusServiceImpl : BaseServiceImpl<DmsRealtimeStatus>, IDmsRealtimeStatusService
{
public DmsRealtimeStatusServiceImpl(Repository<DmsRealtimeStatus> rep) : base(rep)
{
}
/// <summary>
/// 获取生产控制系统监听的所有设备参数状态列表
/// </summary>
/// <returns></returns>
public List<DmsRealtimeStatus> GetAllList()
{
List<DmsRealtimeStatus> list = null;
var deviceIds = new List<long> { 1016, 1017, 1018, 1019 };
list = _rep.GetList(x=> deviceIds.Contains((long)x.DeviceId));
return list;
}
}
}

@ -38,19 +38,23 @@ namespace SlnMesnac.WPF.Page
public partial class DevMonitorPage : UserControl
{
// 设备OEE采集缓存
private List<DmsRecordShutDown> DmsList = null;
private List<DmsRecordShutDown>? DmsList = null;
// 设备报警采集缓存
private List<DmsRecordAlarmTime> WarningList = null;
private List<DmsRecordAlarmTime>? WarningList = null;
// 设备参数实时状态
private List<DmsRealtimeStatus>? realtimeStatusList= null;
private ISqlSugarClient? sqlClient = null;
private BaseBusiness baseBusiness = null;
private readonly ConfigInfoBusiness _configInfoBusiness;
private readonly IDmsRecordShutDownService dmsRecordShutDownService;
private readonly IDmsRecordAlarmTimeService dmsRecordAlarmTimeService;
private BaseBusiness? baseBusiness = null;
private readonly ConfigInfoBusiness? _configInfoBusiness;
private readonly IDmsRecordShutDownService? dmsRecordShutDownService;
private readonly IDmsRecordAlarmTimeService? dmsRecordAlarmTimeService;
private readonly IDmsRealtimeStatusService? dmsRealtimeStatusService;
PlcAbsractFactory plc = null;
int MachineSleep = 1000;
private readonly ILogger<DevMonitorPage> _logger;
private readonly ILogger<DevMonitorPage>? _logger;
System.Timers.Timer systemRunTimer = new System.Timers.Timer(1000 * 60);
//系统频率配方
@ -62,6 +66,8 @@ namespace SlnMesnac.WPF.Page
sqlClient = App.ServiceProvider.GetService<ISqlSugarClient>();
dmsRecordShutDownService = App.ServiceProvider.GetService<IDmsRecordShutDownService>();
dmsRecordAlarmTimeService = App.ServiceProvider.GetService<IDmsRecordAlarmTimeService>();
dmsRealtimeStatusService = App.ServiceProvider.GetService<IDmsRealtimeStatusService>();
RecipeModeSetWindow.ManualChangeRecipeEvent += ManualChangeRecipe;
_logger = App.ServiceProvider.GetService<ILogger<DevMonitorPage>>();
_configInfoBusiness = App.ServiceProvider.GetService<ConfigInfoBusiness>();
@ -76,7 +82,7 @@ namespace SlnMesnac.WPF.Page
StartAdjustRecipe();
}
private void Init()
{
@ -133,31 +139,35 @@ namespace SlnMesnac.WPF.Page
{
Task.Run(() =>
{
List<MachineStatusDto> machineStatusDtos = new List<MachineStatusDto>();
DmsList = dmsRecordShutDownService.GetAllMachineFirst();
WarningList = dmsRecordAlarmTimeService.GetMachineWarnList();
realtimeStatusList = dmsRealtimeStatusService.GetAllList();
while (true)
{
try
{
List<MachineStatusDto> machineStatusDtos = new List<MachineStatusDto>();
machineStatusDtos.Clear();
Thread.Sleep(2000);
if (plc != null)
{
lock (string.Empty)
{
RefreshMagNet(machineStatusDtos);
RefreshSpiral(machineStatusDtos);
RefreshHot(machineStatusDtos);
RefreshUnPack(machineStatusDtos);
RefreshMagNet(machineStatusDtos, realtimeStatusList);
RefreshSpiral(machineStatusDtos, realtimeStatusList);
RefreshHot(machineStatusDtos, realtimeStatusList);
RefreshUnPack(machineStatusDtos, realtimeStatusList);
RefreshWeight();
RefreshWeight(realtimeStatusList);
//开关机时间采集
machineStatusDtos.ForEach(x => OeeCollection(x));
//报警采集
machineStatusDtos.ForEach(x => MachineWarnCollection(x));
dmsRealtimeStatusService.Update(realtimeStatusList);
}
}
else
@ -180,36 +190,43 @@ namespace SlnMesnac.WPF.Page
/// <summary>
/// 设备缓存区重量监听及停机控制,监听包装袋余量
/// </summary>
private void RefreshWeight()
private void RefreshWeight(List<DmsRealtimeStatus> realtimeStatusList)
{
try
{
string Bags_Amount = _configInfoBusiness.GetConfigInfos().FirstOrDefault(x => x.ConfigKey == "包装袋余量").ConfigValue;
App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
BagsAmountTxt.Text = _configInfoBusiness.GetConfigInfos().FirstOrDefault(x => x.ConfigKey == "包装袋余量").ConfigValue;
{
BagsAmountTxt.Text = Bags_Amount;
BufferWeightTxt.Text = recipeManageCache.BufferWeight.ToString("F2");
}));
// 判断缓存区重量是否达到设定最大值,如果达到并且设备开机中,停机
double maxWeight = recipeManageCache.MaxBufferWeight;
double weight = recipeManageCache.BufferWeight;
double Cache_MaxWeight = recipeManageCache.MaxBufferWeight;
double Cache_Weight = recipeManageCache.BufferWeight;
bool unPackStatus = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机系统运行状态"));
if (unPackStatus && (maxWeight <= weight))
if (unPackStatus && (Cache_MaxWeight <= Cache_Weight))
{
// 所有机器停机
Task.Run(() =>
{
StopMachine(99);
MessageBox.Show($"设备缓存区当前重量:{weight},预设最大重量值:{maxWeight},已经超重并且拆包机运行,系统下发停机命令!");
_logger.LogError($"设备缓存区当前重量:{weight},预设最大重量值:{maxWeight},已经超重并且拆包机运行,系统下发停机命令!");
MessageBox.Show($"设备缓存区当前重量:{Cache_Weight},预设最大重量值:{Cache_MaxWeight},已经超重并且拆包机运行,系统下发停机命令!");
_logger.LogError($"设备缓存区当前重量:{Cache_Weight},预设最大重量值:{Cache_MaxWeight},已经超重并且拆包机运行,系统下发停机命令!");
});
Thread.Sleep(2000);
}
}catch (Exception ex)
realtimeStatusList.First(x => x.StatusCode == "Bags_Amount").StatusValue = Bags_Amount;
realtimeStatusList.First(x => x.StatusCode == "Cache_MaxWeight").StatusValue = Cache_MaxWeight.ToString();
realtimeStatusList.First(x => x.StatusCode == "Cache_Weight").StatusValue = Cache_Weight.ToString();
}
catch (Exception ex)
{
_logger.LogError($"RefreshWeight出现异常:{ex.Message}");
}
@ -1558,12 +1575,12 @@ namespace SlnMesnac.WPF.Page
/// <summary>
/// 拆包机参数监控
/// </summary>
private void RefreshUnPack(List<MachineStatusDto> machineStatusDtos)
private void RefreshUnPack(List<MachineStatusDto> machineStatusDtos,List<DmsRealtimeStatus> realtimeStatusList)
{
try
{
bool unPackStatus0 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机MES允许远程"));
bool unPackStatus1 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机系统运行状态"));
bool UnPack_MesUse_Flag = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机MES允许远程"));
bool UnPack_Status = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机系统运行状态"));
bool unPackStatus2 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("设备叫料"));
bool unPackStatus3 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("物料到位"));
@ -1573,17 +1590,17 @@ namespace SlnMesnac.WPF.Page
bool unPackStatus7 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机连接状态"));
bool unPackStatus8 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机堵料停螺旋"));
float unPackStatus9 = plc.readFloatByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机翻转机频率反馈"));
float unPackStatus10 = plc.readFloatByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机滚筒筛频率反馈"));
float unPackStatus11 = plc.readFloatByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机螺旋1频率反馈"));
float unPackStatus12 = plc.readFloatByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机螺旋2频率反馈"));
float unPackStatus13 = plc.readFloatByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机废袋机频率反馈"));
float UnPack_Flip_HZ = plc.readFloatByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机翻转机频率反馈"));
float UnPack_Roll_HZ = plc.readFloatByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机滚筒筛频率反馈"));
float UnPack_Spiral1_HZ = plc.readFloatByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机螺旋1频率反馈"));
float UnPack_Spiral2_HZ = plc.readFloatByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机螺旋2频率反馈"));
float UnPack_Waste_HZ = plc.readFloatByAddress(baseBusiness.GetPlcAddressByConfigKey("拆包机废袋机频率反馈"));
App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
UnpackStatus0.Fill = unPackStatus0 ? Brushes.Green : Brushes.Red;
UnpackStatus1.Fill = unPackStatus1 ? Brushes.Green : Brushes.Red;
UnpackStatus0.Fill = UnPack_MesUse_Flag ? Brushes.Green : Brushes.Red;
UnpackStatus1.Fill = UnPack_Status ? Brushes.Green : Brushes.Red;
UnpackStatus2.Text = unPackStatus2.ToString();
UnpackStatus3.Text = unPackStatus3.ToString();
@ -1593,11 +1610,11 @@ namespace SlnMesnac.WPF.Page
UnpackStatus7.Fill = unPackStatus7 ? Brushes.Green : Brushes.Red;
UnpackStatus8.Fill = unPackStatus8 ? Brushes.Red : Brushes.Green;
UnpackStatus9.Text = unPackStatus9.ToString("F2");
UnpackStatus10.Text = unPackStatus10.ToString("F2");
UnpackStatus11.Text = unPackStatus11.ToString("F2");
UnpackStatus12.Text = unPackStatus12.ToString("F2");
UnpackStatus13.Text = unPackStatus13.ToString("F2");
UnpackStatus9.Text = UnPack_Flip_HZ.ToString("F2");
UnpackStatus10.Text = UnPack_Roll_HZ.ToString("F2");
UnpackStatus11.Text = UnPack_Spiral1_HZ.ToString("F2");
UnpackStatus12.Text = UnPack_Spiral2_HZ.ToString("F2");
UnpackStatus13.Text = UnPack_Waste_HZ.ToString("F2");
}));
@ -1605,7 +1622,7 @@ namespace SlnMesnac.WPF.Page
//数据采集部分
MachineStatusDto machineStatusDto = new MachineStatusDto();
machineStatusDto.deviceId = 1016;
machineStatusDto.status = unPackStatus1;
machineStatusDto.status = UnPack_Status;
if (unPackStatus8)
{
machineStatusDto.warnStatus = WarnStatusEnum.;
@ -1615,8 +1632,15 @@ namespace SlnMesnac.WPF.Page
machineStatusDto.warnStatus = WarnStatusEnum.;
}
machineStatusDtos.Add(machineStatusDto);
//设备参数实时更新
realtimeStatusList.First(x => x.StatusCode == "UnPack_MesUse_Flag").StatusValue = UnPack_MesUse_Flag.ToString();
realtimeStatusList.First(x => x.StatusCode == "UnPack_Status").StatusValue = UnPack_Status.ToString();
realtimeStatusList.First(x => x.StatusCode == "UnPack_Flip_HZ").StatusValue = UnPack_Flip_HZ.ToString("F2");
realtimeStatusList.First(x => x.StatusCode == "UnPack_Roll_HZ").StatusValue = UnPack_Roll_HZ.ToString("F2");
realtimeStatusList.First(x => x.StatusCode == "UnPack_Spiral1_HZ").StatusValue = UnPack_Spiral1_HZ.ToString("F2");
realtimeStatusList.First(x => x.StatusCode == "UnPack_Spiral2_HZ").StatusValue = UnPack_Spiral2_HZ.ToString("F2");
realtimeStatusList.First(x => x.StatusCode == "UnPack_Waste_HZ").StatusValue = UnPack_Waste_HZ.ToString("F2");
}
catch (Exception ex)
{
@ -1630,27 +1654,26 @@ namespace SlnMesnac.WPF.Page
/// <summary>
/// 磁选机参数监控
/// </summary>
private void RefreshMagNet(List<MachineStatusDto> machineStatusDtos)
private void RefreshMagNet(List<MachineStatusDto> machineStatusDtos, List<DmsRealtimeStatus> realtimeStatusList)
{
try
{
bool signal0 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("磁选机震动启动"));
bool signal1 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("磁选机磁选启动"));
bool signal2 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("磁选机MES允许远程"));
bool MagNet_Shake_Status = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("磁选机震动启动"));
bool MagNet_Status = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("磁选机磁选启动"));
bool MagNet_MesUse_Flag = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("磁选机MES允许远程"));
bool signal3 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("磁选机设备故障反馈"));
App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
MagNetStatus1.Fill = signal0 ? Brushes.Green : Brushes.Red;
MagNetStatus2.Fill = signal1 ? Brushes.Green : Brushes.Red;
MagNetStatus3.Fill = signal2 ? Brushes.Green : Brushes.Red;
MagNetStatus1.Fill = MagNet_Shake_Status ? Brushes.Green : Brushes.Red;
MagNetStatus2.Fill = MagNet_Status ? Brushes.Green : Brushes.Red;
MagNetStatus3.Fill = MagNet_MesUse_Flag ? Brushes.Green : Brushes.Red;
MagNetStatus4.Fill = signal3 ? Brushes.Red : Brushes.Green;
}));
MachineStatusDto machineStatusDto = new MachineStatusDto();
machineStatusDto.deviceId = 1017;
machineStatusDto.status = signal0 && signal1;
machineStatusDto.status = MagNet_Shake_Status && MagNet_Status;
if (signal3)
{
machineStatusDto.warnStatus = WarnStatusEnum.;
@ -1660,15 +1683,10 @@ namespace SlnMesnac.WPF.Page
machineStatusDto.warnStatus = WarnStatusEnum.;
}
machineStatusDtos.Add(machineStatusDto);
//if (signal3)
//{
// Task.Run(() =>
// {
// StopMachine(5);
// _logger.LogError("磁选机设备故障,自动关闭磁选机及以前的设备");
// });
//}
//设备参数实时更新
realtimeStatusList.First(x => x.StatusCode == "MagNet_Shake_Status").StatusValue = MagNet_Shake_Status.ToString();
realtimeStatusList.First(x => x.StatusCode == "MagNet_Status").StatusValue = MagNet_Status.ToString();
realtimeStatusList.First(x => x.StatusCode == "MagNet_MesUse_Flag").StatusValue = MagNet_MesUse_Flag.ToString();
}
@ -1682,50 +1700,50 @@ namespace SlnMesnac.WPF.Page
/// <summary>
/// 螺旋机参数监控
/// </summary>
private void RefreshSpiral(List<MachineStatusDto> machineStatusDtos)
private void RefreshSpiral(List<MachineStatusDto> machineStatusDtos, List<DmsRealtimeStatus> realtimeStatusList)
{
try
{
bool signal0 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋1MES允许远程"));
bool signal1 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋2MES允许远程"));
bool signal2 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋1状态"));
bool signal3 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋2状态"));
bool Spiral1_MesUse_Flag = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋1MES允许远程"));
bool Spiral2_MesUse_Flag = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋2MES允许远程"));
bool Spiral1_Status = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋1状态"));
bool Spiral2_Status = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋2状态"));
bool signal4 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋1变频器状态"));
bool signal5 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋2变频器状态"));
bool Spiral1_Inverter_Status = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋1变频器状态"));
bool Spiral2_Inverter_Status = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋2变频器状态"));
double speed1 = plc.readInt16ByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋1速度反馈")) / 100;
double speed2 = plc.readInt16ByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋2速度反馈")) / 100;
double Spiral1_Speed = plc.readInt16ByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋1速度反馈")) / 100;
double Spiral2_Speed = plc.readInt16ByAddress(baseBusiness.GetPlcAddressByConfigKey("螺旋2速度反馈")) / 100;
// 螺旋速度预设值
int speed1Set = int.Parse(baseBusiness.GetPlcAddressByConfigKey("螺旋1速度设定值"));
int speed2Set = int.Parse(baseBusiness.GetPlcAddressByConfigKey("螺旋2速度设定值"));
int Spiral1_Set_Speed = int.Parse(baseBusiness.GetPlcAddressByConfigKey("螺旋1速度设定值"));
int Spiral2_Set_Speed = int.Parse(baseBusiness.GetPlcAddressByConfigKey("螺旋2速度设定值"));
App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
SpiralSignal0.Fill = signal0 ? Brushes.Green : Brushes.Red;
SpiralSignal1.Fill = signal1 ? Brushes.Green : Brushes.Red;
SpiralSignal2.Fill = signal2 ? Brushes.Green : Brushes.Red;
SpiralSignal3.Fill = signal3 ? Brushes.Green : Brushes.Red;
SpiralSignal0.Fill = Spiral1_MesUse_Flag ? Brushes.Green : Brushes.Red;
SpiralSignal1.Fill = Spiral2_MesUse_Flag ? Brushes.Green : Brushes.Red;
SpiralSignal2.Fill = Spiral1_Status ? Brushes.Green : Brushes.Red;
SpiralSignal3.Fill = Spiral2_Status ? Brushes.Green : Brushes.Red;
//变频器状态 0正常1故障
SpiralSignal4.Fill = signal4 ? Brushes.Red : Brushes.Green;
SpiralSignal5.Fill = signal5 ? Brushes.Red : Brushes.Green;
SpiralSignal4.Fill = Spiral1_Inverter_Status ? Brushes.Red : Brushes.Green;
SpiralSignal5.Fill = Spiral2_Inverter_Status ? Brushes.Red : Brushes.Green;
//螺旋1 速度低于80%预警
SpiralSignal6.Fill = speed1 < speed1Set * 0.8 ? Brushes.Red : Brushes.Green;
SpiralSignal6_Value.Text = speed1.ToString();
SpiralSignal6.Fill = Spiral1_Speed < Spiral1_Set_Speed * 0.8 ? Brushes.Red : Brushes.Green;
SpiralSignal6_Value.Text = Spiral1_Speed.ToString();
//螺旋2 速度低于80%预警
SpiralSignal7.Fill = speed2 < speed2Set * 0.8 ? Brushes.Red : Brushes.Green;
SpiralSignal7_Value.Text = speed2.ToString();
SpiralSignal7.Fill = Spiral2_Speed < Spiral2_Set_Speed * 0.8 ? Brushes.Red : Brushes.Green;
SpiralSignal7_Value.Text = Spiral2_Speed.ToString();
}));
MachineStatusDto machineStatusDto = new MachineStatusDto();
machineStatusDto.deviceId = 1018;
machineStatusDto.status = signal2 && signal3;
if (signal4 || signal5)
machineStatusDto.status = Spiral1_Status && Spiral2_Status;
if (Spiral1_Inverter_Status || Spiral2_Inverter_Status)
{
machineStatusDto.warnStatus = signal4 ? WarnStatusEnum.1 : WarnStatusEnum.2;
machineStatusDto.warnStatus = Spiral1_Inverter_Status ? WarnStatusEnum.1 : WarnStatusEnum.2;
}
else
{
@ -1733,22 +1751,17 @@ namespace SlnMesnac.WPF.Page
}
machineStatusDtos.Add(machineStatusDto);
//if (signal5)
//{
// Task.Run(() =>
// {
// StopMachine(6);
// _logger.LogError("螺旋2设备故障自动关闭螺旋2及以前的设备");
// });
//}else if (signal4)
//{
// Task.Run(() =>
// {
// StopMachine(4);
// _logger.LogError("螺旋1设备故障自动关闭螺旋1及以前的设备");
// });
//}
//设备参数实时更新
realtimeStatusList.First(x => x.StatusCode == "Spiral1_MesUse_Flag").StatusValue = Spiral1_MesUse_Flag.ToString();
realtimeStatusList.First(x => x.StatusCode == "Spiral2_MesUse_Flag").StatusValue = Spiral2_MesUse_Flag.ToString();
realtimeStatusList.First(x => x.StatusCode == "Spiral1_Status").StatusValue = Spiral1_Status.ToString();
realtimeStatusList.First(x => x.StatusCode == "Spiral2_Status").StatusValue = Spiral2_Status.ToString();
realtimeStatusList.First(x => x.StatusCode == "Spiral1_Inverter_Status").StatusValue = Spiral1_Inverter_Status.ToString();
realtimeStatusList.First(x => x.StatusCode == "Spiral2_Inverter_Status").StatusValue = Spiral2_Inverter_Status.ToString();
realtimeStatusList.First(x => x.StatusCode == "Spiral1_Speed").StatusValue = Spiral1_Speed.ToString();
realtimeStatusList.First(x => x.StatusCode == "Spiral2_Speed").StatusValue = Spiral2_Speed.ToString();
realtimeStatusList.First(x => x.StatusCode == "Spiral1_Set_Speed").StatusValue = Spiral1_Set_Speed.ToString();
realtimeStatusList.First(x => x.StatusCode == "Spiral2_Set_Speed").StatusValue = Spiral2_Set_Speed.ToString();
}
catch (Exception ex)
@ -1764,13 +1777,13 @@ namespace SlnMesnac.WPF.Page
/// <summary>
/// 烘干机参数监控
/// </summary>
private void RefreshHot(List<MachineStatusDto> machineStatusDtos)
private void RefreshHot(List<MachineStatusDto> machineStatusDtos, List<DmsRealtimeStatus> realtimeStatusList)
{
try
{
int signal1_1 = plc.readByteByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机螺旋状态"));
int signal2_1 = plc.readByteByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机风机状态"));
int signal3_1 = plc.readByteByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机燃烧机状态"));
int Hot_Spiral_Status = plc.readByteByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机螺旋状态"));
int Hot_Fan_Status = plc.readByteByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机风机状态"));
int Hot_Burn_Status = plc.readByteByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机燃烧机状态"));
bool signal1_2 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机反馈传动启动"));
@ -1780,10 +1793,10 @@ namespace SlnMesnac.WPF.Page
bool signal4_1 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机燃烧机运行"));
bool signal14_2 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机存在报警"));
int signal8 = plc.readInt16ByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机烘干温度"));
int signal9 = plc.readInt16ByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机加热温度"));
int signal10 = plc.readInt16ByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机出气温度"));
int signal11 = plc.readInt16ByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机输出百分比"));
int Hot_Drying_Temperature = plc.readInt16ByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机烘干温度"));
int Hot_Heat_Temperature = plc.readInt16ByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机加热温度"));
int Hot_OutAir_Temperature = plc.readInt16ByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机出气温度"));
int Hot_OutPut_Rate = plc.readInt16ByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机输出百分比"));
bool signal7_1 = plc.readBoolByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机堵料报警"));
int signal7_2 = plc.readByteByAddress(baseBusiness.GetPlcAddressByConfigKey("烘干机报警"));
@ -1791,12 +1804,12 @@ namespace SlnMesnac.WPF.Page
App.Current.Dispatcher.BeginInvoke((Action)(() =>
{
HotSignal1_1.Fill = signal1_1 == 1 ? Brushes.Green : Brushes.Red;
HotSignal1_1_Value.Text = ChangeHotStatus(signal1_1);
HotSignal2_1.Fill = signal2_1 == 1 ? Brushes.Green : Brushes.Red;
HotSignal2_1_Value.Text = ChangeHotStatus(signal2_1);
HotSignal3_1.Fill = signal3_1 == 1 ? Brushes.Green : Brushes.Red;
HotSignal3_1_Value.Text = ChangeHotStatus(signal3_1);
HotSignal1_1.Fill = Hot_Spiral_Status == 1 ? Brushes.Green : Brushes.Red;
HotSignal1_1_Value.Text = ChangeHotStatus(Hot_Spiral_Status);
HotSignal2_1.Fill = Hot_Fan_Status == 1 ? Brushes.Green : Brushes.Red;
HotSignal2_1_Value.Text = ChangeHotStatus(Hot_Fan_Status);
HotSignal3_1.Fill = Hot_Burn_Status == 1 ? Brushes.Green : Brushes.Red;
HotSignal3_1_Value.Text = ChangeHotStatus(Hot_Burn_Status);
HotSignal1_2.Fill = signal1_2 ? Brushes.Green : Brushes.Red;
HotSignal2_2.Fill = signal2_2 ? Brushes.Green : Brushes.Red;
@ -1806,10 +1819,10 @@ namespace SlnMesnac.WPF.Page
HotSignal4_2.Fill = signal14_2 ? Brushes.Red : Brushes.Green;
HotSignal5_1_Value.Text = ((double)signal8 / 10).ToString();
HotSignal5_2_Value.Text = ((double)signal9 / 10).ToString();
HotSignal6_1_Value.Text = ((double)signal10 / 10).ToString();
HotSignal6_2_Value.Text = signal11.ToString();
HotSignal5_1_Value.Text = ((double)Hot_Drying_Temperature / 10).ToString();
HotSignal5_2_Value.Text = ((double)Hot_Heat_Temperature / 10).ToString();
HotSignal6_1_Value.Text = ((double)Hot_OutAir_Temperature / 10).ToString();
HotSignal6_2_Value.Text = ((double)Hot_OutPut_Rate / 10).ToString();
HotSignal7_1.Fill = signal7_1 ? Brushes.Red : Brushes.Green;
HotSignal7_2.Fill = signal7_2 == 0 ? Brushes.Green : Brushes.Red;
@ -1845,14 +1858,18 @@ namespace SlnMesnac.WPF.Page
}
machineStatusDtos.Add(machineStatusDto);
//if (signal7_1 || signal7_2 > 0 && signal7_2 <= 4)
//{
// Task.Run(() =>
// {
// StopMachine(3);
// _logger.LogError($"烘干机设备故障:{machineStatusDto.warnStatus.ToString()},自动关闭烘干机及以前的设备");
// });
//}
//设备参数实时更新
realtimeStatusList.First(x => x.StatusCode == "Hot_Spiral_Status").StatusValue = (Hot_Spiral_Status==1).ToString();
realtimeStatusList.First(x => x.StatusCode == "Hot_Fan_Status").StatusValue = (Hot_Fan_Status==1).ToString();
realtimeStatusList.First(x => x.StatusCode == "Hot_Burn_Status").StatusValue = (Hot_Burn_Status==1).ToString();
realtimeStatusList.First(x => x.StatusCode == "Hot_Drying_Temperature").StatusValue = ((double)Hot_Drying_Temperature / 10).ToString();
realtimeStatusList.First(x => x.StatusCode == "Hot_Heat_Temperature").StatusValue = ((double)Hot_Heat_Temperature / 10).ToString();;
realtimeStatusList.First(x => x.StatusCode == "Hot_OutAir_Temperature").StatusValue = ((double)Hot_OutAir_Temperature / 10).ToString();
realtimeStatusList.First(x => x.StatusCode == "Hot_OutPut_Rate").StatusValue = ((double)Hot_OutPut_Rate / 10).ToString();
}
catch (Exception ex)
{

@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SlnMesnac.WPF.Page"
mc:Ignorable="d"
Title="数量修改" Height="350" Width="600" WindowStartupLocation="CenterScreen" Topmost="True" Background="Blue">
Title="数量修改" Height="350" Width="600" WindowStartupLocation="CenterScreen" Background="Blue">
<Border Margin="5" Background="LightGoldenrodYellow" CornerRadius="10">
<Border.Effect>
<DropShadowEffect Color="LightGoldenrodYellow" ShadowDepth="0" BlurRadius="5" Opacity="0.3" Direction="0"></DropShadowEffect>

@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SlnMesnac.WPF.Page"
mc:Ignorable="d"
Title="重量设置" Height="300" Width="700" WindowStartupLocation="CenterScreen" Topmost="True" Background="#73B0F5">
Title="重量设置" Height="300" Width="700" WindowStartupLocation="CenterScreen" Background="#73B0F5">
<Border Margin="5" Background="Transparent" CornerRadius="10">
<Border.Effect>
<DropShadowEffect Color="LightGoldenrodYellow" ShadowDepth="0" BlurRadius="5" Opacity="0.3" Direction="0"></DropShadowEffect>

@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SlnMesnac.WPF.Page"
mc:Ignorable="d"
Title="配方设置" Height="550" Width="600" WindowStartupLocation="CenterScreen" Topmost="True" Background="#73B0F5">
Title="配方设置" Height="550" Width="600" WindowStartupLocation="CenterScreen" Background="#73B0F5">
<Border Margin="5" Background="Transparent" CornerRadius="10">
<Border.Effect>
<DropShadowEffect Color="LightGoldenrodYellow" ShadowDepth="0" BlurRadius="5" Opacity="0.3" Direction="0"></DropShadowEffect>

@ -5,7 +5,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SlnMesnac.WPF.Page"
mc:Ignorable="d"
Title="模式设置" Height="300" Width="700" WindowStartupLocation="CenterScreen" Topmost="True" Background="#73B0F5">
Title="模式设置" Height="300" Width="700" WindowStartupLocation="CenterScreen" Background="#73B0F5">
<Border Margin="5" Background="Transparent" CornerRadius="10">
<Border.Effect>
<DropShadowEffect Color="LightGoldenrodYellow" ShadowDepth="0" BlurRadius="5" Opacity="0.3" Direction="0"></DropShadowEffect>

Loading…
Cancel
Save