Why can't I have a BACnet alarm trigger directly on a variable from a Function Block Program?
StruxureWare Building Operation
StruxureWare Building Operation does not have the possibility for a BACnet alarm to monitor directly a variable from a Function Block Program. The problem with doing this is that a Function Block Program is not a BACnet visible object (a BACnet client cannot see it, even as a proprietary object type), and we do not see any provision in the BACnet standard for an alarm object to reference something not visible to BACnet.
The workaround is to create a BACnet point (a BACnet Value object would make the most sense), and bind it to the Function Block Program variable.
There is however an option which may avoid "double" work. In StruxureWare Building Operation we have implemented intrinsic alarming on the BACnet points and values. This means that the point can detect and report alarms without creating a separate alarm object. (they still need to reference to a BACnet notification class just like normal BACnet alarm objects).
The only limitation is in the choice of algorithm:
Analog objects (Input, output, Value) support the out-of-range algorithm (high-limit, low-limit).
Digital, and Multistate objects (input, and value) support the change-of-state algorithm.
In StruxureWare Building Operation, we do not have digital or multi-state outputs with alarming, because we do not support "command-failure" type alarm that those require.