S7-1215C Analog Output Crash: Resolving Internal System Error 0x80001121
The CPU 1215C (catalog number 6ES7215-1AG40-0XB0, DC/DC/DC variant) drops the online connection and restarts in STOP with a blinking red ERROR LED whenever a value written from an HMI tag reaches the SCALE_X instruction driving analog output AQ0 or AQ1. TIA Portal reports Internal system error (error code: 0x800011210000008d), the diagnostics buffer logs IO fault events 6 and 7, and the only way to get the output to update is to enter a literal integer into the SCALE_X input and re-download the project with the CPU stopped. Power cycling temporarily clears the fault, but the next online write from the HMI repeats the crash. This article documents the three root causes that produce this signature, the correct hardware configuration, the correct SCALE_X parameterization, the burden-resistor math, and the firmware path that eliminates the bug.
Problem Signature
Document the failure mode before changing anything in the project. Capture the exact symptom so you can verify the fix later:
- CPU enters STOP after a runtime write to the analog output from an HMI tag, an OPC UA client, or another PLC tag.
- ERROR LED blinks red at ~2 Hz; RUN LED is off; MAINT LED may blink yellow on V3.0.x firmware.
- TIA Portal online diagnostics show
Internal system error (error code: 0x80001121...)with a trailing module-specific code (commonly008d,0091, or00a5). - Diagnostics buffer events 6 and 7 are logged immediately before the STOP transition, both pointing at the same HW identifier (typically HW ID 271 for AQ0 or HW ID 272 for AQ1 on CPU 1215C).
- A literal integer typed into the SCALE_X input and downloaded with the CPU in STOP works correctly until the next online tag write.
- Power cycling the CPU clears the fault temporarily; the next online write to AQ0/AQ1 reproduces the STOP.
Root Cause Analysis
Three independent root causes converge to produce the crash. All three must be addressed; fixing only one leaves the failure mode intermittent.
Cause 1: Output configured as voltage instead of current
The on-board analog outputs of the S7-1215C are current-only. TIA Portal hardware catalog entries for the 1215C list only "Current" as the output type. When the project was originally created or migrated from a 1214C or from an older TIA Portal version, the analog output may be set to "Voltage" (or "Off") with a 0 to 10 V range. The PLC accepts the download because the configuration parser is permissive, but when the output driver tries to source voltage into a 500 Ω burden while the firmware expects a current loop, the driver detects an out-of-compliance condition, asserts the analog module fault line, and the CPU watchdog escalates the IO fault to a fatal internal error in the 0x80001121 family.
Cause 2: SCALE_X parameter set uses the bipolar integer range
The SCALE_X instruction maps a REAL input to the analog output's raw integer representation. For an S7-1215C current output, the raw integer range is unipolar: 0 = 0 mA, 27648 = 20 mA. Passing 13824 as the SCALE_X MAX value (or as the nominal target) corresponds to the midpoint of the bipolar range -27648 to +27648 used by the -10 V to +10 V analog inputs. The output therefore clips at 10 mA. With a 500 Ω burden, 10 mA yields 5 V, which is the symptom reported in 0-10 V dimmer applications where a 4-20 mA to 0-10 V converter only reaches 5 V on the dimmer's input.
Cause 3: Firmware V3.0.x analog output online-update defect
S7-1200 firmware V3.0.0, V3.0.1, and V3.0.2 contain a defect in the analog output update task that corrupts the IO update word when the source tag is written while the CPU is in RUN. The defect is triggered specifically by online writes (HMI, OPC, or PLC tag change) and is masked when the value is part of the initial download. The internal error code 0x80001121...008d is the firmware's watchdog response when it detects the corrupted IO shadow. Siemens fixed this defect in firmware V4.0 and later releases; the relevant release notes are documented in the S7-1200 firmware V4.0 release entry on the Siemens support portal.
S7-1215C Analog Output Hardware Specifications
The DC/DC/DC variant of the CPU 1215C has two on-board analog outputs (AQ0, AQ1) with the following published specifications. These numbers are taken from the SIMATIC S7-1200 Programmable Controller system manual and apply to all firmware versions.
| Parameter | Value |
|---|---|
| Output type | Current, single-ended |
| Output range | 0 to 20 mA |
| Full-scale raw integer | 0 to 27648 |
| Maximum burden (load) | 500 Ω |
| Resolution | 12 bits |
| LSB weight | 4.74 µA typical (20 mA / 4096) |
| Accuracy at 25 °C | ±0.5 % of full scale |
| Temperature drift | ±0.01 %/°C |
| Cable length, shielded | 100 m maximum |
| Diagnostic support | Wire break (at > 0 mA setpoint), overflow, underflow |
Correct Hardware Configuration in TIA Portal
Configure both on-board analog outputs as current outputs before downloading the project. This must match the physical wiring and the SCALE_X block.
- Open the project in TIA Portal and expand Device configuration > CPU 1215C > Properties > Analog outputs.
- For output AQ0, set Output type = Current (the only option shown for 1215C).
- Confirm Range = 0 to 20 mA. Do not select 4-20 mA unless the field device requires the live-zero offset.
- Set Diagnostics = Wire break if the load is < 500 Ω and the wiring can be physically disconnected for service.
- Repeat for AQ1.
- Compile the hardware configuration (Project tree > right-click CPU > Compile > Hardware configuration).
- Download the configuration to the CPU in STOP mode.
SCALE_X Parameter Mapping
SCALE_X maps a REAL input range to the raw integer representation of an analog I/O. The MAX parameter must match the nominal full scale of the analog output (27648 for the S7-1215C 0-20 mA output), not a sub-range midpoint.
| SCALE_X parameter | Tag | Data type | Correct value | Incorrect value (root cause) |
|---|---|---|---|---|
| MIN | "HMI_percent_min" | REAL | 0.0 | 0.0 |
| MAX | "HMI_percent_max" | REAL | 100.0 | 13824.0 (incorrect - this is bipolar midpoint) |
| VALUE | "percentage_real" | REAL | 0.0 - 100.0 | — |
| OUT (RET_VAL) | "AQ_raw" | INT | 0 - 27648 | 0 - 13824 (clips at 10 mA) |
The conversion chain from the HMI integer to the raw analog output word should be:
// HMI integer 0..100 (percent)
"hmi_percent_int" : INT := 0; // HMI tag
// CONV to REAL
"hmi_percent_real" : REAL := REAL("hmi_percent_int");
// SCALE_X to raw 0..27648
"AQ_raw" : INT;
SCALE_X(MIN := 0.0,
MAX := 100.0,
VALUE := "hmi_percent_real",
RET_VAL => "AQ_raw");
Map the SCALE_X output (AQ_raw) to the analog output peripheral word using the %QW address assigned by the hardware configuration. For the on-board AQ0 of the CPU 1215C, this is typically %QW80; for AQ1 it is %QW82. The actual addresses are visible under Device view > Analog outputs > I/O addresses.
Wiring a Current Output for a 0-10 V Field Device
Because the S7-1215C outputs current, you must convert to voltage at the field device or via an external burden. Choose the burden R based on the field device's required voltage and the maximum current you intend to source:
V = I × R → R = V_full_scale / I_full_scale
| Target voltage | Source current (full scale) | Burden R | Power dissipation at full scale |
|---|---|---|---|
| 0 - 5 V | 0 - 20 mA | 250 Ω | 0.10 W (use 0.25 W resistor) |
| 0 - 10 V | 0 - 20 mA | 500 Ω | 0.20 W (use 0.5 W resistor) |
| 0 - 10 V | 4 - 20 mA | 625 Ω | 0.20 W (use 0.5 W resistor) |
If the field device is a 0-10 V dimmer with an input impedance greater than 10 kΩ, connect a precision 500 Ω, 0.1 % burden between AQ+ and AQ- at the PLC terminals, then run the resulting 0-10 V signal to the dimmer's + and - input. This is the configuration that the original incident used.
Diagnostics Buffer Event IDs 6 and 7
The S7-1200 diagnostics buffer uses standardized event IDs for IO faults. On a 1215C with the analog output fault, the two events that appear immediately before the STOP transition are:
| Event ID | Meaning | Cause on AQ0/AQ1 | Action |
|---|---|---|---|
| 6 | IO access error - fault during read/write of the I/O | Hardware ID 271 (AQ0) or 272 (AQ1) returned an error status; output driver detected out-of-compliance | Check output type configuration (must be Current), check burden value, check wiring for short or open |
| 7 | IO fault - module-level error, fault LED on the affected IO is set | Analog output driver entered fault state; CPU watchdog records the fault and escalates | Power cycle, correct wiring, re-download hardware configuration |
Open the diagnostics buffer in TIA Portal via Online > Diagnostics > Diagnostics buffer. Filter on Event ID 6 and Event ID 7 to confirm that the fault is anchored at the analog output HW ID and not at a remote module on the right-side SM bus.
Firmware Considerations and Recovery Procedure
Firmware V3.0.0 through V3.0.2 of the CPU 1215C are the most affected. The following procedure recovers a unit in the field without re-flashing in place, then documents the upgrade path for a permanent fix.
Field recovery (no firmware change)
- Power down the CPU 1215C (remove 24 V for at least 10 s).
- Power up; the CPU returns to RUN if the project is valid and the analog output fault is no longer present.
- Open TIA Portal online, force the analog output to a known-good value via the watch table, and verify the diagnostics buffer no longer logs events 6 and 7.
- If the fault re-occurs on the next online write, proceed to firmware upgrade.
Permanent fix via firmware upgrade
- Open TIA Portal and select the CPU in the project tree.
- Choose Online > Accessible nodes and read the current firmware version.
- Download the latest S7-1200 firmware from the Siemens support portal entry for the CPU 1215C. The current production line for the 1215C is firmware V4.6.x; V4.5 and V4.6 both contain the analog output online-write fix.
- Perform the firmware update online (CPU in RUN-P) or offline (CPU in STOP). The CPU retains the project during a firmware update.
- After the update, power cycle once and download the hardware configuration to clear any cached IO shadow.
- Repeat the online write test; the 0x80001121 fault must no longer occur.
Step-by-Step Resolution Procedure
Apply the following sequence to resolve the crash on a CPU 1215C reporting error 0x80001121:
- Capture the diagnostics buffer. TIA Portal > Online > Diagnostics > Diagnostics buffer. Export the buffer as a CSV and confirm events 6 and 7 point at HW ID 271 (AQ0) or 272 (AQ1).
- Verify hardware configuration. Device view > CPU 1215C > Analog outputs > AQ0 and AQ1. Output type must be Current, range 0 to 20 mA. If "Voltage" or "Off" is shown, change to Current and compile.
- Verify SCALE_X parameters. Open the SCALE_X instance. MIN must be 0.0, MAX must be 100.0 (or whatever full-scale REAL corresponds to the raw 27648), and the OUT (RET_VAL) tag must be INT.
- Verify the HMI tag type. The HMI tag connected to the percentage input must be INT (0-100), not REAL and not WORD. A type mismatch forces an implicit conversion that can land on an out-of-range REAL.
- Verify the burden resistor. Measure resistance between AQ+ and AQ- with the PLC powered down. For a 0-10 V output at 20 mA full scale, R must be 500 Ω ± 1 %.
- Verify wiring. AQ+ and AQ- must be connected only to the burden and from there to the field device input. No shield ground, no chassis ground on the AQ- terminal.
- Stop the CPU, download the corrected configuration. Use the TIA Portal "Download to device" with the CPU in STOP.
- Start the CPU in RUN.
- Test online write. Use a watch table to write 50.0 to the SCALE_X VALUE input. The output should read 10 mA (5 V across the 500 Ω burden) and the diagnostics buffer must not log events 6 or 7.
- Test HMI write. From the HMI, change the percentage tag. Repeat five times. The output must follow without a STOP transition.
- Upgrade firmware. Repeat step 9 and 10 after the firmware upgrade to V4.5 or later to confirm the firmware defect is also removed.
Verification and Validation
After applying the fix, run the following validation checks. All must pass before returning the system to production.
| Check | Expected result | Method |
|---|---|---|
| Diagnostics buffer after 10 online writes | No event 6 or 7 at HW ID 271/272 | TIA Portal > Diagnostics buffer > filter on event 6 and 7 |
| Output at SCALE_X VALUE = 0.0 | 0 mA, 0.000 V across burden | DMM on burden, mA in series |
| Output at SCALE_X VALUE = 50.0 | 10.000 mA, 5.000 V ± 0.025 V | DMM on burden, mA in series |
| Output at SCALE_X VALUE = 100.0 | 20.000 mA, 10.000 V ± 0.050 V | DMM on burden, mA in series |
| ERROR LED after 100 HMI-driven changes | Off (steady green RUN) | Visual inspection or read LED status via GETIO |
| Analog output driver status word | Bit 0 (good) = 1, all fault bits = 0 | Read %QW status word in watch table |
Troubleshooting Matrix
| Symptom | Likely cause | Fix |
|---|---|---|
| Output reads 0-5 V instead of 0-10 V at full scale | SCALE_X MAX = 13824 (bipolar midpoint) | Change MAX to 100.0 and verify RET_VAL range 0-27648 |
| Output never updates from online writes; literal values work | Firmware V3.0.x online-write defect | Upgrade firmware to V4.5 or later |
| CPU STOPs immediately on first write to AQ0 | Output configured as Voltage, burden pulls compliance | Set output type to Current, 0-20 mA, recompile, download |
| Diagnostics buffer shows event 7 at HW ID 271 with "wire break" | Burden open or field device disconnected at > 0 mA setpoint | Check wiring, enable wire-break diagnostics only if required by maintenance |
| Output drifts > 0.5 % at 25 °C | Burden tolerance > 1 %, or shared ground loop | Use 0.1 % burden, separate AQ- from chassis ground |
| HMI shows value but PLC AQ_raw stays 0 | HMI tag is WORD, CONV to REAL drops upper byte | Change HMI tag to INT, refresh HMI compilation |
FAQ
Why does my S7-1215C analog output only reach 5 V when I want 0-10 V?
The 1215C outputs 0-20 mA, not voltage. If SCALE_X is set with MAX = 13824 (the bipolar midpoint) the output clips at 10 mA, and a 500 Ω burden then yields only 5 V. Change SCALE_X MAX to 100.0 (or whatever REAL corresponds to raw 27648) so the output reaches 20 mA and the burden yields the full 10 V.
Is the S7-1215C analog output current or voltage?
The on-board AQ0 and AQ1 of the 1215C DC/DC/DC (6ES7215-1AG40-0XB0) are 0-20 mA current outputs only. They cannot be configured as voltage outputs. To produce 0-10 V, install a 500 Ω burden resistor across the output or use an external 4-20 mA to 0-10 V signal conditioner.
What does internal error 0x80001121 on the S7-1200 mean?
0x80001121 is the firmware's escalation code when the CPU watchdog detects a corrupted analog IO shadow or an IO driver fault. The trailing sub-code (008d, 0091, 00a5) identifies the specific IO and the failure mode. On the 1215C it almost always points at AQ0 (HW ID 271) or AQ1 (HW ID 272), and is fixed by correcting the hardware configuration (output type = Current) and upgrading firmware to V4.5 or later.
How do I clear the 0x80001121 fault without re-flashing?
Power cycle the CPU for at least 10 s, correct the hardware configuration to declare AQ0/AQ1 as 0-20 mA current, recompile, and download with the CPU in STOP. The fault clears immediately if the wiring and configuration match. For a permanent fix, upgrade firmware to V4.5 or later, which removes the V3.0.x online-write defect.
Can I use a 4-20 mA configuration on the 1215C instead of 0-20 mA?
Yes, if the field device requires a live-zero. Select output type = Current, range = 4-20 mA in the device configuration, and adjust SCALE_X so that 0 % maps to raw 0 (which the firmware remaps to 4 mA) and 100 % maps to raw 27648 (which the firmware remaps to 20 mA). For a 0-10 V field device from a 4-20 mA output, the burden becomes R = V / (I_max - 4 mA) for the live-zero portion; in practice use a 625 Ω burden with a 16 mA full-scale current to stay within the 500 Ω hardware limit.