Full manual diffs (L15, C20, E30, L25, J40, C10 §2, L10, P10, P11, J20, C30, P20, R40, E10) and read-only checks on the shared R1.05 test server. Skills and summaries moved to R1.05; new skill pytools (IM 36K10P40) from docs (no Python on the test server). Issues ISS-132..181; corrections to version-differences (E10, E30, P11, dss_ath_grp_u0104); C10 summary lists the 3 new authorization actions; r105-verification V10-V17. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9.9 KiB
manual: IM 36K10L10-01EN title: Class/Object Engineering edition: 4th Edition, Feb. 2026 (first summarized from the 3rd Edition, Sep. 2023) version: R1.05 (first written for R1.03) status: from docs; opc.sup, process_start.cmd, the PROCESS data files and opcdbg (database check, get class/object, signals, attributes, reset class, dump, performance main info) checked on the R1.03 test system 2026-09-30. R1.05 re-check 2026-10-09 (read-only, R1.05 test server): manual text unchanged except contact information (full word diff); opc.sup, prc.sup, dataset definitions, class source templates and Java logging files identical; start scripts differ only as listed in §1; database check and OPCEXE1 performance main info re-run
Class/Object Engineering (R1.05)
R1.05 (4th Edition, Feb. 2026): the revision table lists only contact information, and a word-by-word diff with the 3rd Edition found nothing else. Section numbers are unchanged.
PROCESS Service runs objects: instances of classes (programs written in the
Traditional or Java PROCESS Service language) that link a set of items through signals and
are run by trigger groups, signal changes or timers. Internally all its process names start
with OPC ("Object oriented Process Control") — nothing to do with the OPC Foundation
standard. Section numbers refer to the manual. Language details: IM36K10P10-01EN.md
(Traditional) and IM36K10P11-01EN.md (Java).
1. Processes (§1)
| Process | Role |
|---|---|
OPCMAN |
Manager: keeps the configuration (trigger groups, classes, objects); every client request goes through it |
OPCCOM / OPCJCOM |
Compiler for Traditional / Java classes |
OPCACT / OPCJACT |
Activator: creates/deletes objects (runs the class prolog / create()), creates and deletes the items an object makes |
OPCLOA |
Loader: passes run information to the executors; keeps a private copy of the data store on a front-end node |
OPCEXE / OPCJEXE |
Executor: runs the objects (Traditional / Java); creates the ALARM-statement items |
opcdbg |
Command-line debugger (see §4) |
Rules for distributed systems: OPCMAN, the compilers and activators run together on the host
node, one of each. Loader/executor pairs may run on other nodes; several executors per node
are allowed, each serving its own priority range (0–999).
Installed (R1.03 test system; same on R1.05): process_start.cmd starts opcloa; on
the host node also opcman, opcact, opccom; then four Traditional executors opcexe1…opcexe4 and one
Java executor opcjexe (a javaw process). OPCJCOM/OPCJACT are not started by the script;
OPCMAN starts them on demand (process_jcom_start.cmd, process_jact_start.cmd) and they exit
after an idle time. Java process logging is configured in
%TLS_WAP_PATH%\cfg\properties\opcj{act,com,exe}logging.properties.
R1.05 differences (verified 2026-10-09, R1.05 test server):
- The Java processes run on the bundled JDK Eclipse Temurin 11.0.28 (
tls\jre; R1.03: 11.0.18), and their class path addstls\exe\lib\*(on R1.05 it holds about 100 bundled third-party jars; on R1.03 the folder held onlyinstaller.txt). process_start.cmdends by calling every?*_process_start.cmdintls\com, andprocess_stop.cmdfirst calls every?*_process_stop.cmd: a hook for application scripts, as in the other service scripts (system-management ISS-121).- Running processes seen:
opcloa,opcman,opcact,opccom, fouropcexeand onejavawrunning the Java executoropcjexe(as on R1.03). - Preinstalled classes:
AOG_BASE,AOG_JBASE,PRC_STATUS_BASE(also on R1.03) and new Java samples for OPC UA methods,UAC_MTD_JBASEandUAS_MTD_JBASE(R1.04; seeIM36K10L45-01EN.md§10.6 and §11.4 and skilldata-access).
2. Setup files (§2)
opc.sup holds settings for all PROCESS processes; a file named after one process's BUS queue
(e.g. opcman.sup) overrides it for that process only. The Java processes read only opc.sup.
Change it with the Setup File Editor (skill portal-setup); a restart is needed.
Main keywords and the installed values (differences from the manual: ISS-026). opc.sup
and prc.sup are byte-identical on R1.03 and R1.05 (2026-10-09):
| Keyword | Meaning | Installed |
|---|---|---|
CLASS-TEMPLATE, JCLASS-TEMPLATE |
Source template for new classes | not set → %TLS_DAT_PATH%\opc_src_tpl.asc / opc_jsrc_tpl.asc |
EVENT-BUFFER = node, size, time-out |
ITEM Service buffers item events for PROCESS | -1, 1000, 0.1 (all nodes) |
IMMED-EVENTS |
One extra update per item when an executor starts | NO (manual: default YES) |
COLD-START |
Front-end loads everything from the host at start (legacy) | NO |
AUDIT |
Audit trail for configuration and value changes | NO |
FLOW-CONTROL = interval, timeout (s) |
Heartbeat from ITEM Service; 0,0 disables |
30,60 (manual default 300/360) |
TRIGGER-QUEUE-SIZE |
Queued triggers per object; at 90 % a "Loosing real-time" warning | 100 |
ALARM-ITEMS, ALARM-PRIORITY |
Items and priorities for the language's ALARM statement | not set |
HOST-NODE |
PROCESS host node | -1 (the system host) |
ALM-PROC, ADT-PROC, ITM-PROC |
Queue names of ALARM, AUDIT, ITEM Service | ITM-PROC = ITM |
PROC-TIME = wait s, jact min, jcom min |
Start wait and idle time-outs of OPCJACT/OPCJCOM; 0 = 30 min |
20,0,0 |
QUEUE-SIZE = process, kB |
BUS queue sizes | OPCEXE1–4 300, OPCMAN 400, OPCLOA 252 |
PRIORITY-RANGE = executor, from, to |
Priority range per executor; must not overlap | OPCEXE1 0–249, OPCEXE2 250–499, OPCEXE3 500–749, OPCEXE4 750–999 |
LOCK-CHECK (s) |
Manager housekeeping interval | 10 |
SCHEDULER-INTERVAL (ms) |
Finest run resolution for Traditional objects | 500 |
TRACE |
Debug output of OPCEXE to stdout |
NO |
STATISTICS |
Performance statistics for opcdbg (Traditional; Java always on) |
NO |
PRINT |
PRINT statement output goes to the message log |
YES |
SYMTAB-SIZE, INCTAB-SIZE, ALARMTAB-SIZE, TIMERTAB-SIZE, ATTRIBTAB-SIZE, SIGTAB-SIZE, LABELTAB-SIZE, VARTAB-SIZE, FNCTAB-SIZE, STRPOOL-SIZE, CODE-SIZE |
Compiler table sizes (Traditional) | 4000, 100, 40, 40, 1000, 1000, 100, 4000, 200, 32 kB, 1000 kB |
Also in the file: hidden keywords FLDSEP = "," and IGNEXI = 1 (not described). opcini.sup
holds only a licence line (differs per installation); leave it alone.
The object's priority decides which executor runs it: sample objects with priority 0 run in
OPCEXE1 (seen with opcdbg, "Running in : 1, OPCEXE1").
3. Ways to create classes and objects (§3)
- Engineering Module (normal GUI way).
opcdbg(repair situations).- An application using the PROCESS routine interface.
- Quick load with
dssqld(CLASS_DF,OBJECT_DF,TRIGGER_DF) — used by this repo; see skillclass-object-engineering.
4. Debugger opcdbg (§4)
Interactive; first asks the OPC host node (0 = this node), then the action:
1 trigger groups, 2 classes, 3 objects, 4 performance, 5 utilities, -1 exit.
opcdbg 0 <action> skips the first two questions. Answers can be piped in (one per line); end
with -1 lines so it exits, and keep a time-out: on end of input it repeats the last prompt
forever.
| Menu | Useful actions |
|---|---|
| Classes (2) | 5 get class (by Name or Id — asked first), 7 compile, 8 reset class (all its objects on a node), 12 triggers, 16 all attributes, 18 all signals, 19/20 get/modify attribute value, 21 hide/unhide code |
| Objects (3) | 4 get object (N/I first), 6 reset, 7 trigger, 12 all attributes, 14 all signals (with item ids), 15 debug on/off (writes a trace file), 16/17 get/modify attribute value, 18 object status (runs, executor) |
| Performance (4) | Asks front-end node and executor name (default OPCEXE, installed names are OPCEXE1…4); 1 main info, 5 class info, 7 object info, 8 reset statistics, 9 statistics on/off, 10/11 top-10 classes/objects |
| Utilities (5) | 1 reset host/front-end, 2 pending front-end updates, 3/4 dump classes/objects, 5 database check (read-only), 6 database repair (deletes incomplete data; back up first), 7 disassemble class, 8 clean up "item used" marks, 9 memory dump |
Verified on R1.05 2026-10-09: the database check (utilities 5) and the performance main info
for OPCEXE1 behave as on R1.03 (database check without warnings). The main info for
OPCJEXE gave no output to piped input within 40 s (ISS-157; try it interactively).
Verified 2026-09-30 (R1.03): Reset class asks class name, node and a file for a reset report
(not in the manual; empty line = none). Times are printed in GMT. The dump files (3/4) are
not in quick load format and dssqld -i rejects them (ISS-027); export CLASS_DF /
OBJECT_DF with dssqld -e instead. Cleanup item used file fixes items that cannot be
deleted because a removed object still marks them as used.
5. Data store (Appendix 1)
Owned by PROCESS Service, in %TLS_DAT_PATH%: opc_clsdef (class definitions), class source
(installed name opc_clssrc, manual opc_clasrc), opc_clsobj (compiled code), opc_objdef,
opc_attrib (attribute values of classes and objects), opc_signal (item per signal, with
storage info), opc_trgdef, opc_trgact (trigger group ↔ class/object links), opc_msgovf
(pending updates to front-ends). They depend on each other: losing one corrupts the whole
store; check with opcdbg utilities 5, repair with 6. Back them up together (they are part of
the tls\dat backup).
Related datasets (read with dssqld -e, see IM36K10J10-01EN.md; definitions in
tls\src\*.dss identical on R1.03 and R1.05, 2026-10-09): CLASS_DF, OBJECT_DF,
TRIGGER_DF, CLASS_SIGNAL_DF, OBJECT_SIGNAL_DF (object:signal → item), CLASS_ATTR_VAL,
OBJECT_ATTR_VAL (attribute values, writable with dssqld -m), CLASS_INCLUDED_DF,
CLASS_RESET_COMMAND (system-wide reset command used by the Engineering Module; not practiced).