BACnet - What is a BACnet 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