Alarming & Alarm Management Quick Start

This Alarming & Alarm Management quick start guide is the third in the series of Adroit Smart SCADA quick start guides. It follows on from Quick Start Guide 1– the initial Adroit Smart SCADA Quick Start Guide, and Quick Start Guide 2 – Logging & Trending. These two are essential pre-requisites to this guide. As with other quick start guides, it is not a substitute for the training material or in-built help but rather an additional resource to these

We start with the dynamically changing tags we created in the previous quick start, and configure these for alarming. We do this by alarming the sine Expression agent directly, but for the Timer and Integer agents we connect them to Digital and Analog agents respectively, and make use of the in-built alarming capability of these two agent types

Next, we introduce the concept of project navigation templates that are available in Smart UI, and thereby visualize and acknowledge alarms as they are raised and cleared

We then create an EEMUA 191 Alarm Management database using SQL Server Management Studio, and populate it from an Alarm Management agent that we create for this purpose

Next, wecategorizeandanalyseincidents recorded in the EEMUA 191 database by viewing various graphs that are automatically available in the Alarm Management agent, and also by doing some ad-hoc queries on the EEMUA 191 database in SQL Server Management studio

Finally, we make use of the new Historical Alarm Viewer control to view and othewise process historical alarms in the database

Configuring Tag Alarming

In order to gain an understanding of alarming in Adroit we need to know a bit about agent status bits:

From the main Configurator window - once you have run up the Adroit project created as part of Quick Start Guides 1 & 2 – select the EXPR_01 Sine Expression agent and click the Header button just below the Edit button on the right

This will display the agent’s header dialog as shown alongside. A major part of every agent’s header are 32 status bits, of which half are common to all agent types and half are agent-specific. In the screenshot, our SINE Expression’s agent-specific status bits are highlighted

These agent-specific bits are used to hold details of the agent’s current state. For an Expression, as you can see, these are states like Equal to zero, Less than zero, Greater than zero, etc.

For other agent types, e.g. Analog and Digital the meaning of the agent specific status bits are different, as you can see on the following two screen-shots. Analog agents monitor conditions like Low, High, Rate-of-change, etc. while Digital agents monitor On, Off, etc.

The fact that different agents in Adroit maintain detailed information about their current state in a standardized way like this has been of huge benefit in implementing the alarming sub-system. All the alarm sub-system needs to do at the most fundamental level is monitor different agent status words in a bitwise fashion and raise or clear alarms based on status bit(s) being set and reset by the agents themselves. The real beauty of this approach is that new, as yet unthought-of agent types can be implemented, either by Adroit developers or OEMs and high-end System Integrators, which integrate seamlessly with the alarming sub-system. In fact, over the years, newly-arriving agent types such as, for example, OEE and SNMP have been able to seamlessly leverage alarming functionality in this way

Expression agent alarming

We’ll begin by alarming our Sine expression agent, EXPR_01:

Start by selecting Expression EXPR_01 in the main configurator window and click the Alarm button fourth from bottom on the right. You should see a dialog something like the one alongside

To get a periodic alarm form our sine Expression, we can alarm its LTZero status bit as shown by selecting LTZero and moving it across from the list of Available alarm types to Current alarm types either by double-clicking or clicking the left-pointing chevron button, as highlighted

The effect of this should be that EXPR_01 will be in alarm half of the time - while its value is less than zero, and out of alarm half of the time – while it’s value is greater than zero

Select route 3, as this will avoid an annoying audible beeping sound whenever an alarm is raised

After clicking OK we should be able to see EXPR_01 periodically going in and out of alarm once we display a Smart UI Alarm Viewer control. But first, we’ll configure some more alarms

Timer agent alarming

Unlike Expressions, Timer agents do not have status bits that change as the timer switches on and off. But Digital agents do, so we are going to replicate TIMER_01’s value in a Digital agent. There are several ways of achieving this in Adroit, but probably the easiest is to create a simple pass-through expression that connects one tag to another

Start by creating a Digital called, say TIMER_ALARM, with suitable description, and an expression called, say CONNECT_TIMER_ALARM, as shown in the screenshots:

