Resolving ET200SP Modbus Master Error 7000 with PtP Blocks
When a SIMATIC ET 200SP distributed I/O station is configured as a Modbus RTU master and paired with a SIMATIC S7-300, S7-400, S7-400H, S7-1200, or S7-1500 controller, the most common commissioning symptom is that the MODBUS_COMM_LOAD (STEP 7 V5.5: FB640 "Modbus_Master"; TIA Portal: MODBUS_COMM_LOAD_DB) function block reports status code 7000 on its STATUS output, never sets the DONE bit, and the CPU diagnostic buffer records an area access error on the backplane serial module. The block is then disabled (EN never propagates) and no Modbus traffic is generated. This article explains why status 7000 is reported, what is missing in the program, and the exact block sequence required to clear the fault and bring up the link.
1. Problem Overview
Symptom summary observed on a typical S7-400H station with an ET 200SP on PROFIBUS or PROFINET:
- The block instance of
MODBUS_COMM_LOAD/FB640executes, but theDONEoutput never goes TRUE. - The
STATUSoutput reads16#7000continuously. - The S7 CPU diagnostic buffer lists "Area access error" on the ET 200SP interface module (e.g., IM 155-6 DP HF (6ES7155-6BA01-0CN0)) and the PtP communication module (e.g., CM PtP, 6ES7137-6AA00-0BA0 or 6ES7137-6AA01-0BA0).
- No
REQpulses reach the Modbus master block, or the block remains disabled. - Status LEDs on the CM PtP module do not progress through the typical initialization sequence.
2. What Status 7000 Actually Means
Siemens Modbus and PtP function blocks return status codes from a shared numbering scheme. Status 7000h is the inactive code emitted when the block has not yet been called with an active job, or when the referenced channel is not ready. The relevant excerpts from the Modbus RTU status table are summarized below.
| STATUS (hex) | Meaning | Severity | Likely Cause on ET200SP |
|---|---|---|---|
| 7000 | No job active / channel not initialized | Informational | PtP configuration block missing or not yet processed |
| 7001 | First call of an asynchronous job, no data yet | Informational | Job in progress, wait |
| 7002 | Subsequent call of an asynchronous job, no data yet | Informational | Job in progress, wait |
| 8080 | Serial port number out of range or port not configured | Error | PtP block not downloaded, wrong module address |
| 8090 | Module does not support the requested function | Error | Wrong module type selected in HW config |
| 80A0 | Negative acknowledgement from module | Error | Module not yet ready or fault state |
| 80C0 | Data consistency error between block and module | Error | Module firmware / library version mismatch |
Status 7000 should not be treated as a fault in isolation. When it persists on every cycle, the context is missing initialization, and the CPU diagnostic buffer's area access error confirms this: the block is trying to access process image addresses that have not been mapped because the serial port configuration is incomplete.
3. Root Cause: Missing PtP Communication Blocks
The ET 200SP CM PtP module does not perform Modbus RTU on its own. It is a generic serial interface (RS-232, RS-422, RS-485) that requires the user program to load a protocol stack and channel parameters at run time. In STEP 7 V5.5, this is done with the PtP communication library for distributed I/O (Siemens entry ID 69124220). In TIA Portal, the protocol is loaded by the MODBUS_COMM_LOAD instruction itself, but on STEP 7 V5.5 / S7-300/400, the equivalent Modbus master block (FB640) only operates once the lower-level PtP blocks have been added and processed.
The blocks that must be present in the program are:
-
FB611– PtP send/utility block -
FB612– PtP receive/utility block -
FB613– PtP protocol utility block -
FB614– PtP protocol utility block -
FB617– PtP protocol/initialization block for the serial port
If any of these blocks is missing from the S7 program container, the call to MODBUS_COMM_LOAD / FB640 cannot acquire the initialized channel and falls back to status 7000. Adding these blocks resolves both the persistent 7000 status and the area access error in the CPU diagnostic buffer.
MODBUS_COMM_LOAD instruction and no separate lower-level blocks are required. The FB611–FB617 sequence is specific to STEP 7 V5.5 with the legacy PtP library, which is why engineers porting an S7-1200 working program to an S7-400H often get stuck at status 7000.4. Hardware and Software Prerequisites
Before reconfiguring the software, verify that the hardware configuration matches the assumed topology. The following items are required.
| Item | Catalog Number / Version | Purpose |
|---|---|---|
| SIMATIC ET 200SP interface module (PROFINET) | 6ES7155-6AU00-0CN0 (IM 155-6 PN HF) | PN interface to controller |
| SIMATIC ET 200SP interface module (PROFIBUS) | 6ES7155-6BA01-0CN0 (IM 155-6 DP HF) | DP interface to controller (common in S7-400H stations) |
| CM PtP module (RS-485, Modbus RTU) | 6ES7137-6AA01-0BA0 | Serial interface for Modbus |
| BaseUnit (Type C0 / C1 with PE) | 6ES7193-6BP00-0BA0 / 6ES7193-6BP00-0BD0 | Power and PE termination for RS-485 |
| STEP 7 V5.5 + SP x | 6ES7810-4CC10-0YA5 (or later) | Programming environment for S7-300/400 |
| PtP library for distributed I/O (STEP 7 V5.5) | Siemens support entry 69124220 | FB611, FB612, FB613, FB614, FB617 |
| Modbus RTU sample application (S7-300 / ET 200S) | Siemens support entry 109474714 | Reference project with FB640 / FB641 |
| TIA Portal V16+ (alternative for S7-1200/1500) | 6ES7822-1AA06-0YA5 | Alternative programming path |
Refer to the SIMATIC ET 200SP manual collection for the latest configuration limits, status/error codes, and module firmware requirements. The IM 155-6 DP HF status and error display page is the authoritative source for LED codes on the head module.
5. Required Function Block Architecture
The program sequence on the CPU is split into two layers: an initialization layer (PtP blocks) and an application layer (Modbus master/slave blocks). The initialization layer is one-shot per port. The application layer is cyclic.
5.1 Initialization layer (call once per port)
In OB100 (warm restart) or in a startup section, instantiate and call:
-
FB617with the configured port index, baud-rate code, parity, and data bits. Wire the instance DB to a global DB for visibility. -
FB613andFB614to register the protocol state machine. -
FB611andFB612to expose the send/receive buffers used by the higher layer.
These blocks write configuration records into the CM PtP module through the backplane of the ET 200SP. The ET 200SP interface module then enables the channel and reports the channel state to the CPU.
5.2 Application layer (cyclic in OB1)
Once the initialization layer has run, the Modbus master block FB640 "Modbus_Master" can be called cyclically. The relevant input parameters are:
| Parameter | Type | Meaning | Typical Value (9600,N,8,1) |
|---|---|---|---|
| REQ | BOOL | Edge-triggered request to start a job | Edge from timer or trigger tag |
| PORT | WORD | Logical port identifier on the ET 200SP | W#16#0000 (first port) or 0001 |
| BAUD | WORD | Baud-rate code (see Section 7) | W#16#0006 = 9600 |
| PARITY | WORD | 0 = none, 1 = odd, 2 = even | 0 |
| FLOW_CTRL | WORD | 0 = none, 1 = XON/XOFF, 2 = RTS/CTS | 0 for Modbus RTU on RS-485 |
| MODE | WORD | Protocol mode (ASCII / RTU) | 1 = RTU |
| TIMEOUT | TIME | Slave response timeout | T#500ms to T#2s |
| SLAVE_ADDR | BYTE | Modbus slave address 1…247 | 1 |
| DATA_ADDR | WORD | Modbus function code + register | W#16#0001 (read coils 0…15) |
| DATA_LEN | WORD | Number of registers/coils to read/write | 1 to 125 (registers) or 1 to 2000 (coils) |
| DONE | BOOL | Job complete (one cycle) | Connect to display / next-job trigger |
| ERROR | BOOL | Job failed (one cycle) | Latch to operator faceplate |
| STATUS | WORD | Detailed status word | 0 = OK, see table above |
After the application layer is in place and OB100 has executed, the persistent 7000 status is replaced by a one-shot DONE pulse followed by either 0 (success) or one of the 80xx error codes. The CPU diagnostic buffer no longer logs an area access error on the CM PtP module.
6. Step-by-Step Configuration Procedure
-
Verify HW config. In SIMATIC Manager (STEP 7 V5.5) or TIA Portal, open HW Config and confirm the ET 200SP station contains the CM PtP module (6ES7137-6AA01-0BA0) on the correct slot. The module must be assigned to a logical port index. The port address assigned in HW config is what
FB640uses internally. - Install the PtP library. From Siemens support entry 69124220, install the S7-300/400 PtP library for distributed I/O. Copy the FBs into the S7 program container.
-
Install the Modbus RTU library. From Siemens support entry 109474714, install the Modbus RTU master/slave example for S7-300 and ET 200S. This provides
FB640(Modbus_Master) andFB641(Modbus_Slave) along with their instance data blocks. -
Insert initialization FBs in OB100. Drop
FB611,FB612,FB613,FB614, andFB617into OB100. Connect the configuration inputs (port, baud-rate code, parity, data bits) and let the FBs run once on startup. -
Insert FB640 in OB1. Place
FB640"Modbus_Master" in OB1 (or in a slow cyclic OB such as OB35 if you want a fixed scan period for polling). Wire the application-layer inputs and connectREQto a free-running clock or to a previousDONEto chain jobs. -
Set BAUD parameter. For 9600 baud, set
BAUD = W#16#0006(see Section 7 for the full table). The number 6 is the code, not the baud rate itself. - Compile and download. Compile the S7 program, perform a full download to the S7-400H, and ensure the ET 200SP head module is online and the CM PtP module reports no fault (green status LED, no BF / SF).
- Run OB100 once. Trigger a CPU restart (STOP → RUN on the active S7-400H controller) so that OB100 executes and the PtP blocks initialize the port. If the program is downloaded to a running CPU, force a restart of the user program.
-
Monitor STATUS. In a VAT or in the HMI tag list, monitor the
STATUSoutput ofFB640. The 7000 code should clear within a single scan after OB100 runs, replaced by 7001 / 7002 during a transaction and 0 (or an 80xx error) at the end.
7. FB640 Baud Rate Parameter Encoding
Many engineers miss the fact that the BAUD input on FB640 is an index, not a value in bits per second. The mapping is fixed and reproduced below from the FB640 documentation.
| BAUD (WORD) | Baud Rate (bit/s) |
|---|---|
| 0001 | 300 |
| 0002 | 600 |
| 0003 | 1 200 |
| 0004 | 2 400 |
| 0005 | 4 800 |
| 0006 | 9 600 |
| 0007 | 19 200 |
| 0008 | 38 400 |
| 0009 | 57 600 |
| 000A | 76 800 |
| 000B | 115 200 |
For 9 600 / 8 / N / 1 (the most common Modbus RTU default) the configuration is: BAUD = W#16#0006, PARITY = 0 (none), DATA_BITS = 8 (implicit), and STOP_BITS = 1 (implicit). The MODE input selects RTU (typically 1) or ASCII (typically 0).
8. Common Configuration Errors
| Symptom | Likely Root Cause | Remedy |
|---|---|---|
| Persistent 7000, no DONE, no ERROR | Missing FB611/FB612/FB613/FB614/FB617 | Add the five PtP blocks; rebuild and download |
| 7000 transitions to 8080 on first call | Port number out of range or CM PtP not in HW config | Re-check HW config slot and port index |
| 7000 transitions to 8090 | Wrong module type (e.g., DI module in place of CM PtP) | Replace module, recompile, re-download |
| 7000 transitions to 80A0 | CM PtP is in fault (channel diagnostic alarm) | Read the channel diagnostics; check wiring and termination |
| 7000 transitions to 80C0 | Library / firmware version mismatch | Upgrade FB640 library to match CM PtP firmware |
| 7000 with DONE pulsing but STATUS = 7001 | FB617 not present, but FB640 was chained | Add FB617 and force re-init in OB100 |
| Area access error in diagnostic buffer on every cycle | PtP DBs not loaded; user program references I/O outside process image | Confirm the instance DBs of the PtP blocks are downloaded |
| 7000 only on first cycle after PLC restart, then OK | OB100 not executing PtP blocks in correct order | Call FB611–FB617 sequentially in OB100 before OB1 |
The most frequent field reports correspond to rows 1 and 7. The area access error in the diagnostic buffer is often misread as a hardware fault. In reality, the CPU is logging the I/O access failure caused by the missing initialization blocks, not by the module itself.
9. Diagnostics and Area Access Errors
When the PtP initialization blocks are absent, the CPU diagnostic buffer records an entry of the form:
"Area access error when reading I/O address x (module slot y)"
The exact wording depends on the CPU firmware level. The SIMATIC ET 200SP status and error codes page lists all such entries, including the invalid configuration states and the supply voltage L+ loss on BaseUnit types BU...D that are also commonly confused with this symptom.
To filter the buffer, open the CPU in SIMATIC Manager, navigate to CPU › Diagnostic Buffer, and apply a filter for "Area length error" or "I/O access error". Once the PtP blocks are added, no further entries of this type should be logged for the same slot.
10. Cross-Platform Compatibility
The behavior and the fix differ depending on the controller generation. The table below summarizes the engineering paths.
| Controller | Programming Environment | Modbus Block | PtP Init Blocks Needed? | Notes |
|---|---|---|---|---|
| S7-300 (CPU 31x) | STEP 7 V5.5 | FB640 (Modbus_Master) | Yes - FB611..FB617 | Add PtP library 69124220 |
| S7-400 (CPU 41x) | STEP 7 V5.5 | FB640 (Modbus_Master) | Yes - FB611..FB617 | Same procedure as S7-300 |
| S7-400H (CPU 41xH) | STEP 7 V5.5 | FB640 (Modbus_Master) | Yes - FB611..FB617 | Run on both controllers; OB100 on each |
| S7-1200 (CPU 12xx) | TIA Portal V13+ | MODBUS_MASTER (instruction) | No - folded into MODBUS_COMM_LOAD | Configure CM PtP in device config |
| S7-1500 (CPU 15xx) | TIA Portal V13+ | MODBUS_MASTER (instruction) | No - folded into MODBUS_COMM_LOAD | Same as S7-1200 |
| ET 200SP CPU (CPU 15xxSP) | TIA Portal V13+ | MODBUS_MASTER (instruction) | No - local CM PtP, instruction uses local port | Use device port selector |
For S7-1200 / S7-1500 stations, the only block required to load the port is MODBUS_COMM_LOAD, and the only block required for the master is MODBUS_MASTER. The status 7000 symptom rarely appears on these controllers, because the instruction set includes internal initialization. The symptom is essentially STEP 7 V5.5 / S7-300/400 specific.
11. Verification Procedure
- Diagnostic buffer clean. Force a warm restart and verify that no new "Area access error" entry is logged for the CM PtP slot.
-
STATUS transitions. Watch the
STATUSoutput ofFB640in a VAT. Expected sequence: 7000 (idle) → 7001 (job starting) → 7002 (job in progress) → 0 (DONE pulse) on success. On failure, expect an 80xx code withERRORpulsing high. -
DONE pulse. Confirm that the
DONEoutput generates one positive edge per successful poll, with no double-pulsing or hanging HIGH. - Slave response. Connect a Modbus RTU slave (or a simulator) and verify that the response data appears in the configured receive DB. Cross-check the CRC-16 of the response with a Modbus protocol analyzer.
- LEDs on CM PtP. Observe the TXD / RXD activity LEDs on the CM PtP module. Periodic flashes during polling confirm the physical layer is alive.
- CPU LEDs. No SF (red) on the CPU, no BF / SF on the ET 200SP IM 155-6 head module, no group fault on the CM PtP module.
- Long-duration test. Run the polling loop for at least one hour and confirm that no status regresses to 7000 and that no diagnostic buffer entries are appended.
If all seven checks pass, the Modbus RTU master on the ET 200SP is healthy. If a check fails, return to Section 8 and use the error matrix to isolate the new symptom.
Is status 7000 on MODBUS_COMM_LOAD an actual error?
Status 7000 ("no job active") is an informational code, not a hard error. It becomes a problem when it persists on every cycle, which on ET 200SP with STEP 7 V5.5 indicates that the underlying PtP configuration blocks (FB611, FB612, FB613, FB614, FB617) have not been added to the S7 program. Add those blocks and re-download to clear the 7000 state.
Which PtP blocks must be present to clear error 7000 on ET 200SP?
On STEP 7 V5.5 with S7-300/400 controllers, instantiate FB611, FB612, FB613, FB614, and FB617 from the PtP library for distributed I/O (Siemens support entry 69124220) and call them in OB100 before FB640 executes. On TIA Portal S7-1200/1500, the same function is folded into MODBUS_COMM_LOAD and no separate blocks are required.
What value do I enter in the BAUD parameter of FB640 for 9600 bit/s?
FB640 expects an index, not the raw baud rate. For 9 600 bit/s, set BAUD = W#16#0006. The full mapping is: 0001 = 300, 0002 = 600, 0003 = 1 200, 0004 = 2 400, 0005 = 4 800, 0006 = 9 600, 0007 = 19 200, 0008 = 38 400, 0009 = 57 600, 000A = 76 800, 000B = 115 200.
Why does the CPU diagnostic buffer show an area access error when error 7000 appears?
Without the lower-level PtP blocks, FB640 cannot write the port configuration to the CM PtP module. The CPU then logs an I/O access fault for the backplane slot of the CM PtP module (for example on the IM 155-6 DP HF, 6ES7155-6BA01-0CN0) because the configured I/O area is not initialized. Once the PtP blocks are added, the area access error stops appearing.
Can the same program structure be used with an S7-1200 or S7-1500 controller?
Yes, but with a different block set. On TIA Portal, drop a single MODBUS_COMM_LOAD instruction to initialize the port and a MODBUS_MASTER instruction for the polling. Status 7000 essentially does not occur in this path, because the TIA Portal instructions handle the underlying PtP configuration internally.