private void UpdateAlarm(ConditionState node, SimAlarmStateBackend alarm, string eventId = null) { ISystemContext context = _nodeManager.SystemContext; // remove old event. if (node.EventId.Value != null) { _events.Remove(Utils.ToHexString(node.EventId.Value)); } node.EventId.Value = eventId != null?Encoding.UTF8.GetBytes(eventId) : Guid.NewGuid().ToByteArray(); node.Time.Value = DateTime.UtcNow; node.ReceiveTime.Value = node.Time.Value; // save the event for later lookup. _events[Utils.ToHexString(node.EventId.Value)] = node; // determine the retain state. node.Retain.Value = true; if (alarm != null) { node.Time.Value = alarm.Time; node.Message.Value = new LocalizedText(alarm.Reason); node.SetComment(context, alarm.Comment, alarm.UserName); node.SetSeverity(context, alarm.Severity); node.EnabledState.TransitionTime.Value = alarm.EnableTime; node.SetEnableState(context, (alarm.State & SimConditionStatesEnum.Enabled) != 0); if (node is AlarmConditionState) { AlarmConditionState nodeAlarm = (AlarmConditionState)node; nodeAlarm.SetAcknowledgedState(context, (alarm.State & SimConditionStatesEnum.Acknowledged) != 0); nodeAlarm.SetConfirmedState(context, (alarm.State & SimConditionStatesEnum.Confirmed) != 0); nodeAlarm.SetActiveState(context, (alarm.State & SimConditionStatesEnum.Active) != 0); nodeAlarm.SetSuppressedState(context, (alarm.State & SimConditionStatesEnum.Suppressed) != 0); nodeAlarm.ActiveState.TransitionTime.Value = alarm.ActiveTime; // not interested in inactive alarms if (!nodeAlarm.ActiveState.Id.Value) { nodeAlarm.Retain.Value = false; } } } // check for deleted items. if ((alarm.State & SimConditionStatesEnum.Deleted) != 0) { node.Retain.Value = false; } // not interested in disabled alarms. if (!node.EnabledState.Id.Value) { node.Retain.Value = false; } }
protected override bool UpdateSuppression() { bool update = false; if (Optional) { AlarmConditionState alarm = GetAlarm(); if (m_alarmController.ShouldSuppress()) { alarm.SetSuppressedState(SystemContext, true); update = true; } if (m_alarmController.ShouldUnsuppress()) { alarm.SetSuppressedState(SystemContext, false); update = true; } } return(update); }
/// <summary> /// Updates the alarm with a new state. /// </summary> /// <param name="node">The node.</param> /// <param name="alarm">The alarm.</param> private void UpdateAlarm(AlarmConditionState node, UnderlyingSystemAlarm alarm) { ISystemContext context = m_nodeManager.SystemContext; // remove old event. if (node.EventId.Value != null) { m_events.Remove(Utils.ToHexString(node.EventId.Value)); } // update the basic event information (include generating a unique id for the event). node.EventId.Value = Guid.NewGuid().ToByteArray(); node.Time.Value = DateTime.UtcNow; node.ReceiveTime.Value = node.Time.Value; // save the event for later lookup. m_events[Utils.ToHexString(node.EventId.Value)] = node; // determine the retain state. node.Retain.Value = true; if (alarm != null) { node.Time.Value = alarm.Time; node.Message.Value = new LocalizedText(alarm.Reason); // update the states. node.SetEnableState(context, (alarm.State & UnderlyingSystemAlarmStates.Enabled) != 0); node.SetAcknowledgedState(context, (alarm.State & UnderlyingSystemAlarmStates.Acknowledged) != 0); node.SetConfirmedState(context, (alarm.State & UnderlyingSystemAlarmStates.Confirmed) != 0); node.SetActiveState(context, (alarm.State & UnderlyingSystemAlarmStates.Active) != 0); node.SetSuppressedState(context, (alarm.State & UnderlyingSystemAlarmStates.Suppressed) != 0); // update other information. node.SetComment(context, alarm.Comment, alarm.UserName); node.SetSeverity(context, alarm.Severity); node.EnabledState.TransitionTime.Value = alarm.EnableTime; node.ActiveState.TransitionTime.Value = alarm.ActiveTime; // check for deleted items. if ((alarm.State & UnderlyingSystemAlarmStates.Deleted) != 0) { node.Retain.Value = false; } // handle high alarms. ExclusiveLimitAlarmState highAlarm = node as ExclusiveLimitAlarmState; if (highAlarm != null) { highAlarm.HighLimit.Value = alarm.Limits[0]; if ((alarm.State & UnderlyingSystemAlarmStates.High) != 0) { highAlarm.SetLimitState(context, LimitAlarmStates.High); } } // handle high-low alarms. NonExclusiveLimitAlarmState highLowAlarm = node as NonExclusiveLimitAlarmState; if (highLowAlarm != null) { highLowAlarm.HighHighLimit.Value = alarm.Limits[0]; highLowAlarm.HighLimit.Value = alarm.Limits[1]; highLowAlarm.LowLimit.Value = alarm.Limits[2]; highLowAlarm.LowLowLimit.Value = alarm.Limits[3]; LimitAlarmStates limit = LimitAlarmStates.Inactive; if ((alarm.State & UnderlyingSystemAlarmStates.HighHigh) != 0) { limit |= LimitAlarmStates.HighHigh; } if ((alarm.State & UnderlyingSystemAlarmStates.High) != 0) { limit |= LimitAlarmStates.High; } if ((alarm.State & UnderlyingSystemAlarmStates.Low) != 0) { limit |= LimitAlarmStates.Low; } if ((alarm.State & UnderlyingSystemAlarmStates.LowLow) != 0) { limit |= LimitAlarmStates.LowLow; } highLowAlarm.SetLimitState(context, limit); } } // not interested in disabled or inactive alarms. if (!node.EnabledState.Id.Value || !node.ActiveState.Id.Value) { node.Retain.Value = false; } }
public void Initialize( uint alarmTypeIdentifier, string name, double maxTimeShelved = AlarmDefines.NORMAL_MAX_TIME_SHELVED) { // Create an alarm and trigger name - Create a base method for creating the trigger, just provide the name if (m_alarm == null) { m_alarm = new AlarmConditionState(m_parent); } AlarmConditionState alarm = GetAlarm(); if (Optional) { if (alarm.SuppressedState == null) { alarm.SuppressedState = new TwoStateVariableState(alarm); } if (alarm.OutOfServiceState == null) { alarm.OutOfServiceState = new TwoStateVariableState(alarm); } if (alarm.ShelvingState == null) { alarm.ShelvingState = new ShelvedStateMachineState(alarm); alarm.ShelvingState.Create(SystemContext, null, BrowseNames.ShelvingState, BrowseNames.ShelvingState, false); } if (alarm.MaxTimeShelved == null) { // Off normal does not create MaxTimeShelved. alarm.MaxTimeShelved = new PropertyState <double>(alarm); } } // Call the base class to set parameters base.Initialize(alarmTypeIdentifier, name); alarm.SetActiveState(SystemContext, active: false); alarm.InputNode.Value = new NodeId(m_trigger.NodeId); if (Optional) { alarm.SetSuppressedState(SystemContext, suppressed: false); alarm.SetShelvingState(SystemContext, shelved: false, oneShot: false, shelvingTime: Double.MaxValue); alarm.ShelvingState.LastTransition.Value = new LocalizedText(""); alarm.ShelvingState.LastTransition.Id.Value = 0; alarm.OnShelve = OnShelve; alarm.OnTimedUnshelve = OnTimedUnshelve; alarm.UnshelveTimeUpdateRate = 2000; alarm.MaxTimeShelved.Value = maxTimeShelved; alarm.LatchedState.Value = new LocalizedText(""); alarm.LatchedState.Id.Value = false; } else { alarm.ShelvingState = null; alarm.LatchedState = null; } alarm.AudibleSound = null; alarm.AudibleEnabled = null; }