@fa_yoshinobu/node-red-contrib-plc-comm-slmp 0.2.3 → 0.2.13

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.
@@ -1,87 +1,99 @@
1
- # Getting Started
2
-
3
- ## Start Here
4
-
5
- Use this package when you want the shortest Node-RED path to Mitsubishi SLMP communication through the public high-level nodes.
6
-
7
- Recommended first path:
8
-
9
- 1. Install the package into your Node-RED user directory.
10
- 2. Restart Node-RED.
11
- 3. Add one `slmp-connection` config node.
12
- 4. Set `host`, `port`, `transport`, `PLC series`, and `frame type`.
13
- 5. Import `examples/flows/slmp-basic-read-write.json`.
14
- 6. Replace the host and safe test addresses.
15
- 7. Deploy and confirm that one `D` read succeeds.
16
-
17
- ## First PLC Registers To Try
18
-
19
- Start with these first:
20
-
21
- - `D100`
22
- - `D100,4`
23
- - `D200:F`
24
- - `D300:L`
25
- - `D50.3`
26
- - `M1000`
27
-
28
- These stay on the public high-level surface and avoid the more complex routing and validation cases.
29
-
30
- Do not start with these:
31
-
32
- - `slmp-device-matrix.json`
33
- - routed or multi-station requests
34
- - future-tracked families such as `G`, `HG`, `LTS`, `LTC`, `LSTS`, `LSTC`, `LCS`, `LCC`, `LZ`
35
-
36
- ## First Connection Checklist
37
-
38
- Set these fields explicitly on `slmp-connection`:
39
-
40
- - `host`
41
- - `port`
42
- - `transport`
43
- - `PLC series`
44
- - `frame type`
45
- - timeout
46
-
47
- If you do not already know a safe writable area, start with reads only.
48
-
49
- ## First Successful Run
50
-
51
- The easiest sequence is:
52
-
53
- 1. Import `slmp-basic-read-write.json`.
54
- 2. Use a safe word address such as `D100`.
55
- 3. Deploy.
56
- 4. Confirm that `msg.payload` returns a scalar word value.
57
- 5. Move to `slmp-array-string.json` only after the first read is stable.
58
-
59
- Expected result:
60
-
61
- - the flow deploys without editor validation errors
62
- - the read node returns a value in `msg.payload`
63
- - the connection node remains stable across repeated injects
64
-
65
- ## What To Try Next
66
-
67
- After the basic flow succeeds:
68
-
69
- - import `slmp-array-string.json` for `,count` and string handling
70
- - use `slmp-udp-read-write.json` when you want to confirm UDP
71
- - use `slmp-device-matrix.json` only when you need one-by-one coverage across the public matrix
72
-
73
- ## Common Beginner Checks
74
-
75
- If the first read fails, check these in order:
76
-
77
- - correct `PLC series`
78
- - correct `frame type`
79
- - correct `tcp` or `udp` selection
80
- - a simple `D` address instead of a typed, count, or string form
81
- - editor validation messages before deploy
82
-
83
- ## Next Pages
84
-
85
- - [Supported PLC Registers](./SUPPORTED_REGISTERS.md)
86
- - [Latest Communication Verification](./LATEST_COMMUNICATION_VERIFICATION.md)
87
- - [User Guide](./USER_GUIDE.md)
1
+ # Getting Started
2
+
3
+ ## Start Here
4
+
5
+ Use this package when you want the shortest Node-RED path to Mitsubishi SLMP communication through the public high-level nodes.
6
+
7
+ Recommended first path:
8
+
9
+ 1. Install the package into your Node-RED user directory.
10
+ 2. Restart Node-RED.
11
+ 3. Add one `slmp-connection` config node.
12
+ 4. Set `host`, `port`, `transport`, and `PLC type`.
13
+ 5. Import `examples/flows/slmp-basic-read-write.json`.
14
+ 6. Replace the host and safe test addresses.
15
+ 7. Deploy and confirm that one `D` read succeeds.
16
+
17
+ ## First PLC Registers To Try
18
+
19
+ Start with these first:
20
+
21
+ - `D100`
22
+ - `D100,4`
23
+ - `D200:F`
24
+ - `D300:L`
25
+ - `D50.3`
26
+ - `M1000`
27
+
28
+ These stay on the public high-level surface and avoid the more complex routing and validation cases.
29
+
30
+ Do not start with these:
31
+
32
+ - `slmp-device-matrix.json`
33
+ - routed or multi-station requests
34
+ - routed device families such as `G` and `HG`
35
+ - long timer/counter state devices such as `LTS`, `LTC`, `LSTS`, `LSTC`, `LCS`, and `LCC`
36
+ - 32-bit-only devices such as `LTN`, `LSTN`, `LCN`, and `LZ`
37
+
38
+ ## First Connection Checklist
39
+
40
+ Set these fields explicitly on `slmp-connection`:
41
+
42
+ - `host`
43
+ - `port`
44
+ - `transport`
45
+ - `PLC type`
46
+ - timeout
47
+
48
+ Canonical `PLC type` values:
49
+
50
+ - `iq-f`
51
+ - `iq-r`
52
+ - `iq-l`
53
+ - `mx-f`
54
+ - `mx-r`
55
+ - `qcpu`
56
+ - `lcpu`
57
+ - `qnu`
58
+ - `qnudv`
59
+
60
+ If you do not already know a safe writable area, start with reads only.
61
+
62
+ ## First Successful Run
63
+
64
+ The easiest sequence is:
65
+
66
+ 1. Import `slmp-basic-read-write.json`.
67
+ 2. Use a safe word address such as `D100`.
68
+ 3. Deploy.
69
+ 4. Confirm that `msg.payload` returns a scalar word value.
70
+ 5. Move to `slmp-array-string.json` only after the first read is stable.
71
+
72
+ Expected result:
73
+
74
+ - the flow deploys without editor validation errors
75
+ - the read node returns a value in `msg.payload`
76
+ - the connection node remains stable across repeated injects
77
+
78
+ ## What To Try Next
79
+
80
+ After the basic flow succeeds:
81
+
82
+ - import `slmp-array-string.json` for `,count` and string handling
83
+ - use `slmp-udp-read-write.json` when you want to confirm UDP
84
+ - use `slmp-device-matrix.json` only when you need one-by-one coverage across the public matrix
85
+
86
+ ## Common Beginner Checks
87
+
88
+ If the first read fails, check these in order:
89
+
90
+ - correct `PLC type`
91
+ - correct `tcp` or `udp` selection
92
+ - a simple `D` address instead of a typed, count, or string form
93
+ - editor validation messages before deploy
94
+
95
+ ## Next Pages
96
+
97
+ - [Supported PLC Registers](./SUPPORTED_REGISTERS.md)
98
+ - [Latest Communication Verification](./LATEST_COMMUNICATION_VERIFICATION.md)
99
+ - [User Guide](./USER_GUIDE.md)
@@ -1,28 +1,35 @@
1
- # Latest Communication Verification
2
-
3
- This page keeps the current public summary only. Older detailed notes are not kept in the public documentation set.
4
-
5
- ## Current Retained Summary
6
-
7
- - verified PLC models: `FX5UC-32MT/D`, `Q06UDVCPU`, `R08CPU`
8
- - verified transports: `TCP`, `UDP`
9
- - verified public nodes: `slmp-connection`, `slmp-read`, `slmp-write`
10
- - retained first-run smoke path: `slmp-basic-read-write.json`
11
-
12
- ## Confirmed Public Register Scope
13
-
14
- - bit devices: `SM`, `X`, `Y`, `M`, `L`, `F`, `V`, `B`, `TS`, `TC`, `STS`, `STC`, `CS`, `CC`, `SB`, `DX`, `DY`
15
- - word devices: `SD`, `D`, `W`, `TN`, `LTN`, `STN`, `LSTN`, `CN`, `LCN`, `SW`, `Z`, `R`, `ZR`, `RD`
16
- - typed forms: `:S`, `:D`, `:L`, `:F`
17
- - high-level special forms: `.bit`, `,count`, `:STR`, `DSTR`
18
-
19
- ## Practical Cautions
20
-
21
- - set `PLC series` and `frame type` explicitly for every connection
22
- - start with `D` reads before using typed, counted, or string forms
23
- - keep `slmp-device-matrix.json` for later verification, not for the first smoke test
24
- - `.bit,count` is not part of the current public high-level surface
25
-
26
- ## Where Older Evidence Went
27
-
28
- Public historical report clutter was removed. Maintainer-only retained evidence now belongs under `internal_docs/`.
1
+ # Latest Communication Verification
2
+
3
+ This page keeps the current public summary only. Older detailed notes are not kept in the public documentation set.
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
18
+
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
+ - word devices: `SD`, `D`, `W`, `TN`, `LTN`, `STN`, `LSTN`, `CN`, `LCN`, `SW`, `Z`, `LZ`, `R`, `ZR`, `RD`
21
+ - typed forms: `:S`, `:D`, `:L`, `:F`
22
+ - high-level special forms: `.bit`, `,count`, `:STR`, `DSTR`
23
+
24
+ ## Practical Cautions
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
32
+
33
+ ## Where Older Evidence Went
34
+
35
+ Public historical report clutter was removed. Maintainer-only retained evidence now belongs under `internal_docs/`.
@@ -1,81 +1,134 @@
1
- # Supported PLC Registers
2
-
3
- This page is the canonical public register/device table for the Node-RED high-level nodes.
4
-
5
- ## Supported Bit Devices
6
-
7
- | Family | Kind | Example | Numbering |
8
- | --- | --- | --- | --- |
9
- | `SM` | bit | `SM400` | decimal |
10
- | `X` | bit | `X20` | hexadecimal |
11
- | `Y` | bit | `Y20` | hexadecimal |
12
- | `M` | bit | `M1000` | decimal |
13
- | `L` | bit | `L100` | decimal |
14
- | `F` | bit | `F10` | decimal |
15
- | `V` | bit | `V10` | decimal |
16
- | `B` | bit | `B20` | hexadecimal |
17
- | `TS` | bit | `TS10` | decimal |
18
- | `TC` | bit | `TC10` | decimal |
19
- | `STS` | bit | `STS10` | decimal |
20
- | `STC` | bit | `STC10` | decimal |
21
- | `CS` | bit | `CS10` | decimal |
22
- | `CC` | bit | `CC10` | decimal |
23
- | `SB` | bit | `SB20` | hexadecimal |
24
- | `DX` | bit | `DX20` | hexadecimal |
25
- | `DY` | bit | `DY20` | hexadecimal |
26
-
27
- ## Supported Word Devices
28
-
29
- | Family | Kind | Example | Numbering |
30
- | --- | --- | --- | --- |
31
- | `SD` | word | `SD100` | decimal |
32
- | `D` | word | `D100` | decimal |
33
- | `W` | word | `W20` | hexadecimal |
34
- | `TN` | word | `TN10` | decimal |
35
- | `LTN` | word | `LTN10` | decimal |
36
- | `STN` | word | `STN10` | decimal |
37
- | `LSTN` | word | `LSTN10` | decimal |
38
- | `CN` | word | `CN10` | decimal |
39
- | `LCN` | word | `LCN10` | decimal |
40
- | `SW` | word | `SW20` | hexadecimal |
41
- | `Z` | word | `Z10` | decimal |
42
- | `R` | word | `R100` | decimal |
43
- | `ZR` | word | `ZR100` | decimal |
44
- | `RD` | word | `RD100` | decimal |
45
-
46
- ## High-Level Address Forms
47
-
48
- | Form | Example | Meaning |
49
- | --- | --- | --- |
50
- | plain word | `D100` | unsigned 16-bit word |
51
- | signed view | `D100:S` | signed 16-bit value |
52
- | dword view | `D200:D` | unsigned 32-bit value |
53
- | long view | `D300:L` | signed 32-bit value |
54
- | float view | `D200:F` | float32 value |
55
- | bit in word | `D50.3` | one bit inside a word |
56
- | counted word read | `D100,10` | 10 consecutive values |
57
- | counted bit read | `M1000,8` | 8 consecutive bits |
58
- | string view | `D100:STR,10` | UTF-8 string packed into words |
59
- | compatibility alias | `DSTR100,10` | alias for `D100:STR,10` |
60
-
61
- ## Addressing Notes
62
-
63
- - Start with `D` for the first smoke test.
64
- - `X`, `Y`, `B`, `W`, `SB`, `SW`, `DX`, and `DY` use hexadecimal device numbers.
65
- - Most other families use decimal numbers.
66
- - `.bit` is valid only on word devices such as `D50.3`.
67
- - `LTN`, `LSTN`, and `LCN` default to 32-bit current-value access in the public high-level nodes.
68
-
69
- ## Not Currently in the Public Surface
70
-
71
- - `LTS`
72
- - `LTC`
73
- - `LSTS`
74
- - `LSTC`
75
- - `LCS`
76
- - `LCC`
77
- - `LZ`
78
- - `G`
79
- - `HG`
80
-
81
- If a family is not listed above, do not treat it as publicly supported by the current Node-RED package.
1
+ # Supported PLC Registers
2
+
3
+ This page is the canonical public register/device table for the Node-RED high-level nodes.
4
+
5
+ ## Supported Bit Devices
6
+
7
+ | Family | Kind | Example | Numbering |
8
+ | --- | --- | --- | --- |
9
+ | `SM` | bit | `SM400` | decimal |
10
+ | `X` | bit | `X20` | `iq-f`: octal, otherwise hexadecimal |
11
+ | `Y` | bit | `Y20` | `iq-f`: octal, otherwise hexadecimal |
12
+ | `M` | bit | `M1000` | decimal |
13
+ | `L` | bit | `L100` | decimal |
14
+ | `F` | bit | `F10` | decimal |
15
+ | `V` | bit | `V10` | decimal |
16
+ | `B` | bit | `B20` | hexadecimal |
17
+ | `TS` | bit | `TS10` | decimal |
18
+ | `TC` | bit | `TC10` | decimal |
19
+ | `LTS` | bit | `LTS10` | decimal |
20
+ | `LTC` | bit | `LTC10` | decimal |
21
+ | `STS` | bit | `STS10` | decimal |
22
+ | `STC` | bit | `STC10` | decimal |
23
+ | `LSTS` | bit | `LSTS10` | decimal |
24
+ | `LSTC` | bit | `LSTC10` | decimal |
25
+ | `CS` | bit | `CS10` | decimal |
26
+ | `CC` | bit | `CC10` | decimal |
27
+ | `LCS` | bit | `LCS10` | decimal |
28
+ | `LCC` | bit | `LCC10` | decimal |
29
+ | `SB` | bit | `SB20` | hexadecimal |
30
+ | `DX` | bit | `DX20` | hexadecimal |
31
+ | `DY` | bit | `DY20` | hexadecimal |
32
+
33
+ ## Supported Word Devices
34
+
35
+ | Family | Kind | Example | Numbering |
36
+ | --- | --- | --- | --- |
37
+ | `SD` | word | `SD100` | decimal |
38
+ | `D` | word | `D100` | decimal |
39
+ | `W` | word | `W20` | hexadecimal |
40
+ | `TN` | word | `TN10` | decimal |
41
+ | `LTN` | word | `LTN10` | decimal |
42
+ | `STN` | word | `STN10` | decimal |
43
+ | `LSTN` | word | `LSTN10` | decimal |
44
+ | `CN` | word | `CN10` | decimal |
45
+ | `LCN` | word | `LCN10` | decimal |
46
+ | `SW` | word | `SW20` | hexadecimal |
47
+ | `Z` | word | `Z10` | decimal |
48
+ | `LZ` | dword | `LZ0` / `LZ1` | decimal |
49
+ | `R` | word | `R100` | decimal |
50
+ | `ZR` | word | `ZR100` | decimal |
51
+ | `RD` | word | `RD100` | decimal |
52
+
53
+ ## High-Level Address Forms
54
+
55
+ | Form | Example | Meaning |
56
+ | --- | --- | --- |
57
+ | plain word | `D100` | unsigned 16-bit word |
58
+ | signed view | `D100:S` or `D100:I` | signed 16-bit value (`I` normalizes to `S`) |
59
+ | dword view | `D200:D` | unsigned 32-bit value |
60
+ | long view | `D300:L` | signed 32-bit value |
61
+ | float view | `D200:F` | float32 value |
62
+ | bit in word | `D50.3` | one bit inside a word |
63
+ | counted word read | `D100,10` | 10 consecutive values |
64
+ | counted bit read | `M1000,8` | 8 consecutive bits |
65
+ | string view | `D100:STR,10` | UTF-8 string packed into words |
66
+ | compatibility alias | `DSTR100,10` | alias for `D100:STR,10` |
67
+
68
+ ## Addressing Notes
69
+
70
+ - Start with `D` for the first smoke test.
71
+ - `B`, `W`, `SB`, `SW`, `DX`, and `DY` use hexadecimal device numbers.
72
+ - `X` and `Y` require explicit `plcFamily`.
73
+ - `iq-f` interprets string `X/Y` addresses in octal.
74
+ - all other supported families interpret string `X/Y` addresses in hexadecimal.
75
+ - Most other families use decimal numbers.
76
+ - `.bit` is valid only on word devices such as `D50.3`.
77
+ - `LTN`, `LSTN`, and `LCN` default to 32-bit current-value access in the public high-level nodes.
78
+ - `LTS`, `LTC`, `LSTS`, and `LSTC` state reads use the long timer 4-word decode helpers.
79
+ - `LCS` and `LCC` state reads use direct bit read; high-level state writes use random bit write (`0x1402`).
80
+ - `LZ` defaults to 32-bit random DWord access in the public high-level nodes. On iQ-F, use `LZ0` or `LZ1`.
81
+
82
+ ## Family-Specific Unsupported Devices
83
+
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
+
86
+ | PLC type | Unsupported device codes in the public Node-RED surface |
87
+ | --- | --- |
88
+ | all families | `G`, `HG` |
89
+ | `iq-r`, `iq-l`, `mx-f`, `mx-r` | none beyond `G`, `HG` |
90
+ | `iq-f` | `V`, `LTS`, `LTC`, `LTN`, `LSTS`, `LSTC`, `LSTN`, `DX`, `DY`, `ZR`, `RD` |
91
+ | `qcpu` | `LTS`, `LTC`, `LTN`, `LSTS`, `LSTC`, `LSTN`, `LCS`, `LCC`, `LCN`, `LZ`, `RD` |
92
+ | `lcpu`, `qnu`, `qnudv` | `LTS`, `LTC`, `LTN`, `LSTS`, `LSTC`, `LSTN`, `LCS`, `LCC`, `LCN`, `LZ`, `RD` |
93
+
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
+
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
+
129
+ ## Not Currently in the Public Surface
130
+
131
+ - `G`
132
+ - `HG`
133
+
134
+ If a family is not listed above, do not treat it as publicly supported by the current Node-RED package.