Comparison with AlarmWorX64 Server

This section focuses on the general comparison to ICONICS AlarmWorX64 Server and focuses on the differences in the client AP and how it maps to the Hyper Alarm Server.

General

AlarmWorX64 Server

Hyper Alarm Server

Configuration for multiple servers can be stored in a single database

One configuration database per server

Flat list of alarm sources

Alarm sources initially organized in areas

Alarm sources can be linked to multiple areas

Currently not supported directly. If using AssetWorX integration, it is possible to use the AssetWorX links at the Equipment level to achieve similar functionality.

Templates

Alarm groups and alarm types – similar concept, but different from templates; AssetWorX Equipment Classes

Only real-time data input

Real time and historical data input (e.g. from HH)

RoC not working as people need it to

It is possible to use historical reads (e.g. from HH) to compute a RoC over a specific time period.

Runtime can change configuration database

Currently not supported. There are plans to support configured adjustable set points that behave similarly to cached Equipment Properties from AssetWorX.

Only 20 related values

Unlimited related values

C++/ATL

C# (portable to .NET Core, IoT, containers)

OPC AE

Fwx API (no OPC AE)

Integrated with AssetWorX through the Bulk Asset Configurator

Integrated with AssetWorX natively, Bulk Asset Configurator configures the Hyper Alarm Server through AssetWorX.

AlarmWorX64 Server Area Counters

Under each Area, the AlarmWorX64 exposes a fixed list of counters. Each of them comes in two variants: a recursive one, that includes alarms in the current and in any nested area, and a non-recursive variant. Hyper Alarm Server can define only recursive counters.

 

The following table lists the counters of AlarmWorX64 (only the non-recursive ones for brevity, although these can’t be implemented at all) together with the bits of BaseConditionType.NewState that the counter expression of Hyper Alarm Server needs to check in order to implement the same functionality.

 

The bit checks must not check for an exact match of the NewState field but must only check the bits specified. That means for example that to check for Active,Unacked the expression would look like this: x=({{BaseConditionType.NewState}} & 6) == 2.

 

Also, some of the counters are writable, and writing a zero to them has the effect of acknowledging all alarms under the area (recursively or on a single level) or to cause other state transitions to a set of alarms. This behavior is not supported by the Hyper Alarm Server at all currently.

 

Bits to Check

True/False 1)

Simple Count

Maximum Severity

Acked

X

Area_Acked 2)

X

Unacked

Area_UnAcked

Area_UnAcked_Count

X

Active

Area_Active

Area_Active_Count

Area_MaxSeverity

Clear

X

Area_Clear_Count 3)

Area_MaxSeverity_Clear

Disabled

X

Area_Disabled_Count 4)

X

LatchAck

X

Area_LatchAck_Count

Area_MaxSeverity_LatchAck

LatchUnack

X

Area_LatchUnack_Count

Area_MaxSeverity_LatchUnack

OutOfService

X

Area_OutOfService_Count

Area_MaxSeverity_OutOfService

Shelve

X

Area_Shelve_Count

Area_MaxSeverity_Shelve

Supress

X

Area_Supress_Count

Area_MaxSeverity_Supress

Active,Acked

X

X

Area_MaxSeverity_Ack

Active,Unacked

X

X

Area_MaxSeverity_Alarm

Inactive,Unacked

X

X

Area_MaxSeverity_
NormalAndNotAcked

 

1) Hyper Alarm Server only supports the Simple count and Maximum severity counters. Simple true/false counters that only tell whether there is any alarm that matches the definition are not supported.

2) Area_Acked, Recusive_Acked - Not possible to implement. These counters include alarms in the Inactive Acknowledged state, which aren't trackable by alarm counters.

3) Hyper Alarm Server does not support the Clear state and the associated functionality. The Clear state in AlarmWorX64 Server works similarly to the Latch state defined in ISA 18.2.

4) Area_Disabled_Count, Recursive_Area_Disabled_Count – these counters can’t be implemented, as the Hyper Alarm Server does not work with disabled alarms the same way as the AlarmWorX64 Server does.

5) The table is missing Area_TagInput_Quality, Recursive_Area_TagInput_Quality – these tags are no counters and thus can’t be implemented using the Hyper Alarm Server Counters.

AlarmWorX64 Server Source Real-time Tags

