Problem Overview
An S7-400 PLC uses a SIMATIC CP 341 communication processor configured as a Modbus RTU master. The application calls FB8 (P_SND_RK) to send a request with function code 03 (Read Holding Registers) and FB7 (P_RCV_RK) to fetch the slave response. The following symptoms are observed simultaneously:
- Both the TX and RX LEDs on the CP 341 blink, but the SF LED never lights.
-
FB8 DONEtoggles andNDRrises to 1 on every transmit cycle, so the request frame is being put on the wire. -
FB7never setsNDR;ERRORremains 0 andSTATUSstays at16#0000. - The CP 341 diagnostic buffer records event
IF1: Modbus receive errorwith ID16#F1C8:0830and the detail string "Master timeout during waiting for response frame, Slave broadcast not permitted with this function code."
The combination of a clean FB8 transmit, a stuck FB7 status, and the F1C8:0830 diagnostic event is the classic signature of a CP 341 Modbus master that is not receiving a valid response frame from the slave within the configured turnaround window. The first trap is the RX LED: on a CP 341 the RX LED indicates line activity, not a correctly framed Modbus PDU. The second trap is the FB7 status word of 16#0000; that value is the runtime status of the receive FB instance, not a copy of the CP 341's last diagnostic event. The real diagnostic data is in the CP 341 diagnostic buffer and in the F1C8 event ID.
CP 341 Hardware and Driver Context
The CP 341 is a point-to-point module for S7-300 (used here only as a reference) and S7-400 systems. The relevant order numbers for the three electrical interfaces are:
| MLFB (Order Number) | Interface | Typical Use |
|---|---|---|
| 6ES7341-1AH02-0AE0 | RS-232C (V.24) | Single-drop, short cable, modem-friendly |
| 6ES7341-1BH02-0AE0 | RS-485 (2-wire) | Multi-drop Modbus RTU bus |
| 6ES7341-1CH02-0AE0 | RS-422 / RS-485 (4-wire) | Full-duplex point-to-point, half-duplex bus |
The Modbus RTU master protocol is not a firmware feature of the CP 341 itself; it is a loadable driver. Without the Modbus master driver loaded into the CP 341 the F1C8 diagnostic ID range is never produced and the FB7/FB8 calls are answered with runtime errors. Always verify the driver is loaded through the CP 341 "Parameter Assignment" tool in STEP 7 / SIMATIC Manager before assuming a wiring or address fault.
The Modbus master driver and the user-side runtime blocks form a strict contract:
- FB8 (
P_SND_RK) puts a Modbus request into the CP 341 send buffer and signals completion throughDONE/NDR. - The CP 341 transmits the frame, then waits for the response according to the configured inter-character and inter-frame timeouts (driven by baud rate and the Modbus 3.5 character silence rule).
- If a valid response frame is received, the CP 341 stores it in its internal receive buffer and FB7 (
P_RCV_RK) returns it to the user program withNDR=1. - If no valid response is received within the configured master timeout, the CP 341 closes the cycle, posts the F1C8:0830 event to the diagnostic buffer, and FB7 remains at
NDR=0, ERROR=0, STATUS=16#0000because the cycle was never closed with a payload to fetch.
Decoding Diagnostic Event 16#F1C8:0830
The CP 341 organizes diagnostic events in the form 16#F1C8:xxxx where the high word identifies the protocol instance (F1C8 = Modbus master/slave event class) and the low word is the specific sub-code. For F1C8:0830 the decode is:
| Field | Value | Meaning |
|---|---|---|
| Event class | 16#F1C8 | Modbus protocol class on the CP 341 |
| Sub-code | 16#0830 | Master timeout waiting for response frame; broadcast not permitted for the active function code |
| Channel | IF1 | Interface 1 of the CP 341 (the only Modbus instance) |
| Direction | Receive (RX) | Master side is waiting on a response that never arrived or that was rejected |
Always read F1C8 events in the order they were logged. A repeated F1C8:0830 following the initial 0x0000 / 0x0000 events is a stable master timeout, not a one-off glitch.
Root Cause: Broadcast Address Violation and Its Aftermath
Modbus defines slave address 0 as a broadcast address. A master may send a broadcast request and every conforming slave is allowed to act on it (write coils/registers), but no slave is permitted to return a response to a broadcast. The Modbus master driver on the CP 341 encodes this rule in the F1C8:0830 diagnostic: the master correctly transmitted the FC 03 frame, then sat on the bus waiting for a response that no slave is allowed to produce, then timed out.
The original symptom in the user program—slave address 0 in the configuration DB—is the single highest-probability cause of the F1C8:0830 cluster. When the user changed the slave address to 1 and then to 4, the broadcast-specific text is no longer the literal cause of the timeout, but the sub-code remains 0830 because the master still did not receive a valid response within the timeout window. This is a strong signal that the address change exposed a second, underlying fault rather than introducing a new one.
The typical second-layer causes, in order of field frequency, are:
- Slave power, baud rate, parity, or stop-bit mismatch with the CP 341 configuration.
- Wrong Modbus register address (e.g., 1-based vs 0-based offset mismatch, or "input register" map used where the device expects "holding register").
- RS-485 wiring problem: A/B polarity swap, missing or doubled terminator, missing common ground, or the CP 341 interface variant (RS-232 vs RS-485) not matching the cable plant.
- Slave is responding in Modbus ASCII or another protocol, not RTU.
- Slave turnaround time is longer than the CP 341 master timeout (default 1000 ms in the parameter tool).
- Two masters on the same RS-485 segment.
Why the RX LED Is Misleading
The RX LED on a CP 341 toggles whenever the UART detects a start bit on the line. It does not validate framing, parity, silence rule, or Modbus PDU integrity. The most common false-positive patterns are:
- Line noise from ungrounded RS-485 cable produces start bits and the RX LED flickers continuously even with no slave present.
- The slave's echo (RS-485 transceivers that fail to disable the transmitter fast enough) lights the RX LED with the master's own request.
- A second device on the bus (e.g., a configuration tool left connected) replies with garbage that lights the RX LED but cannot be parsed as a Modbus PDU.
For a true RX validation, monitor the line with a Modbus-aware tap (such as a Softing modbusSniffer or any RS-485 line monitor that decodes RTU frames) and confirm that you see a properly framed response with the correct slave address echoed back.
RS-232 vs RS-485 Cabling on the CP 341
Identifying the physical interface variant is mandatory before touching the wiring. The three CP 341 variants use different pinouts on the sub-D connector and have different Modbus electrical constraints.
CP 341-1AH02 (RS-232C / V.24)
For point-to-point Modbus, the relevant signals are TXD, RXD, RTS, CTS, and signal ground. Modbus RTU on RS-232 works only with a single slave and short cable. Most field installations use a null-modem cable; a straight-through cable will not work because the CP 341 drives TXD on pin 2 and expects RXD on pin 3.
CP 341-1BH02 (RS-485, 2-wire half-duplex)
This is the most common variant for Modbus RTU. The bus uses a single twisted pair with characteristic impedance of 120 Ω, terminated at both ends with 120 Ω. The A pin of one device must connect to the A pin of every other device; the B pin to the B pin. A common return (signal ground) is strongly recommended. Reversing A/B is the single most common field fault and the failure mode is exactly what the user sees: TX LED blinks, RX LED flickers, no valid response, F1C8:0830 in the buffer.
CP 341-1CH02 (RS-422 / RS-485, 4-wire)
Provides full-duplex (RS-422) and half-duplex (RS-485) operation. For a half-duplex Modbus RTU bus you wire the master's TX+/TX− to every slave's RX+/RX− and the master's RX+/RX− to every slave's TX+/TX−. The CP 341 expects you to enable the bus mode that matches the wiring in the parameter tool.
Configuration DB (CFG_DB) Parameter Verification
The FB8 call references a Modbus master configuration DB (sometimes called the parameter DB) that the user creates in the "CP 341 - Parameter Assignment" tool. Most F1C8:0830 events can be traced to a value in that DB. The fields the engineer must inspect are:
| Parameter | Typical Value | Field-Fault Mode That Triggers F1C8:0830 |
|---|---|---|
| Slave address | 1 to 247 | 0 = broadcast, no response allowed; values 248 to 255 are reserved |
| Function code | 03 (Read Holding Registers) | 01/02/03/04 read normally; 05/06/15/16 write; broadcast is permitted only for some write codes |
| Starting register | 0-based 16-bit offset (0x0000 to 0xFFFF) | Off-by-one with 1-based device documentation; high register address; empty register map |
| Register count | 1 to 125 (Modbus FC 03 limit) | 0 = no response; count past slave map = exception 02 (illegal data address) |
| Response timeout | 500 to 3000 ms typical | Too short for slow slaves → 0830; too long masks wiring faults |
| Baud rate / parity / data bits / stop bits | 19200,8,E,1 or 9600,8,N,2 | Any mismatch produces framing errors and discards the response → 0830 |
| Inter-frame delay | 3.5 char time (auto from baud) | Manual override that is too short causes the master to start the timer before silence rule is met |
For FC 03 with a slave that documents its registers as 40001, the value to put in the "Starting register" field is 0 (the offset), not 40001. Many Chinese-vendor slaves use 1-based documentation that requires the engineer to subtract 1. If the slave rejects the address it returns exception code 02; if it accepts but you write to a different register you may not see any error at all on the wire, just garbage data on FB7.
FB7 and FB8 Status Word Analysis
Understanding the runtime status values is essential to avoid being misled by FB7's STATUS = 16#0000. The two FBs use the same status word encoding when the CP 341 is the underlying port:
| STATUS | Meaning on FB7 (P_RCV_RK) | Meaning on FB8 (P_SND_RK) |
|---|---|---|
| 16#0000 | No data yet, no error; call again | Last send complete and acknowledged |
| 16#0001 | Data received, NDR = 1 | Reserved |
| 16#7000 | No request active, FB is idle | No request active |
| 16#7001 | Receive pending (already issued to CP) | Send pending (already issued to CP) |
| 16#7002 | Receive completed, NDR or ERROR set next call | Send completed, DONE or ERROR set next call |
| 16#80xx | Error class 0x80 + specific code (see CP 341 manual) | |
The status value of 16#0000 in the user's report is therefore not an error indication. It is the steady-state value of an FB7 instance that has not yet seen a payload. The actual error is recorded only in the CP 341's diagnostic buffer (F1C8:0830), which is why reading the buffer is the single most useful diagnostic step.
Timeout Parameter Tuning
The Modbus master driver uses three timing parameters that interact with the F1C8:0830 sub-code:
- Response timeout — time the master waits for the first byte of the response. Default is 1000 ms. If the slave's startup or scan latency is longer, increase it to 2000–3000 ms for slow PLC-based slaves.
- Inter-character timeout — time the master waits between consecutive bytes of the response. Default is the Modbus 1.5 character time at the configured baud rate. At 9600 baud that is roughly 1.7 ms; do not raise it manually unless you have a slave that streams data with a delay between bytes.
- Inter-frame timeout — the 3.5 character silence that delimits RTU frames. Default is auto-calculated. Manual overrides should be left alone unless you have a documented slave requirement.
A slave that takes 50 ms to formulate the response is still well inside a 1000 ms default. If raising the response timeout to 5000 ms does not clear F1C8:0830, the slave is not transmitting at all; the cause is wiring, addressing, or configuration rather than timing.
Slave Device Validation and Loopback Test
Before changing the CP 341 configuration further, validate the slave independently. The field procedure is:
- Connect a Windows PC running a Modbus master test tool (Modbus Poll, CAS Modbus Scanner, or any node-RED flow) to the same bus that the CP 341 uses.
- Use the same baud rate, parity, and stop bits as the CP 341 configuration.
- Send a FC 03 read to the same slave address and register that the CP 341 is targeting.
- If the PC tool returns valid data, the slave is healthy and the bus is wired correctly. The fault is on the CP 341 side (configuration, driver, or interface variant).
- If the PC tool also fails, the fault is the slave or the bus. Disconnect the CP 341 from the bus while you test, otherwise the two masters will collide and the CP 341 will post F1C8:0830 with broadcast-style messages.
For a CP 341 sanity check on RS-485, place a 120 Ω terminator on the bus master end and a second 120 Ω at the slave end. Short the A and B wires together at the slave end; the master's RX LED will light continuously and the F1C8:0830 will switch to a different sub-code (framing error). If the sub-code does not change, the master is not even seeing the bus, which points to an interface variant mismatch.
Step-by-Step Resolution Procedure
- Open the CP 341 diagnostic buffer in STEP 7 / SIMATIC Manager. Confirm the F1C8:0830 entry and read the timestamp to verify the event is current.
- Inspect the Modbus master configuration DB created in the CP 341 parameter tool. Confirm slave address is in the range 1 to 247.
- Verify the function code matches the slave's supported set. For FC 03, the slave must support Read Holding Registers (4xxxx range).
- Verify the starting register and count against the slave's register map. Subtract 1 if the slave documentation is 1-based.
- Match baud rate, parity, data bits, and stop bits exactly to the slave. A common field default is 19200,8,E,1 for industrial Modbus RTU.
- Identify the CP 341 interface variant by MLFB and confirm the cable matches RS-232, RS-485 2-wire, or RS-422/485 4-wire topology.
- Check A/B polarity on RS-485. A continuity check with a multimeter from CP 341 pin labeled A to slave pin labeled A must read low impedance; same for B. Reversed polarity is the most common wiring fault.
- Confirm the bus has exactly two 120 Ω terminators, one at each physical end. Remove any terminators on intermediate devices.
- Temporarily raise the response timeout in the CP 341 parameter tool from 1000 ms to 3000 ms and download the new configuration. Re-test.
- Run a third-party Modbus master on a PC against the slave on the same bus. Confirm the slave responds to FC 03. If it does not, the fault is the slave or the bus; fix that first.
- Re-test the CP 341. If the diagnostic buffer is now clean, the original F1C8:0830 was the address-0 broadcast combined with a wiring or timing fault. The address change alone is not enough.
Verification and Commissioning Checklist
| Check | Pass Criterion | Where to Verify |
|---|---|---|
| CP 341 diagnostic buffer free of F1C8 events | No new entries after 100 requests | STEP 7 > CP 341 > Diagnostic Buffer |
| FB8 toggles DONE / NDR per request | One NDR per FB8 call | User program watch table |
| FB7 sets NDR with valid data | Payload length matches register count × 2 bytes | User program watch table |
| Slave address echoed in response | First byte of response equals configured slave address | Line monitor or FB7 receive buffer |
| Function code echoed in response | Function code = 03 (no exception) | Line monitor or FB7 receive buffer |
| Byte count in response | Byte count = register count × 2 | FB7 receive buffer[2] |
| No SF LED on CP 341 | LED off during steady-state polling | Physical inspection of the module |
| Bus voltage on RS-485 idle | A > B by ≥ 200 mV with no traffic | DMM at the CP 341 terminals |
| Loopback smoke test | CP 341 sees its own echo and decodes a valid Modbus PDU | Tie A→A and B→B at the slave end with no slave attached; F1C8 sub-code should change to a framing-error code |
Extended CP 341 Modbus Diagnostic Event Reference
The F1C8 class contains several sub-codes that the engineer will encounter. Use this as a quick map:
| Event ID | Driver-Side Meaning | Typical Field Cause |
|---|---|---|
| 16#F1C8:0820 | Frame sent, no error | Informational; ignore |
| 16#F1C8:0830 | Master timeout, no response within window | Slave offline, wrong address, broadcast, wiring, parameter mismatch |
| 16#F1C8:0831 | Framing error on response | Parity / stop / baud mismatch; RS-485 collision; line noise |
| 16#F1C8:0832 | CRC error on response | Noise, wrong baud, half-duplex turnaround problem |
| 16#F1C8:0833 | Function code not supported by slave | Slave does not implement FC; check the device manual |
| 16#F1C8:0834 | Address out of range in slave response | Off-by-one in starting register; slave returned exception 02 |
| 16#F1C8:0835 | Slave exception response received | Read the exception code from the FB7 receive buffer for the specific cause |
| 16#F1C8:0836 | Driver not loaded | Modbus master driver missing in CP 341 parameter tool |
Related Configuration: Avoiding F1C8 Errors During CP 341 Driver Download
If the Modbus master driver on the CP 341 is not initialized cleanly, every master request will be answered with an exception code frame and the diagnostic buffer will accumulate F1C8 entries in quick succession. The driver initialization is performed by the parameter tool when you download the CP 341 configuration. If you see F1C8:0836 in the buffer, re-run the parameter download and confirm the driver is reported as "loaded and running" in the module's online diagnostics. The slave-side counter to this is documented in the MODB_341 Modbus slave instruction for CP 341 (S7-300, S7-400) manual, which states explicitly: "If initialization ends with errors, Modbus communication is not possible. All requests from the Modbus master system are answered with an exception code frame."
Frequently Asked Questions
What does Siemens diagnostic event ID 16#F1C8:0830 mean on a CP 341?
It is the Modbus master timeout event. The CP 341 transmitted a request and did not receive a valid response frame within the configured response timeout. The default response timeout is 1000 ms. The "Slave broadcast not permitted" text in the event detail is the original error-class description; it is reported on every F1C8:0830 entry, including those caused by wiring or parameter mismatches.
Why is FB7 status still 16#0000 even though the diagnostic buffer shows an error?
FB7's STATUS word reflects the runtime state of the receive call, not the CP 341's last diagnostic event. When the master times out, the receive cycle is closed without a payload and FB7 remains at STATUS = 16#0000, NDR = 0, ERROR = 0. The real diagnostic data is in the CP 341's diagnostic buffer (F1C8:0830) and in the FB's error and done history.
Is Modbus slave address 0 ever legal on a CP 341 master?
Address 0 is the Modbus broadcast address. It is permitted only for write function codes (05, 06, 15, 16) and the CP 341 driver still sends the frame, but no slave is allowed to return a response. For FC 03 (Read Holding Registers) the broadcast always results in a master timeout and an F1C8:0830 event. Use a slave address in the range 1 to 247.
How do I tell whether the CP 341 variant is RS-232 or RS-485?
Read the MLFB on the front of the module. 6ES7341-1AH02-0AE0 is RS-232, 6ES7341-1BH02-0AE0 is RS-485 2-wire, 6ES7341-1CH02-0AE0 is RS-422 / RS-485 4-wire. Mismatching the interface variant to the cable is one of the top three causes of F1C8:0830 on first-time commissioning.
Can I use a CP 341 as a Modbus master without loading a driver?
No. The Modbus RTU master function is a loadable driver, not firmware. You must load the Modbus master driver into the CP 341 using the CP 341 parameter assignment tool in STEP 7 and download the configuration. If the driver is missing or fails to initialize, the CP 341 will report F1C8:0836 and will not respond to FB7/FB8 calls in a meaningful way.