<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://bmspedia.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AlexDriv</id>
	<title>BMSpedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://bmspedia.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AlexDriv"/>
	<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php/Special:Contributions/AlexDriv"/>
	<updated>2026-04-14T03:23:20Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://bmspedia.com/index.php?title=Modbus&amp;diff=85</id>
		<title>Modbus</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Modbus&amp;diff=85"/>
		<updated>2026-02-24T23:47:03Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Modbus =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Modbus is an open, serial communication protocol originally developed for use in programmable logic controllers (PLCs). It has since become one of the most widely deployed industrial communication protocols in the world, particularly in Building Management Systems (BMS), SCADA environments, energy metering, and industrial automation.&lt;br /&gt;
&lt;br /&gt;
Modbus operates on a master-slave (also referred to as client-server in newer documentation) architecture, where a single master device initiates all communication and one or more slave devices respond. It is valued for its simplicity, robustness, and vendor-neutral design — making it ideal for integrating devices from multiple manufacturers into a unified control system.&lt;br /&gt;
&lt;br /&gt;
In BMS applications, Modbus is commonly used to communicate with energy meters, variable frequency drives (VFDs), chillers, boilers, air handling units (AHUs), and a wide range of sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
Modbus was developed in 1979 by Modicon (now a brand of Schneider Electric) for use with their programmable logic controllers. It was designed as a simple and robust protocol for serial communication between controllers on a production floor.&lt;br /&gt;
&lt;br /&gt;
In 1996, Modbus over TCP/IP (Modbus TCP) was introduced, allowing the protocol to be used over modern Ethernet networks. This dramatically expanded its use cases and kept it relevant into the internet era.&lt;br /&gt;
&lt;br /&gt;
In 2004, the rights to the Modbus specification were transferred to the Modbus Organization, a non-profit trade association that maintains and promotes the standard to this day. The protocol remains publicly available and royalty-free, which is a significant reason for its continued adoption over proprietary alternatives.&lt;br /&gt;
&lt;br /&gt;
Today Modbus exists in three primary variants: Modbus RTU and Modbus ASCII (both for serial communication), and Modbus TCP/IP (for Ethernet communication).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Protocol Architecture ==&lt;br /&gt;
&lt;br /&gt;
=== Master-Slave Model ===&lt;br /&gt;
&lt;br /&gt;
Modbus uses a strict master-slave architecture. There is always one master and up to 247 addressable slave devices on a single serial bus. Each slave is assigned a unique address between 1 and 247. Address 0 is reserved for broadcast messages, which all slaves receive but do not respond to.&lt;br /&gt;
&lt;br /&gt;
The master is always the initiator of communication. A slave device never transmits data unless it has first been queried by the master. This eliminates bus collisions and keeps the protocol deterministic — an important quality in control systems where timing and reliability are critical.&lt;br /&gt;
&lt;br /&gt;
In a BMS context, the master is typically the Building Management Controller (BMC) or a gateway device, and the slaves are field devices such as energy meters, controllers, or sensors.&lt;br /&gt;
&lt;br /&gt;
=== Request-Response Cycle ===&lt;br /&gt;
&lt;br /&gt;
Every Modbus transaction follows a simple two-step cycle:&lt;br /&gt;
&lt;br /&gt;
# The &#039;&#039;&#039;master&#039;&#039;&#039; sends a request frame to a specific slave address (or broadcast to address 0).&lt;br /&gt;
# The &#039;&#039;&#039;slave&#039;&#039;&#039; receives the request, processes it, and returns a response frame to the master.&lt;br /&gt;
&lt;br /&gt;
If the slave receives a valid request but cannot comply (e.g. the register address does not exist), it returns an &#039;&#039;&#039;exception response&#039;&#039;&#039; containing an error code. If the master receives no response within its configured timeout window, it may retry the request or log a communication fault.&lt;br /&gt;
&lt;br /&gt;
A full Modbus RTU frame consists of the following fields in order:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Size !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Device Address || 1 byte || Slave address (1–247), or 0 for broadcast&lt;br /&gt;
|-&lt;br /&gt;
| Function Code || 1 byte || Defines the type of action requested&lt;br /&gt;
|-&lt;br /&gt;
| Data || Variable || Register addresses, values, or quantities&lt;br /&gt;
|-&lt;br /&gt;
| CRC || 2 bytes || Error checking (Cyclic Redundancy Check)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Transmission Modes ==&lt;br /&gt;
&lt;br /&gt;
=== Modbus RTU ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU (Remote Terminal Unit) is the most common implementation of the protocol in BMS and industrial environments. Data is transmitted as binary bytes over an RS-232 or RS-485 serial connection.&lt;br /&gt;
&lt;br /&gt;
Each byte of data is encoded as a single binary character. The framing of messages is defined by silent intervals (gaps) between characters — a gap of at least 3.5 character times signals the start or end of a message frame.&lt;br /&gt;
&lt;br /&gt;
RTU is preferred over ASCII for most applications because it is more efficient: it transmits the same data in roughly half the number of bytes, making better use of available bandwidth.&lt;br /&gt;
&lt;br /&gt;
Key characteristics:&lt;br /&gt;
* Binary encoding&lt;br /&gt;
* CRC-16 error checking&lt;br /&gt;
* Message framing via inter-character silence (3.5 character times)&lt;br /&gt;
* Physical layer: RS-485 (most common), RS-232, RS-422&lt;br /&gt;
&lt;br /&gt;
=== Modbus ASCII ===&lt;br /&gt;
&lt;br /&gt;
Modbus ASCII transmits data as ASCII text characters rather than raw binary. Each byte of data is represented as two hexadecimal ASCII characters (e.g. the byte &amp;lt;code&amp;gt;0x5B&amp;lt;/code&amp;gt; is sent as the characters &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
ASCII mode uses a colon (&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;) as a start delimiter and CR/LF characters as an end delimiter. It uses LRC (Longitudinal Redundancy Check) for error checking rather than CRC.&lt;br /&gt;
&lt;br /&gt;
ASCII mode is less bandwidth-efficient than RTU but is easier to debug with simple terminal tools and is more tolerant of timing variations on noisy or slow serial lines. It is rarely used in modern BMS installations.&lt;br /&gt;
&lt;br /&gt;
=== Modbus TCP/IP ===&lt;br /&gt;
&lt;br /&gt;
Modbus TCP/IP wraps the standard Modbus PDU (Protocol Data Unit) inside a TCP packet and transmits it over a standard Ethernet network. It uses port &#039;&#039;&#039;502&#039;&#039;&#039; by default.&lt;br /&gt;
&lt;br /&gt;
The serial-specific fields (device address and CRC) are replaced by a &#039;&#039;&#039;MBAP header&#039;&#039;&#039; (Modbus Application Protocol header), which contains a transaction identifier, protocol identifier, message length, and unit identifier.&lt;br /&gt;
&lt;br /&gt;
Modbus TCP removes the need for RS-485 wiring and allows Modbus devices to be integrated into IP-based building networks. Many modern BMS gateways and energy meters support Modbus TCP natively or via an RS-485-to-Ethernet converter.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Communication Parameters ==&lt;br /&gt;
&lt;br /&gt;
Communication parameters are the settings that define how data is physically transmitted between the master and slave devices on a serial Modbus network. All devices on the same bus &#039;&#039;&#039;must be configured with identical parameters&#039;&#039;&#039; — a mismatch in any one setting will cause communication failures.&lt;br /&gt;
&lt;br /&gt;
The parameters covered here apply primarily to Modbus RTU and Modbus ASCII (serial variants). Modbus TCP uses standard IP networking parameters instead.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Baud Rate ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_baudrate_diagram.png|thumb|400px|right|Diagram showing how baud rate affects the time width of each bit on the signal line. A higher baud rate means narrower bit windows and faster data transmission.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Baud rate&#039;&#039;&#039; defines the number of signal changes per second on the communication line. In Modbus RTU, one symbol = one binary bit, so baud rate = bits per second.&lt;br /&gt;
&lt;br /&gt;
==== Common Baud Rate Values ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Baud Rate !! Bits per Second !! Typical Use Case&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || 1,200 bps || Legacy devices, long cable runs with poor quality cable&lt;br /&gt;
|-&lt;br /&gt;
| 2400 || 2,400 bps || Older meters and sensors&lt;br /&gt;
|-&lt;br /&gt;
| 4800 || 4,800 bps || Moderate speed legacy devices&lt;br /&gt;
|-&lt;br /&gt;
| 9600 || 9,600 bps || &#039;&#039;&#039;Most common default&#039;&#039;&#039; — widely supported by all devices&lt;br /&gt;
|-&lt;br /&gt;
| 19200 || 19,200 bps || Standard BMS installations with moderate device counts&lt;br /&gt;
|-&lt;br /&gt;
| 38400 || 38,400 bps || Higher performance systems&lt;br /&gt;
|-&lt;br /&gt;
| 57600 || 57,600 bps || Fast networks, shorter cable runs&lt;br /&gt;
|-&lt;br /&gt;
| 115200 || 115,200 bps || Maximum practical speed for RS-485 in most installations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The default baud rate for Modbus RTU is &#039;&#039;&#039;9600 bps&#039;&#039;&#039;, though 19200 bps is very common in BMS environments.&lt;br /&gt;
&lt;br /&gt;
==== How Baud Rate Affects the Signal ====&lt;br /&gt;
&lt;br /&gt;
Each bit occupies a fixed time window called the &#039;&#039;&#039;bit period&#039;&#039;&#039;, calculated as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Bit Period = 1 / Baud Rate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At 9600 baud each bit lasts approximately &#039;&#039;&#039;104 microseconds&#039;&#039;&#039;. At 115200 baud each bit lasts approximately &#039;&#039;&#039;8.7 microseconds&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Single Byte at 9600 Baud, 8N1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The byte &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; (decimal 65) on the RS-485 wire at 9600 baud:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:     Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop&lt;br /&gt;
Value:     0    1    0    0    0    0    0    1    0     1&lt;br /&gt;
µs each: 104µs per bit window&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Start bit&#039;&#039;&#039; (1 bit, always 0): Pulls line LOW — signals receiver to begin reading&lt;br /&gt;
* &#039;&#039;&#039;D0–D7&#039;&#039;&#039; (8 bits): Binary data, transmitted LSB first. &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;01000001&amp;lt;/code&amp;gt; → wire order: 1,0,0,0,0,0,1,0&lt;br /&gt;
* &#039;&#039;&#039;Stop bit&#039;&#039;&#039; (1 bit, always 1): Returns line HIGH — marks end of byte&lt;br /&gt;
&lt;br /&gt;
Total frame = 10 bits × 104µs = &#039;&#039;&#039;1.04ms per byte&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Read Holding Register&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master reads 1 holding register (address 0x0000 = register 40001) from slave address 0x01.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame in hex — 8 bytes total:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [QtyHi] [QtyLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x03 ] [0x00 ] [0x00 ] [0x00 ] [0x01 ] [0x84 ] [0x0A ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Each byte in Modbus RTU binary (8N1, LSB first, 9600 baud):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 1 — Slave Address 0x01 (00000001):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 2 — Function Code 0x03 (00000011):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 3 — Register Address High 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 4 — Register Address Low 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — Quantity High 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 6 — Quantity Low 0x01 (00000001):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 7 — CRC Low 0x84 (10000100):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   1   0   0   0   0   1   1&lt;br /&gt;
&lt;br /&gt;
Byte 8 — CRC High 0x0A (00001010):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   1   0   1   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
[S] = Start bit (always 0)   [P] = Stop bit (always 1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What each field does:&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bytes !! Field !! Value !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Slave Address || 0x01 || Target device on the RS-485 bus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Function Code || 0x03 || Instruction: Read Holding Registers&lt;br /&gt;
|-&lt;br /&gt;
| 3–4 || Starting Address || 0x0000 || Begin at register 0 (Modbus register 40001)&lt;br /&gt;
|-&lt;br /&gt;
| 5–6 || Quantity || 0x0001 || Read 1 register (16-bit value)&lt;br /&gt;
|-&lt;br /&gt;
| 7–8 || CRC-16 || 0x0A84 || Error check — slave silently discards frame if CRC fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transmission time at 9600 baud, 8N1:&#039;&#039;&#039;&lt;br /&gt;
8 bytes × 10 bits = 80 bits → 80 × 104µs = &#039;&#039;&#039;8.32ms&#039;&#039;&#039; to send the full request frame&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Effect on Cable Length ====&lt;br /&gt;
&lt;br /&gt;
Higher baud rates require better quality cabling and are more sensitive to signal degradation over distance. As a general rule:&lt;br /&gt;
&lt;br /&gt;
* 9600 baud — reliable up to approximately 1200 metres on shielded RS-485 cable&lt;br /&gt;
* 19200 baud — reliable up to approximately 600 metres&lt;br /&gt;
* 115200 baud — reliable up to approximately 100 metres&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Parity ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_parity_diagram.png|thumb|400px|right|Diagram illustrating Even, Odd, and No parity bit positions within a Modbus RTU serial data frame. The parity bit is inserted between the last data bit and the stop bit.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parity&#039;&#039;&#039; adds a single calculated bit after the 8 data bits in each Modbus RTU character frame, providing basic single-bit error detection at the byte level. CRC-16 handles error detection at the full message level.&lt;br /&gt;
&lt;br /&gt;
==== Parity Modes ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mode !! Code !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Even Parity || E || Parity bit set so total count of 1s in data + parity = &#039;&#039;&#039;even&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Odd Parity || O || Parity bit set so total count of 1s in data + parity = &#039;&#039;&#039;odd&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| No Parity || N || No parity bit. Error checking relies on CRC-16 only. 2 stop bits recommended per Modbus spec.&lt;br /&gt;
|-&lt;br /&gt;
| Mark Parity || M || Parity bit always 1. Rarely used.&lt;br /&gt;
|-&lt;br /&gt;
| Space Parity || S || Parity bit always 0. Rarely used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Modbus RTU specification recommends &#039;&#039;&#039;Even parity&#039;&#039;&#039; as the default. However &#039;&#039;&#039;8N1&#039;&#039;&#039; (no parity, 1 stop bit) is the de facto standard for most BMS devices in practice.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Parity Bit Calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x31&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;00110001&amp;lt;/code&amp;gt;&lt;br /&gt;
Count of 1-bits in data = 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even Parity (8E1)&#039;&#039;&#039; — 3 is odd, so parity bit = 1 to reach even total (3+1=4):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Odd Parity (8O1)&#039;&#039;&#039; — 3 is already odd, so parity bit = 0 to keep total odd (3+0=3):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    0     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N1)&#039;&#039;&#039; — no parity bit, one stop bit only:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N2)&#039;&#039;&#039; — no parity bit, two stop bits to maintain 11-bit frame:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P1] [P2]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[S] = Start bit   [Par] = Parity bit   [P] = Stop bit&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Request with Even Parity (8E1)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Same request as the Baud Rate example — slave 0x01, FC03, register 0x0000, quantity 0x0001, CRC 0x840A — shown with Even parity applied to every byte.&lt;br /&gt;
&lt;br /&gt;
Parity rule: count the 1s in D0–D7. If count is odd → parity bit = 1. If count is even → parity bit = 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 1 — Slave 0x01 (00000001) — one 1-bit → parity = 1:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1     1&lt;br /&gt;
&lt;br /&gt;
Byte 2 — FC 0x03 (00000011) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   1   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 3 — RegHi 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 4 — RegLo 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — QtyHi 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 6 — QtyLo 0x01 (00000001) — one 1-bit → parity = 1:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1     1&lt;br /&gt;
&lt;br /&gt;
Byte 7 — CRCLo 0x84 (10000100) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   1   0   0   0   0   1    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 8 — CRCHi 0x0A (00001010) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   1   0   1   0   0   0   0    0     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8E1 framing = 11 bits per byte (1 start + 8 data + 1 parity + 1 stop)&lt;br /&gt;
8 bytes × 11 bits = 88 bits → at 9600 baud = &#039;&#039;&#039;9.17ms&#039;&#039;&#039; to transmit the full request&lt;br /&gt;
&lt;br /&gt;
The parity bit is recalculated independently for each byte — it is not a fixed value across the frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Parity Limitation ====&lt;br /&gt;
&lt;br /&gt;
Parity can only detect an &#039;&#039;&#039;odd number&#039;&#039;&#039; of bit errors. If two bits flip simultaneously the parity check still passes even though the data is corrupted. This is why Modbus RTU also uses CRC-16 at the message level — the two mechanisms complement each other.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Data Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_databits_diagram.png|thumb|400px|right|Data bit positions D0–D7 within a Modbus RTU character frame. Data bits carry the actual payload and are transmitted LSB first.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data bits&#039;&#039;&#039; refers to the number of bits carrying actual payload within each Modbus RTU character frame. This is always &#039;&#039;&#039;8&#039;&#039;&#039; in Modbus RTU. 8 bits = 1 byte = values 0–255 per frame. For values larger than 255, Modbus RTU uses two consecutive bytes (one 16-bit register) or four bytes (two registers for 32-bit floating point values).&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Data Bit Weighting&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0xB4&amp;lt;/code&amp;gt; = decimal 180 = binary &amp;lt;code&amp;gt;10110100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modbus RTU transmits data bits LSB first (D0 transmitted first, D7 last):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    0   0   1   0   1   1   0   1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit !! Wire Order !! Weight !! Bit Value in 0xB4 !! Contributes&lt;br /&gt;
|-&lt;br /&gt;
| D0 || 1st transmitted || 2⁰ = 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D1 || 2nd || 2¹ = 2 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D2 || 3rd || 2² = 4 || 1 || 4&lt;br /&gt;
|-&lt;br /&gt;
| D3 || 4th || 2³ = 8 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D4 || 5th || 2⁴ = 16 || 1 || 16&lt;br /&gt;
|-&lt;br /&gt;
| D5 || 6th || 2⁵ = 32 || 1 || 32&lt;br /&gt;
|-&lt;br /&gt;
| D6 || 7th || 2⁶ = 64 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D7 || 8th (last) || 2⁷ = 128 || 1 || 128&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Total&#039;&#039;&#039; || — || — || — || &#039;&#039;&#039;4+16+32+128 = 180 = 0xB4 ✓&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Slave Response with Register Decoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Slave 0x01 responds to the FC03 request. Register 40001 holds value 0x0190 (decimal 400), representing a supply air temperature of 40.0°C with a scale factor of ÷10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response frame in hex — 7 bytes total:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [ByteCt] [DatHi] [DatLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x03 ] [ 0x02 ] [0x01 ] [0x90 ] [0xF8 ] [0x4B ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Critical bytes expanded in Modbus RTU binary (8N1, LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 3 — Byte Count 0x02 (00000010):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    0   1   0   0   0   0   0   0    1&lt;br /&gt;
  D1 = 2¹ = 2 → 2 data bytes follow (one 16-bit register) ✓&lt;br /&gt;
&lt;br /&gt;
Byte 4 — Data High Byte 0x01 (00000001):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1&lt;br /&gt;
  D0 = 1 → high byte value = 1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — Data Low Byte 0x90 (10010000):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    0   0   0   0   1   0   0   1    1&lt;br /&gt;
  D4 = 16, D7 = 128 → 16+128 = 144 = 0x90&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Reconstructing the 16-bit register value (Big Endian — high byte first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
High byte:  0x01 × 256  =  256&lt;br /&gt;
Low byte:   0x90        =  144&lt;br /&gt;
                          ─────&lt;br /&gt;
Register value:            400  =  0x0190&lt;br /&gt;
&lt;br /&gt;
Applied scale factor ÷10:  400 ÷ 10  =  40.0°C&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modbus RTU always sends the high byte of a 16-bit register before the low byte. This is Big Endian byte order. Some devices deviate from this — always check the device register map.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Stop Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_stopbits_diagram.png|thumb|400px|right|Diagram comparing 1 stop bit vs 2 stop bits in a Modbus RTU character frame. Stop bits return the RS-485 line to idle HIGH after each transmitted byte.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stop bits&#039;&#039;&#039; return the RS-485 line to the idle HIGH state after each Modbus RTU character frame. The receiver requires this idle period to correctly detect the falling edge of the next start bit.&lt;br /&gt;
&lt;br /&gt;
==== Stop Bit Configurations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Config !! Stop Bits !! Parity !! Total Bits per Frame !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 8N1 || 1 || None || 10 || Most common Modbus RTU configuration in BMS&lt;br /&gt;
|-&lt;br /&gt;
| 8E1 || 1 || Even || 11 || Modbus RTU spec default — even parity + 1 stop&lt;br /&gt;
|-&lt;br /&gt;
| 8O1 || 1 || Odd || 11 || Odd parity + 1 stop&lt;br /&gt;
|-&lt;br /&gt;
| 8N2 || 2 || None || 11 || No parity, 2 stops — maintains 11-bit frame on noisy lines&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Stop Bit Comparison&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x55&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;01010101&amp;lt;/code&amp;gt; — four 1-bits (even count)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N1 — No Parity, 1 Stop Bit (10 bits total):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    1&lt;br /&gt;
        ←————————————— 10 bits ——————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8E1 — Even Parity, 1 Stop Bit (11 bits total):&#039;&#039;&#039;&lt;br /&gt;
Four 1-bits in data = even count → parity bit = 0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    0     1&lt;br /&gt;
        ←—————————————— 11 bits ———————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N2 — No Parity, 2 Stop Bits (11 bits total):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P1] [P2]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    1    1&lt;br /&gt;
        ←—————————————— 11 bits ———————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the line goes LOW before the stop bit period ends, the receiver flags a &#039;&#039;&#039;framing error&#039;&#039;&#039; and discards the byte. The resulting CRC mismatch causes the master to timeout with no response.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC06 Write Single Register&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master writes value 0x0064 (decimal 100 = setpoint 10.0°C at scale ÷10) to register 40002 (address 0x0001) on slave 0x01.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Request frame in hex — 8 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [ValHi] [ValLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x06 ] [0x00 ] [0x01 ] [0x00 ] [0x64 ] [0x49 ] [0xA4 ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full frame in Modbus RTU binary, 8N1 (LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
Byte 1 0x01: 0  1   0   0   0   0   0   0   0   1   ← Slave address&lt;br /&gt;
Byte 2 0x06: 0  0   1   1   0   0   0   0   0   1   ← Write Single Register&lt;br /&gt;
Byte 3 0x00: 0  0   0   0   0   0   0   0   0   1   ← Register address high&lt;br /&gt;
Byte 4 0x01: 0  1   0   0   0   0   0   0   0   1   ← Register address low (reg 40002)&lt;br /&gt;
Byte 5 0x00: 0  0   0   0   0   0   0   0   0   1   ← Value high byte&lt;br /&gt;
Byte 6 0x64: 0  0   0   1   0   0   1   1   0   1   ← Value low byte (100 decimal)&lt;br /&gt;
Byte 7 0x49: 0  1   0   0   1   0   0   1   0   1   ← CRC low&lt;br /&gt;
Byte 8 0xA4: 0  0   0   1   0   0   1   0   1   1   ← CRC high&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On a successful FC06 write the slave echoes the &#039;&#039;&#039;entire 8-byte request frame back unchanged&#039;&#039;&#039; as its response. If the stop bit on any byte is corrupted, that byte is discarded as a framing error, the CRC check fails, and the master receives no response.&lt;br /&gt;
&lt;br /&gt;
Transmission time at 9600 baud, 8N1: 8 bytes × 10 bits × 104µs = &#039;&#039;&#039;8.32ms&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Flow Control ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_flowcontrol_diagram.png|thumb|400px|right|RS-485 RTS direction switching during a Modbus RTU request/response cycle. The master asserts DE HIGH to transmit, then releases the bus before the slave responds.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Flow control&#039;&#039;&#039; in Modbus RTU on RS-485 is almost always set to &#039;&#039;&#039;None&#039;&#039;&#039; in software. The physical RS-485 half-duplex bus requires direction switching between transmit and receive, but this is handled by the hardware driver enable (DE) pin on the RS-485 transceiver, not by a software flow control protocol.&lt;br /&gt;
&lt;br /&gt;
==== Flow Control Types ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type !! Method !! Compatible with Modbus RTU&lt;br /&gt;
|-&lt;br /&gt;
| None || — || ✓ Standard for RS-485 Modbus RTU&lt;br /&gt;
|-&lt;br /&gt;
| Hardware RTS/CTS || Physical signal lines || Only on RS-232 point-to-point connections&lt;br /&gt;
|-&lt;br /&gt;
| Software XON/XOFF || In-band bytes 0x11 / 0x13 || ✗ Incompatible — Modbus RTU is a binary protocol&lt;br /&gt;
|-&lt;br /&gt;
| RTS as DE toggle || RTS drives RS-485 DE pin || ✓ Used by USB-RS485 adapters for direction switching&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: RS-485 Half-Duplex Direction Control&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In Modbus RTU on RS-485, the driver enable (DE) signal controls which device owns the bus. Only one device may drive the bus at any time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              MASTER TRANSMITTING              MASTER LISTENING&lt;br /&gt;
DE (Master):  ________________________&lt;br /&gt;
             |                        |________________________________&lt;br /&gt;
             ^ DE asserted HIGH        ^ DE released LOW&lt;br /&gt;
&lt;br /&gt;
TX (Master):  [ Start bits of frame...data bytes...CRC ]&lt;br /&gt;
             |←————————————————————————————————————————→|&lt;br /&gt;
&lt;br /&gt;
                                       ↑&lt;br /&gt;
                               3.5 character-time&lt;br /&gt;
                               silent gap (~3.6ms at 9600 baud)&lt;br /&gt;
                               marks end of Modbus RTU frame&lt;br /&gt;
&lt;br /&gt;
DE (Slave):                                        ______________________&lt;br /&gt;
                                                  |&lt;br /&gt;
                                                  ^ Slave asserts its DE HIGH&lt;br /&gt;
&lt;br /&gt;
RX (Master):                                      [ Slave response frame ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* DE HIGH = RS-485 driver active, device is transmitting&lt;br /&gt;
* DE LOW = RS-485 driver disabled, device is listening&lt;br /&gt;
* The 3.5 character-time silent gap is how Modbus RTU detects frame boundaries — there is no delimiter byte&lt;br /&gt;
* If DE is not released fast enough, the master&#039;s driver will collide with the slave&#039;s response on the bus&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Read 2 Registers — Complete Request/Response Cycle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master reads 2 holding registers from slave 0x02, starting at address 0x0010 (registers 40017 and 40018). These could represent, for example, active power high and low bytes from an energy meter.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Master request frame — 8 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [QtyHi] [QtyLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x02 ] [0x03 ] [0x00 ] [0x10 ] [0x00 ] [0x02 ] [0xC4 ] [0x38 ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Slave response frame — 9 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ] [  9  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [ByteCt] [R1Hi ] [R1Lo ] [R2Hi ] [R2Lo ] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x02 ] [0x03 ] [ 0x04 ] [0x00 ] [0xC8 ] [0x01 ] [0x2C ] [0x77 ] [0xDF ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Both frames in Modbus RTU binary, 8N1 (LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REQUEST:&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
0x02 Addr:  0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0x03 FC:    0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
0x00 RegHi: 0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0x10 RegLo: 0   0   0   0   0   1   0   0   0   1&lt;br /&gt;
0x00 QtyHi: 0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0x02 QtyLo: 0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0xC4 CRCLo: 0   0   0   1   0   0   0   1   1   1&lt;br /&gt;
0x38 CRCHi: 0   0   0   0   1   1   1   0   0   1&lt;br /&gt;
&lt;br /&gt;
[— 3.5 char silent gap (~3.6ms at 9600 baud) — master releases bus — slave responds —]&lt;br /&gt;
&lt;br /&gt;
RESPONSE:&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
0x02 Addr:  0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0x03 FC:    0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
0x04 BytCt: 0   0   0   1   0   0   0   0   0   1&lt;br /&gt;
0x00 R1Hi:  0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0xC8 R1Lo:  0   0   0   0   1   0   0   1   1   1&lt;br /&gt;
0x01 R2Hi:  0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
0x2C R2Lo:  0   0   1   1   0   1   0   0   0   1&lt;br /&gt;
0x77 CRCLo: 0   1   1   1   0   1   1   1   0   1&lt;br /&gt;
0xDF CRCHi: 0   1   1   1   1   1   0   1   1   1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding the two register values from the response (Big Endian — high byte first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Register 1 (40017):&lt;br /&gt;
  High byte 0x00 = 0 × 256  =   0&lt;br /&gt;
  Low  byte 0xC8 =           = 200&lt;br /&gt;
  Value = 0 + 200            = 200&lt;br /&gt;
&lt;br /&gt;
Register 2 (40018):&lt;br /&gt;
  High byte 0x01 = 1 × 256  = 256&lt;br /&gt;
  Low  byte 0x2C =           =  44&lt;br /&gt;
  Value = 256 + 44           = 300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If these were active power registers with a scale factor of ÷10:&lt;br /&gt;
Register 1 = 20.0 kW, Register 2 = 30.0 kW&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transmission times at 9600 baud, 8N1:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Request:    8 bytes × 10 bits × 104µs  =   8.32ms&lt;br /&gt;
Silent gap:                             ≈   3.60ms&lt;br /&gt;
Response:   9 bytes × 10 bits × 104µs  =   9.36ms&lt;br /&gt;
                                           ───────&lt;br /&gt;
Total cycle time:                       ≈  21.28ms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The silent gap between the master frame and slave response is critical. If the master releases its driver too late it will collide with the slave&#039;s response. If the slave responds before the gap completes, the master will misinterpret the response as a continuation of its own transmission.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Data Model ==&lt;br /&gt;
&lt;br /&gt;
Modbus organises data into four distinct object types, each with a defined address space. The master accesses these objects using function codes.&lt;br /&gt;
&lt;br /&gt;
=== Coils ===&lt;br /&gt;
&lt;br /&gt;
Coils are single-bit read/write values. They represent binary output states such as a relay, a digital output, or an on/off command. The address range is 1–9999 (using 1-based Modbus convention) or 0x0000–0xFFFF (using the 0-based PDU addressing).&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: fan on/off command, valve open/close output, alarm reset.&lt;br /&gt;
&lt;br /&gt;
=== Discrete Inputs ===&lt;br /&gt;
&lt;br /&gt;
Discrete inputs are single-bit read-only values. They represent binary input states such as a digital sensor, a status contact, or a switch position. Address range: 10001–19999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: door open sensor, high temperature alarm contact, filter dirty status.&lt;br /&gt;
&lt;br /&gt;
=== Holding Registers ===&lt;br /&gt;
&lt;br /&gt;
Holding registers are 16-bit read/write registers. They are the most commonly used data type in Modbus and can hold values such as setpoints, configurations, and output values. Address range: 40001–49999.&lt;br /&gt;
&lt;br /&gt;
A single holding register holds values from 0 to 65535 (unsigned) or -32768 to 32767 (signed). For larger values such as floating point temperatures or energy readings, two consecutive registers are used together to form a 32-bit value.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: temperature setpoint, VFD speed reference, valve position command.&lt;br /&gt;
&lt;br /&gt;
=== Input Registers ===&lt;br /&gt;
&lt;br /&gt;
Input registers are 16-bit read-only registers. They represent measured or computed values provided by the slave device. Address range: 30001–39999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: supply air temperature, room CO₂ concentration, energy meter active power reading.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Function Codes ==&lt;br /&gt;
&lt;br /&gt;
Function codes tell the slave device what action to perform. They are carried in the second byte of every Modbus RTU frame.&lt;br /&gt;
&lt;br /&gt;
=== Read Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Reads&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Read Coils || Coils (1-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Read Discrete Inputs || Discrete Inputs (1-bit, read-only)&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Read Holding Registers || Holding Registers (16-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Read Input Registers || Input Registers (16-bit, read-only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Write Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Writes&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Write Single Coil || Single coil ON (0xFF00) or OFF (0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Write Single Register || Single holding register&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 0x0F || Write Multiple Coils || Multiple coils&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 0x10 || Write Multiple Registers || Multiple holding registers&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Diagnostic Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 07 || 0x07 || Read Exception Status || Returns device error status byte&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Diagnostics || Various sub-functions for testing comms&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Get Comm Event Counter || Returns count of successful messages&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 0x11 || Report Server ID || Returns device type and status&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
=== CRC and LRC Checking ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC-16 (Cyclic Redundancy Check)&#039;&#039;&#039; is used in Modbus RTU. It is a 16-bit error detection value calculated from all bytes in the message excluding the CRC bytes themselves. The master calculates the CRC before sending, and the slave recalculates it upon receipt. If the values do not match, the message is discarded silently — no response is sent, and the master will timeout.&lt;br /&gt;
&lt;br /&gt;
The CRC polynomial used is: &amp;lt;code&amp;gt;0xA001&amp;lt;/code&amp;gt; (reflected form of CRC-16-IBM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LRC (Longitudinal Redundancy Check)&#039;&#039;&#039; is used in Modbus ASCII only. It is calculated as the two&#039;s complement of the sum of all byte values in the message. It is simpler but less robust than CRC-16.&lt;br /&gt;
&lt;br /&gt;
=== Exception Codes ===&lt;br /&gt;
&lt;br /&gt;
When a slave receives a valid request but cannot fulfil it, it returns an exception response. The function code in the response has its most significant bit set to 1 (i.e. the original function code + 0x80), followed by an exception code byte.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Exception Code !! Hex !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Illegal Function || The function code is not supported by this device&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Illegal Data Address || The register address does not exist on this device&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Illegal Data Value || The value in the data field is not permitted&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Slave Device Failure || An unrecoverable error occurred in the slave&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Acknowledge || Slave accepted the request but needs more time&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Slave Device Busy || Slave is busy processing a previous request&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Memory Parity Error || Slave detected a parity error reading extended memory&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0x0A || Gateway Path Unavailable || Gateway could not allocate a path (Modbus TCP)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Gateway Target No Response || Target device on gateway failed to respond&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus in BMS Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Typical Devices ===&lt;br /&gt;
&lt;br /&gt;
Modbus is one of the most commonly encountered protocols when integrating third-party field devices into a BMS. The following device types frequently use Modbus RTU as their primary or secondary communication interface:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Energy meters&#039;&#039;&#039; — active power (kW), reactive power (kVAR), energy (kWh), power factor, voltage and current readings via input registers&lt;br /&gt;
* &#039;&#039;&#039;Variable Frequency Drives (VFDs)&#039;&#039;&#039; — speed reference (Hz or %), run/stop command, fault status, output frequency and current feedback&lt;br /&gt;
* &#039;&#039;&#039;Chillers and heat pumps&#039;&#039;&#039; — leaving water temperature, setpoint, mode command, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Air Handling Units (AHUs)&#039;&#039;&#039; — supply/return air temperature, damper position, fan speed feedback&lt;br /&gt;
* &#039;&#039;&#039;CO₂ and air quality sensors&#039;&#039;&#039; — CO₂ concentration (ppm), temperature, humidity&lt;br /&gt;
* &#039;&#039;&#039;Heat meters&#039;&#039;&#039; — flow rate, inlet/outlet temperatures, cumulative energy&lt;br /&gt;
* &#039;&#039;&#039;UPS systems&#039;&#039;&#039; — battery voltage, charge level, load percentage, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Generator controllers&#039;&#039;&#039; — run status, fuel level, output voltage, frequency&lt;br /&gt;
&lt;br /&gt;
=== Wiring and Topology ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU on RS-485 uses a &#039;&#039;&#039;daisy-chain bus topology&#039;&#039;&#039;. Devices are connected in series from the first to the last node. The two conductors of the RS-485 pair are labelled A (−) and B (+), though manufacturers often use inconsistent naming — some label them D− / D+, or even reverse the A/B convention entirely.&lt;br /&gt;
&lt;br /&gt;
Key wiring rules:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Termination resistors&#039;&#039;&#039; of 120Ω must be fitted at both physical ends of the RS-485 bus to prevent signal reflections. Only the two end devices are terminated — never intermediate devices.&lt;br /&gt;
* &#039;&#039;&#039;Bias resistors&#039;&#039;&#039; (typically 560Ω to 1kΩ) are recommended to hold the bus at a defined state when no device is transmitting, preventing false start bit detection on an idle line.&lt;br /&gt;
* &#039;&#039;&#039;Maximum cable length&#039;&#039;&#039; depends on baud rate (see Baud Rate section), but 1200 metres at 9600 baud is a typical practical limit for standard twisted pair cable.&lt;br /&gt;
* The maximum number of addressable slave devices is 247, though the RS-485 electrical standard supports up to 32 unit loads on a single segment without repeaters (256 with 1/8 unit load devices).&lt;br /&gt;
* Shielded twisted pair (STP) cable is strongly recommended in BMS environments due to electrical noise from motors, VFDs, and other inductive loads.&lt;br /&gt;
&lt;br /&gt;
=== Common Issues and Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
The following are the most frequently encountered Modbus RTU communication problems in BMS installations:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No response from slave / timeout&#039;&#039;&#039;&lt;br /&gt;
* Verify slave address matches the configured address on the physical device&lt;br /&gt;
* Check baud rate, parity, data bits, and stop bits match on master and slave&lt;br /&gt;
* Check A/B wiring polarity — reversed polarity is a very common installation error&lt;br /&gt;
* Verify termination resistors are fitted at the correct endpoints only&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC errors / corrupted data&#039;&#039;&#039;&lt;br /&gt;
* Inspect cable routing — avoid running alongside power cables or VFD output cables&lt;br /&gt;
* Check for missing or incorrectly placed termination resistors&lt;br /&gt;
* Reduce baud rate to test if the issue is speed-related&lt;br /&gt;
* Check for ground loops — ensure cable shield is grounded at one end only&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intermittent communication&#039;&#039;&#039;&lt;br /&gt;
* Often caused by missing bias resistors — the bus floats to an indeterminate state when idle&lt;br /&gt;
* Check for multiple termination resistors incorrectly fitted to intermediate devices&lt;br /&gt;
* Investigate RTS/driver enable timing issues if using a custom RS-485 adapter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incorrect register values&#039;&#039;&#039;&lt;br /&gt;
* Confirm register addressing convention — some devices use 0-based addressing, others 1-based&lt;br /&gt;
* Check byte order (endianness) for 32-bit floating point values — some devices use Big Endian, others Little Endian or mixed (byte-swapped) formats&lt;br /&gt;
* Verify scaling factors — a register reading of 1234 may represent 12.34 depending on the device register map&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Modbus&amp;diff=84</id>
		<title>Modbus</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Modbus&amp;diff=84"/>
		<updated>2026-02-24T23:43:17Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: /* Effect on Cable Length */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Modbus =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Modbus is an open, serial communication protocol originally developed for use in programmable logic controllers (PLCs). It has since become one of the most widely deployed industrial communication protocols in the world, particularly in Building Management Systems (BMS), SCADA environments, energy metering, and industrial automation.&lt;br /&gt;
&lt;br /&gt;
Modbus operates on a master-slave (also referred to as client-server in newer documentation) architecture, where a single master device initiates all communication and one or more slave devices respond. It is valued for its simplicity, robustness, and vendor-neutral design — making it ideal for integrating devices from multiple manufacturers into a unified control system.&lt;br /&gt;
&lt;br /&gt;
In BMS applications, Modbus is commonly used to communicate with energy meters, variable frequency drives (VFDs), chillers, boilers, air handling units (AHUs), and a wide range of sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
Modbus was developed in 1979 by Modicon (now a brand of Schneider Electric) for use with their programmable logic controllers. It was designed as a simple and robust protocol for serial communication between controllers on a production floor.&lt;br /&gt;
&lt;br /&gt;
In 1996, Modbus over TCP/IP (Modbus TCP) was introduced, allowing the protocol to be used over modern Ethernet networks. This dramatically expanded its use cases and kept it relevant into the internet era.&lt;br /&gt;
&lt;br /&gt;
In 2004, the rights to the Modbus specification were transferred to the Modbus Organization, a non-profit trade association that maintains and promotes the standard to this day. The protocol remains publicly available and royalty-free, which is a significant reason for its continued adoption over proprietary alternatives.&lt;br /&gt;
&lt;br /&gt;
Today Modbus exists in three primary variants: Modbus RTU and Modbus ASCII (both for serial communication), and Modbus TCP/IP (for Ethernet communication).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Protocol Architecture ==&lt;br /&gt;
&lt;br /&gt;
=== Master-Slave Model ===&lt;br /&gt;
&lt;br /&gt;
Modbus uses a strict master-slave architecture. There is always one master and up to 247 addressable slave devices on a single serial bus. Each slave is assigned a unique address between 1 and 247. Address 0 is reserved for broadcast messages, which all slaves receive but do not respond to.&lt;br /&gt;
&lt;br /&gt;
The master is always the initiator of communication. A slave device never transmits data unless it has first been queried by the master. This eliminates bus collisions and keeps the protocol deterministic — an important quality in control systems where timing and reliability are critical.&lt;br /&gt;
&lt;br /&gt;
In a BMS context, the master is typically the Building Management Controller (BMC) or a gateway device, and the slaves are field devices such as energy meters, controllers, or sensors.&lt;br /&gt;
&lt;br /&gt;
=== Request-Response Cycle ===&lt;br /&gt;
&lt;br /&gt;
Every Modbus transaction follows a simple two-step cycle:&lt;br /&gt;
&lt;br /&gt;
# The &#039;&#039;&#039;master&#039;&#039;&#039; sends a request frame to a specific slave address (or broadcast to address 0).&lt;br /&gt;
# The &#039;&#039;&#039;slave&#039;&#039;&#039; receives the request, processes it, and returns a response frame to the master.&lt;br /&gt;
&lt;br /&gt;
If the slave receives a valid request but cannot comply (e.g. the register address does not exist), it returns an &#039;&#039;&#039;exception response&#039;&#039;&#039; containing an error code. If the master receives no response within its configured timeout window, it may retry the request or log a communication fault.&lt;br /&gt;
&lt;br /&gt;
A full Modbus RTU frame consists of the following fields in order:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Size !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Device Address || 1 byte || Slave address (1–247), or 0 for broadcast&lt;br /&gt;
|-&lt;br /&gt;
| Function Code || 1 byte || Defines the type of action requested&lt;br /&gt;
|-&lt;br /&gt;
| Data || Variable || Register addresses, values, or quantities&lt;br /&gt;
|-&lt;br /&gt;
| CRC || 2 bytes || Error checking (Cyclic Redundancy Check)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Transmission Modes ==&lt;br /&gt;
&lt;br /&gt;
=== Modbus RTU ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU (Remote Terminal Unit) is the most common implementation of the protocol in BMS and industrial environments. Data is transmitted as binary bytes over an RS-232 or RS-485 serial connection.&lt;br /&gt;
&lt;br /&gt;
Each byte of data is encoded as a single binary character. The framing of messages is defined by silent intervals (gaps) between characters — a gap of at least 3.5 character times signals the start or end of a message frame.&lt;br /&gt;
&lt;br /&gt;
RTU is preferred over ASCII for most applications because it is more efficient: it transmits the same data in roughly half the number of bytes, making better use of available bandwidth.&lt;br /&gt;
&lt;br /&gt;
Key characteristics:&lt;br /&gt;
* Binary encoding&lt;br /&gt;
* CRC-16 error checking&lt;br /&gt;
* Message framing via inter-character silence (3.5 character times)&lt;br /&gt;
* Physical layer: RS-485 (most common), RS-232, RS-422&lt;br /&gt;
&lt;br /&gt;
=== Modbus ASCII ===&lt;br /&gt;
&lt;br /&gt;
Modbus ASCII transmits data as ASCII text characters rather than raw binary. Each byte of data is represented as two hexadecimal ASCII characters (e.g. the byte &amp;lt;code&amp;gt;0x5B&amp;lt;/code&amp;gt; is sent as the characters &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
ASCII mode uses a colon (&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;) as a start delimiter and CR/LF characters as an end delimiter. It uses LRC (Longitudinal Redundancy Check) for error checking rather than CRC.&lt;br /&gt;
&lt;br /&gt;
ASCII mode is less bandwidth-efficient than RTU but is easier to debug with simple terminal tools and is more tolerant of timing variations on noisy or slow serial lines. It is rarely used in modern BMS installations.&lt;br /&gt;
&lt;br /&gt;
=== Modbus TCP/IP ===&lt;br /&gt;
&lt;br /&gt;
Modbus TCP/IP wraps the standard Modbus PDU (Protocol Data Unit) inside a TCP packet and transmits it over a standard Ethernet network. It uses port &#039;&#039;&#039;502&#039;&#039;&#039; by default.&lt;br /&gt;
&lt;br /&gt;
The serial-specific fields (device address and CRC) are replaced by a &#039;&#039;&#039;MBAP header&#039;&#039;&#039; (Modbus Application Protocol header), which contains a transaction identifier, protocol identifier, message length, and unit identifier.&lt;br /&gt;
&lt;br /&gt;
Modbus TCP removes the need for RS-485 wiring and allows Modbus devices to be integrated into IP-based building networks. Many modern BMS gateways and energy meters support Modbus TCP natively or via an RS-485-to-Ethernet converter.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Communication Parameters ==&lt;br /&gt;
&lt;br /&gt;
Communication parameters are the settings that define how data is physically transmitted between the master and slave devices on a serial Modbus network. All devices on the same bus &#039;&#039;&#039;must be configured with identical parameters&#039;&#039;&#039; — a mismatch in any one setting will cause communication failures.&lt;br /&gt;
&lt;br /&gt;
The parameters covered here apply primarily to Modbus RTU and Modbus ASCII (serial variants). Modbus TCP uses standard IP networking parameters instead.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Baud Rate ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_baudrate_diagram.png|thumb|400px|right|Diagram showing how baud rate affects the time width of each bit on the signal line. A higher baud rate means narrower bit windows and faster data transmission.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Baud rate&#039;&#039;&#039; defines the number of signal changes per second on the communication line. In Modbus RTU, one symbol = one binary bit, so baud rate = bits per second.&lt;br /&gt;
&lt;br /&gt;
==== Common Baud Rate Values ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Baud Rate !! Bits per Second !! Typical Use Case&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || 1,200 bps || Legacy devices, long cable runs with poor quality cable&lt;br /&gt;
|-&lt;br /&gt;
| 2400 || 2,400 bps || Older meters and sensors&lt;br /&gt;
|-&lt;br /&gt;
| 4800 || 4,800 bps || Moderate speed legacy devices&lt;br /&gt;
|-&lt;br /&gt;
| 9600 || 9,600 bps || &#039;&#039;&#039;Most common default&#039;&#039;&#039; — widely supported by all devices&lt;br /&gt;
|-&lt;br /&gt;
| 19200 || 19,200 bps || Standard BMS installations with moderate device counts&lt;br /&gt;
|-&lt;br /&gt;
| 38400 || 38,400 bps || Higher performance systems&lt;br /&gt;
|-&lt;br /&gt;
| 57600 || 57,600 bps || Fast networks, shorter cable runs&lt;br /&gt;
|-&lt;br /&gt;
| 115200 || 115,200 bps || Maximum practical speed for RS-485 in most installations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The default baud rate for Modbus RTU is &#039;&#039;&#039;9600 bps&#039;&#039;&#039;, though 19200 bps is very common in BMS environments.&lt;br /&gt;
&lt;br /&gt;
==== How Baud Rate Affects the Signal ====&lt;br /&gt;
&lt;br /&gt;
Each bit occupies a fixed time window called the &#039;&#039;&#039;bit period&#039;&#039;&#039;, calculated as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Bit Period = 1 / Baud Rate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At 9600 baud each bit lasts approximately &#039;&#039;&#039;104 microseconds&#039;&#039;&#039;. At 115200 baud each bit lasts approximately &#039;&#039;&#039;8.7 microseconds&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Single Byte at 9600 Baud, 8N1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The byte &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; (decimal 65) on the RS-485 wire at 9600 baud:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:     Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop&lt;br /&gt;
Value:     0    1    0    0    0    0    0    1    0     1&lt;br /&gt;
µs each: 104µs per bit window&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Start bit&#039;&#039;&#039; (1 bit, always 0): Pulls line LOW — signals receiver to begin reading&lt;br /&gt;
* &#039;&#039;&#039;D0–D7&#039;&#039;&#039; (8 bits): Binary data, transmitted LSB first. &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;01000001&amp;lt;/code&amp;gt; → wire order: 1,0,0,0,0,0,1,0&lt;br /&gt;
* &#039;&#039;&#039;Stop bit&#039;&#039;&#039; (1 bit, always 1): Returns line HIGH — marks end of byte&lt;br /&gt;
&lt;br /&gt;
Total frame = 10 bits × 104µs = &#039;&#039;&#039;1.04ms per byte&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Read Holding Register&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master reads 1 holding register (address 0x0000 = register 40001) from slave address 0x01.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame in hex — 8 bytes total:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [QtyHi] [QtyLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x03 ] [0x00 ] [0x00 ] [0x00 ] [0x01 ] [0x84 ] [0x0A ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Each byte in Modbus RTU binary (8N1, LSB first, 9600 baud):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 1 — Slave Address 0x01 (00000001):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 2 — Function Code 0x03 (00000011):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 3 — Register Address High 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 4 — Register Address Low 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — Quantity High 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 6 — Quantity Low 0x01 (00000001):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 7 — CRC Low 0x84 (10000100):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   1   0   0   0   0   1   1&lt;br /&gt;
&lt;br /&gt;
Byte 8 — CRC High 0x0A (00001010):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   1   0   1   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
[S] = Start bit (always 0)   [P] = Stop bit (always 1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What each field does:&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bytes !! Field !! Value !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Slave Address || 0x01 || Target device on the RS-485 bus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Function Code || 0x03 || Instruction: Read Holding Registers&lt;br /&gt;
|-&lt;br /&gt;
| 3–4 || Starting Address || 0x0000 || Begin at register 0 (Modbus register 40001)&lt;br /&gt;
|-&lt;br /&gt;
| 5–6 || Quantity || 0x0001 || Read 1 register (16-bit value)&lt;br /&gt;
|-&lt;br /&gt;
| 7–8 || CRC-16 || 0x0A84 || Error check — slave silently discards frame if CRC fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transmission time at 9600 baud, 8N1:&#039;&#039;&#039;&lt;br /&gt;
8 bytes × 10 bits = 80 bits → 80 × 104µs = &#039;&#039;&#039;8.32ms&#039;&#039;&#039; to send the full request frame&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Effect on Cable Length ====&lt;br /&gt;
&lt;br /&gt;
Higher baud rates require better quality cabling and are more sensitive to signal degradation over distance. As a general rule:&lt;br /&gt;
&lt;br /&gt;
* 9600 baud — reliable up to approximately 1200 metres on shielded RS-485 cable&lt;br /&gt;
* 19200 baud — reliable up to approximately 600 metres&lt;br /&gt;
* 115200 baud — reliable up to approximately 100 metres&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Parity ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_parity_diagram.png|thumb|400px|right|Diagram illustrating Even, Odd, and No parity bit positions within a Modbus RTU serial data frame. The parity bit is inserted between the last data bit and the stop bit.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parity&#039;&#039;&#039; adds a single calculated bit after the 8 data bits in each Modbus RTU character frame, providing basic single-bit error detection at the byte level. CRC-16 handles error detection at the full message level.&lt;br /&gt;
&lt;br /&gt;
==== Parity Modes ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mode !! Code !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Even Parity || E || Parity bit set so total count of 1s in data + parity = &#039;&#039;&#039;even&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Odd Parity || O || Parity bit set so total count of 1s in data + parity = &#039;&#039;&#039;odd&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| No Parity || N || No parity bit. Error checking relies on CRC-16 only. 2 stop bits recommended per Modbus spec.&lt;br /&gt;
|-&lt;br /&gt;
| Mark Parity || M || Parity bit always 1. Rarely used.&lt;br /&gt;
|-&lt;br /&gt;
| Space Parity || S || Parity bit always 0. Rarely used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Modbus RTU specification recommends &#039;&#039;&#039;Even parity&#039;&#039;&#039; as the default. However &#039;&#039;&#039;8N1&#039;&#039;&#039; (no parity, 1 stop bit) is the de facto standard for most BMS devices in practice.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Parity Bit Calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x31&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;00110001&amp;lt;/code&amp;gt;&lt;br /&gt;
Count of 1-bits in data = 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even Parity (8E1)&#039;&#039;&#039; — 3 is odd, so parity bit = 1 to reach even total (3+1=4):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Odd Parity (8O1)&#039;&#039;&#039; — 3 is already odd, so parity bit = 0 to keep total odd (3+0=3):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    0     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N1)&#039;&#039;&#039; — no parity bit, one stop bit only:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N2)&#039;&#039;&#039; — no parity bit, two stop bits to maintain 11-bit frame:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P1] [P2]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[S] = Start bit   [Par] = Parity bit   [P] = Stop bit&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Request with Even Parity (8E1)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Same request as the Baud Rate example — slave 0x01, FC03, register 0x0000, quantity 0x0001, CRC 0x840A — shown with Even parity applied to every byte.&lt;br /&gt;
&lt;br /&gt;
Parity rule: count the 1s in D0–D7. If count is odd → parity bit = 1. If count is even → parity bit = 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 1 — Slave 0x01 (00000001) — one 1-bit → parity = 1:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1     1&lt;br /&gt;
&lt;br /&gt;
Byte 2 — FC 0x03 (00000011) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   1   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 3 — RegHi 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 4 — RegLo 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — QtyHi 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 6 — QtyLo 0x01 (00000001) — one 1-bit → parity = 1:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1     1&lt;br /&gt;
&lt;br /&gt;
Byte 7 — CRCLo 0x84 (10000100) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   1   0   0   0   0   1    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 8 — CRCHi 0x0A (00001010) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   1   0   1   0   0   0   0    0     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8E1 framing = 11 bits per byte (1 start + 8 data + 1 parity + 1 stop)&lt;br /&gt;
8 bytes × 11 bits = 88 bits → at 9600 baud = &#039;&#039;&#039;9.17ms&#039;&#039;&#039; to transmit the full request&lt;br /&gt;
&lt;br /&gt;
The parity bit is recalculated independently for each byte — it is not a fixed value across the frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Parity Limitation ====&lt;br /&gt;
&lt;br /&gt;
Parity can only detect an &#039;&#039;&#039;odd number&#039;&#039;&#039; of bit errors. If two bits flip simultaneously the parity check still passes even though the data is corrupted. This is why Modbus RTU also uses CRC-16 at the message level — the two mechanisms complement each other.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Data Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_databits_diagram.png|thumb|400px|right|Data bit positions D0–D7 within a Modbus RTU character frame. Data bits carry the actual payload and are transmitted LSB first.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data bits&#039;&#039;&#039; refers to the number of bits carrying actual payload within each Modbus RTU character frame. This is always &#039;&#039;&#039;8&#039;&#039;&#039; in Modbus RTU. 8 bits = 1 byte = values 0–255 per frame. For values larger than 255, Modbus RTU uses two consecutive bytes (one 16-bit register) or four bytes (two registers for 32-bit floating point values).&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Data Bit Weighting&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0xB4&amp;lt;/code&amp;gt; = decimal 180 = binary &amp;lt;code&amp;gt;10110100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modbus RTU transmits data bits LSB first (D0 transmitted first, D7 last):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    0   0   1   0   1   1   0   1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit !! Wire Order !! Weight !! Bit Value in 0xB4 !! Contributes&lt;br /&gt;
|-&lt;br /&gt;
| D0 || 1st transmitted || 2⁰ = 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D1 || 2nd || 2¹ = 2 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D2 || 3rd || 2² = 4 || 1 || 4&lt;br /&gt;
|-&lt;br /&gt;
| D3 || 4th || 2³ = 8 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D4 || 5th || 2⁴ = 16 || 1 || 16&lt;br /&gt;
|-&lt;br /&gt;
| D5 || 6th || 2⁵ = 32 || 1 || 32&lt;br /&gt;
|-&lt;br /&gt;
| D6 || 7th || 2⁶ = 64 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D7 || 8th (last) || 2⁷ = 128 || 1 || 128&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Total&#039;&#039;&#039; || — || — || — || &#039;&#039;&#039;4+16+32+128 = 180 = 0xB4 ✓&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Slave Response with Register Decoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Slave 0x01 responds to the FC03 request. Register 40001 holds value 0x0190 (decimal 400), representing a supply air temperature of 40.0°C with a scale factor of ÷10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response frame in hex — 7 bytes total:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [ByteCt] [DatHi] [DatLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x03 ] [ 0x02 ] [0x01 ] [0x90 ] [0xF8 ] [0x4B ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Critical bytes expanded in Modbus RTU binary (8N1, LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 3 — Byte Count 0x02 (00000010):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    0   1   0   0   0   0   0   0    1&lt;br /&gt;
  D1 = 2¹ = 2 → 2 data bytes follow (one 16-bit register) ✓&lt;br /&gt;
&lt;br /&gt;
Byte 4 — Data High Byte 0x01 (00000001):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1&lt;br /&gt;
  D0 = 1 → high byte value = 1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — Data Low Byte 0x90 (10010000):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    0   0   0   0   1   0   0   1    1&lt;br /&gt;
  D4 = 16, D7 = 128 → 16+128 = 144 = 0x90&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Reconstructing the 16-bit register value (Big Endian — high byte first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
High byte:  0x01 × 256  =  256&lt;br /&gt;
Low byte:   0x90        =  144&lt;br /&gt;
                          ─────&lt;br /&gt;
Register value:            400  =  0x0190&lt;br /&gt;
&lt;br /&gt;
Applied scale factor ÷10:  400 ÷ 10  =  40.0°C&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modbus RTU always sends the high byte of a 16-bit register before the low byte. This is Big Endian byte order. Some devices deviate from this — always check the device register map.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Stop Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_stopbits_diagram.png|thumb|400px|right|Diagram comparing 1 stop bit vs 2 stop bits in a Modbus RTU character frame. Stop bits return the RS-485 line to idle HIGH after each transmitted byte.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stop bits&#039;&#039;&#039; return the RS-485 line to the idle HIGH state after each Modbus RTU character frame. The receiver requires this idle period to correctly detect the falling edge of the next start bit.&lt;br /&gt;
&lt;br /&gt;
==== Stop Bit Configurations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Config !! Stop Bits !! Parity !! Total Bits per Frame !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 8N1 || 1 || None || 10 || Most common Modbus RTU configuration in BMS&lt;br /&gt;
|-&lt;br /&gt;
| 8E1 || 1 || Even || 11 || Modbus RTU spec default — even parity + 1 stop&lt;br /&gt;
|-&lt;br /&gt;
| 8O1 || 1 || Odd || 11 || Odd parity + 1 stop&lt;br /&gt;
|-&lt;br /&gt;
| 8N2 || 2 || None || 11 || No parity, 2 stops — maintains 11-bit frame on noisy lines&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Stop Bit Comparison&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x55&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;01010101&amp;lt;/code&amp;gt; — four 1-bits (even count)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N1 — No Parity, 1 Stop Bit (10 bits total):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    1&lt;br /&gt;
        ←————————————— 10 bits ——————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8E1 — Even Parity, 1 Stop Bit (11 bits total):&#039;&#039;&#039;&lt;br /&gt;
Four 1-bits in data = even count → parity bit = 0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    0     1&lt;br /&gt;
        ←—————————————— 11 bits ———————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N2 — No Parity, 2 Stop Bits (11 bits total):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P1] [P2]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    1    1&lt;br /&gt;
        ←—————————————— 11 bits ———————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the line goes LOW before the stop bit period ends, the receiver flags a &#039;&#039;&#039;framing error&#039;&#039;&#039; and discards the byte. The resulting CRC mismatch causes the master to timeout with no response.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC06 Write Single Register&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master writes value 0x0064 (decimal 100 = setpoint 10.0°C at scale ÷10) to register 40002 (address 0x0001) on slave 0x01.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Request frame in hex — 8 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [ValHi] [ValLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x06 ] [0x00 ] [0x01 ] [0x00 ] [0x64 ] [0x49 ] [0xA4 ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full frame in Modbus RTU binary, 8N1 (LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
Byte 1 0x01: 0  1   0   0   0   0   0   0   0   1   ← Slave address&lt;br /&gt;
Byte 2 0x06: 0  0   1   1   0   0   0   0   0   1   ← Write Single Register&lt;br /&gt;
Byte 3 0x00: 0  0   0   0   0   0   0   0   0   1   ← Register address high&lt;br /&gt;
Byte 4 0x01: 0  1   0   0   0   0   0   0   0   1   ← Register address low (reg 40002)&lt;br /&gt;
Byte 5 0x00: 0  0   0   0   0   0   0   0   0   1   ← Value high byte&lt;br /&gt;
Byte 6 0x64: 0  0   0   1   0   0   1   1   0   1   ← Value low byte (100 decimal)&lt;br /&gt;
Byte 7 0x49: 0  1   0   0   1   0   0   1   0   1   ← CRC low&lt;br /&gt;
Byte 8 0xA4: 0  0   0   1   0   0   1   0   1   1   ← CRC high&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On a successful FC06 write the slave echoes the &#039;&#039;&#039;entire 8-byte request frame back unchanged&#039;&#039;&#039; as its response. If the stop bit on any byte is corrupted, that byte is discarded as a framing error, the CRC check fails, and the master receives no response.&lt;br /&gt;
&lt;br /&gt;
Transmission time at 9600 baud, 8N1: 8 bytes × 10 bits × 104µs = &#039;&#039;&#039;8.32ms&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Flow Control ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_flowcontrol_diagram.png|thumb|400px|right|RS-485 RTS direction switching during a Modbus RTU request/response cycle. The master asserts DE HIGH to transmit, then releases the bus before the slave responds.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Flow control&#039;&#039;&#039; in Modbus RTU on RS-485 is almost always set to &#039;&#039;&#039;None&#039;&#039;&#039; in software. The physical RS-485 half-duplex bus requires direction switching between transmit and receive, but this is handled by the hardware driver enable (DE) pin on the RS-485 transceiver, not by a software flow control protocol.&lt;br /&gt;
&lt;br /&gt;
==== Flow Control Types ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type !! Method !! Compatible with Modbus RTU&lt;br /&gt;
|-&lt;br /&gt;
| None || — || ✓ Standard for RS-485 Modbus RTU&lt;br /&gt;
|-&lt;br /&gt;
| Hardware RTS/CTS || Physical signal lines || Only on RS-232 point-to-point connections&lt;br /&gt;
|-&lt;br /&gt;
| Software XON/XOFF || In-band bytes 0x11 / 0x13 || ✗ Incompatible — Modbus RTU is a binary protocol&lt;br /&gt;
|-&lt;br /&gt;
| RTS as DE toggle || RTS drives RS-485 DE pin || ✓ Used by USB-RS485 adapters for direction switching&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: RS-485 Half-Duplex Direction Control&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In Modbus RTU on RS-485, the driver enable (DE) signal controls which device owns the bus. Only one device may drive the bus at any time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              MASTER TRANSMITTING              MASTER LISTENING&lt;br /&gt;
DE (Master):  ________________________&lt;br /&gt;
             |                        |________________________________&lt;br /&gt;
             ^ DE asserted HIGH        ^ DE released LOW&lt;br /&gt;
&lt;br /&gt;
TX (Master):  [ Start bits of frame...data bytes...CRC ]&lt;br /&gt;
             |←————————————————————————————————————————→|&lt;br /&gt;
&lt;br /&gt;
                                       ↑&lt;br /&gt;
                               3.5 character-time&lt;br /&gt;
                               silent gap (~3.6ms at 9600 baud)&lt;br /&gt;
                               marks end of Modbus RTU frame&lt;br /&gt;
&lt;br /&gt;
DE (Slave):                                        ______________________&lt;br /&gt;
                                                  |&lt;br /&gt;
                                                  ^ Slave asserts its DE HIGH&lt;br /&gt;
&lt;br /&gt;
RX (Master):                                      [ Slave response frame ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* DE HIGH = RS-485 driver active, device is transmitting&lt;br /&gt;
* DE LOW = RS-485 driver disabled, device is listening&lt;br /&gt;
* The 3.5 character-time silent gap is how Modbus RTU detects frame boundaries — there is no delimiter byte&lt;br /&gt;
* If DE is not released fast enough, the master&#039;s driver will collide with the slave&#039;s response on the bus&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Read 2 Registers — Complete Request/Response Cycle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master reads 2 holding registers from slave 0x02, starting at address 0x0010 (registers 40017 and 40018). These could represent, for example, active power high and low bytes from an energy meter.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Master request frame — 8 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [QtyHi] [QtyLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x02 ] [0x03 ] [0x00 ] [0x10 ] [0x00 ] [0x02 ] [0xC4 ] [0x38 ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Slave response frame — 9 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ] [  9  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [ByteCt] [R1Hi ] [R1Lo ] [R2Hi ] [R2Lo ] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x02 ] [0x03 ] [ 0x04 ] [0x00 ] [0xC8 ] [0x01 ] [0x2C ] [0x77 ] [0xDF ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Both frames in Modbus RTU binary, 8N1 (LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REQUEST:&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
0x02 Addr:  0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0x03 FC:    0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
0x00 RegHi: 0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0x10 RegLo: 0   0   0   0   0   1   0   0   0   1&lt;br /&gt;
0x00 QtyHi: 0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0x02 QtyLo: 0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0xC4 CRCLo: 0   0   0   1   0   0   0   1   1   1&lt;br /&gt;
0x38 CRCHi: 0   0   0   0   1   1   1   0   0   1&lt;br /&gt;
&lt;br /&gt;
[— 3.5 char silent gap (~3.6ms at 9600 baud) — master releases bus — slave responds —]&lt;br /&gt;
&lt;br /&gt;
RESPONSE:&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
0x02 Addr:  0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0x03 FC:    0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
0x04 BytCt: 0   0   0   1   0   0   0   0   0   1&lt;br /&gt;
0x00 R1Hi:  0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0xC8 R1Lo:  0   0   0   0   1   0   0   1   1   1&lt;br /&gt;
0x01 R2Hi:  0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
0x2C R2Lo:  0   0   1   1   0   1   0   0   0   1&lt;br /&gt;
0x77 CRCLo: 0   1   1   1   0   1   1   1   0   1&lt;br /&gt;
0xDF CRCHi: 0   1   1   1   1   1   0   1   1   1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding the two register values from the response (Big Endian — high byte first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Register 1 (40017):&lt;br /&gt;
  High byte 0x00 = 0 × 256  =   0&lt;br /&gt;
  Low  byte 0xC8 =           = 200&lt;br /&gt;
  Value = 0 + 200            = 200&lt;br /&gt;
&lt;br /&gt;
Register 2 (40018):&lt;br /&gt;
  High byte 0x01 = 1 × 256  = 256&lt;br /&gt;
  Low  byte 0x2C =           =  44&lt;br /&gt;
  Value = 256 + 44           = 300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If these were active power registers with a scale factor of ÷10:&lt;br /&gt;
Register 1 = 20.0 kW, Register 2 = 30.0 kW&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transmission times at 9600 baud, 8N1:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Request:    8 bytes × 10 bits × 104µs  =   8.32ms&lt;br /&gt;
Silent gap:                             ≈   3.60ms&lt;br /&gt;
Response:   9 bytes × 10 bits × 104µs  =   9.36ms&lt;br /&gt;
                                           ───────&lt;br /&gt;
Total cycle time:                       ≈  21.28ms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The silent gap between the master frame and slave response is critical. If the master releases its driver too late it will collide with the slave&#039;s response. If the slave responds before the gap completes, the master will misinterpret the response as a continuation of its own transmission.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Data Model ==&lt;br /&gt;
&lt;br /&gt;
Modbus organises data into four distinct object types, each with a defined address space. The master accesses these objects using function codes.&lt;br /&gt;
&lt;br /&gt;
=== Coils ===&lt;br /&gt;
&lt;br /&gt;
Coils are single-bit read/write values. They represent binary output states such as a relay, a digital output, or an on/off command. The address range is 1–9999 (using 1-based Modbus convention) or 0x0000–0xFFFF (using the 0-based PDU addressing).&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: fan on/off command, valve open/close output, alarm reset.&lt;br /&gt;
&lt;br /&gt;
=== Discrete Inputs ===&lt;br /&gt;
&lt;br /&gt;
Discrete inputs are single-bit read-only values. They represent binary input states such as a digital sensor, a status contact, or a switch position. Address range: 10001–19999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: door open sensor, high temperature alarm contact, filter dirty status.&lt;br /&gt;
&lt;br /&gt;
=== Holding Registers ===&lt;br /&gt;
&lt;br /&gt;
Holding registers are 16-bit read/write registers. They are the most commonly used data type in Modbus and can hold values such as setpoints, configurations, and output values. Address range: 40001–49999.&lt;br /&gt;
&lt;br /&gt;
A single holding register holds values from 0 to 65535 (unsigned) or -32768 to 32767 (signed). For larger values such as floating point temperatures or energy readings, two consecutive registers are used together to form a 32-bit value.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: temperature setpoint, VFD speed reference, valve position command.&lt;br /&gt;
&lt;br /&gt;
=== Input Registers ===&lt;br /&gt;
&lt;br /&gt;
Input registers are 16-bit read-only registers. They represent measured or computed values provided by the slave device. Address range: 30001–39999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: supply air temperature, room CO₂ concentration, energy meter active power reading.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Function Codes ==&lt;br /&gt;
&lt;br /&gt;
Function codes tell the slave device what action to perform. They are carried in the second byte of every Modbus RTU frame.&lt;br /&gt;
&lt;br /&gt;
=== Read Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Reads&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Read Coils || Coils (1-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Read Discrete Inputs || Discrete Inputs (1-bit, read-only)&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Read Holding Registers || Holding Registers (16-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Read Input Registers || Input Registers (16-bit, read-only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Write Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Writes&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Write Single Coil || Single coil ON (0xFF00) or OFF (0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Write Single Register || Single holding register&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 0x0F || Write Multiple Coils || Multiple coils&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 0x10 || Write Multiple Registers || Multiple holding registers&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Diagnostic Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 07 || 0x07 || Read Exception Status || Returns device error status byte&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Diagnostics || Various sub-functions for testing comms&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Get Comm Event Counter || Returns count of successful messages&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 0x11 || Report Server ID || Returns device type and status&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
=== CRC and LRC Checking ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC-16 (Cyclic Redundancy Check)&#039;&#039;&#039; is used in Modbus RTU. It is a 16-bit error detection value calculated from all bytes in the message excluding the CRC bytes themselves. The master calculates the CRC before sending, and the slave recalculates it upon receipt. If the values do not match, the message is discarded silently — no response is sent, and the master will timeout.&lt;br /&gt;
&lt;br /&gt;
The CRC polynomial used is: &amp;lt;code&amp;gt;0xA001&amp;lt;/code&amp;gt; (reflected form of CRC-16-IBM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LRC (Longitudinal Redundancy Check)&#039;&#039;&#039; is used in Modbus ASCII only. It is calculated as the two&#039;s complement of the sum of all byte values in the message. It is simpler but less robust than CRC-16.&lt;br /&gt;
&lt;br /&gt;
=== Exception Codes ===&lt;br /&gt;
&lt;br /&gt;
When a slave receives a valid request but cannot fulfil it, it returns an exception response. The function code in the response has its most significant bit set to 1 (i.e. the original function code + 0x80), followed by an exception code byte.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Exception Code !! Hex !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Illegal Function || The function code is not supported by this device&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Illegal Data Address || The register address does not exist on this device&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Illegal Data Value || The value in the data field is not permitted&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Slave Device Failure || An unrecoverable error occurred in the slave&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Acknowledge || Slave accepted the request but needs more time&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Slave Device Busy || Slave is busy processing a previous request&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Memory Parity Error || Slave detected a parity error reading extended memory&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0x0A || Gateway Path Unavailable || Gateway could not allocate a path (Modbus TCP)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Gateway Target No Response || Target device on gateway failed to respond&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus in BMS Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Typical Devices ===&lt;br /&gt;
&lt;br /&gt;
Modbus is one of the most commonly encountered protocols when integrating third-party field devices into a BMS. The following device types frequently use Modbus RTU as their primary or secondary communication interface:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Energy meters&#039;&#039;&#039; — active power (kW), reactive power (kVAR), energy (kWh), power factor, voltage and current readings via input registers&lt;br /&gt;
* &#039;&#039;&#039;Variable Frequency Drives (VFDs)&#039;&#039;&#039; — speed reference (Hz or %), run/stop command, fault status, output frequency and current feedback&lt;br /&gt;
* &#039;&#039;&#039;Chillers and heat pumps&#039;&#039;&#039; — leaving water temperature, setpoint, mode command, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Air Handling Units (AHUs)&#039;&#039;&#039; — supply/return air temperature, damper position, fan speed feedback&lt;br /&gt;
* &#039;&#039;&#039;CO₂ and air quality sensors&#039;&#039;&#039; — CO₂ concentration (ppm), temperature, humidity&lt;br /&gt;
* &#039;&#039;&#039;Heat meters&#039;&#039;&#039; — flow rate, inlet/outlet temperatures, cumulative energy&lt;br /&gt;
* &#039;&#039;&#039;UPS systems&#039;&#039;&#039; — battery voltage, charge level, load percentage, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Generator controllers&#039;&#039;&#039; — run status, fuel level, output voltage, frequency&lt;br /&gt;
&lt;br /&gt;
=== Wiring and Topology ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU on RS-485 uses a &#039;&#039;&#039;daisy-chain bus topology&#039;&#039;&#039;. Devices are connected in series from the first to the last node. The two conductors of the RS-485 pair are labelled A (−) and B (+), though manufacturers often use inconsistent naming — some label them D− / D+, or even reverse the A/B convention entirely.&lt;br /&gt;
&lt;br /&gt;
Key wiring rules:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Termination resistors&#039;&#039;&#039; of 120Ω must be fitted at both physical ends of the RS-485 bus to prevent signal reflections. Only the two end devices are terminated — never intermediate devices.&lt;br /&gt;
* &#039;&#039;&#039;Bias resistors&#039;&#039;&#039; (typically 560Ω to 1kΩ) are recommended to hold the bus at a defined state when no device is transmitting, preventing false start bit detection on an idle line.&lt;br /&gt;
* &#039;&#039;&#039;Maximum cable length&#039;&#039;&#039; depends on baud rate (see Baud Rate section), but 1200 metres at 9600 baud is a typical practical limit for standard twisted pair cable.&lt;br /&gt;
* The maximum number of addressable slave devices is 247, though the RS-485 electrical standard supports up to 32 unit loads on a single segment without repeaters (256 with 1/8 unit load devices).&lt;br /&gt;
* Shielded twisted pair (STP) cable is strongly recommended in BMS environments due to electrical noise from motors, VFDs, and other inductive loads.&lt;br /&gt;
&lt;br /&gt;
=== Common Issues and Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
The following are the most frequently encountered Modbus RTU communication problems in BMS installations:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No response from slave / timeout&#039;&#039;&#039;&lt;br /&gt;
* Verify slave address matches the configured address on the physical device&lt;br /&gt;
* Check baud rate, parity, data bits, and stop bits match on master and slave&lt;br /&gt;
* Check A/B wiring polarity — reversed polarity is a very common installation error&lt;br /&gt;
* Verify termination resistors are fitted at the correct endpoints only&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC errors / corrupted data&#039;&#039;&#039;&lt;br /&gt;
* Inspect cable routing — avoid running alongside power cables or VFD output cables&lt;br /&gt;
* Check for missing or incorrectly placed termination resistors&lt;br /&gt;
* Reduce baud rate to test if the issue is speed-related&lt;br /&gt;
* Check for ground loops — ensure cable shield is grounded at one end only&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intermittent communication&#039;&#039;&#039;&lt;br /&gt;
* Often caused by missing bias resistors — the bus floats to an indeterminate state when idle&lt;br /&gt;
* Check for multiple termination resistors incorrectly fitted to intermediate devices&lt;br /&gt;
* Investigate RTS/driver enable timing issues if using a custom RS-485 adapter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incorrect register values&#039;&#039;&#039;&lt;br /&gt;
* Confirm register addressing convention — some devices use 0-based addressing, others 1-based&lt;br /&gt;
* Check byte order (endianness) for 32-bit floating point values — some devices use Big Endian, others Little Endian or mixed (byte-swapped) formats&lt;br /&gt;
* Verify scaling factors — a register reading of 1234 may represent 12.34 depending on the device register map&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus vs Other Protocols ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! Modbus RTU !! BACnet MS/TP !! PROFIBUS DP !! KNX (TP)&lt;br /&gt;
|-&lt;br /&gt;
| Year Introduced || 1979 || 1995 || 1989 || 1990&lt;br /&gt;
|-&lt;br /&gt;
| Physical Layer || RS-485 || RS-485 || RS-485 || Twisted Pair (proprietary)&lt;br /&gt;
|-&lt;br /&gt;
| Max Devices || 247 slaves || 128 nodes || 126 nodes || 65,536 devices&lt;br /&gt;
|-&lt;br /&gt;
| Max Speed || 115,200 bps || 76,800 bps || 12 Mbps || 9,600 bps&lt;br /&gt;
|-&lt;br /&gt;
| Error Detection || CRC-16 || CRC-16 || CRC-16 || Data Link Layer CRC&lt;br /&gt;
|-&lt;br /&gt;
| Architecture || Master-Slave (strict) || Token passing || Master-Slave || Decentralised&lt;br /&gt;
|-&lt;br /&gt;
| Open Standard || Yes (free) || Yes (ASHRAE) || IEC 61158 || Yes (ISO 14543)&lt;br /&gt;
|-&lt;br /&gt;
| Native BMS Support || Via gateway || Native BMS protocol || Industrial/BMS || BMS/home automation&lt;br /&gt;
|-&lt;br /&gt;
| IP Variant || Modbus TCP || BACnet/IP || PROFINET || KNX IP&lt;br /&gt;
|-&lt;br /&gt;
| Complexity || Low || Medium || High || Medium&lt;br /&gt;
|-&lt;br /&gt;
| Cost to Implement || Very Low || Low–Medium || Medium–High || Medium&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Modbus&amp;diff=83</id>
		<title>Modbus</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Modbus&amp;diff=83"/>
		<updated>2026-02-24T23:40:42Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Modbus =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Modbus is an open, serial communication protocol originally developed for use in programmable logic controllers (PLCs). It has since become one of the most widely deployed industrial communication protocols in the world, particularly in Building Management Systems (BMS), SCADA environments, energy metering, and industrial automation.&lt;br /&gt;
&lt;br /&gt;
Modbus operates on a master-slave (also referred to as client-server in newer documentation) architecture, where a single master device initiates all communication and one or more slave devices respond. It is valued for its simplicity, robustness, and vendor-neutral design — making it ideal for integrating devices from multiple manufacturers into a unified control system.&lt;br /&gt;
&lt;br /&gt;
In BMS applications, Modbus is commonly used to communicate with energy meters, variable frequency drives (VFDs), chillers, boilers, air handling units (AHUs), and a wide range of sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
Modbus was developed in 1979 by Modicon (now a brand of Schneider Electric) for use with their programmable logic controllers. It was designed as a simple and robust protocol for serial communication between controllers on a production floor.&lt;br /&gt;
&lt;br /&gt;
In 1996, Modbus over TCP/IP (Modbus TCP) was introduced, allowing the protocol to be used over modern Ethernet networks. This dramatically expanded its use cases and kept it relevant into the internet era.&lt;br /&gt;
&lt;br /&gt;
In 2004, the rights to the Modbus specification were transferred to the Modbus Organization, a non-profit trade association that maintains and promotes the standard to this day. The protocol remains publicly available and royalty-free, which is a significant reason for its continued adoption over proprietary alternatives.&lt;br /&gt;
&lt;br /&gt;
Today Modbus exists in three primary variants: Modbus RTU and Modbus ASCII (both for serial communication), and Modbus TCP/IP (for Ethernet communication).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Protocol Architecture ==&lt;br /&gt;
&lt;br /&gt;
=== Master-Slave Model ===&lt;br /&gt;
&lt;br /&gt;
Modbus uses a strict master-slave architecture. There is always one master and up to 247 addressable slave devices on a single serial bus. Each slave is assigned a unique address between 1 and 247. Address 0 is reserved for broadcast messages, which all slaves receive but do not respond to.&lt;br /&gt;
&lt;br /&gt;
The master is always the initiator of communication. A slave device never transmits data unless it has first been queried by the master. This eliminates bus collisions and keeps the protocol deterministic — an important quality in control systems where timing and reliability are critical.&lt;br /&gt;
&lt;br /&gt;
In a BMS context, the master is typically the Building Management Controller (BMC) or a gateway device, and the slaves are field devices such as energy meters, controllers, or sensors.&lt;br /&gt;
&lt;br /&gt;
=== Request-Response Cycle ===&lt;br /&gt;
&lt;br /&gt;
Every Modbus transaction follows a simple two-step cycle:&lt;br /&gt;
&lt;br /&gt;
# The &#039;&#039;&#039;master&#039;&#039;&#039; sends a request frame to a specific slave address (or broadcast to address 0).&lt;br /&gt;
# The &#039;&#039;&#039;slave&#039;&#039;&#039; receives the request, processes it, and returns a response frame to the master.&lt;br /&gt;
&lt;br /&gt;
If the slave receives a valid request but cannot comply (e.g. the register address does not exist), it returns an &#039;&#039;&#039;exception response&#039;&#039;&#039; containing an error code. If the master receives no response within its configured timeout window, it may retry the request or log a communication fault.&lt;br /&gt;
&lt;br /&gt;
A full Modbus RTU frame consists of the following fields in order:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Size !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Device Address || 1 byte || Slave address (1–247), or 0 for broadcast&lt;br /&gt;
|-&lt;br /&gt;
| Function Code || 1 byte || Defines the type of action requested&lt;br /&gt;
|-&lt;br /&gt;
| Data || Variable || Register addresses, values, or quantities&lt;br /&gt;
|-&lt;br /&gt;
| CRC || 2 bytes || Error checking (Cyclic Redundancy Check)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Transmission Modes ==&lt;br /&gt;
&lt;br /&gt;
=== Modbus RTU ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU (Remote Terminal Unit) is the most common implementation of the protocol in BMS and industrial environments. Data is transmitted as binary bytes over an RS-232 or RS-485 serial connection.&lt;br /&gt;
&lt;br /&gt;
Each byte of data is encoded as a single binary character. The framing of messages is defined by silent intervals (gaps) between characters — a gap of at least 3.5 character times signals the start or end of a message frame.&lt;br /&gt;
&lt;br /&gt;
RTU is preferred over ASCII for most applications because it is more efficient: it transmits the same data in roughly half the number of bytes, making better use of available bandwidth.&lt;br /&gt;
&lt;br /&gt;
Key characteristics:&lt;br /&gt;
* Binary encoding&lt;br /&gt;
* CRC-16 error checking&lt;br /&gt;
* Message framing via inter-character silence (3.5 character times)&lt;br /&gt;
* Physical layer: RS-485 (most common), RS-232, RS-422&lt;br /&gt;
&lt;br /&gt;
=== Modbus ASCII ===&lt;br /&gt;
&lt;br /&gt;
Modbus ASCII transmits data as ASCII text characters rather than raw binary. Each byte of data is represented as two hexadecimal ASCII characters (e.g. the byte &amp;lt;code&amp;gt;0x5B&amp;lt;/code&amp;gt; is sent as the characters &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
ASCII mode uses a colon (&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;) as a start delimiter and CR/LF characters as an end delimiter. It uses LRC (Longitudinal Redundancy Check) for error checking rather than CRC.&lt;br /&gt;
&lt;br /&gt;
ASCII mode is less bandwidth-efficient than RTU but is easier to debug with simple terminal tools and is more tolerant of timing variations on noisy or slow serial lines. It is rarely used in modern BMS installations.&lt;br /&gt;
&lt;br /&gt;
=== Modbus TCP/IP ===&lt;br /&gt;
&lt;br /&gt;
Modbus TCP/IP wraps the standard Modbus PDU (Protocol Data Unit) inside a TCP packet and transmits it over a standard Ethernet network. It uses port &#039;&#039;&#039;502&#039;&#039;&#039; by default.&lt;br /&gt;
&lt;br /&gt;
The serial-specific fields (device address and CRC) are replaced by a &#039;&#039;&#039;MBAP header&#039;&#039;&#039; (Modbus Application Protocol header), which contains a transaction identifier, protocol identifier, message length, and unit identifier.&lt;br /&gt;
&lt;br /&gt;
Modbus TCP removes the need for RS-485 wiring and allows Modbus devices to be integrated into IP-based building networks. Many modern BMS gateways and energy meters support Modbus TCP natively or via an RS-485-to-Ethernet converter.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Communication Parameters ==&lt;br /&gt;
&lt;br /&gt;
Communication parameters are the settings that define how data is physically transmitted between the master and slave devices on a serial Modbus network. All devices on the same bus &#039;&#039;&#039;must be configured with identical parameters&#039;&#039;&#039; — a mismatch in any one setting will cause communication failures.&lt;br /&gt;
&lt;br /&gt;
The parameters covered here apply primarily to Modbus RTU and Modbus ASCII (serial variants). Modbus TCP uses standard IP networking parameters instead.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Baud Rate ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_baudrate_diagram.png|thumb|400px|right|Diagram showing how baud rate affects the time width of each bit on the signal line. A higher baud rate means narrower bit windows and faster data transmission.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Baud rate&#039;&#039;&#039; defines the number of signal changes per second on the communication line. In Modbus RTU, one symbol = one binary bit, so baud rate = bits per second.&lt;br /&gt;
&lt;br /&gt;
==== Common Baud Rate Values ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Baud Rate !! Bits per Second !! Typical Use Case&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || 1,200 bps || Legacy devices, long cable runs with poor quality cable&lt;br /&gt;
|-&lt;br /&gt;
| 2400 || 2,400 bps || Older meters and sensors&lt;br /&gt;
|-&lt;br /&gt;
| 4800 || 4,800 bps || Moderate speed legacy devices&lt;br /&gt;
|-&lt;br /&gt;
| 9600 || 9,600 bps || &#039;&#039;&#039;Most common default&#039;&#039;&#039; — widely supported by all devices&lt;br /&gt;
|-&lt;br /&gt;
| 19200 || 19,200 bps || Standard BMS installations with moderate device counts&lt;br /&gt;
|-&lt;br /&gt;
| 38400 || 38,400 bps || Higher performance systems&lt;br /&gt;
|-&lt;br /&gt;
| 57600 || 57,600 bps || Fast networks, shorter cable runs&lt;br /&gt;
|-&lt;br /&gt;
| 115200 || 115,200 bps || Maximum practical speed for RS-485 in most installations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The default baud rate for Modbus RTU is &#039;&#039;&#039;9600 bps&#039;&#039;&#039;, though 19200 bps is very common in BMS environments.&lt;br /&gt;
&lt;br /&gt;
==== How Baud Rate Affects the Signal ====&lt;br /&gt;
&lt;br /&gt;
Each bit occupies a fixed time window called the &#039;&#039;&#039;bit period&#039;&#039;&#039;, calculated as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Bit Period = 1 / Baud Rate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At 9600 baud each bit lasts approximately &#039;&#039;&#039;104 microseconds&#039;&#039;&#039;. At 115200 baud each bit lasts approximately &#039;&#039;&#039;8.7 microseconds&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Single Byte at 9600 Baud, 8N1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The byte &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; (decimal 65) on the RS-485 wire at 9600 baud:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:     Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop&lt;br /&gt;
Value:     0    1    0    0    0    0    0    1    0     1&lt;br /&gt;
µs each: 104µs per bit window&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Start bit&#039;&#039;&#039; (1 bit, always 0): Pulls line LOW — signals receiver to begin reading&lt;br /&gt;
* &#039;&#039;&#039;D0–D7&#039;&#039;&#039; (8 bits): Binary data, transmitted LSB first. &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;01000001&amp;lt;/code&amp;gt; → wire order: 1,0,0,0,0,0,1,0&lt;br /&gt;
* &#039;&#039;&#039;Stop bit&#039;&#039;&#039; (1 bit, always 1): Returns line HIGH — marks end of byte&lt;br /&gt;
&lt;br /&gt;
Total frame = 10 bits × 104µs = &#039;&#039;&#039;1.04ms per byte&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Read Holding Register&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master reads 1 holding register (address 0x0000 = register 40001) from slave address 0x01.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame in hex — 8 bytes total:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [QtyHi] [QtyLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x03 ] [0x00 ] [0x00 ] [0x00 ] [0x01 ] [0x84 ] [0x0A ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Each byte in Modbus RTU binary (8N1, LSB first, 9600 baud):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 1 — Slave Address 0x01 (00000001):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 2 — Function Code 0x03 (00000011):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 3 — Register Address High 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 4 — Register Address Low 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — Quantity High 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 6 — Quantity Low 0x01 (00000001):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 7 — CRC Low 0x84 (10000100):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   1   0   0   0   0   1   1&lt;br /&gt;
&lt;br /&gt;
Byte 8 — CRC High 0x0A (00001010):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   1   0   1   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
[S] = Start bit (always 0)   [P] = Stop bit (always 1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What each field does:&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bytes !! Field !! Value !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Slave Address || 0x01 || Target device on the RS-485 bus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Function Code || 0x03 || Instruction: Read Holding Registers&lt;br /&gt;
|-&lt;br /&gt;
| 3–4 || Starting Address || 0x0000 || Begin at register 0 (Modbus register 40001)&lt;br /&gt;
|-&lt;br /&gt;
| 5–6 || Quantity || 0x0001 || Read 1 register (16-bit value)&lt;br /&gt;
|-&lt;br /&gt;
| 7–8 || CRC-16 || 0x0A84 || Error check — slave silently discards frame if CRC fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transmission time at 9600 baud, 8N1:&#039;&#039;&#039;&lt;br /&gt;
8 bytes × 10 bits = 80 bits → 80 × 104µs = &#039;&#039;&#039;8.32ms&#039;&#039;&#039; to send the full request frame&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Effect on Cable Length ====&lt;br /&gt;
&lt;br /&gt;
Higher baud rates require better quality cabling and are more sensitive to signal degradation over distance. As a general rule:&lt;br /&gt;
&lt;br /&gt;
* 9600 baud — reliable up to approximately 1200 metres on good RS-485 cable&lt;br /&gt;
* 19200 baud — reliable up to approximately 600 metres&lt;br /&gt;
* 115200 baud — reliable up to approximately 100 metres&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Parity ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_parity_diagram.png|thumb|400px|right|Diagram illustrating Even, Odd, and No parity bit positions within a Modbus RTU serial data frame. The parity bit is inserted between the last data bit and the stop bit.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parity&#039;&#039;&#039; adds a single calculated bit after the 8 data bits in each Modbus RTU character frame, providing basic single-bit error detection at the byte level. CRC-16 handles error detection at the full message level.&lt;br /&gt;
&lt;br /&gt;
==== Parity Modes ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mode !! Code !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Even Parity || E || Parity bit set so total count of 1s in data + parity = &#039;&#039;&#039;even&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Odd Parity || O || Parity bit set so total count of 1s in data + parity = &#039;&#039;&#039;odd&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| No Parity || N || No parity bit. Error checking relies on CRC-16 only. 2 stop bits recommended per Modbus spec.&lt;br /&gt;
|-&lt;br /&gt;
| Mark Parity || M || Parity bit always 1. Rarely used.&lt;br /&gt;
|-&lt;br /&gt;
| Space Parity || S || Parity bit always 0. Rarely used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Modbus RTU specification recommends &#039;&#039;&#039;Even parity&#039;&#039;&#039; as the default. However &#039;&#039;&#039;8N1&#039;&#039;&#039; (no parity, 1 stop bit) is the de facto standard for most BMS devices in practice.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Parity Bit Calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x31&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;00110001&amp;lt;/code&amp;gt;&lt;br /&gt;
Count of 1-bits in data = 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even Parity (8E1)&#039;&#039;&#039; — 3 is odd, so parity bit = 1 to reach even total (3+1=4):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Odd Parity (8O1)&#039;&#039;&#039; — 3 is already odd, so parity bit = 0 to keep total odd (3+0=3):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    0     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N1)&#039;&#039;&#039; — no parity bit, one stop bit only:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N2)&#039;&#039;&#039; — no parity bit, two stop bits to maintain 11-bit frame:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P1] [P2]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[S] = Start bit   [Par] = Parity bit   [P] = Stop bit&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Request with Even Parity (8E1)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Same request as the Baud Rate example — slave 0x01, FC03, register 0x0000, quantity 0x0001, CRC 0x840A — shown with Even parity applied to every byte.&lt;br /&gt;
&lt;br /&gt;
Parity rule: count the 1s in D0–D7. If count is odd → parity bit = 1. If count is even → parity bit = 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 1 — Slave 0x01 (00000001) — one 1-bit → parity = 1:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1     1&lt;br /&gt;
&lt;br /&gt;
Byte 2 — FC 0x03 (00000011) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   1   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 3 — RegHi 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 4 — RegLo 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — QtyHi 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 6 — QtyLo 0x01 (00000001) — one 1-bit → parity = 1:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1     1&lt;br /&gt;
&lt;br /&gt;
Byte 7 — CRCLo 0x84 (10000100) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   1   0   0   0   0   1    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 8 — CRCHi 0x0A (00001010) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   1   0   1   0   0   0   0    0     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8E1 framing = 11 bits per byte (1 start + 8 data + 1 parity + 1 stop)&lt;br /&gt;
8 bytes × 11 bits = 88 bits → at 9600 baud = &#039;&#039;&#039;9.17ms&#039;&#039;&#039; to transmit the full request&lt;br /&gt;
&lt;br /&gt;
The parity bit is recalculated independently for each byte — it is not a fixed value across the frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Parity Limitation ====&lt;br /&gt;
&lt;br /&gt;
Parity can only detect an &#039;&#039;&#039;odd number&#039;&#039;&#039; of bit errors. If two bits flip simultaneously the parity check still passes even though the data is corrupted. This is why Modbus RTU also uses CRC-16 at the message level — the two mechanisms complement each other.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Data Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_databits_diagram.png|thumb|400px|right|Data bit positions D0–D7 within a Modbus RTU character frame. Data bits carry the actual payload and are transmitted LSB first.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data bits&#039;&#039;&#039; refers to the number of bits carrying actual payload within each Modbus RTU character frame. This is always &#039;&#039;&#039;8&#039;&#039;&#039; in Modbus RTU. 8 bits = 1 byte = values 0–255 per frame. For values larger than 255, Modbus RTU uses two consecutive bytes (one 16-bit register) or four bytes (two registers for 32-bit floating point values).&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Data Bit Weighting&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0xB4&amp;lt;/code&amp;gt; = decimal 180 = binary &amp;lt;code&amp;gt;10110100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modbus RTU transmits data bits LSB first (D0 transmitted first, D7 last):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    0   0   1   0   1   1   0   1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit !! Wire Order !! Weight !! Bit Value in 0xB4 !! Contributes&lt;br /&gt;
|-&lt;br /&gt;
| D0 || 1st transmitted || 2⁰ = 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D1 || 2nd || 2¹ = 2 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D2 || 3rd || 2² = 4 || 1 || 4&lt;br /&gt;
|-&lt;br /&gt;
| D3 || 4th || 2³ = 8 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D4 || 5th || 2⁴ = 16 || 1 || 16&lt;br /&gt;
|-&lt;br /&gt;
| D5 || 6th || 2⁵ = 32 || 1 || 32&lt;br /&gt;
|-&lt;br /&gt;
| D6 || 7th || 2⁶ = 64 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D7 || 8th (last) || 2⁷ = 128 || 1 || 128&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Total&#039;&#039;&#039; || — || — || — || &#039;&#039;&#039;4+16+32+128 = 180 = 0xB4 ✓&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Slave Response with Register Decoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Slave 0x01 responds to the FC03 request. Register 40001 holds value 0x0190 (decimal 400), representing a supply air temperature of 40.0°C with a scale factor of ÷10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response frame in hex — 7 bytes total:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [ByteCt] [DatHi] [DatLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x03 ] [ 0x02 ] [0x01 ] [0x90 ] [0xF8 ] [0x4B ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Critical bytes expanded in Modbus RTU binary (8N1, LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 3 — Byte Count 0x02 (00000010):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    0   1   0   0   0   0   0   0    1&lt;br /&gt;
  D1 = 2¹ = 2 → 2 data bytes follow (one 16-bit register) ✓&lt;br /&gt;
&lt;br /&gt;
Byte 4 — Data High Byte 0x01 (00000001):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1&lt;br /&gt;
  D0 = 1 → high byte value = 1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — Data Low Byte 0x90 (10010000):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    0   0   0   0   1   0   0   1    1&lt;br /&gt;
  D4 = 16, D7 = 128 → 16+128 = 144 = 0x90&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Reconstructing the 16-bit register value (Big Endian — high byte first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
High byte:  0x01 × 256  =  256&lt;br /&gt;
Low byte:   0x90        =  144&lt;br /&gt;
                          ─────&lt;br /&gt;
Register value:            400  =  0x0190&lt;br /&gt;
&lt;br /&gt;
Applied scale factor ÷10:  400 ÷ 10  =  40.0°C&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modbus RTU always sends the high byte of a 16-bit register before the low byte. This is Big Endian byte order. Some devices deviate from this — always check the device register map.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Stop Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_stopbits_diagram.png|thumb|400px|right|Diagram comparing 1 stop bit vs 2 stop bits in a Modbus RTU character frame. Stop bits return the RS-485 line to idle HIGH after each transmitted byte.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stop bits&#039;&#039;&#039; return the RS-485 line to the idle HIGH state after each Modbus RTU character frame. The receiver requires this idle period to correctly detect the falling edge of the next start bit.&lt;br /&gt;
&lt;br /&gt;
==== Stop Bit Configurations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Config !! Stop Bits !! Parity !! Total Bits per Frame !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 8N1 || 1 || None || 10 || Most common Modbus RTU configuration in BMS&lt;br /&gt;
|-&lt;br /&gt;
| 8E1 || 1 || Even || 11 || Modbus RTU spec default — even parity + 1 stop&lt;br /&gt;
|-&lt;br /&gt;
| 8O1 || 1 || Odd || 11 || Odd parity + 1 stop&lt;br /&gt;
|-&lt;br /&gt;
| 8N2 || 2 || None || 11 || No parity, 2 stops — maintains 11-bit frame on noisy lines&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Stop Bit Comparison&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x55&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;01010101&amp;lt;/code&amp;gt; — four 1-bits (even count)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N1 — No Parity, 1 Stop Bit (10 bits total):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    1&lt;br /&gt;
        ←————————————— 10 bits ——————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8E1 — Even Parity, 1 Stop Bit (11 bits total):&#039;&#039;&#039;&lt;br /&gt;
Four 1-bits in data = even count → parity bit = 0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    0     1&lt;br /&gt;
        ←—————————————— 11 bits ———————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N2 — No Parity, 2 Stop Bits (11 bits total):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P1] [P2]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    1    1&lt;br /&gt;
        ←—————————————— 11 bits ———————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the line goes LOW before the stop bit period ends, the receiver flags a &#039;&#039;&#039;framing error&#039;&#039;&#039; and discards the byte. The resulting CRC mismatch causes the master to timeout with no response.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC06 Write Single Register&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master writes value 0x0064 (decimal 100 = setpoint 10.0°C at scale ÷10) to register 40002 (address 0x0001) on slave 0x01.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Request frame in hex — 8 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [ValHi] [ValLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x06 ] [0x00 ] [0x01 ] [0x00 ] [0x64 ] [0x49 ] [0xA4 ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full frame in Modbus RTU binary, 8N1 (LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
Byte 1 0x01: 0  1   0   0   0   0   0   0   0   1   ← Slave address&lt;br /&gt;
Byte 2 0x06: 0  0   1   1   0   0   0   0   0   1   ← Write Single Register&lt;br /&gt;
Byte 3 0x00: 0  0   0   0   0   0   0   0   0   1   ← Register address high&lt;br /&gt;
Byte 4 0x01: 0  1   0   0   0   0   0   0   0   1   ← Register address low (reg 40002)&lt;br /&gt;
Byte 5 0x00: 0  0   0   0   0   0   0   0   0   1   ← Value high byte&lt;br /&gt;
Byte 6 0x64: 0  0   0   1   0   0   1   1   0   1   ← Value low byte (100 decimal)&lt;br /&gt;
Byte 7 0x49: 0  1   0   0   1   0   0   1   0   1   ← CRC low&lt;br /&gt;
Byte 8 0xA4: 0  0   0   1   0   0   1   0   1   1   ← CRC high&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On a successful FC06 write the slave echoes the &#039;&#039;&#039;entire 8-byte request frame back unchanged&#039;&#039;&#039; as its response. If the stop bit on any byte is corrupted, that byte is discarded as a framing error, the CRC check fails, and the master receives no response.&lt;br /&gt;
&lt;br /&gt;
Transmission time at 9600 baud, 8N1: 8 bytes × 10 bits × 104µs = &#039;&#039;&#039;8.32ms&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Flow Control ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_flowcontrol_diagram.png|thumb|400px|right|RS-485 RTS direction switching during a Modbus RTU request/response cycle. The master asserts DE HIGH to transmit, then releases the bus before the slave responds.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Flow control&#039;&#039;&#039; in Modbus RTU on RS-485 is almost always set to &#039;&#039;&#039;None&#039;&#039;&#039; in software. The physical RS-485 half-duplex bus requires direction switching between transmit and receive, but this is handled by the hardware driver enable (DE) pin on the RS-485 transceiver, not by a software flow control protocol.&lt;br /&gt;
&lt;br /&gt;
==== Flow Control Types ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type !! Method !! Compatible with Modbus RTU&lt;br /&gt;
|-&lt;br /&gt;
| None || — || ✓ Standard for RS-485 Modbus RTU&lt;br /&gt;
|-&lt;br /&gt;
| Hardware RTS/CTS || Physical signal lines || Only on RS-232 point-to-point connections&lt;br /&gt;
|-&lt;br /&gt;
| Software XON/XOFF || In-band bytes 0x11 / 0x13 || ✗ Incompatible — Modbus RTU is a binary protocol&lt;br /&gt;
|-&lt;br /&gt;
| RTS as DE toggle || RTS drives RS-485 DE pin || ✓ Used by USB-RS485 adapters for direction switching&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: RS-485 Half-Duplex Direction Control&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In Modbus RTU on RS-485, the driver enable (DE) signal controls which device owns the bus. Only one device may drive the bus at any time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              MASTER TRANSMITTING              MASTER LISTENING&lt;br /&gt;
DE (Master):  ________________________&lt;br /&gt;
             |                        |________________________________&lt;br /&gt;
             ^ DE asserted HIGH        ^ DE released LOW&lt;br /&gt;
&lt;br /&gt;
TX (Master):  [ Start bits of frame...data bytes...CRC ]&lt;br /&gt;
             |←————————————————————————————————————————→|&lt;br /&gt;
&lt;br /&gt;
                                       ↑&lt;br /&gt;
                               3.5 character-time&lt;br /&gt;
                               silent gap (~3.6ms at 9600 baud)&lt;br /&gt;
                               marks end of Modbus RTU frame&lt;br /&gt;
&lt;br /&gt;
DE (Slave):                                        ______________________&lt;br /&gt;
                                                  |&lt;br /&gt;
                                                  ^ Slave asserts its DE HIGH&lt;br /&gt;
&lt;br /&gt;
RX (Master):                                      [ Slave response frame ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* DE HIGH = RS-485 driver active, device is transmitting&lt;br /&gt;
* DE LOW = RS-485 driver disabled, device is listening&lt;br /&gt;
* The 3.5 character-time silent gap is how Modbus RTU detects frame boundaries — there is no delimiter byte&lt;br /&gt;
* If DE is not released fast enough, the master&#039;s driver will collide with the slave&#039;s response on the bus&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Read 2 Registers — Complete Request/Response Cycle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master reads 2 holding registers from slave 0x02, starting at address 0x0010 (registers 40017 and 40018). These could represent, for example, active power high and low bytes from an energy meter.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Master request frame — 8 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [QtyHi] [QtyLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x02 ] [0x03 ] [0x00 ] [0x10 ] [0x00 ] [0x02 ] [0xC4 ] [0x38 ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Slave response frame — 9 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ] [  9  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [ByteCt] [R1Hi ] [R1Lo ] [R2Hi ] [R2Lo ] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x02 ] [0x03 ] [ 0x04 ] [0x00 ] [0xC8 ] [0x01 ] [0x2C ] [0x77 ] [0xDF ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Both frames in Modbus RTU binary, 8N1 (LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REQUEST:&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
0x02 Addr:  0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0x03 FC:    0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
0x00 RegHi: 0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0x10 RegLo: 0   0   0   0   0   1   0   0   0   1&lt;br /&gt;
0x00 QtyHi: 0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0x02 QtyLo: 0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0xC4 CRCLo: 0   0   0   1   0   0   0   1   1   1&lt;br /&gt;
0x38 CRCHi: 0   0   0   0   1   1   1   0   0   1&lt;br /&gt;
&lt;br /&gt;
[— 3.5 char silent gap (~3.6ms at 9600 baud) — master releases bus — slave responds —]&lt;br /&gt;
&lt;br /&gt;
RESPONSE:&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
0x02 Addr:  0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0x03 FC:    0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
0x04 BytCt: 0   0   0   1   0   0   0   0   0   1&lt;br /&gt;
0x00 R1Hi:  0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0xC8 R1Lo:  0   0   0   0   1   0   0   1   1   1&lt;br /&gt;
0x01 R2Hi:  0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
0x2C R2Lo:  0   0   1   1   0   1   0   0   0   1&lt;br /&gt;
0x77 CRCLo: 0   1   1   1   0   1   1   1   0   1&lt;br /&gt;
0xDF CRCHi: 0   1   1   1   1   1   0   1   1   1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding the two register values from the response (Big Endian — high byte first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Register 1 (40017):&lt;br /&gt;
  High byte 0x00 = 0 × 256  =   0&lt;br /&gt;
  Low  byte 0xC8 =           = 200&lt;br /&gt;
  Value = 0 + 200            = 200&lt;br /&gt;
&lt;br /&gt;
Register 2 (40018):&lt;br /&gt;
  High byte 0x01 = 1 × 256  = 256&lt;br /&gt;
  Low  byte 0x2C =           =  44&lt;br /&gt;
  Value = 256 + 44           = 300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If these were active power registers with a scale factor of ÷10:&lt;br /&gt;
Register 1 = 20.0 kW, Register 2 = 30.0 kW&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transmission times at 9600 baud, 8N1:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Request:    8 bytes × 10 bits × 104µs  =   8.32ms&lt;br /&gt;
Silent gap:                             ≈   3.60ms&lt;br /&gt;
Response:   9 bytes × 10 bits × 104µs  =   9.36ms&lt;br /&gt;
                                           ───────&lt;br /&gt;
Total cycle time:                       ≈  21.28ms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The silent gap between the master frame and slave response is critical. If the master releases its driver too late it will collide with the slave&#039;s response. If the slave responds before the gap completes, the master will misinterpret the response as a continuation of its own transmission.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Data Model ==&lt;br /&gt;
&lt;br /&gt;
Modbus organises data into four distinct object types, each with a defined address space. The master accesses these objects using function codes.&lt;br /&gt;
&lt;br /&gt;
=== Coils ===&lt;br /&gt;
&lt;br /&gt;
Coils are single-bit read/write values. They represent binary output states such as a relay, a digital output, or an on/off command. The address range is 1–9999 (using 1-based Modbus convention) or 0x0000–0xFFFF (using the 0-based PDU addressing).&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: fan on/off command, valve open/close output, alarm reset.&lt;br /&gt;
&lt;br /&gt;
=== Discrete Inputs ===&lt;br /&gt;
&lt;br /&gt;
Discrete inputs are single-bit read-only values. They represent binary input states such as a digital sensor, a status contact, or a switch position. Address range: 10001–19999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: door open sensor, high temperature alarm contact, filter dirty status.&lt;br /&gt;
&lt;br /&gt;
=== Holding Registers ===&lt;br /&gt;
&lt;br /&gt;
Holding registers are 16-bit read/write registers. They are the most commonly used data type in Modbus and can hold values such as setpoints, configurations, and output values. Address range: 40001–49999.&lt;br /&gt;
&lt;br /&gt;
A single holding register holds values from 0 to 65535 (unsigned) or -32768 to 32767 (signed). For larger values such as floating point temperatures or energy readings, two consecutive registers are used together to form a 32-bit value.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: temperature setpoint, VFD speed reference, valve position command.&lt;br /&gt;
&lt;br /&gt;
=== Input Registers ===&lt;br /&gt;
&lt;br /&gt;
Input registers are 16-bit read-only registers. They represent measured or computed values provided by the slave device. Address range: 30001–39999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: supply air temperature, room CO₂ concentration, energy meter active power reading.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Function Codes ==&lt;br /&gt;
&lt;br /&gt;
Function codes tell the slave device what action to perform. They are carried in the second byte of every Modbus RTU frame.&lt;br /&gt;
&lt;br /&gt;
=== Read Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Reads&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Read Coils || Coils (1-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Read Discrete Inputs || Discrete Inputs (1-bit, read-only)&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Read Holding Registers || Holding Registers (16-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Read Input Registers || Input Registers (16-bit, read-only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Write Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Writes&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Write Single Coil || Single coil ON (0xFF00) or OFF (0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Write Single Register || Single holding register&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 0x0F || Write Multiple Coils || Multiple coils&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 0x10 || Write Multiple Registers || Multiple holding registers&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Diagnostic Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 07 || 0x07 || Read Exception Status || Returns device error status byte&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Diagnostics || Various sub-functions for testing comms&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Get Comm Event Counter || Returns count of successful messages&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 0x11 || Report Server ID || Returns device type and status&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
=== CRC and LRC Checking ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC-16 (Cyclic Redundancy Check)&#039;&#039;&#039; is used in Modbus RTU. It is a 16-bit error detection value calculated from all bytes in the message excluding the CRC bytes themselves. The master calculates the CRC before sending, and the slave recalculates it upon receipt. If the values do not match, the message is discarded silently — no response is sent, and the master will timeout.&lt;br /&gt;
&lt;br /&gt;
The CRC polynomial used is: &amp;lt;code&amp;gt;0xA001&amp;lt;/code&amp;gt; (reflected form of CRC-16-IBM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LRC (Longitudinal Redundancy Check)&#039;&#039;&#039; is used in Modbus ASCII only. It is calculated as the two&#039;s complement of the sum of all byte values in the message. It is simpler but less robust than CRC-16.&lt;br /&gt;
&lt;br /&gt;
=== Exception Codes ===&lt;br /&gt;
&lt;br /&gt;
When a slave receives a valid request but cannot fulfil it, it returns an exception response. The function code in the response has its most significant bit set to 1 (i.e. the original function code + 0x80), followed by an exception code byte.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Exception Code !! Hex !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Illegal Function || The function code is not supported by this device&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Illegal Data Address || The register address does not exist on this device&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Illegal Data Value || The value in the data field is not permitted&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Slave Device Failure || An unrecoverable error occurred in the slave&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Acknowledge || Slave accepted the request but needs more time&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Slave Device Busy || Slave is busy processing a previous request&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Memory Parity Error || Slave detected a parity error reading extended memory&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0x0A || Gateway Path Unavailable || Gateway could not allocate a path (Modbus TCP)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Gateway Target No Response || Target device on gateway failed to respond&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus in BMS Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Typical Devices ===&lt;br /&gt;
&lt;br /&gt;
Modbus is one of the most commonly encountered protocols when integrating third-party field devices into a BMS. The following device types frequently use Modbus RTU as their primary or secondary communication interface:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Energy meters&#039;&#039;&#039; — active power (kW), reactive power (kVAR), energy (kWh), power factor, voltage and current readings via input registers&lt;br /&gt;
* &#039;&#039;&#039;Variable Frequency Drives (VFDs)&#039;&#039;&#039; — speed reference (Hz or %), run/stop command, fault status, output frequency and current feedback&lt;br /&gt;
* &#039;&#039;&#039;Chillers and heat pumps&#039;&#039;&#039; — leaving water temperature, setpoint, mode command, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Air Handling Units (AHUs)&#039;&#039;&#039; — supply/return air temperature, damper position, fan speed feedback&lt;br /&gt;
* &#039;&#039;&#039;CO₂ and air quality sensors&#039;&#039;&#039; — CO₂ concentration (ppm), temperature, humidity&lt;br /&gt;
* &#039;&#039;&#039;Heat meters&#039;&#039;&#039; — flow rate, inlet/outlet temperatures, cumulative energy&lt;br /&gt;
* &#039;&#039;&#039;UPS systems&#039;&#039;&#039; — battery voltage, charge level, load percentage, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Generator controllers&#039;&#039;&#039; — run status, fuel level, output voltage, frequency&lt;br /&gt;
&lt;br /&gt;
=== Wiring and Topology ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU on RS-485 uses a &#039;&#039;&#039;daisy-chain bus topology&#039;&#039;&#039;. Devices are connected in series from the first to the last node. The two conductors of the RS-485 pair are labelled A (−) and B (+), though manufacturers often use inconsistent naming — some label them D− / D+, or even reverse the A/B convention entirely.&lt;br /&gt;
&lt;br /&gt;
Key wiring rules:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Termination resistors&#039;&#039;&#039; of 120Ω must be fitted at both physical ends of the RS-485 bus to prevent signal reflections. Only the two end devices are terminated — never intermediate devices.&lt;br /&gt;
* &#039;&#039;&#039;Bias resistors&#039;&#039;&#039; (typically 560Ω to 1kΩ) are recommended to hold the bus at a defined state when no device is transmitting, preventing false start bit detection on an idle line.&lt;br /&gt;
* &#039;&#039;&#039;Maximum cable length&#039;&#039;&#039; depends on baud rate (see Baud Rate section), but 1200 metres at 9600 baud is a typical practical limit for standard twisted pair cable.&lt;br /&gt;
* The maximum number of addressable slave devices is 247, though the RS-485 electrical standard supports up to 32 unit loads on a single segment without repeaters (256 with 1/8 unit load devices).&lt;br /&gt;
* Shielded twisted pair (STP) cable is strongly recommended in BMS environments due to electrical noise from motors, VFDs, and other inductive loads.&lt;br /&gt;
&lt;br /&gt;
=== Common Issues and Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
The following are the most frequently encountered Modbus RTU communication problems in BMS installations:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No response from slave / timeout&#039;&#039;&#039;&lt;br /&gt;
* Verify slave address matches the configured address on the physical device&lt;br /&gt;
* Check baud rate, parity, data bits, and stop bits match on master and slave&lt;br /&gt;
* Check A/B wiring polarity — reversed polarity is a very common installation error&lt;br /&gt;
* Verify termination resistors are fitted at the correct endpoints only&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC errors / corrupted data&#039;&#039;&#039;&lt;br /&gt;
* Inspect cable routing — avoid running alongside power cables or VFD output cables&lt;br /&gt;
* Check for missing or incorrectly placed termination resistors&lt;br /&gt;
* Reduce baud rate to test if the issue is speed-related&lt;br /&gt;
* Check for ground loops — ensure cable shield is grounded at one end only&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intermittent communication&#039;&#039;&#039;&lt;br /&gt;
* Often caused by missing bias resistors — the bus floats to an indeterminate state when idle&lt;br /&gt;
* Check for multiple termination resistors incorrectly fitted to intermediate devices&lt;br /&gt;
* Investigate RTS/driver enable timing issues if using a custom RS-485 adapter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incorrect register values&#039;&#039;&#039;&lt;br /&gt;
* Confirm register addressing convention — some devices use 0-based addressing, others 1-based&lt;br /&gt;
* Check byte order (endianness) for 32-bit floating point values — some devices use Big Endian, others Little Endian or mixed (byte-swapped) formats&lt;br /&gt;
* Verify scaling factors — a register reading of 1234 may represent 12.34 depending on the device register map&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus vs Other Protocols ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! Modbus RTU !! BACnet MS/TP !! PROFIBUS DP !! KNX (TP)&lt;br /&gt;
|-&lt;br /&gt;
| Year Introduced || 1979 || 1995 || 1989 || 1990&lt;br /&gt;
|-&lt;br /&gt;
| Physical Layer || RS-485 || RS-485 || RS-485 || Twisted Pair (proprietary)&lt;br /&gt;
|-&lt;br /&gt;
| Max Devices || 247 slaves || 128 nodes || 126 nodes || 65,536 devices&lt;br /&gt;
|-&lt;br /&gt;
| Max Speed || 115,200 bps || 76,800 bps || 12 Mbps || 9,600 bps&lt;br /&gt;
|-&lt;br /&gt;
| Error Detection || CRC-16 || CRC-16 || CRC-16 || Data Link Layer CRC&lt;br /&gt;
|-&lt;br /&gt;
| Architecture || Master-Slave (strict) || Token passing || Master-Slave || Decentralised&lt;br /&gt;
|-&lt;br /&gt;
| Open Standard || Yes (free) || Yes (ASHRAE) || IEC 61158 || Yes (ISO 14543)&lt;br /&gt;
|-&lt;br /&gt;
| Native BMS Support || Via gateway || Native BMS protocol || Industrial/BMS || BMS/home automation&lt;br /&gt;
|-&lt;br /&gt;
| IP Variant || Modbus TCP || BACnet/IP || PROFINET || KNX IP&lt;br /&gt;
|-&lt;br /&gt;
| Complexity || Low || Medium || High || Medium&lt;br /&gt;
|-&lt;br /&gt;
| Cost to Implement || Very Low || Low–Medium || Medium–High || Medium&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Modbus&amp;diff=82</id>
		<title>Modbus</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Modbus&amp;diff=82"/>
		<updated>2026-02-24T23:38:20Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Modbus =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Modbus is an open, serial communication protocol originally developed for use in programmable logic controllers (PLCs). It has since become one of the most widely deployed industrial communication protocols in the world, particularly in Building Management Systems (BMS), SCADA environments, energy metering, and industrial automation.&lt;br /&gt;
&lt;br /&gt;
Modbus operates on a master-slave (also referred to as client-server in newer documentation) architecture, where a single master device initiates all communication and one or more slave devices respond. It is valued for its simplicity, robustness, and vendor-neutral design — making it ideal for integrating devices from multiple manufacturers into a unified control system.&lt;br /&gt;
&lt;br /&gt;
In BMS applications, Modbus is commonly used to communicate with energy meters, variable frequency drives (VFDs), chillers, boilers, air handling units (AHUs), and a wide range of sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
Modbus was developed in 1979 by Modicon (now a brand of Schneider Electric) for use with their programmable logic controllers. It was designed as a simple and robust protocol for serial communication between controllers on a production floor.&lt;br /&gt;
&lt;br /&gt;
In 1996, Modbus over TCP/IP (Modbus TCP) was introduced, allowing the protocol to be used over modern Ethernet networks. This dramatically expanded its use cases and kept it relevant into the internet era.&lt;br /&gt;
&lt;br /&gt;
In 2004, the rights to the Modbus specification were transferred to the Modbus Organization, a non-profit trade association that maintains and promotes the standard to this day. The protocol remains publicly available and royalty-free, which is a significant reason for its continued adoption over proprietary alternatives.&lt;br /&gt;
&lt;br /&gt;
Today Modbus exists in three primary variants: Modbus RTU and Modbus ASCII (both for serial communication), and Modbus TCP/IP (for Ethernet communication).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Protocol Architecture ==&lt;br /&gt;
&lt;br /&gt;
=== Master-Slave Model ===&lt;br /&gt;
&lt;br /&gt;
Modbus uses a strict master-slave architecture. There is always one master and up to 247 addressable slave devices on a single serial bus. Each slave is assigned a unique address between 1 and 247. Address 0 is reserved for broadcast messages, which all slaves receive but do not respond to.&lt;br /&gt;
&lt;br /&gt;
The master is always the initiator of communication. A slave device never transmits data unless it has first been queried by the master. This eliminates bus collisions and keeps the protocol deterministic — an important quality in control systems where timing and reliability are critical.&lt;br /&gt;
&lt;br /&gt;
In a BMS context, the master is typically the Building Management Controller (BMC) or a gateway device, and the slaves are field devices such as energy meters, controllers, or sensors.&lt;br /&gt;
&lt;br /&gt;
=== Request-Response Cycle ===&lt;br /&gt;
&lt;br /&gt;
Every Modbus transaction follows a simple two-step cycle:&lt;br /&gt;
&lt;br /&gt;
# The &#039;&#039;&#039;master&#039;&#039;&#039; sends a request frame to a specific slave address (or broadcast to address 0).&lt;br /&gt;
# The &#039;&#039;&#039;slave&#039;&#039;&#039; receives the request, processes it, and returns a response frame to the master.&lt;br /&gt;
&lt;br /&gt;
If the slave receives a valid request but cannot comply (e.g. the register address does not exist), it returns an &#039;&#039;&#039;exception response&#039;&#039;&#039; containing an error code. If the master receives no response within its configured timeout window, it may retry the request or log a communication fault.&lt;br /&gt;
&lt;br /&gt;
A full Modbus RTU frame consists of the following fields in order:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Size !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Device Address || 1 byte || Slave address (1–247), or 0 for broadcast&lt;br /&gt;
|-&lt;br /&gt;
| Function Code || 1 byte || Defines the type of action requested&lt;br /&gt;
|-&lt;br /&gt;
| Data || Variable || Register addresses, values, or quantities&lt;br /&gt;
|-&lt;br /&gt;
| CRC || 2 bytes || Error checking (Cyclic Redundancy Check)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Transmission Modes ==&lt;br /&gt;
&lt;br /&gt;
=== Modbus RTU ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU (Remote Terminal Unit) is the most common implementation of the protocol in BMS and industrial environments. Data is transmitted as binary bytes over an RS-232 or RS-485 serial connection.&lt;br /&gt;
&lt;br /&gt;
Each byte of data is encoded as a single binary character. The framing of messages is defined by silent intervals (gaps) between characters — a gap of at least 3.5 character times signals the start or end of a message frame.&lt;br /&gt;
&lt;br /&gt;
RTU is preferred over ASCII for most applications because it is more efficient: it transmits the same data in roughly half the number of bytes, making better use of available bandwidth.&lt;br /&gt;
&lt;br /&gt;
Key characteristics:&lt;br /&gt;
* Binary encoding&lt;br /&gt;
* CRC-16 error checking&lt;br /&gt;
* Message framing via inter-character silence (3.5 character times)&lt;br /&gt;
* Physical layer: RS-485 (most common), RS-232, RS-422&lt;br /&gt;
&lt;br /&gt;
=== Modbus ASCII ===&lt;br /&gt;
&lt;br /&gt;
Modbus ASCII transmits data as ASCII text characters rather than raw binary. Each byte of data is represented as two hexadecimal ASCII characters (e.g. the byte &amp;lt;code&amp;gt;0x5B&amp;lt;/code&amp;gt; is sent as the characters &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
ASCII mode uses a colon (&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;) as a start delimiter and CR/LF characters as an end delimiter. It uses LRC (Longitudinal Redundancy Check) for error checking rather than CRC.&lt;br /&gt;
&lt;br /&gt;
ASCII mode is less bandwidth-efficient than RTU but is easier to debug with simple terminal tools and is more tolerant of timing variations on noisy or slow serial lines. It is rarely used in modern BMS installations.&lt;br /&gt;
&lt;br /&gt;
=== Modbus TCP/IP ===&lt;br /&gt;
&lt;br /&gt;
Modbus TCP/IP wraps the standard Modbus PDU (Protocol Data Unit) inside a TCP packet and transmits it over a standard Ethernet network. It uses port &#039;&#039;&#039;502&#039;&#039;&#039; by default.&lt;br /&gt;
&lt;br /&gt;
The serial-specific fields (device address and CRC) are replaced by a &#039;&#039;&#039;MBAP header&#039;&#039;&#039; (Modbus Application Protocol header), which contains a transaction identifier, protocol identifier, message length, and unit identifier.&lt;br /&gt;
&lt;br /&gt;
Modbus TCP removes the need for RS-485 wiring and allows Modbus devices to be integrated into IP-based building networks. Many modern BMS gateways and energy meters support Modbus TCP natively or via an RS-485-to-Ethernet converter.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Communication Parameters ==&lt;br /&gt;
&lt;br /&gt;
Communication parameters are the settings that define how data is physically transmitted between the master and slave devices on a serial Modbus network. All devices on the same bus &#039;&#039;&#039;must be configured with identical parameters&#039;&#039;&#039; — a mismatch in any one setting will cause communication failures.&lt;br /&gt;
&lt;br /&gt;
The parameters covered here apply primarily to Modbus RTU and Modbus ASCII (serial variants). Modbus TCP uses standard IP networking parameters instead.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Baud Rate ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_baudrate_diagram.png|thumb|400px|right|Diagram showing how baud rate affects the time width of each bit on the signal line. A higher baud rate means narrower bit windows and faster data transmission.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Baud rate&#039;&#039;&#039; defines the number of signal changes per second on the communication line. In Modbus RTU, one symbol = one binary bit, so baud rate = bits per second.&lt;br /&gt;
&lt;br /&gt;
==== Common Baud Rate Values ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Baud Rate !! Bits per Second !! Typical Use Case&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || 1,200 bps || Legacy devices, long cable runs with poor quality cable&lt;br /&gt;
|-&lt;br /&gt;
| 2400 || 2,400 bps || Older meters and sensors&lt;br /&gt;
|-&lt;br /&gt;
| 4800 || 4,800 bps || Moderate speed legacy devices&lt;br /&gt;
|-&lt;br /&gt;
| 9600 || 9,600 bps || &#039;&#039;&#039;Most common default&#039;&#039;&#039; — widely supported by all devices&lt;br /&gt;
|-&lt;br /&gt;
| 19200 || 19,200 bps || Standard BMS installations with moderate device counts&lt;br /&gt;
|-&lt;br /&gt;
| 38400 || 38,400 bps || Higher performance systems&lt;br /&gt;
|-&lt;br /&gt;
| 57600 || 57,600 bps || Fast networks, shorter cable runs&lt;br /&gt;
|-&lt;br /&gt;
| 115200 || 115,200 bps || Maximum practical speed for RS-485 in most installations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The default baud rate for Modbus RTU is &#039;&#039;&#039;9600 bps&#039;&#039;&#039;, though 19200 bps is very common in BMS environments.&lt;br /&gt;
&lt;br /&gt;
==== How Baud Rate Affects the Signal ====&lt;br /&gt;
&lt;br /&gt;
Each bit occupies a fixed time window called the &#039;&#039;&#039;bit period&#039;&#039;&#039;, calculated as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Bit Period = 1 / Baud Rate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At 9600 baud each bit lasts approximately &#039;&#039;&#039;104 microseconds&#039;&#039;&#039;. At 115200 baud each bit lasts approximately &#039;&#039;&#039;8.7 microseconds&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Single Byte at 9600 Baud, 8N1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The byte &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; (decimal 65) on the RS-485 wire at 9600 baud:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:     Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop&lt;br /&gt;
Value:     0    1    0    0    0    0    0    1    0     1&lt;br /&gt;
µs each: 104µs per bit window&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Start bit&#039;&#039;&#039; (1 bit, always 0): Pulls line LOW — signals receiver to begin reading&lt;br /&gt;
* &#039;&#039;&#039;D0–D7&#039;&#039;&#039; (8 bits): Binary data, transmitted LSB first. &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;01000001&amp;lt;/code&amp;gt; → wire order: 1,0,0,0,0,0,1,0&lt;br /&gt;
* &#039;&#039;&#039;Stop bit&#039;&#039;&#039; (1 bit, always 1): Returns line HIGH — marks end of byte&lt;br /&gt;
&lt;br /&gt;
Total frame = 10 bits × 104µs = &#039;&#039;&#039;1.04ms per byte&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Read Holding Register&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master reads 1 holding register (address 0x0000 = register 40001) from slave address 0x01.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame in hex — 8 bytes total:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [QtyHi] [QtyLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x03 ] [0x00 ] [0x00 ] [0x00 ] [0x01 ] [0x84 ] [0x0A ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Each byte in Modbus RTU binary (8N1, LSB first, 9600 baud):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 1 — Slave Address 0x01 (00000001):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 2 — Function Code 0x03 (00000011):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 3 — Register Address High 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 4 — Register Address Low 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — Quantity High 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 6 — Quantity Low 0x01 (00000001):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 7 — CRC Low 0x84 (10000100):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   1   0   0   0   0   1   1&lt;br /&gt;
&lt;br /&gt;
Byte 8 — CRC High 0x0A (00001010):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   1   0   1   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
[S] = Start bit (always 0)   [P] = Stop bit (always 1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What each field does:&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bytes !! Field !! Value !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Slave Address || 0x01 || Target device on the RS-485 bus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Function Code || 0x03 || Instruction: Read Holding Registers&lt;br /&gt;
|-&lt;br /&gt;
| 3–4 || Starting Address || 0x0000 || Begin at register 0 (Modbus register 40001)&lt;br /&gt;
|-&lt;br /&gt;
| 5–6 || Quantity || 0x0001 || Read 1 register (16-bit value)&lt;br /&gt;
|-&lt;br /&gt;
| 7–8 || CRC-16 || 0x0A84 || Error check — slave silently discards frame if CRC fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transmission time at 9600 baud, 8N1:&#039;&#039;&#039;&lt;br /&gt;
8 bytes × 10 bits = 80 bits → 80 × 104µs = &#039;&#039;&#039;8.32ms&#039;&#039;&#039; to send the full request frame&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Effect on Cable Length ====&lt;br /&gt;
&lt;br /&gt;
Higher baud rates require better quality cabling and are more sensitive to signal degradation over distance. As a general rule:&lt;br /&gt;
&lt;br /&gt;
* 9600 baud — reliable up to approximately 1200 metres on good RS-485 cable&lt;br /&gt;
* 19200 baud — reliable up to approximately 600 metres&lt;br /&gt;
* 115200 baud — reliable up to approximately 100 metres&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Parity ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_parity_diagram.png|thumb|400px|right|Diagram illustrating Even, Odd, and No parity bit positions within a Modbus RTU serial data frame. The parity bit is inserted between the last data bit and the stop bit.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parity&#039;&#039;&#039; adds a single calculated bit after the 8 data bits in each Modbus RTU character frame, providing basic single-bit error detection at the byte level. CRC-16 handles error detection at the full message level.&lt;br /&gt;
&lt;br /&gt;
==== Parity Modes ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mode !! Code !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Even Parity || E || Parity bit set so total count of 1s in data + parity = &#039;&#039;&#039;even&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Odd Parity || O || Parity bit set so total count of 1s in data + parity = &#039;&#039;&#039;odd&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| No Parity || N || No parity bit. Error checking relies on CRC-16 only. 2 stop bits recommended per Modbus spec.&lt;br /&gt;
|-&lt;br /&gt;
| Mark Parity || M || Parity bit always 1. Rarely used.&lt;br /&gt;
|-&lt;br /&gt;
| Space Parity || S || Parity bit always 0. Rarely used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Modbus RTU specification recommends &#039;&#039;&#039;Even parity&#039;&#039;&#039; as the default. However &#039;&#039;&#039;8N1&#039;&#039;&#039; (no parity, 1 stop bit) is the de facto standard for most BMS devices in practice.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Parity Bit Calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x31&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;00110001&amp;lt;/code&amp;gt;&lt;br /&gt;
Count of 1-bits in data = 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even Parity (8E1)&#039;&#039;&#039; — 3 is odd, so parity bit = 1 to reach even total (3+1=4):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Odd Parity (8O1)&#039;&#039;&#039; — 3 is already odd, so parity bit = 0 to keep total odd (3+0=3):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    0     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N1)&#039;&#039;&#039; — no parity bit, one stop bit only:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N2)&#039;&#039;&#039; — no parity bit, two stop bits to maintain 11-bit frame:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P1] [P2]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[S] = Start bit   [Par] = Parity bit   [P] = Stop bit&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Request with Even Parity (8E1)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Same request as the Baud Rate example — slave 0x01, FC03, register 0x0000, quantity 0x0001, CRC 0x840A — shown with Even parity applied to every byte.&lt;br /&gt;
&lt;br /&gt;
Parity rule: count the 1s in D0–D7. If count is odd → parity bit = 1. If count is even → parity bit = 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 1 — Slave 0x01 (00000001) — one 1-bit → parity = 1:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1     1&lt;br /&gt;
&lt;br /&gt;
Byte 2 — FC 0x03 (00000011) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   1   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 3 — RegHi 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 4 — RegLo 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — QtyHi 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 6 — QtyLo 0x01 (00000001) — one 1-bit → parity = 1:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1     1&lt;br /&gt;
&lt;br /&gt;
Byte 7 — CRCLo 0x84 (10000100) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   1   0   0   0   0   1    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 8 — CRCHi 0x0A (00001010) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   1   0   1   0   0   0   0    0     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8E1 framing = 11 bits per byte (1 start + 8 data + 1 parity + 1 stop)&lt;br /&gt;
8 bytes × 11 bits = 88 bits → at 9600 baud = &#039;&#039;&#039;9.17ms&#039;&#039;&#039; to transmit the full request&lt;br /&gt;
&lt;br /&gt;
The parity bit is recalculated independently for each byte — it is not a fixed value across the frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Parity Limitation ====&lt;br /&gt;
&lt;br /&gt;
Parity can only detect an &#039;&#039;&#039;odd number&#039;&#039;&#039; of bit errors. If two bits flip simultaneously the parity check still passes even though the data is corrupted. This is why Modbus RTU also uses CRC-16 at the message level — the two mechanisms complement each other.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Data Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_databits_diagram.png|thumb|400px|right|Data bit positions D0–D7 within a Modbus RTU character frame. Data bits carry the actual payload and are transmitted LSB first.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data bits&#039;&#039;&#039; refers to the number of bits carrying actual payload within each Modbus RTU character frame. This is always &#039;&#039;&#039;8&#039;&#039;&#039; in Modbus RTU. 8 bits = 1 byte = values 0–255 per frame. For values larger than 255, Modbus RTU uses two consecutive bytes (one 16-bit register) or four bytes (two registers for 32-bit floating point values).&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Data Bit Weighting&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0xB4&amp;lt;/code&amp;gt; = decimal 180 = binary &amp;lt;code&amp;gt;10110100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modbus RTU transmits data bits LSB first (D0 transmitted first, D7 last):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    0   0   1   0   1   1   0   1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit !! Wire Order !! Weight !! Bit Value in 0xB4 !! Contributes&lt;br /&gt;
|-&lt;br /&gt;
| D0 || 1st transmitted || 2⁰ = 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D1 || 2nd || 2¹ = 2 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D2 || 3rd || 2² = 4 || 1 || 4&lt;br /&gt;
|-&lt;br /&gt;
| D3 || 4th || 2³ = 8 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D4 || 5th || 2⁴ = 16 || 1 || 16&lt;br /&gt;
|-&lt;br /&gt;
| D5 || 6th || 2⁵ = 32 || 1 || 32&lt;br /&gt;
|-&lt;br /&gt;
| D6 || 7th || 2⁶ = 64 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D7 || 8th (last) || 2⁷ = 128 || 1 || 128&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Total&#039;&#039;&#039; || — || — || — || &#039;&#039;&#039;4+16+32+128 = 180 = 0xB4 ✓&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Slave Response with Register Decoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Slave 0x01 responds to the FC03 request. Register 40001 holds value 0x0190 (decimal 400), representing a supply air temperature of 40.0°C with a scale factor of ÷10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response frame in hex — 7 bytes total:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [ByteCt] [DatHi] [DatLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x03 ] [ 0x02 ] [0x01 ] [0x90 ] [0xF8 ] [0x4B ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Critical bytes expanded in Modbus RTU binary (8N1, LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 3 — Byte Count 0x02 (00000010):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    0   1   0   0   0   0   0   0    1&lt;br /&gt;
  D1 = 2¹ = 2 → 2 data bytes follow (one 16-bit register) ✓&lt;br /&gt;
&lt;br /&gt;
Byte 4 — Data High Byte 0x01 (00000001):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1&lt;br /&gt;
  D0 = 1 → high byte value = 1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — Data Low Byte 0x90 (10010000):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    0   0   0   0   1   0   0   1    1&lt;br /&gt;
  D4 = 16, D7 = 128 → 16+128 = 144 = 0x90&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Reconstructing the 16-bit register value (Big Endian — high byte first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
High byte:  0x01 × 256  =  256&lt;br /&gt;
Low byte:   0x90        =  144&lt;br /&gt;
                          ─────&lt;br /&gt;
Register value:            400  =  0x0190&lt;br /&gt;
&lt;br /&gt;
Applied scale factor ÷10:  400 ÷ 10  =  40.0°C&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modbus RTU always sends the high byte of a 16-bit register before the low byte. This is Big Endian byte order. Some devices deviate from this — always check the device register map.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Stop Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_stopbits_diagram.png|thumb|400px|right|Diagram comparing 1 stop bit vs 2 stop bits in a Modbus RTU character frame. Stop bits return the RS-485 line to idle HIGH after each transmitted byte.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stop bits&#039;&#039;&#039; return the RS-485 line to the idle HIGH state after each Modbus RTU character frame. The receiver requires this idle period to correctly detect the falling edge of the next start bit.&lt;br /&gt;
&lt;br /&gt;
==== Stop Bit Configurations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Config !! Stop Bits !! Parity !! Total Bits per Frame !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 8N1 || 1 || None || 10 || Most common Modbus RTU configuration in BMS&lt;br /&gt;
|-&lt;br /&gt;
| 8E1 || 1 || Even || 11 || Modbus RTU spec default — even parity + 1 stop&lt;br /&gt;
|-&lt;br /&gt;
| 8O1 || 1 || Odd || 11 || Odd parity + 1 stop&lt;br /&gt;
|-&lt;br /&gt;
| 8N2 || 2 || None || 11 || No parity, 2 stops — maintains 11-bit frame on noisy lines&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Stop Bit Comparison&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x55&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;01010101&amp;lt;/code&amp;gt; — four 1-bits (even count)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N1 — No Parity, 1 Stop Bit (10 bits total):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    1&lt;br /&gt;
        ←————————————— 10 bits ——————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8E1 — Even Parity, 1 Stop Bit (11 bits total):&#039;&#039;&#039;&lt;br /&gt;
Four 1-bits in data = even count → parity bit = 0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    0     1&lt;br /&gt;
        ←—————————————— 11 bits ———————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N2 — No Parity, 2 Stop Bits (11 bits total):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P1] [P2]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    1    1&lt;br /&gt;
        ←—————————————— 11 bits ———————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the line goes LOW before the stop bit period ends, the receiver flags a &#039;&#039;&#039;framing error&#039;&#039;&#039; and discards the byte. The resulting CRC mismatch causes the master to timeout with no response.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC06 Write Single Register&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master writes value 0x0064 (decimal 100 = setpoint 10.0°C at scale ÷10) to register 40002 (address 0x0001) on slave 0x01.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Request frame in hex — 8 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [ValHi] [ValLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x06 ] [0x00 ] [0x01 ] [0x00 ] [0x64 ] [0x49 ] [0xA4 ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full frame in Modbus RTU binary, 8N1 (LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
Byte 1 0x01: 0  1   0   0   0   0   0   0   0   1   ← Slave address&lt;br /&gt;
Byte 2 0x06: 0  0   1   1   0   0   0   0   0   1   ← Write Single Register&lt;br /&gt;
Byte 3 0x00: 0  0   0   0   0   0   0   0   0   1   ← Register address high&lt;br /&gt;
Byte 4 0x01: 0  1   0   0   0   0   0   0   0   1   ← Register address low (reg 40002)&lt;br /&gt;
Byte 5 0x00: 0  0   0   0   0   0   0   0   0   1   ← Value high byte&lt;br /&gt;
Byte 6 0x64: 0  0   0   1   0   0   1   1   0   1   ← Value low byte (100 decimal)&lt;br /&gt;
Byte 7 0x49: 0  1   0   0   1   0   0   1   0   1   ← CRC low&lt;br /&gt;
Byte 8 0xA4: 0  0   0   1   0   0   1   0   1   1   ← CRC high&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On a successful FC06 write the slave echoes the &#039;&#039;&#039;entire 8-byte request frame back unchanged&#039;&#039;&#039; as its response. If the stop bit on any byte is corrupted, that byte is discarded as a framing error, the CRC check fails, and the master receives no response.&lt;br /&gt;
&lt;br /&gt;
Transmission time at 9600 baud, 8N1: 8 bytes × 10 bits × 104µs = &#039;&#039;&#039;8.32ms&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Flow Control ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_flowcontrol_diagram.png|thumb|400px|right|RS-485 RTS direction switching during a Modbus RTU request/response cycle. The master asserts DE HIGH to transmit, then releases the bus before the slave responds.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Flow control&#039;&#039;&#039; in Modbus RTU on RS-485 is almost always set to &#039;&#039;&#039;None&#039;&#039;&#039; in software. The physical RS-485 half-duplex bus requires direction switching between transmit and receive, but this is handled by the hardware driver enable (DE) pin on the RS-485 transceiver, not by a software flow control protocol.&lt;br /&gt;
&lt;br /&gt;
==== Flow Control Types ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type !! Method !! Compatible with Modbus RTU&lt;br /&gt;
|-&lt;br /&gt;
| None || — || ✓ Standard for RS-485 Modbus RTU&lt;br /&gt;
|-&lt;br /&gt;
| Hardware RTS/CTS || Physical signal lines || Only on RS-232 point-to-point connections&lt;br /&gt;
|-&lt;br /&gt;
| Software XON/XOFF || In-band bytes 0x11 / 0x13 || ✗ Incompatible — Modbus RTU is a binary protocol&lt;br /&gt;
|-&lt;br /&gt;
| RTS as DE toggle || RTS drives RS-485 DE pin || ✓ Used by USB-RS485 adapters for direction switching&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: RS-485 Half-Duplex Direction Control&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In Modbus RTU on RS-485, the driver enable (DE) signal controls which device owns the bus. Only one device may drive the bus at any time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              MASTER TRANSMITTING              MASTER LISTENING&lt;br /&gt;
DE (Master):  ________________________&lt;br /&gt;
             |                        |________________________________&lt;br /&gt;
             ^ DE asserted HIGH        ^ DE released LOW&lt;br /&gt;
&lt;br /&gt;
TX (Master):  [ Start bits of frame...data bytes...CRC ]&lt;br /&gt;
             |←————————————————————————————————————————→|&lt;br /&gt;
&lt;br /&gt;
                                       ↑&lt;br /&gt;
                               3.5 character-time&lt;br /&gt;
                               silent gap (~3.6ms at 9600 baud)&lt;br /&gt;
                               marks end of Modbus RTU frame&lt;br /&gt;
&lt;br /&gt;
DE (Slave):                                        ______________________&lt;br /&gt;
                                                  |&lt;br /&gt;
                                                  ^ Slave asserts its DE HIGH&lt;br /&gt;
&lt;br /&gt;
RX (Master):                                      [ Slave response frame ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* DE HIGH = RS-485 driver active, device is transmitting&lt;br /&gt;
* DE LOW = RS-485 driver disabled, device is listening&lt;br /&gt;
* The 3.5 character-time silent gap is how Modbus RTU detects frame boundaries — there is no delimiter byte&lt;br /&gt;
* If DE is not released fast enough, the master&#039;s driver will collide with the slave&#039;s response on the bus&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Read 2 Registers — Complete Request/Response Cycle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master reads 2 holding registers from slave 0x02, starting at address 0x0010 (registers 40017 and 40018). These could represent, for example, active power high and low bytes from an energy meter.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Master request frame — 8 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [QtyHi] [QtyLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x02 ] [0x03 ] [0x00 ] [0x10 ] [0x00 ] [0x02 ] [0xC4 ] [0x38 ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Slave response frame — 9 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ] [  9  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [ByteCt] [R1Hi ] [R1Lo ] [R2Hi ] [R2Lo ] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x02 ] [0x03 ] [ 0x04 ] [0x00 ] [0xC8 ] [0x01 ] [0x2C ] [0x77 ] [0xDF ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Both frames in Modbus RTU binary, 8N1 (LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REQUEST:&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
0x02 Addr:  0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0x03 FC:    0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
0x00 RegHi: 0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0x10 RegLo: 0   0   0   0   0   1   0   0   0   1&lt;br /&gt;
0x00 QtyHi: 0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0x02 QtyLo: 0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0xC4 CRCLo: 0   0   0   1   0   0   0   1   1   1&lt;br /&gt;
0x38 CRCHi: 0   0   0   0   1   1   1   0   0   1&lt;br /&gt;
&lt;br /&gt;
[— 3.5 char silent gap (~3.6ms at 9600 baud) — master releases bus — slave responds —]&lt;br /&gt;
&lt;br /&gt;
RESPONSE:&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
0x02 Addr:  0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0x03 FC:    0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
0x04 BytCt: 0   0   0   1   0   0   0   0   0   1&lt;br /&gt;
0x00 R1Hi:  0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0xC8 R1Lo:  0   0   0   0   1   0   0   1   1   1&lt;br /&gt;
0x01 R2Hi:  0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
0x2C R2Lo:  0   0   1   1   0   1   0   0   0   1&lt;br /&gt;
0x77 CRCLo: 0   1   1   1   0   1   1   1   0   1&lt;br /&gt;
0xDF CRCHi: 0   1   1   1   1   1   0   1   1   1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding the two register values from the response (Big Endian — high byte first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Register 1 (40017):&lt;br /&gt;
  High byte 0x00 = 0 × 256  =   0&lt;br /&gt;
  Low  byte 0xC8 =           = 200&lt;br /&gt;
  Value = 0 + 200            = 200&lt;br /&gt;
&lt;br /&gt;
Register 2 (40018):&lt;br /&gt;
  High byte 0x01 = 1 × 256  = 256&lt;br /&gt;
  Low  byte 0x2C =           =  44&lt;br /&gt;
  Value = 256 + 44           = 300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If these were active power registers with a scale factor of ÷10:&lt;br /&gt;
Register 1 = 20.0 kW, Register 2 = 30.0 kW&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transmission times at 9600 baud, 8N1:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Request:    8 bytes × 10 bits × 104µs  =   8.32ms&lt;br /&gt;
Silent gap:                             ≈   3.60ms&lt;br /&gt;
Response:   9 bytes × 10 bits × 104µs  =   9.36ms&lt;br /&gt;
                                           ───────&lt;br /&gt;
Total cycle time:                       ≈  21.28ms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The silent gap between the master frame and slave response is critical. If the master releases its driver too late it will collide with the slave&#039;s response. If the slave responds before the gap completes, the master will misinterpret the response as a continuation of its own transmission.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Data Model ==&lt;br /&gt;
&lt;br /&gt;
Modbus organises data into four distinct object types, each with a defined address space. The master accesses these objects using function codes.&lt;br /&gt;
&lt;br /&gt;
=== Coils ===&lt;br /&gt;
&lt;br /&gt;
Coils are single-bit read/write values. They represent binary output states such as a relay, a digital output, or an on/off command. The address range is 1–9999 (using 1-based Modbus convention) or 0x0000–0xFFFF (using the 0-based PDU addressing).&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: fan on/off command, valve open/close output, alarm reset.&lt;br /&gt;
&lt;br /&gt;
=== Discrete Inputs ===&lt;br /&gt;
&lt;br /&gt;
Discrete inputs are single-bit read-only values. They represent binary input states such as a digital sensor, a status contact, or a switch position. Address range: 10001–19999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: door open sensor, high temperature alarm contact, filter dirty status.&lt;br /&gt;
&lt;br /&gt;
=== Holding Registers ===&lt;br /&gt;
&lt;br /&gt;
Holding registers are 16-bit read/write registers. They are the most commonly used data type in Modbus and can hold values such as setpoints, configurations, and output values. Address range: 40001–49999.&lt;br /&gt;
&lt;br /&gt;
A single holding register holds values from 0 to 65535 (unsigned) or -32768 to 32767 (signed). For larger values such as floating point temperatures or energy readings, two consecutive registers are used together to form a 32-bit value.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: temperature setpoint, VFD speed reference, valve position command.&lt;br /&gt;
&lt;br /&gt;
=== Input Registers ===&lt;br /&gt;
&lt;br /&gt;
Input registers are 16-bit read-only registers. They represent measured or computed values provided by the slave device. Address range: 30001–39999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: supply air temperature, room CO₂ concentration, energy meter active power reading.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Function Codes ==&lt;br /&gt;
&lt;br /&gt;
Function codes tell the slave device what action to perform. They are carried in the second byte of every Modbus RTU frame.&lt;br /&gt;
&lt;br /&gt;
=== Read Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Reads&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Read Coils || Coils (1-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Read Discrete Inputs || Discrete Inputs (1-bit, read-only)&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Read Holding Registers || Holding Registers (16-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Read Input Registers || Input Registers (16-bit, read-only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Write Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Writes&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Write Single Coil || Single coil ON (0xFF00) or OFF (0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Write Single Register || Single holding register&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 0x0F || Write Multiple Coils || Multiple coils&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 0x10 || Write Multiple Registers || Multiple holding registers&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Diagnostic Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 07 || 0x07 || Read Exception Status || Returns device error status byte&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Diagnostics || Various sub-functions for testing comms&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Get Comm Event Counter || Returns count of successful messages&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 0x11 || Report Server ID || Returns device type and status&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
=== CRC and LRC Checking ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC-16 (Cyclic Redundancy Check)&#039;&#039;&#039; is used in Modbus RTU. It is a 16-bit error detection value calculated from all bytes in the message excluding the CRC bytes themselves. The master calculates the CRC before sending, and the slave recalculates it upon receipt. If the values do not match, the message is discarded silently — no response is sent, and the master will timeout.&lt;br /&gt;
&lt;br /&gt;
The CRC polynomial used is: &amp;lt;code&amp;gt;0xA001&amp;lt;/code&amp;gt; (reflected form of CRC-16-IBM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LRC (Longitudinal Redundancy Check)&#039;&#039;&#039; is used in Modbus ASCII only. It is calculated as the two&#039;s complement of the sum of all byte values in the message. It is simpler but less robust than CRC-16.&lt;br /&gt;
&lt;br /&gt;
=== Exception Codes ===&lt;br /&gt;
&lt;br /&gt;
When a slave receives a valid request but cannot fulfil it, it returns an exception response. The function code in the response has its most significant bit set to 1 (i.e. the original function code + 0x80), followed by an exception code byte.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Exception Code !! Hex !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Illegal Function || The function code is not supported by this device&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Illegal Data Address || The register address does not exist on this device&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Illegal Data Value || The value in the data field is not permitted&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Slave Device Failure || An unrecoverable error occurred in the slave&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Acknowledge || Slave accepted the request but needs more time&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Slave Device Busy || Slave is busy processing a previous request&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Memory Parity Error || Slave detected a parity error reading extended memory&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0x0A || Gateway Path Unavailable || Gateway could not allocate a path (Modbus TCP)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Gateway Target No Response || Target device on gateway failed to respond&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus in BMS Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Typical Devices ===&lt;br /&gt;
&lt;br /&gt;
Modbus is one of the most commonly encountered protocols when integrating third-party field devices into a BMS. The following device types frequently use Modbus RTU as their primary or secondary communication interface:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Energy meters&#039;&#039;&#039; — active power (kW), reactive power (kVAR), energy (kWh), power factor, voltage and current readings via input registers&lt;br /&gt;
* &#039;&#039;&#039;Variable Frequency Drives (VFDs)&#039;&#039;&#039; — speed reference (Hz or %), run/stop command, fault status, output frequency and current feedback&lt;br /&gt;
* &#039;&#039;&#039;Chillers and heat pumps&#039;&#039;&#039; — leaving water temperature, setpoint, mode command, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Air Handling Units (AHUs)&#039;&#039;&#039; — supply/return air temperature, damper position, fan speed feedback&lt;br /&gt;
* &#039;&#039;&#039;CO₂ and air quality sensors&#039;&#039;&#039; — CO₂ concentration (ppm), temperature, humidity&lt;br /&gt;
* &#039;&#039;&#039;Heat meters&#039;&#039;&#039; — flow rate, inlet/outlet temperatures, cumulative energy&lt;br /&gt;
* &#039;&#039;&#039;UPS systems&#039;&#039;&#039; — battery voltage, charge level, load percentage, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Generator controllers&#039;&#039;&#039; — run status, fuel level, output voltage, frequency&lt;br /&gt;
&lt;br /&gt;
=== Wiring and Topology ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU on RS-485 uses a &#039;&#039;&#039;daisy-chain bus topology&#039;&#039;&#039;. Devices are connected in series from the first to the last node. The two conductors of the RS-485 pair are labelled A (−) and B (+), though manufacturers often use inconsistent naming — some label them D− / D+, or even reverse the A/B convention entirely.&lt;br /&gt;
&lt;br /&gt;
Key wiring rules:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Termination resistors&#039;&#039;&#039; of 120Ω must be fitted at both physical ends of the RS-485 bus to prevent signal reflections. Only the two end devices are terminated — never intermediate devices.&lt;br /&gt;
* &#039;&#039;&#039;Bias resistors&#039;&#039;&#039; (typically 560Ω to 1kΩ) are recommended to hold the bus at a defined state when no device is transmitting, preventing false start bit detection on an idle line.&lt;br /&gt;
* &#039;&#039;&#039;Maximum cable length&#039;&#039;&#039; depends on baud rate (see Baud Rate section), but 1200 metres at 9600 baud is a typical practical limit for standard twisted pair cable.&lt;br /&gt;
* The maximum number of addressable slave devices is 247, though the RS-485 electrical standard supports up to 32 unit loads on a single segment without repeaters (256 with 1/8 unit load devices).&lt;br /&gt;
* Shielded twisted pair (STP) cable is strongly recommended in BMS environments due to electrical noise from motors, VFDs, and other inductive loads.&lt;br /&gt;
&lt;br /&gt;
=== Common Issues and Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
The following are the most frequently encountered Modbus RTU communication problems in BMS installations:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No response from slave / timeout&#039;&#039;&#039;&lt;br /&gt;
* Verify slave address matches the configured address on the physical device&lt;br /&gt;
* Check baud rate, parity, data bits, and stop bits match on master and slave&lt;br /&gt;
* Check A/B wiring polarity — reversed polarity is a very common installation error&lt;br /&gt;
* Verify termination resistors are fitted at the correct endpoints only&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC errors / corrupted data&#039;&#039;&#039;&lt;br /&gt;
* Inspect cable routing — avoid running alongside power cables or VFD output cables&lt;br /&gt;
* Check for missing or incorrectly placed termination resistors&lt;br /&gt;
* Reduce baud rate to test if the issue is speed-related&lt;br /&gt;
* Check for ground loops — ensure cable shield is grounded at one end only&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intermittent communication&#039;&#039;&#039;&lt;br /&gt;
* Often caused by missing bias resistors — the bus floats to an indeterminate state when idle&lt;br /&gt;
* Check for multiple termination resistors incorrectly fitted to intermediate devices&lt;br /&gt;
* Investigate RTS/driver enable timing issues if using a custom RS-485 adapter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incorrect register values&#039;&#039;&#039;&lt;br /&gt;
* Confirm register addressing convention — some devices use 0-based addressing, others 1-based&lt;br /&gt;
* Check byte order (endianness) for 32-bit floating point values — some devices use Big Endian, others Little Endian or mixed (byte-swapped) formats&lt;br /&gt;
* Verify scaling factors — a register reading of 1234 may represent 12.34 depending on the device register map&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus vs Other Protocols ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! Modbus RTU !! BACnet MS/TP !! PROFIBUS DP !! KNX (TP)&lt;br /&gt;
|-&lt;br /&gt;
| Year Introduced || 1979 || 1995 || 1989 || 1990&lt;br /&gt;
|-&lt;br /&gt;
| Physical Layer || RS-485 || RS-485 || RS-485 || Twisted Pair (proprietary)&lt;br /&gt;
|-&lt;br /&gt;
| Max Devices || 247 slaves || 128 nodes || 126 nodes || 65,536 devices&lt;br /&gt;
|-&lt;br /&gt;
| Max Speed || 115,200 bps || 76,800 bps || 12 Mbps || 9,600 bps&lt;br /&gt;
|-&lt;br /&gt;
| Error Detection || CRC-16 || CRC-16 || CRC-16 || Data Link Layer CRC&lt;br /&gt;
|-&lt;br /&gt;
| Architecture || Master-Slave (strict) || Token passing || Master-Slave || Decentralised&lt;br /&gt;
|-&lt;br /&gt;
| Open Standard || Yes (free) || Yes (ASHRAE) || IEC 61158 || Yes (ISO 14543)&lt;br /&gt;
|-&lt;br /&gt;
| Native BMS Support || Via gateway || Native BMS protocol || Industrial/BMS || BMS/home automation&lt;br /&gt;
|-&lt;br /&gt;
| IP Variant || Modbus TCP || BACnet/IP || PROFINET || KNX IP&lt;br /&gt;
|-&lt;br /&gt;
| Complexity || Low || Medium || High || Medium&lt;br /&gt;
|-&lt;br /&gt;
| Cost to Implement || Very Low || Low–Medium || Medium–High || Medium&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Modbus RTU is the simplest and most widely supported protocol, making it ideal for third-party device integration. BACnet MS/TP is preferred for native BMS device-to-controller communication as it is specifically designed for building automation and supports peer-to-peer messaging. PROFIBUS DP offers significantly higher speed and is more common in industrial and manufacturing environments than in typical building services. KNX is predominantly used in smaller commercial and residential applications.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This page is part of the BMS Protocols section of the internal BMS Wiki.&#039;&#039;&lt;br /&gt;
&#039;&#039;Last updated: February 2026&#039;&#039;&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Modbus&amp;diff=81</id>
		<title>Modbus</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Modbus&amp;diff=81"/>
		<updated>2026-02-24T23:38:06Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Modbus =&lt;br /&gt;
&lt;br /&gt;
== Contents ==&lt;br /&gt;
# [[#Overview|Overview]]&lt;br /&gt;
# [[#History|History]]&lt;br /&gt;
# [[#Protocol Architecture|Protocol Architecture]]&lt;br /&gt;
## [[#Master-Slave Model|Master-Slave Model]]&lt;br /&gt;
## [[#Request-Response Cycle|Request-Response Cycle]]&lt;br /&gt;
# [[#Transmission Modes|Transmission Modes]]&lt;br /&gt;
## [[#Modbus RTU|Modbus RTU]]&lt;br /&gt;
## [[#Modbus ASCII|Modbus ASCII]]&lt;br /&gt;
## [[#Modbus TCP/IP|Modbus TCP/IP]]&lt;br /&gt;
# [[#Communication Parameters|Communication Parameters]]&lt;br /&gt;
## [[#Baud Rate|Baud Rate]]&lt;br /&gt;
## [[#Parity|Parity]]&lt;br /&gt;
## [[#Data Bits|Data Bits]]&lt;br /&gt;
## [[#Stop Bits|Stop Bits]]&lt;br /&gt;
## [[#Flow Control|Flow Control]]&lt;br /&gt;
# [[#Data Model|Data Model]]&lt;br /&gt;
## [[#Coils|Coils]]&lt;br /&gt;
## [[#Discrete Inputs|Discrete Inputs]]&lt;br /&gt;
## [[#Holding Registers|Holding Registers]]&lt;br /&gt;
## [[#Input Registers|Input Registers]]&lt;br /&gt;
# [[#Function Codes|Function Codes]]&lt;br /&gt;
## [[#Read Functions|Read Functions]]&lt;br /&gt;
## [[#Write Functions|Write Functions]]&lt;br /&gt;
## [[#Diagnostic Functions|Diagnostic Functions]]&lt;br /&gt;
# [[#Error Handling|Error Handling]]&lt;br /&gt;
## [[#CRC and LRC Checking|CRC and LRC Checking]]&lt;br /&gt;
## [[#Exception Codes|Exception Codes]]&lt;br /&gt;
# [[#Modbus in BMS Applications|Modbus in BMS Applications]]&lt;br /&gt;
## [[#Typical Devices|Typical Devices]]&lt;br /&gt;
## [[#Wiring and Topology|Wiring and Topology]]&lt;br /&gt;
## [[#Common Issues and Troubleshooting|Common Issues and Troubleshooting]]&lt;br /&gt;
# [[#Modbus vs Other Protocols|Modbus vs Other Protocols]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Modbus is an open, serial communication protocol originally developed for use in programmable logic controllers (PLCs). It has since become one of the most widely deployed industrial communication protocols in the world, particularly in Building Management Systems (BMS), SCADA environments, energy metering, and industrial automation.&lt;br /&gt;
&lt;br /&gt;
Modbus operates on a master-slave (also referred to as client-server in newer documentation) architecture, where a single master device initiates all communication and one or more slave devices respond. It is valued for its simplicity, robustness, and vendor-neutral design — making it ideal for integrating devices from multiple manufacturers into a unified control system.&lt;br /&gt;
&lt;br /&gt;
In BMS applications, Modbus is commonly used to communicate with energy meters, variable frequency drives (VFDs), chillers, boilers, air handling units (AHUs), and a wide range of sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
Modbus was developed in 1979 by Modicon (now a brand of Schneider Electric) for use with their programmable logic controllers. It was designed as a simple and robust protocol for serial communication between controllers on a production floor.&lt;br /&gt;
&lt;br /&gt;
In 1996, Modbus over TCP/IP (Modbus TCP) was introduced, allowing the protocol to be used over modern Ethernet networks. This dramatically expanded its use cases and kept it relevant into the internet era.&lt;br /&gt;
&lt;br /&gt;
In 2004, the rights to the Modbus specification were transferred to the Modbus Organization, a non-profit trade association that maintains and promotes the standard to this day. The protocol remains publicly available and royalty-free, which is a significant reason for its continued adoption over proprietary alternatives.&lt;br /&gt;
&lt;br /&gt;
Today Modbus exists in three primary variants: Modbus RTU and Modbus ASCII (both for serial communication), and Modbus TCP/IP (for Ethernet communication).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Protocol Architecture ==&lt;br /&gt;
&lt;br /&gt;
=== Master-Slave Model ===&lt;br /&gt;
&lt;br /&gt;
Modbus uses a strict master-slave architecture. There is always one master and up to 247 addressable slave devices on a single serial bus. Each slave is assigned a unique address between 1 and 247. Address 0 is reserved for broadcast messages, which all slaves receive but do not respond to.&lt;br /&gt;
&lt;br /&gt;
The master is always the initiator of communication. A slave device never transmits data unless it has first been queried by the master. This eliminates bus collisions and keeps the protocol deterministic — an important quality in control systems where timing and reliability are critical.&lt;br /&gt;
&lt;br /&gt;
In a BMS context, the master is typically the Building Management Controller (BMC) or a gateway device, and the slaves are field devices such as energy meters, controllers, or sensors.&lt;br /&gt;
&lt;br /&gt;
=== Request-Response Cycle ===&lt;br /&gt;
&lt;br /&gt;
Every Modbus transaction follows a simple two-step cycle:&lt;br /&gt;
&lt;br /&gt;
# The &#039;&#039;&#039;master&#039;&#039;&#039; sends a request frame to a specific slave address (or broadcast to address 0).&lt;br /&gt;
# The &#039;&#039;&#039;slave&#039;&#039;&#039; receives the request, processes it, and returns a response frame to the master.&lt;br /&gt;
&lt;br /&gt;
If the slave receives a valid request but cannot comply (e.g. the register address does not exist), it returns an &#039;&#039;&#039;exception response&#039;&#039;&#039; containing an error code. If the master receives no response within its configured timeout window, it may retry the request or log a communication fault.&lt;br /&gt;
&lt;br /&gt;
A full Modbus RTU frame consists of the following fields in order:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Size !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Device Address || 1 byte || Slave address (1–247), or 0 for broadcast&lt;br /&gt;
|-&lt;br /&gt;
| Function Code || 1 byte || Defines the type of action requested&lt;br /&gt;
|-&lt;br /&gt;
| Data || Variable || Register addresses, values, or quantities&lt;br /&gt;
|-&lt;br /&gt;
| CRC || 2 bytes || Error checking (Cyclic Redundancy Check)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Transmission Modes ==&lt;br /&gt;
&lt;br /&gt;
=== Modbus RTU ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU (Remote Terminal Unit) is the most common implementation of the protocol in BMS and industrial environments. Data is transmitted as binary bytes over an RS-232 or RS-485 serial connection.&lt;br /&gt;
&lt;br /&gt;
Each byte of data is encoded as a single binary character. The framing of messages is defined by silent intervals (gaps) between characters — a gap of at least 3.5 character times signals the start or end of a message frame.&lt;br /&gt;
&lt;br /&gt;
RTU is preferred over ASCII for most applications because it is more efficient: it transmits the same data in roughly half the number of bytes, making better use of available bandwidth.&lt;br /&gt;
&lt;br /&gt;
Key characteristics:&lt;br /&gt;
* Binary encoding&lt;br /&gt;
* CRC-16 error checking&lt;br /&gt;
* Message framing via inter-character silence (3.5 character times)&lt;br /&gt;
* Physical layer: RS-485 (most common), RS-232, RS-422&lt;br /&gt;
&lt;br /&gt;
=== Modbus ASCII ===&lt;br /&gt;
&lt;br /&gt;
Modbus ASCII transmits data as ASCII text characters rather than raw binary. Each byte of data is represented as two hexadecimal ASCII characters (e.g. the byte &amp;lt;code&amp;gt;0x5B&amp;lt;/code&amp;gt; is sent as the characters &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
ASCII mode uses a colon (&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;) as a start delimiter and CR/LF characters as an end delimiter. It uses LRC (Longitudinal Redundancy Check) for error checking rather than CRC.&lt;br /&gt;
&lt;br /&gt;
ASCII mode is less bandwidth-efficient than RTU but is easier to debug with simple terminal tools and is more tolerant of timing variations on noisy or slow serial lines. It is rarely used in modern BMS installations.&lt;br /&gt;
&lt;br /&gt;
=== Modbus TCP/IP ===&lt;br /&gt;
&lt;br /&gt;
Modbus TCP/IP wraps the standard Modbus PDU (Protocol Data Unit) inside a TCP packet and transmits it over a standard Ethernet network. It uses port &#039;&#039;&#039;502&#039;&#039;&#039; by default.&lt;br /&gt;
&lt;br /&gt;
The serial-specific fields (device address and CRC) are replaced by a &#039;&#039;&#039;MBAP header&#039;&#039;&#039; (Modbus Application Protocol header), which contains a transaction identifier, protocol identifier, message length, and unit identifier.&lt;br /&gt;
&lt;br /&gt;
Modbus TCP removes the need for RS-485 wiring and allows Modbus devices to be integrated into IP-based building networks. Many modern BMS gateways and energy meters support Modbus TCP natively or via an RS-485-to-Ethernet converter.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Communication Parameters ==&lt;br /&gt;
&lt;br /&gt;
Communication parameters are the settings that define how data is physically transmitted between the master and slave devices on a serial Modbus network. All devices on the same bus &#039;&#039;&#039;must be configured with identical parameters&#039;&#039;&#039; — a mismatch in any one setting will cause communication failures.&lt;br /&gt;
&lt;br /&gt;
The parameters covered here apply primarily to Modbus RTU and Modbus ASCII (serial variants). Modbus TCP uses standard IP networking parameters instead.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Baud Rate ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_baudrate_diagram.png|thumb|400px|right|Diagram showing how baud rate affects the time width of each bit on the signal line. A higher baud rate means narrower bit windows and faster data transmission.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Baud rate&#039;&#039;&#039; defines the number of signal changes per second on the communication line. In Modbus RTU, one symbol = one binary bit, so baud rate = bits per second.&lt;br /&gt;
&lt;br /&gt;
==== Common Baud Rate Values ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Baud Rate !! Bits per Second !! Typical Use Case&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || 1,200 bps || Legacy devices, long cable runs with poor quality cable&lt;br /&gt;
|-&lt;br /&gt;
| 2400 || 2,400 bps || Older meters and sensors&lt;br /&gt;
|-&lt;br /&gt;
| 4800 || 4,800 bps || Moderate speed legacy devices&lt;br /&gt;
|-&lt;br /&gt;
| 9600 || 9,600 bps || &#039;&#039;&#039;Most common default&#039;&#039;&#039; — widely supported by all devices&lt;br /&gt;
|-&lt;br /&gt;
| 19200 || 19,200 bps || Standard BMS installations with moderate device counts&lt;br /&gt;
|-&lt;br /&gt;
| 38400 || 38,400 bps || Higher performance systems&lt;br /&gt;
|-&lt;br /&gt;
| 57600 || 57,600 bps || Fast networks, shorter cable runs&lt;br /&gt;
|-&lt;br /&gt;
| 115200 || 115,200 bps || Maximum practical speed for RS-485 in most installations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The default baud rate for Modbus RTU is &#039;&#039;&#039;9600 bps&#039;&#039;&#039;, though 19200 bps is very common in BMS environments.&lt;br /&gt;
&lt;br /&gt;
==== How Baud Rate Affects the Signal ====&lt;br /&gt;
&lt;br /&gt;
Each bit occupies a fixed time window called the &#039;&#039;&#039;bit period&#039;&#039;&#039;, calculated as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Bit Period = 1 / Baud Rate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At 9600 baud each bit lasts approximately &#039;&#039;&#039;104 microseconds&#039;&#039;&#039;. At 115200 baud each bit lasts approximately &#039;&#039;&#039;8.7 microseconds&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Single Byte at 9600 Baud, 8N1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The byte &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; (decimal 65) on the RS-485 wire at 9600 baud:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:     Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop&lt;br /&gt;
Value:     0    1    0    0    0    0    0    1    0     1&lt;br /&gt;
µs each: 104µs per bit window&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Start bit&#039;&#039;&#039; (1 bit, always 0): Pulls line LOW — signals receiver to begin reading&lt;br /&gt;
* &#039;&#039;&#039;D0–D7&#039;&#039;&#039; (8 bits): Binary data, transmitted LSB first. &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;01000001&amp;lt;/code&amp;gt; → wire order: 1,0,0,0,0,0,1,0&lt;br /&gt;
* &#039;&#039;&#039;Stop bit&#039;&#039;&#039; (1 bit, always 1): Returns line HIGH — marks end of byte&lt;br /&gt;
&lt;br /&gt;
Total frame = 10 bits × 104µs = &#039;&#039;&#039;1.04ms per byte&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Read Holding Register&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master reads 1 holding register (address 0x0000 = register 40001) from slave address 0x01.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame in hex — 8 bytes total:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [QtyHi] [QtyLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x03 ] [0x00 ] [0x00 ] [0x00 ] [0x01 ] [0x84 ] [0x0A ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Each byte in Modbus RTU binary (8N1, LSB first, 9600 baud):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 1 — Slave Address 0x01 (00000001):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 2 — Function Code 0x03 (00000011):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 3 — Register Address High 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 4 — Register Address Low 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — Quantity High 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 6 — Quantity Low 0x01 (00000001):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 7 — CRC Low 0x84 (10000100):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   1   0   0   0   0   1   1&lt;br /&gt;
&lt;br /&gt;
Byte 8 — CRC High 0x0A (00001010):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   1   0   1   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
[S] = Start bit (always 0)   [P] = Stop bit (always 1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What each field does:&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bytes !! Field !! Value !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Slave Address || 0x01 || Target device on the RS-485 bus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Function Code || 0x03 || Instruction: Read Holding Registers&lt;br /&gt;
|-&lt;br /&gt;
| 3–4 || Starting Address || 0x0000 || Begin at register 0 (Modbus register 40001)&lt;br /&gt;
|-&lt;br /&gt;
| 5–6 || Quantity || 0x0001 || Read 1 register (16-bit value)&lt;br /&gt;
|-&lt;br /&gt;
| 7–8 || CRC-16 || 0x0A84 || Error check — slave silently discards frame if CRC fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transmission time at 9600 baud, 8N1:&#039;&#039;&#039;&lt;br /&gt;
8 bytes × 10 bits = 80 bits → 80 × 104µs = &#039;&#039;&#039;8.32ms&#039;&#039;&#039; to send the full request frame&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Effect on Cable Length ====&lt;br /&gt;
&lt;br /&gt;
Higher baud rates require better quality cabling and are more sensitive to signal degradation over distance. As a general rule:&lt;br /&gt;
&lt;br /&gt;
* 9600 baud — reliable up to approximately 1200 metres on good RS-485 cable&lt;br /&gt;
* 19200 baud — reliable up to approximately 600 metres&lt;br /&gt;
* 115200 baud — reliable up to approximately 100 metres&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Parity ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_parity_diagram.png|thumb|400px|right|Diagram illustrating Even, Odd, and No parity bit positions within a Modbus RTU serial data frame. The parity bit is inserted between the last data bit and the stop bit.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parity&#039;&#039;&#039; adds a single calculated bit after the 8 data bits in each Modbus RTU character frame, providing basic single-bit error detection at the byte level. CRC-16 handles error detection at the full message level.&lt;br /&gt;
&lt;br /&gt;
==== Parity Modes ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mode !! Code !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Even Parity || E || Parity bit set so total count of 1s in data + parity = &#039;&#039;&#039;even&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Odd Parity || O || Parity bit set so total count of 1s in data + parity = &#039;&#039;&#039;odd&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| No Parity || N || No parity bit. Error checking relies on CRC-16 only. 2 stop bits recommended per Modbus spec.&lt;br /&gt;
|-&lt;br /&gt;
| Mark Parity || M || Parity bit always 1. Rarely used.&lt;br /&gt;
|-&lt;br /&gt;
| Space Parity || S || Parity bit always 0. Rarely used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Modbus RTU specification recommends &#039;&#039;&#039;Even parity&#039;&#039;&#039; as the default. However &#039;&#039;&#039;8N1&#039;&#039;&#039; (no parity, 1 stop bit) is the de facto standard for most BMS devices in practice.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Parity Bit Calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x31&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;00110001&amp;lt;/code&amp;gt;&lt;br /&gt;
Count of 1-bits in data = 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even Parity (8E1)&#039;&#039;&#039; — 3 is odd, so parity bit = 1 to reach even total (3+1=4):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Odd Parity (8O1)&#039;&#039;&#039; — 3 is already odd, so parity bit = 0 to keep total odd (3+0=3):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    0     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N1)&#039;&#039;&#039; — no parity bit, one stop bit only:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N2)&#039;&#039;&#039; — no parity bit, two stop bits to maintain 11-bit frame:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P1] [P2]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[S] = Start bit   [Par] = Parity bit   [P] = Stop bit&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Request with Even Parity (8E1)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Same request as the Baud Rate example — slave 0x01, FC03, register 0x0000, quantity 0x0001, CRC 0x840A — shown with Even parity applied to every byte.&lt;br /&gt;
&lt;br /&gt;
Parity rule: count the 1s in D0–D7. If count is odd → parity bit = 1. If count is even → parity bit = 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 1 — Slave 0x01 (00000001) — one 1-bit → parity = 1:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1     1&lt;br /&gt;
&lt;br /&gt;
Byte 2 — FC 0x03 (00000011) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   1   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 3 — RegHi 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 4 — RegLo 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — QtyHi 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 6 — QtyLo 0x01 (00000001) — one 1-bit → parity = 1:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1     1&lt;br /&gt;
&lt;br /&gt;
Byte 7 — CRCLo 0x84 (10000100) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   1   0   0   0   0   1    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 8 — CRCHi 0x0A (00001010) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   1   0   1   0   0   0   0    0     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8E1 framing = 11 bits per byte (1 start + 8 data + 1 parity + 1 stop)&lt;br /&gt;
8 bytes × 11 bits = 88 bits → at 9600 baud = &#039;&#039;&#039;9.17ms&#039;&#039;&#039; to transmit the full request&lt;br /&gt;
&lt;br /&gt;
The parity bit is recalculated independently for each byte — it is not a fixed value across the frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Parity Limitation ====&lt;br /&gt;
&lt;br /&gt;
Parity can only detect an &#039;&#039;&#039;odd number&#039;&#039;&#039; of bit errors. If two bits flip simultaneously the parity check still passes even though the data is corrupted. This is why Modbus RTU also uses CRC-16 at the message level — the two mechanisms complement each other.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Data Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_databits_diagram.png|thumb|400px|right|Data bit positions D0–D7 within a Modbus RTU character frame. Data bits carry the actual payload and are transmitted LSB first.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data bits&#039;&#039;&#039; refers to the number of bits carrying actual payload within each Modbus RTU character frame. This is always &#039;&#039;&#039;8&#039;&#039;&#039; in Modbus RTU. 8 bits = 1 byte = values 0–255 per frame. For values larger than 255, Modbus RTU uses two consecutive bytes (one 16-bit register) or four bytes (two registers for 32-bit floating point values).&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Data Bit Weighting&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0xB4&amp;lt;/code&amp;gt; = decimal 180 = binary &amp;lt;code&amp;gt;10110100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modbus RTU transmits data bits LSB first (D0 transmitted first, D7 last):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    0   0   1   0   1   1   0   1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit !! Wire Order !! Weight !! Bit Value in 0xB4 !! Contributes&lt;br /&gt;
|-&lt;br /&gt;
| D0 || 1st transmitted || 2⁰ = 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D1 || 2nd || 2¹ = 2 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D2 || 3rd || 2² = 4 || 1 || 4&lt;br /&gt;
|-&lt;br /&gt;
| D3 || 4th || 2³ = 8 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D4 || 5th || 2⁴ = 16 || 1 || 16&lt;br /&gt;
|-&lt;br /&gt;
| D5 || 6th || 2⁵ = 32 || 1 || 32&lt;br /&gt;
|-&lt;br /&gt;
| D6 || 7th || 2⁶ = 64 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D7 || 8th (last) || 2⁷ = 128 || 1 || 128&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Total&#039;&#039;&#039; || — || — || — || &#039;&#039;&#039;4+16+32+128 = 180 = 0xB4 ✓&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Slave Response with Register Decoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Slave 0x01 responds to the FC03 request. Register 40001 holds value 0x0190 (decimal 400), representing a supply air temperature of 40.0°C with a scale factor of ÷10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response frame in hex — 7 bytes total:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [ByteCt] [DatHi] [DatLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x03 ] [ 0x02 ] [0x01 ] [0x90 ] [0xF8 ] [0x4B ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Critical bytes expanded in Modbus RTU binary (8N1, LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 3 — Byte Count 0x02 (00000010):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    0   1   0   0   0   0   0   0    1&lt;br /&gt;
  D1 = 2¹ = 2 → 2 data bytes follow (one 16-bit register) ✓&lt;br /&gt;
&lt;br /&gt;
Byte 4 — Data High Byte 0x01 (00000001):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1&lt;br /&gt;
  D0 = 1 → high byte value = 1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — Data Low Byte 0x90 (10010000):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    0   0   0   0   1   0   0   1    1&lt;br /&gt;
  D4 = 16, D7 = 128 → 16+128 = 144 = 0x90&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Reconstructing the 16-bit register value (Big Endian — high byte first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
High byte:  0x01 × 256  =  256&lt;br /&gt;
Low byte:   0x90        =  144&lt;br /&gt;
                          ─────&lt;br /&gt;
Register value:            400  =  0x0190&lt;br /&gt;
&lt;br /&gt;
Applied scale factor ÷10:  400 ÷ 10  =  40.0°C&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modbus RTU always sends the high byte of a 16-bit register before the low byte. This is Big Endian byte order. Some devices deviate from this — always check the device register map.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Stop Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_stopbits_diagram.png|thumb|400px|right|Diagram comparing 1 stop bit vs 2 stop bits in a Modbus RTU character frame. Stop bits return the RS-485 line to idle HIGH after each transmitted byte.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stop bits&#039;&#039;&#039; return the RS-485 line to the idle HIGH state after each Modbus RTU character frame. The receiver requires this idle period to correctly detect the falling edge of the next start bit.&lt;br /&gt;
&lt;br /&gt;
==== Stop Bit Configurations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Config !! Stop Bits !! Parity !! Total Bits per Frame !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 8N1 || 1 || None || 10 || Most common Modbus RTU configuration in BMS&lt;br /&gt;
|-&lt;br /&gt;
| 8E1 || 1 || Even || 11 || Modbus RTU spec default — even parity + 1 stop&lt;br /&gt;
|-&lt;br /&gt;
| 8O1 || 1 || Odd || 11 || Odd parity + 1 stop&lt;br /&gt;
|-&lt;br /&gt;
| 8N2 || 2 || None || 11 || No parity, 2 stops — maintains 11-bit frame on noisy lines&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Stop Bit Comparison&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x55&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;01010101&amp;lt;/code&amp;gt; — four 1-bits (even count)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N1 — No Parity, 1 Stop Bit (10 bits total):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    1&lt;br /&gt;
        ←————————————— 10 bits ——————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8E1 — Even Parity, 1 Stop Bit (11 bits total):&#039;&#039;&#039;&lt;br /&gt;
Four 1-bits in data = even count → parity bit = 0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    0     1&lt;br /&gt;
        ←—————————————— 11 bits ———————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N2 — No Parity, 2 Stop Bits (11 bits total):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P1] [P2]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    1    1&lt;br /&gt;
        ←—————————————— 11 bits ———————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the line goes LOW before the stop bit period ends, the receiver flags a &#039;&#039;&#039;framing error&#039;&#039;&#039; and discards the byte. The resulting CRC mismatch causes the master to timeout with no response.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC06 Write Single Register&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master writes value 0x0064 (decimal 100 = setpoint 10.0°C at scale ÷10) to register 40002 (address 0x0001) on slave 0x01.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Request frame in hex — 8 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [ValHi] [ValLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x06 ] [0x00 ] [0x01 ] [0x00 ] [0x64 ] [0x49 ] [0xA4 ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full frame in Modbus RTU binary, 8N1 (LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
Byte 1 0x01: 0  1   0   0   0   0   0   0   0   1   ← Slave address&lt;br /&gt;
Byte 2 0x06: 0  0   1   1   0   0   0   0   0   1   ← Write Single Register&lt;br /&gt;
Byte 3 0x00: 0  0   0   0   0   0   0   0   0   1   ← Register address high&lt;br /&gt;
Byte 4 0x01: 0  1   0   0   0   0   0   0   0   1   ← Register address low (reg 40002)&lt;br /&gt;
Byte 5 0x00: 0  0   0   0   0   0   0   0   0   1   ← Value high byte&lt;br /&gt;
Byte 6 0x64: 0  0   0   1   0   0   1   1   0   1   ← Value low byte (100 decimal)&lt;br /&gt;
Byte 7 0x49: 0  1   0   0   1   0   0   1   0   1   ← CRC low&lt;br /&gt;
Byte 8 0xA4: 0  0   0   1   0   0   1   0   1   1   ← CRC high&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On a successful FC06 write the slave echoes the &#039;&#039;&#039;entire 8-byte request frame back unchanged&#039;&#039;&#039; as its response. If the stop bit on any byte is corrupted, that byte is discarded as a framing error, the CRC check fails, and the master receives no response.&lt;br /&gt;
&lt;br /&gt;
Transmission time at 9600 baud, 8N1: 8 bytes × 10 bits × 104µs = &#039;&#039;&#039;8.32ms&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Flow Control ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_flowcontrol_diagram.png|thumb|400px|right|RS-485 RTS direction switching during a Modbus RTU request/response cycle. The master asserts DE HIGH to transmit, then releases the bus before the slave responds.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Flow control&#039;&#039;&#039; in Modbus RTU on RS-485 is almost always set to &#039;&#039;&#039;None&#039;&#039;&#039; in software. The physical RS-485 half-duplex bus requires direction switching between transmit and receive, but this is handled by the hardware driver enable (DE) pin on the RS-485 transceiver, not by a software flow control protocol.&lt;br /&gt;
&lt;br /&gt;
==== Flow Control Types ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type !! Method !! Compatible with Modbus RTU&lt;br /&gt;
|-&lt;br /&gt;
| None || — || ✓ Standard for RS-485 Modbus RTU&lt;br /&gt;
|-&lt;br /&gt;
| Hardware RTS/CTS || Physical signal lines || Only on RS-232 point-to-point connections&lt;br /&gt;
|-&lt;br /&gt;
| Software XON/XOFF || In-band bytes 0x11 / 0x13 || ✗ Incompatible — Modbus RTU is a binary protocol&lt;br /&gt;
|-&lt;br /&gt;
| RTS as DE toggle || RTS drives RS-485 DE pin || ✓ Used by USB-RS485 adapters for direction switching&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: RS-485 Half-Duplex Direction Control&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In Modbus RTU on RS-485, the driver enable (DE) signal controls which device owns the bus. Only one device may drive the bus at any time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              MASTER TRANSMITTING              MASTER LISTENING&lt;br /&gt;
DE (Master):  ________________________&lt;br /&gt;
             |                        |________________________________&lt;br /&gt;
             ^ DE asserted HIGH        ^ DE released LOW&lt;br /&gt;
&lt;br /&gt;
TX (Master):  [ Start bits of frame...data bytes...CRC ]&lt;br /&gt;
             |←————————————————————————————————————————→|&lt;br /&gt;
&lt;br /&gt;
                                       ↑&lt;br /&gt;
                               3.5 character-time&lt;br /&gt;
                               silent gap (~3.6ms at 9600 baud)&lt;br /&gt;
                               marks end of Modbus RTU frame&lt;br /&gt;
&lt;br /&gt;
DE (Slave):                                        ______________________&lt;br /&gt;
                                                  |&lt;br /&gt;
                                                  ^ Slave asserts its DE HIGH&lt;br /&gt;
&lt;br /&gt;
RX (Master):                                      [ Slave response frame ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* DE HIGH = RS-485 driver active, device is transmitting&lt;br /&gt;
* DE LOW = RS-485 driver disabled, device is listening&lt;br /&gt;
* The 3.5 character-time silent gap is how Modbus RTU detects frame boundaries — there is no delimiter byte&lt;br /&gt;
* If DE is not released fast enough, the master&#039;s driver will collide with the slave&#039;s response on the bus&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Read 2 Registers — Complete Request/Response Cycle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master reads 2 holding registers from slave 0x02, starting at address 0x0010 (registers 40017 and 40018). These could represent, for example, active power high and low bytes from an energy meter.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Master request frame — 8 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [QtyHi] [QtyLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x02 ] [0x03 ] [0x00 ] [0x10 ] [0x00 ] [0x02 ] [0xC4 ] [0x38 ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Slave response frame — 9 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ] [  9  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [ByteCt] [R1Hi ] [R1Lo ] [R2Hi ] [R2Lo ] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x02 ] [0x03 ] [ 0x04 ] [0x00 ] [0xC8 ] [0x01 ] [0x2C ] [0x77 ] [0xDF ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Both frames in Modbus RTU binary, 8N1 (LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REQUEST:&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
0x02 Addr:  0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0x03 FC:    0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
0x00 RegHi: 0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0x10 RegLo: 0   0   0   0   0   1   0   0   0   1&lt;br /&gt;
0x00 QtyHi: 0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0x02 QtyLo: 0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0xC4 CRCLo: 0   0   0   1   0   0   0   1   1   1&lt;br /&gt;
0x38 CRCHi: 0   0   0   0   1   1   1   0   0   1&lt;br /&gt;
&lt;br /&gt;
[— 3.5 char silent gap (~3.6ms at 9600 baud) — master releases bus — slave responds —]&lt;br /&gt;
&lt;br /&gt;
RESPONSE:&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
0x02 Addr:  0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0x03 FC:    0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
0x04 BytCt: 0   0   0   1   0   0   0   0   0   1&lt;br /&gt;
0x00 R1Hi:  0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0xC8 R1Lo:  0   0   0   0   1   0   0   1   1   1&lt;br /&gt;
0x01 R2Hi:  0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
0x2C R2Lo:  0   0   1   1   0   1   0   0   0   1&lt;br /&gt;
0x77 CRCLo: 0   1   1   1   0   1   1   1   0   1&lt;br /&gt;
0xDF CRCHi: 0   1   1   1   1   1   0   1   1   1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding the two register values from the response (Big Endian — high byte first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Register 1 (40017):&lt;br /&gt;
  High byte 0x00 = 0 × 256  =   0&lt;br /&gt;
  Low  byte 0xC8 =           = 200&lt;br /&gt;
  Value = 0 + 200            = 200&lt;br /&gt;
&lt;br /&gt;
Register 2 (40018):&lt;br /&gt;
  High byte 0x01 = 1 × 256  = 256&lt;br /&gt;
  Low  byte 0x2C =           =  44&lt;br /&gt;
  Value = 256 + 44           = 300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If these were active power registers with a scale factor of ÷10:&lt;br /&gt;
Register 1 = 20.0 kW, Register 2 = 30.0 kW&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transmission times at 9600 baud, 8N1:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Request:    8 bytes × 10 bits × 104µs  =   8.32ms&lt;br /&gt;
Silent gap:                             ≈   3.60ms&lt;br /&gt;
Response:   9 bytes × 10 bits × 104µs  =   9.36ms&lt;br /&gt;
                                           ───────&lt;br /&gt;
Total cycle time:                       ≈  21.28ms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The silent gap between the master frame and slave response is critical. If the master releases its driver too late it will collide with the slave&#039;s response. If the slave responds before the gap completes, the master will misinterpret the response as a continuation of its own transmission.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Data Model ==&lt;br /&gt;
&lt;br /&gt;
Modbus organises data into four distinct object types, each with a defined address space. The master accesses these objects using function codes.&lt;br /&gt;
&lt;br /&gt;
=== Coils ===&lt;br /&gt;
&lt;br /&gt;
Coils are single-bit read/write values. They represent binary output states such as a relay, a digital output, or an on/off command. The address range is 1–9999 (using 1-based Modbus convention) or 0x0000–0xFFFF (using the 0-based PDU addressing).&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: fan on/off command, valve open/close output, alarm reset.&lt;br /&gt;
&lt;br /&gt;
=== Discrete Inputs ===&lt;br /&gt;
&lt;br /&gt;
Discrete inputs are single-bit read-only values. They represent binary input states such as a digital sensor, a status contact, or a switch position. Address range: 10001–19999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: door open sensor, high temperature alarm contact, filter dirty status.&lt;br /&gt;
&lt;br /&gt;
=== Holding Registers ===&lt;br /&gt;
&lt;br /&gt;
Holding registers are 16-bit read/write registers. They are the most commonly used data type in Modbus and can hold values such as setpoints, configurations, and output values. Address range: 40001–49999.&lt;br /&gt;
&lt;br /&gt;
A single holding register holds values from 0 to 65535 (unsigned) or -32768 to 32767 (signed). For larger values such as floating point temperatures or energy readings, two consecutive registers are used together to form a 32-bit value.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: temperature setpoint, VFD speed reference, valve position command.&lt;br /&gt;
&lt;br /&gt;
=== Input Registers ===&lt;br /&gt;
&lt;br /&gt;
Input registers are 16-bit read-only registers. They represent measured or computed values provided by the slave device. Address range: 30001–39999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: supply air temperature, room CO₂ concentration, energy meter active power reading.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Function Codes ==&lt;br /&gt;
&lt;br /&gt;
Function codes tell the slave device what action to perform. They are carried in the second byte of every Modbus RTU frame.&lt;br /&gt;
&lt;br /&gt;
=== Read Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Reads&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Read Coils || Coils (1-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Read Discrete Inputs || Discrete Inputs (1-bit, read-only)&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Read Holding Registers || Holding Registers (16-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Read Input Registers || Input Registers (16-bit, read-only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Write Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Writes&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Write Single Coil || Single coil ON (0xFF00) or OFF (0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Write Single Register || Single holding register&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 0x0F || Write Multiple Coils || Multiple coils&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 0x10 || Write Multiple Registers || Multiple holding registers&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Diagnostic Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 07 || 0x07 || Read Exception Status || Returns device error status byte&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Diagnostics || Various sub-functions for testing comms&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Get Comm Event Counter || Returns count of successful messages&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 0x11 || Report Server ID || Returns device type and status&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
=== CRC and LRC Checking ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC-16 (Cyclic Redundancy Check)&#039;&#039;&#039; is used in Modbus RTU. It is a 16-bit error detection value calculated from all bytes in the message excluding the CRC bytes themselves. The master calculates the CRC before sending, and the slave recalculates it upon receipt. If the values do not match, the message is discarded silently — no response is sent, and the master will timeout.&lt;br /&gt;
&lt;br /&gt;
The CRC polynomial used is: &amp;lt;code&amp;gt;0xA001&amp;lt;/code&amp;gt; (reflected form of CRC-16-IBM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LRC (Longitudinal Redundancy Check)&#039;&#039;&#039; is used in Modbus ASCII only. It is calculated as the two&#039;s complement of the sum of all byte values in the message. It is simpler but less robust than CRC-16.&lt;br /&gt;
&lt;br /&gt;
=== Exception Codes ===&lt;br /&gt;
&lt;br /&gt;
When a slave receives a valid request but cannot fulfil it, it returns an exception response. The function code in the response has its most significant bit set to 1 (i.e. the original function code + 0x80), followed by an exception code byte.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Exception Code !! Hex !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Illegal Function || The function code is not supported by this device&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Illegal Data Address || The register address does not exist on this device&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Illegal Data Value || The value in the data field is not permitted&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Slave Device Failure || An unrecoverable error occurred in the slave&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Acknowledge || Slave accepted the request but needs more time&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Slave Device Busy || Slave is busy processing a previous request&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Memory Parity Error || Slave detected a parity error reading extended memory&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0x0A || Gateway Path Unavailable || Gateway could not allocate a path (Modbus TCP)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Gateway Target No Response || Target device on gateway failed to respond&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus in BMS Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Typical Devices ===&lt;br /&gt;
&lt;br /&gt;
Modbus is one of the most commonly encountered protocols when integrating third-party field devices into a BMS. The following device types frequently use Modbus RTU as their primary or secondary communication interface:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Energy meters&#039;&#039;&#039; — active power (kW), reactive power (kVAR), energy (kWh), power factor, voltage and current readings via input registers&lt;br /&gt;
* &#039;&#039;&#039;Variable Frequency Drives (VFDs)&#039;&#039;&#039; — speed reference (Hz or %), run/stop command, fault status, output frequency and current feedback&lt;br /&gt;
* &#039;&#039;&#039;Chillers and heat pumps&#039;&#039;&#039; — leaving water temperature, setpoint, mode command, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Air Handling Units (AHUs)&#039;&#039;&#039; — supply/return air temperature, damper position, fan speed feedback&lt;br /&gt;
* &#039;&#039;&#039;CO₂ and air quality sensors&#039;&#039;&#039; — CO₂ concentration (ppm), temperature, humidity&lt;br /&gt;
* &#039;&#039;&#039;Heat meters&#039;&#039;&#039; — flow rate, inlet/outlet temperatures, cumulative energy&lt;br /&gt;
* &#039;&#039;&#039;UPS systems&#039;&#039;&#039; — battery voltage, charge level, load percentage, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Generator controllers&#039;&#039;&#039; — run status, fuel level, output voltage, frequency&lt;br /&gt;
&lt;br /&gt;
=== Wiring and Topology ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU on RS-485 uses a &#039;&#039;&#039;daisy-chain bus topology&#039;&#039;&#039;. Devices are connected in series from the first to the last node. The two conductors of the RS-485 pair are labelled A (−) and B (+), though manufacturers often use inconsistent naming — some label them D− / D+, or even reverse the A/B convention entirely.&lt;br /&gt;
&lt;br /&gt;
Key wiring rules:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Termination resistors&#039;&#039;&#039; of 120Ω must be fitted at both physical ends of the RS-485 bus to prevent signal reflections. Only the two end devices are terminated — never intermediate devices.&lt;br /&gt;
* &#039;&#039;&#039;Bias resistors&#039;&#039;&#039; (typically 560Ω to 1kΩ) are recommended to hold the bus at a defined state when no device is transmitting, preventing false start bit detection on an idle line.&lt;br /&gt;
* &#039;&#039;&#039;Maximum cable length&#039;&#039;&#039; depends on baud rate (see Baud Rate section), but 1200 metres at 9600 baud is a typical practical limit for standard twisted pair cable.&lt;br /&gt;
* The maximum number of addressable slave devices is 247, though the RS-485 electrical standard supports up to 32 unit loads on a single segment without repeaters (256 with 1/8 unit load devices).&lt;br /&gt;
* Shielded twisted pair (STP) cable is strongly recommended in BMS environments due to electrical noise from motors, VFDs, and other inductive loads.&lt;br /&gt;
&lt;br /&gt;
=== Common Issues and Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
The following are the most frequently encountered Modbus RTU communication problems in BMS installations:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No response from slave / timeout&#039;&#039;&#039;&lt;br /&gt;
* Verify slave address matches the configured address on the physical device&lt;br /&gt;
* Check baud rate, parity, data bits, and stop bits match on master and slave&lt;br /&gt;
* Check A/B wiring polarity — reversed polarity is a very common installation error&lt;br /&gt;
* Verify termination resistors are fitted at the correct endpoints only&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC errors / corrupted data&#039;&#039;&#039;&lt;br /&gt;
* Inspect cable routing — avoid running alongside power cables or VFD output cables&lt;br /&gt;
* Check for missing or incorrectly placed termination resistors&lt;br /&gt;
* Reduce baud rate to test if the issue is speed-related&lt;br /&gt;
* Check for ground loops — ensure cable shield is grounded at one end only&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intermittent communication&#039;&#039;&#039;&lt;br /&gt;
* Often caused by missing bias resistors — the bus floats to an indeterminate state when idle&lt;br /&gt;
* Check for multiple termination resistors incorrectly fitted to intermediate devices&lt;br /&gt;
* Investigate RTS/driver enable timing issues if using a custom RS-485 adapter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incorrect register values&#039;&#039;&#039;&lt;br /&gt;
* Confirm register addressing convention — some devices use 0-based addressing, others 1-based&lt;br /&gt;
* Check byte order (endianness) for 32-bit floating point values — some devices use Big Endian, others Little Endian or mixed (byte-swapped) formats&lt;br /&gt;
* Verify scaling factors — a register reading of 1234 may represent 12.34 depending on the device register map&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus vs Other Protocols ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! Modbus RTU !! BACnet MS/TP !! PROFIBUS DP !! KNX (TP)&lt;br /&gt;
|-&lt;br /&gt;
| Year Introduced || 1979 || 1995 || 1989 || 1990&lt;br /&gt;
|-&lt;br /&gt;
| Physical Layer || RS-485 || RS-485 || RS-485 || Twisted Pair (proprietary)&lt;br /&gt;
|-&lt;br /&gt;
| Max Devices || 247 slaves || 128 nodes || 126 nodes || 65,536 devices&lt;br /&gt;
|-&lt;br /&gt;
| Max Speed || 115,200 bps || 76,800 bps || 12 Mbps || 9,600 bps&lt;br /&gt;
|-&lt;br /&gt;
| Error Detection || CRC-16 || CRC-16 || CRC-16 || Data Link Layer CRC&lt;br /&gt;
|-&lt;br /&gt;
| Architecture || Master-Slave (strict) || Token passing || Master-Slave || Decentralised&lt;br /&gt;
|-&lt;br /&gt;
| Open Standard || Yes (free) || Yes (ASHRAE) || IEC 61158 || Yes (ISO 14543)&lt;br /&gt;
|-&lt;br /&gt;
| Native BMS Support || Via gateway || Native BMS protocol || Industrial/BMS || BMS/home automation&lt;br /&gt;
|-&lt;br /&gt;
| IP Variant || Modbus TCP || BACnet/IP || PROFINET || KNX IP&lt;br /&gt;
|-&lt;br /&gt;
| Complexity || Low || Medium || High || Medium&lt;br /&gt;
|-&lt;br /&gt;
| Cost to Implement || Very Low || Low–Medium || Medium–High || Medium&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Modbus RTU is the simplest and most widely supported protocol, making it ideal for third-party device integration. BACnet MS/TP is preferred for native BMS device-to-controller communication as it is specifically designed for building automation and supports peer-to-peer messaging. PROFIBUS DP offers significantly higher speed and is more common in industrial and manufacturing environments than in typical building services. KNX is predominantly used in smaller commercial and residential applications.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This page is part of the BMS Protocols section of the internal BMS Wiki.&#039;&#039;&lt;br /&gt;
&#039;&#039;Last updated: February 2026&#039;&#039;&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Modbus&amp;diff=80</id>
		<title>Modbus</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Modbus&amp;diff=80"/>
		<updated>2026-02-24T23:22:01Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Baud Rate ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_baudrate_diagram.png|thumb|400px|right|Diagram showing how baud rate affects the time width of each bit on the signal line.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Baud rate&#039;&#039;&#039; defines the number of signal changes per second on the communication line. In Modbus RTU, one symbol = one binary bit, so baud rate = bits per second.&lt;br /&gt;
&lt;br /&gt;
==== Common Baud Rate Values ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Baud Rate !! Bits per Second !! Typical Use Case&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || 1,200 bps || Legacy devices, long cable runs&lt;br /&gt;
|-&lt;br /&gt;
| 2400 || 2,400 bps || Older meters and sensors&lt;br /&gt;
|-&lt;br /&gt;
| 4800 || 4,800 bps || Moderate speed legacy devices&lt;br /&gt;
|-&lt;br /&gt;
| 9600 || 9,600 bps || &#039;&#039;&#039;Most common default&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 19200 || 19,200 bps || Standard BMS installations&lt;br /&gt;
|-&lt;br /&gt;
| 38400 || 38,400 bps || Higher performance systems&lt;br /&gt;
|-&lt;br /&gt;
| 57600 || 57,600 bps || Fast networks, shorter cable runs&lt;br /&gt;
|-&lt;br /&gt;
| 115200 || 115,200 bps || Maximum practical RS-485 speed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== How Baud Rate Affects the Signal ====&lt;br /&gt;
&lt;br /&gt;
Each bit occupies a fixed time window: &amp;lt;code&amp;gt;Bit Period = 1 / Baud Rate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At 9600 baud each bit lasts &#039;&#039;&#039;104 microseconds&#039;&#039;&#039;. At 115200 baud each bit lasts &#039;&#039;&#039;8.7 microseconds&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Single Byte at 9600 Baud, 8N1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The byte &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; (decimal 65) on the RS-485 wire at 9600 baud:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:     Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop&lt;br /&gt;
Value:     0    1    0    0    0    0    0    1    0     1&lt;br /&gt;
µs each: 104µs per bit window&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Start bit&#039;&#039;&#039; (1 bit, always 0): Pulls line LOW — signals receiver to begin reading&lt;br /&gt;
* &#039;&#039;&#039;D0–D7&#039;&#039;&#039; (8 bits): Binary data, transmitted LSB first. &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;01000001&amp;lt;/code&amp;gt; → wire order: 1,0,0,0,0,0,1,0&lt;br /&gt;
* &#039;&#039;&#039;Stop bit&#039;&#039;&#039; (1 bit, always 1): Returns line HIGH — marks end of byte&lt;br /&gt;
&lt;br /&gt;
Total frame = 10 bits × 104µs = &#039;&#039;&#039;1.04ms per byte&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Read Holding Register&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master reads 1 holding register (address 0x0000 = register 40001) from slave address 0x01.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame in hex — 8 bytes total:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [QtyHi] [QtyLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x03 ] [0x00 ] [0x00 ] [0x00 ] [0x01 ] [0x84 ] [0x0A ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Each byte in Modbus RTU binary (8N1, LSB first, 9600 baud):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 1 — Slave Address 0x01 (00000001):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 2 — Function Code 0x03 (00000011):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 3 — Register Address High 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 4 — Register Address Low 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — Quantity High 0x00 (00000000):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 6 — Quantity Low 0x01 (00000001):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
Byte 7 — CRC Low 0x84 (10000100):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   0   1   0   0   0   0   1   1&lt;br /&gt;
&lt;br /&gt;
Byte 8 — CRC High 0x0A (00001010):&lt;br /&gt;
  [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
   0   0   1   0   1   0   0   0   0   1&lt;br /&gt;
&lt;br /&gt;
[S] = Start bit (always 0)   [P] = Stop bit (always 1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What each field does:&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bytes !! Field !! Value !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Slave Address || 0x01 || Target device on the RS-485 bus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Function Code || 0x03 || Instruction: Read Holding Registers&lt;br /&gt;
|-&lt;br /&gt;
| 3–4 || Starting Address || 0x0000 || Begin at register 0 (Modbus register 40001)&lt;br /&gt;
|-&lt;br /&gt;
| 5–6 || Quantity || 0x0001 || Read 1 register (16-bit value)&lt;br /&gt;
|-&lt;br /&gt;
| 7–8 || CRC-16 || 0x0A84 || Error check — slave silently discards frame if CRC fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transmission time at 9600 baud, 8N1:&#039;&#039;&#039;&lt;br /&gt;
8 bytes × 10 bits = 80 bits → 80 × 104µs = &#039;&#039;&#039;8.32ms&#039;&#039;&#039; to send the full request frame&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Effect on Cable Length ====&lt;br /&gt;
&lt;br /&gt;
* 9600 baud — up to ~1200m on good RS-485 twisted pair&lt;br /&gt;
* 19200 baud — up to ~600m&lt;br /&gt;
* 115200 baud — up to ~100m&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Parity ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_parity_diagram.png|thumb|400px|right|Parity bit position within a Modbus RTU serial frame.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parity&#039;&#039;&#039; adds a single calculated bit after the 8 data bits in each Modbus RTU character frame, providing basic single-bit error detection at the byte level. CRC-16 handles error detection at the full message level.&lt;br /&gt;
&lt;br /&gt;
==== Parity Modes ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mode !! Code !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Even || E || Parity bit makes total count of 1s in the frame even&lt;br /&gt;
|-&lt;br /&gt;
| Odd || O || Parity bit makes total count of 1s in the frame odd&lt;br /&gt;
|-&lt;br /&gt;
| None || N || No parity bit. 2 stop bits recommended per Modbus spec to maintain frame length.&lt;br /&gt;
|-&lt;br /&gt;
| Mark || M || Parity bit always 1. Rarely used.&lt;br /&gt;
|-&lt;br /&gt;
| Space || S || Parity bit always 0. Rarely used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Modbus RTU specification recommends &#039;&#039;&#039;Even parity&#039;&#039;&#039; as default. In practice &#039;&#039;&#039;8N1&#039;&#039;&#039; (no parity, 1 stop bit) is the most common configuration in BMS installations.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Parity Bit Calculation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x31&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;00110001&amp;lt;/code&amp;gt;&lt;br /&gt;
Count of 1-bits in data = 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even Parity (8E1)&#039;&#039;&#039; — 3 is odd, so parity bit = 1 to reach even total (3+1=4):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Odd Parity (8O1)&#039;&#039;&#039; — 3 is already odd, so parity bit = 0 to keep total odd (3+0=3):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    0     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N1)&#039;&#039;&#039; — no parity bit, one stop bit only:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N2)&#039;&#039;&#039; — no parity bit, two stop bits to maintain 11-bit frame:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P1] [P2]&lt;br /&gt;
Value:  0    1   0   0   0   1   1   0   0    1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[S] = Start bit   [Par] = Parity bit   [P] = Stop bit&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Request with Even Parity (8E1)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Same request as the Baud Rate example — slave 0x01, FC03, register 0x0000, quantity 0x0001, CRC 0x840A — but now shown with Even parity applied to every byte.&lt;br /&gt;
&lt;br /&gt;
Parity bit rule: count the 1s in D0–D7. If count is odd → parity = 1. If count is even → parity = 0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 1 — Slave 0x01 (00000001) — one 1-bit → parity = 1:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1     1&lt;br /&gt;
&lt;br /&gt;
Byte 2 — FC 0x03 (00000011) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   1   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 3 — RegHi 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 4 — RegLo 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — QtyHi 0x00 (00000000) — zero 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   0   0   0   0   0   0    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 6 — QtyLo 0x01 (00000001) — one 1-bit → parity = 1:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1     1&lt;br /&gt;
&lt;br /&gt;
Byte 7 — CRCLo 0x84 (10000100) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   0   1   0   0   0   0   1    0     1&lt;br /&gt;
&lt;br /&gt;
Byte 8 — CRCHi 0x0A (00001010) — two 1-bits → parity = 0:&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
   0    0   1   0   1   0   0   0   0    0     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8E1 framing = 11 bits per byte (1 start + 8 data + 1 parity + 1 stop)&lt;br /&gt;
8 bytes × 11 bits = 88 bits → at 9600 baud = &#039;&#039;&#039;9.17ms&#039;&#039;&#039; to transmit the full request&lt;br /&gt;
&lt;br /&gt;
The parity bit is recalculated independently for each byte — it is not a fixed value across the frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Data Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_databits_diagram.png|thumb|400px|right|Data bit positions D0–D7 within a Modbus RTU character frame, transmitted LSB first.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data bits&#039;&#039;&#039; is the number of bits carrying actual payload within each Modbus RTU character frame. This is always &#039;&#039;&#039;8&#039;&#039;&#039; in Modbus RTU. 8 bits = 1 byte = values 0–255 per frame. For values larger than 255, Modbus RTU uses two consecutive bytes (one 16-bit register) or four bytes (two registers for 32-bit values).&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Data Bit Weighting&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0xB4&amp;lt;/code&amp;gt; = decimal 180 = binary &amp;lt;code&amp;gt;10110100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modbus RTU transmits data bits LSB first (D0 first, D7 last):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    0   0   1   0   1   1   0   1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit !! Wire Order !! Weight !! Bit Value in 0xB4 !! Contributes&lt;br /&gt;
|-&lt;br /&gt;
| D0 || 1st transmitted || 2⁰ = 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D1 || 2nd || 2¹ = 2 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D2 || 3rd || 2² = 4 || 1 || 4&lt;br /&gt;
|-&lt;br /&gt;
| D3 || 4th || 2³ = 8 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D4 || 5th || 2⁴ = 16 || 1 || 16&lt;br /&gt;
|-&lt;br /&gt;
| D5 || 6th || 2⁵ = 32 || 1 || 32&lt;br /&gt;
|-&lt;br /&gt;
| D6 || 7th || 2⁶ = 64 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| D7 || 8th (last) || 2⁷ = 128 || 1 || 128&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Total&#039;&#039;&#039; || — || — || — || &#039;&#039;&#039;4+16+32+128 = 180 = 0xB4 ✓&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Slave Response with Register Decoding&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Slave 0x01 responds to the FC03 request. Register 40001 holds value 0x0190 (decimal 400), representing a supply air temperature of 40.0°C (scale factor ÷10).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Response frame in hex — 7 bytes total:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [ByteCt] [DatHi] [DatLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x03 ] [ 0x02 ] [0x01 ] [0x90 ] [0xF8 ] [0x4B ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Critical bytes expanded in Modbus RTU binary (8N1, LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte 3 — Byte Count 0x02 (00000010):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    0   1   0   0   0   0   0   0    1&lt;br /&gt;
  D1 = 2¹ = 2 → 2 data bytes follow (one 16-bit register) ✓&lt;br /&gt;
&lt;br /&gt;
Byte 4 — Data High Byte 0x01 (00000001):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    1   0   0   0   0   0   0   0    1&lt;br /&gt;
  D0 = 1 → High byte value = 1&lt;br /&gt;
&lt;br /&gt;
Byte 5 — Data Low Byte 0x90 (10010000):&lt;br /&gt;
  [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
   0    0   0   0   0   1   0   0   1    1&lt;br /&gt;
  D4 = 16, D7 = 128 → 16+128 = 144 = 0x90&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Reconstructing the 16-bit register value (Big Endian — high byte first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
High byte:  0x01 × 256  =  256&lt;br /&gt;
Low byte:   0x90        =  144&lt;br /&gt;
                          ─────&lt;br /&gt;
Register value:            400  =  0x0190&lt;br /&gt;
&lt;br /&gt;
Applied scale factor ÷10:  400 ÷ 10  =  40.0°C&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modbus RTU always sends the high byte of a 16-bit register before the low byte. This is Big Endian byte order. Some devices deviate from this — always check the device register map.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Stop Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_stopbits_diagram.png|thumb|400px|right|1 stop bit vs 2 stop bits in a Modbus RTU character frame.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stop bits&#039;&#039;&#039; return the RS-485 line to the idle HIGH state after each Modbus RTU character frame. The receiver requires this idle period to correctly detect the falling edge of the next start bit.&lt;br /&gt;
&lt;br /&gt;
==== Stop Bit Configurations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Config !! Stop Bits !! Parity !! Total Bits per Frame !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| 8N1 || 1 || None || 10 || Most common Modbus RTU configuration in BMS&lt;br /&gt;
|-&lt;br /&gt;
| 8E1 || 1 || Even || 11 || Modbus spec default — even parity + 1 stop&lt;br /&gt;
|-&lt;br /&gt;
| 8O1 || 1 || Odd || 11 || Odd parity + 1 stop&lt;br /&gt;
|-&lt;br /&gt;
| 8N2 || 2 || None || 11 || No parity, 2 stops — maintains 11-bit frame on noisy lines&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: Stop Bit Comparison&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x55&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;01010101&amp;lt;/code&amp;gt; — four 1-bits (even count)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N1 — No Parity, 1 Stop Bit (10 bits total):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    1&lt;br /&gt;
        ←————————————— 10 bits ——————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8E1 — Even Parity, 1 Stop Bit (11 bits total):&#039;&#039;&#039;&lt;br /&gt;
Four 1-bits in data = even count → parity = 0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [Par] [P]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    0     1&lt;br /&gt;
        ←—————————————— 11 bits ———————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N2 — No Parity, 2 Stop Bits (11 bits total):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:   [S]  D0  D1  D2  D3  D4  D5  D6  D7  [P1] [P2]&lt;br /&gt;
Value:  0    1   0   1   0   1   0   1   0    1    1&lt;br /&gt;
        ←—————————————— 11 bits ———————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the line goes LOW before the stop bit period ends, the receiver flags a &#039;&#039;&#039;framing error&#039;&#039;&#039; and discards the byte. The resulting CRC mismatch causes the master to timeout with no response.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC06 Write Single Register&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master writes value 0x0064 (decimal 100 = setpoint 10.0°C at scale ÷10) to register 40002 (address 0x0001) on slave 0x01.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Request frame in hex — 8 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [ValHi] [ValLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x01 ] [0x06 ] [0x00 ] [0x01 ] [0x00 ] [0x64 ] [0x49 ] [0xA4 ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Full frame in Modbus RTU binary, 8N1 format:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
Byte 1 0x01: 0  1   0   0   0   0   0   0   0   1   ← Slave address&lt;br /&gt;
Byte 2 0x06: 0  0   1   1   0   0   0   0   0   1   ← Write Single Register&lt;br /&gt;
Byte 3 0x00: 0  0   0   0   0   0   0   0   0   1   ← Register address high&lt;br /&gt;
Byte 4 0x01: 0  1   0   0   0   0   0   0   0   1   ← Register address low (reg 40002)&lt;br /&gt;
Byte 5 0x00: 0  0   0   0   0   0   0   0   0   1   ← Value high byte&lt;br /&gt;
Byte 6 0x64: 0  0   0   1   0   0   1   1   0   1   ← Value low byte (100 decimal)&lt;br /&gt;
Byte 7 0x49: 0  1   0   0   1   0   0   1   0   1   ← CRC low&lt;br /&gt;
Byte 8 0xA4: 0  0   0   1   0   0   1   0   1   1   ← CRC high&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On a successful FC06 write the slave echoes the &#039;&#039;&#039;entire 8-byte request frame back unchanged&#039;&#039;&#039; as its response. If the stop bit on any byte is corrupted, that byte is discarded as a framing error, the CRC check fails, and the master receives no response.&lt;br /&gt;
&lt;br /&gt;
Transmission time at 9600 baud, 8N1: 8 bytes × 10 bits × 104µs = &#039;&#039;&#039;8.32ms&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Flow Control ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_flowcontrol_diagram.png|thumb|400px|right|RS-485 RTS direction switching during a Modbus RTU request/response cycle.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Flow control&#039;&#039;&#039; in Modbus RTU on RS-485 is almost always set to &#039;&#039;&#039;None&#039;&#039;&#039; in software. The physical RS-485 half-duplex bus requires direction switching between transmit and receive, but this is handled by the hardware driver enable (DE) pin on the RS-485 transceiver, not by a software flow control protocol.&lt;br /&gt;
&lt;br /&gt;
==== Flow Control Types ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type !! Method !! Compatible with Modbus RTU&lt;br /&gt;
|-&lt;br /&gt;
| None || — || ✓ Standard for RS-485&lt;br /&gt;
|-&lt;br /&gt;
| Hardware RTS/CTS || Physical signal lines || Only on RS-232 point-to-point&lt;br /&gt;
|-&lt;br /&gt;
| Software XON/XOFF || In-band bytes 0x11 / 0x13 || ✗ Incompatible — binary protocol&lt;br /&gt;
|-&lt;br /&gt;
| RTS as DE toggle || RTS drives RS-485 DE pin || ✓ Used by USB-RS485 adapters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Bit-Level Breakdown: RS-485 Half-Duplex Direction Control&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In Modbus RTU on RS-485, the driver enable (DE) signal controls which device is transmitting. Only one device may drive the bus at a time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              MASTER TRANSMITTING              MASTER LISTENING&lt;br /&gt;
DE (Master):  ________________________&lt;br /&gt;
             |                        |________________________________&lt;br /&gt;
             ^ DE asserted HIGH        ^ DE released LOW&lt;br /&gt;
&lt;br /&gt;
TX (Master):  [ Start bits of frame...data bytes...CRC ]&lt;br /&gt;
             |←————————————————————————————————————————→|&lt;br /&gt;
&lt;br /&gt;
                                       ↑&lt;br /&gt;
                               3.5 character-time&lt;br /&gt;
                               silent gap here&lt;br /&gt;
                               marks end of frame&lt;br /&gt;
&lt;br /&gt;
DE (Slave):                                        ______________________&lt;br /&gt;
                                                  |&lt;br /&gt;
                                                  ^ Slave asserts its DE HIGH&lt;br /&gt;
&lt;br /&gt;
RX (Master):                                      [ Slave response frame ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* DE HIGH = RS-485 driver active, device is transmitting&lt;br /&gt;
* DE LOW = RS-485 driver disabled, device is listening&lt;br /&gt;
* The 3.5 character-time silent gap at 9600 baud = ~3.6ms — this is what Modbus RTU uses to detect frame boundaries, not a delimiter byte&lt;br /&gt;
* If DE is not released fast enough, the master&#039;s driver will collide with the slave&#039;s response on the bus&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Modbus RTU — Full Message Example: FC03 Read 2 Registers — Complete Request/Response Cycle&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Master reads 2 holding registers from slave 0x02, starting at address 0x0010 (registers 40017 and 40018). These could represent, for example, active power high and low bytes from an energy meter.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Master request frame — 8 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [RegHi] [RegLo] [QtyHi] [QtyLo] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x02 ] [0x03 ] [0x00 ] [0x10 ] [0x00 ] [0x02 ] [0xC4 ] [0x38 ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Slave response frame — 9 bytes:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Byte:  [  1  ] [  2  ] [  3  ] [  4  ] [  5  ] [  6  ] [  7  ] [  8  ] [  9  ]&lt;br /&gt;
Field: [Slave ] [ FC  ] [ByteCt] [R1Hi ] [R1Lo ] [R2Hi ] [R2Lo ] [CRCLo] [CRCHi]&lt;br /&gt;
Hex:   [ 0x02 ] [0x03 ] [ 0x04 ] [0x00 ] [0xC8 ] [0x01 ] [0x2C ] [0x77 ] [0xDF ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Both frames in Modbus RTU binary, 8N1 (LSB first):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REQUEST:&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
0x02 Addr:  0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0x03 FC:    0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
0x00 RegHi: 0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0x10 RegLo: 0   0   0   0   0   1   0   0   0   1&lt;br /&gt;
0x00 QtyHi: 0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0x02 QtyLo: 0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0xC4 CRCLo: 0   0   0   1   0   0   0   1   1   1&lt;br /&gt;
0x38 CRCHi: 0   0   0   0   1   1   1   0   0   1&lt;br /&gt;
&lt;br /&gt;
[— 3.5 char silent gap (~3.6ms) — bus released by master — slave begins responding —]&lt;br /&gt;
&lt;br /&gt;
RESPONSE:&lt;br /&gt;
           [S] D0  D1  D2  D3  D4  D5  D6  D7 [P]&lt;br /&gt;
0x02 Addr:  0   0   1   0   0   0   0   0   0   1&lt;br /&gt;
0x03 FC:    0   1   1   0   0   0   0   0   0   1&lt;br /&gt;
0x04 BytCt: 0   0   0   1   0   0   0   0   0   1&lt;br /&gt;
0x00 R1Hi:  0   0   0   0   0   0   0   0   0   1&lt;br /&gt;
0xC8 R1Lo:  0   0   0   0   1   0   0   1   1   1&lt;br /&gt;
0x01 R2Hi:  0   1   0   0   0   0   0   0   0   1&lt;br /&gt;
0x2C R2Lo:  0   0   0   1   1   0   1   0   0   1&lt;br /&gt;
0x77 CRCLo: 0   1   1   1   0   1   1   1   0   1&lt;br /&gt;
0xDF CRCHi: 0   1   1   1   1   1   0   1   1   1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Decoding the two register values from the response (Big Endian):&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Register 1 (40017):&lt;br /&gt;
  High byte 0x00 = 0 × 256 =   0&lt;br /&gt;
  Low  byte 0xC8 = 200&lt;br /&gt;
  Value = 200&lt;br /&gt;
&lt;br /&gt;
Register 2 (40018):&lt;br /&gt;
  High byte 0x01 = 1 × 256 = 256&lt;br /&gt;
  Low  byte 0x2C = 44&lt;br /&gt;
  Value = 256 + 44 = 300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If these were active power registers with a scale factor of ÷10:&lt;br /&gt;
Register 1 = 20.0 kW, Register 2 = 30.0 kW&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Transmission times at 9600 baud, 8N1:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Request:   8 bytes × 10 bits × 104µs =  8.32ms&lt;br /&gt;
Silent gap:                           ~  3.60ms&lt;br /&gt;
Response:  9 bytes × 10 bits × 104µs =  9.36ms&lt;br /&gt;
                                        ───────&lt;br /&gt;
Total cycle time:                      ~21.28ms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Template:Mbox&amp;diff=79</id>
		<title>Template:Mbox</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Template:Mbox&amp;diff=79"/>
		<updated>2026-02-24T23:07:42Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: /* Mbox Template */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
== Mbox Template ==&lt;br /&gt;
Used for informational callout boxes throughout the wiki.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=Your content here&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;table style=&amp;quot;&lt;br /&gt;
  border: 1px solid #a2a9b1;&lt;br /&gt;
  background-color: {{#switch:{{{type|}}}&lt;br /&gt;
    | notice  = #eaf3fb&lt;br /&gt;
    | warning = #fff9db&lt;br /&gt;
    | alert   = #fde8e8&lt;br /&gt;
    | #default = #f8f9fa&lt;br /&gt;
  }};&lt;br /&gt;
  border-left: 4px solid {{#switch:{{{type|}}}&lt;br /&gt;
    | notice  = #3680b0&lt;br /&gt;
    | warning = #f0c040&lt;br /&gt;
    | alert   = #cc3333&lt;br /&gt;
    | #default = #a2a9b1&lt;br /&gt;
  }};&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  margin: 1em 0;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  font-size: 0.95em;&lt;br /&gt;
  line-height: 1.5em;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;padding: 6px 10px; vertical-align: top;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;padding: 6px 10px; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
{{{text|}}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Template:Mbox&amp;diff=78</id>
		<title>Template:Mbox</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Template:Mbox&amp;diff=78"/>
		<updated>2026-02-24T22:23:15Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: Created page with &amp;quot;&amp;lt;includeonly&amp;gt; &amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt; == Mbox Template == Used for informational callout boxes throughout the wiki.  Usage: &amp;lt;pre&amp;gt; {{Mbox |type=notice |text=Your content here }} &amp;lt;/pre&amp;gt; &amp;lt;/noinclude&amp;gt; &amp;lt;table style=&amp;quot;   border: 1px solid #a2a9b1;   background-color: {{#switch:{{{type|}}}     | notice  = #eaf3fb     | warning = #fff9db     | alert   = #fde8e8     | #default = #f8f9fa   }};   border-left: 4px solid {{#switch:{{{type|}}}     | notice  = #3680b0     | warning =...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
== Mbox Template ==&lt;br /&gt;
Used for informational callout boxes throughout the wiki.&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=Your content here&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;table style=&amp;quot;&lt;br /&gt;
  border: 1px solid #a2a9b1;&lt;br /&gt;
  background-color: {{#switch:{{{type|}}}&lt;br /&gt;
    | notice  = #eaf3fb&lt;br /&gt;
    | warning = #fff9db&lt;br /&gt;
    | alert   = #fde8e8&lt;br /&gt;
    | #default = #f8f9fa&lt;br /&gt;
  }};&lt;br /&gt;
  border-left: 4px solid {{#switch:{{{type|}}}&lt;br /&gt;
    | notice  = #3680b0&lt;br /&gt;
    | warning = #f0c040&lt;br /&gt;
    | alert   = #cc3333&lt;br /&gt;
    | #default = #a2a9b1&lt;br /&gt;
  }};&lt;br /&gt;
  padding: 8px 12px;&lt;br /&gt;
  margin: 1em 0;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  font-size: 0.95em;&lt;br /&gt;
  line-height: 1.5em;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;padding: 6px 10px; vertical-align: top;&amp;quot;&amp;gt;&lt;br /&gt;
{{#switch:{{{type|}}}&lt;br /&gt;
  | notice  = [[File:Info_icon.svg|20px|link=]]&lt;br /&gt;
  | warning = [[File:Warning_icon.svg|20px|link=]]&lt;br /&gt;
  | alert   = [[File:Alert_icon.svg|20px|link=]]&lt;br /&gt;
  | #default = &lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;padding: 6px 10px; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
{{{text|}}}&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Modbus&amp;diff=77</id>
		<title>Modbus</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Modbus&amp;diff=77"/>
		<updated>2026-02-24T22:21:52Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Modbus =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Modbus is an open, serial communication protocol originally developed for use in programmable logic controllers (PLCs). It has since become one of the most widely deployed industrial communication protocols in the world, particularly in Building Management Systems (BMS), SCADA environments, energy metering, and industrial automation.&lt;br /&gt;
&lt;br /&gt;
Modbus operates on a master-slave (also referred to as client-server in newer documentation) architecture, where a single master device initiates all communication and one or more slave devices respond. It is valued for its simplicity, robustness, and vendor-neutral design — making it ideal for integrating devices from multiple manufacturers into a unified control system.&lt;br /&gt;
&lt;br /&gt;
In BMS applications, Modbus is commonly used to communicate with energy meters, variable frequency drives (VFDs), chillers, boilers, air handling units (AHUs), and a wide range of sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
Modbus was developed in 1979 by Modicon (now a brand of Schneider Electric) for use with their programmable logic controllers. It was designed as a simple and robust protocol for serial communication between controllers on a production floor.&lt;br /&gt;
&lt;br /&gt;
In 1996, Modbus over TCP/IP (Modbus TCP) was introduced, allowing the protocol to be used over modern Ethernet networks. This dramatically expanded its use cases and kept it relevant into the internet era.&lt;br /&gt;
&lt;br /&gt;
In 2004, the rights to the Modbus specification were transferred to the Modbus Organization, a non-profit trade association that maintains and promotes the standard to this day. The protocol remains publicly available and royalty-free, which is a significant reason for its continued adoption over proprietary alternatives.&lt;br /&gt;
&lt;br /&gt;
Today Modbus exists in three primary variants: Modbus RTU and Modbus ASCII (both for serial communication), and Modbus TCP/IP (for Ethernet communication).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Protocol Architecture ==&lt;br /&gt;
&lt;br /&gt;
=== Master-Slave Model ===&lt;br /&gt;
&lt;br /&gt;
Modbus uses a strict master-slave architecture. There is always one master and up to 247 addressable slave devices on a single serial bus. Each slave is assigned a unique address between 1 and 247. Address 0 is reserved for broadcast messages, which all slaves receive but do not respond to.&lt;br /&gt;
&lt;br /&gt;
The master is always the initiator of communication. A slave device never transmits data unless it has first been queried by the master. This eliminates bus collisions and keeps the protocol deterministic — an important quality in control systems where timing and reliability are critical.&lt;br /&gt;
&lt;br /&gt;
In a BMS context, the master is typically the Building Management Controller (BMC) or a gateway device, and the slaves are field devices such as energy meters, controllers, or sensors.&lt;br /&gt;
&lt;br /&gt;
=== Request-Response Cycle ===&lt;br /&gt;
&lt;br /&gt;
Every Modbus transaction follows a simple two-step cycle:&lt;br /&gt;
&lt;br /&gt;
# The &#039;&#039;&#039;master&#039;&#039;&#039; sends a request frame to a specific slave address (or broadcast to address 0).&lt;br /&gt;
# The &#039;&#039;&#039;slave&#039;&#039;&#039; receives the request, processes it, and returns a response frame to the master.&lt;br /&gt;
&lt;br /&gt;
If the slave receives a valid request but cannot comply (e.g. the register address does not exist), it returns an &#039;&#039;&#039;exception response&#039;&#039;&#039; containing an error code. If the master receives no response within its configured timeout window, it may retry the request or log a communication fault.&lt;br /&gt;
&lt;br /&gt;
A full Modbus RTU frame consists of the following fields in order:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Size !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Device Address || 1 byte || Slave address (1–247), or 0 for broadcast&lt;br /&gt;
|-&lt;br /&gt;
| Function Code || 1 byte || Defines the type of action requested&lt;br /&gt;
|-&lt;br /&gt;
| Data || Variable || Register addresses, values, or quantities&lt;br /&gt;
|-&lt;br /&gt;
| CRC || 2 bytes || Error checking (Cyclic Redundancy Check)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Transmission Modes ==&lt;br /&gt;
&lt;br /&gt;
=== Modbus RTU ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU (Remote Terminal Unit) is the most common implementation of the protocol in BMS and industrial environments. Data is transmitted as binary bytes over an RS-232 or RS-485 serial connection.&lt;br /&gt;
&lt;br /&gt;
Each byte of data is encoded as a single binary character. The framing of messages is defined by silent intervals (gaps) between characters — a gap of at least 3.5 character times signals the start or end of a message frame.&lt;br /&gt;
&lt;br /&gt;
RTU is preferred over ASCII for most applications because it is more efficient: it transmits the same data in roughly half the number of bytes, making better use of available bandwidth.&lt;br /&gt;
&lt;br /&gt;
Key characteristics:&lt;br /&gt;
* Binary encoding&lt;br /&gt;
* CRC-16 error checking&lt;br /&gt;
* Message framing via inter-character silence (3.5 character times)&lt;br /&gt;
* Physical layer: RS-485 (most common), RS-232, RS-422&lt;br /&gt;
&lt;br /&gt;
=== Modbus ASCII ===&lt;br /&gt;
&lt;br /&gt;
Modbus ASCII transmits data as ASCII text characters rather than raw binary. Each byte of data is represented as two hexadecimal ASCII characters (e.g. the byte &amp;lt;code&amp;gt;0x5B&amp;lt;/code&amp;gt; is sent as the characters &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
ASCII mode uses a colon (&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;) as a start delimiter and CR/LF characters as an end delimiter. It uses LRC (Longitudinal Redundancy Check) for error checking rather than CRC.&lt;br /&gt;
&lt;br /&gt;
ASCII mode is less bandwidth-efficient than RTU but is easier to debug with simple terminal tools and is more tolerant of timing variations on noisy or slow serial lines. It is rarely used in modern BMS installations.&lt;br /&gt;
&lt;br /&gt;
=== Modbus TCP/IP ===&lt;br /&gt;
&lt;br /&gt;
Modbus TCP/IP wraps the standard Modbus PDU (Protocol Data Unit) inside a TCP packet and transmits it over a standard Ethernet network. It uses port &#039;&#039;&#039;502&#039;&#039;&#039; by default.&lt;br /&gt;
&lt;br /&gt;
The serial-specific fields (device address and CRC) are replaced by a &#039;&#039;&#039;MBAP header&#039;&#039;&#039; (Modbus Application Protocol header), which contains a transaction identifier, protocol identifier, message length, and unit identifier.&lt;br /&gt;
&lt;br /&gt;
Modbus TCP removes the need for RS-485 wiring and allows Modbus devices to be integrated into IP-based building networks. Many modern BMS gateways and energy meters support Modbus TCP natively or via an RS-485-to-Ethernet converter.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Communication Parameters ==&lt;br /&gt;
&lt;br /&gt;
Communication parameters are the settings that define how data is physically transmitted between the master and slave devices on a serial Modbus network. All devices on the same bus &#039;&#039;&#039;must be configured with identical parameters&#039;&#039;&#039; — a mismatch in any one setting will cause communication failures.&lt;br /&gt;
&lt;br /&gt;
The parameters covered here apply primarily to Modbus RTU and Modbus ASCII (serial variants). Modbus TCP uses standard IP networking parameters instead.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Baud Rate ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_baudrate_diagram.png|thumb|400px|right|Diagram showing how baud rate affects the time width of each bit on the signal line. A higher baud rate means narrower bit windows and faster data transmission.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Baud rate&#039;&#039;&#039; defines the number of signal changes (symbols) per second on the communication line. In the context of Modbus serial communication, one symbol corresponds to one binary bit, so baud rate is effectively the number of bits transmitted per second (bps).&lt;br /&gt;
&lt;br /&gt;
==== Common Baud Rate Values ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Baud Rate !! Bits per Second !! Typical Use Case&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || 1,200 bps || Legacy devices, long cable runs with poor quality cable&lt;br /&gt;
|-&lt;br /&gt;
| 2400 || 2,400 bps || Older meters and sensors&lt;br /&gt;
|-&lt;br /&gt;
| 4800 || 4,800 bps || Moderate speed legacy devices&lt;br /&gt;
|-&lt;br /&gt;
| 9600 || 9,600 bps || &#039;&#039;&#039;Most common default&#039;&#039;&#039; — widely supported by all devices&lt;br /&gt;
|-&lt;br /&gt;
| 19200 || 19,200 bps || Standard BMS installations with moderate device counts&lt;br /&gt;
|-&lt;br /&gt;
| 38400 || 38,400 bps || Higher performance systems&lt;br /&gt;
|-&lt;br /&gt;
| 57600 || 57,600 bps || Fast networks, shorter cable runs&lt;br /&gt;
|-&lt;br /&gt;
| 115200 || 115,200 bps || Maximum practical speed for RS-485 in most installations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The default baud rate for Modbus RTU is &#039;&#039;&#039;9600 bps&#039;&#039;&#039;, though 19200 bps is very common in BMS environments.&lt;br /&gt;
&lt;br /&gt;
==== How Baud Rate Looks in Binary ====&lt;br /&gt;
&lt;br /&gt;
Each bit occupies a fixed time window called the &#039;&#039;&#039;bit period&#039;&#039;&#039;, calculated as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Bit Period = 1 / Baud Rate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At 9600 baud, each bit lasts approximately &#039;&#039;&#039;104 microseconds&#039;&#039;&#039;. At 115200 baud, each bit lasts approximately &#039;&#039;&#039;8.7 microseconds&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — Baud Rate Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Below is what the byte &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; (decimal 65, ASCII &amp;quot;A&amp;quot;) looks like on the wire at 9600 baud in Modbus RTU (8N1 framing):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop&lt;br /&gt;
Value:    0    1    0    0    0    0    0    1    0     1&lt;br /&gt;
         ___                          ___&lt;br /&gt;
    ____|   |________________________|   |________  (idle high = 1, start bit pulls low)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What each position means:&lt;br /&gt;
* &#039;&#039;&#039;Start bit&#039;&#039;&#039; (1 bit): Always logic 0. Signals the beginning of a byte. Pulls the line LOW.&lt;br /&gt;
* &#039;&#039;&#039;D0–D7&#039;&#039;&#039; (8 bits): The actual data byte, transmitted LSB (least significant bit) first. For &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;01000001&amp;lt;/code&amp;gt; binary, the wire sends: 1, 0, 0, 0, 0, 0, 1, 0 (LSB first).&lt;br /&gt;
* &#039;&#039;&#039;Stop bit&#039;&#039;&#039; (1 bit): Always logic 1. Returns line HIGH, signalling end of byte.&lt;br /&gt;
&lt;br /&gt;
Total bits per byte at 8N1 = 10 bits (1 start + 8 data + 1 stop).&lt;br /&gt;
At 9600 baud, one full byte takes: 10 × 104µs = &#039;&#039;&#039;1.04 milliseconds&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Effect on Cable Length ====&lt;br /&gt;
&lt;br /&gt;
Higher baud rates require better quality cabling and are more sensitive to signal degradation over distance. As a general rule:&lt;br /&gt;
&lt;br /&gt;
* 9600 baud — reliable up to approximately 1200 metres on good RS-485 cable&lt;br /&gt;
* 19200 baud — reliable up to approximately 600 metres&lt;br /&gt;
* 115200 baud — reliable up to approximately 100 metres&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Parity ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_parity_diagram.png|thumb|400px|right|Diagram illustrating Even, Odd, and No parity bit positions within a serial data frame. The parity bit is inserted between the last data bit and the stop bit.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parity&#039;&#039;&#039; is a basic error detection mechanism. It adds a single extra bit to each transmitted byte, allowing the receiver to detect single-bit transmission errors.&lt;br /&gt;
&lt;br /&gt;
The parity bit is placed after the 8 data bits and before the stop bit(s). It adjusts the total number of 1s in the data frame to be either always even (Even parity) or always odd (Odd parity).&lt;br /&gt;
&lt;br /&gt;
==== Parity Modes ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mode !! Abbreviation !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Even Parity || E || The parity bit is set so that the total number of 1 bits in the data byte + parity bit is &#039;&#039;&#039;even&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Odd Parity || O || The parity bit is set so that the total number of 1 bits in the data byte + parity bit is &#039;&#039;&#039;odd&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| No Parity || N || No parity bit is transmitted. Error checking relies on CRC only. Requires 2 stop bits in Modbus RTU to maintain frame timing.&lt;br /&gt;
|-&lt;br /&gt;
| Mark Parity || M || Parity bit is always 1, regardless of data. Rarely used.&lt;br /&gt;
|-&lt;br /&gt;
| Space Parity || S || Parity bit is always 0, regardless of data. Rarely used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Modbus specification recommends &#039;&#039;&#039;Even parity&#039;&#039;&#039; as the default. However, &#039;&#039;&#039;8N1&#039;&#039;&#039; (8 data bits, No parity, 1 stop bit) is extremely common in practice and is the de facto standard for most BMS devices.&lt;br /&gt;
&lt;br /&gt;
==== How Parity Looks in Binary ====&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — Parity Bit Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x31&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;00110001&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Count of 1 bits: 3 (three 1s in the data byte)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even Parity:&#039;&#039;&#039;&lt;br /&gt;
Since there are already 3 ones (odd count), the parity bit is set to &#039;&#039;&#039;1&#039;&#039;&#039; to make the total even (3 + 1 = 4, which is even).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Par  Stop&lt;br /&gt;
Value:    0    1    0    0    0    1    1    0    0    1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Odd Parity:&#039;&#039;&#039;&lt;br /&gt;
Since there are already 3 ones (odd count), the parity bit is set to &#039;&#039;&#039;0&#039;&#039;&#039; to keep the total odd (3 + 0 = 3, which is odd).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Par  Stop&lt;br /&gt;
Value:    0    1    0    0    0    1    1    0    0    0    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N1):&#039;&#039;&#039;&lt;br /&gt;
No parity bit at all. An extra stop bit is added to maintain frame length.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop Stop&lt;br /&gt;
Value:    0    1    0    0    0    1    1    0    0    1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What each position means:&lt;br /&gt;
* &#039;&#039;&#039;Start bit&#039;&#039;&#039;: Always 0. Triggers the receiver to start reading.&lt;br /&gt;
* &#039;&#039;&#039;D0–D7&#039;&#039;&#039;: The 8 data bits (LSB first).&lt;br /&gt;
* &#039;&#039;&#039;Parity bit&#039;&#039;&#039;: Calculated from the data bits. Used to detect single-bit errors.&lt;br /&gt;
* &#039;&#039;&#039;Stop bit(s)&#039;&#039;&#039;: Always 1. Marks the end of the character frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Parity Limitation ====&lt;br /&gt;
&lt;br /&gt;
Parity can only detect an &#039;&#039;&#039;odd number&#039;&#039;&#039; of bit errors. If two bits flip simultaneously (double-bit error), the parity check will still pass even though the data is wrong. This is why Modbus RTU also uses CRC-16 at the message level — the two mechanisms complement each other.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Data Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_databits_diagram.png|thumb|400px|right|Diagram showing the position of data bits within a serial frame. Data bits D0 through D7 carry the actual payload, transmitted LSB first.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data bits&#039;&#039;&#039; refers to the number of bits used to represent each unit of data (one character or byte) within a single serial frame.&lt;br /&gt;
&lt;br /&gt;
In Modbus, this value is virtually always &#039;&#039;&#039;8 data bits&#039;&#039;&#039;. Using 8 bits allows each frame to carry one full byte of information, which aligns directly with how Modbus RTU encodes its binary protocol data.&lt;br /&gt;
&lt;br /&gt;
The only exception is Modbus ASCII, which can operate with 7 data bits because it uses only printable ASCII characters (all of which fit within 7 bits).&lt;br /&gt;
&lt;br /&gt;
==== How Data Bits Look in Binary ====&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — Data Bits Detail&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0xB4&amp;lt;/code&amp;gt; = decimal 180 = binary &amp;lt;code&amp;gt;10110100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The 8 data bits are transmitted &#039;&#039;&#039;LSB first&#039;&#039;&#039; (D0 is the least significant bit):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit position:   Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop&lt;br /&gt;
Binary value:     0    0    0    1    0    1    1    0    1     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reading the data bits from D0 to D7: 0, 0, 1, 0, 1, 1, 0, 1&lt;br /&gt;
&lt;br /&gt;
Reversing to MSB order (D7 to D0): 1, 0, 1, 1, 0, 1, 0, 0 = &amp;lt;code&amp;gt;10110100&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;0xB4&amp;lt;/code&amp;gt; ✓&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What each data bit position represents:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit !! Position !! Binary Weighting !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| D0 || Least Significant Bit || 2⁰ = 1 || Transmitted first on the wire&lt;br /&gt;
|-&lt;br /&gt;
| D1 || — || 2¹ = 2 || —&lt;br /&gt;
|-&lt;br /&gt;
| D2 || — || 2² = 4 || —&lt;br /&gt;
|-&lt;br /&gt;
| D3 || — || 2³ = 8 || —&lt;br /&gt;
|-&lt;br /&gt;
| D4 || — || 2⁴ = 16 || —&lt;br /&gt;
|-&lt;br /&gt;
| D5 || — || 2⁵ = 32 || —&lt;br /&gt;
|-&lt;br /&gt;
| D6 || — || 2⁶ = 64 || —&lt;br /&gt;
|-&lt;br /&gt;
| D7 || Most Significant Bit || 2⁷ = 128 || Transmitted last, before parity/stop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The total possible values representable by 8 data bits = 2⁸ = 256 (values 0–255).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Stop Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_stopbits_diagram.png|thumb|400px|right|Diagram comparing 1 stop bit vs 2 stop bits in a serial frame. The stop bit(s) are the final element of a character frame, returning the line to the idle HIGH state.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stop bits&#039;&#039;&#039; mark the end of a character frame. After the data bits (and optional parity bit) have been transmitted, the transmitter sends one or two stop bits by holding the line in the HIGH (idle) state for the duration of those bit periods.&lt;br /&gt;
&lt;br /&gt;
Stop bits give the receiver time to process the incoming byte and prepare for the next start bit. They also provide a guaranteed idle state between characters so that the receiver can reliably detect the falling edge of the next start bit.&lt;br /&gt;
&lt;br /&gt;
==== Stop Bit Configurations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Configuration !! Stop Bits !! When Used&lt;br /&gt;
|-&lt;br /&gt;
| 8N1 || 1 stop bit || No parity — most common Modbus RTU configuration&lt;br /&gt;
|-&lt;br /&gt;
| 8E1 || 1 stop bit || Even parity&lt;br /&gt;
|-&lt;br /&gt;
| 8O1 || 1 stop bit || Odd parity&lt;br /&gt;
|-&lt;br /&gt;
| 8N2 || 2 stop bits || No parity — provides additional recovery time; used on noisy lines&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Modbus specification states: if no parity is used, 2 stop bits are recommended to maintain equivalent frame length. In practice however, 8N1 (1 stop bit, no parity) is by far the most common configuration encountered in BMS installations.&lt;br /&gt;
&lt;br /&gt;
==== How Stop Bits Look in Binary ====&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — Stop Bit Comparison&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x55&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;01010101&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8E1 — Even Parity, 1 Stop Bit:&#039;&#039;&#039;&lt;br /&gt;
Number of 1s in data = 4 (even), so parity bit = 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Par  Stop&lt;br /&gt;
Value:    0    1    0    1    0    1    0    1    0    0    1&lt;br /&gt;
         ←————————————————— 11 bits total ——————————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N2 — No Parity, 2 Stop Bits:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop Stop&lt;br /&gt;
Value:    0    1    0    1    0    1    0    1    0    1    1&lt;br /&gt;
         ←————————————————— 11 bits total ——————————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both configurations result in 11 bits per character frame, maintaining the same total frame length and timing compatibility.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key rule:&#039;&#039;&#039; The line must be idle (HIGH) for the entire stop bit period before the next start bit (LOW) can be recognised. If the line goes low before the stop bit period ends, the receiver flags a &#039;&#039;&#039;framing error&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Flow Control ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_flowcontrol_diagram.png|thumb|400px|right|Diagram showing hardware flow control signals RTS and CTS on a serial connection. In RS-485 half-duplex operation, RTS is used to switch the driver between transmit and receive mode.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Flow control&#039;&#039;&#039; is a mechanism that manages the rate of data transmission between devices, preventing a fast sender from overwhelming a slow receiver. In Modbus serial communication, flow control is relevant primarily in RS-232 connections and in RS-485 half-duplex bus switching.&lt;br /&gt;
&lt;br /&gt;
==== Flow Control Types ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type !! Method !! Description&lt;br /&gt;
|-&lt;br /&gt;
| None || — || No flow control. The most common setting for Modbus RTU on RS-485.&lt;br /&gt;
|-&lt;br /&gt;
| Hardware (RTS/CTS) || Physical signal lines || The sender asserts RTS (Request To Send); receiver replies with CTS (Clear To Send). Data flows only when CTS is active.&lt;br /&gt;
|-&lt;br /&gt;
| Software (XON/XOFF) || In-band control bytes || Special ASCII characters (0x11 = XON, 0x13 = XOFF) are inserted into the data stream to pause and resume transmission. Not compatible with binary protocols like Modbus RTU.&lt;br /&gt;
|-&lt;br /&gt;
| RTS toggle (RS-485) || RTS line used for direction control || In half-duplex RS-485, the RTS line is used to switch the transceiver between transmit mode and receive mode. This is a driver enable signal, not true flow control.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RS-485 and Half-Duplex Direction Control ====&lt;br /&gt;
&lt;br /&gt;
RS-485 is inherently a half-duplex medium — devices cannot transmit and receive simultaneously. To prevent bus contention, the RS-485 driver must be enabled only when transmitting and returned to receive mode immediately after.&lt;br /&gt;
&lt;br /&gt;
In many Modbus RTU implementations, the RTS signal from the UART is wired to the DE/RE (Driver Enable / Receiver Enable) pins of the RS-485 transceiver chip. This is often called &#039;&#039;&#039;RTS flow control&#039;&#039;&#039; in software configuration, even though it is technically a bus direction control mechanism rather than data flow control.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — RS-485 RTS/Direction Control&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sequence when a Modbus master sends a request:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Time →&lt;br /&gt;
&lt;br /&gt;
RTS:    ___________________&lt;br /&gt;
       |                   |&lt;br /&gt;
_______|                   |_______   (RTS HIGH = transmit mode enabled)&lt;br /&gt;
&lt;br /&gt;
TX:    |  [Modbus Frame Data............] |&lt;br /&gt;
       ^                                  ^&lt;br /&gt;
    RTS asserted                      RTS released&lt;br /&gt;
    (driver enabled)               (driver disabled, line released)&lt;br /&gt;
&lt;br /&gt;
RX:    _______________________________________&lt;br /&gt;
                                              |&lt;br /&gt;
                                              | ← Slave response begins here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What each signal does:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;RTS asserted HIGH:&#039;&#039;&#039; Enables the RS-485 driver. The master &#039;&#039;owns&#039;&#039; the bus and transmits its request frame.&lt;br /&gt;
* &#039;&#039;&#039;TX line:&#039;&#039;&#039; Carries the actual Modbus RTU binary data (address, function code, data, CRC).&lt;br /&gt;
* &#039;&#039;&#039;RTS released LOW:&#039;&#039;&#039; Disables the RS-485 driver. The master releases the bus and switches to receive mode.&lt;br /&gt;
* &#039;&#039;&#039;RX line:&#039;&#039;&#039; The slave&#039;s response arrives. The master reads it with its receiver enabled.&lt;br /&gt;
&lt;br /&gt;
Timing of RTS is critical — releasing too early can truncate the last stop bit of the frame. Releasing too late blocks the slave response. Most modern USB-RS485 adapters handle this automatically.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
In most BMS applications using RS-485, flow control is set to &#039;&#039;&#039;None&#039;&#039;&#039; in the software configuration, with the hardware adapter managing direction control automatically. Only when using older RS-232 point-to-point wiring is explicit hardware flow control (RTS/CTS) typically required.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Data Model ==&lt;br /&gt;
&lt;br /&gt;
Modbus organises data into four distinct object types, each with a defined address space. The master accesses these objects using function codes.&lt;br /&gt;
&lt;br /&gt;
=== Coils ===&lt;br /&gt;
&lt;br /&gt;
Coils are single-bit read/write values. They represent binary output states such as a relay, a digital output, or an on/off command. The address range is 1–9999 (using 1-based Modbus convention) or 0x0000–0xFFFF (using the 0-based PDU addressing).&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: Fan on/off command, valve open/close output, alarm reset.&lt;br /&gt;
&lt;br /&gt;
=== Discrete Inputs ===&lt;br /&gt;
&lt;br /&gt;
Discrete inputs are single-bit read-only values. They represent binary input states such as a digital sensor, a status contact, or a switch position. Address range: 10001–19999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: Door open sensor, high temperature alarm contact, filter dirty status.&lt;br /&gt;
&lt;br /&gt;
=== Holding Registers ===&lt;br /&gt;
&lt;br /&gt;
Holding registers are 16-bit read/write registers. They are the most commonly used data type in Modbus and can hold values such as setpoints, configurations, and output values. Address range: 40001–49999.&lt;br /&gt;
&lt;br /&gt;
A single holding register holds values from 0 to 65535 (unsigned) or -32768 to 32767 (signed). For larger values (e.g. floating point temperatures or energy readings), two consecutive registers are used together to form a 32-bit value.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: Temperature setpoint, VFD speed reference, valve position command.&lt;br /&gt;
&lt;br /&gt;
=== Input Registers ===&lt;br /&gt;
&lt;br /&gt;
Input registers are 16-bit read-only registers. They represent measured or computed values provided by the slave device. Address range: 30001–39999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: Supply air temperature, room CO₂ concentration, energy meter active power reading.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Function Codes ==&lt;br /&gt;
&lt;br /&gt;
Function codes tell the slave device what action to perform. They are carried in the second byte of every Modbus frame.&lt;br /&gt;
&lt;br /&gt;
=== Read Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Reads&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Read Coils || Coils (1-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Read Discrete Inputs || Discrete Inputs (1-bit, read-only)&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Read Holding Registers || Holding Registers (16-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Read Input Registers || Input Registers (16-bit, read-only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Write Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Writes&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Write Single Coil || Single coil ON (0xFF00) or OFF (0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Write Single Register || Single holding register&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 0x0F || Write Multiple Coils || Multiple coils&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 0x10 || Write Multiple Registers || Multiple holding registers&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Diagnostic Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 07 || 0x07 || Read Exception Status || Returns device error status byte&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Diagnostics || Various sub-functions for testing comms&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Get Comm Event Counter || Returns count of successful messages&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 0x11 || Report Server ID || Returns device type and status&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
=== CRC and LRC Checking ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC-16 (Cyclic Redundancy Check)&#039;&#039;&#039; is used in Modbus RTU. It is a 16-bit error detection value calculated from all bytes in the message (excluding the CRC bytes themselves). The master calculates the CRC before sending, and the slave recalculates it upon receipt. If the values do not match, the message is discarded silently — no response is sent, and the master will timeout.&lt;br /&gt;
&lt;br /&gt;
The CRC polynomial used is: &amp;lt;code&amp;gt;0xA001&amp;lt;/code&amp;gt; (reflected form of CRC-16-IBM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LRC (Longitudinal Redundancy Check)&#039;&#039;&#039; is used in Modbus ASCII. It is calculated as the two&#039;s complement of the sum of all byte values in the message. It is simpler but less robust than CRC-16.&lt;br /&gt;
&lt;br /&gt;
=== Exception Codes ===&lt;br /&gt;
&lt;br /&gt;
When a slave receives a valid request but cannot fulfil it, it returns an exception response. The function code in the response has its most significant bit set to 1 (i.e. the original function code + 0x80), followed by an exception code byte.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Exception Code !! Hex !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Illegal Function || The function code is not supported by this device&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Illegal Data Address || The register address does not exist on this device&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Illegal Data Value || The value in the data field is not permitted&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Slave Device Failure || An unrecoverable error occurred in the slave&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Acknowledge || Slave accepted the request but needs more time (long operation)&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Slave Device Busy || Slave is busy processing a previous request&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Memory Parity Error || Slave detected a parity error reading extended memory&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0x0A || Gateway Path Unavailable || Gateway could not allocate a path (Modbus TCP)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Gateway Target No Response || Target device on gateway failed to respond&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus in BMS Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Typical Devices ===&lt;br /&gt;
&lt;br /&gt;
Modbus is one of the most commonly encountered protocols when integrating third-party field devices into a BMS. The following device types frequently use Modbus RTU as their primary or secondary communication interface:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Energy meters&#039;&#039;&#039; — active power (kW), reactive power (kVAR), energy (kWh), power factor, voltage and current readings via input registers&lt;br /&gt;
* &#039;&#039;&#039;Variable Frequency Drives (VFDs)&#039;&#039;&#039; — speed reference (Hz or %), run/stop command, fault status, output frequency and current feedback&lt;br /&gt;
* &#039;&#039;&#039;Chillers and heat pumps&#039;&#039;&#039; — leaving water temperature, setpoint, mode command, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Air Handling Units (AHUs)&#039;&#039;&#039; — supply/return air temperature, damper position, fan speed feedback&lt;br /&gt;
* &#039;&#039;&#039;CO₂ and air quality sensors&#039;&#039;&#039; — CO₂ concentration (ppm), temperature, humidity&lt;br /&gt;
* &#039;&#039;&#039;Heat meters&#039;&#039;&#039; — flow rate, inlet/outlet temperatures, cumulative energy&lt;br /&gt;
* &#039;&#039;&#039;UPS systems&#039;&#039;&#039; — battery voltage, charge level, load percentage, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Generator controllers&#039;&#039;&#039; — run status, fuel level, output voltage, frequency&lt;br /&gt;
&lt;br /&gt;
=== Wiring and Topology ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU on RS-485 uses a &#039;&#039;&#039;daisy-chain bus topology&#039;&#039;&#039;. Devices are connected in series from the first to the last node. The two conductors of the RS-485 pair are labelled A (−) and B (+), though manufacturers often use inconsistent naming (some label them D− / D+, or even reverse the A/B convention).&lt;br /&gt;
&lt;br /&gt;
Key wiring rules:&lt;br /&gt;
* &#039;&#039;&#039;Termination resistors&#039;&#039;&#039; of 120Ω must be fitted at both physical ends of the RS-485 bus to prevent signal reflections. Only the two end devices are terminated — never intermediate devices.&lt;br /&gt;
* &#039;&#039;&#039;Bias resistors&#039;&#039;&#039; (typically 560Ω to 1kΩ) are recommended to hold the bus at a defined state when no device is transmitting, preventing false start bit detection.&lt;br /&gt;
* &#039;&#039;&#039;Maximum cable length&#039;&#039;&#039; depends on baud rate (see Baud Rate section), but 1200 metres at 9600 baud is a typical practical limit for standard twisted pair cable.&lt;br /&gt;
* The maximum number of addressable slave devices is 247, though the RS-485 electrical standard supports up to 32 unit loads on a single segment without repeaters (256 with 1/8 unit load devices).&lt;br /&gt;
* Shielded twisted pair (STP) cable is strongly recommended in BMS environments due to electrical noise from motors, VFDs, and other inductive loads.&lt;br /&gt;
&lt;br /&gt;
=== Common Issues and Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
The following are the most frequently encountered Modbus communication problems in BMS installations:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No response from slave / timeout&#039;&#039;&#039;&lt;br /&gt;
* Verify slave address matches the configured address on the physical device&lt;br /&gt;
* Check baud rate, parity, data bits, and stop bits match on master and slave&lt;br /&gt;
* Check A/B wiring polarity — reversed polarity is a very common installation error&lt;br /&gt;
* Verify termination resistors are fitted at the correct endpoints only&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC errors / corrupted data&#039;&#039;&#039;&lt;br /&gt;
* Inspect cable routing — avoid running alongside power cables or VFD output cables&lt;br /&gt;
* Check for missing or incorrectly placed termination resistors&lt;br /&gt;
* Reduce baud rate to test if the issue is speed-related&lt;br /&gt;
* Check for ground loops (ensure shield is grounded at one end only)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intermittent communication&#039;&#039;&#039;&lt;br /&gt;
* Often caused by missing bias resistors — the bus floats to an indeterminate state when idle&lt;br /&gt;
* Check for multiple termination resistors incorrectly fitted to intermediate devices&lt;br /&gt;
* Investigate RTS/driver enable timing issues if using a custom RS-485 adapter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incorrect register values&#039;&#039;&#039;&lt;br /&gt;
* Confirm register addressing convention — some devices use 0-based addressing, others 1-based&lt;br /&gt;
* Check byte order (endianness) for 32-bit floating point values — some devices use Big Endian, others Little Endian or mixed (&#039;&#039;byte-swapped&#039;&#039;) formats&lt;br /&gt;
* Verify scaling factors — a register reading of 1234 may represent 12.34 depending on the device&#039;s register map&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Modbus&amp;diff=76</id>
		<title>Modbus</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Modbus&amp;diff=76"/>
		<updated>2026-02-24T22:20:45Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Modbus =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Modbus is an open, serial communication protocol originally developed for use in programmable logic controllers (PLCs). It has since become one of the most widely deployed industrial communication protocols in the world, particularly in Building Management Systems (BMS), SCADA environments, energy metering, and industrial automation.&lt;br /&gt;
&lt;br /&gt;
Modbus operates on a master-slave (also referred to as client-server in newer documentation) architecture, where a single master device initiates all communication and one or more slave devices respond. It is valued for its simplicity, robustness, and vendor-neutral design — making it ideal for integrating devices from multiple manufacturers into a unified control system.&lt;br /&gt;
&lt;br /&gt;
In BMS applications, Modbus is commonly used to communicate with energy meters, variable frequency drives (VFDs), chillers, boilers, air handling units (AHUs), and a wide range of sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
Modbus was developed in 1979 by Modicon (now a brand of Schneider Electric) for use with their programmable logic controllers. It was designed as a simple and robust protocol for serial communication between controllers on a production floor.&lt;br /&gt;
&lt;br /&gt;
In 1996, Modbus over TCP/IP (Modbus TCP) was introduced, allowing the protocol to be used over modern Ethernet networks. This dramatically expanded its use cases and kept it relevant into the internet era.&lt;br /&gt;
&lt;br /&gt;
In 2004, the rights to the Modbus specification were transferred to the Modbus Organization, a non-profit trade association that maintains and promotes the standard to this day. The protocol remains publicly available and royalty-free, which is a significant reason for its continued adoption over proprietary alternatives.&lt;br /&gt;
&lt;br /&gt;
Today Modbus exists in three primary variants: Modbus RTU and Modbus ASCII (both for serial communication), and Modbus TCP/IP (for Ethernet communication).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Protocol Architecture ==&lt;br /&gt;
&lt;br /&gt;
=== Master-Slave Model ===&lt;br /&gt;
&lt;br /&gt;
Modbus uses a strict master-slave architecture. There is always one master and up to 247 addressable slave devices on a single serial bus. Each slave is assigned a unique address between 1 and 247. Address 0 is reserved for broadcast messages, which all slaves receive but do not respond to.&lt;br /&gt;
&lt;br /&gt;
The master is always the initiator of communication. A slave device never transmits data unless it has first been queried by the master. This eliminates bus collisions and keeps the protocol deterministic — an important quality in control systems where timing and reliability are critical.&lt;br /&gt;
&lt;br /&gt;
In a BMS context, the master is typically the Building Management Controller (BMC) or a gateway device, and the slaves are field devices such as energy meters, controllers, or sensors.&lt;br /&gt;
&lt;br /&gt;
=== Request-Response Cycle ===&lt;br /&gt;
&lt;br /&gt;
Every Modbus transaction follows a simple two-step cycle:&lt;br /&gt;
&lt;br /&gt;
# The &#039;&#039;&#039;master&#039;&#039;&#039; sends a request frame to a specific slave address (or broadcast to address 0).&lt;br /&gt;
# The &#039;&#039;&#039;slave&#039;&#039;&#039; receives the request, processes it, and returns a response frame to the master.&lt;br /&gt;
&lt;br /&gt;
If the slave receives a valid request but cannot comply (e.g. the register address does not exist), it returns an &#039;&#039;&#039;exception response&#039;&#039;&#039; containing an error code. If the master receives no response within its configured timeout window, it may retry the request or log a communication fault.&lt;br /&gt;
&lt;br /&gt;
A full Modbus RTU frame consists of the following fields in order:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Size !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Device Address || 1 byte || Slave address (1–247), or 0 for broadcast&lt;br /&gt;
|-&lt;br /&gt;
| Function Code || 1 byte || Defines the type of action requested&lt;br /&gt;
|-&lt;br /&gt;
| Data || Variable || Register addresses, values, or quantities&lt;br /&gt;
|-&lt;br /&gt;
| CRC || 2 bytes || Error checking (Cyclic Redundancy Check)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Transmission Modes ==&lt;br /&gt;
&lt;br /&gt;
=== Modbus RTU ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU (Remote Terminal Unit) is the most common implementation of the protocol in BMS and industrial environments. Data is transmitted as binary bytes over an RS-232 or RS-485 serial connection.&lt;br /&gt;
&lt;br /&gt;
Each byte of data is encoded as a single binary character. The framing of messages is defined by silent intervals (gaps) between characters — a gap of at least 3.5 character times signals the start or end of a message frame.&lt;br /&gt;
&lt;br /&gt;
RTU is preferred over ASCII for most applications because it is more efficient: it transmits the same data in roughly half the number of bytes, making better use of available bandwidth.&lt;br /&gt;
&lt;br /&gt;
Key characteristics:&lt;br /&gt;
* Binary encoding&lt;br /&gt;
* CRC-16 error checking&lt;br /&gt;
* Message framing via inter-character silence (3.5 character times)&lt;br /&gt;
* Physical layer: RS-485 (most common), RS-232, RS-422&lt;br /&gt;
&lt;br /&gt;
=== Modbus ASCII ===&lt;br /&gt;
&lt;br /&gt;
Modbus ASCII transmits data as ASCII text characters rather than raw binary. Each byte of data is represented as two hexadecimal ASCII characters (e.g. the byte &amp;lt;code&amp;gt;0x5B&amp;lt;/code&amp;gt; is sent as the characters &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
ASCII mode uses a colon (&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;) as a start delimiter and CR/LF characters as an end delimiter. It uses LRC (Longitudinal Redundancy Check) for error checking rather than CRC.&lt;br /&gt;
&lt;br /&gt;
ASCII mode is less bandwidth-efficient than RTU but is easier to debug with simple terminal tools and is more tolerant of timing variations on noisy or slow serial lines. It is rarely used in modern BMS installations.&lt;br /&gt;
&lt;br /&gt;
=== Modbus TCP/IP ===&lt;br /&gt;
&lt;br /&gt;
Modbus TCP/IP wraps the standard Modbus PDU (Protocol Data Unit) inside a TCP packet and transmits it over a standard Ethernet network. It uses port &#039;&#039;&#039;502&#039;&#039;&#039; by default.&lt;br /&gt;
&lt;br /&gt;
The serial-specific fields (device address and CRC) are replaced by a &#039;&#039;&#039;MBAP header&#039;&#039;&#039; (Modbus Application Protocol header), which contains a transaction identifier, protocol identifier, message length, and unit identifier.&lt;br /&gt;
&lt;br /&gt;
Modbus TCP removes the need for RS-485 wiring and allows Modbus devices to be integrated into IP-based building networks. Many modern BMS gateways and energy meters support Modbus TCP natively or via an RS-485-to-Ethernet converter.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Communication Parameters ==&lt;br /&gt;
&lt;br /&gt;
Communication parameters are the settings that define how data is physically transmitted between the master and slave devices on a serial Modbus network. All devices on the same bus &#039;&#039;&#039;must be configured with identical parameters&#039;&#039;&#039; — a mismatch in any one setting will cause communication failures.&lt;br /&gt;
&lt;br /&gt;
The parameters covered here apply primarily to Modbus RTU and Modbus ASCII (serial variants). Modbus TCP uses standard IP networking parameters instead.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Baud Rate ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_baudrate_diagram.png|thumb|400px|right|Diagram showing how baud rate affects the time width of each bit on the signal line. A higher baud rate means narrower bit windows and faster data transmission.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Baud rate&#039;&#039;&#039; defines the number of signal changes (symbols) per second on the communication line. In the context of Modbus serial communication, one symbol corresponds to one binary bit, so baud rate is effectively the number of bits transmitted per second (bps).&lt;br /&gt;
&lt;br /&gt;
==== Common Baud Rate Values ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Baud Rate !! Bits per Second !! Typical Use Case&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || 1,200 bps || Legacy devices, long cable runs with poor quality cable&lt;br /&gt;
|-&lt;br /&gt;
| 2400 || 2,400 bps || Older meters and sensors&lt;br /&gt;
|-&lt;br /&gt;
| 4800 || 4,800 bps || Moderate speed legacy devices&lt;br /&gt;
|-&lt;br /&gt;
| 9600 || 9,600 bps || &#039;&#039;&#039;Most common default&#039;&#039;&#039; — widely supported by all devices&lt;br /&gt;
|-&lt;br /&gt;
| 19200 || 19,200 bps || Standard BMS installations with moderate device counts&lt;br /&gt;
|-&lt;br /&gt;
| 38400 || 38,400 bps || Higher performance systems&lt;br /&gt;
|-&lt;br /&gt;
| 57600 || 57,600 bps || Fast networks, shorter cable runs&lt;br /&gt;
|-&lt;br /&gt;
| 115200 || 115,200 bps || Maximum practical speed for RS-485 in most installations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The default baud rate for Modbus RTU is &#039;&#039;&#039;9600 bps&#039;&#039;&#039;, though 19200 bps is very common in BMS environments.&lt;br /&gt;
&lt;br /&gt;
==== How Baud Rate Looks in Binary ====&lt;br /&gt;
&lt;br /&gt;
Each bit occupies a fixed time window called the &#039;&#039;&#039;bit period&#039;&#039;&#039;, calculated as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Bit Period = 1 / Baud Rate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At 9600 baud, each bit lasts approximately &#039;&#039;&#039;104 microseconds&#039;&#039;&#039;. At 115200 baud, each bit lasts approximately &#039;&#039;&#039;8.7 microseconds&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — Baud Rate Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Below is what the byte &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; (decimal 65, ASCII &amp;quot;A&amp;quot;) looks like on the wire at 9600 baud in Modbus RTU (8N1 framing):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop&lt;br /&gt;
Value:    0    1    0    0    0    0    0    1    0     1&lt;br /&gt;
         ___                          ___&lt;br /&gt;
    ____|   |________________________|   |________  (idle high = 1, start bit pulls low)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What each position means:&lt;br /&gt;
* &#039;&#039;&#039;Start bit&#039;&#039;&#039; (1 bit): Always logic 0. Signals the beginning of a byte. Pulls the line LOW.&lt;br /&gt;
* &#039;&#039;&#039;D0–D7&#039;&#039;&#039; (8 bits): The actual data byte, transmitted LSB (least significant bit) first. For &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;01000001&amp;lt;/code&amp;gt; binary, the wire sends: 1, 0, 0, 0, 0, 0, 1, 0 (LSB first).&lt;br /&gt;
* &#039;&#039;&#039;Stop bit&#039;&#039;&#039; (1 bit): Always logic 1. Returns line HIGH, signalling end of byte.&lt;br /&gt;
&lt;br /&gt;
Total bits per byte at 8N1 = 10 bits (1 start + 8 data + 1 stop).&lt;br /&gt;
At 9600 baud, one full byte takes: 10 × 104µs = &#039;&#039;&#039;1.04 milliseconds&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Effect on Cable Length ====&lt;br /&gt;
&lt;br /&gt;
Higher baud rates require better quality cabling and are more sensitive to signal degradation over distance. As a general rule:&lt;br /&gt;
&lt;br /&gt;
* 9600 baud — reliable up to approximately 1200 metres on good RS-485 cable&lt;br /&gt;
* 19200 baud — reliable up to approximately 600 metres&lt;br /&gt;
* 115200 baud — reliable up to approximately 100 metres&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Parity ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_parity_diagram.png|thumb|400px|right|Diagram illustrating Even, Odd, and No parity bit positions within a serial data frame. The parity bit is inserted between the last data bit and the stop bit.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parity&#039;&#039;&#039; is a basic error detection mechanism. It adds a single extra bit to each transmitted byte, allowing the receiver to detect single-bit transmission errors.&lt;br /&gt;
&lt;br /&gt;
The parity bit is placed after the 8 data bits and before the stop bit(s). It adjusts the total number of 1s in the data frame to be either always even (Even parity) or always odd (Odd parity).&lt;br /&gt;
&lt;br /&gt;
==== Parity Modes ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mode !! Abbreviation !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Even Parity || E || The parity bit is set so that the total number of 1 bits in the data byte + parity bit is &#039;&#039;&#039;even&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Odd Parity || O || The parity bit is set so that the total number of 1 bits in the data byte + parity bit is &#039;&#039;&#039;odd&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| No Parity || N || No parity bit is transmitted. Error checking relies on CRC only. Requires 2 stop bits in Modbus RTU to maintain frame timing.&lt;br /&gt;
|-&lt;br /&gt;
| Mark Parity || M || Parity bit is always 1, regardless of data. Rarely used.&lt;br /&gt;
|-&lt;br /&gt;
| Space Parity || S || Parity bit is always 0, regardless of data. Rarely used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Modbus specification recommends &#039;&#039;&#039;Even parity&#039;&#039;&#039; as the default. However, &#039;&#039;&#039;8N1&#039;&#039;&#039; (8 data bits, No parity, 1 stop bit) is extremely common in practice and is the de facto standard for most BMS devices.&lt;br /&gt;
&lt;br /&gt;
==== How Parity Looks in Binary ====&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — Parity Bit Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x31&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;00110001&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Count of 1 bits: 3 (three 1s in the data byte)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even Parity:&#039;&#039;&#039;&lt;br /&gt;
Since there are already 3 ones (odd count), the parity bit is set to &#039;&#039;&#039;1&#039;&#039;&#039; to make the total even (3 + 1 = 4, which is even).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Par  Stop&lt;br /&gt;
Value:    0    1    0    0    0    1    1    0    0    1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Odd Parity:&#039;&#039;&#039;&lt;br /&gt;
Since there are already 3 ones (odd count), the parity bit is set to &#039;&#039;&#039;0&#039;&#039;&#039; to keep the total odd (3 + 0 = 3, which is odd).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Par  Stop&lt;br /&gt;
Value:    0    1    0    0    0    1    1    0    0    0    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N1):&#039;&#039;&#039;&lt;br /&gt;
No parity bit at all. An extra stop bit is added to maintain frame length.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop Stop&lt;br /&gt;
Value:    0    1    0    0    0    1    1    0    0    1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What each position means:&lt;br /&gt;
* &#039;&#039;&#039;Start bit&#039;&#039;&#039;: Always 0. Triggers the receiver to start reading.&lt;br /&gt;
* &#039;&#039;&#039;D0–D7&#039;&#039;&#039;: The 8 data bits (LSB first).&lt;br /&gt;
* &#039;&#039;&#039;Parity bit&#039;&#039;&#039;: Calculated from the data bits. Used to detect single-bit errors.&lt;br /&gt;
* &#039;&#039;&#039;Stop bit(s)&#039;&#039;&#039;: Always 1. Marks the end of the character frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Parity Limitation ====&lt;br /&gt;
&lt;br /&gt;
Parity can only detect an &#039;&#039;&#039;odd number&#039;&#039;&#039; of bit errors. If two bits flip simultaneously (double-bit error), the parity check will still pass even though the data is wrong. This is why Modbus RTU also uses CRC-16 at the message level — the two mechanisms complement each other.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Data Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_databits_diagram.png|thumb|400px|right|Diagram showing the position of data bits within a serial frame. Data bits D0 through D7 carry the actual payload, transmitted LSB first.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data bits&#039;&#039;&#039; refers to the number of bits used to represent each unit of data (one character or byte) within a single serial frame.&lt;br /&gt;
&lt;br /&gt;
In Modbus, this value is virtually always &#039;&#039;&#039;8 data bits&#039;&#039;&#039;. Using 8 bits allows each frame to carry one full byte of information, which aligns directly with how Modbus RTU encodes its binary protocol data.&lt;br /&gt;
&lt;br /&gt;
The only exception is Modbus ASCII, which can operate with 7 data bits because it uses only printable ASCII characters (all of which fit within 7 bits).&lt;br /&gt;
&lt;br /&gt;
==== How Data Bits Look in Binary ====&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — Data Bits Detail&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0xB4&amp;lt;/code&amp;gt; = decimal 180 = binary &amp;lt;code&amp;gt;10110100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The 8 data bits are transmitted &#039;&#039;&#039;LSB first&#039;&#039;&#039; (D0 is the least significant bit):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit position:   Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop&lt;br /&gt;
Binary value:     0    0    0    1    0    1    1    0    1     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reading the data bits from D0 to D7: 0, 0, 1, 0, 1, 1, 0, 1&lt;br /&gt;
&lt;br /&gt;
Reversing to MSB order (D7 to D0): 1, 0, 1, 1, 0, 1, 0, 0 = &amp;lt;code&amp;gt;10110100&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;0xB4&amp;lt;/code&amp;gt; ✓&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What each data bit position represents:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit !! Position !! Binary Weighting !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| D0 || Least Significant Bit || 2⁰ = 1 || Transmitted first on the wire&lt;br /&gt;
|-&lt;br /&gt;
| D1 || — || 2¹ = 2 || —&lt;br /&gt;
|-&lt;br /&gt;
| D2 || — || 2² = 4 || —&lt;br /&gt;
|-&lt;br /&gt;
| D3 || — || 2³ = 8 || —&lt;br /&gt;
|-&lt;br /&gt;
| D4 || — || 2⁴ = 16 || —&lt;br /&gt;
|-&lt;br /&gt;
| D5 || — || 2⁵ = 32 || —&lt;br /&gt;
|-&lt;br /&gt;
| D6 || — || 2⁶ = 64 || —&lt;br /&gt;
|-&lt;br /&gt;
| D7 || Most Significant Bit || 2⁷ = 128 || Transmitted last, before parity/stop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The total possible values representable by 8 data bits = 2⁸ = 256 (values 0–255).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Stop Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_stopbits_diagram.png|thumb|400px|right|Diagram comparing 1 stop bit vs 2 stop bits in a serial frame. The stop bit(s) are the final element of a character frame, returning the line to the idle HIGH state.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stop bits&#039;&#039;&#039; mark the end of a character frame. After the data bits (and optional parity bit) have been transmitted, the transmitter sends one or two stop bits by holding the line in the HIGH (idle) state for the duration of those bit periods.&lt;br /&gt;
&lt;br /&gt;
Stop bits give the receiver time to process the incoming byte and prepare for the next start bit. They also provide a guaranteed idle state between characters so that the receiver can reliably detect the falling edge of the next start bit.&lt;br /&gt;
&lt;br /&gt;
==== Stop Bit Configurations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Configuration !! Stop Bits !! When Used&lt;br /&gt;
|-&lt;br /&gt;
| 8N1 || 1 stop bit || No parity — most common Modbus RTU configuration&lt;br /&gt;
|-&lt;br /&gt;
| 8E1 || 1 stop bit || Even parity&lt;br /&gt;
|-&lt;br /&gt;
| 8O1 || 1 stop bit || Odd parity&lt;br /&gt;
|-&lt;br /&gt;
| 8N2 || 2 stop bits || No parity — provides additional recovery time; used on noisy lines&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Modbus specification states: if no parity is used, 2 stop bits are recommended to maintain equivalent frame length. In practice however, 8N1 (1 stop bit, no parity) is by far the most common configuration encountered in BMS installations.&lt;br /&gt;
&lt;br /&gt;
==== How Stop Bits Look in Binary ====&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — Stop Bit Comparison&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x55&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;01010101&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8E1 — Even Parity, 1 Stop Bit:&#039;&#039;&#039;&lt;br /&gt;
Number of 1s in data = 4 (even), so parity bit = 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Par  Stop&lt;br /&gt;
Value:    0    1    0    1    0    1    0    1    0    0    1&lt;br /&gt;
         ←————————————————— 11 bits total ——————————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N2 — No Parity, 2 Stop Bits:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop Stop&lt;br /&gt;
Value:    0    1    0    1    0    1    0    1    0    1    1&lt;br /&gt;
         ←————————————————— 11 bits total ——————————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both configurations result in 11 bits per character frame, maintaining the same total frame length and timing compatibility.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key rule:&#039;&#039;&#039; The line must be idle (HIGH) for the entire stop bit period before the next start bit (LOW) can be recognised. If the line goes low before the stop bit period ends, the receiver flags a &#039;&#039;&#039;framing error&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Flow Control ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_flowcontrol_diagram.png|thumb|400px|right|Diagram showing hardware flow control signals RTS and CTS on a serial connection. In RS-485 half-duplex operation, RTS is used to switch the driver between transmit and receive mode.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Flow control&#039;&#039;&#039; is a mechanism that manages the rate of data transmission between devices, preventing a fast sender from overwhelming a slow receiver. In Modbus serial communication, flow control is relevant primarily in RS-232 connections and in RS-485 half-duplex bus switching.&lt;br /&gt;
&lt;br /&gt;
==== Flow Control Types ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type !! Method !! Description&lt;br /&gt;
|-&lt;br /&gt;
| None || — || No flow control. The most common setting for Modbus RTU on RS-485.&lt;br /&gt;
|-&lt;br /&gt;
| Hardware (RTS/CTS) || Physical signal lines || The sender asserts RTS (Request To Send); receiver replies with CTS (Clear To Send). Data flows only when CTS is active.&lt;br /&gt;
|-&lt;br /&gt;
| Software (XON/XOFF) || In-band control bytes || Special ASCII characters (0x11 = XON, 0x13 = XOFF) are inserted into the data stream to pause and resume transmission. Not compatible with binary protocols like Modbus RTU.&lt;br /&gt;
|-&lt;br /&gt;
| RTS toggle (RS-485) || RTS line used for direction control || In half-duplex RS-485, the RTS line is used to switch the transceiver between transmit mode and receive mode. This is a driver enable signal, not true flow control.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RS-485 and Half-Duplex Direction Control ====&lt;br /&gt;
&lt;br /&gt;
RS-485 is inherently a half-duplex medium — devices cannot transmit and receive simultaneously. To prevent bus contention, the RS-485 driver must be enabled only when transmitting and returned to receive mode immediately after.&lt;br /&gt;
&lt;br /&gt;
In many Modbus RTU implementations, the RTS signal from the UART is wired to the DE/RE (Driver Enable / Receiver Enable) pins of the RS-485 transceiver chip. This is often called &#039;&#039;&#039;RTS flow control&#039;&#039;&#039; in software configuration, even though it is technically a bus direction control mechanism rather than data flow control.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — RS-485 RTS/Direction Control&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sequence when a Modbus master sends a request:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Time →&lt;br /&gt;
&lt;br /&gt;
RTS:    ___________________&lt;br /&gt;
       |                   |&lt;br /&gt;
_______|                   |_______   (RTS HIGH = transmit mode enabled)&lt;br /&gt;
&lt;br /&gt;
TX:    |  [Modbus Frame Data............] |&lt;br /&gt;
       ^                                  ^&lt;br /&gt;
    RTS asserted                      RTS released&lt;br /&gt;
    (driver enabled)               (driver disabled, line released)&lt;br /&gt;
&lt;br /&gt;
RX:    _______________________________________&lt;br /&gt;
                                              |&lt;br /&gt;
                                              | ← Slave response begins here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What each signal does:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;RTS asserted HIGH:&#039;&#039;&#039; Enables the RS-485 driver. The master &#039;&#039;owns&#039;&#039; the bus and transmits its request frame.&lt;br /&gt;
* &#039;&#039;&#039;TX line:&#039;&#039;&#039; Carries the actual Modbus RTU binary data (address, function code, data, CRC).&lt;br /&gt;
* &#039;&#039;&#039;RTS released LOW:&#039;&#039;&#039; Disables the RS-485 driver. The master releases the bus and switches to receive mode.&lt;br /&gt;
* &#039;&#039;&#039;RX line:&#039;&#039;&#039; The slave&#039;s response arrives. The master reads it with its receiver enabled.&lt;br /&gt;
&lt;br /&gt;
Timing of RTS is critical — releasing too early can truncate the last stop bit of the frame. Releasing too late blocks the slave response. Most modern USB-RS485 adapters handle this automatically.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
In most BMS applications using RS-485, flow control is set to &#039;&#039;&#039;None&#039;&#039;&#039; in the software configuration, with the hardware adapter managing direction control automatically. Only when using older RS-232 point-to-point wiring is explicit hardware flow control (RTS/CTS) typically required.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Data Model ==&lt;br /&gt;
&lt;br /&gt;
Modbus organises data into four distinct object types, each with a defined address space. The master accesses these objects using function codes.&lt;br /&gt;
&lt;br /&gt;
=== Coils ===&lt;br /&gt;
&lt;br /&gt;
Coils are single-bit read/write values. They represent binary output states such as a relay, a digital output, or an on/off command. The address range is 1–9999 (using 1-based Modbus convention) or 0x0000–0xFFFF (using the 0-based PDU addressing).&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: Fan on/off command, valve open/close output, alarm reset.&lt;br /&gt;
&lt;br /&gt;
=== Discrete Inputs ===&lt;br /&gt;
&lt;br /&gt;
Discrete inputs are single-bit read-only values. They represent binary input states such as a digital sensor, a status contact, or a switch position. Address range: 10001–19999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: Door open sensor, high temperature alarm contact, filter dirty status.&lt;br /&gt;
&lt;br /&gt;
=== Holding Registers ===&lt;br /&gt;
&lt;br /&gt;
Holding registers are 16-bit read/write registers. They are the most commonly used data type in Modbus and can hold values such as setpoints, configurations, and output values. Address range: 40001–49999.&lt;br /&gt;
&lt;br /&gt;
A single holding register holds values from 0 to 65535 (unsigned) or -32768 to 32767 (signed). For larger values (e.g. floating point temperatures or energy readings), two consecutive registers are used together to form a 32-bit value.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: Temperature setpoint, VFD speed reference, valve position command.&lt;br /&gt;
&lt;br /&gt;
=== Input Registers ===&lt;br /&gt;
&lt;br /&gt;
Input registers are 16-bit read-only registers. They represent measured or computed values provided by the slave device. Address range: 30001–39999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: Supply air temperature, room CO₂ concentration, energy meter active power reading.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Function Codes ==&lt;br /&gt;
&lt;br /&gt;
Function codes tell the slave device what action to perform. They are carried in the second byte of every Modbus frame.&lt;br /&gt;
&lt;br /&gt;
=== Read Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Reads&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Read Coils || Coils (1-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Read Discrete Inputs || Discrete Inputs (1-bit, read-only)&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Read Holding Registers || Holding Registers (16-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Read Input Registers || Input Registers (16-bit, read-only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Write Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Writes&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Write Single Coil || Single coil ON (0xFF00) or OFF (0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Write Single Register || Single holding register&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 0x0F || Write Multiple Coils || Multiple coils&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 0x10 || Write Multiple Registers || Multiple holding registers&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Diagnostic Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 07 || 0x07 || Read Exception Status || Returns device error status byte&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Diagnostics || Various sub-functions for testing comms&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Get Comm Event Counter || Returns count of successful messages&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 0x11 || Report Server ID || Returns device type and status&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
=== CRC and LRC Checking ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC-16 (Cyclic Redundancy Check)&#039;&#039;&#039; is used in Modbus RTU. It is a 16-bit error detection value calculated from all bytes in the message (excluding the CRC bytes themselves). The master calculates the CRC before sending, and the slave recalculates it upon receipt. If the values do not match, the message is discarded silently — no response is sent, and the master will timeout.&lt;br /&gt;
&lt;br /&gt;
The CRC polynomial used is: &amp;lt;code&amp;gt;0xA001&amp;lt;/code&amp;gt; (reflected form of CRC-16-IBM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LRC (Longitudinal Redundancy Check)&#039;&#039;&#039; is used in Modbus ASCII. It is calculated as the two&#039;s complement of the sum of all byte values in the message. It is simpler but less robust than CRC-16.&lt;br /&gt;
&lt;br /&gt;
=== Exception Codes ===&lt;br /&gt;
&lt;br /&gt;
When a slave receives a valid request but cannot fulfil it, it returns an exception response. The function code in the response has its most significant bit set to 1 (i.e. the original function code + 0x80), followed by an exception code byte.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Exception Code !! Hex !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Illegal Function || The function code is not supported by this device&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Illegal Data Address || The register address does not exist on this device&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Illegal Data Value || The value in the data field is not permitted&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Slave Device Failure || An unrecoverable error occurred in the slave&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Acknowledge || Slave accepted the request but needs more time (long operation)&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Slave Device Busy || Slave is busy processing a previous request&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Memory Parity Error || Slave detected a parity error reading extended memory&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0x0A || Gateway Path Unavailable || Gateway could not allocate a path (Modbus TCP)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Gateway Target No Response || Target device on gateway failed to respond&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus in BMS Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Typical Devices ===&lt;br /&gt;
&lt;br /&gt;
Modbus is one of the most commonly encountered protocols when integrating third-party field devices into a BMS. The following device types frequently use Modbus RTU as their primary or secondary communication interface:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Energy meters&#039;&#039;&#039; — active power (kW), reactive power (kVAR), energy (kWh), power factor, voltage and current readings via input registers&lt;br /&gt;
* &#039;&#039;&#039;Variable Frequency Drives (VFDs)&#039;&#039;&#039; — speed reference (Hz or %), run/stop command, fault status, output frequency and current feedback&lt;br /&gt;
* &#039;&#039;&#039;Chillers and heat pumps&#039;&#039;&#039; — leaving water temperature, setpoint, mode command, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Air Handling Units (AHUs)&#039;&#039;&#039; — supply/return air temperature, damper position, fan speed feedback&lt;br /&gt;
* &#039;&#039;&#039;CO₂ and air quality sensors&#039;&#039;&#039; — CO₂ concentration (ppm), temperature, humidity&lt;br /&gt;
* &#039;&#039;&#039;Heat meters&#039;&#039;&#039; — flow rate, inlet/outlet temperatures, cumulative energy&lt;br /&gt;
* &#039;&#039;&#039;UPS systems&#039;&#039;&#039; — battery voltage, charge level, load percentage, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Generator controllers&#039;&#039;&#039; — run status, fuel level, output voltage, frequency&lt;br /&gt;
&lt;br /&gt;
=== Wiring and Topology ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU on RS-485 uses a &#039;&#039;&#039;daisy-chain bus topology&#039;&#039;&#039;. Devices are connected in series from the first to the last node. The two conductors of the RS-485 pair are labelled A (−) and B (+), though manufacturers often use inconsistent naming (some label them D− / D+, or even reverse the A/B convention).&lt;br /&gt;
&lt;br /&gt;
Key wiring rules:&lt;br /&gt;
* &#039;&#039;&#039;Termination resistors&#039;&#039;&#039; of 120Ω must be fitted at both physical ends of the RS-485 bus to prevent signal reflections. Only the two end devices are terminated — never intermediate devices.&lt;br /&gt;
* &#039;&#039;&#039;Bias resistors&#039;&#039;&#039; (typically 560Ω to 1kΩ) are recommended to hold the bus at a defined state when no device is transmitting, preventing false start bit detection.&lt;br /&gt;
* &#039;&#039;&#039;Maximum cable length&#039;&#039;&#039; depends on baud rate (see Baud Rate section), but 1200 metres at 9600 baud is a typical practical limit for standard twisted pair cable.&lt;br /&gt;
* The maximum number of addressable slave devices is 247, though the RS-485 electrical standard supports up to 32 unit loads on a single segment without repeaters (256 with 1/8 unit load devices).&lt;br /&gt;
* Shielded twisted pair (STP) cable is strongly recommended in BMS environments due to electrical noise from motors, VFDs, and other inductive loads.&lt;br /&gt;
&lt;br /&gt;
=== Common Issues and Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
The following are the most frequently encountered Modbus communication problems in BMS installations:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No response from slave / timeout&#039;&#039;&#039;&lt;br /&gt;
* Verify slave address matches the configured address on the physical device&lt;br /&gt;
* Check baud rate, parity, data bits, and stop bits match on master and slave&lt;br /&gt;
* Check A/B wiring polarity — reversed polarity is a very common installation error&lt;br /&gt;
* Verify termination resistors are fitted at the correct endpoints only&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC errors / corrupted data&#039;&#039;&#039;&lt;br /&gt;
* Inspect cable routing — avoid running alongside power cables or VFD output cables&lt;br /&gt;
* Check for missing or incorrectly placed termination resistors&lt;br /&gt;
* Reduce baud rate to test if the issue is speed-related&lt;br /&gt;
* Check for ground loops (ensure shield is grounded at one end only)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intermittent communication&#039;&#039;&#039;&lt;br /&gt;
* Often caused by missing bias resistors — the bus floats to an indeterminate state when idle&lt;br /&gt;
* Check for multiple termination resistors incorrectly fitted to intermediate devices&lt;br /&gt;
* Investigate RTS/driver enable timing issues if using a custom RS-485 adapter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incorrect register values&#039;&#039;&#039;&lt;br /&gt;
* Confirm register addressing convention — some devices use 0-based addressing, others 1-based&lt;br /&gt;
* Check byte order (endianness) for 32-bit floating point values — some devices use Big Endian, others Little Endian or mixed (&#039;&#039;byte-swapped&#039;&#039;) formats&lt;br /&gt;
* Verify scaling factors — a register reading of 1234 may represent 12.34 depending on the device&#039;s register map&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus vs Other Protocols ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! Modbus RTU !! BACnet MS/TP !! PROFIBUS DP !! KNX (TP)&lt;br /&gt;
|-&lt;br /&gt;
| Year Introduced || 1979 || 1995 || 1989 || 1990&lt;br /&gt;
|-&lt;br /&gt;
| Physical Layer || RS-485 || RS-485 || RS-485 || Twisted Pair (proprietary)&lt;br /&gt;
|-&lt;br /&gt;
| Max Devices || 247 slaves || 128 nodes || 126 nodes || 65,536 devices&lt;br /&gt;
|-&lt;br /&gt;
| Max Speed || 115,200 bps || 76,800 bps || 12 Mbps || 9,600 bps&lt;br /&gt;
|-&lt;br /&gt;
| Error Detection || CRC-16 || CRC-16 || CRC-16 || Data Link Layer CRC&lt;br /&gt;
|-&lt;br /&gt;
| Master-Slave || Yes (strict) || Token passing || Master-Slave || Decentralised&lt;br /&gt;
|-&lt;br /&gt;
| Open Standard || Yes (free) || Yes (ASHRAE) || IEC 61158 || Yes (ISO 14543)&lt;br /&gt;
|-&lt;br /&gt;
| Native BMS Support || Via gateway || Native BMS protocol || Industrial/BMS || BMS/home automation&lt;br /&gt;
|-&lt;br /&gt;
| IP Variant || Modbus TCP || BACnet/IP || PROFINET || KNX IP&lt;br /&gt;
|-&lt;br /&gt;
| Complexity || Low || Medium || High || Medium&lt;br /&gt;
|-&lt;br /&gt;
| Cost to Implement || Very Low || Low-Medium || Medium-High || Medium&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Modbus is the simplest and most widely supported protocol, making it ideal for third-party device integration. BACnet MS/TP is preferred for native BMS device-to-controller communication as it is specifically designed for building automation and supports peer-to-peer messaging. PROFIBUS DP offers significantly higher speed and is more common in industrial/manufacturing environments than in typical building services. KNX is predominantly used in smaller commercial and residential applications.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This page is part of the BMS Protocols section of the internal BMS Wiki.&#039;&#039;&lt;br /&gt;
&#039;&#039;Last updated: February 2026&#039;&#039;&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Modbus&amp;diff=75</id>
		<title>Modbus</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Modbus&amp;diff=75"/>
		<updated>2026-02-24T22:19:34Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: Created page with &amp;quot;= Modbus =  == Contents == # Overview # History # Protocol Architecture ## Master-Slave Model ## Request-Response Cycle # Transmission Modes ## Modbus RTU ## Modbus ASCII ## Modbus TCP/IP # Communication Parameters ## Baud Rate ## #Parity|Parity...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Modbus =&lt;br /&gt;
&lt;br /&gt;
== Contents ==&lt;br /&gt;
# [[#Overview|Overview]]&lt;br /&gt;
# [[#History|History]]&lt;br /&gt;
# [[#Protocol Architecture|Protocol Architecture]]&lt;br /&gt;
## [[#Master-Slave Model|Master-Slave Model]]&lt;br /&gt;
## [[#Request-Response Cycle|Request-Response Cycle]]&lt;br /&gt;
# [[#Transmission Modes|Transmission Modes]]&lt;br /&gt;
## [[#Modbus RTU|Modbus RTU]]&lt;br /&gt;
## [[#Modbus ASCII|Modbus ASCII]]&lt;br /&gt;
## [[#Modbus TCP/IP|Modbus TCP/IP]]&lt;br /&gt;
# [[#Communication Parameters|Communication Parameters]]&lt;br /&gt;
## [[#Baud Rate|Baud Rate]]&lt;br /&gt;
## [[#Parity|Parity]]&lt;br /&gt;
## [[#Data Bits|Data Bits]]&lt;br /&gt;
## [[#Stop Bits|Stop Bits]]&lt;br /&gt;
## [[#Flow Control|Flow Control]]&lt;br /&gt;
# [[#Data Model|Data Model]]&lt;br /&gt;
## [[#Coils|Coils]]&lt;br /&gt;
## [[#Discrete Inputs|Discrete Inputs]]&lt;br /&gt;
## [[#Holding Registers|Holding Registers]]&lt;br /&gt;
## [[#Input Registers|Input Registers]]&lt;br /&gt;
# [[#Function Codes|Function Codes]]&lt;br /&gt;
## [[#Read Functions|Read Functions]]&lt;br /&gt;
## [[#Write Functions|Write Functions]]&lt;br /&gt;
## [[#Diagnostic Functions|Diagnostic Functions]]&lt;br /&gt;
# [[#Error Handling|Error Handling]]&lt;br /&gt;
## [[#CRC and LRC Checking|CRC and LRC Checking]]&lt;br /&gt;
## [[#Exception Codes|Exception Codes]]&lt;br /&gt;
# [[#Modbus in BMS Applications|Modbus in BMS Applications]]&lt;br /&gt;
## [[#Typical Devices|Typical Devices]]&lt;br /&gt;
## [[#Wiring and Topology|Wiring and Topology]]&lt;br /&gt;
## [[#Common Issues and Troubleshooting|Common Issues and Troubleshooting]]&lt;br /&gt;
# [[#Modbus vs Other Protocols|Modbus vs Other Protocols]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Modbus is an open, serial communication protocol originally developed for use in programmable logic controllers (PLCs). It has since become one of the most widely deployed industrial communication protocols in the world, particularly in Building Management Systems (BMS), SCADA environments, energy metering, and industrial automation.&lt;br /&gt;
&lt;br /&gt;
Modbus operates on a master-slave (also referred to as client-server in newer documentation) architecture, where a single master device initiates all communication and one or more slave devices respond. It is valued for its simplicity, robustness, and vendor-neutral design — making it ideal for integrating devices from multiple manufacturers into a unified control system.&lt;br /&gt;
&lt;br /&gt;
In BMS applications, Modbus is commonly used to communicate with energy meters, variable frequency drives (VFDs), chillers, boilers, air handling units (AHUs), and a wide range of sensors and actuators.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
Modbus was developed in 1979 by Modicon (now a brand of Schneider Electric) for use with their programmable logic controllers. It was designed as a simple and robust protocol for serial communication between controllers on a production floor.&lt;br /&gt;
&lt;br /&gt;
In 1996, Modbus over TCP/IP (Modbus TCP) was introduced, allowing the protocol to be used over modern Ethernet networks. This dramatically expanded its use cases and kept it relevant into the internet era.&lt;br /&gt;
&lt;br /&gt;
In 2004, the rights to the Modbus specification were transferred to the Modbus Organization, a non-profit trade association that maintains and promotes the standard to this day. The protocol remains publicly available and royalty-free, which is a significant reason for its continued adoption over proprietary alternatives.&lt;br /&gt;
&lt;br /&gt;
Today Modbus exists in three primary variants: Modbus RTU and Modbus ASCII (both for serial communication), and Modbus TCP/IP (for Ethernet communication).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Protocol Architecture ==&lt;br /&gt;
&lt;br /&gt;
=== Master-Slave Model ===&lt;br /&gt;
&lt;br /&gt;
Modbus uses a strict master-slave architecture. There is always one master and up to 247 addressable slave devices on a single serial bus. Each slave is assigned a unique address between 1 and 247. Address 0 is reserved for broadcast messages, which all slaves receive but do not respond to.&lt;br /&gt;
&lt;br /&gt;
The master is always the initiator of communication. A slave device never transmits data unless it has first been queried by the master. This eliminates bus collisions and keeps the protocol deterministic — an important quality in control systems where timing and reliability are critical.&lt;br /&gt;
&lt;br /&gt;
In a BMS context, the master is typically the Building Management Controller (BMC) or a gateway device, and the slaves are field devices such as energy meters, controllers, or sensors.&lt;br /&gt;
&lt;br /&gt;
=== Request-Response Cycle ===&lt;br /&gt;
&lt;br /&gt;
Every Modbus transaction follows a simple two-step cycle:&lt;br /&gt;
&lt;br /&gt;
# The &#039;&#039;&#039;master&#039;&#039;&#039; sends a request frame to a specific slave address (or broadcast to address 0).&lt;br /&gt;
# The &#039;&#039;&#039;slave&#039;&#039;&#039; receives the request, processes it, and returns a response frame to the master.&lt;br /&gt;
&lt;br /&gt;
If the slave receives a valid request but cannot comply (e.g. the register address does not exist), it returns an &#039;&#039;&#039;exception response&#039;&#039;&#039; containing an error code. If the master receives no response within its configured timeout window, it may retry the request or log a communication fault.&lt;br /&gt;
&lt;br /&gt;
A full Modbus RTU frame consists of the following fields in order:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Size !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Device Address || 1 byte || Slave address (1–247), or 0 for broadcast&lt;br /&gt;
|-&lt;br /&gt;
| Function Code || 1 byte || Defines the type of action requested&lt;br /&gt;
|-&lt;br /&gt;
| Data || Variable || Register addresses, values, or quantities&lt;br /&gt;
|-&lt;br /&gt;
| CRC || 2 bytes || Error checking (Cyclic Redundancy Check)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Transmission Modes ==&lt;br /&gt;
&lt;br /&gt;
=== Modbus RTU ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU (Remote Terminal Unit) is the most common implementation of the protocol in BMS and industrial environments. Data is transmitted as binary bytes over an RS-232 or RS-485 serial connection.&lt;br /&gt;
&lt;br /&gt;
Each byte of data is encoded as a single binary character. The framing of messages is defined by silent intervals (gaps) between characters — a gap of at least 3.5 character times signals the start or end of a message frame.&lt;br /&gt;
&lt;br /&gt;
RTU is preferred over ASCII for most applications because it is more efficient: it transmits the same data in roughly half the number of bytes, making better use of available bandwidth.&lt;br /&gt;
&lt;br /&gt;
Key characteristics:&lt;br /&gt;
* Binary encoding&lt;br /&gt;
* CRC-16 error checking&lt;br /&gt;
* Message framing via inter-character silence (3.5 character times)&lt;br /&gt;
* Physical layer: RS-485 (most common), RS-232, RS-422&lt;br /&gt;
&lt;br /&gt;
=== Modbus ASCII ===&lt;br /&gt;
&lt;br /&gt;
Modbus ASCII transmits data as ASCII text characters rather than raw binary. Each byte of data is represented as two hexadecimal ASCII characters (e.g. the byte &amp;lt;code&amp;gt;0x5B&amp;lt;/code&amp;gt; is sent as the characters &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
ASCII mode uses a colon (&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;) as a start delimiter and CR/LF characters as an end delimiter. It uses LRC (Longitudinal Redundancy Check) for error checking rather than CRC.&lt;br /&gt;
&lt;br /&gt;
ASCII mode is less bandwidth-efficient than RTU but is easier to debug with simple terminal tools and is more tolerant of timing variations on noisy or slow serial lines. It is rarely used in modern BMS installations.&lt;br /&gt;
&lt;br /&gt;
=== Modbus TCP/IP ===&lt;br /&gt;
&lt;br /&gt;
Modbus TCP/IP wraps the standard Modbus PDU (Protocol Data Unit) inside a TCP packet and transmits it over a standard Ethernet network. It uses port &#039;&#039;&#039;502&#039;&#039;&#039; by default.&lt;br /&gt;
&lt;br /&gt;
The serial-specific fields (device address and CRC) are replaced by a &#039;&#039;&#039;MBAP header&#039;&#039;&#039; (Modbus Application Protocol header), which contains a transaction identifier, protocol identifier, message length, and unit identifier.&lt;br /&gt;
&lt;br /&gt;
Modbus TCP removes the need for RS-485 wiring and allows Modbus devices to be integrated into IP-based building networks. Many modern BMS gateways and energy meters support Modbus TCP natively or via an RS-485-to-Ethernet converter.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Communication Parameters ==&lt;br /&gt;
&lt;br /&gt;
Communication parameters are the settings that define how data is physically transmitted between the master and slave devices on a serial Modbus network. All devices on the same bus &#039;&#039;&#039;must be configured with identical parameters&#039;&#039;&#039; — a mismatch in any one setting will cause communication failures.&lt;br /&gt;
&lt;br /&gt;
The parameters covered here apply primarily to Modbus RTU and Modbus ASCII (serial variants). Modbus TCP uses standard IP networking parameters instead.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Baud Rate ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_baudrate_diagram.png|thumb|400px|right|Diagram showing how baud rate affects the time width of each bit on the signal line. A higher baud rate means narrower bit windows and faster data transmission.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Baud rate&#039;&#039;&#039; defines the number of signal changes (symbols) per second on the communication line. In the context of Modbus serial communication, one symbol corresponds to one binary bit, so baud rate is effectively the number of bits transmitted per second (bps).&lt;br /&gt;
&lt;br /&gt;
==== Common Baud Rate Values ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Baud Rate !! Bits per Second !! Typical Use Case&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || 1,200 bps || Legacy devices, long cable runs with poor quality cable&lt;br /&gt;
|-&lt;br /&gt;
| 2400 || 2,400 bps || Older meters and sensors&lt;br /&gt;
|-&lt;br /&gt;
| 4800 || 4,800 bps || Moderate speed legacy devices&lt;br /&gt;
|-&lt;br /&gt;
| 9600 || 9,600 bps || &#039;&#039;&#039;Most common default&#039;&#039;&#039; — widely supported by all devices&lt;br /&gt;
|-&lt;br /&gt;
| 19200 || 19,200 bps || Standard BMS installations with moderate device counts&lt;br /&gt;
|-&lt;br /&gt;
| 38400 || 38,400 bps || Higher performance systems&lt;br /&gt;
|-&lt;br /&gt;
| 57600 || 57,600 bps || Fast networks, shorter cable runs&lt;br /&gt;
|-&lt;br /&gt;
| 115200 || 115,200 bps || Maximum practical speed for RS-485 in most installations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The default baud rate for Modbus RTU is &#039;&#039;&#039;9600 bps&#039;&#039;&#039;, though 19200 bps is very common in BMS environments.&lt;br /&gt;
&lt;br /&gt;
==== How Baud Rate Looks in Binary ====&lt;br /&gt;
&lt;br /&gt;
Each bit occupies a fixed time window called the &#039;&#039;&#039;bit period&#039;&#039;&#039;, calculated as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Bit Period = 1 / Baud Rate&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At 9600 baud, each bit lasts approximately &#039;&#039;&#039;104 microseconds&#039;&#039;&#039;. At 115200 baud, each bit lasts approximately &#039;&#039;&#039;8.7 microseconds&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — Baud Rate Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Below is what the byte &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; (decimal 65, ASCII &amp;quot;A&amp;quot;) looks like on the wire at 9600 baud in Modbus RTU (8N1 framing):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop&lt;br /&gt;
Value:    0    1    0    0    0    0    0    1    0     1&lt;br /&gt;
         ___                          ___&lt;br /&gt;
    ____|   |________________________|   |________  (idle high = 1, start bit pulls low)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What each position means:&lt;br /&gt;
* &#039;&#039;&#039;Start bit&#039;&#039;&#039; (1 bit): Always logic 0. Signals the beginning of a byte. Pulls the line LOW.&lt;br /&gt;
* &#039;&#039;&#039;D0–D7&#039;&#039;&#039; (8 bits): The actual data byte, transmitted LSB (least significant bit) first. For &amp;lt;code&amp;gt;0x41&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;01000001&amp;lt;/code&amp;gt; binary, the wire sends: 1, 0, 0, 0, 0, 0, 1, 0 (LSB first).&lt;br /&gt;
* &#039;&#039;&#039;Stop bit&#039;&#039;&#039; (1 bit): Always logic 1. Returns line HIGH, signalling end of byte.&lt;br /&gt;
&lt;br /&gt;
Total bits per byte at 8N1 = 10 bits (1 start + 8 data + 1 stop).&lt;br /&gt;
At 9600 baud, one full byte takes: 10 × 104µs = &#039;&#039;&#039;1.04 milliseconds&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Effect on Cable Length ====&lt;br /&gt;
&lt;br /&gt;
Higher baud rates require better quality cabling and are more sensitive to signal degradation over distance. As a general rule:&lt;br /&gt;
&lt;br /&gt;
* 9600 baud — reliable up to approximately 1200 metres on good RS-485 cable&lt;br /&gt;
* 19200 baud — reliable up to approximately 600 metres&lt;br /&gt;
* 115200 baud — reliable up to approximately 100 metres&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Parity ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_parity_diagram.png|thumb|400px|right|Diagram illustrating Even, Odd, and No parity bit positions within a serial data frame. The parity bit is inserted between the last data bit and the stop bit.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Parity&#039;&#039;&#039; is a basic error detection mechanism. It adds a single extra bit to each transmitted byte, allowing the receiver to detect single-bit transmission errors.&lt;br /&gt;
&lt;br /&gt;
The parity bit is placed after the 8 data bits and before the stop bit(s). It adjusts the total number of 1s in the data frame to be either always even (Even parity) or always odd (Odd parity).&lt;br /&gt;
&lt;br /&gt;
==== Parity Modes ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mode !! Abbreviation !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Even Parity || E || The parity bit is set so that the total number of 1 bits in the data byte + parity bit is &#039;&#039;&#039;even&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Odd Parity || O || The parity bit is set so that the total number of 1 bits in the data byte + parity bit is &#039;&#039;&#039;odd&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| No Parity || N || No parity bit is transmitted. Error checking relies on CRC only. Requires 2 stop bits in Modbus RTU to maintain frame timing.&lt;br /&gt;
|-&lt;br /&gt;
| Mark Parity || M || Parity bit is always 1, regardless of data. Rarely used.&lt;br /&gt;
|-&lt;br /&gt;
| Space Parity || S || Parity bit is always 0, regardless of data. Rarely used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Modbus specification recommends &#039;&#039;&#039;Even parity&#039;&#039;&#039; as the default. However, &#039;&#039;&#039;8N1&#039;&#039;&#039; (8 data bits, No parity, 1 stop bit) is extremely common in practice and is the de facto standard for most BMS devices.&lt;br /&gt;
&lt;br /&gt;
==== How Parity Looks in Binary ====&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — Parity Bit Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x31&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;00110001&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Count of 1 bits: 3 (three 1s in the data byte)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Even Parity:&#039;&#039;&#039;&lt;br /&gt;
Since there are already 3 ones (odd count), the parity bit is set to &#039;&#039;&#039;1&#039;&#039;&#039; to make the total even (3 + 1 = 4, which is even).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Par  Stop&lt;br /&gt;
Value:    0    1    0    0    0    1    1    0    0    1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Odd Parity:&#039;&#039;&#039;&lt;br /&gt;
Since there are already 3 ones (odd count), the parity bit is set to &#039;&#039;&#039;0&#039;&#039;&#039; to keep the total odd (3 + 0 = 3, which is odd).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Par  Stop&lt;br /&gt;
Value:    0    1    0    0    0    1    1    0    0    0    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No Parity (8N1):&#039;&#039;&#039;&lt;br /&gt;
No parity bit at all. An extra stop bit is added to maintain frame length.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop Stop&lt;br /&gt;
Value:    0    1    0    0    0    1    1    0    0    1    1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What each position means:&lt;br /&gt;
* &#039;&#039;&#039;Start bit&#039;&#039;&#039;: Always 0. Triggers the receiver to start reading.&lt;br /&gt;
* &#039;&#039;&#039;D0–D7&#039;&#039;&#039;: The 8 data bits (LSB first).&lt;br /&gt;
* &#039;&#039;&#039;Parity bit&#039;&#039;&#039;: Calculated from the data bits. Used to detect single-bit errors.&lt;br /&gt;
* &#039;&#039;&#039;Stop bit(s)&#039;&#039;&#039;: Always 1. Marks the end of the character frame.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Parity Limitation ====&lt;br /&gt;
&lt;br /&gt;
Parity can only detect an &#039;&#039;&#039;odd number&#039;&#039;&#039; of bit errors. If two bits flip simultaneously (double-bit error), the parity check will still pass even though the data is wrong. This is why Modbus RTU also uses CRC-16 at the message level — the two mechanisms complement each other.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Data Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_databits_diagram.png|thumb|400px|right|Diagram showing the position of data bits within a serial frame. Data bits D0 through D7 carry the actual payload, transmitted LSB first.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Data bits&#039;&#039;&#039; refers to the number of bits used to represent each unit of data (one character or byte) within a single serial frame.&lt;br /&gt;
&lt;br /&gt;
In Modbus, this value is virtually always &#039;&#039;&#039;8 data bits&#039;&#039;&#039;. Using 8 bits allows each frame to carry one full byte of information, which aligns directly with how Modbus RTU encodes its binary protocol data.&lt;br /&gt;
&lt;br /&gt;
The only exception is Modbus ASCII, which can operate with 7 data bits because it uses only printable ASCII characters (all of which fit within 7 bits).&lt;br /&gt;
&lt;br /&gt;
==== How Data Bits Look in Binary ====&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — Data Bits Detail&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0xB4&amp;lt;/code&amp;gt; = decimal 180 = binary &amp;lt;code&amp;gt;10110100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The 8 data bits are transmitted &#039;&#039;&#039;LSB first&#039;&#039;&#039; (D0 is the least significant bit):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit position:   Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop&lt;br /&gt;
Binary value:     0    0    0    1    0    1    1    0    1     1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reading the data bits from D0 to D7: 0, 0, 1, 0, 1, 1, 0, 1&lt;br /&gt;
&lt;br /&gt;
Reversing to MSB order (D7 to D0): 1, 0, 1, 1, 0, 1, 0, 0 = &amp;lt;code&amp;gt;10110100&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;0xB4&amp;lt;/code&amp;gt; ✓&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What each data bit position represents:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit !! Position !! Binary Weighting !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| D0 || Least Significant Bit || 2⁰ = 1 || Transmitted first on the wire&lt;br /&gt;
|-&lt;br /&gt;
| D1 || — || 2¹ = 2 || —&lt;br /&gt;
|-&lt;br /&gt;
| D2 || — || 2² = 4 || —&lt;br /&gt;
|-&lt;br /&gt;
| D3 || — || 2³ = 8 || —&lt;br /&gt;
|-&lt;br /&gt;
| D4 || — || 2⁴ = 16 || —&lt;br /&gt;
|-&lt;br /&gt;
| D5 || — || 2⁵ = 32 || —&lt;br /&gt;
|-&lt;br /&gt;
| D6 || — || 2⁶ = 64 || —&lt;br /&gt;
|-&lt;br /&gt;
| D7 || Most Significant Bit || 2⁷ = 128 || Transmitted last, before parity/stop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The total possible values representable by 8 data bits = 2⁸ = 256 (values 0–255).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Stop Bits ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_stopbits_diagram.png|thumb|400px|right|Diagram comparing 1 stop bit vs 2 stop bits in a serial frame. The stop bit(s) are the final element of a character frame, returning the line to the idle HIGH state.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Stop bits&#039;&#039;&#039; mark the end of a character frame. After the data bits (and optional parity bit) have been transmitted, the transmitter sends one or two stop bits by holding the line in the HIGH (idle) state for the duration of those bit periods.&lt;br /&gt;
&lt;br /&gt;
Stop bits give the receiver time to process the incoming byte and prepare for the next start bit. They also provide a guaranteed idle state between characters so that the receiver can reliably detect the falling edge of the next start bit.&lt;br /&gt;
&lt;br /&gt;
==== Stop Bit Configurations ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Configuration !! Stop Bits !! When Used&lt;br /&gt;
|-&lt;br /&gt;
| 8N1 || 1 stop bit || No parity — most common Modbus RTU configuration&lt;br /&gt;
|-&lt;br /&gt;
| 8E1 || 1 stop bit || Even parity&lt;br /&gt;
|-&lt;br /&gt;
| 8O1 || 1 stop bit || Odd parity&lt;br /&gt;
|-&lt;br /&gt;
| 8N2 || 2 stop bits || No parity — provides additional recovery time; used on noisy lines&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Modbus specification states: if no parity is used, 2 stop bits are recommended to maintain equivalent frame length. In practice however, 8N1 (1 stop bit, no parity) is by far the most common configuration encountered in BMS installations.&lt;br /&gt;
&lt;br /&gt;
==== How Stop Bits Look in Binary ====&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — Stop Bit Comparison&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example byte: &amp;lt;code&amp;gt;0x55&amp;lt;/code&amp;gt; = binary &amp;lt;code&amp;gt;01010101&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8E1 — Even Parity, 1 Stop Bit:&#039;&#039;&#039;&lt;br /&gt;
Number of 1s in data = 4 (even), so parity bit = 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Par  Stop&lt;br /&gt;
Value:    0    1    0    1    0    1    0    1    0    0    1&lt;br /&gt;
         ←————————————————— 11 bits total ——————————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8N2 — No Parity, 2 Stop Bits:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bit:    Start  D0   D1   D2   D3   D4   D5   D6   D7   Stop Stop&lt;br /&gt;
Value:    0    1    0    1    0    1    0    1    0    1    1&lt;br /&gt;
         ←————————————————— 11 bits total ——————————————————→&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both configurations result in 11 bits per character frame, maintaining the same total frame length and timing compatibility.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key rule:&#039;&#039;&#039; The line must be idle (HIGH) for the entire stop bit period before the next start bit (LOW) can be recognised. If the line goes low before the stop bit period ends, the receiver flags a &#039;&#039;&#039;framing error&#039;&#039;&#039;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Flow Control ===&lt;br /&gt;
&lt;br /&gt;
[[File:modbus_flowcontrol_diagram.png|thumb|400px|right|Diagram showing hardware flow control signals RTS and CTS on a serial connection. In RS-485 half-duplex operation, RTS is used to switch the driver between transmit and receive mode.]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Flow control&#039;&#039;&#039; is a mechanism that manages the rate of data transmission between devices, preventing a fast sender from overwhelming a slow receiver. In Modbus serial communication, flow control is relevant primarily in RS-232 connections and in RS-485 half-duplex bus switching.&lt;br /&gt;
&lt;br /&gt;
==== Flow Control Types ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Type !! Method !! Description&lt;br /&gt;
|-&lt;br /&gt;
| None || — || No flow control. The most common setting for Modbus RTU on RS-485.&lt;br /&gt;
|-&lt;br /&gt;
| Hardware (RTS/CTS) || Physical signal lines || The sender asserts RTS (Request To Send); receiver replies with CTS (Clear To Send). Data flows only when CTS is active.&lt;br /&gt;
|-&lt;br /&gt;
| Software (XON/XOFF) || In-band control bytes || Special ASCII characters (0x11 = XON, 0x13 = XOFF) are inserted into the data stream to pause and resume transmission. Not compatible with binary protocols like Modbus RTU.&lt;br /&gt;
|-&lt;br /&gt;
| RTS toggle (RS-485) || RTS line used for direction control || In half-duplex RS-485, the RTS line is used to switch the transceiver between transmit mode and receive mode. This is a driver enable signal, not true flow control.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RS-485 and Half-Duplex Direction Control ====&lt;br /&gt;
&lt;br /&gt;
RS-485 is inherently a half-duplex medium — devices cannot transmit and receive simultaneously. To prevent bus contention, the RS-485 driver must be enabled only when transmitting and returned to receive mode immediately after.&lt;br /&gt;
&lt;br /&gt;
In many Modbus RTU implementations, the RTS signal from the UART is wired to the DE/RE (Driver Enable / Receiver Enable) pins of the RS-485 transceiver chip. This is often called &#039;&#039;&#039;RTS flow control&#039;&#039;&#039; in software configuration, even though it is technically a bus direction control mechanism rather than data flow control.&lt;br /&gt;
&lt;br /&gt;
{{Mbox&lt;br /&gt;
|type=notice&lt;br /&gt;
|text=&lt;br /&gt;
&#039;&#039;&#039;Binary Signal Breakdown — RS-485 RTS/Direction Control&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sequence when a Modbus master sends a request:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Time →&lt;br /&gt;
&lt;br /&gt;
RTS:    ___________________&lt;br /&gt;
       |                   |&lt;br /&gt;
_______|                   |_______   (RTS HIGH = transmit mode enabled)&lt;br /&gt;
&lt;br /&gt;
TX:    |  [Modbus Frame Data............] |&lt;br /&gt;
       ^                                  ^&lt;br /&gt;
    RTS asserted                      RTS released&lt;br /&gt;
    (driver enabled)               (driver disabled, line released)&lt;br /&gt;
&lt;br /&gt;
RX:    _______________________________________&lt;br /&gt;
                                              |&lt;br /&gt;
                                              | ← Slave response begins here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;What each signal does:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;RTS asserted HIGH:&#039;&#039;&#039; Enables the RS-485 driver. The master &#039;&#039;owns&#039;&#039; the bus and transmits its request frame.&lt;br /&gt;
* &#039;&#039;&#039;TX line:&#039;&#039;&#039; Carries the actual Modbus RTU binary data (address, function code, data, CRC).&lt;br /&gt;
* &#039;&#039;&#039;RTS released LOW:&#039;&#039;&#039; Disables the RS-485 driver. The master releases the bus and switches to receive mode.&lt;br /&gt;
* &#039;&#039;&#039;RX line:&#039;&#039;&#039; The slave&#039;s response arrives. The master reads it with its receiver enabled.&lt;br /&gt;
&lt;br /&gt;
Timing of RTS is critical — releasing too early can truncate the last stop bit of the frame. Releasing too late blocks the slave response. Most modern USB-RS485 adapters handle this automatically.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
In most BMS applications using RS-485, flow control is set to &#039;&#039;&#039;None&#039;&#039;&#039; in the software configuration, with the hardware adapter managing direction control automatically. Only when using older RS-232 point-to-point wiring is explicit hardware flow control (RTS/CTS) typically required.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Data Model ==&lt;br /&gt;
&lt;br /&gt;
Modbus organises data into four distinct object types, each with a defined address space. The master accesses these objects using function codes.&lt;br /&gt;
&lt;br /&gt;
=== Coils ===&lt;br /&gt;
&lt;br /&gt;
Coils are single-bit read/write values. They represent binary output states such as a relay, a digital output, or an on/off command. The address range is 1–9999 (using 1-based Modbus convention) or 0x0000–0xFFFF (using the 0-based PDU addressing).&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: Fan on/off command, valve open/close output, alarm reset.&lt;br /&gt;
&lt;br /&gt;
=== Discrete Inputs ===&lt;br /&gt;
&lt;br /&gt;
Discrete inputs are single-bit read-only values. They represent binary input states such as a digital sensor, a status contact, or a switch position. Address range: 10001–19999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: Door open sensor, high temperature alarm contact, filter dirty status.&lt;br /&gt;
&lt;br /&gt;
=== Holding Registers ===&lt;br /&gt;
&lt;br /&gt;
Holding registers are 16-bit read/write registers. They are the most commonly used data type in Modbus and can hold values such as setpoints, configurations, and output values. Address range: 40001–49999.&lt;br /&gt;
&lt;br /&gt;
A single holding register holds values from 0 to 65535 (unsigned) or -32768 to 32767 (signed). For larger values (e.g. floating point temperatures or energy readings), two consecutive registers are used together to form a 32-bit value.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: Temperature setpoint, VFD speed reference, valve position command.&lt;br /&gt;
&lt;br /&gt;
=== Input Registers ===&lt;br /&gt;
&lt;br /&gt;
Input registers are 16-bit read-only registers. They represent measured or computed values provided by the slave device. Address range: 30001–39999.&lt;br /&gt;
&lt;br /&gt;
Examples in BMS: Supply air temperature, room CO₂ concentration, energy meter active power reading.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Function Codes ==&lt;br /&gt;
&lt;br /&gt;
Function codes tell the slave device what action to perform. They are carried in the second byte of every Modbus frame.&lt;br /&gt;
&lt;br /&gt;
=== Read Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Reads&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Read Coils || Coils (1-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Read Discrete Inputs || Discrete Inputs (1-bit, read-only)&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Read Holding Registers || Holding Registers (16-bit, read/write)&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Read Input Registers || Input Registers (16-bit, read-only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Write Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Writes&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Write Single Coil || Single coil ON (0xFF00) or OFF (0x0000)&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Write Single Register || Single holding register&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 0x0F || Write Multiple Coils || Multiple coils&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 0x10 || Write Multiple Registers || Multiple holding registers&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Diagnostic Functions ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function Code !! Hex !! Name !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| 07 || 0x07 || Read Exception Status || Returns device error status byte&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Diagnostics || Various sub-functions for testing comms&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Get Comm Event Counter || Returns count of successful messages&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 0x11 || Report Server ID || Returns device type and status&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
=== CRC and LRC Checking ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC-16 (Cyclic Redundancy Check)&#039;&#039;&#039; is used in Modbus RTU. It is a 16-bit error detection value calculated from all bytes in the message (excluding the CRC bytes themselves). The master calculates the CRC before sending, and the slave recalculates it upon receipt. If the values do not match, the message is discarded silently — no response is sent, and the master will timeout.&lt;br /&gt;
&lt;br /&gt;
The CRC polynomial used is: &amp;lt;code&amp;gt;0xA001&amp;lt;/code&amp;gt; (reflected form of CRC-16-IBM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LRC (Longitudinal Redundancy Check)&#039;&#039;&#039; is used in Modbus ASCII. It is calculated as the two&#039;s complement of the sum of all byte values in the message. It is simpler but less robust than CRC-16.&lt;br /&gt;
&lt;br /&gt;
=== Exception Codes ===&lt;br /&gt;
&lt;br /&gt;
When a slave receives a valid request but cannot fulfil it, it returns an exception response. The function code in the response has its most significant bit set to 1 (i.e. the original function code + 0x80), followed by an exception code byte.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Exception Code !! Hex !! Name !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 01 || 0x01 || Illegal Function || The function code is not supported by this device&lt;br /&gt;
|-&lt;br /&gt;
| 02 || 0x02 || Illegal Data Address || The register address does not exist on this device&lt;br /&gt;
|-&lt;br /&gt;
| 03 || 0x03 || Illegal Data Value || The value in the data field is not permitted&lt;br /&gt;
|-&lt;br /&gt;
| 04 || 0x04 || Slave Device Failure || An unrecoverable error occurred in the slave&lt;br /&gt;
|-&lt;br /&gt;
| 05 || 0x05 || Acknowledge || Slave accepted the request but needs more time (long operation)&lt;br /&gt;
|-&lt;br /&gt;
| 06 || 0x06 || Slave Device Busy || Slave is busy processing a previous request&lt;br /&gt;
|-&lt;br /&gt;
| 08 || 0x08 || Memory Parity Error || Slave detected a parity error reading extended memory&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0x0A || Gateway Path Unavailable || Gateway could not allocate a path (Modbus TCP)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x0B || Gateway Target No Response || Target device on gateway failed to respond&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus in BMS Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Typical Devices ===&lt;br /&gt;
&lt;br /&gt;
Modbus is one of the most commonly encountered protocols when integrating third-party field devices into a BMS. The following device types frequently use Modbus RTU as their primary or secondary communication interface:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Energy meters&#039;&#039;&#039; — active power (kW), reactive power (kVAR), energy (kWh), power factor, voltage and current readings via input registers&lt;br /&gt;
* &#039;&#039;&#039;Variable Frequency Drives (VFDs)&#039;&#039;&#039; — speed reference (Hz or %), run/stop command, fault status, output frequency and current feedback&lt;br /&gt;
* &#039;&#039;&#039;Chillers and heat pumps&#039;&#039;&#039; — leaving water temperature, setpoint, mode command, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Air Handling Units (AHUs)&#039;&#039;&#039; — supply/return air temperature, damper position, fan speed feedback&lt;br /&gt;
* &#039;&#039;&#039;CO₂ and air quality sensors&#039;&#039;&#039; — CO₂ concentration (ppm), temperature, humidity&lt;br /&gt;
* &#039;&#039;&#039;Heat meters&#039;&#039;&#039; — flow rate, inlet/outlet temperatures, cumulative energy&lt;br /&gt;
* &#039;&#039;&#039;UPS systems&#039;&#039;&#039; — battery voltage, charge level, load percentage, alarm status&lt;br /&gt;
* &#039;&#039;&#039;Generator controllers&#039;&#039;&#039; — run status, fuel level, output voltage, frequency&lt;br /&gt;
&lt;br /&gt;
=== Wiring and Topology ===&lt;br /&gt;
&lt;br /&gt;
Modbus RTU on RS-485 uses a &#039;&#039;&#039;daisy-chain bus topology&#039;&#039;&#039;. Devices are connected in series from the first to the last node. The two conductors of the RS-485 pair are labelled A (−) and B (+), though manufacturers often use inconsistent naming (some label them D− / D+, or even reverse the A/B convention).&lt;br /&gt;
&lt;br /&gt;
Key wiring rules:&lt;br /&gt;
* &#039;&#039;&#039;Termination resistors&#039;&#039;&#039; of 120Ω must be fitted at both physical ends of the RS-485 bus to prevent signal reflections. Only the two end devices are terminated — never intermediate devices.&lt;br /&gt;
* &#039;&#039;&#039;Bias resistors&#039;&#039;&#039; (typically 560Ω to 1kΩ) are recommended to hold the bus at a defined state when no device is transmitting, preventing false start bit detection.&lt;br /&gt;
* &#039;&#039;&#039;Maximum cable length&#039;&#039;&#039; depends on baud rate (see Baud Rate section), but 1200 metres at 9600 baud is a typical practical limit for standard twisted pair cable.&lt;br /&gt;
* The maximum number of addressable slave devices is 247, though the RS-485 electrical standard supports up to 32 unit loads on a single segment without repeaters (256 with 1/8 unit load devices).&lt;br /&gt;
* Shielded twisted pair (STP) cable is strongly recommended in BMS environments due to electrical noise from motors, VFDs, and other inductive loads.&lt;br /&gt;
&lt;br /&gt;
=== Common Issues and Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
The following are the most frequently encountered Modbus communication problems in BMS installations:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;No response from slave / timeout&#039;&#039;&#039;&lt;br /&gt;
* Verify slave address matches the configured address on the physical device&lt;br /&gt;
* Check baud rate, parity, data bits, and stop bits match on master and slave&lt;br /&gt;
* Check A/B wiring polarity — reversed polarity is a very common installation error&lt;br /&gt;
* Verify termination resistors are fitted at the correct endpoints only&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CRC errors / corrupted data&#039;&#039;&#039;&lt;br /&gt;
* Inspect cable routing — avoid running alongside power cables or VFD output cables&lt;br /&gt;
* Check for missing or incorrectly placed termination resistors&lt;br /&gt;
* Reduce baud rate to test if the issue is speed-related&lt;br /&gt;
* Check for ground loops (ensure shield is grounded at one end only)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intermittent communication&#039;&#039;&#039;&lt;br /&gt;
* Often caused by missing bias resistors — the bus floats to an indeterminate state when idle&lt;br /&gt;
* Check for multiple termination resistors incorrectly fitted to intermediate devices&lt;br /&gt;
* Investigate RTS/driver enable timing issues if using a custom RS-485 adapter&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Incorrect register values&#039;&#039;&#039;&lt;br /&gt;
* Confirm register addressing convention — some devices use 0-based addressing, others 1-based&lt;br /&gt;
* Check byte order (endianness) for 32-bit floating point values — some devices use Big Endian, others Little Endian or mixed (&#039;&#039;byte-swapped&#039;&#039;) formats&lt;br /&gt;
* Verify scaling factors — a register reading of 1234 may represent 12.34 depending on the device&#039;s register map&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Modbus vs Other Protocols ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! Modbus RTU !! BACnet MS/TP !! PROFIBUS DP !! KNX (TP)&lt;br /&gt;
|-&lt;br /&gt;
| Year Introduced || 1979 || 1995 || 1989 || 1990&lt;br /&gt;
|-&lt;br /&gt;
| Physical Layer || RS-485 || RS-485 || RS-485 || Twisted Pair (proprietary)&lt;br /&gt;
|-&lt;br /&gt;
| Max Devices || 247 slaves || 128 nodes || 126 nodes || 65,536 devices&lt;br /&gt;
|-&lt;br /&gt;
| Max Speed || 115,200 bps || 76,800 bps || 12 Mbps || 9,600 bps&lt;br /&gt;
|-&lt;br /&gt;
| Error Detection || CRC-16 || CRC-16 || CRC-16 || Data Link Layer CRC&lt;br /&gt;
|-&lt;br /&gt;
| Master-Slave || Yes (strict) || Token passing || Master-Slave || Decentralised&lt;br /&gt;
|-&lt;br /&gt;
| Open Standard || Yes (free) || Yes (ASHRAE) || IEC 61158 || Yes (ISO 14543)&lt;br /&gt;
|-&lt;br /&gt;
| Native BMS Support || Via gateway || Native BMS protocol || Industrial/BMS || BMS/home automation&lt;br /&gt;
|-&lt;br /&gt;
| IP Variant || Modbus TCP || BACnet/IP || PROFINET || KNX IP&lt;br /&gt;
|-&lt;br /&gt;
| Complexity || Low || Medium || High || Medium&lt;br /&gt;
|-&lt;br /&gt;
| Cost to Implement || Very Low || Low-Medium || Medium-High || Medium&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Modbus is the simplest and most widely supported protocol, making it ideal for third-party device integration. BACnet MS/TP is preferred for native BMS device-to-controller communication as it is specifically designed for building automation and supports peer-to-peer messaging. PROFIBUS DP offers significantly higher speed and is more common in industrial/manufacturing environments than in typical building services. KNX is predominantly used in smaller commercial and residential applications.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This page is part of the BMS Protocols section of the internal BMS Wiki.&#039;&#039;&lt;br /&gt;
&#039;&#039;Last updated: February 2026&#039;&#039;&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=File:BMS-alarm-list-example.png&amp;diff=74</id>
		<title>File:BMS-alarm-list-example.png</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=File:BMS-alarm-list-example.png&amp;diff=74"/>
		<updated>2026-02-24T21:24:28Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=File:BMS-graphic-example.png&amp;diff=73</id>
		<title>File:BMS-graphic-example.png</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=File:BMS-graphic-example.png&amp;diff=73"/>
		<updated>2026-02-24T21:23:19Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=File:BMS-architecture-diagram.png&amp;diff=72</id>
		<title>File:BMS-architecture-diagram.png</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=File:BMS-architecture-diagram.png&amp;diff=72"/>
		<updated>2026-02-24T21:17:57Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Electrical_Theory&amp;diff=71</id>
		<title>Electrical Theory</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Electrical_Theory&amp;diff=71"/>
		<updated>2026-01-04T00:44:16Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Basic Electrical Principles =&lt;br /&gt;
== Voltage, Current and Resistance ==&lt;br /&gt;
== Ohm&#039;s Law and Power Calculations ==&lt;br /&gt;
== AC and DC Fundamentals ==&lt;br /&gt;
== Series and Parallel Circuits ==&lt;br /&gt;
&lt;br /&gt;
= Circuit Protection =&lt;br /&gt;
&lt;br /&gt;
= Control Panel Components =&lt;br /&gt;
== Terminal Blocks and DIN Rails ==&lt;br /&gt;
== Power Supplies ==&lt;br /&gt;
== Contactors ==&lt;br /&gt;
== Indicator Lights and HMI Panels ==&lt;br /&gt;
== Wire Ducts and Cable Management ==&lt;br /&gt;
&lt;br /&gt;
= Relays =&lt;br /&gt;
== Relay Construction and Operation ==&lt;br /&gt;
== Coil and Contact Ratings ==&lt;br /&gt;
== Normally Open, Normally Closed and Common ==&lt;br /&gt;
== Wet, Dry and Voltage Free Contacts ==&lt;br /&gt;
== Electromechanical vs Solid State Relays ==&lt;br /&gt;
== Time Delay Relays ==&lt;br /&gt;
&lt;br /&gt;
= Transformers =&lt;br /&gt;
&lt;br /&gt;
= Earthing and Grounding =&lt;br /&gt;
== Protective and Functional Earth ==&lt;br /&gt;
== Bonding ==&lt;br /&gt;
&lt;br /&gt;
= Wiring Practices =&lt;br /&gt;
== Wire Sizing and Voltage Drop ==&lt;br /&gt;
== Termination Methods ==&lt;br /&gt;
== Shielding and Interference ==&lt;br /&gt;
&lt;br /&gt;
= Common Faults =&lt;br /&gt;
== Earth Faults and Insulation Breakdown ==&lt;br /&gt;
== Loose Terminations and Coil Failures ==&lt;br /&gt;
== Intermittent Connections ==&lt;br /&gt;
== Floating Voltages ==&lt;br /&gt;
&lt;br /&gt;
= Fault Finding =&lt;br /&gt;
== Multimeter Use and Continuity Testing ==&lt;br /&gt;
== Insulation Resistance Testing ==&lt;br /&gt;
== Systematic Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
= Electrical Safety =&lt;br /&gt;
== Safe Isolation and Lock Out Tag Out ==&lt;br /&gt;
== Working on Live Equipment ==&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Electrical_Theory&amp;diff=70</id>
		<title>Electrical Theory</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Electrical_Theory&amp;diff=70"/>
		<updated>2026-01-04T00:41:44Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Basic Electrical Principles =&lt;br /&gt;
== Voltage, Current and Resistance ==&lt;br /&gt;
== Ohm&#039;s Law and Power Calculations ==&lt;br /&gt;
== AC and DC Fundamentals ==&lt;br /&gt;
== Series and Parallel Circuits ==&lt;br /&gt;
&lt;br /&gt;
= Circuit Protection =&lt;br /&gt;
== Fuses ==&lt;br /&gt;
== Circuit Breakers ==&lt;br /&gt;
&lt;br /&gt;
= Control Panel Components =&lt;br /&gt;
== Terminal Blocks and DIN Rails ==&lt;br /&gt;
== Power Supplies ==&lt;br /&gt;
== Contactors ==&lt;br /&gt;
== Indicator Lights and HMI Panels ==&lt;br /&gt;
== Wire Ducts and Cable Management ==&lt;br /&gt;
&lt;br /&gt;
= Relays =&lt;br /&gt;
== Relay Construction and Operation ==&lt;br /&gt;
== Coil and Contact Ratings ==&lt;br /&gt;
== Electromechanical vs Solid State Relays ==&lt;br /&gt;
== Time Delay Relays ==&lt;br /&gt;
&lt;br /&gt;
= Contact Configurations =&lt;br /&gt;
== Normally Open and Normally Closed ==&lt;br /&gt;
== Common Terminal ==&lt;br /&gt;
== Changeover Contacts ==&lt;br /&gt;
&lt;br /&gt;
= Contact Types =&lt;br /&gt;
== Wet and Dry Contacts ==&lt;br /&gt;
== Voltage Free Contacts ==&lt;br /&gt;
&lt;br /&gt;
= Transistors in Control Systems =&lt;br /&gt;
== NPN and PNP Outputs ==&lt;br /&gt;
== Sinking and Sourcing ==&lt;br /&gt;
&lt;br /&gt;
= Floating Voltages =&lt;br /&gt;
== Causes and Measurement ==&lt;br /&gt;
== Safety Considerations ==&lt;br /&gt;
&lt;br /&gt;
= Transformers =&lt;br /&gt;
== Operating Principles ==&lt;br /&gt;
== Step Up and Step Down ==&lt;br /&gt;
== Isolation Transformers ==&lt;br /&gt;
== Sizing and VA Ratings ==&lt;br /&gt;
&lt;br /&gt;
= Earthing and Grounding =&lt;br /&gt;
== Protective and Functional Earth ==&lt;br /&gt;
== Bonding ==&lt;br /&gt;
&lt;br /&gt;
= Shielding and Interference =&lt;br /&gt;
== EMI and RFI Sources ==&lt;br /&gt;
== Cable Shielding and Separation ==&lt;br /&gt;
== Filtering and Suppression ==&lt;br /&gt;
&lt;br /&gt;
= Wiring Practices =&lt;br /&gt;
== Wire Sizing and Voltage Drop ==&lt;br /&gt;
== Termination Methods ==&lt;br /&gt;
&lt;br /&gt;
= Common Faults =&lt;br /&gt;
== Earth Faults and Insulation Breakdown ==&lt;br /&gt;
== Loose Terminations and Coil Failures ==&lt;br /&gt;
== Intermittent Connections ==&lt;br /&gt;
&lt;br /&gt;
= Fault Finding =&lt;br /&gt;
== Multimeter Use and Continuity Testing ==&lt;br /&gt;
== Insulation Resistance Testing ==&lt;br /&gt;
== Systematic Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
= Electrical Safety =&lt;br /&gt;
== Safe Isolation and Lock Out Tag Out ==&lt;br /&gt;
== Working on Live Equipment ==&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Electrical_Theory&amp;diff=69</id>
		<title>Electrical Theory</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Electrical_Theory&amp;diff=69"/>
		<updated>2026-01-04T00:40:59Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: Created page with &amp;quot;= Electrical Theory =  = Basic Electrical Principles = == Voltage == == Current == == Resistance == == Ohm&amp;#039;s Law == == Power Calculations == == AC and DC Fundamentals == == Series Circuits == == Parallel Circuits ==  = Circuit Protection = == Fuses == == Circuit Breakers == == Overcurrent Protection == == Short Circuit Protection ==  = Control Panel Components = == Terminal Blocks == == DIN Rails == == Power Supplies == == Contactors == == Indicator Lights == == HMI Pane...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Electrical Theory =&lt;br /&gt;
&lt;br /&gt;
= Basic Electrical Principles =&lt;br /&gt;
== Voltage ==&lt;br /&gt;
== Current ==&lt;br /&gt;
== Resistance ==&lt;br /&gt;
== Ohm&#039;s Law ==&lt;br /&gt;
== Power Calculations ==&lt;br /&gt;
== AC and DC Fundamentals ==&lt;br /&gt;
== Series Circuits ==&lt;br /&gt;
== Parallel Circuits ==&lt;br /&gt;
&lt;br /&gt;
= Circuit Protection =&lt;br /&gt;
== Fuses ==&lt;br /&gt;
== Circuit Breakers ==&lt;br /&gt;
== Overcurrent Protection ==&lt;br /&gt;
== Short Circuit Protection ==&lt;br /&gt;
&lt;br /&gt;
= Control Panel Components =&lt;br /&gt;
== Terminal Blocks ==&lt;br /&gt;
== DIN Rails ==&lt;br /&gt;
== Power Supplies ==&lt;br /&gt;
== Contactors ==&lt;br /&gt;
== Indicator Lights ==&lt;br /&gt;
== HMI Panels ==&lt;br /&gt;
== Wire Ducts and Cable Management ==&lt;br /&gt;
== Panel Layout and Labelling ==&lt;br /&gt;
&lt;br /&gt;
= Relays =&lt;br /&gt;
== Relay Construction ==&lt;br /&gt;
== Coil and Contact Ratings ==&lt;br /&gt;
== Electromechanical Relays ==&lt;br /&gt;
== Solid State Relays ==&lt;br /&gt;
== Relay Sockets and Bases ==&lt;br /&gt;
== Time Delay Relays ==&lt;br /&gt;
&lt;br /&gt;
= Contact Configurations =&lt;br /&gt;
== Normally Open ==&lt;br /&gt;
== Normally Closed ==&lt;br /&gt;
== Common Terminal ==&lt;br /&gt;
== Changeover Contacts ==&lt;br /&gt;
== Single Pole and Multi Pole ==&lt;br /&gt;
&lt;br /&gt;
= Contact Types =&lt;br /&gt;
== Wet Contacts ==&lt;br /&gt;
== Dry Contacts ==&lt;br /&gt;
== Voltage Free Contacts ==&lt;br /&gt;
== Applications in BMS ==&lt;br /&gt;
&lt;br /&gt;
= Transistors in Control Systems =&lt;br /&gt;
== Transistor Fundamentals ==&lt;br /&gt;
== NPN Outputs ==&lt;br /&gt;
== PNP Outputs ==&lt;br /&gt;
== Sinking and Sourcing ==&lt;br /&gt;
== Current Limitations ==&lt;br /&gt;
== Transistor Output Modules ==&lt;br /&gt;
&lt;br /&gt;
= Floating Voltages =&lt;br /&gt;
== Definition and Causes ==&lt;br /&gt;
== Induced Voltages ==&lt;br /&gt;
== Measurement Techniques ==&lt;br /&gt;
== Safety Considerations ==&lt;br /&gt;
&lt;br /&gt;
= Transformers =&lt;br /&gt;
== Operating Principles ==&lt;br /&gt;
== Step Up Transformers ==&lt;br /&gt;
== Step Down Transformers ==&lt;br /&gt;
== Isolation Transformers ==&lt;br /&gt;
== Control Transformer Sizing ==&lt;br /&gt;
== VA Ratings ==&lt;br /&gt;
== Transformer Losses ==&lt;br /&gt;
&lt;br /&gt;
= Earthing and Grounding =&lt;br /&gt;
== Protective Earth ==&lt;br /&gt;
== Functional Earth ==&lt;br /&gt;
== Earth Fault Loop Impedance ==&lt;br /&gt;
== Bonding ==&lt;br /&gt;
&lt;br /&gt;
= Shielding and Interference =&lt;br /&gt;
== Electromagnetic Interference ==&lt;br /&gt;
== Radio Frequency Interference ==&lt;br /&gt;
== Interference Sources ==&lt;br /&gt;
== Cable Shielding ==&lt;br /&gt;
== Single Point Grounding ==&lt;br /&gt;
== Cable Separation ==&lt;br /&gt;
== Filtering and Suppression ==&lt;br /&gt;
== Ferrite Cores ==&lt;br /&gt;
&lt;br /&gt;
= Wiring Practices =&lt;br /&gt;
== Wire Sizing ==&lt;br /&gt;
== Voltage Drop ==&lt;br /&gt;
== Termination Methods ==&lt;br /&gt;
== Ferrules ==&lt;br /&gt;
== Cable Identification ==&lt;br /&gt;
== Wiring Standards ==&lt;br /&gt;
&lt;br /&gt;
= Common Faults =&lt;br /&gt;
== Earth Faults ==&lt;br /&gt;
== Insulation Breakdown ==&lt;br /&gt;
== Loose Terminations ==&lt;br /&gt;
== Coil Failures ==&lt;br /&gt;
== Blown Fuses ==&lt;br /&gt;
== Tripped Breakers ==&lt;br /&gt;
== Intermittent Connections ==&lt;br /&gt;
== Interference Related Faults ==&lt;br /&gt;
== Overheating ==&lt;br /&gt;
&lt;br /&gt;
= Fault Finding Techniques =&lt;br /&gt;
== Visual Inspection ==&lt;br /&gt;
== Multimeter Use ==&lt;br /&gt;
== Continuity Testing ==&lt;br /&gt;
== Insulation Resistance Testing ==&lt;br /&gt;
== Live Testing Safety ==&lt;br /&gt;
== Systematic Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
= Electrical Safety =&lt;br /&gt;
== Safe Isolation ==&lt;br /&gt;
== Lock Out Tag Out ==&lt;br /&gt;
== Permit to Work ==&lt;br /&gt;
== PPE Requirements ==&lt;br /&gt;
== Working on Live Equipment ==&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=68</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=68"/>
		<updated>2026-01-04T00:40:22Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
== Common systems ==&lt;br /&gt;
A BMS typically monitors and controls mechanical, electrical, and environmental services across a facility. The scope varies by building type and project specification, but most platforms include the following:&lt;br /&gt;
* Heating, ventilation and air conditioning (HVAC)&lt;br /&gt;
* Chilled water and heating plant&lt;br /&gt;
* Lighting control&lt;br /&gt;
* Electrical monitoring and utility metering&lt;br /&gt;
* Water systems and pumps&lt;br /&gt;
* Fire and life safety interfaces&lt;br /&gt;
&lt;br /&gt;
Depending on the building&#039;s use and complexity, additional systems such as access control, lifts, escalators, solar PV, battery storage, and refrigeration may also be integrated. The extent of BMS coverage is typically defined during the design stage and documented in the project&#039;s controls specification.&lt;br /&gt;
&lt;br /&gt;
= System architecture =&lt;br /&gt;
A BMS is structured in layers, typically divided into field level, automation level, and management level. This hierarchy allows data to flow from physical devices up to a central interface where operators can monitor and control building services.&lt;br /&gt;
&lt;br /&gt;
At the lowest level, field devices such as sensors, actuators, and meters are installed throughout the building to measure conditions and carry out control actions. These devices connect to controllers, which sit at the automation level and execute the logic that keeps systems running — adjusting valve positions, starting fans, and responding to changing conditions. At the top of the hierarchy, the head-end provides a central point of supervision where operators can view the entire system, acknowledge alarms, and analyse performance.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-architecture-diagram.png|thumb|center|450px|Typical BMS architecture showing field devices, controllers, and head-end]]&lt;br /&gt;
&lt;br /&gt;
This layered approach means that control happens locally at the controller level, so buildings continue to operate even if the head-end goes offline. The head-end is primarily for visibility and oversight rather than moment-to-moment control.&lt;br /&gt;
&lt;br /&gt;
== Field devices ==&lt;br /&gt;
Field devices are the physical components installed throughout a building that measure conditions or perform control actions. These include:&lt;br /&gt;
* Sensors (temperature, humidity, pressure, CO2, occupancy)&lt;br /&gt;
* Actuators (valve and damper motors)&lt;br /&gt;
* Variable speed drives&lt;br /&gt;
* Meters (electricity, gas, water, heat)&lt;br /&gt;
* Switches and relays&lt;br /&gt;
&lt;br /&gt;
Field devices connect to controllers either directly via hardwired inputs and outputs, or through a field bus network.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
Controllers are the processing units that execute control logic based on inputs from field devices. They make decisions locally, such as adjusting a valve position to maintain a setpoint, and communicate status and data to higher levels of the system.&lt;br /&gt;
&lt;br /&gt;
Common controller types include:&lt;br /&gt;
* Plant controllers — dedicated to specific equipment such as an air handling unit or chiller&lt;br /&gt;
* Zone controllers — manage multiple terminal units or spaces within an area&lt;br /&gt;
* Unitary controllers — smaller devices for single applications such as a fan coil unit&lt;br /&gt;
&lt;br /&gt;
Controllers typically operate autonomously, allowing the building to continue functioning even if the head-end is offline.&lt;br /&gt;
&lt;br /&gt;
== Head-end and supervision ==&lt;br /&gt;
The head-end is the central software platform where all system data is aggregated. It provides operators with a graphical interface to view live values, acknowledge alarms, adjust setpoints, and analyse trends.&lt;br /&gt;
&lt;br /&gt;
Key functions of the head-end include:&lt;br /&gt;
* System-wide visibility through graphics and dashboards&lt;br /&gt;
* Alarm management and event logging&lt;br /&gt;
* Historical data storage and trend analysis&lt;br /&gt;
* User access control and audit trails&lt;br /&gt;
* Scheduling and calendar functions&lt;br /&gt;
&lt;br /&gt;
The head-end may be installed on a local server or accessed via a web-based interface depending on the system configuration.&lt;br /&gt;
&lt;br /&gt;
=Communication protocols=&lt;br /&gt;
A communication protocol defines how devices and controllers exchange data within a BMS. Different protocols are used depending on the equipment manufacturer, system age, and project requirements. Understanding the basics of each protocol helps when diagnosing communication issues or integrating third-party systems.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The two most common protocols in modern BMS installations are BACnet and Modbus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[BACnet]]&#039;&#039;&#039; — the industry standard for building automation, developed specifically for BMS applications. BACnet supports a wide range of network types including BACnet/IP for head-end communication and BACnet MS/TP for field-level wiring. It allows different manufacturers&#039; equipment to communicate natively without the need for gateways, and provides standardised objects for common functions like analogue values, schedules, and alarms. One of the key advantages of BACnet is device discovery — when a BACnet device is connected to the network, the BMS can automatically detect it and retrieve a list of all available points along with their names, descriptions, and engineering units. This significantly reduces commissioning time compared to older protocols.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[Modbus]]&#039;&#039;&#039; — a simple, reliable protocol originally developed for industrial control. Modbus is widely supported by third-party equipment such as meters, variable speed drives, generators, and packaged plant. It uses a register-based data structure where each value is stored at a specific address, typically shown as a number (e.g. register 40001 for a supply air temperature). To integrate a Modbus device, the engineer must manually configure each point by referencing the manufacturer&#039;s register map, entering the correct address, data type, and any scaling factors. This process is more time-consuming than BACnet but remains common due to the wide availability of Modbus-compatible equipment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other protocols you may encounter include:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[LonWorks]]&#039;&#039;&#039; — a peer-to-peer protocol found in some legacy systems and lighting controls&lt;br /&gt;
* &#039;&#039;&#039;[[KNX]]&#039;&#039;&#039; — common in European installations, typically for lighting and blinds&lt;br /&gt;
* &#039;&#039;&#039;[[OPC]]&#039;&#039;&#039; — a software interface standard used to connect BMS with enterprise systems, historians, and other platforms&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-network-diagram.png|thumb|center|400px|Example of a BMS network showing different protocols at each level]]&lt;br /&gt;
&lt;br /&gt;
In many buildings, multiple protocols exist on the same project. Controllers may use one protocol to communicate with field devices and another to communicate with the head-end. Gateways and protocol converters are used to bridge between different systems where direct communication is not possible.&lt;br /&gt;
&lt;br /&gt;
For more detail on individual protocols, see the linked pages above.&lt;br /&gt;
&lt;br /&gt;
=Graphics and user interface=&lt;br /&gt;
The user interface is how operators interact with the BMS on a day-to-day basis. Most modern systems provide a graphical front-end accessed through a web browser or dedicated software client, allowing users to view live data, respond to alarms, and make adjustments without needing to access individual controllers directly.&lt;br /&gt;
&lt;br /&gt;
Graphics are typically organised in a hierarchy, starting with a site-wide overview and drilling down into individual plant rooms or equipment. Well-designed graphics should allow an operator to quickly understand the status of a system at a glance, identify faults, and navigate to the relevant area without unnecessary clicks.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-graphic-example.png|thumb|right|350px|Example of an AHU schematic graphic showing live values and equipment status]]&lt;br /&gt;
&lt;br /&gt;
A typical plant graphic includes a schematic representation of the equipment, live values such as temperatures and pressures, status indicators showing whether equipment is running or faulted, and command buttons for manual intervention. The quality of graphics varies significantly between projects — some systems use simple block diagrams while others include detailed animated schematics. Regardless of style, clarity and consistency are more important than visual complexity.&lt;br /&gt;
&lt;br /&gt;
==Alarms and events==&lt;br /&gt;
The alarm system notifies operators when something requires attention. Alarms are generated when a value exceeds a defined limit, equipment fails to respond, or a communication fault is detected.&lt;br /&gt;
&lt;br /&gt;
Alarms are typically categorised by priority. Critical alarms require immediate action, such as responding to a fire signal or major plant failure. High priority alarms indicate significant issues that should be addressed promptly. Medium and low priority alarms cover operational issues affecting comfort or efficiency, and advisory or maintenance reminders respectively.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-alarm-list-example.png|thumb|right|350px|Example of an alarm summary screen]]&lt;br /&gt;
&lt;br /&gt;
A well-configured alarm system helps operators focus on genuine issues rather than being overwhelmed by nuisance alerts. Alarm tuning — adjusting thresholds, delays, and priorities — is an ongoing task that should be refined after the building is occupied and operating normally.&lt;br /&gt;
&lt;br /&gt;
Events differ from alarms in that they are informational records rather than calls to action. Examples include equipment start/stop times, user logins, setpoint changes, and schedule overrides. Event logs provide an audit trail that can be useful for troubleshooting or verifying system behaviour.&lt;br /&gt;
==Trends and logs==&lt;br /&gt;
Trending is the process of recording point values over time. This data is essential for understanding how systems are performing, diagnosing faults, and identifying opportunities for improvement.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-trend-graph-example.png|thumb|right|350px|Example of a trend graph showing supply and return air temperatures over 24 hours]]&lt;br /&gt;
&lt;br /&gt;
Trend data is commonly used to verify that setpoints are being maintained, check equipment runtimes and cycling behaviour, investigate complaints, analyse energy consumption patterns, and support commissioning and seasonal tuning. Trends can be viewed as line graphs, tables, or exported for further analysis. The amount of historical data available depends on system configuration and storage capacity — critical points may be logged at short intervals and retained for months, while less important values may only be kept for a few days.&lt;br /&gt;
&lt;br /&gt;
When reviewing trends, it helps to overlay related values on the same graph. For example, comparing supply air temperature against setpoint and outside air temperature can quickly reveal whether control is stable or hunting.&lt;br /&gt;
=Commissioning and handover=&lt;br /&gt;
Commissioning is the process of verifying that the BMS has been installed correctly and operates as intended. It bridges the gap between installation and operational use, ensuring that all points are connected, controllers are programmed, and the system performs in line with the design specification.&lt;br /&gt;
&lt;br /&gt;
The process typically begins with point-to-point testing, where each physical connection between a field device and its controller is checked. This confirms that sensors are reading sensible values, actuators move in the correct direction, and status signals reflect actual equipment states. Any wiring faults, incorrect scaling, or labelling errors are identified and corrected at this stage.&lt;br /&gt;
&lt;br /&gt;
Once the physical layer is proven, functional testing examines the control sequences themselves. This involves simulating different operating conditions and observing how the system responds — checking that interlocks operate correctly, control loops are stable, and equipment starts and stops in the expected order. For complex plant such as air handling units or chiller systems, this may require coordination with other trades to run equipment under realistic loads.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-commissioning-checklist.png|thumb|right|300px|Example of a commissioning checklist used during point-to-point testing]]&lt;br /&gt;
&lt;br /&gt;
Witness testing is often carried out towards the end of commissioning with the client or their representative present. The purpose is to demonstrate that key sequences and functions work as specified before the system is formally accepted. Any outstanding issues are recorded on a snagging list for resolution prior to handover.&lt;br /&gt;
&lt;br /&gt;
Handover marks the transfer of responsibility from the installer to the client or facilities team. A complete handover package should include as-built drawings, controller programmes, point schedules, network diagrams, operating and maintenance manuals, and any training required for end users. The quality of this documentation has a lasting impact — a well-documented system is far easier to maintain and modify in the years that follow.&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
* [[BACnet]]&lt;br /&gt;
* [[Modbus]]&lt;br /&gt;
* [[HVAC]]&lt;br /&gt;
* [[Building automation]]&lt;br /&gt;
* [[Energy management]]&lt;br /&gt;
* [[LonWorks]]&lt;br /&gt;
* [[KNX]]&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=67</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=67"/>
		<updated>2026-01-04T00:31:00Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
== Common systems ==&lt;br /&gt;
A BMS typically monitors and controls mechanical, electrical, and environmental services across a facility. The scope varies by building type and project specification, but most platforms include the following:&lt;br /&gt;
* Heating, ventilation and air conditioning (HVAC)&lt;br /&gt;
* Chilled water and heating plant&lt;br /&gt;
* Lighting control&lt;br /&gt;
* Electrical monitoring and utility metering&lt;br /&gt;
* Water systems and pumps&lt;br /&gt;
* Fire and life safety interfaces&lt;br /&gt;
&lt;br /&gt;
Depending on the building&#039;s use and complexity, additional systems such as access control, lifts, escalators, solar PV, battery storage, and refrigeration may also be integrated. The extent of BMS coverage is typically defined during the design stage and documented in the project&#039;s controls specification.&lt;br /&gt;
&lt;br /&gt;
= System architecture =&lt;br /&gt;
A BMS is structured in layers, typically divided into field level, automation level, and management level. This hierarchy allows data to flow from physical devices up to a central interface where operators can monitor and control building services.&lt;br /&gt;
&lt;br /&gt;
At the lowest level, field devices such as sensors, actuators, and meters are installed throughout the building to measure conditions and carry out control actions. These devices connect to controllers, which sit at the automation level and execute the logic that keeps systems running — adjusting valve positions, starting fans, and responding to changing conditions. At the top of the hierarchy, the head-end provides a central point of supervision where operators can view the entire system, acknowledge alarms, and analyse performance.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-architecture-diagram.png|thumb|center|450px|Typical BMS architecture showing field devices, controllers, and head-end]]&lt;br /&gt;
&lt;br /&gt;
This layered approach means that control happens locally at the controller level, so buildings continue to operate even if the head-end goes offline. The head-end is primarily for visibility and oversight rather than moment-to-moment control.&lt;br /&gt;
&lt;br /&gt;
== Field devices ==&lt;br /&gt;
Field devices are the physical components installed throughout a building that measure conditions or perform control actions. These include:&lt;br /&gt;
* Sensors (temperature, humidity, pressure, CO2, occupancy)&lt;br /&gt;
* Actuators (valve and damper motors)&lt;br /&gt;
* Variable speed drives&lt;br /&gt;
* Meters (electricity, gas, water, heat)&lt;br /&gt;
* Switches and relays&lt;br /&gt;
&lt;br /&gt;
Field devices connect to controllers either directly via hardwired inputs and outputs, or through a field bus network.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
Controllers are the processing units that execute control logic based on inputs from field devices. They make decisions locally, such as adjusting a valve position to maintain a setpoint, and communicate status and data to higher levels of the system.&lt;br /&gt;
&lt;br /&gt;
Common controller types include:&lt;br /&gt;
* Plant controllers — dedicated to specific equipment such as an air handling unit or chiller&lt;br /&gt;
* Zone controllers — manage multiple terminal units or spaces within an area&lt;br /&gt;
* Unitary controllers — smaller devices for single applications such as a fan coil unit&lt;br /&gt;
&lt;br /&gt;
Controllers typically operate autonomously, allowing the building to continue functioning even if the head-end is offline.&lt;br /&gt;
&lt;br /&gt;
== Head-end and supervision ==&lt;br /&gt;
The head-end is the central software platform where all system data is aggregated. It provides operators with a graphical interface to view live values, acknowledge alarms, adjust setpoints, and analyse trends.&lt;br /&gt;
&lt;br /&gt;
Key functions of the head-end include:&lt;br /&gt;
* System-wide visibility through graphics and dashboards&lt;br /&gt;
* Alarm management and event logging&lt;br /&gt;
* Historical data storage and trend analysis&lt;br /&gt;
* User access control and audit trails&lt;br /&gt;
* Scheduling and calendar functions&lt;br /&gt;
&lt;br /&gt;
The head-end may be installed on a local server or accessed via a web-based interface depending on the system configuration.&lt;br /&gt;
&lt;br /&gt;
=Communication protocols=&lt;br /&gt;
A communication protocol defines how devices and controllers exchange data within a BMS. Different protocols are used depending on the equipment manufacturer, system age, and project requirements. Understanding the basics of each protocol helps when diagnosing communication issues or integrating third-party systems.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The two most common protocols in modern BMS installations are BACnet and Modbus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[BACnet]]&#039;&#039;&#039; — the industry standard for building automation, developed specifically for BMS applications. BACnet supports a wide range of network types including BACnet/IP for head-end communication and BACnet MS/TP for field-level wiring. It allows different manufacturers&#039; equipment to communicate natively without the need for gateways, and provides standardised objects for common functions like analogue values, schedules, and alarms. One of the key advantages of BACnet is device discovery — when a BACnet device is connected to the network, the BMS can automatically detect it and retrieve a list of all available points along with their names, descriptions, and engineering units. This significantly reduces commissioning time compared to older protocols.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[Modbus]]&#039;&#039;&#039; — a simple, reliable protocol originally developed for industrial control. Modbus is widely supported by third-party equipment such as meters, variable speed drives, generators, and packaged plant. It uses a register-based data structure where each value is stored at a specific address, typically shown as a number (e.g. register 40001 for a supply air temperature). To integrate a Modbus device, the engineer must manually configure each point by referencing the manufacturer&#039;s register map, entering the correct address, data type, and any scaling factors. This process is more time-consuming than BACnet but remains common due to the wide availability of Modbus-compatible equipment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other protocols you may encounter include:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[LonWorks]]&#039;&#039;&#039; — a peer-to-peer protocol found in some legacy systems and lighting controls&lt;br /&gt;
* &#039;&#039;&#039;[[KNX]]&#039;&#039;&#039; — common in European installations, typically for lighting and blinds&lt;br /&gt;
* &#039;&#039;&#039;[[OPC]]&#039;&#039;&#039; — a software interface standard used to connect BMS with enterprise systems, historians, and other platforms&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-network-diagram.png|thumb|center|400px|Example of a BMS network showing different protocols at each level]]&lt;br /&gt;
&lt;br /&gt;
In many buildings, multiple protocols exist on the same project. Controllers may use one protocol to communicate with field devices and another to communicate with the head-end. Gateways and protocol converters are used to bridge between different systems where direct communication is not possible.&lt;br /&gt;
&lt;br /&gt;
For more detail on individual protocols, see the linked pages above.&lt;br /&gt;
&lt;br /&gt;
=Graphics and user interface=&lt;br /&gt;
The user interface is how operators interact with the BMS on a day-to-day basis. Most modern systems provide a graphical front-end accessed through a web browser or dedicated software client, allowing users to view live data, respond to alarms, and make adjustments without needing to access individual controllers directly.&lt;br /&gt;
&lt;br /&gt;
Graphics are typically organised in a hierarchy, starting with a site-wide overview and drilling down into individual plant rooms or equipment. Well-designed graphics should allow an operator to quickly understand the status of a system at a glance, identify faults, and navigate to the relevant area without unnecessary clicks.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-graphic-example.png|thumb|right|350px|Example of an AHU schematic graphic showing live values and equipment status]]&lt;br /&gt;
&lt;br /&gt;
A typical plant graphic includes a schematic representation of the equipment, live values such as temperatures and pressures, status indicators showing whether equipment is running or faulted, and command buttons for manual intervention. The quality of graphics varies significantly between projects — some systems use simple block diagrams while others include detailed animated schematics. Regardless of style, clarity and consistency are more important than visual complexity.&lt;br /&gt;
&lt;br /&gt;
==Alarms and events==&lt;br /&gt;
The alarm system notifies operators when something requires attention. Alarms are generated when a value exceeds a defined limit, equipment fails to respond, or a communication fault is detected.&lt;br /&gt;
&lt;br /&gt;
Alarms are typically categorised by priority. Critical alarms require immediate action, such as responding to a fire signal or major plant failure. High priority alarms indicate significant issues that should be addressed promptly. Medium and low priority alarms cover operational issues affecting comfort or efficiency, and advisory or maintenance reminders respectively.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-alarm-list-example.png|thumb|right|350px|Example of an alarm summary screen]]&lt;br /&gt;
&lt;br /&gt;
A well-configured alarm system helps operators focus on genuine issues rather than being overwhelmed by nuisance alerts. Alarm tuning — adjusting thresholds, delays, and priorities — is an ongoing task that should be refined after the building is occupied and operating normally.&lt;br /&gt;
&lt;br /&gt;
Events differ from alarms in that they are informational records rather than calls to action. Examples include equipment start/stop times, user logins, setpoint changes, and schedule overrides. Event logs provide an audit trail that can be useful for troubleshooting or verifying system behaviour.&lt;br /&gt;
==Trends and logs==&lt;br /&gt;
Trending is the process of recording point values over time. This data is essential for understanding how systems are performing, diagnosing faults, and identifying opportunities for improvement.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-trend-graph-example.png|thumb|right|350px|Example of a trend graph showing supply and return air temperatures over 24 hours]]&lt;br /&gt;
&lt;br /&gt;
Trend data is commonly used to verify that setpoints are being maintained, check equipment runtimes and cycling behaviour, investigate complaints, analyse energy consumption patterns, and support commissioning and seasonal tuning. Trends can be viewed as line graphs, tables, or exported for further analysis. The amount of historical data available depends on system configuration and storage capacity — critical points may be logged at short intervals and retained for months, while less important values may only be kept for a few days.&lt;br /&gt;
&lt;br /&gt;
When reviewing trends, it helps to overlay related values on the same graph. For example, comparing supply air temperature against setpoint and outside air temperature can quickly reveal whether control is stable or hunting.&lt;br /&gt;
=Commissioning and handover=&lt;br /&gt;
Commissioning is the process of verifying that the BMS has been installed correctly and operates as intended. It bridges the gap between installation and operational use, ensuring that all points are connected, controllers are programmed, and the system performs in line with the design specification.&lt;br /&gt;
&lt;br /&gt;
The process typically begins with point-to-point testing, where each physical connection between a field device and its controller is checked. This confirms that sensors are reading sensible values, actuators move in the correct direction, and status signals reflect actual equipment states. Any wiring faults, incorrect scaling, or labelling errors are identified and corrected at this stage.&lt;br /&gt;
&lt;br /&gt;
Once the physical layer is proven, functional testing examines the control sequences themselves. This involves simulating different operating conditions and observing how the system responds — checking that interlocks operate correctly, control loops are stable, and equipment starts and stops in the expected order. For complex plant such as air handling units or chiller systems, this may require coordination with other trades to run equipment under realistic loads.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-commissioning-checklist.png|thumb|right|300px|Example of a commissioning checklist used during point-to-point testing]]&lt;br /&gt;
&lt;br /&gt;
Witness testing is often carried out towards the end of commissioning with the client or their representative present. The purpose is to demonstrate that key sequences and functions work as specified before the system is formally accepted. Any outstanding issues are recorded on a snagging list for resolution prior to handover.&lt;br /&gt;
&lt;br /&gt;
Handover marks the transfer of responsibility from the installer to the client or facilities team. A complete handover package should include as-built drawings, controller programmes, point schedules, network diagrams, operating and maintenance manuals, and any training required for end users. The quality of this documentation has a lasting impact — a well-documented system is far easier to maintain and modify in the years that follow.&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
* [[BACnet]]&lt;br /&gt;
* [[Modbus]]&lt;br /&gt;
* [[HVAC]]&lt;br /&gt;
* [[Building automation]]&lt;br /&gt;
* [[Energy management]]&lt;br /&gt;
* [[LonWorks]]&lt;br /&gt;
* [[KNX]]&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=66</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=66"/>
		<updated>2026-01-04T00:29:50Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: /* System architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
== Common systems ==&lt;br /&gt;
A BMS typically monitors and controls mechanical, electrical, and environmental services across a facility. The scope varies by building type and project specification, but most platforms include the following:&lt;br /&gt;
* Heating, ventilation and air conditioning (HVAC)&lt;br /&gt;
* Chilled water and heating plant&lt;br /&gt;
* Lighting control&lt;br /&gt;
* Electrical monitoring and utility metering&lt;br /&gt;
* Water systems and pumps&lt;br /&gt;
* Fire and life safety interfaces&lt;br /&gt;
&lt;br /&gt;
Depending on the building&#039;s use and complexity, additional systems such as access control, lifts, escalators, solar PV, battery storage, and refrigeration may also be integrated. The extent of BMS coverage is typically defined during the design stage and documented in the project&#039;s controls specification.&lt;br /&gt;
&lt;br /&gt;
= System architecture =&lt;br /&gt;
A BMS is structured in layers, typically divided into field level, automation level, and management level. This hierarchy allows data to flow from physical devices up to a central interface where operators can monitor and control building services.&lt;br /&gt;
&lt;br /&gt;
At the lowest level, field devices such as sensors, actuators, and meters are installed throughout the building to measure conditions and carry out control actions. These devices connect to controllers, which sit at the automation level and execute the logic that keeps systems running — adjusting valve positions, starting fans, and responding to changing conditions. At the top of the hierarchy, the head-end provides a central point of supervision where operators can view the entire system, acknowledge alarms, and analyse performance.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-architecture-diagram.png|thumb|center|450px|Typical BMS architecture showing field devices, controllers, and head-end]]&lt;br /&gt;
&lt;br /&gt;
This layered approach means that control happens locally at the controller level, so buildings continue to operate even if the head-end goes offline. The head-end is primarily for visibility and oversight rather than moment-to-moment control.&lt;br /&gt;
&lt;br /&gt;
== Field devices ==&lt;br /&gt;
Field devices are the physical components installed throughout a building that measure conditions or perform control actions. These include:&lt;br /&gt;
* Sensors (temperature, humidity, pressure, CO2, occupancy)&lt;br /&gt;
* Actuators (valve and damper motors)&lt;br /&gt;
* Variable speed drives&lt;br /&gt;
* Meters (electricity, gas, water, heat)&lt;br /&gt;
* Switches and relays&lt;br /&gt;
&lt;br /&gt;
Field devices connect to controllers either directly via hardwired inputs and outputs, or through a field bus network.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
Controllers are the processing units that execute control logic based on inputs from field devices. They make decisions locally, such as adjusting a valve position to maintain a setpoint, and communicate status and data to higher levels of the system.&lt;br /&gt;
&lt;br /&gt;
Common controller types include:&lt;br /&gt;
* Plant controllers — dedicated to specific equipment such as an air handling unit or chiller&lt;br /&gt;
* Zone controllers — manage multiple terminal units or spaces within an area&lt;br /&gt;
* Unitary controllers — smaller devices for single applications such as a fan coil unit&lt;br /&gt;
&lt;br /&gt;
Controllers typically operate autonomously, allowing the building to continue functioning even if the head-end is offline.&lt;br /&gt;
&lt;br /&gt;
== Head-end and supervision ==&lt;br /&gt;
The head-end is the central software platform where all system data is aggregated. It provides operators with a graphical interface to view live values, acknowledge alarms, adjust setpoints, and analyse trends.&lt;br /&gt;
&lt;br /&gt;
Key functions of the head-end include:&lt;br /&gt;
* System-wide visibility through graphics and dashboards&lt;br /&gt;
* Alarm management and event logging&lt;br /&gt;
* Historical data storage and trend analysis&lt;br /&gt;
* User access control and audit trails&lt;br /&gt;
* Scheduling and calendar functions&lt;br /&gt;
&lt;br /&gt;
The head-end may be installed on a local server or accessed via a web-based interface depending on the system configuration.&lt;br /&gt;
&lt;br /&gt;
=Communication protocols=&lt;br /&gt;
A communication protocol defines how devices and controllers exchange data within a BMS. Different protocols are used depending on the equipment manufacturer, system age, and project requirements. Understanding the basics of each protocol helps when diagnosing communication issues or integrating third-party systems.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The two most common protocols in modern BMS installations are BACnet and Modbus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[BACnet]]&#039;&#039;&#039; — the industry standard for building automation, developed specifically for BMS applications. BACnet supports a wide range of network types including BACnet/IP for head-end communication and BACnet MS/TP for field-level wiring. It allows different manufacturers&#039; equipment to communicate natively without the need for gateways, and provides standardised objects for common functions like analogue values, schedules, and alarms. One of the key advantages of BACnet is device discovery — when a BACnet device is connected to the network, the BMS can automatically detect it and retrieve a list of all available points along with their names, descriptions, and engineering units. This significantly reduces commissioning time compared to older protocols.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[Modbus]]&#039;&#039;&#039; — a simple, reliable protocol originally developed for industrial control. Modbus is widely supported by third-party equipment such as meters, variable speed drives, generators, and packaged plant. It uses a register-based data structure where each value is stored at a specific address, typically shown as a number (e.g. register 40001 for a supply air temperature). To integrate a Modbus device, the engineer must manually configure each point by referencing the manufacturer&#039;s register map, entering the correct address, data type, and any scaling factors. This process is more time-consuming than BACnet but remains common due to the wide availability of Modbus-compatible equipment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other protocols you may encounter include:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[LonWorks]]&#039;&#039;&#039; — a peer-to-peer protocol found in some legacy systems and lighting controls&lt;br /&gt;
* &#039;&#039;&#039;[[KNX]]&#039;&#039;&#039; — common in European installations, typically for lighting and blinds&lt;br /&gt;
* &#039;&#039;&#039;[[OPC]]&#039;&#039;&#039; — a software interface standard used to connect BMS with enterprise systems, historians, and other platforms&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-network-diagram.png|thumb|center|400px|Example of a BMS network showing different protocols at each level]]&lt;br /&gt;
&lt;br /&gt;
In many buildings, multiple protocols exist on the same project. Controllers may use one protocol to communicate with field devices and another to communicate with the head-end. Gateways and protocol converters are used to bridge between different systems where direct communication is not possible.&lt;br /&gt;
&lt;br /&gt;
For more detail on individual protocols, see the linked pages above.&lt;br /&gt;
&lt;br /&gt;
=Graphics and user interface=&lt;br /&gt;
The user interface is how operators interact with the BMS on a day-to-day basis. Most modern systems provide a graphical front-end accessed through a web browser or dedicated software client, allowing users to view live data, respond to alarms, and make adjustments without needing to access individual controllers directly.&lt;br /&gt;
&lt;br /&gt;
Graphics are typically organised in a hierarchy, starting with a site-wide overview and drilling down into individual plant rooms or equipment. Well-designed graphics should allow an operator to quickly understand the status of a system at a glance, identify faults, and navigate to the relevant area without unnecessary clicks.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-graphic-example.png|thumb|right|350px|Example of an AHU schematic graphic showing live values and equipment status]]&lt;br /&gt;
&lt;br /&gt;
A typical plant graphic includes a schematic representation of the equipment, live values such as temperatures and pressures, status indicators showing whether equipment is running or faulted, and command buttons for manual intervention. The quality of graphics varies significantly between projects — some systems use simple block diagrams while others include detailed animated schematics. Regardless of style, clarity and consistency are more important than visual complexity.&lt;br /&gt;
&lt;br /&gt;
==Alarms and events==&lt;br /&gt;
The alarm system notifies operators when something requires attention. Alarms are generated when a value exceeds a defined limit, equipment fails to respond, or a communication fault is detected.&lt;br /&gt;
&lt;br /&gt;
Alarms are typically categorised by priority. Critical alarms require immediate action, such as responding to a fire signal or major plant failure. High priority alarms indicate significant issues that should be addressed promptly. Medium and low priority alarms cover operational issues affecting comfort or efficiency, and advisory or maintenance reminders respectively.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-alarm-list-example.png|thumb|right|350px|Example of an alarm summary screen]]&lt;br /&gt;
&lt;br /&gt;
A well-configured alarm system helps operators focus on genuine issues rather than being overwhelmed by nuisance alerts. Alarm tuning — adjusting thresholds, delays, and priorities — is an ongoing task that should be refined after the building is occupied and operating normally.&lt;br /&gt;
&lt;br /&gt;
Events differ from alarms in that they are informational records rather than calls to action. Examples include equipment start/stop times, user logins, setpoint changes, and schedule overrides. Event logs provide an audit trail that can be useful for troubleshooting or verifying system behaviour.&lt;br /&gt;
==Trends and logs==&lt;br /&gt;
Trending is the process of recording point values over time. This data is essential for understanding how systems are performing, diagnosing faults, and identifying opportunities for improvement.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-trend-graph-example.png|thumb|right|350px|Example of a trend graph showing supply and return air temperatures over 24 hours]]&lt;br /&gt;
&lt;br /&gt;
Trend data is commonly used to verify that setpoints are being maintained, check equipment runtimes and cycling behaviour, investigate complaints, analyse energy consumption patterns, and support commissioning and seasonal tuning. Trends can be viewed as line graphs, tables, or exported for further analysis. The amount of historical data available depends on system configuration and storage capacity — critical points may be logged at short intervals and retained for months, while less important values may only be kept for a few days.&lt;br /&gt;
&lt;br /&gt;
When reviewing trends, it helps to overlay related values on the same graph. For example, comparing supply air temperature against setpoint and outside air temperature can quickly reveal whether control is stable or hunting.&lt;br /&gt;
=Commissioning and handover=&lt;br /&gt;
=See also=&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=65</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=65"/>
		<updated>2026-01-04T00:28:20Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
== Common systems ==&lt;br /&gt;
A BMS typically monitors and controls mechanical, electrical, and environmental services across a facility. The scope varies by building type and project specification, but most platforms include the following:&lt;br /&gt;
* Heating, ventilation and air conditioning (HVAC)&lt;br /&gt;
* Chilled water and heating plant&lt;br /&gt;
* Lighting control&lt;br /&gt;
* Electrical monitoring and utility metering&lt;br /&gt;
* Water systems and pumps&lt;br /&gt;
* Fire and life safety interfaces&lt;br /&gt;
&lt;br /&gt;
Depending on the building&#039;s use and complexity, additional systems such as access control, lifts, escalators, solar PV, battery storage, and refrigeration may also be integrated. The extent of BMS coverage is typically defined during the design stage and documented in the project&#039;s controls specification.&lt;br /&gt;
&lt;br /&gt;
= System architecture =&lt;br /&gt;
&#039;&#039;&#039;A BMS is structured in layers, typically divided into field level, automation level, and management level. This hierarchy allows data to flow from physical devices up to a central interface where operators can monitor and control building services.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Field devices ==&lt;br /&gt;
Field devices are the physical components installed throughout a building that measure conditions or perform control actions. These include:&lt;br /&gt;
* Sensors (temperature, humidity, pressure, CO2, occupancy)&lt;br /&gt;
* Actuators (valve and damper motors)&lt;br /&gt;
* Variable speed drives&lt;br /&gt;
* Meters (electricity, gas, water, heat)&lt;br /&gt;
* Switches and relays&lt;br /&gt;
&lt;br /&gt;
Field devices connect to controllers either directly via hardwired inputs and outputs, or through a field bus network.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
Controllers are the processing units that execute control logic based on inputs from field devices. They make decisions locally, such as adjusting a valve position to maintain a setpoint, and communicate status and data to higher levels of the system.&lt;br /&gt;
&lt;br /&gt;
Common controller types include:&lt;br /&gt;
* Plant controllers — dedicated to specific equipment such as an air handling unit or chiller&lt;br /&gt;
* Zone controllers — manage multiple terminal units or spaces within an area&lt;br /&gt;
* Unitary controllers — smaller devices for single applications such as a fan coil unit&lt;br /&gt;
&lt;br /&gt;
Controllers typically operate autonomously, allowing the building to continue functioning even if the head-end is offline.&lt;br /&gt;
&lt;br /&gt;
== Head-end and supervision ==&lt;br /&gt;
The head-end is the central software platform where all system data is aggregated. It provides operators with a graphical interface to view live values, acknowledge alarms, adjust setpoints, and analyse trends.&lt;br /&gt;
&lt;br /&gt;
Key functions of the head-end include:&lt;br /&gt;
* System-wide visibility through graphics and dashboards&lt;br /&gt;
* Alarm management and event logging&lt;br /&gt;
* Historical data storage and trend analysis&lt;br /&gt;
* User access control and audit trails&lt;br /&gt;
* Scheduling and calendar functions&lt;br /&gt;
&lt;br /&gt;
The head-end may be installed on a local server or accessed via a web-based interface depending on the system configuration.&lt;br /&gt;
&lt;br /&gt;
=Communication protocols=&lt;br /&gt;
A communication protocol defines how devices and controllers exchange data within a BMS. Different protocols are used depending on the equipment manufacturer, system age, and project requirements. Understanding the basics of each protocol helps when diagnosing communication issues or integrating third-party systems.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The two most common protocols in modern BMS installations are BACnet and Modbus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[BACnet]]&#039;&#039;&#039; — the industry standard for building automation, developed specifically for BMS applications. BACnet supports a wide range of network types including BACnet/IP for head-end communication and BACnet MS/TP for field-level wiring. It allows different manufacturers&#039; equipment to communicate natively without the need for gateways, and provides standardised objects for common functions like analogue values, schedules, and alarms. One of the key advantages of BACnet is device discovery — when a BACnet device is connected to the network, the BMS can automatically detect it and retrieve a list of all available points along with their names, descriptions, and engineering units. This significantly reduces commissioning time compared to older protocols.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[Modbus]]&#039;&#039;&#039; — a simple, reliable protocol originally developed for industrial control. Modbus is widely supported by third-party equipment such as meters, variable speed drives, generators, and packaged plant. It uses a register-based data structure where each value is stored at a specific address, typically shown as a number (e.g. register 40001 for a supply air temperature). To integrate a Modbus device, the engineer must manually configure each point by referencing the manufacturer&#039;s register map, entering the correct address, data type, and any scaling factors. This process is more time-consuming than BACnet but remains common due to the wide availability of Modbus-compatible equipment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other protocols you may encounter include:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[LonWorks]]&#039;&#039;&#039; — a peer-to-peer protocol found in some legacy systems and lighting controls&lt;br /&gt;
* &#039;&#039;&#039;[[KNX]]&#039;&#039;&#039; — common in European installations, typically for lighting and blinds&lt;br /&gt;
* &#039;&#039;&#039;[[OPC]]&#039;&#039;&#039; — a software interface standard used to connect BMS with enterprise systems, historians, and other platforms&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-network-diagram.png|thumb|center|400px|Example of a BMS network showing different protocols at each level]]&lt;br /&gt;
&lt;br /&gt;
In many buildings, multiple protocols exist on the same project. Controllers may use one protocol to communicate with field devices and another to communicate with the head-end. Gateways and protocol converters are used to bridge between different systems where direct communication is not possible.&lt;br /&gt;
&lt;br /&gt;
For more detail on individual protocols, see the linked pages above.&lt;br /&gt;
&lt;br /&gt;
=Graphics and user interface=&lt;br /&gt;
The user interface is how operators interact with the BMS on a day-to-day basis. Most modern systems provide a graphical front-end accessed through a web browser or dedicated software client, allowing users to view live data, respond to alarms, and make adjustments without needing to access individual controllers directly.&lt;br /&gt;
&lt;br /&gt;
Graphics are typically organised in a hierarchy, starting with a site-wide overview and drilling down into individual plant rooms or equipment. Well-designed graphics should allow an operator to quickly understand the status of a system at a glance, identify faults, and navigate to the relevant area without unnecessary clicks.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-graphic-example.png|thumb|right|350px|Example of an AHU schematic graphic showing live values and equipment status]]&lt;br /&gt;
&lt;br /&gt;
A typical plant graphic includes a schematic representation of the equipment, live values such as temperatures and pressures, status indicators showing whether equipment is running or faulted, and command buttons for manual intervention. The quality of graphics varies significantly between projects — some systems use simple block diagrams while others include detailed animated schematics. Regardless of style, clarity and consistency are more important than visual complexity.&lt;br /&gt;
&lt;br /&gt;
==Alarms and events==&lt;br /&gt;
The alarm system notifies operators when something requires attention. Alarms are generated when a value exceeds a defined limit, equipment fails to respond, or a communication fault is detected.&lt;br /&gt;
&lt;br /&gt;
Alarms are typically categorised by priority. Critical alarms require immediate action, such as responding to a fire signal or major plant failure. High priority alarms indicate significant issues that should be addressed promptly. Medium and low priority alarms cover operational issues affecting comfort or efficiency, and advisory or maintenance reminders respectively.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-alarm-list-example.png|thumb|right|350px|Example of an alarm summary screen]]&lt;br /&gt;
&lt;br /&gt;
A well-configured alarm system helps operators focus on genuine issues rather than being overwhelmed by nuisance alerts. Alarm tuning — adjusting thresholds, delays, and priorities — is an ongoing task that should be refined after the building is occupied and operating normally.&lt;br /&gt;
&lt;br /&gt;
Events differ from alarms in that they are informational records rather than calls to action. Examples include equipment start/stop times, user logins, setpoint changes, and schedule overrides. Event logs provide an audit trail that can be useful for troubleshooting or verifying system behaviour.&lt;br /&gt;
==Trends and logs==&lt;br /&gt;
Trending is the process of recording point values over time. This data is essential for understanding how systems are performing, diagnosing faults, and identifying opportunities for improvement.&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-trend-graph-example.png|thumb|right|350px|Example of a trend graph showing supply and return air temperatures over 24 hours]]&lt;br /&gt;
&lt;br /&gt;
Trend data is commonly used to verify that setpoints are being maintained, check equipment runtimes and cycling behaviour, investigate complaints, analyse energy consumption patterns, and support commissioning and seasonal tuning. Trends can be viewed as line graphs, tables, or exported for further analysis. The amount of historical data available depends on system configuration and storage capacity — critical points may be logged at short intervals and retained for months, while less important values may only be kept for a few days.&lt;br /&gt;
&lt;br /&gt;
When reviewing trends, it helps to overlay related values on the same graph. For example, comparing supply air temperature against setpoint and outside air temperature can quickly reveal whether control is stable or hunting.&lt;br /&gt;
=Commissioning and handover=&lt;br /&gt;
=See also=&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=64</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=64"/>
		<updated>2026-01-04T00:27:03Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: /* System architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
== Common systems ==&lt;br /&gt;
A BMS typically monitors and controls mechanical, electrical, and environmental services across a facility. The scope varies by building type and project specification, but most platforms include the following:&lt;br /&gt;
* Heating, ventilation and air conditioning (HVAC)&lt;br /&gt;
* Chilled water and heating plant&lt;br /&gt;
* Lighting control&lt;br /&gt;
* Electrical monitoring and utility metering&lt;br /&gt;
* Water systems and pumps&lt;br /&gt;
* Fire and life safety interfaces&lt;br /&gt;
&lt;br /&gt;
Depending on the building&#039;s use and complexity, additional systems such as access control, lifts, escalators, solar PV, battery storage, and refrigeration may also be integrated. The extent of BMS coverage is typically defined during the design stage and documented in the project&#039;s controls specification.&lt;br /&gt;
&lt;br /&gt;
= System architecture =&lt;br /&gt;
&#039;&#039;&#039;A BMS is structured in layers, typically divided into field level, automation level, and management level. This hierarchy allows data to flow from physical devices up to a central interface where operators can monitor and control building services.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Field devices ==&lt;br /&gt;
Field devices are the physical components installed throughout a building that measure conditions or perform control actions. These include:&lt;br /&gt;
* Sensors (temperature, humidity, pressure, CO2, occupancy)&lt;br /&gt;
* Actuators (valve and damper motors)&lt;br /&gt;
* Variable speed drives&lt;br /&gt;
* Meters (electricity, gas, water, heat)&lt;br /&gt;
* Switches and relays&lt;br /&gt;
&lt;br /&gt;
Field devices connect to controllers either directly via hardwired inputs and outputs, or through a field bus network.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
Controllers are the processing units that execute control logic based on inputs from field devices. They make decisions locally, such as adjusting a valve position to maintain a setpoint, and communicate status and data to higher levels of the system.&lt;br /&gt;
&lt;br /&gt;
Common controller types include:&lt;br /&gt;
* Plant controllers — dedicated to specific equipment such as an air handling unit or chiller&lt;br /&gt;
* Zone controllers — manage multiple terminal units or spaces within an area&lt;br /&gt;
* Unitary controllers — smaller devices for single applications such as a fan coil unit&lt;br /&gt;
&lt;br /&gt;
Controllers typically operate autonomously, allowing the building to continue functioning even if the head-end is offline.&lt;br /&gt;
&lt;br /&gt;
== Head-end and supervision ==&lt;br /&gt;
The head-end is the central software platform where all system data is aggregated. It provides operators with a graphical interface to view live values, acknowledge alarms, adjust setpoints, and analyse trends.&lt;br /&gt;
&lt;br /&gt;
Key functions of the head-end include:&lt;br /&gt;
* System-wide visibility through graphics and dashboards&lt;br /&gt;
* Alarm management and event logging&lt;br /&gt;
* Historical data storage and trend analysis&lt;br /&gt;
* User access control and audit trails&lt;br /&gt;
* Scheduling and calendar functions&lt;br /&gt;
&lt;br /&gt;
The head-end may be installed on a local server or accessed via a web-based interface depending on the system configuration.&lt;br /&gt;
&lt;br /&gt;
=Communication protocols=&lt;br /&gt;
A communication protocol defines how devices and controllers exchange data within a BMS. Different protocols are used depending on the equipment manufacturer, system age, and project requirements. Understanding the basics of each protocol helps when diagnosing communication issues or integrating third-party systems.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The two most common protocols in modern BMS installations are BACnet and Modbus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[BACnet]]&#039;&#039;&#039; — the industry standard for building automation, developed specifically for BMS applications. BACnet supports a wide range of network types including BACnet/IP for head-end communication and BACnet MS/TP for field-level wiring. It allows different manufacturers&#039; equipment to communicate natively without the need for gateways, and provides standardised objects for common functions like analogue values, schedules, and alarms. One of the key advantages of BACnet is device discovery — when a BACnet device is connected to the network, the BMS can automatically detect it and retrieve a list of all available points along with their names, descriptions, and engineering units. This significantly reduces commissioning time compared to older protocols.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[Modbus]]&#039;&#039;&#039; — a simple, reliable protocol originally developed for industrial control. Modbus is widely supported by third-party equipment such as meters, variable speed drives, generators, and packaged plant. It uses a register-based data structure where each value is stored at a specific address, typically shown as a number (e.g. register 40001 for a supply air temperature). To integrate a Modbus device, the engineer must manually configure each point by referencing the manufacturer&#039;s register map, entering the correct address, data type, and any scaling factors. This process is more time-consuming than BACnet but remains common due to the wide availability of Modbus-compatible equipment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other protocols you may encounter include:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[LonWorks]]&#039;&#039;&#039; — a peer-to-peer protocol found in some legacy systems and lighting controls&lt;br /&gt;
* &#039;&#039;&#039;[[KNX]]&#039;&#039;&#039; — common in European installations, typically for lighting and blinds&lt;br /&gt;
* &#039;&#039;&#039;[[OPC]]&#039;&#039;&#039; — a software interface standard used to connect BMS with enterprise systems, historians, and other platforms&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-network-diagram.png|thumb|center|400px|Example of a BMS network showing different protocols at each level]]&lt;br /&gt;
&lt;br /&gt;
In many buildings, multiple protocols exist on the same project. Controllers may use one protocol to communicate with field devices and another to communicate with the head-end. Gateways and protocol converters are used to bridge between different systems where direct communication is not possible.&lt;br /&gt;
&lt;br /&gt;
For more detail on individual protocols, see the linked pages above.&lt;br /&gt;
&lt;br /&gt;
=Graphics and user interface=&lt;br /&gt;
==Alarms and events==&lt;br /&gt;
==Trends and logs==&lt;br /&gt;
=Commissioning and handover=&lt;br /&gt;
=See also=&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=63</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=63"/>
		<updated>2026-01-04T00:26:17Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
== Common systems ==&lt;br /&gt;
A BMS typically monitors and controls mechanical, electrical, and environmental services across a facility. The scope varies by building type and project specification, but most platforms include the following:&lt;br /&gt;
* Heating, ventilation and air conditioning (HVAC)&lt;br /&gt;
* Chilled water and heating plant&lt;br /&gt;
* Lighting control&lt;br /&gt;
* Electrical monitoring and utility metering&lt;br /&gt;
* Water systems and pumps&lt;br /&gt;
* Fire and life safety interfaces&lt;br /&gt;
&lt;br /&gt;
Depending on the building&#039;s use and complexity, additional systems such as access control, lifts, escalators, solar PV, battery storage, and refrigeration may also be integrated. The extent of BMS coverage is typically defined during the design stage and documented in the project&#039;s controls specification.&lt;br /&gt;
&lt;br /&gt;
= System architecture =&lt;br /&gt;
A BMS is structured in layers, typically divided into field level, automation level, and management level. This hierarchy allows data to flow from physical devices up to a central interface where operators can monitor and control building services.&lt;br /&gt;
&lt;br /&gt;
== Field devices ==&lt;br /&gt;
Field devices are the physical components installed throughout a building that measure conditions or perform control actions. These include:&lt;br /&gt;
* Sensors (temperature, humidity, pressure, CO2, occupancy)&lt;br /&gt;
* Actuators (valve and damper motors)&lt;br /&gt;
* Variable speed drives&lt;br /&gt;
* Meters (electricity, gas, water, heat)&lt;br /&gt;
* Switches and relays&lt;br /&gt;
&lt;br /&gt;
Field devices connect to controllers either directly via hardwired inputs and outputs, or through a field bus network.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
Controllers are the processing units that execute control logic based on inputs from field devices. They make decisions locally, such as adjusting a valve position to maintain a setpoint, and communicate status and data to higher levels of the system.&lt;br /&gt;
&lt;br /&gt;
Common controller types include:&lt;br /&gt;
* Plant controllers — dedicated to specific equipment such as an air handling unit or chiller&lt;br /&gt;
* Zone controllers — manage multiple terminal units or spaces within an area&lt;br /&gt;
* Unitary controllers — smaller devices for single applications such as a fan coil unit&lt;br /&gt;
&lt;br /&gt;
Controllers typically operate autonomously, allowing the building to continue functioning even if the head-end is offline.&lt;br /&gt;
&lt;br /&gt;
== Head-end and supervision ==&lt;br /&gt;
The head-end is the central software platform where all system data is aggregated. It provides operators with a graphical interface to view live values, acknowledge alarms, adjust setpoints, and analyse trends.&lt;br /&gt;
&lt;br /&gt;
Key functions of the head-end include:&lt;br /&gt;
* System-wide visibility through graphics and dashboards&lt;br /&gt;
* Alarm management and event logging&lt;br /&gt;
* Historical data storage and trend analysis&lt;br /&gt;
* User access control and audit trails&lt;br /&gt;
* Scheduling and calendar functions&lt;br /&gt;
&lt;br /&gt;
The head-end may be installed on a local server or accessed via a web-based interface depending on the system configuration.&lt;br /&gt;
&lt;br /&gt;
=Communication protocols=&lt;br /&gt;
A communication protocol defines how devices and controllers exchange data within a BMS. Different protocols are used depending on the equipment manufacturer, system age, and project requirements. Understanding the basics of each protocol helps when diagnosing communication issues or integrating third-party systems.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The two most common protocols in modern BMS installations are BACnet and Modbus:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[BACnet]]&#039;&#039;&#039; — the industry standard for building automation, developed specifically for BMS applications. BACnet supports a wide range of network types including BACnet/IP for head-end communication and BACnet MS/TP for field-level wiring. It allows different manufacturers&#039; equipment to communicate natively without the need for gateways, and provides standardised objects for common functions like analogue values, schedules, and alarms. One of the key advantages of BACnet is device discovery — when a BACnet device is connected to the network, the BMS can automatically detect it and retrieve a list of all available points along with their names, descriptions, and engineering units. This significantly reduces commissioning time compared to older protocols.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[Modbus]]&#039;&#039;&#039; — a simple, reliable protocol originally developed for industrial control. Modbus is widely supported by third-party equipment such as meters, variable speed drives, generators, and packaged plant. It uses a register-based data structure where each value is stored at a specific address, typically shown as a number (e.g. register 40001 for a supply air temperature). To integrate a Modbus device, the engineer must manually configure each point by referencing the manufacturer&#039;s register map, entering the correct address, data type, and any scaling factors. This process is more time-consuming than BACnet but remains common due to the wide availability of Modbus-compatible equipment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Other protocols you may encounter include:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;[[LonWorks]]&#039;&#039;&#039; — a peer-to-peer protocol found in some legacy systems and lighting controls&lt;br /&gt;
* &#039;&#039;&#039;[[KNX]]&#039;&#039;&#039; — common in European installations, typically for lighting and blinds&lt;br /&gt;
* &#039;&#039;&#039;[[OPC]]&#039;&#039;&#039; — a software interface standard used to connect BMS with enterprise systems, historians, and other platforms&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-network-diagram.png|thumb|center|400px|Example of a BMS network showing different protocols at each level]]&lt;br /&gt;
&lt;br /&gt;
In many buildings, multiple protocols exist on the same project. Controllers may use one protocol to communicate with field devices and another to communicate with the head-end. Gateways and protocol converters are used to bridge between different systems where direct communication is not possible.&lt;br /&gt;
&lt;br /&gt;
For more detail on individual protocols, see the linked pages above.&lt;br /&gt;
&lt;br /&gt;
=Graphics and user interface=&lt;br /&gt;
==Alarms and events==&lt;br /&gt;
==Trends and logs==&lt;br /&gt;
=Commissioning and handover=&lt;br /&gt;
=See also=&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=62</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=62"/>
		<updated>2026-01-04T00:25:56Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: /* Communication protocols */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
== Common systems ==&lt;br /&gt;
A BMS typically monitors and controls mechanical, electrical, and environmental services across a facility. The scope varies by building type and project specification, but most platforms include the following:&lt;br /&gt;
* Heating, ventilation and air conditioning (HVAC)&lt;br /&gt;
* Chilled water and heating plant&lt;br /&gt;
* Lighting control&lt;br /&gt;
* Electrical monitoring and utility metering&lt;br /&gt;
* Water systems and pumps&lt;br /&gt;
* Fire and life safety interfaces&lt;br /&gt;
&lt;br /&gt;
Depending on the building&#039;s use and complexity, additional systems such as access control, lifts, escalators, solar PV, battery storage, and refrigeration may also be integrated. The extent of BMS coverage is typically defined during the design stage and documented in the project&#039;s controls specification.&lt;br /&gt;
&lt;br /&gt;
= System architecture =&lt;br /&gt;
A BMS is structured in layers, typically divided into field level, automation level, and management level. This hierarchy allows data to flow from physical devices up to a central interface where operators can monitor and control building services.&lt;br /&gt;
&lt;br /&gt;
== Field devices ==&lt;br /&gt;
Field devices are the physical components installed throughout a building that measure conditions or perform control actions. These include:&lt;br /&gt;
* Sensors (temperature, humidity, pressure, CO2, occupancy)&lt;br /&gt;
* Actuators (valve and damper motors)&lt;br /&gt;
* Variable speed drives&lt;br /&gt;
* Meters (electricity, gas, water, heat)&lt;br /&gt;
* Switches and relays&lt;br /&gt;
&lt;br /&gt;
Field devices connect to controllers either directly via hardwired inputs and outputs, or through a field bus network.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
Controllers are the processing units that execute control logic based on inputs from field devices. They make decisions locally, such as adjusting a valve position to maintain a setpoint, and communicate status and data to higher levels of the system.&lt;br /&gt;
&lt;br /&gt;
Common controller types include:&lt;br /&gt;
* Plant controllers — dedicated to specific equipment such as an air handling unit or chiller&lt;br /&gt;
* Zone controllers — manage multiple terminal units or spaces within an area&lt;br /&gt;
* Unitary controllers — smaller devices for single applications such as a fan coil unit&lt;br /&gt;
&lt;br /&gt;
Controllers typically operate autonomously, allowing the building to continue functioning even if the head-end is offline.&lt;br /&gt;
&lt;br /&gt;
== Head-end and supervision ==&lt;br /&gt;
The head-end is the central software platform where all system data is aggregated. It provides operators with a graphical interface to view live values, acknowledge alarms, adjust setpoints, and analyse trends.&lt;br /&gt;
&lt;br /&gt;
Key functions of the head-end include:&lt;br /&gt;
* System-wide visibility through graphics and dashboards&lt;br /&gt;
* Alarm management and event logging&lt;br /&gt;
* Historical data storage and trend analysis&lt;br /&gt;
* User access control and audit trails&lt;br /&gt;
* Scheduling and calendar functions&lt;br /&gt;
&lt;br /&gt;
The head-end may be installed on a local server or accessed via a web-based interface depending on the system configuration.&lt;br /&gt;
&lt;br /&gt;
=Communication protocols=&lt;br /&gt;
A communication protocol defines how devices and controllers exchange data within a BMS. Different protocols are used depending on the equipment manufacturer, system age, and project requirements. Understanding the basics of each protocol helps when diagnosing communication issues or integrating third-party systems.&lt;br /&gt;
&lt;br /&gt;
The two most common protocols in modern BMS installations are BACnet and Modbus:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[BACnet]]&#039;&#039;&#039; — the industry standard for building automation, developed specifically for BMS applications. BACnet supports a wide range of network types including BACnet/IP for head-end communication and BACnet MS/TP for field-level wiring. It allows different manufacturers&#039; equipment to communicate natively without the need for gateways, and provides standardised objects for common functions like analogue values, schedules, and alarms. One of the key advantages of BACnet is device discovery — when a BACnet device is connected to the network, the BMS can automatically detect it and retrieve a list of all available points along with their names, descriptions, and engineering units. This significantly reduces commissioning time compared to older protocols.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[Modbus]]&#039;&#039;&#039; — a simple, reliable protocol originally developed for industrial control. Modbus is widely supported by third-party equipment such as meters, variable speed drives, generators, and packaged plant. It uses a register-based data structure where each value is stored at a specific address, typically shown as a number (e.g. register 40001 for a supply air temperature). To integrate a Modbus device, the engineer must manually configure each point by referencing the manufacturer&#039;s register map, entering the correct address, data type, and any scaling factors. This process is more time-consuming than BACnet but remains common due to the wide availability of Modbus-compatible equipment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other protocols you may encounter include:&lt;br /&gt;
* &#039;&#039;&#039;[[LonWorks]]&#039;&#039;&#039; — a peer-to-peer protocol found in some legacy systems and lighting controls&lt;br /&gt;
* &#039;&#039;&#039;[[KNX]]&#039;&#039;&#039; — common in European installations, typically for lighting and blinds&lt;br /&gt;
* &#039;&#039;&#039;[[OPC]]&#039;&#039;&#039; — a software interface standard used to connect BMS with enterprise systems, historians, and other platforms&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-network-diagram.png|thumb|center|400px|Example of a BMS network showing different protocols at each level]]&lt;br /&gt;
&lt;br /&gt;
In many buildings, multiple protocols exist on the same project. Controllers may use one protocol to communicate with field devices and another to communicate with the head-end. Gateways and protocol converters are used to bridge between different systems where direct communication is not possible.&lt;br /&gt;
&lt;br /&gt;
For more detail on individual protocols, see the linked pages above.&lt;br /&gt;
&lt;br /&gt;
=Graphics and user interface=&lt;br /&gt;
==Alarms and events==&lt;br /&gt;
==Trends and logs==&lt;br /&gt;
=Commissioning and handover=&lt;br /&gt;
=See also=&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=61</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=61"/>
		<updated>2026-01-04T00:25:34Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: /* Communication protocols */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
== Common systems ==&lt;br /&gt;
A BMS typically monitors and controls mechanical, electrical, and environmental services across a facility. The scope varies by building type and project specification, but most platforms include the following:&lt;br /&gt;
* Heating, ventilation and air conditioning (HVAC)&lt;br /&gt;
* Chilled water and heating plant&lt;br /&gt;
* Lighting control&lt;br /&gt;
* Electrical monitoring and utility metering&lt;br /&gt;
* Water systems and pumps&lt;br /&gt;
* Fire and life safety interfaces&lt;br /&gt;
&lt;br /&gt;
Depending on the building&#039;s use and complexity, additional systems such as access control, lifts, escalators, solar PV, battery storage, and refrigeration may also be integrated. The extent of BMS coverage is typically defined during the design stage and documented in the project&#039;s controls specification.&lt;br /&gt;
&lt;br /&gt;
= System architecture =&lt;br /&gt;
A BMS is structured in layers, typically divided into field level, automation level, and management level. This hierarchy allows data to flow from physical devices up to a central interface where operators can monitor and control building services.&lt;br /&gt;
&lt;br /&gt;
== Field devices ==&lt;br /&gt;
Field devices are the physical components installed throughout a building that measure conditions or perform control actions. These include:&lt;br /&gt;
* Sensors (temperature, humidity, pressure, CO2, occupancy)&lt;br /&gt;
* Actuators (valve and damper motors)&lt;br /&gt;
* Variable speed drives&lt;br /&gt;
* Meters (electricity, gas, water, heat)&lt;br /&gt;
* Switches and relays&lt;br /&gt;
&lt;br /&gt;
Field devices connect to controllers either directly via hardwired inputs and outputs, or through a field bus network.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
Controllers are the processing units that execute control logic based on inputs from field devices. They make decisions locally, such as adjusting a valve position to maintain a setpoint, and communicate status and data to higher levels of the system.&lt;br /&gt;
&lt;br /&gt;
Common controller types include:&lt;br /&gt;
* Plant controllers — dedicated to specific equipment such as an air handling unit or chiller&lt;br /&gt;
* Zone controllers — manage multiple terminal units or spaces within an area&lt;br /&gt;
* Unitary controllers — smaller devices for single applications such as a fan coil unit&lt;br /&gt;
&lt;br /&gt;
Controllers typically operate autonomously, allowing the building to continue functioning even if the head-end is offline.&lt;br /&gt;
&lt;br /&gt;
== Head-end and supervision ==&lt;br /&gt;
The head-end is the central software platform where all system data is aggregated. It provides operators with a graphical interface to view live values, acknowledge alarms, adjust setpoints, and analyse trends.&lt;br /&gt;
&lt;br /&gt;
Key functions of the head-end include:&lt;br /&gt;
* System-wide visibility through graphics and dashboards&lt;br /&gt;
* Alarm management and event logging&lt;br /&gt;
* Historical data storage and trend analysis&lt;br /&gt;
* User access control and audit trails&lt;br /&gt;
* Scheduling and calendar functions&lt;br /&gt;
&lt;br /&gt;
The head-end may be installed on a local server or accessed via a web-based interface depending on the system configuration.&lt;br /&gt;
&lt;br /&gt;
=Communication protocols=&lt;br /&gt;
A communication protocol defines how devices and controllers exchange data within a BMS. Different protocols are used depending on the equipment manufacturer, system age, and project requirements. Understanding the basics of each protocol helps when diagnosing communication issues or integrating third-party systems.&lt;br /&gt;
&lt;br /&gt;
The two most common protocols in modern BMS installations are BACnet and Modbus:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[BACnet]]&#039;&#039;&#039; — the industry standard for building automation, developed specifically for BMS applications. BACnet supports a wide range of network types including BACnet/IP for head-end communication and BACnet MS/TP for field-level wiring. It allows different manufacturers&#039; equipment to communicate natively without the need for gateways, and provides standardised objects for common functions like analogue values, schedules, and alarms. One of the key advantages of BACnet is device discovery — when a BACnet device is connected to the network, the BMS can automatically detect it and retrieve a list of all available points along with their names, descriptions, and engineering units. This significantly reduces commissioning time compared to older protocols.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[Modbus]]&#039;&#039;&#039; — a simple, reliable protocol originally developed for industrial control. Modbus is widely supported by third-party equipment such as meters, variable speed drives, generators, and packaged plant. It uses a register-based data structure where each value is stored at a specific address, typically shown as a number (e.g. register 40001 for a supply air temperature). To integrate a Modbus device, the engineer must manually configure each point by referencing the manufacturer&#039;s register map, entering the correct address, data type, and any scaling factors. This process is more time-consuming than BACnet but remains common due to the wide availability of Modbus-compatible equipment.&lt;br /&gt;
&lt;br /&gt;
[[File:Modbus-register-map-example.png|thumb|right|300px|Example of a Modbus register map from a meter manufacturer]]&lt;br /&gt;
&lt;br /&gt;
Other protocols you may encounter include:&lt;br /&gt;
* &#039;&#039;&#039;[[LonWorks]]&#039;&#039;&#039; — a peer-to-peer protocol found in some legacy systems and lighting controls&lt;br /&gt;
* &#039;&#039;&#039;[[KNX]]&#039;&#039;&#039; — common in European installations, typically for lighting and blinds&lt;br /&gt;
* &#039;&#039;&#039;[[OPC]]&#039;&#039;&#039; — a software interface standard used to connect BMS with enterprise systems, historians, and other platforms&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-network-diagram.png|thumb|center|400px|Example of a BMS network showing different protocols at each level]]&lt;br /&gt;
&lt;br /&gt;
In many buildings, multiple protocols exist on the same project. Controllers may use one protocol to communicate with field devices and another to communicate with the head-end. Gateways and protocol converters are used to bridge between different systems where direct communication is not possible.&lt;br /&gt;
&lt;br /&gt;
For more detail on individual protocols, see the linked pages above.&lt;br /&gt;
&lt;br /&gt;
=Graphics and user interface=&lt;br /&gt;
==Alarms and events==&lt;br /&gt;
==Trends and logs==&lt;br /&gt;
=Commissioning and handover=&lt;br /&gt;
=See also=&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=60</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=60"/>
		<updated>2026-01-04T00:22:10Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
== Common systems ==&lt;br /&gt;
A BMS typically monitors and controls mechanical, electrical, and environmental services across a facility. The scope varies by building type and project specification, but most platforms include the following:&lt;br /&gt;
* Heating, ventilation and air conditioning (HVAC)&lt;br /&gt;
* Chilled water and heating plant&lt;br /&gt;
* Lighting control&lt;br /&gt;
* Electrical monitoring and utility metering&lt;br /&gt;
* Water systems and pumps&lt;br /&gt;
* Fire and life safety interfaces&lt;br /&gt;
&lt;br /&gt;
Depending on the building&#039;s use and complexity, additional systems such as access control, lifts, escalators, solar PV, battery storage, and refrigeration may also be integrated. The extent of BMS coverage is typically defined during the design stage and documented in the project&#039;s controls specification.&lt;br /&gt;
&lt;br /&gt;
= System architecture =&lt;br /&gt;
A BMS is structured in layers, typically divided into field level, automation level, and management level. This hierarchy allows data to flow from physical devices up to a central interface where operators can monitor and control building services.&lt;br /&gt;
&lt;br /&gt;
== Field devices ==&lt;br /&gt;
Field devices are the physical components installed throughout a building that measure conditions or perform control actions. These include:&lt;br /&gt;
* Sensors (temperature, humidity, pressure, CO2, occupancy)&lt;br /&gt;
* Actuators (valve and damper motors)&lt;br /&gt;
* Variable speed drives&lt;br /&gt;
* Meters (electricity, gas, water, heat)&lt;br /&gt;
* Switches and relays&lt;br /&gt;
&lt;br /&gt;
Field devices connect to controllers either directly via hardwired inputs and outputs, or through a field bus network.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
Controllers are the processing units that execute control logic based on inputs from field devices. They make decisions locally, such as adjusting a valve position to maintain a setpoint, and communicate status and data to higher levels of the system.&lt;br /&gt;
&lt;br /&gt;
Common controller types include:&lt;br /&gt;
* Plant controllers — dedicated to specific equipment such as an air handling unit or chiller&lt;br /&gt;
* Zone controllers — manage multiple terminal units or spaces within an area&lt;br /&gt;
* Unitary controllers — smaller devices for single applications such as a fan coil unit&lt;br /&gt;
&lt;br /&gt;
Controllers typically operate autonomously, allowing the building to continue functioning even if the head-end is offline.&lt;br /&gt;
&lt;br /&gt;
== Head-end and supervision ==&lt;br /&gt;
The head-end is the central software platform where all system data is aggregated. It provides operators with a graphical interface to view live values, acknowledge alarms, adjust setpoints, and analyse trends.&lt;br /&gt;
&lt;br /&gt;
Key functions of the head-end include:&lt;br /&gt;
* System-wide visibility through graphics and dashboards&lt;br /&gt;
* Alarm management and event logging&lt;br /&gt;
* Historical data storage and trend analysis&lt;br /&gt;
* User access control and audit trails&lt;br /&gt;
* Scheduling and calendar functions&lt;br /&gt;
&lt;br /&gt;
The head-end may be installed on a local server or accessed via a web-based interface depending on the system configuration.&lt;br /&gt;
&lt;br /&gt;
=Communication protocols=&lt;br /&gt;
A communication protocol defines how devices and controllers exchange data within a BMS. Different protocols are used depending on the equipment manufacturer, system age, and project requirements. Understanding the basics of each protocol helps when diagnosing communication issues or integrating third-party systems.&lt;br /&gt;
&lt;br /&gt;
Common protocols encountered in BMS include:&lt;br /&gt;
* &#039;&#039;&#039;[[BACnet]]&#039;&#039;&#039; — an open standard widely used in commercial buildings, supporting multiple network types including IP and MS/TP&lt;br /&gt;
* &#039;&#039;&#039;[[Modbus]]&#039;&#039;&#039; — a simple and common protocol, often used for meters, variable speed drives, and packaged plant&lt;br /&gt;
* &#039;&#039;&#039;[[LonWorks]]&#039;&#039;&#039; — a peer-to-peer protocol used in some legacy systems and lighting controls&lt;br /&gt;
* &#039;&#039;&#039;[[KNX]]&#039;&#039;&#039; — typically found in European installations, often for lighting and blinds&lt;br /&gt;
* &#039;&#039;&#039;[[OPC]]&#039;&#039;&#039; — a software interface standard used to connect BMS with other enterprise systems and historians&lt;br /&gt;
&lt;br /&gt;
[[File:BMS-network-diagram.png|thumb|center|400px|Example of a BMS network showing different protocols at each level]]&lt;br /&gt;
&lt;br /&gt;
In many buildings, multiple protocols exist on the same project. Controllers may use one protocol to communicate with field devices and another to communicate with the head-end. Gateways and protocol converters are used to bridge between different systems where direct communication is not possible.&lt;br /&gt;
&lt;br /&gt;
For more detail on individual protocols, see the linked pages above.&lt;br /&gt;
=Graphics and user interface=&lt;br /&gt;
==Alarms and events==&lt;br /&gt;
==Trends and logs==&lt;br /&gt;
=Commissioning and handover=&lt;br /&gt;
=See also=&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=59</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=59"/>
		<updated>2026-01-04T00:21:17Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
== Common systems ==&lt;br /&gt;
A BMS typically monitors and controls mechanical, electrical, and environmental services across a facility. The scope varies by building type and project specification, but most platforms include the following:&lt;br /&gt;
* Heating, ventilation and air conditioning (HVAC)&lt;br /&gt;
* Chilled water and heating plant&lt;br /&gt;
* Lighting control&lt;br /&gt;
* Electrical monitoring and utility metering&lt;br /&gt;
* Water systems and pumps&lt;br /&gt;
* Fire and life safety interfaces&lt;br /&gt;
&lt;br /&gt;
Depending on the building&#039;s use and complexity, additional systems such as access control, lifts, escalators, solar PV, battery storage, and refrigeration may also be integrated. The extent of BMS coverage is typically defined during the design stage and documented in the project&#039;s controls specification.&lt;br /&gt;
&lt;br /&gt;
= System architecture =&lt;br /&gt;
A BMS is structured in layers, typically divided into field level, automation level, and management level. This hierarchy allows data to flow from physical devices up to a central interface where operators can monitor and control building services.&lt;br /&gt;
&lt;br /&gt;
== Field devices ==&lt;br /&gt;
Field devices are the physical components installed throughout a building that measure conditions or perform control actions. These include:&lt;br /&gt;
* Sensors (temperature, humidity, pressure, CO2, occupancy)&lt;br /&gt;
* Actuators (valve and damper motors)&lt;br /&gt;
* Variable speed drives&lt;br /&gt;
* Meters (electricity, gas, water, heat)&lt;br /&gt;
* Switches and relays&lt;br /&gt;
&lt;br /&gt;
Field devices connect to controllers either directly via hardwired inputs and outputs, or through a field bus network.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
Controllers are the processing units that execute control logic based on inputs from field devices. They make decisions locally, such as adjusting a valve position to maintain a setpoint, and communicate status and data to higher levels of the system.&lt;br /&gt;
&lt;br /&gt;
Common controller types include:&lt;br /&gt;
* Plant controllers — dedicated to specific equipment such as an air handling unit or chiller&lt;br /&gt;
* Zone controllers — manage multiple terminal units or spaces within an area&lt;br /&gt;
* Unitary controllers — smaller devices for single applications such as a fan coil unit&lt;br /&gt;
&lt;br /&gt;
Controllers typically operate autonomously, allowing the building to continue functioning even if the head-end is offline.&lt;br /&gt;
&lt;br /&gt;
== Head-end and supervision ==&lt;br /&gt;
The head-end is the central software platform where all system data is aggregated. It provides operators with a graphical interface to view live values, acknowledge alarms, adjust setpoints, and analyse trends.&lt;br /&gt;
&lt;br /&gt;
Key functions of the head-end include:&lt;br /&gt;
* System-wide visibility through graphics and dashboards&lt;br /&gt;
* Alarm management and event logging&lt;br /&gt;
* Historical data storage and trend analysis&lt;br /&gt;
* User access control and audit trails&lt;br /&gt;
* Scheduling and calendar functions&lt;br /&gt;
&lt;br /&gt;
The head-end may be installed on a local server or accessed via a web-based interface depending on the system configuration.&lt;br /&gt;
&lt;br /&gt;
=Communication protocols=&lt;br /&gt;
=Graphics and user interface=&lt;br /&gt;
==Alarms and events==&lt;br /&gt;
==Trends and logs==&lt;br /&gt;
=Commissioning and handover=&lt;br /&gt;
=See also=&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=58</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=58"/>
		<updated>2026-01-04T00:19:38Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: /* Common Systems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
== Common systems ==&lt;br /&gt;
A BMS typically monitors and controls mechanical, electrical, and environmental services across a facility. The scope varies by building type and project specification, but most platforms include the following:&lt;br /&gt;
* Heating, ventilation and air conditioning (HVAC)&lt;br /&gt;
* Chilled water and heating plant&lt;br /&gt;
* Lighting control&lt;br /&gt;
* Electrical monitoring and utility metering&lt;br /&gt;
* Water systems and pumps&lt;br /&gt;
* Fire and life safety interfaces&lt;br /&gt;
&lt;br /&gt;
Depending on the building&#039;s use and complexity, additional systems such as access control, lifts, escalators, solar PV, battery storage, and refrigeration may also be integrated. The extent of BMS coverage is typically defined during the design stage and documented in the project&#039;s controls specification.&lt;br /&gt;
&lt;br /&gt;
= System architecture =&lt;br /&gt;
A BMS is structured in layers, typically divided into field level, automation level, and management level. This hierarchy allows data to flow from physical devices up to a central interface where operators can monitor and control building services.&lt;br /&gt;
&lt;br /&gt;
== Field devices ==&lt;br /&gt;
Field devices are the physical components installed throughout a building that measure conditions or perform control actions. These include:&lt;br /&gt;
* Sensors (temperature, humidity, pressure, CO2, occupancy)&lt;br /&gt;
* Actuators (valve and damper motors)&lt;br /&gt;
* Variable speed drives&lt;br /&gt;
* Meters (electricity, gas, water, heat)&lt;br /&gt;
* Switches and relays&lt;br /&gt;
&lt;br /&gt;
Field devices connect to controllers either directly via hardwired inputs and outputs, or through a field bus network.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
Controllers are the processing units that execute control logic based on inputs from field devices. They make decisions locally, such as adjusting a valve position to maintain a setpoint, and communicate status and data to higher levels of the system.&lt;br /&gt;
&lt;br /&gt;
Common controller types include:&lt;br /&gt;
* Plant controllers — dedicated to specific equipment such as an air handling unit or chiller&lt;br /&gt;
* Zone controllers — manage multiple terminal units or spaces within an area&lt;br /&gt;
* Unitary controllers — smaller devices for single applications such as a fan coil unit&lt;br /&gt;
&lt;br /&gt;
Controllers typically operate autonomously, allowing the building to continue functioning even if the head-end is offline.&lt;br /&gt;
&lt;br /&gt;
== Head-end and supervision ==&lt;br /&gt;
The head-end is the central software platform where all system data is aggregated. It provides operators with a graphical interface to view live values, acknowledge alarms, adjust setpoints, and analyse trends.&lt;br /&gt;
&lt;br /&gt;
Key functions of the head-end include:&lt;br /&gt;
* System-wide visibility through graphics and dashboards&lt;br /&gt;
* Alarm management and event logging&lt;br /&gt;
* Historical data storage and trend analysis&lt;br /&gt;
* User access control and audit trails&lt;br /&gt;
* Scheduling and calendar functions&lt;br /&gt;
&lt;br /&gt;
The head-end may be installed on a local server or accessed via a web-based interface depending on the system configuration.&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=57</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=57"/>
		<updated>2026-01-04T00:16:54Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your Role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
== Common Systems ==&lt;br /&gt;
A BMS typically monitors and controls mechanical, electrical, and environmental services across a facility. The scope varies by building type and project specification, but most platforms include the following:&lt;br /&gt;
* Heating, ventilation and air conditioning (HVAC)&lt;br /&gt;
* Chilled water and heating plant&lt;br /&gt;
* Lighting control&lt;br /&gt;
* Electrical monitoring and utility metering&lt;br /&gt;
* Water systems and pumps&lt;br /&gt;
* Fire and life safety interfaces&lt;br /&gt;
&lt;br /&gt;
Depending on the building&#039;s use and complexity, additional systems such as access control, lifts, escalators, solar PV, battery storage, and refrigeration may also be integrated. The extent of BMS coverage is typically defined during the design stage and documented in the project&#039;s controls specification.&lt;br /&gt;
&lt;br /&gt;
= System architecture =&lt;br /&gt;
A BMS is structured in layers, typically divided into field level, automation level, and management level. This hierarchy allows data to flow from physical devices up to a central interface where operators can monitor and control building services.&lt;br /&gt;
&lt;br /&gt;
== Field devices ==&lt;br /&gt;
Field devices are the physical components installed throughout a building that measure conditions or perform control actions. These include:&lt;br /&gt;
* Sensors (temperature, humidity, pressure, CO2, occupancy)&lt;br /&gt;
* Actuators (valve and damper motors)&lt;br /&gt;
* Variable speed drives&lt;br /&gt;
* Meters (electricity, gas, water, heat)&lt;br /&gt;
* Switches and relays&lt;br /&gt;
&lt;br /&gt;
Field devices connect to controllers either directly via hardwired inputs and outputs, or through a field bus network.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
Controllers are the processing units that execute control logic based on inputs from field devices. They make decisions locally, such as adjusting a valve position to maintain a setpoint, and communicate status and data to higher levels of the system.&lt;br /&gt;
&lt;br /&gt;
Common controller types include:&lt;br /&gt;
* Plant controllers — dedicated to specific equipment such as an air handling unit or chiller&lt;br /&gt;
* Zone controllers — manage multiple terminal units or spaces within an area&lt;br /&gt;
* Unitary controllers — smaller devices for single applications such as a fan coil unit&lt;br /&gt;
&lt;br /&gt;
Controllers typically operate autonomously, allowing the building to continue functioning even if the head-end is offline.&lt;br /&gt;
&lt;br /&gt;
== Head-end and supervision ==&lt;br /&gt;
The head-end is the central software platform where all system data is aggregated. It provides operators with a graphical interface to view live values, acknowledge alarms, adjust setpoints, and analyse trends.&lt;br /&gt;
&lt;br /&gt;
Key functions of the head-end include:&lt;br /&gt;
* System-wide visibility through graphics and dashboards&lt;br /&gt;
* Alarm management and event logging&lt;br /&gt;
* Historical data storage and trend analysis&lt;br /&gt;
* User access control and audit trails&lt;br /&gt;
* Scheduling and calendar functions&lt;br /&gt;
&lt;br /&gt;
The head-end may be installed on a local server or accessed via a web-based interface depending on the system configuration.&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=56</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=56"/>
		<updated>2026-01-04T00:13:05Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: /* Common Systems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your Role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
== Common systems ==&lt;br /&gt;
A BMS typically monitors and controls mechanical, electrical, and environmental services across a facility. The scope varies by building type and project specification, but most platforms include the following:&lt;br /&gt;
* Heating, ventilation and air conditioning (HVAC)&lt;br /&gt;
* Chilled water and heating plant&lt;br /&gt;
* Lighting control&lt;br /&gt;
* Electrical monitoring and utility metering&lt;br /&gt;
* Water systems and pumps&lt;br /&gt;
* Fire and life safety interfaces&lt;br /&gt;
&lt;br /&gt;
Depending on the building&#039;s use and complexity, additional systems such as access control, lifts, escalators, solar PV, battery storage, and refrigeration may also be integrated. The extent of BMS coverage is typically defined during the design stage and documented in the project&#039;s controls specification.&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=HVAC_Systems_Overview&amp;diff=55</id>
		<title>HVAC Systems Overview</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=HVAC_Systems_Overview&amp;diff=55"/>
		<updated>2025-12-25T17:03:36Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are many different types of HVAC systems. Here you can find most of them categorized into their respective categories.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 90%;&amp;quot;&lt;br /&gt;
|valign=top|&amp;lt;div style=&amp;quot;width: 100%; float:left; background-color: #EEEEFF; border:1px solid #BFB6A3;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;margin-left:15px; margin-top:5px; &amp;quot;&amp;gt;&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot; style=&amp;quot;background-color: #EEEEFF;&amp;quot;&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:AHU.png|link=Air Handling Units (AHU)|Air Handling Units (AHU)]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:BGloves.png|link=Clothing and Accessories|Clothing and Accessories]] [[File:Hazard.png|link=Clothing and Accessories|Clothing and Accessories]] [[Clothing and Accessories]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Vendsnack.gif|link=Vending machines|Vending Machines]] [[File:Vendyoutool.png|link=Vending machines|Vending Machines]] [[Vending machines|Vending Machines]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Plant-21.png|link=Posters|Posters]] [[File:Ntposter.png|link=Posters|Posters]] [[Posters|Station Decorations]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Id_regular.png|link=Identification Card|Identification Cards]] [[File:Id_gold.png|link=Identification Card|Identification Cards]] [[Identification Card]]s&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Pda_cartrige.png|link=PDA|PDAs]] [[File:Normalpda.gif|link=PDA|PDAs]] [[PDA]]s&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
 |width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Wrench.png|link=Engineering items|Engineering items]] [[File:SMES_Charging.gif|link=Engineering items|Engineering items]] [[Engineering items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:OxygenTank.png|link=Atmospherics items|Atmospherics items]] [[File:Canister.png|link=Atmospherics items|Atmospherics items]] [[Atmospherics items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:SMed.png|link=Medical items|Medical items]] [[File:Health_analyzer.gif|link=Medical items|Medical items]] [[Medical items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Disk.gif|link=Research items|Research items]] [[File:Icard.png|link=Research items|Research items]] [[Research items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Requests_Console.gif|link=Computers|Computers]] [[File:Comm_0.gif|link=Computers|Computers]] [[Computers]]&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Handcuffs.png|link=Security items|Security items]] [[File:StunBaton.gif|link=Security items|Security items]] [[Security items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Emag.png|link=Syndicate Items|Syndicate Items]] [[File:Sword.gif|link=Syndicate Items|Syndicate Items]] [[Syndicate Items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Cablecuffs.png|link=Makeshift weapons|Makeshift weapons]] [[File:Stunprod.png|link=Makeshift weapons|Makeshift weapons]] [[Makeshift weapons]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:C20r.png|link=Guide to Combat#Ranged_Weapons|Ranged Weapons]] [[File:Pulserifle.png|link=Guide to Combat#Ranged_Weapons|Ranged Weapons]] [[Guide to Combat#Ranged_Weapons|Ranged Weapons]]&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Goldmedal.png|link=High-risk items|High-risk items]] [[File:Captaingun.png|link=High-risk items|High-risk items]] [[High-risk items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Id_gold.png|link=Guide_to_Head_of_Staff_Equipment|Head of Staff equipment]] [[File:Ian.PNG|link=Guide_to_Head_of_Staff_Equipment|Head of Staff equipment]] [[Guide_to_Head_of_Staff_Equipment|Head of Staff equipment]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Objects]]&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=HVAC_Systems_Overview&amp;diff=54</id>
		<title>HVAC Systems Overview</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=HVAC_Systems_Overview&amp;diff=54"/>
		<updated>2025-12-24T21:46:30Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are many different types of HVAC systems. Here you can find most of them categorized into their respective categories.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 90%;&amp;quot;&lt;br /&gt;
|valign=top|&amp;lt;div style=&amp;quot;width: 100%; float:left; background-color: #EEEEFF; border:1px solid #BFB6A3;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;margin-left:15px; margin-top:5px; &amp;quot;&amp;gt;&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot; style=&amp;quot;background-color: #EEEEFF;&amp;quot;&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:NPA.png|link=General items|General items]] [[File:Locker.png|link=General items|General items]] [[General items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:BGloves.png|link=Clothing and Accessories|Clothing and Accessories]] [[File:Hazard.png|link=Clothing and Accessories|Clothing and Accessories]] [[Clothing and Accessories]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Vendsnack.gif|link=Vending machines|Vending Machines]] [[File:Vendyoutool.png|link=Vending machines|Vending Machines]] [[Vending machines|Vending Machines]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Plant-21.png|link=Posters|Posters]] [[File:Ntposter.png|link=Posters|Posters]] [[Posters|Station Decorations]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Id_regular.png|link=Identification Card|Identification Cards]] [[File:Id_gold.png|link=Identification Card|Identification Cards]] [[Identification Card]]s&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Pda_cartrige.png|link=PDA|PDAs]] [[File:Normalpda.gif|link=PDA|PDAs]] [[PDA]]s&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
 |width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Wrench.png|link=Engineering items|Engineering items]] [[File:SMES_Charging.gif|link=Engineering items|Engineering items]] [[Engineering items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:OxygenTank.png|link=Atmospherics items|Atmospherics items]] [[File:Canister.png|link=Atmospherics items|Atmospherics items]] [[Atmospherics items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:SMed.png|link=Medical items|Medical items]] [[File:Health_analyzer.gif|link=Medical items|Medical items]] [[Medical items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Disk.gif|link=Research items|Research items]] [[File:Icard.png|link=Research items|Research items]] [[Research items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Requests_Console.gif|link=Computers|Computers]] [[File:Comm_0.gif|link=Computers|Computers]] [[Computers]]&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Handcuffs.png|link=Security items|Security items]] [[File:StunBaton.gif|link=Security items|Security items]] [[Security items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Emag.png|link=Syndicate Items|Syndicate Items]] [[File:Sword.gif|link=Syndicate Items|Syndicate Items]] [[Syndicate Items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Cablecuffs.png|link=Makeshift weapons|Makeshift weapons]] [[File:Stunprod.png|link=Makeshift weapons|Makeshift weapons]] [[Makeshift weapons]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:C20r.png|link=Guide to Combat#Ranged_Weapons|Ranged Weapons]] [[File:Pulserifle.png|link=Guide to Combat#Ranged_Weapons|Ranged Weapons]] [[Guide to Combat#Ranged_Weapons|Ranged Weapons]]&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Goldmedal.png|link=High-risk items|High-risk items]] [[File:Captaingun.png|link=High-risk items|High-risk items]] [[High-risk items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Id_gold.png|link=Guide_to_Head_of_Staff_Equipment|Head of Staff equipment]] [[File:Ian.PNG|link=Guide_to_Head_of_Staff_Equipment|Head of Staff equipment]] [[Guide_to_Head_of_Staff_Equipment|Head of Staff equipment]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Objects]]&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=HVAC_Systems_Overview&amp;diff=53</id>
		<title>HVAC Systems Overview</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=HVAC_Systems_Overview&amp;diff=53"/>
		<updated>2025-12-24T21:45:12Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are many items on the Station (and outside it). Here you can find most of them categorized into their respective categories.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 90%;&amp;quot;&lt;br /&gt;
|valign=top|&amp;lt;div style=&amp;quot;width: 100%; float:left; background-color: #EEEEFF; border:1px solid #BFB6A3;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;margin-left:15px; margin-top:5px; &amp;quot;&amp;gt;&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot; style=&amp;quot;background-color: #EEEEFF;&amp;quot;&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:NPA.png|link=General items|General items]] [[File:Locker.png|link=General items|General items]] [[General items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:BGloves.png|link=Clothing and Accessories|Clothing and Accessories]] [[File:Hazard.png|link=Clothing and Accessories|Clothing and Accessories]] [[Clothing and Accessories]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Vendsnack.gif|link=Vending machines|Vending Machines]] [[File:Vendyoutool.png|link=Vending machines|Vending Machines]] [[Vending machines|Vending Machines]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Plant-21.png|link=Posters|Posters]] [[File:Ntposter.png|link=Posters|Posters]] [[Posters|Station Decorations]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Id_regular.png|link=Identification Card|Identification Cards]] [[File:Id_gold.png|link=Identification Card|Identification Cards]] [[Identification Card]]s&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Pda_cartrige.png|link=PDA|PDAs]] [[File:Normalpda.gif|link=PDA|PDAs]] [[PDA]]s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:HVAC_Systems_Overview]]&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=HVAC_Systems_Overview&amp;diff=52</id>
		<title>HVAC Systems Overview</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=HVAC_Systems_Overview&amp;diff=52"/>
		<updated>2025-12-24T21:44:39Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are many items on the Station (and outside it). Here you can find most of them categorized into their respective categories.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 90%;&amp;quot;&lt;br /&gt;
|valign=top|&amp;lt;div style=&amp;quot;width: 100%; float:left; background-color: #EEEEFF; border:1px solid #BFB6A3;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;margin-left:15px; margin-top:5px; &amp;quot;&amp;gt;&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot; style=&amp;quot;background-color: #EEEEFF;&amp;quot;&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:NPA.png|link=General items|General items]] [[File:Locker.png|link=General items|General items]] [[General items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:BGloves.png|link=Clothing and Accessories|Clothing and Accessories]] [[File:Hazard.png|link=Clothing and Accessories|Clothing and Accessories]] [[Clothing and Accessories]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Vendsnack.gif|link=Vending machines|Vending Machines]] [[File:Vendyoutool.png|link=Vending machines|Vending Machines]] [[Vending machines|Vending Machines]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Plant-21.png|link=Posters|Posters]] [[File:Ntposter.png|link=Posters|Posters]] [[Posters|Station Decorations]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Id_regular.png|link=Identification Card|Identification Cards]] [[File:Id_gold.png|link=Identification Card|Identification Cards]] [[Identification Card]]s&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Pda_cartrige.png|link=PDA|PDAs]] [[File:Normalpda.gif|link=PDA|PDAs]] [[PDA]]s&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
 |width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Wrench.png|link=Engineering items|Engineering items]] [[File:SMES_Charging.gif|link=Engineering items|Engineering items]] [[Engineering items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:OxygenTank.png|link=Atmospherics items|Atmospherics items]] [[File:Canister.png|link=Atmospherics items|Atmospherics items]] [[Atmospherics items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:SMed.png|link=Medical items|Medical items]] [[File:Health_analyzer.gif|link=Medical items|Medical items]] [[Medical items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Disk.gif|link=Research items|Research items]] [[File:Icard.png|link=Research items|Research items]] [[Research items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Requests_Console.gif|link=Computers|Computers]] [[File:Comm_0.gif|link=Computers|Computers]] [[Computers]]&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Handcuffs.png|link=Security items|Security items]] [[File:StunBaton.gif|link=Security items|Security items]] [[Security items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Emag.png|link=Syndicate Items|Syndicate Items]] [[File:Sword.gif|link=Syndicate Items|Syndicate Items]] [[Syndicate Items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Cablecuffs.png|link=Makeshift weapons|Makeshift weapons]] [[File:Stunprod.png|link=Makeshift weapons|Makeshift weapons]] [[Makeshift weapons]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:C20r.png|link=Guide to Combat#Ranged_Weapons|Ranged Weapons]] [[File:Pulserifle.png|link=Guide to Combat#Ranged_Weapons|Ranged Weapons]] [[Guide to Combat#Ranged_Weapons|Ranged Weapons]]&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Goldmedal.png|link=High-risk items|High-risk items]] [[File:Captaingun.png|link=High-risk items|High-risk items]] [[High-risk items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Id_gold.png|link=Guide_to_Head_of_Staff_Equipment|Head of Staff equipment]] [[File:Ian.PNG|link=Guide_to_Head_of_Staff_Equipment|Head of Staff equipment]] [[Guide_to_Head_of_Staff_Equipment|Head of Staff equipment]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:HVAC_Systems_Overview]]&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=HVAC_Systems_Overview&amp;diff=51</id>
		<title>HVAC Systems Overview</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=HVAC_Systems_Overview&amp;diff=51"/>
		<updated>2025-12-24T21:44:22Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: Created page with &amp;quot;There are many items on the Station (and outside it). Here you can find most of them categorized into their respective categories.  {| style=&amp;quot;width: 90%;&amp;quot; |valign=top|&amp;lt;div style=&amp;quot;width: 100%; float:left; background-color: #EEEEFF; border:1px solid #BFB6A3;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;margin-left:15px; margin-top:5px; &amp;quot;&amp;gt; {|width=&amp;quot;100%&amp;quot; style=&amp;quot;background-color: #EEEEFF;&amp;quot; |width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt; General items File:Locker.png|link=Gen...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are many items on the Station (and outside it). Here you can find most of them categorized into their respective categories.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width: 90%;&amp;quot;&lt;br /&gt;
|valign=top|&amp;lt;div style=&amp;quot;width: 100%; float:left; background-color: #EEEEFF; border:1px solid #BFB6A3;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;margin-left:15px; margin-top:5px; &amp;quot;&amp;gt;&lt;br /&gt;
{|width=&amp;quot;100%&amp;quot; style=&amp;quot;background-color: #EEEEFF;&amp;quot;&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:NPA.png|link=General items|General items]] [[File:Locker.png|link=General items|General items]] [[General items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:BGloves.png|link=Clothing and Accessories|Clothing and Accessories]] [[File:Hazard.png|link=Clothing and Accessories|Clothing and Accessories]] [[Clothing and Accessories]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Vendsnack.gif|link=Vending machines|Vending Machines]] [[File:Vendyoutool.png|link=Vending machines|Vending Machines]] [[Vending machines|Vending Machines]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Plant-21.png|link=Posters|Posters]] [[File:Ntposter.png|link=Posters|Posters]] [[Posters|Station Decorations]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Id_regular.png|link=Identification Card|Identification Cards]] [[File:Id_gold.png|link=Identification Card|Identification Cards]] [[Identification Card]]s&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Pda_cartrige.png|link=PDA|PDAs]] [[File:Normalpda.gif|link=PDA|PDAs]] [[PDA]]s&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
 |width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Wrench.png|link=Engineering items|Engineering items]] [[File:SMES_Charging.gif|link=Engineering items|Engineering items]] [[Engineering items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:OxygenTank.png|link=Atmospherics items|Atmospherics items]] [[File:Canister.png|link=Atmospherics items|Atmospherics items]] [[Atmospherics items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:SMed.png|link=Medical items|Medical items]] [[File:Health_analyzer.gif|link=Medical items|Medical items]] [[Medical items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Disk.gif|link=Research items|Research items]] [[File:Icard.png|link=Research items|Research items]] [[Research items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Requests_Console.gif|link=Computers|Computers]] [[File:Comm_0.gif|link=Computers|Computers]] [[Computers]]&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Handcuffs.png|link=Security items|Security items]] [[File:StunBaton.gif|link=Security items|Security items]] [[Security items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Emag.png|link=Syndicate Items|Syndicate Items]] [[File:Sword.gif|link=Syndicate Items|Syndicate Items]] [[Syndicate Items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Cablecuffs.png|link=Makeshift weapons|Makeshift weapons]] [[File:Stunprod.png|link=Makeshift weapons|Makeshift weapons]] [[Makeshift weapons]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:C20r.png|link=Guide to Combat#Ranged_Weapons|Ranged Weapons]] [[File:Pulserifle.png|link=Guide to Combat#Ranged_Weapons|Ranged Weapons]] [[Guide to Combat#Ranged_Weapons|Ranged Weapons]]&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
|width=&amp;quot;25%&amp;quot; valign=&amp;quot;top&amp;quot;|&amp;lt;font size=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
[[File:Goldmedal.png|link=High-risk items|High-risk items]] [[File:Captaingun.png|link=High-risk items|High-risk items]] [[High-risk items]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Id_gold.png|link=Guide_to_Head_of_Staff_Equipment|Head of Staff equipment]] [[File:Ian.PNG|link=Guide_to_Head_of_Staff_Equipment|Head of Staff equipment]] [[Guide_to_Head_of_Staff_Equipment|Head of Staff equipment]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/font size&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:HVAC Systems Overview]]&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=50</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=50"/>
		<updated>2025-12-24T18:42:53Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: /* Common Systems */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your Role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
= Common Systems =&lt;br /&gt;
A Building Management System typically monitors and controls a wide range of mechanical, electrical, and environmental services within a facility. The scope varies by building type and project specification, but most BMS platforms include the following core systems:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Heating, Ventilation and Air Conditioning (HVAC)&#039;&#039;&#039; : Controls temperature, airflow, humidity, and pressure by regulating AHUs, FCUs, dampers, fans, and variable speed drives to maintain environmental conditions.&lt;br /&gt;
* &#039;&#039;&#039;Chilled Water &amp;amp; Heating Systems&#039;&#039;&#039; : Manages chillers, boilers, pumps, valves, and heat exchangers, including supply temperatures, differential pressure, and plant sequencing to match system demand.&lt;br /&gt;
* &#039;&#039;&#039;Lighting Control&#039;&#039;&#039; : Integrates time schedules, occupancy sensing, zoning, and daylight dimming to reduce energy use while maintaining required lighting levels.&lt;br /&gt;
* &#039;&#039;&#039;Power, Electrical Monitoring &amp;amp; Utility Metering&#039;&#039;&#039; : Interfaces with meters, switchboards, UPS, and generators to collect load, voltage, and power quality data for monitoring and diagnostics. Logs consumption from electricity, gas, water, heat, and sub-meters to support performance analysis, billing allocation, and energy reporting.&lt;br /&gt;
* &#039;&#039;&#039;Water Systems &amp;amp; Pumps&#039;&#039;&#039; : Monitors and controls boosted water, storage tanks, rainwater, greywater, and sump pumps, including levels, pressures, pump status, and alarms.&lt;br /&gt;
* &#039;&#039;&#039;Fire &amp;amp; Life Safety Interfaces&#039;&#039;&#039; : Receives fire alarm signals and performs coordinated responses such as air-handling shutdown, damper positioning, and smoke control modes.&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=49</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=49"/>
		<updated>2025-12-24T18:41:12Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your Role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
= Common Systems =&lt;br /&gt;
A Building Management System typically monitors and controls a wide range of mechanical, electrical, and environmental services within a facility. The scope varies by building type and project specification, but most BMS platforms include the following core systems:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Heating, Ventilation and Air Conditioning (HVAC)&#039;&#039;&#039; : Controls temperature, airflow, humidity, and pressure by regulating AHUs, FCUs, dampers, fans, and variable speed drives to maintain environmental conditions.&lt;br /&gt;
* &#039;&#039;&#039;Chilled Water &amp;amp; Heating Systems&#039;&#039;&#039; : Manages chillers, boilers, pumps, valves, and heat exchangers, including supply temperatures, differential pressure, and plant sequencing to match system demand.&lt;br /&gt;
* &#039;&#039;&#039;Ventilation &amp;amp; Air Quality&#039;&#039;&#039; : Uses CO₂, VOC, temperature, and humidity sensors to adjust outdoor air, extract systems, and ventilation rates for indoor air quality and energy efficiency.&lt;br /&gt;
* &#039;&#039;&#039;Lighting Control&#039;&#039;&#039; : Integrates time schedules, occupancy sensing, zoning, and daylight dimming to reduce energy use while maintaining required lighting levels.&lt;br /&gt;
* &#039;&#039;&#039;Power, Electrical Monitoring &amp;amp; Utility Metering&#039;&#039;&#039; : Interfaces with meters, switchboards, UPS, and generators to collect load, voltage, and power quality data for monitoring and diagnostics. Logs consumption from electricity, gas, water, heat, and sub-meters to support performance analysis, billing allocation, and energy reporting.&lt;br /&gt;
* &#039;&#039;&#039;Water Systems &amp;amp; Pumps&#039;&#039;&#039; : Monitors and controls boosted water, storage tanks, rainwater, greywater, and sump pumps, including levels, pressures, pump status, and alarms.&lt;br /&gt;
* &#039;&#039;&#039;Fire &amp;amp; Life Safety Interfaces&#039;&#039;&#039; : Receives fire alarm signals and performs coordinated responses such as air-handling shutdown, damper positioning, and smoke control modes.&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=48</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=48"/>
		<updated>2025-12-24T18:36:14Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: /* What is BMS? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; or &#039;&#039;&#039;Bulding Automation System (BAS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your Role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
= Common Systems =&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=47</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=47"/>
		<updated>2025-12-24T18:34:30Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your Role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;br /&gt;
&lt;br /&gt;
= Common Systems =&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=46</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=46"/>
		<updated>2025-12-24T18:31:04Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
= Your Role =&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=45</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=45"/>
		<updated>2025-12-24T18:29:30Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=44</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=44"/>
		<updated>2025-12-24T16:38:45Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= What is BMS? =&lt;br /&gt;
&#039;&#039;&#039;Building Management Systems (BMS)&#039;&#039;&#039; are control systems used to monitor, manage, and optimize the operation of mechanical, electrical, and safety systems within buildings. Commonly applied in commercial, industrial, and mission-critical facilities, a BMS integrates equipment such as heating, ventilation, and air conditioning (HVAC), lighting, power distribution, water systems, fire alarms, and security into a single platform. By using sensors, controllers, and communication networks, a BMS enables automated control, real-time monitoring, fault detection, and energy optimization, improving operational efficiency, occupant comfort, system reliability, and overall building performance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;BMS Engineer&#039;&#039;&#039; is a job title rather than a strictly defined profession, and the skills associated with the role are largely transferable across multiple engineering disciplines. BMS engineers typically work with control logic, networking, sensors, actuators, and supervisory software - competencies that closely overlap with those used in automation engineering, industrial controls, PLC programming, SCADA systems, and facilities engineering.&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=43</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=43"/>
		<updated>2025-12-24T16:32:06Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= What is BMS? =&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=42</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=42"/>
		<updated>2025-12-24T16:31:45Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; = What is BMS? =&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=41</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=41"/>
		<updated>2025-12-24T16:31:34Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [[What is BMS?]]&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=40</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=40"/>
		<updated>2025-12-24T16:30:24Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: Replaced content with &amp;quot;= What is BMS? =&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= [[What is BMS?]] =&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=39</id>
		<title>Introduction to BMS</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Introduction_to_BMS&amp;diff=39"/>
		<updated>2025-12-24T16:29:51Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: Created page with &amp;quot;= What is SS13? =  {{Speech |name=Tuterr, the Private Eye |text=Hmph. Fresh off the boat from Nanotrasen&amp;#039;s recruitment office, huh? Let me tell you something, kid. You won&amp;#039;t last five minutes on this floating deathtrap without help. You&amp;#039;re as likely to be left for dead in a dark maintenance tunnel riddled with bullet holes as you are to get out of here alive. Lucky for you, I&amp;#039;m in a helpful mood today. |image=right }}...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= [[What is SS13|What is SS13?]] =&lt;br /&gt;
&lt;br /&gt;
{{Speech&lt;br /&gt;
|name=Tuterr, the Private Eye&lt;br /&gt;
|text=Hmph. Fresh off the boat from Nanotrasen&#039;s recruitment office, huh? Let me tell you something, kid. You won&#039;t last five minutes on this floating deathtrap without help. You&#039;re as likely to be left for dead in a dark maintenance tunnel riddled with bullet holes as you are to get out of here alive. Lucky for you, I&#039;m in a helpful mood today.&lt;br /&gt;
|image=[[File:Generic detective.png|64px|right]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Station 13&#039;&#039;&#039; is a multiplayer sandbox that has a heavy focus on player interaction. In the year {{Game Year}}, the megacorporation Nanotrasen has employed you as a staff member onboard their latest state of the art research station. Nanotrasen claims to be researching plasma, a mysterious new substance, but rumors are abound that the station is little more than a twisted social experiment...&lt;br /&gt;
&lt;br /&gt;
At the start of each round, each player is assigned a [[Jobs|role]] onboard the station. There are many [[Jobs|jobs]], such as the [[scientist]] performing [[Guide_to_Research_and_Development|research and development]] of new technologies, the [[Medical_Doctor|medical doctor]] trying to keep people alive, or the simple [[janitor]]. There are many different ways to play. The game also randomly chooses new stations, threats, and events to spruce up the round even beyond the insanity that other people produce! You&#039;ll never find two rounds that are the same, and every round tells a new story.&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Main_Page&amp;diff=38</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Main_Page&amp;diff=38"/>
		<updated>2025-12-24T16:27:27Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom:50px; text-align: center;&amp;quot;&amp;gt;[[File:longlogo.jpg|link=https://bmspedia.com/|alt=BMSpedia]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed-hover&amp;quot;&amp;gt;&lt;br /&gt;
File:.png|link=|&lt;br /&gt;
File:.png|link=|&lt;br /&gt;
File:.png|link=|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;min-width: 611px; width: 100%;&amp;quot;&lt;br /&gt;
!valign=center; align=left; style=&amp;quot;width: 50%&amp;quot;|&lt;br /&gt;
[[File:introduction.png|400px|link=Introduction to BMS|alt=Introduction to BMS]]&lt;br /&gt;
[[File:architecture.png|400px|link=BMS Architecture &amp;amp; Topology|alt=BMS Architecture &amp;amp; Topology]]&lt;br /&gt;
[[File:electrical.png|400px|link=Electrical Theory|alt=Electrical Theory]]&lt;br /&gt;
[[File:control.png|400px|link=Control Theory|alt=Control Theory]]&lt;br /&gt;
[[File:communication.png|400px|link=Communication Protocols|alt=Communication Protocols]]&lt;br /&gt;
[[File:network.png|400px|link=IP Networking, System Integration &amp;amp; Gateways|alt=IP Networking, System Integration &amp;amp; Gateways]]&lt;br /&gt;
[[File:hvac.png|400px|link=HVAC Systems Overview|alt=HVAC Systems Overview]]&lt;br /&gt;
[[File:script.png|400px|link=Scripting &amp;amp; Logic|alt=Scripting &amp;amp; Logic]]&lt;br /&gt;
[[File:testing.png|400px|link=Testing &amp;amp; Commissioning|alt=Testing &amp;amp; Commissioning]]&lt;br /&gt;
[[File:cybersecurity.png|400px|link=Cybersecurity &amp;amp; Best Practices|alt=Cybersecurity &amp;amp; Best Practices]]&lt;br /&gt;
&lt;br /&gt;
|valign=center; align=center; style=&amp;quot;width: 50%&amp;quot;|&lt;br /&gt;
=== About BMSpedia ===&lt;br /&gt;
&#039;&#039;BMSpedia is a collaborative knowledge base dedicated to Building Management Systems (BMS), providing clear, practical, and vendor-neutral explanations of controls, architectures, protocols, and real-world engineering practices..&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Read more [[What is BMSpedia|here]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== placeholder  ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== placeholder ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Downloads &amp;amp; Resources ===&lt;br /&gt;
&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;background: #EEEEFF; border: 1px solid #BFB6A3; min-width: 611px; width: 100%; padding: 10px;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Navigation &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[Modbus]]&lt;br /&gt;
|[[BACnet]]&lt;br /&gt;
|[[IP Addressing &amp;amp; Subnetting]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Serial vs IP Networks]]&lt;br /&gt;
|[[I/O Types]]&lt;br /&gt;
|[[Field Devices]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Electrical Theory]]&lt;br /&gt;
|[[Frequently Asked Questions]]&lt;br /&gt;
|[[Control Theory]]&lt;br /&gt;
|-&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|-&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:BMSpedia]]&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Main_Page&amp;diff=37</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Main_Page&amp;diff=37"/>
		<updated>2025-12-24T16:26:01Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom:50px; text-align: center;&amp;quot;&amp;gt;[[File:longlogo.jpg|link=https://bmspedia.com/|alt=BMSpedia]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed-hover&amp;quot;&amp;gt;&lt;br /&gt;
File:.png|link=|&lt;br /&gt;
File:.png|link=|&lt;br /&gt;
File:.png|link=|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;min-width: 611px; width: 100%;&amp;quot;&lt;br /&gt;
!valign=center; align=left; style=&amp;quot;width: 50%&amp;quot;|&lt;br /&gt;
[[File:introduction.png|400px|link=Introduction to BMS|alt=Introduction to BMS]]&lt;br /&gt;
[[File:architecture.png|400px|link=BMS Architecture &amp;amp; Topology|alt=BMS Architecture &amp;amp; Topology]]&lt;br /&gt;
[[File:electrical.png|400px|link=Electrical Theory|alt=Electrical Theory]]&lt;br /&gt;
[[File:control.png|400px|link=Control Theory|alt=Control Theory]]&lt;br /&gt;
[[File:communication.png|400px|link=Communication Protocols|alt=Communication Protocols]]&lt;br /&gt;
[[File:network.png|400px|link=IP Networking, System Integration &amp;amp; Gateways|alt=IP Networking, System Integration &amp;amp; Gateways]]&lt;br /&gt;
[[File:hvac.png|400px|link=HVAC Systems Overview|alt=HVAC Systems Overview]]&lt;br /&gt;
[[File:script.png|400px|link=Scripting &amp;amp; Logic|alt=Scripting &amp;amp; Logic]]&lt;br /&gt;
[[File:testing.png|400px|link=Testing &amp;amp; Commissioning|alt=Testing &amp;amp; Commissioning]]&lt;br /&gt;
[[File:cybersecurity.png|400px|link=Cybersecurity &amp;amp; Best Practices|alt=Cybersecurity &amp;amp; Best Practices]]&lt;br /&gt;
&lt;br /&gt;
|valign=center; align=center; style=&amp;quot;width: 50%&amp;quot;|&lt;br /&gt;
=== About BMSpedia ===&lt;br /&gt;
&#039;&#039;BMSpedia is a collaborative knowledge base dedicated to Building Management Systems (BMS), providing clear, practical, and vendor-neutral explanations of controls, architectures, protocols, and real-world engineering practices..&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Read more [[What is BMSpedia|here]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== placeholder  ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== placeholder ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== placeholder ===&lt;br /&gt;
&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;background: #EEEEFF; border: 1px solid #BFB6A3; min-width: 611px; width: 100%; padding: 10px;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Navigation &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[Modbus]]&lt;br /&gt;
|[[BACnet]]&lt;br /&gt;
|[[IP Addressing &amp;amp; Subnetting]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Serial vs IP Networks]]&lt;br /&gt;
|[[I/O Types]]&lt;br /&gt;
|[[Field Devices]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Electrical Theory]]&lt;br /&gt;
|[[Frequently Asked Questions]]&lt;br /&gt;
|[[Control Theory]]&lt;br /&gt;
|-&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|-&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:BMSpedia]]&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
	<entry>
		<id>https://bmspedia.com/index.php?title=Main_Page&amp;diff=36</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://bmspedia.com/index.php?title=Main_Page&amp;diff=36"/>
		<updated>2025-12-24T16:25:41Z</updated>

		<summary type="html">&lt;p&gt;AlexDriv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-bottom:50px; text-align: center;&amp;quot;&amp;gt;[[File:longlogo.jpg|link=https://bmspedia.com/|alt=BMSpedia]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery perrow=&amp;quot;2&amp;quot; mode=&amp;quot;packed-hover&amp;quot;&amp;gt;&lt;br /&gt;
File:.png|link=|&lt;br /&gt;
File:.png|link=|&lt;br /&gt;
File:.png|link=|&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;min-width: 611px; width: 100%;&amp;quot;&lt;br /&gt;
!valign=center; align=left; style=&amp;quot;width: 50%&amp;quot;|&lt;br /&gt;
[[File:introduction.png|400px|link=Introduction to BMS|alt=Introduction to BMS]]&lt;br /&gt;
[[File:architecture.png|400px|link=BMS Architecture &amp;amp; Topology|alt=BMS Architecture &amp;amp; Topology]]&lt;br /&gt;
[[File:electrical.png|400px|link=Electrical Theory|alt=Electrical Theory]]&lt;br /&gt;
[[File:control.png|400px|link=Control Theory|alt=Control Theory]]&lt;br /&gt;
[[File:communication.png|400px|link=Communication Protocols|alt=Communication Protocols]]&lt;br /&gt;
[[File:network.png|400px|link=IP Networking, System Integration &amp;amp; Gateways|alt=IP Networking, System Integration &amp;amp; Gateways]]&lt;br /&gt;
[[File:hvac.png|400px|link=HVAC Systems Overview|alt=HVAC Systems Overview]]&lt;br /&gt;
[[File:script.png|400px|link=Scripting &amp;amp; Logic|alt=Scripting &amp;amp; Logic]]&lt;br /&gt;
[[File:testing.png|400px|link=Testing &amp;amp; Commissioning|alt=Testing &amp;amp; Commissioning]]&lt;br /&gt;
[[File:cybersecurity.png|400px|link=Cybersecurity &amp;amp; Best Practices|alt=Cybersecurity &amp;amp; Best Practices]]&lt;br /&gt;
[[File:Needs revision.png|400px|link=Category:Needs_revision|alt=Needs revision]]&lt;br /&gt;
&lt;br /&gt;
|valign=center; align=center; style=&amp;quot;width: 50%&amp;quot;|&lt;br /&gt;
=== About BMSpedia ===&lt;br /&gt;
&#039;&#039;BMSpedia is a collaborative knowledge base dedicated to Building Management Systems (BMS), providing clear, practical, and vendor-neutral explanations of controls, architectures, protocols, and real-world engineering practices..&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Read more [[What is BMSpedia|here]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== placeholder  ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== placeholder ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== placeholder ===&lt;br /&gt;
&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
* [[placeholder ]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;background: #EEEEFF; border: 1px solid #BFB6A3; min-width: 611px; width: 100%; padding: 10px;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Navigation &amp;lt;hr&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[Modbus]]&lt;br /&gt;
|[[BACnet]]&lt;br /&gt;
|[[IP Addressing &amp;amp; Subnetting]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Serial vs IP Networks]]&lt;br /&gt;
|[[I/O Types]]&lt;br /&gt;
|[[Field Devices]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Electrical Theory]]&lt;br /&gt;
|[[Frequently Asked Questions]]&lt;br /&gt;
|[[Control Theory]]&lt;br /&gt;
|-&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|-&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|[[placeholder]]&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:BMSpedia]]&lt;/div&gt;</summary>
		<author><name>AlexDriv</name></author>
	</entry>
</feed>