To connect TIMER_01 to TIMER_ALARM, all we need do is make a dummy, pass-through expression that takes TIMER_01.value as input v01 and without any logic or maths evaluates simply v01, or v1, as the result. Setting the destination tag, TIMER_ALARM.value, into the Value field while Display is set to Names has the effect of poking the expression’s value into the destination tag every time the expression changes

Finally, to make sure this happens every time the input TIMER_01.value changes, we need to set Evaluation to Continuous This is all shown in the right-hand screenshot above

Now, to create an alarm every time TIMER_01 is in the Mark state, all we need do is alarm the TIMER_ALARM Digital, as shown in the screenshot alongside, i.e. we select alarm type On and route number 3 as we did when previously alarming EXPR_01 sine expression

Click OK, and once again we should be able to see TIMER_01 periodically going in and out of alarm once we display a Smart UI Alarm Viewer control

Integer agent alarming

Just like Timers, Integer agents do not, in general, drive their status bits in a way that is suitable for our purposes in this Alarming Quick Start. But Analog agents have comprehensive alarming functionality that we can make use of. So, we need to connect our randomly changing INTEGER_01 to say, Analog RANDOM_ALARM, by creating a CONNECT_RANDOM_ALARM pass-through expression in the same way that we previously did to connect TIMER_01 to TIMER_ALARM:

In alarming RANDOM_ALARM Analog, we will make use of four of the in-built Analog alarm types: High, High-high, Low, and Low-low. In order to do this, we need to specify suitable threshold values for these alarm limits, after first matching the Device and Engineering spans, 0 – 100, to randomly changing INTEGER_01

Choose say, 90 as the outer high alarm limit, High-high and say, 75 as the inner high alarm limit, High. Similarly, choose, say 25 as the inner low alarm limit, Low and say, 10 as the outer low alarm limit, Low-low

This is all shown in the screenshot directly below:

As shown in the screenshot to the right, when alarming the RANDOM_ALARM Analog, we select the four relevant alarm types from the list of available alarm types, instead of just a single alarm type as we have done up to now. This means RANDOM_ALARM Analog will be monitored for all of the four alarm limits we have configured

Finally, for the outer alarm limits High-high and Low-low, select priority Highest instead of the default priority Normal. This is because breaching an outer limit is generally a higher priority alarm than breaching an inner limit, which is often just a warning level

Click OK, and we should now be able to see all the alarms we have configured being raised and cleared, on a Smart UI Alarm Viewer control which will be described in the next section

Viewing Alarms

In order to view alarms we need to create a graphic form in Smart UI that contains an AlarmViewer control. Fortunately, there are a set of project Navigation Templates that ship as part of the Adroit Smart UI installation. These contain suitable alarm viewer controls, so we will make use of them. Notwithstanding this, it is a good idea to understand how to use the navigation templates, as they provide a consistent look-and-feel and, and are an effective and productive way of deploying graphic forms

Start in Enterprise Manager to the left of the Smart UI Designer workspace

There you will see a number of navigation template projects under the Projects tree-node. Open up the Navigation Template Buttons Left and Top project and right-click the Project_Navigation_Template form. This will cause a context menu to be displayed as in the screenshot alongside

Copy, and then Paste this form onto your Quick Start project so that it appears under the project sub-tree as shown

On opening, the form should look something like the screenshot below, with an AlarmViewer control visible at the bottom of the screen with white background:

Before using this form we will modify it in order to make it more suitable for this quick start:

To get our modified project navigation template to display automatically when Smart UI Operator logs in, we need to modify the Default Profile. So, in Enterprise Manager, open up the Management sub-tree. Double-click the Default profile and modify Operator Settings, DefaultGraphicFormPath to be our modified project navigation template form as shown:

After this, start up Smart UI Operator, and you should see something like the screenshot below with a clock and project navigation buttons to the left, a TGO container for forms to the right, and an alarm viewer control at the bottom showing tags going in and out of alarm as their values change:

The background and text colours in an alarm viewer control are configurable. By default, a red background means the alarm is active, i.e. raised, whereas a green background means the alarm has cleared. As for text colour, yellow text means the alarm is unacknowledged, and white text means the alarm has been acknowledged

