About the stack

Chipkin Automation Systems (CAS) BACnet stack is an application layer BACnet library for embedded systems and application development. The BACnet stack can function both as a server (Field device, etc...) or as a client (HMI, etc...). The BACnet stack is transport layer independent library, making it easy to use with any transport layer such as MSTP, IP, Ethernet and even PTP and ARCnet. By giving you control of the transport layer you can optimize bandwidth and performance by exploiting the resources at your disposal such as multi-threading and multiple simultaneous connections. The BACnet stack is particularly well suited to most contemporary programming styles as the API uses XML to transfer requests for packet building as well as for handling back parsed packets.

The CAS BACnet stack can save man-years of development when your company needs to add BACnet to their products.


  • OS independent (tested with WinCE/Win32/Win64, Linux, FreeROTS)
  • Transport layer independent
  • Client/Server functionality
  • Example code for both client/server on a variety of transport layers; TCP/IP, Ethernet (IEEE 802.3), RS232 (EIA-232, Serial) and RS485 (EIA-485, MSTP)
  • XML strings for all incoming/outgoing messages
  • Build with modern coding practices and design patterns.
  • Thread safe, Extensive unit testing, ect..

OSI Model

The CAS BACnet stack implements the Application, Presentation and Session layers of the OSI model. The BACnet stack is transport layer indepenent. This allowes you to use any transport layer that you want to including; TCP/IP, Ethernet (IEEE 802.3), RS232 (EIA-232, Serial) and RS485 (EIA-485, MSTP), PTP or ARCnet.

Data unitLayerFunction
BACnet Stack
7. Application * Network process to application
6. Presentation * Data representation, encryption and decryption, convert machine dependent data to machine independent data
5. Session * Interhost communication, managing sessions between applications
Segments 4. Transport End-to-end connections, reliability and flow control
Packet/Datagram 3. Network Path determination and logical addressing
Frame 2. Data link Physical addressing
Bit 1. Physical Media, signal and binary transmission

* Handled by the BACnet Stack


The CAS BACnet stack is royalty free, and free of charge.
Instead of charging for the BACnet Stack, we charge for 100 hours of support to help you integrate the BACnet stack in to your device or application.

Another option that is highly recommended is sending one of our engineers to work along side your engineers at your offices, for the cost of air travel and accommodation.

Communication interfaces supported

The CAS BACnet stack is transport layer independent and can be implemented on top of any transport layer you provide. We have working examples of the CAS BACnet stack working with IP, Ethernet, RS232 and RS485.

Example source code and applications


BACnet IP Server - This application will create a BACnet server that you can use to test BACnet clients with. The server is built with the CAS BACnet stack. Works with the BACnet IP Client example or the CAS BACnet Explorer

Device (389002)
  • Analog Output (3) - Red
  • Binary Input (33) - Green
  • Multi State Value (333) - Blue
  • Analog Input (3333) - Yellow
  • BitString Value (33333) - Pink
  • Analog Value (333333) - Black

BACnet IP Client - This application will create a BACnet client that can make requet of a BACnet server device. The request is hardcoded. Works with the BACnet IP Server example.

* Note: The BACnet client and server examples can not be run on the same computer at the same time or a computer that is already using port 47808

Supported BACnet protocol services

Additional services and object types can be added on request.

  • DS-RP-A - Data Sharing - ReadProperty - A
  • DS-RP-B - Data Sharing - ReadProperty - B
  • DS-RPM-A - Data Sharing - ReadPropertyMultiple - A
  • DS-RPM-B - Data Sharing - ReadPropertyMultiple - B
  • DS-WP-A - Data Sharing - WriteProperty - A
  • DS-WP-B - Data Sharing - WriteProperty - B
  • DS-WPM-A - Data Sharing - WritePropertyMultiple - A
  • DS-WPM-B - Data Sharing - WritePropertyMultiple - B
  • DS-COV-A - Data Sharing-COV-A
  • DS-COV-B - Data Sharing-COV-B
  • DS-COVP-A - Data Sharing-COVP-A
  • DS-COVP-B - Data Sharing-COVP-B
  • DS-COVU-A - Data Sharing-COV-Unsolicited-A
  • DS-COVU-B - Data Sharing-COV-Unsolicited-B
  • DS-V-A - Data Sharing - View - A
  • DS-AV-A - Data Sharing - Advanced View - A
  • DS-M-A - Data Sharing - Modify - A
  • DS-AM-A - Data Sharing - Advanced Modify - A
  • DM-DDB-A - Device Management - Dynamic Device Binding - A
  • DM-DDB-B - Device Management - Dynamic Device Binding - B
  • DM-DOB-A - Device Management - Dynamic Object Binding - A
  • DM-DOB-B - Device Management - Dynamic Object Binding - B
  • DM-TS-A - Device Management - TimeSynchronization - A
  • DM-TS-B - Device Management - TimeSynchronization - B

