Archive for September, 2007

BACnet Architecture

BACnet has an interesting architecture that all developers should know about for the effective operation of such building automation devices. The BACnet architecture is predominately limited to HVAC, lighting controls, and gateways.

BACnet emphasizes efficient, lightweight communication and optimized for small networks, small inter-networks, and short messages.

BACnet consists of a collapsed architecture that corresponds to four layers of the Open Systems Interconnection (OSI) model. The seven layer reference model is an international standard for conceptualizing network communication protocols and is widely used as the basis of many data communications standards.

The four layers from the OSI model within the BACnet architecture includes:

  • Application
  • Network
  • Data Link
  • Physical

Since BACnet is a non-connection protocol, the need for message segmentation and end-to-end error checking is much less than in a connection-based protocol. Thus, the overhead of a discrete transport layer is not justified and the functions normally in a transport layer are delegated to the application layer. In addition, the session layer is not needed, and since BACnet uses a fixed encoding scheme and offloads security to the application layer, a separate presentation layer is not needed.

The following figure from the standard examines the basic structure of the OSI model:

screen1.gif

Figure 1. Basic OSI Structure.

The next figure from the standard will present the BACnet architecture with the equivalent OSI layers to the developer:

 

screen2.gif

Figure 2. BACnet Architecture.The collapsed architecture was chosen due to the specific features and requirements of BAC networks, including a requirement that the protocol overhead be minimized as much as possible.

BAC networks are local area networks (LAN). This is true even though in some applications it is necessary to exchange information with devices in a building that is very far away. The long-distance communication is done through telephone networks. The routing, relaying, and guaranteed delivery issues are handled by the telephone system and can be considered external to the BAC network.

BAC devices are static. They don’t move from place to place and the functions that they are asked to perform do not change in the sense that a manufacturing device may make one kind of part today and some very different part tomorrow.

BACnet defines a protocol optimized for reliable and brief object messaging on a LAN. Based on the OSI model, BACnet is readily extended to many domains outside of the building automation and control networks for which it was originally intended, such as management applications and embedded control. In many of these applications, a specific part of BACnet can be applied with great benefit.

All developers should maintain an understanding of the BACnet architecture, especially when selecting devices for building automation applications.

Written by: Scott Cosby

© Chipkin Automation Systems 2007

Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have

BACnet: The Group Object

The Group object is described by the BACnet standard as a collection of other objects, and one or more of their properties.

The Group object is essentially used to simplify the information exchange between BACnet devices through a shorthand method to specify all group members at once.

The developer should be aware that a group can be formed through any combination of object types.

The following table will present the actual properties and associated datatypes of the Group object from the BACnet standard:

Property Datatype
Object_Identifier BACnet Object Identifier
Object_Name Character String
Object_Type BACnet Object Type
Description Character String
List_of_Group_Members List of Read Access Specification(s)
Present_Value List of Read Access Result(s)
Profile_Name Character String

The developer should pay close attention to two properties in the preceding table. The properties include:

  • List_of_Group_Members property
  • Present_Value property

The List_of_Group_Members represents a list of read access specification(s) that defines the group members that will be referenced when the object is specified in a standard transaction.

The Present_Value property represents the result from the read access specification(s). This property is a list that contains the values of all the properties specified in the List_Of_Group_Members. This is a “read only” property; and it cannot be used to write a set of values to the members of the group. The Present_Value list is reconstructed each time the property is read by retrieving the member properties. This requirement is required to reduce problems that could result if the Present_Value were stored.

Each of these read access specification(s) contains two essential parts:

  • Object_Identifier
  • Property Reference List

In addition, all group members should be objects that are in the same device that maintains the Group object.

The following example from the BACnet standard will present the Group object structure from an actual automation application. This example will specifically reference the air temperatures in a particular area or “zone” of a building:

