📝 Update spec and README
This commit is contained in:
@@ -325,7 +325,7 @@ requirement ID for each item in parentheses.
|
||||
statistics table (0x1029 words) with reset, LED-error
|
||||
(0x1020/0x1021) and module-diagnosis (0x1050) fault injection
|
||||
and clear; SF LED on the coupler reflects injected LED errors.
|
||||
- [x] M5: configuration — coupler settings forms (watchdog time/masks/type/close-on-timeout via 0x1000–0x100B, response delay 0x1037, idle timeout 0x1030) with the device's own validation surfaced (writes refused while the watchdog runs → field error); module list editor over the 13-article catalog with SAVE CONFIG → live process-image rebuild (`rebuild_node`: datastore survives, values clear like a KBUS reset, 0x1022–0x1025 and 0x2030+ updated) + persistence to the node-config YAML via a comment-preserving custom emitter.
|
||||
- [x] M5: configuration — coupler settings forms (watchdog time/masks/type/close-on-timeout via 0x1000–0x100B, response delay 0x1037, idle timeout 0x1030) with the device's own validation surfaced (writes refused while the watchdog runs → field error); module list editor over the 13-article catalog with SAVE CONFIG → live process-image rebuild (`rebuild_node`: datastore survives, values clear like a KBUS reset, 0x1022–0x1025 and 0x2030+ updated) + persistence to the node-config YAML via a comment-preserving custom emitter. Modules re-orderable by drag-and-drop or ▲/▼ arrows (FR-11.2.6); with per-type I/O codes (FR-4.3.11 v1.5) cross-kind moves don't renumber other kinds' channels.
|
||||
- [x] M5a: channel names for every module channel (FR-10.2.11) —
|
||||
node-config persisted (`channel_names:` mapping, I/O code →
|
||||
name), survive module saves and rebuilds, shown in the overview
|
||||
@@ -400,6 +400,17 @@ not yet implemented. Datasets are **optional**: signal logic
|
||||
(plugins, scheduled steps, degradation) runs in parallel with CSV
|
||||
streaming, or entirely without it.
|
||||
|
||||
- [ ] Plant environment `scenario/plantenv.py` (FR-8.2.14–16, requested
|
||||
2026-10-04): gym-style `PlantEnv` — deterministic engine-owned
|
||||
tick clock (never wall-clock); per tick:
|
||||
`observe()` returns the WAGO input image in engineering units
|
||||
(channel values, names, per-type I/O codes, ranges, sim-time);
|
||||
the decision source decides; `apply()` writes the decided
|
||||
outputs through the datastore's internal paths (mirrors/
|
||||
statistics/watchdog stay consistent). Existing `plugins:`
|
||||
become thin adapters; external (non-Python) decision sources
|
||||
step the env over a socket; one decision source per output
|
||||
alias per tick (ownership conflicts are errors).
|
||||
- [ ] `scenario/datasets.py` — streaming CSV playback for designated
|
||||
inputs (OPTIONAL driver): header-driven time column,
|
||||
`interpolation: linear|hold`, `repeat` with seamless seams,
|
||||
|
||||
Reference in New Issue
Block a user