node-opcua-address-space 2.57.0 → 2.61.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.
Files changed (88) hide show
  1. package/dist/source/address_space_ts.d.ts +0 -2
  2. package/dist/source/helpers/argument_list.js +12 -1
  3. package/dist/source/helpers/argument_list.js.map +1 -1
  4. package/dist/source/helpers/multiform_func.d.ts +11 -0
  5. package/dist/source/helpers/multiform_func.js +74 -0
  6. package/dist/source/helpers/multiform_func.js.map +1 -0
  7. package/dist/source/loader/load_nodeset2.js +47 -64
  8. package/dist/source/loader/load_nodeset2.js.map +1 -1
  9. package/dist/source/set_namespace_meta_data.js +1 -1
  10. package/dist/src/address_space.js +12 -6
  11. package/dist/src/address_space.js.map +1 -1
  12. package/dist/src/alarms_and_conditions/condition_snapshot.js +3 -3
  13. package/dist/src/alarms_and_conditions/condition_snapshot.js.map +1 -1
  14. package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.js +2 -1
  15. package/dist/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.js.map +1 -1
  16. package/dist/src/alarms_and_conditions/ua_alarm_condition_impl.js +1 -1
  17. package/dist/src/alarms_and_conditions/ua_alarm_condition_impl.js.map +1 -1
  18. package/dist/src/alarms_and_conditions/ua_condition_impl.js +8 -6
  19. package/dist/src/alarms_and_conditions/ua_condition_impl.js.map +1 -1
  20. package/dist/src/alarms_and_conditions/ua_off_normal_alarm_impl.js +1 -1
  21. package/dist/src/alarms_and_conditions/ua_off_normal_alarm_impl.js.map +1 -1
  22. package/dist/src/base_node_impl.js +2 -0
  23. package/dist/src/base_node_impl.js.map +1 -1
  24. package/dist/src/base_node_private.d.ts +3 -3
  25. package/dist/src/base_node_private.js +198 -25
  26. package/dist/src/base_node_private.js.map +1 -1
  27. package/dist/src/event_data.js +1 -1
  28. package/dist/src/event_data.js.map +1 -1
  29. package/dist/src/namespace_impl.js +5 -5
  30. package/dist/src/namespace_impl.js.map +1 -1
  31. package/dist/src/nodeset_tools/nodeset_to_xml.js +15 -9
  32. package/dist/src/nodeset_tools/nodeset_to_xml.js.map +1 -1
  33. package/dist/src/nodeset_tools/typedictionary_to_xml.js +17 -10
  34. package/dist/src/nodeset_tools/typedictionary_to_xml.js.map +1 -1
  35. package/dist/src/reference_impl.js +1 -1
  36. package/dist/src/reference_impl.js.map +1 -1
  37. package/dist/src/state_machine/ua_shelving_state_machine_ex.js +20 -13
  38. package/dist/src/state_machine/ua_shelving_state_machine_ex.js.map +1 -1
  39. package/dist/src/ua_data_type_impl.d.ts +15 -5
  40. package/dist/src/ua_data_type_impl.js +129 -51
  41. package/dist/src/ua_data_type_impl.js.map +1 -1
  42. package/dist/src/ua_method_impl.d.ts +3 -2
  43. package/dist/src/ua_method_impl.js +7 -1
  44. package/dist/src/ua_method_impl.js.map +1 -1
  45. package/dist/src/ua_object_impl.js +2 -1
  46. package/dist/src/ua_object_impl.js.map +1 -1
  47. package/dist/src/ua_variable_impl.d.ts +12 -18
  48. package/dist/src/ua_variable_impl.js +285 -215
  49. package/dist/src/ua_variable_impl.js.map +1 -1
  50. package/dist/src/ua_variable_type_impl.d.ts +3 -4
  51. package/dist/src/ua_variable_type_impl.js +60 -52
  52. package/dist/src/ua_variable_type_impl.js.map +1 -1
  53. package/dist/src/ua_view_impl.js +1 -1
  54. package/dist/src/ua_view_impl.js.map +1 -1
  55. package/distHelpers/add_event_generator_object.js.map +1 -1
  56. package/distHelpers/mock_session.js +1 -1
  57. package/distHelpers/mock_session.js.map +1 -1
  58. package/package.json +35 -35
  59. package/source/address_space_ts.ts +0 -1
  60. package/source/helpers/argument_list.ts +13 -3
  61. package/source/helpers/multiform_func.ts +76 -0
  62. package/source/loader/load_nodeset2.ts +64 -80
  63. package/source/set_namespace_meta_data.ts +1 -1
  64. package/src/address_space.ts +16 -7
  65. package/src/alarms_and_conditions/condition_snapshot.ts +4 -4
  66. package/src/alarms_and_conditions/ua_acknowledgeable_condition_impl.ts +7 -6
  67. package/src/alarms_and_conditions/ua_alarm_condition_impl.ts +2 -2
  68. package/src/alarms_and_conditions/ua_condition_impl.ts +29 -15
  69. package/src/alarms_and_conditions/ua_off_normal_alarm_impl.ts +1 -1
  70. package/src/base_node_impl.ts +3 -1
  71. package/src/base_node_private.ts +282 -36
  72. package/src/event_data.ts +1 -1
  73. package/src/namespace_impl.ts +6 -6
  74. package/src/nodeset_tools/nodeset_to_xml.ts +20 -10
  75. package/src/nodeset_tools/typedictionary_to_xml.ts +17 -7
  76. package/src/reference_impl.ts +3 -3
  77. package/src/state_machine/ua_shelving_state_machine_ex.ts +32 -19
  78. package/src/ua_data_type_impl.ts +168 -61
  79. package/src/ua_method_impl.ts +21 -7
  80. package/src/ua_object_impl.ts +10 -2
  81. package/src/ua_variable_impl.ts +419 -325
  82. package/src/ua_variable_type_impl.ts +86 -52
  83. package/src/ua_view_impl.ts +1 -1
  84. package/test_helpers/add_event_generator_object.ts +4 -3
  85. package/test_helpers/mock_session.ts +1 -1
  86. package/test_helpers/test_fixtures/fixture_simple_statemachine_nodeset2.xml +18 -0
  87. package/test_helpers/test_fixtures/fixuture_nodeset_objects_with_some_methods.xml +9 -1
  88. package/test_helpers/test_fixtures/mini.Node.Set2.xml +22 -1
