Triggering Alarms using Alarm Expressions
I have a pump object with 9 bool alarms that are handled in the AC800M controller and sent to Compact HMI via an AlarmWord. Each bit of the word is an alarm. In my first attempt: I added an alarm expression aspect under the object structure, under the pump object. I created 9 expressions within this aspect, each with the $'[Object Structure]Object Type/Pump/AlarmWord & 1 > 0 expression, with 1,2,4,8,16,etc. I then linked the controller AlarmWord to the pump instance AlarmWord variable under the control structure. This didn't work.
Second Attempt: I created the Alarm Expression directly in the control structure with the 9 expressions, all separate messages. This worked, except when one alarm was triggered, all 9 were triggered simultaneously. Creating a second Alarm Expression2 with only one of the expressions i.e. $'[Object Structure]Object Type/Pump.AlarmWord & 16 > 0, and keeping the others in the original Alarm Expression resulted in the same behavior (all tripped simultaneously).
My goal is to have only the triggered alarm show up in the alarm list when tripped, and ideally to be able to set up the Alarm Expression in an object rather than an instance. Is this possible, and if so how? And can I enter multiple expressions into one Alarm Expression aspect, or should each alarm be separate? Any idea why all alarms are being tripped at once? Thanks!
Second Attempt: I created the Alarm Expression directly in the control structure with the 9 expressions, all separate messages. This worked, except when one alarm was triggered, all 9 were triggered simultaneously. Creating a second Alarm Expression2 with only one of the expressions i.e. $'[Object Structure]Object Type/Pump.AlarmWord & 16 > 0, and keeping the others in the original Alarm Expression resulted in the same behavior (all tripped simultaneously).
My goal is to have only the triggered alarm show up in the alarm list when tripped, and ideally to be able to set up the Alarm Expression in an object rather than an instance. Is this possible, and if so how? And can I enter multiple expressions into one Alarm Expression aspect, or should each alarm be separate? Any idea why all alarms are being tripped at once? Thanks!
Answers
> " I usually bring alarm bits and alarm acknowledge bits as words into the HMI for this reason, is it possible to use AlarmCondBasic with bits in a word?"
800xA Alarm handling is fundamentally different to the "bit handling" you are used to in PLC Systems. You do *NOT* do this.
800xA Alarms belong to the *object* that creates them - ie the object that owns the AlarmCond function block. This is defined by the "Alarm Owner" property. So if your Pump is the Alarm Owner, then the Pump owns the alarm and all acknowledgements, auditing, tracing, history etc are connected to the pump. You can trace from any alarm direct to the object that raises the alarm using the right mouse button.
There is no effect on signal count. ( In fact it is lower because you do not need individual boolean objects. ) One object = one tag with as many "AlarmCond" functions and alarms as you need for that object. To create 9 possible Alarms connected to the bits in a Word, you create 9 AlarmConds in the Pump object. If you don't want to create that many AlarmConds then you can instead use one AlarmCond and multiplex the message strings that are used.
800xA Alarm handling is fundamentally different to the "bit handling" you are used to in PLC Systems. You do *NOT* do this.
800xA Alarms belong to the *object* that creates them - ie the object that owns the AlarmCond function block. This is defined by the "Alarm Owner" property. So if your Pump is the Alarm Owner, then the Pump owns the alarm and all acknowledgements, auditing, tracing, history etc are connected to the pump. You can trace from any alarm direct to the object that raises the alarm using the right mouse button.
There is no effect on signal count. ( In fact it is lower because you do not need individual boolean objects. ) One object = one tag with as many "AlarmCond" functions and alarms as you need for that object. To create 9 possible Alarms connected to the bits in a Word, you create 9 AlarmConds in the Pump object. If you don't want to create that many AlarmConds then you can instead use one AlarmCond and multiplex the message strings that are used.
by Stefan Stromqvist
Why not create the alarm in the controller using a SignalLib.AlarmCond block and pick it up to the HMI via OPC AE and an EventCollector?
Expressions add overhead, has poor timestamps and are less reliable and, really, your last resort?
by User72619 Rank: 1241 on 2/9/2021 10:21:28 AM | Like (0) | Report
Interesting. In every other system I've worked with, alarming is typically done in the HMI. I can do it in the PLC with A&E, but our signal count is limited with the licenses we have as this is a small R&D system. I usually bring alarm bits and alarm acknowledge bits as words into the HMI for this reason, is it possible to use AlarmCondBasic with bits in a word? Or would I have to use bits, and have every alarm then be counted as a separate signal for license purposes? Or are alarms even counted at all as signals for license purposes?
Thanks!
by Stefan Stromqvist
I'm of the opposite opinon - in professional systems, alarms are made by the PLC and time stamped by the PLC.
As far as I can tell, there is no penalty for using AlarmCond and SimpleEventDetector in the AC 800M application, except for added memory usage.
AlarmCond will give you very good time quality, down to milliseconds (depending on task execution settings of course).
AlarmCond wlll buffer alarms in the PLC and OPC Server in case the HMI is offline or not healthy.
I'm sure you can mask bits out of a word and use to drive the Signal (boolean) property input to these blocks producing A&E.
On the other hand, Alarm Expressions are fed via OPC DA which in turn is fed by cyclic MMS transactions, day out day in, even if no alarm is raised.
The MMS data rate is 500ms. The OPC update date is 1000ms. In worst case your expressions will fire over a second later than the bit is set in the controller application. If the communication is interrupted or the system is offline (reboot, power outage, maintenance reboot, etc.) no detections are possible. Once everything is up and running, there might not be any indication at all that an alarm was missed.
Every alarm expression have supervision that will trigger "Bad quality" alarms whenever your PLC goes offline, is coldstarted and sometimes even during warmstart (if change is large and Stop Time exceed the OPC server's maximum allowed time without getting MMS transactions through).
Alarm Expressions are also called SoftAlarms; a depicting description. They are your last resort, e.g if the PLC is incapable of creating alarms or if logic is not possible to implement in the PLC (e.g. if it involves more than one brand of PLCs and they are unable to exchange traffic between themselves)
by User72619 Rank: 1241 on 2/10/2021 12:31:33 AM | Like (0) | Report
Thank you for this very informative response. As mentioned below, I have more experience with PLCs than DCS so this method of alarm handling is still a little foreign to me, but your description helps clear it up. I'll move everything to using AlarmCond then and import them via OPC A&E.
Add new comment