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

4.9 KiB
Raw Permalink Blame History


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