@@ -6,20 +6,6 @@
6
6
  import * as chalk from "chalk";
7
7
 
8
8
  import { assert } from "node-opcua-assert";
9
- import { UInt32 } from "node-opcua-basic-types";
10
- import { ReferenceTypeIds } from "node-opcua-constants";
11
- import { coerceQualifiedName, NodeClass, QualifiedName } from "node-opcua-data-model";
12
- import { BrowseDirection } from "node-opcua-data-model";
13
- import { AttributeIds } from "node-opcua-data-model";
14
- import { DataValue, DataValueLike } from "node-opcua-data-value";
15
- import { checkDebugFlag, make_debugLog, make_warningLog } from "node-opcua-debug";
16
- import { coerceNodeId, makeNodeId, NodeId, NodeIdLike, sameNodeId } from "node-opcua-nodeid";
17
- import { StatusCodes } from "node-opcua-status-code";
18
- import { isNullOrUndefined } from "node-opcua-utils";
19
- import { DataType } from "node-opcua-variant";
20
- import { Variant } from "node-opcua-variant";
21
- import { VariantArrayType } from "node-opcua-variant";
22
-
23
9
  import {
24
10
  IAddressSpace,
25
11
  AddVariableOptions,
@@ -35,6 +21,15 @@ import {
35
21
  UAVariableType,
36
22
  CloneFilter
37
23
  } from "node-opcua-address-space-base";
24
+ import { ObjectTypeIds, ReferenceTypeIds, VariableTypeIds } from "node-opcua-constants";
25
+ import { coerceQualifiedName, NodeClass, QualifiedName, BrowseDirection, AttributeIds } from "node-opcua-data-model";
26
+ import { DataValue, DataValueLike } from "node-opcua-data-value";
27
+ import { checkDebugFlag, make_debugLog, make_warningLog, make_errorLog } from "node-opcua-debug";
28
+ import { coerceNodeId, makeNodeId, NodeId, NodeIdLike, sameNodeId } from "node-opcua-nodeid";
29
+ import { StatusCodes } from "node-opcua-status-code";
30
+ import { UInt32 } from "node-opcua-basic-types";
31
+ import { isNullOrUndefined } from "node-opcua-utils";
32
+ import { DataType, Variant, VariantArrayType, verifyRankAndDimensions } from "node-opcua-variant";
38
33
 
39
34
  import { SessionContext } from "../source/session_context";
40
35
  import { makeOptionalsMap, OptionalMap } from "../source/helpers/make_optionals_map";
@@ -45,11 +40,16 @@ import { _clone_children_references, ToStringBuilder, UAVariableType_toString }
45
40
  import * as tools from "./tool_isSupertypeOf";
46
41
  import { get_subtypeOfObj } from "./tool_isSupertypeOf";
47
42
  import { get_subtypeOf } from "./tool_isSupertypeOf";
48
- import { verifyRankAndDimensions } from "./ua_variable_impl";
43
+ import { resolveReferenceNode } from "./reference_impl";
49
44
 
50
45
  const debugLog = make_debugLog(__filename);
51
46
  const doDebug = checkDebugFlag(__filename);
52
47
  const warningLog = make_warningLog(__filename);
48
+ const errorLog = make_errorLog(__filename);
49
+
50
+ // eslint-disable-next-line prefer-const
51
+ let doTrace = false;
52
+ const traceLog = errorLog;
53
53
 
54
54
  interface InstantiateS {
55
55
  propertyOf?: any;
@@ -131,7 +131,6 @@ export class UAVariableTypeImpl extends BaseNodeImpl implements UAVariableType {
131
131
 
132
132
  if (options.value) {
133
133
  this.value = new Variant(options.value);
134
- // xx console.log("setting ",this.value.toString());
135
134
  }
136
135
  }
137
136
 
@@ -309,7 +308,7 @@ class MandatoryChildOrRequestedOptionalFilter implements CloneFilter {
309
308
  const n = addressSpace.findNode(r.nodeId)!;
310
309
  // istanbul ignore next
311
310
  if (!n) {
312
- console.log(" cannot find node ", r.nodeId.toString());
311
+ warningLog(" cannot find node ", r.nodeId.toString());
313
312
  return false;
314
313
  }
315
314
  return n.browseName!.name!.toString() === node.browseName!.name!.toString();
@@ -327,7 +326,24 @@ class MandatoryChildOrRequestedOptionalFilter implements CloneFilter {
327
326
  switch (modellingRule) {
328
327
  case null:
329
328
  case undefined:
330
- return false; // skip
329
+ debugLog(
330
+ "node ",
331
+ node.browseName.toString(),
332
+ node.nodeId.toString(),
333
+ " has no modellingRule ",
334
+ node.parentNodeId?.toString()
335
+ );
336
+ /**
337
+ * in some badly generated NodeSet2.xml file, the modellingRule is not specified
338
+ *
339
+ * but in some other NodeSet2.xml, this means that the data are only attached to the Type node and shall not be
340
+ * instantiate in the corresponding instance (example is the state variable of a finite state machine that are only
341
+ * defined in the Type node)
342
+ *
343
+ * we should not consider it as an error, and treat it as not present
344
+ */
345
+ return false;
346
+
331
347
  case "Mandatory":
332
348
  return true; // keep;
333
349
  case "Optional":
@@ -370,11 +386,11 @@ function _get_parent_as_VariableOrObjectType(originalObject: BaseNode): UAVariab
370
386
 
371
387
  // istanbul ignore next
372
388
  if (parents.length > 1) {
373
- console.warn(" object ", originalObject.browseName.toString(), " has more than one parent !");
374
- console.warn(originalObject.toString());
375
- console.warn(" parents : ");
389
+ warningLog(" object ", originalObject.browseName.toString(), " has more than one parent !");
390
+ warningLog(originalObject.toString());
391
+ warningLog(" parents : ");
376
392
  for (const parent of parents) {
377
- console.log(" ", parent.toString(), addressSpace.findNode(parent.nodeId)!.browseName.toString());
393
+ warningLog(" ", parent.toString(), addressSpace.findNode(parent.nodeId)!.browseName.toString());
378
394
  }
379
395
  return null;
380
396
  }
@@ -395,8 +411,12 @@ interface CloneInfo {
395
411
  original: UAVariableType | UAObjectType;
396
412
  }
397
413
  class CloneHelper {
414
+ public level = 0;
398
415
  private readonly mapOrgToClone: Map<string, CloneInfo> = new Map();
399
416
 
417
+ public pad(): string {
418
+ return " ".padEnd(this.level * 2, " ");
419
+ }
400
420
  public registerClonedObject<TT extends UAVariableType | UAObjectType, T extends UAObject | UAVariable | UAMethod>(
401
421
  objInType: TT,
402
422
  clonedObj: T
@@ -439,7 +459,6 @@ class CloneHelper {
439
459
  // find subTypeOf
440
460
  }
441
461
  }
442
-
443
462
  // install properties and components on a instantiated Object
444
463
  //
445
464
  // based on their ModelingRule
@@ -452,39 +471,66 @@ class CloneHelper {
452
471
  function _initialize_properties_and_components<B extends UAObject | UAVariable | UAMethod, T extends UAObjectType | UAVariableType>(
453
472
  instance: B,
454
473
  topMostType: T,
455
- typeNode: T,
474
+ typeDefinitionNode: T,
456
475
  copyAlsoModellingRules: boolean,
457
476
  optionalsMap: OptionalMap,
458
477
  extraInfo: CloneHelper
459
478
  ) {
460
479
  if (doDebug) {
461
- console.log("instance browseName =", instance.browseName.toString());
462
- console.log("typeNode =", typeNode.browseName.toString());
463
- console.log("optionalsMap =", Object.keys(optionalsMap).join(" "));
480
+ debugLog("instance browseName =", instance.browseName.toString());
481
+ debugLog("typeNode =", typeDefinitionNode.browseName.toString());
482
+ debugLog("optionalsMap =", Object.keys(optionalsMap).join(" "));
464
483
 
465
- const c = typeNode.findReferencesEx("Aggregates");
466
- console.log("type possibilities =", c.map((x) => x.node!.browseName.toString()).join(" "));
484
+ const c = typeDefinitionNode.findReferencesEx("Aggregates");
485
+ debugLog("typeDefinition aggregates =", c.map((x) => x.node!.browseName.toString()).join(" "));
467
486
  }
468
487
  optionalsMap = optionalsMap || {};
469
488
 
470
- if (sameNodeId(topMostType.nodeId, typeNode.nodeId)) {
489
+ if (sameNodeId(topMostType.nodeId, typeDefinitionNode.nodeId)) {
471
490
  return; // nothing to do
472
491
  }
473
492
 
474
- const baseTypeNodeId = typeNode.subtypeOf;
475
- const baseType = typeNode.subtypeOfObj;
493
+ const filter = new MandatoryChildOrRequestedOptionalFilter(instance, optionalsMap);
476
494
 
477
- // istanbul ignore next
478
- if (!baseType) {
479
- throw new Error(chalk.red("Cannot find object with nodeId ") + baseTypeNodeId);
480
- }
495
+ doTrace &&
496
+ traceLog(
497
+ chalk.cyan(extraInfo.pad(), "cloning relevant member of typeDefinition class"),
498
+ typeDefinitionNode.browseName.toString()
499
+ );
481
500
 
482
- const filter = new MandatoryChildOrRequestedOptionalFilter(instance, optionalsMap);
501
+ const browseNameMap = new Set<string>();
502
+
503
+ _clone_children_references(typeDefinitionNode, instance, copyAlsoModellingRules, filter, extraInfo, browseNameMap);
504
+
505
+ // now apply recursion on baseTypeDefinition to get properties and components from base class
483
506
 
484
- _clone_children_references(typeNode, instance, copyAlsoModellingRules, filter, extraInfo);
507
+ const baseTypeDefinitionNodeId = typeDefinitionNode.subtypeOf;
508
+ const baseTypeDefinition = typeDefinitionNode.subtypeOfObj!;
509
+
510
+ doTrace &&
511
+ traceLog(
512
+ chalk.cyan(
513
+ extraInfo.pad(),
514
+ "now apply recursion on baseTypeDefinition to get properties and components from base class"
515
+ ),
516
+ baseTypeDefinition.browseName.toString()
517
+ );
518
+
519
+ // istanbul ignore next
520
+ if (!baseTypeDefinition) {
521
+ throw new Error(chalk.red("Cannot find object with nodeId ") + baseTypeDefinitionNodeId);
522
+ }
523
+ extraInfo.level++;
524
+ _initialize_properties_and_components(
525
+ instance,
526
+ topMostType,
527
+ baseTypeDefinition,
528
+ copyAlsoModellingRules,
529
+ optionalsMap,
530
+ extraInfo
531
+ );
532
+ extraInfo.level--;
485
533
 
486
- // get properties and components from base class
487
- _initialize_properties_and_components(instance, topMostType, baseType, copyAlsoModellingRules, optionalsMap, extraInfo);
488
534
  }
489
535
 
490
536
  /**
@@ -595,8 +641,6 @@ function findNonHierarchicalReferences(originalObject: BaseNode): UAReference[]
595
641
 
596
642
  if (child) {
597
643
  const baseRef = findNonHierarchicalReferences(child);
598
- // xx console.log(" ... ",originalObject.browseName.toString(),
599
- // parent.browseName.toString(), references.length, baseRef.length);
600
644
  references = ([] as UAReference[]).concat(references, baseRef);
601
645
  }
602
646
  }
@@ -691,15 +735,6 @@ function reconstructFunctionalGroupType(extraInfo: any) {
691
735
  for (const { original, cloned } of extraInfo.mapOrgToClone.values()) {
692
736
  const organizedByArray = original.findReferencesEx("Organizes", BrowseDirection.Inverse);
693
737
 
694
- // function dumpRef(r) {
695
- // var referenceTd = addressSpace.findNode(r.referenceTypeId);
696
- // var obj = addressSpace.findNode(r.nodeId);
697
- // return "<-- " + referenceTd.browseName.toString() + " -- " + obj.browseName.toString();
698
- // }
699
- //
700
- // console.log("xxxxx ========================================================",
701
- // originalObject.browseName.toString(),
702
- // organizedByArray.map(dumpRef).join("\n"));
703
738
  for (const ref of organizedByArray) {
704
739
  const info = extraInfo.mapOrgToClone.get(ref.nodeId.toString());
705
740
  if (!info) continue;
@@ -718,7 +753,6 @@ function reconstructFunctionalGroupType(extraInfo: any) {
718
753
  nodeId: cloned.nodeId,
719
754
  referenceType: ref.referenceType
720
755
  });
721
- // xx console.log("xxx ============> adding reference ",ref.browse )
722
756
  }
723
757
  }
724
758
  }
@@ -34,7 +34,7 @@ export class UAViewImpl extends BaseNodeImpl implements UAView {
34
34
 
35
35
  switch (attributeId) {
36
36
  case AttributeIds.EventNotifier:
37
- options.value = { dataType: DataType.UInt32, value: this.eventNotifier };
37
+ options.value = { dataType: DataType.Byte, value: this.eventNotifier };
38
38
  options.statusCode = StatusCodes.Good;
39
39
  break;
40
40
 
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * @module node-opcua-address-space
3
3
  */
4
- import { StatusCodes } from "node-opcua-status-code";
4
+ import { CallbackT, StatusCodes } from "node-opcua-status-code";
5
5
  import { DataType, Variant } from "node-opcua-variant";
6
- import { INamespace, UAObject, ISessionContext, MethodFunctorCallback } from "node-opcua-address-space-base";
6
+ import { INamespace, UAObject, ISessionContext } from "node-opcua-address-space-base";
7
7
  import { UAFolder } from "node-opcua-nodeset-ua";
8
+ import { CallMethodResultOptions } from "node-opcua-types";
8
9
 
9
10
  export function add_eventGeneratorObject(namespace: INamespace, parentFolder: UAFolder | string): void {
10
11
  const myEvtType = namespace.addEventType({
@@ -40,7 +41,7 @@ export function add_eventGeneratorObject(namespace: INamespace, parentFolder: UA
40
41
  outputArguments: []
41
42
  });
42
43
 
43
- method.bindMethod((inputArguments: Variant[], context: ISessionContext, callback: MethodFunctorCallback) => {
44
+ method.bindMethod((inputArguments: Variant[], context: ISessionContext, callback: CallbackT<CallMethodResultOptions>) => {
44
45
  // xx console.log("In Event Generator Method");
45
46
  // xx console.log(this.toString());
46
47
  // xx console.log(context.object.toString());
@@ -28,7 +28,7 @@ export class MockContinuationPointManager implements IContinuationPointManager {
28
28
 
29
29
  export const mockSession = {
30
30
  getSessionId() {
31
- return NodeId.nullNodeId;
31
+ return new NodeId();
32
32
  },
33
33
  continuationPointManager: new MockContinuationPointManager()
34
34
  };
@@ -13,6 +13,7 @@
13
13
  <Alias Alias="HasTypeDefinition">i=40</Alias>
14
14
  <Alias Alias="HasProperty">i=46</Alias>
15
15
  <Alias Alias="HasNotifier">i=48</Alias>
16
+ <Alias Alias="HasEncoding">i=38</Alias>
16
17
  <Alias Alias="LocalizedText">i=21</Alias>
17
18
  </Aliases>
18
19
  <UADataType NodeId="i=6" BrowseName="Int32">
@@ -231,6 +232,23 @@
231
232
  </References>
232
233
  <InverseName>MayBeEffectedBy</InverseName>
233
234
  </UAReferenceType>
235
+ <UAReferenceType NodeId="i=38" BrowseName="HasEncoding">
236
+ <DisplayName>HasEncoding</DisplayName>
237
+ <Description>The type for references from data type nodes to to data type encoding nodes.</Description>
238
+ <References>
239
+ <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
240
+ </References>
241
+ <InverseName>EncodingOf</InverseName>
242
+ </UAReferenceType>
243
+ <UAReferenceType NodeId="i=17603" BrowseName="HasInterface">
244
+ <DisplayName>HasInterface</DisplayName>
245
+ <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Amendment7/11.20</Documentation>
246
+ <References>
247
+ <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
248
+ </References>
249
+ <InverseName>InterfaceOf</InverseName>
250
+ </UAReferenceType>
251
+
234
252
  <UAObjectType NodeId="i=58" BrowseName="BaseObjectType">
235
253
  <DisplayName>BaseObjectType</DisplayName>
236
254
  <Description>The base type for all object nodes.</Description>
@@ -357,6 +357,14 @@
357
357
  <Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
358
358
  </References>
359
359
  </UAObjectType>
360
-
360
+
361
+ <UAReferenceType NodeId="i=38" BrowseName="HasEncoding">
362
+ <DisplayName>HasEncoding</DisplayName>
363
+ <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part5/11.13</Documentation>
364
+ <References>
365
+ <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
366
+ </References>
367
+ <InverseName>EncodingOf</InverseName>
368
+ </UAReferenceType>
361
369
 
362
370
  </UANodeSet>
@@ -442,7 +442,14 @@
442
442
  </References>
443
443
  <InverseName>HistoricalConfigurationOf</InverseName>
444
444
  </UAReferenceType>
445
-
445
+ <UAReferenceType NodeId="i=17603" BrowseName="HasInterface">
446
+ <DisplayName>HasInterface</DisplayName>
447
+ <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Amendment7/11.20</Documentation>
448
+ <References>
449
+ <Reference ReferenceType="HasSubtype" IsForward="false">i=32</Reference>
450
+ </References>
451
+ <InverseName>InterfaceOf</InverseName>
452
+ </UAReferenceType>
446
453
 
447
454
 
448
455
  <UAObjectType NodeId="i=75" BrowseName="DataTypeSystemType">
@@ -4505,4 +4512,18 @@
4505
4512
  <Reference ReferenceType="HasProperty" IsForward="false">i=11646</Reference>
4506
4513
  </References>
4507
4514
  </UAVariable>
4515
+ <UADataType NodeId="i=256" BrowseName="IdType">
4516
+ <DisplayName>IdType</DisplayName>
4517
+ <Documentation>https://reference.opcfoundation.org/v104/Core/docs/Part3/8.2.3</Documentation>
4518
+ <References>
4519
+ <Reference ReferenceType="HasProperty">i=7591</Reference>
4520
+ <Reference ReferenceType="HasSubtype" IsForward="false">i=29</Reference>
4521
+ </References>
4522
+ <Definition Name="IdType">
4523
+ <Field Name="Numeric" Value="0" />
4524
+ <Field Name="String" Value="1" />
4525
+ <Field Name="Guid" Value="2" />
4526
+ <Field Name="Opaque" Value="3" />
4527
+ </Definition>
4528
+ </UADataType>
4508
4529
  </UANodeSet>