Because each alarm source in AlarmWorX64 is a combination of individual conditions that can activate and clear individually, like the Alarm Limit, Digital, Alarm Deviation and the other, alarm sources expose counters, that tell how many of those conditions are active currently (Active_Count) or inform about the state of individual conditions (LIM_Active, DIG_Active, DEV_Active, …) and also exposes other tags that relate to just a specific condition (LIM_ActiveTime, …).

 

For brevity, this documentation will not list all the tag names, but replace the name of the condition with just condition  and names of sub-conditions with subcondition_. That means that LIM_Active, DIG_Active, DEV_Active will collectively be referred to as condition_Active.

Counters

The Hyper Alarm Server does not combine individual conditions into the same Alarm source and for this reason does not need to and does not support counters on a single Alarm source. Here is an abbreviated list of such counters in AlarmWorX64 Server.

 

AlarmWorX64 Server

Hyper Alarm Server Approximate Equivalent Example

Active

x=({{alms:/Area1.Source1@NewState}} & 1) == 1

Active_Count

The same as Active

Clear_Count

The Clear functionality is not supported. Use Latch instead: x=({{alms:/Area1.Source1@NewState}} & 128) == 128

UnAcked_Count

x=({{alms:/Area1.Source1@NewState}} & 5) == 1

condition_Active

The same as Active

condition_Clear

The same as Clear_Count

condition_LatchAck

x=({{alms:/Area1.Source1@NewState}} & 132) == 132

condition_LatchUnack

x=({{alms:/Area1.Source1@NewState}} & 132) == 128

condition_UnAcked

The same as UnAcked_Count

subcondition_Active

Incorporate the evaluation of the @SubConditionName tag into the expression.

Event Fields

The Hyper Alarm Server exposes all event fields as real-time points, whereas AlarmWorX64 server only exposes this limited subset:

 

Tag Name

Notes

condition_ActiveTime

See next field.

condition_ActiveTimeUTC

Roughly corresponds to the BaseConditionType.ActiveTime (exposed as @ActiveTime) with some differences (the AlarmWorX64 DA tag resets (sets itself to year 1899) when the alarm is not active, while the event field keeps its value when the alarm is not active and not acknowledged.)

condition_Alarm_State

This is similar to the BaseConditionType.NewState, but the meaning of individual bits are different.

condition_Time_In_Alarm

Corresponds to the AlarmWorX64 specific TIME_IN_ALARM Field. It gets filled once the alarm changes to norm or to ack and shows how long it was active. Not supported by the Hyper Alarm Server, the client needs to compute this value as a difference between now and the @ActiveTime point.

condition_Time_To_Respond

Corresponds to the AlarmWorX64 specific TIME_TO_RESPOND Field. It gets filled once the alarm changes to active+ack and shows how long it was not acked. Not supported by the Hyper Alarm Server, but similar information could be extracted as a difference between now and the @AckTime point.

Configuration Tags

These tags expose the configuration of an AlarmWorX64 alarm source. Some of the tags are writable, making it possible to configure AlarmWorX64 from within GraphWorX64 or other clients.

 

The Hyper Alarm Server does not support configuring through its real-time client interface and there are currently no plans. It is still planned to enhance the Hyper Alarm Server with user adjustable set points though, which would work similarly to AssetWorX cached Equipment Properties.

 

These are the configuration tags exposed by AlarmWorX64.

 

Tag name

RO/RW

Notes

AutoAck

RW

Not configurable through Workbench, but seems to be writable through DA.

BaseText

RW

 

Delay

RW

 

HelpText

RO

 

Input1

RO

 

Name

RO

 

Off Delay

RW

 

ReAlarm

RW

 

ReAlarm Time

RW

 

Related Value XX

RW

 

Shelve Time

RW

 

condition_Deadband

RW

 

subcondition_Enabled

RW

0 writes an empty string into the limit field of the sub-condition, 1 writes the original value back

subcondition_Limit

RW

 

subcondition_RequiresAck

RW

 

subcondition_MsgText

RW

 

subcondition_Severity

RW

 

Runtime Control Tags

These are tags that do not fall into any of the other categories.

 

Tag name

RO/RW

Notes

ConfigurationLoaded

RO

No equivalent.

Input_Tag_Quality

RO

No equivalent.

Server Started

RO

No equivalent.

condition_Acked

RW

For reading, this information can be inferred from the @NewState point.
Writing acknowledges the alarm, resets latch or moves the alarm in or out of a suppressed state. This can be accomplished using the corresponding method call.

 

