--- manual: IM 36K10P10-01EN title: Class Description Language - Traditional edition: 4th Edition, Feb. 2026 (first summarized from the 3rd Edition, Sep. 2023) version: R1.05 (first written for R1.03) status: R1.05 re-check 2026-10-09: manual text unchanged except contact information (full word diff); CIENG_TANK compiled and ran on the R1.05 test server 2026-10-08 (SIGNAL to an existing item, SIGNAL … FROM … MAKE, PROMPT, TRIGGER VALUE). From docs; PROLOG/ATTRIBUTE/PROMPT/ERROR, SIGNAL to an existing item and SIGNAL … FROM … MAKE, TRIGGER VALUE, the SECTION constant, transitional >=:, PRINT and runtime attribute change verified with CI-Eng-Sample class CIENG_TANK on 2026-09-30; everything else from docs --- # Traditional PROCESS Service language (R1.05) **R1.05 (4th Edition, Feb. 2026):** only contact information was added; a word-by-word diff with the 3rd Edition found no other change. Section numbers are unchanged. The class source template `%TLS_DAT_PATH%\opc_src_tpl.asc` and the user-function sources `tls\src\opc_usr*.c` are identical on R1.03 and R1.05. Summary in own words; section numbers refer to the manual. Engineering of classes and objects: `IM36K10L10-01EN.md` and skill `class-object-engineering`. ## 1. Structure (§1, §11.1) ``` CLASS ; { name max 15 characters } PROLOG { optional class prolog: runs when an object is CREATED } BODY { needed only when there is a class prolog } METHOD ; { method name max 50 characters } ENTRYCONDITION ; { optional guard } PROLOG { optional: first run / after going on-line } BODY EPILOG { optional: when deactivated } ENDMETHOD ; ENDCLASS ; ``` - Comments: `{ … }`, may span lines. - All methods of an active object run "simultaneously" (like tasks), not in order. - Method parts by state: becoming active → prolog + body; staying active → body; becoming inactive (entry condition false or object off-line) → epilog (Table 1.3-1). - **Control item** (optional, per object): blocked = methods suspended; off-line = stopped, on-line again = start as new. Its value is `STEP` (below). - `SEQUENCE`/`SUBSEQUENCE` are old synonyms of `CLASS`/`METHOD`; do not use. - Enterprise classes (Enterprise Engineering Module): extra `MAKE` fields `CREATE_ITEM`, `PUT_IN_HISTORY`, `ALARM_DETECTION` = `MASTER_ONLY` / `DELEGATE_ONLY` / `MASTER_AND_DELEGATE`; ignored in local classes (§1.6). ## 2. Declarations (§2, §11.2) | Declaration | Syntax (short) | Notes | |---|---|---| | Constant | `CONSTANT a := 1, b := 2.5;` | Type from the expression | | Variable | `VAR x [INTEGER\|FLOAT\|STRING];` | Default FLOAT; numbers convert, strings and numbers do not mix | | Timer | `TIMER t [TRIGGER];` | Value = seconds left; `t'status` STOPPED / RUNNING / EXPIRED (initial EXPIRED). Assign seconds to start; 0 → EXPIRED. `TRIGGER` runs the object on expiry | | Alarm | `ALARM a [TRIGGER];` | Value = alarm text, `a'status` NORMAL/A1/A2/A3 (OR `ACKNOWLEDGE`), `a'priority`. Needs `ALARM-ITEMS` in `opc.sup` (not set on the installed system) | | Attribute | `ATTRIBUTE n [OBJECT\|CLASS] [INTEGER\|FLOAT\|STRING];` | In class prolog only. OBJECT (default) = per object; CLASS = one value for all objects. Kept across restarts. Name max 15 | | Prompt | `PROMPT n QUERY "text";` / `NOPROMPT path;` | Asks the value of an OBJECT attribute when an object is created. Declaration, not a statement | | Containment | `CONTAINS alias := other_class;` | Include another class; access `alias.signal`, nest `a.b.signal` | | Signal | see §3 | In class prolog only | | Item / For | `FOR [node:]inst[.unit]; ITEM tag [TRIGGER type];` | Fixed item names (first two section levels only); prefer SIGNAL | Limits: identifiers 50 characters (class, attribute, signal, function names 15); string values max 255 characters. ## 3. Signals (§2.3, §11.2.8) A signal links the object to an item whose name is computed **when the object is created**, so each object can use different items. ``` SIGNAL LEVEL := SECTION || ".LEVEL" TRIGGER VALUE; { existing item } SIGNAL VOLUME := FROM "