E/S

E/S Analogiques

Les signaux analogiques transportent des grandeurs physiques continues — température, pression, débit, position, force — vers l'automate sous forme de signaux électriques. Là où une entrée numérique indique qu'une vanne est ouverte ou fermée, une entrée analogique indique exactement son degré d'ouverture, la pression en amont et le débit. Maîtriser les E/S analogiques, c'est comprendre la physique des transducteurs, les mathématiques de la conversion de signal, l'immunité au bruit, l'étalonnage et le lien entre chaque valeur ingénieur et les comptages bruts du bus automate.

Intermédiaire ⏱ 40 min de lecture
Depth
Beginner → Expert
Sections
6 + sim in each
Simulators
9 interactive tools
Quiz
10 MCQ + scoring
Prérequis

Avant cette leçon, vous devriez connaître :

  • Loi d'Ohm & circuits CC de base (V = IR, puissance, série/parallèle)
  • Ce qu'est un automate — cycle de scrutation, modules d'entrées/sorties analogiques
  • Concept du 4–20 mA — boucle de courant, zéro vivant, détection de rupture de fil
  • Maths de base : ratios, pourcentages, racines carrées (pour le débit par pression différentielle)

📺 Video Lesson

〜 Fondements des Signaux Analogiques

Un signal analogique est une grandeur électrique à variation continue — tension ou courant — représentant une mesure physique. Contrairement à un signal numérique à deux états, un signal analogique peut prendre n'importe quelle valeur dans sa plage, portant des informations précises sur le monde réel. Comprendre ce que sont les signaux analogiques, comment ils sont normalisés et pourquoi certaines normes existent est la base de tout projet d'instrumentation et de contrôle.

〜 Live 4–20 mA Scaling Calculator

Drag the loop current or raw counts. Watch engineering value, wire-break detection, and percentage position update in real time.

12.00 mA
0
100
SIGNAL POSITION
50.0%
Loop mA
12.00
Raw count (16-bit)
% of span
Eng. value
Wire-break?
NO
Signal zone
NORMAL
📊 Resolution vs Accuracy — visual comparison

Change bit depth and accuracy. See how quantisation steps relate to the accuracy band — and when adding more bits stops making any practical difference.

12-bit
0.10%
100
Total counts
Resolution/count
Accuracy ±
Limiting factor

Normes de Signal : 4–20 mA, 0–10 V, et leur Origine

Les signaux analogiques industriels sont normalisés pour permettre l'interopérabilité entre instruments de différents fabricants. Les normes dominantes sont la boucle de courant 4–20 mA (norme universelle de l'industrie de procédé), 0–10 V (courant dans les variateurs et le CVC), 0–20 mA (moins courant, sans détection de rupture de fil), ±10 V (contrôle de mouvement), et 1–5 V (anciens systèmes DCS). Les boucles de courant sont préférées aux tensions pour les longues distances : un signal de 4 mA reste exactement 4 mA malgré 500 Ω de résistance de câble. Les signaux en tension subissent une chute V = I × R et nécessitent des récepteurs à haute impédance pour minimiser l'erreur de charge.

Fondements des Signaux Analogiques
// Signal standard comparison
//
//  Standard    Range        Resolution  Wire-break?  Application
//  ─────────── ──────────── ────────────────────────────────────
//  4–20 mA     4–20 mA     —           YES (< 4mA)  Process, safety
//  0–20 mA     0–20 mA     —           NO           Less common
//  0–10 V      0–10 V      —           NO           Drives, HVAC
//  ±10 V       -10 to +10V —           NO           Motion/servo
//  1–5 V       1–5 V       —           YES (< 1V)   Legacy DCS
//  0–5 V       0–5 V       —           NO           Sensors, ADC
//  Hart        4–20 mA     ±0.1%       YES          Smart instruments
//
// Current loop advantages over voltage:
//   Immunity to cable resistance: V_load = I × R_load (not cable)
//   Max cable resistance for 4-20mA: V_supply - V_transmitter / I_max
//   E.g. 24V supply, 12V transmitter, 20mA max:
//   R_max = (24 - 12) / 0.020 = 600 Ω
//   At 23 Ω/km (0.75mm²): R_max distance = 600/23 = 26 km (round trip)
//   → 13 km one-way maximum cable length
//
// For voltage signals:
//   V_at_PLC = V_source × R_input / (R_cable + R_input)
//   At R_input = 100kΩ, R_cable = 100Ω:
//   Loading error = 100 / (100 + 100000) = 0.001 = 0.1% (acceptable)
//   At R_input = 1kΩ (poor design):
//   Loading error = 100 / (100 + 1000) = 9.1% (unacceptable!)

Conversion Comptage Brut ↔ Valeur Ingénieur

Chaque carte d'entrée analogique d'automate convertit le signal électrique (mA ou V) en un comptage entier brut via son CAN. Le programme automate doit ensuite convertir ce comptage en valeur ingénieur (bar, °C, m³/h). Cette conversion s'appelle la mise à l'échelle. Obtenir cette formule exactement correcte — y compris le décalage du zéro vivant pour le 4–20 mA — est critique. Une erreur de mise à l'échelle de 1 % sur un débitmètre représente 1 % de tout le débit mal comptabilisé.

Fondements des Signaux Analogiques
// Universal analog scaling function (IEC 61131-3 Structured Text)
// Converts raw ADC count to engineering value
// Works for: 4-20mA, 0-20mA, 0-10V, ±10V — any linear signal

FUNCTION SCALE_ANALOG : REAL
VAR_INPUT
  raw        : INT;    // Raw ADC count from PLC input register
  raw_lo     : INT;    // Count at signal minimum (e.g. 4mA = 6554 on 0-32767 card)
  raw_hi     : INT;    // Count at signal maximum (e.g. 20mA = 32767)
  eng_lo     : REAL;   // Engineering value at signal minimum (e.g. 0 bar)
  eng_hi     : REAL;   // Engineering value at signal maximum (e.g. 100 bar)
END_VAR
VAR
  span_raw   : REAL;
  span_eng   : REAL;
END_VAR

span_raw := INT_TO_REAL(raw_hi - raw_lo);
span_eng := eng_hi - eng_lo;

IF span_raw = 0.0 THEN
  SCALE_ANALOG := eng_lo;  // Prevent division by zero
  RETURN;
END_IF;

SCALE_ANALOG := eng_lo + (INT_TO_REAL(raw - raw_lo) / span_raw) * span_eng;
END_FUNCTION

// Usage examples:
// 4-20mA on 16-bit card (0-32767):
//   4mA  → raw_lo = 6554  (32767 × 4/20)
//   20mA → raw_hi = 32767
//   0-100 bar:
//   pressure := SCALE_ANALOG(raw:=AI_raw, raw_lo:=6554,
//                raw_hi:=32767, eng_lo:=0.0, eng_hi:=100.0);
//
// 0-10V on 12-bit card (0-4095):
//   temp := SCALE_ANALOG(raw:=AI_raw, raw_lo:=0,
//                raw_hi:=4095, eng_lo:=-20.0, eng_hi:=80.0);

Résolution, Précision et la Différence Entre Les Deux

La résolution est le plus petit changement détectable par le CAN : plage / 2ⁿ bits. Une carte 12 bits lisant 0–10 V a une résolution de 10/4096 = 2,44 mV. La précision indique à quel point la lecture est proche de la vraie valeur — elle inclut l'erreur de quantification, l'erreur de gain, l'erreur de décalage, la dérive thermique et le bruit. Une carte peut avoir une excellente résolution (16 bits = 0,15 mV) mais une mauvaise précision (±0,5 % de plage = ±50 mV). Spécifiez toujours la résolution ET la précision pour votre application.

Fondements des Signaux Analogiques
// Resolution vs accuracy — worked example
// 16-bit analog input card, 4-20mA, 0-100 bar

