@fa_yoshinobu/node-red-contrib-plc-comm-slmp 0.2.12 → 0.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,26 +1,34 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased
3
+ ## 0.2.14 - 2026-06-12
4
+
5
+ - add an optional `Remote password` credential to `slmp-connection`; configured connections unlock remote-password protection after opening SLMP transport and try to lock it before disconnecting
6
+ - add SLMP end-code name/message helpers backed by the full English communication error-code table, and expose remote-password end-code classification on `SlmpError`
7
+ - add forced remote STOP support through `remoteStop({ force: true })`
8
+ - fix `writeBlock()` payload layout so each `1406` block writes its data immediately after that block's device spec and point count
9
+ - add maintainer notes for the resolved mixed `1406` layout root cause and current no-fallback behavior
10
+ - clarify that `G` and `HG` are intentionally unsupported in the public Node-RED high-level surface, not pending TODO items
11
+ - reject direct `G` and `HG` device names even when no `plcFamily` is supplied, keeping the public surface from sending unitless Extended Specification-only devices
4
12
 
5
13
  ## 0.2.12 - 2026-05-02
6
-
7
- - bump the release revision for npm and Node-RED Flow Library publishing; the Flow Library currently shows `0.2.3` as the public baseline
8
- - refresh README, user-guide, latest-verification, and example-flow docs with compatibility notes from the published Flow Library version
9
- - document the public compatibility change from separate `PLC series` / `frame type` fields to one `PLC type` selector
10
- - document the public device-scope changes since Flow Library `0.2.3`: `LTS`, `LTC`, `LSTS`, `LSTC`, `LCS`, `LCC`, and `LZ` are now in the high-level surface where the selected PLC type supports them
11
- - document the current device-matrix flow behavior: one-click run-all read/write buttons, status-lamp feedback, JSONL result logging, `plcFamily` records, and skip/error summary counts
12
-
13
- ## 0.2.11 - 2026-05-02
14
-
15
- - remove the interim device-range catalog helper from the Node-RED package
14
+
15
+ - bump the release revision for npm and Node-RED Flow Library publishing; the Flow Library currently shows `0.2.3` as the public baseline
16
+ - refresh README, user-guide, latest-verification, and example-flow docs with compatibility notes from the published Flow Library version
17
+ - document the public compatibility change from separate `PLC series` / `frame type` fields to one `PLC type` selector
18
+ - document the public device-scope changes since Flow Library `0.2.3`: `LTS`, `LTC`, `LSTS`, `LSTC`, `LCS`, `LCC`, and `LZ` are now in the high-level surface where the selected PLC type supports them
19
+ - document the current device-matrix flow behavior: one-click run-all read/write buttons, status-lamp feedback, JSONL result logging, `plcFamily` records, and skip/error summary counts
20
+
21
+ ## 0.2.11 - 2026-05-02
22
+
23
+ - remove the interim device-range catalog helper from the Node-RED package
16
24
  - keep ordinary Node-RED read/write validation to address format and protocol constraints, leaving actual device-range errors to the PLC response
17
25
  - reject device codes that the selected `plcFamily` does not expose in the public high-level table, aligned with the .NET `DEVICE_RANGES.md` support matrix
18
26
 
19
27
  - remove stale user-guide and TODO wording that still described `LCS` and `LCC`
20
28
  as future support; the high-level helpers route reads through direct bit read
21
29
  and writes through random bit write (`0x1402`)
22
- - keep `G` and `HG` out of the default public device-matrix flow while they
23
- remain routed-device follow-up items
30
+ - keep `G` and `HG` out of the default public device-matrix flow because they
31
+ are not part of the public high-level surface
24
32
 
25
33
  ## 0.2.10 - 2026-04-27
26
34
 
@@ -41,7 +49,7 @@
41
49
  ## 0.2.7 - 2026-04-14
42
50
 
43
51
  - require explicit `plcFamily` on the standard packaged client and connection-node route, while keeping manual frame/profile selection only for internal diagnostic paths
44
- - switch the standard device-range example to the interim catalog helper so the high-level Node surface consistently derives frame, profile, address, and range handling from one family selection
52
+ - switch the standard device-range example to the interim catalog helper so the high-level Node surface consistently derives frame, profile, address, and range handling from one family selection
45
53
 
46
54
  ## 0.2.6 - 2026-04-14
47
55
 
@@ -50,7 +58,7 @@
50
58
 
