Overview
The IM 151-8 PN/DP CPU is an interface module with an integrated CPU for the ET 200S distributed I/O system. When paired with the ET 200S 1SI serial interface module (6ES7 138-4DF01-0AB0 or 6ES7 138-4DF11-0AB0), the CPU can read and write data from serial end devices using ASCII, 3964(R), or RK 512 protocols. Field experience shows two recurring failure modes: (1) the 1SI module intermittently stops responding on the serial port with no software recovery path other than power cycling, and (2) the CPU enters a 0.5 Hz memory-reset request loop after an MMC swap. Both problems are diagnosable through the integrated LED indicators and are preventable with the correct STEP 7 program architecture.
Problem 1: ET 200S 1SI Serial Module Lockup
Symptoms
- S_RCV (FB 2) returns no new data after running for hours or days.
- S_SEND (FB 3) reports the job complete but bytes never reach the slave.
- The SF (group error) LED on the 1SI module lights steady red; the 1SI is still online in the hardware configuration.
- Writing a new configuration or restarting the OB 1 cycle does not clear the fault.
- The only field-proven recovery is a 24 V power cycle on the ET 200S station or the 1SI submodule's load group.
Root Cause
The lockup is triggered when the calling program polls S_RCV without inspecting the error/status outputs. The 1SI module cancels any active receive job after a framing, parity, or timeout error, and that error remains latched until the application re-arms the receive buffer. When the application code only monitors the DONE bit and ignores ERROR, STATUS, and S_RCV.STA_DATID, the next call to S_RCV never returns because the module has nothing new to deliver and the error path is never cleared.
A secondary cause is the use of a Function (FC) instead of a Function Block (FB) for the serial wrapper. Each FC call rebuilds pointer-based parameter passing (six bytes per pointer with multiple L/T transactions) and, in heavy cyclic use, can produce transient parameter alignment mismatches inside the 1SI's dual-port RAM, especially when the FC is reused for multiple serial ports in the same OB 1.
Problem 2: IM 151-8 PN/DP Memory Reset Request Loop
Symptoms
- After an MMC removal/reinsertion or after a download in RUN, the STOP LED flashes slowly.
- The CPU refuses to enter RUN.
- STEP 7 online view reports the CPU is requesting a memory reset.
LED Decoding
| LED | State | Meaning |
|---|---|---|
| STOP | Flashing at 0.5 Hz | CPU requests a memory reset (MRES) from the operator |
| STOP | Flashing at 2 Hz | Memory reset is in progress |
| STOP | Steady ON | STOP, no memory reset pending; program execution halted |
| STOP | OFF (RUN ON) | CPU is in RUN |
| SF / BF | Flashing | Bus fault or group error, see diagnostic buffer |
The LED flash-rate timing is documented in the IM 151-8 PN/DP CPU manual entry on SiePortal (article ID 47409312), which lists the 0.5 Hz slow-flash and 2 Hz fast-flash rates for memory-reset request and execution respectively. Reference: IM 151-8 PN/DP CPU status and error displays.
Resolution
- Turn the mode selector to MRES.
- Hold the selector for at least three seconds until the STOP LED stays steady ON.
- Release, then turn back to MRES within one second and release again.
- The STOP LED now flashes at 2 Hz; wait until it returns to steady ON.
- Insert the MMC, perform a fresh download, and transition to RUN.
If the CPU reverts to 0.5 Hz immediately after MRES, the MMC is corrupted or contains a project that the CPU firmware rejects. Re-format the MMC in STEP 7 (SIMATIC Manager > PLC > Memory Card > Format) or rewrite the MMC with the matching order number (6ES7 953-8LF00-0AA0 or higher). Additional diagnostic detail for this scenario is published in the SiePortal support thread IM 151-8 impossible to reset memory.
STEP 7 Program Architecture: FB with Multiple Instances
For multi-port serial scanning, declare a single Function Block (FB) that contains S_RCV and S_SEND as static instances. This gives the compiler a fixed, address-bound parameter block per call site instead of the pointer-based parameter exchange the compiler synthesises for every FC call.
Parameter exchange comparison:
| Mechanism | FC call | FB call |
|---|---|---|
| Per-call instruction overhead | Multiple L/T to load the 6-byte pointer pairs | Direct A/= access on instance DB fields |
| Static state retention | None (all temporaries) | Persistent in instance DB |
| Multiple instances per FB | Not possible | Native; create one IDB per scanner |
| Use for S_RCV / S_SEND | Not recommended | Recommended |
FB Declaration (STAT section)
FUNCTION_BLOCK FB_SerialScanner
VAR
S_RCV_Inst : S_RCV; // FB 2
S_SEND_Inst : S_SEND; // FB 3
RecvBuffer : ARRAY[0..255] OF BYTE;
RecvLen : INT;
RecvDone : BOOL;
RecvError : BOOL;
RecvStatus : WORD;
END_VAR
BEGIN
// call S_RCV_Inst here, route its ERROR and STATUS to RecvError / RecvStatus
END_FUNCTION_BLOCK
Calling OB 1 with Multiple Instances
// One IDB per scanner port; each holds its own instance of S_RCV_Inst
CALL FB_SerialScanner, DB_Scanner_1 // port on 1SI slot 1
CALL FB_SerialScanner, DB_Scanner_2 // port on 1SI slot 2
CALL FB_SerialScanner, DB_Scanner_3 // port on 1SI slot 3
Each IDB gets its own copy of S_RCV_Inst and S_SEND_Inst, so the FB2/FB3 background data (receive buffer pointers, job state machine) is unique per port. The compiler emits direct A/= and L/T onto the IDB offsets; no pointer indirection is needed at runtime.
Error Handling for S_RCV and S_SEND
Always evaluate every status output, not just DONE. The 1SI module returns these job-status values:
| STATUS (hex) | Meaning | Required action |
|---|---|---|
| 0000 | No job active | Arm S_RCV if not already armed |
| 01xx | Receive job active, xx bytes received | Wait for DONE |
| 7000 | Job accepted, no processing yet | Wait |
| 8180 | Receive cancelled, framing or parity error | Re-arm S_RCV immediately |
| 8181 | Receive cancelled, timeout | Verify slave is transmitting; re-arm |
| 8183 | Receive buffer overflow | Drain RecvBuffer, raise DB size, re-arm |
| 8186 | Configuration error in hardware config | Re-check 1SI parameters (baud, parity, protocol) |
Any time ERROR = TRUE the calling code must re-issue the S_RCV call with EN_R = TRUE and R = FALSE. Skipping the re-arm path is the most common cause of the lockup described in Problem 1.
Verification Procedure
- Open STEP 7 SIMATIC Manager and go online with the IM 151-8 station.
- Open the S_RCV instance DB and confirm
BUSYtoggles within one OB 1 cycle after each character is received. - Force
EN_Rhigh and setRhigh for one cycle, then low; the receive job should re-arm. - Disconnect the serial line for 60 seconds and verify the diagnostic buffer records the framing/timeout event with a timestamp;
STATUSshould display 8181h. - Reconnect and confirm S_RCV resumes without a power cycle.
- Monitor the STOP LED with a phone camera at 240 fps; verify it never sits at 0.5 Hz for more than three seconds during normal operation.
Troubleshooting Matrix
| Observed behaviour | Likely root cause | Corrective action |
|---|---|---|
| 1SI stops responding, no SF LED | FC pointer indirection drift; S_RCV not re-armed on ERROR | Migrate wrapper to FB with multi-instance IDBs and re-arm on every ERROR |
| 1SI shows SF steady red | Hardware fault or wire break on RS-485 / RS-232 | Check terminal block, shielding, termination resistor |
| STOP LED at 0.5 Hz after MMC change | CPU requests MRES | Perform MRES with mode selector as described above |
| STOP LED returns to 0.5 Hz after MRES | MMC mismatch or corrupted project | Re-format MMC, reload program matching order number |
| BF LED flashing, SF off | PROFINET / PROFIBUS cable break | Inspect bus connector, replace drop cable |
| S_RCV STATUS = 8186 | Protocol mismatch between HW config and slave | Re-open HW config, verify baud rate, parity, stop bits, protocol selection |
Key Specifications
| Item | Value |
|---|---|
| IM 151-8 PN/DP CPU order numbers | 6ES7 151-8AB00-0AB0, 6ES7 151-8AB01-0AB0, 6ES7 151-8FB00-0AB0, 6ES7 151-8FB01-0AB0 |
| ET 200S 1SI order numbers | 6ES7 138-4DF01-0AB0 (ASCII/3964), 6ES7 138-4DF11-0AB0 (ASCII/3964/RK512) |
| Supported protocols on 1SI | ASCII, 3964(R), RK 512 (DF11 only) |
| Receive buffer per 1SI | 2 KB dual-port RAM |
| STEP 7 blocks required | S_RCV (FB 2), S_SEND (FB 3), S_XON (FC 0), S_XOFF (FC 1) for ASCII flow control |
| Max cyclic OB1 load from S_RCV | 12 ms typical at 9600 baud full buffer |
| MMC types supported | 6ES7 953-8LF00-0AA0 (512 KB) and larger |
Programming Best Practices for Serial Libraries
For a reusable serial library on this platform, follow these rules:
- Define one FB per protocol wrapper (FB_ASCII_Scanner, FB_3964_Scanner, FB_RK512_Scanner).
- Instantiate S_RCV and S_SEND in the FB's STAT section only.
- Expose DONE, ERROR, STATUS, and the raw received length on the FB outputs.
- In the calling OB, treat any rising edge of ERROR as a re-arm trigger.
- Keep a heartbeat counter that increments every successful reception; alarm if no reception occurs for N× protocol timeout cycles.
- Document the 1SI slot and channel per IDB so hardware changes do not silently re-point the wrong port.
This pattern produces a library where a new serial port is added by instantiating the FB into a new IDB, with no recompilation of the wrapper and no risk of pointer misalignment across the FC/FB boundary.
Why does my ET 200S 1SI module stop reading without showing an SF LED?
The 1SI cancels the active receive job internally after a framing, parity, or timeout error. If your code only monitors DONE and ignores ERROR/STATUS on S_RCV, the job never re-arms. Add a re-arm branch on every rising edge of ERROR, ideally inside an FB instance DB so state survives the call.
What does a STOP LED flashing at 0.5 Hz on the IM 151-8 PN/DP mean?
It means the CPU is requesting a memory reset (MRES). This typically follows an MMC removal or a firmware-detected project mismatch. Use the mode selector to perform MRES, then reload the project to the MMC.
Should I use an FC or an FB to call S_RCV and S_SEND?
Use an FB. FCs force the compiler to synthesise pointer pairs (six bytes each) and to copy them via multiple L/T instructions on every call. FBs let the compiler use direct A/= access on the instance DB, which is faster, more stable, and required for multiple instances of the same scanner across several serial ports.
How do I clear the IM 151-8 memory-reset loop without a power cycle?
Turn the mode selector to MRES, hold for three seconds until STOP is steady on, release, then turn back to MRES within one second. STOP flashes at 2 Hz during the reset, then goes steady. Reload the project afterwards.
What is the difference between 6ES7 138-4DF01-0AB0 and 6ES7 138-4DF11-0AB0?
The DF01 supports ASCII and 3964(R) protocols. The DF11 additionally supports the RK 512 protocol and has a larger receive buffer. Choose DF11 if the slave device uses RK 512 or if you need more headroom for high-volume ASCII traffic.