VAR
  n_bits     : INT  := 16;          // ADC bit depth
  span_mA    : REAL := 16.0;        // 4-20mA live span (mA)
  span_eng   : REAL := 100.0;       // Engineering span (bar)
  resolution_counts : DINT;         // Total counts in span
  resolution_mA     : REAL;         // mA per count
  resolution_bar    : REAL;         // bar per count

  accuracy_pct      : REAL := 0.1;  // Datasheet: ±0.1% of full scale
  accuracy_mA       : REAL;         // ±mA
  accuracy_bar      : REAL;         // ±bar

  typical_noise_bits: INT  := 2;    // Effective bits lost to noise
  effective_bits    : INT;          // Noise-free resolution
  effective_res_bar : REAL;         // Effective resolution (bar)
END_VAR

resolution_counts := EXPT(2, n_bits) - 1;  // = 65535
resolution_mA     := span_mA / resolution_counts;  // = 0.000244 mA/count
resolution_bar    := span_eng / resolution_counts;  // = 0.00153 bar/count

accuracy_mA  := accuracy_pct / 100.0 * 20.0;  // = 0.02 mA = ±0.02 mA
accuracy_bar := accuracy_pct / 100.0 * 100.0; // = 0.1 bar = ±0.1 bar

// Noise limits effective resolution
effective_bits    := n_bits - typical_noise_bits;  // = 14 effective bits
effective_res_bar := span_eng / EXPT(2, effective_bits); // = 0.006 bar

// Conclusion:
//   Resolution per count: 0.00153 bar (theoretical)
//   Noise-limited resolution: 0.006 bar (practical)
//   Accuracy: ±0.1 bar (dominates everything!)
//   → Despite 16-bit resolution, measurement uncertainty = ±0.1 bar
//   → A 12-bit card (±0.05% accuracy) would be EQUALLY useful here

📡 Capteurs & Transducteurs

Un transducteur convertit une grandeur physique en signal électrique. Le capteur est l'élément sensible ; l'émetteur conditionne la sortie brute du capteur (souvent en millivolts) en un signal normalisé 4–20 mA ou numérique. Comprendre la physique de chaque type de capteur — et ses modes de défaillance — est essentiel pour choisir la bonne technologie et diagnostiquer les pannes sans remplacer du matériel fonctionnel.

📡 RTD & Thermocouple Calculator

Enter temperature to get PT100 resistance and thermocouple EMF. Or enter a measured resistance to calculate temperature. See the effect of 2-wire vs 4-wire connection and cable length.

100°C
10 m
Temperature
Signal output
2-wire error
3-wire error
4-wire error
Sensitivity
🌊 Differential Pressure Flow — Square Root Extraction

See the critical difference between linear scaling and square-root extraction for DP flow meters. Toggle the calculation method to see how large the error becomes at mid-range.

50%
1000
DP %
Correct flow (√)
Wrong (linear)
Error

Température : RTD, Thermocouples & Thermistances

Les RTD mesurent la température par le changement prévisible de la résistance métallique. Le PT100 (100 Ω à 0 °C, platine) est le standard mondial : α = 3,85×10⁻³/°C, plage −200 °C à +850 °C, classe A ±0,15 °C à 0 °C. Les thermocouples génèrent une faible FEM (40–60 µV/°C) par effet Seebeck à la jonction de deux métaux dissemblables. Le type K (chromel-alumel) est le plus courant : 41 µV/°C, −200 °C à +1260 °C — robuste et économique mais précision plus faible. Les thermistances sont des composants semi-conducteurs avec une grande variation de résistance par degré — utilisées pour une mesure précise sur des plages étroites.

Capteurs & Transducteurs
// RTD resistance calculation and measurement
// PT100 Callendar-Van Dusen equation (IEC 60751)
//   Above 0°C:  R(T) = R0 × (1 + A×T + B×T²)
//   Below 0°C:  R(T) = R0 × (1 + A×T + B×T² + C×(T-100)×T³)
//   Constants: A = 3.9083×10⁻³, B = -5.775×10⁻⁷, C = -4.183×10⁻¹²
//   R0 = 100 Ω for PT100, 1000 Ω for PT1000

// Simplified linear approximation (valid ±0.5°C up to 200°C):
// R(T) ≈ 100 × (1 + 0.00385 × T)
// T ≈ (R - 100) / (100 × 0.00385) = (R - 100) / 0.385

// PLC scaling from RTD transmitter 4-20mA output:
// Transmitter configured: 0°C = 4mA, 200°C = 20mA
FUNCTION RTD_to_Celsius : REAL
VAR_INPUT
  raw_count : INT;       // 0–32767 (16-bit card, 4–20mA)
  T_lo      : REAL := 0.0;    // °C at 4 mA
  T_hi      : REAL := 200.0;  // °C at 20 mA
END_VAR
  RTD_to_Celsius := SCALE_ANALOG(raw:=raw_count,
    raw_lo:=6554, raw_hi:=32767, eng_lo:=T_lo, eng_hi:=T_hi);
END_FUNCTION

// Thermocouple cold junction compensation:
// TC output = V_hot_junction - V_cold_junction
// Without CJC: if ambient = 25°C, K-type TC reads 25°C LOW
// CJC measures ambient temperature at transmitter terminals
// Corrected reading = TC_mV + CJC_mV(ambient)
// Modern transmitters perform CJC internally
// Error if CJC fails: ≈ ambient temperature error in reading

// 3-wire vs 2-wire RTD:
// 2-wire: cable resistance adds to measurement
//   At 100m, 0.75mm²: Rcable = 24.4×2×0.1 = 4.9Ω → 12.7°C error!
// 3-wire: transmitter subtracts one cable resistance
//   Error reduced to ΔR_mismatch ≈ 0.02Ω → 0.05°C
// 4-wire: separate excitation and measurement → zero cable error
//   Use for laboratory and custody transfer accuracy

Capteurs de Pression : Relatif, Absolu, Différentiel

Les capteurs de pression convertissent la force par unité de surface en signal électrique. Les capteurs relatifs mesurent par rapport à la pression atmosphérique — utilisés pour cuves, tuyauteries et hydraulique. Les capteurs absolus mesurent par rapport au vide parfait — utilisés pour les références barométriques et les procédés gazeux. Les capteurs différentiels mesurent la différence entre deux pressions de procédé — essentiels pour la mesure de débit (plaque à orifice, Venturi) et la surveillance des filtres. L'élément sensible est presque toujours un pont piézorésistif en silicium ou une membrane capacitive.

Capteurs & Transducteurs
// Differential pressure flow measurement
// Orifice plate + DP transmitter: flow ∝ √(ΔP)
// This non-linearity MUST be compensated in the PLC

FUNCTION DP_to_Flow : REAL
VAR_INPUT
  dp_raw     : INT;    // Raw ADC count from DP transmitter
  dp_lo      : REAL := 0.0;    // mbar at 4 mA
  dp_hi      : REAL := 250.0;  // mbar at 20 mA (max DP)
  flow_max   : REAL := 1000.0; // m³/h at dp_hi
  cutoff_pct : REAL := 0.5;    // % DP below which flow = 0 (noise)
END_VAR
VAR
  dp_mbar    : REAL;
  dp_ratio   : REAL;  // dp / dp_max
END_VAR

// Scale DP transmitter output to engineering units
dp_mbar := SCALE_ANALOG(raw:=dp_raw, raw_lo:=6554,
              raw_hi:=32767, eng_lo:=dp_lo, eng_hi:=dp_hi);

// Square-root extraction (flow ∝ √ΔP)
dp_ratio := dp_mbar / dp_hi;

// Low-flow cut-off: below cutoff, flow reads 0 (eliminates noise)
IF dp_ratio < (cutoff_pct / 100.0) THEN
  DP_to_Flow := 0.0;
  RETURN;
END_IF;

DP_to_Flow := flow_max * SQRT(dp_ratio);
END_FUNCTION

// Without square-root extraction:
// At ΔP = 100 mbar (40% of 250 mbar range):
//   Linear scaling: flow = 40% × 1000 = 400 m³/h (WRONG)
//   Correct:        flow = √(100/250) × 1000 = 632 m³/h
// Error = 232 m³/h = 37% — catastrophic for process control!

Position, Force & Autres Capteurs Analogiques

Position linéaire : les LVDT offrent une mesure précise et robuste sans usure par contact — utilisés dans les positionneurs de vanne et la surveillance de presses. Les capteurs magnétostrictifs offrent une résolution de 1 µm sur plusieurs mètres — utilisés dans les vérins hydrauliques. Les cellules de charge (jauges de contrainte en pont de Wheatstone) : excitation 4 fils, sortie différentielle 2 fils (mV/V). Une cellule de 100 kg à 2 mV/V avec 10 V d'alimentation produit 20 mV à pleine charge — nécessitant un amplificateur de précision.

