64 lines
2.3 KiB
Markdown
64 lines
2.3 KiB
Markdown
---
|
|
task: Change a class that already has objects (compile and reset)
|
|
version: R1.03
|
|
source: IM 36K10L10-01EN §4 (Reset class); IM 36K10P11-01EN §2.3, §10.4; practiced with CI-Eng-Sample class CIENG_TANK 2026-09-30
|
|
status: verified
|
|
---
|
|
|
|
# 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.) 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).
|
|
|
|
The Engineering Module also resets classes (class properties); not practiced.
|
|
|
|
**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 used by the Engineering Module) was not tried.
|
|
|
|
## 3. Changing prompts or signals
|
|
|
|
Only a change in the method bodies was practiced. 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.
|