node-red-contrib-example-scada 1.0.2 → 1.0.4
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/package.json +11 -9
- package/scada.html +64 -28
- package/scada.js +18 -23
package/package.json
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-red-contrib-example-scada",
|
|
3
|
-
"
|
|
3
|
+
"node-red": {
|
|
4
|
+
"nodes": {
|
|
5
|
+
"scada": "scada.js"
|
|
6
|
+
}
|
|
7
|
+
},
|
|
8
|
+
"version": "1.0.4",
|
|
4
9
|
"description": "",
|
|
5
10
|
"main": "scada.js",
|
|
6
11
|
"scripts": {
|
|
7
12
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
13
|
},
|
|
9
|
-
"node-red" : {
|
|
10
|
-
"nodes": {
|
|
11
|
-
"scada": "scada.js"
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
14
|
"author": "",
|
|
15
|
-
"license": "ISC"
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
"license": "ISC",
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"axios": "^1.7.9"
|
|
18
|
+
}
|
|
19
|
+
}
|
package/scada.html
CHANGED
|
@@ -3,19 +3,42 @@
|
|
|
3
3
|
category: 'scada',
|
|
4
4
|
color: '#a6bbcf',
|
|
5
5
|
defaults: {
|
|
6
|
-
broker: {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
broker: {
|
|
7
|
+
type: "http-broker",
|
|
8
|
+
required: true
|
|
9
|
+
},
|
|
10
|
+
name: {
|
|
11
|
+
value: ""
|
|
12
|
+
},
|
|
13
|
+
id: {
|
|
14
|
+
value: "",
|
|
15
|
+
required: true
|
|
16
|
+
},
|
|
17
|
+
WriteType: {
|
|
18
|
+
value: "",
|
|
19
|
+
required: true
|
|
20
|
+
},
|
|
21
|
+
WriteDevCode: {
|
|
22
|
+
value: "",
|
|
23
|
+
required: true
|
|
24
|
+
},
|
|
25
|
+
WriteCommand: {
|
|
26
|
+
value: "",
|
|
27
|
+
required: true
|
|
28
|
+
},
|
|
29
|
+
Value: {
|
|
30
|
+
value: "",
|
|
31
|
+
required: true
|
|
32
|
+
},
|
|
33
|
+
ValueType: {
|
|
34
|
+
value: "Short",
|
|
35
|
+
required: true
|
|
36
|
+
},
|
|
14
37
|
|
|
15
38
|
},
|
|
16
|
-
inputs: 1,
|
|
17
|
-
outputs: 1,
|
|
18
|
-
icon: 'file.png',
|
|
39
|
+
inputs: 1, // 一个输入端口
|
|
40
|
+
outputs: 1, // 一个输出端口
|
|
41
|
+
icon: 'file.png', // 节点图标
|
|
19
42
|
label: function() {
|
|
20
43
|
return this.name || "设备标签写入";
|
|
21
44
|
},
|
|
@@ -24,33 +47,46 @@
|
|
|
24
47
|
});
|
|
25
48
|
|
|
26
49
|
|
|
27
|
-
RED.nodes.registerType('http-broker',{
|
|
50
|
+
RED.nodes.registerType('http-broker', {
|
|
28
51
|
category: 'config',
|
|
29
52
|
defaults: {
|
|
30
|
-
host: {
|
|
31
|
-
|
|
53
|
+
host: {
|
|
54
|
+
value: "localhost",
|
|
55
|
+
required: true
|
|
56
|
+
},
|
|
57
|
+
port: {
|
|
58
|
+
value: 1234,
|
|
59
|
+
required: true,
|
|
60
|
+
validate: RED.validators.number()
|
|
61
|
+
},
|
|
32
62
|
},
|
|
33
63
|
label: function() {
|
|
34
|
-
return
|
|
64
|
+
return this.host + ":" + this.port;
|
|
35
65
|
}
|
|
36
66
|
});
|
|
37
67
|
|
|
38
68
|
RED.nodes.registerType('获取单个设备采集值', {
|
|
39
|
-
category: 'scada',
|
|
40
|
-
color: '#a6bbcf',
|
|
69
|
+
category: 'scada', // 节点类别
|
|
70
|
+
color: '#a6bbcf', // 节点颜色
|
|
41
71
|
defaults: {
|
|
42
|
-
broker: {
|
|
43
|
-
|
|
44
|
-
|
|
72
|
+
broker: {
|
|
73
|
+
type: "http-broker",
|
|
74
|
+
required: true
|
|
75
|
+
},
|
|
76
|
+
name: {
|
|
77
|
+
value: ''
|
|
78
|
+
}, // 节点名称
|
|
79
|
+
deviceCode: {
|
|
80
|
+
value: ''
|
|
81
|
+
} // 用户输入的 deviceCode
|
|
45
82
|
},
|
|
46
|
-
inputs: 1,
|
|
47
|
-
outputs: 1,
|
|
48
|
-
icon: 'file.png',
|
|
49
|
-
label: function() {
|
|
50
|
-
return this.name || '获取单个设备采集值';
|
|
83
|
+
inputs: 1, // 一个输入端口
|
|
84
|
+
outputs: 1, // 一个输出端口
|
|
85
|
+
icon: 'file.png', // 节点图标
|
|
86
|
+
label: function() { // 标签显示
|
|
87
|
+
return this.name || '获取单个设备采集值'; // 如果有名称,则显示名称,否则显示默认名称
|
|
51
88
|
}
|
|
52
89
|
});
|
|
53
|
-
|
|
54
90
|
</script>
|
|
55
91
|
|
|
56
92
|
<script type="text/html" data-template-name="设备标签写入">
|
|
@@ -71,7 +107,7 @@
|
|
|
71
107
|
|
|
72
108
|
<div class="form-row">
|
|
73
109
|
<label for="node-input-id"><i class="fa fa-tag"></i> ID格式:</label>
|
|
74
|
-
<select id="node-input-id" class="node-input"
|
|
110
|
+
<select id="node-input-id" class="node-input">
|
|
75
111
|
<option value="YYYYMMDD">YYYYMMDD</option>
|
|
76
112
|
<option value="HHmmss">HHmmss</option>
|
|
77
113
|
<option value="YYYYMMDDHHmmss">YYYYMMDDHHmmss</option>
|
|
@@ -80,7 +116,7 @@
|
|
|
80
116
|
|
|
81
117
|
<div class="form-row">
|
|
82
118
|
<label for="node-input-WriteType"><i class="fa fa-tag"></i> ID格式:</label>
|
|
83
|
-
<select id="node-input-WriteType" class="node-input"
|
|
119
|
+
<select id="node-input-WriteType" class="node-input">
|
|
84
120
|
<option value="1">标签写入</option>
|
|
85
121
|
<option value="2">地址写入</option>
|
|
86
122
|
</select>
|
package/scada.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
2
1
|
module.exports = function(RED) {
|
|
3
2
|
|
|
4
3
|
//设备标签写入配置
|
|
5
4
|
// 创建请求
|
|
6
5
|
const axios = require('axios');
|
|
6
|
+
|
|
7
7
|
function WriteDeviceConfigNode(config) {
|
|
8
8
|
RED.nodes.createNode(this, config);
|
|
9
9
|
var node = this;
|
|
@@ -33,7 +33,7 @@ module.exports = function(RED) {
|
|
|
33
33
|
|
|
34
34
|
// 处理输入消息
|
|
35
35
|
this.on('input', function(msg) {
|
|
36
|
-
var id1 =
|
|
36
|
+
var id1 = msg.id || config.id;
|
|
37
37
|
var id = getCurrentFormattedDate(id1);
|
|
38
38
|
var WriteType = msg.WriteType || config.WriteType;
|
|
39
39
|
var WriteDevCode = msg.WriteDevCode || config.WriteDevCode;
|
|
@@ -53,20 +53,20 @@ module.exports = function(RED) {
|
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
// 设置 API 请求的 URL
|
|
56
|
-
var
|
|
56
|
+
var broker = RED.nodes.getNode(config.broker);
|
|
57
57
|
const url = "http://" + broker.host + ":" + broker.port + "/api/ScadaConfig/WriteDevices";
|
|
58
58
|
axios.post(url, payload)
|
|
59
59
|
.then(response => {
|
|
60
|
-
if(response.data.code == 200){
|
|
60
|
+
if (response.data.code == 200) {
|
|
61
61
|
msg.payload = response.data;
|
|
62
62
|
node.send(msg);
|
|
63
63
|
node.status({ fill: "green", shape: "dot", text: "Success" });
|
|
64
64
|
|
|
65
|
-
}else {
|
|
65
|
+
} else {
|
|
66
66
|
node.error("Request failed: " + response.data.message);
|
|
67
|
-
node.status({fill: "red", shape: "ring", text: "Error"});
|
|
67
|
+
node.status({ fill: "red", shape: "ring", text: "Error" });
|
|
68
68
|
}
|
|
69
|
-
|
|
69
|
+
})
|
|
70
70
|
.catch(error => {
|
|
71
71
|
// 请求失败,记录错误
|
|
72
72
|
node.error("Request failed: " + error.message, msg);
|
|
@@ -80,20 +80,16 @@ module.exports = function(RED) {
|
|
|
80
80
|
RED.nodes.registerType('设备标签写入', WriteDeviceConfigNode);
|
|
81
81
|
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
//http-broker配置
|
|
83
|
+
//http-broker配置
|
|
89
84
|
function RemoteServerNode(n) {
|
|
90
|
-
RED.nodes.createNode(this,n);
|
|
85
|
+
RED.nodes.createNode(this, n);
|
|
91
86
|
this.host = n.host;
|
|
92
87
|
this.port = n.port;
|
|
93
88
|
}
|
|
94
|
-
RED.nodes.registerType("http-broker",RemoteServerNode);
|
|
95
89
|
|
|
96
|
-
|
|
90
|
+
RED.nodes.registerType("http-broker", RemoteServerNode);
|
|
91
|
+
|
|
92
|
+
//获取单个设备采集值配置
|
|
97
93
|
function MyHttpNode(config) {
|
|
98
94
|
RED.nodes.createNode(this, config);
|
|
99
95
|
var node = this;
|
|
@@ -103,7 +99,7 @@ module.exports = function(RED) {
|
|
|
103
99
|
|
|
104
100
|
|
|
105
101
|
// 设置 API 请求的 URL
|
|
106
|
-
var
|
|
102
|
+
var broker = RED.nodes.getNode(config.broker);
|
|
107
103
|
var baseURL = "http://" + broker.host + ":" + broker.port + '/api/ScadaConfig/GetDevice?deviceCode={{deviceCode}}';
|
|
108
104
|
|
|
109
105
|
// 从消息中获取 deviceCode 或从节点配置中获取
|
|
@@ -121,14 +117,14 @@ module.exports = function(RED) {
|
|
|
121
117
|
// 使用 axios 发送 GET 请求
|
|
122
118
|
axios.get(url)
|
|
123
119
|
.then(response => {
|
|
124
|
-
if(response.data.code == 200 && response.data.msg != "null"){
|
|
120
|
+
if (response.data.code == 200 && response.data.msg != "null") {
|
|
125
121
|
msg.payload = response.data;
|
|
126
122
|
node.send(msg);
|
|
127
123
|
node.status({ fill: "green", shape: "dot", text: "Success" });
|
|
128
124
|
|
|
129
|
-
}else {
|
|
130
|
-
node.error("Request failed: 找不到该设备"
|
|
131
|
-
node.status({fill: "red", shape: "ring", text: "Error"});
|
|
125
|
+
} else {
|
|
126
|
+
node.error("Request failed: 找不到该设备");
|
|
127
|
+
node.status({ fill: "red", shape: "ring", text: "Error" });
|
|
132
128
|
}
|
|
133
129
|
})
|
|
134
130
|
.catch(error => {
|
|
@@ -146,5 +142,4 @@ module.exports = function(RED) {
|
|
|
146
142
|
// 注册自定义节点
|
|
147
143
|
RED.nodes.registerType("获取单个设备采集值", MyHttpNode);
|
|
148
144
|
|
|
149
|
-
};
|
|
150
|
-
|
|
145
|
+
};
|