Resolving S7-300 CPU 319-3 PN/DP SF Fault: P-Area I/O Access Error 0x2942 / 0x2943
1. Problem Overview
A persistent SF (System Fault) LED on a Siemens SIMATIC S7-300 CPU 319-3 PN/DP — while the user program continues to scan and the machine keeps running — is one of the most common diagnostic scenarios on PROFIBUS and PROFINET installations. The user program does not stop because the corresponding error Organization Block (typically
OB 122, "I/O Access Error") is loaded in the CPU. The CPU calls OB 122 instead of going to STOP, but the SF LED stays latched until the cause is cleared and the diagnostic buffer is acknowledged.
The reported diagnostic buffer from the field unit shows:
- CPU order number: 6ES7 318-3EL01-0AB0 (CPU 319-3 PN/DP)
- Hardware version: 8
- Firmware version: V 3.2.10
- Boot loader / firmware expansion: A 37.11.12
- Rack 0, Slot 2
- Serial: S C-E9W777502014
Ten consecutive diagnostic events were captured at 08:44:28.990–.991 on 01/21/2021. All are P-area (peripheral I/O) access errors raised on OB 122 at priority class 1, in the "Incoming event" state. No Stop events, no bus faults, and no rack failures appear — the CPU is healthy, but the application code is reading or writing P-area addresses that are not currently accessible.
Field observation: A machine that "runs well" with the SF LED on is not a normal state. The process is running because OB 122 swallows the I/O faults, but every read is returning the substitute value (0) and every write is discarded. The fault is silent at the application level but loud in the diagnostic buffer.
2. Affected Hardware, Firmware, and Catalog Reference
The reported unit is one of the higher-end S7-300 CPUs that combines PROFIBUS DP master and PROFINET I/O controller functions.
| Parameter |
Value |
| MLFB / Order No. |
6ES7 318-3EL01-0AB0 |
| Designation |
CPU 319-3 PN/DP |
| Work memory (code / data) |
2 MB / 700 KB (typical for -3EL01 variant) |
| Hardware version |
8 |
| Firmware |
V 3.2.10 |
| Boot loader |
A 37.11.12 |
| Interfaces |
1× MPI/DP (X1), 1× DP master/slave (X2), 1× PROFINET 2-port switch (X3) |
| Programming tool |
STEP 7 V5.5 + SPx or TIA Portal (compatibility range) |
Firmware V 3.2.x is the maintenance line for the 318-3EL01 MLFB. The diagnostic buffer format and the meaning of Event IDs 16#2942 / 16#2943 are stable across all V3.x firmware on the 319-3 family.
3. Decoding the Diagnostic Buffer
Each diagnostic entry contains an
Event ID and a 12-byte
Coding field. For S7-300/400 CPUs the coding layout is standardized. The structure used by Siemens for I/O access errors is:
| Byte offset in Coding |
Meaning (S7 standard) |
| +0 / +1 |
Event ID (e.g., 16#2942, 16#2943) |
| +2 / +3 |
OB that was called (017A = OB 122 hex) |
| +4 |
Reserved / block type |
| +5 |
Access mode: 02=byte/word, 03=double-word |
| +6 / +7 |
Byte offset inside the area (P area in this case) |
| +8 / +9 |
Area / direction flags |
| +10 / +11 |
Slot / channel qualifier |
3.1 Event ID 16#2942 — I/O Access Error, Reading
This event is raised when the user program issues a load (L / L PIB / L PQW …) that targets an input address which the CPU cannot currently resolve. Typical triggers:
- PROFIBUS slave is in "Not reachable" / "Bus fault"
- PROFINET device has lost AR (Application Relationship) and is in "Station failure"
- Address is configured in HW Config but the slot/submodule is missing
- Address is not configured at all (typo in the symbolic or absolute operand)
- Access length exceeds the configured slot size (e.g., reading a double-word from a single-word slot)
3.2 Event ID 16#2943 — I/O Access Error, Writing
Same as above but for store (T / T PQB / T PQW …) instructions. Writes that fail do not corrupt the slave; the data is discarded and the CPU records the event. OB 122 is called instead of STOP.
4. Address-by-Address Analysis
The ten events in the buffer do not all point at the same slave. They form three logical groups:
| # |
Event ID |
Direction |
Length |
P-area address (byte offset) |
Probable mapping |
| 1 |
16#2942 |
Read |
Double-word (4 B) |
256 (PEW 256 / PED 256) |
Input area of PROFIBUS/PROFINET I/O — first cluster |
| 2 |
16#2942 |
Read |
Word (2 B) |
1002 (PEW 1002) |
Input area — second cluster (gap ≥ 744 B from cluster 1) |
| 3 |
16#2942 |
Read |
Word (2 B) |
1000 (PEW 1000) |
Same cluster as #2, 2 B before |
| 4 |
16#2943 |
Write |
Word (2 B) |
536 (PAW 536) |
Output area — third cluster |
| 5 |
16#2943 |
Write |
Word (2 B) |
534 (PAW 534) |
Same cluster as #4, 2 B before |
| 6 |
16#2943 |
Write |
Word (2 B) |
532 (PAW 532) |
Same cluster as #4, 4 B before |
| 7 |
16#2942 |
Read |
Word (2 B) |
536 (PEW 536) |
Input mirror of the third cluster |
| 8 |
16#2942 |
Read |
Word (2 B) |
534 (PEW 534) |
Same cluster as #7 |
| 9 |
16#2942 |
Read |
Word (2 B) |
532 (PEW 532) |
Same cluster as #7 |
| 10 |
16#2943 |
Write |
Word (2 B) |
530 (PAW 530) |
Same cluster as #4, 6 B before |
4.1 Why three clusters matter
STEP 7 places PROFIBUS DP / PROFINET I/O addresses into the P area contiguously
per configured slot. A gap of several hundred bytes between cluster 1 (offset 256) and clusters 2/3 (offsets 530–536 and 1000–1002) almost always means the addresses belong to
two or more different distributed I/O devices — not a single faulty slave.
Mapping rule of thumb:
- Open the STEP 7 project online: PLC → Accessible Nodes or HW Config → Online → Station.
- For each slave head module, note the configured I-address start and Q-address start.
- Compare the byte offset reported in Event ID coding byte +6/+7 with the configured start of each slot.
- Flag every slave whose configured range contains the failing address.
If, for example, PROFIBUS slave 6 has I-start = 1000 and Q-start = 530, then events 2, 3, 4, 5, 6, 7, 8, 9, 10 all map to slave 6 — a strong hint that slave 6 itself (or the segment it sits on) is the root cause, with one stray double-word read at offset 256 mapping to a different slave (perhaps a different DP master on X2 or a different PROFINET I-device on X3).
5. Root Cause Hierarchy
The probability ranking below is derived from the symptom pattern (multiple slaves failing, OB 122 loaded, SF LED latched, machine still scanning).
| Rank |
Likely root cause |
Diagnostic evidence to collect |
| 1 |
One or more PROFIBUS DP slaves are physically disconnected or have lost the token / segment |
SF/BF LEDs on slave; online "DP slave diagnosis" buffer |
| 2 |
Missing or incorrectly set bus terminator on the PROFIBUS segment |
Reflected waveform on scope; resistance measurement A1-B1 ≈ 220 Ω |
| 3 |
Damaged PROFIBUS connector (e.g., switch in OFF position, broken pigtail) |
Visual inspection of every connector on the segment |
| 4 |
EMV / cable routing fault (VFD output cable routed in parallel, missing shield) |
Cable path audit |
| 5 |
Address mismatch in HW Config vs. physical rotary switch on a slave |
Compare HW Config DP address with the switches on the device |
| 6 |
PROFINET I-device / device loss on the X3 port (different physical layer) |
Online → Diagnostics → PROFINET devices |
| 7 |
OB 1 code referencing a P-address that is not configured (programmer error) |
Cross-reference in STEP 7 / TIA Portal |
| 8 |
Access width larger than the configured slot (e.g., reading double-word on a 2-byte input) |
HW Config slot view |
Replacing the PROFIBUS cable as the operator reported is a valid first step, but the symptom of
multiple distinct addresses failing simultaneously generally indicates a bus-level problem, not a single cable.
6. Step-by-Step Resolution Procedure
-
Connect online with STEP 7. Open SIMATIC Manager → online → Accessible Nodes. Confirm the CPU reports the same MLFB and firmware as the type plate.
-
Read the diagnostic buffer completely. PLC → Diagnostics/Set → Diagnostic Buffer. Note every Event ID, not just the latest. The first 10 entries here are tightly correlated in time and almost always belong to the same root cause.
-
Decode every Event ID with the table in §3. Build a list of {address, width, direction, slot reference}.
-
Open HW Config online. Right-click the DP master system or PROFINET IO system → Online → DP Slave Diagnosis (or PROFINET IO Diagnosis). A red "X" on a slave means station failure. A yellow triangle means diagnostic interrupt active. Both are equally bad — both prevent process data exchange.
-
Map every failing P-address to a specific slave using the configured I/Q start addresses from HW Config. Build a per-slave hit-list.
-
Physically inspect the affected segment. Walk from CPU X2 (DP) or X3 (PN) toward the first failing slave. Check:
- Connector is fully seated and locked.
- Termination switch is ON only on the two end devices of the segment.
- Incoming and outgoing cable are both screwed down to the connector.
- Shield is clamped to the connector shell (not the pin).
- Cable is Siemens PROFIBUS cable (violet) or equivalent; twisted pair ≥ 1× per cm.
-
Measure the segment.
- Resistance between pins A and B with all slaves powered: should read 110 Ω (two 220 Ω terminators in parallel). Open circuit = terminator missing. < 80 Ω = short circuit. Reading fluctuates = bad contact.
- Voltage between A and B at the master: should be ≥ 4.5 V DC. < 3 V means a slave is dragging the bus down.
-
Isolate by substitution. Swap the suspected slave with a known-good one of the same order number. If the new slave fails identically, the bus is at fault. If the new slave works, the original device has a hardware defect.
-
Check the slave's own diagnostic buffer. ET 200S / ET 200M / ET 200MP slaves expose a station-diagnosis record. Open the slave in HW Config online → Module Information → Diagnostic Buffer. Look for "Channel fault", "Parameter error", "Configuration error".
-
Re-download HW Config if you made any hardware change. The CPU caches the configuration; a stale cache can still raise 0x2942 even after the physical fault is fixed.
-
Clear the SF LED. After the cause is fixed, the events transition to "Outgoing" automatically. The SF LED clears at the next STOP→RUN or power cycle. To force-clear without a restart: PLC → Diagnostics/Set → Clear Diagnostic Buffer followed by a STOP→RUN transition, or write '0' to diagnostic-status tag OB82_FLT_ID once the cause is gone.
7. Behavior of OB 122 and What It Means for the Application
OB 122 is invoked
only when an I/O instruction reads or writes a peripheral address that cannot be served at the moment. The S7-300 / S7-400 firmware guarantees that OB 122 is called in the same priority class as the interrupted instruction. The local temp area of OB 122 provides:
| Local byte |
Content |
Use |
| OB122_EV_CLASS |
Event class (always B#16#39) |
Identification |
| OB122_SW_FLT |
Fault code (B#16#42 = read, B#16#43 = write) |
Distinguish R vs. W |
| OB122_PRIORITY |
Priority class of the OB that triggered |
Diagnostic logging |
| OB122_OB_NUMBER |
B#16#7A (122) |
Identification |
| OB122_BLK_TYPE |
Type of block containing the fault |
Locate faulty block |
| OB122_STEPI_ADDR |
Step / address inside block |
Locate faulty network |
| OB122_BLK_NUM |
Block number of the faulty block |
Locate faulty FB/FC/OB |
| OB122_IO_ADDR_WORD |
Byte address of the I/O operation |
Map to slave |
| OB122_IO_ADDR_BIT |
Bit address |
Map to channel |
If OB 122 is empty (or missing from the project), the CPU goes to
STOP on the very first P-area fault. The fact that the CPU is still in RUN means an OB 122 instance is in the project. This is a
design decision: the developer chose to keep the process running despite the I/O fault. While pragmatic, it is also a risk — the substitution value (0) is propagated to the application, and on a closed-loop axis or process controller this can have dangerous consequences.
Safety consideration: For SIL / PL-rated applications, OB 122 must not be used to mask safety-relevant I/O faults. Safety I/O are addressed via F-CPU mechanisms and the F-runtime group; the standard OB 122 is excluded from the F-signature and will not protect a safety function.
8. Verification Procedure
After the corrective action, the following checks confirm a clean state:
-
Diagnostic buffer clean. No new 16#2942 / 16#2943 events in the 30 minutes following the fix. Pre-existing entries remain (and are outgoing) but no new ones should appear.
-
SF LED off. After a STOP→RUN transition the SF LED must be dark. BF (Bus Fault) LED on the DP / PN interface must also be dark.
-
Online station diagnosis all green. In HW Config every slave head module shows the green check mark, no yellow triangle, no red X.
-
PROFIBUS / PROFINET statistics clean. Open Module Information → Diagnostic on the master interface. Bus error count, retry count, lost-station count should all be 0 (or stable at the pre-existing baseline).
-
Process values consistent. Force a value into a known I/O address and verify the application reads it back. Repeat for an output.
-
Cycle time unchanged. OB 122 with no fault runs in <1 µs. A repeated OB 122 call on every scan (1 ms or 10 ms) inflates cycle time and is visible in PLC → Module Information → Scan Cycle Time.
9. Preventive Measures
- Document every distributed I/O slave with its DP / PROFINET address, configured I-start, Q-start, and module count. This is the only way to decode the diagnostic buffer without a full HW Config open in front of you.
- Place the OB 122 body in a single FC that increments a counter, sets a global fault flag, and triggers a maintenance request to HMI. This makes the fault visible in the operator interface and not just a hidden LED.
- Add a process-image update (SFC 26 / 27) call only when strictly necessary. Excessive direct P-access (L PEW / T PAW) is the main reason even small bus glitches become SF-class faults.
- Apply a 24 V DC UPS or buffering on PROFIBUS connector electronics when long cable runs are exposed to ESD / lightning events.
- Use Siemens DP / PN cables and connectors, terminate strictly at the two physical ends, and never put a repeater in the middle of a properly terminated segment.
10. Reference: Event ID Quick Reference for S7-300 / S7-400
| Event ID |
Meaning |
Triggered by |
| 16#2942 |
I/O access error, reading |
L PIB / L PIW / L PID on a non-accessible address |
| 16#2943 |
I/O access error, writing |
T PQB / T PQW / T PQD on a non-accessible address |
| 16#2944 |
I/O access error, bit reading |
U/E/O/X on a P bit address |
| 16#2945 |
I/O access error, bit writing |
S/R/= on a P bit address |
| 16#3951 |
PROFINET IO: Station failure |
PROFINET device lost |
| 16#38C4 |
DP slave diagnostic interrupt |
DP slave entered diagnostic state |
| 16#39B1 |
DP bus fault |
DP master lost the bus |
11. Quick Field Decision Matrix
| Symptom |
Likely cause |
First action |
| SF only, single address, OB 122 present |
Single non-existent or unconfigured P address in code |
Cross-reference the address in the project; add to HW Config or fix the typo |
| SF + BF on X2 (DP), multiple addresses |
PROFIBUS segment down |
Check terminators, cable, connector seating; measure A-B resistance |
| SF + BF on X3 (PN), multiple addresses |
PROFINET IO system down |
Check switch ports, link LEDs, device power, station names |
| SF, addresses from one slave only |
That slave is offline or mis-configured |
Open slave's own diagnostic buffer; verify rotary address / device name |
| SF, CPU in STOP |
OB 122 not loaded or fault is not I/O-access type |
Download OB 122 to the project, identify the real event ID |
What does Event ID 16#2942 mean on a Siemens S7-300 CPU 319-3 PN/DP?
Event ID 16#2942 is an "I/O access error, reading". It is raised when the user program executes L PIB, L PIW, L PID, or a bit-read on a P (peripheral) address that the CPU cannot currently resolve, typically because the target PROFIBUS slave or PROFINET device is offline, misconfigured, or the address is not configured in HW Config. The same family for writes is 16#2943.
Why does the S7-300 CPU 319-3 stay in RUN with the SF LED on?
Because OB 122 (I/O access error) is loaded in the project. Each time a P-area read or write fails, the CPU calls OB 122 instead of going to STOP. The SF LED is latched until the cause is fixed and the diagnostic events transition to "Outgoing", which is normally followed by a STOP→RUN transition or a power cycle.
How do I map a P-area byte offset from the diagnostic buffer to a PROFIBUS slave?
Open HW Config online for the project, click the DP master system, and read the configured I-start and Q-start of each slave slot. The byte offset reported in the Event ID's Coding field (bytes 6 and 7) is the absolute offset inside the P area. The slave whose configured range contains that offset is the one raising the fault.
Does replacing the PROFIBUS cable always clear the SF fault on a CPU 319-3?
No. Cable replacement addresses only one of several possible causes. If the diagnostic buffer shows multiple distinct P-area addresses failing in clusters, the root cause is usually a lost slave (power, terminator, connector) or a configuration mismatch, not the cable itself. Inspect the bus segment with a multimeter (A-B resistance ≈ 110 Ω when powered, ≥ 4.5 V DC between A and B) before assuming the cable.
How do I clear the SF LED on CPU 319-3 after fixing the I/O fault?
After the cause is removed, the OB 122 events in the diagnostic buffer transition to "Outgoing" automatically. The SF LED clears on the next STOP→RUN transition of the CPU, or after a power cycle, or by selecting PLC → Clear/Reset → Clear Diagnostic Buffer in STEP 7 while online, followed by a STOP→RUN transition.