Expand description
Channel object (type 53) per ASHRAE 135-2020 Clause 12.53.
A Channel forwards one value to a set of object properties and keeps no state of its own besides that value: no priority array, no algorithm. A Present_Value write is passed on to every member of List_Of_Object_Property_References at the priority it came with.
The object owns the bookkeeping: which values Present_Value takes (a
BACnetChannelValue), Last_Priority, Write_Status and the busy interlock
while a distribution runs. The member writes are the bundled server’s,
made the way a Command object’s are: it takes the queued [CommandRun]
under the guard that committed the Present_Value write, then, once that
guard is released, coerces the value to each member’s datatype
(coerce_channel_value) and writes it through the local write path,
honouring each member’s Execution_Delay. The outcome comes back through
BACnetObject::complete_command_run_internal.
A member may name another Device (Clause 12.53.11): the server writes it
there as a confirmed WriteProperty, from its device bindings, coerced to
the datatype a ReadProperty there returned. The object keeps that datatype
for each member (BACnetObject::remember_member_datatype_internal) until
the member is written again, or the server forgets it (#1342).
Reliability reports how the last distribution ended (Clause 12.53.9). A
SUCCESSFUL one sets NO_FAULT_DETECTED; a FAILED one sets the kind of its
first failure ([WriteFailure::reliability]): CONFIGURATION_ERROR,
PROCESS_ERROR or COMMUNICATION_FAILURE. It keeps its value while a
distribution is in progress, and Status_Flags shows FAULT whenever it isn’t
NO_FAULT_DETECTED. Out of service, Reliability is decoupled from the
distributions (Clause 12.53.10): it holds what it read when the object
went out of service, a client may write any Reliability value to it, and
back in service it reads the last distribution’s verdict again.
Channel_Number and Control_Groups are what the bundled server’s WriteGroup execution matches on (Clause 15.11). Allow_Group_Delay_Inhibit is served for it too: the object only stores the flag, and the server reads it to decide whether a WriteGroup asking for no delays gets them.
Structs§
- Channel
Object - BACnet Channel object: forwards each Present_Value write to a list of member properties.
- Coercion
Failure - A channel value that can’t go to a member: the table names an invalid datatype, or a number is outside its rule’s limits.
Enums§
- Member
Datatype - The datatype of a Channel member’s property, as Table 12-63’s columns name them.
Constants§
- MAX_
CHANNEL_ MEMBERS - Resource cap on members, and so on Execution_Delay elements: the bound a Schedule puts on its reference list.
- MAX_
CONTROL_ GROUPS - Resource cap on Control_Groups elements, the most groups one Channel joins at once (Clause 12.53.15 leaves it to the implementation).
Functions§
- coerce_
channel_ value - The value a member of datatype
targetgets when a Channel holdingvaluedistributes it (Table 12-63).