Modbus to BACnet Protocol Conversion Guide

End-to-end guide for converting Modbus RTU or Modbus TCP devices to BACnet/IP or BACnet MS/TP using a QuickServer protocol gateway.

Categories:

Overview

Modbus to BACnet conversion is the most common protocol conversion job in building automation. Thousands of field devices — generators, chillers, power meters, boilers, air handlers — speak Modbus but need to integrate with a BACnet-based Building Management System (BMS).

This guide walks through the complete conversion process using a QuickServer gateway, from intake through commissioning.

Modbus to BACnet protocol conversion gateway architecture showing BMS controller connected via BACnet/IP to a QuickServer gateway, which connects to field devices via Modbus TCP and Modbus RTU

Before You Start

Gather this information before beginning configuration:

Source Device Information

  • Device manufacturer and model
  • Firmware version
  • Modbus register map (correct revision for the installed firmware)
  • Transport: Modbus RTU (RS-485 serial) or Modbus TCP (Ethernet)?
  • Slave ID / Unit ID of each device
  • Serial parameters (if RTU): baud rate, parity, stop bits, data bits
  • Number of devices on the bus

Destination BMS Information

Gateway Information

  • QuickServer model and license tier (250, 500, or 1000 points)
  • Gateway IP address
  • Total point count requirement (must fit within the license tier)

[!WARNING] Validate the total point count against the gateway’s license tier before building the configuration. A 300-point job on a 250-point tier requires a tier upgrade. Point tier overruns are a common source of project delays.

Step 1: Map Modbus Registers to BACnet Objects

This is the core configuration task — defining how each Modbus data point translates to a BACnet object.

Mapping Rules

Modbus SourceFunction CodeBACnet TargetNotes
Holding Register (read-only measurement)FC03Analog Input (AI)Sensor values, status readings
Holding Register (read/write setpoint)FC03/FC06Analog Value (AV) or Analog Output (AO)Use AO for physical actuator commands, AV for software values
Input RegisterFC04Analog Input (AI)Always read-only
Coil (command)FC01/FC05Binary Output (BO)Discrete on/off commands
Discrete InputFC02Binary Input (BI)Read-only contact states
Holding Register (enumerated mode)FC03/FC06Multi-State Value (MSV)Map state integers to named states
Holding Register (bit-field status)FC03 + bit extractBinary Input (BI) per bitExtract each bit as a separate BACnet object

For detailed guidance on object type selection, see BACnet Object Types & Properties Reference.

Addressing: The Off-By-One Problem

The #1 integration issue in Modbus-to-BACnet conversion is register addressing mismatch. Manufacturers document registers using different conventions:

ConventionRegister Map ShowsPDU Address (Wire)
Modicon (1-based)400010
Register number (1-based)10
PDU offset (0-based)00

If the register map uses 1-based numbering and your gateway configuration expects 0-based offsets, every register will be off by one.

[!TIP] Always validate with a known-value read. Compare a register reading in your diagnostic tool against the device’s local display. If the value at the documented address is wrong, try address − 1. See How to Read a Modbus Register Map for the complete addressing interpretation guide.

Data Types and Scaling

Handle these conversions in the gateway point map:

  • Scale factors — many devices store temperatures as integer × 10 (e.g., 725 = 72.5°F). Configure the gateway to divide by the scale factor.
  • 32-bit floats — values spanning two Modbus registers need correct word order configuration. See Modbus Data Types & Byte Order Reference.
  • Bit extraction — status registers packing multiple booleans into one 16-bit word need bit masking to produce individual BACnet binary objects.

Step 2: Configure the Modbus Client (Source Side)

The gateway acts as a Modbus client (master) and polls the field device.

For Modbus RTU (Serial)

Configure the gateway’s serial port to match the device’s settings exactly:

ParameterCommon DefaultsNotes
Baud Rate9600 or 19200Must match device; some equipment uses non-standard rates (e.g., 192000 for some boiler/chiller controllers)
Data Bits8Nearly universal
ParityEven or NoneMust match device
Stop Bits1 (with parity) or 2 (without parity)Must match device
Slave ID1–247Must match device configuration

[!NOTE] Every device on the RS-485 bus must use identical serial parameters (baud, parity, stop bits). If adding a gateway to an existing bus, match the existing configuration.

For Modbus TCP (Ethernet)

ParameterTypical ValueNotes
Device IP AddressVendor-assignedStatic IP recommended
TCP Port502Modbus TCP standard port
Unit ID1 or 255For standalone devices; for RTU-to-TCP gateways, use the target Slave ID

Step 3: Configure the BACnet Server (Destination Side)

The gateway acts as a BACnet server and responds to BMS read/write requests.

For BACnet/IP

