The unit address space
Every point a unit publishes under Process.Model.Unit, its type and meaning, which points are writable commands, and what a Logic script may read from it.
Every unit publishes its run data as ordinary Logic addresses under
Process.<Model>.<Unit>, so dashboards, Logic expressions, the embedded OPC UA server and
the agent reach it with no extra plumbing. The branch is browsed on the Logic page under
"From other pages" (From other pages) and in every address
picker. Renaming a model, unit, channel, metadata field, evaluation or criterion replaces the
corresponding addresses and rewrites live textual references; recorded files keep the names
frozen when they were written. The segments are the sanitized names: a unit called "Unit 1" of the
model "Climatic chamber" is addressed as Process.Climatic_chamber.Unit_1.
| Branch | What it exposes | Writable |
|---|---|---|
Channels.<Channel> |
The live bound value of each channel, typed as the channel declares. | A writable channel (Write only or Read and write role) is a writable point through the write funnel; a source a run holds refuses every other writer. |
Procedure.<point> |
The run state, one scalar per point (table below). | No. |
Commands.<command> |
Start, Hold, Resume, Stop, Abort and Comment. |
Yes: writing dispatches (table below). |
Next.<point> |
The staging area the next Start consumes. | Manual metadata fields only. |
LastRun.<point> |
The record of the latest run the unit finished (LastRun). | No. |
Productivity.Today.<branch> and Productivity.Rolling.<branch> |
The unit's productivity projection for each period. | No. |
Channels
A channel point reads the value behind the unit's binding, projected to the channel's data
type, and reads as a gap when the channel is unbound or its source is unavailable. In a
Logic script the point is a read-only typed projection of the bound tag or variable, never
the tag itself: Value, ValueObject, ValueRaw, ValueScaled, ValueCalibrated,
ValueLimited, ValueRounded, the conversions ValueToBool(), ValueToInteger(),
ValueToReal(), ValueToString() and ValueToDateTime(), the quality State(), the
stamps SourceTimeStamp() and ApplicationTimeStamp(), Refresh(), Name and
EngineeringUnit. The pipeline members answer for a tag binding; a variable binding
answers the value and the application stamp.
Procedure
Every point is computed from the live run and reads with good quality; a point that has nothing to say reads a gap.
| Point | Type | Meaning |
|---|---|---|
Status |
Text | Preparing while the unit is reserved and no run exists yet, Idle while nothing owns it, otherwise the run state: Running, Held, Saving, Completed, Aborted, Failed. |
Running |
Boolean | Strictly the Running state; never true for preparation, Held, Saving or finalization. |
Busy |
Boolean | The whole occupied span: reservation, Running, Held, Saving and the final close of the run file. |
Verdict |
Text | Ok, Nok, Indeterminate or None, spelled exactly so, whatever word the interface or a printed label shows: a comparison reads Process.<Model>.<Unit>.Procedure.Verdict == "Nok". The judged evidence stays readable after the run ends until the next run starts. |
Mode |
Text | The active run's mode, Instant, Temporal or Controlled; a single command (snapshot, evaluate now) reports too. Gap when idle. |
ActiveProcedure |
Text | The active run's name ("Procedure · Unit"). Gap when idle. |
SegmentIndex |
Integer | The temporal profile's current segment, 0-based. Gap without a profile. |
CycleIndex |
Integer | The current cycle, 0-based. Gap when idle. |
CycleCount |
Integer | The total cycles of the run (1 for a single pass). Gap when idle. |
Cycle |
Text | "2 / 10" for a cyclic run; a gap when the run is not cyclic, so a bound readout shows the gap mark instead of a misleading single pass. |
FailedCycles |
Integer | Cycles judged NOK so far. Gap when the run is not cyclic. |
SamplesEvaluated, SamplesOut, SamplesUnavailable, SamplesInvalid |
Integer | The evaluation's evidence counters, updated atomically by the evaluation engine. Gap without judged evidence. |
Elapsed |
Decimal | Seconds since the run started. Gap when idle. |
StartedAt |
Date and time | When the active run started. Gap when idle. |
Metadata.<Field> |
Text | One point per metadata field of the model: the value the run in progress froze at Start. Gap when idle and for a field that run does not prompt; a field left blank reads empty text. This is what an action fired at Start reads of the run that starts, since Next.<Field> already shows the one after it. |
Commands
Reading a command point answers "can this execute now", so a bound Button disables itself; writing it dispatches the command through the run console, journaled with the writing surface's source and recorded with the identity of whoever pressed. A command is a service call, never a queued point write.
| Point | Reads true when | Writing |
|---|---|---|
Start |
The unit is not busy, the runtime accepts operations, the interlock is Normal and a procedure is staged. | Starts the staged procedure with the staged metadata. |
Hold |
A run is Running and its procedure is Temporal. | Freezes the window. |
Resume |
A run is Held and the interlock is Normal. | Releases the hold. |
Stop |
A run is Running. | Ends the run as Completed. |
Abort |
A run is Running or Held. | Ends the run as Aborted. |
Comment |
Never: the point has no reading. | Appends the written text as a comment to the active run, or as a post-run note on the unit's latest finished run when it is idle. A unit with no run at all refuses ("The unit has no run to comment on."), and so does empty text. |
Every command reads false while the station is refusing writes (the runtime stopped).
Next
| Point | Type | Meaning |
|---|---|---|
Next.Procedure |
Text | The staged procedure's name. Read-only here: staging is done on the unit panel's Run card. |
Next.<Field> |
Text | One point per metadata field the staged procedure prompts; the branch reshapes when the unit is re-staged, and a field of another procedure reads a gap. A manual (text or numeric) field is a writable staging point, which is what an Input component bound to it writes. A sequential field is a read-only prediction of the identifier the counter would compose now; reading never reserves it. |
Staging is station-wide, in-memory and transient: it resets when the application starts and is consumed, not cleared, by Start.
Productivity
Two periods, Today (since local midnight) and Rolling (the window declared on the model
or the unit), each with three branches (Productivity):
| Branch | Points | Type |
|---|---|---|
Summary |
ProductivityPercent, YieldPercent, TypicalElapsedSeconds |
Decimal; a gap until the denominator exists. |
Summary |
Finalized, OK, NOK, Indeterminate, Unclassified, Aborted, Failed |
Integer counts. |
Outputs.<key> |
Quantity, RatePerHour |
Decimal; one key per named quantity, or per productive procedure when the model declares no quantity. |
Procedures.<key> |
Quantity, RatePerHour and the summary points above |
As above, per productive procedure. |
Keys derive from the stable id and the frozen output unit, not from the display name, so a rename never moves an expression. Every point is read-only, and the projection is read from the history index, never from run files.
LastRun
The record of the latest run the unit finished: who it was, how it ended, what the operator entered at Start and how each criterion went. It is what a Logic action fired at Completion reads (Actions), and any other consumer reads it the same way: a screen showing the last piece, an alarm, the station's servers. Every recorded run of the unit counts, a Failed one and a Snapshot or Evaluate now included; an imported run never does.
| Point | Type | Meaning |
|---|---|---|
RunId |
Text | The run's identifier. |
Procedure |
Text | The procedure's name as the run recorded it. |
Status |
Text | Completed, Aborted or Failed, spelled exactly so. |
Verdict |
Text | Ok, Nok, Indeterminate or None, spelled as Procedure.Verdict; a Failed run reads None. |
StartedAt, FinishedAt |
Date and time | When the run started and finished. |
Elapsed |
Decimal | Seconds from start to finish. |
CycleCount |
Integer | The run's cycles (1 for a single pass). |
FailedCycles |
Integer | The cycles judged NOK. |
Metadata.<Field> |
Text | One point per metadata field of the model: the value the run froze at Start. A field the run did not prompt reads a gap; a field left blank reads empty text. |
Evaluations.<Evaluation>.<Criterion>.<point> |
As below | One folder per evaluation of the model and one per criterion under it, named by the criterion's name, or by its channel's when it has none. |
Each criterion carries one result, folded over every cycle it was judged in, so the address is the same for a single pass and for a run of a hundred cycles:
| Point | Type | Meaning |
|---|---|---|
Outcome |
Text | Ok, Nok or Indeterminate, spelled exactly so: any NOK cycle gives Nok, otherwise any Indeterminate cycle gives Indeterminate, otherwise Ok. |
Passed |
Boolean | True only when Outcome is Ok. |
Value |
Decimal | The measured value of the watched channel: the last evaluated sample of the window, in One point mode the judged one, from the latest cycle that measured one. |
MinValue, MaxValue |
Decimal | The lowest and the highest evaluated values, over every cycle. |
Limits |
Text | The limits as recorded, such as 5 .. 45. |
WorstExcursion |
Decimal | The largest distance beyond a bound, over every cycle. |
FailedCycles |
Integer | The cycles that judged this criterion NOK. |
The branch has the shape of the model, never the shape of the last run: every metadata field of the catalogue and every criterion of every evaluation is a point, so a script that names one validates before any run, and after a run of a procedure that judged by another evaluation.
| Situation | What the points read |
|---|---|
| No run of the unit has finished yet | A gap with Bad quality, every point. |
| A run ends | The new record, in place before the unit's Procedure.Status says the run ended. |
| Another run of the unit is in progress | The previous record, until that run ends. |
| The application starts again | The unit's latest finished run, read back from its run file shortly after start; a gap until it is read. |
| A criterion the last run did not judge (another evaluation, or one added since) | A gap in every point. |
| Two evaluations, or two criteria, whose names read the same | Nothing: the address resolves to neither, and the evaluation's page says so (Evaluations). |
Renaming a metadata field, an evaluation, a criterion or the channel of an unnamed criterion moves these addresses like every other rename on this page.
What a script may do
Logic variable, alarm and action scripts may read everything here: channel values, run state, command readiness, staged values, the last run and productivity points. They cannot dispatch a command, write a staging field or append a comment; those writes belong to the explicit command consumers: the operating panels, dashboard Buttons and Inputs, the unit automation and the agent tools.
A channel point reads as the typed projection of Channels; every other point here
reads as its plain value, with no .Value after it, unlike a variable:
if (Process.Oven_soak.Oven_1.LastRun.Verdict === "Ok") {
Variables.Last_serial = Process.Oven_soak.Oven_1.LastRun.Metadata.Serial;
}