Alarm Status Table Filtering

Hi.

I am trying to filter the Alarm Status Table on a Sensor object popup window that I have. I want to filter by the particular Sensor that is selected. I have been able to filter on the Source Filter using * Sensor * and then the Display Path Filter (Expression binding) using both:

  • *{Root Container.Sensor.sensorUDT::Name} *
  • {Root Container.Sensor.sensorUDT::Name} *

(I have omitted the double quotes above but have used them in my Expression.)

My problem is that for Sensor 1, Sensor 1 and Sensor 10, alarms are displayed. This makes sense with the wildcard character tacked onto the end.

Based upon what I found in the Ignition Manual, I should be able to filter on the Display Path using:

  • *{Root Container.Sensor.sensorUDT::Name}

and my problem should be solved. However, I am met with a blank Alarm Status Table whenever I try that.

I have perused the Forum and tried to use posted workarounds to no avail. Am unsure if there is something small I am missing or if I need to completely reconfigure my approach.

Any help is greatly appreciated.

1 Like

The problem is that the source includes additional information in the path.

Example: prov:Sample_Tags:/tag:Ramp/Ramp1:/alm:High Alarm

To correct for this simply nest a : between the end of your string path and your final "*"

Your resultant expression should look like this:
concat("*",{Root Container.Sensor.sensorUDT::Name},":","*")

When I do that my Display Path Filter shows this:
image

And my Alarm Status Table is blank.

The colon should be applied to the source filter not the display path filter

Using that same expression in the Source Filter, my result is still an empty table.

Make sure you delete that path filter binding

I'll try to offer a more thorough understanding to help you solve the problem.

If you right click on the alarm status table and open component scripting, you can get the same result as a source filter binding using the filterAlarm extension function, but for our purposes, we can use it to expand our understanding of what's actually being filtered by the Source Filter.

Launch a diagnostic console, and put the following code into the extension function. The console will then continuously print out the alarm sources. That will show you what you are trying to filter using your source filter binding, and hopefully, it will help you to compose an appropriate expression to get the result you want. Just remember to disable the script at some point because it will continuously fill your console with unneeded information.

print alarmEvent.get("Source")
return True

Using the alarmEvent.get() you can probe this further if you want to. It is possible to get any Alarm Runtime Property listed in this resource:
Alarm Event Properties Reference

Edit: I set up an Alarm Status Table to generate a sample Source Output.
This is what the preceding code will generate:

prov:Sample_Tags:/tag:Writeable/WriteableInteger10:/alm:Alarm
prov:Sample_Tags:/tag:Ramp/Ramp10:/alm:High Alarm
prov:Sample_Tags:/tag:Ramp/Ramp1:/alm:High Alarm
prov:Sample_Tags:/tag:Writeable/WriteableInteger10:/alm:Alarm 2
prov:Sample_Tags:/tag:Writeable/WriteableInteger10:/alm:Alarm 1
prov:Sample_Tags:/tag:Writeable/WriteableInteger2:/alm:Lo
prov:Sample_Tags:/tag:Writeable/WriteableInteger1:/alm:Lo
prov:Sample_Tags:/tag:Ramp/Ramp10:/alm:High Alarm
prov:Sample_Tags:/tag:Ramp/Ramp10:/alm:High Alarm
prov:Sample_Tags:/tag:Ramp/Ramp1:/alm:High Alarm

Notice there is a tag named Ramp1 and Ramp10. If I confugure my Source Filter expression in such a way that my source filter is *Ramp1:*, then my result is only Ramp1 alarms.
image

image

1 Like

I'm not understanding you. :confused: I have no extension function when launching a diagnostic console? I am able to configure my Source Filter to show one particular alarm (out of three) that I have, but that's it.

I'm still not able to concat() or toString() my way to any solution using either the Source Filter or Display Path Filter, save for my original method that only works for Sensors 2 through 10.

No worries. I'll try to be more detailed.

Expression Bindings: As depicted in your very first post, you were doing an expression binding that was binding the Source Filter property to a sensor name. I used concat to concatenate the string values, but you simply used + symbols to do it which should work fine. With the colon, your Source Filter expression would look like this:
"*" + however you are getting your sensor name + ":" + "*"
In your case, if Sensor1 is selected, your Source Filter property should display *Sensor1:*

The following actions were just an effort to show what the Source Filter is actually filtering. There's a lot of information contained in the "Source." The source includes the entire tag path, the triggered alarm path, and the alarm condition.

If you want to explore that, here are more detailed instructions:
Accessing Extension Functions: Right click on the alarm status table snd click scripting in the popup menu. The extension functions will be on the left side of the scripting window that appears. Once a function is selected, a script can be entered into the script tab at the top.

To see scripting outputs Click Help at the top of the designer, and select diagnostic. Then select the console tab. Alternatively, you can click tools-->console.

1 Like

Edit: I misunderstood how you were getting your name into the source filter parameter. However you're doing that, nest it in the manner depicted above, and you will get the result you want.

I have tried your method for the Source Filter, Display Path Filter, a combination of the two and am still left with an empty Alarm Status Table in my popups.


My Source Filter displays:
image

My original method works for Sensors 2 through 10 perfectly--showing only the clicked Sensor's alarms in the popup; it's only Sensor 1 displaying more than its own alarms when clicked.

I figured it out.
"*" + {Root Container.Sensor.sensorUDT::Name} + " *"

3 Likes