Property: Object_Identifier = (Group, Instance 1)
Property: Object_Name = “ZONE1_TEMPS”
Property: Object_Type = GROUP
Property: Description = “Zone 1 Temperature Group”
Property: List_Of_Group_Members = (((Analog Input, Instance 8),(Present_Value, Reliability, Description)), ((Analog Input, Instance 9),(Present_Value, Reliability, Description)), ((Analog Input, Instance 10), (Present_Value, Reliability, Description)),
((Analog Input, Instance 11),(Present_Value, Reliability, Description)),((Analog Input, Instance 12),(Present_Value, Reliability, Description)))
Property: Present_Value = (((Analog Input, Instance 8), Present_Value, 69.7, Reliability, NO_FAULT_DETECTED, Description, “Room 1″), ((Analog Input, Instance 9), Present_Value, 71.2, Reliability, NO_FAULT_DETECTED, Description, “Room 2″),
((Analog Input, Instance 10), Present_Value, -50.0, Reliability, UNRELIABLE_OTHER, Description, “Room 3″), ((Analog Input, Instance 11), Present_Value, 69.7, Reliability,
NO_FAULT_DETECTED, Description, “Room 4″), ((Analog Input, Instance 12), Present_Value, 73.3, Reliability, NO_FAULT_DETECTED, Description, “Room 5″))

Written by: Scott Cosby

© Chipkin Automation Systems 2007

Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have

BACnet: The File Object

The File object is defined by the BACnet standard as data files that are described by the object’s properties, and accessed through File Services.

File Services is listed in the standard as Clause 14. The clause describes the access and manipulation of files within BACnet devices. The developer has two options regarding file types accessed through File Services:

  • Vendor defined files
  • Bacnet standard files

Any file accessible through File Services has a related File object in a BACnet device.

The primary purpose of the File object is to identify a specific file through the following descriptions:

  • File Name
  • File Size
  • Creation Date
  • File Type

The following table will present the actual properties and associated datatypes of the File object from the BACnet standard:

Property Datatype
Object_Identifier BACnet Object Identifier
Object_Name Character String
Object_Type BACnet Object Type
Description Character String
File_Type Character String
File_Size Unsigned
Modification_Date BACnet Date Time
Archive Boolean
Read_Only Boolean
File_Access_Method BACnet File Access Method
Record_Count Unsigned
Profile_Name Character String

The developer should be aware that File Services has two specific operations:

  • Atomic Read
  • Atomic Write

The meaning of Atomic is defined in the standard as a singular operation in that no other similar operation is permitted for the same file. In addition, the synchronization of these operations is matter for the developer.

The following two tables will examine the structure of the Atomic Read and Write operations:

Atomic Read Structure Table

Parameter Name Request Indication Response Confirm
Argument M M(=)    
File Identifier M M(=)    
Stream Access S S(=)    
File Start Position M M(=)    
Requested Octet Count M M(=)    
Record Access S S(=)    
File Start Record M M(=)    
Requested Record Count M M(=)    
Result(+)     S S(=)
End Of File     M M(=)
Stream Access     S S(=)
File Start Position     M M(=)
File Data     C C(=)
Record Access     S S(=)
File Start Record     M M(=)
Returned Record Count     M M(=)
File Record Data     C C(=)
Result(-)     S S(=)
Error Type     M M(=)

Atomic Write Structure Table:

Parameter Name Request Indication Response Confirm
Argument M M(=)    
File Identifier M M(=)    
Stream Access S S(=)    
File Start Position M M(=)    
File Data M M(=)    
Record Access S S(=)    
File Start Record M M(=)    
Record Count M M(=)    
File Record Data M M(=)    
Result(+)     S S(=)
Stream Access     S S(=)
File Start Position     M M(=)
Record Access     S S(=)
File Start Record     M M(=)
Result(-)     S S(=)
Error Type     M M(=)

M – Mandatory parameter.
C – Conditional parameter.
S – Selection parameter from a collection of two or more possible parameters.

The code “=” following one of the codes M, C, or S indicates that the parameter is equivalent to the parameter to its immediate left in the table.

The following example from the BACnet standard will present the File object structure from an actual automation application. This example will specifically examine a File object that contains trend information:

Property: Object_Identifier = (File, Instance 7)
Property: Object_Name = “TREND_AI1″
Property: Object_Type = FILE
Property: Description = “Trend of AI1″
Property: File_Type = “TREND”
Property: File_Size = 750
Property: Modification_Date = (1-NOV-1995, 08:30:49.0)
Property: Archive = FALSE
Property: Read_Only = FALSE
Property: File_Access_Method= RECORD_ACCESS
Property: Record_Count = 150

Written by: Scott Cosby

© Chipkin Automation Systems 2007

Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have

BACnet: Event Enrollment Object

