# Perspective UDT Alarm Issue - Quality Binding

**URL:** <https://forum.inductiveautomation.com/t/perspective-udt-alarm-issue-quality-binding/104864>\
**Category:** Ignition\
**Tags:** perspective\
**Created:** [April 8, 2025, 7:46pm UTC](https://forum.inductiveautomation.com/t/perspective-udt-alarm-issue-quality-binding/104864 "2025-04-08T19:46:58Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![isaac.j.hendrickson](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/isaac.j.hendrickson/32/74804_2.png) [@isaac.j.hendrickson](https://forum.inductiveautomation.com/u/isaac.j.hendrickson)\
**Post date:** [April 8, 2025, 7:46pm UTC](https://forum.inductiveautomation.com/t/perspective-udt-alarm-issue-quality-binding/104864/1 "2025-04-08T19:46:58Z")

</div>

I am attempting to create a quality-based alarm on a tag within a UDT, and I'm running into some unexpected behavior.

Background info: the UDT is basically serves to pull the same value (boolean) from two different sources, and there is an expression-driven tag within the UDT for calculating the result. If the two sources disagree, that value is set to "Bad" quality using the QualifiedValue function. If there's no valid data from either source, the value is set to "Uncertain" value.

I want an alarm on the result tag that will activate when the quality is Bad, but not when it is Uncertain. I have tried both the "Bad Quality" mode as well as the "On Condition" mode for the alarm, and cannot get it to produce the desired behavior.

"Bad Quality" mode appears to activate even when the quality is "Uncertain".

I thought that the "On Condition" mode would work using the expression function `isBad({[.]<tag name>})` for the "Is Active" property, but this doesn't work. The alarm never activates. Likewise for the `isUncertain()` function. The `isGood()` function _always_ activates the alarm. Maybe I'm doing something wrong, but it seems like the binding behavior is not working properly on the "Is Active" property of the alarm.

These bindings _do_ appear to work in other fields of the Alarm. For example I used them in the binding for "Label" and they are calculated and displayed correctly. But I can't get it to work in the "Is Active" property.

Any help would be appreciated.

---

<div class="post-metadata">

**Author:** ![amarks](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amarks/32/45610_2.png) [@amarks](https://forum.inductiveautomation.com/u/amarks)\
**Post date:** [April 8, 2025, 9:05pm UTC](https://forum.inductiveautomation.com/t/perspective-udt-alarm-issue-quality-binding/104864/2 "2025-04-08T21:05:07Z")

</div>

The alarm never activated because the quality is not bad. The way you describe it, the quality of tag 1 and tag 2 are both Good and then you could use an expression tag to create a 3rd tag. IMO this has nothing to do with the tag quality property.

---

<div class="post-metadata">

**Author:** ![isaac.j.hendrickson](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/isaac.j.hendrickson/32/74804_2.png) [@isaac.j.hendrickson](https://forum.inductiveautomation.com/u/isaac.j.hendrickson)\
**Post date:** [April 8, 2025, 9:42pm UTC](https://forum.inductiveautomation.com/t/perspective-udt-alarm-issue-quality-binding/104864/3 "2025-04-08T21:42:48Z")

</div>

That's exactly what I'm doing, within the UDT **Tag 1** and **Tag 2** are pulled from actual data sources, **Tag 3** is an expression tag derived from 1 & 2. I am trying to set up the alarm on Tag 3 based on its quality, but it just doesn't work.

I have an alarm on **Tag 3** set to "On Condition" mode, with the "Is Active" field bound  
using the expression `isBad({[.]Tag 3})`. I can see in the tag browser that within the UDT instance, **Tag 3** is bad quality, but the alarm still doesn't activate.

But I've been doing some testing, it seems like the alarms are just not evaluated at all when the tag quality is not "Good" (other than maybe the _Bad Quality_ mode). I tested this by just linking the alarm on **Tag 3** to a generic memory tag that I can toggle at will. This works fine when **Tag 3** is Good quality, but the alarm doesn't work at all when the tag quality is Bad or Uncertain.

The only other way I can think of doing this is to add a fourth tag within the UDT, set **Tag 4** to be an expression tag based on the quality of **Tag 3** , and then create an alarm on **Tag 4** based on its value. I think this will work, but it seems like a waste.

---

<div class="post-metadata">

**Author:** ![amarks](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/amarks/32/45610_2.png) [@amarks](https://forum.inductiveautomation.com/u/amarks)\
**Post date:** [April 8, 2025, 9:44pm UTC](https://forum.inductiveautomation.com/t/perspective-udt-alarm-issue-quality-binding/104864/4 "2025-04-08T21:44:22Z")

</div>

Don't do it based on the quality. You want the expression to be

pseudo-expression:

```python
{tag1} != {tag2}
OR
isBad({tag1})
OR
isBad({tag2})

```

Then alarm on value of 1. The quality is good weather the value is 1 or 0