Device Profiles
  • B-ASC - BACnet Application Specific Controller
  • B-SA - BACnet Smart Actuator
  • B-SS - BACnet Smart Sensors

Object types supported
  • Device Object
  • Analog Input Object
  • Analog Output Object
  • Analog Value Object
  • Binary Input Object
  • Binary Output Object
  • Binary Value Object
  • Multi-state Input
  • Multi-state Output Object
  • Multi-state Value Object
  • Notification Class Object
  • Accumulator Object
  • Averaging Object
  • Calendar Object
  • Command Object
  • Event Enrollment Object
  • File Object
  • Group Object
  • Life Safety Point Object
  • Life Safety Zone Object
  • Loop Object
  • Program Object
  • Pulse Converter Object
  • Schedule Object
  • Trend Log Object
  • Access Door Object
  • Event Log Object
  • Load Control Object
  • Structured View Object
  • Trend Log Multiple Object
  • CharacterString Value Object
  • DateTime Value Object
  • Large Analog Value
  • BitString Value Object
  • OctetString Value Object
  • Time Value Object
  • Integer Value Object
  • Positive Integer Value Object
  • Date Value Object
  • DateTime Pattern Value Object
  • Time Pattern Value Object
  • Date Pattern Value Object


Q: Do you support GCC
A: Yes, The CAS BACnet stack is ANSI C/C++ and can be compiled under GCC

Q: Do you support CSharp/.Net/Java
A: Yes, with a DLL wrapper

Q: Do you support COV?
A: Yes

Q: Do you support WhoIS/WhoHas/IAM/IHave?
A: Yes

Q: Do you support ReadProperty/ReadPropertyMultiple/WriteProperty/WritePropertyMultiple ?
A: Yes

Q: Do you support ARM processors?
A: Yes, our stack can be compiled with GCC

Q: Do you support runtime (re-)configuration?
A: Yes

Q: Has your stack been tested at a BACnet plugfest
A: Yes, several times with several different products.

Q: Could I make a BACnet IP Server with this BACnet stack?
A: Yes

Q: Do you support Linux
A: Yes

Q: Do you support 32/64bit
A: Yes, we have both 32/64bit libaries and DLLs for windows and linux

Q: Does your code use any third party or open source libraries?
A: No.

Q: What version of Visual studios are the DLL/Lib built with
A: Visual Studios 2010

Q: What language is your library written in?
A: ANSI C/C++, A C#/Java/Delphi client wrapper have been created

Q: Is this the same stack at bacnet.sourceforge.net ?
A: No, CAS BACnet Stack is not based upon or uses any code from the sourceforge.net open source BACnet stack.

Q: How much RAM and code space does the stack take?
A: It depends on the features you need and amount of objects in your device. We have implemented the stack with as little as 10k of RAM with a reduced feature set.

Q: Which communication library does the CAS BACnet stack using for TCP/IP? (ACE, winsock,...)
A: None, The CAS BACnet stack is a transport layer independent library and does not depend on any communication library

Q: How many communication interfaces your code supports? (IP, RS232, RS485,...)
A: All of them. The CAS BACnet stack is a transport layer independent library. Example code is provided for IP, Ethernet, RS232 and RS485

Q: What version of the BACnet protocol do you support?
A: 7, We will be updating the stack to support 12 soon

Q: Do you support BBMD functions?
A: Soon. We are in the process of adding BBMD

Q: Do you support whole ASHRAE® BACnet standard?
A: Most of it, See Services supported section. We are adding new services as they are requested or required.

Q: Why is the CAS BACnet stack royalty free and free of charge?
A: We want out BACnet stack in as many devices as possible. Offering the stack free of charge while charging for support will help us ensure that it works in as many many devices as possible.

Q: What happens if I discover a bug?
A: You can report bugs with our bug tracker and we will do our best to resolve any issues. Any updates to the library will become available to everyone that has purchased the BACnet stack

Q: I'm confused, is the CAS BACnet stack free or do I have to pay for it?
A: The CAS BACnet stack is royalty free, and free of charge but we require you to buy 100 hours of support to help you integrate the BACnet stackin to your device.

Q: Do you support BACnet segmentation?
A: Not at this time but It can be added at a users request.

Q: Where are you located
A: Vancouver, BC, Canada

Q: I have more questions, how do I get in contact with you?
A: Contact us: 1-866-383-1657, Email: info001@chipkin.com