ci-server-engineer/.claude/skills/class-object-engineering/tasks/change-reset-class.md
cliu 516729ff24 R1.05 findings from a user project (tested only)
Tested on the R1.05 test server 2026-10-09..12 with a user project (own
objects only); not yet on CI-Eng-Sample (ISS-188). Only results that
were tested are included; inferences, code-only and manual-only points
and the untested sample layout change were left out.
- layouts: 'logout' is a secondary logout, always disabled on the R1.05
  web client; 'exit' closes the window and ends the session (ISS-182).
- create-display: R1.05 web client table (String items in text vs
  textField, fixed text alignment, start-hidden limits ISS-183, two
  visibility conditions, On entry display actions, rectangle blinking,
  verified connections, first load).
- java-class 4a: signal arrays at scale, write on change, attribute
  arrays, offline javac/javap check; change-reset-class: new signals need
  the object recreated, attributes lost (ISS-185); opcdbg reset in cmd,
  TRIGGER_1 via dssqld -m.
- string-items (ISS-187), users-groups, modbus-station (400 registers,
  comm loss), export-dataset (NAME range filter), item-alarming.
- new task system-management/package-project.md; tools/ModbusSim.java
  (tested on R1.05: FC03/04/06/16, exceptions, modes); AMSI (ISS-186).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 21:57:08 +11:00

82 lines
4.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.

---
task: Change a class that already has objects (compile and reset)
version: R1.05 (first written for R1.03)
source: IM 36K10L10-01EN 4th ed. (Feb. 2026) §4 (Reset class); IM 36K10P11-01EN 4th ed. §2.3, §10.4; practiced with CI-Eng-Sample class CIENG_TANK 2026-09-30
status: verified on R1.03 (2026-09-30, Engineering Module reset 2026-10-01). Not re-tested on R1.05; it needs the sample loaded again on the shared test server (awaiting decision, ISS-158). Manuals unchanged and CLASS_DF / CLASS_RESET_COMMAND definitions identical on R1.05 (2026-10-09), so the R1.03 results are expected to hold Re-tested on R1.05 2026-10-09 on the shared test server with the user's approval (temporary sample records, everything removed, before/after snapshot identical): compile sets RESET_REQUIRED 1 and the object keeps the old code; dssqld RESET 1 still does nothing (ISS-028); opcdbg Classes action 8 resets (RESET_REQUIRED 0, new PRINT text at once); OBJECT_ATTR_VAL CAPACITY 400 → volume 200 at level 50 (V15). Compile and reset leave opc_t*.asc/.lst/.rst files in %TLS_LST_PATH%; delete them after a test.
---
# Change a class that has objects
Objects keep running the **old** compiled code until their class is reset (verified). A reset
restarts every object of the class; by the manual, `ONCE` trigger groups fire again. Items the
objects created were kept, with their values (verified).
## 1. New source and compile
`dssqld -m` with the class name, `COMPILE` 1 and the new `METHOD`:
```
@FIELDS
NAME,COMPILE,METHOD
@CLASS_DF
"CIENG_TANK",1,@"
CLASS CIENG_TANK;
…
ENDCLASS CIENG_TANK;
"@
```
`Errors` 0 = compiled. On a compile error the old code stays; see `load-class-object.md` for
reading the error listing.
Export the class (`load-class-object.md` §2): after the compile `RESET_REQUIRED` = 1 and
`OBJECTS_RESET` = 0 of `OBJECTS` n. Verified: the object still printed the old text.
## 2. Reset the class
**Works** — `opcdbg`, Classes, action 8 *Reset class*: class name, node (0 = this node), file
for a reset report (empty = none; this prompt is not in the manual):
```
printf '2\n8\n<CLASS>\n0\n\n-1\n-1\n' | timeout 30 opcdbg 0
```
(Bash. Interactively, type the same answers.) In Windows `cmd`, put the answers in a file
(`2`, `8`, `<CLASS>`, `0`, empty line, `-1`, `-1`, one per line, CRLF) and run
`opcdbg 0 < reset_class.txt` (verified on R1.05 2026-10-12). A `dssqld -m` with `NAME,TRIGGER_1,COMPILE,METHOD`
also changes the class's trigger group (verified on R1.05). Keep the time-out: `opcdbg` repeats its last
prompt forever when the input runs out.
Afterwards `RESET_REQUIRED` = 0 and the object used the new code at once (verified).
**Also works** — Engineering Module: *Configuration › I/O processing › Classes* › right-click the
class › *Reset*. The *Class - reset* window shows *Reset required* / *Extended reset required*,
options *Force extended reset* and *Abort after first failure*, progress (reset n of m, failed)
and a reset report; click **Reset** (verified by the user 2026-10-01: 1 of 1 object reset,
`RESET_REQUIRED` 0). This window is the front end of dataset `CLASS_RESET_COMMAND`.
**Does not work** (verified 2026-09-30, ISS-028):
- `dssqld -m` with `NAME,RESET` = `"<class>",1` (also with `RESET_NODE` = the host node name):
accepted with 0 errors but nothing happens.
- `dssqld -m` on `OBJECT_DF` with `RESET` 1: refused with `OPC-E-OBJ_RSTREQ, The class needs to
be reset first`.
- `CLASS_RESET_COMMAND` (system-wide reset, fields `RESET`, `GENERATE_REPORT`, `PROGRESS`,
`OBJECTS_RESET` …): the dataset allows only read and update, `dssqld -e` returns no record,
`dssqld -m` gives *Not found*, `dssqld -i` is refused (`DSS-E-NO_AUTH`). Verified 2026-10-01.
## 3. Changing prompts or signals
Only a change in the method bodies was practiced on R1.03. When the class **prolog** changes (new
signals, prompts, attributes, created items), check `EXTENDED_RESET_REQUIRED` in `CLASS_DF`
after compiling; what an extended reset does was not tested. The safe way is to recreate the
objects (remove, load) — note that removing an object deletes the items it created, with their
history links.
**R1.05, Java (verified 2026-10-12, user project on the R1.05 test server, 2026-10-09 to 10-12): new signals are refused while objects exist.** `dssqld -m` of
the class with extra `define…Signal` fields gives only `DSI-E-OPCCOMERR, Compilation failed with 1
error(s)` / `DSSP-E-UPDREC` in the `.qlo`; the reason is in the newest `%TLS_ROOT_PATH%\tls\lst\opc_t*.lst`:
`**** ERROR: Attribute or signal definitions cannot be changed while objects are derived from the
class`. The old class keeps running. Procedure that worked: remove the object (`@OBJECT_DF`, `-r`),
`dssqld -m` the class, wait for the compile, insert the object again. **The object's attributes are
lost** with it; the tested class rebuilt its data on the first run of the new object from items it
also writes (its log message confirmed the attributes were empty).