Technical BACnet Reference

This page is a BACnet reference I made for myself, hopefully you find it useful as well. It’s mostly useful when you’re doing lower level protocol troubleshooting.

Index

BACnet Clients

Yet Another Bacnet Explorer

  • Free and open-source!
  • Supports MS/TP and BACnet/IP. You can add multiple of both and work with them at the same time! Different baudrates, UDP ports, etc. are supported
  • Does not handle buggy busses very well. Gets very slow and unresponsive.

Cimetrics BACnet Explorer

  • Probably the most straightforward
  • Does not have a lot of features; while you can see that there is a schedule object or a trend log object, you can’t really interact with them usefully
  • Supports BBMD foreign device registration

Chipkin BACnet Explorer

  • Great for MS/TP – doesn’t assume the network is perfect and includes some diagnostics for faulty wiring/configuration
  • Not developed, team unresponsive to requests despite high ticket price
  • UCS-2 encoding unsupported
  • Doesn’t support BBMD at all

Niagara N4

  • Using an N4Workbench as a BACnet client is overkill, but it’s very flexible and extremely powerful
  • You need Niagara N4 certification (~$2,000)
  • You need to buy a N4 workbench license (~$1,000?)
  • Very good support for BACnet/IP and MSTP

BACmove for Android

  • Very good for an Android app.
  • You need to be on the same network obviously, but it does support BBMD foreign device registration
  • Limited functionality that we’ve come to expect from mobile platforms

Instance Numbers, Network Numbers, Port Numbers

BACnet UDP Port

While I don’t think it’s a good idea for people the default BACnet port, it is done. Sometimes a site will have different BACnet devices segmented by different BACnet ports to prevent third-party vendors from disrupting other segments via poor configuration. The default port is 47808 or 0xBAC0 in hexadecimal. BACnet communicates exclusively over UDP.

Device Instance Number

Unlike MAC addresses on an MS/TP network, the instance number absolutely must be unique on the entire system. They range from 0 to 4,194,302. Treat it like an IP address. I wrote a separate article on this: BACnet Instance Number.

Network Number

BACnet network numbers are frequently misunderstood. You should have one unique network number for every different network in your system. The easy to understand part is that each MS/TP channel is a different network. The less easy to understand part is that 192.168.0.0 / 255.255.255.0 is a different network than 192.168.1.0 / 255.255.255.0. Different network IP segments are different networks and should have different network numbers.

Devices don’t know their network number, only BACnet routers do. They can range between 1 and 65535. Typically the front end is on network 1.

Object ID numbers and Parameter Numbers

If you’re using Wireshark or a low-level BACnet client, you’ll need a reference like this to associate parameter and object type names with their numerical values.

If you’re troubleshooting a BACnet problem with low-level tools like Wireshark or a command-line BACnet tool, you might have to know what the object IDs and parameter numbers are. I can never remember anything other than presentValue (85!), so here’s a reference.

Object IDs

Object Number
Analog Input 0
Analog Output 1
Analog Value 2
Binary Input 3
Binary Output 4
Binary Value 5
Calendar 6
Command 7
Device 8
Event Enrollment 9
File 10
Group 11
Loop 12
Multistate Input 13
Multistate Output 14
Notification Class 15
Program 16
Schedule 17

 Property IDs

PropertyName Number
ackedTransitions 0
ackRequired 1
action 2
actionText 3
activeText  4
activeVtSessions 5
alarmValue 6
alarmValues 7
all 8
allWritesSuccessful 9
apduSegmentTimeout 10
apduTimeout 11
applicationSoftwareVersion 12
archive 13
bias 14
changeOfStateCount 15
changeOfStateTime 16
notificationClass 17
none 18
controlledVariableReference 19
controlledVariableUnits 20
controlledVariableValue 21
covIncrement  22
datelist 23
daylightSavingsStatus 24
deadband 25
derivativeConstant 26
derivativeConstantUnits 27
description 28
descriptionOfHalt 29
deviceAddressBinding 30
deviceType 31
effectivePeriod 32
elapsedActiveTime 33
errorLimit 34
eventEnable 35
eventState 36
eventType 37
exceptionSchedule 38
faultValues 39
feedbackValue 40
fileAccessMethod 41
fileSize 42
fileType 43
firmwareRevision 44
highLimit  45
inactiveText  46
inProcess 47
instanceOf 48
integralConstant 49
integralConstantUnits 50
issueConfirmedNotifications 51
limitEnable 52
listOfGroupMembers 53
listOfObjectPropertyReferences 54
listOfSessionKeys 55
localDate 56
localTime 57
location 58
lowLimit  59
manipulatedVariableReference 60
maximumOutput 61
maxApduLengthAccepted 62
maxInfoFrames 63
maxMaster 64
maxPresValue 65
minimumOffTime 66
minimumOnTime 67
minimumOutput 68
minPresValue 69
modelName 70
modificationDate 71
notifyType 72
numberOfAPDURetries 73
numberOfStates 74
objectIdentifier 75
objectList 76
objectName  77
objectPropertyReference 78
objectType 79
optional 80
outOfService  81
outputUnits 82
eventParameters 83
polarity 84
presentValue  85
priority 86
priorityArray 87
priorityForWriting 88
processIdentifier 89
programChange 90
programLocation 91
programState 92
proportionalConstant 93
proportionalConstantUnits 94
protocolConformanceClass 95
protocolObjectTypesSupported 96
protocolServicesSupported 97
protocolVersion 98
readOnly 99
reasonForHalt 100
recipient 101
recipientList 102
reliability 103
relinquishDefault  104
required 105
resolution 106
segmentationSupported 107
setpoint 108
setpointReference 109
stateText 110
statusFlags 111
systemStatus 112
timeDelay 113
timeOfActiveTimeReset 114
timeOfStateCountReset 115
timeSynchronizationRecipients 116
units 117
updateInterval 118
utcOffset 119
vendorIdentifier 120
vendorName 121
vtClassesSupported 122
weeklySchedule 123