51
59
  ## 0.2.5 - 2026-04-14
52
60
 
53
- - add interim device-range catalog helpers and CPU operation-state support to the packaged SLMP client surface
61
+ - add interim device-range catalog helpers and CPU operation-state support to the packaged SLMP client surface
54
62
  - add regression tests and README coverage for the new device-range and CPU-state helpers
55
63
 
56
64
  ## 0.2.4 - 2026-04-13
package/README.md CHANGED
@@ -35,7 +35,7 @@ This package is documented for the high-level Node-RED workflow only:
35
35
  ## Quick Start
36
36
 
37
37
  1. Install the package into your Node-RED user directory and restart Node-RED.
38
- 2. Add one `slmp-connection` config node and set `host`, `port`, `transport`, and `PLC type`.
38
+ 2. Add one `slmp-connection` config node and set `host`, `port`, `transport`, and `PLC type`. If the route is protected, set `Remote password`.
39
39
  3. Add `slmp-read` for the first smoke test, using a safe address such as `D300`, `D300,4`, or `DSTR320,10`.
40
40
  4. When read works, add `slmp-write` and use known-safe test devices before moving to production addresses.
41
41
 
@@ -50,12 +50,12 @@ Start with `D` word devices for the first smoke test. Do not start with `slmp-de
50
50
 
51
51
  ## Release Information
52
52
 
53
- - package name: `@fa_yoshinobu/node-red-contrib-plc-comm-slmp`
54
- - package version: `0.2.12`
55
- - npm package: <https://www.npmjs.com/package/@fa_yoshinobu/node-red-contrib-plc-comm-slmp>
56
- - Node-RED requirement: `>=3.0.0`
57
- - Node.js requirement: `>=18`
58
- - changelog: <https://github.com/fa-yoshinobu/node-red-contrib-plc-comm-slmp/blob/main/CHANGELOG.md>
53
+ - package name: `@fa_yoshinobu/node-red-contrib-plc-comm-slmp`
54
+ - package version: `0.2.14`
55
+ - npm package: <https://www.npmjs.com/package/@fa_yoshinobu/node-red-contrib-plc-comm-slmp>
56
+ - Node-RED requirement: `>=3.0.0`
57
+ - Node.js requirement: `>=18`
58
+ - changelog: <https://github.com/fa-yoshinobu/node-red-contrib-plc-comm-slmp/blob/main/CHANGELOG.md>
59
59
 
60
60
  Install from npm:
61
61
 
@@ -79,20 +79,20 @@ npm run smoke:editor
79
79
 
80
80
  This command installs the local package into an isolated temporary userDir, starts a temporary Node-RED runtime, imports `slmp-basic-read-write.json`, verifies the flow starts, and then shuts the runtime down again.
81
81
 
82
- Legacy note:
83
-
84
- - the original unscoped `node-red-contrib-plc-comm-slmp@0.2.0` remains on npm, but new releases move to the scoped package name above
85
-
86
- ### Changes Since Flow Library 0.2.3
87
-
88
- The Node-RED Flow Library currently shows `0.2.3` as the published baseline for this scoped package. Check these changes before updating an existing flow:
89
-
90
- - `slmp-connection` now uses one `PLC type` selector. Older `PLC series` and `frame type` fields from Flow Library `0.2.3` flows must be reselected after import.
91
- - `X/Y` string addresses are PLC-type-specific: iQ-F uses octal `X/Y`, while the other supported PLC types use hexadecimal `X/Y`.
92
- - `LTS`, `LTC`, `LSTS`, `LSTC`, `LCS`, `LCC`, and `LZ` are now in the high-level surface where the selected PLC type supports them.
93
- - Device codes unsupported by the selected PLC type are errors by default. The `slmp-device-matrix.json` sample can instead log them as `SKIPPED` records when it sends `slmpSkipUnsupported`.
94
-
95
- ## Supported PLC Registers
82
+ Legacy note:
83
+
84
+ - the original unscoped `node-red-contrib-plc-comm-slmp@0.2.0` remains on npm, but new releases move to the scoped package name above
85
+
86
+ ### Changes Since Flow Library 0.2.3
87
+
88
+ The Node-RED Flow Library currently shows `0.2.3` as the published baseline for this scoped package. Check these changes before updating an existing flow:
89
+
90
+ - `slmp-connection` now uses one `PLC type` selector. Older `PLC series` and `frame type` fields from Flow Library `0.2.3` flows must be reselected after import.
91
+ - `X/Y` string addresses are PLC-type-specific: iQ-F uses octal `X/Y`, while the other supported PLC types use hexadecimal `X/Y`.
92
+ - `LTS`, `LTC`, `LSTS`, `LSTC`, `LCS`, `LCC`, and `LZ` are now in the high-level surface where the selected PLC type supports them.
93
+ - Device codes unsupported by the selected PLC type are errors by default. The `slmp-device-matrix.json` sample can instead log them as `SKIPPED` records when it sends `slmpSkipUnsupported`.
94
+
95
+ ## Supported PLC Registers
96
96
 
97
97
  Start with these register/device families first:
98
98
 
@@ -128,9 +128,10 @@ Maintainer-only notes and retained evidence live under `internal_docs/`.
128
128
  - configurable error handling with throw / `msg.error` / second output
129
129
  - connection control via `connect` / `disconnect` / `reinitialize` messages
130
130
 
131
- Set one explicit PLC type for each connection. The node stores it as `plcFamily` internally and derives `frameType`, access profile, and `X/Y` string-address rules from that selection.
131
+ Set one explicit PLC type for each connection. The node stores it as `plcFamily` internally and derives `frameType`, access profile, and `X/Y` string-address rules from that selection.
132
+ If `Remote password` is set, the connection unlocks the PLC remote-password protection after opening the SLMP transport and tries to lock it again before disconnecting.
132
133
 
133
- Supported canonical PLC type values:
134
+ Supported canonical PLC type values:
134
135
 
135
136
  - `iq-f`
136
137
  - `iq-r`
@@ -171,9 +172,9 @@ If an address is outside the connected PLC's actual range, the PLC response is r
171
172
  - string/count views: `,count`, `:STR`, `DSTR`
172
173
  - word-bit view: `.bit`
173
174
 
174
- Public device-code support by `plcFamily`:
175
-
176
- | PLC type | Public device codes accepted by the high-level API and Node-RED editor |
175
+ Public device-code support by `plcFamily`:
176
+
177
+ | PLC type | Public device codes accepted by the high-level API and Node-RED editor |
177
178
  | --- | --- |
178
179
  | `iq-r`, `iq-l`, `mx-f`, `mx-r` | `SM`, `SD`, `X`, `Y`, `M`, `L`, `F`, `V`, `B`, `D`, `W`, `TS`, `TC`, `TN`, `LTS`, `LTC`, `LTN`, `STS`, `STC`, `STN`, `LSTS`, `LSTC`, `LSTN`, `CS`, `CC`, `CN`, `LCS`, `LCC`, `LCN`, `SB`, `SW`, `DX`, `DY`, `Z`, `LZ`, `R`, `ZR`, `RD` |
179
180
  | `iq-f` | `SM`, `SD`, `X`, `Y`, `M`, `L`, `F`, `B`, `D`, `W`, `TS`, `TC`, `TN`, `STS`, `STC`, `STN`, `CS`, `CC`, `CN`, `LCS`, `LCC`, `LCN`, `SB`, `SW`, `Z`, `LZ`, `R` |
@@ -192,15 +193,15 @@ Validated public hardware summary:
192
193
  - [`slmp-basic-read-write.json`](https://github.com/fa-yoshinobu/node-red-contrib-plc-comm-slmp/blob/main/examples/flows/slmp-basic-read-write.json): scalar, float, and bit read/write over TCP
193
194
  - [`slmp-array-string.json`](https://github.com/fa-yoshinobu/node-red-contrib-plc-comm-slmp/blob/main/examples/flows/slmp-array-string.json): array and string read/write over TCP
194
195
  - [`slmp-control-error.json`](https://github.com/fa-yoshinobu/node-red-contrib-plc-comm-slmp/blob/main/examples/flows/slmp-control-error.json): control messages, `msg` source, and second-output errors
195
- - [`slmp-device-matrix.json`](https://github.com/fa-yoshinobu/node-red-contrib-plc-comm-slmp/blob/main/examples/flows/slmp-device-matrix.json): one-by-one and run-all high-level read, write, and readback across the matrix catalog with one outstanding request at a time, status lamp feedback, completed-result history, run summary, unsupported-device skip records, and JSONL logging in `Node-RED userDir/logs/slmp-device-matrix-<session>.jsonl`
196
- - [`slmp-routing.json`](https://github.com/fa-yoshinobu/node-red-contrib-plc-comm-slmp/blob/main/examples/flows/slmp-routing.json): per-request routing with `msg.target`
197
- - [`slmp-udp-read-write.json`](https://github.com/fa-yoshinobu/node-red-contrib-plc-comm-slmp/blob/main/examples/flows/slmp-udp-read-write.json): basic UDP read/write
198
-
199
- The device-matrix flow records `plcFamily` in each JSONL result, keeps one outstanding request at a time, and summarizes `OK`, `SKIPPED`, `NG`, mismatch, timeout, and pending counts.
200
-
201
- ## Known Limitations
202
-
203
- - the high-level Node-RED surface requires explicit PLC type selection
196
+ - [`slmp-device-matrix.json`](https://github.com/fa-yoshinobu/node-red-contrib-plc-comm-slmp/blob/main/examples/flows/slmp-device-matrix.json): one-by-one and run-all high-level read, write, and readback across the matrix catalog with one outstanding request at a time, status lamp feedback, completed-result history, run summary, unsupported-device skip records, and JSONL logging in `Node-RED userDir/logs/slmp-device-matrix-<session>.jsonl`
197
+ - [`slmp-routing.json`](https://github.com/fa-yoshinobu/node-red-contrib-plc-comm-slmp/blob/main/examples/flows/slmp-routing.json): per-request routing with `msg.target`
198
+ - [`slmp-udp-read-write.json`](https://github.com/fa-yoshinobu/node-red-contrib-plc-comm-slmp/blob/main/examples/flows/slmp-udp-read-write.json): basic UDP read/write
199
+
200
+ The device-matrix flow records `plcFamily` in each JSONL result, keeps one outstanding request at a time, and summarizes `OK`, `SKIPPED`, `NG`, mismatch, timeout, and pending counts.
201
+
202
+ ## Known Limitations
203
+
204
+ - the high-level Node-RED surface requires explicit PLC type selection
204
205
  - `.bit,count` is not supported
205
206
  - a single client connection keeps requests serialized by default
206
207
  - the read and write nodes keep the caller-visible logical request shape and do not silently retry with a different fallback split semantics
@@ -223,6 +224,6 @@ cmd /c npm.cmd test
223
224
  - `LTS`, `LTC`, `LSTS`, and `LSTC` state reads use the long timer 4-word decode helpers
224
225
  - `LCS` and `LCC` state reads use direct bit read; high-level state writes use random bit write (`0x1402`)
225
226
  - low-level direct bit writes are guarded for `LTS`/`LTC`/`LSTS`/`LSTC`/`LCS`/`LCC`
226
- - `X/Y` string addresses require explicit PLC type selection
227
+ - `X/Y` string addresses require explicit PLC type selection
227
228
  - `iq-f` interprets `X/Y` string addresses in octal, while other supported families use hexadecimal `X/Y`
228
229
  - random read batching follows the Python helper layer for batchable word devices
@@ -9,7 +9,7 @@ Recommended first path:
9
9
  1. Install the package into your Node-RED user directory.
10
10
  2. Restart Node-RED.
11
11
  3. Add one `slmp-connection` config node.
12
- 4. Set `host`, `port`, `transport`, and `PLC type`.
12
+ 4. Set `host`, `port`, `transport`, and `PLC type`. If the PLC route uses remote-password protection, set `Remote password`.
13
13
  5. Import `examples/flows/slmp-basic-read-write.json`.
14
14
  6. Replace the host and safe test addresses.
15
15
  7. Deploy and confirm that one `D` read succeeds.
@@ -42,10 +42,11 @@ Set these fields explicitly on `slmp-connection`:
42
42
  - `host`
43
43
  - `port`
44
44
  - `transport`
45
- - `PLC type`
45
+ - `PLC type`
46
+ - `Remote password` when required by the PLC route
46
47
  - timeout
47
48
 
48
- Canonical `PLC type` values:
49
+ Canonical `PLC type` values:
49
50
 
50
51
  - `iq-f`
51
52
  - `iq-r`
@@ -87,7 +88,7 @@ After the basic flow succeeds:
87
88
 
88
89
  If the first read fails, check these in order:
89
90
 
90
- - correct `PLC type`
91
+ - correct `PLC type`
91
92
  - correct `tcp` or `udp` selection
92
93
  - a simple `D` address instead of a typed, count, or string form
93
94
  - editor validation messages before deploy
@@ -2,19 +2,19 @@
2
2
 
3
3
  This page keeps the current public summary only. Older detailed notes are not kept in the public documentation set.
4
4
 
5
- ## Current Retained Summary
6
-
7
- - current Flow Library baseline checked for release notes: `0.2.3`
8
- - current release-prep target: `0.2.12`
9
- - verified PLC models: `FX5UC-32MT/D`, `Q06UDVCPU`, `R08CPU`
10
- - verified transports: `TCP`, `UDP`
11
- - verified public nodes: `slmp-connection`, `slmp-read`, `slmp-write`
12
- - retained first-run smoke path: `slmp-basic-read-write.json`
13
- - 2026-05-01 iQ-R live check: `R08CPU` at `192.168.250.100:1025` over TCP
14
- returned `LCS10=false` and `LCC10=false` through `readNamed`
15
- - 2026-05-02 release-prep docs align the Node-RED matrix flow with one-click run-all read/write, status-lamp feedback, JSONL logging, `plcFamily` result records, and PLC-type-unsupported `SKIPPED` records
16
-
17
- ## Confirmed Public Register Scope
5
+ ## Current Retained Summary
6
+
7
+ - current Flow Library baseline checked for release notes: `0.2.3`
8
+ - current release-prep target: `0.2.12`
9
+ - verified PLC models: `FX5UC-32MT/D`, `Q06UDVCPU`, `R08CPU`
10
+ - verified transports: `TCP`, `UDP`
11
+ - verified public nodes: `slmp-connection`, `slmp-read`, `slmp-write`
12
+ - retained first-run smoke path: `slmp-basic-read-write.json`
13
+ - 2026-05-01 iQ-R live check: `R08CPU` at `192.168.250.100:1025` over TCP
14
+ returned `LCS10=false` and `LCC10=false` through `readNamed`
15
+ - 2026-05-02 release-prep docs align the Node-RED matrix flow with one-click run-all read/write, status-lamp feedback, JSONL logging, `plcFamily` result records, and PLC-type-unsupported `SKIPPED` records
16
+
17
+ ## Confirmed Public Register Scope
18
18
 
19
19
  - bit devices: `SM`, `X`, `Y`, `M`, `L`, `F`, `V`, `B`, `TS`, `TC`, `LTS`, `LTC`, `STS`, `STC`, `LSTS`, `LSTC`, `CS`, `CC`, `LCS`, `LCC`, `SB`, `DX`, `DY`
20
20
  - word devices: `SD`, `D`, `W`, `TN`, `LTN`, `STN`, `LSTN`, `CN`, `LCN`, `SW`, `Z`, `LZ`, `R`, `ZR`, `RD`
@@ -23,12 +23,12 @@ This page keeps the current public summary only. Older detailed notes are not ke
23
23
 
24
24
  ## Practical Cautions
25
25
 
26
- - set one explicit `PLC type` for every connection
27
- - older Flow Library `0.2.3` flows must be updated from `PLC series` / `frame type` to `PLC type`
28
- - start with `D` reads before using typed, counted, or string forms
29
- - keep `slmp-device-matrix.json` for later verification, not for the first smoke test
30
- - do not rely on Node-RED for PLC model-specific range or upper-bound checks; format errors are local, range errors come from the PLC/runtime response
31
- - `.bit,count` is not part of the current public high-level surface
26
+ - set one explicit `PLC type` for every connection
27
+ - older Flow Library `0.2.3` flows must be updated from `PLC series` / `frame type` to `PLC type`
28
+ - start with `D` reads before using typed, counted, or string forms
29
+ - keep `slmp-device-matrix.json` for later verification, not for the first smoke test
30
+ - do not rely on Node-RED for PLC model-specific range or upper-bound checks; format errors are local, range errors come from the PLC/runtime response
31
+ - `.bit,count` is not part of the current public high-level surface
32
32
 
33
33
  ## Where Older Evidence Went
34
34
 
@@ -83,7 +83,7 @@ This page is the canonical public register/device table for the Node-RED high-le
83
83
 
84
84
  These are device-code support rules only. The editor and helper APIs use them to reject or skip device codes that the selected family does not expose in the public surface; they are not address upper-bound checks.
85
85
 
86
- | PLC type | Unsupported device codes in the public Node-RED surface |
86
+ | PLC type | Unsupported device codes in the public Node-RED surface |
87
87
  | --- | --- |
88
88
  | all families | `G`, `HG` |
89
89
  | `iq-r`, `iq-l`, `mx-f`, `mx-r` | none beyond `G`, `HG` |
@@ -93,6 +93,39 @@ These are device-code support rules only. The editor and helper APIs use them to
93
93
 
94
94
  This table follows only the supported/unsupported device-code portion of the .NET library's `DEVICE_RANGES.md`; Node-RED does not use it for PLC range or upper-bound validation.
95
95
 
96
+ ## iQ-R SD Range Maximum Reference
97
+
98
+ For iQ-R-series targets, the PLC-configured current point count is read from
99
+ the family-specific `SD` range registers by libraries that expose a device range
100
+ catalog. The maximum below is the cap for that SD-derived point count:
101
+
102
+ `point_count = min(SD point count, max_point_count)`
103
+
104
+ The displayed upper bound is then `point_count - 1`. Node-RED keeps this as a
105
+ reference table only; it still does not pre-check PLC model-specific address
106
+ upper bounds. If an address exceeds the connected PLC's actual configured
107
+ range, the PLC response is returned as the runtime error.
108
+
109
+ | Item | Node-RED device codes | Max address | max_point_count | Setting unit |
110
+ | --- | --- | --- | --- | --- |
111
+ | `X` | `X` | `X2FFF` | `12288` (`0x3000`) | n/a |
112
+ | `Y` | `Y` | `Y2FFF` | `12288` (`0x3000`) | n/a |
113
+ | `M` | `M` | `M94674943` | `94674944` (`0x5A4A000`) | 64 points |
114
+ | `B` | `B` | `B5A49FFF` | `94674944` (`0x5A4A000`) | 64 points |
115
+ | `F` | `F` | `F32767` | `32768` | 64 points |
116
+ | `SB` | `SB` | `SB5A49FFF` | `94674944` (`0x5A4A000`) | 64 points |
117
+ | `V` | `V` | `V32767` | `32768` | 64 points |
118
+ | `L` | `L` | `L32767` | `32768` | 64 points |
119
+ | `T` | `TS`, `TC`, `TN` | `T5259711` | `5259712` | 32 points |
120
+ | `ST` | `STS`, `STC`, `STN` | `ST5259711` | `5259712` | 32 points |
121
+ | `LT` | `LTS`, `LTC`, `LTN` | `LT1479295` | `1479296` | 1 point |
122
+ | `LST` | `LSTS`, `LSTC`, `LSTN` | `LST1479295` | `1479296` | 1 point |
123
+ | `C` | `CS`, `CC`, `CN` | `C5259711` | `5259712` | 32 points |
124
+ | `LC` | `LCS`, `LCC`, `LCN` | `LC2784543` | `2784544` | 32 points |
125
+ | `D` | `D` | `D5917183` | `5917184` (`0x5A4A00`) | 4 points |
126
+ | `W` | `W` | `W5A49FF` | `5917184` (`0x5A4A00`) | 4 points |
127
+ | `SW` | `SW` | `SW5A49FF` | `5917184` (`0x5A4A00`) | 4 points |
128
+
96
129
  ## Not Currently in the Public Surface
97
130
 
98
131
  - `G`
@@ -15,7 +15,7 @@ See also:
15
15
  ## Quick start
16
16
 
17
17
  1. Install the package into your Node-RED user directory and restart Node-RED.
18
- 2. Create one `slmp-connection` and set `host`, `port`, `transport`, and `PLC type`.
18
+ 2. Create one `slmp-connection` and set `host`, `port`, `transport`, and `PLC type`. Set `Remote password` when the PLC route is protected.
19
19
  3. Drop in `slmp-read` and try a safe address such as `D300`, `D300,4`, or `DSTR320,10`.
20
20
  4. Once reads work, add `slmp-write` and verify with known-safe test devices.
21
21
 
@@ -62,27 +62,29 @@ Configure these explicitly on the connection node:
62
62
  - host
63
63
  - port
64
64
  - transport: `tcp` or `udp`
65
- - PLC type: `iq-f`, `iq-r`, `iq-l`, `mx-f`, `mx-r`, `qcpu`, `lcpu`, `qnu`, or `qnudv`
65
+ - PLC type: `iq-f`, `iq-r`, `iq-l`, `mx-f`, `mx-r`, `qcpu`, `lcpu`, `qnu`, or `qnudv`
66
+ - Remote password: optional SLMP remote-password credential for protected PLC routes
66
67
  - route fields: network, station, module I/O, multidrop
67
68
 
68
- The connection node stores the selection as `plcFamily` internally and derives `frameType`, access profile, and string-address interpretation from the explicit `PLC type`.
69
-
70
- Validated PLC models:
69
+ The connection node stores the selection as `plcFamily` internally and derives `frameType`, access profile, and string-address interpretation from the explicit `PLC type`.
70
+ When `Remote password` is configured, the shared connection sends remote-password unlock after opening the SLMP transport and attempts remote-password lock before disconnecting.
71
+
72
+ Validated PLC models:
71
73
 
72
74
  - `FX5UC-32MT/D`
73
- - `Q06UDVCPU`
74
- - `R08CPU`
75
-
76
- ## Changes since Flow Library 0.2.3
77
-
78
- The Node-RED Flow Library currently shows `0.2.3` as the published baseline for this scoped package.
79
-
80
- - Existing `0.2.3` flows used `PLC series` and `frame type`; current flows must use one explicit `PLC type` on every `slmp-connection`.
81
- - `X/Y` string addresses are PLC-type-specific. Use `iq-f` for octal `X/Y`; other supported PLC types use hexadecimal `X/Y`.
82
- - `LTS`, `LTC`, `LSTS`, `LSTC`, `LCS`, `LCC`, and `LZ` are now in the high-level surface where the selected PLC type supports them.
83
- - Device codes unsupported by the selected PLC type are rejected by default. The device-matrix sample can log them as `SKIPPED` records when it sends `slmpSkipUnsupported`.
84
-
85
- ## Supported devices
75
+ - `Q06UDVCPU`
76
+ - `R08CPU`
77
+
78
+ ## Changes since Flow Library 0.2.3
79
+
80
+ The Node-RED Flow Library currently shows `0.2.3` as the published baseline for this scoped package.
81
+
82
+ - Existing `0.2.3` flows used `PLC series` and `frame type`; current flows must use one explicit `PLC type` on every `slmp-connection`.
83
+ - `X/Y` string addresses are PLC-type-specific. Use `iq-f` for octal `X/Y`; other supported PLC types use hexadecimal `X/Y`.
84
+ - `LTS`, `LTC`, `LSTS`, `LSTC`, `LCS`, `LCC`, and `LZ` are now in the high-level surface where the selected PLC type supports them.
85
+ - Device codes unsupported by the selected PLC type are rejected by default. The device-matrix sample can log them as `SKIPPED` records when it sends `slmpSkipUnsupported`.
86
+
87
+ ## Supported devices
86
88
 
87
89
  Supported bit devices:
88
90
 
@@ -103,20 +105,20 @@ Supported word devices:
103
105
  Address notes:
104
106
 
105
107
  - `B`, `W`, `SB`, `SW`, `DX`, and `DY` use hexadecimal numbering
106
- - `X` and `Y` require explicit `PLC type`
108
+ - `X` and `Y` require explicit `PLC type`
107
109
  - `iq-f` interprets string `X/Y` addresses in octal
108
110
  - all other supported families interpret string `X/Y` addresses in hexadecimal
109
111
  - most other devices use decimal numbering
110
112
  - Node-RED input validation checks address format and protocol constraints, not PLC model-specific device ranges or upper bounds
111
113
  - if an address is outside the connected PLC's actual range, the PLC response is returned as the runtime error
112
- - Node-RED input validation does reject device codes that the selected `PLC type` does not expose in the public device table
114
+ - Node-RED input validation does reject device codes that the selected `PLC type` does not expose in the public device table
113
115
  - word devices support `.bit`, for example `D50.3`
114
116
  - count and string forms work on supported devices, for example `D300,10`, `M1000,8`, and `DSTR320,10`
115
117
  - `LTN`, `LSTN`, and `LCN` default to 32-bit current-value access in the high-level nodes
116
118
  - `LCS` and `LCC` state reads use direct bit read; high-level state writes use random bit write (`0x1402`)
117
- - future routed device support candidates such as `G` and `HG` are tracked in [`TODO.md`](../../TODO.md)
118
-
119
- Family-specific unsupported device codes:
119
+ - `G` and `HG` are intentionally unsupported in the public Node-RED high-level surface
120
+
121
+ Family-specific unsupported device codes:
120
122
 
121
123
  - all families: `G`, `HG`
122
124
  - `iq-r`, `iq-l`, `mx-f`, `mx-r`: none beyond `G`, `HG`
@@ -253,9 +255,9 @@ Import one of these into Node-RED, then update the connection host, port, transp
253
255
  - [`slmp-basic-read-write.json`](../../examples/flows/slmp-basic-read-write.json): scalar, float, and bit read/write over TCP
254
256
  - [`slmp-array-string.json`](../../examples/flows/slmp-array-string.json): array and string read/write over TCP
255
257
  - [`slmp-control-error.json`](../../examples/flows/slmp-control-error.json): control messages, configured `msg` source, and second-output errors
256
- - [`slmp-device-matrix.json`](../../examples/flows/slmp-device-matrix.json): one-by-one and run-all high-level read, write, and readback across the matrix catalog with one outstanding request at a time, status lamp feedback, completed-result history, run summary, unsupported-device skip records, and JSONL logging under `Node-RED userDir/logs/slmp-device-matrix-<session>.jsonl`
257
- - [`slmp-routing.json`](../../examples/flows/slmp-routing.json): per-request routing with `msg.target`
258
- - [`slmp-udp-read-write.json`](../../examples/flows/slmp-udp-read-write.json): basic UDP read/write
258
+ - [`slmp-device-matrix.json`](../../examples/flows/slmp-device-matrix.json): one-by-one and run-all high-level read, write, and readback across the matrix catalog with one outstanding request at a time, status lamp feedback, completed-result history, run summary, unsupported-device skip records, and JSONL logging under `Node-RED userDir/logs/slmp-device-matrix-<session>.jsonl`
259
+ - [`slmp-routing.json`](../../examples/flows/slmp-routing.json): per-request routing with `msg.target`
260
+ - [`slmp-udp-read-write.json`](../../examples/flows/slmp-udp-read-write.json): basic UDP read/write
259
261
 
260
262
  Recommended first import:
261
263
 
@@ -270,6 +272,6 @@ Recommended first import:
270
272
  - `.bit,count` is not supported
271
273
  - direct bit devices should be addressed directly as `M1000`, `X1F`, or `Y20`
272
274
  - a single client connection keeps requests serialized by default
273
- - the read and write nodes keep the caller-visible logical request shape and do not silently switch to a different fallback split behavior
274
- - read/write errors can throw, attach to `msg.error`, or go to a second output
275
- - the editor validates connection fields, literal address lists, literal update payloads, and literal route JSON before save
275
+ - the read and write nodes keep the caller-visible logical request shape and do not silently switch to a different fallback split behavior
276
+ - read/write errors can throw, attach to `msg.error`, or go to a second output
277
+ - the editor validates connection fields, literal address lists, literal update payloads, and literal route JSON before save
@@ -33,9 +33,9 @@ Available flows:
33
33
  - [`slmp-routing.json`](slmp-routing.json): per-request routing using `msg.lookup` and `msg.target`
34
34
  - [`slmp-udp-read-write.json`](slmp-udp-read-write.json): basic UDP read and write example
35
35
 
36
- Notes:
37
-
38
- - The flow nodes keep the caller-visible logical request shape and do not silently switch to a different fallback split behavior.
39
- - In `slmp-device-matrix.json`, `Run all reads` and `Run all writes` are the auto-run buttons. The `Auto run status lamp` shows active, pending, idle, and error state in the editor.
40
- - Family-unsupported device codes are sent with `slmpSkipUnsupported` by the matrix flow, so they become yellow `SKIPPED` result records instead of red node failures.
41
- - Each matrix JSONL result includes `plcFamily` near the top of the record, followed by request, operation, address, status, and timing fields.
36
+ Notes:
37
+
38
+ - The flow nodes keep the caller-visible logical request shape and do not silently switch to a different fallback split behavior.
39
+ - In `slmp-device-matrix.json`, `Run all reads` and `Run all writes` are the auto-run buttons. The `Auto run status lamp` shows active, pending, idle, and error state in the editor.
40
+ - Family-unsupported device codes are sent with `slmpSkipUnsupported` by the matrix flow, so they become yellow `SKIPPED` result records instead of red node failures.
41
+ - Each matrix JSONL result includes `plcFamily` near the top of the record, followed by request, operation, address, status, and timing fields.