1. Problem Overview
The Modbus_Comm_Load instruction on a Siemens SIMATIC S7-1200 CPU paired with a CM 1241 RS485 communications module is meant to parameterize the serial port for Modbus RTU master or slave service. When commissioned through TIA Portal (V15 and later, including V16, V17, V18, V19, V20), two failure modes recur in field deployments against devices such as the Schneider Electric PM2230 power meter:
- The instruction reports Status = 16#7000,
Done= FALSE,Error= FALSE, and no characters are ever placed on the wire — no TX/RX LED activity on the CM 1241. - The companion
Modbus_Master(orModbus_Slave) instruction reports a status of 16#8281 with theErroroutput TRUE.
Both symptoms are caused by incomplete port configuration, library version mismatch, or wiring errors that prevent the underlying UART from being armed. This article consolidates the field-proven resolution steps, parameter assignments, and the diagnostic procedure needed to clear the fault and bring the CM 1241 link to PM2230 (or any Modbus RTU slave) on-line.
Error bit must be FALSE for 16#7000 to be valid. If Error is TRUE, the value in Status is the actual error word and must be decoded against the Modbus error table.2. Hardware Reference: CM 1241 RS485 Modules
Siemens currently produces the following first-party RS485 point-to-point modules usable with the S7-1200 family:
| MLFB (Order Number) | Description | Max Baud | Isolation | Notes |
|---|---|---|---|---|
| 6ES7241-1CH30-1XB0 | CM 1241 RS232 | 115.2 kbit/s | Yes | Not used for PM2230 |
| 6ES7241-1CH32-0XB0 | CM 1241 RS232 (replacement) | 115.2 kbit/s | Yes | Substitute for EOL 6ES7241-1CH30 |
| 6ES7241-1AH30-0XB0 | CM 1241 RS485 (legacy) | 115.2 kbit/s | Yes | Discontinued — replaced |
| 6ES7241-1AH32-0XB0 | CM 1241 RS485 (current) | 115.2 kbit/s | Yes | Use this part for new builds |
| 6ES7241-1HF30-0XB0 | CB 1241 RS485 (signal board) | 115.2 kbit/s | Yes | Plugs onto CPU front |
Confirm the MLFB on the side label before troubleshooting. The firmware version of the S7-1200 CPU (V1.x, V2.x, V3.x, V4.x, V4.2, V4.3, V4.4, V4.5, V4.6, V4.7) determines which Modbus_Comm_Load instruction variant can be inserted. As a rule of thumb:
- Firmware V1.x–V3.x: legacy Modbus library (instruction version 2.x).
- Firmware V4.0–V4.4: MODBUS (RTU) library distributed with TIA Portal — instruction version 3.0/3.1.
- Firmware V4.5+: MODBUS (RTU) V20 library — instruction version 4.x with extended diagnostics.
3. Decoding Status 16#7000
16#7000 belongs to the IEC 61131-3 "no operation / no error" family. For the S7-1200 Modbus RTU instruction set it means:
| Status Word | Meaning | Action |
|---|---|---|
| 16#7000 | No job in progress; REQ = 0 and no previous job active. |
Trigger REQ with a rising edge. |
| 16#7001 | Job accepted, initialisation in progress. | Wait — single-cycle status. |
| 16#7002 | Job running, busy. | Wait — single-cycle status. |
| 16#0000 | Job completed without error. | Done = TRUE this cycle. |
| 16#8xxx | Error class — see table below. | Decode against error table. |
The instruction latches Done or Error for exactly one CPU scan, then both reset. If you sample the outputs in OB1 without using a positive-edge contact on Done / Error, you will see 16#7000 forever — even after a successful run. Always route Done to a flag (MB_x) and read that flag in your HMI or next cycle.
4. Root Cause Matrix for Status 16#7000 With No LED Activity
| # | Likely Root Cause | Diagnostic | Fix |
|---|---|---|---|
| 1 |
MODE input left at 0 (default — full duplex RS422). |
Open the instance DB, monitor MODE online. |
Set MODE = 4 in the start value of the instance DB; recompile and download. |
| 2 |
REQ never receives a rising edge. |
Cross-reference REQ in the program; check coil preceding it. |
Drive REQ from FirstScan (e.g. %M1.0) or a user flag with a positive-edge contact (P / FP). |
| 3 | Block placed in OB100 (Startup) and the watchdog resets it before OB1 runs. | Inspect call environment in Program blocks. | Move the call to OB1 or OB200; keep startup OB minimal. |
| 4 | Wrong PORT symbolic name selected (e.g. referencing CB 1241 instead of CM 1241). |
Click the PORT pin and verify the hardware ID. |
Re-assign the PORT input to the correct module's hardware identifier from the device configuration. |
| 5 | BAUD, PARITY, or FLOW_CONTROL set to invalid combination. | Compare to PM2230 Modbus map (default 19200, 8E1). | Use BAUD = 5 (19200), PARITY = 2 (Even), FLOW_CONTROL = 0 (no hardware flow control). |
| 6 | Instruction version newer than CPU firmware supports. | Open the properties of the block; check "Version". | Replace with the older block from the matching TIA Portal library, or upgrade the CPU firmware. |
| 7 | D+/D− polarity reversed or shield/ground loop opens the bus. | Measure DC bias between A and B with a multimeter (1 V to 5 V typical). | Wire CM1241 pin 3 = D+ (B) to PM2230 D+; CM1241 pin 8 = D− (A) to PM2230 D−. Tie shield to ground at one end only. |
| 8 | Termination resistor missing on long runs (> 10 m). | Check that the bus end is terminated at 120 Ω. | Insert 120 Ω across D+/D− at the far end; for CM1241 a 220 Ω pull-down to GND and 390 Ω pull-up to +5 V can be added for failsafe biasing. |
5. The MODE Parameter — Half-Duplex 2-Wire Assignment
The MODE input selects the physical layer profile of the CM 1241's UART driver. The valid values are:
| Value | Meaning | Use Case |
|---|---|---|
| 0 | Full duplex (RS422 four-wire) | Do not use for PM2230 |
| 1 | Full duplex (RS232) | CM 1241 RS232 only |
| 2 | Full duplex (RS422 four-wire) echo suppression | Special RS422 slaves |
| 3 | Reserved | — |
| 4 | Half duplex (RS485 2-wire) | Required for PM2230 and most 2-wire meters |
If MODE is left at 0, the CM 1241 expects four-wire operation and will never assert the transmit driver in the direction needed for a 2-wire bus. The TX LED will remain dark and the bus will be silent. The fault is silent in the sense that no error code is raised — 16#7000 simply persists because the instruction is doing exactly what it was told to do: nothing useful.
Modbus_Comm_Load (e.g. "Modbus_Comm_Load_DB".MODE). Always set it in the Start value column of the DB — not in a STAT area you overwrite from a different OB. The DB start values are loaded on restart, and the CM 1241 uses them on every power-up.6. REQ Trigger Wiring and OB Placement
The instruction needs a single rising edge on REQ to start the configuration handshake with the module. Standard practice is to drive it from the CPU's first-scan bit, exposed in the System and clock memory byte:
Network 1: Modbus_Comm_Load trigger
%M1.0 (FirstScan) ──[ P ]──( Modbus_Comm_Load.REQ )
Network 2: Modbus_Comm_Load call in OB1
CALL "Modbus_Comm_Load_DB" , "Modbus_Comm_Load"
REQ := %M1.0
PORT := "CM_1241_RS485_1"
BAUD := 9600 or 19200 (per slave)
PARITY := 2 (Even)
FLOW_CONTROL := 0
RTS_ON := 0
RTS_OFF := 0
RESP_TO := 1000 (ms)
MODE := 4
DONE => %M20.0
BUSY => %M20.1
ERROR => %M20.2
STATUS => %MW22
Notes:
- FirstScan is bit 0 of the system memory byte configured in CPU Properties → System and Clock Memory. It is TRUE for exactly one scan after restart.
-
OB100 (Startup) can be used only if the watchdog is configured to accommodate the call. The recommended practice is to call
Modbus_Comm_Loadfrom OB1 to avoid Startup OB timeouts when the CPU has a large project. - RESP_TO is the response timeout in milliseconds. The default of 1000 ms is safe for PM2230; lower it only after validation.
7. Modbus_Master Error 0x8281 — Decoding
Once the port is armed (TX/RX LED flashes when traffic hits the bus), the next fault encountered is typically Modbus_Master status 16#8281. The high nibble (8) marks an error, and the low word decodes to a sub-cause. From the Siemens error reference the most common values are:
| Status | Name | Typical Cause | Corrective Action |
|---|---|---|---|
| 16#8180 | Wrong checksum in received frame. | Noise, wrong baud, wrong parity. | Verify BAUD/PARITY match the slave. |
| 16#8181 | Wrong Modbus function code in reply. | Slave does not support the requested function (e.g. 03 for V_avg on PM2230). | Check the PM2230 Modbus register map. |
| 16#8182 | Address out of range. | DATA_ADDR exceeds slave map. | Recompute DATA_ADDR as the zero-based register offset (PM2230 holding register 0x0000 = first register). |
| 16#8183 | Invalid data length. | DATA_LEN > slave map width. | Limit DATA_LEN to the number of 16-bit words. |
| 16#8184 | Modbus function not supported by slave. | Function code 0x06/0x10 returned exception 01. | Use function 03/04 only on PM2230. |
| 16#8185 | Reserved. | — | — |
| 16#8186 | Invalid station address. | Slave address on Modbus_Master does not match the configured address of the PM2230. |
Set MB_ADDR = 1..247 matching the PM2230 setup screen. |
| 16#8281 | Timeout — no response from slave. | Wiring, biasing, address mismatch, RESP_TO too short, polarity reversal. | See Section 8. |
0x8281 is almost always "I sent a request, nobody answered within RESP_TO." The slave either cannot see the request, cannot transmit a reply, or is configured to a different station address.
8. Wiring, Biasing, and Termination for the CM 1241 ↔ PM2230 Link
The CM 1241 RS485 pinout is:
| Pin | Signal | PM2230 Terminal |
|---|---|---|
| 3 | D+ / B | D+ (RS485+) |
| 8 | D− / A | D− (RS485−) |
| 5 | Functional Earth (FE) | — |
| 7 | Logic Ground (GND) | Common with PM2230 GND (recommended) |
The PM2230 (Schneider Electric) is a 2-wire half-duplex device. Connect:
- CM1241 pin 3 (D+/B) → PM2230 D+ terminal
- CM1241 pin 8 (D−/A) → PM2230 D− terminal
- CM1241 pin 7 (GND) → PM2230 COM (signal ground)
For cable runs shorter than 10 m the on-module biasing is usually sufficient. For longer runs, add failsafe biasing at the master end: a 620 Ω pull-up from D+/B to +5 V and a 620 Ω pull-down from D−/A to GND, with a 120 Ω termination resistor across the bus at the far end. Do not place a second 120 Ω termination at the CM 1241 end — that produces a T-network that attenuates signals above 50 m.
9. Library Choice: MODBUS (RTU) vs Legacy Modbus
Two distinct instruction libraries ship with TIA Portal:
| Library | Block Name | Instruction Version | CPU Firmware | Notes |
|---|---|---|---|---|
| Modbus (legacy) | MB_COMM_LOAD, MB_MASTER, MB_SLAVE | V2.x | V1.x–V4.2 | Older names; some projects still depend on them. |
| MODBUS (RTU) — current | Modbus_Comm_Load, Modbus_Master, Modbus_Slave | V3.0 / V3.1 / V4.x | V4.0+ | New names; mandatory from TIA V14 SP1 onwards. |
Mixing instructions from the two libraries in the same project is allowed but each port must use the matching pair — Modbus_Comm_Load + Modbus_Master on one port, MB_COMM_LOAD + MB_MASTER on another. If the project was migrated from a V13 SP1 source, you may inherit the legacy MB_COMM_LOAD V2.1 blocks. Open the block properties to confirm the version, then either:
- Replace the legacy pair with the new
Modbus_Comm_LoadV3.1+ instructions (recommended for V4.x CPU), or - If the CPU firmware is older than V4.0, keep the legacy V2.1 instructions but verify they are sourced from the right library.
10. Step-by-Step Resolution Procedure
- Verify the CPU firmware version. Open Online → Accessible Devices, select the S7-1200, and read the order number and firmware. Note both.
- Open the device configuration of the S7-1200 station and confirm the CM 1241 is online (green check). Note the Hardware identifier under Properties → System constants.
-
Insert a single
Modbus_Comm_Loadinstance in OB1. PinPORTto the CM 1241's hardware identifier (typically"CM_1241_RS485_1"). -
Open the instance DB and set the start value of
MODEto4. SetBAUD,PARITY,FLOW_CONTROLmatching the PM2230 configuration (default 19200, 8E1, no flow control → BAUD = 5, PARITY = 2, FLOW_CONTROL = 0). -
Trigger
REQwith a rising edge fromFirstScan(%M1.0) or a one-shot coil driven by a user flag. -
Download the project to the CPU and go online. Watch the CM 1241 LEDs. After the rising edge on
REQ, the TX LED should flicker every time the bus is active. -
Insert
Modbus_Masterin OB1 with the same instance DB family. SetMB_ADDR= 1 (PM2230 default),MODE= 0 (read),DATA_ADDR= 0x0000 (for V_avg on PM2230),DATA_LEN= 2 (single 32-bit float), andDATA_PTRpointing to a data block ofARRAY[0..1] OF WORD. -
Trigger
Modbus_Master.REQwith a periodic pulse (e.g. 500 ms from a clock bit or TON timer). -
Monitor the response:
Donepulses TRUE for one cycle, then resets. Route it to%M30.0and watch online.
11. Verification Checklist
- [ ]
Modbus_Comm_Load.Statusreturns16#0000for one cycle afterREQrises, then settles to16#7000while idle. - [ ]
Modbus_Comm_Load.Doneis TRUE for exactly one scan after configuration. - [ ]
Modbus_Comm_Load.Erroris FALSE. - [ ] The CM 1241 TX LED flashes within 100 ms of a Modbus_Master
REQpulse. - [ ] The PM2230 RX LED (if equipped) flashes on the same pulse.
- [ ]
Modbus_Master.Statusshows16#0000for one cycle, then16#7000while idle. - [ ]
Modbus_Master.Doneis TRUE on success. - [ ] The requested register (e.g. PM2230 V_avg at address 0x0B58) returns a non-zero value matching the live voltage.
12. Diagnostic Decision Flow
13. Field-Proven Tips
-
Watch the instance DB online. With TIA Portal online, expand the instance DB and verify that
MODE,BAUD,PARITY,FLOW_CONTROLshow the values you configured. If the online value differs from the start value, the block is being re-initialised by code — fix the upstream logic first. - Disable the watch dog during commissioning. If the OB1 cycle time exceeds the configured scan watchdog (default 150 ms for V4.4+), the CPU can drop the configuration and the CM 1241 will revert to 16#7000 on the next startup. Either extend the watchdog in CPU Properties → Cycle Time or optimise the OB1 cycle.
- Use the Modbus RTU library's free-port diagnostic in TIA V17+: enabling Online → Diagnostics → Modbus Trace shows the raw byte stream and is the fastest way to confirm the master is sending valid Modbus frames.
- Avoid the "Modbus_Comm_Load in OB100" anti-pattern. The Startup OB runs once at restart; placing long-running or conditional blocks there is fragile. Run everything from OB1.
-
Do not re-trigger
Modbus_Comm_Load.REQon every cycle. The instruction is designed to receive a single rising edge to apply the configuration. Triggering it on every OB1 cycle wastes CPU time and may cause intermittent busy flags. The cleanest pattern is FirstScan or a manual HMI button.
14. Related Standards and Reference
The CM 1241 implements the physical layer of ANSI/TIA-485-A (often called RS485) and the data-link layer of Modbus over serial line as defined by the Modbus Organization's Modbus over Serial Line Specification and Implementation Guide V1.02. A working RS485 link is implicitly defined by the standard; the Modbus application layer then defines function codes 01–06 and 0F/10 for read/write access to coils, discrete inputs, input registers, and holding registers.
What does Modbus_Comm_Load status 16#7000 mean on an S7-1200 CM1241?
16#7000 is a "no job in progress" status, not an error. It indicates that REQ is 0 and no previous configuration is still running. To configure the port, drive REQ with a single rising edge from FirstScan (%M1.0) or a user flag. After the edge the status will be 16#0000 for one cycle, then return to 16#7000.
Why is my CM 1241 TX/RX LED not flashing even though status is 16#7000?
Most often MODE is left at 0 (full-duplex RS422) instead of 4 (half-duplex RS485). Open the Modbus_Comm_Load instance DB, set the start value of MODE to 4, recompile, and download. Verify the start value online, then re-trigger REQ to arm the port.
How do I clear Modbus_Master error 0x8281?
0x8281 is a response timeout. Confirm the wiring (CM 1241 pin 3 = D+ to PM2230 D+; pin 8 = D− to PM2230 D−), the baud rate and parity match between master and slave, that the slave station address (MB_ADDR) matches the PM2230 configuration, and that RESP_TO is at least 1000 ms. Adding a 120 Ω termination at the far end of the bus and verifying that the bus is not shorted will usually clear the fault.
Should I use MB_COMM_LOAD or Modbus_Comm_Load?
Use the new Modbus_Comm_Load V3.1 or later for any S7-1200 CPU with firmware V4.0 or higher (TIA V14 SP1 and newer). The legacy MB_COMM_LOAD V2.1 is reserved for older CPU firmware or for projects that have not been migrated. Mixing the two library families in the same project is allowed only if each port uses the matching pair.
Where should I place the Modbus_Comm_Load call — OB100 or OB1?
Place the call in OB1. Startup OBs (OB100) execute only once and the configuration can be reset on the first watchdog if the Startup OB overruns. Drive REQ with a one-shot from FirstScan memory (e.g. %M1.0) to ensure the instruction is armed on every cold/warm restart.