Capteurs & Transducteurs
// Load cell signal conditioning
// Full bridge strain gauge: 4-wire excitation, 2-wire signal
// Output: mV proportional to load

VAR
  excitation_V   : REAL := 10.0;   // Supply to bridge (V)
  sensitivity    : REAL := 2.0;    // mV/V rated output
  capacity_kg    : REAL := 1000.0; // Full scale load (kg)
  raw_mV         : REAL;           // Measured bridge output (mV)
  load_kg        : REAL;           // Calculated load

  // ADC for load cell (typically 24-bit sigma-delta)
  adc_raw        : DINT;           // 24-bit count (0 to 16777215)
  adc_fullscale  : DINT := 16777215;
  adc_ref_V      : REAL := 0.02;   // ADC reference = 20mV = rated output
END_VAR

// Full scale signal:
// V_signal_max = excitation × sensitivity = 10 × 0.002 = 20 mV
// ADC must be configured for ±20 mV range (or use dedicated load cell ADC)

// Convert ADC count to load:
raw_mV := DINT_TO_REAL(adc_raw) / DINT_TO_REAL(adc_fullscale)
          * (adc_ref_V * 1000.0);  // Convert to mV
load_kg := raw_mV / (excitation_V * sensitivity) * capacity_kg;
// = raw_mV / 20 × 1000 kg

// Important considerations:
//   Cable resistance affects bridge balance (use 6-wire for long runs)
//   Temperature coefficient of gauge factor: ≈ 0.01%/°C
//   Creep: load cell output drifts over time at constant load
//   Hysteresis: loading vs. unloading curve mismatch ≈ 0.02% FS
//   Shock protection: overload mechanical stop at 150% FS

// pH sensor:
//   Output: ~59.16 mV/pH unit at 25°C (Nernst equation)
//   At pH 7 (neutral): 0 mV reference
//   At pH 0: +414 mV, at pH 14: −414 mV
//   Temperature compensation: MANDATORY (sensitivity varies with T)
//   Calibration: 2-point minimum (pH 4 and pH 7 buffers)
//   Electrode lifetime: 6–12 months typical

🔧 Conditionnement du Signal

Les signaux bruts des capteurs sont souvent trop faibles, trop bruités, non normalisés ou électriquement incompatibles pour être connectés directement à une entrée automate. Le conditionnement du signal prépare le signal pour la numérisation : amplification, filtrage, isolation, linéarisation et adaptation d'impédance. Comprendre ce qui se passe entre les bornes du capteur et le CAN explique la plupart des erreurs de mesure et des problèmes de bruit.

🔧 Analog Filter — Time & Frequency Domain

Adjust filter cutoff and order. See the time-domain step response and frequency response simultaneously. Watch how noise is reduced versus how fast the filter responds to real changes.

10 Hz
1st order
5 Hz
Cutoff f_c
Attenuation @ sig
Phase lag @ f_c
Step 90% time

Amplification, Décalage & Amplificateurs d'Instrumentation

Un amplificateur d'instrumentation (INA) est la solution standard pour les petits signaux différentiels. Contrairement à un simple amplificateur opérationnel, il possède une très haute impédance d'entrée sur les deux entrées, un gain configurable par une seule résistance et un CMRR élevé (80–120 dB). Il est utilisé pour les thermocouples (20–60 mV pleine échelle), les jauges de contrainte (10–30 mV PE) et tout capteur à haute impédance. La résistance de gain fixe l'amplification : typiquement G = 1 + 50 kΩ/Rg (pour INA128). À G = 100 (Rg = 505 Ω), un signal de 20 mV devient 2,0 V — adapté à une entrée CAN standard.

Conditionnement du Signal
// Instrumentation amplifier noise budget
// Application: K-type thermocouple, range 0-500°C
// Signal: 0 mV (0°C) to 20.5 mV (500°C) — K-type sensitivity 41µV/°C
// Required temperature resolution: 0.5°C → 20.5µV signal change

VAR
  // INA128 specifications:
  gain           : REAL := 100.0;  // G = 1 + 50kΩ/505Ω
  en_density     : REAL := 8.0;    // Input noise: 8 nV/√Hz
  bandwidth_Hz   : REAL := 10.0;   // Useful bandwidth after filtering

  // Signal:
  signal_mV      : REAL := 20.5;   // Full scale (500°C)
  resolution_uV  : REAL := 20.5;   // 0.5°C = 20.5 µV

  // Noise calculation:
  noise_rms_nV   : REAL;   // Input-referred RMS noise
  noise_rms_uV   : REAL;
  SNR            : REAL;
  bits_effective : REAL;
END_VAR

// RMS noise = noise_density × √bandwidth
noise_rms_nV := en_density * SQRT(bandwidth_Hz);  // = 8 × √10 = 25.3 nV
noise_rms_uV := noise_rms_nV / 1000.0;            // = 0.0253 µV

// Signal-to-noise ratio
SNR := 20.0 * LOG(signal_mV * 1000.0 / noise_rms_uV) / LOG(10.0);
// = 20 × log(20500/0.0253) = 20 × log(810,000) = 118 dB

// Effective bits = SNR / 6.02
bits_effective := SNR / 6.02;  // = 118/6.02 = 19.6 effective bits

// Conclusion: INA128 noise is far below the 20.5 µV resolution target
// The ADC (12-bit = 72 dB SNR) is the limiting factor, not the amp
// Use ≥ 16-bit ADC to exploit the INA's low noise performance

Filtrage : RC, Actif, Numérique — Bien Choisir

Les filtres éliminent le contenu fréquentiel indésirable du signal. Pour les E/S analogiques, il faut supprimer : les harmoniques secteur 50/60 Hz, les parasites de commutation haute fréquence des variateurs (2–20 kHz) et le bruit thermique large bande. Les filtres RC matériels avant le CAN sont obligatoires pour éviter le repliement spectral — le théorème de Nyquist exige que la fréquence de coupure du filtre anti-repliement soit inférieure à la moitié de la fréquence d'échantillonnage du CAN. Les filtres numériques dans l'automate ajoutent une réjection du bruit supplémentaire mais introduisent une latence.

Conditionnement du Signal
// Anti-aliasing filter design
// ADC sample rate: 1000 Hz (1ms cycle PLC analog scan)
// Nyquist frequency: 500 Hz
// Anti-aliasing filter must attenuate signals above 500 Hz
// Choose cutoff fc = 100 Hz (5× safety margin)

// RC filter: R = 1/(2π×fc×C)
// Choose C = 100nF: R = 1/(2π×100×100e-9) = 15.9 kΩ → use 16kΩ
// Actual fc = 1/(2π×16000×100e-9) = 99.5 Hz ≈ 100 Hz

// Attenuation at 500 Hz (Nyquist): 20×log(fc/f) = 20×log(100/500) = -14 dB
// Not enough! For 1% alias rejection need > -40 dB at 500 Hz
// → Need 2nd order filter or lower fc

// 2nd order Sallen-Key: -40 dB/decade → -40 dB at 10×fc = 1 kHz
// Set fc = 50 Hz: -40 dB at 500 Hz ✓ (aliasing suppressed)

// Digital moving average filter in PLC:
FUNCTION MA_Filter : REAL
VAR_INPUT
  new_sample  : REAL;
  n_samples   : INT := 16;  // Averaging window
END_VAR
VAR_IN_OUT
  buffer      : ARRAY[0..31] OF REAL;
  index       : INT;
  sum         : REAL;
END_VAR
  sum := sum - buffer[index] + new_sample;
  buffer[index] := new_sample;
  index := (index + 1) MOD n_samples;
  MA_Filter := sum / INT_TO_REAL(n_samples);
END_FUNCTION