You can interact, by clicking the Form_01 and Form_02 buttons which should bring up Form_01 and Form_02 from the earlier quick start guides. Clicking Home should bring you back to the starting form which we have configured to be Form_03. You can also acknowledge alarms by selecting them in the alarm viewer and clicking the Reasons and Notes and/or Acknowledge buttons bottom right. I’d suggest you do this repeatedly for several different alarms, as these actions should show up later after we have set up some EEMUA 191 Alarm Management

Configuring EEMUA 191 Alarm Management

First, we need to create a database for use by Adroit Alarm Management. This we do by running SQL Server Management Studio, as per the previous Logging & Trending QuickStart. This time, after connecting Management Studio to the database engine, create another database called say, AdroitEEMUA191 that sits alongside your previously created AdroitLogging database, as shown in the screenshot

Next, create an AlarmManagement agent called, say AM, from the configurator main window

Note: before being able to create an AlarmManagement agent, you will need to tick the Advanced check-box on the main Configurator form. This enables you to see the more advanced agent types which, in the interests of simplicity, are not visible to you by default

On editing agent AM, you should see a dialog something like:

If you are running Adroit in unlicenced demo mode, you will see a message about this as highlighted above. To get alarm management to operate correctly, at least for an hour, you will need to disable the Historical alarm mode check-box, as shown. This may also mean you need to restart the agent server which you can do after making sure you have saved all the configuration work done so far by clicking File/Save on the main configurator window

The next step is to connect alarm management to the AdroitEEMUA191 database created earlier. This you do by clicking the ellipsis[…] button to the right of the Connection field, which will bring up the same Microsoft Data Link Properties dialogs we saw previously in the Logging & Trending QuickStart. This time, instead of the AdroitLogging database, connect to the AdroitEEMUA191 database, which should result in a Connection String as shown, being filled in to the Connection edit field

Start alarm management by checking the Start Alarm Management agent check-box, and then click OK to exit out of the Edit Alarm Management agent dialog

Next, go back to SQL Server Managament Studio, and have a look at the Tables tree under the AdroitEEMUA191 database

You should see a whole bunch of tables named in the format Adr_XX_..... where XX is the name chosen for the alarm management agent, AM, in our case

In order for alarm management to start accumulating alarm statistics, and populating these tables, you need to route alarm events through to the AM AlarmManagement agent. This you do by selecting the Alarm agent called defaultAlarmAgent and Editing it from the main configurator window

Select the previously selected Alarm Route number 3 from the pull-down on the Routes tab, as shown

Then click the Add an entry button, and select AM from the AlarmManagement tree, as shown in the screenshot alongside

Dismiss the Edit Alarm Agent: defaultAlarmAgent dialog, and go back to SQL Server Management Studio

Right-click on the Adr_AM_CurrenIncidents table and choose Select Top 1000 Rows from the context menu

You should see a whole lot of different alarm occurrences for the different types of alarms we have configured, as shown in the screenshot below:

The next step is to categorize these incidents so that they can be analysed more easily. We will cover this in the next section.

Categorizing Alarm Management Incidents

First we need to define what is meant by Incidents. In the context of Adroit, this EEMUA term means that an agent configured for alarming, i.e. by monitoring one or more of its status bits as we learned about earlier in this quick start, has in fact gone into alarm and this occurrence has been picked up by an AlarmManagement agent. Incidents are considered to be either be events which require no further action, or alarms which do require action in the form of acknowledgement

Before any Alarm Management categorization is done, all incidents are assigned to the _Uncategorised category as shown in the screenshot alongside

In the screenshot, which is displayed when editing the AlarmManagement agent from the main configurator window, you can see that we have renamed the Root category QuickStart. To do this, right-click the globe icon and select Rename category from the context menu. In reality, you would call the root category the name of your plant or project – QuickStart in our case

Next, with knowledge of our plant we create some sub-categories: Random, Sine, and Timer in our case, as these are the different kinds of alarms that can occur in our very simple set up

