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>
140 lines
9.9 KiB
Markdown
140 lines
9.9 KiB
Markdown
---
|
||
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 adds `tls\exe\lib\*` (on R1.05 it holds about 100 bundled
|
||
third-party jars; on R1.03 the folder held only `installer.txt`).
|
||
- `process_start.cmd` ends by calling every `?*_process_start.cmd` in `tls\com`, and
|
||
`process_stop.cmd` first 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`, four `opcexe` and one
|
||
`javaw` running the Java executor `opcjexe` (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_JBASE` and `UAS_MTD_JBASE` (R1.04; see
|
||
`IM36K10L45-01EN.md` §10.6 and §11.4 and skill `data-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)
|
||
|
||
1. Engineering Module (normal GUI way).
|
||
2. `opcdbg` (repair situations).
|
||
3. An application using the PROCESS routine interface.
|
||
4. **Quick load** with `dssqld` (`CLASS_DF`, `OBJECT_DF`, `TRIGGER_DF`) — used by this repo;
|
||
see skill `class-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 **N**ame or **I**d — 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).
|