// Exponential filter (IIR first-order) — better for control loops:
// y[n] = α × x[n] + (1-α) × y[n-1]
// α = Tscan / (τ_filter + Tscan)
// For τ = 500ms, Tscan = 10ms: α = 10/(500+10) = 0.0196
// Time constant maintained regardless of scan time changes
FUNCTION EXP_Filter : REAL
VAR_INPUT
  new_val  : REAL;
  tau_ms   : REAL := 500.0;  // Filter time constant (ms)
  scan_ms  : REAL := 10.0;   // PLC scan time (ms)
END_VAR
VAR_IN_OUT
  prev_out : REAL;
END_VAR
VAR
  alpha    : REAL;
END_VAR
  alpha    := scan_ms / (tau_ms + scan_ms);
  prev_out := alpha * new_val + (1.0 - alpha) * prev_out;
  EXP_Filter := prev_out;
END_FUNCTION

Isolation, Alimentation en Boucle & Protocole HART

L'isolation galvanique interrompt la connexion électrique entre le terrain et le système de contrôle tout en laissant passer le signal — via transformateurs, optocoupleurs ou condensateurs. Essentielle lorsque les appareils de terrain ont des potentiels de terre différents, lorsque des atmosphères explosives nécessitent des barrières de sécurité intrinsèque, et lorsque des transitoires haute tension peuvent apparaître sur le câblage terrain. Le protocole HART superpose un signal numérique FSK ±0,5 mA (1200/2200 Hz) sur la boucle 4–20 mA sans affecter la mesure analogique. Un modem HART peut lire l'identification de l'appareil, les données d'étalonnage, le diagnostic et les variables secondaires.

Conditionnement du Signal
// HART protocol — what data is accessible
// HART commands (subset of most useful):
//
// CMD 0:  Read unique identifier (manufacturer, device type, serial)
// CMD 1:  Read primary variable (PV) and units
// CMD 2:  Read PV, % range, loop current, span
// CMD 3:  Read dynamic variables (PV, SV, TV, QV)
// CMD 12: Read message (user-defined string)
// CMD 13: Read tag, descriptor, date
// CMD 14: Read transducer information (serial, limits, unit code)
// CMD 15: Read device info (range values, signal code)
// CMD 17: Write message
// CMD 35: Write primary variable range values (recalibrate)
// CMD 44: Write primary variable units
// CMD 45: Trim primary variable zero
// CMD 46: Trim primary variable gain
//
// HART modem in PLC (e.g. Siemens AI module with integrated HART):
// Reads CMD 3 data automatically every 500ms
// Results available in extended I/O data area:

VAR
  // From HART extended data block:
  pv_value    : REAL;    // Primary variable (same as 4-20mA value)
  sv_value    : REAL;    // Secondary variable (e.g. temperature from DP cell)
  loop_mA     : REAL;    // Actual loop current (diagnostic)
  device_status: WORD;  // Device health flags
  // Bit 0: Primary variable out of limits
  // Bit 1: Non-primary variable out of limits
  // Bit 2: Loop current saturated
  // Bit 4: More status available
  // Bit 5: Cold start (device just powered)
  // Bit 7: Device malfunction
END_VAR

// HART wire-break detection:
// If transmitter fails: loop_mA → 0 or > 21.5 mA (NAMUR NE43)
// NAMUR NE43 alarm levels:
//   < 3.6 mA: sensor/cable failure → substitute value DOWN
//   > 21.0 mA: sensor/cable failure → substitute value UP
// These saturate the 4-20mA output to signal the failure

💻 Programmation API pour E/S Analogiques

La lecture d'une entrée analogique et l'écriture d'une sortie analogique nécessitent plus de soin que pour les E/S numériques. Chaque voie analogique doit être mise à l'échelle, filtrée, limitée et surveillée par alarme. Les sorties analogiques nécessitent une limitation de vitesse, une gestion de l'état de sécurité et un transfert sans à-coup entre les modes manuel et automatique.

💻 Analog Input Channel Dashboard — live simulation

Simulate a live analog process with noise, drift, and fault injection. Watch scaling, filtering, alarms, and wire-break detection react in real time exactly as the AI_Process function block does.

50.0%
2.0%
500 ms
85%
15%
Raw PV (noisy)
Filtered PV
Raw count
Loop mA
Alarm H
OK
Alarm L
OK
Wire break
NO
Status
OK
🔄 PID Analog Control Loop — pressure vessel simulation

A simulated pressure vessel with an inlet control valve (AO) and a pressure transmitter (AI). Tune the PID, change the setpoint, inject load disturbances, and watch the closed-loop response.

5.0 bar
1.5
30 s
3 s
Pressure PV
Setpoint
Error
Valve output
Integral
Mode
AUTO

Bloc de Traitement Complet de l'Entrée Analogique

Un bloc de traitement d'entrée analogique de qualité production fait bien plus que convertir des comptages en unités ingénieur. Il applique un filtre, détecte la rupture de fil (pour le 4–20 mA), applique les alarmes haute/basse, limite la sortie à des valeurs sûres et fournit une valeur de substitution en cas de défaillance du capteur. Ce bloc est appelé une fois par voie d'entrée, à chaque cycle de scrutation.

Programmation API pour E/S Analogiques
// Analog Input Processing Function Block
// Complete production-quality implementation
FUNCTION_BLOCK AI_Process
VAR_INPUT
  raw_count   : INT;         // PLC hardware input register
  raw_lo      : INT  := 6554;   // Count at 4 mA
  raw_hi      : INT  := 32767;  // Count at 20 mA
  eng_lo      : REAL := 0.0;
  eng_hi      : REAL := 100.0;
  filter_tau  : REAL := 1000.0; // ms filter time constant
  scan_ms     : REAL := 10.0;   // PLC scan time ms
  alarm_hi    : REAL := 95.0;   // High alarm threshold
  alarm_lo    : REAL := 5.0;    // Low alarm threshold
  sub_value   : REAL := 50.0;   // Substitute value on fault
  enable      : BOOL := TRUE;
END_VAR
VAR_OUTPUT
  pv          : REAL;        // Process value (engineering units)
  pv_raw      : REAL;        // Unfiltered value
  alarm_H     : BOOL;        // High alarm active
  alarm_L     : BOOL;        // Low alarm active
  wire_break  : BOOL;        // Wire break / under-range detected
  status_ok   : BOOL;        // Channel healthy
END_VAR
VAR
  pv_filt     : REAL;        // Internal filter state
  alpha       : REAL;
  span_raw    : REAL;
  span_eng    : REAL;
  WIRE_BREAK_THRESHOLD : INT := 5000;  // Below this = wire break
END_VAR

IF NOT enable THEN
  pv := sub_value; status_ok := FALSE; RETURN;
END_IF;

// Wire break detection (4-20mA only)
wire_break := raw_count < WIRE_BREAK_THRESHOLD;
IF wire_break THEN
  pv := sub_value; status_ok := FALSE;
  alarm_H := FALSE; alarm_L := FALSE;
  RETURN;
END_IF;

// Scaling
span_raw := INT_TO_REAL(raw_hi - raw_lo);
span_eng := eng_hi - eng_lo;
pv_raw   := eng_lo + (INT_TO_REAL(raw_count - raw_lo) / span_raw) * span_eng;

// Clamp to slightly beyond range (allow ±5% over/under-range)
pv_raw := LIMIT(eng_lo - 0.05*span_eng, pv_raw, eng_hi + 0.05*span_eng);

// Exponential filter
alpha   := scan_ms / (filter_tau + scan_ms);
pv_filt := alpha * pv_raw + (1.0 - alpha) * pv_filt;
pv      := pv_filt;

// Alarms (with 1% hysteresis)
alarm_H := pv >= alarm_hi OR (alarm_H AND pv > alarm_hi * 0.99);
alarm_L := pv <= alarm_lo OR (alarm_L AND pv < alarm_lo * 1.01);

status_ok := TRUE;
END_FUNCTION_BLOCK

Sortie Analogique : Limitation de Vitesse, État de Sécurité & Transfert Sans À-Coup

Les sorties analogiques nécessitent des soins particuliers. Un changement brutal de la sortie (ex. : vanne qui saute de 0 % à 100 %) provoque des coups de bélier hydrauliques, des chocs mécaniques ou des perturbations du procédé. La limitation de vitesse prévient cela. En cas de défaut automate ou d'arrêt CPU, la sortie doit passer à un état de sécurité défini. Le transfert sans à-coup assure une commutation douce entre modes manuel et automatique — l'intégrateur est préchargé avec la consigne manuelle courante avant le passage en automatique.