The Event Enrollment object is defined by the standard as information related to the management of events for BACnet systems. Events are essentially changes in the value of any property concerning any object that meets specific criteria.

The central purpose for the Event Enrollment object is to define an event, and offer the developer a connection between the event occurrence and the transmission of notification messages.

The Event Enrollment object contains the following information for effective operation:

  • Event Type Description
  • Event Occurrence Notification
  • Device Notification

The following table will present the actual properties and associated datatypes of the Event Enrollment object from the BACnet standard:

Property Datatype
Object_Identifier BACnet Object Identifier
Object_Name Character String
Object_Type BACnet Object Type
Description Character String
Event_Type BACnet Event Type
Notify_Type BACnet Notify Type
Event_Parameters BACnet Event Parameter
Object_Property_Reference BACnet Device Object Property Reference
Event_State BACnet Event State
Event_Enable BACnet Event Transition Bits
Acked_Transitions BACnet Event Transition Bits
Notification_Class Unsigned
Event_Time_Stamps BACnet Array (3) of BACnet Time Stamp
Profile_Name Character String

The BACnet standard states that there’s a specific relationship among three properties:

  • Event_Type
  • Event_State
  • Event_Parameters

The Event_Type represents the algorithm used to determine the Event_State. The Event_Parameters property provides certain parameters required by the algorithm. The developer should pay special attention to the relationship of these three properties.

The following table from the standard will examine the three properties and their associated values:

Event_Type Event_State Event_Parameters
Change_of_ Bitstring Normal
OffNormal
Time_Delay
Bitmask
List_of_Bitstring_Values
Change_of_State Normal
OffNormal
Time_Delay
List_of_Values
Change_of_Value Normal
OffNormal
Time_Delay
Bitmask
Referenced_Property_Increment
Command_Failure Normal
OffNormal
Time_Delay
Feedback_Property_Reference
Floating_Limit Normal
High_Limit
Low_Limit
Time_Delay
Setpoint_Reference
Low_Diff_Limit
High_Diff_Limit
Deadband
Out_of_Range Normal
High_Limit
Low_Limit
Time_Delay
Low_ Limit
High_ Limit
Deadband
Buffer_Ready Normal Notification_Theshold
Change_of_Life_Safety Normal
OffNormal
Life_Safety_Alarm
Time_Delay
List_of_Alarm_Values
List_of_Life_Safety_Alarm_Values
Mode_Property_Reference

The next two examples from the standard will reveal the Event Enrollment object structure from an actual automation application. Specifically, the two examples will involve temperature control in a certain room of a building:

Property: Object_Identifier = (Analog Input, Instance 2)
Property: Object_Name = "Zone1_Temp"
Property: Object_Type = ANALOG_INPUT
Property: Present_Value = 86.0
Property: Description = "Receptionist Lobby Temp"
Property: Device_Type = "PT 3K RTD"
Property: Status_Flags = {FALSE, FALSE, FALSE, FALSE}
Property: Event_State = NORMAL
Property: Reliability = NO_FAULT_DETECTED
Property: Out_Of_Service = FALSE
Property: Update_Interval = 5
Property: Units = DEGREES_FAHRENHEIT
Property: Min_Pres_Value = 55.0
Property: Max_Pres_Value = 95.0
Property: Resolution = 0.1

The Analog_Input object above is assumed for the following Change_of_Value Event example, and the object is located in Device 12.

Property: Object_Identifier = (Event Enrollment, Instance 2)
Property: Object_Name = "Zone1TempCOV"
Property: Object_Type = EVENT_ENROLLMENT
Property: Description = "Zone 1 Temperature COV"
Property: Event_Type = CHANGE_OF_VALUE
Property: Notify_Type = EVENT
Property: Event_Parameters = (5, 0.25)
Property: Object_Property_Reference = ((Device, Instance 12),(Analog Input, Instance 2), Present_Value)
Property: Event_State = NORMAL
Property: Event_Enable = (TRUE, FALSE, FALSE)
Property: Acked_Transitions = (TRUE, TRUE, TRUE)
Property: Event_Time_Stamps = ((23-MAR-95,18:50:21.2),(*-*-*,*:*:*.*),(23-MAR-95,19:01:34.0))

Written by: Scott Cosby

© Chipkin Automation Systems 2007

Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have