The default _Uncategorised category can neither be renamed, nor removed. This is because in a real system it is a catch-all for incidents that have not been anticipated. The more uncategorized incidents you end up with, the less well-tuned is your alarm system. Initially, a new system will be completely un-tuned with all incidents being uncategorized

Clicking the Learn alarms, or Learn events button populates the Incidents list-box, and initially all incidents are uncategorised

The way to categorize incidents is to drag them across right-to-left from the Incidents box to the relevant category you have created in the Categories box on the left. For example EXPR_01 incidents are dragged into the Sine category, TIMER_ALARM incidents are dragged into the Timer category, and RANDOM_ALARM incidents are dragged into the Random category

The two screenshots below show Sine category incidents and Random category incidents:

In the right-hand side screenshot, showing the Random category incidents, you can see that we have stipulated that High-high incidents require a Reason to be given, and Low-low incidents require Notes to be provided before the incident can be categorized as historical rather than current. All other incidents just require acknowledging. This can be seen in the colouring of incident icons

Analysing Alarm Management Incidents

There are several queries built right into Alarm Management that can be used to analyse incidents. We will illustrate a few here

First we’ll have a look at Most frequent alarms. From the AM agent configuration dialog, click the View graph button, and select Most frequent alarms (count by type) from the Query pull-down. You should see something like the screenshot below:

Tip: If you don’t see anything, click the Constraints button, top-right of the graph above the legend area, and make sure the end time is set to current time by clicking the Now button. Otherwise you may be querying a time in the past when no alarms were occurring.

If you are still seeing empty graphs, then you probably are not generating any Historical Incidents due to not Acknowledging and/or providing Alarm Reasons/Notes. An easy way to get around this is go back to your alarm configuration and remove the requirement to Acknowledge the alarm(s), as shown alongside

Something else to bear in mind is with an unlicensed system running in demo mode, Alarm Management only operates for an hour at a time. So you may need to stop and restart the agent server, after first making sure your latest configuration changes have been saved

By setting Auto-refresh (just above the graph itself) to something other than 0 seconds, you can get this graph to dynamically update thereby giving you a real-time chart of the most frequent alarms

Finally, you can also export a graph in JPG format by clicking the Export button in which case a JPG file will be saved at C:\Users\YourUserName\AppData\Local\Temp

A similar result can be seen by clicking the View data button on the AM configuration dialog

In this case the data is presented in tabular form, as shown in the screenshot alongside

Another useful graph is Priority Distribution shown below. Because we have the Random High-high and Low-low alarms set at Priority 4 Highest and the other alarms set at Priority 2 Normal there are fewer Priority 4 alarms compared to Priority 2 alarms as the graph shows:

The text at the very bottom of each graph or tabular display, starting SELECT… is the actual SQL Query that runs against the EEMUA 191 database, and can be seen with SQL Server Management Studio in the EEMUA database UserQueries table, as shown below:

In fact, if you are knowledgeable enough about SQL, you can add to and/or modify the UserQueries table for yourself creating your own custom queries, but it is probably more effective to install the Adroit Report Suite product that ships as part of the full Adroit Smart SCADA .iso image. Report Suite contains several Report Packs one of which is designed specifically for reporting on Alarm Management databases

Historical Alarm Viewer Control

A new Historical Alarm Viewer control allows you to view, locate, filter, print and export historical Adroit alarms, that are stored in the Alarm Management agent database.

As shown, it is located in the Toolbox, left pane of the Designer workspace, along with the existing Alarm and Event viewer controls. If you have upgraded from an earlier version of Adroit, you may need to right-click in this pane and select Add Controls from the context menu in order to see this new control

So, open Form_03 and add one of these controls just below the line chart control. This will pop up a Configuration dialog as shown below, from which you can create a new connection to the existing Alarm Management agent’s database. Select Refresh Mode Auto

After deselecting some of the columns like Description, Acknowledged By, Shift, and Priority that are not so important for this exercise, the result in Smart UI Operator should be something like the screen shot below, showing, amongst other things, times the different alarms were active for. Unacknowledged times are zero because the alarms have been configured not to require acknowledgement which in reality would probably not be the case


Please email any feedback or suggested improvements to

Get Adroit