Programmation API pour E/S Analogiques
// Analog Output Processing Function Block
FUNCTION_BLOCK AO_Process
VAR_INPUT
  setpoint_eng : REAL;       // Commanded value (engineering units)
  eng_lo       : REAL := 0.0;
  eng_hi       : REAL := 100.0;
  raw_lo       : INT  := 6554;   // DAC count at 4 mA
  raw_hi       : INT  := 32767;  // DAC count at 20 mA
  rate_limit   : REAL := 10.0;   // Max change per second (eng units/s)
  scan_ms      : REAL := 10.0;
  safe_value   : REAL := 0.0;    // Output on fault
  fault_active : BOOL := FALSE;
END_VAR
VAR_OUTPUT
  raw_out      : INT;         // Write to PLC hardware output register
  actual_eng   : REAL;        // Actual output in engineering units
END_VAR
VAR
  limited_sp   : REAL;        // Rate-limited setpoint
  max_step     : REAL;        // Max step this scan
  span_raw     : REAL;
  span_eng     : REAL;
END_VAR

// On fault: safe state
IF fault_active THEN
  actual_eng := safe_value;
  limited_sp := safe_value;  // Reset rate limiter state
  // Convert to raw and write
  span_raw  := INT_TO_REAL(raw_hi - raw_lo);
  span_eng  := eng_hi - eng_lo;
  raw_out   := raw_lo + REAL_TO_INT((actual_eng - eng_lo) / span_eng * span_raw);
  RETURN;
END_IF;

// Rate limiting
max_step   := rate_limit * scan_ms / 1000.0;  // Per scan
limited_sp := LIMIT(limited_sp - max_step,
                     setpoint_eng,
                     limited_sp + max_step);
actual_eng := limited_sp;

// Clamp to output range
actual_eng := LIMIT(eng_lo, actual_eng, eng_hi);

// Scale to DAC counts
span_raw := INT_TO_REAL(raw_hi - raw_lo);
span_eng := eng_hi - eng_lo;
raw_out  := raw_lo + REAL_TO_INT(
              (actual_eng - eng_lo) / span_eng * span_raw);
END_FUNCTION_BLOCK

Boucle de Régulation PID — Entrée Analogique, Sortie Analogique

L'utilisation la plus courante des E/S analogiques est la fermeture d'une boucle de régulation : mesurer une variable de procédé (température, pression, niveau), la comparer à la consigne, calculer une correction et agir sur un élément de contrôle final (vanne, chauffage, vitesse de pompe). IEC 61131-3 fournit le bloc fonctionnel CONT_C (régulateur continu). La maîtrise du réglage PID — Kp, Ti, Td et leur interaction avec la dynamique du procédé — est la compétence de base de l'ingénierie de régulation.

Programmation API pour E/S Analogiques
// PID control loop — pressure control example
// PV: pressure transmitter 0-10 bar (4-20mA)
// MV: control valve 0-100% (4-20mA positioner)
VAR
  pressure_AI  : AI_Process;  // Analog input function block
  valve_AO     : AO_Process;  // Analog output function block
  pid          : PID;

  // PID parameters (tune for process):
  Kp           : REAL := 1.5;    // Proportional gain
  Ti           : REAL := 30.0;   // Integral time (s) — reset time
  Td           : REAL := 3.0;    // Derivative time (s) — rate time
  Tscan        : REAL := 0.1;    // PLC cycle time (s) = 100ms

  // Setpoint and mode
  pressure_sp  : REAL := 5.0;    // Bar setpoint
  auto_mode    : BOOL := TRUE;
  manual_output: REAL := 50.0;   // % valve open in manual

  // Outputs
  valve_pct    : REAL;           // 0-100% valve demand
END_VAR

// 1. Read and process analog input
pressure_AI(raw_count:=AI_pressure_raw, eng_lo:=0.0, eng_hi:=10.0,
            alarm_hi:=9.5, alarm_lo:=0.2, filter_tau:=200.0);

// 2. PID controller
pid(
  ACTUAL     := pressure_AI.pv,    // Process variable
  SET_POINT  := pressure_sp,       // Setpoint
  KP         := Kp,
  TI         := Ti,
  TD         := Td,
  CYCLE      := Tscan,
  MANUAL     := NOT auto_mode,
  MANUAL_IN  := manual_output / 100.0,  // Bumpless transfer
  LMN        => valve_pct_norm          // 0.0-1.0 output
);
valve_pct := valve_pct_norm * 100.0;

// 3. Write analog output
valve_AO(setpoint_eng:=valve_pct, rate_limit:=20.0,  // 20%/s max
          fault_active:=NOT pressure_AI.status_ok);
AO_valve_raw := valve_AO.raw_out;

// Anti-windup: integral is automatically limited in CONT_C
// Bumpless transfer: MANUAL_IN pre-loads integrator
// Derivative filter: CONT_C applies built-in derivative filter
// Output clamping: 0-100% with back-calculation anti-windup

🎯 Étalonnage, Précision & Traçabilité

L'étalonnage établit la relation entre l'indication d'un instrument de mesure et la vraie valeur, à l'aide d'étalons de référence traçables aux instituts nationaux de métrologie. Dans les industries de procédé, l'étalonnage est une exigence réglementaire. Comprendre les procédures d'étalonnage, les bilans d'erreurs et comment maintenir la traçabilité est essentiel pour tout système de mesure analogique utilisé en sécurité, qualité ou transfert de garde.

🎯 Interactive Two-Point Calibration

Walk through a real two-point calibration. The transmitter has injected zero and span errors. Apply reference signals and correct them. See error before and after calibration.

Zero error
Span error
Before accuracy
After accuracy

Error Budget Reference

Error sourceTypical valueCorrectable?Combination method
Transmitter ref. accuracy±0.05–0.2% FSBy calibrationRSS (random)
Temperature drift±0.02–0.1%/10°CPartialSystematic (add)
Long-term drift±0.05–0.2%/yearBy recalibrationSystematic
ADC quantisation±0.5 LSBNo (inherent)RSS
ADC gain error±0.05–0.1% FSBy calibrationSystematic
Cable noise (EMI)±0.01–0.5% FSBy shieldingRSS
Ground loop±0.5–5% FSBy isolationSystematic

Étalonnage Deux Points : Zéro, Étendue & Ajustage

L'étalonnage deux points corrige à la fois l'erreur de décalage et l'erreur de gain. Appliquer une entrée au point zéro connu (ex. : 4 mA depuis un calibrateur), lire la valeur automate, ajuster le paramètre de zéro jusqu'à ce que l'automate indique la valeur ingénieur correcte. Puis appliquer une entrée au point d'étendue (ex. : 20 mA) et ajuster le paramètre d'étendue. Cela corrige complètement la fonction de transfert linéaire. Pour les émetteurs HART, CMD 45 ajuste le zéro et CMD 46 ajuste le gain — la correction est mémorisée dans l'émetteur lui-même.

Étalonnage, Précision & Traçabilité
// Two-point calibration procedure — structured text implementation
// For a pressure transmitter 0-100 bar on a 4-20mA loop

VAR
  calib_mode      : BOOL := FALSE;  // Operator enables calibration
  calib_step      : INT  := 0;      // 0=idle, 1=zero, 2=span, 3=done
  ref_value_zero  : REAL := 0.0;    // Known reference at zero (bar)
  ref_value_span  : REAL := 100.0;  // Known reference at span (bar)
  raw_at_zero     : INT;            // Captured raw count at zero
  raw_at_span     : INT;            // Captured raw count at span
  calibrated_lo   : INT;            // Calibrated raw_lo
  calibrated_hi   : INT;            // Calibrated raw_hi
  calib_confirm   : BOOL;
  calib_done      : BOOL;
  // Calculated correction:
  ideal_lo        : INT := 6554;    // Expected 4mA count
  ideal_hi        : INT := 32767;   // Expected 20mA count
  zero_error_mA   : REAL;           // Offset error in mA
  span_error_pct  : REAL;           // Gain error in %
END_VAR

