I would like to have a way of knowing if any PLC tag in a particular process area has an active alarm so that I can show in the HMI which areas have or do not have an active alarm. This could be used in a process overview display to show several process areas, and those with active alarms could have blinking red or something like that.
I think I would have to make use of the system.alarm.queryStatus function in a Python script. If tags for each process area are in separate folders, I could use this to return alarms in the specified folder.
By the way, I have a Rockwell AOI called NewAlarm that does the PLC implementation of this; it is on my resource page https://dpas-inc.com/resources. However, there are times when circumstances make the SCADA solution the required or best approach
Sorry, I should have mentioned that the script library should be put into the project that is set to your gateway’s scripting project (if you’re upgrading from v7 then that’s your “global” project). Also, you can always double click on the alarm summary tag to edit it, then go to the diagnostics tab to check more details in the error. It’ll probably say something like “shared” scripting library doesn’t have element “alarms”
D’oh, one last thing: I have a custom tag group for those two expression tags called “Area Alarms”
That’s one of the issues with posting something from a project which has multiple dependencies… I’ve updated my original post with these dependencies as well
I store the names of devices (plcs) in there for more of the general areas (ie for area alarms instances in each area folder 1 level from the root) and use the list to write to the general alarm reset tag in each of those plcs. E.g. In all of our plcs we have a tag: HMI.AlarmResetPB which will reset all alarms in the PLC.
Worth mentioning that I’ve actually moved to a slightly different method of doing this now. It’s still fine if you’ve only got a few of these area alarms instances, but I was getting up to 60+ and my tag expressions threads were using about 7.5% CPU which I wanted to reduce. Nowadays I only call the alarm query status function once at the root level which stores the dictionary of all alarms inside a library variable. Then in all of the sub folder levels, I filter on the library variable and collect the alarms that way
I know this thread is old but wanted to jump in and say thanks for sharing the script, sir. I’m new to scripting and this was a huge help with trying to accomplish the same thing.