Skip to content

Control Module: analog-control

A modulating analog output with feedback and deviation alarm. The operator or recipe writes a commanded position to CMD. The runtime drives an analog output to the field and reads back the actual position via an analog input. A deviation alarm trips when the actual value differs from the commanded value by more than a configurable threshold. Use this template for modulating valves, variable-speed motors, heaters, and any other continuously-variable actuator.

Where to find it

System endpointEquipment LibraryControl Modules tab → select analog-control.

analog-control FBD: REAL_CONST CMD, AO output, AI feedback, SUB/ABS/GT deviation alarm

analog-control ST: IEC 61131-3 program writing CMD to the AO, reading AI feedback into POS, computing absolute deviation, and raising DEV_ALARM when it exceeds the threshold

What you see on the faceplate

Clicking an analog-control instance on the unit detail view opens a faceplate with:

Element Meaning
CMD Commanded position or speed (writable)
POS Actual position or speed feedback (read-only)
DEV_ALARM Deviation alarm — true when |CMD − POS| exceeds dev_threshold

The faceplate shows ISA-88 mode. In Manual mode an operator can write CMD directly. In Automatic mode only recipe logic does.

Tags

The template declares deviceClass: actuator and a role on each tag (ADR 0016). The HMI renders from these declarations and never infers meaning from moduleType or tag names. The CMD tag's role: setpoint fills the HMI setpoint bar. POS (role: feedback) fills the feedback bar and, since this template declares no role: state tag, doubles as the card's prominent value.

Tag Type Access Role Description
CMD Float read/write setpoint Commanded position (0-100% by default). Recipe or operator writes this.
POS Float read feedback Actual position feedback read from the field. Shown as the card's prominent value.
DEV_ALARM Boolean read alarm true when absolute deviation exceeds dev_threshold. Typically wired into an Alarm CRD.
ILCK Boolean read interlock true while the device interlock is forcing the output to its safe state. Reserve a TagTrue AlarmDefinition for interlocks whose trip is abnormal in itself (why). The historian records every trip either way.

Parameters

Parameter Default What it does
dev_threshold 5.0 Deviation band in engineering units
eng_min / eng_max (blank) Position scale range
eng_units (blank) Display units (%, rpm, °C, etc.)
interlockAddress (empty — interlock disabled) Device address of a boolean trip signal, read by the output block every scan; while tripped (or unreadable — fail-safe) the output is forced to the safe value.
interlockInvert false Trip while the signal is false (with the invert off, true trips).
safeValue (empty) Output value forced while interlocked. Empty means the output range minimum.

Setting interlockAddress on an instance enables the device interlock. See Alarms and Interlocks → Pattern 0.

The former state_tag parameter is replaced by the per-tag role declarations (POS carries role: feedback and is shown as the card's prominent value).

The scan interval is fixed at 200 ms.

How it works

Each scan, the runtime:

  1. Writes CMD to the analog output.
  2. Reads the analog input into POS.
  3. Computes |CMD − POS| and compares against dev_threshold.
  4. Sets DEV_ALARM if the absolute deviation exceeds the threshold.

The deviation check has no debounce. For actuators with slow response times (temperature controllers, large valves), wire DEV_ALARM into an AlarmDefinition with condition.type: TagTrue and a debounceSeconds window. More commonly, wire the underlying POS/CMD tags into a TagDeviation rule with both deadband and debounceSeconds set. See Alarms and Interlocks for the full pattern.

Reference instances

The reference plant uses analog-control for every modulating actuator:

Unit Instance Purpose
reactor-1 jacket temperature controller Reactor temperature control via jacket
reactor-1 agitator motor Variable-speed reactor agitator
reactor-1 solvent inlet valve Modulating solvent feed
reactor-1 outlet valve Modulating transfer to filter-dryer
reactor-1 reagent inlet valve Modulating reagent feed
mix-tank-1 agitator motor Variable-speed tank agitator
mix-tank-1 temperature controller Tank temperature control
filter-dryer-1 jacket heater controller Vacuum-dry heater control
filter-dryer-1 vacuum pump controller Vacuum pump speed control
filter-dryer-1 smoother / agitator motor Variable-speed cake smoother

Try it

  1. Processriverbendpharma-areasim-cellreactor-1
  2. Click the agitator motor symbol on the unit detail view
  3. On the faceplate, write a new value to CMD (e.g. 50 for 50%)
  4. Watch POS ramp toward the new commanded value. DEV_ALARM may flicker true during the ramp if dev_threshold is tight relative to ramp time