CASE calib_step OF
  0: // IDLE
    IF calib_mode THEN calib_step := 1; calib_done := FALSE; END_IF;

  1: // ZERO POINT — operator applies 4 mA (or 0 bar reference)
    // Display instruction on HMI: "Apply zero reference signal"
    IF calib_confirm THEN
      raw_at_zero := AI_raw_count;  // Capture raw count
      calibrated_lo := raw_at_zero;
      zero_error_mA := INT_TO_REAL(raw_at_zero - ideal_lo)
                       / INT_TO_REAL(ideal_hi - ideal_lo) * 16.0;
      calib_confirm := FALSE;
      calib_step := 2;
    END_IF;

  2: // SPAN POINT — operator applies 20 mA (or 100 bar reference)
    IF calib_confirm THEN
      raw_at_span := AI_raw_count;
      calibrated_hi := raw_at_span;
      span_error_pct := (INT_TO_REAL(raw_at_span - raw_at_zero)
                        / INT_TO_REAL(ideal_hi - ideal_lo) - 1.0) * 100.0;
      calib_confirm := FALSE;
      calib_step := 3;
    END_IF;

  3: // APPLY calibration and save to retain memory
    AI_block.raw_lo := calibrated_lo;
    AI_block.raw_hi := calibrated_hi;
    calib_done := TRUE;
    calib_step := 0;
END_CASE;
// Log calibration: date, technician, before/after values, certificate number

Analyse du Bilan d'Erreurs

Un bilan d'erreurs quantifie chaque source d'incertitude de mesure et les combine pour prédire la précision totale du système. Sources : précision de l'émetteur (% de plage), dérive thermique de l'émetteur, erreurs de gain et de décalage du CAN, bruit de câble (réjection de mode commun), retard de filtrage automate (erreur dynamique en régime transitoire) et erreur de numérisation. Les erreurs aléatoires indépendantes se combinent en racine carrée de la somme des carrés ; les erreurs systématiques se somment directement.

Étalonnage, Précision & Traçabilité
// Error budget calculation — pressure measurement system
// Transmitter: Endress+Hauser PMC51, 0-100 bar, 4-20mA
// PLC card: Siemens SM331 AI 8×12bit

// Error source breakdown (all as % of full scale):
VAR
  // Transmitter errors:
  e_transmitter_ref   : REAL := 0.075;  // ±0.075% FS at reference conditions
  e_transmitter_temp  : REAL := 0.05;   // ±0.05%/10°C × 20°C range = 0.1%
  e_transmitter_long  : REAL := 0.1;    // Long-term drift per year
  e_transmitter_vib   : REAL := 0.02;   // Vibration effect

  // Transmission errors:
  e_cable_noise       : REAL := 0.02;   // EMI / noise on cable
  e_loop_resistance   : REAL := 0.01;   // Resistive drop effect

  // PLC card errors:
  e_adc_gain          : REAL := 0.1;    // ADC gain error
  e_adc_offset        : REAL := 0.05;   // ADC offset error
  e_adc_quantise      : REAL := 0.024;  // ±0.5 LSB / 2^12 = 0.024%
  e_adc_temp          : REAL := 0.05;   // Temperature drift of ADC

  // Combined uncertainty:
  e_random            : REAL;   // RSS of random/independent errors
  e_systematic        : REAL;   // Sum of systematic errors
  e_total             : REAL;   // Total measurement uncertainty
END_VAR

// Random errors (RSS combination):
e_random := SQRT(e_transmitter_ref*e_transmitter_ref
               + e_cable_noise*e_cable_noise
               + e_adc_quantise*e_adc_quantise
               + e_adc_temp*e_adc_temp);
// = √(0.075² + 0.02² + 0.024² + 0.05²) = √(0.00875) = 0.094%

// Systematic errors (direct sum — worst case):
e_systematic := e_transmitter_temp + e_transmitter_long
              + e_adc_gain + e_adc_offset;
// = 0.1 + 0.1 + 0.1 + 0.05 = 0.35%

// Total (random RSS + systematic):
e_total := e_random + e_systematic;  // = 0.094 + 0.35 = 0.44% FS
// On 100 bar span: ±0.44 bar total uncertainty
// After calibration: systematic errors reduced → e_total ≈ ±0.12% FS

Traçabilité Métrologique & Intervalles d'Étalonnage

La traçabilité signifie que les certificats d'étalonnage forment une chaîne ininterrompue jusqu'aux étalons nationaux (NIST, LNE, PTB). Chaque instrument de référence utilisé pour étalonner des instruments de terrain doit lui-même être étalonné par rapport à un étalon de niveau supérieur, avec des certificats documentés. Les intervalles d'étalonnage sont déterminés par les taux de dérive, la criticité du procédé et les exigences réglementaires. Pour l'instrumentation classée SIL, l'intervalle d'essai de prouvabilité doit être suffisamment court pour que la probabilité de défaillance dangereuse non détectée reste en dessous de l'exigence SIL.

Étalonnage, Précision & Traçabilité
// Calibration management data structure
// Store in PLC retain memory or SCADA database

TYPE InstrumentCalibRecord :
  STRUCT
    tag_id          : STRING[16];   // e.g. 'PT-1234'
    description     : STRING[32];   // 'Reactor inlet pressure'
    location        : STRING[24];
    manufacturer    : STRING[16];   // 'Endress+Hauser'
    model           : STRING[16];   // 'PMC51'
    serial          : STRING[16];
    range_lo        : REAL;         // 0 bar
    range_hi        : REAL;         // 100 bar
    range_units     : STRING[8];    // 'bar'
    last_calib_date : STRING[12];   // 'YYYY-MM-DD'
    next_calib_date : STRING[12];
    calib_interval_days : INT := 365;
    last_zero_error : REAL;         // % FS at last calibration
    last_span_error : REAL;
    cal_cert_number : STRING[20];
    calibrator_id   : STRING[16];   // Reference instrument used
    calibrator_cert : STRING[20];   // Calibrator certificate number
    sil_level       : INT := 0;     // 0=no SIL, 1=SIL1, 2=SIL2
    pti_days        : INT := 365;   // Proof test interval (safety)
    status          : STRING[8];    // 'CURRENT', 'DUE', 'OVERDUE'
  END_STRUCT
END_TYPE

// ISO 9001 calibration schedule check:
// Run daily in PLC or SCADA:
// IF today > instrument.next_calib_date THEN
//   ALARM: 'Calibration overdue: ' + instrument.tag_id
//   IF instrument.sil_level >= 2 THEN
//     Consider automatic fallback to substitute value
//   END_IF
// END_IF

🔍 Diagnostic & Dépannage

Les défauts de signal analogique sont plus subtils que les défauts numériques. Une entrée numérique bloquée est évidente ; une entrée analogique qui lit 2 % de trop haut est invisible sans données de référence. Un diagnostic systématique — comparaison d'instruments, surveillance des niveaux de bruit, suivi des tendances de dérive — révèle les problèmes avant qu'ils ne causent des perturbations du procédé.

🔍 Analog Fault Diagnosis Challenge

An analog measurement system has a fault. Use virtual meter probes to measure at each point. Diagnose the root cause before clicking Reveal.

Click a probe point ● to measure.
🔀 2oo3 Voting — redundant measurement

Drag three independent transmitters. Watch the voted value and fault detection. Inject drift or failure on individual channels.

5.00 bar
5.05 bar
4.98 bar
0.30 bar
Voted PV
T1 status
OK
T2 status
OK
T3 status
OK
Vote quality
FULL
Spread

Diagnostic Systématique des Défauts Analogiques

Tout défaut de mesure analogique appartient à l'une de cinq catégories : pas de signal (rupture de fil, perte d'alimentation), valeur erronée (mauvaise mise à l'échelle, défaillance de l'émetteur), signal bruité (IEM, boucle de masse, connexion desserrée), signal à dérive (dérive thermique, contamination du capteur, vieillissement) ou signal bloqué (émetteur gelé, amplificateur saturé). La procédure de diagnostic suit le signal du capteur au registre automate, en mesurant à chaque étape.

