Problem Description: Error 16#8281 on Master_Modbus with CM PtP
Engineers commissioning a SIMATIC S7-1200 station with a CM PtP (Communication Processor, Point-to-Point) module in TIA Portal V19 frequently encounter error status word 16#8281 on the Master_Modbus instruction while attempting to set up a half-duplex Modbus RTU master. Typical symptoms include:
-
Modbus_Comm_Load.DONEpulses true once after each restart, indicating the instruction accepted the parameters. -
Master_Modbus.ERRORis true andMaster_Modbus.STATUSreads16#8281on every triggered request. - LED indicators on the CM PtP module show no
RXorTXactivity on the operator panel — the bus is completely silent. - The
Modbus_Comm_Loadinstruction reports a healthySTATUSof16#0000between transactions, masking the real problem. - The MODBUS(RTU) instruction palette in TIA Portal V19 only allows version V6.0 for the selected CM PtP hardware, preventing the engineer from "upgrading" the FB version as a workaround.
RX and TX remain dark even on a forced single-shot read, the issue is almost always on the master side — either the port is electrically disabled, the wiring is wrong, or the CM PtP has not finished initialising its port because the underlying hardware (the BaseUnit or the slot) is incompatible with the configured protocol.Root Cause Analysis: BaseUnit Type Mismatch
The single most common field cause for this exact symptom combination is a BaseUnit type mismatch in the ET 200SP / S7-1200 device configuration. The CM PtP module is physically plugged into a BaseUnit whose MLFB ends in ...xxA1 when the TIA Portal hardware catalog expects ...xxA0 (or vice versa, depending on the specific slot, module variant, and firmware revision).
For ET 200SP distributed I/O, the BaseUnit type letter (A0, A1, A2, A3) is not cosmetic — it defines:
- Terminal block layout (screw vs. push-in spring vs. IDC insulation displacement).
- Number and type of auxiliary terminals available for shielding, PE, and 24 V DC sensor supply routing.
- Internal power bus bridging between the CM PtP and the modules to its left and right.
-
Supported function set — for example, certain
A1BaseUnits disable the protocol-specific terminal assignments required for half-duplex RS-485 on the CM PtP because they are intended for digital I/O modules, not for serial communication modules.
When TIA Portal configures the station with a BaseUnit that the firmware has not enabled for the CM PtP, the CM PtP completes its self-test, the Modbus_Comm_Load instruction is accepted by the S7-1200 CPU (so DONE pulses), but the PtP port is never actually opened on the physical layer. Any subsequent Master_Modbus call therefore returns 16#8281 — "no valid port available / port not initialised for this instruction."
6ES7 193-6xxxx-xxA1 back to 6ES7 193-6xxxx-xxA0, the project was recompiled, downloaded to the CPU, and 16#8281 cleared immediately. The RX and TX LEDs began toggling on the first successful request, and Modbus RTU traffic to the slave was established on the first poll cycle.Identifying the CM PtP Module and BaseUnit Variant
Before changing hardware, capture the exact ordering data of the CM PtP and the BaseUnit. The CM PtP MLFB is normally printed on the front of the module; the BaseUnit type is printed on the upper part of the terminal block.
| Component | MLFB pattern | Where to find it | Why it matters |
|---|---|---|---|
| CM PtP module | 6ES7 137-6AA00-0BA0 / -0BA1 | Front label of the communication module | Determines which Modbus FB version the CPU will accept (V6.0 on newer HW). |
| BaseUnit | 6ES7 193-6xxxx-xxA0 | Side label of the terminal block |
A0 type is the default and the type expected for the CM PtP serial ports. |
| BaseUnit (substitute) | 6ES7 193-6xxxx-xxA1 | Side label of the terminal block | Often used for digital I/O; if installed under a CM PtP, serial comms may fail to initialise. |
Cross-check the installed MLFB against the TIA Portal hardware catalog: open the project, navigate to Device configuration, place the cursor on the slot beneath the CM PtP, and read the catalog part number that TIA Portal is expecting. If the physical sticker does not match, you have found the mismatch. The Siemens Industry Online Support (SIOS) catalog and the SIMATIC ET 200SP BaseUnit manual explain the type letter conventions.
Pre-Flight Checklist Before Touching Hardware
Work the following checks in order; each one can independently produce the same 16#8281 status if the underlying layer is wrong.
- Confirm TIA Portal V19 project state. The project must be compiled without errors after the last change. Re-run Project → Compile → All (rebuild) so the system data blocks reflect the device configuration.
- Confirm the CPU firmware and CM PtP firmware. The CM PtP module's firmware version determines which MODBUS(RTU) FB version is allowed. With recent hardware, only V6.0 is offered by the Instruction palette.
-
Verify the slot assignment in HWCN. The PtP port ID at
Modbus_Comm_LoadPORTinput must point to the CM PtP — not to the CPU's onboard RS-485 port, and not to a non-existent slot. - Inspect wiring of A and B (or + and −) on the RS-485 trunk. A and B polarity is not standardized between vendors. A reversed pair does not damage the drivers but does invert every bit, making the master and slave unable to decode any frame.
-
Check termination and bias resistors. Half-duplex RS-485 requires a 120 Ω terminator at each end of the trunk and bias resistors on one node only (typically the master). Missing terminators cause intermittent
16#8281/ timeout errors. - Validate the slave's RS-485 mode. Many slaves ship in RS-422 four-wire mode by default. If a slave is set to four-wire full-duplex, the master will receive only its own echo and frames will be rejected.
RS-485 Half-Duplex Wiring and Polarity Details
For half-duplex Modbus RTU on a two-wire RS-485 bus, only three conductors are required: A (non-inverting, sometimes marked + or D+), B (inverting, sometimes marked − or D−), and the shield. The shield should be bonded to earth at one point only, typically at the panel entrance, to avoid ground loops.
Cross-vendor polarity is the most common cause of "no LEDs, no response" after a fresh install. If the slave's A terminal is wired to the master's B terminal, every bit is inverted, the UART detects framing errors, and the CM PtP never raises the RX LED. The slave may also report an "illegal function" or "CRC error" — but only after the polarity is corrected, because until then no valid frame ever arrives.
Recommended RS-485 cable specification
- Twisted pair, 24 AWG minimum, characteristic impedance 100–120 Ω.
- Overall foil + braid shield, drain wire bonded to earth at one point.
- Total trunk length ≤ 1200 m at 9600 bit/s, derated for higher baud rates per the Modbus over serial line specification.
- Stubs (drop cables) kept as short as possible — < 1 m at 19.2 kbit/s and shorter still at higher baud rates.
Configuring Modbus_Comm_Load in TIA Portal V19
The Modbus_Comm_Load instruction initialises the port and installs the Modbus RTU driver in the CM PtP. Place it once in the startup or first scan, and call Master_Modbus from a cyclic OB (typically OB1) once Modbus_Comm_Load.DONE has been observed.
The TIA Portal V19 instruction palette exposes Instructions → Communication → Communication Processor → MODBUS(RTU). With a CM PtP module that supports FB V6.0, only that version is selectable in the drop-down. For the S7-1200 Modbus RTU master library, the Modbus_Comm_Load online reference lists the supported parameter set.
Recommended Modbus_Comm_Load parameter set (RS-485 half-duplex, 19200 8E1)
| Input | Value | Notes |
|---|---|---|
REQ |
TRUE (one-shot) |
Use a rising edge on first scan. |
PORT |
CM PtP slot identifier (e.g. 271) |
Must match the HWCN slot for the CM PtP; wrong slot = 16#8281 on the first Master_Modbus call. |
BAUD |
19200 |
Use a baud rate supported by the slowest slave on the bus. |
PARITY |
2 (Even) |
Modbus RTU default: 8E1. |
FLOW_CTRL |
0 (none) |
RS-485 half-duplex does not use RTS/CTS. |
RTS_ON_DLY |
0 |
Default unless using RS-232 with hardware handshaking. |
RTS_OFF_DLY |
0 |
Default for RS-485. |
RESP_TO |
1000 ms |
Modbus RTU response timeout at 19200 bit/s: 3.5 char ≈ 2 ms per byte → 1000 ms gives generous margin for slow slaves. |
MODE |
4 (RTU, full-duplex option) or per FB version |
Verify against the FB V6.0 help — some versions differentiate RS-485 / RS-232 / full-duplex. |
MB_DB |
Instance DB of Modbus_Master / Modbus_Slave
|
Generated automatically when the master FB is inserted. |
When the call returns DONE = TRUE and ERROR = FALSE on the very first scan, the CPU considers the port to be configured. However — and this is the trap that catches the engineer with the wrong BaseUnit — the CM PtP may still not be able to use the port because the underlying slot is not yet "opened" at the hardware layer. The CPU cannot tell the difference between "port configured, hardware ready" and "port configured, hardware not yet ready." The Master_Modbus block, on its first call, attempts to send and discovers the port is dead — and reports 16#8281.
Master_Modbus Status Code Reference
Knowing the exact meaning of 16#8281 for the version you have installed is essential before assuming a hardware problem.
| STATUS (hex) | Meaning on Master_Modbus | Typical root cause |
|---|---|---|
16#0000 |
No error | Healthy. |
16#80C8 |
Slave did not respond within timeout | Wiring, slave address, terminator, or slave not in Run. |
16#80D1 |
Slave rejected the request (exception) | Function code not supported by the slave, illegal address. |
16#80D2 |
CRC error in the response | EMI, missing termination, bus contention, two masters. |
16#8281 |
Port is not configured or not ready | Modbus_Comm_Load not called, MB_DB mismatch, wrong PORT, or incompatible BaseUnit. |
16#8381 |
Invalid parity parameter | Modbus_Comm_Load PARITY out of range. |
16#8481 |
Invalid baud parameter | Modbus_Comm_Load BAUD not supported by the hardware. |
16#8281 is the only error code that points at the physical installation. When the FB version, parameters, and instance DB are all correct, the issue is almost always one of: wrong PORT value, missing Modbus_Comm_Load call, or BaseUnit/hardware mismatch.Step-by-Step: Resolving 16#8281 by Correcting the BaseUnit
- Stop the CPU and isolate the 24 V DC supply to the ET 200SP / S7-1200 station.
- Remove the CM PtP module by pressing the release lever on the top and pivoting the module forward. The BaseUnit stays in the DIN rail.
- Read the MLFB sticker on the side of the BaseUnit. Compare it character-by-character with the part number TIA Portal expects in Device configuration → slot.
-
Identify the offending type letter. If the physical part ends in
...xxA1and the catalog expects...xxA0, you have a mismatch under a serial communication module. -
Order the correct BaseUnit (e.g.
6ES7 193-6BP00-0BA0for a typical A0 type with screw terminals — verify the exact MLFB against the catalog). - Swap the BaseUnit: de-rail the old one, slide the new one on, lock the DIN-rail latch, and re-wire the shield, A, B, and 24 V feed. Keep the wire stripping length and torque to the values given in the ET 200SP BaseUnit manual.
- Re-seat the CM PtP module and the modules to its left and right. Power up the station.
- Re-compile the TIA Portal V19 project with Project → Compile → All (rebuild) and download the system data to the CPU.
-
Cycle the CPU to RUN and trigger one
Master_Modbusread (e.g. function code03at slave address 1). -
Observe the CM PtP LEDs:
RXandTXshould blink within a fraction of a second of the request being issued.
Firmware, Library, and TIA Portal V19 Considerations
TIA Portal V19 is the first release line that ships the Modbus RTU FB V6.0 as the only allowed version for the CM PtP modules with the latest firmware. Earlier projects using FBs V2.x to V5.x will continue to compile and run, but mixing versions on a single CPU is not supported — the MB_DB interface changed between major versions and a stale MB_DB can re-trigger 16#8281 even on healthy hardware.
Recommended steps when migrating or when starting a new V19 project:
- Delete any old
Modbus_Comm_Load/Modbus_Masterinstance DBs and re-insert the instructions from the V19 palette. The instance DBs are regenerated automatically with the correct V6.0 interface. - Reinstall or re-validate the Modbus library at Options → Manage Global Libraries and ensure the project references the same library version the hardware expects.
- Update the CM PtP firmware to the latest revision listed in SIOS for the specific MLFB. The current releases are available on the Siemens Industry Online Support portal under "Firmware updates for SIMATIC CM PtP."
- Re-flash the CPU to a firmware level that matches the CM PtP — running a CM PtP at a newer firmware than the CPU officially supports is the second most common cause of
16#8281after the BaseUnit mismatch.
Verification and On-Bus Diagnostics
After applying the BaseUnit fix and downloading the project, perform the following verification sequence.
-
Watch the CM PtP LEDs: The diagnostic LED
DIAGshould be solid green once the port is initialised.RXflashes on slave responses,TXflashes on master requests. -
Read
Modbus_Comm_Load.STATUS: Should remain16#0000between scans. -
Read
Master_Modbus.STATUS: Should be16#0000on successful transactions, and only change to16#80D1if the slave returns a Modbus exception. -
Cross-check with a Modbus scanner (e.g. CAS Modbus Scanner or a simple Python
pymodbusscript on a laptop with a USB-to-RS-485 converter). If the scanner sees valid responses but the CM PtP does not, the issue is back on the S7-1200 side; if the scanner also sees nothing, the wiring is the suspect. - Capture a frame with a serial analyser (Saleae, Total Phase Beagle, or equivalent) on the A/B pair. A working Modbus RTU frame at 19200 8E1 should show a 3.5-character silence, address byte, function code, payload, CRC16, and a 3.5-character silence. Any garbage or echo without response is a polarity or termination problem.
Extended Troubleshooting Matrix
| Symptom | Likely cause | Corrective action |
|---|---|---|
16#8281 from first cycle, RX/TX LEDs dark |
BaseUnit type mismatch under CM PtP | Swap BaseUnit to the type letter the TIA Portal catalog expects (e.g. ...xxA0). |
16#8281 on first call only, then works |
Modbus_Comm_Load not called before Master_Modbus | Place Modbus_Comm_Load in OB100 / startup so the port is ready before OB1 polls. |
16#8281 on every call but Modbus_Comm_Load DONE true |
Wrong PORT identifier passed to Modbus_Comm_Load
|
Right-click the CM PtP in HWCN, read the system constant, and update the PORT input. |
16#80C8 (timeout) with healthy RX flash but no TX echo |
A/B reversed, slave cannot decode frame | Swap A and B at one end; verify with a Modbus scanner. |
16#80D2 (CRC error) intermittently |
Missing 120 Ω terminators, EMI, long stubs | Add termination at both ends, re-route cable away from VFD power cables, shorten stubs. |
| One slave works, the other does not on the same bus | Slave address clash, different baud rate, RS-422/485 setting mismatch | Verify each slave's address, baud, parity, and RS-485 mode (2-wire vs 4-wire) with a scanner. |
Modbus_Comm_Load.ERROR = TRUE, STATUS = 16#8181
|
Invalid MODE parameter (FB version specific) |
Check the FB V6.0 help for the correct MODE value (RS-485 vs RS-232, full- vs half-duplex). |
No LEDs at all, CM PtP SF LED red |
24 V supply missing on the BaseUnit, or backplane bus interrupted | Check BaseUnit power-feed terminals and the bus connector to the left neighbour. |
Common Pitfalls and Field Tips
-
Don't trust a green CPU RUN LED as proof that the CM PtP port is open. The CPU will go to RUN even if the CM PtP cannot bring up the port; the failure is reported only when
Master_Modbustries to send. -
Always compile-rebuild, not incremental compile, after changing any hardware element. TIA Portal sometimes keeps the old
MB_DBreferences and the apparent success masks a stale instance DB. - Read the diagnostic buffer of the CM PtP from Online → Diagnostic buffer in TIA Portal. A "port initialisation failed" entry confirms a hardware-layer problem, while a "timeout on response" entry points to a wiring or slave problem.
- Check the shield bonding at one point only. Multiple earth bonds create ground loops that inject noise into the A/B pair and produce intermittent CRC errors that mask the real problem.
- Avoid USB-to-RS-485 dongles without galvanic isolation on the diagnostic laptop. A non-isolated dongle ties the laptop ground to the panel ground and can shift the bus reference, making frames fail intermittently.
- Document the wiring polarity convention of every device on the bus. A simple spreadsheet with columns "Vendor", "A terminal label", "B terminal label", and "Default parity" saves hours on multi-vendor commissioning.
When the BaseUnit is Not the Cause
If the BaseUnit is correct and 16#8281 persists, escalate through the following list before assuming a defective CM PtP:
- Verify that
Modbus_Comm_Loadis being called and thatMB_DBis the same instance DB thatMaster_Modbusreferences. A common mistake is to call two different FBs (e.g.Modbus_Masterfrom a library that ships a different instance DB layout) and then callMaster_Modbusreferencing a DB that does not match. - Confirm the system constant passed to
Modbus_Comm_Load.PORTmatches the slot of the physical CM PtP, not the slot of a removed or moved module. - Re-flash the CM PtP to the firmware version matching the CPU firmware matrix. A mismatched firmware is the second most common cause after the BaseUnit letter.
- Try the same CM PtP on a known-good BaseUnit on a different slot. If the error follows the module, replace the CM PtP. If the error follows the slot, replace the BaseUnit or its neighbour.
- Capture a frame on the bus with a serial analyser to confirm that the master is actually putting a valid Modbus RTU frame on the wire. If the bus is completely silent, the port is not being opened — and the BaseUnit is the prime suspect.
Standards and Reference Documentation
For projects that must conform to a Modbus standard, the underlying protocol is defined by the Modbus Organization and is implemented by Siemens' Modbus RTU library on top of the RS-485 physical layer defined by the TIA/EIA-485 and ISO/IEC 8482 standards. When designing the bus, always validate against the latest revision of the Modbus over Serial Line specification (currently Modbus over Serial Line V1.02) and the Modbus Application Protocol V1.1b3, both published on the Modbus Organization website. The exact mapping of error codes is documented in the S7-1200 Modbus RTU instruction reference in the TIA Portal help system, and the BaseUnit conventions are explained in the SIMATIC ET 200SP BaseUnit manual on Siemens Industry Online Support.
What does Modbus RTU error 16#8281 mean on a Siemens CM PtP in TIA Portal V19?
Error 16#8281 on the Master_Modbus block means the PtP port is not configured, not ready, or the underlying hardware cannot initialise the port. With the Modbus FB V6.0 forced by the CM PtP hardware, the most common field cause is an incompatible BaseUnit type letter under the CM PtP (e.g. 6ES7 193-6xxxx-xxA1 installed where the project expects 6ES7 193-6xxxx-xxA0). Replace the BaseUnit with the type letter the TIA Portal V19 hardware catalog expects, recompile, and reload.
How do I know whether the BaseUnit or the CM PtP module is defective?
Move the CM PtP module to a known-good slot whose BaseUnit is the type letter the catalog expects. If Master_Modbus clears 16#8281 on the new slot, the original BaseUnit is at fault. If the error follows the module, the CM PtP itself is suspect — reflash its firmware to the latest SIOS release, and if the error persists, replace the module.
Why is the MODBUS(RTU) instruction palette in TIA Portal V19 only offering version V6.0?
FB V6.0 is the only Modbus RTU master/slave library version the latest CM PtP hardware accepts. Older versions (V2.x to V5.x) are still in the project palette for legacy CPUs but are filtered out for the newer CM PtP module. Use V6.0 and let TIA Portal regenerate the instance DB so the MB_DB interface matches.
My Modbus_Comm_Load reports DONE = TRUE but the RX and TX LEDs on the CM PtP never blink. What is wrong?
Modbus_Comm_Load only confirms that the CPU accepted the parameters. If the CM PtP cannot bring up the physical port — typically because the BaseUnit type letter is wrong, the slot identifier is wrong, or the firmware does not match the CPU — the port stays electrically silent. Verify the BaseUnit MLFB and the CM PtP firmware before suspecting the wiring.
Do I need to add a 120 Ω termination resistor on the CM PtP for half-duplex RS-485?
Yes. A two-wire RS-485 trunk must be terminated with 120 Ω at both ends of the main run. The CM PtP module exposes a switch or terminal pair for its end of the line. Missing terminators produce intermittent 16#80C8 timeouts and 16#80D2 CRC errors, but they do not on their own produce a silent bus with 16#8281 — that signature is almost always a hardware initialisation problem.