node-red-contrib-modbus-tcp-full-avd 1.0.0
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/README.md +229 -0
- package/modbus-tcp.html +312 -0
- package/modbus-tcp.js +1102 -0
- package/package.json +40 -0
package/README.md
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# node-red-contrib-modbus-tcp-full-avd
|
|
2
|
+
|
|
3
|
+
Volledige MODBUS TCP node voor Node-RED met ondersteuning voor alle MODBUS functies en het volledige adresbereik (0-65535).
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- ✅ **TCP Client en Server modes** - Verbind als client of luister als server
|
|
8
|
+
- ✅ **MODBUS Client en Server modes** - Verzend requests of reageer op requests
|
|
9
|
+
- ✅ **Alle MODBUS functies** - Ondersteuning voor functie codes 01-24
|
|
10
|
+
- ✅ **Volledige adresbereik** - 0-65535 voor alle data types
|
|
11
|
+
- ✅ **Automatische reconnect** - Herverbind automatisch bij verbindingsverlies
|
|
12
|
+
- ✅ **Retry mechanisme** - Configureerbare retries bij fouten
|
|
13
|
+
- ✅ **Exception handling** - Volledige ondersteuning voor MODBUS exception codes
|
|
14
|
+
|
|
15
|
+
## Installatie
|
|
16
|
+
|
|
17
|
+
### Via Node-RED Palette Manager
|
|
18
|
+
|
|
19
|
+
1. Open Node-RED
|
|
20
|
+
2. Ga naar Menu → Manage palette
|
|
21
|
+
3. Klik op "Install" tab
|
|
22
|
+
4. Zoek naar "node-red-contrib-modbus-tcp-full-avd"
|
|
23
|
+
5. Klik op "Install"
|
|
24
|
+
|
|
25
|
+
### Via NPM
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npm install node-red-contrib-modbus-tcp-full-avd
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Handmatige Installatie
|
|
32
|
+
|
|
33
|
+
1. Download of clone deze repository
|
|
34
|
+
2. Navigeer naar de Node-RED user directory (meestal `~/.node-red`)
|
|
35
|
+
3. Kopieer de bestanden naar `~/.node-red/node_modules/node-red-contrib-modbus-tcp-full-avd`
|
|
36
|
+
4. Herstart Node-RED
|
|
37
|
+
|
|
38
|
+
## Gebruik
|
|
39
|
+
|
|
40
|
+
### TCP Client + MODBUS Client (Meest Voorkomend)
|
|
41
|
+
|
|
42
|
+
Deze combinatie wordt gebruikt om data te lezen/schrijven van een MODBUS TCP server.
|
|
43
|
+
|
|
44
|
+
#### Configuratie
|
|
45
|
+
- **TCP Mode**: Client
|
|
46
|
+
- **Host**: IP-adres van de MODBUS server
|
|
47
|
+
- **Port**: Poort van de MODBUS server (standaard 502)
|
|
48
|
+
- **MODBUS Mode**: Client
|
|
49
|
+
- **Unit ID**: MODBUS Unit ID (standaard 1)
|
|
50
|
+
|
|
51
|
+
#### Voorbeeld: Read Holding Registers
|
|
52
|
+
|
|
53
|
+
```javascript
|
|
54
|
+
msg = {
|
|
55
|
+
function: 3,
|
|
56
|
+
address: 0,
|
|
57
|
+
quantity: 10
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
#### Voorbeeld: Write Single Register
|
|
62
|
+
|
|
63
|
+
```javascript
|
|
64
|
+
msg = {
|
|
65
|
+
function: 6,
|
|
66
|
+
address: 0,
|
|
67
|
+
value: 1234
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
#### Voorbeeld: Write Multiple Coils
|
|
72
|
+
|
|
73
|
+
```javascript
|
|
74
|
+
msg = {
|
|
75
|
+
function: 15,
|
|
76
|
+
address: 0,
|
|
77
|
+
values: [true, false, true, false]
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### TCP Server + MODBUS Server
|
|
82
|
+
|
|
83
|
+
Deze combinatie wordt gebruikt om MODBUS data aan te bieden aan clients.
|
|
84
|
+
|
|
85
|
+
#### Configuratie
|
|
86
|
+
- **TCP Mode**: Server
|
|
87
|
+
- **Port**: Poort om op te luisteren (standaard 502)
|
|
88
|
+
- **MODBUS Mode**: Server
|
|
89
|
+
- **Unit ID**: MODBUS Unit ID (standaard 1)
|
|
90
|
+
- **Max Connections**: Maximum aantal gelijktijdige verbindingen
|
|
91
|
+
|
|
92
|
+
#### Data Update
|
|
93
|
+
|
|
94
|
+
```javascript
|
|
95
|
+
msg = {
|
|
96
|
+
type: "holdingRegisters", // coils, discreteInputs, holdingRegisters, inputRegisters
|
|
97
|
+
address: 0,
|
|
98
|
+
value: 1234 // Single value
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Of voor meerdere waarden:
|
|
103
|
+
|
|
104
|
+
```javascript
|
|
105
|
+
msg = {
|
|
106
|
+
type: "holdingRegisters",
|
|
107
|
+
address: 0,
|
|
108
|
+
values: [1, 2, 3, 4, 5] // Array van waarden
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Ondersteunde MODBUS Functies
|
|
113
|
+
|
|
114
|
+
| Functie | Code | Beschrijving | Status |
|
|
115
|
+
|---------|------|--------------|--------|
|
|
116
|
+
| Read Coils | 01 | Leest discrete outputs | ✅ |
|
|
117
|
+
| Read Discrete Inputs | 02 | Leest discrete inputs | ✅ |
|
|
118
|
+
| Read Holding Registers | 03 | Leest holding registers | ✅ |
|
|
119
|
+
| Read Input Registers | 04 | Leest input registers | ✅ |
|
|
120
|
+
| Write Single Coil | 05 | Schrijft één coil | ✅ |
|
|
121
|
+
| Write Single Register | 06 | Schrijft één register | ✅ |
|
|
122
|
+
| Write Multiple Coils | 15 | Schrijft meerdere coils | ✅ |
|
|
123
|
+
| Write Multiple Registers | 16 | Schrijft meerdere registers | ✅ |
|
|
124
|
+
|
|
125
|
+
## Configuratie Opties
|
|
126
|
+
|
|
127
|
+
### TCP Instellingen
|
|
128
|
+
|
|
129
|
+
- **TCP Mode**: Client of Server
|
|
130
|
+
- **Host**: IP-adres (alleen Client mode)
|
|
131
|
+
- **Port**: TCP poort (standaard 502)
|
|
132
|
+
- **Reconnect Interval**: Interval voor reconnect bij verbindingsverlies (ms)
|
|
133
|
+
- **Connection Timeout**: Timeout voor verbinding (ms)
|
|
134
|
+
- **Max Connections**: Maximum aantal verbindingen (alleen Server mode)
|
|
135
|
+
|
|
136
|
+
### MODBUS Instellingen
|
|
137
|
+
|
|
138
|
+
- **MODBUS Mode**: Client of Server
|
|
139
|
+
- **Unit ID**: MODBUS Unit ID (0-255)
|
|
140
|
+
- **Byte Order**: Big Endian of Little Endian
|
|
141
|
+
- **Address Offset**: 0 (0-based) of 1 (1-based addressing)
|
|
142
|
+
|
|
143
|
+
### Client Instellingen
|
|
144
|
+
|
|
145
|
+
- **Request Timeout**: Timeout voor requests (ms)
|
|
146
|
+
- **Retry Count**: Aantal retries bij fouten
|
|
147
|
+
- **Retry Interval**: Interval tussen retries (ms)
|
|
148
|
+
|
|
149
|
+
## Input/Output Format
|
|
150
|
+
|
|
151
|
+
### Input (Client Mode)
|
|
152
|
+
|
|
153
|
+
```javascript
|
|
154
|
+
{
|
|
155
|
+
function: 1-24, // MODBUS functie code
|
|
156
|
+
address: 0, // Start adres
|
|
157
|
+
quantity: 10, // Aantal registers/coils (voor read)
|
|
158
|
+
value: 123, // Single value (voor write)
|
|
159
|
+
values: [1, 2, 3], // Multiple values (voor write)
|
|
160
|
+
unitId: 1, // Optioneel: Unit ID override
|
|
161
|
+
timeout: 5000 // Optioneel: Timeout override
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Output (Client Mode)
|
|
166
|
+
|
|
167
|
+
```javascript
|
|
168
|
+
{
|
|
169
|
+
function: 3, // MODBUS functie code
|
|
170
|
+
address: 0, // Start adres
|
|
171
|
+
quantity: 10, // Aantal gelezen items
|
|
172
|
+
data: [1, 2, 3, ...], // Gelezen data array
|
|
173
|
+
timestamp: Date, // Response timestamp
|
|
174
|
+
responseTime: 45 // Response tijd in ms
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Error Output
|
|
179
|
+
|
|
180
|
+
```javascript
|
|
181
|
+
{
|
|
182
|
+
error: {
|
|
183
|
+
code: 2, // Exception code
|
|
184
|
+
message: "Illegal Data Address",
|
|
185
|
+
function: 3, // Requested functie
|
|
186
|
+
address: 0 // Requested adres
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Adresbereik
|
|
192
|
+
|
|
193
|
+
- **Coils**: 0 - 65535
|
|
194
|
+
- **Discrete Inputs**: 0 - 65535
|
|
195
|
+
- **Holding Registers**: 0 - 65535
|
|
196
|
+
- **Input Registers**: 0 - 65535
|
|
197
|
+
|
|
198
|
+
## Troubleshooting
|
|
199
|
+
|
|
200
|
+
### Verbindingsproblemen
|
|
201
|
+
|
|
202
|
+
- Controleer of de host en poort correct zijn geconfigureerd
|
|
203
|
+
- Controleer firewall instellingen
|
|
204
|
+
- Controleer of de MODBUS server actief is
|
|
205
|
+
|
|
206
|
+
### Timeout Errors
|
|
207
|
+
|
|
208
|
+
- Verhoog de request timeout waarde
|
|
209
|
+
- Controleer netwerk latency
|
|
210
|
+
- Controleer of de MODBUS server reageert
|
|
211
|
+
|
|
212
|
+
### Exception Codes
|
|
213
|
+
|
|
214
|
+
- **01**: Illegal Function - Functie code niet ondersteund
|
|
215
|
+
- **02**: Illegal Data Address - Adres buiten bereik
|
|
216
|
+
- **03**: Illegal Data Value - Ongeldige waarde
|
|
217
|
+
- **04**: Server Device Failure - Server fout
|
|
218
|
+
|
|
219
|
+
## Licentie
|
|
220
|
+
|
|
221
|
+
MIT
|
|
222
|
+
|
|
223
|
+
## Auteur
|
|
224
|
+
|
|
225
|
+
ModBUSTester Project
|
|
226
|
+
|
|
227
|
+
## Versie
|
|
228
|
+
|
|
229
|
+
1.0.0
|
package/modbus-tcp.html
ADDED
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
<script type="text/javascript">
|
|
2
|
+
RED.nodes.registerType('modbus-tcp-avd', {
|
|
3
|
+
category: 'network',
|
|
4
|
+
color: '#E6E0F8',
|
|
5
|
+
defaults: {
|
|
6
|
+
name: { value: "" },
|
|
7
|
+
tcpMode: { value: "client", required: true },
|
|
8
|
+
host: { value: "127.0.0.1", required: false },
|
|
9
|
+
port: { value: 502, required: true, validate: RED.validators.number() },
|
|
10
|
+
reconnectInterval: { value: 5000, required: true, validate: RED.validators.number() },
|
|
11
|
+
connectionTimeout: { value: 10000, required: true, validate: RED.validators.number() },
|
|
12
|
+
maxConnections: { value: 10, required: true, validate: RED.validators.number() },
|
|
13
|
+
modbusMode: { value: "client", required: true },
|
|
14
|
+
unitId: { value: 1, required: true, validate: function(v) { return v >= 0 && v <= 255; } },
|
|
15
|
+
byteOrder: { value: "bigEndian", required: true },
|
|
16
|
+
addressOffset: { value: 0, required: true, validate: RED.validators.number() },
|
|
17
|
+
requestTimeout: { value: 5000, required: true, validate: RED.validators.number() },
|
|
18
|
+
retryCount: { value: 3, required: true, validate: RED.validators.number() },
|
|
19
|
+
retryInterval: { value: 1000, required: true, validate: RED.validators.number() },
|
|
20
|
+
showData: { value: false, required: false },
|
|
21
|
+
debugMode: { value: false, required: false },
|
|
22
|
+
generateTestData: { value: false, required: false },
|
|
23
|
+
testDataPattern: { value: "incrementing", required: false }
|
|
24
|
+
},
|
|
25
|
+
inputs: 1,
|
|
26
|
+
outputs: 1,
|
|
27
|
+
icon: "bridge.png",
|
|
28
|
+
label: function() {
|
|
29
|
+
return this.name || "modbus-tcp-avd";
|
|
30
|
+
},
|
|
31
|
+
labelStyle: function() {
|
|
32
|
+
return this.name ? "node_label_italic" : "";
|
|
33
|
+
},
|
|
34
|
+
oneditprepare: function() {
|
|
35
|
+
// Show/hide fields based on TCP mode
|
|
36
|
+
$("#node-input-tcpMode").on("change", function() {
|
|
37
|
+
var tcpMode = $(this).val();
|
|
38
|
+
if (tcpMode === "client") {
|
|
39
|
+
$("#node-input-host-row").show();
|
|
40
|
+
$("#node-input-maxConnections-row").hide();
|
|
41
|
+
} else {
|
|
42
|
+
$("#node-input-host-row").hide();
|
|
43
|
+
$("#node-input-maxConnections-row").show();
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// Show/hide fields based on MODBUS mode
|
|
48
|
+
$("#node-input-modbusMode").on("change", function() {
|
|
49
|
+
var modbusMode = $(this).val();
|
|
50
|
+
if (modbusMode === "client") {
|
|
51
|
+
$("#node-input-requestTimeout-row").show();
|
|
52
|
+
$("#node-input-retryCount-row").show();
|
|
53
|
+
$("#node-input-retryInterval-row").show();
|
|
54
|
+
} else {
|
|
55
|
+
$("#node-input-requestTimeout-row").hide();
|
|
56
|
+
$("#node-input-retryCount-row").hide();
|
|
57
|
+
$("#node-input-retryInterval-row").hide();
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// Trigger initial visibility
|
|
62
|
+
$("#node-input-tcpMode").trigger("change");
|
|
63
|
+
$("#node-input-modbusMode").trigger("change");
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
</script>
|
|
67
|
+
|
|
68
|
+
<script type="text/html" data-template-name="modbus-tcp-avd">
|
|
69
|
+
<div class="form-row">
|
|
70
|
+
<label for="node-input-name"><i class="icon-tag"></i> Naam</label>
|
|
71
|
+
<input type="text" id="node-input-name" placeholder="Naam">
|
|
72
|
+
</div>
|
|
73
|
+
|
|
74
|
+
<div class="form-tips">
|
|
75
|
+
<b>TCP Instellingen</b>
|
|
76
|
+
</div>
|
|
77
|
+
|
|
78
|
+
<div class="form-row">
|
|
79
|
+
<label for="node-input-tcpMode"><i class="fa fa-exchange"></i> TCP Mode</label>
|
|
80
|
+
<select id="node-input-tcpMode">
|
|
81
|
+
<option value="client">Client</option>
|
|
82
|
+
<option value="server">Server</option>
|
|
83
|
+
</select>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<div class="form-row" id="node-input-host-row">
|
|
87
|
+
<label for="node-input-host"><i class="fa fa-server"></i> Host</label>
|
|
88
|
+
<input type="text" id="node-input-host" placeholder="127.0.0.1">
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
<div class="form-row">
|
|
92
|
+
<label for="node-input-port"><i class="fa fa-plug"></i> Poort</label>
|
|
93
|
+
<input type="number" id="node-input-port" placeholder="502" min="1" max="65535">
|
|
94
|
+
</div>
|
|
95
|
+
|
|
96
|
+
<div class="form-row" id="node-input-reconnectInterval-row">
|
|
97
|
+
<label for="node-input-reconnectInterval"><i class="fa fa-refresh"></i> Reconnect Interval (ms)</label>
|
|
98
|
+
<input type="number" id="node-input-reconnectInterval" placeholder="5000" min="1000">
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<div class="form-row" id="node-input-connectionTimeout-row">
|
|
102
|
+
<label for="node-input-connectionTimeout"><i class="fa fa-clock-o"></i> Connection Timeout (ms)</label>
|
|
103
|
+
<input type="number" id="node-input-connectionTimeout" placeholder="10000" min="1000">
|
|
104
|
+
</div>
|
|
105
|
+
|
|
106
|
+
<div class="form-row" id="node-input-maxConnections-row">
|
|
107
|
+
<label for="node-input-maxConnections"><i class="fa fa-users"></i> Max Verbindingen</label>
|
|
108
|
+
<input type="number" id="node-input-maxConnections" placeholder="10" min="1" max="100">
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
<div class="form-tips">
|
|
112
|
+
<b>MODBUS Instellingen</b>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<div class="form-row">
|
|
116
|
+
<label for="node-input-modbusMode"><i class="fa fa-exchange"></i> MODBUS Mode</label>
|
|
117
|
+
<select id="node-input-modbusMode">
|
|
118
|
+
<option value="client">Client</option>
|
|
119
|
+
<option value="server">Server</option>
|
|
120
|
+
</select>
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
<div class="form-row">
|
|
124
|
+
<label for="node-input-unitId"><i class="fa fa-id-card"></i> Unit ID</label>
|
|
125
|
+
<input type="number" id="node-input-unitId" placeholder="1" min="0" max="255">
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<div class="form-row">
|
|
129
|
+
<label for="node-input-byteOrder"><i class="fa fa-sort"></i> Byte Order</label>
|
|
130
|
+
<select id="node-input-byteOrder">
|
|
131
|
+
<option value="bigEndian">Big Endian</option>
|
|
132
|
+
<option value="littleEndian">Little Endian</option>
|
|
133
|
+
</select>
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
<div class="form-row">
|
|
137
|
+
<label for="node-input-addressOffset"><i class="fa fa-map-marker"></i> Address Offset</label>
|
|
138
|
+
<input type="number" id="node-input-addressOffset" placeholder="0" min="0" max="1">
|
|
139
|
+
<span class="form-tips">0 = 0-based, 1 = 1-based addressing</span>
|
|
140
|
+
</div>
|
|
141
|
+
|
|
142
|
+
<div class="form-tips">
|
|
143
|
+
<b>Client Instellingen</b>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<div class="form-row" id="node-input-requestTimeout-row">
|
|
147
|
+
<label for="node-input-requestTimeout"><i class="fa fa-hourglass-half"></i> Request Timeout (ms)</label>
|
|
148
|
+
<input type="number" id="node-input-requestTimeout" placeholder="5000" min="1000">
|
|
149
|
+
</div>
|
|
150
|
+
|
|
151
|
+
<div class="form-row" id="node-input-retryCount-row">
|
|
152
|
+
<label for="node-input-retryCount"><i class="fa fa-repeat"></i> Retry Count</label>
|
|
153
|
+
<input type="number" id="node-input-retryCount" placeholder="3" min="0" max="10">
|
|
154
|
+
</div>
|
|
155
|
+
|
|
156
|
+
<div class="form-row" id="node-input-retryInterval-row">
|
|
157
|
+
<label for="node-input-retryInterval"><i class="fa fa-clock-o"></i> Retry Interval (ms)</label>
|
|
158
|
+
<input type="number" id="node-input-retryInterval" placeholder="1000" min="100">
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
<div class="form-tips">
|
|
162
|
+
<b>Data Weergave</b>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
<div class="form-row">
|
|
166
|
+
<label for="node-input-showData"><i class="fa fa-eye"></i> Toon Data in Status</label>
|
|
167
|
+
<input type="checkbox" id="node-input-showData" style="width: auto; vertical-align: top;">
|
|
168
|
+
<label for="node-input-showData" style="width: 70%; display: inline-block;">Toon laatste register waarden in node status</label>
|
|
169
|
+
</div>
|
|
170
|
+
|
|
171
|
+
<div class="form-row">
|
|
172
|
+
<label for="node-input-debugMode"><i class="fa fa-bug"></i> Debug Mode</label>
|
|
173
|
+
<input type="checkbox" id="node-input-debugMode" style="width: auto; vertical-align: top;">
|
|
174
|
+
<label for="node-input-debugMode" style="width: 70%; display: inline-block;">Log alle data naar debug panel</label>
|
|
175
|
+
</div>
|
|
176
|
+
|
|
177
|
+
<div class="form-tips" id="node-input-testData-section" style="display: none;">
|
|
178
|
+
<b>Test Data (Server Mode)</b>
|
|
179
|
+
</div>
|
|
180
|
+
|
|
181
|
+
<div class="form-row" id="node-input-generateTestData-row" style="display: none;">
|
|
182
|
+
<label for="node-input-generateTestData"><i class="fa fa-flask"></i> Genereer Test Data bij Start</label>
|
|
183
|
+
<input type="checkbox" id="node-input-generateTestData" style="width: auto; vertical-align: top;">
|
|
184
|
+
<label for="node-input-generateTestData" style="width: 70%; display: inline-block;">Vul registers automatisch met testdata</label>
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
<div class="form-row" id="node-input-testDataPattern-row" style="display: none;">
|
|
188
|
+
<label for="node-input-testDataPattern"><i class="fa fa-chart-line"></i> Test Data Patroon</label>
|
|
189
|
+
<select id="node-input-testDataPattern">
|
|
190
|
+
<option value="incrementing">Incrementing (0, 1, 2, 3...)</option>
|
|
191
|
+
<option value="random">Random (0-65535)</option>
|
|
192
|
+
<option value="sine">Sine Wave</option>
|
|
193
|
+
<option value="square">Square Wave</option>
|
|
194
|
+
<option value="alternating">Alternating (0, 1, 0, 1...)</option>
|
|
195
|
+
</select>
|
|
196
|
+
</div>
|
|
197
|
+
|
|
198
|
+
<script type="text/javascript">
|
|
199
|
+
// Show/hide test data options based on MODBUS mode
|
|
200
|
+
$("#node-input-modbusMode").on("change", function() {
|
|
201
|
+
var modbusMode = $(this).val();
|
|
202
|
+
if (modbusMode === "server") {
|
|
203
|
+
$("#node-input-testData-section").show();
|
|
204
|
+
$("#node-input-generateTestData-row").show();
|
|
205
|
+
$("#node-input-testDataPattern-row").show();
|
|
206
|
+
} else {
|
|
207
|
+
$("#node-input-testData-section").hide();
|
|
208
|
+
$("#node-input-generateTestData-row").hide();
|
|
209
|
+
$("#node-input-testDataPattern-row").hide();
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
</script>
|
|
213
|
+
|
|
214
|
+
<script type="text/html" data-help-name="modbus-tcp-avd">
|
|
215
|
+
<p>Volledige MODBUS TCP node met ondersteuning voor alle MODBUS functies en het volledige adresbereik.</p>
|
|
216
|
+
|
|
217
|
+
<h3>Inputs</h3>
|
|
218
|
+
<dl class="message-properties">
|
|
219
|
+
<dt>payload <span class="property-type">object</span></dt>
|
|
220
|
+
<dd>MODBUS request object met de volgende eigenschappen:</dd>
|
|
221
|
+
<dd>
|
|
222
|
+
<ul>
|
|
223
|
+
<li><code>function</code> - MODBUS functie code (1-24)</li>
|
|
224
|
+
<li><code>address</code> - Start adres (0-65535)</li>
|
|
225
|
+
<li><code>quantity</code> - Aantal registers/coils (voor read operaties)</li>
|
|
226
|
+
<li><code>value</code> - Waarde (voor single write operaties)</li>
|
|
227
|
+
<li><code>values</code> - Array van waarden (voor multiple write operaties)</li>
|
|
228
|
+
<li><code>unitId</code> - Optioneel: Unit ID override</li>
|
|
229
|
+
<li><code>timeout</code> - Optioneel: Timeout override</li>
|
|
230
|
+
</ul>
|
|
231
|
+
</dd>
|
|
232
|
+
</dl>
|
|
233
|
+
|
|
234
|
+
<h3>Outputs</h3>
|
|
235
|
+
<dl class="message-properties">
|
|
236
|
+
<dt>payload <span class="property-type">object</span></dt>
|
|
237
|
+
<dd>MODBUS response object met de volgende eigenschappen:</dd>
|
|
238
|
+
<dd>
|
|
239
|
+
<ul>
|
|
240
|
+
<li><code>function</code> - MODBUS functie code</li>
|
|
241
|
+
<li><code>address</code> - Start adres</li>
|
|
242
|
+
<li><code>data</code> - Gelezen data array</li>
|
|
243
|
+
<li><code>error</code> - Error object indien fout opgetreden</li>
|
|
244
|
+
</ul>
|
|
245
|
+
</dd>
|
|
246
|
+
</dl>
|
|
247
|
+
|
|
248
|
+
<h3>Details</h3>
|
|
249
|
+
<p>Deze node ondersteunt:</p>
|
|
250
|
+
<ul>
|
|
251
|
+
<li>TCP Client en Server modes</li>
|
|
252
|
+
<li>MODBUS Client en Server modes</li>
|
|
253
|
+
<li>Alle MODBUS functie codes (01-24)</li>
|
|
254
|
+
<li>Volledige adresbereik (0-65535)</li>
|
|
255
|
+
<li>Automatische reconnect en retry mechanismen</li>
|
|
256
|
+
</ul>
|
|
257
|
+
|
|
258
|
+
<h3>Voorbeelden</h3>
|
|
259
|
+
<h4>Read Holding Registers</h4>
|
|
260
|
+
<pre><code>{
|
|
261
|
+
"function": 3,
|
|
262
|
+
"address": 0,
|
|
263
|
+
"quantity": 10
|
|
264
|
+
}</code></pre>
|
|
265
|
+
|
|
266
|
+
<h4>Write Single Register</h4>
|
|
267
|
+
<pre><code>{
|
|
268
|
+
"function": 6,
|
|
269
|
+
"address": 0,
|
|
270
|
+
"value": 1234
|
|
271
|
+
}</code></pre>
|
|
272
|
+
|
|
273
|
+
<h4>Write Multiple Coils</h4>
|
|
274
|
+
<pre><code>{
|
|
275
|
+
"function": 15,
|
|
276
|
+
"address": 0,
|
|
277
|
+
"values": [true, false, true, false]
|
|
278
|
+
}</code></pre>
|
|
279
|
+
|
|
280
|
+
<h4>Toon Alle Register Data (Server Mode)</h4>
|
|
281
|
+
<pre><code>{
|
|
282
|
+
"action": "showData"
|
|
283
|
+
}</code></pre>
|
|
284
|
+
<p>Geeft een overzicht van alle register data in de server.</p>
|
|
285
|
+
|
|
286
|
+
<h4>Lees en Toon Register Data (Client Mode)</h4>
|
|
287
|
+
<pre><code>{
|
|
288
|
+
"action": "readData",
|
|
289
|
+
"readType": "holdingRegisters",
|
|
290
|
+
"address": 0,
|
|
291
|
+
"quantity": 10
|
|
292
|
+
}</code></pre>
|
|
293
|
+
<p>Leest register data en geeft deze terug met een dataMap. readType kan zijn: "coils", "discreteInputs", "holdingRegisters", of "inputRegisters".</p>
|
|
294
|
+
|
|
295
|
+
<h4>Genereer Test Data (Server Mode)</h4>
|
|
296
|
+
<pre><code>{
|
|
297
|
+
"action": "generateTestData",
|
|
298
|
+
"pattern": "incrementing",
|
|
299
|
+
"dataType": "holdingRegisters",
|
|
300
|
+
"address": 0,
|
|
301
|
+
"quantity": 100
|
|
302
|
+
}</code></pre>
|
|
303
|
+
<p>Genereert testdata in de server registers. Patronen: "incrementing", "random", "sine", "square", "alternating". Data types: "coils", "discreteInputs", "holdingRegisters", "inputRegisters".</p>
|
|
304
|
+
|
|
305
|
+
<h3>Data Weergave</h3>
|
|
306
|
+
<p>De node kan register data op verschillende manieren zichtbaar maken:</p>
|
|
307
|
+
<ul>
|
|
308
|
+
<li><b>Status Weergave</b>: Schakel "Toon Data in Status" in om de laatste waarden in de node status te zien</li>
|
|
309
|
+
<li><b>Debug Mode</b>: Schakel "Debug Mode" in om alle data naar het debug panel te loggen</li>
|
|
310
|
+
<li><b>Show Data Actie</b>: Gebruik <code>{"action": "showData"}</code> om alle server register data te bekijken</li>
|
|
311
|
+
</ul>
|
|
312
|
+
</script>
|