public ServiceResult OnEnableDisableAlarm( ISystemContext context, ConditionState condition, bool enabling) { StatusCode status = StatusCodes.Good; ConditionState alarm = GetAlarm(); if (enabling != alarm.EnabledState.Id.Value) { alarm.SetEnableState(SystemContext, enabling); alarm.Message.Value = enabling ? "Enabling" : "Disabling" + " alarm " + MapName; // if disabled, it will not fire ReportEvent(); } else { if (enabling) { status = StatusCodes.BadConditionAlreadyEnabled; } else { status = StatusCodes.BadConditionAlreadyDisabled; } } return(status); }
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 new void Initialize( uint alarmTypeIdentifier, string name) { if (m_alarm == null) { // this is invalid m_alarm = new ConditionState(m_parent); } ConditionState alarm = GetAlarm(); // Call the base class to set parameters base.Initialize(alarmTypeIdentifier, name); // Set all ConditionType Parameters alarm.ClientUserId.Value = "Anonymous"; alarm.ConditionClassId.Value = m_alarmConditionType.Node; alarm.ConditionClassName.Value = new LocalizedText("", m_alarmConditionType.ConditionName); alarm.ConditionName.Value = m_alarmRootName; Utils.LogTrace("Alarm ConditionName = {0}", alarm.ConditionName.Value); alarm.BranchId.Value = new NodeId(); alarm.Retain.Value = false; alarm.SetEnableState(SystemContext, true); alarm.Quality.Value = Opc.Ua.StatusCodes.Good; alarm.LastSeverity.Value = AlarmDefines.INACTIVE_SEVERITY; alarm.Severity.Value = AlarmDefines.INACTIVE_SEVERITY; alarm.Comment.Value = new LocalizedText("en", ""); // Set Method Handlers alarm.OnEnableDisable = OnEnableDisableAlarm; alarm.OnAddComment = OnAddComment; alarm.ConditionSubClassId = null; alarm.ConditionSubClassName = null; }