115 lines
3.1 KiB
C#
115 lines
3.1 KiB
C#
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using System.Collections.ObjectModel;
|
|
using System.Windows;
|
|
using TcEventLoggerAdsProxyLib;
|
|
|
|
namespace InfineonHMI
|
|
{
|
|
public partial class EventData : ObservableObject
|
|
{
|
|
[ObservableProperty]
|
|
public uint id;
|
|
|
|
[ObservableProperty]
|
|
public string? message;
|
|
|
|
[ObservableProperty]
|
|
public DateTime raised;
|
|
|
|
[ObservableProperty]
|
|
public DateTime cleared;
|
|
|
|
[ObservableProperty]
|
|
public DateTime confirmed;
|
|
};
|
|
|
|
public sealed partial class EventsPageVM : ObservableObject
|
|
{
|
|
public ObservableCollection<EventData> CurrentEvents { get; private set; } = [];
|
|
private readonly object _lock = new();
|
|
|
|
private readonly TcEventLogger _logger;
|
|
|
|
[ObservableProperty]
|
|
private EventData? currentEvent;
|
|
|
|
// 599264352000000000 ticks is a date used by beckhoff for events that didnt happen up to this point
|
|
private const long NoTime = 599264352000000000;
|
|
|
|
|
|
public EventsPageVM(TcEventLogger logger)
|
|
{
|
|
_logger = logger;
|
|
|
|
_logger.AlarmRaised += SimpleAlarmRaisedEvent;
|
|
_logger.AlarmCleared += SimpleAlarmClearedEvent;
|
|
_logger.AlarmConfirmed += SimpleConfirmedAlarmEvent;
|
|
|
|
#if DEBUG
|
|
|
|
#else
|
|
|
|
_logger.Connect("10.103.32.50.1.1");
|
|
#endif
|
|
|
|
GetAllActiveEvents();
|
|
}
|
|
|
|
private void RebuildCurrentEventsList()
|
|
{
|
|
lock (_lock)
|
|
{
|
|
CurrentEvents.Clear();
|
|
}
|
|
|
|
GetAllActiveEvents();
|
|
}
|
|
|
|
private void SimpleConfirmedAlarmEvent(TcAlarm alarm, bool remove)
|
|
{
|
|
Application.Current.Dispatcher.BeginInvoke(RebuildCurrentEventsList);
|
|
}
|
|
|
|
private void SimpleAlarmClearedEvent(TcAlarm alarm, bool remove)
|
|
{
|
|
Application.Current.Dispatcher.BeginInvoke(RebuildCurrentEventsList);
|
|
}
|
|
|
|
private void SimpleAlarmRaisedEvent(TcAlarm alarm)
|
|
{
|
|
Application.Current.Dispatcher.BeginInvoke(RebuildCurrentEventsList);
|
|
}
|
|
|
|
private void GetAllActiveEvents()
|
|
{
|
|
EventData eventData;
|
|
List<EventData> tempEventList = [];
|
|
|
|
lock (_lock)
|
|
{
|
|
foreach (var alarm in _logger.ActiveAlarms)
|
|
{
|
|
eventData = new()
|
|
{
|
|
Id = alarm.EventId,
|
|
Message = alarm.GetText(1033),
|
|
Raised = alarm.TimeRaised,
|
|
Cleared = alarm.TimeCleared,
|
|
Confirmed = alarm.TimeConfirmed
|
|
};
|
|
|
|
tempEventList.Add(eventData);
|
|
}
|
|
|
|
IEnumerable<EventData> _eventQuery =
|
|
from data in tempEventList
|
|
orderby data.Raised descending
|
|
select data;
|
|
|
|
CurrentEvent = _eventQuery.FirstOrDefault();
|
|
CurrentEvents = new ObservableCollection<EventData>(_eventQuery);
|
|
}
|
|
}
|
|
}
|
|
}
|