-
-
Notifications
You must be signed in to change notification settings - Fork 480
/
parse_server_common.js
115 lines (96 loc) · 3.89 KB
/
parse_server_common.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
"use strict";
const async = require("async");
const opcua = require("node-opcua-client");
const assert = require("assert");
const { parseBinaryXSD }= require("node-opcua-schemas");
const chalk = require("chalk");
const { promisify } = require("util");
const doDebug = false;
const parseBinaryXSD2 = promisify(parseBinaryXSD);
async function parse_opcua_common(session) {
const binaries = "i=83";
// browse_all_opc_binary_schema_and_xml_schema
const browseDescriptions = [
{
nodeId: "i=93", //OPCBinarySchema_TypeSystem
referenceTypeId: "HasComponent",
browseDirection: opcua.BrowseDirection.Forward,
resultMask: 0x3F
},
{
nodeId: "i=92", //XMLSchema_TypeSystem
referenceTypeId: "HasComponent",
browseDirection: opcua.BrowseDirection.Forward,
resultMask: 0x3F
}
];
const browseResults = await session.browse(browseDescriptions);
const binSchemaReferences = browseResults[0].references;
const xmlSchemaReferences = browseResults[1].references;
for (const reference of binSchemaReferences) {
const nodeId = reference.nodeId;
if (doDebug) {
console.log(chalk.cyan("nodeId"), nodeId.toString(), "browseName ", reference.browseName.toString());
}
// read_type_definition_xsd_value
const dataValue = await session.read({
nodeId: nodeId,
attributeId: opcua.AttributeIds.Value
});
// console.log(dataValue.toString());
assert(dataValue.value.dataType === opcua.DataType.ByteString);
const strTypeDictionary = dataValue.value.value.toString("ascii");
await parseBinaryXSD2(strTypeDictionary, []);
// ead_namespaceUri(callback) {
const browseDescription = {
nodeId: nodeId,
referenceTypeId: "HasProperty",
browseDirection: opcua.BrowseDirection.Forward,
resultMask: 0x3F
};
const browseResult = await session.browse(browseDescription);
const nodeId2 = browseResult.references[0].nodeId;
const dataValue2 = await session.read({
nodeId: nodeId2,
attributeId: 13
});
if (doDebug) {
console.log("namespaceUri =", dataValue2.value.value.toString());
}
const namespaceUri = dataValue2.value.value.toString();
// function enumerate_all_type_with_id(callback) {
const browseDescription2 = {
nodeId: nodeId2,
referenceTypeId: "HasComponent",
browseDirection: opcua.BrowseDirection.Forward,
resultMask: 0x3F
};
const browseResult2 = await session.browse(browseDescription2);
if (doDebug) {
console.log("--", browseResult2.toString());
}
if (doDebug) {
browseResult2.references = browseResult2.references || [];
const aa = browseResult2.references.map( (x) => x.nodeId.toString() + " " + x.browseName).join("| \n");
console.log("r =", aa);
}
for (const x of browseResult2.references) {
// process_structure(x, callback) {
const nodeId = x.nodeId;
const name = x.browseName.toString();
const browseDescription = {
nodeId: nodeId,
referenceTypeId: "HasDescription",
browseDirection: opcua.BrowseDirection.Inverse,
resultMask: 0x3F
};
// find DescriptionOf reference which will be the id for ExtensionObjects....
const browseResult = await session.browse(browseDescription);
const nnn = browseResult.references[0].nodeId;
if (doDebug) {
console.log(" ", nodeId.toString(), name, "nn=", nnn.toString());
}
}
}
}
exports.parse_opcua_common = parse_opcua_common;