ci-server-engineer/knowledge/manuals/IM36K10L10-01EN.md
cliu bf7d88a027 R1.05 re-check batch 3: alarms, audit, authorization, classes, HAC, reporting, pyTOOLS
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>
2026-10-09 10:21:36 +11:00

140 lines
9.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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).