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>
82 lines
4.9 KiB
Markdown
82 lines
4.9 KiB
Markdown
---
|
||
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).
|