Issue
In newer versions of XBuilder, when importing I/NET sav files into the project, an attribute called "flags" is included. In an I2V integration, this signal can be used to decode the binary flags associated with an I/NET point.
Product Line
TAC INET, TAC Vista
Environment
XBuilder 5.1.5 and later
Cause
In earlier versions of XBuilder, each binary flag was separated out into an individual signal. These signals include:
- test
- manual
- alarm
- old
- unack
- alarm_ack
Binding each of these values (along with value, state, and/or control) for every point displayed on a graphic could quickly cause the number of bindings to expand to a number that caused performance issues with TGML graphics. To combat this, all of the binary flags were combined into one signal called "flags."
Resolution
The masking for the flags signal comes from the communications format of I/NET:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Test | Alarm | Alm Inh | Unack | Old | Manual | Not Used |
To use these in a TGML graphic, read in the flags signal to a component attribute. Then read the value and mask off the necessary bits:
test = ((flags & 128) == 128);
alarm = ((flags & 64) == 64);
unack = ((flags &16) == 16);
old = ((flags & 😎 == 8);
manual = ((flags & 4) == 4);
Test, Old, and Manual can be used to append the point value with a T, O, or M, respectively to emulate an I/NET environment. Logic will need to be written to read in the alarm and unack signals:
alarm | unack | inhibit | result |
false | false | No alarm condition | |
true | false | false | Alarm is still active, but has been acknowledged |
true | false | true | Input active, but no alarm condition |
false | true | Alarm has cleared, was never acknowledged | |
true | true | Unacknowledged alarm present |