Skip to content
This repository was archived by the owner on Feb 18, 2026. It is now read-only.

Commit 9846466

Browse files
committed
update readme
1 parent dfdeef5 commit 9846466

2 files changed

Lines changed: 65 additions & 14 deletions

File tree

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Mi5 Node-Module (-Interface)
22

3+
This is work in progress..., there is a mock OPC UA server for testing (./test/mock/opcua-server.js)
4+
Roadmap:
5+
* update node-opcua version
6+
37
## Installation
48

59
`git clone https://github.com/ProjectMi5/NodeModule`

test/mock/opcua-server.js

Lines changed: 61 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,43 @@ function construct_my_address_space(server) {
7979
createOpcuaVariable('Recipe[1]', 'MI5.Recipe[1].Description', 'String', 'Recipe 1 description');
8080
createOpcuaVariable('Recipe[1]', 'MI5.Recipe[1].Name', 'String', 'XTS two Round');
8181
createOpcuaVariable('Recipe[1]', 'MI5.Recipe[1].RecipeID', 'Int16', 10002);
82+
83+
// Order-tool
84+
server.engine.addFolder("Mi5", {browseName: "Order"});
85+
server.engine.addFolder("Order", {browseName: "Order[0]"});
86+
var localPending = false;
87+
function pendingSet(variant){
88+
localPending = variant.value; // boolean cast
89+
// Reset false after it has been set to true
90+
if(variant.value == true){
91+
setTimeout(function(){
92+
localPending = false;
93+
},1000);
94+
}
95+
return opcua.StatusCodes.Good;
96+
}
97+
function pendingGet(){
98+
return new opcua.Variant({dataType: opcua.DataType['Boolean'], value: localPending });
99+
}
100+
createOpcuaVariable('Order[0]', 'MI5.Order[0].Pending', 'Boolean', false, pendingSet, pendingGet);
101+
createOpcuaVariable('Order[0]', 'MI5.Order[0].Locked', 'Boolean', false);
102+
createOpcuaVariable('Order[0]', 'MI5.Order[0].Name', 'String', '');
103+
createOpcuaVariable('Order[0]', 'MI5.Order[0].RecipeID', 'Int16', 0);
104+
createOpcuaVariable('Order[0]', 'MI5.Order[0].TaskID', 'Int16', 0);
105+
server.engine.addFolder("Order[0]", {browseName: "UserParameter"});
106+
server.engine.addFolder("UserParameter", {browseName: "UserParameter[0]"});
107+
createOpcuaVariable('UserParameter[0]', 'MI5.Order[0].UserParameter[0].Value', 'Int16', 0);
108+
server.engine.addFolder("UserParameter", {browseName: "UserParameter[1]"});
109+
createOpcuaVariable('UserParameter[1]', 'MI5.Order[0].UserParameter[1].Value', 'Int16', 0);
110+
server.engine.addFolder("UserParameter", {browseName: "UserParameter[2]"});
111+
createOpcuaVariable('UserParameter[2]', 'MI5.Order[0].UserParameter[2].Value', 'Int16', 0);
112+
server.engine.addFolder("UserParameter", {browseName: "UserParameter[3]"});
113+
createOpcuaVariable('UserParameter[3]', 'MI5.Order[0].UserParameter[3].Value', 'Int16', 0);
114+
server.engine.addFolder("UserParameter", {browseName: "UserParameter[4]"});
115+
createOpcuaVariable('UserParameter[4]', 'MI5.Order[0].UserParameter[4].Value', 'Int16', 0);
116+
server.engine.addFolder("UserParameter", {browseName: "UserParameter[5]"});
117+
createOpcuaVariable('UserParameter[5]', 'MI5.Order[0].UserParameter[5].Value', 'Int16', 0);
118+
82119
}
83120

84121
/**
@@ -183,7 +220,7 @@ var localVars = [];
183220
* @param type
184221
* @param value
185222
*/
186-
function createOpcuaVariable(parent, nodeId, type, value){
223+
function createOpcuaVariable(parent, nodeId, type, value, setter, getter) {
187224
var helper = require('./../../models/opc-helper.js').helper;
188225

189226
nodeId = helper.checkAndCorrectNodeId(nodeId);
@@ -193,6 +230,27 @@ function createOpcuaVariable(parent, nodeId, type, value){
193230
var currentElement = localVars.length;
194231
localVars[currentElement] = value;
195232

233+
// functions
234+
function defSetter(variant) {
235+
if (type == 'Double') {
236+
localVars[currentElement] = parseFloat(variant.value);
237+
} else if (type == 'Int16' || type == 'UInt16') {
238+
localVars[currentElement] = parseInt(variant.value, 10);
239+
} else { // e.g. String, Boolean
240+
localVars[currentElement] = variant.value;
241+
}
242+
return opcua.StatusCodes.Good;
243+
}
244+
function defGetter(){
245+
return new opcua.Variant({dataType: opcua.DataType[type], value: localVars[currentElement] });
246+
}
247+
if(typeof setter == 'function'){
248+
defSetter = setter;
249+
}
250+
if(typeof getter == 'function'){
251+
defGetter = getter;
252+
}
253+
196254
// generate random string for adding to server object
197255
var randomString = createVariableName();
198256
try{
@@ -201,19 +259,8 @@ function createOpcuaVariable(parent, nodeId, type, value){
201259
browseName: browseName,
202260
dataType: type,
203261
value: {
204-
get: function () {
205-
return new opcua.Variant({dataType: opcua.DataType[type], value: localVars[currentElement] });
206-
},
207-
set: function (variant) {
208-
if( type == 'Double'){
209-
localVars[currentElement] = parseFloat(variant.value);
210-
} else if ( type == 'Int16' || type == 'UInt16') {
211-
localVars[currentElement] = parseInt(variant.value, 10);
212-
} else { // e.g. String, Boolean
213-
localVars[currentElement] = variant.value;
214-
}
215-
return opcua.StatusCodes.Good;
216-
}
262+
get: defGetter,
263+
set: defSetter
217264
}
218265
};
219266
server[randomString] = server.engine.addVariable(parent, options);

0 commit comments

Comments
 (0)