NORM_X and SCALE_X: Analog Scaling in TIA Portal, Explained Properly

The short answer
To scale an analog input on a Siemens S7-1200 or S7-1500 you need two instructions, in this order:
- NORM_X takes the raw integer from the card and turns it into a REAL between 0.0 and 1.0.
- SCALE_X takes that 0.0 to 1.0 value and stretches it into your engineering range.
You cannot skip the first one. NORM_X is what makes the second one arithmetic instead of guesswork.
What the raw number actually is
A Siemens analog input does not hand you milliamps. It hands you an integer, and for the standard ranges that integer is:
| Signal | Raw value at low end | Raw value at high end |
|---|---|---|
| 0 to 10 V | 0 | 27648 |
| 0 to 20 mA | 0 | 27648 |
| 4 to 20 mA | 0 | 27648 |
| +/- 10 V | -27648 | 27648 |
The number that surprises people is 27648, not 32767. Siemens deliberately leaves headroom above and below the nominal range so you can detect an over-range or a broken wire rather than silently clipping. On a 4 to 20 mA card, a reading below 0 means the current has dropped under 4 mA, which almost always means a fault rather than a low process value.
The two instructions, wired up
Say you have a pressure transmitter, 4 to 20 mA, ranged 0 to 10 bar, on input IW64.
NORM_X
- MIN: 0
- VALUE: IW64
- MAX: 27648
- OUT: a REAL tag, call it Pressure_Norm
SCALE_X
- MIN: 0.0
- VALUE: Pressure_Norm
- MAX: 10.0
- OUT: a REAL tag, Pressure_Bar
That is the whole thing. NORM_X divides, SCALE_X multiplies, and doing it in two steps means you can re-range the transmitter later by changing one number instead of rederiving a formula.
Why not just use a formula
You can. Pressure_Bar := (IW64 / 27648.0) * 10.0 gives the same answer. Two reasons not to:
- It hides the range. Six months later, nobody reading that rung knows whether 10.0 is bar, metres or percent. NORM_X and SCALE_X with named tags say it plainly.
- Integer division bites. If you write
IW64 / 27648without the decimal point, both operands are integers and the result is 0 for every value under 27648. This is the single most common analog bug we see in training, and it looks exactly like a dead transmitter.
The three mistakes that cause most analog faults
1. Scaling from 0 when the transmitter starts at 4 mA.
The card already handles this. On a 4 to 20 mA input, 4 mA is raw 0. If you additionally subtract an offset in your logic, you have compensated twice and every reading is low.
2. Using INT instead of REAL for the normalised value.
NORM_X outputs a fraction. Store it in an INT and it rounds to 0 or 1, so your scaled value only ever shows the bottom or the top of the range. The OUT of NORM_X must be a REAL.
3. Not clamping the output.
A transmitter drifting slightly over range gives you 11.2 bar on a 10 bar scale, which then propagates into a PID and a trend. Add a limit, or use the raw value's over-range region deliberately as a fault flag.
Detecting a broken wire
This is the part most tutorials skip, and it is the part that matters on a running plant.
With a 4 to 20 mA transmitter, a cut cable gives you 0 mA, which the card reports as a large negative raw value. So:
- Raw < -100 or so: wire fault, not a low reading.
- Raw between -100 and 0: the transmitter is under 4 mA, so under-range.
- Raw 0 to 27648: normal.
- Raw over 27648: over-range.
Wire that check into an alarm and your operators stop chasing a "process problem" that is actually a damaged cable in a cable tray. This is the whole reason industry standardised on 4 to 20 mA rather than 0 to 20 mA: live zero makes a dead loop distinguishable from a zero measurement.
Scaling an analog output
Same two instructions, reversed. NORM_X from your engineering range down to 0.0 to 1.0, then SCALE_X up into 0 to 27648, then move it to QW.
For a valve commanded 0 to 100%:
- NORM_X: MIN 0.0, VALUE Valve_Cmd, MAX 100.0
- SCALE_X: MIN 0, VALUE the normalised REAL, MAX 27648, OUT to QW.
Note the SCALE_X output for an analog output is an INT, not a REAL. TIA Portal will let you pick the type on the instruction.
On Allen-Bradley, this is one instruction
If you move between platforms: Rockwell's Studio 5000 does the same job with a single SCL or, more commonly now, the Scale with Parameters (SCP) instruction, which takes input min, input max, output min and output max in one block. Same maths, one instruction instead of two, and the raw range is 0 to 32767 rather than 0 to 27648 because Rockwell uses the full integer span.
Knowing both is worth saying on your CV. Recruiters search for the instruction names.
Practise this before an interview
Analog scaling comes up in almost every controls interview, usually as "how would you bring a 4 to 20 mA level transmitter into the PLC?". A good answer names the instructions, names 27648, and mentions live zero for wire-break detection. That last part is what separates somebody who has done it from somebody who has read about it.
If you want to do it on real hardware rather than a simulator, our Automation Engineer Program puts you on live panels with real transmitters from the first weeks. See what the programme covers or talk to a counsellor.
Related reading: PLC scan cycle and why rung order matters, 4 to 20 mA loop troubleshooting, and I/O loop checking during commissioning.

