OpenPLC

OpenPLC

Open in ChatGPT
Ask ChatGPT about this page
Open in Claude
Ask Claude about this page

UT_VALVE_CORE — What every valve block shares

UT_VALVE_CORE — What every valve block shares

The record, safe-position decision, every protection, fault codes, the status and
the retained stroke count of the valve blocks. Each valve block is this core plus
its own way of moving the valve: the core decides whether the valve follows
its request or goes to the safe position; the valve block decides how (which
outputs, for how long) and reports the fault conditions it sees through the
cause pins. Use it directly only to build a new kind of valve block.

The core is two functions, not a function block:

  • UT_VALVE_RESET: the reset request and the retry window of this scan. Call it first.
  • UT_VALVE_CORE: everything else.

A function keeps no instance of its own, so the valve record is never copied. The
valve block keeps the core's working state in one UT_VALVE_ST and passes it, with
the record, to both functions every scan. The valve block also runs its own
UT_MODE_SELECT and passes the mode in, and keeps the retained
stroke count (Saved).

Pins

UT_VALVE_RESET

Pin Type Default What to wire
in Reset BOOL FALSE The valve block's Reset pin
in EnteredOff BOOL FALSE UT_MODE_SELECT.EnteredOff (for resetByOff)
inout Data UT_VALVE_DATA The valve record (UT_VALVE). cmdReset is read and cleared
inout St UT_VALVE_ST The core's state
returns BOOL The reset request: a rising edge of Reset or cmdReset, or switching to Off with resetByOff. Also in St.resetReq; the retry window in use is in St.rw (retryWindow, or T#1h when it is negative), for the valve block's own protections

UT_VALVE_CORE

Pin Type Default What to wire
in Mode UT_MODE UT_MODE_OFF UT_MODE_SELECT.Mode
in ModeChanged BOOL FALSE UT_MODE_SELECT.Changed
in AutoChanged BOOL FALSE The Auto request changed this scan (ends the wait for a new command after a MANUAL reset). TRUE for analog requests
in Interlock BOOL TRUE As UT_VALVE: FALSE sends the valve to its safe position in every mode
in DriveFault BOOL FALSE As UT_VALVE: the actuator's fault relay
in OpenTimeout, CloseTimeout, BothLimits, PositionLost, NoMovement BOOL FALSE The fault conditions, worked out by the valve block
in StrokeDone BOOL FALSE One scan: a move has completed (counted)
in VarStatus UT_STATUS UT_ST_IDLE Where the valve is or what it waits for (UT_ST_IDLE = nothing; list below)
in VarTime TIME T#0s Time left for VarStatus (shown in Data.timeLeft)
in Permissive BOOL TRUE As UT_VALVE (Data.notPermitted; the valve block holds back a move away from safe)
in LocalOpen, LocalClose, LocalStop BOOL FALSE Local pushbuttons (Hand), turned into the req… results
in Away BOOL FALSE The valve block: at the end of its last scan the valve was asked away from its safe position (for stopReason)
in CfgFault UT_FAULT UT_F_NONE The valve block's setting that keeps the valve still (UT_F_NONE = none): every output off, a fault, faultCode bit 8
in CfgWarn UT_FAULT UT_F_NONE The valve block's setting replaced by a safe value (UT_F_NONE = none): a warning, bit 8
in ExtTrip DWORD 0 The valve block's own protections (position deviation, position feedback): the faultCode bits of those tripping now
in ExtWarn DWORD 0 The bits of those warning now
in ExtTripped DWORD 0 The bits of those latched (their tripped)
in ExtResetDone BOOL FALSE One of them was reset this scan
in ExtRst UT_RESET_MODE UT_RST_AUTO The first one tripping: its reset mode
in ExtRetries INT 0 Its retries
in ExtMaxRetries INT 0 Its maxRetries
in ExtTimeLeft TIME T#0s Its timeLeft
inout Data UT_VALVE_DATA The valve record
inout St UT_VALVE_ST The core's state
inout Saved UDINT The valve block's retained stroke count (copied every saveEvery)
returns BOOL Go to the safe position (St.goSafe)

The core's results are in St after the call, for the valve block to read:

Field Type Meaning
goSafe BOOL Go to the safe position: Off, interlock, a trip, or waiting for a new command after a reset
fault, warning BOOL As UT_VALVE (never in OOS, except a bad setting)
cfgBad BOOL A setting is invalid and the valve must not be driven: the valve block turns every output off
hand, auto, oos BOOL The mode (OOS: every output off)
handSafe BOOL Hand: put the Hand request back to the safe position (interlocked, or just reset)
enteredHand BOOL One scan: just changed to Hand (take the current request: bumpless)
tripCleared BOOL One scan: the last trip has just cleared (try the move again)
driveTrip BOOL The drive protection is holding the valve (motorised valves stop driving)
reqOpen, reqClose BOOL One scan: a Hand open / close (cmdOpen / cmdClose or the local button, each on its rising edge; dropped in a scan with a stop)
reqStop BOOL A Hand stop: cmdStop on its rising edge, or LocalStop while held
resetReq, rw UT_VALVE_RESET's results (above)

The other fields of UT_VALVE_ST are the core's own memory: leave them alone, and
don't show them on an HMI. The variants' own commands (cmdPos on UT_VALVE_3POS,
cmdHome on UT_VALVE_FLOAT) are read by the valve block from its own record.

Status

The core works out statusCode, faultId and statusText for every valve block
(statuses in each block's doc, e.g. UT_VALVE): configuration,
faults, out of service, the interlock and the wait for a new Auto command are its
own; the valve block says where the valve is through VarStatus (worked out from
its last scan, so it shows one scan late). It also reads and clears cmdOpen,
cmdClose and cmdStop (each on its rising edge; a command left in the record at
power-up never acts), keeps stopReason, the last trip and trips, and sets
timeLeft to the time the status shows.

VarStatus Words Kind
UT_ST_OPENING Opening normal
UT_ST_CLOSING Closing normal
UT_ST_OPEN Open normal
UT_ST_CLOSED Closed normal
UT_ST_MOVING Moving normal
UT_ST_HOMING Homing normal
UT_ST_AT_POSITION At position normal
UT_ST_BETWEEN Stopped between positions normal
UT_ST_POS_UNKNOWN Position unknown normal
UT_ST_DEAD_TIME Waiting: dead time held
UT_ST_NOT_HOMED Hand: not homed held
UT_ST_MOVE_TIMEOUT Waiting: new request held
UT_ST_NOT_PERMITTED Not permitted held

The words hold no numbers: the position or target is in the record (position,
and the variant's targetPos, actualPos or demand), and the time left of a
move or a pause in timeLeft.

The settings are named with UT_FAULT members. The core's own are
UT_F_SAVE_EVERY, UT_F_RETRY_WINDOW and UT_F_MODE_SOURCE (warnings). The valve
blocks' are UT_F_VALVE_TYPE, UT_F_TRAVEL_TIME, UT_F_REVERSAL_DELAY,
UT_F_PULSE_TIME, UT_F_SAFE_POSITION, UT_F_THREE_POS_TYPE, UT_F_MID_TIME,
UT_F_OUTPUT_MIN_MAX, UT_F_RAMP_RATE, UT_F_SHUTOFF, UT_F_FAIL_POSITION,
UT_F_OPEN_THRESHOLD, UT_F_RAW_MIN_MAX, UT_F_DEADBAND, UT_F_STROKE_TIME,
UT_F_MIN_PULSE and UT_F_RATE_UNIT. The full list is in
conventions.

Retained

The mode (in UT_MODE_SELECT) and a snapshot of strokes,
copied every saveEvery (T#0s = not kept) into the valve block's Saved.

Last updated 2 hours ago
Was this helpful?
Thanks!