@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 +23 -15
- package/README.md +37 -36
- package/docsrc/user/GETTING_STARTED.md +5 -4
- package/docsrc/user/LATEST_COMMUNICATION_VERIFICATION.md +19 -19
- package/docsrc/user/SUPPORTED_REGISTERS.md +34 -1
- package/docsrc/user/USER_GUIDE.md +31 -29
- package/examples/flows/README.md +6 -6
- package/lib/slmp/client.js +159 -413
- package/lib/slmp/core.js +24 -12
- package/lib/slmp/error-codes.js +56 -0
- package/lib/slmp/errors.js +26 -0
- package/lib/slmp/lang/slmp-end-code-messages-en.json +686 -0
- package/lib/slmp/transport.js +459 -0
- package/nodes/slmp-connection.html +10 -2
- package/nodes/slmp-connection.js +8 -1
- package/package.json +4 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
##
|
|
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
|
|
23
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
-
|
|
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
|
package/examples/flows/README.md
CHANGED
|
@@ -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.
|