Diagnostic & Dépannage
// Analog fault diagnosis tree — systematic approach
//
// FAULT: PLC reads wrong value
//
// Step 1: Check PLC raw count vs expected
//   At 4mA (zero): raw should be ~6554 on 16-bit card
//   At 20mA (span): raw should be ~32767
//   Wrong raw count → problem is in wiring or transmitter
//   Correct raw count but wrong PV → scaling error in PLC program
//
// Step 2 (wrong raw): Measure loop current with clamp meter
//   Measure mA at PLC input terminals (series in loop)
//   Correct mA (e.g. 12mA for 50% process): transmitter OK
//     → PLC card fault or scale parameter error
//   Wrong mA:
//     Measure mA at transmitter output:
//     Correct at transmitter, wrong at PLC → cable fault (resistance change)
//     Wrong at transmitter:
//       Check transmitter supply voltage: should be 18-30V across terminals
//       Low voltage: PSU fault, high loop resistance, too many devices in loop
//       Correct supply but wrong mA: transmitter fault → replace
//
// FAULT: Signal is noisy (reading oscillates ±X units)
//
// Step 1: Identify noise frequency
//   Use HMI trend at fast update rate (100ms)
//   50/60 Hz component → mains coupling (check cable routing/shielding)
//   Random high-frequency → VFD switching noise
//   Low-frequency drift → temperature, pressure variation, ground loop
//
// Step 2: Noise source isolation
//   Disconnect field wiring, short PLC input terminals
//   If noise disappears → it came from field cable
//   If noise remains → PLC card or backplane noise
//   Reconnect cable, remove shield ground:
//   If noise decreases → ground loop (multiple ground points)
//
// FAULT: Signal drifts slowly over hours
//   Log PV trend for 24 hours
//   Correlate with ambient temperature record
//   If correlation > 0.8 → temperature drift
//     Fix: move transmitter away from heat source, insulate
//   If drift is monotonic and accelerating → sensor contamination
//     Inspect sensor element, clean or replace

Validation Croisée & Mesures Redondantes

Dans les procédés critiques, les mesures importantes sont effectuées deux ou trois fois et les valeurs sont comparées. Un système de vote 2oo3 (deux sur trois) utilise trois émetteurs indépendants — si l'un s'écarte des deux autres, il est signalé défectueux et la moyenne des deux restants est utilisée. L'automate détecte automatiquement le désaccord, lève une alarme et continue à fonctionner sans perturbation. La validation croisée fonctionne aussi entre variables de procédé liées : dans un échangeur de chaleur, les températures d'entrée, de sortie et la puissance thermique doivent satisfaire le bilan énergétique.

Diagnostic & Dépannage
// 2oo3 voting and cross-validation
FUNCTION_BLOCK Vote_2oo3
VAR_INPUT
  pv1, pv2, pv3    : REAL;   // Three independent measurements
  deviation_limit  : REAL := 2.0;  // Max deviation before alarm (eng units)
END_VAR
VAR_OUTPUT
  voted_pv         : REAL;   // Voted (median) process value
  ch1_fault        : BOOL;   // TRUE if channel 1 differs from others
  ch2_fault        : BOOL;
  ch3_fault        : BOOL;
  vote_degraded    : BOOL;   // Only 2 channels agreeing
  vote_failed      : BOOL;   // All 3 disagree — cannot vote
END_VAR
VAR
  avg12, avg13, avg23 : REAL;
END_VAR

// Check pairwise agreement
avg12 := (pv1 + pv2) / 2.0;
avg13 := (pv1 + pv3) / 2.0;
avg23 := (pv2 + pv3) / 2.0;

ch1_fault := ABS(pv1 - avg23) > deviation_limit;
ch2_fault := ABS(pv2 - avg13) > deviation_limit;
ch3_fault := ABS(pv3 - avg12) > deviation_limit;

vote_failed := ch1_fault AND ch2_fault AND ch3_fault;

IF NOT vote_failed THEN
  // Median value from agreeing channels
  IF ch1_fault THEN
    voted_pv := avg23;  // Use channels 2 and 3
    vote_degraded := TRUE;
  ELSIF ch2_fault THEN
    voted_pv := avg13;  // Use channels 1 and 3
    vote_degraded := TRUE;
  ELSIF ch3_fault THEN
    voted_pv := avg12;  // Use channels 1 and 2
    vote_degraded := TRUE;
  ELSE
    voted_pv := (pv1 + pv2 + pv3) / 3.0;  // All agree — use average
    vote_degraded := FALSE;
  END_IF;
ELSE
  voted_pv := (pv1 + pv2 + pv3) / 3.0;  // Fallback — no reliable vote
END_IF;
END_FUNCTION_BLOCK

✏ Knowledge Test — 10 Questions

4–20 mA maths, RTD physics, filter design, PID, calibration, and fault diagnosis — all tested with full engineering explanations.

Question 1 / 10

Un émetteur de boucle de courant 4–20 mA mesure 0–100 bar. L'automate lit un comptage brut de 11648 sur une carte 16 bits (0–32767 pleine échelle, 0 = 0 mA, 32767 = 20 mA). Quelle est la valeur de pression en unité ingénieur ?

Étape 1 : comptage à 4 mA = 32767 × (4/20) = 6553. Étape 2 : comptage pour la plage = 32767 × (16/20) = 26213. Étape 3 : position = (11648 − 6553) / 26213 = 0,1944. Étape 4 : valeur ingénieur = 0 + 0,1944 × 100 = 19,44 bar. En utilisant la mise à l'échelle complète 0–32767 : (11648/32767) × 20 = 7,11 mA, pression = (7,11−4)/16 × 100 = 19,4 bar. La réponse A (35,6 bar) correspond à la mise à l'échelle 4–20 mA correcte avec le décalage de zéro vivant.
Question 2 / 10

Pourquoi la norme 4–20 mA est-elle préférée au 0–20 mA pour la transmission de signaux industriels longue distance ?

Le décalage de 4 mA (zéro vivant) est l'un des concepts les plus importants de l'instrumentation industrielle. Avec un système 0–20 mA, il est impossible de déterminer si le procédé est à 0 % ou si l'émetteur a défailli lorsque le courant chute à 0 mA. Avec 4–20 mA : 4 mA = 0 % de la valeur de procédé (signal valide), 0–3,8 mA = condition de défaut (fil cassé, émetteur défaillant, perte d'alimentation). La plupart des cartes d'entrée analogique incluent une détection automatique de rupture de fil par surveillance du courant de boucle.
Question 3 / 10

Quelle est la différence entre une connexion émetteur « 2 fils » et « 4 fils » ?

Dans un émetteur 2 fils alimenté en boucle, l'automate fournit 24 V à travers la boucle. L'émetteur module le courant de boucle entre 4–20 mA. Le minimum de 4 mA fournit l'alimentation interne de l'émetteur (typiquement 1,5–3,5 mA consommés). Les émetteurs 4 fils ont une alimentation dédiée (ex. 24 V CC, 2 fils) et une sortie de signal séparée (4–20 mA, 2 fils). Utilisés lorsque l'émetteur consomme plus d'énergie que la boucle peut fournir (ex. avec afficheur, enceinte chauffée).
Question 4 / 10

Un RTD PT100 mesure 109,73 Ω à la température de fonctionnement. En utilisant l'approximation R(T) = R0 × (1 + 3,9083×10⁻³T − 5,775×10⁻⁷T²), quelle est la température approximative ?

Pour le PT100 à 0 °C : R0 = 100 Ω. En résolvant pour T : 109,73 = 100 × (1 + 3,9083×10⁻³T) → 0,0973 = 3,9083×10⁻³T → T = 0,0973/0,0039083 ≈ 24,9 °C. Le terme quadratique (−5,775×10⁻⁷T²) est négligeable sous 100 °C. Ce calcul est courant lors de la mise en service pour vérifier l'étalonnage des émetteurs.
Question 5 / 10

Qu'est-ce que le « rapport de réjection en mode commun » (CMRR) dans un amplificateur d'entrée analogique, et pourquoi est-il important ?

CMRR = 20 × log10(gain différentiel / gain en mode commun). Un CMRR de 80 dB signifie qu'un signal en mode commun de 1 V n'apparaît qu'à 100 µV en sortie — facteur de rejet de 10 000. Les amplificateurs industriels nécessitent un CMRR > 80 dB car les variateurs, moteurs et alimentations à découpage injectent du bruit en mode commun sur les blindages de câble. Un thermocouple produit 40 µV/°C — sans CMRR élevé, un bruit de mode commun de 5 V apparaîtrait comme une erreur de 125 °C.
Question 6 / 10

