Problem Overview
The S7-1200 family supports legacy Modbus RTU on a serial port using the MB_COMM_LOAD and MB_MASTER/MB_SLAVE instructions. A recurring field failure is a CPU 1215C DC/DC/RLY on firmware V4.4 paired with a CB 1241 (RS485) signal board V1.0: MB_COMM_LOAD reports STATUS = 16#7000, the DONE bit briefly pulses TRUE on the first call, and the master then returns error 0x80C8 for every read/write request. The transmit LED stays dark; only the RX LED flickers as line noise or a malformed response is sampled. Swapping the CB 1241 for a CM 1241 module (same baud rate, parity, slave address) restores communication immediately.
This article isolates the root cause, walks through correct MB_COMM_LOAD configuration for the CB 1241, and documents the conditions under which the signal board cannot be used and a CM 1241 must replace it.
Hardware Identification: CB 1241 vs. CM 1241
Siemens sells two mechanically and logically distinct RS485 products for the S7-1200. The differentiation is not optional and drives every parameter downstream of MB_COMM_LOAD.
| Attribute | CB 1241 (Signal Board) | CM 1241 (Communication Module) |
|---|---|---|
| Form factor | Plugs on top of the CPU (slot on the front underside) | Plugs on the left bus of the CPU or another CM |
| Catalog number (RS485) | 6ES7241-1CH30-1XB0 | 6ES7241-1CH32-0XB0 |
| Maximum number per CPU | 1 | 3 (depending on CPU) |
| Internal interface | CPU serial peripheral (shared interrupt path) | Left-side backplane (dedicated URAM and interrupt) |
| HW identifier range (TIA) | Subordinate to the CPU | Standalone node on the device list |
| MTBF in noisy 24 V cabinet | Lower (signal board is closer to the CPU) | Higher (galvanically isolated field port) |
| Typical use | Low-channel, cost-sensitive, short cable | Production line, long cable, multiple drops |
The CB 1241 and the CM 1241 do not share a hardware identifier. If you port a working TIA Portal project from a CPU with a CM 1241 to a CPU with a CB 1241 (or vice versa), the symbolic HW ID at the MB_COMM_LOAD PORT input must be remapped or the block will silently bind to the wrong port, producing the 16#7000/80C8 symptom set above.
Symptoms and Status Code Meanings
16#7000 at MB_COMM_LOAD
16#7000 is not an error. It is the no active job status. Per the legacy Modbus RTU instruction set, the STATUS output of MB_COMM_LOAD returns 16#7000 between calls and immediately after a successful port configuration. The user observation that DONE pulses TRUE on the first call and then falls back is normal: DONE, ERROR, and STATUS are valid for a single CPU scan only. Latch them in your code if you need persistent diagnostics.
0x80C8 at MB_MASTER
Code 0x80C8 from MB_MASTER means the master transmitted a valid request, started the response window, and either:
- did not see any response characters within the configured Response Timeout, or
- saw a response that failed Modbus CRC validation or contained an illegal frame length, or
- saw a Modbus exception code (0x01 – 0x0B) inside the response PDU.
An RX LED that flickers on the master with no TX activity is consistent with the master reading noise on the bus or a single corrupted byte from the slave. The TX LED staying dark is a strong indicator that the bus is held in receive-only mode or that the port itself was never placed into Modbus mode by MB_COMM_LOAD.
Root Cause: Why the CB 1241 Fails Where the CM 1241 Succeeds
There are three independent root causes that combine to produce the symptom in the field. Any one of them is enough; all three are easy to introduce together.
-
Hardware identifier mismatch. The PORT input of
MB_COMM_LOADis a HW identifier (uint). When the project is migrated, the new CB 1241 is inserted but the symbolic constant is not refreshed. The block binds to an invalid identifier; the firmware returns16#7000and no I/O is driven. -
MODE chosen after MB_COMM_LOAD execution. For RS485 2-wire networks
MODE = 4is the correct value, but it must be set in the device configuration and the value passed intoMB_COMM_LOAD'sMODEinput must match. If the constant block is read at compile time but the actual input is overwritten elsewhere (for example, by a move from a data block written incorrectly), the port will not enter half-duplex direction control and no slave reply will ever be framed correctly. -
CB 1241 hardware/firmware combination on CPU firmware V4.4. CPU 1215C firmware V4.4 with CB 1241 (6ES7241-1CH30-1XB0) HW V1.0 has documented field issues when the signal board is the only Modbus RTU master on the bus. The CM 1241 (6ES7241-1CH32-0XB0) shares its URAM with the left-side bus driver and handles DMA reads of the response buffer without contention. A noise burst during the inter-character timeout therefore does not corrupt the descriptor and
0x80C8does not appear.
Swapping the CB 1241 for a CM 1241 directly addresses point 3 and indirectly addresses point 1 (the new module forces a fresh device mapping and TIA Portal rebinds the HW ID automatically). The user's confirmation that "all settings are the same" and yet communication starts working is the practical proof.
Prerequisites for a Working CB 1241 Modbus Master
- CPU 1215C firmware V4.4 (6ES7215-1AG40-0XB0) or later 4.x revision
- CB 1241 RS485 (6ES7241-1CH30-1XB0) seated fully in the front slot
- TIA Portal V16 with the MODBUS (RTU) library V4.4 (or matching version)
- RS485 cable ≤ 50 m total bus length
- Terminating resistor engaged at both physical ends only, 120 Ω, 1 nF failsafe
- Common ground reference between master and slave
- Verified slave: tested with a Modbus poll utility on a PC first
Step-by-Step: Correct MB_COMM_LOAD Configuration
-
Insert the CB 1241 in the device view. Open Device configuration → Signal Board slot. The new node will appear in the project tree with a system-assigned hardware identifier (for example,
271). Write this number down — TIA Portal renumbers it whenever a sibling CM is added or removed. -
Configure the port in HWCN. Open the CB 1241 properties, set:
- Port configuration: RS485 Half-Duplex (2-wire)
- Receiver initial state: Active (suitable for 2-wire)
- Termination: ON only if the CB 1241 is at the physical end of the bus segment
-
Insert MB_COMM_LOAD in OB1 (or in a startup OB executed once at warm restart). Drive
REQwith a one-shot rising edge from a system clock (for example,"FirstScan"from the system clock memory) so the block runs exactly once after power-on. -
Bind the hardware identifier symbolically. Click the
PORTpin and pick the CB 1241 from the dropdown — do not type the numeric ID. The symbolic link is what survives a recompile. -
Set the MODE input. For RS485 2-wire half-duplex the constant is
4. Pin the input with a tag of typeWORDinitialised to16#0004or a constant literal. -
Set the baud rate, parity, and data bits to match the slave exactly. Use
BAUD = 9600,PARITY = 0(Even),DATABITS = 8,STOPBITS = 1for the most common Modbus defaults. Do not leave these as default; the default for a CB 1241 in TIA Portal is often 19200/8/E/1, which does not match many third-party slaves. -
Verify DONE rising edge. Latch
MB_COMM_LOAD.DONEinto aBOOLtag Comm_Load_Done. LatchERRORintoComm_Load_ErrandSTATUSintoComm_Load_Status(WORD). Only afterComm_Load_Doneis TRUE may the master call be enabled. -
Enable MB_MASTER only after Comm_Load_Done is TRUE. Wrap the
REQpin ofMB_MASTERin anANDwith the latched done bit. A request issued beforeMB_COMM_LOADfinishes configuring the port always returns0x80C8.
MB_COMM_LOAD Pin Map
| Pin | Direction | Type | Required value (CB 1241, RS485 2-wire) |
|---|---|---|---|
| REQ | IN | BOOL | Rising edge, one-shot at start-up |
| PORT | IN | HW identifier (UINT) | Symbolic link to CB 1241 (typically 269 – 274) |
| BAUD | IN | WORD | Matches slave: 1200/2400/4800/9600/19200/38400/57600/115200 |
| PARITY | IN | WORD | 0 = None, 1 = Even, 2 = Odd, 3 = Mark |
| DATABITS | IN | WORD | 7 or 8 (Modbus RTU must be 8) |
| STOPBITS | IN | WORD | 1 or 2 |
| FLOW_CTRL | IN | WORD | 0 = none for RS485 |
| MODE | IN | WORD | 4 = RS485 2-wire half-duplex |
| DONE | OUT | BOOL | Latch in user DB |
| ERROR | OUT | BOOL | Latch in user DB |
| STATUS | OUT | WORD | Latch in user DB; expect 16#0000 on success, 16#7000 between calls |
MODE Reference for CB 1241 and CM 1241
| MODE | Physical layer | Use when |
|---|---|---|
| 0 | RS232 full-duplex | Point-to-point RS232 (CM 1241 only) |
| 1 | RS422 full-duplex 4-wire | Point-to-point 4-wire, no echo |
| 2 | RS232 with modem signals | DTR/DSR (CM 1241 only) |
| 3 | RS422 full-duplex 4-wire | 4-wire slave with echo |
| 4 | RS485 2-wire half-duplex | Default Modbus RTU — most common |
| 5 | RS485 4-wire full-duplex | 4-wire master with RS485 transceivers |
| 6 – 11 | RS232C variants | CM 1241 RS232 only |
Verify the MODE input value in the compiled program (right-click block → Cross-reference). Any MOV or arithmetic instruction touching the MODE tag is suspect.
Status Code Diagnostics
| STATUS / ERROR | Source block | Meaning | Action |
|---|---|---|---|
| 16#0000 | MB_COMM_LOAD / MB_MASTER | No error | Continue |
| 16#7000 | MB_COMM_LOAD / MB_MASTER | No job active | Normal between calls; do not interpret as error |
| 16#80C8 | MB_MASTER | Read/write response timeout, CRC, or Modbus exception | Check wiring, termination, response timeout, slave address |
| 16#8188 | MB_MASTER | Timeout in inter-character wait | Slave paused mid-frame; check slave |
| 16#818C | MB_MASTER | Invalid CRC or illegal frame length | Check baud, parity, and ground reference |
| 16#8380 | MB_COMM_LOAD | Invalid MODE value | Set MODE = 4 for RS485 2-wire |
| 16#8381 | MB_COMM_LOAD | Invalid BAUD | Use a value from the table |
| 16#8382 | MB_COMM_LOAD | Invalid PARITY | Use 0/1/2/3 |
| 16#8387 | MB_COMM_LOAD | Wrong PORT HW identifier | Re-bind the symbolic HW ID |
| 16#83CF | MB_COMM_LOAD | Parity mismatch with MODE | Adjust parity; for Modbus RTU the only legal combination is 8/E/1 or 8/N/2 |
Wiring and Termination
Although the original problem was solved by hardware swap, the symptom (RX flicker only) is also classic for a bus that is held in receive by an engaged termination at the master when no slave is driving the line. Apply the following rules:
- Engage the CB 1241 termination DIP switch only if the device is at the physical end of the segment.
- If the bus is < 5 m, termination may be omitted entirely provided cable capacitance is low and the baud rate is ≤ 19200.
- For a 2-wire RS485 bus, the shield is bonded to ground at one end only (typically the cabinet end). The signal ground (pin 5 on the CB 1241 DSUB-9) must be tied to the slave ground; floating grounds produce CRC bursts and intermittent 0x80C8.
- Verify A/B polarity. Swapping A and B on exactly one end is correct; swapping on both ends is the most common commissioning mistake and produces a bus where every byte is inverted.
Verification Procedure
- Power-cycle the CPU. Watch the CB 1241 TX LED at the moment
MB_COMM_LOADruns — it will not flash, this is normal. - Open the user DB. Confirm
Comm_Load_Done = TRUE,Comm_Load_Err = FALSE,Comm_Load_Status = 16#0000after the first cycle. - Trigger a single
MB_MASTERread of a known holding register. Observe TX LED one short burst, then RX LED. If RX does not flash, the slave is not responding. If RX flashes once with the same length as TX, the slave is responding with an exception code embedded in the PDU (decode withMB_MASTERSTATUS). - Set the Response Timeout on
MB_MASTERto 1000 ms during commissioning. Once communication is stable, drop it to 200 ms. - Use a Modbus poll utility on a PC tapped onto the bus and read the same register. If the PC succeeds and the PLC fails, the bus is healthy and the problem is in the PLC project (HW ID, MODE, or sequence).
When to Migrate from CB 1241 to CM 1241
Replace the signal board with a communication module if any of the following apply. The catalog number for the replacement is 6ES7241-1CH32-0XB0 (RS485) or 6ES7241-1AH32-0XB0 (RS232).
- The CB 1241 is the only Modbus master on the segment and the field exceeds 5 m in an electrically noisy cabinet (VFDs, contactors, switching power supplies).
- You need more than one Modbus master or a mix of Modbus and USS/Freeport on the same CPU.
- You need galvanic isolation between the field and the CPU backplane; the CM 1241 isolates, the CB 1241 does not.
- You observe intermittent 0x80C8 errors that do not correlate with a specific slave, with a CB 1241 sitting on CPU firmware V4.4 and you cannot update the CPU firmware.
Commissioning Sequence (CM 1241 and CB 1241 Common)
- Validate slave on PC with Modbus Poll, Modbus Doctor, or an equivalent utility.
- Open TIA Portal project, install the new module in HWCN, and let the portal assign a HW ID.
- Drop
MB_COMM_LOADin OB1, bind PORT symbolically. - Set MODE = 4, BAUD/PARITY/DATABITS/STOPBITS to the values confirmed with the PC test.
- Trigger
REQwith a one-shot from FirstScan or a system clock edge. - Latch DONE, ERROR, STATUS into a global DB.
- Only after
DONEpulses TRUE for the first time, gateMB_MASTER.REQwith the latched done bit. - Issue one read, verify RX LED on the new module, and confirm the value lands in the destination tag.
Troubleshooting Matrix
| Symptom | Likely cause | Fix |
|---|---|---|
| STATUS = 16#7000 forever, DONE never TRUE | MB_COMM_LOAD never executed or wrong HW ID | Verify OB1 contains MB_COMM_LOAD, verify PORT is symbolic to the new module |
| STATUS = 16#8380 | Invalid MODE | Use 4 for RS485 2-wire |
| STATUS = 16#8387 | PORT is not a valid HW identifier | Re-bind symbolic HW ID; never hard-code |
| DONE pulses once, then nothing, MB_MASTER returns 0x80C8 | MB_MASTER.REQ issued before port configured, or wiring wrong | Gate REQ behind latched DONE; check A/B and ground |
| RX LED flickers, TX LED dark | Master never sends — wrong MODE, wrong port, or wrong MODE constant | Audit MODE input, audit hardware ID |
| Modbus Poll on PC works, PLC fails | Bus is healthy; PLC project is wrong | Check HW ID, MODE, sequence, response timeout |
| Works for hours, then 0x80C8 burst | Inter-character timeout, slave reset, or CRC noise | Add ground reference, lower baud, replace CB 1241 with CM 1241 |
Related Documentation
- Legacy Modbus RTU communication (CM/CB 1241 only) — TIA Siemens Cloud — official Siemens reference for the legacy Modbus RTU library on the S7-1200, including the MB_COMM_LOAD and MB_MASTER instruction set and parameter tables.
- S7-1200 Programmable Controller System Manual, chapter "Communication" — full hardware description of CB 1241 and CM 1241 modules.
- S7-1200 Function Manuals for "Point-to-Point Communication" — MODE, BAUD, PARITY, and flow control reference.
FAQ
Why does MB_COMM_LOAD return 16#7000 if that is not an error?
16#7000 is the "no job in progress" status that MB_COMM_LOAD reports when it is not actively configuring the port. Between calls — and immediately after a successful configuration — the STATUS output returns 16#7000 by design. If DONE pulsed TRUE on the first call, the port was configured correctly. The bug is downstream, almost always in MB_MASTER, in the wiring, or in a stale hardware identifier.
Is MODE 4 the correct value for the CB 1241 RS485 2-wire Modbus RTU bus?
Yes. MODE 4 selects RS485 2-wire half-duplex, which is the only legal mode for a multi-drop Modbus RTU bus. Other values are reserved for RS232, RS422, or RS485 4-wire topologies. The MODE value must be supplied as a constant or a data block word initialised to 16#0004 and must be applied at the MB_COMM_LOAD input, not only in the HWCN port configuration.
What does error 0x80C8 mean on MB_MASTER?
Error 0x80C8 means the master issued a valid Modbus request, started the response window, and either timed out waiting for the slave to reply, received a frame with a CRC or length error, or received a frame containing a Modbus exception code (0x01 – 0x0B). It is a slave-side problem only after the master side has been verified with a PC Modbus utility.
Do I have to use a terminating resistor on a CB 1241 RS485 bus?
Terminate only at the two physical ends of the bus segment with 120 Ω in series with a 1 nF failsafe capacitor. If the segment is shorter than 5 m and the baud rate is 19200 or less, termination can often be omitted. If the CB 1241 is in the middle of a longer bus, leave its termination OFF. Engaging termination in the middle of a bus attenuates the signal and produces intermittent 0x80C8 errors.
When must I replace the CB 1241 with a CM 1241?
Replace the CB 1241 (6ES7241-1CH30-1XB0) with a CM 1241 RS485 (6ES7241-1CH32-0XB0) when you need a second serial port, when the bus length exceeds 5 m in a noisy cabinet, when you require galvanic isolation, or when the CB 1241 / CPU firmware V4.4 combination returns 0x80C8 errors that cannot be cleared by re-binding the hardware ID, fixing MODE, and fixing the request sequence. The CM 1241 routes Modbus RTU through the left-side bus driver and is not subject to the same interrupt contention as the signal board.