Why Your Thermocouple Reads 3 Degrees High in the Panel and the RTD Doesn't
Where linearization and cold-junction compensation happen between sensor and SCADA tag, and why the wrong place quietly biases the reading you trust.
A furnace zone read 3 °C high all afternoon. The transmitter was fine, the wiring was fine, and the RTD on the next zone tracked perfectly. The difference was that the thermocouple channel was scaled in the PLC as if millivolts were linear with temperature, and nobody had told it where the cold junction was. That bias doesn't show up on a bench check — it shows up when the panel warms up.
Temperature is the one analog measurement where the raw electrical signal is not proportional to the engineering value, and where the wire itself is part of the sensor. If you treat it like a 4-20 mA loop, you get a number that looks reasonable and is wrong by a few degrees in a way that drifts with ambient. So the real question on every temperature point is: where does the linearization happen, and where does the cold junction get compensated?
RTDs: linear enough to fool you, not linear enough to trust
A Pt100 is defined by IEC 60751. At 0 °C it's 100.00 Ω; the standard gives a temperature coefficient (alpha) of 0.00385 Ω/Ω/°C for the common industrial curve. People remember "about 0.385 Ω per degree" and build a linear scale from it. Over a narrow span that's close. Over 0–600 °C it isn't — the resistance follows the Callendar–Van Dusen equation, which has a negative quadratic term (the B coefficient, around −5.775 × 10⁻⁷) that pulls the curve down as temperature rises.
Run the numbers: a straight line fit from 0 to 400 °C using 0.385 Ω/°C will read roughly 3–4 °C low near the middle of the span, because the real curve sags below the chord. That's the error you inherit if you scale a Pt100 as a linear resistance in the PLC.
Two ways to avoid it:
- Let a temperature transmitter do it. Any modern head-mount transmitter (the kind that fits in the sensor housing) linearizes to IEC 60751 internally and gives you a 4-20 mA or HART signal that is linear in °C. Then your SCADA scaling is trivial: 4 mA = low range, 20 mA = high range, done. This is my default. The linearization lives with the sensor, the sensor type is documented on the transmitter, and swapping a Pt100 for a Pt1000 is a transmitter config change, not a SCADA change.
- Bring resistance straight into the PLC with an RTD input card and let the card's firmware do the curve. Fine, but now the IEC 60751 curve is buried in a channel config most people never open, and lead-wire resistance is yours to manage — which is the next trap.
Lead resistance is why RTDs are 3-wire or 4-wire. A 2-wire Pt100 adds the copper lead resistance directly to the 100 Ω, and at ~0.385 Ω/°C, even 1 Ω of lead is ~2.6 °C of offset. Three-wire cancels most of it by assuming the two measurement legs are equal; 4-wire cancels it properly with a Kelvin connection. If a 3-wire RTD reads high and the error grows with cable length, check that all three cores are the same gauge and length — an unbalanced third wire breaks the cancellation the card is counting on.
Thermocouples: the panel is part of the circuit
A thermocouple doesn't measure temperature. It generates a voltage proportional to the difference between the hot (measuring) junction and the cold (reference) junction — the Seebeck effect. The tables in IEC 60584 are all referenced to a cold junction at exactly 0 °C. Your terminal block is not at 0 °C. It's at whatever the panel is, and the panel is warmer than the room because it's full of power supplies.
So every thermocouple reading needs cold-junction compensation: measure the temperature at the terminal where the thermocouple wire meets copper, convert that to the equivalent microvolts for that TC type, add it to the measured microvolts, then look up the sum in the IEC 60584 table. Skip it and your reading is low by roughly the panel-ambient temperature. Do it against the wrong reference point and you get the 3-°C-high furnace zone from the top of this article.
Two failure modes I see repeatedly:
- CJC sensor in the wrong place. The cold junction is wherever the dissimilar metals meet copper. If that's the terminal block but the CJC thermistor is mounted on the card 100 mm away behind a warm CPU, the compensation is for the wrong temperature. Isothermal terminal blocks exist for exactly this reason — they keep every TC terminal at one temperature so a single CJC reading is valid for the whole card.
- Extension wire that isn't. Thermocouple extension and compensating cable has to match the TC type (Type K extension for a Type K couple, correct polarity). Splice in plain copper anywhere before the cold junction and you've created a second, uncompensated junction at that splice. It reads fine at commissioning when the panel and the splice are the same temperature, and drifts apart the moment they aren't. Red is negative on US Type K, and reversed polarity gives you a reading that moves the right amount in the wrong direction — a classic head-scratcher.
The non-linearity is worse than an RTD's — a Type K curve is only ~41 µV/°C near room temperature and the sensitivity changes across the range — so nobody sane linearizes a thermocouple with a straight line. The table lookup is non-negotiable. The only real decision is where it runs.
Push the linearization to the edge, keep SCADA dumb
My rule: SCADA should receive a value that is already in engineering units, already linearized, already cold-junction compensated, with a known reference. The scaling in the SCADA tag should be the boring 4-20-mA-to-range map, or a pass-through of a HART/digital °C value. The moment temperature linearization lives in a SCADA expression tag, three things go wrong:
- The math is invisible to the next engineer. A transmitter's sensor type is on a label; a Callendar–Van Dusen implementation in a derived tag is archaeology.
- You can't loop-check it cleanly. With a transmitter you inject a resistance or a millivolt source (a TC calibrator that includes CJC) at the sensor and prove the whole chain. With linearization in SCADA, the number only makes sense after the tag math, so a field simulator reading doesn't match anything until it's been through the PLC.
- Ranges and units drift out of sync between the PLC scale and the SCADA scale, and now you're maintaining the curve in two places.
Where you do need it in the PLC — a bare RTD or TC card because the budget didn't cover transmitters — put the sensor type, the standard (IEC 60751 or IEC 60584 Type x), the wire configuration, and the CJC source in the point's commissioning record. Not in a comment nobody reads: in the loop sheet, next to the range.
Two checks that catch most of it
When a temperature point looks off, two quick tests separate the common causes:
- Short the input at the sensor end. Short an RTD's element terminals and the reading should slam to the bottom of range (0 Ω → well below scale) — proves the card and wiring see the field, not a stuck value. Short a thermocouple's leads at the sensor and the reading should collapse to the cold-junction temperature, because you've forced the measured voltage to zero: whatever's left is pure CJC. If that number isn't close to your panel temperature, your cold-junction compensation is wrong, full stop.
- Compare two identical sensors in the same thermowell region during warm-up. If an RTD and a TC on adjacent zones agree cold and diverge as the panel heats, the drifting one is almost always the thermocouple — either CJC placement or a copper splice. RTDs don't care what the panel is doing; thermocouples care about nothing else.
The number on the screen is the end of a chain that starts at a junction of two metals and runs through a warm terminal block. If you can't say, for a given temperature tag, where in that chain the linearization and the cold-junction compensation happen, you don't actually know what the number means — you just know it looks plausible.