Skip to content

Commission an MS/TP lab

MS/TP is a token-passing serial transport. Fast protocol code is useful, but it does not by itself prove that a host, driver, and RS-485 adapter meet the required on-wire timing.

Use an isolated, authorized lab trunk first. The included Python example is a token-participating master, not a passive serial sniffer.

The release includes a standalone Python mini-device example using transport="mstp" and Rust serial transport code. The reviewed bacnet CLI does not expose MS/TP transport flags; do not substitute an invented --mstp or --serial option into CLI instructions.

Treat Linux as the initial documentation/qualification lane. Serial path examples for macOS or Windows are not evidence that those platform/adapter combinations are qualified.

Use a serial-enabled package and an adapter whose transmit-direction behavior is suitable for this deployment. The example asks for automatic transmit-direction control; adapter and driver behavior vary.

Choose a unique local master MAC in 0..=127, a suitable device instance, and a baud rate matching the existing trunk. Coordinate Max_Master with the actual station address plan. Check wiring, polarity, common/reference arrangements, isolation, termination, and biasing against the equipment and adapter documentation; this page is not an electrical wiring specification.

MS/TP qualification spans host scheduling, adapter behavior, and the RS-485 wire.
From application to RS-485 wire

MS/TP qualification spans host scheduling, adapter behavior, and the RS-485 wire.

From application to RS-485 wire

MS/TP qualification spans host scheduling, adapter behavior, and the RS-485 wire.

MS/TP qualification spans host scheduling, adapter behavior, and the RS-485 wire.

From a v0.11.0 source checkout, with its Python package installed:

Terminal window
python examples/python/mstp_mini_device.py \
--serial /dev/serial/by-id/usb-YOUR_ADAPTER \
--baud 38400 \
--mac 3 \
--max-master 127 \
--max-info-frames 1 \
--instance 123001

Replace the serial path, MAC, baud, and device instance before connecting. The example’s default baud is 38400; it is not a universal setting for every trunk. The Python path accepts configured rates of 9600, 19200, 38400, 57600, 76800, and 115200; acceptance of a numeric setting does not establish a tested hardware matrix.

The example passes serial_port, mstp_baud, mstp_mac, mstp_max_master, and mstp_max_info_frames to BACnetServer. Use that example as the concrete starting point, not the abbreviated Python constructor table that still lists only BIP, IPv6, and SC.

Confirm stable discovery and a small property read with a peer. Then qualify under representative host and bus load. Record the operating system/kernel, adapter, driver, baud rate, station count, direction-control mode, and load conditions.

On-wire timing measurements are more informative than an average Rust function duration. USB buffering and host scheduling can change when bytes reach the wire or application. Do not infer full Clause 9 behavior, extended-frame coverage, segmented MS/TP behavior, or a combined client/server endpoint from one successful mini-device demonstration.

Do not make a blanket claim either way. Determine the result on the target hardware under representative load. The project’s timing-qualification issue tracks the evidence needed to decide whether ordinary Linux is sufficient or whether a different adapter, native UART, a dedicated execution mode, PREEMPT_RT, or a separate serial front-end is justified.

Repeated token loss, unstable latency, duplicate station addresses, or unexplained retries are reasons to stop expanding the test—not reasons to claim success because one read completed. Return to serial configuration, direction timing, and independent bus measurements.

These instructions target v0.11.0. Source review is not a claim of hardware qualification.

Mini-device source · Python example requirements · Conformance ledger · On-wire qualification work.

Release v0.11.0 ·Current development. Follow the scope named on each page. Pre-1.0 APIs; partial conformance.Support & limitations