ParameterNotes
Gateway IP addressSame subnet as BMS, or configure BBMD / FDR
UDP port47808 (0xBAC0) — BACnet/IP standard
Device InstanceMust be unique across the entire BACnet internetwork
Network numberCoordinate with BMS integrator

For BACnet MS/TP

ParameterNotes
MAC address0–127; must be unique on the MS/TP trunk
Baud rateMust match other devices on the trunk (typically 9600, 38400, or 76800)
Max MastersSet to match or exceed the highest MAC address of any master on the trunk
Device InstanceMust be unique across the entire BACnet internetwork

[!WARNING] Adding a gateway to an existing BACnet MS/TP trunk? Verify MAC address uniqueness and Max Masters settings on all existing devices. Duplicate MACs or incorrect Max Masters cause intermittent token passing failures that are difficult to diagnose.

Step 4: Configure Poll Rates and Timeouts

ParameterRecommendedNotes
Modbus poll interval1–10 secondsBalance between data freshness and bus loading
Modbus response timeout500–2000 msIncrease for slow devices or long RS-485 runs
Modbus retry count2–3Retries before marking a point as unreachable
BACnet COV increment0.5–1.0 (analog), N/A (binary)If the BMS uses COV subscriptions instead of polling

[!TIP] For RS-485 buses with multiple devices, stagger poll requests to avoid overwhelming slow devices. If one device has 200 registers, break the poll into smaller block reads.

Step 5: Commission and Validate

Validation Checklist

  • Modbus reads working — use CAS Modbus Scanner to verify the gateway can read all configured registers from the source device
  • Addressing confirmed — at least one known-value register matches the device’s local display
  • Data types confirmed — 32-bit float values and scaled integers produce correct engineering values
  • BACnet discovery working — use CAS BACnet Explorer to perform a Who-Is and confirm the gateway’s Device Instance appears
  • Object list correct — browse the gateway’s BACnet objects and verify expected types, instance numbers, and present values
  • Write operations working — if the integration requires writes (setpoints, commands), test a safe write and verify it takes effect on the source device
  • BMS integration confirmed — the BMS can poll the gateway and display correct values

Common Commissioning Failures

SymptomLikely CauseFix
Gateway not discovered by BMSWrong subnet, BBMD not configured, firewall blocking UDP 47808Verify network config; check BACnet Discovery article
”Unknown Object” errors in BMSBMS requesting object IDs that don’t exist on the gatewayCompare BMS point list against gateway’s Object_List property
All BACnet values show 0Modbus poll not running, wrong register addressesCheck Modbus client diagnostics; try address − 1
Values are garbled or wildly wrongByte order mismatch on 32-bit valuesTry all 4 byte order permutations
Intermittent BACnet timeoutsMS/TP token passing issue or Modbus poll congestionCheck MAC addresses, Max Masters, and poll timing
Values are scaled wrongMissing or incorrect scale factorVerify scale factor against register map and physical reading
”Illegal Data Address” from Modbus deviceOff-by-one addressing or reading undefined registersReduce block size; verify address convention

For more Modbus troubleshooting, see the Modbus Troubleshooting Guide. For BACnet MS/TP issues, see the BACnet MS/TP Troubleshooting Guide.

Multi-Device Configurations

Multiple Modbus Devices to One BACnet Gateway

A single gateway can poll multiple Modbus devices and expose all their data as BACnet objects under one Device Instance.

  • Modbus RTU: Each device gets a unique Slave ID on the same RS-485 bus (max 247 devices per bus)
  • Modbus TCP: Each device has a unique IP address; multiple TCP connections from the gateway

BACnet object instance numbers must be unique per type across all mapped devices. Use a numbering scheme like:

DeviceSlave IDAI Instance RangeAV Instance RangeBI Instance Range
Generator 11AI:1–50AV:1–20BI:1–30
Generator 22AI:51–100AV:21–40BI:31–60
Power Meter3AI:101–150AV:41–50BI:61–70

Modbus RTU to Modbus TCP Bridge (No BACnet)

For jobs that need only a transport bridge — serial RS-485 to Ethernet TCP without protocol conversion — a QuickServer can act as a pass-through gateway. The Slave ID in the incoming Modbus TCP request maps directly to the target device’s Slave ID on the RTU side.

Chipkin Tools

  • QuickServer — Protocol converter with web-based configuration
  • CAS Modbus Scanner — Validate Modbus register reads before gateway deployment
  • CAS BACnet Explorer — Discover and browse BACnet objects from the gateway
  • Chipkin Support — Gateway configuration, register map interpretation, and commissioning assistance

Need more help?

If this page does not resolve the issue, contact Chipkin support with the product model, protocol details, and any diagnostics you have already captured.

Open Chipkin Support