condition_OutOfService

RW

condition_Shelve

RW

condition_Supress

RW

condition_Latch_Reset

RW

  

AlarmWorX64 Server Event Fields

This section describes event fields exposed by the AlarmWorX64 Server Alarms & Events Subscriptions (these fields are called Event Attributes per OPC AE specification).

 

Field Name

Alarm Types

Data Type

Notes

ACK_COMMENT

All

String

Comment from the regular “Acknowledge" operation. Gets reset only when alarm goes from normal to active. Implemented by AlmsBaseType.AckComment

ALARM_COUNT

All

Single

How many times the alarm went normal->active, this counter gets reset by acknowledging. Not implemented by the Hyper Alarm Server

ALARM_STATE

All

Int32

This is similar to the BaseConditionType.NewState, but the meaning of individual bits is different.

AREA

All

String array

Array of areas. Not implemented by the Hyper Alarm Server this way. The BaseEventType.Soruce name identifies the primary location of the alarm, e.g. "/Area1.Source1"

CALCULATED_CURRENT_VALUE

Deviation

Double

Specific to the Deviation alarm, computed as (Data Source) - (Data Source2), updates when the alarm sub-condition changes. 1)

CFS_ASSIGNEDUSER

All

String

 

CFS_COMMENT

All

String

 

CFS_LATCHSTATE

All

Int32

 

CFS_LATCHSTATECOMMENT

All

String

 

CFS_LATCHSTATEUSER

All

String

 

CFS_STATE

All

Int32

 

CLEARED

All

Boolean

(not implemented)

CV

All

Double

Current Value (OPC Input 1 or 2). 1)

DEADBAND

All

Double

Alarm detection Deadband. 1)

DEFAULT_DISPLAY

All

String

1)

DIGITAL_LIMIT_VALUE_EXCEEDED

Digital

Double

Specific to the Digital alarm, contains the threshold value that was exceeded and caused the alarm. This value is kept even when the alarm returns to the normal state and is reset only when the alarm enters the Inactive Acknowledged state. 1)

HELP_TEXT

All

String

1)

LIMIT_VALUE_EXCEEDED

LIM, DEV, ROC, TLA

Double

Contains the threshold value that was exceeded and caused the alarm. This value is kept even when the alarm returns to the normal state and is reset only when the alarm enters the Inactive Acknowledged state. 1)

LOOP_DESC

All

String

Contains the text of the Base Text field. 1)

NEXT_LIM

LIM, DEV, RLM

Double

Contains the HiHi limit, when the alarm is in the Hi sub-condition, and LoLo if in Lo. Keeps its value when transitioning to normal. 1)

NORMAL_STATE

Digital

Boolean

Specific to the Digital alarm, contains the value of the normal state (just true or false). 1)

PREV_LIM

LIM, DEV, RLM

Double

Contains the Hi limit, when the alarm is in the HiHi sub-condition, and Lo if in LoLo. Keeps its value when transitioning to normal. 1)

PREVIOUS_VALUE

TLA

Double

Specific to the Trigger alarm, contains the previous value of the Data Source, updates every time the Data Source changes. This behavior can't be implemented by the Hyper Alarm Server Custom Fields.

PROGRESS

All

String

Comment from the "Report progress" acknowledge type. Not implemented by the Hyper Alarm Server.

RELATED_VALUE_01-20

All

Object

1)

REQUIRES_CLEAR

All

Boolean

1)

RLIM_LIMIT_VALUE_EXCEEDED

RLM

Double

Similar to LIMIT_VALUE_EXCEEDED, but specific to the Rate Limit alarms. 1)

SP

Deviation

Double

Specific to the Deviation alarm, contains the value of Data Source 2, updates when the alarm sub-condition changes. 1)

TIME_IN_ALARM

All

Double

Gets filled once the alarm changes to norm or to ack and shows how long it was active. Not supported by the Hyper Alarm Server, the client needs to compute this value as a difference between now and the BaseConditionType.ActiveTime field.

TIME_TO_RESPOND

All

Double

Gets filled once the alarm changes to active+ack and shows how long it was not acked. Not supported by the Hyper Alarm Server, but similar information could be extracted as a difference between now and the AlmsBaseType.AckTime field.

 

1) These fields can be fully or at least sufficiently replaced by Custom Fields in the Hyper Alarm Server.

 

See Also:

Client Access

About Hyper Alarm Server