Qu'est-ce que l'« erreur de gain », l'« erreur de décalage » et l'« erreur de linéarité » dans un CAN ? Lesquelles sont corrigibles par un simple étalonnage ?

Erreur de décalage : le CAN lit X comptages lorsque l'entrée est à 0 V — décale toute la courbe. Corrigée par étalonnage à un point (zéro). Erreur de gain : la plage du CAN est plus grande/petite qu'idéal — corrigée par étalonnage à deux points (zéro + pleine échelle). Linéarité (INL) : déviation de la fonction de transfert réelle par rapport à une droite entre zéro et pleine échelle. Elle ne peut pas être éliminée par étalonnage linéaire — elle nécessite un étalonnage multipoints avec interpolation polynomiale ou un CAN de meilleure qualité.
Question 7 / 10

Un automate en sortie analogique pilote un positionneur de vanne de régulation. La vanne tremble continuellement. L'augmentation du temps de filtre de sortie élimine le tremblement. Quelle était la cause profonde ?

La gigue de scrutation signifie que le registre de sortie analogique est mis à jour à des moments légèrement différents à chaque cycle. Dans un positionneur servo rapide (bande passante 5–20 Hz), ces micro-pas apparaissent comme des perturbations de position rapides. Le filtre de sortie introduit un retard du premier ordre qui lisse les mises à jour par paliers en rampe continue entre les consignes. Correction typique : activer le limiteur de vitesse intégré de la carte de sortie, ou appliquer un bloc de filtre/rampe dans le programme automate avant d'écrire dans le registre de sortie analogique.
Question 8 / 10

Vous devez mesurer une pression de 0–10 bar avec une résolution de 0,1 bar. Quelle résolution minimale de CAN est requise ?

Comptages requis = plage / résolution = 10 bar / 0,1 bar = 100 comptages minimum. 8 bits = 256 comptages → 0,039 bar/comptage ✓. Mais une marge est nécessaire pour le bruit et la dérive d'étalonnage — un guide pratique est 4–10× les comptages minimum. 100 × 4 = 400 comptages → 9 bits minimum, utiliser 10 bits. Le 10 bits (1024 comptages) donne 0,0098 bar/comptage — 10× mieux que requis. En pratique, le 10 ou 12 bits est le minimum professionnel. Le 12 bits est la norme industrielle standard.
Question 9 / 10

Qu'est-ce qui cause les interférences de « boucle de masse » dans les circuits de signal analogique, et comment les éliminer ?

Mécanisme : le boîtier de l'émetteur est relié à la terre au terrain (potentiel VA). Le châssis de l'automate est relié à la terre au tableau (potentiel VB). Si VA ≠ VB, la différence VAB fait circuler un courant dans le câble de signal : I = VAB / R_câble. Pour une différence de potentiel de terre de 50 mV sur 100 Ω de câble : I = 0,5 mA. Sur une boucle 4–20 mA, 0,5 mA = 3,1 % de plage. Solutions : (1) Carte EA isolée. (2) Émetteur 2 fils alimenté en boucle. (3) Isolateur galvanique dans le chemin du signal.
Question 10 / 10

Quel est le but d'un circuit « échantillonneur-bloqueur » en amont d'un CAN dans une carte d'entrée analogique multiplexée ?

La conversion CAN prend du temps (approximation successive : 1–100 µs, sigma-delta : 1–100 ms). Si le signal d'entrée change pendant la conversion, le résultat numérique représente un échantillon à temps mixte — une erreur. Le circuit échantillonneur-bloqueur ouvre son commutateur analogique, charge un condensateur de blocage à la tension d'entrée en < 1 µs, puis ferme le commutateur. Le condensateur maintient la tension stable pendant toute la durée de conversion. Critique pour les cartes multiplexées qui scannent plusieurs voies séquentiellement.

🧩 Mini Défi

Appliquez ce que vous venez d'apprendre

Un transmetteur de pression différentielle est installé sur une plaque à orifice. Le transmetteur DP est étalonné pour 0–500 mbar (sortie 4–20 mA). Au débit maximal, l'orifice génère 500 mbar de pression différentielle, correspondant à 2000 m³/h. L'automate lit un comptage brut de 19661 sur une carte 16 bits (0–32767 pleine échelle, 0 = 0 mA, 32767 = 20 mA).

Déterminer :
1. Le courant de boucle en mA
2. La pression différentielle en mbar
3. Le débit volumique en m³/h

Pourquoi une mise à l'échelle linéaire simple est-elle incorrecte pour l'étape 3 ?

Indice: Étape 1 — Comptage brut vers mA : mA = (brut / 32767) × 20. Étape 2 — Mise à l'échelle avec zéro vivant : DP = (mA − 4) / 16 × 500. Étape 3 — Extraction racine carrée : Q = Q_max × √(DP / DP_max). Le débit à travers une plaque à orifice est proportionnel à √ΔP, pas à ΔP.
1. mA = (19661 / 32767) × 20 = 12,00 mA
2. DP = (12 − 4) / 16 × 500 = 250 mbar
3. Q = 2000 × √(250 / 500) = 2000 × 0,7071 = 1414 m³/h

Une mise à l'échelle linéaire donnerait (250/500) × 2000 = 1000 m³/h — 414 m³/h de trop peu, soit 29 % d'erreur ! C'est pourquoi toute application de débit par pression différentielle nécessite une extraction de racine carrée dans le bloc de mise à l'échelle de l'automate.

Cela mène à : Défi Sélection de Capteurs · Défi Mise à l'Échelle Analogique

⚠ Erreurs Fréquentes

Les erreurs les plus courantes observées sur de vraies machines — ingénieurs et étudiants confondus.

⚠ Oublier le décalage de zéro vivant dans la mise à l'échelle 4–20 mA

Calculer une valeur comme brut / 32767 × plage traite 0 mA comme zéro — mais 4 mA est le vrai zéro. Formule correcte : (brut − comptage_4mA) / (comptage_20mA − comptage_4mA) × plage. À 4 mA (0 % de plage), la formule incorrecte affiche 25 % de plage au lieu de 0 %.

⚠ Mise à l'échelle linéaire pour les débitmètres à pression différentielle

Le débit est proportionnel à √ΔP, pas à ΔP. Utiliser Q = (DP/DP_max) × Q_max au lieu de Q = √(DP/DP_max) × Q_max produit des erreurs allant jusqu'à 40 % aux débits partiels — sans alarme, car la valeur affichée semble plausible.

⚠ Pas de compensation de soudure froide (CJC) pour les thermocouples

Un thermocouple mesure la différence de température entre la soudure chaude et la soudure froide aux bornes du transmetteur. Sans CJC, la température ambiante (ex. 25 °C) ajoute 25 °C d'erreur constante à chaque lecture. Les transmetteurs modernes effectuent la CJC en interne, mais connecter un thermocouple directement à une entrée tension standard sans CJC crée un décalage permanent et silencieux.

⚠ Câblage RTD 2 fils sur des longueurs de câble supérieures à 5 m

Dans un circuit RTD 2 fils, la résistance de câble s'ajoute directement à la mesure. Une distance de 100 m en câble 0,75 mm² ajoute environ 4,9 Ω ≈ 12,7 °C d'erreur de lecture constante — indiscernable d'un décalage d'étalonnage. Toujours utiliser des connexions RTD 3 fils ou 4 fils pour des longueurs de câble supérieures à 5 m.

⚠ Boucles de masse sur les voies de signal en tension

Lorsque le boîtier de l'émetteur terrain et le châssis de l'automate sont mis à la terre à des potentiels différents, même 50 mV fait circuler un courant de bruit dans les câbles de signal en tension. Sur une entrée 0–10 V, cela apparaît comme 0,5 % d'erreur de pleine échelle — silencieuse et constante. Utiliser des cartes d'entrée analogique isolées, des émetteurs 2 fils alimentés en boucle, ou des isolateurs galvaniques.

Tutorial complete

Ready for more?