summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.qmake.conf2
-rw-r--r--config.tests/freeopcua/freeopcua.pro2
-rw-r--r--config.tests/open62541/main.cpp2
-rw-r--r--examples/opcua/opcuaviewer/NodeIds.csv5746
-rw-r--r--examples/opcua/opcuaviewer/common.cpp106
-rw-r--r--examples/opcua/opcuaviewer/doc/opcuaviewer.qdoc2
-rw-r--r--examples/opcua/opcuaviewer/mainwindow.cpp1
-rw-r--r--examples/opcua/opcuaviewer/opcuamodel.h6
-rw-r--r--examples/opcua/opcuaviewer/opcuaviewer.pro10
-rw-r--r--examples/opcua/opcuaviewer/opcuaviewer.qrc5
-rw-r--r--examples/opcua/opcuaviewer/treeitem.cpp87
-rw-r--r--examples/opcua/opcuaviewer/treeitem.h13
-rw-r--r--examples/opcua/waterpump/simulationserver/main.cpp3
-rw-r--r--examples/opcua/waterpump/simulationserver/simulationserver.cpp111
-rw-r--r--examples/opcua/waterpump/simulationserver/simulationserver.h14
-rw-r--r--examples/opcua/waterpump/simulationserver/simulationserver.pro1
-rw-r--r--examples/opcua/waterpump/waterpump-qml/MachineDisplay.qml124
-rw-r--r--examples/opcua/waterpump/waterpump-qml/Pump.qml81
-rw-r--r--examples/opcua/waterpump/waterpump-qml/ServerControl.qml87
-rw-r--r--examples/opcua/waterpump/waterpump-qml/Tank1Unit.qml84
-rw-r--r--examples/opcua/waterpump/waterpump-qml/Tank2Unit.qml83
-rw-r--r--examples/opcua/waterpump/waterpump-qml/TankDisplay.qml (renamed from examples/opcua/waterpump/qml-hmi/Tank.qml)0
-rw-r--r--examples/opcua/waterpump/waterpump-qml/ValueDisplay.qml92
-rw-r--r--examples/opcua/waterpump/waterpump-qml/doc/images/tankexample.jpg (renamed from examples/opcua/waterpump/doc/images/tankexample.jpg)bin15364 -> 15364 bytes
-rw-r--r--examples/opcua/waterpump/waterpump-qml/doc/waterpump-qml.qdoc128
-rw-r--r--examples/opcua/waterpump/waterpump-qml/machine/Machine.qml169
-rw-r--r--examples/opcua/waterpump/waterpump-qml/machine/Tank.qml70
-rw-r--r--examples/opcua/waterpump/waterpump-qml/main.cpp91
-rw-r--r--examples/opcua/waterpump/waterpump-qml/main.qml100
-rw-r--r--examples/opcua/waterpump/waterpump-qml/qml.qrc14
-rw-r--r--examples/opcua/waterpump/waterpump-qml/waterpump-qml.pro6
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/Pump.qml (renamed from examples/opcua/waterpump/qml-hmi/Pump.qml)0
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/ServerControl.qml (renamed from examples/opcua/waterpump/qml-hmi/ServerControl.qml)0
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/Tank.qml (renamed from examples/opcua/opcuaviewer/common.h)37
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/Tank1Unit.qml (renamed from examples/opcua/waterpump/qml-hmi/Tank1Unit.qml)0
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/Tank2Unit.qml (renamed from examples/opcua/waterpump/qml-hmi/Tank2Unit.qml)0
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/TankSimulation.qml (renamed from examples/opcua/waterpump/qml-hmi/TankSimulation.qml)0
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/ValueDisplay.qml (renamed from examples/opcua/waterpump/qml-hmi/ValueDisplay.qml)0
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/doc/images/tankexample.jpgbin0 -> 15364 bytes
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/doc/waterpump-qmlcpp.qdoc (renamed from examples/opcua/waterpump/doc/waterpump.qdoc)40
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/main.cpp (renamed from examples/opcua/waterpump/qml-hmi/main.cpp)0
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/main.qml (renamed from examples/opcua/waterpump/qml-hmi/main.qml)0
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp (renamed from examples/opcua/waterpump/qml-hmi/opcuamachinebackend.cpp)10
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.h (renamed from examples/opcua/waterpump/qml-hmi/opcuamachinebackend.h)0
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/qml.qrc (renamed from examples/opcua/waterpump/qml-hmi/qml.qrc)0
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/waterpump-qmlcpp.pro (renamed from examples/opcua/waterpump/qml-hmi/qml-hmi.pro)3
-rw-r--r--examples/opcua/waterpump/waterpump.pro3
-rw-r--r--src/imports/imports.pro3
-rw-r--r--src/imports/opcua/opcua.pro37
-rw-r--r--src/imports/opcua/opcua_plugin.cpp92
-rw-r--r--src/imports/opcua/opcua_plugin.h (renamed from config.tests/freeopcua/main.cpp)28
-rw-r--r--src/imports/opcua/opcuaattributecache.cpp86
-rw-r--r--src/imports/opcua/opcuaattributecache.h (renamed from src/opcua/client/qopcuareferencedescription_p.h)45
-rw-r--r--src/imports/opcua/opcuaattributevalue.cpp88
-rw-r--r--src/imports/opcua/opcuaattributevalue.h62
-rw-r--r--src/imports/opcua/opcuaconnection.cpp261
-rw-r--r--src/imports/opcua/opcuaconnection.h90
-rw-r--r--src/imports/opcua/opcuamethodnode.cpp144
-rw-r--r--src/imports/opcua/opcuamethodnode.h (renamed from src/plugins/opcua/freeopcua/qfreeopcuaclient.h)47
-rw-r--r--src/imports/opcua/opcuanode.cpp362
-rw-r--r--src/imports/opcua/opcuanode.h124
-rw-r--r--src/imports/opcua/opcuanodeid.cpp111
-rw-r--r--src/imports/opcua/opcuanodeid.h58
-rw-r--r--src/imports/opcua/opcuanodeidtype.cpp (renamed from src/plugins/opcua/freeopcua/qfreeopcuavalueconverter.h)85
-rw-r--r--src/imports/opcua/opcuanodeidtype.h73
-rw-r--r--src/imports/opcua/opcuapathresolver.cpp214
-rw-r--r--src/imports/opcua/opcuapathresolver.h78
-rw-r--r--src/imports/opcua/opcuarelativenodeid.cpp173
-rw-r--r--src/imports/opcua/opcuarelativenodeid.h83
-rw-r--r--src/imports/opcua/opcuarelativenodepath.cpp176
-rw-r--r--src/imports/opcua/opcuarelativenodepath.h86
-rw-r--r--src/imports/opcua/opcuavaluenode.cpp115
-rw-r--r--src/imports/opcua/opcuavaluenode.h (renamed from src/plugins/opcua/freeopcua/qfreeopcuaplugin.h)36
-rw-r--r--src/imports/opcua/plugin.json2
-rw-r--r--src/imports/opcua/plugins.qmltypes195
-rw-r--r--src/imports/opcua/qmldir4
-rw-r--r--src/imports/opcua/universalnode.cpp376
-rw-r--r--src/imports/opcua/universalnode.h113
-rw-r--r--src/opcua/client/client.pri26
-rw-r--r--src/opcua/client/qopcuaaddnodeitem.cpp215
-rw-r--r--src/opcua/client/qopcuaaddnodeitem.h (renamed from src/plugins/opcua/freeopcua/qfreeopcuanode.h)61
-rw-r--r--src/opcua/client/qopcuaaddreferenceitem.cpp189
-rw-r--r--src/opcua/client/qopcuaaddreferenceitem.h80
-rw-r--r--src/opcua/client/qopcuabackend.cpp2
-rw-r--r--src/opcua/client/qopcuabackend_p.h31
-rw-r--r--src/opcua/client/qopcuabinarydataencoding.cpp457
-rw-r--r--src/opcua/client/qopcuabinarydataencoding.h961
-rw-r--r--src/opcua/client/qopcuabinarydataencoding_p.h117
-rw-r--r--src/opcua/client/qopcuabrowserequest.cpp169
-rw-r--r--src/opcua/client/qopcuabrowserequest.h83
-rw-r--r--src/opcua/client/qopcuaclient.cpp516
-rw-r--r--src/opcua/client/qopcuaclient.h40
-rw-r--r--src/opcua/client/qopcuaclient_p.h4
-rw-r--r--src/opcua/client/qopcuaclientimpl.cpp61
-rw-r--r--src/opcua/client/qopcuaclientimpl_p.h45
-rw-r--r--src/opcua/client/qopcuaclientprivate.cpp98
-rw-r--r--src/opcua/client/qopcuadeletereferenceitem.cpp169
-rw-r--r--src/opcua/client/qopcuadeletereferenceitem.h77
-rw-r--r--src/opcua/client/qopcuamonitoringparameters.cpp482
-rw-r--r--src/opcua/client/qopcuamonitoringparameters.h86
-rw-r--r--src/opcua/client/qopcuamonitoringparameters_p.h5
-rw-r--r--src/opcua/client/qopcuanode.cpp252
-rw-r--r--src/opcua/client/qopcuanode.h15
-rw-r--r--src/opcua/client/qopcuanode_p.h74
-rw-r--r--src/opcua/client/qopcuanodecreationattributes.cpp767
-rw-r--r--src/opcua/client/qopcuanodecreationattributes.h143
-rw-r--r--src/opcua/client/qopcuanodecreationattributes_p.h124
-rw-r--r--src/opcua/client/qopcuanodeids.cpp5811
-rw-r--r--src/opcua/client/qopcuanodeids.h5809
-rw-r--r--src/opcua/client/qopcuanodeimpl.cpp22
-rw-r--r--src/opcua/client/qopcuanodeimpl_p.h31
-rw-r--r--src/opcua/client/qopcuareaditem.cpp150
-rw-r--r--src/opcua/client/qopcuareaditem.h72
-rw-r--r--src/opcua/client/qopcuareadresult.cpp211
-rw-r--r--src/opcua/client/qopcuareadresult.h (renamed from src/plugins/opcua/freeopcua/qfreeopcuaplugin.cpp)67
-rw-r--r--src/opcua/client/qopcuareferencedescription.cpp95
-rw-r--r--src/opcua/client/qopcuareferencedescription.h13
-rw-r--r--src/opcua/client/qopcuatype.cpp3394
-rw-r--r--src/opcua/client/qopcuatype.h931
-rw-r--r--src/opcua/client/qopcuawriteitem.cpp267
-rw-r--r--src/opcua/client/qopcuawriteitem.h91
-rw-r--r--src/opcua/client/qopcuawriteresult.cpp158
-rw-r--r--src/opcua/client/qopcuawriteresult.h73
-rw-r--r--src/opcua/configure.json45
-rw-r--r--src/opcua/configure.pri23
-rw-r--r--src/opcua/core/qopcuaprovider.cpp26
-rw-r--r--src/opcua/doc/qtopcua.qdocconf15
-rw-r--r--src/opcua/doc/src/qtopcua.qdoc171
-rw-r--r--src/opcua/opcua.pro4
-rw-r--r--src/plugins/opcua/freeopcua/freeopcua-metadata.json7
-rw-r--r--src/plugins/opcua/freeopcua/freeopcua.pro30
-rw-r--r--src/plugins/opcua/freeopcua/qfreeopcuaclient.cpp98
-rw-r--r--src/plugins/opcua/freeopcua/qfreeopcuanode.cpp155
-rw-r--r--src/plugins/opcua/freeopcua/qfreeopcuasubscription.cpp284
-rw-r--r--src/plugins/opcua/freeopcua/qfreeopcuasubscription.h113
-rw-r--r--src/plugins/opcua/freeopcua/qfreeopcuavalueconverter.cpp520
-rw-r--r--src/plugins/opcua/freeopcua/qfreeopcuaworker.cpp441
-rw-r--r--src/plugins/opcua/freeopcua/qfreeopcuaworker.h92
-rw-r--r--src/plugins/opcua/opcua.pro3
-rw-r--r--src/plugins/opcua/open62541/qopen62541.h2
-rw-r--r--src/plugins/opcua/open62541/qopen62541backend.cpp751
-rw-r--r--src/plugins/opcua/open62541/qopen62541backend.h40
-rw-r--r--src/plugins/opcua/open62541/qopen62541client.cpp61
-rw-r--r--src/plugins/opcua/open62541/qopen62541client.h13
-rw-r--r--src/plugins/opcua/open62541/qopen62541node.cpp40
-rw-r--r--src/plugins/opcua/open62541/qopen62541node.h4
-rw-r--r--src/plugins/opcua/open62541/qopen62541subscription.cpp355
-rw-r--r--src/plugins/opcua/open62541/qopen62541subscription.h28
-rw-r--r--src/plugins/opcua/open62541/qopen62541utils.cpp65
-rw-r--r--src/plugins/opcua/open62541/qopen62541utils.h41
-rw-r--r--src/plugins/opcua/open62541/qopen62541valueconverter.cpp377
-rw-r--r--src/plugins/opcua/open62541/qopen62541valueconverter.h11
-rw-r--r--src/plugins/opcua/uacpp/quacppbackend.cpp140
-rw-r--r--src/plugins/opcua/uacpp/quacppbackend.h22
-rw-r--r--src/plugins/opcua/uacpp/quacppclient.cpp73
-rw-r--r--src/plugins/opcua/uacpp/quacppclient.h13
-rw-r--r--src/plugins/opcua/uacpp/quacppnode.cpp40
-rw-r--r--src/plugins/opcua/uacpp/quacppnode.h5
-rw-r--r--src/plugins/opcua/uacpp/quacppsubscription.cpp311
-rw-r--r--src/plugins/opcua/uacpp/quacppsubscription.h17
-rw-r--r--src/plugins/opcua/uacpp/quacpputils.cpp50
-rw-r--r--src/plugins/opcua/uacpp/quacppvalueconverter.cpp147
-rw-r--r--src/plugins/plugins.pro2
-rw-r--r--src/src.pro5
-rw-r--r--tests/auto/auto.pro7
-rw-r--r--tests/auto/declarative/declarative.pro5
-rw-r--r--tests/auto/declarative/tst_absolutenode.qml346
-rw-r--r--tests/auto/declarative/tst_generic.qml57
-rw-r--r--tests/auto/declarative/tst_methodnode.qml119
-rw-r--r--tests/auto/declarative/tst_opcua.cpp121
-rw-r--r--tests/auto/declarative/tst_relativenode.qml299
-rw-r--r--tests/auto/qopcuaclient/qopcuaclient.pro2
-rw-r--r--tests/auto/qopcuaclient/tst_client.cpp2627
-rw-r--r--tests/manual/eventsubscription/eventsubscription.pro10
-rw-r--r--tests/manual/eventsubscription/tst_eventsubscription.cpp261
-rw-r--r--tests/manual/manual.pro3
-rw-r--r--tests/open62541-testserver/main.cpp163
-rw-r--r--tests/open62541-testserver/testserver.cpp320
-rw-r--r--tests/open62541-testserver/testserver.h26
-rw-r--r--tests/tests.pro3
-rw-r--r--tools/defaultnodeidsgenerator/defaultnodeidsgenerator.pro10
-rw-r--r--tools/defaultnodeidsgenerator/main.cpp242
-rw-r--r--tools/tools.pro7
183 files changed, 32424 insertions, 10168 deletions
diff --git a/.qmake.conf b/.qmake.conf
index 5bcd368..47fec21 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -3,4 +3,4 @@ load(qt_build_config)
ROOT_SOURCE_DIR=$$PWD
ROOT_BUILD_DIR=$$shadowed($$PWD)
-MODULE_VERSION = 5.11.3
+MODULE_VERSION = 5.12.0
diff --git a/config.tests/freeopcua/freeopcua.pro b/config.tests/freeopcua/freeopcua.pro
deleted file mode 100644
index 9fc03c4..0000000
--- a/config.tests/freeopcua/freeopcua.pro
+++ /dev/null
@@ -1,2 +0,0 @@
-SOURCES += main.cpp
-CONFIG += exceptions
diff --git a/config.tests/open62541/main.cpp b/config.tests/open62541/main.cpp
index 478f54e..9749033 100644
--- a/config.tests/open62541/main.cpp
+++ b/config.tests/open62541/main.cpp
@@ -35,7 +35,7 @@
****************************************************************************/
#include <stdio.h>
-#include "open62541.h"
+#include "open62541/open62541.h"
int main(int argc, char *argv[])
{
diff --git a/examples/opcua/opcuaviewer/NodeIds.csv b/examples/opcua/opcuaviewer/NodeIds.csv
deleted file mode 100644
index 3306b5f..0000000
--- a/examples/opcua/opcuaviewer/NodeIds.csv
+++ /dev/null
@@ -1,5746 +0,0 @@
-Boolean,1,DataType
-SByte,2,DataType
-Byte,3,DataType
-Int16,4,DataType
-UInt16,5,DataType
-Int32,6,DataType
-UInt32,7,DataType
-Int64,8,DataType
-UInt64,9,DataType
-Float,10,DataType
-Double,11,DataType
-String,12,DataType
-DateTime,13,DataType
-Guid,14,DataType
-ByteString,15,DataType
-XmlElement,16,DataType
-NodeId,17,DataType
-ExpandedNodeId,18,DataType
-StatusCode,19,DataType
-QualifiedName,20,DataType
-LocalizedText,21,DataType
-Structure,22,DataType
-DataValue,23,DataType
-BaseDataType,24,DataType
-DiagnosticInfo,25,DataType
-Number,26,DataType
-Integer,27,DataType
-UInteger,28,DataType
-Enumeration,29,DataType
-Image,30,DataType
-References,31,ReferenceType
-NonHierarchicalReferences,32,ReferenceType
-HierarchicalReferences,33,ReferenceType
-HasChild,34,ReferenceType
-Organizes,35,ReferenceType
-HasEventSource,36,ReferenceType
-HasModellingRule,37,ReferenceType
-HasEncoding,38,ReferenceType
-HasDescription,39,ReferenceType
-HasTypeDefinition,40,ReferenceType
-GeneratesEvent,41,ReferenceType
-Aggregates,44,ReferenceType
-HasSubtype,45,ReferenceType
-HasProperty,46,ReferenceType
-HasComponent,47,ReferenceType
-HasNotifier,48,ReferenceType
-HasOrderedComponent,49,ReferenceType
-FromState,51,ReferenceType
-ToState,52,ReferenceType
-HasCause,53,ReferenceType
-HasEffect,54,ReferenceType
-HasHistoricalConfiguration,56,ReferenceType
-BaseObjectType,58,ObjectType
-FolderType,61,ObjectType
-BaseVariableType,62,VariableType
-BaseDataVariableType,63,VariableType
-PropertyType,68,VariableType
-DataTypeDescriptionType,69,VariableType
-DataTypeDictionaryType,72,VariableType
-DataTypeSystemType,75,ObjectType
-DataTypeEncodingType,76,ObjectType
-ModellingRuleType,77,ObjectType
-ModellingRule_Mandatory,78,Object
-ModellingRule_MandatoryShared,79,Object
-ModellingRule_Optional,80,Object
-ModellingRule_ExposesItsArray,83,Object
-RootFolder,84,Object
-ObjectsFolder,85,Object
-TypesFolder,86,Object
-ViewsFolder,87,Object
-ObjectTypesFolder,88,Object
-VariableTypesFolder,89,Object
-DataTypesFolder,90,Object
-ReferenceTypesFolder,91,Object
-XmlSchema_TypeSystem,92,Object
-OPCBinarySchema_TypeSystem,93,Object
-DataTypeDescriptionType_DataTypeVersion,104,Variable
-DataTypeDescriptionType_DictionaryFragment,105,Variable
-DataTypeDictionaryType_DataTypeVersion,106,Variable
-DataTypeDictionaryType_NamespaceUri,107,Variable
-ModellingRuleType_NamingRule,111,Variable
-ModellingRule_Mandatory_NamingRule,112,Variable
-ModellingRule_Optional_NamingRule,113,Variable
-ModellingRule_ExposesItsArray_NamingRule,114,Variable
-ModellingRule_MandatoryShared_NamingRule,116,Variable
-HasSubStateMachine,117,ReferenceType
-NamingRuleType,120,DataType
-Decimal128,121,DataType
-IdType,256,DataType
-NodeClass,257,DataType
-Node,258,DataType
-Node_Encoding_DefaultXml,259,Object
-Node_Encoding_DefaultBinary,260,Object
-ObjectNode,261,DataType
-ObjectNode_Encoding_DefaultXml,262,Object
-ObjectNode_Encoding_DefaultBinary,263,Object
-ObjectTypeNode,264,DataType
-ObjectTypeNode_Encoding_DefaultXml,265,Object
-ObjectTypeNode_Encoding_DefaultBinary,266,Object
-VariableNode,267,DataType
-VariableNode_Encoding_DefaultXml,268,Object
-VariableNode_Encoding_DefaultBinary,269,Object
-VariableTypeNode,270,DataType
-VariableTypeNode_Encoding_DefaultXml,271,Object
-VariableTypeNode_Encoding_DefaultBinary,272,Object
-ReferenceTypeNode,273,DataType
-ReferenceTypeNode_Encoding_DefaultXml,274,Object
-ReferenceTypeNode_Encoding_DefaultBinary,275,Object
-MethodNode,276,DataType
-MethodNode_Encoding_DefaultXml,277,Object
-MethodNode_Encoding_DefaultBinary,278,Object
-ViewNode,279,DataType
-ViewNode_Encoding_DefaultXml,280,Object
-ViewNode_Encoding_DefaultBinary,281,Object
-DataTypeNode,282,DataType
-DataTypeNode_Encoding_DefaultXml,283,Object
-DataTypeNode_Encoding_DefaultBinary,284,Object
-ReferenceNode,285,DataType
-ReferenceNode_Encoding_DefaultXml,286,Object
-ReferenceNode_Encoding_DefaultBinary,287,Object
-IntegerId,288,DataType
-Counter,289,DataType
-Duration,290,DataType
-NumericRange,291,DataType
-Time,292,DataType
-Date,293,DataType
-UtcTime,294,DataType
-LocaleId,295,DataType
-Argument,296,DataType
-Argument_Encoding_DefaultXml,297,Object
-Argument_Encoding_DefaultBinary,298,Object
-StatusResult,299,DataType
-StatusResult_Encoding_DefaultXml,300,Object
-StatusResult_Encoding_DefaultBinary,301,Object
-MessageSecurityMode,302,DataType
-UserTokenType,303,DataType
-UserTokenPolicy,304,DataType
-UserTokenPolicy_Encoding_DefaultXml,305,Object
-UserTokenPolicy_Encoding_DefaultBinary,306,Object
-ApplicationType,307,DataType
-ApplicationDescription,308,DataType
-ApplicationDescription_Encoding_DefaultXml,309,Object
-ApplicationDescription_Encoding_DefaultBinary,310,Object
-ApplicationInstanceCertificate,311,DataType
-EndpointDescription,312,DataType
-EndpointDescription_Encoding_DefaultXml,313,Object
-EndpointDescription_Encoding_DefaultBinary,314,Object
-SecurityTokenRequestType,315,DataType
-UserIdentityToken,316,DataType
-UserIdentityToken_Encoding_DefaultXml,317,Object
-UserIdentityToken_Encoding_DefaultBinary,318,Object
-AnonymousIdentityToken,319,DataType
-AnonymousIdentityToken_Encoding_DefaultXml,320,Object
-AnonymousIdentityToken_Encoding_DefaultBinary,321,Object
-UserNameIdentityToken,322,DataType
-UserNameIdentityToken_Encoding_DefaultXml,323,Object
-UserNameIdentityToken_Encoding_DefaultBinary,324,Object
-X509IdentityToken,325,DataType
-X509IdentityToken_Encoding_DefaultXml,326,Object
-X509IdentityToken_Encoding_DefaultBinary,327,Object
-EndpointConfiguration,331,DataType
-EndpointConfiguration_Encoding_DefaultXml,332,Object
-EndpointConfiguration_Encoding_DefaultBinary,333,Object
-BuildInfo,338,DataType
-BuildInfo_Encoding_DefaultXml,339,Object
-BuildInfo_Encoding_DefaultBinary,340,Object
-SignedSoftwareCertificate,344,DataType
-SignedSoftwareCertificate_Encoding_DefaultXml,345,Object
-SignedSoftwareCertificate_Encoding_DefaultBinary,346,Object
-AttributeWriteMask,347,DataType
-NodeAttributesMask,348,DataType
-NodeAttributes,349,DataType
-NodeAttributes_Encoding_DefaultXml,350,Object
-NodeAttributes_Encoding_DefaultBinary,351,Object
-ObjectAttributes,352,DataType
-ObjectAttributes_Encoding_DefaultXml,353,Object
-ObjectAttributes_Encoding_DefaultBinary,354,Object
-VariableAttributes,355,DataType
-VariableAttributes_Encoding_DefaultXml,356,Object
-VariableAttributes_Encoding_DefaultBinary,357,Object
-MethodAttributes,358,DataType
-MethodAttributes_Encoding_DefaultXml,359,Object
-MethodAttributes_Encoding_DefaultBinary,360,Object
-ObjectTypeAttributes,361,DataType
-ObjectTypeAttributes_Encoding_DefaultXml,362,Object
-ObjectTypeAttributes_Encoding_DefaultBinary,363,Object
-VariableTypeAttributes,364,DataType
-VariableTypeAttributes_Encoding_DefaultXml,365,Object
-VariableTypeAttributes_Encoding_DefaultBinary,366,Object
-ReferenceTypeAttributes,367,DataType
-ReferenceTypeAttributes_Encoding_DefaultXml,368,Object
-ReferenceTypeAttributes_Encoding_DefaultBinary,369,Object
-DataTypeAttributes,370,DataType
-DataTypeAttributes_Encoding_DefaultXml,371,Object
-DataTypeAttributes_Encoding_DefaultBinary,372,Object
-ViewAttributes,373,DataType
-ViewAttributes_Encoding_DefaultXml,374,Object
-ViewAttributes_Encoding_DefaultBinary,375,Object
-AddNodesItem,376,DataType
-AddNodesItem_Encoding_DefaultXml,377,Object
-AddNodesItem_Encoding_DefaultBinary,378,Object
-AddReferencesItem,379,DataType
-AddReferencesItem_Encoding_DefaultXml,380,Object
-AddReferencesItem_Encoding_DefaultBinary,381,Object
-DeleteNodesItem,382,DataType
-DeleteNodesItem_Encoding_DefaultXml,383,Object
-DeleteNodesItem_Encoding_DefaultBinary,384,Object
-DeleteReferencesItem,385,DataType
-DeleteReferencesItem_Encoding_DefaultXml,386,Object
-DeleteReferencesItem_Encoding_DefaultBinary,387,Object
-SessionAuthenticationToken,388,DataType
-RequestHeader,389,DataType
-RequestHeader_Encoding_DefaultXml,390,Object
-RequestHeader_Encoding_DefaultBinary,391,Object
-ResponseHeader,392,DataType
-ResponseHeader_Encoding_DefaultXml,393,Object
-ResponseHeader_Encoding_DefaultBinary,394,Object
-ServiceFault,395,DataType
-ServiceFault_Encoding_DefaultXml,396,Object
-ServiceFault_Encoding_DefaultBinary,397,Object
-FindServersRequest,420,DataType
-FindServersRequest_Encoding_DefaultXml,421,Object
-FindServersRequest_Encoding_DefaultBinary,422,Object
-FindServersResponse,423,DataType
-FindServersResponse_Encoding_DefaultXml,424,Object
-FindServersResponse_Encoding_DefaultBinary,425,Object
-GetEndpointsRequest,426,DataType
-GetEndpointsRequest_Encoding_DefaultXml,427,Object
-GetEndpointsRequest_Encoding_DefaultBinary,428,Object
-GetEndpointsResponse,429,DataType
-GetEndpointsResponse_Encoding_DefaultXml,430,Object
-GetEndpointsResponse_Encoding_DefaultBinary,431,Object
-RegisteredServer,432,DataType
-RegisteredServer_Encoding_DefaultXml,433,Object
-RegisteredServer_Encoding_DefaultBinary,434,Object
-RegisterServerRequest,435,DataType
-RegisterServerRequest_Encoding_DefaultXml,436,Object
-RegisterServerRequest_Encoding_DefaultBinary,437,Object
-RegisterServerResponse,438,DataType
-RegisterServerResponse_Encoding_DefaultXml,439,Object
-RegisterServerResponse_Encoding_DefaultBinary,440,Object
-ChannelSecurityToken,441,DataType
-ChannelSecurityToken_Encoding_DefaultXml,442,Object
-ChannelSecurityToken_Encoding_DefaultBinary,443,Object
-OpenSecureChannelRequest,444,DataType
-OpenSecureChannelRequest_Encoding_DefaultXml,445,Object
-OpenSecureChannelRequest_Encoding_DefaultBinary,446,Object
-OpenSecureChannelResponse,447,DataType
-OpenSecureChannelResponse_Encoding_DefaultXml,448,Object
-OpenSecureChannelResponse_Encoding_DefaultBinary,449,Object
-CloseSecureChannelRequest,450,DataType
-CloseSecureChannelRequest_Encoding_DefaultXml,451,Object
-CloseSecureChannelRequest_Encoding_DefaultBinary,452,Object
-CloseSecureChannelResponse,453,DataType
-CloseSecureChannelResponse_Encoding_DefaultXml,454,Object
-CloseSecureChannelResponse_Encoding_DefaultBinary,455,Object
-SignatureData,456,DataType
-SignatureData_Encoding_DefaultXml,457,Object
-SignatureData_Encoding_DefaultBinary,458,Object
-CreateSessionRequest,459,DataType
-CreateSessionRequest_Encoding_DefaultXml,460,Object
-CreateSessionRequest_Encoding_DefaultBinary,461,Object
-CreateSessionResponse,462,DataType
-CreateSessionResponse_Encoding_DefaultXml,463,Object
-CreateSessionResponse_Encoding_DefaultBinary,464,Object
-ActivateSessionRequest,465,DataType
-ActivateSessionRequest_Encoding_DefaultXml,466,Object
-ActivateSessionRequest_Encoding_DefaultBinary,467,Object
-ActivateSessionResponse,468,DataType
-ActivateSessionResponse_Encoding_DefaultXml,469,Object
-ActivateSessionResponse_Encoding_DefaultBinary,470,Object
-CloseSessionRequest,471,DataType
-CloseSessionRequest_Encoding_DefaultXml,472,Object
-CloseSessionRequest_Encoding_DefaultBinary,473,Object
-CloseSessionResponse,474,DataType
-CloseSessionResponse_Encoding_DefaultXml,475,Object
-CloseSessionResponse_Encoding_DefaultBinary,476,Object
-CancelRequest,477,DataType
-CancelRequest_Encoding_DefaultXml,478,Object
-CancelRequest_Encoding_DefaultBinary,479,Object
-CancelResponse,480,DataType
-CancelResponse_Encoding_DefaultXml,481,Object
-CancelResponse_Encoding_DefaultBinary,482,Object
-AddNodesResult,483,DataType
-AddNodesResult_Encoding_DefaultXml,484,Object
-AddNodesResult_Encoding_DefaultBinary,485,Object
-AddNodesRequest,486,DataType
-AddNodesRequest_Encoding_DefaultXml,487,Object
-AddNodesRequest_Encoding_DefaultBinary,488,Object
-AddNodesResponse,489,DataType
-AddNodesResponse_Encoding_DefaultXml,490,Object
-AddNodesResponse_Encoding_DefaultBinary,491,Object
-AddReferencesRequest,492,DataType
-AddReferencesRequest_Encoding_DefaultXml,493,Object
-AddReferencesRequest_Encoding_DefaultBinary,494,Object
-AddReferencesResponse,495,DataType
-AddReferencesResponse_Encoding_DefaultXml,496,Object
-AddReferencesResponse_Encoding_DefaultBinary,497,Object
-DeleteNodesRequest,498,DataType
-DeleteNodesRequest_Encoding_DefaultXml,499,Object
-DeleteNodesRequest_Encoding_DefaultBinary,500,Object
-DeleteNodesResponse,501,DataType
-DeleteNodesResponse_Encoding_DefaultXml,502,Object
-DeleteNodesResponse_Encoding_DefaultBinary,503,Object
-DeleteReferencesRequest,504,DataType
-DeleteReferencesRequest_Encoding_DefaultXml,505,Object
-DeleteReferencesRequest_Encoding_DefaultBinary,506,Object
-DeleteReferencesResponse,507,DataType
-DeleteReferencesResponse_Encoding_DefaultXml,508,Object
-DeleteReferencesResponse_Encoding_DefaultBinary,509,Object
-BrowseDirection,510,DataType
-ViewDescription,511,DataType
-ViewDescription_Encoding_DefaultXml,512,Object
-ViewDescription_Encoding_DefaultBinary,513,Object
-BrowseDescription,514,DataType
-BrowseDescription_Encoding_DefaultXml,515,Object
-BrowseDescription_Encoding_DefaultBinary,516,Object
-BrowseResultMask,517,DataType
-ReferenceDescription,518,DataType
-ReferenceDescription_Encoding_DefaultXml,519,Object
-ReferenceDescription_Encoding_DefaultBinary,520,Object
-ContinuationPoint,521,DataType
-BrowseResult,522,DataType
-BrowseResult_Encoding_DefaultXml,523,Object
-BrowseResult_Encoding_DefaultBinary,524,Object
-BrowseRequest,525,DataType
-BrowseRequest_Encoding_DefaultXml,526,Object
-BrowseRequest_Encoding_DefaultBinary,527,Object
-BrowseResponse,528,DataType
-BrowseResponse_Encoding_DefaultXml,529,Object
-BrowseResponse_Encoding_DefaultBinary,530,Object
-BrowseNextRequest,531,DataType
-BrowseNextRequest_Encoding_DefaultXml,532,Object
-BrowseNextRequest_Encoding_DefaultBinary,533,Object
-BrowseNextResponse,534,DataType
-BrowseNextResponse_Encoding_DefaultXml,535,Object
-BrowseNextResponse_Encoding_DefaultBinary,536,Object
-RelativePathElement,537,DataType
-RelativePathElement_Encoding_DefaultXml,538,Object
-RelativePathElement_Encoding_DefaultBinary,539,Object
-RelativePath,540,DataType
-RelativePath_Encoding_DefaultXml,541,Object
-RelativePath_Encoding_DefaultBinary,542,Object
-BrowsePath,543,DataType
-BrowsePath_Encoding_DefaultXml,544,Object
-BrowsePath_Encoding_DefaultBinary,545,Object
-BrowsePathTarget,546,DataType
-BrowsePathTarget_Encoding_DefaultXml,547,Object
-BrowsePathTarget_Encoding_DefaultBinary,548,Object
-BrowsePathResult,549,DataType
-BrowsePathResult_Encoding_DefaultXml,550,Object
-BrowsePathResult_Encoding_DefaultBinary,551,Object
-TranslateBrowsePathsToNodeIdsRequest,552,DataType
-TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml,553,Object
-TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary,554,Object
-TranslateBrowsePathsToNodeIdsResponse,555,DataType
-TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml,556,Object
-TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary,557,Object
-RegisterNodesRequest,558,DataType
-RegisterNodesRequest_Encoding_DefaultXml,559,Object
-RegisterNodesRequest_Encoding_DefaultBinary,560,Object
-RegisterNodesResponse,561,DataType
-RegisterNodesResponse_Encoding_DefaultXml,562,Object
-RegisterNodesResponse_Encoding_DefaultBinary,563,Object
-UnregisterNodesRequest,564,DataType
-UnregisterNodesRequest_Encoding_DefaultXml,565,Object
-UnregisterNodesRequest_Encoding_DefaultBinary,566,Object
-UnregisterNodesResponse,567,DataType
-UnregisterNodesResponse_Encoding_DefaultXml,568,Object
-UnregisterNodesResponse_Encoding_DefaultBinary,569,Object
-QueryDataDescription,570,DataType
-QueryDataDescription_Encoding_DefaultXml,571,Object
-QueryDataDescription_Encoding_DefaultBinary,572,Object
-NodeTypeDescription,573,DataType
-NodeTypeDescription_Encoding_DefaultXml,574,Object
-NodeTypeDescription_Encoding_DefaultBinary,575,Object
-FilterOperator,576,DataType
-QueryDataSet,577,DataType
-QueryDataSet_Encoding_DefaultXml,578,Object
-QueryDataSet_Encoding_DefaultBinary,579,Object
-NodeReference,580,DataType
-NodeReference_Encoding_DefaultXml,581,Object
-NodeReference_Encoding_DefaultBinary,582,Object
-ContentFilterElement,583,DataType
-ContentFilterElement_Encoding_DefaultXml,584,Object
-ContentFilterElement_Encoding_DefaultBinary,585,Object
-ContentFilter,586,DataType
-ContentFilter_Encoding_DefaultXml,587,Object
-ContentFilter_Encoding_DefaultBinary,588,Object
-FilterOperand,589,DataType
-FilterOperand_Encoding_DefaultXml,590,Object
-FilterOperand_Encoding_DefaultBinary,591,Object
-ElementOperand,592,DataType
-ElementOperand_Encoding_DefaultXml,593,Object
-ElementOperand_Encoding_DefaultBinary,594,Object
-LiteralOperand,595,DataType
-LiteralOperand_Encoding_DefaultXml,596,Object
-LiteralOperand_Encoding_DefaultBinary,597,Object
-AttributeOperand,598,DataType
-AttributeOperand_Encoding_DefaultXml,599,Object
-AttributeOperand_Encoding_DefaultBinary,600,Object
-SimpleAttributeOperand,601,DataType
-SimpleAttributeOperand_Encoding_DefaultXml,602,Object
-SimpleAttributeOperand_Encoding_DefaultBinary,603,Object
-ContentFilterElementResult,604,DataType
-ContentFilterElementResult_Encoding_DefaultXml,605,Object
-ContentFilterElementResult_Encoding_DefaultBinary,606,Object
-ContentFilterResult,607,DataType
-ContentFilterResult_Encoding_DefaultXml,608,Object
-ContentFilterResult_Encoding_DefaultBinary,609,Object
-ParsingResult,610,DataType
-ParsingResult_Encoding_DefaultXml,611,Object
-ParsingResult_Encoding_DefaultBinary,612,Object
-QueryFirstRequest,613,DataType
-QueryFirstRequest_Encoding_DefaultXml,614,Object
-QueryFirstRequest_Encoding_DefaultBinary,615,Object
-QueryFirstResponse,616,DataType
-QueryFirstResponse_Encoding_DefaultXml,617,Object
-QueryFirstResponse_Encoding_DefaultBinary,618,Object
-QueryNextRequest,619,DataType
-QueryNextRequest_Encoding_DefaultXml,620,Object
-QueryNextRequest_Encoding_DefaultBinary,621,Object
-QueryNextResponse,622,DataType
-QueryNextResponse_Encoding_DefaultXml,623,Object
-QueryNextResponse_Encoding_DefaultBinary,624,Object
-TimestampsToReturn,625,DataType
-ReadValueId,626,DataType
-ReadValueId_Encoding_DefaultXml,627,Object
-ReadValueId_Encoding_DefaultBinary,628,Object
-ReadRequest,629,DataType
-ReadRequest_Encoding_DefaultXml,630,Object
-ReadRequest_Encoding_DefaultBinary,631,Object
-ReadResponse,632,DataType
-ReadResponse_Encoding_DefaultXml,633,Object
-ReadResponse_Encoding_DefaultBinary,634,Object
-HistoryReadValueId,635,DataType
-HistoryReadValueId_Encoding_DefaultXml,636,Object
-HistoryReadValueId_Encoding_DefaultBinary,637,Object
-HistoryReadResult,638,DataType
-HistoryReadResult_Encoding_DefaultXml,639,Object
-HistoryReadResult_Encoding_DefaultBinary,640,Object
-HistoryReadDetails,641,DataType
-HistoryReadDetails_Encoding_DefaultXml,642,Object
-HistoryReadDetails_Encoding_DefaultBinary,643,Object
-ReadEventDetails,644,DataType
-ReadEventDetails_Encoding_DefaultXml,645,Object
-ReadEventDetails_Encoding_DefaultBinary,646,Object
-ReadRawModifiedDetails,647,DataType
-ReadRawModifiedDetails_Encoding_DefaultXml,648,Object
-ReadRawModifiedDetails_Encoding_DefaultBinary,649,Object
-ReadProcessedDetails,650,DataType
-ReadProcessedDetails_Encoding_DefaultXml,651,Object
-ReadProcessedDetails_Encoding_DefaultBinary,652,Object
-ReadAtTimeDetails,653,DataType
-ReadAtTimeDetails_Encoding_DefaultXml,654,Object
-ReadAtTimeDetails_Encoding_DefaultBinary,655,Object
-HistoryData,656,DataType
-HistoryData_Encoding_DefaultXml,657,Object
-HistoryData_Encoding_DefaultBinary,658,Object
-HistoryEvent,659,DataType
-HistoryEvent_Encoding_DefaultXml,660,Object
-HistoryEvent_Encoding_DefaultBinary,661,Object
-HistoryReadRequest,662,DataType
-HistoryReadRequest_Encoding_DefaultXml,663,Object
-HistoryReadRequest_Encoding_DefaultBinary,664,Object
-HistoryReadResponse,665,DataType
-HistoryReadResponse_Encoding_DefaultXml,666,Object
-HistoryReadResponse_Encoding_DefaultBinary,667,Object
-WriteValue,668,DataType
-WriteValue_Encoding_DefaultXml,669,Object
-WriteValue_Encoding_DefaultBinary,670,Object
-WriteRequest,671,DataType
-WriteRequest_Encoding_DefaultXml,672,Object
-WriteRequest_Encoding_DefaultBinary,673,Object
-WriteResponse,674,DataType
-WriteResponse_Encoding_DefaultXml,675,Object
-WriteResponse_Encoding_DefaultBinary,676,Object
-HistoryUpdateDetails,677,DataType
-HistoryUpdateDetails_Encoding_DefaultXml,678,Object
-HistoryUpdateDetails_Encoding_DefaultBinary,679,Object
-UpdateDataDetails,680,DataType
-UpdateDataDetails_Encoding_DefaultXml,681,Object
-UpdateDataDetails_Encoding_DefaultBinary,682,Object
-UpdateEventDetails,683,DataType
-UpdateEventDetails_Encoding_DefaultXml,684,Object
-UpdateEventDetails_Encoding_DefaultBinary,685,Object
-DeleteRawModifiedDetails,686,DataType
-DeleteRawModifiedDetails_Encoding_DefaultXml,687,Object
-DeleteRawModifiedDetails_Encoding_DefaultBinary,688,Object
-DeleteAtTimeDetails,689,DataType
-DeleteAtTimeDetails_Encoding_DefaultXml,690,Object
-DeleteAtTimeDetails_Encoding_DefaultBinary,691,Object
-DeleteEventDetails,692,DataType
-DeleteEventDetails_Encoding_DefaultXml,693,Object
-DeleteEventDetails_Encoding_DefaultBinary,694,Object
-HistoryUpdateResult,695,DataType
-HistoryUpdateResult_Encoding_DefaultXml,696,Object
-HistoryUpdateResult_Encoding_DefaultBinary,697,Object
-HistoryUpdateRequest,698,DataType
-HistoryUpdateRequest_Encoding_DefaultXml,699,Object
-HistoryUpdateRequest_Encoding_DefaultBinary,700,Object
-HistoryUpdateResponse,701,DataType
-HistoryUpdateResponse_Encoding_DefaultXml,702,Object
-HistoryUpdateResponse_Encoding_DefaultBinary,703,Object
-CallMethodRequest,704,DataType
-CallMethodRequest_Encoding_DefaultXml,705,Object
-CallMethodRequest_Encoding_DefaultBinary,706,Object
-CallMethodResult,707,DataType
-CallMethodResult_Encoding_DefaultXml,708,Object
-CallMethodResult_Encoding_DefaultBinary,709,Object
-CallRequest,710,DataType
-CallRequest_Encoding_DefaultXml,711,Object
-CallRequest_Encoding_DefaultBinary,712,Object
-CallResponse,713,DataType
-CallResponse_Encoding_DefaultXml,714,Object
-CallResponse_Encoding_DefaultBinary,715,Object
-MonitoringMode,716,DataType
-DataChangeTrigger,717,DataType
-DeadbandType,718,DataType
-MonitoringFilter,719,DataType
-MonitoringFilter_Encoding_DefaultXml,720,Object
-MonitoringFilter_Encoding_DefaultBinary,721,Object
-DataChangeFilter,722,DataType
-DataChangeFilter_Encoding_DefaultXml,723,Object
-DataChangeFilter_Encoding_DefaultBinary,724,Object
-EventFilter,725,DataType
-EventFilter_Encoding_DefaultXml,726,Object
-EventFilter_Encoding_DefaultBinary,727,Object
-AggregateFilter,728,DataType
-AggregateFilter_Encoding_DefaultXml,729,Object
-AggregateFilter_Encoding_DefaultBinary,730,Object
-MonitoringFilterResult,731,DataType
-MonitoringFilterResult_Encoding_DefaultXml,732,Object
-MonitoringFilterResult_Encoding_DefaultBinary,733,Object
-EventFilterResult,734,DataType
-EventFilterResult_Encoding_DefaultXml,735,Object
-EventFilterResult_Encoding_DefaultBinary,736,Object
-AggregateFilterResult,737,DataType
-AggregateFilterResult_Encoding_DefaultXml,738,Object
-AggregateFilterResult_Encoding_DefaultBinary,739,Object
-MonitoringParameters,740,DataType
-MonitoringParameters_Encoding_DefaultXml,741,Object
-MonitoringParameters_Encoding_DefaultBinary,742,Object
-MonitoredItemCreateRequest,743,DataType
-MonitoredItemCreateRequest_Encoding_DefaultXml,744,Object
-MonitoredItemCreateRequest_Encoding_DefaultBinary,745,Object
-MonitoredItemCreateResult,746,DataType
-MonitoredItemCreateResult_Encoding_DefaultXml,747,Object
-MonitoredItemCreateResult_Encoding_DefaultBinary,748,Object
-CreateMonitoredItemsRequest,749,DataType
-CreateMonitoredItemsRequest_Encoding_DefaultXml,750,Object
-CreateMonitoredItemsRequest_Encoding_DefaultBinary,751,Object
-CreateMonitoredItemsResponse,752,DataType
-CreateMonitoredItemsResponse_Encoding_DefaultXml,753,Object
-CreateMonitoredItemsResponse_Encoding_DefaultBinary,754,Object
-MonitoredItemModifyRequest,755,DataType
-MonitoredItemModifyRequest_Encoding_DefaultXml,756,Object
-MonitoredItemModifyRequest_Encoding_DefaultBinary,757,Object
-MonitoredItemModifyResult,758,DataType
-MonitoredItemModifyResult_Encoding_DefaultXml,759,Object
-MonitoredItemModifyResult_Encoding_DefaultBinary,760,Object
-ModifyMonitoredItemsRequest,761,DataType
-ModifyMonitoredItemsRequest_Encoding_DefaultXml,762,Object
-ModifyMonitoredItemsRequest_Encoding_DefaultBinary,763,Object
-ModifyMonitoredItemsResponse,764,DataType
-ModifyMonitoredItemsResponse_Encoding_DefaultXml,765,Object
-ModifyMonitoredItemsResponse_Encoding_DefaultBinary,766,Object
-SetMonitoringModeRequest,767,DataType
-SetMonitoringModeRequest_Encoding_DefaultXml,768,Object
-SetMonitoringModeRequest_Encoding_DefaultBinary,769,Object
-SetMonitoringModeResponse,770,DataType
-SetMonitoringModeResponse_Encoding_DefaultXml,771,Object
-SetMonitoringModeResponse_Encoding_DefaultBinary,772,Object
-SetTriggeringRequest,773,DataType
-SetTriggeringRequest_Encoding_DefaultXml,774,Object
-SetTriggeringRequest_Encoding_DefaultBinary,775,Object
-SetTriggeringResponse,776,DataType
-SetTriggeringResponse_Encoding_DefaultXml,777,Object
-SetTriggeringResponse_Encoding_DefaultBinary,778,Object
-DeleteMonitoredItemsRequest,779,DataType
-DeleteMonitoredItemsRequest_Encoding_DefaultXml,780,Object
-DeleteMonitoredItemsRequest_Encoding_DefaultBinary,781,Object
-DeleteMonitoredItemsResponse,782,DataType
-DeleteMonitoredItemsResponse_Encoding_DefaultXml,783,Object
-DeleteMonitoredItemsResponse_Encoding_DefaultBinary,784,Object
-CreateSubscriptionRequest,785,DataType
-CreateSubscriptionRequest_Encoding_DefaultXml,786,Object
-CreateSubscriptionRequest_Encoding_DefaultBinary,787,Object
-CreateSubscriptionResponse,788,DataType
-CreateSubscriptionResponse_Encoding_DefaultXml,789,Object
-CreateSubscriptionResponse_Encoding_DefaultBinary,790,Object
-ModifySubscriptionRequest,791,DataType
-ModifySubscriptionRequest_Encoding_DefaultXml,792,Object
-ModifySubscriptionRequest_Encoding_DefaultBinary,793,Object
-ModifySubscriptionResponse,794,DataType
-ModifySubscriptionResponse_Encoding_DefaultXml,795,Object
-ModifySubscriptionResponse_Encoding_DefaultBinary,796,Object
-SetPublishingModeRequest,797,DataType
-SetPublishingModeRequest_Encoding_DefaultXml,798,Object
-SetPublishingModeRequest_Encoding_DefaultBinary,799,Object
-SetPublishingModeResponse,800,DataType
-SetPublishingModeResponse_Encoding_DefaultXml,801,Object
-SetPublishingModeResponse_Encoding_DefaultBinary,802,Object
-NotificationMessage,803,DataType
-NotificationMessage_Encoding_DefaultXml,804,Object
-NotificationMessage_Encoding_DefaultBinary,805,Object
-MonitoredItemNotification,806,DataType
-MonitoredItemNotification_Encoding_DefaultXml,807,Object
-MonitoredItemNotification_Encoding_DefaultBinary,808,Object
-DataChangeNotification,809,DataType
-DataChangeNotification_Encoding_DefaultXml,810,Object
-DataChangeNotification_Encoding_DefaultBinary,811,Object
-StatusChangeNotification,818,DataType
-StatusChangeNotification_Encoding_DefaultXml,819,Object
-StatusChangeNotification_Encoding_DefaultBinary,820,Object
-SubscriptionAcknowledgement,821,DataType
-SubscriptionAcknowledgement_Encoding_DefaultXml,822,Object
-SubscriptionAcknowledgement_Encoding_DefaultBinary,823,Object
-PublishRequest,824,DataType
-PublishRequest_Encoding_DefaultXml,825,Object
-PublishRequest_Encoding_DefaultBinary,826,Object
-PublishResponse,827,DataType
-PublishResponse_Encoding_DefaultXml,828,Object
-PublishResponse_Encoding_DefaultBinary,829,Object
-RepublishRequest,830,DataType
-RepublishRequest_Encoding_DefaultXml,831,Object
-RepublishRequest_Encoding_DefaultBinary,832,Object
-RepublishResponse,833,DataType
-RepublishResponse_Encoding_DefaultXml,834,Object
-RepublishResponse_Encoding_DefaultBinary,835,Object
-TransferResult,836,DataType
-TransferResult_Encoding_DefaultXml,837,Object
-TransferResult_Encoding_DefaultBinary,838,Object
-TransferSubscriptionsRequest,839,DataType
-TransferSubscriptionsRequest_Encoding_DefaultXml,840,Object
-TransferSubscriptionsRequest_Encoding_DefaultBinary,841,Object
-TransferSubscriptionsResponse,842,DataType
-TransferSubscriptionsResponse_Encoding_DefaultXml,843,Object
-TransferSubscriptionsResponse_Encoding_DefaultBinary,844,Object
-DeleteSubscriptionsRequest,845,DataType
-DeleteSubscriptionsRequest_Encoding_DefaultXml,846,Object
-DeleteSubscriptionsRequest_Encoding_DefaultBinary,847,Object
-DeleteSubscriptionsResponse,848,DataType
-DeleteSubscriptionsResponse_Encoding_DefaultXml,849,Object
-DeleteSubscriptionsResponse_Encoding_DefaultBinary,850,Object
-RedundancySupport,851,DataType
-ServerState,852,DataType
-RedundantServerDataType,853,DataType
-RedundantServerDataType_Encoding_DefaultXml,854,Object
-RedundantServerDataType_Encoding_DefaultBinary,855,Object
-SamplingIntervalDiagnosticsDataType,856,DataType
-SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml,857,Object
-SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary,858,Object
-ServerDiagnosticsSummaryDataType,859,DataType
-ServerDiagnosticsSummaryDataType_Encoding_DefaultXml,860,Object
-ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary,861,Object
-ServerStatusDataType,862,DataType
-ServerStatusDataType_Encoding_DefaultXml,863,Object
-ServerStatusDataType_Encoding_DefaultBinary,864,Object
-SessionDiagnosticsDataType,865,DataType
-SessionDiagnosticsDataType_Encoding_DefaultXml,866,Object
-SessionDiagnosticsDataType_Encoding_DefaultBinary,867,Object
-SessionSecurityDiagnosticsDataType,868,DataType
-SessionSecurityDiagnosticsDataType_Encoding_DefaultXml,869,Object
-SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary,870,Object
-ServiceCounterDataType,871,DataType
-ServiceCounterDataType_Encoding_DefaultXml,872,Object
-ServiceCounterDataType_Encoding_DefaultBinary,873,Object
-SubscriptionDiagnosticsDataType,874,DataType
-SubscriptionDiagnosticsDataType_Encoding_DefaultXml,875,Object
-SubscriptionDiagnosticsDataType_Encoding_DefaultBinary,876,Object
-ModelChangeStructureDataType,877,DataType
-ModelChangeStructureDataType_Encoding_DefaultXml,878,Object
-ModelChangeStructureDataType_Encoding_DefaultBinary,879,Object
-Range,884,DataType
-Range_Encoding_DefaultXml,885,Object
-Range_Encoding_DefaultBinary,886,Object
-EUInformation,887,DataType
-EUInformation_Encoding_DefaultXml,888,Object
-EUInformation_Encoding_DefaultBinary,889,Object
-ExceptionDeviationFormat,890,DataType
-Annotation,891,DataType
-Annotation_Encoding_DefaultXml,892,Object
-Annotation_Encoding_DefaultBinary,893,Object
-ProgramDiagnosticDataType,894,DataType
-ProgramDiagnosticDataType_Encoding_DefaultXml,895,Object
-ProgramDiagnosticDataType_Encoding_DefaultBinary,896,Object
-SemanticChangeStructureDataType,897,DataType
-SemanticChangeStructureDataType_Encoding_DefaultXml,898,Object
-SemanticChangeStructureDataType_Encoding_DefaultBinary,899,Object
-EventNotificationList,914,DataType
-EventNotificationList_Encoding_DefaultXml,915,Object
-EventNotificationList_Encoding_DefaultBinary,916,Object
-EventFieldList,917,DataType
-EventFieldList_Encoding_DefaultXml,918,Object
-EventFieldList_Encoding_DefaultBinary,919,Object
-HistoryEventFieldList,920,DataType
-HistoryEventFieldList_Encoding_DefaultXml,921,Object
-HistoryEventFieldList_Encoding_DefaultBinary,922,Object
-IssuedIdentityToken,938,DataType
-IssuedIdentityToken_Encoding_DefaultXml,939,Object
-IssuedIdentityToken_Encoding_DefaultBinary,940,Object
-NotificationData,945,DataType
-NotificationData_Encoding_DefaultXml,946,Object
-NotificationData_Encoding_DefaultBinary,947,Object
-AggregateConfiguration,948,DataType
-AggregateConfiguration_Encoding_DefaultXml,949,Object
-AggregateConfiguration_Encoding_DefaultBinary,950,Object
-ImageBMP,2000,DataType
-ImageGIF,2001,DataType
-ImageJPG,2002,DataType
-ImagePNG,2003,DataType
-ServerType,2004,ObjectType
-ServerType_ServerArray,2005,Variable
-ServerType_NamespaceArray,2006,Variable
-ServerType_ServerStatus,2007,Variable
-ServerType_ServiceLevel,2008,Variable
-ServerType_ServerCapabilities,2009,Object
-ServerType_ServerDiagnostics,2010,Object
-ServerType_VendorServerInfo,2011,Object
-ServerType_ServerRedundancy,2012,Object
-ServerCapabilitiesType,2013,ObjectType
-ServerCapabilitiesType_ServerProfileArray,2014,Variable
-ServerCapabilitiesType_LocaleIdArray,2016,Variable
-ServerCapabilitiesType_MinSupportedSampleRate,2017,Variable
-ServerCapabilitiesType_ModellingRules,2019,Object
-ServerDiagnosticsType,2020,ObjectType
-ServerDiagnosticsType_ServerDiagnosticsSummary,2021,Variable
-ServerDiagnosticsType_SamplingIntervalDiagnosticsArray,2022,Variable
-ServerDiagnosticsType_SubscriptionDiagnosticsArray,2023,Variable
-ServerDiagnosticsType_EnabledFlag,2025,Variable
-SessionsDiagnosticsSummaryType,2026,ObjectType
-SessionsDiagnosticsSummaryType_SessionDiagnosticsArray,2027,Variable
-SessionsDiagnosticsSummaryType_SessionSecurityDiagnosticsArray,2028,Variable
-SessionDiagnosticsObjectType,2029,ObjectType
-SessionDiagnosticsObjectType_SessionDiagnostics,2030,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics,2031,Variable
-SessionDiagnosticsObjectType_SubscriptionDiagnosticsArray,2032,Variable
-VendorServerInfoType,2033,ObjectType
-ServerRedundancyType,2034,ObjectType
-ServerRedundancyType_RedundancySupport,2035,Variable
-TransparentRedundancyType,2036,ObjectType
-TransparentRedundancyType_CurrentServerId,2037,Variable
-TransparentRedundancyType_RedundantServerArray,2038,Variable
-NonTransparentRedundancyType,2039,ObjectType
-NonTransparentRedundancyType_ServerUriArray,2040,Variable
-BaseEventType,2041,ObjectType
-BaseEventType_EventId,2042,Variable
-BaseEventType_EventType,2043,Variable
-BaseEventType_SourceNode,2044,Variable
-BaseEventType_SourceName,2045,Variable
-BaseEventType_Time,2046,Variable
-BaseEventType_ReceiveTime,2047,Variable
-BaseEventType_Message,2050,Variable
-BaseEventType_Severity,2051,Variable
-AuditEventType,2052,ObjectType
-AuditEventType_ActionTimeStamp,2053,Variable
-AuditEventType_Status,2054,Variable
-AuditEventType_ServerId,2055,Variable
-AuditEventType_ClientAuditEntryId,2056,Variable
-AuditEventType_ClientUserId,2057,Variable
-AuditSecurityEventType,2058,ObjectType
-AuditChannelEventType,2059,ObjectType
-AuditOpenSecureChannelEventType,2060,ObjectType
-AuditOpenSecureChannelEventType_ClientCertificate,2061,Variable
-AuditOpenSecureChannelEventType_RequestType,2062,Variable
-AuditOpenSecureChannelEventType_SecurityPolicyUri,2063,Variable
-AuditOpenSecureChannelEventType_SecurityMode,2065,Variable
-AuditOpenSecureChannelEventType_RequestedLifetime,2066,Variable
-AuditSessionEventType,2069,ObjectType
-AuditSessionEventType_SessionId,2070,Variable
-AuditCreateSessionEventType,2071,ObjectType
-AuditCreateSessionEventType_SecureChannelId,2072,Variable
-AuditCreateSessionEventType_ClientCertificate,2073,Variable
-AuditCreateSessionEventType_RevisedSessionTimeout,2074,Variable
-AuditActivateSessionEventType,2075,ObjectType
-AuditActivateSessionEventType_ClientSoftwareCertificates,2076,Variable
-AuditActivateSessionEventType_UserIdentityToken,2077,Variable
-AuditCancelEventType,2078,ObjectType
-AuditCancelEventType_RequestHandle,2079,Variable
-AuditCertificateEventType,2080,ObjectType
-AuditCertificateEventType_Certificate,2081,Variable
-AuditCertificateDataMismatchEventType,2082,ObjectType
-AuditCertificateDataMismatchEventType_InvalidHostname,2083,Variable
-AuditCertificateDataMismatchEventType_InvalidUri,2084,Variable
-AuditCertificateExpiredEventType,2085,ObjectType
-AuditCertificateInvalidEventType,2086,ObjectType
-AuditCertificateUntrustedEventType,2087,ObjectType
-AuditCertificateRevokedEventType,2088,ObjectType
-AuditCertificateMismatchEventType,2089,ObjectType
-AuditNodeManagementEventType,2090,ObjectType
-AuditAddNodesEventType,2091,ObjectType
-AuditAddNodesEventType_NodesToAdd,2092,Variable
-AuditDeleteNodesEventType,2093,ObjectType
-AuditDeleteNodesEventType_NodesToDelete,2094,Variable
-AuditAddReferencesEventType,2095,ObjectType
-AuditAddReferencesEventType_ReferencesToAdd,2096,Variable
-AuditDeleteReferencesEventType,2097,ObjectType
-AuditDeleteReferencesEventType_ReferencesToDelete,2098,Variable
-AuditUpdateEventType,2099,ObjectType
-AuditWriteUpdateEventType,2100,ObjectType
-AuditWriteUpdateEventType_IndexRange,2101,Variable
-AuditWriteUpdateEventType_OldValue,2102,Variable
-AuditWriteUpdateEventType_NewValue,2103,Variable
-AuditHistoryUpdateEventType,2104,ObjectType
-AuditUpdateMethodEventType,2127,ObjectType
-AuditUpdateMethodEventType_MethodId,2128,Variable
-AuditUpdateMethodEventType_InputArguments,2129,Variable
-SystemEventType,2130,ObjectType
-DeviceFailureEventType,2131,ObjectType
-BaseModelChangeEventType,2132,ObjectType
-GeneralModelChangeEventType,2133,ObjectType
-GeneralModelChangeEventType_Changes,2134,Variable
-ServerVendorCapabilityType,2137,VariableType
-ServerStatusType,2138,VariableType
-ServerStatusType_StartTime,2139,Variable
-ServerStatusType_CurrentTime,2140,Variable
-ServerStatusType_State,2141,Variable
-ServerStatusType_BuildInfo,2142,Variable
-ServerDiagnosticsSummaryType,2150,VariableType
-ServerDiagnosticsSummaryType_ServerViewCount,2151,Variable
-ServerDiagnosticsSummaryType_CurrentSessionCount,2152,Variable
-ServerDiagnosticsSummaryType_CumulatedSessionCount,2153,Variable
-ServerDiagnosticsSummaryType_SecurityRejectedSessionCount,2154,Variable
-ServerDiagnosticsSummaryType_RejectedSessionCount,2155,Variable
-ServerDiagnosticsSummaryType_SessionTimeoutCount,2156,Variable
-ServerDiagnosticsSummaryType_SessionAbortCount,2157,Variable
-ServerDiagnosticsSummaryType_PublishingIntervalCount,2159,Variable
-ServerDiagnosticsSummaryType_CurrentSubscriptionCount,2160,Variable
-ServerDiagnosticsSummaryType_CumulatedSubscriptionCount,2161,Variable
-ServerDiagnosticsSummaryType_SecurityRejectedRequestsCount,2162,Variable
-ServerDiagnosticsSummaryType_RejectedRequestsCount,2163,Variable
-SamplingIntervalDiagnosticsArrayType,2164,VariableType
-SamplingIntervalDiagnosticsType,2165,VariableType
-SamplingIntervalDiagnosticsType_SamplingInterval,2166,Variable
-SubscriptionDiagnosticsArrayType,2171,VariableType
-SubscriptionDiagnosticsType,2172,VariableType
-SubscriptionDiagnosticsType_SessionId,2173,Variable
-SubscriptionDiagnosticsType_SubscriptionId,2174,Variable
-SubscriptionDiagnosticsType_Priority,2175,Variable
-SubscriptionDiagnosticsType_PublishingInterval,2176,Variable
-SubscriptionDiagnosticsType_MaxKeepAliveCount,2177,Variable
-SubscriptionDiagnosticsType_MaxNotificationsPerPublish,2179,Variable
-SubscriptionDiagnosticsType_PublishingEnabled,2180,Variable
-SubscriptionDiagnosticsType_ModifyCount,2181,Variable
-SubscriptionDiagnosticsType_EnableCount,2182,Variable
-SubscriptionDiagnosticsType_DisableCount,2183,Variable
-SubscriptionDiagnosticsType_RepublishRequestCount,2184,Variable
-SubscriptionDiagnosticsType_RepublishMessageRequestCount,2185,Variable
-SubscriptionDiagnosticsType_RepublishMessageCount,2186,Variable
-SubscriptionDiagnosticsType_TransferRequestCount,2187,Variable
-SubscriptionDiagnosticsType_TransferredToAltClientCount,2188,Variable
-SubscriptionDiagnosticsType_TransferredToSameClientCount,2189,Variable
-SubscriptionDiagnosticsType_PublishRequestCount,2190,Variable
-SubscriptionDiagnosticsType_DataChangeNotificationsCount,2191,Variable
-SubscriptionDiagnosticsType_NotificationsCount,2193,Variable
-SessionDiagnosticsArrayType,2196,VariableType
-SessionDiagnosticsVariableType,2197,VariableType
-SessionDiagnosticsVariableType_SessionId,2198,Variable
-SessionDiagnosticsVariableType_SessionName,2199,Variable
-SessionDiagnosticsVariableType_ClientDescription,2200,Variable
-SessionDiagnosticsVariableType_ServerUri,2201,Variable
-SessionDiagnosticsVariableType_EndpointUrl,2202,Variable
-SessionDiagnosticsVariableType_LocaleIds,2203,Variable
-SessionDiagnosticsVariableType_ActualSessionTimeout,2204,Variable
-SessionDiagnosticsVariableType_ClientConnectionTime,2205,Variable
-SessionDiagnosticsVariableType_ClientLastContactTime,2206,Variable
-SessionDiagnosticsVariableType_CurrentSubscriptionsCount,2207,Variable
-SessionDiagnosticsVariableType_CurrentMonitoredItemsCount,2208,Variable
-SessionDiagnosticsVariableType_CurrentPublishRequestsInQueue,2209,Variable
-SessionDiagnosticsVariableType_ReadCount,2217,Variable
-SessionDiagnosticsVariableType_HistoryReadCount,2218,Variable
-SessionDiagnosticsVariableType_WriteCount,2219,Variable
-SessionDiagnosticsVariableType_HistoryUpdateCount,2220,Variable
-SessionDiagnosticsVariableType_CallCount,2221,Variable
-SessionDiagnosticsVariableType_CreateMonitoredItemsCount,2222,Variable
-SessionDiagnosticsVariableType_ModifyMonitoredItemsCount,2223,Variable
-SessionDiagnosticsVariableType_SetMonitoringModeCount,2224,Variable
-SessionDiagnosticsVariableType_SetTriggeringCount,2225,Variable
-SessionDiagnosticsVariableType_DeleteMonitoredItemsCount,2226,Variable
-SessionDiagnosticsVariableType_CreateSubscriptionCount,2227,Variable
-SessionDiagnosticsVariableType_ModifySubscriptionCount,2228,Variable
-SessionDiagnosticsVariableType_SetPublishingModeCount,2229,Variable
-SessionDiagnosticsVariableType_PublishCount,2230,Variable
-SessionDiagnosticsVariableType_RepublishCount,2231,Variable
-SessionDiagnosticsVariableType_TransferSubscriptionsCount,2232,Variable
-SessionDiagnosticsVariableType_DeleteSubscriptionsCount,2233,Variable
-SessionDiagnosticsVariableType_AddNodesCount,2234,Variable
-SessionDiagnosticsVariableType_AddReferencesCount,2235,Variable
-SessionDiagnosticsVariableType_DeleteNodesCount,2236,Variable
-SessionDiagnosticsVariableType_DeleteReferencesCount,2237,Variable
-SessionDiagnosticsVariableType_BrowseCount,2238,Variable
-SessionDiagnosticsVariableType_BrowseNextCount,2239,Variable
-SessionDiagnosticsVariableType_TranslateBrowsePathsToNodeIdsCount,2240,Variable
-SessionDiagnosticsVariableType_QueryFirstCount,2241,Variable
-SessionDiagnosticsVariableType_QueryNextCount,2242,Variable
-SessionSecurityDiagnosticsArrayType,2243,VariableType
-SessionSecurityDiagnosticsType,2244,VariableType
-SessionSecurityDiagnosticsType_SessionId,2245,Variable
-SessionSecurityDiagnosticsType_ClientUserIdOfSession,2246,Variable
-SessionSecurityDiagnosticsType_ClientUserIdHistory,2247,Variable
-SessionSecurityDiagnosticsType_AuthenticationMechanism,2248,Variable
-SessionSecurityDiagnosticsType_Encoding,2249,Variable
-SessionSecurityDiagnosticsType_TransportProtocol,2250,Variable
-SessionSecurityDiagnosticsType_SecurityMode,2251,Variable
-SessionSecurityDiagnosticsType_SecurityPolicyUri,2252,Variable
-Server,2253,Object
-Server_ServerArray,2254,Variable
-Server_NamespaceArray,2255,Variable
-Server_ServerStatus,2256,Variable
-Server_ServerStatus_StartTime,2257,Variable
-Server_ServerStatus_CurrentTime,2258,Variable
-Server_ServerStatus_State,2259,Variable
-Server_ServerStatus_BuildInfo,2260,Variable
-Server_ServerStatus_BuildInfo_ProductName,2261,Variable
-Server_ServerStatus_BuildInfo_ProductUri,2262,Variable
-Server_ServerStatus_BuildInfo_ManufacturerName,2263,Variable
-Server_ServerStatus_BuildInfo_SoftwareVersion,2264,Variable
-Server_ServerStatus_BuildInfo_BuildNumber,2265,Variable
-Server_ServerStatus_BuildInfo_BuildDate,2266,Variable
-Server_ServiceLevel,2267,Variable
-Server_ServerCapabilities,2268,Object
-Server_ServerCapabilities_ServerProfileArray,2269,Variable
-Server_ServerCapabilities_LocaleIdArray,2271,Variable
-Server_ServerCapabilities_MinSupportedSampleRate,2272,Variable
-Server_ServerDiagnostics,2274,Object
-Server_ServerDiagnostics_ServerDiagnosticsSummary,2275,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount,2276,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount,2277,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount,2278,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount,2279,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount,2281,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount,2282,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount,2284,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount,2285,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount,2286,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount,2287,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount,2288,Variable
-Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray,2289,Variable
-Server_ServerDiagnostics_SubscriptionDiagnosticsArray,2290,Variable
-Server_ServerDiagnostics_EnabledFlag,2294,Variable
-Server_VendorServerInfo,2295,Object
-Server_ServerRedundancy,2296,Object
-StateMachineType,2299,ObjectType
-StateType,2307,ObjectType
-StateType_StateNumber,2308,Variable
-InitialStateType,2309,ObjectType
-TransitionType,2310,ObjectType
-TransitionEventType,2311,ObjectType
-TransitionType_TransitionNumber,2312,Variable
-AuditUpdateStateEventType,2315,ObjectType
-HistoricalDataConfigurationType,2318,ObjectType
-HistoricalDataConfigurationType_Stepped,2323,Variable
-HistoricalDataConfigurationType_Definition,2324,Variable
-HistoricalDataConfigurationType_MaxTimeInterval,2325,Variable
-HistoricalDataConfigurationType_MinTimeInterval,2326,Variable
-HistoricalDataConfigurationType_ExceptionDeviation,2327,Variable
-HistoricalDataConfigurationType_ExceptionDeviationFormat,2328,Variable
-HistoryServerCapabilitiesType,2330,ObjectType
-HistoryServerCapabilitiesType_AccessHistoryDataCapability,2331,Variable
-HistoryServerCapabilitiesType_AccessHistoryEventsCapability,2332,Variable
-HistoryServerCapabilitiesType_InsertDataCapability,2334,Variable
-HistoryServerCapabilitiesType_ReplaceDataCapability,2335,Variable
-HistoryServerCapabilitiesType_UpdateDataCapability,2336,Variable
-HistoryServerCapabilitiesType_DeleteRawCapability,2337,Variable
-HistoryServerCapabilitiesType_DeleteAtTimeCapability,2338,Variable
-AggregateFunctionType,2340,ObjectType
-AggregateFunction_Interpolative,2341,Object
-AggregateFunction_Average,2342,Object
-AggregateFunction_TimeAverage,2343,Object
-AggregateFunction_Total,2344,Object
-AggregateFunction_Minimum,2346,Object
-AggregateFunction_Maximum,2347,Object
-AggregateFunction_MinimumActualTime,2348,Object
-AggregateFunction_MaximumActualTime,2349,Object
-AggregateFunction_Range,2350,Object
-AggregateFunction_AnnotationCount,2351,Object
-AggregateFunction_Count,2352,Object
-AggregateFunction_NumberOfTransitions,2355,Object
-AggregateFunction_Start,2357,Object
-AggregateFunction_End,2358,Object
-AggregateFunction_Delta,2359,Object
-AggregateFunction_DurationGood,2360,Object
-AggregateFunction_DurationBad,2361,Object
-AggregateFunction_PercentGood,2362,Object
-AggregateFunction_PercentBad,2363,Object
-AggregateFunction_WorstQuality,2364,Object
-DataItemType,2365,VariableType
-DataItemType_Definition,2366,Variable
-DataItemType_ValuePrecision,2367,Variable
-AnalogItemType,2368,VariableType
-AnalogItemType_EURange,2369,Variable
-AnalogItemType_InstrumentRange,2370,Variable
-AnalogItemType_EngineeringUnits,2371,Variable
-DiscreteItemType,2372,VariableType
-TwoStateDiscreteType,2373,VariableType
-TwoStateDiscreteType_FalseState,2374,Variable
-TwoStateDiscreteType_TrueState,2375,Variable
-MultiStateDiscreteType,2376,VariableType
-MultiStateDiscreteType_EnumStrings,2377,Variable
-ProgramTransitionEventType,2378,ObjectType
-ProgramTransitionEventType_IntermediateResult,2379,Variable
-ProgramDiagnosticType,2380,VariableType
-ProgramDiagnosticType_CreateSessionId,2381,Variable
-ProgramDiagnosticType_CreateClientName,2382,Variable
-ProgramDiagnosticType_InvocationCreationTime,2383,Variable
-ProgramDiagnosticType_LastTransitionTime,2384,Variable
-ProgramDiagnosticType_LastMethodCall,2385,Variable
-ProgramDiagnosticType_LastMethodSessionId,2386,Variable
-ProgramDiagnosticType_LastMethodInputArguments,2387,Variable
-ProgramDiagnosticType_LastMethodOutputArguments,2388,Variable
-ProgramDiagnosticType_LastMethodCallTime,2389,Variable
-ProgramDiagnosticType_LastMethodReturnStatus,2390,Variable
-ProgramStateMachineType,2391,ObjectType
-ProgramStateMachineType_Creatable,2392,Variable
-ProgramStateMachineType_Deletable,2393,Variable
-ProgramStateMachineType_AutoDelete,2394,Variable
-ProgramStateMachineType_RecycleCount,2395,Variable
-ProgramStateMachineType_InstanceCount,2396,Variable
-ProgramStateMachineType_MaxInstanceCount,2397,Variable
-ProgramStateMachineType_MaxRecycleCount,2398,Variable
-ProgramStateMachineType_ProgramDiagnostics,2399,Variable
-ProgramStateMachineType_Ready,2400,Object
-ProgramStateMachineType_Ready_StateNumber,2401,Variable
-ProgramStateMachineType_Running,2402,Object
-ProgramStateMachineType_Running_StateNumber,2403,Variable
-ProgramStateMachineType_Suspended,2404,Object
-ProgramStateMachineType_Suspended_StateNumber,2405,Variable
-ProgramStateMachineType_Halted,2406,Object
-ProgramStateMachineType_Halted_StateNumber,2407,Variable
-ProgramStateMachineType_HaltedToReady,2408,Object
-ProgramStateMachineType_HaltedToReady_TransitionNumber,2409,Variable
-ProgramStateMachineType_ReadyToRunning,2410,Object
-ProgramStateMachineType_ReadyToRunning_TransitionNumber,2411,Variable
-ProgramStateMachineType_RunningToHalted,2412,Object
-ProgramStateMachineType_RunningToHalted_TransitionNumber,2413,Variable
-ProgramStateMachineType_RunningToReady,2414,Object
-ProgramStateMachineType_RunningToReady_TransitionNumber,2415,Variable
-ProgramStateMachineType_RunningToSuspended,2416,Object
-ProgramStateMachineType_RunningToSuspended_TransitionNumber,2417,Variable
-ProgramStateMachineType_SuspendedToRunning,2418,Object
-ProgramStateMachineType_SuspendedToRunning_TransitionNumber,2419,Variable
-ProgramStateMachineType_SuspendedToHalted,2420,Object
-ProgramStateMachineType_SuspendedToHalted_TransitionNumber,2421,Variable
-ProgramStateMachineType_SuspendedToReady,2422,Object
-ProgramStateMachineType_SuspendedToReady_TransitionNumber,2423,Variable
-ProgramStateMachineType_ReadyToHalted,2424,Object
-ProgramStateMachineType_ReadyToHalted_TransitionNumber,2425,Variable
-ProgramStateMachineType_Start,2426,Method
-ProgramStateMachineType_Suspend,2427,Method
-ProgramStateMachineType_Resume,2428,Method
-ProgramStateMachineType_Halt,2429,Method
-ProgramStateMachineType_Reset,2430,Method
-SessionDiagnosticsVariableType_RegisterNodesCount,2730,Variable
-SessionDiagnosticsVariableType_UnregisterNodesCount,2731,Variable
-ServerCapabilitiesType_MaxBrowseContinuationPoints,2732,Variable
-ServerCapabilitiesType_MaxQueryContinuationPoints,2733,Variable
-ServerCapabilitiesType_MaxHistoryContinuationPoints,2734,Variable
-Server_ServerCapabilities_MaxBrowseContinuationPoints,2735,Variable
-Server_ServerCapabilities_MaxQueryContinuationPoints,2736,Variable
-Server_ServerCapabilities_MaxHistoryContinuationPoints,2737,Variable
-SemanticChangeEventType,2738,ObjectType
-SemanticChangeEventType_Changes,2739,Variable
-ServerType_Auditing,2742,Variable
-ServerDiagnosticsType_SessionsDiagnosticsSummary,2744,Object
-AuditChannelEventType_SecureChannelId,2745,Variable
-AuditOpenSecureChannelEventType_ClientCertificateThumbprint,2746,Variable
-AuditCreateSessionEventType_ClientCertificateThumbprint,2747,Variable
-AuditUrlMismatchEventType,2748,ObjectType
-AuditUrlMismatchEventType_EndpointUrl,2749,Variable
-AuditWriteUpdateEventType_AttributeId,2750,Variable
-AuditHistoryUpdateEventType_ParameterDataTypeId,2751,Variable
-ServerStatusType_SecondsTillShutdown,2752,Variable
-ServerStatusType_ShutdownReason,2753,Variable
-ServerCapabilitiesType_AggregateFunctions,2754,Object
-StateVariableType,2755,VariableType
-StateVariableType_Id,2756,Variable
-StateVariableType_Name,2757,Variable
-StateVariableType_Number,2758,Variable
-StateVariableType_EffectiveDisplayName,2759,Variable
-FiniteStateVariableType,2760,VariableType
-FiniteStateVariableType_Id,2761,Variable
-TransitionVariableType,2762,VariableType
-TransitionVariableType_Id,2763,Variable
-TransitionVariableType_Name,2764,Variable
-TransitionVariableType_Number,2765,Variable
-TransitionVariableType_TransitionTime,2766,Variable
-FiniteTransitionVariableType,2767,VariableType
-FiniteTransitionVariableType_Id,2768,Variable
-StateMachineType_CurrentState,2769,Variable
-StateMachineType_LastTransition,2770,Variable
-FiniteStateMachineType,2771,ObjectType
-FiniteStateMachineType_CurrentState,2772,Variable
-FiniteStateMachineType_LastTransition,2773,Variable
-TransitionEventType_Transition,2774,Variable
-TransitionEventType_FromState,2775,Variable
-TransitionEventType_ToState,2776,Variable
-AuditUpdateStateEventType_OldStateId,2777,Variable
-AuditUpdateStateEventType_NewStateId,2778,Variable
-ConditionType,2782,ObjectType
-RefreshStartEventType,2787,ObjectType
-RefreshEndEventType,2788,ObjectType
-RefreshRequiredEventType,2789,ObjectType
-AuditConditionEventType,2790,ObjectType
-AuditConditionEnableEventType,2803,ObjectType
-AuditConditionCommentEventType,2829,ObjectType
-DialogConditionType,2830,ObjectType
-DialogConditionType_Prompt,2831,Variable
-AcknowledgeableConditionType,2881,ObjectType
-AlarmConditionType,2915,ObjectType
-ShelvedStateMachineType,2929,ObjectType
-ShelvedStateMachineType_Unshelved,2930,Object
-ShelvedStateMachineType_TimedShelved,2932,Object
-ShelvedStateMachineType_OneShotShelved,2933,Object
-ShelvedStateMachineType_UnshelvedToTimedShelved,2935,Object
-ShelvedStateMachineType_UnshelvedToOneShotShelved,2936,Object
-ShelvedStateMachineType_TimedShelvedToUnshelved,2940,Object
-ShelvedStateMachineType_TimedShelvedToOneShotShelved,2942,Object
-ShelvedStateMachineType_OneShotShelvedToUnshelved,2943,Object
-ShelvedStateMachineType_OneShotShelvedToTimedShelved,2945,Object
-ShelvedStateMachineType_Unshelve,2947,Method
-ShelvedStateMachineType_OneShotShelve,2948,Method
-ShelvedStateMachineType_TimedShelve,2949,Method
-LimitAlarmType,2955,ObjectType
-ShelvedStateMachineType_TimedShelve_InputArguments,2991,Variable
-Server_ServerStatus_SecondsTillShutdown,2992,Variable
-Server_ServerStatus_ShutdownReason,2993,Variable
-Server_Auditing,2994,Variable
-Server_ServerCapabilities_ModellingRules,2996,Object
-Server_ServerCapabilities_AggregateFunctions,2997,Object
-SubscriptionDiagnosticsType_EventNotificationsCount,2998,Variable
-AuditHistoryEventUpdateEventType,2999,ObjectType
-AuditHistoryEventUpdateEventType_Filter,3003,Variable
-AuditHistoryValueUpdateEventType,3006,ObjectType
-AuditHistoryDeleteEventType,3012,ObjectType
-AuditHistoryRawModifyDeleteEventType,3014,ObjectType
-AuditHistoryRawModifyDeleteEventType_IsDeleteModified,3015,Variable
-AuditHistoryRawModifyDeleteEventType_StartTime,3016,Variable
-AuditHistoryRawModifyDeleteEventType_EndTime,3017,Variable
-AuditHistoryAtTimeDeleteEventType,3019,ObjectType
-AuditHistoryAtTimeDeleteEventType_ReqTimes,3020,Variable
-AuditHistoryAtTimeDeleteEventType_OldValues,3021,Variable
-AuditHistoryEventDeleteEventType,3022,ObjectType
-AuditHistoryEventDeleteEventType_EventIds,3023,Variable
-AuditHistoryEventDeleteEventType_OldValues,3024,Variable
-AuditHistoryEventUpdateEventType_UpdatedNode,3025,Variable
-AuditHistoryValueUpdateEventType_UpdatedNode,3026,Variable
-AuditHistoryDeleteEventType_UpdatedNode,3027,Variable
-AuditHistoryEventUpdateEventType_PerformInsertReplace,3028,Variable
-AuditHistoryEventUpdateEventType_NewValues,3029,Variable
-AuditHistoryEventUpdateEventType_OldValues,3030,Variable
-AuditHistoryValueUpdateEventType_PerformInsertReplace,3031,Variable
-AuditHistoryValueUpdateEventType_NewValues,3032,Variable
-AuditHistoryValueUpdateEventType_OldValues,3033,Variable
-AuditHistoryRawModifyDeleteEventType_OldValues,3034,Variable
-EventQueueOverflowEventType,3035,ObjectType
-EventTypesFolder,3048,Object
-ServerCapabilitiesType_SoftwareCertificates,3049,Variable
-SessionDiagnosticsVariableType_MaxResponseMessageSize,3050,Variable
-BuildInfoType,3051,VariableType
-BuildInfoType_ProductUri,3052,Variable
-BuildInfoType_ManufacturerName,3053,Variable
-BuildInfoType_ProductName,3054,Variable
-BuildInfoType_SoftwareVersion,3055,Variable
-BuildInfoType_BuildNumber,3056,Variable
-BuildInfoType_BuildDate,3057,Variable
-SessionSecurityDiagnosticsType_ClientCertificate,3058,Variable
-HistoricalDataConfigurationType_AggregateConfiguration,3059,Object
-DefaultBinary,3062,Object
-DefaultXml,3063,Object
-AlwaysGeneratesEvent,3065,ReferenceType
-Icon,3067,Variable
-NodeVersion,3068,Variable
-LocalTime,3069,Variable
-AllowNulls,3070,Variable
-EnumValues,3071,Variable
-InputArguments,3072,Variable
-OutputArguments,3073,Variable
-ServerType_ServerStatus_StartTime,3074,Variable
-ServerType_ServerStatus_CurrentTime,3075,Variable
-ServerType_ServerStatus_State,3076,Variable
-ServerType_ServerStatus_BuildInfo,3077,Variable
-ServerType_ServerStatus_BuildInfo_ProductUri,3078,Variable
-ServerType_ServerStatus_BuildInfo_ManufacturerName,3079,Variable
-ServerType_ServerStatus_BuildInfo_ProductName,3080,Variable
-ServerType_ServerStatus_BuildInfo_SoftwareVersion,3081,Variable
-ServerType_ServerStatus_BuildInfo_BuildNumber,3082,Variable
-ServerType_ServerStatus_BuildInfo_BuildDate,3083,Variable
-ServerType_ServerStatus_SecondsTillShutdown,3084,Variable
-ServerType_ServerStatus_ShutdownReason,3085,Variable
-ServerType_ServerCapabilities_ServerProfileArray,3086,Variable
-ServerType_ServerCapabilities_LocaleIdArray,3087,Variable
-ServerType_ServerCapabilities_MinSupportedSampleRate,3088,Variable
-ServerType_ServerCapabilities_MaxBrowseContinuationPoints,3089,Variable
-ServerType_ServerCapabilities_MaxQueryContinuationPoints,3090,Variable
-ServerType_ServerCapabilities_MaxHistoryContinuationPoints,3091,Variable
-ServerType_ServerCapabilities_SoftwareCertificates,3092,Variable
-ServerType_ServerCapabilities_ModellingRules,3093,Object
-ServerType_ServerCapabilities_AggregateFunctions,3094,Object
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary,3095,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount,3096,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount,3097,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount,3098,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount,3099,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount,3100,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount,3101,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount,3102,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount,3104,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount,3105,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount,3106,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount,3107,Variable
-ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount,3108,Variable
-ServerType_ServerDiagnostics_SamplingIntervalDiagnosticsArray,3109,Variable
-ServerType_ServerDiagnostics_SubscriptionDiagnosticsArray,3110,Variable
-ServerType_ServerDiagnostics_SessionsDiagnosticsSummary,3111,Object
-ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray,3112,Variable
-ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray,3113,Variable
-ServerType_ServerDiagnostics_EnabledFlag,3114,Variable
-ServerType_ServerRedundancy_RedundancySupport,3115,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_ServerViewCount,3116,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSessionCount,3117,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSessionCount,3118,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedSessionCount,3119,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedSessionCount,3120,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_SessionTimeoutCount,3121,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_SessionAbortCount,3122,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_PublishingIntervalCount,3124,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSubscriptionCount,3125,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSubscriptionCount,3126,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedRequestsCount,3127,Variable
-ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedRequestsCount,3128,Variable
-ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionDiagnosticsArray,3129,Variable
-ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray,3130,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_SessionId,3131,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_SessionName,3132,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ClientDescription,3133,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ServerUri,3134,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_EndpointUrl,3135,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_LocaleIds,3136,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ActualSessionTimeout,3137,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_MaxResponseMessageSize,3138,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ClientConnectionTime,3139,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ClientLastContactTime,3140,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_CurrentSubscriptionsCount,3141,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_CurrentMonitoredItemsCount,3142,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_CurrentPublishRequestsInQueue,3143,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ReadCount,3151,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_HistoryReadCount,3152,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_WriteCount,3153,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_HistoryUpdateCount,3154,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_CallCount,3155,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_CreateMonitoredItemsCount,3156,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ModifyMonitoredItemsCount,3157,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_SetMonitoringModeCount,3158,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_SetTriggeringCount,3159,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_DeleteMonitoredItemsCount,3160,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_CreateSubscriptionCount,3161,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_ModifySubscriptionCount,3162,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_SetPublishingModeCount,3163,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_PublishCount,3164,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_RepublishCount,3165,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_TransferSubscriptionsCount,3166,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_DeleteSubscriptionsCount,3167,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_AddNodesCount,3168,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_AddReferencesCount,3169,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_DeleteNodesCount,3170,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_DeleteReferencesCount,3171,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_BrowseCount,3172,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_BrowseNextCount,3173,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount,3174,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_QueryFirstCount,3175,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_QueryNextCount,3176,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_RegisterNodesCount,3177,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_UnregisterNodesCount,3178,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SessionId,3179,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdOfSession,3180,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdHistory,3181,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_AuthenticationMechanism,3182,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_Encoding,3183,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_TransportProtocol,3184,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityMode,3185,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityPolicyUri,3186,Variable
-SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientCertificate,3187,Variable
-TransparentRedundancyType_RedundancySupport,3188,Variable
-NonTransparentRedundancyType_RedundancySupport,3189,Variable
-BaseEventType_LocalTime,3190,Variable
-EventQueueOverflowEventType_EventId,3191,Variable
-EventQueueOverflowEventType_EventType,3192,Variable
-EventQueueOverflowEventType_SourceNode,3193,Variable
-EventQueueOverflowEventType_SourceName,3194,Variable
-EventQueueOverflowEventType_Time,3195,Variable
-EventQueueOverflowEventType_ReceiveTime,3196,Variable
-EventQueueOverflowEventType_LocalTime,3197,Variable
-EventQueueOverflowEventType_Message,3198,Variable
-EventQueueOverflowEventType_Severity,3199,Variable
-AuditEventType_EventId,3200,Variable
-AuditEventType_EventType,3201,Variable
-AuditEventType_SourceNode,3202,Variable
-AuditEventType_SourceName,3203,Variable
-AuditEventType_Time,3204,Variable
-AuditEventType_ReceiveTime,3205,Variable
-AuditEventType_LocalTime,3206,Variable
-AuditEventType_Message,3207,Variable
-AuditEventType_Severity,3208,Variable
-AuditSecurityEventType_EventId,3209,Variable
-AuditSecurityEventType_EventType,3210,Variable
-AuditSecurityEventType_SourceNode,3211,Variable
-AuditSecurityEventType_SourceName,3212,Variable
-AuditSecurityEventType_Time,3213,Variable
-AuditSecurityEventType_ReceiveTime,3214,Variable
-AuditSecurityEventType_LocalTime,3215,Variable
-AuditSecurityEventType_Message,3216,Variable
-AuditSecurityEventType_Severity,3217,Variable
-AuditSecurityEventType_ActionTimeStamp,3218,Variable
-AuditSecurityEventType_Status,3219,Variable
-AuditSecurityEventType_ServerId,3220,Variable
-AuditSecurityEventType_ClientAuditEntryId,3221,Variable
-AuditSecurityEventType_ClientUserId,3222,Variable
-AuditChannelEventType_EventId,3223,Variable
-AuditChannelEventType_EventType,3224,Variable
-AuditChannelEventType_SourceNode,3225,Variable
-AuditChannelEventType_SourceName,3226,Variable
-AuditChannelEventType_Time,3227,Variable
-AuditChannelEventType_ReceiveTime,3228,Variable
-AuditChannelEventType_LocalTime,3229,Variable
-AuditChannelEventType_Message,3230,Variable
-AuditChannelEventType_Severity,3231,Variable
-AuditChannelEventType_ActionTimeStamp,3232,Variable
-AuditChannelEventType_Status,3233,Variable
-AuditChannelEventType_ServerId,3234,Variable
-AuditChannelEventType_ClientAuditEntryId,3235,Variable
-AuditChannelEventType_ClientUserId,3236,Variable
-AuditOpenSecureChannelEventType_EventId,3237,Variable
-AuditOpenSecureChannelEventType_EventType,3238,Variable
-AuditOpenSecureChannelEventType_SourceNode,3239,Variable
-AuditOpenSecureChannelEventType_SourceName,3240,Variable
-AuditOpenSecureChannelEventType_Time,3241,Variable
-AuditOpenSecureChannelEventType_ReceiveTime,3242,Variable
-AuditOpenSecureChannelEventType_LocalTime,3243,Variable
-AuditOpenSecureChannelEventType_Message,3244,Variable
-AuditOpenSecureChannelEventType_Severity,3245,Variable
-AuditOpenSecureChannelEventType_ActionTimeStamp,3246,Variable
-AuditOpenSecureChannelEventType_Status,3247,Variable
-AuditOpenSecureChannelEventType_ServerId,3248,Variable
-AuditOpenSecureChannelEventType_ClientAuditEntryId,3249,Variable
-AuditOpenSecureChannelEventType_ClientUserId,3250,Variable
-AuditOpenSecureChannelEventType_SecureChannelId,3251,Variable
-AuditSessionEventType_EventId,3252,Variable
-AuditSessionEventType_EventType,3253,Variable
-AuditSessionEventType_SourceNode,3254,Variable
-AuditSessionEventType_SourceName,3255,Variable
-AuditSessionEventType_Time,3256,Variable
-AuditSessionEventType_ReceiveTime,3257,Variable
-AuditSessionEventType_LocalTime,3258,Variable
-AuditSessionEventType_Message,3259,Variable
-AuditSessionEventType_Severity,3260,Variable
-AuditSessionEventType_ActionTimeStamp,3261,Variable
-AuditSessionEventType_Status,3262,Variable
-AuditSessionEventType_ServerId,3263,Variable
-AuditSessionEventType_ClientAuditEntryId,3264,Variable
-AuditSessionEventType_ClientUserId,3265,Variable
-AuditCreateSessionEventType_EventId,3266,Variable
-AuditCreateSessionEventType_EventType,3267,Variable
-AuditCreateSessionEventType_SourceNode,3268,Variable
-AuditCreateSessionEventType_SourceName,3269,Variable
-AuditCreateSessionEventType_Time,3270,Variable
-AuditCreateSessionEventType_ReceiveTime,3271,Variable
-AuditCreateSessionEventType_LocalTime,3272,Variable
-AuditCreateSessionEventType_Message,3273,Variable
-AuditCreateSessionEventType_Severity,3274,Variable
-AuditCreateSessionEventType_ActionTimeStamp,3275,Variable
-AuditCreateSessionEventType_Status,3276,Variable
-AuditCreateSessionEventType_ServerId,3277,Variable
-AuditCreateSessionEventType_ClientAuditEntryId,3278,Variable
-AuditCreateSessionEventType_ClientUserId,3279,Variable
-AuditUrlMismatchEventType_EventId,3281,Variable
-AuditUrlMismatchEventType_EventType,3282,Variable
-AuditUrlMismatchEventType_SourceNode,3283,Variable
-AuditUrlMismatchEventType_SourceName,3284,Variable
-AuditUrlMismatchEventType_Time,3285,Variable
-AuditUrlMismatchEventType_ReceiveTime,3286,Variable
-AuditUrlMismatchEventType_LocalTime,3287,Variable
-AuditUrlMismatchEventType_Message,3288,Variable
-AuditUrlMismatchEventType_Severity,3289,Variable
-AuditUrlMismatchEventType_ActionTimeStamp,3290,Variable
-AuditUrlMismatchEventType_Status,3291,Variable
-AuditUrlMismatchEventType_ServerId,3292,Variable
-AuditUrlMismatchEventType_ClientAuditEntryId,3293,Variable
-AuditUrlMismatchEventType_ClientUserId,3294,Variable
-AuditUrlMismatchEventType_SecureChannelId,3296,Variable
-AuditUrlMismatchEventType_ClientCertificate,3297,Variable
-AuditUrlMismatchEventType_ClientCertificateThumbprint,3298,Variable
-AuditUrlMismatchEventType_RevisedSessionTimeout,3299,Variable
-AuditActivateSessionEventType_EventId,3300,Variable
-AuditActivateSessionEventType_EventType,3301,Variable
-AuditActivateSessionEventType_SourceNode,3302,Variable
-AuditActivateSessionEventType_SourceName,3303,Variable
-AuditActivateSessionEventType_Time,3304,Variable
-AuditActivateSessionEventType_ReceiveTime,3305,Variable
-AuditActivateSessionEventType_LocalTime,3306,Variable
-AuditActivateSessionEventType_Message,3307,Variable
-AuditActivateSessionEventType_Severity,3308,Variable
-AuditActivateSessionEventType_ActionTimeStamp,3309,Variable
-AuditActivateSessionEventType_Status,3310,Variable
-AuditActivateSessionEventType_ServerId,3311,Variable
-AuditActivateSessionEventType_ClientAuditEntryId,3312,Variable
-AuditActivateSessionEventType_ClientUserId,3313,Variable
-AuditActivateSessionEventType_SessionId,3314,Variable
-AuditCancelEventType_EventId,3315,Variable
-AuditCancelEventType_EventType,3316,Variable
-AuditCancelEventType_SourceNode,3317,Variable
-AuditCancelEventType_SourceName,3318,Variable
-AuditCancelEventType_Time,3319,Variable
-AuditCancelEventType_ReceiveTime,3320,Variable
-AuditCancelEventType_LocalTime,3321,Variable
-AuditCancelEventType_Message,3322,Variable
-AuditCancelEventType_Severity,3323,Variable
-AuditCancelEventType_ActionTimeStamp,3324,Variable
-AuditCancelEventType_Status,3325,Variable
-AuditCancelEventType_ServerId,3326,Variable
-AuditCancelEventType_ClientAuditEntryId,3327,Variable
-AuditCancelEventType_ClientUserId,3328,Variable
-AuditCancelEventType_SessionId,3329,Variable
-AuditCertificateEventType_EventId,3330,Variable
-AuditCertificateEventType_EventType,3331,Variable
-AuditCertificateEventType_SourceNode,3332,Variable
-AuditCertificateEventType_SourceName,3333,Variable
-AuditCertificateEventType_Time,3334,Variable
-AuditCertificateEventType_ReceiveTime,3335,Variable
-AuditCertificateEventType_LocalTime,3336,Variable
-AuditCertificateEventType_Message,3337,Variable
-AuditCertificateEventType_Severity,3338,Variable
-AuditCertificateEventType_ActionTimeStamp,3339,Variable
-AuditCertificateEventType_Status,3340,Variable
-AuditCertificateEventType_ServerId,3341,Variable
-AuditCertificateEventType_ClientAuditEntryId,3342,Variable
-AuditCertificateEventType_ClientUserId,3343,Variable
-AuditCertificateDataMismatchEventType_EventId,3344,Variable
-AuditCertificateDataMismatchEventType_EventType,3345,Variable
-AuditCertificateDataMismatchEventType_SourceNode,3346,Variable
-AuditCertificateDataMismatchEventType_SourceName,3347,Variable
-AuditCertificateDataMismatchEventType_Time,3348,Variable
-AuditCertificateDataMismatchEventType_ReceiveTime,3349,Variable
-AuditCertificateDataMismatchEventType_LocalTime,3350,Variable
-AuditCertificateDataMismatchEventType_Message,3351,Variable
-AuditCertificateDataMismatchEventType_Severity,3352,Variable
-AuditCertificateDataMismatchEventType_ActionTimeStamp,3353,Variable
-AuditCertificateDataMismatchEventType_Status,3354,Variable
-AuditCertificateDataMismatchEventType_ServerId,3355,Variable
-AuditCertificateDataMismatchEventType_ClientAuditEntryId,3356,Variable
-AuditCertificateDataMismatchEventType_ClientUserId,3357,Variable
-AuditCertificateDataMismatchEventType_Certificate,3358,Variable
-AuditCertificateExpiredEventType_EventId,3359,Variable
-AuditCertificateExpiredEventType_EventType,3360,Variable
-AuditCertificateExpiredEventType_SourceNode,3361,Variable
-AuditCertificateExpiredEventType_SourceName,3362,Variable
-AuditCertificateExpiredEventType_Time,3363,Variable
-AuditCertificateExpiredEventType_ReceiveTime,3364,Variable
-AuditCertificateExpiredEventType_LocalTime,3365,Variable
-AuditCertificateExpiredEventType_Message,3366,Variable
-AuditCertificateExpiredEventType_Severity,3367,Variable
-AuditCertificateExpiredEventType_ActionTimeStamp,3368,Variable
-AuditCertificateExpiredEventType_Status,3369,Variable
-AuditCertificateExpiredEventType_ServerId,3370,Variable
-AuditCertificateExpiredEventType_ClientAuditEntryId,3371,Variable
-AuditCertificateExpiredEventType_ClientUserId,3372,Variable
-AuditCertificateExpiredEventType_Certificate,3373,Variable
-AuditCertificateInvalidEventType_EventId,3374,Variable
-AuditCertificateInvalidEventType_EventType,3375,Variable
-AuditCertificateInvalidEventType_SourceNode,3376,Variable
-AuditCertificateInvalidEventType_SourceName,3377,Variable
-AuditCertificateInvalidEventType_Time,3378,Variable
-AuditCertificateInvalidEventType_ReceiveTime,3379,Variable
-AuditCertificateInvalidEventType_LocalTime,3380,Variable
-AuditCertificateInvalidEventType_Message,3381,Variable
-AuditCertificateInvalidEventType_Severity,3382,Variable
-AuditCertificateInvalidEventType_ActionTimeStamp,3383,Variable
-AuditCertificateInvalidEventType_Status,3384,Variable
-AuditCertificateInvalidEventType_ServerId,3385,Variable
-AuditCertificateInvalidEventType_ClientAuditEntryId,3386,Variable
-AuditCertificateInvalidEventType_ClientUserId,3387,Variable
-AuditCertificateInvalidEventType_Certificate,3388,Variable
-AuditCertificateUntrustedEventType_EventId,3389,Variable
-AuditCertificateUntrustedEventType_EventType,3390,Variable
-AuditCertificateUntrustedEventType_SourceNode,3391,Variable
-AuditCertificateUntrustedEventType_SourceName,3392,Variable
-AuditCertificateUntrustedEventType_Time,3393,Variable
-AuditCertificateUntrustedEventType_ReceiveTime,3394,Variable
-AuditCertificateUntrustedEventType_LocalTime,3395,Variable
-AuditCertificateUntrustedEventType_Message,3396,Variable
-AuditCertificateUntrustedEventType_Severity,3397,Variable
-AuditCertificateUntrustedEventType_ActionTimeStamp,3398,Variable
-AuditCertificateUntrustedEventType_Status,3399,Variable
-AuditCertificateUntrustedEventType_ServerId,3400,Variable
-AuditCertificateUntrustedEventType_ClientAuditEntryId,3401,Variable
-AuditCertificateUntrustedEventType_ClientUserId,3402,Variable
-AuditCertificateUntrustedEventType_Certificate,3403,Variable
-AuditCertificateRevokedEventType_EventId,3404,Variable
-AuditCertificateRevokedEventType_EventType,3405,Variable
-AuditCertificateRevokedEventType_SourceNode,3406,Variable
-AuditCertificateRevokedEventType_SourceName,3407,Variable
-AuditCertificateRevokedEventType_Time,3408,Variable
-AuditCertificateRevokedEventType_ReceiveTime,3409,Variable
-AuditCertificateRevokedEventType_LocalTime,3410,Variable
-AuditCertificateRevokedEventType_Message,3411,Variable
-AuditCertificateRevokedEventType_Severity,3412,Variable
-AuditCertificateRevokedEventType_ActionTimeStamp,3413,Variable
-AuditCertificateRevokedEventType_Status,3414,Variable
-AuditCertificateRevokedEventType_ServerId,3415,Variable
-AuditCertificateRevokedEventType_ClientAuditEntryId,3416,Variable
-AuditCertificateRevokedEventType_ClientUserId,3417,Variable
-AuditCertificateRevokedEventType_Certificate,3418,Variable
-AuditCertificateMismatchEventType_EventId,3419,Variable
-AuditCertificateMismatchEventType_EventType,3420,Variable
-AuditCertificateMismatchEventType_SourceNode,3421,Variable
-AuditCertificateMismatchEventType_SourceName,3422,Variable
-AuditCertificateMismatchEventType_Time,3423,Variable
-AuditCertificateMismatchEventType_ReceiveTime,3424,Variable
-AuditCertificateMismatchEventType_LocalTime,3425,Variable
-AuditCertificateMismatchEventType_Message,3426,Variable
-AuditCertificateMismatchEventType_Severity,3427,Variable
-AuditCertificateMismatchEventType_ActionTimeStamp,3428,Variable
-AuditCertificateMismatchEventType_Status,3429,Variable
-AuditCertificateMismatchEventType_ServerId,3430,Variable
-AuditCertificateMismatchEventType_ClientAuditEntryId,3431,Variable
-AuditCertificateMismatchEventType_ClientUserId,3432,Variable
-AuditCertificateMismatchEventType_Certificate,3433,Variable
-AuditNodeManagementEventType_EventId,3434,Variable
-AuditNodeManagementEventType_EventType,3435,Variable
-AuditNodeManagementEventType_SourceNode,3436,Variable
-AuditNodeManagementEventType_SourceName,3437,Variable
-AuditNodeManagementEventType_Time,3438,Variable
-AuditNodeManagementEventType_ReceiveTime,3439,Variable
-AuditNodeManagementEventType_LocalTime,3440,Variable
-AuditNodeManagementEventType_Message,3441,Variable
-AuditNodeManagementEventType_Severity,3442,Variable
-AuditNodeManagementEventType_ActionTimeStamp,3443,Variable
-AuditNodeManagementEventType_Status,3444,Variable
-AuditNodeManagementEventType_ServerId,3445,Variable
-AuditNodeManagementEventType_ClientAuditEntryId,3446,Variable
-AuditNodeManagementEventType_ClientUserId,3447,Variable
-AuditAddNodesEventType_EventId,3448,Variable
-AuditAddNodesEventType_EventType,3449,Variable
-AuditAddNodesEventType_SourceNode,3450,Variable
-AuditAddNodesEventType_SourceName,3451,Variable
-AuditAddNodesEventType_Time,3452,Variable
-AuditAddNodesEventType_ReceiveTime,3453,Variable
-AuditAddNodesEventType_LocalTime,3454,Variable
-AuditAddNodesEventType_Message,3455,Variable
-AuditAddNodesEventType_Severity,3456,Variable
-AuditAddNodesEventType_ActionTimeStamp,3457,Variable
-AuditAddNodesEventType_Status,3458,Variable
-AuditAddNodesEventType_ServerId,3459,Variable
-AuditAddNodesEventType_ClientAuditEntryId,3460,Variable
-AuditAddNodesEventType_ClientUserId,3461,Variable
-AuditDeleteNodesEventType_EventId,3462,Variable
-AuditDeleteNodesEventType_EventType,3463,Variable
-AuditDeleteNodesEventType_SourceNode,3464,Variable
-AuditDeleteNodesEventType_SourceName,3465,Variable
-AuditDeleteNodesEventType_Time,3466,Variable
-AuditDeleteNodesEventType_ReceiveTime,3467,Variable
-AuditDeleteNodesEventType_LocalTime,3468,Variable
-AuditDeleteNodesEventType_Message,3469,Variable
-AuditDeleteNodesEventType_Severity,3470,Variable
-AuditDeleteNodesEventType_ActionTimeStamp,3471,Variable
-AuditDeleteNodesEventType_Status,3472,Variable
-AuditDeleteNodesEventType_ServerId,3473,Variable
-AuditDeleteNodesEventType_ClientAuditEntryId,3474,Variable
-AuditDeleteNodesEventType_ClientUserId,3475,Variable
-AuditAddReferencesEventType_EventId,3476,Variable
-AuditAddReferencesEventType_EventType,3477,Variable
-AuditAddReferencesEventType_SourceNode,3478,Variable
-AuditAddReferencesEventType_SourceName,3479,Variable
-AuditAddReferencesEventType_Time,3480,Variable
-AuditAddReferencesEventType_ReceiveTime,3481,Variable
-AuditAddReferencesEventType_LocalTime,3482,Variable
-AuditAddReferencesEventType_Message,3483,Variable
-AuditAddReferencesEventType_Severity,3484,Variable
-AuditAddReferencesEventType_ActionTimeStamp,3485,Variable
-AuditAddReferencesEventType_Status,3486,Variable
-AuditAddReferencesEventType_ServerId,3487,Variable
-AuditAddReferencesEventType_ClientAuditEntryId,3488,Variable
-AuditAddReferencesEventType_ClientUserId,3489,Variable
-AuditDeleteReferencesEventType_EventId,3490,Variable
-AuditDeleteReferencesEventType_EventType,3491,Variable
-AuditDeleteReferencesEventType_SourceNode,3492,Variable
-AuditDeleteReferencesEventType_SourceName,3493,Variable
-AuditDeleteReferencesEventType_Time,3494,Variable
-AuditDeleteReferencesEventType_ReceiveTime,3495,Variable
-AuditDeleteReferencesEventType_LocalTime,3496,Variable
-AuditDeleteReferencesEventType_Message,3497,Variable
-AuditDeleteReferencesEventType_Severity,3498,Variable
-AuditDeleteReferencesEventType_ActionTimeStamp,3499,Variable
-AuditDeleteReferencesEventType_Status,3500,Variable
-AuditDeleteReferencesEventType_ServerId,3501,Variable
-AuditDeleteReferencesEventType_ClientAuditEntryId,3502,Variable
-AuditDeleteReferencesEventType_ClientUserId,3503,Variable
-AuditUpdateEventType_EventId,3504,Variable
-AuditUpdateEventType_EventType,3505,Variable
-AuditUpdateEventType_SourceNode,3506,Variable
-AuditUpdateEventType_SourceName,3507,Variable
-AuditUpdateEventType_Time,3508,Variable
-AuditUpdateEventType_ReceiveTime,3509,Variable
-AuditUpdateEventType_LocalTime,3510,Variable
-AuditUpdateEventType_Message,3511,Variable
-AuditUpdateEventType_Severity,3512,Variable
-AuditUpdateEventType_ActionTimeStamp,3513,Variable
-AuditUpdateEventType_Status,3514,Variable
-AuditUpdateEventType_ServerId,3515,Variable
-AuditUpdateEventType_ClientAuditEntryId,3516,Variable
-AuditUpdateEventType_ClientUserId,3517,Variable
-AuditWriteUpdateEventType_EventId,3518,Variable
-AuditWriteUpdateEventType_EventType,3519,Variable
-AuditWriteUpdateEventType_SourceNode,3520,Variable
-AuditWriteUpdateEventType_SourceName,3521,Variable
-AuditWriteUpdateEventType_Time,3522,Variable
-AuditWriteUpdateEventType_ReceiveTime,3523,Variable
-AuditWriteUpdateEventType_LocalTime,3524,Variable
-AuditWriteUpdateEventType_Message,3525,Variable
-AuditWriteUpdateEventType_Severity,3526,Variable
-AuditWriteUpdateEventType_ActionTimeStamp,3527,Variable
-AuditWriteUpdateEventType_Status,3528,Variable
-AuditWriteUpdateEventType_ServerId,3529,Variable
-AuditWriteUpdateEventType_ClientAuditEntryId,3530,Variable
-AuditWriteUpdateEventType_ClientUserId,3531,Variable
-AuditHistoryUpdateEventType_EventId,3532,Variable
-AuditHistoryUpdateEventType_EventType,3533,Variable
-AuditHistoryUpdateEventType_SourceNode,3534,Variable
-AuditHistoryUpdateEventType_SourceName,3535,Variable
-AuditHistoryUpdateEventType_Time,3536,Variable
-AuditHistoryUpdateEventType_ReceiveTime,3537,Variable
-AuditHistoryUpdateEventType_LocalTime,3538,Variable
-AuditHistoryUpdateEventType_Message,3539,Variable
-AuditHistoryUpdateEventType_Severity,3540,Variable
-AuditHistoryUpdateEventType_ActionTimeStamp,3541,Variable
-AuditHistoryUpdateEventType_Status,3542,Variable
-AuditHistoryUpdateEventType_ServerId,3543,Variable
-AuditHistoryUpdateEventType_ClientAuditEntryId,3544,Variable
-AuditHistoryUpdateEventType_ClientUserId,3545,Variable
-AuditHistoryEventUpdateEventType_EventId,3546,Variable
-AuditHistoryEventUpdateEventType_EventType,3547,Variable
-AuditHistoryEventUpdateEventType_SourceNode,3548,Variable
-AuditHistoryEventUpdateEventType_SourceName,3549,Variable
-AuditHistoryEventUpdateEventType_Time,3550,Variable
-AuditHistoryEventUpdateEventType_ReceiveTime,3551,Variable
-AuditHistoryEventUpdateEventType_LocalTime,3552,Variable
-AuditHistoryEventUpdateEventType_Message,3553,Variable
-AuditHistoryEventUpdateEventType_Severity,3554,Variable
-AuditHistoryEventUpdateEventType_ActionTimeStamp,3555,Variable
-AuditHistoryEventUpdateEventType_Status,3556,Variable
-AuditHistoryEventUpdateEventType_ServerId,3557,Variable
-AuditHistoryEventUpdateEventType_ClientAuditEntryId,3558,Variable
-AuditHistoryEventUpdateEventType_ClientUserId,3559,Variable
-AuditHistoryEventUpdateEventType_ParameterDataTypeId,3560,Variable
-AuditHistoryValueUpdateEventType_EventId,3561,Variable
-AuditHistoryValueUpdateEventType_EventType,3562,Variable
-AuditHistoryValueUpdateEventType_SourceNode,3563,Variable
-AuditHistoryValueUpdateEventType_SourceName,3564,Variable
-AuditHistoryValueUpdateEventType_Time,3565,Variable
-AuditHistoryValueUpdateEventType_ReceiveTime,3566,Variable
-AuditHistoryValueUpdateEventType_LocalTime,3567,Variable
-AuditHistoryValueUpdateEventType_Message,3568,Variable
-AuditHistoryValueUpdateEventType_Severity,3569,Variable
-AuditHistoryValueUpdateEventType_ActionTimeStamp,3570,Variable
-AuditHistoryValueUpdateEventType_Status,3571,Variable
-AuditHistoryValueUpdateEventType_ServerId,3572,Variable
-AuditHistoryValueUpdateEventType_ClientAuditEntryId,3573,Variable
-AuditHistoryValueUpdateEventType_ClientUserId,3574,Variable
-AuditHistoryValueUpdateEventType_ParameterDataTypeId,3575,Variable
-AuditHistoryDeleteEventType_EventId,3576,Variable
-AuditHistoryDeleteEventType_EventType,3577,Variable
-AuditHistoryDeleteEventType_SourceNode,3578,Variable
-AuditHistoryDeleteEventType_SourceName,3579,Variable
-AuditHistoryDeleteEventType_Time,3580,Variable
-AuditHistoryDeleteEventType_ReceiveTime,3581,Variable
-AuditHistoryDeleteEventType_LocalTime,3582,Variable
-AuditHistoryDeleteEventType_Message,3583,Variable
-AuditHistoryDeleteEventType_Severity,3584,Variable
-AuditHistoryDeleteEventType_ActionTimeStamp,3585,Variable
-AuditHistoryDeleteEventType_Status,3586,Variable
-AuditHistoryDeleteEventType_ServerId,3587,Variable
-AuditHistoryDeleteEventType_ClientAuditEntryId,3588,Variable
-AuditHistoryDeleteEventType_ClientUserId,3589,Variable
-AuditHistoryDeleteEventType_ParameterDataTypeId,3590,Variable
-AuditHistoryRawModifyDeleteEventType_EventId,3591,Variable
-AuditHistoryRawModifyDeleteEventType_EventType,3592,Variable
-AuditHistoryRawModifyDeleteEventType_SourceNode,3593,Variable
-AuditHistoryRawModifyDeleteEventType_SourceName,3594,Variable
-AuditHistoryRawModifyDeleteEventType_Time,3595,Variable
-AuditHistoryRawModifyDeleteEventType_ReceiveTime,3596,Variable
-AuditHistoryRawModifyDeleteEventType_LocalTime,3597,Variable
-AuditHistoryRawModifyDeleteEventType_Message,3598,Variable
-AuditHistoryRawModifyDeleteEventType_Severity,3599,Variable
-AuditHistoryRawModifyDeleteEventType_ActionTimeStamp,3600,Variable
-AuditHistoryRawModifyDeleteEventType_Status,3601,Variable
-AuditHistoryRawModifyDeleteEventType_ServerId,3602,Variable
-AuditHistoryRawModifyDeleteEventType_ClientAuditEntryId,3603,Variable
-AuditHistoryRawModifyDeleteEventType_ClientUserId,3604,Variable
-AuditHistoryRawModifyDeleteEventType_ParameterDataTypeId,3605,Variable
-AuditHistoryRawModifyDeleteEventType_UpdatedNode,3606,Variable
-AuditHistoryAtTimeDeleteEventType_EventId,3607,Variable
-AuditHistoryAtTimeDeleteEventType_EventType,3608,Variable
-AuditHistoryAtTimeDeleteEventType_SourceNode,3609,Variable
-AuditHistoryAtTimeDeleteEventType_SourceName,3610,Variable
-AuditHistoryAtTimeDeleteEventType_Time,3611,Variable
-AuditHistoryAtTimeDeleteEventType_ReceiveTime,3612,Variable
-AuditHistoryAtTimeDeleteEventType_LocalTime,3613,Variable
-AuditHistoryAtTimeDeleteEventType_Message,3614,Variable
-AuditHistoryAtTimeDeleteEventType_Severity,3615,Variable
-AuditHistoryAtTimeDeleteEventType_ActionTimeStamp,3616,Variable
-AuditHistoryAtTimeDeleteEventType_Status,3617,Variable
-AuditHistoryAtTimeDeleteEventType_ServerId,3618,Variable
-AuditHistoryAtTimeDeleteEventType_ClientAuditEntryId,3619,Variable
-AuditHistoryAtTimeDeleteEventType_ClientUserId,3620,Variable
-AuditHistoryAtTimeDeleteEventType_ParameterDataTypeId,3621,Variable
-AuditHistoryAtTimeDeleteEventType_UpdatedNode,3622,Variable
-AuditHistoryEventDeleteEventType_EventId,3623,Variable
-AuditHistoryEventDeleteEventType_EventType,3624,Variable
-AuditHistoryEventDeleteEventType_SourceNode,3625,Variable
-AuditHistoryEventDeleteEventType_SourceName,3626,Variable
-AuditHistoryEventDeleteEventType_Time,3627,Variable
-AuditHistoryEventDeleteEventType_ReceiveTime,3628,Variable
-AuditHistoryEventDeleteEventType_LocalTime,3629,Variable
-AuditHistoryEventDeleteEventType_Message,3630,Variable
-AuditHistoryEventDeleteEventType_Severity,3631,Variable
-AuditHistoryEventDeleteEventType_ActionTimeStamp,3632,Variable
-AuditHistoryEventDeleteEventType_Status,3633,Variable
-AuditHistoryEventDeleteEventType_ServerId,3634,Variable
-AuditHistoryEventDeleteEventType_ClientAuditEntryId,3635,Variable
-AuditHistoryEventDeleteEventType_ClientUserId,3636,Variable
-AuditHistoryEventDeleteEventType_ParameterDataTypeId,3637,Variable
-AuditHistoryEventDeleteEventType_UpdatedNode,3638,Variable
-AuditUpdateMethodEventType_EventId,3639,Variable
-AuditUpdateMethodEventType_EventType,3640,Variable
-AuditUpdateMethodEventType_SourceNode,3641,Variable
-AuditUpdateMethodEventType_SourceName,3642,Variable
-AuditUpdateMethodEventType_Time,3643,Variable
-AuditUpdateMethodEventType_ReceiveTime,3644,Variable
-AuditUpdateMethodEventType_LocalTime,3645,Variable
-AuditUpdateMethodEventType_Message,3646,Variable
-AuditUpdateMethodEventType_Severity,3647,Variable
-AuditUpdateMethodEventType_ActionTimeStamp,3648,Variable
-AuditUpdateMethodEventType_Status,3649,Variable
-AuditUpdateMethodEventType_ServerId,3650,Variable
-AuditUpdateMethodEventType_ClientAuditEntryId,3651,Variable
-AuditUpdateMethodEventType_ClientUserId,3652,Variable
-SystemEventType_EventId,3653,Variable
-SystemEventType_EventType,3654,Variable
-SystemEventType_SourceNode,3655,Variable
-SystemEventType_SourceName,3656,Variable
-SystemEventType_Time,3657,Variable
-SystemEventType_ReceiveTime,3658,Variable
-SystemEventType_LocalTime,3659,Variable
-SystemEventType_Message,3660,Variable
-SystemEventType_Severity,3661,Variable
-DeviceFailureEventType_EventId,3662,Variable
-DeviceFailureEventType_EventType,3663,Variable
-DeviceFailureEventType_SourceNode,3664,Variable
-DeviceFailureEventType_SourceName,3665,Variable
-DeviceFailureEventType_Time,3666,Variable
-DeviceFailureEventType_ReceiveTime,3667,Variable
-DeviceFailureEventType_LocalTime,3668,Variable
-DeviceFailureEventType_Message,3669,Variable
-DeviceFailureEventType_Severity,3670,Variable
-BaseModelChangeEventType_EventId,3671,Variable
-BaseModelChangeEventType_EventType,3672,Variable
-BaseModelChangeEventType_SourceNode,3673,Variable
-BaseModelChangeEventType_SourceName,3674,Variable
-BaseModelChangeEventType_Time,3675,Variable
-BaseModelChangeEventType_ReceiveTime,3676,Variable
-BaseModelChangeEventType_LocalTime,3677,Variable
-BaseModelChangeEventType_Message,3678,Variable
-BaseModelChangeEventType_Severity,3679,Variable
-GeneralModelChangeEventType_EventId,3680,Variable
-GeneralModelChangeEventType_EventType,3681,Variable
-GeneralModelChangeEventType_SourceNode,3682,Variable
-GeneralModelChangeEventType_SourceName,3683,Variable
-GeneralModelChangeEventType_Time,3684,Variable
-GeneralModelChangeEventType_ReceiveTime,3685,Variable
-GeneralModelChangeEventType_LocalTime,3686,Variable
-GeneralModelChangeEventType_Message,3687,Variable
-GeneralModelChangeEventType_Severity,3688,Variable
-SemanticChangeEventType_EventId,3689,Variable
-SemanticChangeEventType_EventType,3690,Variable
-SemanticChangeEventType_SourceNode,3691,Variable
-SemanticChangeEventType_SourceName,3692,Variable
-SemanticChangeEventType_Time,3693,Variable
-SemanticChangeEventType_ReceiveTime,3694,Variable
-SemanticChangeEventType_LocalTime,3695,Variable
-SemanticChangeEventType_Message,3696,Variable
-SemanticChangeEventType_Severity,3697,Variable
-ServerStatusType_BuildInfo_ProductUri,3698,Variable
-ServerStatusType_BuildInfo_ManufacturerName,3699,Variable
-ServerStatusType_BuildInfo_ProductName,3700,Variable
-ServerStatusType_BuildInfo_SoftwareVersion,3701,Variable
-ServerStatusType_BuildInfo_BuildNumber,3702,Variable
-ServerStatusType_BuildInfo_BuildDate,3703,Variable
-Server_ServerCapabilities_SoftwareCertificates,3704,Variable
-Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount,3705,Variable
-Server_ServerDiagnostics_SessionsDiagnosticsSummary,3706,Object
-Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray,3707,Variable
-Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray,3708,Variable
-Server_ServerRedundancy_RedundancySupport,3709,Variable
-FiniteStateVariableType_Name,3714,Variable
-FiniteStateVariableType_Number,3715,Variable
-FiniteStateVariableType_EffectiveDisplayName,3716,Variable
-FiniteTransitionVariableType_Name,3717,Variable
-FiniteTransitionVariableType_Number,3718,Variable
-FiniteTransitionVariableType_TransitionTime,3719,Variable
-StateMachineType_CurrentState_Id,3720,Variable
-StateMachineType_CurrentState_Name,3721,Variable
-StateMachineType_CurrentState_Number,3722,Variable
-StateMachineType_CurrentState_EffectiveDisplayName,3723,Variable
-StateMachineType_LastTransition_Id,3724,Variable
-StateMachineType_LastTransition_Name,3725,Variable
-StateMachineType_LastTransition_Number,3726,Variable
-StateMachineType_LastTransition_TransitionTime,3727,Variable
-FiniteStateMachineType_CurrentState_Id,3728,Variable
-FiniteStateMachineType_CurrentState_Name,3729,Variable
-FiniteStateMachineType_CurrentState_Number,3730,Variable
-FiniteStateMachineType_CurrentState_EffectiveDisplayName,3731,Variable
-FiniteStateMachineType_LastTransition_Id,3732,Variable
-FiniteStateMachineType_LastTransition_Name,3733,Variable
-FiniteStateMachineType_LastTransition_Number,3734,Variable
-FiniteStateMachineType_LastTransition_TransitionTime,3735,Variable
-InitialStateType_StateNumber,3736,Variable
-TransitionEventType_EventId,3737,Variable
-TransitionEventType_EventType,3738,Variable
-TransitionEventType_SourceNode,3739,Variable
-TransitionEventType_SourceName,3740,Variable
-TransitionEventType_Time,3741,Variable
-TransitionEventType_ReceiveTime,3742,Variable
-TransitionEventType_LocalTime,3743,Variable
-TransitionEventType_Message,3744,Variable
-TransitionEventType_Severity,3745,Variable
-TransitionEventType_FromState_Id,3746,Variable
-TransitionEventType_FromState_Name,3747,Variable
-TransitionEventType_FromState_Number,3748,Variable
-TransitionEventType_FromState_EffectiveDisplayName,3749,Variable
-TransitionEventType_ToState_Id,3750,Variable
-TransitionEventType_ToState_Name,3751,Variable
-TransitionEventType_ToState_Number,3752,Variable
-TransitionEventType_ToState_EffectiveDisplayName,3753,Variable
-TransitionEventType_Transition_Id,3754,Variable
-TransitionEventType_Transition_Name,3755,Variable
-TransitionEventType_Transition_Number,3756,Variable
-TransitionEventType_Transition_TransitionTime,3757,Variable
-AuditUpdateStateEventType_EventId,3758,Variable
-AuditUpdateStateEventType_EventType,3759,Variable
-AuditUpdateStateEventType_SourceNode,3760,Variable
-AuditUpdateStateEventType_SourceName,3761,Variable
-AuditUpdateStateEventType_Time,3762,Variable
-AuditUpdateStateEventType_ReceiveTime,3763,Variable
-AuditUpdateStateEventType_LocalTime,3764,Variable
-AuditUpdateStateEventType_Message,3765,Variable
-AuditUpdateStateEventType_Severity,3766,Variable
-AuditUpdateStateEventType_ActionTimeStamp,3767,Variable
-AuditUpdateStateEventType_Status,3768,Variable
-AuditUpdateStateEventType_ServerId,3769,Variable
-AuditUpdateStateEventType_ClientAuditEntryId,3770,Variable
-AuditUpdateStateEventType_ClientUserId,3771,Variable
-AuditUpdateStateEventType_MethodId,3772,Variable
-AuditUpdateStateEventType_InputArguments,3773,Variable
-AnalogItemType_Definition,3774,Variable
-AnalogItemType_ValuePrecision,3775,Variable
-DiscreteItemType_Definition,3776,Variable
-DiscreteItemType_ValuePrecision,3777,Variable
-TwoStateDiscreteType_Definition,3778,Variable
-TwoStateDiscreteType_ValuePrecision,3779,Variable
-MultiStateDiscreteType_Definition,3780,Variable
-MultiStateDiscreteType_ValuePrecision,3781,Variable
-ProgramTransitionEventType_EventId,3782,Variable
-ProgramTransitionEventType_EventType,3783,Variable
-ProgramTransitionEventType_SourceNode,3784,Variable
-ProgramTransitionEventType_SourceName,3785,Variable
-ProgramTransitionEventType_Time,3786,Variable
-ProgramTransitionEventType_ReceiveTime,3787,Variable
-ProgramTransitionEventType_LocalTime,3788,Variable
-ProgramTransitionEventType_Message,3789,Variable
-ProgramTransitionEventType_Severity,3790,Variable
-ProgramTransitionEventType_FromState,3791,Variable
-ProgramTransitionEventType_FromState_Id,3792,Variable
-ProgramTransitionEventType_FromState_Name,3793,Variable
-ProgramTransitionEventType_FromState_Number,3794,Variable
-ProgramTransitionEventType_FromState_EffectiveDisplayName,3795,Variable
-ProgramTransitionEventType_ToState,3796,Variable
-ProgramTransitionEventType_ToState_Id,3797,Variable
-ProgramTransitionEventType_ToState_Name,3798,Variable
-ProgramTransitionEventType_ToState_Number,3799,Variable
-ProgramTransitionEventType_ToState_EffectiveDisplayName,3800,Variable
-ProgramTransitionEventType_Transition,3801,Variable
-ProgramTransitionEventType_Transition_Id,3802,Variable
-ProgramTransitionEventType_Transition_Name,3803,Variable
-ProgramTransitionEventType_Transition_Number,3804,Variable
-ProgramTransitionEventType_Transition_TransitionTime,3805,Variable
-ProgramTransitionAuditEventType,3806,ObjectType
-ProgramTransitionAuditEventType_EventId,3807,Variable
-ProgramTransitionAuditEventType_EventType,3808,Variable
-ProgramTransitionAuditEventType_SourceNode,3809,Variable
-ProgramTransitionAuditEventType_SourceName,3810,Variable
-ProgramTransitionAuditEventType_Time,3811,Variable
-ProgramTransitionAuditEventType_ReceiveTime,3812,Variable
-ProgramTransitionAuditEventType_LocalTime,3813,Variable
-ProgramTransitionAuditEventType_Message,3814,Variable
-ProgramTransitionAuditEventType_Severity,3815,Variable
-ProgramTransitionAuditEventType_ActionTimeStamp,3816,Variable
-ProgramTransitionAuditEventType_Status,3817,Variable
-ProgramTransitionAuditEventType_ServerId,3818,Variable
-ProgramTransitionAuditEventType_ClientAuditEntryId,3819,Variable
-ProgramTransitionAuditEventType_ClientUserId,3820,Variable
-ProgramTransitionAuditEventType_MethodId,3821,Variable
-ProgramTransitionAuditEventType_InputArguments,3822,Variable
-ProgramTransitionAuditEventType_OldStateId,3823,Variable
-ProgramTransitionAuditEventType_NewStateId,3824,Variable
-ProgramTransitionAuditEventType_Transition,3825,Variable
-ProgramTransitionAuditEventType_Transition_Id,3826,Variable
-ProgramTransitionAuditEventType_Transition_Name,3827,Variable
-ProgramTransitionAuditEventType_Transition_Number,3828,Variable
-ProgramTransitionAuditEventType_Transition_TransitionTime,3829,Variable
-ProgramStateMachineType_CurrentState,3830,Variable
-ProgramStateMachineType_CurrentState_Id,3831,Variable
-ProgramStateMachineType_CurrentState_Name,3832,Variable
-ProgramStateMachineType_CurrentState_Number,3833,Variable
-ProgramStateMachineType_CurrentState_EffectiveDisplayName,3834,Variable
-ProgramStateMachineType_LastTransition,3835,Variable
-ProgramStateMachineType_LastTransition_Id,3836,Variable
-ProgramStateMachineType_LastTransition_Name,3837,Variable
-ProgramStateMachineType_LastTransition_Number,3838,Variable
-ProgramStateMachineType_LastTransition_TransitionTime,3839,Variable
-ProgramStateMachineType_ProgramDiagnostics_CreateSessionId,3840,Variable
-ProgramStateMachineType_ProgramDiagnostics_CreateClientName,3841,Variable
-ProgramStateMachineType_ProgramDiagnostics_InvocationCreationTime,3842,Variable
-ProgramStateMachineType_ProgramDiagnostics_LastTransitionTime,3843,Variable
-ProgramStateMachineType_ProgramDiagnostics_LastMethodCall,3844,Variable
-ProgramStateMachineType_ProgramDiagnostics_LastMethodSessionId,3845,Variable
-ProgramStateMachineType_ProgramDiagnostics_LastMethodInputArguments,3846,Variable
-ProgramStateMachineType_ProgramDiagnostics_LastMethodOutputArguments,3847,Variable
-ProgramStateMachineType_ProgramDiagnostics_LastMethodCallTime,3848,Variable
-ProgramStateMachineType_ProgramDiagnostics_LastMethodReturnStatus,3849,Variable
-ProgramStateMachineType_FinalResultData,3850,Object
-AddCommentMethodType,3863,Method
-AddCommentMethodType_InputArguments,3864,Variable
-ConditionType_EventId,3865,Variable
-ConditionType_EventType,3866,Variable
-ConditionType_SourceNode,3867,Variable
-ConditionType_SourceName,3868,Variable
-ConditionType_Time,3869,Variable
-ConditionType_ReceiveTime,3870,Variable
-ConditionType_LocalTime,3871,Variable
-ConditionType_Message,3872,Variable
-ConditionType_Severity,3873,Variable
-ConditionType_Retain,3874,Variable
-ConditionType_ConditionRefresh,3875,Method
-ConditionType_ConditionRefresh_InputArguments,3876,Variable
-RefreshStartEventType_EventId,3969,Variable
-RefreshStartEventType_EventType,3970,Variable
-RefreshStartEventType_SourceNode,3971,Variable
-RefreshStartEventType_SourceName,3972,Variable
-RefreshStartEventType_Time,3973,Variable
-RefreshStartEventType_ReceiveTime,3974,Variable
-RefreshStartEventType_LocalTime,3975,Variable
-RefreshStartEventType_Message,3976,Variable
-RefreshStartEventType_Severity,3977,Variable
-RefreshEndEventType_EventId,3978,Variable
-RefreshEndEventType_EventType,3979,Variable
-RefreshEndEventType_SourceNode,3980,Variable
-RefreshEndEventType_SourceName,3981,Variable
-RefreshEndEventType_Time,3982,Variable
-RefreshEndEventType_ReceiveTime,3983,Variable
-RefreshEndEventType_LocalTime,3984,Variable
-RefreshEndEventType_Message,3985,Variable
-RefreshEndEventType_Severity,3986,Variable
-RefreshRequiredEventType_EventId,3987,Variable
-RefreshRequiredEventType_EventType,3988,Variable
-RefreshRequiredEventType_SourceNode,3989,Variable
-RefreshRequiredEventType_SourceName,3990,Variable
-RefreshRequiredEventType_Time,3991,Variable
-RefreshRequiredEventType_ReceiveTime,3992,Variable
-RefreshRequiredEventType_LocalTime,3993,Variable
-RefreshRequiredEventType_Message,3994,Variable
-RefreshRequiredEventType_Severity,3995,Variable
-AuditConditionEventType_EventId,3996,Variable
-AuditConditionEventType_EventType,3997,Variable
-AuditConditionEventType_SourceNode,3998,Variable
-AuditConditionEventType_SourceName,3999,Variable
-AuditConditionEventType_Time,4000,Variable
-AuditConditionEventType_ReceiveTime,4001,Variable
-AuditConditionEventType_LocalTime,4002,Variable
-AuditConditionEventType_Message,4003,Variable
-AuditConditionEventType_Severity,4004,Variable
-AuditConditionEventType_ActionTimeStamp,4005,Variable
-AuditConditionEventType_Status,4006,Variable
-AuditConditionEventType_ServerId,4007,Variable
-AuditConditionEventType_ClientAuditEntryId,4008,Variable
-AuditConditionEventType_ClientUserId,4009,Variable
-AuditConditionEventType_MethodId,4010,Variable
-AuditConditionEventType_InputArguments,4011,Variable
-AuditConditionEnableEventType_EventId,4106,Variable
-AuditConditionEnableEventType_EventType,4107,Variable
-AuditConditionEnableEventType_SourceNode,4108,Variable
-AuditConditionEnableEventType_SourceName,4109,Variable
-AuditConditionEnableEventType_Time,4110,Variable
-AuditConditionEnableEventType_ReceiveTime,4111,Variable
-AuditConditionEnableEventType_LocalTime,4112,Variable
-AuditConditionEnableEventType_Message,4113,Variable
-AuditConditionEnableEventType_Severity,4114,Variable
-AuditConditionEnableEventType_ActionTimeStamp,4115,Variable
-AuditConditionEnableEventType_Status,4116,Variable
-AuditConditionEnableEventType_ServerId,4117,Variable
-AuditConditionEnableEventType_ClientAuditEntryId,4118,Variable
-AuditConditionEnableEventType_ClientUserId,4119,Variable
-AuditConditionEnableEventType_MethodId,4120,Variable
-AuditConditionEnableEventType_InputArguments,4121,Variable
-AuditConditionCommentEventType_EventId,4170,Variable
-AuditConditionCommentEventType_EventType,4171,Variable
-AuditConditionCommentEventType_SourceNode,4172,Variable
-AuditConditionCommentEventType_SourceName,4173,Variable
-AuditConditionCommentEventType_Time,4174,Variable
-AuditConditionCommentEventType_ReceiveTime,4175,Variable
-AuditConditionCommentEventType_LocalTime,4176,Variable
-AuditConditionCommentEventType_Message,4177,Variable
-AuditConditionCommentEventType_Severity,4178,Variable
-AuditConditionCommentEventType_ActionTimeStamp,4179,Variable
-AuditConditionCommentEventType_Status,4180,Variable
-AuditConditionCommentEventType_ServerId,4181,Variable
-AuditConditionCommentEventType_ClientAuditEntryId,4182,Variable
-AuditConditionCommentEventType_ClientUserId,4183,Variable
-AuditConditionCommentEventType_MethodId,4184,Variable
-AuditConditionCommentEventType_InputArguments,4185,Variable
-DialogConditionType_EventId,4188,Variable
-DialogConditionType_EventType,4189,Variable
-DialogConditionType_SourceNode,4190,Variable
-DialogConditionType_SourceName,4191,Variable
-DialogConditionType_Time,4192,Variable
-DialogConditionType_ReceiveTime,4193,Variable
-DialogConditionType_LocalTime,4194,Variable
-DialogConditionType_Message,4195,Variable
-DialogConditionType_Severity,4196,Variable
-DialogConditionType_Retain,4197,Variable
-DialogConditionType_ConditionRefresh,4198,Method
-DialogConditionType_ConditionRefresh_InputArguments,4199,Variable
-AcknowledgeableConditionType_EventId,5113,Variable
-AcknowledgeableConditionType_EventType,5114,Variable
-AcknowledgeableConditionType_SourceNode,5115,Variable
-AcknowledgeableConditionType_SourceName,5116,Variable
-AcknowledgeableConditionType_Time,5117,Variable
-AcknowledgeableConditionType_ReceiveTime,5118,Variable
-AcknowledgeableConditionType_LocalTime,5119,Variable
-AcknowledgeableConditionType_Message,5120,Variable
-AcknowledgeableConditionType_Severity,5121,Variable
-AcknowledgeableConditionType_Retain,5122,Variable
-AcknowledgeableConditionType_ConditionRefresh,5123,Method
-AcknowledgeableConditionType_ConditionRefresh_InputArguments,5124,Variable
-AlarmConditionType_EventId,5540,Variable
-AlarmConditionType_EventType,5541,Variable
-AlarmConditionType_SourceNode,5542,Variable
-AlarmConditionType_SourceName,5543,Variable
-AlarmConditionType_Time,5544,Variable
-AlarmConditionType_ReceiveTime,5545,Variable
-AlarmConditionType_LocalTime,5546,Variable
-AlarmConditionType_Message,5547,Variable
-AlarmConditionType_Severity,5548,Variable
-AlarmConditionType_Retain,5549,Variable
-AlarmConditionType_ConditionRefresh,5550,Method
-AlarmConditionType_ConditionRefresh_InputArguments,5551,Variable
-ShelvedStateMachineType_CurrentState,6088,Variable
-ShelvedStateMachineType_CurrentState_Id,6089,Variable
-ShelvedStateMachineType_CurrentState_Name,6090,Variable
-ShelvedStateMachineType_CurrentState_Number,6091,Variable
-ShelvedStateMachineType_CurrentState_EffectiveDisplayName,6092,Variable
-ShelvedStateMachineType_LastTransition,6093,Variable
-ShelvedStateMachineType_LastTransition_Id,6094,Variable
-ShelvedStateMachineType_LastTransition_Name,6095,Variable
-ShelvedStateMachineType_LastTransition_Number,6096,Variable
-ShelvedStateMachineType_LastTransition_TransitionTime,6097,Variable
-ShelvedStateMachineType_Unshelved_StateNumber,6098,Variable
-ShelvedStateMachineType_TimedShelved_StateNumber,6100,Variable
-ShelvedStateMachineType_OneShotShelved_StateNumber,6101,Variable
-TimedShelveMethodType,6102,Method
-TimedShelveMethodType_InputArguments,6103,Variable
-LimitAlarmType_EventId,6116,Variable
-LimitAlarmType_EventType,6117,Variable
-LimitAlarmType_SourceNode,6118,Variable
-LimitAlarmType_SourceName,6119,Variable
-LimitAlarmType_Time,6120,Variable
-LimitAlarmType_ReceiveTime,6121,Variable
-LimitAlarmType_LocalTime,6122,Variable
-LimitAlarmType_Message,6123,Variable
-LimitAlarmType_Severity,6124,Variable
-LimitAlarmType_Retain,6125,Variable
-LimitAlarmType_ConditionRefresh,6126,Method
-LimitAlarmType_ConditionRefresh_InputArguments,6127,Variable
-IdType_EnumStrings,7591,Variable
-EnumValueType,7594,DataType
-MessageSecurityMode_EnumStrings,7595,Variable
-UserTokenType_EnumStrings,7596,Variable
-ApplicationType_EnumStrings,7597,Variable
-SecurityTokenRequestType_EnumStrings,7598,Variable
-BrowseDirection_EnumStrings,7603,Variable
-FilterOperator_EnumStrings,7605,Variable
-TimestampsToReturn_EnumStrings,7606,Variable
-MonitoringMode_EnumStrings,7608,Variable
-DataChangeTrigger_EnumStrings,7609,Variable
-DeadbandType_EnumStrings,7610,Variable
-RedundancySupport_EnumStrings,7611,Variable
-ServerState_EnumStrings,7612,Variable
-ExceptionDeviationFormat_EnumStrings,7614,Variable
-EnumValueType_Encoding_DefaultXml,7616,Object
-OpcUa_BinarySchema,7617,Variable
-OpcUa_BinarySchema_DataTypeVersion,7618,Variable
-OpcUa_BinarySchema_NamespaceUri,7619,Variable
-OpcUa_BinarySchema_Argument,7650,Variable
-OpcUa_BinarySchema_Argument_DataTypeVersion,7651,Variable
-OpcUa_BinarySchema_Argument_DictionaryFragment,7652,Variable
-OpcUa_BinarySchema_EnumValueType,7656,Variable
-OpcUa_BinarySchema_EnumValueType_DataTypeVersion,7657,Variable
-OpcUa_BinarySchema_EnumValueType_DictionaryFragment,7658,Variable
-OpcUa_BinarySchema_StatusResult,7659,Variable
-OpcUa_BinarySchema_StatusResult_DataTypeVersion,7660,Variable
-OpcUa_BinarySchema_StatusResult_DictionaryFragment,7661,Variable
-OpcUa_BinarySchema_UserTokenPolicy,7662,Variable
-OpcUa_BinarySchema_UserTokenPolicy_DataTypeVersion,7663,Variable
-OpcUa_BinarySchema_UserTokenPolicy_DictionaryFragment,7664,Variable
-OpcUa_BinarySchema_ApplicationDescription,7665,Variable
-OpcUa_BinarySchema_ApplicationDescription_DataTypeVersion,7666,Variable
-OpcUa_BinarySchema_ApplicationDescription_DictionaryFragment,7667,Variable
-OpcUa_BinarySchema_EndpointDescription,7668,Variable
-OpcUa_BinarySchema_EndpointDescription_DataTypeVersion,7669,Variable
-OpcUa_BinarySchema_EndpointDescription_DictionaryFragment,7670,Variable
-OpcUa_BinarySchema_UserIdentityToken,7671,Variable
-OpcUa_BinarySchema_UserIdentityToken_DataTypeVersion,7672,Variable
-OpcUa_BinarySchema_UserIdentityToken_DictionaryFragment,7673,Variable
-OpcUa_BinarySchema_AnonymousIdentityToken,7674,Variable
-OpcUa_BinarySchema_AnonymousIdentityToken_DataTypeVersion,7675,Variable
-OpcUa_BinarySchema_AnonymousIdentityToken_DictionaryFragment,7676,Variable
-OpcUa_BinarySchema_UserNameIdentityToken,7677,Variable
-OpcUa_BinarySchema_UserNameIdentityToken_DataTypeVersion,7678,Variable
-OpcUa_BinarySchema_UserNameIdentityToken_DictionaryFragment,7679,Variable
-OpcUa_BinarySchema_X509IdentityToken,7680,Variable
-OpcUa_BinarySchema_X509IdentityToken_DataTypeVersion,7681,Variable
-OpcUa_BinarySchema_X509IdentityToken_DictionaryFragment,7682,Variable
-OpcUa_BinarySchema_IssuedIdentityToken,7683,Variable
-OpcUa_BinarySchema_IssuedIdentityToken_DataTypeVersion,7684,Variable
-OpcUa_BinarySchema_IssuedIdentityToken_DictionaryFragment,7685,Variable
-OpcUa_BinarySchema_EndpointConfiguration,7686,Variable
-OpcUa_BinarySchema_EndpointConfiguration_DataTypeVersion,7687,Variable
-OpcUa_BinarySchema_EndpointConfiguration_DictionaryFragment,7688,Variable
-OpcUa_BinarySchema_BuildInfo,7692,Variable
-OpcUa_BinarySchema_BuildInfo_DataTypeVersion,7693,Variable
-OpcUa_BinarySchema_BuildInfo_DictionaryFragment,7694,Variable
-OpcUa_BinarySchema_SignedSoftwareCertificate,7698,Variable
-OpcUa_BinarySchema_SignedSoftwareCertificate_DataTypeVersion,7699,Variable
-OpcUa_BinarySchema_SignedSoftwareCertificate_DictionaryFragment,7700,Variable
-OpcUa_BinarySchema_AddNodesItem,7728,Variable
-OpcUa_BinarySchema_AddNodesItem_DataTypeVersion,7729,Variable
-OpcUa_BinarySchema_AddNodesItem_DictionaryFragment,7730,Variable
-OpcUa_BinarySchema_AddReferencesItem,7731,Variable
-OpcUa_BinarySchema_AddReferencesItem_DataTypeVersion,7732,Variable
-OpcUa_BinarySchema_AddReferencesItem_DictionaryFragment,7733,Variable
-OpcUa_BinarySchema_DeleteNodesItem,7734,Variable
-OpcUa_BinarySchema_DeleteNodesItem_DataTypeVersion,7735,Variable
-OpcUa_BinarySchema_DeleteNodesItem_DictionaryFragment,7736,Variable
-OpcUa_BinarySchema_DeleteReferencesItem,7737,Variable
-OpcUa_BinarySchema_DeleteReferencesItem_DataTypeVersion,7738,Variable
-OpcUa_BinarySchema_DeleteReferencesItem_DictionaryFragment,7739,Variable
-OpcUa_BinarySchema_RegisteredServer,7782,Variable
-OpcUa_BinarySchema_RegisteredServer_DataTypeVersion,7783,Variable
-OpcUa_BinarySchema_RegisteredServer_DictionaryFragment,7784,Variable
-OpcUa_BinarySchema_ContentFilterElement,7929,Variable
-OpcUa_BinarySchema_ContentFilterElement_DataTypeVersion,7930,Variable
-OpcUa_BinarySchema_ContentFilterElement_DictionaryFragment,7931,Variable
-OpcUa_BinarySchema_ContentFilter,7932,Variable
-OpcUa_BinarySchema_ContentFilter_DataTypeVersion,7933,Variable
-OpcUa_BinarySchema_ContentFilter_DictionaryFragment,7934,Variable
-OpcUa_BinarySchema_FilterOperand,7935,Variable
-OpcUa_BinarySchema_FilterOperand_DataTypeVersion,7936,Variable
-OpcUa_BinarySchema_FilterOperand_DictionaryFragment,7937,Variable
-OpcUa_BinarySchema_ElementOperand,7938,Variable
-OpcUa_BinarySchema_ElementOperand_DataTypeVersion,7939,Variable
-OpcUa_BinarySchema_ElementOperand_DictionaryFragment,7940,Variable
-OpcUa_BinarySchema_LiteralOperand,7941,Variable
-OpcUa_BinarySchema_LiteralOperand_DataTypeVersion,7942,Variable
-OpcUa_BinarySchema_LiteralOperand_DictionaryFragment,7943,Variable
-OpcUa_BinarySchema_AttributeOperand,7944,Variable
-OpcUa_BinarySchema_AttributeOperand_DataTypeVersion,7945,Variable
-OpcUa_BinarySchema_AttributeOperand_DictionaryFragment,7946,Variable
-OpcUa_BinarySchema_SimpleAttributeOperand,7947,Variable
-OpcUa_BinarySchema_SimpleAttributeOperand_DataTypeVersion,7948,Variable
-OpcUa_BinarySchema_SimpleAttributeOperand_DictionaryFragment,7949,Variable
-OpcUa_BinarySchema_HistoryEvent,8004,Variable
-OpcUa_BinarySchema_HistoryEvent_DataTypeVersion,8005,Variable
-OpcUa_BinarySchema_HistoryEvent_DictionaryFragment,8006,Variable
-OpcUa_BinarySchema_MonitoringFilter,8067,Variable
-OpcUa_BinarySchema_MonitoringFilter_DataTypeVersion,8068,Variable
-OpcUa_BinarySchema_MonitoringFilter_DictionaryFragment,8069,Variable
-OpcUa_BinarySchema_EventFilter,8073,Variable
-OpcUa_BinarySchema_EventFilter_DataTypeVersion,8074,Variable
-OpcUa_BinarySchema_EventFilter_DictionaryFragment,8075,Variable
-OpcUa_BinarySchema_AggregateConfiguration,8076,Variable
-OpcUa_BinarySchema_AggregateConfiguration_DataTypeVersion,8077,Variable
-OpcUa_BinarySchema_AggregateConfiguration_DictionaryFragment,8078,Variable
-OpcUa_BinarySchema_HistoryEventFieldList,8172,Variable
-OpcUa_BinarySchema_HistoryEventFieldList_DataTypeVersion,8173,Variable
-OpcUa_BinarySchema_HistoryEventFieldList_DictionaryFragment,8174,Variable
-OpcUa_BinarySchema_RedundantServerDataType,8208,Variable
-OpcUa_BinarySchema_RedundantServerDataType_DataTypeVersion,8209,Variable
-OpcUa_BinarySchema_RedundantServerDataType_DictionaryFragment,8210,Variable
-OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType,8211,Variable
-OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType_DataTypeVersion,8212,Variable
-OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType_DictionaryFragment,8213,Variable
-OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType,8214,Variable
-OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType_DataTypeVersion,8215,Variable
-OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType_DictionaryFragment,8216,Variable
-OpcUa_BinarySchema_ServerStatusDataType,8217,Variable
-OpcUa_BinarySchema_ServerStatusDataType_DataTypeVersion,8218,Variable
-OpcUa_BinarySchema_ServerStatusDataType_DictionaryFragment,8219,Variable
-OpcUa_BinarySchema_SessionDiagnosticsDataType,8220,Variable
-OpcUa_BinarySchema_SessionDiagnosticsDataType_DataTypeVersion,8221,Variable
-OpcUa_BinarySchema_SessionDiagnosticsDataType_DictionaryFragment,8222,Variable
-OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType,8223,Variable
-OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType_DataTypeVersion,8224,Variable
-OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType_DictionaryFragment,8225,Variable
-OpcUa_BinarySchema_ServiceCounterDataType,8226,Variable
-OpcUa_BinarySchema_ServiceCounterDataType_DataTypeVersion,8227,Variable
-OpcUa_BinarySchema_ServiceCounterDataType_DictionaryFragment,8228,Variable
-OpcUa_BinarySchema_SubscriptionDiagnosticsDataType,8229,Variable
-OpcUa_BinarySchema_SubscriptionDiagnosticsDataType_DataTypeVersion,8230,Variable
-OpcUa_BinarySchema_SubscriptionDiagnosticsDataType_DictionaryFragment,8231,Variable
-OpcUa_BinarySchema_ModelChangeStructureDataType,8232,Variable
-OpcUa_BinarySchema_ModelChangeStructureDataType_DataTypeVersion,8233,Variable
-OpcUa_BinarySchema_ModelChangeStructureDataType_DictionaryFragment,8234,Variable
-OpcUa_BinarySchema_SemanticChangeStructureDataType,8235,Variable
-OpcUa_BinarySchema_SemanticChangeStructureDataType_DataTypeVersion,8236,Variable
-OpcUa_BinarySchema_SemanticChangeStructureDataType_DictionaryFragment,8237,Variable
-OpcUa_BinarySchema_Range,8238,Variable
-OpcUa_BinarySchema_Range_DataTypeVersion,8239,Variable
-OpcUa_BinarySchema_Range_DictionaryFragment,8240,Variable
-OpcUa_BinarySchema_EUInformation,8241,Variable
-OpcUa_BinarySchema_EUInformation_DataTypeVersion,8242,Variable
-OpcUa_BinarySchema_EUInformation_DictionaryFragment,8243,Variable
-OpcUa_BinarySchema_Annotation,8244,Variable
-OpcUa_BinarySchema_Annotation_DataTypeVersion,8245,Variable
-OpcUa_BinarySchema_Annotation_DictionaryFragment,8246,Variable
-OpcUa_BinarySchema_ProgramDiagnosticDataType,8247,Variable
-OpcUa_BinarySchema_ProgramDiagnosticDataType_DataTypeVersion,8248,Variable
-OpcUa_BinarySchema_ProgramDiagnosticDataType_DictionaryFragment,8249,Variable
-EnumValueType_Encoding_DefaultBinary,8251,Object
-OpcUa_XmlSchema,8252,Variable
-OpcUa_XmlSchema_DataTypeVersion,8253,Variable
-OpcUa_XmlSchema_NamespaceUri,8254,Variable
-OpcUa_XmlSchema_Argument,8285,Variable
-OpcUa_XmlSchema_Argument_DataTypeVersion,8286,Variable
-OpcUa_XmlSchema_Argument_DictionaryFragment,8287,Variable
-OpcUa_XmlSchema_EnumValueType,8291,Variable
-OpcUa_XmlSchema_EnumValueType_DataTypeVersion,8292,Variable
-OpcUa_XmlSchema_EnumValueType_DictionaryFragment,8293,Variable
-OpcUa_XmlSchema_StatusResult,8294,Variable
-OpcUa_XmlSchema_StatusResult_DataTypeVersion,8295,Variable
-OpcUa_XmlSchema_StatusResult_DictionaryFragment,8296,Variable
-OpcUa_XmlSchema_UserTokenPolicy,8297,Variable
-OpcUa_XmlSchema_UserTokenPolicy_DataTypeVersion,8298,Variable
-OpcUa_XmlSchema_UserTokenPolicy_DictionaryFragment,8299,Variable
-OpcUa_XmlSchema_ApplicationDescription,8300,Variable
-OpcUa_XmlSchema_ApplicationDescription_DataTypeVersion,8301,Variable
-OpcUa_XmlSchema_ApplicationDescription_DictionaryFragment,8302,Variable
-OpcUa_XmlSchema_EndpointDescription,8303,Variable
-OpcUa_XmlSchema_EndpointDescription_DataTypeVersion,8304,Variable
-OpcUa_XmlSchema_EndpointDescription_DictionaryFragment,8305,Variable
-OpcUa_XmlSchema_UserIdentityToken,8306,Variable
-OpcUa_XmlSchema_UserIdentityToken_DataTypeVersion,8307,Variable
-OpcUa_XmlSchema_UserIdentityToken_DictionaryFragment,8308,Variable
-OpcUa_XmlSchema_AnonymousIdentityToken,8309,Variable
-OpcUa_XmlSchema_AnonymousIdentityToken_DataTypeVersion,8310,Variable
-OpcUa_XmlSchema_AnonymousIdentityToken_DictionaryFragment,8311,Variable
-OpcUa_XmlSchema_UserNameIdentityToken,8312,Variable
-OpcUa_XmlSchema_UserNameIdentityToken_DataTypeVersion,8313,Variable
-OpcUa_XmlSchema_UserNameIdentityToken_DictionaryFragment,8314,Variable
-OpcUa_XmlSchema_X509IdentityToken,8315,Variable
-OpcUa_XmlSchema_X509IdentityToken_DataTypeVersion,8316,Variable
-OpcUa_XmlSchema_X509IdentityToken_DictionaryFragment,8317,Variable
-OpcUa_XmlSchema_IssuedIdentityToken,8318,Variable
-OpcUa_XmlSchema_IssuedIdentityToken_DataTypeVersion,8319,Variable
-OpcUa_XmlSchema_IssuedIdentityToken_DictionaryFragment,8320,Variable
-OpcUa_XmlSchema_EndpointConfiguration,8321,Variable
-OpcUa_XmlSchema_EndpointConfiguration_DataTypeVersion,8322,Variable
-OpcUa_XmlSchema_EndpointConfiguration_DictionaryFragment,8323,Variable
-OpcUa_XmlSchema_BuildInfo,8327,Variable
-OpcUa_XmlSchema_BuildInfo_DataTypeVersion,8328,Variable
-OpcUa_XmlSchema_BuildInfo_DictionaryFragment,8329,Variable
-OpcUa_XmlSchema_SignedSoftwareCertificate,8333,Variable
-OpcUa_XmlSchema_SignedSoftwareCertificate_DataTypeVersion,8334,Variable
-OpcUa_XmlSchema_SignedSoftwareCertificate_DictionaryFragment,8335,Variable
-OpcUa_XmlSchema_AddNodesItem,8363,Variable
-OpcUa_XmlSchema_AddNodesItem_DataTypeVersion,8364,Variable
-OpcUa_XmlSchema_AddNodesItem_DictionaryFragment,8365,Variable
-OpcUa_XmlSchema_AddReferencesItem,8366,Variable
-OpcUa_XmlSchema_AddReferencesItem_DataTypeVersion,8367,Variable
-OpcUa_XmlSchema_AddReferencesItem_DictionaryFragment,8368,Variable
-OpcUa_XmlSchema_DeleteNodesItem,8369,Variable
-OpcUa_XmlSchema_DeleteNodesItem_DataTypeVersion,8370,Variable
-OpcUa_XmlSchema_DeleteNodesItem_DictionaryFragment,8371,Variable
-OpcUa_XmlSchema_DeleteReferencesItem,8372,Variable
-OpcUa_XmlSchema_DeleteReferencesItem_DataTypeVersion,8373,Variable
-OpcUa_XmlSchema_DeleteReferencesItem_DictionaryFragment,8374,Variable
-OpcUa_XmlSchema_RegisteredServer,8417,Variable
-OpcUa_XmlSchema_RegisteredServer_DataTypeVersion,8418,Variable
-OpcUa_XmlSchema_RegisteredServer_DictionaryFragment,8419,Variable
-OpcUa_XmlSchema_ContentFilterElement,8564,Variable
-OpcUa_XmlSchema_ContentFilterElement_DataTypeVersion,8565,Variable
-OpcUa_XmlSchema_ContentFilterElement_DictionaryFragment,8566,Variable
-OpcUa_XmlSchema_ContentFilter,8567,Variable
-OpcUa_XmlSchema_ContentFilter_DataTypeVersion,8568,Variable
-OpcUa_XmlSchema_ContentFilter_DictionaryFragment,8569,Variable
-OpcUa_XmlSchema_FilterOperand,8570,Variable
-OpcUa_XmlSchema_FilterOperand_DataTypeVersion,8571,Variable
-OpcUa_XmlSchema_FilterOperand_DictionaryFragment,8572,Variable
-OpcUa_XmlSchema_ElementOperand,8573,Variable
-OpcUa_XmlSchema_ElementOperand_DataTypeVersion,8574,Variable
-OpcUa_XmlSchema_ElementOperand_DictionaryFragment,8575,Variable
-OpcUa_XmlSchema_LiteralOperand,8576,Variable
-OpcUa_XmlSchema_LiteralOperand_DataTypeVersion,8577,Variable
-OpcUa_XmlSchema_LiteralOperand_DictionaryFragment,8578,Variable
-OpcUa_XmlSchema_AttributeOperand,8579,Variable
-OpcUa_XmlSchema_AttributeOperand_DataTypeVersion,8580,Variable
-OpcUa_XmlSchema_AttributeOperand_DictionaryFragment,8581,Variable
-OpcUa_XmlSchema_SimpleAttributeOperand,8582,Variable
-OpcUa_XmlSchema_SimpleAttributeOperand_DataTypeVersion,8583,Variable
-OpcUa_XmlSchema_SimpleAttributeOperand_DictionaryFragment,8584,Variable
-OpcUa_XmlSchema_HistoryEvent,8639,Variable
-OpcUa_XmlSchema_HistoryEvent_DataTypeVersion,8640,Variable
-OpcUa_XmlSchema_HistoryEvent_DictionaryFragment,8641,Variable
-OpcUa_XmlSchema_MonitoringFilter,8702,Variable
-OpcUa_XmlSchema_MonitoringFilter_DataTypeVersion,8703,Variable
-OpcUa_XmlSchema_MonitoringFilter_DictionaryFragment,8704,Variable
-OpcUa_XmlSchema_EventFilter,8708,Variable
-OpcUa_XmlSchema_EventFilter_DataTypeVersion,8709,Variable
-OpcUa_XmlSchema_EventFilter_DictionaryFragment,8710,Variable
-OpcUa_XmlSchema_AggregateConfiguration,8711,Variable
-OpcUa_XmlSchema_AggregateConfiguration_DataTypeVersion,8712,Variable
-OpcUa_XmlSchema_AggregateConfiguration_DictionaryFragment,8713,Variable
-OpcUa_XmlSchema_HistoryEventFieldList,8807,Variable
-OpcUa_XmlSchema_HistoryEventFieldList_DataTypeVersion,8808,Variable
-OpcUa_XmlSchema_HistoryEventFieldList_DictionaryFragment,8809,Variable
-OpcUa_XmlSchema_RedundantServerDataType,8843,Variable
-OpcUa_XmlSchema_RedundantServerDataType_DataTypeVersion,8844,Variable
-OpcUa_XmlSchema_RedundantServerDataType_DictionaryFragment,8845,Variable
-OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType,8846,Variable
-OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType_DataTypeVersion,8847,Variable
-OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType_DictionaryFragment,8848,Variable
-OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType,8849,Variable
-OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType_DataTypeVersion,8850,Variable
-OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType_DictionaryFragment,8851,Variable
-OpcUa_XmlSchema_ServerStatusDataType,8852,Variable
-OpcUa_XmlSchema_ServerStatusDataType_DataTypeVersion,8853,Variable
-OpcUa_XmlSchema_ServerStatusDataType_DictionaryFragment,8854,Variable
-OpcUa_XmlSchema_SessionDiagnosticsDataType,8855,Variable
-OpcUa_XmlSchema_SessionDiagnosticsDataType_DataTypeVersion,8856,Variable
-OpcUa_XmlSchema_SessionDiagnosticsDataType_DictionaryFragment,8857,Variable
-OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType,8858,Variable
-OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType_DataTypeVersion,8859,Variable
-OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType_DictionaryFragment,8860,Variable
-OpcUa_XmlSchema_ServiceCounterDataType,8861,Variable
-OpcUa_XmlSchema_ServiceCounterDataType_DataTypeVersion,8862,Variable
-OpcUa_XmlSchema_ServiceCounterDataType_DictionaryFragment,8863,Variable
-OpcUa_XmlSchema_SubscriptionDiagnosticsDataType,8864,Variable
-OpcUa_XmlSchema_SubscriptionDiagnosticsDataType_DataTypeVersion,8865,Variable
-OpcUa_XmlSchema_SubscriptionDiagnosticsDataType_DictionaryFragment,8866,Variable
-OpcUa_XmlSchema_ModelChangeStructureDataType,8867,Variable
-OpcUa_XmlSchema_ModelChangeStructureDataType_DataTypeVersion,8868,Variable
-OpcUa_XmlSchema_ModelChangeStructureDataType_DictionaryFragment,8869,Variable
-OpcUa_XmlSchema_SemanticChangeStructureDataType,8870,Variable
-OpcUa_XmlSchema_SemanticChangeStructureDataType_DataTypeVersion,8871,Variable
-OpcUa_XmlSchema_SemanticChangeStructureDataType_DictionaryFragment,8872,Variable
-OpcUa_XmlSchema_Range,8873,Variable
-OpcUa_XmlSchema_Range_DataTypeVersion,8874,Variable
-OpcUa_XmlSchema_Range_DictionaryFragment,8875,Variable
-OpcUa_XmlSchema_EUInformation,8876,Variable
-OpcUa_XmlSchema_EUInformation_DataTypeVersion,8877,Variable
-OpcUa_XmlSchema_EUInformation_DictionaryFragment,8878,Variable
-OpcUa_XmlSchema_Annotation,8879,Variable
-OpcUa_XmlSchema_Annotation_DataTypeVersion,8880,Variable
-OpcUa_XmlSchema_Annotation_DictionaryFragment,8881,Variable
-OpcUa_XmlSchema_ProgramDiagnosticDataType,8882,Variable
-OpcUa_XmlSchema_ProgramDiagnosticDataType_DataTypeVersion,8883,Variable
-OpcUa_XmlSchema_ProgramDiagnosticDataType_DictionaryFragment,8884,Variable
-SubscriptionDiagnosticsType_MaxLifetimeCount,8888,Variable
-SubscriptionDiagnosticsType_LatePublishRequestCount,8889,Variable
-SubscriptionDiagnosticsType_CurrentKeepAliveCount,8890,Variable
-SubscriptionDiagnosticsType_CurrentLifetimeCount,8891,Variable
-SubscriptionDiagnosticsType_UnacknowledgedMessageCount,8892,Variable
-SubscriptionDiagnosticsType_DiscardedMessageCount,8893,Variable
-SubscriptionDiagnosticsType_MonitoredItemCount,8894,Variable
-SubscriptionDiagnosticsType_DisabledMonitoredItemCount,8895,Variable
-SubscriptionDiagnosticsType_MonitoringQueueOverflowCount,8896,Variable
-SubscriptionDiagnosticsType_NextSequenceNumber,8897,Variable
-SessionDiagnosticsObjectType_SessionDiagnostics_TotalRequestCount,8898,Variable
-SessionDiagnosticsVariableType_TotalRequestCount,8900,Variable
-SubscriptionDiagnosticsType_EventQueueOverFlowCount,8902,Variable
-TimeZoneDataType,8912,DataType
-TimeZoneDataType_Encoding_DefaultXml,8913,Object
-OpcUa_BinarySchema_TimeZoneDataType,8914,Variable
-OpcUa_BinarySchema_TimeZoneDataType_DataTypeVersion,8915,Variable
-OpcUa_BinarySchema_TimeZoneDataType_DictionaryFragment,8916,Variable
-TimeZoneDataType_Encoding_DefaultBinary,8917,Object
-OpcUa_XmlSchema_TimeZoneDataType,8918,Variable
-OpcUa_XmlSchema_TimeZoneDataType_DataTypeVersion,8919,Variable
-OpcUa_XmlSchema_TimeZoneDataType_DictionaryFragment,8920,Variable
-AuditConditionRespondEventType,8927,ObjectType
-AuditConditionRespondEventType_EventId,8928,Variable
-AuditConditionRespondEventType_EventType,8929,Variable
-AuditConditionRespondEventType_SourceNode,8930,Variable
-AuditConditionRespondEventType_SourceName,8931,Variable
-AuditConditionRespondEventType_Time,8932,Variable
-AuditConditionRespondEventType_ReceiveTime,8933,Variable
-AuditConditionRespondEventType_LocalTime,8934,Variable
-AuditConditionRespondEventType_Message,8935,Variable
-AuditConditionRespondEventType_Severity,8936,Variable
-AuditConditionRespondEventType_ActionTimeStamp,8937,Variable
-AuditConditionRespondEventType_Status,8938,Variable
-AuditConditionRespondEventType_ServerId,8939,Variable
-AuditConditionRespondEventType_ClientAuditEntryId,8940,Variable
-AuditConditionRespondEventType_ClientUserId,8941,Variable
-AuditConditionRespondEventType_MethodId,8942,Variable
-AuditConditionRespondEventType_InputArguments,8943,Variable
-AuditConditionAcknowledgeEventType,8944,ObjectType
-AuditConditionAcknowledgeEventType_EventId,8945,Variable
-AuditConditionAcknowledgeEventType_EventType,8946,Variable
-AuditConditionAcknowledgeEventType_SourceNode,8947,Variable
-AuditConditionAcknowledgeEventType_SourceName,8948,Variable
-AuditConditionAcknowledgeEventType_Time,8949,Variable
-AuditConditionAcknowledgeEventType_ReceiveTime,8950,Variable
-AuditConditionAcknowledgeEventType_LocalTime,8951,Variable
-AuditConditionAcknowledgeEventType_Message,8952,Variable
-AuditConditionAcknowledgeEventType_Severity,8953,Variable
-AuditConditionAcknowledgeEventType_ActionTimeStamp,8954,Variable
-AuditConditionAcknowledgeEventType_Status,8955,Variable
-AuditConditionAcknowledgeEventType_ServerId,8956,Variable
-AuditConditionAcknowledgeEventType_ClientAuditEntryId,8957,Variable
-AuditConditionAcknowledgeEventType_ClientUserId,8958,Variable
-AuditConditionAcknowledgeEventType_MethodId,8959,Variable
-AuditConditionAcknowledgeEventType_InputArguments,8960,Variable
-AuditConditionConfirmEventType,8961,ObjectType
-AuditConditionConfirmEventType_EventId,8962,Variable
-AuditConditionConfirmEventType_EventType,8963,Variable
-AuditConditionConfirmEventType_SourceNode,8964,Variable
-AuditConditionConfirmEventType_SourceName,8965,Variable
-AuditConditionConfirmEventType_Time,8966,Variable
-AuditConditionConfirmEventType_ReceiveTime,8967,Variable
-AuditConditionConfirmEventType_LocalTime,8968,Variable
-AuditConditionConfirmEventType_Message,8969,Variable
-AuditConditionConfirmEventType_Severity,8970,Variable
-AuditConditionConfirmEventType_ActionTimeStamp,8971,Variable
-AuditConditionConfirmEventType_Status,8972,Variable
-AuditConditionConfirmEventType_ServerId,8973,Variable
-AuditConditionConfirmEventType_ClientAuditEntryId,8974,Variable
-AuditConditionConfirmEventType_ClientUserId,8975,Variable
-AuditConditionConfirmEventType_MethodId,8976,Variable
-AuditConditionConfirmEventType_InputArguments,8977,Variable
-TwoStateVariableType,8995,VariableType
-TwoStateVariableType_Id,8996,Variable
-TwoStateVariableType_Name,8997,Variable
-TwoStateVariableType_Number,8998,Variable
-TwoStateVariableType_EffectiveDisplayName,8999,Variable
-TwoStateVariableType_TransitionTime,9000,Variable
-TwoStateVariableType_EffectiveTransitionTime,9001,Variable
-ConditionVariableType,9002,VariableType
-ConditionVariableType_SourceTimestamp,9003,Variable
-HasTrueSubState,9004,ReferenceType
-HasFalseSubState,9005,ReferenceType
-HasCondition,9006,ReferenceType
-ConditionRefreshMethodType,9007,Method
-ConditionRefreshMethodType_InputArguments,9008,Variable
-ConditionType_ConditionName,9009,Variable
-ConditionType_BranchId,9010,Variable
-ConditionType_EnabledState,9011,Variable
-ConditionType_EnabledState_Id,9012,Variable
-ConditionType_EnabledState_Name,9013,Variable
-ConditionType_EnabledState_Number,9014,Variable
-ConditionType_EnabledState_EffectiveDisplayName,9015,Variable
-ConditionType_EnabledState_TransitionTime,9016,Variable
-ConditionType_EnabledState_EffectiveTransitionTime,9017,Variable
-ConditionType_EnabledState_TrueState,9018,Variable
-ConditionType_EnabledState_FalseState,9019,Variable
-ConditionType_Quality,9020,Variable
-ConditionType_Quality_SourceTimestamp,9021,Variable
-ConditionType_LastSeverity,9022,Variable
-ConditionType_LastSeverity_SourceTimestamp,9023,Variable
-ConditionType_Comment,9024,Variable
-ConditionType_Comment_SourceTimestamp,9025,Variable
-ConditionType_ClientUserId,9026,Variable
-ConditionType_Enable,9027,Method
-ConditionType_Disable,9028,Method
-ConditionType_AddComment,9029,Method
-ConditionType_AddComment_InputArguments,9030,Variable
-DialogResponseMethodType,9031,Method
-DialogResponseMethodType_InputArguments,9032,Variable
-DialogConditionType_ConditionName,9033,Variable
-DialogConditionType_BranchId,9034,Variable
-DialogConditionType_EnabledState,9035,Variable
-DialogConditionType_EnabledState_Id,9036,Variable
-DialogConditionType_EnabledState_Name,9037,Variable
-DialogConditionType_EnabledState_Number,9038,Variable
-DialogConditionType_EnabledState_EffectiveDisplayName,9039,Variable
-DialogConditionType_EnabledState_TransitionTime,9040,Variable
-DialogConditionType_EnabledState_EffectiveTransitionTime,9041,Variable
-DialogConditionType_EnabledState_TrueState,9042,Variable
-DialogConditionType_EnabledState_FalseState,9043,Variable
-DialogConditionType_Quality,9044,Variable
-DialogConditionType_Quality_SourceTimestamp,9045,Variable
-DialogConditionType_LastSeverity,9046,Variable
-DialogConditionType_LastSeverity_SourceTimestamp,9047,Variable
-DialogConditionType_Comment,9048,Variable
-DialogConditionType_Comment_SourceTimestamp,9049,Variable
-DialogConditionType_ClientUserId,9050,Variable
-DialogConditionType_Enable,9051,Method
-DialogConditionType_Disable,9052,Method
-DialogConditionType_AddComment,9053,Method
-DialogConditionType_AddComment_InputArguments,9054,Variable
-DialogConditionType_DialogState,9055,Variable
-DialogConditionType_DialogState_Id,9056,Variable
-DialogConditionType_DialogState_Name,9057,Variable
-DialogConditionType_DialogState_Number,9058,Variable
-DialogConditionType_DialogState_EffectiveDisplayName,9059,Variable
-DialogConditionType_DialogState_TransitionTime,9060,Variable
-DialogConditionType_DialogState_EffectiveTransitionTime,9061,Variable
-DialogConditionType_DialogState_TrueState,9062,Variable
-DialogConditionType_DialogState_FalseState,9063,Variable
-DialogConditionType_ResponseOptionSet,9064,Variable
-DialogConditionType_DefaultResponse,9065,Variable
-DialogConditionType_OkResponse,9066,Variable
-DialogConditionType_CancelResponse,9067,Variable
-DialogConditionType_LastResponse,9068,Variable
-DialogConditionType_Respond,9069,Method
-DialogConditionType_Respond_InputArguments,9070,Variable
-AcknowledgeableConditionType_ConditionName,9071,Variable
-AcknowledgeableConditionType_BranchId,9072,Variable
-AcknowledgeableConditionType_EnabledState,9073,Variable
-AcknowledgeableConditionType_EnabledState_Id,9074,Variable
-AcknowledgeableConditionType_EnabledState_Name,9075,Variable
-AcknowledgeableConditionType_EnabledState_Number,9076,Variable
-AcknowledgeableConditionType_EnabledState_EffectiveDisplayName,9077,Variable
-AcknowledgeableConditionType_EnabledState_TransitionTime,9078,Variable
-AcknowledgeableConditionType_EnabledState_EffectiveTransitionTime,9079,Variable
-AcknowledgeableConditionType_EnabledState_TrueState,9080,Variable
-AcknowledgeableConditionType_EnabledState_FalseState,9081,Variable
-AcknowledgeableConditionType_Quality,9082,Variable
-AcknowledgeableConditionType_Quality_SourceTimestamp,9083,Variable
-AcknowledgeableConditionType_LastSeverity,9084,Variable
-AcknowledgeableConditionType_LastSeverity_SourceTimestamp,9085,Variable
-AcknowledgeableConditionType_Comment,9086,Variable
-AcknowledgeableConditionType_Comment_SourceTimestamp,9087,Variable
-AcknowledgeableConditionType_ClientUserId,9088,Variable
-AcknowledgeableConditionType_Enable,9089,Method
-AcknowledgeableConditionType_Disable,9090,Method
-AcknowledgeableConditionType_AddComment,9091,Method
-AcknowledgeableConditionType_AddComment_InputArguments,9092,Variable
-AcknowledgeableConditionType_AckedState,9093,Variable
-AcknowledgeableConditionType_AckedState_Id,9094,Variable
-AcknowledgeableConditionType_AckedState_Name,9095,Variable
-AcknowledgeableConditionType_AckedState_Number,9096,Variable
-AcknowledgeableConditionType_AckedState_EffectiveDisplayName,9097,Variable
-AcknowledgeableConditionType_AckedState_TransitionTime,9098,Variable
-AcknowledgeableConditionType_AckedState_EffectiveTransitionTime,9099,Variable
-AcknowledgeableConditionType_AckedState_TrueState,9100,Variable
-AcknowledgeableConditionType_AckedState_FalseState,9101,Variable
-AcknowledgeableConditionType_ConfirmedState,9102,Variable
-AcknowledgeableConditionType_ConfirmedState_Id,9103,Variable
-AcknowledgeableConditionType_ConfirmedState_Name,9104,Variable
-AcknowledgeableConditionType_ConfirmedState_Number,9105,Variable
-AcknowledgeableConditionType_ConfirmedState_EffectiveDisplayName,9106,Variable
-AcknowledgeableConditionType_ConfirmedState_TransitionTime,9107,Variable
-AcknowledgeableConditionType_ConfirmedState_EffectiveTransitionTime,9108,Variable
-AcknowledgeableConditionType_ConfirmedState_TrueState,9109,Variable
-AcknowledgeableConditionType_ConfirmedState_FalseState,9110,Variable
-AcknowledgeableConditionType_Acknowledge,9111,Method
-AcknowledgeableConditionType_Acknowledge_InputArguments,9112,Variable
-AcknowledgeableConditionType_Confirm,9113,Method
-AcknowledgeableConditionType_Confirm_InputArguments,9114,Variable
-ShelvedStateMachineType_UnshelveTime,9115,Variable
-AlarmConditionType_ConditionName,9116,Variable
-AlarmConditionType_BranchId,9117,Variable
-AlarmConditionType_EnabledState,9118,Variable
-AlarmConditionType_EnabledState_Id,9119,Variable
-AlarmConditionType_EnabledState_Name,9120,Variable
-AlarmConditionType_EnabledState_Number,9121,Variable
-AlarmConditionType_EnabledState_EffectiveDisplayName,9122,Variable
-AlarmConditionType_EnabledState_TransitionTime,9123,Variable
-AlarmConditionType_EnabledState_EffectiveTransitionTime,9124,Variable
-AlarmConditionType_EnabledState_TrueState,9125,Variable
-AlarmConditionType_EnabledState_FalseState,9126,Variable
-AlarmConditionType_Quality,9127,Variable
-AlarmConditionType_Quality_SourceTimestamp,9128,Variable
-AlarmConditionType_LastSeverity,9129,Variable
-AlarmConditionType_LastSeverity_SourceTimestamp,9130,Variable
-AlarmConditionType_Comment,9131,Variable
-AlarmConditionType_Comment_SourceTimestamp,9132,Variable
-AlarmConditionType_ClientUserId,9133,Variable
-AlarmConditionType_Enable,9134,Method
-AlarmConditionType_Disable,9135,Method
-AlarmConditionType_AddComment,9136,Method
-AlarmConditionType_AddComment_InputArguments,9137,Variable
-AlarmConditionType_AckedState,9138,Variable
-AlarmConditionType_AckedState_Id,9139,Variable
-AlarmConditionType_AckedState_Name,9140,Variable
-AlarmConditionType_AckedState_Number,9141,Variable
-AlarmConditionType_AckedState_EffectiveDisplayName,9142,Variable
-AlarmConditionType_AckedState_TransitionTime,9143,Variable
-AlarmConditionType_AckedState_EffectiveTransitionTime,9144,Variable
-AlarmConditionType_AckedState_TrueState,9145,Variable
-AlarmConditionType_AckedState_FalseState,9146,Variable
-AlarmConditionType_ConfirmedState,9147,Variable
-AlarmConditionType_ConfirmedState_Id,9148,Variable
-AlarmConditionType_ConfirmedState_Name,9149,Variable
-AlarmConditionType_ConfirmedState_Number,9150,Variable
-AlarmConditionType_ConfirmedState_EffectiveDisplayName,9151,Variable
-AlarmConditionType_ConfirmedState_TransitionTime,9152,Variable
-AlarmConditionType_ConfirmedState_EffectiveTransitionTime,9153,Variable
-AlarmConditionType_ConfirmedState_TrueState,9154,Variable
-AlarmConditionType_ConfirmedState_FalseState,9155,Variable
-AlarmConditionType_Acknowledge,9156,Method
-AlarmConditionType_Acknowledge_InputArguments,9157,Variable
-AlarmConditionType_Confirm,9158,Method
-AlarmConditionType_Confirm_InputArguments,9159,Variable
-AlarmConditionType_ActiveState,9160,Variable
-AlarmConditionType_ActiveState_Id,9161,Variable
-AlarmConditionType_ActiveState_Name,9162,Variable
-AlarmConditionType_ActiveState_Number,9163,Variable
-AlarmConditionType_ActiveState_EffectiveDisplayName,9164,Variable
-AlarmConditionType_ActiveState_TransitionTime,9165,Variable
-AlarmConditionType_ActiveState_EffectiveTransitionTime,9166,Variable
-AlarmConditionType_ActiveState_TrueState,9167,Variable
-AlarmConditionType_ActiveState_FalseState,9168,Variable
-AlarmConditionType_SuppressedState,9169,Variable
-AlarmConditionType_SuppressedState_Id,9170,Variable
-AlarmConditionType_SuppressedState_Name,9171,Variable
-AlarmConditionType_SuppressedState_Number,9172,Variable
-AlarmConditionType_SuppressedState_EffectiveDisplayName,9173,Variable
-AlarmConditionType_SuppressedState_TransitionTime,9174,Variable
-AlarmConditionType_SuppressedState_EffectiveTransitionTime,9175,Variable
-AlarmConditionType_SuppressedState_TrueState,9176,Variable
-AlarmConditionType_SuppressedState_FalseState,9177,Variable
-AlarmConditionType_ShelvingState,9178,Object
-AlarmConditionType_ShelvingState_CurrentState,9179,Variable
-AlarmConditionType_ShelvingState_CurrentState_Id,9180,Variable
-AlarmConditionType_ShelvingState_CurrentState_Name,9181,Variable
-AlarmConditionType_ShelvingState_CurrentState_Number,9182,Variable
-AlarmConditionType_ShelvingState_CurrentState_EffectiveDisplayName,9183,Variable
-AlarmConditionType_ShelvingState_LastTransition,9184,Variable
-AlarmConditionType_ShelvingState_LastTransition_Id,9185,Variable
-AlarmConditionType_ShelvingState_LastTransition_Name,9186,Variable
-AlarmConditionType_ShelvingState_LastTransition_Number,9187,Variable
-AlarmConditionType_ShelvingState_LastTransition_TransitionTime,9188,Variable
-AlarmConditionType_ShelvingState_UnshelveTime,9189,Variable
-AlarmConditionType_ShelvingState_Unshelve,9211,Method
-AlarmConditionType_ShelvingState_OneShotShelve,9212,Method
-AlarmConditionType_ShelvingState_TimedShelve,9213,Method
-AlarmConditionType_ShelvingState_TimedShelve_InputArguments,9214,Variable
-AlarmConditionType_SuppressedOrShelved,9215,Variable
-AlarmConditionType_MaxTimeShelved,9216,Variable
-LimitAlarmType_ConditionName,9217,Variable
-LimitAlarmType_BranchId,9218,Variable
-LimitAlarmType_EnabledState,9219,Variable
-LimitAlarmType_EnabledState_Id,9220,Variable
-LimitAlarmType_EnabledState_Name,9221,Variable
-LimitAlarmType_EnabledState_Number,9222,Variable
-LimitAlarmType_EnabledState_EffectiveDisplayName,9223,Variable
-LimitAlarmType_EnabledState_TransitionTime,9224,Variable
-LimitAlarmType_EnabledState_EffectiveTransitionTime,9225,Variable
-LimitAlarmType_EnabledState_TrueState,9226,Variable
-LimitAlarmType_EnabledState_FalseState,9227,Variable
-LimitAlarmType_Quality,9228,Variable
-LimitAlarmType_Quality_SourceTimestamp,9229,Variable
-LimitAlarmType_LastSeverity,9230,Variable
-LimitAlarmType_LastSeverity_SourceTimestamp,9231,Variable
-LimitAlarmType_Comment,9232,Variable
-LimitAlarmType_Comment_SourceTimestamp,9233,Variable
-LimitAlarmType_ClientUserId,9234,Variable
-LimitAlarmType_Enable,9235,Method
-LimitAlarmType_Disable,9236,Method
-LimitAlarmType_AddComment,9237,Method
-LimitAlarmType_AddComment_InputArguments,9238,Variable
-LimitAlarmType_AckedState,9239,Variable
-LimitAlarmType_AckedState_Id,9240,Variable
-LimitAlarmType_AckedState_Name,9241,Variable
-LimitAlarmType_AckedState_Number,9242,Variable
-LimitAlarmType_AckedState_EffectiveDisplayName,9243,Variable
-LimitAlarmType_AckedState_TransitionTime,9244,Variable
-LimitAlarmType_AckedState_EffectiveTransitionTime,9245,Variable
-LimitAlarmType_AckedState_TrueState,9246,Variable
-LimitAlarmType_AckedState_FalseState,9247,Variable
-LimitAlarmType_ConfirmedState,9248,Variable
-LimitAlarmType_ConfirmedState_Id,9249,Variable
-LimitAlarmType_ConfirmedState_Name,9250,Variable
-LimitAlarmType_ConfirmedState_Number,9251,Variable
-LimitAlarmType_ConfirmedState_EffectiveDisplayName,9252,Variable
-LimitAlarmType_ConfirmedState_TransitionTime,9253,Variable
-LimitAlarmType_ConfirmedState_EffectiveTransitionTime,9254,Variable
-LimitAlarmType_ConfirmedState_TrueState,9255,Variable
-LimitAlarmType_ConfirmedState_FalseState,9256,Variable
-LimitAlarmType_Acknowledge,9257,Method
-LimitAlarmType_Acknowledge_InputArguments,9258,Variable
-LimitAlarmType_Confirm,9259,Method
-LimitAlarmType_Confirm_InputArguments,9260,Variable
-LimitAlarmType_ActiveState,9261,Variable
-LimitAlarmType_ActiveState_Id,9262,Variable
-LimitAlarmType_ActiveState_Name,9263,Variable
-LimitAlarmType_ActiveState_Number,9264,Variable
-LimitAlarmType_ActiveState_EffectiveDisplayName,9265,Variable
-LimitAlarmType_ActiveState_TransitionTime,9266,Variable
-LimitAlarmType_ActiveState_EffectiveTransitionTime,9267,Variable
-LimitAlarmType_ActiveState_TrueState,9268,Variable
-LimitAlarmType_ActiveState_FalseState,9269,Variable
-LimitAlarmType_SuppressedState,9270,Variable
-LimitAlarmType_SuppressedState_Id,9271,Variable
-LimitAlarmType_SuppressedState_Name,9272,Variable
-LimitAlarmType_SuppressedState_Number,9273,Variable
-LimitAlarmType_SuppressedState_EffectiveDisplayName,9274,Variable
-LimitAlarmType_SuppressedState_TransitionTime,9275,Variable
-LimitAlarmType_SuppressedState_EffectiveTransitionTime,9276,Variable
-LimitAlarmType_SuppressedState_TrueState,9277,Variable
-LimitAlarmType_SuppressedState_FalseState,9278,Variable
-LimitAlarmType_ShelvingState,9279,Object
-LimitAlarmType_ShelvingState_CurrentState,9280,Variable
-LimitAlarmType_ShelvingState_CurrentState_Id,9281,Variable
-LimitAlarmType_ShelvingState_CurrentState_Name,9282,Variable
-LimitAlarmType_ShelvingState_CurrentState_Number,9283,Variable
-LimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9284,Variable
-LimitAlarmType_ShelvingState_LastTransition,9285,Variable
-LimitAlarmType_ShelvingState_LastTransition_Id,9286,Variable
-LimitAlarmType_ShelvingState_LastTransition_Name,9287,Variable
-LimitAlarmType_ShelvingState_LastTransition_Number,9288,Variable
-LimitAlarmType_ShelvingState_LastTransition_TransitionTime,9289,Variable
-LimitAlarmType_ShelvingState_UnshelveTime,9290,Variable
-LimitAlarmType_ShelvingState_Unshelve,9312,Method
-LimitAlarmType_ShelvingState_OneShotShelve,9313,Method
-LimitAlarmType_ShelvingState_TimedShelve,9314,Method
-LimitAlarmType_ShelvingState_TimedShelve_InputArguments,9315,Variable
-LimitAlarmType_SuppressedOrShelved,9316,Variable
-LimitAlarmType_MaxTimeShelved,9317,Variable
-ExclusiveLimitStateMachineType,9318,ObjectType
-ExclusiveLimitStateMachineType_CurrentState,9319,Variable
-ExclusiveLimitStateMachineType_CurrentState_Id,9320,Variable
-ExclusiveLimitStateMachineType_CurrentState_Name,9321,Variable
-ExclusiveLimitStateMachineType_CurrentState_Number,9322,Variable
-ExclusiveLimitStateMachineType_CurrentState_EffectiveDisplayName,9323,Variable
-ExclusiveLimitStateMachineType_LastTransition,9324,Variable
-ExclusiveLimitStateMachineType_LastTransition_Id,9325,Variable
-ExclusiveLimitStateMachineType_LastTransition_Name,9326,Variable
-ExclusiveLimitStateMachineType_LastTransition_Number,9327,Variable
-ExclusiveLimitStateMachineType_LastTransition_TransitionTime,9328,Variable
-ExclusiveLimitStateMachineType_HighHigh,9329,Object
-ExclusiveLimitStateMachineType_HighHigh_StateNumber,9330,Variable
-ExclusiveLimitStateMachineType_High,9331,Object
-ExclusiveLimitStateMachineType_High_StateNumber,9332,Variable
-ExclusiveLimitStateMachineType_Low,9333,Object
-ExclusiveLimitStateMachineType_Low_StateNumber,9334,Variable
-ExclusiveLimitStateMachineType_LowLow,9335,Object
-ExclusiveLimitStateMachineType_LowLow_StateNumber,9336,Variable
-ExclusiveLimitStateMachineType_LowLowToLow,9337,Object
-ExclusiveLimitStateMachineType_LowToLowLow,9338,Object
-ExclusiveLimitStateMachineType_HighHighToHigh,9339,Object
-ExclusiveLimitStateMachineType_HighToHighHigh,9340,Object
-ExclusiveLimitAlarmType,9341,ObjectType
-ExclusiveLimitAlarmType_EventId,9342,Variable
-ExclusiveLimitAlarmType_EventType,9343,Variable
-ExclusiveLimitAlarmType_SourceNode,9344,Variable
-ExclusiveLimitAlarmType_SourceName,9345,Variable
-ExclusiveLimitAlarmType_Time,9346,Variable
-ExclusiveLimitAlarmType_ReceiveTime,9347,Variable
-ExclusiveLimitAlarmType_LocalTime,9348,Variable
-ExclusiveLimitAlarmType_Message,9349,Variable
-ExclusiveLimitAlarmType_Severity,9350,Variable
-ExclusiveLimitAlarmType_ConditionName,9351,Variable
-ExclusiveLimitAlarmType_BranchId,9352,Variable
-ExclusiveLimitAlarmType_Retain,9353,Variable
-ExclusiveLimitAlarmType_EnabledState,9354,Variable
-ExclusiveLimitAlarmType_EnabledState_Id,9355,Variable
-ExclusiveLimitAlarmType_EnabledState_Name,9356,Variable
-ExclusiveLimitAlarmType_EnabledState_Number,9357,Variable
-ExclusiveLimitAlarmType_EnabledState_EffectiveDisplayName,9358,Variable
-ExclusiveLimitAlarmType_EnabledState_TransitionTime,9359,Variable
-ExclusiveLimitAlarmType_EnabledState_EffectiveTransitionTime,9360,Variable
-ExclusiveLimitAlarmType_EnabledState_TrueState,9361,Variable
-ExclusiveLimitAlarmType_EnabledState_FalseState,9362,Variable
-ExclusiveLimitAlarmType_Quality,9363,Variable
-ExclusiveLimitAlarmType_Quality_SourceTimestamp,9364,Variable
-ExclusiveLimitAlarmType_LastSeverity,9365,Variable
-ExclusiveLimitAlarmType_LastSeverity_SourceTimestamp,9366,Variable
-ExclusiveLimitAlarmType_Comment,9367,Variable
-ExclusiveLimitAlarmType_Comment_SourceTimestamp,9368,Variable
-ExclusiveLimitAlarmType_ClientUserId,9369,Variable
-ExclusiveLimitAlarmType_Enable,9370,Method
-ExclusiveLimitAlarmType_Disable,9371,Method
-ExclusiveLimitAlarmType_AddComment,9372,Method
-ExclusiveLimitAlarmType_AddComment_InputArguments,9373,Variable
-ExclusiveLimitAlarmType_ConditionRefresh,9374,Method
-ExclusiveLimitAlarmType_ConditionRefresh_InputArguments,9375,Variable
-ExclusiveLimitAlarmType_AckedState,9376,Variable
-ExclusiveLimitAlarmType_AckedState_Id,9377,Variable
-ExclusiveLimitAlarmType_AckedState_Name,9378,Variable
-ExclusiveLimitAlarmType_AckedState_Number,9379,Variable
-ExclusiveLimitAlarmType_AckedState_EffectiveDisplayName,9380,Variable
-ExclusiveLimitAlarmType_AckedState_TransitionTime,9381,Variable
-ExclusiveLimitAlarmType_AckedState_EffectiveTransitionTime,9382,Variable
-ExclusiveLimitAlarmType_AckedState_TrueState,9383,Variable
-ExclusiveLimitAlarmType_AckedState_FalseState,9384,Variable
-ExclusiveLimitAlarmType_ConfirmedState,9385,Variable
-ExclusiveLimitAlarmType_ConfirmedState_Id,9386,Variable
-ExclusiveLimitAlarmType_ConfirmedState_Name,9387,Variable
-ExclusiveLimitAlarmType_ConfirmedState_Number,9388,Variable
-ExclusiveLimitAlarmType_ConfirmedState_EffectiveDisplayName,9389,Variable
-ExclusiveLimitAlarmType_ConfirmedState_TransitionTime,9390,Variable
-ExclusiveLimitAlarmType_ConfirmedState_EffectiveTransitionTime,9391,Variable
-ExclusiveLimitAlarmType_ConfirmedState_TrueState,9392,Variable
-ExclusiveLimitAlarmType_ConfirmedState_FalseState,9393,Variable
-ExclusiveLimitAlarmType_Acknowledge,9394,Method
-ExclusiveLimitAlarmType_Acknowledge_InputArguments,9395,Variable
-ExclusiveLimitAlarmType_Confirm,9396,Method
-ExclusiveLimitAlarmType_Confirm_InputArguments,9397,Variable
-ExclusiveLimitAlarmType_ActiveState,9398,Variable
-ExclusiveLimitAlarmType_ActiveState_Id,9399,Variable
-ExclusiveLimitAlarmType_ActiveState_Name,9400,Variable
-ExclusiveLimitAlarmType_ActiveState_Number,9401,Variable
-ExclusiveLimitAlarmType_ActiveState_EffectiveDisplayName,9402,Variable
-ExclusiveLimitAlarmType_ActiveState_TransitionTime,9403,Variable
-ExclusiveLimitAlarmType_ActiveState_EffectiveTransitionTime,9404,Variable
-ExclusiveLimitAlarmType_ActiveState_TrueState,9405,Variable
-ExclusiveLimitAlarmType_ActiveState_FalseState,9406,Variable
-ExclusiveLimitAlarmType_SuppressedState,9407,Variable
-ExclusiveLimitAlarmType_SuppressedState_Id,9408,Variable
-ExclusiveLimitAlarmType_SuppressedState_Name,9409,Variable
-ExclusiveLimitAlarmType_SuppressedState_Number,9410,Variable
-ExclusiveLimitAlarmType_SuppressedState_EffectiveDisplayName,9411,Variable
-ExclusiveLimitAlarmType_SuppressedState_TransitionTime,9412,Variable
-ExclusiveLimitAlarmType_SuppressedState_EffectiveTransitionTime,9413,Variable
-ExclusiveLimitAlarmType_SuppressedState_TrueState,9414,Variable
-ExclusiveLimitAlarmType_SuppressedState_FalseState,9415,Variable
-ExclusiveLimitAlarmType_ShelvingState,9416,Object
-ExclusiveLimitAlarmType_ShelvingState_CurrentState,9417,Variable
-ExclusiveLimitAlarmType_ShelvingState_CurrentState_Id,9418,Variable
-ExclusiveLimitAlarmType_ShelvingState_CurrentState_Name,9419,Variable
-ExclusiveLimitAlarmType_ShelvingState_CurrentState_Number,9420,Variable
-ExclusiveLimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9421,Variable
-ExclusiveLimitAlarmType_ShelvingState_LastTransition,9422,Variable
-ExclusiveLimitAlarmType_ShelvingState_LastTransition_Id,9423,Variable
-ExclusiveLimitAlarmType_ShelvingState_LastTransition_Name,9424,Variable
-ExclusiveLimitAlarmType_ShelvingState_LastTransition_Number,9425,Variable
-ExclusiveLimitAlarmType_ShelvingState_LastTransition_TransitionTime,9426,Variable
-ExclusiveLimitAlarmType_ShelvingState_UnshelveTime,9427,Variable
-ExclusiveLimitAlarmType_ShelvingState_Unshelve,9449,Method
-ExclusiveLimitAlarmType_ShelvingState_OneShotShelve,9450,Method
-ExclusiveLimitAlarmType_ShelvingState_TimedShelve,9451,Method
-ExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments,9452,Variable
-ExclusiveLimitAlarmType_SuppressedOrShelved,9453,Variable
-ExclusiveLimitAlarmType_MaxTimeShelved,9454,Variable
-ExclusiveLimitAlarmType_LimitState,9455,Object
-ExclusiveLimitAlarmType_LimitState_CurrentState,9456,Variable
-ExclusiveLimitAlarmType_LimitState_CurrentState_Id,9457,Variable
-ExclusiveLimitAlarmType_LimitState_CurrentState_Name,9458,Variable
-ExclusiveLimitAlarmType_LimitState_CurrentState_Number,9459,Variable
-ExclusiveLimitAlarmType_LimitState_CurrentState_EffectiveDisplayName,9460,Variable
-ExclusiveLimitAlarmType_LimitState_LastTransition,9461,Variable
-ExclusiveLimitAlarmType_LimitState_LastTransition_Id,9462,Variable
-ExclusiveLimitAlarmType_LimitState_LastTransition_Name,9463,Variable
-ExclusiveLimitAlarmType_LimitState_LastTransition_Number,9464,Variable
-ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime,9465,Variable
-ExclusiveLimitAlarmType_HighHighLimit,9478,Variable
-ExclusiveLimitAlarmType_HighLimit,9479,Variable
-ExclusiveLimitAlarmType_LowLimit,9480,Variable
-ExclusiveLimitAlarmType_LowLowLimit,9481,Variable
-ExclusiveLevelAlarmType,9482,ObjectType
-ExclusiveLevelAlarmType_EventId,9483,Variable
-ExclusiveLevelAlarmType_EventType,9484,Variable
-ExclusiveLevelAlarmType_SourceNode,9485,Variable
-ExclusiveLevelAlarmType_SourceName,9486,Variable
-ExclusiveLevelAlarmType_Time,9487,Variable
-ExclusiveLevelAlarmType_ReceiveTime,9488,Variable
-ExclusiveLevelAlarmType_LocalTime,9489,Variable
-ExclusiveLevelAlarmType_Message,9490,Variable
-ExclusiveLevelAlarmType_Severity,9491,Variable
-ExclusiveLevelAlarmType_ConditionName,9492,Variable
-ExclusiveLevelAlarmType_BranchId,9493,Variable
-ExclusiveLevelAlarmType_Retain,9494,Variable
-ExclusiveLevelAlarmType_EnabledState,9495,Variable
-ExclusiveLevelAlarmType_EnabledState_Id,9496,Variable
-ExclusiveLevelAlarmType_EnabledState_Name,9497,Variable
-ExclusiveLevelAlarmType_EnabledState_Number,9498,Variable
-ExclusiveLevelAlarmType_EnabledState_EffectiveDisplayName,9499,Variable
-ExclusiveLevelAlarmType_EnabledState_TransitionTime,9500,Variable
-ExclusiveLevelAlarmType_EnabledState_EffectiveTransitionTime,9501,Variable
-ExclusiveLevelAlarmType_EnabledState_TrueState,9502,Variable
-ExclusiveLevelAlarmType_EnabledState_FalseState,9503,Variable
-ExclusiveLevelAlarmType_Quality,9504,Variable
-ExclusiveLevelAlarmType_Quality_SourceTimestamp,9505,Variable
-ExclusiveLevelAlarmType_LastSeverity,9506,Variable
-ExclusiveLevelAlarmType_LastSeverity_SourceTimestamp,9507,Variable
-ExclusiveLevelAlarmType_Comment,9508,Variable
-ExclusiveLevelAlarmType_Comment_SourceTimestamp,9509,Variable
-ExclusiveLevelAlarmType_ClientUserId,9510,Variable
-ExclusiveLevelAlarmType_Enable,9511,Method
-ExclusiveLevelAlarmType_Disable,9512,Method
-ExclusiveLevelAlarmType_AddComment,9513,Method
-ExclusiveLevelAlarmType_AddComment_InputArguments,9514,Variable
-ExclusiveLevelAlarmType_ConditionRefresh,9515,Method
-ExclusiveLevelAlarmType_ConditionRefresh_InputArguments,9516,Variable
-ExclusiveLevelAlarmType_AckedState,9517,Variable
-ExclusiveLevelAlarmType_AckedState_Id,9518,Variable
-ExclusiveLevelAlarmType_AckedState_Name,9519,Variable
-ExclusiveLevelAlarmType_AckedState_Number,9520,Variable
-ExclusiveLevelAlarmType_AckedState_EffectiveDisplayName,9521,Variable
-ExclusiveLevelAlarmType_AckedState_TransitionTime,9522,Variable
-ExclusiveLevelAlarmType_AckedState_EffectiveTransitionTime,9523,Variable
-ExclusiveLevelAlarmType_AckedState_TrueState,9524,Variable
-ExclusiveLevelAlarmType_AckedState_FalseState,9525,Variable
-ExclusiveLevelAlarmType_ConfirmedState,9526,Variable
-ExclusiveLevelAlarmType_ConfirmedState_Id,9527,Variable
-ExclusiveLevelAlarmType_ConfirmedState_Name,9528,Variable
-ExclusiveLevelAlarmType_ConfirmedState_Number,9529,Variable
-ExclusiveLevelAlarmType_ConfirmedState_EffectiveDisplayName,9530,Variable
-ExclusiveLevelAlarmType_ConfirmedState_TransitionTime,9531,Variable
-ExclusiveLevelAlarmType_ConfirmedState_EffectiveTransitionTime,9532,Variable
-ExclusiveLevelAlarmType_ConfirmedState_TrueState,9533,Variable
-ExclusiveLevelAlarmType_ConfirmedState_FalseState,9534,Variable
-ExclusiveLevelAlarmType_Acknowledge,9535,Method
-ExclusiveLevelAlarmType_Acknowledge_InputArguments,9536,Variable
-ExclusiveLevelAlarmType_Confirm,9537,Method
-ExclusiveLevelAlarmType_Confirm_InputArguments,9538,Variable
-ExclusiveLevelAlarmType_ActiveState,9539,Variable
-ExclusiveLevelAlarmType_ActiveState_Id,9540,Variable
-ExclusiveLevelAlarmType_ActiveState_Name,9541,Variable
-ExclusiveLevelAlarmType_ActiveState_Number,9542,Variable
-ExclusiveLevelAlarmType_ActiveState_EffectiveDisplayName,9543,Variable
-ExclusiveLevelAlarmType_ActiveState_TransitionTime,9544,Variable
-ExclusiveLevelAlarmType_ActiveState_EffectiveTransitionTime,9545,Variable
-ExclusiveLevelAlarmType_ActiveState_TrueState,9546,Variable
-ExclusiveLevelAlarmType_ActiveState_FalseState,9547,Variable
-ExclusiveLevelAlarmType_SuppressedState,9548,Variable
-ExclusiveLevelAlarmType_SuppressedState_Id,9549,Variable
-ExclusiveLevelAlarmType_SuppressedState_Name,9550,Variable
-ExclusiveLevelAlarmType_SuppressedState_Number,9551,Variable
-ExclusiveLevelAlarmType_SuppressedState_EffectiveDisplayName,9552,Variable
-ExclusiveLevelAlarmType_SuppressedState_TransitionTime,9553,Variable
-ExclusiveLevelAlarmType_SuppressedState_EffectiveTransitionTime,9554,Variable
-ExclusiveLevelAlarmType_SuppressedState_TrueState,9555,Variable
-ExclusiveLevelAlarmType_SuppressedState_FalseState,9556,Variable
-ExclusiveLevelAlarmType_ShelvingState,9557,Object
-ExclusiveLevelAlarmType_ShelvingState_CurrentState,9558,Variable
-ExclusiveLevelAlarmType_ShelvingState_CurrentState_Id,9559,Variable
-ExclusiveLevelAlarmType_ShelvingState_CurrentState_Name,9560,Variable
-ExclusiveLevelAlarmType_ShelvingState_CurrentState_Number,9561,Variable
-ExclusiveLevelAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9562,Variable
-ExclusiveLevelAlarmType_ShelvingState_LastTransition,9563,Variable
-ExclusiveLevelAlarmType_ShelvingState_LastTransition_Id,9564,Variable
-ExclusiveLevelAlarmType_ShelvingState_LastTransition_Name,9565,Variable
-ExclusiveLevelAlarmType_ShelvingState_LastTransition_Number,9566,Variable
-ExclusiveLevelAlarmType_ShelvingState_LastTransition_TransitionTime,9567,Variable
-ExclusiveLevelAlarmType_ShelvingState_UnshelveTime,9568,Variable
-ExclusiveLevelAlarmType_ShelvingState_Unshelve,9590,Method
-ExclusiveLevelAlarmType_ShelvingState_OneShotShelve,9591,Method
-ExclusiveLevelAlarmType_ShelvingState_TimedShelve,9592,Method
-ExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments,9593,Variable
-ExclusiveLevelAlarmType_SuppressedOrShelved,9594,Variable
-ExclusiveLevelAlarmType_MaxTimeShelved,9595,Variable
-ExclusiveLevelAlarmType_LimitState,9596,Object
-ExclusiveLevelAlarmType_LimitState_CurrentState,9597,Variable
-ExclusiveLevelAlarmType_LimitState_CurrentState_Id,9598,Variable
-ExclusiveLevelAlarmType_LimitState_CurrentState_Name,9599,Variable
-ExclusiveLevelAlarmType_LimitState_CurrentState_Number,9600,Variable
-ExclusiveLevelAlarmType_LimitState_CurrentState_EffectiveDisplayName,9601,Variable
-ExclusiveLevelAlarmType_LimitState_LastTransition,9602,Variable
-ExclusiveLevelAlarmType_LimitState_LastTransition_Id,9603,Variable
-ExclusiveLevelAlarmType_LimitState_LastTransition_Name,9604,Variable
-ExclusiveLevelAlarmType_LimitState_LastTransition_Number,9605,Variable
-ExclusiveLevelAlarmType_LimitState_LastTransition_TransitionTime,9606,Variable
-ExclusiveLevelAlarmType_HighHighLimit,9619,Variable
-ExclusiveLevelAlarmType_HighLimit,9620,Variable
-ExclusiveLevelAlarmType_LowLimit,9621,Variable
-ExclusiveLevelAlarmType_LowLowLimit,9622,Variable
-ExclusiveRateOfChangeAlarmType,9623,ObjectType
-ExclusiveRateOfChangeAlarmType_EventId,9624,Variable
-ExclusiveRateOfChangeAlarmType_EventType,9625,Variable
-ExclusiveRateOfChangeAlarmType_SourceNode,9626,Variable
-ExclusiveRateOfChangeAlarmType_SourceName,9627,Variable
-ExclusiveRateOfChangeAlarmType_Time,9628,Variable
-ExclusiveRateOfChangeAlarmType_ReceiveTime,9629,Variable
-ExclusiveRateOfChangeAlarmType_LocalTime,9630,Variable
-ExclusiveRateOfChangeAlarmType_Message,9631,Variable
-ExclusiveRateOfChangeAlarmType_Severity,9632,Variable
-ExclusiveRateOfChangeAlarmType_ConditionName,9633,Variable
-ExclusiveRateOfChangeAlarmType_BranchId,9634,Variable
-ExclusiveRateOfChangeAlarmType_Retain,9635,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState,9636,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_Id,9637,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_Name,9638,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_Number,9639,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_EffectiveDisplayName,9640,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_TransitionTime,9641,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_EffectiveTransitionTime,9642,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_TrueState,9643,Variable
-ExclusiveRateOfChangeAlarmType_EnabledState_FalseState,9644,Variable
-ExclusiveRateOfChangeAlarmType_Quality,9645,Variable
-ExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp,9646,Variable
-ExclusiveRateOfChangeAlarmType_LastSeverity,9647,Variable
-ExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp,9648,Variable
-ExclusiveRateOfChangeAlarmType_Comment,9649,Variable
-ExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp,9650,Variable
-ExclusiveRateOfChangeAlarmType_ClientUserId,9651,Variable
-ExclusiveRateOfChangeAlarmType_Enable,9652,Method
-ExclusiveRateOfChangeAlarmType_Disable,9653,Method
-ExclusiveRateOfChangeAlarmType_AddComment,9654,Method
-ExclusiveRateOfChangeAlarmType_AddComment_InputArguments,9655,Variable
-ExclusiveRateOfChangeAlarmType_ConditionRefresh,9656,Method
-ExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments,9657,Variable
-ExclusiveRateOfChangeAlarmType_AckedState,9658,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_Id,9659,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_Name,9660,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_Number,9661,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_EffectiveDisplayName,9662,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_TransitionTime,9663,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_EffectiveTransitionTime,9664,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_TrueState,9665,Variable
-ExclusiveRateOfChangeAlarmType_AckedState_FalseState,9666,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState,9667,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_Id,9668,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_Name,9669,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_Number,9670,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveDisplayName,9671,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_TransitionTime,9672,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveTransitionTime,9673,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_TrueState,9674,Variable
-ExclusiveRateOfChangeAlarmType_ConfirmedState_FalseState,9675,Variable
-ExclusiveRateOfChangeAlarmType_Acknowledge,9676,Method
-ExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments,9677,Variable
-ExclusiveRateOfChangeAlarmType_Confirm,9678,Method
-ExclusiveRateOfChangeAlarmType_Confirm_InputArguments,9679,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState,9680,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_Id,9681,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_Name,9682,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_Number,9683,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_EffectiveDisplayName,9684,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_TransitionTime,9685,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_EffectiveTransitionTime,9686,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_TrueState,9687,Variable
-ExclusiveRateOfChangeAlarmType_ActiveState_FalseState,9688,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState,9689,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_Id,9690,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_Name,9691,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_Number,9692,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveDisplayName,9693,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_TransitionTime,9694,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveTransitionTime,9695,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_TrueState,9696,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedState_FalseState,9697,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState,9698,Object
-ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState,9699,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id,9700,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Name,9701,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Number,9702,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9703,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition,9704,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id,9705,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Name,9706,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Number,9707,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_TransitionTime,9708,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime,9709,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve,9731,Method
-ExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve,9732,Method
-ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve,9733,Method
-ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments,9734,Variable
-ExclusiveRateOfChangeAlarmType_SuppressedOrShelved,9735,Variable
-ExclusiveRateOfChangeAlarmType_MaxTimeShelved,9736,Variable
-ExclusiveRateOfChangeAlarmType_LimitState,9737,Object
-ExclusiveRateOfChangeAlarmType_LimitState_CurrentState,9738,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Id,9739,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Name,9740,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Number,9741,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_EffectiveDisplayName,9742,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_LastTransition,9743,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Id,9744,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Name,9745,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Number,9746,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_TransitionTime,9747,Variable
-ExclusiveRateOfChangeAlarmType_HighHighLimit,9760,Variable
-ExclusiveRateOfChangeAlarmType_HighLimit,9761,Variable
-ExclusiveRateOfChangeAlarmType_LowLimit,9762,Variable
-ExclusiveRateOfChangeAlarmType_LowLowLimit,9763,Variable
-ExclusiveDeviationAlarmType,9764,ObjectType
-ExclusiveDeviationAlarmType_EventId,9765,Variable
-ExclusiveDeviationAlarmType_EventType,9766,Variable
-ExclusiveDeviationAlarmType_SourceNode,9767,Variable
-ExclusiveDeviationAlarmType_SourceName,9768,Variable
-ExclusiveDeviationAlarmType_Time,9769,Variable
-ExclusiveDeviationAlarmType_ReceiveTime,9770,Variable
-ExclusiveDeviationAlarmType_LocalTime,9771,Variable
-ExclusiveDeviationAlarmType_Message,9772,Variable
-ExclusiveDeviationAlarmType_Severity,9773,Variable
-ExclusiveDeviationAlarmType_ConditionName,9774,Variable
-ExclusiveDeviationAlarmType_BranchId,9775,Variable
-ExclusiveDeviationAlarmType_Retain,9776,Variable
-ExclusiveDeviationAlarmType_EnabledState,9777,Variable
-ExclusiveDeviationAlarmType_EnabledState_Id,9778,Variable
-ExclusiveDeviationAlarmType_EnabledState_Name,9779,Variable
-ExclusiveDeviationAlarmType_EnabledState_Number,9780,Variable
-ExclusiveDeviationAlarmType_EnabledState_EffectiveDisplayName,9781,Variable
-ExclusiveDeviationAlarmType_EnabledState_TransitionTime,9782,Variable
-ExclusiveDeviationAlarmType_EnabledState_EffectiveTransitionTime,9783,Variable
-ExclusiveDeviationAlarmType_EnabledState_TrueState,9784,Variable
-ExclusiveDeviationAlarmType_EnabledState_FalseState,9785,Variable
-ExclusiveDeviationAlarmType_Quality,9786,Variable
-ExclusiveDeviationAlarmType_Quality_SourceTimestamp,9787,Variable
-ExclusiveDeviationAlarmType_LastSeverity,9788,Variable
-ExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp,9789,Variable
-ExclusiveDeviationAlarmType_Comment,9790,Variable
-ExclusiveDeviationAlarmType_Comment_SourceTimestamp,9791,Variable
-ExclusiveDeviationAlarmType_ClientUserId,9792,Variable
-ExclusiveDeviationAlarmType_Enable,9793,Method
-ExclusiveDeviationAlarmType_Disable,9794,Method
-ExclusiveDeviationAlarmType_AddComment,9795,Method
-ExclusiveDeviationAlarmType_AddComment_InputArguments,9796,Variable
-ExclusiveDeviationAlarmType_ConditionRefresh,9797,Method
-ExclusiveDeviationAlarmType_ConditionRefresh_InputArguments,9798,Variable
-ExclusiveDeviationAlarmType_AckedState,9799,Variable
-ExclusiveDeviationAlarmType_AckedState_Id,9800,Variable
-ExclusiveDeviationAlarmType_AckedState_Name,9801,Variable
-ExclusiveDeviationAlarmType_AckedState_Number,9802,Variable
-ExclusiveDeviationAlarmType_AckedState_EffectiveDisplayName,9803,Variable
-ExclusiveDeviationAlarmType_AckedState_TransitionTime,9804,Variable
-ExclusiveDeviationAlarmType_AckedState_EffectiveTransitionTime,9805,Variable
-ExclusiveDeviationAlarmType_AckedState_TrueState,9806,Variable
-ExclusiveDeviationAlarmType_AckedState_FalseState,9807,Variable
-ExclusiveDeviationAlarmType_ConfirmedState,9808,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_Id,9809,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_Name,9810,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_Number,9811,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_EffectiveDisplayName,9812,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_TransitionTime,9813,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_EffectiveTransitionTime,9814,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_TrueState,9815,Variable
-ExclusiveDeviationAlarmType_ConfirmedState_FalseState,9816,Variable
-ExclusiveDeviationAlarmType_Acknowledge,9817,Method
-ExclusiveDeviationAlarmType_Acknowledge_InputArguments,9818,Variable
-ExclusiveDeviationAlarmType_Confirm,9819,Method
-ExclusiveDeviationAlarmType_Confirm_InputArguments,9820,Variable
-ExclusiveDeviationAlarmType_ActiveState,9821,Variable
-ExclusiveDeviationAlarmType_ActiveState_Id,9822,Variable
-ExclusiveDeviationAlarmType_ActiveState_Name,9823,Variable
-ExclusiveDeviationAlarmType_ActiveState_Number,9824,Variable
-ExclusiveDeviationAlarmType_ActiveState_EffectiveDisplayName,9825,Variable
-ExclusiveDeviationAlarmType_ActiveState_TransitionTime,9826,Variable
-ExclusiveDeviationAlarmType_ActiveState_EffectiveTransitionTime,9827,Variable
-ExclusiveDeviationAlarmType_ActiveState_TrueState,9828,Variable
-ExclusiveDeviationAlarmType_ActiveState_FalseState,9829,Variable
-ExclusiveDeviationAlarmType_SuppressedState,9830,Variable
-ExclusiveDeviationAlarmType_SuppressedState_Id,9831,Variable
-ExclusiveDeviationAlarmType_SuppressedState_Name,9832,Variable
-ExclusiveDeviationAlarmType_SuppressedState_Number,9833,Variable
-ExclusiveDeviationAlarmType_SuppressedState_EffectiveDisplayName,9834,Variable
-ExclusiveDeviationAlarmType_SuppressedState_TransitionTime,9835,Variable
-ExclusiveDeviationAlarmType_SuppressedState_EffectiveTransitionTime,9836,Variable
-ExclusiveDeviationAlarmType_SuppressedState_TrueState,9837,Variable
-ExclusiveDeviationAlarmType_SuppressedState_FalseState,9838,Variable
-ExclusiveDeviationAlarmType_ShelvingState,9839,Object
-ExclusiveDeviationAlarmType_ShelvingState_CurrentState,9840,Variable
-ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id,9841,Variable
-ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Name,9842,Variable
-ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Number,9843,Variable
-ExclusiveDeviationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9844,Variable
-ExclusiveDeviationAlarmType_ShelvingState_LastTransition,9845,Variable
-ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id,9846,Variable
-ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Name,9847,Variable
-ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Number,9848,Variable
-ExclusiveDeviationAlarmType_ShelvingState_LastTransition_TransitionTime,9849,Variable
-ExclusiveDeviationAlarmType_ShelvingState_UnshelveTime,9850,Variable
-ExclusiveDeviationAlarmType_ShelvingState_Unshelve,9872,Method
-ExclusiveDeviationAlarmType_ShelvingState_OneShotShelve,9873,Method
-ExclusiveDeviationAlarmType_ShelvingState_TimedShelve,9874,Method
-ExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments,9875,Variable
-ExclusiveDeviationAlarmType_SuppressedOrShelved,9876,Variable
-ExclusiveDeviationAlarmType_MaxTimeShelved,9877,Variable
-ExclusiveDeviationAlarmType_LimitState,9878,Object
-ExclusiveDeviationAlarmType_LimitState_CurrentState,9879,Variable
-ExclusiveDeviationAlarmType_LimitState_CurrentState_Id,9880,Variable
-ExclusiveDeviationAlarmType_LimitState_CurrentState_Name,9881,Variable
-ExclusiveDeviationAlarmType_LimitState_CurrentState_Number,9882,Variable
-ExclusiveDeviationAlarmType_LimitState_CurrentState_EffectiveDisplayName,9883,Variable
-ExclusiveDeviationAlarmType_LimitState_LastTransition,9884,Variable
-ExclusiveDeviationAlarmType_LimitState_LastTransition_Id,9885,Variable
-ExclusiveDeviationAlarmType_LimitState_LastTransition_Name,9886,Variable
-ExclusiveDeviationAlarmType_LimitState_LastTransition_Number,9887,Variable
-ExclusiveDeviationAlarmType_LimitState_LastTransition_TransitionTime,9888,Variable
-ExclusiveDeviationAlarmType_HighHighLimit,9901,Variable
-ExclusiveDeviationAlarmType_HighLimit,9902,Variable
-ExclusiveDeviationAlarmType_LowLimit,9903,Variable
-ExclusiveDeviationAlarmType_LowLowLimit,9904,Variable
-ExclusiveDeviationAlarmType_SetpointNode,9905,Variable
-NonExclusiveLimitAlarmType,9906,ObjectType
-NonExclusiveLimitAlarmType_EventId,9907,Variable
-NonExclusiveLimitAlarmType_EventType,9908,Variable
-NonExclusiveLimitAlarmType_SourceNode,9909,Variable
-NonExclusiveLimitAlarmType_SourceName,9910,Variable
-NonExclusiveLimitAlarmType_Time,9911,Variable
-NonExclusiveLimitAlarmType_ReceiveTime,9912,Variable
-NonExclusiveLimitAlarmType_LocalTime,9913,Variable
-NonExclusiveLimitAlarmType_Message,9914,Variable
-NonExclusiveLimitAlarmType_Severity,9915,Variable
-NonExclusiveLimitAlarmType_ConditionName,9916,Variable
-NonExclusiveLimitAlarmType_BranchId,9917,Variable
-NonExclusiveLimitAlarmType_Retain,9918,Variable
-NonExclusiveLimitAlarmType_EnabledState,9919,Variable
-NonExclusiveLimitAlarmType_EnabledState_Id,9920,Variable
-NonExclusiveLimitAlarmType_EnabledState_Name,9921,Variable
-NonExclusiveLimitAlarmType_EnabledState_Number,9922,Variable
-NonExclusiveLimitAlarmType_EnabledState_EffectiveDisplayName,9923,Variable
-NonExclusiveLimitAlarmType_EnabledState_TransitionTime,9924,Variable
-NonExclusiveLimitAlarmType_EnabledState_EffectiveTransitionTime,9925,Variable
-NonExclusiveLimitAlarmType_EnabledState_TrueState,9926,Variable
-NonExclusiveLimitAlarmType_EnabledState_FalseState,9927,Variable
-NonExclusiveLimitAlarmType_Quality,9928,Variable
-NonExclusiveLimitAlarmType_Quality_SourceTimestamp,9929,Variable
-NonExclusiveLimitAlarmType_LastSeverity,9930,Variable
-NonExclusiveLimitAlarmType_LastSeverity_SourceTimestamp,9931,Variable
-NonExclusiveLimitAlarmType_Comment,9932,Variable
-NonExclusiveLimitAlarmType_Comment_SourceTimestamp,9933,Variable
-NonExclusiveLimitAlarmType_ClientUserId,9934,Variable
-NonExclusiveLimitAlarmType_Enable,9935,Method
-NonExclusiveLimitAlarmType_Disable,9936,Method
-NonExclusiveLimitAlarmType_AddComment,9937,Method
-NonExclusiveLimitAlarmType_AddComment_InputArguments,9938,Variable
-NonExclusiveLimitAlarmType_ConditionRefresh,9939,Method
-NonExclusiveLimitAlarmType_ConditionRefresh_InputArguments,9940,Variable
-NonExclusiveLimitAlarmType_AckedState,9941,Variable
-NonExclusiveLimitAlarmType_AckedState_Id,9942,Variable
-NonExclusiveLimitAlarmType_AckedState_Name,9943,Variable
-NonExclusiveLimitAlarmType_AckedState_Number,9944,Variable
-NonExclusiveLimitAlarmType_AckedState_EffectiveDisplayName,9945,Variable
-NonExclusiveLimitAlarmType_AckedState_TransitionTime,9946,Variable
-NonExclusiveLimitAlarmType_AckedState_EffectiveTransitionTime,9947,Variable
-NonExclusiveLimitAlarmType_AckedState_TrueState,9948,Variable
-NonExclusiveLimitAlarmType_AckedState_FalseState,9949,Variable
-NonExclusiveLimitAlarmType_ConfirmedState,9950,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_Id,9951,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_Name,9952,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_Number,9953,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_EffectiveDisplayName,9954,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_TransitionTime,9955,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_EffectiveTransitionTime,9956,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_TrueState,9957,Variable
-NonExclusiveLimitAlarmType_ConfirmedState_FalseState,9958,Variable
-NonExclusiveLimitAlarmType_Acknowledge,9959,Method
-NonExclusiveLimitAlarmType_Acknowledge_InputArguments,9960,Variable
-NonExclusiveLimitAlarmType_Confirm,9961,Method
-NonExclusiveLimitAlarmType_Confirm_InputArguments,9962,Variable
-NonExclusiveLimitAlarmType_ActiveState,9963,Variable
-NonExclusiveLimitAlarmType_ActiveState_Id,9964,Variable
-NonExclusiveLimitAlarmType_ActiveState_Name,9965,Variable
-NonExclusiveLimitAlarmType_ActiveState_Number,9966,Variable
-NonExclusiveLimitAlarmType_ActiveState_EffectiveDisplayName,9967,Variable
-NonExclusiveLimitAlarmType_ActiveState_TransitionTime,9968,Variable
-NonExclusiveLimitAlarmType_ActiveState_EffectiveTransitionTime,9969,Variable
-NonExclusiveLimitAlarmType_ActiveState_TrueState,9970,Variable
-NonExclusiveLimitAlarmType_ActiveState_FalseState,9971,Variable
-NonExclusiveLimitAlarmType_SuppressedState,9972,Variable
-NonExclusiveLimitAlarmType_SuppressedState_Id,9973,Variable
-NonExclusiveLimitAlarmType_SuppressedState_Name,9974,Variable
-NonExclusiveLimitAlarmType_SuppressedState_Number,9975,Variable
-NonExclusiveLimitAlarmType_SuppressedState_EffectiveDisplayName,9976,Variable
-NonExclusiveLimitAlarmType_SuppressedState_TransitionTime,9977,Variable
-NonExclusiveLimitAlarmType_SuppressedState_EffectiveTransitionTime,9978,Variable
-NonExclusiveLimitAlarmType_SuppressedState_TrueState,9979,Variable
-NonExclusiveLimitAlarmType_SuppressedState_FalseState,9980,Variable
-NonExclusiveLimitAlarmType_ShelvingState,9981,Object
-NonExclusiveLimitAlarmType_ShelvingState_CurrentState,9982,Variable
-NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Id,9983,Variable
-NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Name,9984,Variable
-NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Number,9985,Variable
-NonExclusiveLimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,9986,Variable
-NonExclusiveLimitAlarmType_ShelvingState_LastTransition,9987,Variable
-NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Id,9988,Variable
-NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Name,9989,Variable
-NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Number,9990,Variable
-NonExclusiveLimitAlarmType_ShelvingState_LastTransition_TransitionTime,9991,Variable
-NonExclusiveLimitAlarmType_ShelvingState_UnshelveTime,9992,Variable
-NonExclusiveLimitAlarmType_ShelvingState_Unshelve,10014,Method
-NonExclusiveLimitAlarmType_ShelvingState_OneShotShelve,10015,Method
-NonExclusiveLimitAlarmType_ShelvingState_TimedShelve,10016,Method
-NonExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments,10017,Variable
-NonExclusiveLimitAlarmType_SuppressedOrShelved,10018,Variable
-NonExclusiveLimitAlarmType_MaxTimeShelved,10019,Variable
-NonExclusiveLimitAlarmType_HighHighState,10020,Variable
-NonExclusiveLimitAlarmType_HighHighState_Id,10021,Variable
-NonExclusiveLimitAlarmType_HighHighState_Name,10022,Variable
-NonExclusiveLimitAlarmType_HighHighState_Number,10023,Variable
-NonExclusiveLimitAlarmType_HighHighState_EffectiveDisplayName,10024,Variable
-NonExclusiveLimitAlarmType_HighHighState_TransitionTime,10025,Variable
-NonExclusiveLimitAlarmType_HighHighState_EffectiveTransitionTime,10026,Variable
-NonExclusiveLimitAlarmType_HighHighState_TrueState,10027,Variable
-NonExclusiveLimitAlarmType_HighHighState_FalseState,10028,Variable
-NonExclusiveLimitAlarmType_HighState,10029,Variable
-NonExclusiveLimitAlarmType_HighState_Id,10030,Variable
-NonExclusiveLimitAlarmType_HighState_Name,10031,Variable
-NonExclusiveLimitAlarmType_HighState_Number,10032,Variable
-NonExclusiveLimitAlarmType_HighState_EffectiveDisplayName,10033,Variable
-NonExclusiveLimitAlarmType_HighState_TransitionTime,10034,Variable
-NonExclusiveLimitAlarmType_HighState_EffectiveTransitionTime,10035,Variable
-NonExclusiveLimitAlarmType_HighState_TrueState,10036,Variable
-NonExclusiveLimitAlarmType_HighState_FalseState,10037,Variable
-NonExclusiveLimitAlarmType_LowState,10038,Variable
-NonExclusiveLimitAlarmType_LowState_Id,10039,Variable
-NonExclusiveLimitAlarmType_LowState_Name,10040,Variable
-NonExclusiveLimitAlarmType_LowState_Number,10041,Variable
-NonExclusiveLimitAlarmType_LowState_EffectiveDisplayName,10042,Variable
-NonExclusiveLimitAlarmType_LowState_TransitionTime,10043,Variable
-NonExclusiveLimitAlarmType_LowState_EffectiveTransitionTime,10044,Variable
-NonExclusiveLimitAlarmType_LowState_TrueState,10045,Variable
-NonExclusiveLimitAlarmType_LowState_FalseState,10046,Variable
-NonExclusiveLimitAlarmType_LowLowState,10047,Variable
-NonExclusiveLimitAlarmType_LowLowState_Id,10048,Variable
-NonExclusiveLimitAlarmType_LowLowState_Name,10049,Variable
-NonExclusiveLimitAlarmType_LowLowState_Number,10050,Variable
-NonExclusiveLimitAlarmType_LowLowState_EffectiveDisplayName,10051,Variable
-NonExclusiveLimitAlarmType_LowLowState_TransitionTime,10052,Variable
-NonExclusiveLimitAlarmType_LowLowState_EffectiveTransitionTime,10053,Variable
-NonExclusiveLimitAlarmType_LowLowState_TrueState,10054,Variable
-NonExclusiveLimitAlarmType_LowLowState_FalseState,10055,Variable
-NonExclusiveLimitAlarmType_HighHighLimit,10056,Variable
-NonExclusiveLimitAlarmType_HighLimit,10057,Variable
-NonExclusiveLimitAlarmType_LowLimit,10058,Variable
-NonExclusiveLimitAlarmType_LowLowLimit,10059,Variable
-NonExclusiveLevelAlarmType,10060,ObjectType
-NonExclusiveLevelAlarmType_EventId,10061,Variable
-NonExclusiveLevelAlarmType_EventType,10062,Variable
-NonExclusiveLevelAlarmType_SourceNode,10063,Variable
-NonExclusiveLevelAlarmType_SourceName,10064,Variable
-NonExclusiveLevelAlarmType_Time,10065,Variable
-NonExclusiveLevelAlarmType_ReceiveTime,10066,Variable
-NonExclusiveLevelAlarmType_LocalTime,10067,Variable
-NonExclusiveLevelAlarmType_Message,10068,Variable
-NonExclusiveLevelAlarmType_Severity,10069,Variable
-NonExclusiveLevelAlarmType_ConditionName,10070,Variable
-NonExclusiveLevelAlarmType_BranchId,10071,Variable
-NonExclusiveLevelAlarmType_Retain,10072,Variable
-NonExclusiveLevelAlarmType_EnabledState,10073,Variable
-NonExclusiveLevelAlarmType_EnabledState_Id,10074,Variable
-NonExclusiveLevelAlarmType_EnabledState_Name,10075,Variable
-NonExclusiveLevelAlarmType_EnabledState_Number,10076,Variable
-NonExclusiveLevelAlarmType_EnabledState_EffectiveDisplayName,10077,Variable
-NonExclusiveLevelAlarmType_EnabledState_TransitionTime,10078,Variable
-NonExclusiveLevelAlarmType_EnabledState_EffectiveTransitionTime,10079,Variable
-NonExclusiveLevelAlarmType_EnabledState_TrueState,10080,Variable
-NonExclusiveLevelAlarmType_EnabledState_FalseState,10081,Variable
-NonExclusiveLevelAlarmType_Quality,10082,Variable
-NonExclusiveLevelAlarmType_Quality_SourceTimestamp,10083,Variable
-NonExclusiveLevelAlarmType_LastSeverity,10084,Variable
-NonExclusiveLevelAlarmType_LastSeverity_SourceTimestamp,10085,Variable
-NonExclusiveLevelAlarmType_Comment,10086,Variable
-NonExclusiveLevelAlarmType_Comment_SourceTimestamp,10087,Variable
-NonExclusiveLevelAlarmType_ClientUserId,10088,Variable
-NonExclusiveLevelAlarmType_Enable,10089,Method
-NonExclusiveLevelAlarmType_Disable,10090,Method
-NonExclusiveLevelAlarmType_AddComment,10091,Method
-NonExclusiveLevelAlarmType_AddComment_InputArguments,10092,Variable
-NonExclusiveLevelAlarmType_ConditionRefresh,10093,Method
-NonExclusiveLevelAlarmType_ConditionRefresh_InputArguments,10094,Variable
-NonExclusiveLevelAlarmType_AckedState,10095,Variable
-NonExclusiveLevelAlarmType_AckedState_Id,10096,Variable
-NonExclusiveLevelAlarmType_AckedState_Name,10097,Variable
-NonExclusiveLevelAlarmType_AckedState_Number,10098,Variable
-NonExclusiveLevelAlarmType_AckedState_EffectiveDisplayName,10099,Variable
-NonExclusiveLevelAlarmType_AckedState_TransitionTime,10100,Variable
-NonExclusiveLevelAlarmType_AckedState_EffectiveTransitionTime,10101,Variable
-NonExclusiveLevelAlarmType_AckedState_TrueState,10102,Variable
-NonExclusiveLevelAlarmType_AckedState_FalseState,10103,Variable
-NonExclusiveLevelAlarmType_ConfirmedState,10104,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_Id,10105,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_Name,10106,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_Number,10107,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_EffectiveDisplayName,10108,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_TransitionTime,10109,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_EffectiveTransitionTime,10110,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_TrueState,10111,Variable
-NonExclusiveLevelAlarmType_ConfirmedState_FalseState,10112,Variable
-NonExclusiveLevelAlarmType_Acknowledge,10113,Method
-NonExclusiveLevelAlarmType_Acknowledge_InputArguments,10114,Variable
-NonExclusiveLevelAlarmType_Confirm,10115,Method
-NonExclusiveLevelAlarmType_Confirm_InputArguments,10116,Variable
-NonExclusiveLevelAlarmType_ActiveState,10117,Variable
-NonExclusiveLevelAlarmType_ActiveState_Id,10118,Variable
-NonExclusiveLevelAlarmType_ActiveState_Name,10119,Variable
-NonExclusiveLevelAlarmType_ActiveState_Number,10120,Variable
-NonExclusiveLevelAlarmType_ActiveState_EffectiveDisplayName,10121,Variable
-NonExclusiveLevelAlarmType_ActiveState_TransitionTime,10122,Variable
-NonExclusiveLevelAlarmType_ActiveState_EffectiveTransitionTime,10123,Variable
-NonExclusiveLevelAlarmType_ActiveState_TrueState,10124,Variable
-NonExclusiveLevelAlarmType_ActiveState_FalseState,10125,Variable
-NonExclusiveLevelAlarmType_SuppressedState,10126,Variable
-NonExclusiveLevelAlarmType_SuppressedState_Id,10127,Variable
-NonExclusiveLevelAlarmType_SuppressedState_Name,10128,Variable
-NonExclusiveLevelAlarmType_SuppressedState_Number,10129,Variable
-NonExclusiveLevelAlarmType_SuppressedState_EffectiveDisplayName,10130,Variable
-NonExclusiveLevelAlarmType_SuppressedState_TransitionTime,10131,Variable
-NonExclusiveLevelAlarmType_SuppressedState_EffectiveTransitionTime,10132,Variable
-NonExclusiveLevelAlarmType_SuppressedState_TrueState,10133,Variable
-NonExclusiveLevelAlarmType_SuppressedState_FalseState,10134,Variable
-NonExclusiveLevelAlarmType_ShelvingState,10135,Object
-NonExclusiveLevelAlarmType_ShelvingState_CurrentState,10136,Variable
-NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Id,10137,Variable
-NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Name,10138,Variable
-NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Number,10139,Variable
-NonExclusiveLevelAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10140,Variable
-NonExclusiveLevelAlarmType_ShelvingState_LastTransition,10141,Variable
-NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Id,10142,Variable
-NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Name,10143,Variable
-NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Number,10144,Variable
-NonExclusiveLevelAlarmType_ShelvingState_LastTransition_TransitionTime,10145,Variable
-NonExclusiveLevelAlarmType_ShelvingState_UnshelveTime,10146,Variable
-NonExclusiveLevelAlarmType_ShelvingState_Unshelve,10168,Method
-NonExclusiveLevelAlarmType_ShelvingState_OneShotShelve,10169,Method
-NonExclusiveLevelAlarmType_ShelvingState_TimedShelve,10170,Method
-NonExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments,10171,Variable
-NonExclusiveLevelAlarmType_SuppressedOrShelved,10172,Variable
-NonExclusiveLevelAlarmType_MaxTimeShelved,10173,Variable
-NonExclusiveLevelAlarmType_HighHighState,10174,Variable
-NonExclusiveLevelAlarmType_HighHighState_Id,10175,Variable
-NonExclusiveLevelAlarmType_HighHighState_Name,10176,Variable
-NonExclusiveLevelAlarmType_HighHighState_Number,10177,Variable
-NonExclusiveLevelAlarmType_HighHighState_EffectiveDisplayName,10178,Variable
-NonExclusiveLevelAlarmType_HighHighState_TransitionTime,10179,Variable
-NonExclusiveLevelAlarmType_HighHighState_EffectiveTransitionTime,10180,Variable
-NonExclusiveLevelAlarmType_HighHighState_TrueState,10181,Variable
-NonExclusiveLevelAlarmType_HighHighState_FalseState,10182,Variable
-NonExclusiveLevelAlarmType_HighState,10183,Variable
-NonExclusiveLevelAlarmType_HighState_Id,10184,Variable
-NonExclusiveLevelAlarmType_HighState_Name,10185,Variable
-NonExclusiveLevelAlarmType_HighState_Number,10186,Variable
-NonExclusiveLevelAlarmType_HighState_EffectiveDisplayName,10187,Variable
-NonExclusiveLevelAlarmType_HighState_TransitionTime,10188,Variable
-NonExclusiveLevelAlarmType_HighState_EffectiveTransitionTime,10189,Variable
-NonExclusiveLevelAlarmType_HighState_TrueState,10190,Variable
-NonExclusiveLevelAlarmType_HighState_FalseState,10191,Variable
-NonExclusiveLevelAlarmType_LowState,10192,Variable
-NonExclusiveLevelAlarmType_LowState_Id,10193,Variable
-NonExclusiveLevelAlarmType_LowState_Name,10194,Variable
-NonExclusiveLevelAlarmType_LowState_Number,10195,Variable
-NonExclusiveLevelAlarmType_LowState_EffectiveDisplayName,10196,Variable
-NonExclusiveLevelAlarmType_LowState_TransitionTime,10197,Variable
-NonExclusiveLevelAlarmType_LowState_EffectiveTransitionTime,10198,Variable
-NonExclusiveLevelAlarmType_LowState_TrueState,10199,Variable
-NonExclusiveLevelAlarmType_LowState_FalseState,10200,Variable
-NonExclusiveLevelAlarmType_LowLowState,10201,Variable
-NonExclusiveLevelAlarmType_LowLowState_Id,10202,Variable
-NonExclusiveLevelAlarmType_LowLowState_Name,10203,Variable
-NonExclusiveLevelAlarmType_LowLowState_Number,10204,Variable
-NonExclusiveLevelAlarmType_LowLowState_EffectiveDisplayName,10205,Variable
-NonExclusiveLevelAlarmType_LowLowState_TransitionTime,10206,Variable
-NonExclusiveLevelAlarmType_LowLowState_EffectiveTransitionTime,10207,Variable
-NonExclusiveLevelAlarmType_LowLowState_TrueState,10208,Variable
-NonExclusiveLevelAlarmType_LowLowState_FalseState,10209,Variable
-NonExclusiveLevelAlarmType_HighHighLimit,10210,Variable
-NonExclusiveLevelAlarmType_HighLimit,10211,Variable
-NonExclusiveLevelAlarmType_LowLimit,10212,Variable
-NonExclusiveLevelAlarmType_LowLowLimit,10213,Variable
-NonExclusiveRateOfChangeAlarmType,10214,ObjectType
-NonExclusiveRateOfChangeAlarmType_EventId,10215,Variable
-NonExclusiveRateOfChangeAlarmType_EventType,10216,Variable
-NonExclusiveRateOfChangeAlarmType_SourceNode,10217,Variable
-NonExclusiveRateOfChangeAlarmType_SourceName,10218,Variable
-NonExclusiveRateOfChangeAlarmType_Time,10219,Variable
-NonExclusiveRateOfChangeAlarmType_ReceiveTime,10220,Variable
-NonExclusiveRateOfChangeAlarmType_LocalTime,10221,Variable
-NonExclusiveRateOfChangeAlarmType_Message,10222,Variable
-NonExclusiveRateOfChangeAlarmType_Severity,10223,Variable
-NonExclusiveRateOfChangeAlarmType_ConditionName,10224,Variable
-NonExclusiveRateOfChangeAlarmType_BranchId,10225,Variable
-NonExclusiveRateOfChangeAlarmType_Retain,10226,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState,10227,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_Id,10228,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_Name,10229,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_Number,10230,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_EffectiveDisplayName,10231,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_TransitionTime,10232,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_EffectiveTransitionTime,10233,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_TrueState,10234,Variable
-NonExclusiveRateOfChangeAlarmType_EnabledState_FalseState,10235,Variable
-NonExclusiveRateOfChangeAlarmType_Quality,10236,Variable
-NonExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp,10237,Variable
-NonExclusiveRateOfChangeAlarmType_LastSeverity,10238,Variable
-NonExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp,10239,Variable
-NonExclusiveRateOfChangeAlarmType_Comment,10240,Variable
-NonExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp,10241,Variable
-NonExclusiveRateOfChangeAlarmType_ClientUserId,10242,Variable
-NonExclusiveRateOfChangeAlarmType_Enable,10243,Method
-NonExclusiveRateOfChangeAlarmType_Disable,10244,Method
-NonExclusiveRateOfChangeAlarmType_AddComment,10245,Method
-NonExclusiveRateOfChangeAlarmType_AddComment_InputArguments,10246,Variable
-NonExclusiveRateOfChangeAlarmType_ConditionRefresh,10247,Method
-NonExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments,10248,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState,10249,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_Id,10250,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_Name,10251,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_Number,10252,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_EffectiveDisplayName,10253,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_TransitionTime,10254,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_EffectiveTransitionTime,10255,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_TrueState,10256,Variable
-NonExclusiveRateOfChangeAlarmType_AckedState_FalseState,10257,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState,10258,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_Id,10259,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_Name,10260,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_Number,10261,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveDisplayName,10262,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_TransitionTime,10263,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveTransitionTime,10264,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_TrueState,10265,Variable
-NonExclusiveRateOfChangeAlarmType_ConfirmedState_FalseState,10266,Variable
-NonExclusiveRateOfChangeAlarmType_Acknowledge,10267,Method
-NonExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments,10268,Variable
-NonExclusiveRateOfChangeAlarmType_Confirm,10269,Method
-NonExclusiveRateOfChangeAlarmType_Confirm_InputArguments,10270,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState,10271,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_Id,10272,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_Name,10273,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_Number,10274,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_EffectiveDisplayName,10275,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_TransitionTime,10276,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_EffectiveTransitionTime,10277,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_TrueState,10278,Variable
-NonExclusiveRateOfChangeAlarmType_ActiveState_FalseState,10279,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState,10280,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_Id,10281,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_Name,10282,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_Number,10283,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveDisplayName,10284,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_TransitionTime,10285,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveTransitionTime,10286,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_TrueState,10287,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedState_FalseState,10288,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState,10289,Object
-NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState,10290,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id,10291,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Name,10292,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Number,10293,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10294,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition,10295,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id,10296,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Name,10297,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Number,10298,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_TransitionTime,10299,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime,10300,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve,10322,Method
-NonExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve,10323,Method
-NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve,10324,Method
-NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments,10325,Variable
-NonExclusiveRateOfChangeAlarmType_SuppressedOrShelved,10326,Variable
-NonExclusiveRateOfChangeAlarmType_MaxTimeShelved,10327,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState,10328,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_Id,10329,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_Name,10330,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_Number,10331,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_EffectiveDisplayName,10332,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_TransitionTime,10333,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_EffectiveTransitionTime,10334,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_TrueState,10335,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighState_FalseState,10336,Variable
-NonExclusiveRateOfChangeAlarmType_HighState,10337,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_Id,10338,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_Name,10339,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_Number,10340,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_EffectiveDisplayName,10341,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_TransitionTime,10342,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_EffectiveTransitionTime,10343,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_TrueState,10344,Variable
-NonExclusiveRateOfChangeAlarmType_HighState_FalseState,10345,Variable
-NonExclusiveRateOfChangeAlarmType_LowState,10346,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_Id,10347,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_Name,10348,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_Number,10349,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_EffectiveDisplayName,10350,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_TransitionTime,10351,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_EffectiveTransitionTime,10352,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_TrueState,10353,Variable
-NonExclusiveRateOfChangeAlarmType_LowState_FalseState,10354,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState,10355,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_Id,10356,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_Name,10357,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_Number,10358,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_EffectiveDisplayName,10359,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_TransitionTime,10360,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_EffectiveTransitionTime,10361,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_TrueState,10362,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowState_FalseState,10363,Variable
-NonExclusiveRateOfChangeAlarmType_HighHighLimit,10364,Variable
-NonExclusiveRateOfChangeAlarmType_HighLimit,10365,Variable
-NonExclusiveRateOfChangeAlarmType_LowLimit,10366,Variable
-NonExclusiveRateOfChangeAlarmType_LowLowLimit,10367,Variable
-NonExclusiveDeviationAlarmType,10368,ObjectType
-NonExclusiveDeviationAlarmType_EventId,10369,Variable
-NonExclusiveDeviationAlarmType_EventType,10370,Variable
-NonExclusiveDeviationAlarmType_SourceNode,10371,Variable
-NonExclusiveDeviationAlarmType_SourceName,10372,Variable
-NonExclusiveDeviationAlarmType_Time,10373,Variable
-NonExclusiveDeviationAlarmType_ReceiveTime,10374,Variable
-NonExclusiveDeviationAlarmType_LocalTime,10375,Variable
-NonExclusiveDeviationAlarmType_Message,10376,Variable
-NonExclusiveDeviationAlarmType_Severity,10377,Variable
-NonExclusiveDeviationAlarmType_ConditionName,10378,Variable
-NonExclusiveDeviationAlarmType_BranchId,10379,Variable
-NonExclusiveDeviationAlarmType_Retain,10380,Variable
-NonExclusiveDeviationAlarmType_EnabledState,10381,Variable
-NonExclusiveDeviationAlarmType_EnabledState_Id,10382,Variable
-NonExclusiveDeviationAlarmType_EnabledState_Name,10383,Variable
-NonExclusiveDeviationAlarmType_EnabledState_Number,10384,Variable
-NonExclusiveDeviationAlarmType_EnabledState_EffectiveDisplayName,10385,Variable
-NonExclusiveDeviationAlarmType_EnabledState_TransitionTime,10386,Variable
-NonExclusiveDeviationAlarmType_EnabledState_EffectiveTransitionTime,10387,Variable
-NonExclusiveDeviationAlarmType_EnabledState_TrueState,10388,Variable
-NonExclusiveDeviationAlarmType_EnabledState_FalseState,10389,Variable
-NonExclusiveDeviationAlarmType_Quality,10390,Variable
-NonExclusiveDeviationAlarmType_Quality_SourceTimestamp,10391,Variable
-NonExclusiveDeviationAlarmType_LastSeverity,10392,Variable
-NonExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp,10393,Variable
-NonExclusiveDeviationAlarmType_Comment,10394,Variable
-NonExclusiveDeviationAlarmType_Comment_SourceTimestamp,10395,Variable
-NonExclusiveDeviationAlarmType_ClientUserId,10396,Variable
-NonExclusiveDeviationAlarmType_Enable,10397,Method
-NonExclusiveDeviationAlarmType_Disable,10398,Method
-NonExclusiveDeviationAlarmType_AddComment,10399,Method
-NonExclusiveDeviationAlarmType_AddComment_InputArguments,10400,Variable
-NonExclusiveDeviationAlarmType_ConditionRefresh,10401,Method
-NonExclusiveDeviationAlarmType_ConditionRefresh_InputArguments,10402,Variable
-NonExclusiveDeviationAlarmType_AckedState,10403,Variable
-NonExclusiveDeviationAlarmType_AckedState_Id,10404,Variable
-NonExclusiveDeviationAlarmType_AckedState_Name,10405,Variable
-NonExclusiveDeviationAlarmType_AckedState_Number,10406,Variable
-NonExclusiveDeviationAlarmType_AckedState_EffectiveDisplayName,10407,Variable
-NonExclusiveDeviationAlarmType_AckedState_TransitionTime,10408,Variable
-NonExclusiveDeviationAlarmType_AckedState_EffectiveTransitionTime,10409,Variable
-NonExclusiveDeviationAlarmType_AckedState_TrueState,10410,Variable
-NonExclusiveDeviationAlarmType_AckedState_FalseState,10411,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState,10412,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_Id,10413,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_Name,10414,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_Number,10415,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_EffectiveDisplayName,10416,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_TransitionTime,10417,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_EffectiveTransitionTime,10418,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_TrueState,10419,Variable
-NonExclusiveDeviationAlarmType_ConfirmedState_FalseState,10420,Variable
-NonExclusiveDeviationAlarmType_Acknowledge,10421,Method
-NonExclusiveDeviationAlarmType_Acknowledge_InputArguments,10422,Variable
-NonExclusiveDeviationAlarmType_Confirm,10423,Method
-NonExclusiveDeviationAlarmType_Confirm_InputArguments,10424,Variable
-NonExclusiveDeviationAlarmType_ActiveState,10425,Variable
-NonExclusiveDeviationAlarmType_ActiveState_Id,10426,Variable
-NonExclusiveDeviationAlarmType_ActiveState_Name,10427,Variable
-NonExclusiveDeviationAlarmType_ActiveState_Number,10428,Variable
-NonExclusiveDeviationAlarmType_ActiveState_EffectiveDisplayName,10429,Variable
-NonExclusiveDeviationAlarmType_ActiveState_TransitionTime,10430,Variable
-NonExclusiveDeviationAlarmType_ActiveState_EffectiveTransitionTime,10431,Variable
-NonExclusiveDeviationAlarmType_ActiveState_TrueState,10432,Variable
-NonExclusiveDeviationAlarmType_ActiveState_FalseState,10433,Variable
-NonExclusiveDeviationAlarmType_SuppressedState,10434,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_Id,10435,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_Name,10436,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_Number,10437,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_EffectiveDisplayName,10438,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_TransitionTime,10439,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_EffectiveTransitionTime,10440,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_TrueState,10441,Variable
-NonExclusiveDeviationAlarmType_SuppressedState_FalseState,10442,Variable
-NonExclusiveDeviationAlarmType_ShelvingState,10443,Object
-NonExclusiveDeviationAlarmType_ShelvingState_CurrentState,10444,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id,10445,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Name,10446,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Number,10447,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10448,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_LastTransition,10449,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id,10450,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Name,10451,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Number,10452,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_TransitionTime,10453,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_UnshelveTime,10454,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_Unshelve,10476,Method
-NonExclusiveDeviationAlarmType_ShelvingState_OneShotShelve,10477,Method
-NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve,10478,Method
-NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments,10479,Variable
-NonExclusiveDeviationAlarmType_SuppressedOrShelved,10480,Variable
-NonExclusiveDeviationAlarmType_MaxTimeShelved,10481,Variable
-NonExclusiveDeviationAlarmType_HighHighState,10482,Variable
-NonExclusiveDeviationAlarmType_HighHighState_Id,10483,Variable
-NonExclusiveDeviationAlarmType_HighHighState_Name,10484,Variable
-NonExclusiveDeviationAlarmType_HighHighState_Number,10485,Variable
-NonExclusiveDeviationAlarmType_HighHighState_EffectiveDisplayName,10486,Variable
-NonExclusiveDeviationAlarmType_HighHighState_TransitionTime,10487,Variable
-NonExclusiveDeviationAlarmType_HighHighState_EffectiveTransitionTime,10488,Variable
-NonExclusiveDeviationAlarmType_HighHighState_TrueState,10489,Variable
-NonExclusiveDeviationAlarmType_HighHighState_FalseState,10490,Variable
-NonExclusiveDeviationAlarmType_HighState,10491,Variable
-NonExclusiveDeviationAlarmType_HighState_Id,10492,Variable
-NonExclusiveDeviationAlarmType_HighState_Name,10493,Variable
-NonExclusiveDeviationAlarmType_HighState_Number,10494,Variable
-NonExclusiveDeviationAlarmType_HighState_EffectiveDisplayName,10495,Variable
-NonExclusiveDeviationAlarmType_HighState_TransitionTime,10496,Variable
-NonExclusiveDeviationAlarmType_HighState_EffectiveTransitionTime,10497,Variable
-NonExclusiveDeviationAlarmType_HighState_TrueState,10498,Variable
-NonExclusiveDeviationAlarmType_HighState_FalseState,10499,Variable
-NonExclusiveDeviationAlarmType_LowState,10500,Variable
-NonExclusiveDeviationAlarmType_LowState_Id,10501,Variable
-NonExclusiveDeviationAlarmType_LowState_Name,10502,Variable
-NonExclusiveDeviationAlarmType_LowState_Number,10503,Variable
-NonExclusiveDeviationAlarmType_LowState_EffectiveDisplayName,10504,Variable
-NonExclusiveDeviationAlarmType_LowState_TransitionTime,10505,Variable
-NonExclusiveDeviationAlarmType_LowState_EffectiveTransitionTime,10506,Variable
-NonExclusiveDeviationAlarmType_LowState_TrueState,10507,Variable
-NonExclusiveDeviationAlarmType_LowState_FalseState,10508,Variable
-NonExclusiveDeviationAlarmType_LowLowState,10509,Variable
-NonExclusiveDeviationAlarmType_LowLowState_Id,10510,Variable
-NonExclusiveDeviationAlarmType_LowLowState_Name,10511,Variable
-NonExclusiveDeviationAlarmType_LowLowState_Number,10512,Variable
-NonExclusiveDeviationAlarmType_LowLowState_EffectiveDisplayName,10513,Variable
-NonExclusiveDeviationAlarmType_LowLowState_TransitionTime,10514,Variable
-NonExclusiveDeviationAlarmType_LowLowState_EffectiveTransitionTime,10515,Variable
-NonExclusiveDeviationAlarmType_LowLowState_TrueState,10516,Variable
-NonExclusiveDeviationAlarmType_LowLowState_FalseState,10517,Variable
-NonExclusiveDeviationAlarmType_HighHighLimit,10518,Variable
-NonExclusiveDeviationAlarmType_HighLimit,10519,Variable
-NonExclusiveDeviationAlarmType_LowLimit,10520,Variable
-NonExclusiveDeviationAlarmType_LowLowLimit,10521,Variable
-NonExclusiveDeviationAlarmType_SetpointNode,10522,Variable
-DiscreteAlarmType,10523,ObjectType
-DiscreteAlarmType_EventId,10524,Variable
-DiscreteAlarmType_EventType,10525,Variable
-DiscreteAlarmType_SourceNode,10526,Variable
-DiscreteAlarmType_SourceName,10527,Variable
-DiscreteAlarmType_Time,10528,Variable
-DiscreteAlarmType_ReceiveTime,10529,Variable
-DiscreteAlarmType_LocalTime,10530,Variable
-DiscreteAlarmType_Message,10531,Variable
-DiscreteAlarmType_Severity,10532,Variable
-DiscreteAlarmType_ConditionName,10533,Variable
-DiscreteAlarmType_BranchId,10534,Variable
-DiscreteAlarmType_Retain,10535,Variable
-DiscreteAlarmType_EnabledState,10536,Variable
-DiscreteAlarmType_EnabledState_Id,10537,Variable
-DiscreteAlarmType_EnabledState_Name,10538,Variable
-DiscreteAlarmType_EnabledState_Number,10539,Variable
-DiscreteAlarmType_EnabledState_EffectiveDisplayName,10540,Variable
-DiscreteAlarmType_EnabledState_TransitionTime,10541,Variable
-DiscreteAlarmType_EnabledState_EffectiveTransitionTime,10542,Variable
-DiscreteAlarmType_EnabledState_TrueState,10543,Variable
-DiscreteAlarmType_EnabledState_FalseState,10544,Variable
-DiscreteAlarmType_Quality,10545,Variable
-DiscreteAlarmType_Quality_SourceTimestamp,10546,Variable
-DiscreteAlarmType_LastSeverity,10547,Variable
-DiscreteAlarmType_LastSeverity_SourceTimestamp,10548,Variable
-DiscreteAlarmType_Comment,10549,Variable
-DiscreteAlarmType_Comment_SourceTimestamp,10550,Variable
-DiscreteAlarmType_ClientUserId,10551,Variable
-DiscreteAlarmType_Enable,10552,Method
-DiscreteAlarmType_Disable,10553,Method
-DiscreteAlarmType_AddComment,10554,Method
-DiscreteAlarmType_AddComment_InputArguments,10555,Variable
-DiscreteAlarmType_ConditionRefresh,10556,Method
-DiscreteAlarmType_ConditionRefresh_InputArguments,10557,Variable
-DiscreteAlarmType_AckedState,10558,Variable
-DiscreteAlarmType_AckedState_Id,10559,Variable
-DiscreteAlarmType_AckedState_Name,10560,Variable
-DiscreteAlarmType_AckedState_Number,10561,Variable
-DiscreteAlarmType_AckedState_EffectiveDisplayName,10562,Variable
-DiscreteAlarmType_AckedState_TransitionTime,10563,Variable
-DiscreteAlarmType_AckedState_EffectiveTransitionTime,10564,Variable
-DiscreteAlarmType_AckedState_TrueState,10565,Variable
-DiscreteAlarmType_AckedState_FalseState,10566,Variable
-DiscreteAlarmType_ConfirmedState,10567,Variable
-DiscreteAlarmType_ConfirmedState_Id,10568,Variable
-DiscreteAlarmType_ConfirmedState_Name,10569,Variable
-DiscreteAlarmType_ConfirmedState_Number,10570,Variable
-DiscreteAlarmType_ConfirmedState_EffectiveDisplayName,10571,Variable
-DiscreteAlarmType_ConfirmedState_TransitionTime,10572,Variable
-DiscreteAlarmType_ConfirmedState_EffectiveTransitionTime,10573,Variable
-DiscreteAlarmType_ConfirmedState_TrueState,10574,Variable
-DiscreteAlarmType_ConfirmedState_FalseState,10575,Variable
-DiscreteAlarmType_Acknowledge,10576,Method
-DiscreteAlarmType_Acknowledge_InputArguments,10577,Variable
-DiscreteAlarmType_Confirm,10578,Method
-DiscreteAlarmType_Confirm_InputArguments,10579,Variable
-DiscreteAlarmType_ActiveState,10580,Variable
-DiscreteAlarmType_ActiveState_Id,10581,Variable
-DiscreteAlarmType_ActiveState_Name,10582,Variable
-DiscreteAlarmType_ActiveState_Number,10583,Variable
-DiscreteAlarmType_ActiveState_EffectiveDisplayName,10584,Variable
-DiscreteAlarmType_ActiveState_TransitionTime,10585,Variable
-DiscreteAlarmType_ActiveState_EffectiveTransitionTime,10586,Variable
-DiscreteAlarmType_ActiveState_TrueState,10587,Variable
-DiscreteAlarmType_ActiveState_FalseState,10588,Variable
-DiscreteAlarmType_SuppressedState,10589,Variable
-DiscreteAlarmType_SuppressedState_Id,10590,Variable
-DiscreteAlarmType_SuppressedState_Name,10591,Variable
-DiscreteAlarmType_SuppressedState_Number,10592,Variable
-DiscreteAlarmType_SuppressedState_EffectiveDisplayName,10593,Variable
-DiscreteAlarmType_SuppressedState_TransitionTime,10594,Variable
-DiscreteAlarmType_SuppressedState_EffectiveTransitionTime,10595,Variable
-DiscreteAlarmType_SuppressedState_TrueState,10596,Variable
-DiscreteAlarmType_SuppressedState_FalseState,10597,Variable
-DiscreteAlarmType_ShelvingState,10598,Object
-DiscreteAlarmType_ShelvingState_CurrentState,10599,Variable
-DiscreteAlarmType_ShelvingState_CurrentState_Id,10600,Variable
-DiscreteAlarmType_ShelvingState_CurrentState_Name,10601,Variable
-DiscreteAlarmType_ShelvingState_CurrentState_Number,10602,Variable
-DiscreteAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10603,Variable
-DiscreteAlarmType_ShelvingState_LastTransition,10604,Variable
-DiscreteAlarmType_ShelvingState_LastTransition_Id,10605,Variable
-DiscreteAlarmType_ShelvingState_LastTransition_Name,10606,Variable
-DiscreteAlarmType_ShelvingState_LastTransition_Number,10607,Variable
-DiscreteAlarmType_ShelvingState_LastTransition_TransitionTime,10608,Variable
-DiscreteAlarmType_ShelvingState_UnshelveTime,10609,Variable
-DiscreteAlarmType_ShelvingState_Unshelve,10631,Method
-DiscreteAlarmType_ShelvingState_OneShotShelve,10632,Method
-DiscreteAlarmType_ShelvingState_TimedShelve,10633,Method
-DiscreteAlarmType_ShelvingState_TimedShelve_InputArguments,10634,Variable
-DiscreteAlarmType_SuppressedOrShelved,10635,Variable
-DiscreteAlarmType_MaxTimeShelved,10636,Variable
-OffNormalAlarmType,10637,ObjectType
-OffNormalAlarmType_EventId,10638,Variable
-OffNormalAlarmType_EventType,10639,Variable
-OffNormalAlarmType_SourceNode,10640,Variable
-OffNormalAlarmType_SourceName,10641,Variable
-OffNormalAlarmType_Time,10642,Variable
-OffNormalAlarmType_ReceiveTime,10643,Variable
-OffNormalAlarmType_LocalTime,10644,Variable
-OffNormalAlarmType_Message,10645,Variable
-OffNormalAlarmType_Severity,10646,Variable
-OffNormalAlarmType_ConditionName,10647,Variable
-OffNormalAlarmType_BranchId,10648,Variable
-OffNormalAlarmType_Retain,10649,Variable
-OffNormalAlarmType_EnabledState,10650,Variable
-OffNormalAlarmType_EnabledState_Id,10651,Variable
-OffNormalAlarmType_EnabledState_Name,10652,Variable
-OffNormalAlarmType_EnabledState_Number,10653,Variable
-OffNormalAlarmType_EnabledState_EffectiveDisplayName,10654,Variable
-OffNormalAlarmType_EnabledState_TransitionTime,10655,Variable
-OffNormalAlarmType_EnabledState_EffectiveTransitionTime,10656,Variable
-OffNormalAlarmType_EnabledState_TrueState,10657,Variable
-OffNormalAlarmType_EnabledState_FalseState,10658,Variable
-OffNormalAlarmType_Quality,10659,Variable
-OffNormalAlarmType_Quality_SourceTimestamp,10660,Variable
-OffNormalAlarmType_LastSeverity,10661,Variable
-OffNormalAlarmType_LastSeverity_SourceTimestamp,10662,Variable
-OffNormalAlarmType_Comment,10663,Variable
-OffNormalAlarmType_Comment_SourceTimestamp,10664,Variable
-OffNormalAlarmType_ClientUserId,10665,Variable
-OffNormalAlarmType_Enable,10666,Method
-OffNormalAlarmType_Disable,10667,Method
-OffNormalAlarmType_AddComment,10668,Method
-OffNormalAlarmType_AddComment_InputArguments,10669,Variable
-OffNormalAlarmType_ConditionRefresh,10670,Method
-OffNormalAlarmType_ConditionRefresh_InputArguments,10671,Variable
-OffNormalAlarmType_AckedState,10672,Variable
-OffNormalAlarmType_AckedState_Id,10673,Variable
-OffNormalAlarmType_AckedState_Name,10674,Variable
-OffNormalAlarmType_AckedState_Number,10675,Variable
-OffNormalAlarmType_AckedState_EffectiveDisplayName,10676,Variable
-OffNormalAlarmType_AckedState_TransitionTime,10677,Variable
-OffNormalAlarmType_AckedState_EffectiveTransitionTime,10678,Variable
-OffNormalAlarmType_AckedState_TrueState,10679,Variable
-OffNormalAlarmType_AckedState_FalseState,10680,Variable
-OffNormalAlarmType_ConfirmedState,10681,Variable
-OffNormalAlarmType_ConfirmedState_Id,10682,Variable
-OffNormalAlarmType_ConfirmedState_Name,10683,Variable
-OffNormalAlarmType_ConfirmedState_Number,10684,Variable
-OffNormalAlarmType_ConfirmedState_EffectiveDisplayName,10685,Variable
-OffNormalAlarmType_ConfirmedState_TransitionTime,10686,Variable
-OffNormalAlarmType_ConfirmedState_EffectiveTransitionTime,10687,Variable
-OffNormalAlarmType_ConfirmedState_TrueState,10688,Variable
-OffNormalAlarmType_ConfirmedState_FalseState,10689,Variable
-OffNormalAlarmType_Acknowledge,10690,Method
-OffNormalAlarmType_Acknowledge_InputArguments,10691,Variable
-OffNormalAlarmType_Confirm,10692,Method
-OffNormalAlarmType_Confirm_InputArguments,10693,Variable
-OffNormalAlarmType_ActiveState,10694,Variable
-OffNormalAlarmType_ActiveState_Id,10695,Variable
-OffNormalAlarmType_ActiveState_Name,10696,Variable
-OffNormalAlarmType_ActiveState_Number,10697,Variable
-OffNormalAlarmType_ActiveState_EffectiveDisplayName,10698,Variable
-OffNormalAlarmType_ActiveState_TransitionTime,10699,Variable
-OffNormalAlarmType_ActiveState_EffectiveTransitionTime,10700,Variable
-OffNormalAlarmType_ActiveState_TrueState,10701,Variable
-OffNormalAlarmType_ActiveState_FalseState,10702,Variable
-OffNormalAlarmType_SuppressedState,10703,Variable
-OffNormalAlarmType_SuppressedState_Id,10704,Variable
-OffNormalAlarmType_SuppressedState_Name,10705,Variable
-OffNormalAlarmType_SuppressedState_Number,10706,Variable
-OffNormalAlarmType_SuppressedState_EffectiveDisplayName,10707,Variable
-OffNormalAlarmType_SuppressedState_TransitionTime,10708,Variable
-OffNormalAlarmType_SuppressedState_EffectiveTransitionTime,10709,Variable
-OffNormalAlarmType_SuppressedState_TrueState,10710,Variable
-OffNormalAlarmType_SuppressedState_FalseState,10711,Variable
-OffNormalAlarmType_ShelvingState,10712,Object
-OffNormalAlarmType_ShelvingState_CurrentState,10713,Variable
-OffNormalAlarmType_ShelvingState_CurrentState_Id,10714,Variable
-OffNormalAlarmType_ShelvingState_CurrentState_Name,10715,Variable
-OffNormalAlarmType_ShelvingState_CurrentState_Number,10716,Variable
-OffNormalAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10717,Variable
-OffNormalAlarmType_ShelvingState_LastTransition,10718,Variable
-OffNormalAlarmType_ShelvingState_LastTransition_Id,10719,Variable
-OffNormalAlarmType_ShelvingState_LastTransition_Name,10720,Variable
-OffNormalAlarmType_ShelvingState_LastTransition_Number,10721,Variable
-OffNormalAlarmType_ShelvingState_LastTransition_TransitionTime,10722,Variable
-OffNormalAlarmType_ShelvingState_UnshelveTime,10723,Variable
-OffNormalAlarmType_ShelvingState_Unshelve,10745,Method
-OffNormalAlarmType_ShelvingState_OneShotShelve,10746,Method
-OffNormalAlarmType_ShelvingState_TimedShelve,10747,Method
-OffNormalAlarmType_ShelvingState_TimedShelve_InputArguments,10748,Variable
-OffNormalAlarmType_SuppressedOrShelved,10749,Variable
-OffNormalAlarmType_MaxTimeShelved,10750,Variable
-TripAlarmType,10751,ObjectType
-TripAlarmType_EventId,10752,Variable
-TripAlarmType_EventType,10753,Variable
-TripAlarmType_SourceNode,10754,Variable
-TripAlarmType_SourceName,10755,Variable
-TripAlarmType_Time,10756,Variable
-TripAlarmType_ReceiveTime,10757,Variable
-TripAlarmType_LocalTime,10758,Variable
-TripAlarmType_Message,10759,Variable
-TripAlarmType_Severity,10760,Variable
-TripAlarmType_ConditionName,10761,Variable
-TripAlarmType_BranchId,10762,Variable
-TripAlarmType_Retain,10763,Variable
-TripAlarmType_EnabledState,10764,Variable
-TripAlarmType_EnabledState_Id,10765,Variable
-TripAlarmType_EnabledState_Name,10766,Variable
-TripAlarmType_EnabledState_Number,10767,Variable
-TripAlarmType_EnabledState_EffectiveDisplayName,10768,Variable
-TripAlarmType_EnabledState_TransitionTime,10769,Variable
-TripAlarmType_EnabledState_EffectiveTransitionTime,10770,Variable
-TripAlarmType_EnabledState_TrueState,10771,Variable
-TripAlarmType_EnabledState_FalseState,10772,Variable
-TripAlarmType_Quality,10773,Variable
-TripAlarmType_Quality_SourceTimestamp,10774,Variable
-TripAlarmType_LastSeverity,10775,Variable
-TripAlarmType_LastSeverity_SourceTimestamp,10776,Variable
-TripAlarmType_Comment,10777,Variable
-TripAlarmType_Comment_SourceTimestamp,10778,Variable
-TripAlarmType_ClientUserId,10779,Variable
-TripAlarmType_Enable,10780,Method
-TripAlarmType_Disable,10781,Method
-TripAlarmType_AddComment,10782,Method
-TripAlarmType_AddComment_InputArguments,10783,Variable
-TripAlarmType_ConditionRefresh,10784,Method
-TripAlarmType_ConditionRefresh_InputArguments,10785,Variable
-TripAlarmType_AckedState,10786,Variable
-TripAlarmType_AckedState_Id,10787,Variable
-TripAlarmType_AckedState_Name,10788,Variable
-TripAlarmType_AckedState_Number,10789,Variable
-TripAlarmType_AckedState_EffectiveDisplayName,10790,Variable
-TripAlarmType_AckedState_TransitionTime,10791,Variable
-TripAlarmType_AckedState_EffectiveTransitionTime,10792,Variable
-TripAlarmType_AckedState_TrueState,10793,Variable
-TripAlarmType_AckedState_FalseState,10794,Variable
-TripAlarmType_ConfirmedState,10795,Variable
-TripAlarmType_ConfirmedState_Id,10796,Variable
-TripAlarmType_ConfirmedState_Name,10797,Variable
-TripAlarmType_ConfirmedState_Number,10798,Variable
-TripAlarmType_ConfirmedState_EffectiveDisplayName,10799,Variable
-TripAlarmType_ConfirmedState_TransitionTime,10800,Variable
-TripAlarmType_ConfirmedState_EffectiveTransitionTime,10801,Variable
-TripAlarmType_ConfirmedState_TrueState,10802,Variable
-TripAlarmType_ConfirmedState_FalseState,10803,Variable
-TripAlarmType_Acknowledge,10804,Method
-TripAlarmType_Acknowledge_InputArguments,10805,Variable
-TripAlarmType_Confirm,10806,Method
-TripAlarmType_Confirm_InputArguments,10807,Variable
-TripAlarmType_ActiveState,10808,Variable
-TripAlarmType_ActiveState_Id,10809,Variable
-TripAlarmType_ActiveState_Name,10810,Variable
-TripAlarmType_ActiveState_Number,10811,Variable
-TripAlarmType_ActiveState_EffectiveDisplayName,10812,Variable
-TripAlarmType_ActiveState_TransitionTime,10813,Variable
-TripAlarmType_ActiveState_EffectiveTransitionTime,10814,Variable
-TripAlarmType_ActiveState_TrueState,10815,Variable
-TripAlarmType_ActiveState_FalseState,10816,Variable
-TripAlarmType_SuppressedState,10817,Variable
-TripAlarmType_SuppressedState_Id,10818,Variable
-TripAlarmType_SuppressedState_Name,10819,Variable
-TripAlarmType_SuppressedState_Number,10820,Variable
-TripAlarmType_SuppressedState_EffectiveDisplayName,10821,Variable
-TripAlarmType_SuppressedState_TransitionTime,10822,Variable
-TripAlarmType_SuppressedState_EffectiveTransitionTime,10823,Variable
-TripAlarmType_SuppressedState_TrueState,10824,Variable
-TripAlarmType_SuppressedState_FalseState,10825,Variable
-TripAlarmType_ShelvingState,10826,Object
-TripAlarmType_ShelvingState_CurrentState,10827,Variable
-TripAlarmType_ShelvingState_CurrentState_Id,10828,Variable
-TripAlarmType_ShelvingState_CurrentState_Name,10829,Variable
-TripAlarmType_ShelvingState_CurrentState_Number,10830,Variable
-TripAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,10831,Variable
-TripAlarmType_ShelvingState_LastTransition,10832,Variable
-TripAlarmType_ShelvingState_LastTransition_Id,10833,Variable
-TripAlarmType_ShelvingState_LastTransition_Name,10834,Variable
-TripAlarmType_ShelvingState_LastTransition_Number,10835,Variable
-TripAlarmType_ShelvingState_LastTransition_TransitionTime,10836,Variable
-TripAlarmType_ShelvingState_UnshelveTime,10837,Variable
-TripAlarmType_ShelvingState_Unshelve,10859,Method
-TripAlarmType_ShelvingState_OneShotShelve,10860,Method
-TripAlarmType_ShelvingState_TimedShelve,10861,Method
-TripAlarmType_ShelvingState_TimedShelve_InputArguments,10862,Variable
-TripAlarmType_SuppressedOrShelved,10863,Variable
-TripAlarmType_MaxTimeShelved,10864,Variable
-AuditConditionShelvingEventType,11093,ObjectType
-AuditConditionShelvingEventType_EventId,11094,Variable
-AuditConditionShelvingEventType_EventType,11095,Variable
-AuditConditionShelvingEventType_SourceNode,11096,Variable
-AuditConditionShelvingEventType_SourceName,11097,Variable
-AuditConditionShelvingEventType_Time,11098,Variable
-AuditConditionShelvingEventType_ReceiveTime,11099,Variable
-AuditConditionShelvingEventType_LocalTime,11100,Variable
-AuditConditionShelvingEventType_Message,11101,Variable
-AuditConditionShelvingEventType_Severity,11102,Variable
-AuditConditionShelvingEventType_ActionTimeStamp,11103,Variable
-AuditConditionShelvingEventType_Status,11104,Variable
-AuditConditionShelvingEventType_ServerId,11105,Variable
-AuditConditionShelvingEventType_ClientAuditEntryId,11106,Variable
-AuditConditionShelvingEventType_ClientUserId,11107,Variable
-AuditConditionShelvingEventType_MethodId,11108,Variable
-AuditConditionShelvingEventType_InputArguments,11109,Variable
-TwoStateVariableType_TrueState,11110,Variable
-TwoStateVariableType_FalseState,11111,Variable
-ConditionType_ConditionClassId,11112,Variable
-ConditionType_ConditionClassName,11113,Variable
-DialogConditionType_ConditionClassId,11114,Variable
-DialogConditionType_ConditionClassName,11115,Variable
-AcknowledgeableConditionType_ConditionClassId,11116,Variable
-AcknowledgeableConditionType_ConditionClassName,11117,Variable
-AlarmConditionType_ConditionClassId,11118,Variable
-AlarmConditionType_ConditionClassName,11119,Variable
-AlarmConditionType_InputNode,11120,Variable
-LimitAlarmType_ConditionClassId,11121,Variable
-LimitAlarmType_ConditionClassName,11122,Variable
-LimitAlarmType_InputNode,11123,Variable
-LimitAlarmType_HighHighLimit,11124,Variable
-LimitAlarmType_HighLimit,11125,Variable
-LimitAlarmType_LowLimit,11126,Variable
-LimitAlarmType_LowLowLimit,11127,Variable
-ExclusiveLimitAlarmType_ConditionClassId,11128,Variable
-ExclusiveLimitAlarmType_ConditionClassName,11129,Variable
-ExclusiveLimitAlarmType_InputNode,11130,Variable
-ExclusiveLevelAlarmType_ConditionClassId,11131,Variable
-ExclusiveLevelAlarmType_ConditionClassName,11132,Variable
-ExclusiveLevelAlarmType_InputNode,11133,Variable
-ExclusiveRateOfChangeAlarmType_ConditionClassId,11134,Variable
-ExclusiveRateOfChangeAlarmType_ConditionClassName,11135,Variable
-ExclusiveRateOfChangeAlarmType_InputNode,11136,Variable
-ExclusiveDeviationAlarmType_ConditionClassId,11137,Variable
-ExclusiveDeviationAlarmType_ConditionClassName,11138,Variable
-ExclusiveDeviationAlarmType_InputNode,11139,Variable
-NonExclusiveLimitAlarmType_ConditionClassId,11140,Variable
-NonExclusiveLimitAlarmType_ConditionClassName,11141,Variable
-NonExclusiveLimitAlarmType_InputNode,11142,Variable
-NonExclusiveLevelAlarmType_ConditionClassId,11143,Variable
-NonExclusiveLevelAlarmType_ConditionClassName,11144,Variable
-NonExclusiveLevelAlarmType_InputNode,11145,Variable
-NonExclusiveRateOfChangeAlarmType_ConditionClassId,11146,Variable
-NonExclusiveRateOfChangeAlarmType_ConditionClassName,11147,Variable
-NonExclusiveRateOfChangeAlarmType_InputNode,11148,Variable
-NonExclusiveDeviationAlarmType_ConditionClassId,11149,Variable
-NonExclusiveDeviationAlarmType_ConditionClassName,11150,Variable
-NonExclusiveDeviationAlarmType_InputNode,11151,Variable
-DiscreteAlarmType_ConditionClassId,11152,Variable
-DiscreteAlarmType_ConditionClassName,11153,Variable
-DiscreteAlarmType_InputNode,11154,Variable
-OffNormalAlarmType_ConditionClassId,11155,Variable
-OffNormalAlarmType_ConditionClassName,11156,Variable
-OffNormalAlarmType_InputNode,11157,Variable
-OffNormalAlarmType_NormalState,11158,Variable
-TripAlarmType_ConditionClassId,11159,Variable
-TripAlarmType_ConditionClassName,11160,Variable
-TripAlarmType_InputNode,11161,Variable
-TripAlarmType_NormalState,11162,Variable
-BaseConditionClassType,11163,ObjectType
-ProcessConditionClassType,11164,ObjectType
-MaintenanceConditionClassType,11165,ObjectType
-SystemConditionClassType,11166,ObjectType
-HistoricalDataConfigurationType_AggregateConfiguration_TreatUncertainAsBad,11168,Variable
-HistoricalDataConfigurationType_AggregateConfiguration_PercentDataBad,11169,Variable
-HistoricalDataConfigurationType_AggregateConfiguration_PercentDataGood,11170,Variable
-HistoricalDataConfigurationType_AggregateConfiguration_UseSlopedExtrapolation,11171,Variable
-HistoryServerCapabilitiesType_AggregateFunctions,11172,Object
-AggregateConfigurationType,11187,ObjectType
-AggregateConfigurationType_TreatUncertainAsBad,11188,Variable
-AggregateConfigurationType_PercentDataBad,11189,Variable
-AggregateConfigurationType_PercentDataGood,11190,Variable
-AggregateConfigurationType_UseSlopedExtrapolation,11191,Variable
-HistoryServerCapabilities,11192,Object
-HistoryServerCapabilities_AccessHistoryDataCapability,11193,Variable
-HistoryServerCapabilities_InsertDataCapability,11196,Variable
-HistoryServerCapabilities_ReplaceDataCapability,11197,Variable
-HistoryServerCapabilities_UpdateDataCapability,11198,Variable
-HistoryServerCapabilities_DeleteRawCapability,11199,Variable
-HistoryServerCapabilities_DeleteAtTimeCapability,11200,Variable
-HistoryServerCapabilities_AggregateFunctions,11201,Object
-HAConfiguration,11202,Object
-HAConfiguration_AggregateConfiguration,11203,Object
-HAConfiguration_AggregateConfiguration_TreatUncertainAsBad,11204,Variable
-HAConfiguration_AggregateConfiguration_PercentDataBad,11205,Variable
-HAConfiguration_AggregateConfiguration_PercentDataGood,11206,Variable
-HAConfiguration_AggregateConfiguration_UseSlopedExtrapolation,11207,Variable
-HAConfiguration_Stepped,11208,Variable
-HAConfiguration_Definition,11209,Variable
-HAConfiguration_MaxTimeInterval,11210,Variable
-HAConfiguration_MinTimeInterval,11211,Variable
-HAConfiguration_ExceptionDeviation,11212,Variable
-HAConfiguration_ExceptionDeviationFormat,11213,Variable
-Annotations,11214,Variable
-HistoricalEventFilter,11215,Variable
-ModificationInfo,11216,DataType
-HistoryModifiedData,11217,DataType
-ModificationInfo_Encoding_DefaultXml,11218,Object
-HistoryModifiedData_Encoding_DefaultXml,11219,Object
-ModificationInfo_Encoding_DefaultBinary,11226,Object
-HistoryModifiedData_Encoding_DefaultBinary,11227,Object
-HistoryUpdateType,11234,DataType
-MultiStateValueDiscreteType,11238,VariableType
-MultiStateValueDiscreteType_Definition,11239,Variable
-MultiStateValueDiscreteType_ValuePrecision,11240,Variable
-MultiStateValueDiscreteType_EnumValues,11241,Variable
-HistoryServerCapabilities_AccessHistoryEventsCapability,11242,Variable
-HistoryServerCapabilitiesType_MaxReturnDataValues,11268,Variable
-HistoryServerCapabilitiesType_MaxReturnEventValues,11269,Variable
-HistoryServerCapabilitiesType_InsertAnnotationCapability,11270,Variable
-HistoryServerCapabilities_MaxReturnDataValues,11273,Variable
-HistoryServerCapabilities_MaxReturnEventValues,11274,Variable
-HistoryServerCapabilities_InsertAnnotationCapability,11275,Variable
-HistoryServerCapabilitiesType_InsertEventCapability,11278,Variable
-HistoryServerCapabilitiesType_ReplaceEventCapability,11279,Variable
-HistoryServerCapabilitiesType_UpdateEventCapability,11280,Variable
-HistoryServerCapabilities_InsertEventCapability,11281,Variable
-HistoryServerCapabilities_ReplaceEventCapability,11282,Variable
-HistoryServerCapabilities_UpdateEventCapability,11283,Variable
-AggregateFunction_TimeAverage2,11285,Object
-AggregateFunction_Minimum2,11286,Object
-AggregateFunction_Maximum2,11287,Object
-AggregateFunction_Range2,11288,Object
-AggregateFunction_WorstQuality2,11292,Object
-PerformUpdateType,11293,DataType
-UpdateStructureDataDetails,11295,DataType
-UpdateStructureDataDetails_Encoding_DefaultXml,11296,Object
-UpdateStructureDataDetails_Encoding_DefaultBinary,11300,Object
-AggregateFunction_Total2,11304,Object
-AggregateFunction_MinimumActualTime2,11305,Object
-AggregateFunction_MaximumActualTime2,11306,Object
-AggregateFunction_DurationInStateZero,11307,Object
-AggregateFunction_DurationInStateNonZero,11308,Object
-Server_ServerRedundancy_CurrentServerId,11312,Variable
-Server_ServerRedundancy_RedundantServerArray,11313,Variable
-Server_ServerRedundancy_ServerUriArray,11314,Variable
-ShelvedStateMachineType_UnshelvedToTimedShelved_TransitionNumber,11322,Variable
-ShelvedStateMachineType_UnshelvedToOneShotShelved_TransitionNumber,11323,Variable
-ShelvedStateMachineType_TimedShelvedToUnshelved_TransitionNumber,11324,Variable
-ShelvedStateMachineType_TimedShelvedToOneShotShelved_TransitionNumber,11325,Variable
-ShelvedStateMachineType_OneShotShelvedToUnshelved_TransitionNumber,11326,Variable
-ShelvedStateMachineType_OneShotShelvedToTimedShelved_TransitionNumber,11327,Variable
-ExclusiveLimitStateMachineType_LowLowToLow_TransitionNumber,11340,Variable
-ExclusiveLimitStateMachineType_LowToLowLow_TransitionNumber,11341,Variable
-ExclusiveLimitStateMachineType_HighHighToHigh_TransitionNumber,11342,Variable
-ExclusiveLimitStateMachineType_HighToHighHigh_TransitionNumber,11343,Variable
-AggregateFunction_StandardDeviationSample,11426,Object
-AggregateFunction_StandardDeviationPopulation,11427,Object
-AggregateFunction_VarianceSample,11428,Object
-AggregateFunction_VariancePopulation,11429,Object
-EnumStrings,11432,Variable
-ValueAsText,11433,Variable
-ProgressEventType,11436,ObjectType
-ProgressEventType_EventId,11437,Variable
-ProgressEventType_EventType,11438,Variable
-ProgressEventType_SourceNode,11439,Variable
-ProgressEventType_SourceName,11440,Variable
-ProgressEventType_Time,11441,Variable
-ProgressEventType_ReceiveTime,11442,Variable
-ProgressEventType_LocalTime,11443,Variable
-ProgressEventType_Message,11444,Variable
-ProgressEventType_Severity,11445,Variable
-SystemStatusChangeEventType,11446,ObjectType
-SystemStatusChangeEventType_EventId,11447,Variable
-SystemStatusChangeEventType_EventType,11448,Variable
-SystemStatusChangeEventType_SourceNode,11449,Variable
-SystemStatusChangeEventType_SourceName,11450,Variable
-SystemStatusChangeEventType_Time,11451,Variable
-SystemStatusChangeEventType_ReceiveTime,11452,Variable
-SystemStatusChangeEventType_LocalTime,11453,Variable
-SystemStatusChangeEventType_Message,11454,Variable
-SystemStatusChangeEventType_Severity,11455,Variable
-TransitionVariableType_EffectiveTransitionTime,11456,Variable
-FiniteTransitionVariableType_EffectiveTransitionTime,11457,Variable
-StateMachineType_LastTransition_EffectiveTransitionTime,11458,Variable
-FiniteStateMachineType_LastTransition_EffectiveTransitionTime,11459,Variable
-TransitionEventType_Transition_EffectiveTransitionTime,11460,Variable
-MultiStateValueDiscreteType_ValueAsText,11461,Variable
-ProgramTransitionEventType_Transition_EffectiveTransitionTime,11462,Variable
-ProgramTransitionAuditEventType_Transition_EffectiveTransitionTime,11463,Variable
-ProgramStateMachineType_LastTransition_EffectiveTransitionTime,11464,Variable
-ShelvedStateMachineType_LastTransition_EffectiveTransitionTime,11465,Variable
-AlarmConditionType_ShelvingState_LastTransition_EffectiveTransitionTime,11466,Variable
-LimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11467,Variable
-ExclusiveLimitStateMachineType_LastTransition_EffectiveTransitionTime,11468,Variable
-ExclusiveLimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11469,Variable
-ExclusiveLimitAlarmType_LimitState_LastTransition_EffectiveTransitionTime,11470,Variable
-ExclusiveLevelAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11471,Variable
-ExclusiveLevelAlarmType_LimitState_LastTransition_EffectiveTransitionTime,11472,Variable
-ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11473,Variable
-ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_EffectiveTransitionTime,11474,Variable
-ExclusiveDeviationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11475,Variable
-ExclusiveDeviationAlarmType_LimitState_LastTransition_EffectiveTransitionTime,11476,Variable
-NonExclusiveLimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11477,Variable
-NonExclusiveLevelAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11478,Variable
-NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11479,Variable
-NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11480,Variable
-DiscreteAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11481,Variable
-OffNormalAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11482,Variable
-TripAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11483,Variable
-AuditActivateSessionEventType_SecureChannelId,11485,Variable
-OptionSetType,11487,VariableType
-OptionSetType_OptionSetValues,11488,Variable
-ServerType_GetMonitoredItems,11489,Method
-ServerType_GetMonitoredItems_InputArguments,11490,Variable
-ServerType_GetMonitoredItems_OutputArguments,11491,Variable
-Server_GetMonitoredItems,11492,Method
-Server_GetMonitoredItems_InputArguments,11493,Variable
-Server_GetMonitoredItems_OutputArguments,11494,Variable
-GetMonitoredItemsMethodType,11495,Method
-GetMonitoredItemsMethodType_InputArguments,11496,Variable
-GetMonitoredItemsMethodType_OutputArguments,11497,Variable
-MaxStringLength,11498,Variable
-HistoricalDataConfigurationType_StartOfArchive,11499,Variable
-HistoricalDataConfigurationType_StartOfOnlineArchive,11500,Variable
-HistoryServerCapabilitiesType_DeleteEventCapability,11501,Variable
-HistoryServerCapabilities_DeleteEventCapability,11502,Variable
-HAConfiguration_StartOfArchive,11503,Variable
-HAConfiguration_StartOfOnlineArchive,11504,Variable
-AggregateFunction_StartBound,11505,Object
-AggregateFunction_EndBound,11506,Object
-AggregateFunction_DeltaBounds,11507,Object
-ModellingRule_OptionalPlaceholder,11508,Object
-ModellingRule_OptionalPlaceholder_NamingRule,11509,Variable
-ModellingRule_MandatoryPlaceholder,11510,Object
-ModellingRule_MandatoryPlaceholder_NamingRule,11511,Variable
-MaxArrayLength,11512,Variable
-EngineeringUnits,11513,Variable
-ServerType_ServerCapabilities_MaxArrayLength,11514,Variable
-ServerType_ServerCapabilities_MaxStringLength,11515,Variable
-ServerType_ServerCapabilities_OperationLimits,11516,Object
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerRead,11517,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerWrite,11519,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall,11521,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerBrowse,11522,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes,11523,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds,11524,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement,11525,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall,11526,Variable
-ServerType_Namespaces,11527,Object
-ServerType_Namespaces_AddressSpaceFile,11528,Object
-ServerType_Namespaces_AddressSpaceFile_Size,11529,Variable
-ServerType_Namespaces_AddressSpaceFile_OpenCount,11532,Variable
-ServerType_Namespaces_AddressSpaceFile_Open,11533,Method
-ServerType_Namespaces_AddressSpaceFile_Open_InputArguments,11534,Variable
-ServerType_Namespaces_AddressSpaceFile_Open_OutputArguments,11535,Variable
-ServerType_Namespaces_AddressSpaceFile_Close,11536,Method
-ServerType_Namespaces_AddressSpaceFile_Close_InputArguments,11537,Variable
-ServerType_Namespaces_AddressSpaceFile_Read,11538,Method
-ServerType_Namespaces_AddressSpaceFile_Read_InputArguments,11539,Variable
-ServerType_Namespaces_AddressSpaceFile_Read_OutputArguments,11540,Variable
-ServerType_Namespaces_AddressSpaceFile_Write,11541,Method
-ServerType_Namespaces_AddressSpaceFile_Write_InputArguments,11542,Variable
-ServerType_Namespaces_AddressSpaceFile_GetPosition,11543,Method
-ServerType_Namespaces_AddressSpaceFile_GetPosition_InputArguments,11544,Variable
-ServerType_Namespaces_AddressSpaceFile_GetPosition_OutputArguments,11545,Variable
-ServerType_Namespaces_AddressSpaceFile_SetPosition,11546,Method
-ServerType_Namespaces_AddressSpaceFile_SetPosition_InputArguments,11547,Variable
-ServerType_Namespaces_AddressSpaceFile_ExportNamespace,11548,Method
-ServerCapabilitiesType_MaxArrayLength,11549,Variable
-ServerCapabilitiesType_MaxStringLength,11550,Variable
-ServerCapabilitiesType_OperationLimits,11551,Object
-ServerCapabilitiesType_OperationLimits_MaxNodesPerRead,11552,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerWrite,11554,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerMethodCall,11556,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerBrowse,11557,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerRegisterNodes,11558,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds,11559,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerNodeManagement,11560,Variable
-ServerCapabilitiesType_OperationLimits_MaxMonitoredItemsPerCall,11561,Variable
-ServerCapabilitiesType_VendorCapability_Placeholder,11562,Variable
-OperationLimitsType,11564,ObjectType
-OperationLimitsType_MaxNodesPerRead,11565,Variable
-OperationLimitsType_MaxNodesPerWrite,11567,Variable
-OperationLimitsType_MaxNodesPerMethodCall,11569,Variable
-OperationLimitsType_MaxNodesPerBrowse,11570,Variable
-OperationLimitsType_MaxNodesPerRegisterNodes,11571,Variable
-OperationLimitsType_MaxNodesPerTranslateBrowsePathsToNodeIds,11572,Variable
-OperationLimitsType_MaxNodesPerNodeManagement,11573,Variable
-OperationLimitsType_MaxMonitoredItemsPerCall,11574,Variable
-FileType,11575,ObjectType
-FileType_Size,11576,Variable
-FileType_OpenCount,11579,Variable
-FileType_Open,11580,Method
-FileType_Open_InputArguments,11581,Variable
-FileType_Open_OutputArguments,11582,Variable
-FileType_Close,11583,Method
-FileType_Close_InputArguments,11584,Variable
-FileType_Read,11585,Method
-FileType_Read_InputArguments,11586,Variable
-FileType_Read_OutputArguments,11587,Variable
-FileType_Write,11588,Method
-FileType_Write_InputArguments,11589,Variable
-FileType_GetPosition,11590,Method
-FileType_GetPosition_InputArguments,11591,Variable
-FileType_GetPosition_OutputArguments,11592,Variable
-FileType_SetPosition,11593,Method
-FileType_SetPosition_InputArguments,11594,Variable
-AddressSpaceFileType,11595,ObjectType
-AddressSpaceFileType_Size,11596,Variable
-AddressSpaceFileType_OpenCount,11599,Variable
-AddressSpaceFileType_Open,11600,Method
-AddressSpaceFileType_Open_InputArguments,11601,Variable
-AddressSpaceFileType_Open_OutputArguments,11602,Variable
-AddressSpaceFileType_Close,11603,Method
-AddressSpaceFileType_Close_InputArguments,11604,Variable
-AddressSpaceFileType_Read,11605,Method
-AddressSpaceFileType_Read_InputArguments,11606,Variable
-AddressSpaceFileType_Read_OutputArguments,11607,Variable
-AddressSpaceFileType_Write,11608,Method
-AddressSpaceFileType_Write_InputArguments,11609,Variable
-AddressSpaceFileType_GetPosition,11610,Method
-AddressSpaceFileType_GetPosition_InputArguments,11611,Variable
-AddressSpaceFileType_GetPosition_OutputArguments,11612,Variable
-AddressSpaceFileType_SetPosition,11613,Method
-AddressSpaceFileType_SetPosition_InputArguments,11614,Variable
-AddressSpaceFileType_ExportNamespace,11615,Method
-NamespaceMetadataType,11616,ObjectType
-NamespaceMetadataType_NamespaceUri,11617,Variable
-NamespaceMetadataType_NamespaceVersion,11618,Variable
-NamespaceMetadataType_NamespacePublicationDate,11619,Variable
-NamespaceMetadataType_IsNamespaceSubset,11620,Variable
-NamespaceMetadataType_StaticNodeIdTypes,11621,Variable
-NamespaceMetadataType_StaticNumericNodeIdRange,11622,Variable
-NamespaceMetadataType_StaticStringNodeIdPattern,11623,Variable
-NamespaceMetadataType_NamespaceFile,11624,Object
-NamespaceMetadataType_NamespaceFile_Size,11625,Variable
-NamespaceMetadataType_NamespaceFile_OpenCount,11628,Variable
-NamespaceMetadataType_NamespaceFile_Open,11629,Method
-NamespaceMetadataType_NamespaceFile_Open_InputArguments,11630,Variable
-NamespaceMetadataType_NamespaceFile_Open_OutputArguments,11631,Variable
-NamespaceMetadataType_NamespaceFile_Close,11632,Method
-NamespaceMetadataType_NamespaceFile_Close_InputArguments,11633,Variable
-NamespaceMetadataType_NamespaceFile_Read,11634,Method
-NamespaceMetadataType_NamespaceFile_Read_InputArguments,11635,Variable
-NamespaceMetadataType_NamespaceFile_Read_OutputArguments,11636,Variable
-NamespaceMetadataType_NamespaceFile_Write,11637,Method
-NamespaceMetadataType_NamespaceFile_Write_InputArguments,11638,Variable
-NamespaceMetadataType_NamespaceFile_GetPosition,11639,Method
-NamespaceMetadataType_NamespaceFile_GetPosition_InputArguments,11640,Variable
-NamespaceMetadataType_NamespaceFile_GetPosition_OutputArguments,11641,Variable
-NamespaceMetadataType_NamespaceFile_SetPosition,11642,Method
-NamespaceMetadataType_NamespaceFile_SetPosition_InputArguments,11643,Variable
-NamespaceMetadataType_NamespaceFile_ExportNamespace,11644,Method
-NamespacesType,11645,ObjectType
-NamespacesType_NamespaceIdentifier_Placeholder,11646,Object
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceUri,11647,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceVersion,11648,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespacePublicationDate,11649,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_IsNamespaceSubset,11650,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_StaticNodeIdTypes,11651,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_StaticNumericNodeIdRange,11652,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_StaticStringNodeIdPattern,11653,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile,11654,Object
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Size,11655,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_OpenCount,11658,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open,11659,Method
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_InputArguments,11660,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_OutputArguments,11661,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close,11662,Method
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close_InputArguments,11663,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read,11664,Method
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_InputArguments,11665,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_OutputArguments,11666,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write,11667,Method
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write_InputArguments,11668,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition,11669,Method
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_InputArguments,11670,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_OutputArguments,11671,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition,11672,Method
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition_InputArguments,11673,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_ExportNamespace,11674,Method
-NamespacesType_AddressSpaceFile,11675,Object
-NamespacesType_AddressSpaceFile_Size,11676,Variable
-NamespacesType_AddressSpaceFile_OpenCount,11679,Variable
-NamespacesType_AddressSpaceFile_Open,11680,Method
-NamespacesType_AddressSpaceFile_Open_InputArguments,11681,Variable
-NamespacesType_AddressSpaceFile_Open_OutputArguments,11682,Variable
-NamespacesType_AddressSpaceFile_Close,11683,Method
-NamespacesType_AddressSpaceFile_Close_InputArguments,11684,Variable
-NamespacesType_AddressSpaceFile_Read,11685,Method
-NamespacesType_AddressSpaceFile_Read_InputArguments,11686,Variable
-NamespacesType_AddressSpaceFile_Read_OutputArguments,11687,Variable
-NamespacesType_AddressSpaceFile_Write,11688,Method
-NamespacesType_AddressSpaceFile_Write_InputArguments,11689,Variable
-NamespacesType_AddressSpaceFile_GetPosition,11690,Method
-NamespacesType_AddressSpaceFile_GetPosition_InputArguments,11691,Variable
-NamespacesType_AddressSpaceFile_GetPosition_OutputArguments,11692,Variable
-NamespacesType_AddressSpaceFile_SetPosition,11693,Method
-NamespacesType_AddressSpaceFile_SetPosition_InputArguments,11694,Variable
-NamespacesType_AddressSpaceFile_ExportNamespace,11695,Method
-SystemStatusChangeEventType_SystemState,11696,Variable
-SamplingIntervalDiagnosticsType_SampledMonitoredItemsCount,11697,Variable
-SamplingIntervalDiagnosticsType_MaxSampledMonitoredItemsCount,11698,Variable
-SamplingIntervalDiagnosticsType_DisabledMonitoredItemsSamplingCount,11699,Variable
-OptionSetType_BitMask,11701,Variable
-Server_ServerCapabilities_MaxArrayLength,11702,Variable
-Server_ServerCapabilities_MaxStringLength,11703,Variable
-Server_ServerCapabilities_OperationLimits,11704,Object
-Server_ServerCapabilities_OperationLimits_MaxNodesPerRead,11705,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite,11707,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall,11709,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse,11710,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes,11711,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds,11712,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement,11713,Variable
-Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall,11714,Variable
-Server_Namespaces,11715,Object
-Server_Namespaces_AddressSpaceFile,11716,Object
-Server_Namespaces_AddressSpaceFile_Size,11717,Variable
-Server_Namespaces_AddressSpaceFile_OpenCount,11720,Variable
-Server_Namespaces_AddressSpaceFile_Open,11721,Method
-Server_Namespaces_AddressSpaceFile_Open_InputArguments,11722,Variable
-Server_Namespaces_AddressSpaceFile_Open_OutputArguments,11723,Variable
-Server_Namespaces_AddressSpaceFile_Close,11724,Method
-Server_Namespaces_AddressSpaceFile_Close_InputArguments,11725,Variable
-Server_Namespaces_AddressSpaceFile_Read,11726,Method
-Server_Namespaces_AddressSpaceFile_Read_InputArguments,11727,Variable
-Server_Namespaces_AddressSpaceFile_Read_OutputArguments,11728,Variable
-Server_Namespaces_AddressSpaceFile_Write,11729,Method
-Server_Namespaces_AddressSpaceFile_Write_InputArguments,11730,Variable
-Server_Namespaces_AddressSpaceFile_GetPosition,11731,Method
-Server_Namespaces_AddressSpaceFile_GetPosition_InputArguments,11732,Variable
-Server_Namespaces_AddressSpaceFile_GetPosition_OutputArguments,11733,Variable
-Server_Namespaces_AddressSpaceFile_SetPosition,11734,Method
-Server_Namespaces_AddressSpaceFile_SetPosition_InputArguments,11735,Variable
-Server_Namespaces_AddressSpaceFile_ExportNamespace,11736,Method
-BitFieldMaskDataType,11737,DataType
-OpenMethodType,11738,Method
-OpenMethodType_InputArguments,11739,Variable
-OpenMethodType_OutputArguments,11740,Variable
-CloseMethodType,11741,Method
-CloseMethodType_InputArguments,11742,Variable
-ReadMethodType,11743,Method
-ReadMethodType_InputArguments,11744,Variable
-ReadMethodType_OutputArguments,11745,Variable
-WriteMethodType,11746,Method
-WriteMethodType_InputArguments,11747,Variable
-GetPositionMethodType,11748,Method
-GetPositionMethodType_InputArguments,11749,Variable
-GetPositionMethodType_OutputArguments,11750,Variable
-SetPositionMethodType,11751,Method
-SetPositionMethodType_InputArguments,11752,Variable
-SystemOffNormalAlarmType,11753,ObjectType
-SystemOffNormalAlarmType_EventId,11754,Variable
-SystemOffNormalAlarmType_EventType,11755,Variable
-SystemOffNormalAlarmType_SourceNode,11756,Variable
-SystemOffNormalAlarmType_SourceName,11757,Variable
-SystemOffNormalAlarmType_Time,11758,Variable
-SystemOffNormalAlarmType_ReceiveTime,11759,Variable
-SystemOffNormalAlarmType_LocalTime,11760,Variable
-SystemOffNormalAlarmType_Message,11761,Variable
-SystemOffNormalAlarmType_Severity,11762,Variable
-SystemOffNormalAlarmType_ConditionClassId,11763,Variable
-SystemOffNormalAlarmType_ConditionClassName,11764,Variable
-SystemOffNormalAlarmType_ConditionName,11765,Variable
-SystemOffNormalAlarmType_BranchId,11766,Variable
-SystemOffNormalAlarmType_Retain,11767,Variable
-SystemOffNormalAlarmType_EnabledState,11768,Variable
-SystemOffNormalAlarmType_EnabledState_Id,11769,Variable
-SystemOffNormalAlarmType_EnabledState_Name,11770,Variable
-SystemOffNormalAlarmType_EnabledState_Number,11771,Variable
-SystemOffNormalAlarmType_EnabledState_EffectiveDisplayName,11772,Variable
-SystemOffNormalAlarmType_EnabledState_TransitionTime,11773,Variable
-SystemOffNormalAlarmType_EnabledState_EffectiveTransitionTime,11774,Variable
-SystemOffNormalAlarmType_EnabledState_TrueState,11775,Variable
-SystemOffNormalAlarmType_EnabledState_FalseState,11776,Variable
-SystemOffNormalAlarmType_Quality,11777,Variable
-SystemOffNormalAlarmType_Quality_SourceTimestamp,11778,Variable
-SystemOffNormalAlarmType_LastSeverity,11779,Variable
-SystemOffNormalAlarmType_LastSeverity_SourceTimestamp,11780,Variable
-SystemOffNormalAlarmType_Comment,11781,Variable
-SystemOffNormalAlarmType_Comment_SourceTimestamp,11782,Variable
-SystemOffNormalAlarmType_ClientUserId,11783,Variable
-SystemOffNormalAlarmType_Disable,11784,Method
-SystemOffNormalAlarmType_Enable,11785,Method
-SystemOffNormalAlarmType_AddComment,11786,Method
-SystemOffNormalAlarmType_AddComment_InputArguments,11787,Variable
-SystemOffNormalAlarmType_ConditionRefresh,11788,Method
-SystemOffNormalAlarmType_ConditionRefresh_InputArguments,11789,Variable
-SystemOffNormalAlarmType_AckedState,11790,Variable
-SystemOffNormalAlarmType_AckedState_Id,11791,Variable
-SystemOffNormalAlarmType_AckedState_Name,11792,Variable
-SystemOffNormalAlarmType_AckedState_Number,11793,Variable
-SystemOffNormalAlarmType_AckedState_EffectiveDisplayName,11794,Variable
-SystemOffNormalAlarmType_AckedState_TransitionTime,11795,Variable
-SystemOffNormalAlarmType_AckedState_EffectiveTransitionTime,11796,Variable
-SystemOffNormalAlarmType_AckedState_TrueState,11797,Variable
-SystemOffNormalAlarmType_AckedState_FalseState,11798,Variable
-SystemOffNormalAlarmType_ConfirmedState,11799,Variable
-SystemOffNormalAlarmType_ConfirmedState_Id,11800,Variable
-SystemOffNormalAlarmType_ConfirmedState_Name,11801,Variable
-SystemOffNormalAlarmType_ConfirmedState_Number,11802,Variable
-SystemOffNormalAlarmType_ConfirmedState_EffectiveDisplayName,11803,Variable
-SystemOffNormalAlarmType_ConfirmedState_TransitionTime,11804,Variable
-SystemOffNormalAlarmType_ConfirmedState_EffectiveTransitionTime,11805,Variable
-SystemOffNormalAlarmType_ConfirmedState_TrueState,11806,Variable
-SystemOffNormalAlarmType_ConfirmedState_FalseState,11807,Variable
-SystemOffNormalAlarmType_Acknowledge,11808,Method
-SystemOffNormalAlarmType_Acknowledge_InputArguments,11809,Variable
-SystemOffNormalAlarmType_Confirm,11810,Method
-SystemOffNormalAlarmType_Confirm_InputArguments,11811,Variable
-SystemOffNormalAlarmType_ActiveState,11812,Variable
-SystemOffNormalAlarmType_ActiveState_Id,11813,Variable
-SystemOffNormalAlarmType_ActiveState_Name,11814,Variable
-SystemOffNormalAlarmType_ActiveState_Number,11815,Variable
-SystemOffNormalAlarmType_ActiveState_EffectiveDisplayName,11816,Variable
-SystemOffNormalAlarmType_ActiveState_TransitionTime,11817,Variable
-SystemOffNormalAlarmType_ActiveState_EffectiveTransitionTime,11818,Variable
-SystemOffNormalAlarmType_ActiveState_TrueState,11819,Variable
-SystemOffNormalAlarmType_ActiveState_FalseState,11820,Variable
-SystemOffNormalAlarmType_InputNode,11821,Variable
-SystemOffNormalAlarmType_SuppressedState,11822,Variable
-SystemOffNormalAlarmType_SuppressedState_Id,11823,Variable
-SystemOffNormalAlarmType_SuppressedState_Name,11824,Variable
-SystemOffNormalAlarmType_SuppressedState_Number,11825,Variable
-SystemOffNormalAlarmType_SuppressedState_EffectiveDisplayName,11826,Variable
-SystemOffNormalAlarmType_SuppressedState_TransitionTime,11827,Variable
-SystemOffNormalAlarmType_SuppressedState_EffectiveTransitionTime,11828,Variable
-SystemOffNormalAlarmType_SuppressedState_TrueState,11829,Variable
-SystemOffNormalAlarmType_SuppressedState_FalseState,11830,Variable
-SystemOffNormalAlarmType_ShelvingState,11831,Object
-SystemOffNormalAlarmType_ShelvingState_CurrentState,11832,Variable
-SystemOffNormalAlarmType_ShelvingState_CurrentState_Id,11833,Variable
-SystemOffNormalAlarmType_ShelvingState_CurrentState_Name,11834,Variable
-SystemOffNormalAlarmType_ShelvingState_CurrentState_Number,11835,Variable
-SystemOffNormalAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,11836,Variable
-SystemOffNormalAlarmType_ShelvingState_LastTransition,11837,Variable
-SystemOffNormalAlarmType_ShelvingState_LastTransition_Id,11838,Variable
-SystemOffNormalAlarmType_ShelvingState_LastTransition_Name,11839,Variable
-SystemOffNormalAlarmType_ShelvingState_LastTransition_Number,11840,Variable
-SystemOffNormalAlarmType_ShelvingState_LastTransition_TransitionTime,11841,Variable
-SystemOffNormalAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,11842,Variable
-SystemOffNormalAlarmType_ShelvingState_UnshelveTime,11843,Variable
-SystemOffNormalAlarmType_ShelvingState_Unshelve,11844,Method
-SystemOffNormalAlarmType_ShelvingState_OneShotShelve,11845,Method
-SystemOffNormalAlarmType_ShelvingState_TimedShelve,11846,Method
-SystemOffNormalAlarmType_ShelvingState_TimedShelve_InputArguments,11847,Variable
-SystemOffNormalAlarmType_SuppressedOrShelved,11848,Variable
-SystemOffNormalAlarmType_MaxTimeShelved,11849,Variable
-SystemOffNormalAlarmType_NormalState,11850,Variable
-AuditConditionCommentEventType_Comment,11851,Variable
-AuditConditionRespondEventType_SelectedResponse,11852,Variable
-AuditConditionAcknowledgeEventType_Comment,11853,Variable
-AuditConditionConfirmEventType_Comment,11854,Variable
-AuditConditionShelvingEventType_ShelvingTime,11855,Variable
-AuditProgramTransitionEventType,11856,ObjectType
-AuditProgramTransitionEventType_EventId,11857,Variable
-AuditProgramTransitionEventType_EventType,11858,Variable
-AuditProgramTransitionEventType_SourceNode,11859,Variable
-AuditProgramTransitionEventType_SourceName,11860,Variable
-AuditProgramTransitionEventType_Time,11861,Variable
-AuditProgramTransitionEventType_ReceiveTime,11862,Variable
-AuditProgramTransitionEventType_LocalTime,11863,Variable
-AuditProgramTransitionEventType_Message,11864,Variable
-AuditProgramTransitionEventType_Severity,11865,Variable
-AuditProgramTransitionEventType_ActionTimeStamp,11866,Variable
-AuditProgramTransitionEventType_Status,11867,Variable
-AuditProgramTransitionEventType_ServerId,11868,Variable
-AuditProgramTransitionEventType_ClientAuditEntryId,11869,Variable
-AuditProgramTransitionEventType_ClientUserId,11870,Variable
-AuditProgramTransitionEventType_MethodId,11871,Variable
-AuditProgramTransitionEventType_InputArguments,11872,Variable
-AuditProgramTransitionEventType_OldStateId,11873,Variable
-AuditProgramTransitionEventType_NewStateId,11874,Variable
-AuditProgramTransitionEventType_TransitionNumber,11875,Variable
-HistoricalDataConfigurationType_AggregateFunctions,11876,Object
-HAConfiguration_AggregateFunctions,11877,Object
-NodeClass_EnumValues,11878,Variable
-InstanceNode,11879,DataType
-TypeNode,11880,DataType
-NodeAttributesMask_EnumValues,11881,Variable
-AttributeWriteMask_EnumValues,11882,Variable
-BrowseResultMask_EnumValues,11883,Variable
-HistoryUpdateType_EnumValues,11884,Variable
-PerformUpdateType_EnumValues,11885,Variable
-InstanceNode_Encoding_DefaultXml,11887,Object
-TypeNode_Encoding_DefaultXml,11888,Object
-InstanceNode_Encoding_DefaultBinary,11889,Object
-TypeNode_Encoding_DefaultBinary,11890,Object
-SessionDiagnosticsObjectType_SessionDiagnostics_UnauthorizedRequestCount,11891,Variable
-SessionDiagnosticsVariableType_UnauthorizedRequestCount,11892,Variable
-OpenFileMode,11939,DataType
-OpenFileMode_EnumValues,11940,Variable
-ModelChangeStructureVerbMask,11941,DataType
-ModelChangeStructureVerbMask_EnumValues,11942,Variable
-EndpointUrlListDataType,11943,DataType
-NetworkGroupDataType,11944,DataType
-NonTransparentNetworkRedundancyType,11945,ObjectType
-NonTransparentNetworkRedundancyType_RedundancySupport,11946,Variable
-NonTransparentNetworkRedundancyType_ServerUriArray,11947,Variable
-NonTransparentNetworkRedundancyType_ServerNetworkGroups,11948,Variable
-EndpointUrlListDataType_Encoding_DefaultXml,11949,Object
-NetworkGroupDataType_Encoding_DefaultXml,11950,Object
-OpcUa_XmlSchema_EndpointUrlListDataType,11951,Variable
-OpcUa_XmlSchema_EndpointUrlListDataType_DataTypeVersion,11952,Variable
-OpcUa_XmlSchema_EndpointUrlListDataType_DictionaryFragment,11953,Variable
-OpcUa_XmlSchema_NetworkGroupDataType,11954,Variable
-OpcUa_XmlSchema_NetworkGroupDataType_DataTypeVersion,11955,Variable
-OpcUa_XmlSchema_NetworkGroupDataType_DictionaryFragment,11956,Variable
-EndpointUrlListDataType_Encoding_DefaultBinary,11957,Object
-NetworkGroupDataType_Encoding_DefaultBinary,11958,Object
-OpcUa_BinarySchema_EndpointUrlListDataType,11959,Variable
-OpcUa_BinarySchema_EndpointUrlListDataType_DataTypeVersion,11960,Variable
-OpcUa_BinarySchema_EndpointUrlListDataType_DictionaryFragment,11961,Variable
-OpcUa_BinarySchema_NetworkGroupDataType,11962,Variable
-OpcUa_BinarySchema_NetworkGroupDataType_DataTypeVersion,11963,Variable
-OpcUa_BinarySchema_NetworkGroupDataType_DictionaryFragment,11964,Variable
-ArrayItemType,12021,VariableType
-ArrayItemType_Definition,12022,Variable
-ArrayItemType_ValuePrecision,12023,Variable
-ArrayItemType_InstrumentRange,12024,Variable
-ArrayItemType_EURange,12025,Variable
-ArrayItemType_EngineeringUnits,12026,Variable
-ArrayItemType_Title,12027,Variable
-ArrayItemType_AxisScaleType,12028,Variable
-YArrayItemType,12029,VariableType
-YArrayItemType_Definition,12030,Variable
-YArrayItemType_ValuePrecision,12031,Variable
-YArrayItemType_InstrumentRange,12032,Variable
-YArrayItemType_EURange,12033,Variable
-YArrayItemType_EngineeringUnits,12034,Variable
-YArrayItemType_Title,12035,Variable
-YArrayItemType_AxisScaleType,12036,Variable
-YArrayItemType_XAxisDefinition,12037,Variable
-XYArrayItemType,12038,VariableType
-XYArrayItemType_Definition,12039,Variable
-XYArrayItemType_ValuePrecision,12040,Variable
-XYArrayItemType_InstrumentRange,12041,Variable
-XYArrayItemType_EURange,12042,Variable
-XYArrayItemType_EngineeringUnits,12043,Variable
-XYArrayItemType_Title,12044,Variable
-XYArrayItemType_AxisScaleType,12045,Variable
-XYArrayItemType_XAxisDefinition,12046,Variable
-ImageItemType,12047,VariableType
-ImageItemType_Definition,12048,Variable
-ImageItemType_ValuePrecision,12049,Variable
-ImageItemType_InstrumentRange,12050,Variable
-ImageItemType_EURange,12051,Variable
-ImageItemType_EngineeringUnits,12052,Variable
-ImageItemType_Title,12053,Variable
-ImageItemType_AxisScaleType,12054,Variable
-ImageItemType_XAxisDefinition,12055,Variable
-ImageItemType_YAxisDefinition,12056,Variable
-CubeItemType,12057,VariableType
-CubeItemType_Definition,12058,Variable
-CubeItemType_ValuePrecision,12059,Variable
-CubeItemType_InstrumentRange,12060,Variable
-CubeItemType_EURange,12061,Variable
-CubeItemType_EngineeringUnits,12062,Variable
-CubeItemType_Title,12063,Variable
-CubeItemType_AxisScaleType,12064,Variable
-CubeItemType_XAxisDefinition,12065,Variable
-CubeItemType_YAxisDefinition,12066,Variable
-CubeItemType_ZAxisDefinition,12067,Variable
-NDimensionArrayItemType,12068,VariableType
-NDimensionArrayItemType_Definition,12069,Variable
-NDimensionArrayItemType_ValuePrecision,12070,Variable
-NDimensionArrayItemType_InstrumentRange,12071,Variable
-NDimensionArrayItemType_EURange,12072,Variable
-NDimensionArrayItemType_EngineeringUnits,12073,Variable
-NDimensionArrayItemType_Title,12074,Variable
-NDimensionArrayItemType_AxisScaleType,12075,Variable
-NDimensionArrayItemType_AxisDefinition,12076,Variable
-AxisScaleEnumeration,12077,DataType
-AxisScaleEnumeration_EnumStrings,12078,Variable
-AxisInformation,12079,DataType
-XVType,12080,DataType
-AxisInformation_Encoding_DefaultXml,12081,Object
-XVType_Encoding_DefaultXml,12082,Object
-OpcUa_XmlSchema_AxisInformation,12083,Variable
-OpcUa_XmlSchema_AxisInformation_DataTypeVersion,12084,Variable
-OpcUa_XmlSchema_AxisInformation_DictionaryFragment,12085,Variable
-OpcUa_XmlSchema_XVType,12086,Variable
-OpcUa_XmlSchema_XVType_DataTypeVersion,12087,Variable
-OpcUa_XmlSchema_XVType_DictionaryFragment,12088,Variable
-AxisInformation_Encoding_DefaultBinary,12089,Object
-XVType_Encoding_DefaultBinary,12090,Object
-OpcUa_BinarySchema_AxisInformation,12091,Variable
-OpcUa_BinarySchema_AxisInformation_DataTypeVersion,12092,Variable
-OpcUa_BinarySchema_AxisInformation_DictionaryFragment,12093,Variable
-OpcUa_BinarySchema_XVType,12094,Variable
-OpcUa_BinarySchema_XVType_DataTypeVersion,12095,Variable
-OpcUa_BinarySchema_XVType_DictionaryFragment,12096,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder,12097,Object
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics,12098,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionId,12099,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionName,12100,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientDescription,12101,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ServerUri,12102,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_EndpointUrl,12103,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_LocaleIds,12104,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ActualSessionTimeout,12105,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_MaxResponseMessageSize,12106,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientConnectionTime,12107,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientLastContactTime,12108,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentSubscriptionsCount,12109,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentMonitoredItemsCount,12110,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentPublishRequestsInQueue,12111,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TotalRequestCount,12112,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnauthorizedRequestCount,12113,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ReadCount,12114,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryReadCount,12115,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_WriteCount,12116,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryUpdateCount,12117,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CallCount,12118,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateMonitoredItemsCount,12119,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifyMonitoredItemsCount,12120,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetMonitoringModeCount,12121,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetTriggeringCount,12122,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteMonitoredItemsCount,12123,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateSubscriptionCount,12124,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifySubscriptionCount,12125,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetPublishingModeCount,12126,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_PublishCount,12127,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RepublishCount,12128,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TransferSubscriptionsCount,12129,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteSubscriptionsCount,12130,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddNodesCount,12131,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddReferencesCount,12132,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteNodesCount,12133,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteReferencesCount,12134,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseCount,12135,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseNextCount,12136,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount,12137,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryFirstCount,12138,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryNextCount,12139,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RegisterNodesCount,12140,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnregisterNodesCount,12141,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics,12142,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SessionId,12143,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdOfSession,12144,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdHistory,12145,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_AuthenticationMechanism,12146,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_Encoding,12147,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_TransportProtocol,12148,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityMode,12149,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityPolicyUri,12150,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientCertificate,12151,Variable
-SessionsDiagnosticsSummaryType_ClientName_Placeholder_SubscriptionDiagnosticsArray,12152,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData,12153,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents,12154,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData,12155,Variable
-ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents,12156,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryReadData,12157,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryReadEvents,12158,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryUpdateData,12159,Variable
-ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryUpdateEvents,12160,Variable
-OperationLimitsType_MaxNodesPerHistoryReadData,12161,Variable
-OperationLimitsType_MaxNodesPerHistoryReadEvents,12162,Variable
-OperationLimitsType_MaxNodesPerHistoryUpdateData,12163,Variable
-OperationLimitsType_MaxNodesPerHistoryUpdateEvents,12164,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData,12165,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents,12166,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData,12167,Variable
-Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents,12168,Variable
-NamingRuleType_EnumValues,12169,Variable
-ViewVersion,12170,Variable
-ComplexNumberType,12171,DataType
-DoubleComplexNumberType,12172,DataType
-ComplexNumberType_Encoding_DefaultXml,12173,Object
-DoubleComplexNumberType_Encoding_DefaultXml,12174,Object
-OpcUa_XmlSchema_ComplexNumberType,12175,Variable
-OpcUa_XmlSchema_ComplexNumberType_DataTypeVersion,12176,Variable
-OpcUa_XmlSchema_ComplexNumberType_DictionaryFragment,12177,Variable
-OpcUa_XmlSchema_DoubleComplexNumberType,12178,Variable
-OpcUa_XmlSchema_DoubleComplexNumberType_DataTypeVersion,12179,Variable
-OpcUa_XmlSchema_DoubleComplexNumberType_DictionaryFragment,12180,Variable
-ComplexNumberType_Encoding_DefaultBinary,12181,Object
-DoubleComplexNumberType_Encoding_DefaultBinary,12182,Object
-OpcUa_BinarySchema_ComplexNumberType,12183,Variable
-OpcUa_BinarySchema_ComplexNumberType_DataTypeVersion,12184,Variable
-OpcUa_BinarySchema_ComplexNumberType_DictionaryFragment,12185,Variable
-OpcUa_BinarySchema_DoubleComplexNumberType,12186,Variable
-OpcUa_BinarySchema_DoubleComplexNumberType_DataTypeVersion,12187,Variable
-OpcUa_BinarySchema_DoubleComplexNumberType_DictionaryFragment,12188,Variable
-ServerOnNetwork,12189,DataType
-FindServersOnNetworkRequest,12190,DataType
-FindServersOnNetworkResponse,12191,DataType
-RegisterServer2Request,12193,DataType
-RegisterServer2Response,12194,DataType
-ServerOnNetwork_Encoding_DefaultXml,12195,Object
-FindServersOnNetworkRequest_Encoding_DefaultXml,12196,Object
-FindServersOnNetworkResponse_Encoding_DefaultXml,12197,Object
-RegisterServer2Request_Encoding_DefaultXml,12199,Object
-RegisterServer2Response_Encoding_DefaultXml,12200,Object
-OpcUa_XmlSchema_ServerOnNetwork,12201,Variable
-OpcUa_XmlSchema_ServerOnNetwork_DataTypeVersion,12202,Variable
-OpcUa_XmlSchema_ServerOnNetwork_DictionaryFragment,12203,Variable
-ServerOnNetwork_Encoding_DefaultBinary,12207,Object
-FindServersOnNetworkRequest_Encoding_DefaultBinary,12208,Object
-FindServersOnNetworkResponse_Encoding_DefaultBinary,12209,Object
-RegisterServer2Request_Encoding_DefaultBinary,12211,Object
-RegisterServer2Response_Encoding_DefaultBinary,12212,Object
-OpcUa_BinarySchema_ServerOnNetwork,12213,Variable
-OpcUa_BinarySchema_ServerOnNetwork_DataTypeVersion,12214,Variable
-OpcUa_BinarySchema_ServerOnNetwork_DictionaryFragment,12215,Variable
-ProgressEventType_Context,12502,Variable
-ProgressEventType_Progress,12503,Variable
-OpenWithMasksMethodType,12513,Method
-OpenWithMasksMethodType_InputArguments,12514,Variable
-OpenWithMasksMethodType_OutputArguments,12515,Variable
-CloseAndUpdateMethodType,12516,Method
-CloseAndUpdateMethodType_OutputArguments,12517,Variable
-AddCertificateMethodType,12518,Method
-AddCertificateMethodType_InputArguments,12519,Variable
-RemoveCertificateMethodType,12520,Method
-RemoveCertificateMethodType_InputArguments,12521,Variable
-TrustListType,12522,ObjectType
-TrustListType_Size,12523,Variable
-TrustListType_OpenCount,12526,Variable
-TrustListType_Open,12527,Method
-TrustListType_Open_InputArguments,12528,Variable
-TrustListType_Open_OutputArguments,12529,Variable
-TrustListType_Close,12530,Method
-TrustListType_Close_InputArguments,12531,Variable
-TrustListType_Read,12532,Method
-TrustListType_Read_InputArguments,12533,Variable
-TrustListType_Read_OutputArguments,12534,Variable
-TrustListType_Write,12535,Method
-TrustListType_Write_InputArguments,12536,Variable
-TrustListType_GetPosition,12537,Method
-TrustListType_GetPosition_InputArguments,12538,Variable
-TrustListType_GetPosition_OutputArguments,12539,Variable
-TrustListType_SetPosition,12540,Method
-TrustListType_SetPosition_InputArguments,12541,Variable
-TrustListType_LastUpdateTime,12542,Variable
-TrustListType_OpenWithMasks,12543,Method
-TrustListType_OpenWithMasks_InputArguments,12544,Variable
-TrustListType_OpenWithMasks_OutputArguments,12545,Variable
-TrustListType_CloseAndUpdate,12546,Method
-TrustListType_CloseAndUpdate_OutputArguments,12547,Variable
-TrustListType_AddCertificate,12548,Method
-TrustListType_AddCertificate_InputArguments,12549,Variable
-TrustListType_RemoveCertificate,12550,Method
-TrustListType_RemoveCertificate_InputArguments,12551,Variable
-TrustListMasks,12552,DataType
-TrustListMasks_EnumValues,12553,Variable
-TrustListDataType,12554,DataType
-CertificateGroupType,12555,ObjectType
-CertificateType,12556,ObjectType
-ApplicationCertificateType,12557,ObjectType
-HttpsCertificateType,12558,ObjectType
-RsaMinApplicationCertificateType,12559,ObjectType
-RsaSha256ApplicationCertificateType,12560,ObjectType
-TrustListUpdatedAuditEventType,12561,ObjectType
-TrustListUpdatedAuditEventType_EventId,12562,Variable
-TrustListUpdatedAuditEventType_EventType,12563,Variable
-TrustListUpdatedAuditEventType_SourceNode,12564,Variable
-TrustListUpdatedAuditEventType_SourceName,12565,Variable
-TrustListUpdatedAuditEventType_Time,12566,Variable
-TrustListUpdatedAuditEventType_ReceiveTime,12567,Variable
-TrustListUpdatedAuditEventType_LocalTime,12568,Variable
-TrustListUpdatedAuditEventType_Message,12569,Variable
-TrustListUpdatedAuditEventType_Severity,12570,Variable
-TrustListUpdatedAuditEventType_ActionTimeStamp,12571,Variable
-TrustListUpdatedAuditEventType_Status,12572,Variable
-TrustListUpdatedAuditEventType_ServerId,12573,Variable
-TrustListUpdatedAuditEventType_ClientAuditEntryId,12574,Variable
-TrustListUpdatedAuditEventType_ClientUserId,12575,Variable
-TrustListUpdatedAuditEventType_MethodId,12576,Variable
-TrustListUpdatedAuditEventType_InputArguments,12577,Variable
-UpdateCertificateMethodType,12578,Method
-UpdateCertificateMethodType_InputArguments,12579,Variable
-UpdateCertificateMethodType_OutputArguments,12580,Variable
-ServerConfigurationType,12581,ObjectType
-ServerConfigurationType_SupportedPrivateKeyFormats,12583,Variable
-ServerConfigurationType_MaxTrustListSize,12584,Variable
-ServerConfigurationType_MulticastDnsEnabled,12585,Variable
-ServerConfigurationType_UpdateCertificate,12616,Method
-ServerConfigurationType_UpdateCertificate_InputArguments,12617,Variable
-ServerConfigurationType_UpdateCertificate_OutputArguments,12618,Variable
-CertificateUpdatedAuditEventType,12620,ObjectType
-CertificateUpdatedAuditEventType_EventId,12621,Variable
-CertificateUpdatedAuditEventType_EventType,12622,Variable
-CertificateUpdatedAuditEventType_SourceNode,12623,Variable
-CertificateUpdatedAuditEventType_SourceName,12624,Variable
-CertificateUpdatedAuditEventType_Time,12625,Variable
-CertificateUpdatedAuditEventType_ReceiveTime,12626,Variable
-CertificateUpdatedAuditEventType_LocalTime,12627,Variable
-CertificateUpdatedAuditEventType_Message,12628,Variable
-CertificateUpdatedAuditEventType_Severity,12629,Variable
-CertificateUpdatedAuditEventType_ActionTimeStamp,12630,Variable
-CertificateUpdatedAuditEventType_Status,12631,Variable
-CertificateUpdatedAuditEventType_ServerId,12632,Variable
-CertificateUpdatedAuditEventType_ClientAuditEntryId,12633,Variable
-CertificateUpdatedAuditEventType_ClientUserId,12634,Variable
-CertificateUpdatedAuditEventType_MethodId,12635,Variable
-CertificateUpdatedAuditEventType_InputArguments,12636,Variable
-ServerConfiguration,12637,Object
-ServerConfiguration_SupportedPrivateKeyFormats,12639,Variable
-ServerConfiguration_MaxTrustListSize,12640,Variable
-ServerConfiguration_MulticastDnsEnabled,12641,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList,12642,Object
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Size,12643,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount,12646,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open,12647,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments,12648,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments,12649,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close,12650,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments,12651,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read,12652,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments,12653,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments,12654,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write,12655,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments,12656,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition,12657,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments,12658,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments,12659,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition,12660,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments,12661,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime,12662,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks,12663,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments,12664,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments,12665,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate,12666,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments,12667,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate,12668,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments,12669,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate,12670,Method
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments,12671,Variable
-TrustListDataType_Encoding_DefaultXml,12676,Object
-OpcUa_XmlSchema_TrustListDataType,12677,Variable
-OpcUa_XmlSchema_TrustListDataType_DataTypeVersion,12678,Variable
-OpcUa_XmlSchema_TrustListDataType_DictionaryFragment,12679,Variable
-TrustListDataType_Encoding_DefaultBinary,12680,Object
-OpcUa_BinarySchema_TrustListDataType,12681,Variable
-OpcUa_BinarySchema_TrustListDataType_DataTypeVersion,12682,Variable
-OpcUa_BinarySchema_TrustListDataType_DictionaryFragment,12683,Variable
-ServerType_Namespaces_AddressSpaceFile_Writable,12684,Variable
-ServerType_Namespaces_AddressSpaceFile_UserWritable,12685,Variable
-FileType_Writable,12686,Variable
-FileType_UserWritable,12687,Variable
-AddressSpaceFileType_Writable,12688,Variable
-AddressSpaceFileType_UserWritable,12689,Variable
-NamespaceMetadataType_NamespaceFile_Writable,12690,Variable
-NamespaceMetadataType_NamespaceFile_UserWritable,12691,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Writable,12692,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_UserWritable,12693,Variable
-NamespacesType_AddressSpaceFile_Writable,12694,Variable
-NamespacesType_AddressSpaceFile_UserWritable,12695,Variable
-Server_Namespaces_AddressSpaceFile_Writable,12696,Variable
-Server_Namespaces_AddressSpaceFile_UserWritable,12697,Variable
-TrustListType_Writable,12698,Variable
-TrustListType_UserWritable,12699,Variable
-CloseAndUpdateMethodType_InputArguments,12704,Variable
-TrustListType_CloseAndUpdate_InputArguments,12705,Variable
-ServerConfigurationType_ServerCapabilities,12708,Variable
-ServerConfiguration_ServerCapabilities,12710,Variable
-OpcUa_XmlSchema_RelativePathElement,12712,Variable
-OpcUa_XmlSchema_RelativePathElement_DataTypeVersion,12713,Variable
-OpcUa_XmlSchema_RelativePathElement_DictionaryFragment,12714,Variable
-OpcUa_XmlSchema_RelativePath,12715,Variable
-OpcUa_XmlSchema_RelativePath_DataTypeVersion,12716,Variable
-OpcUa_XmlSchema_RelativePath_DictionaryFragment,12717,Variable
-OpcUa_BinarySchema_RelativePathElement,12718,Variable
-OpcUa_BinarySchema_RelativePathElement_DataTypeVersion,12719,Variable
-OpcUa_BinarySchema_RelativePathElement_DictionaryFragment,12720,Variable
-OpcUa_BinarySchema_RelativePath,12721,Variable
-OpcUa_BinarySchema_RelativePath_DataTypeVersion,12722,Variable
-OpcUa_BinarySchema_RelativePath_DictionaryFragment,12723,Variable
-ServerConfigurationType_CreateSigningRequest,12731,Method
-ServerConfigurationType_CreateSigningRequest_InputArguments,12732,Variable
-ServerConfigurationType_CreateSigningRequest_OutputArguments,12733,Variable
-ServerConfigurationType_ApplyChanges,12734,Method
-ServerConfiguration_CreateSigningRequest,12737,Method
-ServerConfiguration_CreateSigningRequest_InputArguments,12738,Variable
-ServerConfiguration_CreateSigningRequest_OutputArguments,12739,Variable
-ServerConfiguration_ApplyChanges,12740,Method
-CreateSigningRequestMethodType,12741,Method
-CreateSigningRequestMethodType_InputArguments,12742,Variable
-CreateSigningRequestMethodType_OutputArguments,12743,Variable
-OptionSetValues,12745,Variable
-ServerType_SetSubscriptionDurable,12746,Method
-ServerType_SetSubscriptionDurable_InputArguments,12747,Variable
-ServerType_SetSubscriptionDurable_OutputArguments,12748,Variable
-Server_SetSubscriptionDurable,12749,Method
-Server_SetSubscriptionDurable_InputArguments,12750,Variable
-Server_SetSubscriptionDurable_OutputArguments,12751,Variable
-SetSubscriptionDurableMethodType,12752,Method
-SetSubscriptionDurableMethodType_InputArguments,12753,Variable
-SetSubscriptionDurableMethodType_OutputArguments,12754,Variable
-OptionSet,12755,DataType
-Union,12756,DataType
-OptionSet_Encoding_DefaultXml,12757,Object
-Union_Encoding_DefaultXml,12758,Object
-OpcUa_XmlSchema_OptionSet,12759,Variable
-OpcUa_XmlSchema_OptionSet_DataTypeVersion,12760,Variable
-OpcUa_XmlSchema_OptionSet_DictionaryFragment,12761,Variable
-OpcUa_XmlSchema_Union,12762,Variable
-OpcUa_XmlSchema_Union_DataTypeVersion,12763,Variable
-OpcUa_XmlSchema_Union_DictionaryFragment,12764,Variable
-OptionSet_Encoding_DefaultBinary,12765,Object
-Union_Encoding_DefaultBinary,12766,Object
-OpcUa_BinarySchema_OptionSet,12767,Variable
-OpcUa_BinarySchema_OptionSet_DataTypeVersion,12768,Variable
-OpcUa_BinarySchema_OptionSet_DictionaryFragment,12769,Variable
-OpcUa_BinarySchema_Union,12770,Variable
-OpcUa_BinarySchema_Union_DataTypeVersion,12771,Variable
-OpcUa_BinarySchema_Union_DictionaryFragment,12772,Variable
-GetRejectedListMethodType,12773,Method
-GetRejectedListMethodType_OutputArguments,12774,Variable
-ServerConfigurationType_GetRejectedList,12775,Method
-ServerConfigurationType_GetRejectedList_OutputArguments,12776,Variable
-ServerConfiguration_GetRejectedList,12777,Method
-ServerConfiguration_GetRejectedList_OutputArguments,12778,Variable
-SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics,12779,Variable
-SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SamplingInterval,12780,Variable
-SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SampledMonitoredItemsCount,12781,Variable
-SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_MaxSampledMonitoredItemsCount,12782,Variable
-SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_DisabledMonitoredItemsSamplingCount,12783,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics,12784,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SessionId,12785,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SubscriptionId,12786,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_Priority,12787,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingInterval,12788,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxKeepAliveCount,12789,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxLifetimeCount,12790,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxNotificationsPerPublish,12791,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingEnabled,12792,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_ModifyCount,12793,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EnableCount,12794,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisableCount,12795,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishRequestCount,12796,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageRequestCount,12797,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageCount,12798,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferRequestCount,12799,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToAltClientCount,12800,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToSameClientCount,12801,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishRequestCount,12802,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DataChangeNotificationsCount,12803,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventNotificationsCount,12804,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NotificationsCount,12805,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_LatePublishRequestCount,12806,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentKeepAliveCount,12807,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentLifetimeCount,12808,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_UnacknowledgedMessageCount,12809,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DiscardedMessageCount,12810,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoredItemCount,12811,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisabledMonitoredItemCount,12812,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoringQueueOverflowCount,12813,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NextSequenceNumber,12814,Variable
-SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventQueueOverFlowCount,12815,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics,12816,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_SessionId,12817,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_SessionName,12818,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ClientDescription,12819,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ServerUri,12820,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_EndpointUrl,12821,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_LocaleIds,12822,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ActualSessionTimeout,12823,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_MaxResponseMessageSize,12824,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ClientConnectionTime,12825,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ClientLastContactTime,12826,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_CurrentSubscriptionsCount,12827,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_CurrentMonitoredItemsCount,12828,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_CurrentPublishRequestsInQueue,12829,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_TotalRequestCount,12830,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_UnauthorizedRequestCount,12831,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ReadCount,12832,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_HistoryReadCount,12833,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_WriteCount,12834,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_HistoryUpdateCount,12835,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_CallCount,12836,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_CreateMonitoredItemsCount,12837,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ModifyMonitoredItemsCount,12838,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_SetMonitoringModeCount,12839,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_SetTriggeringCount,12840,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_DeleteMonitoredItemsCount,12841,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_CreateSubscriptionCount,12842,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_ModifySubscriptionCount,12843,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_SetPublishingModeCount,12844,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_PublishCount,12845,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_RepublishCount,12846,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_TransferSubscriptionsCount,12847,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_DeleteSubscriptionsCount,12848,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_AddNodesCount,12849,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_AddReferencesCount,12850,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_DeleteNodesCount,12851,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_DeleteReferencesCount,12852,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_BrowseCount,12853,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_BrowseNextCount,12854,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount,12855,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_QueryFirstCount,12856,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_QueryNextCount,12857,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_RegisterNodesCount,12858,Variable
-SessionDiagnosticsArrayType_SessionDiagnostics_UnregisterNodesCount,12859,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics,12860,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SessionId,12861,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdOfSession,12862,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdHistory,12863,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_AuthenticationMechanism,12864,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_Encoding,12865,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_TransportProtocol,12866,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityMode,12867,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityPolicyUri,12868,Variable
-SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientCertificate,12869,Variable
-ServerType_ResendData,12871,Method
-ServerType_ResendData_InputArguments,12872,Variable
-Server_ResendData,12873,Method
-Server_ResendData_InputArguments,12874,Variable
-ResendDataMethodType,12875,Method
-ResendDataMethodType_InputArguments,12876,Variable
-NormalizedString,12877,DataType
-DecimalString,12878,DataType
-DurationString,12879,DataType
-TimeString,12880,DataType
-DateString,12881,DataType
-ServerType_EstimatedReturnTime,12882,Variable
-ServerType_RequestServerStateChange,12883,Method
-ServerType_RequestServerStateChange_InputArguments,12884,Variable
-Server_EstimatedReturnTime,12885,Variable
-Server_RequestServerStateChange,12886,Method
-Server_RequestServerStateChange_InputArguments,12887,Variable
-RequestServerStateChangeMethodType,12888,Method
-RequestServerStateChangeMethodType_InputArguments,12889,Variable
-DiscoveryConfiguration,12890,DataType
-MdnsDiscoveryConfiguration,12891,DataType
-DiscoveryConfiguration_Encoding_DefaultXml,12892,Object
-MdnsDiscoveryConfiguration_Encoding_DefaultXml,12893,Object
-OpcUa_XmlSchema_DiscoveryConfiguration,12894,Variable
-OpcUa_XmlSchema_DiscoveryConfiguration_DataTypeVersion,12895,Variable
-OpcUa_XmlSchema_DiscoveryConfiguration_DictionaryFragment,12896,Variable
-OpcUa_XmlSchema_MdnsDiscoveryConfiguration,12897,Variable
-OpcUa_XmlSchema_MdnsDiscoveryConfiguration_DataTypeVersion,12898,Variable
-OpcUa_XmlSchema_MdnsDiscoveryConfiguration_DictionaryFragment,12899,Variable
-DiscoveryConfiguration_Encoding_DefaultBinary,12900,Object
-MdnsDiscoveryConfiguration_Encoding_DefaultBinary,12901,Object
-OpcUa_BinarySchema_DiscoveryConfiguration,12902,Variable
-OpcUa_BinarySchema_DiscoveryConfiguration_DataTypeVersion,12903,Variable
-OpcUa_BinarySchema_DiscoveryConfiguration_DictionaryFragment,12904,Variable
-OpcUa_BinarySchema_MdnsDiscoveryConfiguration,12905,Variable
-OpcUa_BinarySchema_MdnsDiscoveryConfiguration_DataTypeVersion,12906,Variable
-OpcUa_BinarySchema_MdnsDiscoveryConfiguration_DictionaryFragment,12907,Variable
-MaxByteStringLength,12908,Variable
-ServerType_ServerCapabilities_MaxByteStringLength,12909,Variable
-ServerCapabilitiesType_MaxByteStringLength,12910,Variable
-Server_ServerCapabilities_MaxByteStringLength,12911,Variable
-ConditionType_ConditionRefresh2,12912,Method
-ConditionType_ConditionRefresh2_InputArguments,12913,Variable
-ConditionRefresh2MethodType,12914,Method
-ConditionRefresh2MethodType_InputArguments,12915,Variable
-DialogConditionType_ConditionRefresh2,12916,Method
-DialogConditionType_ConditionRefresh2_InputArguments,12917,Variable
-AcknowledgeableConditionType_ConditionRefresh2,12918,Method
-AcknowledgeableConditionType_ConditionRefresh2_InputArguments,12919,Variable
-AlarmConditionType_ConditionRefresh2,12984,Method
-AlarmConditionType_ConditionRefresh2_InputArguments,12985,Variable
-LimitAlarmType_ConditionRefresh2,12986,Method
-LimitAlarmType_ConditionRefresh2_InputArguments,12987,Variable
-ExclusiveLimitAlarmType_ConditionRefresh2,12988,Method
-ExclusiveLimitAlarmType_ConditionRefresh2_InputArguments,12989,Variable
-NonExclusiveLimitAlarmType_ConditionRefresh2,12990,Method
-NonExclusiveLimitAlarmType_ConditionRefresh2_InputArguments,12991,Variable
-NonExclusiveLevelAlarmType_ConditionRefresh2,12992,Method
-NonExclusiveLevelAlarmType_ConditionRefresh2_InputArguments,12993,Variable
-ExclusiveLevelAlarmType_ConditionRefresh2,12994,Method
-ExclusiveLevelAlarmType_ConditionRefresh2_InputArguments,12995,Variable
-NonExclusiveDeviationAlarmType_ConditionRefresh2,12996,Method
-NonExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments,12997,Variable
-ExclusiveDeviationAlarmType_ConditionRefresh2,12998,Method
-ExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments,12999,Variable
-NonExclusiveRateOfChangeAlarmType_ConditionRefresh2,13000,Method
-NonExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments,13001,Variable
-ExclusiveRateOfChangeAlarmType_ConditionRefresh2,13002,Method
-ExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments,13003,Variable
-DiscreteAlarmType_ConditionRefresh2,13004,Method
-DiscreteAlarmType_ConditionRefresh2_InputArguments,13005,Variable
-OffNormalAlarmType_ConditionRefresh2,13006,Method
-OffNormalAlarmType_ConditionRefresh2_InputArguments,13007,Variable
-SystemOffNormalAlarmType_ConditionRefresh2,13008,Method
-SystemOffNormalAlarmType_ConditionRefresh2_InputArguments,13009,Variable
-TripAlarmType_ConditionRefresh2,13010,Method
-TripAlarmType_ConditionRefresh2_InputArguments,13011,Variable
-CertificateExpirationAlarmType,13225,ObjectType
-CertificateExpirationAlarmType_EventId,13226,Variable
-CertificateExpirationAlarmType_EventType,13227,Variable
-CertificateExpirationAlarmType_SourceNode,13228,Variable
-CertificateExpirationAlarmType_SourceName,13229,Variable
-CertificateExpirationAlarmType_Time,13230,Variable
-CertificateExpirationAlarmType_ReceiveTime,13231,Variable
-CertificateExpirationAlarmType_LocalTime,13232,Variable
-CertificateExpirationAlarmType_Message,13233,Variable
-CertificateExpirationAlarmType_Severity,13234,Variable
-CertificateExpirationAlarmType_ConditionClassId,13235,Variable
-CertificateExpirationAlarmType_ConditionClassName,13236,Variable
-CertificateExpirationAlarmType_ConditionName,13237,Variable
-CertificateExpirationAlarmType_BranchId,13238,Variable
-CertificateExpirationAlarmType_Retain,13239,Variable
-CertificateExpirationAlarmType_EnabledState,13240,Variable
-CertificateExpirationAlarmType_EnabledState_Id,13241,Variable
-CertificateExpirationAlarmType_EnabledState_Name,13242,Variable
-CertificateExpirationAlarmType_EnabledState_Number,13243,Variable
-CertificateExpirationAlarmType_EnabledState_EffectiveDisplayName,13244,Variable
-CertificateExpirationAlarmType_EnabledState_TransitionTime,13245,Variable
-CertificateExpirationAlarmType_EnabledState_EffectiveTransitionTime,13246,Variable
-CertificateExpirationAlarmType_EnabledState_TrueState,13247,Variable
-CertificateExpirationAlarmType_EnabledState_FalseState,13248,Variable
-CertificateExpirationAlarmType_Quality,13249,Variable
-CertificateExpirationAlarmType_Quality_SourceTimestamp,13250,Variable
-CertificateExpirationAlarmType_LastSeverity,13251,Variable
-CertificateExpirationAlarmType_LastSeverity_SourceTimestamp,13252,Variable
-CertificateExpirationAlarmType_Comment,13253,Variable
-CertificateExpirationAlarmType_Comment_SourceTimestamp,13254,Variable
-CertificateExpirationAlarmType_ClientUserId,13255,Variable
-CertificateExpirationAlarmType_Disable,13256,Method
-CertificateExpirationAlarmType_Enable,13257,Method
-CertificateExpirationAlarmType_AddComment,13258,Method
-CertificateExpirationAlarmType_AddComment_InputArguments,13259,Variable
-CertificateExpirationAlarmType_ConditionRefresh,13260,Method
-CertificateExpirationAlarmType_ConditionRefresh_InputArguments,13261,Variable
-CertificateExpirationAlarmType_ConditionRefresh2,13262,Method
-CertificateExpirationAlarmType_ConditionRefresh2_InputArguments,13263,Variable
-CertificateExpirationAlarmType_AckedState,13264,Variable
-CertificateExpirationAlarmType_AckedState_Id,13265,Variable
-CertificateExpirationAlarmType_AckedState_Name,13266,Variable
-CertificateExpirationAlarmType_AckedState_Number,13267,Variable
-CertificateExpirationAlarmType_AckedState_EffectiveDisplayName,13268,Variable
-CertificateExpirationAlarmType_AckedState_TransitionTime,13269,Variable
-CertificateExpirationAlarmType_AckedState_EffectiveTransitionTime,13270,Variable
-CertificateExpirationAlarmType_AckedState_TrueState,13271,Variable
-CertificateExpirationAlarmType_AckedState_FalseState,13272,Variable
-CertificateExpirationAlarmType_ConfirmedState,13273,Variable
-CertificateExpirationAlarmType_ConfirmedState_Id,13274,Variable
-CertificateExpirationAlarmType_ConfirmedState_Name,13275,Variable
-CertificateExpirationAlarmType_ConfirmedState_Number,13276,Variable
-CertificateExpirationAlarmType_ConfirmedState_EffectiveDisplayName,13277,Variable
-CertificateExpirationAlarmType_ConfirmedState_TransitionTime,13278,Variable
-CertificateExpirationAlarmType_ConfirmedState_EffectiveTransitionTime,13279,Variable
-CertificateExpirationAlarmType_ConfirmedState_TrueState,13280,Variable
-CertificateExpirationAlarmType_ConfirmedState_FalseState,13281,Variable
-CertificateExpirationAlarmType_Acknowledge,13282,Method
-CertificateExpirationAlarmType_Acknowledge_InputArguments,13283,Variable
-CertificateExpirationAlarmType_Confirm,13284,Method
-CertificateExpirationAlarmType_Confirm_InputArguments,13285,Variable
-CertificateExpirationAlarmType_ActiveState,13286,Variable
-CertificateExpirationAlarmType_ActiveState_Id,13287,Variable
-CertificateExpirationAlarmType_ActiveState_Name,13288,Variable
-CertificateExpirationAlarmType_ActiveState_Number,13289,Variable
-CertificateExpirationAlarmType_ActiveState_EffectiveDisplayName,13290,Variable
-CertificateExpirationAlarmType_ActiveState_TransitionTime,13291,Variable
-CertificateExpirationAlarmType_ActiveState_EffectiveTransitionTime,13292,Variable
-CertificateExpirationAlarmType_ActiveState_TrueState,13293,Variable
-CertificateExpirationAlarmType_ActiveState_FalseState,13294,Variable
-CertificateExpirationAlarmType_InputNode,13295,Variable
-CertificateExpirationAlarmType_SuppressedState,13296,Variable
-CertificateExpirationAlarmType_SuppressedState_Id,13297,Variable
-CertificateExpirationAlarmType_SuppressedState_Name,13298,Variable
-CertificateExpirationAlarmType_SuppressedState_Number,13299,Variable
-CertificateExpirationAlarmType_SuppressedState_EffectiveDisplayName,13300,Variable
-CertificateExpirationAlarmType_SuppressedState_TransitionTime,13301,Variable
-CertificateExpirationAlarmType_SuppressedState_EffectiveTransitionTime,13302,Variable
-CertificateExpirationAlarmType_SuppressedState_TrueState,13303,Variable
-CertificateExpirationAlarmType_SuppressedState_FalseState,13304,Variable
-CertificateExpirationAlarmType_ShelvingState,13305,Object
-CertificateExpirationAlarmType_ShelvingState_CurrentState,13306,Variable
-CertificateExpirationAlarmType_ShelvingState_CurrentState_Id,13307,Variable
-CertificateExpirationAlarmType_ShelvingState_CurrentState_Name,13308,Variable
-CertificateExpirationAlarmType_ShelvingState_CurrentState_Number,13309,Variable
-CertificateExpirationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName,13310,Variable
-CertificateExpirationAlarmType_ShelvingState_LastTransition,13311,Variable
-CertificateExpirationAlarmType_ShelvingState_LastTransition_Id,13312,Variable
-CertificateExpirationAlarmType_ShelvingState_LastTransition_Name,13313,Variable
-CertificateExpirationAlarmType_ShelvingState_LastTransition_Number,13314,Variable
-CertificateExpirationAlarmType_ShelvingState_LastTransition_TransitionTime,13315,Variable
-CertificateExpirationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime,13316,Variable
-CertificateExpirationAlarmType_ShelvingState_UnshelveTime,13317,Variable
-CertificateExpirationAlarmType_ShelvingState_Unshelve,13318,Method
-CertificateExpirationAlarmType_ShelvingState_OneShotShelve,13319,Method
-CertificateExpirationAlarmType_ShelvingState_TimedShelve,13320,Method
-CertificateExpirationAlarmType_ShelvingState_TimedShelve_InputArguments,13321,Variable
-CertificateExpirationAlarmType_SuppressedOrShelved,13322,Variable
-CertificateExpirationAlarmType_MaxTimeShelved,13323,Variable
-CertificateExpirationAlarmType_NormalState,13324,Variable
-CertificateExpirationAlarmType_ExpirationDate,13325,Variable
-CertificateExpirationAlarmType_CertificateType,13326,Variable
-CertificateExpirationAlarmType_Certificate,13327,Variable
-ServerType_Namespaces_AddressSpaceFile_MimeType,13340,Variable
-FileType_MimeType,13341,Variable
-CreateDirectoryMethodType,13342,Method
-CreateDirectoryMethodType_InputArguments,13343,Variable
-CreateDirectoryMethodType_OutputArguments,13344,Variable
-CreateFileMethodType,13345,Method
-CreateFileMethodType_InputArguments,13346,Variable
-CreateFileMethodType_OutputArguments,13347,Variable
-DeleteFileMethodType,13348,Method
-DeleteFileMethodType_InputArguments,13349,Variable
-MoveOrCopyMethodType,13350,Method
-MoveOrCopyMethodType_InputArguments,13351,Variable
-MoveOrCopyMethodType_OutputArguments,13352,Variable
-FileDirectoryType,13353,ObjectType
-FileDirectoryType_FileDirectoryName_Placeholder,13354,Object
-FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory,13355,Method
-FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_InputArguments,13356,Variable
-FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments,13357,Variable
-FileDirectoryType_FileDirectoryName_Placeholder_CreateFile,13358,Method
-FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_InputArguments,13359,Variable
-FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_OutputArguments,13360,Variable
-FileDirectoryType_FileDirectoryName_Placeholder_Delete,13361,Method
-FileDirectoryType_FileDirectoryName_Placeholder_Delete_InputArguments,13362,Variable
-FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy,13363,Method
-FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments,13364,Variable
-FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments,13365,Variable
-FileDirectoryType_FileName_Placeholder,13366,Object
-FileDirectoryType_FileName_Placeholder_Size,13367,Variable
-FileDirectoryType_FileName_Placeholder_Writable,13368,Variable
-FileDirectoryType_FileName_Placeholder_UserWritable,13369,Variable
-FileDirectoryType_FileName_Placeholder_OpenCount,13370,Variable
-FileDirectoryType_FileName_Placeholder_MimeType,13371,Variable
-FileDirectoryType_FileName_Placeholder_Open,13372,Method
-FileDirectoryType_FileName_Placeholder_Open_InputArguments,13373,Variable
-FileDirectoryType_FileName_Placeholder_Open_OutputArguments,13374,Variable
-FileDirectoryType_FileName_Placeholder_Close,13375,Method
-FileDirectoryType_FileName_Placeholder_Close_InputArguments,13376,Variable
-FileDirectoryType_FileName_Placeholder_Read,13377,Method
-FileDirectoryType_FileName_Placeholder_Read_InputArguments,13378,Variable
-FileDirectoryType_FileName_Placeholder_Read_OutputArguments,13379,Variable
-FileDirectoryType_FileName_Placeholder_Write,13380,Method
-FileDirectoryType_FileName_Placeholder_Write_InputArguments,13381,Variable
-FileDirectoryType_FileName_Placeholder_GetPosition,13382,Method
-FileDirectoryType_FileName_Placeholder_GetPosition_InputArguments,13383,Variable
-FileDirectoryType_FileName_Placeholder_GetPosition_OutputArguments,13384,Variable
-FileDirectoryType_FileName_Placeholder_SetPosition,13385,Method
-FileDirectoryType_FileName_Placeholder_SetPosition_InputArguments,13386,Variable
-FileDirectoryType_CreateDirectory,13387,Method
-FileDirectoryType_CreateDirectory_InputArguments,13388,Variable
-FileDirectoryType_CreateDirectory_OutputArguments,13389,Variable
-FileDirectoryType_CreateFile,13390,Method
-FileDirectoryType_CreateFile_InputArguments,13391,Variable
-FileDirectoryType_CreateFile_OutputArguments,13392,Variable
-FileDirectoryType_Delete,13393,Method
-FileDirectoryType_Delete_InputArguments,13394,Variable
-FileDirectoryType_MoveOrCopy,13395,Method
-FileDirectoryType_MoveOrCopy_InputArguments,13396,Variable
-FileDirectoryType_MoveOrCopy_OutputArguments,13397,Variable
-AddressSpaceFileType_MimeType,13398,Variable
-NamespaceMetadataType_NamespaceFile_MimeType,13399,Variable
-NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_MimeType,13400,Variable
-NamespacesType_AddressSpaceFile_MimeType,13401,Variable
-Server_Namespaces_AddressSpaceFile_MimeType,13402,Variable
-TrustListType_MimeType,13403,Variable
-CertificateGroupType_TrustList,13599,Object
-CertificateGroupType_TrustList_Size,13600,Variable
-CertificateGroupType_TrustList_Writable,13601,Variable
-CertificateGroupType_TrustList_UserWritable,13602,Variable
-CertificateGroupType_TrustList_OpenCount,13603,Variable
-CertificateGroupType_TrustList_MimeType,13604,Variable
-CertificateGroupType_TrustList_Open,13605,Method
-CertificateGroupType_TrustList_Open_InputArguments,13606,Variable
-CertificateGroupType_TrustList_Open_OutputArguments,13607,Variable
-CertificateGroupType_TrustList_Close,13608,Method
-CertificateGroupType_TrustList_Close_InputArguments,13609,Variable
-CertificateGroupType_TrustList_Read,13610,Method
-CertificateGroupType_TrustList_Read_InputArguments,13611,Variable
-CertificateGroupType_TrustList_Read_OutputArguments,13612,Variable
-CertificateGroupType_TrustList_Write,13613,Method
-CertificateGroupType_TrustList_Write_InputArguments,13614,Variable
-CertificateGroupType_TrustList_GetPosition,13615,Method
-CertificateGroupType_TrustList_GetPosition_InputArguments,13616,Variable
-CertificateGroupType_TrustList_GetPosition_OutputArguments,13617,Variable
-CertificateGroupType_TrustList_SetPosition,13618,Method
-CertificateGroupType_TrustList_SetPosition_InputArguments,13619,Variable
-CertificateGroupType_TrustList_LastUpdateTime,13620,Variable
-CertificateGroupType_TrustList_OpenWithMasks,13621,Method
-CertificateGroupType_TrustList_OpenWithMasks_InputArguments,13622,Variable
-CertificateGroupType_TrustList_OpenWithMasks_OutputArguments,13623,Variable
-CertificateGroupType_TrustList_CloseAndUpdate,13624,Method
-CertificateGroupType_TrustList_CloseAndUpdate_InputArguments,13625,Variable
-CertificateGroupType_TrustList_CloseAndUpdate_OutputArguments,13626,Variable
-CertificateGroupType_TrustList_AddCertificate,13627,Method
-CertificateGroupType_TrustList_AddCertificate_InputArguments,13628,Variable
-CertificateGroupType_TrustList_RemoveCertificate,13629,Method
-CertificateGroupType_TrustList_RemoveCertificate_InputArguments,13630,Variable
-CertificateGroupType_CertificateTypes,13631,Variable
-CertificateUpdatedAuditEventType_CertificateGroup,13735,Variable
-CertificateUpdatedAuditEventType_CertificateType,13736,Variable
-ServerConfiguration_UpdateCertificate,13737,Method
-ServerConfiguration_UpdateCertificate_InputArguments,13738,Variable
-ServerConfiguration_UpdateCertificate_OutputArguments,13739,Variable
-CertificateGroupFolderType,13813,ObjectType
-CertificateGroupFolderType_DefaultApplicationGroup,13814,Object
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList,13815,Object
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Size,13816,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Writable,13817,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_UserWritable,13818,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenCount,13819,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_MimeType,13820,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open,13821,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_InputArguments,13822,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_OutputArguments,13823,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close,13824,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close_InputArguments,13825,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read,13826,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_InputArguments,13827,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_OutputArguments,13828,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write,13829,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write_InputArguments,13830,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition,13831,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_InputArguments,13832,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments,13833,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition,13834,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition_InputArguments,13835,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_LastUpdateTime,13836,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks,13837,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments,13838,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments,13839,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate,13840,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments,13841,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments,13842,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate,13843,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments,13844,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate,13845,Method
-CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments,13846,Variable
-CertificateGroupFolderType_DefaultApplicationGroup_CertificateTypes,13847,Variable
-CertificateGroupFolderType_DefaultHttpsGroup,13848,Object
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList,13849,Object
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Size,13850,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Writable,13851,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_UserWritable,13852,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenCount,13853,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_MimeType,13854,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open,13855,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_InputArguments,13856,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_OutputArguments,13857,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close,13858,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close_InputArguments,13859,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read,13860,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_InputArguments,13861,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_OutputArguments,13862,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write,13863,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write_InputArguments,13864,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition,13865,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_InputArguments,13866,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments,13867,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition,13868,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition_InputArguments,13869,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_LastUpdateTime,13870,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks,13871,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments,13872,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments,13873,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate,13874,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments,13875,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments,13876,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate,13877,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments,13878,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate,13879,Method
-CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments,13880,Variable
-CertificateGroupFolderType_DefaultHttpsGroup_CertificateTypes,13881,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup,13882,Object
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList,13883,Object
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Size,13884,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Writable,13885,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_UserWritable,13886,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenCount,13887,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_MimeType,13888,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open,13889,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_InputArguments,13890,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_OutputArguments,13891,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close,13892,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close_InputArguments,13893,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read,13894,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_InputArguments,13895,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_OutputArguments,13896,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write,13897,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write_InputArguments,13898,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition,13899,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments,13900,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments,13901,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition,13902,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments,13903,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_LastUpdateTime,13904,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks,13905,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments,13906,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments,13907,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate,13908,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments,13909,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments,13910,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate,13911,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments,13912,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate,13913,Method
-CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments,13914,Variable
-CertificateGroupFolderType_DefaultUserTokenGroup_CertificateTypes,13915,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder,13916,Object
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList,13917,Object
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Size,13918,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Writable,13919,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_UserWritable,13920,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenCount,13921,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_MimeType,13922,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open,13923,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_InputArguments,13924,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_OutputArguments,13925,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close,13926,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close_InputArguments,13927,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read,13928,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_InputArguments,13929,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_OutputArguments,13930,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write,13931,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write_InputArguments,13932,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition,13933,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_InputArguments,13934,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_OutputArguments,13935,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition,13936,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition_InputArguments,13937,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_LastUpdateTime,13938,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks,13939,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_InputArguments,13940,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_OutputArguments,13941,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate,13942,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_InputArguments,13943,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_OutputArguments,13944,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate,13945,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate_InputArguments,13946,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate,13947,Method
-CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate_InputArguments,13948,Variable
-CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateTypes,13949,Variable
-ServerConfigurationType_CertificateGroups,13950,Object
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup,13951,Object
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList,13952,Object
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Size,13953,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable,13954,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable,13955,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount,13956,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_MimeType,13957,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open,13958,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments,13959,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments,13960,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close,13961,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments,13962,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read,13963,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments,13964,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments,13965,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write,13966,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments,13967,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition,13968,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments,13969,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments,13970,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition,13971,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments,13972,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime,13973,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks,13974,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments,13975,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments,13976,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate,13977,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments,13978,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments,13979,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate,13980,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments,13981,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate,13982,Method
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments,13983,Variable
-ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateTypes,13984,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup,13985,Object
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList,13986,Object
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Size,13987,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable,13988,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable,13989,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount,13990,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_MimeType,13991,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open,13992,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments,13993,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments,13994,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close,13995,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments,13996,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read,13997,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments,13998,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments,13999,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write,14000,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments,14001,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition,14002,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments,14003,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments,14004,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition,14005,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments,14006,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime,14007,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks,14008,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments,14009,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments,14010,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate,14011,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments,14012,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments,14013,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate,14014,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments,14015,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate,14016,Method
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments,14017,Variable
-ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateTypes,14018,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup,14019,Object
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList,14020,Object
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size,14021,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable,14022,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable,14023,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount,14024,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_MimeType,14025,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open,14026,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments,14027,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments,14028,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close,14029,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments,14030,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read,14031,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments,14032,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments,14033,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write,14034,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments,14035,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition,14036,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments,14037,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments,14038,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition,14039,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments,14040,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime,14041,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks,14042,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments,14043,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments,14044,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate,14045,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments,14046,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments,14047,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate,14048,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments,14049,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate,14050,Method
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments,14051,Variable
-ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes,14052,Variable
-ServerConfiguration_CertificateGroups,14053,Object
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup,14088,Object
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList,14089,Object
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Size,14090,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Writable,14091,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable,14092,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount,14093,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_MimeType,14094,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open,14095,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments,14096,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments,14097,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close,14098,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments,14099,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read,14100,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments,14101,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments,14102,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write,14103,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments,14104,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition,14105,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments,14106,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments,14107,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition,14108,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments,14109,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime,14110,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks,14111,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments,14112,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments,14113,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate,14114,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments,14115,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments,14116,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate,14117,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments,14118,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate,14119,Method
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments,14120,Variable
-ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateTypes,14121,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup,14122,Object
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList,14123,Object
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Size,14124,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable,14125,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable,14126,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount,14127,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_MimeType,14128,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open,14129,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments,14130,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments,14131,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close,14132,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments,14133,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read,14134,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments,14135,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments,14136,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write,14137,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments,14138,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition,14139,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments,14140,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments,14141,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition,14142,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments,14143,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime,14144,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks,14145,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments,14146,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments,14147,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate,14148,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments,14149,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments,14150,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate,14151,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments,14152,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate,14153,Method
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments,14154,Variable
-ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateTypes,14155,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup,14156,Object
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Writable,14157,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable,14158,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_MimeType,14159,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments,14160,Variable
-ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateTypes,14161,Variable
-AuditCreateSessionEventType_SessionId,14413,Variable
-AuditUrlMismatchEventType_SessionId,14414,Variable
-Server_ServerRedundancy_ServerNetworkGroups,14415,Variable
-CertificateExpirationAlarmType_ExpirationLimit,14900,Variable
-Server_Namespaces_OPCUANamespaceUri,15182,Object
-Server_Namespaces_OPCUANamespaceUri_NamespaceUri,15183,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceVersion,15184,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespacePublicationDate,15185,Variable
-Server_Namespaces_OPCUANamespaceUri_IsNamespaceSubset,15186,Variable
-Server_Namespaces_OPCUANamespaceUri_StaticNodeIdTypes,15187,Variable
-Server_Namespaces_OPCUANamespaceUri_StaticNumericNodeIdRange,15188,Variable
-Server_Namespaces_OPCUANamespaceUri_StaticStringNodeIdPattern,15189,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile,15190,Object
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Size,15191,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Writable,15192,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_UserWritable,15193,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_OpenCount,15194,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_MimeType,15195,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Open,15196,Method
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Open_InputArguments,15197,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Open_OutputArguments,15198,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Close,15199,Method
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Close_InputArguments,15200,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Read,15201,Method
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Read_InputArguments,15202,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Read_OutputArguments,15203,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Write,15204,Method
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Write_InputArguments,15205,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_GetPosition,15206,Method
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_GetPosition_InputArguments,15207,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_GetPosition_OutputArguments,15208,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_SetPosition,15209,Method
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_SetPosition_InputArguments,15210,Variable
-Server_Namespaces_OPCUANamespaceUri_NamespaceFile_ExportNamespace,15211,Method
diff --git a/examples/opcua/opcuaviewer/common.cpp b/examples/opcua/opcuaviewer/common.cpp
deleted file mode 100644
index 833ad0b..0000000
--- a/examples/opcua/opcuaviewer/common.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt OPC UA module.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "common.h"
-
-#include <QHash>
-#include <QFile>
-#include <QDebug>
-#include <QString>
-
-QT_BEGIN_NAMESPACE
-
-DataTypeInfo dataTypeInfo(QString nodeId)
-{
- static QHash<uint, DataTypeInfo> dataTypeInfoHash;
-
- if (dataTypeInfoHash.isEmpty()) {
- QFile data(":/NodeIds.csv");
- if (!data.open(QFile::ReadOnly)) {
- qFatal("Could not open %s", data.fileName().toLocal8Bit().constData());
- }
-
- do {
- auto line = data.readLine();
- if (line.isEmpty())
- break;
- auto token = line.split(',');
- if (token.size() != 3) {
- qWarning() << "Ignoring invalid node info line" << line;
- continue;
- }
-
- bool ok;
- DataTypeInfo dti;
- dti.name = token[0];
- dti.id = token[1].toUInt(&ok);
- dti.type = token[2];
-
- if (dti.name.size() == 0 || !ok || dti.type.size() == 0) {
- qWarning() << "Ignoring invalid node info data" << token;
- continue;
- }
-
- dataTypeInfoHash.insert(dti.id, dti);
- } while (true);
- }
-
- QString prefix("ns=0;i=");
- if (!nodeId.startsWith(prefix))
- return DataTypeInfo();
-
- bool ok;
- auto id = nodeId.mid(prefix.size()).toUInt(&ok);
- if (!ok)
- return DataTypeInfo();
- return dataTypeInfoHash[id];
-}
-
-QT_END_NAMESPACE
diff --git a/examples/opcua/opcuaviewer/doc/opcuaviewer.qdoc b/examples/opcua/opcuaviewer/doc/opcuaviewer.qdoc
index da01329..f6502ee 100644
--- a/examples/opcua/opcuaviewer/doc/opcuaviewer.qdoc
+++ b/examples/opcua/opcuaviewer/doc/opcuaviewer.qdoc
@@ -29,6 +29,8 @@
\example opcuaviewer
\ingroup qtopcua-examples
\title Qt OPC UA explorer
+ \brief This example uses the model/view approach to display all nodes of an
+ OPC UA server in a \l QTreeView.
\section1 Introduction
This example uses the model/view approach to display all nodes of an
diff --git a/examples/opcua/opcuaviewer/mainwindow.cpp b/examples/opcua/opcuaviewer/mainwindow.cpp
index f9759b1..a50dc86 100644
--- a/examples/opcua/opcuaviewer/mainwindow.cpp
+++ b/examples/opcua/opcuaviewer/mainwindow.cpp
@@ -148,6 +148,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
mTreeView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
mTreeView->setTextElideMode(Qt::ElideRight);
mTreeView->setAlternatingRowColors(true);
+ mTreeView->setSelectionBehavior(QAbstractItemView::SelectItems);
if (mOpcUaPlugin->count() == 0) {
mOpcUaPlugin->setDisabled(true);
diff --git a/examples/opcua/opcuaviewer/opcuamodel.h b/examples/opcua/opcuaviewer/opcuamodel.h
index d31e04f..e6047a3 100644
--- a/examples/opcua/opcuaviewer/opcuamodel.h
+++ b/examples/opcua/opcuaviewer/opcuamodel.h
@@ -48,8 +48,8 @@
**
****************************************************************************/
-#ifndef OPAUAMODEL_H
-#define OPAUAMODEL_H
+#ifndef OPCUAMODEL_H
+#define OPCUAMODEL_H
#include "treeitem.h"
#include <QAbstractItemModel>
@@ -86,4 +86,4 @@ private:
QT_END_NAMESPACE
-#endif // OPAUAMODEL_H
+#endif // OPCUAMODEL_H
diff --git a/examples/opcua/opcuaviewer/opcuaviewer.pro b/examples/opcua/opcuaviewer/opcuaviewer.pro
index c521c17..15e55ce 100644
--- a/examples/opcua/opcuaviewer/opcuaviewer.pro
+++ b/examples/opcua/opcuaviewer/opcuaviewer.pro
@@ -7,8 +7,7 @@ INCLUDEPATH += \
SOURCES += main.cpp \
mainwindow.cpp \
opcuamodel.cpp \
- treeitem.cpp \
- common.cpp
+ treeitem.cpp
#install
target.path = $$[QT_INSTALL_EXAMPLES]/opcua/opcuaviewer
@@ -17,9 +16,4 @@ INSTALLS += target
HEADERS += \
mainwindow.h \
opcuamodel.h \
- treeitem.h \
- common.h
-
-RESOURCES += \
- opcuaviewer.qrc
-
+ treeitem.h
diff --git a/examples/opcua/opcuaviewer/opcuaviewer.qrc b/examples/opcua/opcuaviewer/opcuaviewer.qrc
deleted file mode 100644
index c79c66c..0000000
--- a/examples/opcua/opcuaviewer/opcuaviewer.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file>NodeIds.csv</file>
- </qresource>
-</RCC>
diff --git a/examples/opcua/opcuaviewer/treeitem.cpp b/examples/opcua/opcuaviewer/treeitem.cpp
index c580b20..56b10a7 100644
--- a/examples/opcua/opcuaviewer/treeitem.cpp
+++ b/examples/opcua/opcuaviewer/treeitem.cpp
@@ -50,7 +50,6 @@
#include "treeitem.h"
#include "opcuamodel.h"
-#include "common.h"
#include <QOpcUaClient>
#include <QMetaEnum>
#include <QPixmap>
@@ -84,10 +83,10 @@ TreeItem::TreeItem(QOpcUaNode *node, OpcUaModel *model, TreeItem *parent) : QObj
TreeItem::TreeItem(QOpcUaNode *node, OpcUaModel *model, const QOpcUaReferenceDescription &browsingData, TreeItem *parent) : TreeItem(node, model, parent)
{
- mNodeBrowseName = browsingData.browseName().name;
+ mNodeBrowseName = browsingData.browseName().name();
mNodeClass = browsingData.nodeClass();
- mNodeId = browsingData.nodeId();
- mNodeDisplayName = browsingData.displayName().text;
+ mNodeId = browsingData.targetNodeId().nodeId();
+ mNodeDisplayName = browsingData.displayName().text();
}
TreeItem::~TreeItem()
@@ -138,10 +137,12 @@ QVariant TreeItem::data(int column)
if (!mAttributesReady)
return tr("Loading ...");
- const auto dti = dataTypeInfo(mOpcNode->attribute(QOpcUa::NodeAttribute::DataType).toString());
- if (dti.name.isEmpty())
- return QString();
- return dti.name + " (" + mOpcNode->attribute(QOpcUa::NodeAttribute::DataType).toString() + ")";
+ const QString typeId = mOpcNode->attribute(QOpcUa::NodeAttribute::DataType).toString();
+ auto enumEntry = QOpcUa::namespace0IdFromNodeId(typeId);
+ QString name;
+ if (enumEntry == QOpcUa::NodeIds::Namespace0::Unknown)
+ return typeId;
+ return QOpcUa::namespace0IdName(enumEntry) + " (" + typeId + ")";
} else if (column == 4) {
return mNodeId;
} else if (column == 5) {
@@ -150,7 +151,7 @@ QVariant TreeItem::data(int column)
if (!mAttributesReady)
return tr("Loading ...");
- return mOpcNode->attribute(QOpcUa::NodeAttribute::Description).value<QOpcUa::QLocalizedText>().text;
+ return mOpcNode->attribute(QOpcUa::NodeAttribute::Description).value<QOpcUa::QLocalizedText>().text();
}
return QVariant();
}
@@ -227,9 +228,9 @@ void TreeItem::handleAttributes(QOpcUa::NodeAttributes attr)
if (attr & QOpcUa::NodeAttribute::NodeClass)
mNodeClass = mOpcNode->attribute(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>();
if (attr & QOpcUa::NodeAttribute::BrowseName)
- mNodeBrowseName = mOpcNode->attribute(QOpcUa::NodeAttribute::BrowseName).value<QOpcUa::QQualifiedName>().name;
+ mNodeBrowseName = mOpcNode->attribute(QOpcUa::NodeAttribute::BrowseName).value<QOpcUa::QQualifiedName>().name();
if (attr & QOpcUa::NodeAttribute::DisplayName)
- mNodeDisplayName = mOpcNode->attribute(QOpcUa::NodeAttribute::DisplayName).value<QOpcUa::QLocalizedText>().text;
+ mNodeDisplayName = mOpcNode->attribute(QOpcUa::NodeAttribute::DisplayName).value<QOpcUa::QLocalizedText>().text();
mAttributesReady = true;
emit mModel->dataChanged(mModel->createIndex(row(), 0, this), mModel->createIndex(row(), numberOfDisplayColumns - 1, this));
@@ -245,12 +246,12 @@ void TreeItem::browseFinished(QVector<QOpcUaReferenceDescription> children, QOpc
auto index = mModel->createIndex(row(), 0, this);
for (const auto &item : children) {
- if (hasChildNodeItem(item.nodeId()))
+ if (hasChildNodeItem(item.targetNodeId().nodeId()))
continue;
- auto node = mModel->opcUaClient()->node(item.nodeId());
+ auto node = mModel->opcUaClient()->node(item.targetNodeId());
if (!node) {
- qWarning() << "Failed to instantiate node:" << item.nodeId();
+ qWarning() << "Failed to instantiate node:" << item.targetNodeId().nodeId();
continue;
}
@@ -274,6 +275,13 @@ QString TreeItem::variantToString(const QVariant &value, const QString &typeNode
return concat.join("\n");
}
+ if (typeNodeId == QLatin1String("ns=0;i=19")) { // StatusCode
+ const char *name = QMetaEnum::fromType<QOpcUa::UaStatusCode>().valueToKey(value.toInt());
+ if (!name)
+ return QLatin1String("Unknown StatusCode");
+ else
+ return QString(name);
+ }
if (typeNodeId == QLatin1String("ns=0;i=2")) // Char
return QString::number(value.toInt());
else if (typeNodeId == QLatin1String("ns=0;i=3")) // SChar
@@ -286,10 +294,9 @@ QString TreeItem::variantToString(const QVariant &value, const QString &typeNode
return QLatin1String("0x") + value.toByteArray().toHex();
else if (value.type() == QVariant::DateTime)
return value.toDateTime().toString(Qt::ISODate);
-
else if (value.canConvert<QOpcUa::QQualifiedName>()) {
const auto name = value.value<QOpcUa::QQualifiedName>();
- return QStringLiteral("%1, \"%2\"").arg(name.namespaceIndex).arg(name.name);
+ return QStringLiteral("[NamespaceIndex: %1, Name: \"%2\"]").arg(name.namespaceIndex()).arg(name.name());
} else if (value.canConvert<QOpcUa::QLocalizedText>()) {
const auto text = value.value<QOpcUa::QLocalizedText>();
return localizedTextToString(text);
@@ -298,23 +305,38 @@ QString TreeItem::variantToString(const QVariant &value, const QString &typeNode
return rangeToString(range);
} else if (value.canConvert<QOpcUa::QComplexNumber>()) {
const auto complex = value.value<QOpcUa::QComplexNumber>();
- return QStringLiteral("%1 %2 %3i").arg(complex.real).arg(complex.imaginary >= 0 ? "+" : "-").arg(complex.imaginary);
+ return QStringLiteral("[Real: %1, Imaginary: %2]").arg(complex.real()).arg(complex.imaginary());
} else if (value.canConvert<QOpcUa::QDoubleComplexNumber>()) {
const auto complex = value.value<QOpcUa::QDoubleComplexNumber>();
- return QStringLiteral("%1 %2 %3i").arg(complex.real).arg(complex.imaginary >= 0 ? "+" : "-").arg(complex.imaginary);
+ return QStringLiteral("[Real: %1, Imaginary: %2]").arg(complex.real()).arg(complex.imaginary());
} else if (value.canConvert<QOpcUa::QXValue>()) {
const auto xv = value.value<QOpcUa::QXValue>();
- return QStringLiteral("x: %1, y: %2").arg(xv.x).arg(xv.value);
+ return QStringLiteral("[X: %1, Value: %2]").arg(xv.x()).arg(xv.value());
} else if (value.canConvert<QOpcUa::QEUInformation>()) {
const auto info = value.value<QOpcUa::QEUInformation>();
return euInformationToString(info);
} else if (value.canConvert<QOpcUa::QAxisInformation>()) {
const auto info = value.value<QOpcUa::QAxisInformation>();
-
- return QStringLiteral("EngineeringUnits: %1, EURange: %2, Title: %3 , AxisScaleType: %4, AxisSteps: %5").arg(
- euInformationToString(info.engineeringUnits)).arg(rangeToString(info.eURange)).arg(localizedTextToString(info.title)).arg(
- info.axisScaleType == QOpcUa::AxisScale::Linear ? "Linear" : (info.axisScaleType == QOpcUa::AxisScale::Ln) ? "Ln" : "Log").arg(
- axisStepsToString(info.axisSteps));
+ return QStringLiteral("[EUInformation: %1, EURange: %2, Title: %3 , AxisScaleType: %4, AxisSteps: %5]").arg(
+ euInformationToString(info.engineeringUnits())).arg(rangeToString(info.eURange())).arg(localizedTextToString(info.title())).arg(
+ info.axisScaleType() == QOpcUa::AxisScale::Linear ? "Linear" : (info.axisScaleType() == QOpcUa::AxisScale::Ln) ? "Ln" : "Log").arg(
+ numberArrayToString(info.axisSteps()));
+ } else if (value.canConvert<QOpcUa::QExpandedNodeId>()) {
+ const auto id = value.value<QOpcUa::QExpandedNodeId>();
+ return QStringLiteral("[NodeId: \"%1\", ServerIndex: \"%2\", NamespaceUri: \"%3\"]").arg(
+ id.nodeId()).arg(id.serverIndex()).arg(id.namespaceUri());
+ } else if (value.canConvert<QOpcUa::QArgument>()) {
+ const auto a = value.value<QOpcUa::QArgument>();
+
+ return QStringLiteral("[Name: \"%1\", DataType: \"%2\", ValueRank: \"%3\", ArrayDimensions: %4, Description: %5]").arg(
+ a.name()).arg(a.dataTypeId()).arg(a.valueRank()).arg(numberArrayToString(a.arrayDimensions())).arg(
+ localizedTextToString(a.description()));
+ } else if (value.canConvert<QOpcUa::QExtensionObject>()) {
+ const auto obj = value.value<QOpcUa::QExtensionObject>();
+ return QStringLiteral("[TypeId: \"%1\", Encoding: %2, Body: 0x%3]").arg(obj.encodingTypeId()).arg(
+ obj.encoding() == QOpcUa::QExtensionObject::Encoding::NoBody ?
+ "NoBody" : (obj.encoding() == QOpcUa::QExtensionObject::Encoding::ByteString ?
+ "ByteString" : "XML")).arg(obj.encodedBody().isEmpty() ? "0" : QString(obj.encodedBody().toHex()));
}
if (value.canConvert<QString>())
@@ -325,27 +347,18 @@ QString TreeItem::variantToString(const QVariant &value, const QString &typeNode
QString TreeItem::localizedTextToString(const QOpcUa::QLocalizedText &text) const
{
- return QStringLiteral("\"%1\", \"%2\"").arg(text.locale).arg(text.text);
+ return QStringLiteral("[Locale: \"%1\", Text: \"%2\"]").arg(text.locale()).arg(text.text());
}
QString TreeItem::rangeToString(const QOpcUa::QRange &range) const
{
- return QStringLiteral("[%1, %2]").arg(range.low).arg(range.high);
+ return QStringLiteral("[Low: %1, High: %2]").arg(range.low()).arg(range.high());
}
QString TreeItem::euInformationToString(const QOpcUa::QEUInformation &info) const
{
- return QStringLiteral("UnitId: %1; NamespaceUri: \"%2\"; DisplayName: %3; Description: %4").arg(info.unitId).arg(
- info.namespaceUri).arg(localizedTextToString(info.displayName)).arg(localizedTextToString(info.description));
-}
-
-QString TreeItem::axisStepsToString(const QVector<double> &vec) const
-{
- QStringList list;
- for (auto it : vec)
- list.append(QString::number(it));
-
- return list.join(", ");
+ return QStringLiteral("[UnitId: %1, NamespaceUri: \"%2\", DisplayName: %3, Description: %4]").arg(info.unitId()).arg(
+ info.namespaceUri()).arg(localizedTextToString(info.displayName())).arg(localizedTextToString(info.description()));
}
QT_END_NAMESPACE
diff --git a/examples/opcua/opcuaviewer/treeitem.h b/examples/opcua/opcuaviewer/treeitem.h
index d67a2fa..bc3c8a9 100644
--- a/examples/opcua/opcuaviewer/treeitem.h
+++ b/examples/opcua/opcuaviewer/treeitem.h
@@ -92,7 +92,8 @@ private:
QString localizedTextToString(const QOpcUa::QLocalizedText &text) const;
QString rangeToString(const QOpcUa::QRange &range) const;
QString euInformationToString(const QOpcUa::QEUInformation &info) const;
- QString axisStepsToString(const QVector<double> &vec) const;
+ template <typename T>
+ QString numberArrayToString(const QVector<T> &vec) const;
bool mAttributesReady = false;
bool mBrowseStarted = false;
@@ -107,6 +108,16 @@ private:
QOpcUa::NodeClass mNodeClass = QOpcUa::NodeClass::Undefined;
};
+template <typename T>
+QString TreeItem::numberArrayToString(const QVector<T> &vec) const
+{
+ QStringList list;
+ for (auto it : vec)
+ list.append(QString::number(it));
+
+ return QLatin1String("[") + list.join(";") + QLatin1String("]");
+}
+
QT_END_NAMESPACE
#endif // TREEITEM_H
diff --git a/examples/opcua/waterpump/simulationserver/main.cpp b/examples/opcua/waterpump/simulationserver/main.cpp
index 8ac1189..0979365 100644
--- a/examples/opcua/waterpump/simulationserver/main.cpp
+++ b/examples/opcua/waterpump/simulationserver/main.cpp
@@ -52,9 +52,6 @@
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
-#include <QtCore/QThread>
-#include <QtCore/QVariant>
-#include <QUuid>
int main(int argc, char **argv)
{
diff --git a/examples/opcua/waterpump/simulationserver/simulationserver.cpp b/examples/opcua/waterpump/simulationserver/simulationserver.cpp
index fc78edd..520f870 100644
--- a/examples/opcua/waterpump/simulationserver/simulationserver.cpp
+++ b/examples/opcua/waterpump/simulationserver/simulationserver.cpp
@@ -82,11 +82,16 @@ DemoServer::~DemoServer()
shutdown();
UA_Server_delete(m_server);
UA_ServerConfig_delete(m_config);
+ UA_NodeId_deleteMembers(&m_percentFilledTank1Node);
+ UA_NodeId_deleteMembers(&m_percentFilledTank2Node);
+ UA_NodeId_deleteMembers(&m_tank2TargetPercentNode);
+ UA_NodeId_deleteMembers(&m_tank2ValveStateNode);
+ UA_NodeId_deleteMembers(&m_machineStateNode);
}
bool DemoServer::init()
{
- m_config = UA_ServerConfig_new_minimal(43344, NULL);
+ m_config = UA_ServerConfig_new_minimal(43344, nullptr);
if (!m_config)
return false;
@@ -112,27 +117,37 @@ void DemoServer::shutdown()
}
}
-UA_NodeId DemoServer::addFolder(const QString &parent, const QString &nodeString, const QString &displayName, const QString &description)
+UA_NodeId DemoServer::addObject(const QString &parent, const QString &nodeString, const QString &browseName,
+ const QString &displayName, const QString &description, quint32 referenceType)
{
UA_NodeId resultNode;
UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
- oAttr.displayName = UA_LOCALIZEDTEXT_ALLOC("en_US", displayName.toUtf8().constData());
+ oAttr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", displayName.toUtf8().constData());
if (description.size())
- oAttr.description = UA_LOCALIZEDTEXT_ALLOC("en_US", description.toUtf8().constData());
+ oAttr.description = UA_LOCALIZEDTEXT_ALLOC("en-US", description.toUtf8().constData());
UA_StatusCode result;
UA_NodeId requestedNodeId = Open62541Utils::nodeIdFromQString(nodeString);
+ UA_NodeId parentNodeId = Open62541Utils::nodeIdFromQString(parent);
+
+ UA_QualifiedName nodeBrowseName = UA_QUALIFIEDNAME_ALLOC(requestedNodeId.namespaceIndex, browseName.toUtf8().constData());
result = UA_Server_addObjectNode(m_server,
requestedNodeId,
- Open62541Utils::nodeIdFromQString(parent),
- UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
- UA_QUALIFIEDNAME_ALLOC(requestedNodeId.namespaceIndex, nodeString.toUtf8().constData()),
+ parentNodeId,
+ UA_NODEID_NUMERIC(0, referenceType),
+ nodeBrowseName,
UA_NODEID_NULL,
oAttr,
- NULL,
+ nullptr,
&resultNode);
+
+ UA_QualifiedName_deleteMembers(&nodeBrowseName);
+ UA_NodeId_deleteMembers(&requestedNodeId);
+ UA_NodeId_deleteMembers(&parentNodeId);
+ UA_ObjectAttributes_deleteMembers(&oAttr);
+
if (result != UA_STATUSCODE_GOOD) {
qWarning() << "Could not add folder:" << nodeString << " :" << result;
return UA_NODEID_NULL;
@@ -140,31 +155,35 @@ UA_NodeId DemoServer::addFolder(const QString &parent, const QString &nodeString
return resultNode;
}
-UA_NodeId DemoServer::addVariable(const UA_NodeId &folder, const QString &variableNode, const QString &name, const QVariant &value, QOpcUa::Types type)
+UA_NodeId DemoServer::addVariable(const UA_NodeId &folder, const QString &variableNode, const QString &browseName,
+ const QString &displayName, const QVariant &value, QOpcUa::Types type,
+ quint32 referenceType)
{
UA_NodeId variableNodeId = Open62541Utils::nodeIdFromQString(variableNode);
UA_VariableAttributes attr = UA_VariableAttributes_default;
attr.value = QOpen62541ValueConverter::toOpen62541Variant(value, type);
- attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en_US", name.toUtf8().constData());
+ attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", displayName.toUtf8().constData());
attr.dataType = attr.value.type ? attr.value.type->typeId : UA_TYPES[UA_TYPES_BOOLEAN].typeId;
attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
- UA_QualifiedName variableName;
- variableName.namespaceIndex = variableNodeId.namespaceIndex;
- variableName.name = attr.displayName.text;
+ UA_QualifiedName variableName = UA_QUALIFIEDNAME_ALLOC(variableNodeId.namespaceIndex, browseName.toUtf8().constData());
UA_NodeId resultId;
UA_StatusCode result = UA_Server_addVariableNode(m_server,
variableNodeId,
folder,
- UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
+ UA_NODEID_NUMERIC(0, referenceType),
variableName,
UA_NODEID_NULL,
attr,
- NULL,
+ nullptr,
&resultId);
+ UA_NodeId_deleteMembers(&variableNodeId);
+ UA_VariableAttributes_deleteMembers(&attr);
+ UA_QualifiedName_deleteMembers(&variableName);
+
if (result != UA_STATUSCODE_GOOD) {
qWarning() << "Could not add variable:" << result;
return UA_NODEID_NULL;
@@ -320,25 +339,32 @@ double DemoServer::readTank2TargetValue()
return static_cast<double *>(var.data)[0];
}
-UA_NodeId DemoServer::addMethod(const UA_NodeId &folder, const QString &variableNode, const QString &description, const QString &name, UA_MethodCallback cb)
+UA_NodeId DemoServer::addMethod(const UA_NodeId &folder, const QString &variableNode, const QString &description,
+ const QString &browseName, const QString &displayName, UA_MethodCallback cb,
+ quint32 referenceType)
{
UA_NodeId methodNodeId = Open62541Utils::nodeIdFromQString(variableNode);
UA_MethodAttributes attr = UA_MethodAttributes_default;
- attr.description = UA_LOCALIZEDTEXT_ALLOC("en_US", description.toUtf8().constData());
- attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en_US", name.toUtf8().constData());
+ attr.description = UA_LOCALIZEDTEXT_ALLOC("en-US", description.toUtf8().constData());
+ attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", displayName.toUtf8().constData());
attr.executable = true;
- UA_QualifiedName methodBrowseName = UA_QUALIFIEDNAME_ALLOC(methodNodeId.namespaceIndex, name.toUtf8().constData());
+ UA_QualifiedName methodBrowseName = UA_QUALIFIEDNAME_ALLOC(methodNodeId.namespaceIndex, browseName.toUtf8().constData());
UA_NodeId resultId;
UA_StatusCode result = UA_Server_addMethodNode(m_server, methodNodeId, folder,
- UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
+ UA_NODEID_NUMERIC(0, referenceType),
methodBrowseName,
attr, cb,
0, nullptr,
0, nullptr,
this, &resultId);
+
+ UA_NodeId_deleteMembers(&methodNodeId);
+ UA_MethodAttributes_deleteMembers(&attr);
+ UA_QualifiedName_deleteMembers(&methodBrowseName);
+
if (result != UA_STATUSCODE_GOOD) {
qWarning() << "Could not add Method:" << result;
return UA_NODEID_NULL;
@@ -356,24 +382,35 @@ void DemoServer::launch()
int ns1 = UA_Server_addNamespace(m_server, "Demo Namespace");
if (ns1 != 2) {
- qWarning() << "Unexpected namespace index for Demo namespace";
+ qFatal("Unexpected namespace index for Demo namespace");
}
- const UA_NodeId machineFolder = addFolder("ns=0;i=85", "ns=2;s=Machine", "Machine");
- const UA_NodeId tank1Folder = addFolder("ns=2;s=Machine", "ns=2;s=Machine.Tank1", "Machine.Tank1");
- const UA_NodeId tank2Folder = addFolder("ns=2;s=Machine", "ns=2;s=Machine.Tank2", "Machine.Tank2");
-
- m_percentFilledTank1Node = addVariable(tank1Folder, "ns=2;s=Machine.Tank1.PercentFilled", "Machine.Tank1.PercentFilled", 100.0, QOpcUa::Types::Double);
- m_percentFilledTank2Node = addVariable(tank2Folder, "ns=2;s=Machine.Tank2.PercentFilled", "Machine.Tank2.PercentFilled", 0.0, QOpcUa::Types::Double);
- m_tank2TargetPercentNode = addVariable(tank2Folder, "ns=2;s=Machine.Tank2.TargetPercent", "Machine.Tank2.TargetPercent", 0.0, QOpcUa::Types::Double);
- m_tank2ValveStateNode = addVariable(tank2Folder, "ns=2;s=Machine.Tank2.ValveState", "Machine.Tank2.ValveState", false, QOpcUa::Types::Boolean);
- m_machineStateNode = addVariable(machineFolder, "ns=2;s=Machine.State", "Machine.State", static_cast<quint32>(MachineState::Idle), QOpcUa::Types::UInt32);
- addVariable(machineFolder, "ns=2;s=Machine.Designation", "Machine.Designation", "TankExample", QOpcUa::Types::String);
-
- addMethod(machineFolder, "ns=2;s=Machine.Start", "Starts the pump", "Machine.Start", &startPumpMethod);
- addMethod(machineFolder, "ns=2;s=Machine.Stop", "Stops the pump", "Machine.Stop", &stopPumpMethod);
- addMethod(machineFolder, "ns=2;s=Machine.FlushTank2", "Flushes tank 2", "Machine.FlushTank2", &flushTank2Method);
- addMethod(machineFolder, "ns=2;s=Machine.Reset", "Resets the simulation", "Machine.Reset", &resetMethod);
+ UA_NodeId machineObject = addObject(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::ObjectsFolder), "ns=2;s=Machine",
+ "Machine", "Machine", "The machine simulator", UA_NS0ID_ORGANIZES);
+ UA_NodeId tank1Object = addObject("ns=2;s=Machine", "ns=2;s=Machine.Tank1", "Tank1", "Tank 1");
+ UA_NodeId tank2Object = addObject("ns=2;s=Machine", "ns=2;s=Machine.Tank2", "Tank2", "Tank 2");
+
+ m_percentFilledTank1Node = addVariable(tank1Object, "ns=2;s=Machine.Tank1.PercentFilled", "PercentFilled", "Tank 1 Fill Level", 100.0, QOpcUa::Types::Double);
+ m_percentFilledTank2Node = addVariable(tank2Object, "ns=2;s=Machine.Tank2.PercentFilled", "PercentFilled", "Tank 2 Fill Level", 0.0, QOpcUa::Types::Double);
+ m_tank2TargetPercentNode = addVariable(tank2Object, "ns=2;s=Machine.Tank2.TargetPercent", "TargetPercent", "Tank 2 Target Level", 0.0, QOpcUa::Types::Double);
+ m_tank2ValveStateNode = addVariable(tank2Object, "ns=2;s=Machine.Tank2.ValveState", "ValveState", "Tank 2 Valve State", false, QOpcUa::Types::Boolean);
+ m_machineStateNode = addVariable(machineObject, "ns=2;s=Machine.State", "State", "Machine State", static_cast<quint32>(MachineState::Idle), QOpcUa::Types::UInt32);
+ UA_NodeId tempId;
+ tempId = addVariable(machineObject, "ns=2;s=Machine.Designation", "Designation", "Machine Designation", "TankExample", QOpcUa::Types::String);
+ UA_NodeId_deleteMembers(&tempId);
+
+ tempId = addMethod(machineObject, "ns=2;s=Machine.Start", "Starts the pump", "Start", "Start Pump", &startPumpMethod);
+ UA_NodeId_deleteMembers(&tempId);
+ tempId = addMethod(machineObject, "ns=2;s=Machine.Stop", "Stops the pump", "Stop", "Stop Pump", &stopPumpMethod);
+ UA_NodeId_deleteMembers(&tempId);
+ tempId = addMethod(machineObject, "ns=2;s=Machine.FlushTank2", "Flushes tank 2", "FlushTank2", "Flush Tank 2", &flushTank2Method);
+ UA_NodeId_deleteMembers(&tempId);
+ tempId = addMethod(machineObject, "ns=2;s=Machine.Reset", "Resets the simulation", "Reset", "Reset Simulation", &resetMethod);
+ UA_NodeId_deleteMembers(&tempId);
+
+ UA_NodeId_deleteMembers(&machineObject);
+ UA_NodeId_deleteMembers(&tank1Object);
+ UA_NodeId_deleteMembers(&tank2Object);
QObject::connect(&m_machineTimer, &QTimer::timeout, [this]() {
@@ -381,7 +418,7 @@ void DemoServer::launch()
if (m_state == MachineState::Pumping && m_percentFilledTank1 > 0 && m_percentFilledTank2 < targetValue) {
setPercentFillTank1(m_percentFilledTank1 - 1);
setPercentFillTank2(m_percentFilledTank2 + 1);
- if (m_percentFilledTank1 == 0 || m_percentFilledTank2 >= targetValue) {
+ if (qFuzzyIsNull(m_percentFilledTank1) || m_percentFilledTank2 >= targetValue) {
setState(MachineState::Idle);
m_machineTimer.stop();
}
diff --git a/examples/opcua/waterpump/simulationserver/simulationserver.h b/examples/opcua/waterpump/simulationserver/simulationserver.h
index c6d6ce8..de6d1dd 100644
--- a/examples/opcua/waterpump/simulationserver/simulationserver.h
+++ b/examples/opcua/waterpump/simulationserver/simulationserver.h
@@ -51,7 +51,7 @@
#ifndef QOPCUADEMOSERVER_H
#define QOPCUADEMOSERVER_H
-#include <open62541.h>
+#include <qopen62541.h>
#include <qopcuatype.h>
@@ -70,11 +70,17 @@ public:
~DemoServer();
bool init();
- UA_NodeId addFolder(const QString &parent, const QString &nodeString, const QString &displayName, const QString &description = QString());
+ UA_NodeId addObject(const QString &parent, const QString &nodeString, const QString &browseName,
+ const QString &displayName, const QString &description = QString(),
+ quint32 referenceType = UA_NS0ID_HASCOMPONENT);
- UA_NodeId addVariable(const UA_NodeId &folder, const QString &variableNode, const QString &name, const QVariant &value, QOpcUa::Types type);
+ UA_NodeId addVariable(const UA_NodeId &folder, const QString &variableNode, const QString &browseName,
+ const QString &displayName, const QVariant &value, QOpcUa::Types type,
+ quint32 referenceType = UA_NS0ID_HASCOMPONENT);
- UA_NodeId addMethod(const UA_NodeId &folder, const QString &variableNode, const QString &description, const QString &name, UA_MethodCallback cb);
+ UA_NodeId addMethod(const UA_NodeId &folder, const QString &variableNode, const QString &description,
+ const QString &browseName, const QString &displayName, UA_MethodCallback cb,
+ quint32 referenceType = UA_NS0ID_HASCOMPONENT);
static UA_StatusCode startPumpMethod(UA_Server *server, const UA_NodeId *sessionId, void *sessionHandle,
const UA_NodeId *methodId, void *methodContext,
diff --git a/examples/opcua/waterpump/simulationserver/simulationserver.pro b/examples/opcua/waterpump/simulationserver/simulationserver.pro
index 2c08b71..460304f 100644
--- a/examples/opcua/waterpump/simulationserver/simulationserver.pro
+++ b/examples/opcua/waterpump/simulationserver/simulationserver.pro
@@ -1,5 +1,4 @@
TEMPLATE = app
-TARGET = simulationserver
INCLUDEPATH += \
$$PWD/../../../../src/plugins/opcua/open62541
diff --git a/examples/opcua/waterpump/waterpump-qml/MachineDisplay.qml b/examples/opcua/waterpump/waterpump-qml/MachineDisplay.qml
new file mode 100644
index 0000000..d4b0edb
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qml/MachineDisplay.qml
@@ -0,0 +1,124 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the QtOpcUa module.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.10
+import QtQuick.Layouts 1.3
+import QtQuick.Controls 2.3
+import QtOpcUa 5.12 as QtOpcUa
+import "qrc:/machine"
+
+RowLayout {
+ property Machine machine
+ property QtOpcUa.Connection connection
+
+ opacity: connection.connected ? 1.0 : 0.25
+ Tank1Unit {
+ startButtonEnabled: connection.connected && machine.state === Machine.MachineState.Idle &&
+ machine.tank1.percentFilled > 0 && machine.tank2.percentFilled < machine.tank2.targetPercent
+ stopButtonEnabled: connection.connected && machine.state === Machine.MachineState.Pumping
+ percentFilled: machine.tank1.percentFilled
+
+ id: tank1unit
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+
+ Component.onCompleted: {
+ tank1unit.startPump.connect(machine.startMethod.callMethod)
+ tank1unit.stopPump.connect(machine.stopMethod.callMethod)
+ }
+ }
+ Pump {
+ machineIsPumping: machine.state === Machine.MachineState.Pumping
+
+ Component.onCompleted: {
+ machine.tank2.onPercentFilledChanged.connect(rotatePump)
+ }
+ }
+ Tank2Unit {
+ flushButtonEnabled: connection.connected && machine.state === Machine.MachineState.Idle && machine.tank2.percentFilled > machine.tank2.targetPercent
+ percentFilled: machine.tank2.percentFilled
+ valveState: machine.tank2valveState
+
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+
+ id: tank2unit
+
+ Component.onCompleted: {
+ tank2unit.flushTank.connect(machine.flushMethod.callMethod)
+ }
+ }
+ Slider {
+ id: setpointSlider
+ Layout.fillHeight: false
+ Layout.preferredHeight: tank1unit.tankHeight
+ Layout.alignment: Qt.AlignBottom
+ enabled: connection.connected && machine.state === Machine.MachineState.Idle
+ from: 0
+ to: 100
+ value: machine.tank2.targetPercent
+ live: false
+ stepSize: 1.0
+ orientation: Qt.Vertical
+ onValueChanged: {
+ machine.tank2.targetPercent = value;
+ }
+ }
+ ValueDisplay {
+ designation: machine.designation
+ percentFilledTank1: machine.tank1.percentFilled
+ percentFilledTank2: machine.tank2.percentFilled
+ targetPercentTank2: machine.tank2.targetPercent
+ machineState: machine.state === Machine.MachineState.Idle ?
+ "Idle" : (machine.state === Machine.MachineState.Pumping ? "Pumping" : "Flushing")
+ valveState: machine.tank2valveState
+ }
+}
diff --git a/examples/opcua/waterpump/waterpump-qml/Pump.qml b/examples/opcua/waterpump/waterpump-qml/Pump.qml
new file mode 100644
index 0000000..c6988d1
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qml/Pump.qml
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the QtOpcUa module.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.10
+
+Rectangle {
+ property bool machineIsPumping;
+
+ function rotatePump() {
+ if (machineIsPumping)
+ rotation += 15
+ }
+
+ id: pump
+ width: 40
+ height: 40
+ radius: width / 2
+ color: machineIsPumping ? "#00BFFF" : "lightgrey"
+ Rectangle {
+ antialiasing: true
+ width: height / 4
+ height: pump.width * 0.75
+ anchors.centerIn: parent
+ color: "grey"
+ }
+ Rectangle {
+ antialiasing: true
+ width: pump.width * 0.75
+ height: width / 4
+ anchors.centerIn: parent
+ color: "grey"
+ }
+}
diff --git a/examples/opcua/waterpump/waterpump-qml/ServerControl.qml b/examples/opcua/waterpump/waterpump-qml/ServerControl.qml
new file mode 100644
index 0000000..867308a
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qml/ServerControl.qml
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the QtOpcUa module.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.10
+import QtQuick.Controls 2.3
+import QtQuick.Layouts 1.3
+import QtOpcUa 5.12 as QtOpcUa
+
+RowLayout {
+ readonly property alias backend: backendSelector.currentText
+ property QtOpcUa.Connection connection
+ signal resetSimulation()
+
+ TextField {
+ id: uaUrl
+ Layout.fillWidth: true
+ text: "opc.tcp://127.0.0.1:43344"
+ }
+ ComboBox {
+ id: backendSelector
+ model: connection.availableBackends
+ }
+
+ Button {
+ text: connection.connected ? "Disconnect" : "Connect"
+ enabled: connection.availableBackends.length > 0
+ onClicked: {
+ if (connection.connected)
+ connection.disconnectFromEndpoint()
+ else
+ connection.connectToEndpoint(uaUrl.text)
+ }
+ }
+ Button {
+ text: "Reset simulation"
+ enabled: connection.connected
+ onClicked: resetSimulation()
+ }
+}
diff --git a/examples/opcua/waterpump/waterpump-qml/Tank1Unit.qml b/examples/opcua/waterpump/waterpump-qml/Tank1Unit.qml
new file mode 100644
index 0000000..eb8410d
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qml/Tank1Unit.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the QtOpcUa module.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.10
+import QtQuick.Controls 2.3
+import QtQuick.Layouts 1.3
+
+Item {
+ property alias tankHeight: tank1.height
+ property alias startButtonEnabled: startButton.enabled
+ property alias stopButtonEnabled: stopButton.enabled
+ property alias percentFilled: tank1.percentFilled
+ signal startPump()
+ signal stopPump()
+
+ ColumnLayout {
+ anchors.fill: parent
+ RowLayout {
+ Button {
+ id: startButton
+ text: "Start"
+ onClicked: startPump()
+ }
+ Button {
+ id: stopButton
+ text: "Stop"
+ onClicked: stopPump()
+ }
+ }
+ TankDisplay {
+ id: tank1
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ }
+ }
+}
diff --git a/examples/opcua/waterpump/waterpump-qml/Tank2Unit.qml b/examples/opcua/waterpump/waterpump-qml/Tank2Unit.qml
new file mode 100644
index 0000000..05efdd6
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qml/Tank2Unit.qml
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the QtOpcUa module.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.10
+import QtQuick.Controls 2.3
+import QtQuick.Layouts 1.3
+
+Item {
+ property alias flushButtonEnabled: flushButton.enabled
+ property alias percentFilled: tank2.percentFilled
+ property bool valveState
+ signal flushTank()
+
+ ColumnLayout {
+ anchors.fill: parent
+ Button {
+ id: flushButton
+ text: "Flush"
+ onClicked: flushTank()
+ }
+ Layout.fillHeight: true
+ TankDisplay {
+ id: tank2
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ Rectangle {
+ color: valveState ? "#00BFFF" : "lightgrey"
+ anchors.top: parent.bottom
+ anchors.right: parent.right
+ width: tank2.width / 10
+ height: 40
+ }
+ }
+ }
+}
diff --git a/examples/opcua/waterpump/qml-hmi/Tank.qml b/examples/opcua/waterpump/waterpump-qml/TankDisplay.qml
index 8de4a07..8de4a07 100644
--- a/examples/opcua/waterpump/qml-hmi/Tank.qml
+++ b/examples/opcua/waterpump/waterpump-qml/TankDisplay.qml
diff --git a/examples/opcua/waterpump/waterpump-qml/ValueDisplay.qml b/examples/opcua/waterpump/waterpump-qml/ValueDisplay.qml
new file mode 100644
index 0000000..bb0b22e
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qml/ValueDisplay.qml
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the QtOpcUa module.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.10
+import QtQuick.Controls 2.3
+import QtQuick.Layouts 1.3
+
+ColumnLayout {
+ property string designation
+ property int percentFilledTank1
+ property int percentFilledTank2
+ property int targetPercentTank2
+ property string machineState
+ property bool valveState
+
+ Text {
+ font.pointSize: 12
+ text: "<b>Machine Status</b>"
+ }
+ Text {
+ font.pointSize: 10
+ text: "<b>Designation:</b> " + designation
+ }
+ Text {
+ font.pointSize: 10
+ text: "<b>State:</b> " + machineState
+ }
+ Text {
+ font.pointSize: 10
+ text: "<b>Tank 1:</b> " + percentFilledTank1 + "%"
+ }
+ Text {
+ font.pointSize: 10
+ text: "<b>Tank 2:</b> " + percentFilledTank2 + "%"
+ }
+ Text {
+ font.pointSize: 10
+ text: "<b>Setpoint:</b> " + targetPercentTank2 + "%"
+ }
+ Text {
+ font.pointSize: 10
+ text: "<b>Valve:</b> " + (valveState ? "Open" : "Closed")
+ }
+}
diff --git a/examples/opcua/waterpump/doc/images/tankexample.jpg b/examples/opcua/waterpump/waterpump-qml/doc/images/tankexample.jpg
index 4c6a429..4c6a429 100644
--- a/examples/opcua/waterpump/doc/images/tankexample.jpg
+++ b/examples/opcua/waterpump/waterpump-qml/doc/images/tankexample.jpg
Binary files differ
diff --git a/examples/opcua/waterpump/waterpump-qml/doc/waterpump-qml.qdoc b/examples/opcua/waterpump/waterpump-qml/doc/waterpump-qml.qdoc
new file mode 100644
index 0000000..982b3af
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qml/doc/waterpump-qml.qdoc
@@ -0,0 +1,128 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Free Documentation License Usage
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of
+** this file. Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \example waterpump/waterpump-qml
+ \ingroup qtopcua-examples
+ \title Example using the QML API for Qt OPC UA
+ \brief This example shows how to use Qt OPC UA QML API to interact with an OPC UA
+ server to build a QML based HMI for a simple machine.
+
+ \section1 Introduction
+ This example shows how to use Qt OPC UA QML API to interact with an OPC UA
+ server to build a QML based HMI for a simple machine.
+
+ \section1 The Simulation
+ The OPC UA server included in this example runs a simulation of a machine
+ containing two tanks, a water pump and a valve. Water can be pumped from the
+ first tank into the second tank and then be flushed from the second tank
+ by opening the valve. Both operations have a user-configurable setpoint
+ which controls how much water is pumped to or flushed from the second tank.
+
+ The following nodes exist on the server:
+
+ \table
+ \header
+ \li NodeId
+ \li Function
+ \row
+ \li ns=2;s=Machine
+ \li The folder containing the method and variable nodes for the machine
+ \row
+ \li ns=2;s=Machine.State
+ \li The state of the machine
+ \row
+ \li ns=2;s=Machine.Tank1.PercentFilled
+ \li The current fill status of the first tank
+ \row
+ \li ns=2;s=Machine.Tank2.PercentFilled
+ \li The current fill status of the second tank
+ \row
+ \li ns=2;s=Machine.Tank2.TargetPercent
+ \li The setpoint for pumping and flushing
+ \row
+ \li ns=2;s=Machine.Tank2.ValveState
+ \li The state of the valve of the second tank
+ \row
+ \li ns=2;s=Machine.Designation
+ \li A human readable designation of the machine for display purposes
+ \row
+ \li ns=2;s=Machine.Start
+ \li Call this method to start the pump
+ \row
+ \li ns=2;s=Machine.Stop
+ \li Call this method to stop the pump
+ \row
+ \li ns=2;s=Machine.FlushTank2
+ \li Call this method to flush tank 2
+ \endtable
+
+ \section1 Implementation
+
+ This example uses QML items to read and write values as well as method calls.
+ All operations are asynchronous and handled by QML in the background.
+
+ A QML item represents the machine and its components. This item does not have any
+ graphical interface and only provides access to the properties of the machine.
+ It has two tanks which are instances of a separate \c Tank component.
+
+ \section2 Properties
+
+ The machine item exposes all properties and subitems as properties.
+
+ \quotefromfile waterpump/waterpump-qml/machine/Machine.qml
+ \dots
+ \skipto readonly
+ \printuntil flushMethod
+ \codeline
+ \dots
+
+ \section2 Asynchronous Handlers
+
+ The asynchronous parts of the API are handled by QML automatically because
+ signals are emitted for every property change by default.
+
+ For example, the button to flush the second tank is enabled
+ only if the backend is connected to the server, the machine is idle, and
+ the tank level is above the setpoint. On click, the flushTank2() method
+ is called on the server.
+
+ \quotefromfile waterpump/waterpump-qml/MachineDisplay.qml
+ \skipto Tank2Unit
+ \printuntil valveState
+
+ \section1 Usage
+ The server is started automatically by the HMI application.
+ After connecting to the server by clicking the \uicontrol Connect button,
+ drag the slider to set a setpoint, then click \uicontrol Start to start pumping water
+ from the first tank to the second tank. After setting a setpoint lower than
+ the current value of the second tank, a click on \uicontrol Flush opens the valve.
+
+ If there is no water left, click \uicontrol {Reset simulation} to refill the first tank.
+
+ \image tankexample.jpg
+*/
diff --git a/examples/opcua/waterpump/waterpump-qml/machine/Machine.qml b/examples/opcua/waterpump/waterpump-qml/machine/Machine.qml
new file mode 100644
index 0000000..b68a52e
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qml/machine/Machine.qml
@@ -0,0 +1,169 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the QtOpcUa module.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.10
+import QtOpcUa 5.12 as QtOpcUa
+
+Item {
+ readonly property alias tank1: tank1
+ readonly property alias tank2: tank2
+ readonly property alias state: machineState.value
+ readonly property alias tank2PercentFilled: tank2.percentFilled
+ readonly property alias tank2valveState: tank2.valveState
+ readonly property alias designation: designation.value
+ property alias resetMethod: resetMethod
+ property alias startMethod: startMethod
+ property alias stopMethod: stopMethod
+ property alias flushMethod: flushMethod
+
+ QtOpcUa.NodeId {
+ identifier: "s=Machine"
+ ns: "Demo Namespace"
+ id: machineNodeId
+ }
+
+ QtOpcUa.MethodNode {
+ nodeId: QtOpcUa.NodeId {
+ identifier: "s=Machine.Start"
+ ns: "Demo Namespace"
+ }
+ objectNodeId: machineNodeId
+ id: startMethod
+ }
+
+ QtOpcUa.MethodNode {
+ nodeId: QtOpcUa.NodeId {
+ identifier: "s=Machine.Stop"
+ ns: "Demo Namespace"
+ }
+ objectNodeId: machineNodeId
+ id: stopMethod
+ }
+
+ QtOpcUa.MethodNode {
+ nodeId: QtOpcUa.NodeId {
+ identifier: "s=Machine.FlushTank2"
+ ns: "Demo Namespace"
+ }
+ objectNodeId: machineNodeId
+ id: flushMethod
+ }
+
+ QtOpcUa.MethodNode {
+ nodeId: QtOpcUa.NodeId {
+ identifier: "s=Machine.Reset"
+ ns: "Demo Namespace"
+ }
+ objectNodeId: machineNodeId
+ id: resetMethod
+ }
+
+ enum MachineState {
+ Idle = 0,
+ Pumping = 1,
+ Flushing = 2
+ }
+
+ Tank {
+ id: tank1
+ tankNode: QtOpcUa.Node {
+ nodeId: QtOpcUa.NodeId {
+ identifier: "s=Machine.Tank1"
+ ns: "Demo Namespace"
+ }
+ }
+ }
+
+ Tank {
+ id: tank2
+ tankNode: QtOpcUa.Node {
+ nodeId: QtOpcUa.NodeId {
+ identifier: "s=" + tank2.tankName
+ ns: "Demo Namespace"
+ }
+ }
+ property alias targetPercent: targetPercent.value
+ readonly property string tankName: "Machine.Tank2"
+ readonly property alias valveState: valveState.value
+
+ QtOpcUa.ValueNode {
+ nodeId: QtOpcUa.NodeId {
+ identifier: "s=" + tank2.tankName + ".TargetPercent"
+ ns: "Demo Namespace"
+ }
+ id: targetPercent
+ }
+
+ QtOpcUa.ValueNode {
+ nodeId: QtOpcUa.NodeId {
+ identifier: "s=" + tank2.tankName + ".ValveState"
+ ns: "Demo Namespace"
+ }
+ id: valveState
+ }
+ }
+
+ QtOpcUa.ValueNode {
+ nodeId: QtOpcUa.NodeId {
+ identifier: "s=Machine.State"
+ ns: "Demo Namespace"
+ }
+ id: machineState
+ }
+
+ QtOpcUa.ValueNode {
+ nodeId: QtOpcUa.NodeId {
+ identifier: "s=Machine.Designation"
+ ns: "Demo Namespace"
+ }
+ id: designation
+ }
+}
+
diff --git a/examples/opcua/waterpump/waterpump-qml/machine/Tank.qml b/examples/opcua/waterpump/waterpump-qml/machine/Tank.qml
new file mode 100644
index 0000000..51ab83d
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qml/machine/Tank.qml
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the QtOpcUa module.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.10
+import QtOpcUa 5.12 as QtOpcUa
+
+Item {
+ property QtOpcUa.Node tankNode
+ readonly property alias percentFilled: filledState.value
+
+ QtOpcUa.ValueNode {
+ nodeId: QtOpcUa.RelativeNodeId {
+ startNode: tankNode.nodeId
+ path: [
+ QtOpcUa.RelativeNodePath {
+ ns: "Demo Namespace"
+ browseName: "PercentFilled"
+ }
+ ]
+ }
+ id: filledState
+ }
+}
diff --git a/examples/opcua/waterpump/waterpump-qml/main.cpp b/examples/opcua/waterpump/waterpump-qml/main.cpp
new file mode 100644
index 0000000..f643b3b
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qml/main.cpp
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the QtOpcUa module.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+#include <QFile>
+#include <QDebug>
+#include <QProcess>
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ QString serverExePath;
+#ifdef Q_OS_WIN
+ #ifdef QT_DEBUG
+ serverExePath = app.applicationDirPath().append("/../../simulationserver/debug/simulationserver.exe");
+ #else
+ serverExePath = app.applicationDirPath().append("/../../simulationserver/release/simulationserver.exe");
+ #endif
+#else
+ serverExePath = app.applicationDirPath().append("/../simulationserver/simulationserver");
+#endif
+
+ if (!QFile::exists(serverExePath)) {
+ qWarning() << "Could not find server executable:" << serverExePath;
+ return EXIT_FAILURE;
+ }
+
+ QProcess serverProcess;
+
+ serverProcess.start(serverExePath);
+ if (!serverProcess.waitForStarted()) {
+ qWarning() << "Could not start server:" << serverProcess.errorString();
+ return EXIT_FAILURE;
+ }
+
+ QQmlApplicationEngine engine;
+ engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
+ if (engine.rootObjects().isEmpty())
+ return EXIT_FAILURE;
+
+ return app.exec();
+}
diff --git a/examples/opcua/waterpump/waterpump-qml/main.qml b/examples/opcua/waterpump/waterpump-qml/main.qml
new file mode 100644
index 0000000..5f04832
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qml/main.qml
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the examples of the QtOpcUa module.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.10
+import QtQuick.Window 2.2
+import QtQuick.Controls 2.3
+import QtQuick.Layouts 1.3
+import QtOpcUa 5.12 as QtOpcUa
+import "qrc:/machine"
+
+Window {
+ visible: true
+ width: 800
+ height: 600
+ minimumWidth: 800
+ minimumHeight: 600
+ title: "OPC UA Tank Example"
+
+ QtOpcUa.Connection {
+ id: connection
+ backend: serverControl.backend
+ defaultConnection: true
+ }
+
+ Machine {
+ id: machine
+ }
+
+ ColumnLayout {
+ anchors.margins: 10
+ anchors.fill: parent
+ spacing: 45
+ ServerControl {
+ id: serverControl
+ connection: connection
+ }
+ MachineDisplay {
+ Layout.fillHeight: true
+ machine: machine
+ connection: connection
+ }
+ Text {
+ id: messageText
+ font.pointSize: 10
+ // FIXME text: uaBackend.message
+ }
+ }
+
+ Component.onCompleted: {
+ serverControl.resetSimulation.connect(machine.resetMethod.callMethod)
+ }
+}
diff --git a/examples/opcua/waterpump/waterpump-qml/qml.qrc b/examples/opcua/waterpump/waterpump-qml/qml.qrc
new file mode 100644
index 0000000..b4d9f70
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qml/qml.qrc
@@ -0,0 +1,14 @@
+<RCC>
+ <qresource prefix="/">
+ <file>main.qml</file>
+ <file>TankDisplay.qml</file>
+ <file>Tank1Unit.qml</file>
+ <file>Tank2Unit.qml</file>
+ <file>ValueDisplay.qml</file>
+ <file>ServerControl.qml</file>
+ <file>Pump.qml</file>
+ <file>MachineDisplay.qml</file>
+ <file>machine/Tank.qml</file>
+ <file>machine/Machine.qml</file>
+ </qresource>
+</RCC>
diff --git a/examples/opcua/waterpump/waterpump-qml/waterpump-qml.pro b/examples/opcua/waterpump/waterpump-qml/waterpump-qml.pro
new file mode 100644
index 0000000..a611823
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qml/waterpump-qml.pro
@@ -0,0 +1,6 @@
+QT += quick
+CONFIG += c++11
+SOURCES += main.cpp
+RESOURCES += qml.qrc
+target.path = $$[QT_INSTALL_EXAMPLES]/opcua/waterpump/waterpump-qml
+INSTALLS += target
diff --git a/examples/opcua/waterpump/qml-hmi/Pump.qml b/examples/opcua/waterpump/waterpump-qmlcpp/Pump.qml
index 1b240f5..1b240f5 100644
--- a/examples/opcua/waterpump/qml-hmi/Pump.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/Pump.qml
diff --git a/examples/opcua/waterpump/qml-hmi/ServerControl.qml b/examples/opcua/waterpump/waterpump-qmlcpp/ServerControl.qml
index a360c53..a360c53 100644
--- a/examples/opcua/waterpump/qml-hmi/ServerControl.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/ServerControl.qml
diff --git a/examples/opcua/opcuaviewer/common.h b/examples/opcua/waterpump/waterpump-qmlcpp/Tank.qml
index 940884d..8de4a07 100644
--- a/examples/opcua/opcuaviewer/common.h
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/Tank.qml
@@ -1,9 +1,9 @@
/****************************************************************************
**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: https://www.qt.io/licensing/
**
-** This file is part of the examples of the Qt OPC UA module.
+** This file is part of the examples of the QtOpcUa module.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
@@ -48,22 +48,17 @@
**
****************************************************************************/
-#ifndef COMMON_H
-#define COMMON_H
+import QtQuick 2.10
-#include <QString>
-
-QT_BEGIN_NAMESPACE
-
-struct DataTypeInfo
-{
- uint id = 0;
- QString name;
- QString type;
-};
-
-DataTypeInfo dataTypeInfo(QString nodeId);
-
-QT_END_NAMESPACE
-
-#endif // COMMON_H
+Rectangle {
+ property real percentFilled: 0
+ color: "lightgrey"
+ width: parent.width
+ height: parent.height
+ Rectangle {
+ y: parent.height - percentFilled * (parent.height / 100)
+ width: parent.width
+ height: percentFilled * (parent.height / 100)
+ color: "#00BFFF"
+ }
+}
diff --git a/examples/opcua/waterpump/qml-hmi/Tank1Unit.qml b/examples/opcua/waterpump/waterpump-qmlcpp/Tank1Unit.qml
index 9709690..9709690 100644
--- a/examples/opcua/waterpump/qml-hmi/Tank1Unit.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/Tank1Unit.qml
diff --git a/examples/opcua/waterpump/qml-hmi/Tank2Unit.qml b/examples/opcua/waterpump/waterpump-qmlcpp/Tank2Unit.qml
index 1195a31..1195a31 100644
--- a/examples/opcua/waterpump/qml-hmi/Tank2Unit.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/Tank2Unit.qml
diff --git a/examples/opcua/waterpump/qml-hmi/TankSimulation.qml b/examples/opcua/waterpump/waterpump-qmlcpp/TankSimulation.qml
index 3d58f28..3d58f28 100644
--- a/examples/opcua/waterpump/qml-hmi/TankSimulation.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/TankSimulation.qml
diff --git a/examples/opcua/waterpump/qml-hmi/ValueDisplay.qml b/examples/opcua/waterpump/waterpump-qmlcpp/ValueDisplay.qml
index 7d71626..7d71626 100644
--- a/examples/opcua/waterpump/qml-hmi/ValueDisplay.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/ValueDisplay.qml
diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/doc/images/tankexample.jpg b/examples/opcua/waterpump/waterpump-qmlcpp/doc/images/tankexample.jpg
new file mode 100644
index 0000000..4c6a429
--- /dev/null
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/doc/images/tankexample.jpg
Binary files differ
diff --git a/examples/opcua/waterpump/doc/waterpump.qdoc b/examples/opcua/waterpump/waterpump-qmlcpp/doc/waterpump-qmlcpp.qdoc
index 8c1ed4c..51f5e89 100644
--- a/examples/opcua/waterpump/doc/waterpump.qdoc
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/doc/waterpump-qmlcpp.qdoc
@@ -26,15 +26,17 @@
****************************************************************************/
/*!
- \example waterpump
+ \example waterpump/waterpump-qmlcpp
\ingroup qtopcua-examples
\title Using Qt OPC UA in a basic UI application
+ \brief This example shows how to use Qt OPC UA to interact with an OPC UA
+ server to build a QML based HMI for a simple machine.
\section1 Introduction
This example shows how to use Qt OPC UA to interact with an OPC UA
server to build a QML based HMI for a simple machine.
- \section1 The simulation
+ \section1 The Simulation
The OPC UA server included in this example runs a simulation of a machine
containing two tanks, a water pump and a valve. Water can be pumped from the
first tank into the second tank and then be flushed from the second tank
@@ -83,7 +85,7 @@
\l {QOpcUa::UaStatusCode} {BadUserAccessDenied} if the operation is illegal
(e. g. trying to start the pump if the first tank is empty).
- \section1 Used features of \l QOpcUaClient
+ \section1 Used Features of \l QOpcUaClient
This example uses read, write, method calls and data change subscriptions
and shows how to set up handlers for the asynchronous operations offered
by QOpcUaClient and QOpcUaNode.
@@ -94,13 +96,13 @@
and expose the content of this server by means of properties and Q_INVOKABLE
methods wrapping the OPC UA method calls.
- \section2 Member variables
+ \section2 Member Variables
A pointer to \l QOpcUaClient is required for connection management. An
additional pointer to a \l QOpcUaNode object is needed for each OPC UA
node the HMI interacts with. For the values of these nodes, member variables
containing the last value reported by the server are added.
- \quotefromfile waterpump/qml-hmi/opcuamachinebackend.h
+ \quotefromfile waterpump/waterpump-qmlcpp/opcuamachinebackend.h
\dots
\skipto m_client
\printuntil m_machineDesignation;
@@ -110,13 +112,13 @@
For each value used in the HMI, a getter, a changed signal and a
property are added to enable property bindings in QML
- \quotefromfile waterpump/qml-hmi/opcuamachinebackend.h
+ \quotefromfile waterpump/waterpump-qmlcpp/opcuamachinebackend.h
\dots
\skipto Q_PROPERTY
\printuntil QString message
\dots
- \section2 Asynchronous handlers
+ \section2 Asynchronous Handlers
The asynchronous API of Qt OPC UA requires signal handlers for all operations.
@@ -124,7 +126,7 @@
A handler connected to this signal gets the new value as QVariant and can
e. g. write that value to a variable or emit a signal with the new value.
- \quotefromfile waterpump/qml-hmi/opcuamachinebackend.cpp
+ \quotefromfile waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp
\skipto void OpcUaMachineBackend::percentFilledTank1Updated
\printuntil }
@@ -136,11 +138,11 @@
\printuntil }
\printuntil }
- \section2 Interaction with the server
+ \section2 Interaction with the Server
In the constructor, a QOpcUaProvider is created and the available backends are saved to provide a model for the backend selection dropdown menu.
- \quotefromfile waterpump/qml-hmi/opcuamachinebackend.cpp
+ \quotefromfile waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp
\dots
\skipto QOpcUaProvider provider
\printuntil setBackends
@@ -149,7 +151,7 @@
Before attempting a connection, a QOpcUaClient with the selected backend is created. Its \l QOpcUaClient::stateChanged signal must be
connected to the backend's clientStateHandler slot.
- \quotefromfile waterpump/qml-hmi/opcuamachinebackend.cpp
+ \quotefromfile waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp
\skipto OpcUaMachineBackend::connectToEndpoint
\printuntil m_client->connectToEndpoint
\printuntil }
@@ -159,7 +161,7 @@
are filled with node objects.
\dots
- \quotefromfile waterpump/qml-hmi/opcuamachinebackend.cpp
+ \quotefromfile waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp
\skipto if (state == QOpcUaClient::ClientState::Connected) {
\printuntil m_machineDesignationNode
\dots
@@ -197,7 +199,7 @@
named uaBackend.
\dots
- \quotefromfile waterpump/qml-hmi/main.cpp
+ \quotefromfile waterpump/waterpump-qmlcpp/main.cpp
\skipto OpcUaMachineBackend backend
\printuntil setContextProperty
\dots
@@ -208,26 +210,26 @@
the tank level is above the setpoint. On click, the flushTank2() method
is called on the server.
- \quotefromfile waterpump/qml-hmi/Tank2Unit.qml
+ \quotefromfile waterpump/waterpump-qmlcpp/Tank2Unit.qml
\skipto Button
\printuntil }
\printuntil }
Signals from the backend can also be used directly in the QML code.
- \quotefromfile waterpump/qml-hmi/Pump.qml
+ \quotefromfile waterpump/waterpump-qmlcpp/Pump.qml
\skipto Connections
\printuntil }
\printuntil }
\section1 Usage
The server is started automatically by the HMI application.
- After connecting to the server by clicking the "Connect" button,
- drag the slider to set a setpoint, then click "Start" to start pumping water
+ After connecting to the server by clicking the \uicontrol Connect button,
+ drag the slider to set a setpoint, then click \uicontrol Start to start pumping water
from the first tank to the second tank. After setting a setpoint lower than
- the current value of the second tank, a click on "Flush" opens the valve.
+ the current value of the second tank, a click on \uicontrol Flush opens the valve.
- If there is no water left, click "Reset simulation" to refill the first tank.
+ If there is no water left, click \uicontrol {Reset simulation} to refill the first tank.
\image tankexample.jpg
*/
diff --git a/examples/opcua/waterpump/qml-hmi/main.cpp b/examples/opcua/waterpump/waterpump-qmlcpp/main.cpp
index a2a60b0..a2a60b0 100644
--- a/examples/opcua/waterpump/qml-hmi/main.cpp
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/main.cpp
diff --git a/examples/opcua/waterpump/qml-hmi/main.qml b/examples/opcua/waterpump/waterpump-qmlcpp/main.qml
index 54d101d..54d101d 100644
--- a/examples/opcua/waterpump/qml-hmi/main.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/main.qml
diff --git a/examples/opcua/waterpump/qml-hmi/opcuamachinebackend.cpp b/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp
index ab1da00..8a7451d 100644
--- a/examples/opcua/waterpump/qml-hmi/opcuamachinebackend.cpp
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp
@@ -94,11 +94,11 @@ void OpcUaMachineBackend::clientStateHandler(QOpcUaClient::ClientState state)
m_machineDesignationNode.reset(m_client->node("ns=2;s=Machine.Designation"));
// Connect signal handlers for subscribed values
- QObject::connect(m_machineStateNode.data(), &QOpcUaNode::attributeUpdated, this, &OpcUaMachineBackend::machineStateUpdated);
- QObject::connect(m_percentFilledTank1Node.data(), &QOpcUaNode::attributeUpdated, this, &OpcUaMachineBackend::percentFilledTank1Updated);
- QObject::connect(m_percentFilledTank2Node.data(), &QOpcUaNode::attributeUpdated, this, &OpcUaMachineBackend::percentFilledTank2Updated);
- QObject::connect(m_tank2TargetPercentNode.data(), &QOpcUaNode::attributeUpdated, this, &OpcUaMachineBackend::tank2TargetPercentUpdated);
- QObject::connect(m_tank2ValveStateNode.data(), &QOpcUaNode::attributeUpdated, this, &OpcUaMachineBackend::tank2ValveStateUpdated);
+ QObject::connect(m_machineStateNode.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::machineStateUpdated);
+ QObject::connect(m_percentFilledTank1Node.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::percentFilledTank1Updated);
+ QObject::connect(m_percentFilledTank2Node.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::percentFilledTank2Updated);
+ QObject::connect(m_tank2TargetPercentNode.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::tank2TargetPercentUpdated);
+ QObject::connect(m_tank2ValveStateNode.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::tank2ValveStateUpdated);
// Subscribe to data changes
m_machineStateNode->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100));
diff --git a/examples/opcua/waterpump/qml-hmi/opcuamachinebackend.h b/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.h
index 8d2d714..8d2d714 100644
--- a/examples/opcua/waterpump/qml-hmi/opcuamachinebackend.h
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.h
diff --git a/examples/opcua/waterpump/qml-hmi/qml.qrc b/examples/opcua/waterpump/waterpump-qmlcpp/qml.qrc
index 842c33f..842c33f 100644
--- a/examples/opcua/waterpump/qml-hmi/qml.qrc
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/qml.qrc
diff --git a/examples/opcua/waterpump/qml-hmi/qml-hmi.pro b/examples/opcua/waterpump/waterpump-qmlcpp/waterpump-qmlcpp.pro
index c08a360..21ca97f 100644
--- a/examples/opcua/waterpump/qml-hmi/qml-hmi.pro
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/waterpump-qmlcpp.pro
@@ -1,6 +1,5 @@
QT += quick opcua
CONFIG += c++11
-TARGET = qml-hmi
SOURCES += main.cpp \
opcuamachinebackend.cpp
@@ -11,5 +10,5 @@ HEADERS += \
opcuamachinebackend.h
#install
-target.path = $$[QT_INSTALL_EXAMPLES]/opcua/waterpump/qml-hmi
+target.path = $$[QT_INSTALL_EXAMPLES]/opcua/waterpump/waterpump-qmlcpp
INSTALLS += target
diff --git a/examples/opcua/waterpump/waterpump.pro b/examples/opcua/waterpump/waterpump.pro
index bc3bd54..1b9f2bd 100644
--- a/examples/opcua/waterpump/waterpump.pro
+++ b/examples/opcua/waterpump/waterpump.pro
@@ -1,3 +1,2 @@
TEMPLATE = subdirs
-
-SUBDIRS += simulationserver qml-hmi
+SUBDIRS += simulationserver waterpump-qmlcpp waterpump-qml
diff --git a/src/imports/imports.pro b/src/imports/imports.pro
new file mode 100644
index 0000000..d7edd8e
--- /dev/null
+++ b/src/imports/imports.pro
@@ -0,0 +1,3 @@
+TEMPLATE = subdirs
+QT_FOR_CONFIG += opcua-private
+qtHaveModule(opcua): SUBDIRS += opcua
diff --git a/src/imports/opcua/opcua.pro b/src/imports/opcua/opcua.pro
new file mode 100644
index 0000000..cacf552
--- /dev/null
+++ b/src/imports/opcua/opcua.pro
@@ -0,0 +1,37 @@
+QT += quick opcua
+
+SOURCES += \
+ opcua_plugin.cpp \
+ opcuaconnection.cpp \
+ opcuanode.cpp \
+ opcuamethodnode.cpp \
+ opcuavaluenode.cpp \
+ opcuanodeid.cpp \
+ opcuarelativenodepath.cpp \
+ opcuarelativenodeid.cpp \
+ opcuanodeidtype.cpp \
+ universalnode.cpp \
+ opcuapathresolver.cpp \
+ opcuaattributevalue.cpp \
+ opcuaattributecache.cpp \
+
+HEADERS += \
+ opcua_plugin.h \
+ opcuaconnection.h \
+ opcuanode.h \
+ opcuamethodnode.h \
+ opcuavaluenode.h \
+ opcuanodeid.h \
+ opcuarelativenodepath.h \
+ opcuarelativenodeid.h \
+ opcuanodeidtype.h \
+ universalnode.h \
+ opcuapathresolver.h \
+ opcuaattributecache.h \
+ opcuaattributevalue.h \
+
+load(qml_plugin)
+
+OTHER_FILES += \
+ plugin.json \
+ qmldir \
diff --git a/src/imports/opcua/opcua_plugin.cpp b/src/imports/opcua/opcua_plugin.cpp
new file mode 100644
index 0000000..1f6accb
--- /dev/null
+++ b/src/imports/opcua/opcua_plugin.cpp
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "opcua_plugin.h"
+#include "opcuavaluenode.h"
+#include "opcuamethodnode.h"
+#include "opcuanodeid.h"
+#include "opcuanodeidtype.h"
+#include "opcuaconnection.h"
+#include "opcuarelativenodepath.h"
+#include "opcuarelativenodeid.h"
+#include "qopcuatype.h"
+#include <QLoggingCategory>
+
+#include <qqml.h>
+
+QT_BEGIN_NAMESPACE
+
+Q_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_QML, "qt.opcua.plugins.qml")
+
+namespace Constants {
+ Q_NAMESPACE
+ Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
+ Q_ENUM_NS(QOpcUa::ReferenceTypeId)
+ // Only one type declaration is needed because all other
+ // types of the same meta object will be added automatically.
+}
+
+void OpcUaPlugin::registerTypes(const char *uri)
+{
+ Q_ASSERT(uri == QStringLiteral("QtOpcUa"));
+
+ // @uri QtOpcUa
+ const int major = 5;
+ const int minor = 12;
+
+ // Register the 5.12 types
+
+ qmlRegisterType<OpcUaConnection>(uri, major, minor, "Connection");
+ qmlRegisterType<OpcUaValueNode>(uri, major, minor, "ValueNode");
+ qmlRegisterType<OpcUaMethodNode>(uri, major, minor, "MethodNode");
+ qmlRegisterType<OpcUaNode>(uri, major, minor, "Node");
+ qmlRegisterType<OpcUaNodeId>(uri, major, minor, "NodeId");
+ qmlRegisterUncreatableType<OpcUaNodeIdType>(uri, major, minor, "NodeIdType",
+ "The type 'NodeIdType' is not creatable. Use 'NodeId' or 'RelativeNodeId' instead.");
+ qmlRegisterType<OpcUaRelativeNodePath>(uri, major, minor, "RelativeNodePath");
+ qmlRegisterType<OpcUaRelativeNodeId>(uri, major, minor, "RelativeNodeId");
+ qmlRegisterUncreatableMetaObject(Constants::staticMetaObject, uri, major, minor, "Constants", "This type can not be created.");
+
+ // insert new versions here
+
+ // Register the latest Qt version as QML type version
+ qmlRegisterModule(uri, QT_VERSION_MAJOR, QT_VERSION_MINOR);
+}
+
+QT_END_NAMESPACE
+
+#include "opcua_plugin.moc"
+
diff --git a/config.tests/freeopcua/main.cpp b/src/imports/opcua/opcua_plugin.h
index a7008fb..aed7e79 100644
--- a/config.tests/freeopcua/main.cpp
+++ b/src/imports/opcua/opcua_plugin.h
@@ -1,9 +1,9 @@
/****************************************************************************
**
-** Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
-** This file is part of the QtOpcUa module of the Qt Toolkit.
+** This file is part of the Qt OPC UA module.
**
** $QT_BEGIN_LICENSE:LGPL3$
** Commercial License Usage
@@ -34,19 +34,19 @@
**
****************************************************************************/
-#include <opc/ua/node.h>
-#include <opc/ua/client/client.h>
-#include <opc/ua/server/server.h>
-#include <opc/ua/protocol/variant.h>
-#include <opc/ua/services/method.h>
+#pragma once
-int main()
+#include <QQmlExtensionPlugin>
+
+QT_BEGIN_NAMESPACE
+
+class OpcUaPlugin : public QQmlExtensionPlugin
{
- OpcUa::UaServer server(false);
- server.Start();
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
- OpcUa::UaClient client(false);
- client.Connect("opc.tcp://dummy:4711");
+public:
+ void registerTypes(const char *uri);
+};
- return 0;
-}
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuaattributecache.cpp b/src/imports/opcua/opcuaattributecache.cpp
new file mode 100644
index 0000000..b57acc8
--- /dev/null
+++ b/src/imports/opcua/opcuaattributecache.cpp
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "opcuaattributecache.h"
+#include "opcuaattributevalue.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class OpcUaAttributeCache
+ \inqmlmodule QtOpcUa
+ \brief Flexible attribute value cache providing signals.
+ \internal
+
+ This class is just for internal use in the declarative backend and not exposed to users.
+
+ It caches node attribute values and provides accesss. Main purpose is to
+ let \l OpcUaAttributeValue provide separate value change signals for each attribute.
+
+ \sa OpcUaAttributeValue
+*/
+
+OpcUaAttributeCache::OpcUaAttributeCache(QObject *parent) : QObject(parent)
+{
+}
+
+void OpcUaAttributeCache::setAttributeValue(QOpcUa::NodeAttribute attr, const QVariant &value)
+{
+ attribute(attr)->setValue(value);
+}
+
+void OpcUaAttributeCache::invalidate()
+{
+ // Reset all values in the cache to invalid.
+ // Do not clear() the cache because there are still objects with
+ // connections waiting for notifications
+ for (auto i = m_attributeCache.constBegin(); i != m_attributeCache.constEnd(); ++i)
+ i.value()->invalidate();
+}
+
+OpcUaAttributeValue *OpcUaAttributeCache::attribute(QOpcUa::NodeAttribute attr)
+{
+ if (!m_attributeCache.contains(attr))
+ m_attributeCache.insert(attr, new OpcUaAttributeValue(this));
+ return m_attributeCache.value(attr);
+}
+
+const QVariant &OpcUaAttributeCache::attributeValue(QOpcUa::NodeAttribute attr)
+{
+ return attribute(attr)->value();
+}
+
+QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuareferencedescription_p.h b/src/imports/opcua/opcuaattributecache.h
index 9b23f12..f9a761b 100644
--- a/src/opcua/client/qopcuareferencedescription_p.h
+++ b/src/imports/opcua/opcuaattributecache.h
@@ -1,9 +1,9 @@
/****************************************************************************
**
-** Copyright (C) 2017 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
-** This file is part of the QtOpcUa module of the Qt Toolkit.
+** This file is part of the Qt OPC UA module.
**
** $QT_BEGIN_LICENSE:LGPL3$
** Commercial License Usage
@@ -34,36 +34,29 @@
**
****************************************************************************/
-#ifndef QOPCUAREFERENCEDESCRIPTION_P_H
-#define QOPCUAREFERENCEDESCRIPTION_P_H
+#pragma once
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtOpcUa/qopcuatype.h>
-
-#include <QtCore/qshareddata.h>
+#include "qopcuatype.h"
+#include <QObject>
QT_BEGIN_NAMESPACE
-class QOpcUaReferenceDescriptionPrivate : public QSharedData
+class OpcUaAttributeValue;
+
+class OpcUaAttributeCache : public QObject
{
+ Q_OBJECT
public:
- QOpcUa::ReferenceTypeId refType;
- QString nodeId;
- QOpcUa::QQualifiedName browseName;
- QOpcUa::QLocalizedText displayName;
- QOpcUa::NodeClass nodeClass;
+ explicit OpcUaAttributeCache(QObject *parent = nullptr);
+ OpcUaAttributeValue *attribute(QOpcUa::NodeAttribute attribute);
+ const QVariant &attributeValue(QOpcUa::NodeAttribute);
+
+public slots:
+ void setAttributeValue(QOpcUa::NodeAttribute attribute, const QVariant &value);
+ void invalidate();
+
+private:
+ QHash<QOpcUa::NodeAttribute, OpcUaAttributeValue *> m_attributeCache;
};
QT_END_NAMESPACE
-
-#endif // QOPCUAREFERENCEDESCRIPTION_P_H
diff --git a/src/imports/opcua/opcuaattributevalue.cpp b/src/imports/opcua/opcuaattributevalue.cpp
new file mode 100644
index 0000000..493d7d0
--- /dev/null
+++ b/src/imports/opcua/opcuaattributevalue.cpp
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "opcuaattributevalue.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class OpcUaAttributeValue
+ \inqmlmodule QtOpcUa
+ \brief Stores an attribute value and provides a changed signal.
+ \internal
+
+ This class is just for internal use in the declarative backend and not exposed to users.
+
+ When setting the value it will emit a changed signal if the value has changed.
+
+ \sa OpcUaAttributeCache
+*/
+
+OpcUaAttributeValue::OpcUaAttributeValue(QObject *parent)
+ : QObject(parent)
+{
+
+}
+
+bool OpcUaAttributeValue::operator ==(const OpcUaAttributeValue &rhs)
+{
+ return m_value == rhs.m_value;
+}
+
+void OpcUaAttributeValue::setValue(const QVariant &value)
+{
+ if (value != m_value) {
+ m_value = value;
+ emit changed(m_value);
+ }
+}
+
+void OpcUaAttributeValue::invalidate()
+{
+ setValue(QVariant());
+}
+
+const QVariant &OpcUaAttributeValue::value() const
+{
+ return m_value;
+}
+
+OpcUaAttributeValue::operator QVariant() const
+{
+ return value();
+}
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuaattributevalue.h b/src/imports/opcua/opcuaattributevalue.h
new file mode 100644
index 0000000..a3c073c
--- /dev/null
+++ b/src/imports/opcua/opcuaattributevalue.h
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+#include <QObject>
+#include <QVariant>
+
+QT_BEGIN_NAMESPACE
+
+class OpcUaAttributeValue : public QObject
+{
+ Q_OBJECT
+public:
+ explicit OpcUaAttributeValue(QObject *parent);
+ bool operator ==(const OpcUaAttributeValue &rhs);
+ void setValue(const QVariant &value);
+ void invalidate();
+ const QVariant &value() const;
+ operator QVariant() const;
+
+signals:
+ void changed(QVariant value);
+
+private:
+ QVariant m_value;
+};
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuaconnection.cpp b/src/imports/opcua/opcuaconnection.cpp
new file mode 100644
index 0000000..7cbb8c5
--- /dev/null
+++ b/src/imports/opcua/opcuaconnection.cpp
@@ -0,0 +1,261 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "opcuaconnection.h"
+#include <QOpcUaProvider>
+#include <QLoggingCategory>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \qmltype Connection
+ \inqmlmodule QtOpcUa
+ \brief Connects to a server.
+ \since QtOpcUa 5.12
+
+ The main API uses backends to make connections. You have to set the backend before
+ any connection attempt.
+
+ \code
+ import QtOpcUa 5.12 as QtOpcUa
+
+ QtOpcUa.Connection {
+ backend: "open62541"
+ }
+
+ Component.onCompleted: {
+ connection.connectToEndpoint("opc.tcp://127.0.0.1:43344");
+ }
+ \endcode
+*/
+
+/*!
+ \qmlproperty stringlist Connection::availableBackends
+ \readonly
+
+ Returns the names of all available backends as a list.
+ These are used to select a backend when connecting.
+
+ \sa Connection::backend
+*/
+
+/*!
+ \qmlproperty bool Connection::connected
+ \readonly
+
+ Status of the connection.
+ \c true when there is a connection, otherwise \c false.
+*/
+
+/*!
+ \qmlproperty string Connection::backend
+
+ Set the backend to use for a connection to the server.
+ Has to be set before any connection attempt.
+
+ \sa Connection::availableBackends
+*/
+
+/*!
+ \qmlproperty bool Connection::defaultConnection
+
+ Makes this the default connection.
+ Usually each node needs to be given a connection to use. If this property
+ is set to \c true, this connection will be used in all cases where a node has no
+ connection set. Already established connections are not affected.
+ If \c defaultConnection is set to \c true on multiple connection the last one is used.
+
+ \code
+ QtOpcUa.Connection {
+ ...
+ defaultConnection: true
+ ...
+ }
+ \endcode
+
+ \sa Node
+*/
+
+/*!
+ \qmlproperty stringlist Connection::namespaces
+ \readonly
+
+ List of strings of all namespace URIs registered on the connected server.
+*/
+
+Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_QML)
+
+OpcUaConnection* OpcUaConnection::m_defaultConnection = nullptr;
+
+OpcUaConnection::OpcUaConnection(QObject *parent):
+ QObject(parent)
+{
+}
+
+OpcUaConnection::~OpcUaConnection()
+{
+ setDefaultConnection(false);
+ if (m_client) {
+ m_client->deleteLater();
+ m_client = nullptr;
+ }
+}
+
+QStringList OpcUaConnection::availableBackends() const
+{
+ return QOpcUaProvider::availableBackends();
+}
+
+bool OpcUaConnection::connected() const
+{
+ return m_connected && m_client;
+}
+
+void OpcUaConnection::setBackend(const QString &name)
+{
+ if (name.isEmpty())
+ return;
+
+ if (!availableBackends().contains(name)) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << tr("Backend '%1' is not available").arg(name);
+ qCDebug(QT_OPCUA_PLUGINS_QML) << tr("Available backends:") << availableBackends().join(QLatin1Char(','));
+ return;
+ }
+
+ if (m_client) {
+ if (m_client->backend() == name)
+ return;
+
+ m_client->disconnectFromEndpoint();
+ m_client->disconnect(this);
+ m_client->deleteLater();
+ }
+
+ QOpcUaProvider provider;
+ m_client = provider.createClient(name);
+ if (m_client) {
+ qCDebug(QT_OPCUA_PLUGINS_QML) << "Created plugin" << m_client->backend();
+ connect(m_client, &QOpcUaClient::stateChanged, this, &OpcUaConnection::clientStateHandler);
+ connect(m_client, &QOpcUaClient::namespaceArrayUpdated, this, &OpcUaConnection::namespacesChanged);
+ connect(m_client, &QOpcUaClient::namespaceArrayUpdated, this, [&]() {
+ if (!m_connected) {
+ m_connected = true;
+ emit connectedChanged();
+ }
+ });
+ m_client->setNamespaceAutoupdate(true);
+ } else {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << tr("Backend '%1' could not be created.").arg(name);
+ }
+ emit backendChanged();
+}
+
+QString OpcUaConnection::backend() const
+{
+ if (m_client)
+ return m_client->backend();
+ else
+ return QString();
+}
+
+OpcUaConnection *OpcUaConnection::defaultConnection()
+{
+ return m_defaultConnection;
+}
+
+bool OpcUaConnection::isDefaultConnection() const
+{
+ return m_defaultConnection == this;
+}
+
+/*!
+ \qmlmethod Connection::connectToEndpoint(url)
+
+ Connects to the given endpoint.
+*/
+
+void OpcUaConnection::connectToEndpoint(const QUrl &url)
+{
+ if (!m_client)
+ return;
+
+ m_client->connectToEndpoint(url);
+}
+
+/*!
+ \qmlmethod Connection::disconnectFromEndpoint(url)
+
+ Disconnects an established connection.
+*/
+
+void OpcUaConnection::disconnectFromEndpoint()
+{
+ if (!m_client)
+ return;
+
+ m_client->disconnectFromEndpoint();
+}
+
+void OpcUaConnection::setDefaultConnection(bool defaultConnection)
+{
+ if (!defaultConnection && m_defaultConnection == this)
+ m_defaultConnection = nullptr;
+
+ if (defaultConnection)
+ m_defaultConnection = this;
+
+ emit defaultConnectionChanged();
+}
+
+void OpcUaConnection::clientStateHandler(QOpcUaClient::ClientState state)
+{
+ if (m_connected) {
+ // don't immediately send the state; we have to wait for the namespace
+ // array to be updated
+ m_connected = (state == QOpcUaClient::ClientState::Connected);
+ emit connectedChanged();
+ }
+}
+
+QStringList OpcUaConnection::namespaces() const
+{
+ if (!m_client)
+ return QStringList();
+
+ return m_client->namespaceArray();
+}
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuaconnection.h b/src/imports/opcua/opcuaconnection.h
new file mode 100644
index 0000000..3b0f46a
--- /dev/null
+++ b/src/imports/opcua/opcuaconnection.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+#include <QObject>
+#include <QOpcUaClient>
+
+QT_BEGIN_NAMESPACE
+
+class OpcUaConnection : public QObject
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(OpcUaConnection)
+ Q_PROPERTY(QStringList availableBackends READ availableBackends NOTIFY availableBackendsChanged)
+ Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged)
+ Q_PROPERTY(QString backend READ backend WRITE setBackend NOTIFY backendChanged)
+ Q_PROPERTY(bool defaultConnection READ defaultConnection WRITE setDefaultConnection NOTIFY defaultConnectionChanged)
+ Q_PROPERTY(QStringList namespaces READ namespaces NOTIFY namespacesChanged)
+
+public:
+ OpcUaConnection(QObject *parent = nullptr);
+ ~OpcUaConnection();
+ QStringList availableBackends() const;
+ bool connected() const;
+ void setBackend(const QString &name);
+ QString backend() const;
+ static OpcUaConnection *defaultConnection();
+ bool isDefaultConnection() const;
+ QStringList namespaces() const;
+
+public slots:
+ void connectToEndpoint(const QUrl &url);
+ void disconnectFromEndpoint();
+ void setDefaultConnection(bool defaultConnection = true);
+
+signals:
+ void availableBackendsChanged();
+ void connectedChanged();
+ void backendChanged();
+ void defaultConnectionChanged();
+ void namespacesChanged();
+
+private slots:
+ void clientStateHandler(QOpcUaClient::ClientState state);
+
+private:
+ QOpcUaClient *m_client = nullptr;
+ bool m_connected = false;
+ static OpcUaConnection* m_defaultConnection;
+
+friend class OpcUaNode;
+friend class OpcUaValueNode;
+friend class OpcUaMethodNode;
+};
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuamethodnode.cpp b/src/imports/opcua/opcuamethodnode.cpp
new file mode 100644
index 0000000..bb3037e
--- /dev/null
+++ b/src/imports/opcua/opcuamethodnode.cpp
@@ -0,0 +1,144 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "opcuamethodnode.h"
+#include "opcuanodeidtype.h"
+#include <QOpcUaNode>
+#include <QLoggingCategory>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \qmltype MethodNode
+ \inqmlmodule QtOpcUa
+ \brief Calls a method on the server.
+ \since QtOpcUa 5.12
+ \inherits Node
+
+ This QML element supports calling method nodes on a server.
+ The target object node ID has to be specified by the \l objectNodeId property.
+
+ \code
+ import QtOpcUa 5.12 as QtOpcUa
+
+ QtOpcUa.MethodNode {
+ nodeId : QtOpcUa.NodeId {
+ identifier: "s=Example.Method"
+ ns: "Example Namespace"
+ }
+ objectNodeId : QtOpcUa.NodeId {
+ identifier: "s=Example.Object"
+ ns: "Example Namespace"
+ }
+ connection: myConnection
+ }
+ \endcode
+
+ The actual function call can be triggered by a signal.
+
+ \code
+ Button {
+ text: "Start"
+ onClicked: myNode.callMethod
+ }
+ \endcode
+
+ or by JavaScript
+
+ \code
+ myNode.callMethod()
+ \endcode
+*/
+
+/*!
+ \qmlmethod MethodNode::callMethod
+
+ Calls the method on the connected server.
+*/
+
+/*!
+ \qmlproperty OpcUaNode MethodNode::objectNodeId
+
+ Determines the actual node on which the method is called.
+ It can be a relative or absolute node Id.
+*/
+
+Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_QML)
+
+OpcUaMethodNode::OpcUaMethodNode(QObject *parent):
+ OpcUaNode(parent)
+{
+}
+
+OpcUaNodeIdType *OpcUaMethodNode::objectNodeId() const
+{
+ return m_objectNodeId;
+}
+
+void OpcUaMethodNode::setObjectNodeId(OpcUaNodeIdType *node)
+{
+ if (m_objectNodeId)
+ disconnect(m_objectNodeId);
+
+ m_objectNodeId = node;
+ connect(m_objectNodeId, &OpcUaNodeIdType::nodeChanged, this, &OpcUaMethodNode::handleObjectNodeIdChanged);
+ handleObjectNodeIdChanged();
+}
+
+void OpcUaMethodNode::callMethod()
+{
+ if (!m_objectNode || !m_objectNode->node() || !m_node) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "No node or no object";
+ return;
+ }
+
+ m_objectNode->node()->callMethod(m_node->nodeId(), QVector<QOpcUa::TypedVariant>());
+}
+
+void OpcUaMethodNode::handleObjectNodeIdChanged()
+{
+ m_objectNode->deleteLater();
+ m_objectNode = new OpcUaNode(this);
+ m_objectNode->setNodeId(m_objectNodeId);
+ emit objectNodeIdChanged();
+}
+
+void OpcUaMethodNode::setupNode(const QString &absolutePath)
+{
+ OpcUaNode::setupNode(absolutePath);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/opcua/freeopcua/qfreeopcuaclient.h b/src/imports/opcua/opcuamethodnode.h
index 975d4af..255db8e 100644
--- a/src/plugins/opcua/freeopcua/qfreeopcuaclient.h
+++ b/src/imports/opcua/opcuamethodnode.h
@@ -1,9 +1,9 @@
/****************************************************************************
**
-** Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
-** This file is part of the QtOpcUa module of the Qt Toolkit.
+** This file is part of the Qt OPC UA module.
**
** $QT_BEGIN_LICENSE:LGPL3$
** Commercial License Usage
@@ -34,38 +34,39 @@
**
****************************************************************************/
-#ifndef QFREEOPCUACLIENT_P_H
-#define QFREEOPCUACLIENT_P_H
+#pragma once
-#include <private/qopcuaclientimpl_p.h>
+#include "opcuanode.h"
-#include <QtCore/qobject.h>
-#include <QtCore/qthread.h>
-#include <QtCore/qurl.h>
+QT_BEGIN_NAMESPACE
-#include <opc/ua/client/client.h>
+class OpcUaNodeIdType;
-QT_BEGIN_NAMESPACE
-class QFreeOpcUaWorker;
-class QOpcUaNode;
-class QFreeOpcUaClientImpl : public QOpcUaClientImpl
+class OpcUaMethodNode : public OpcUaNode
{
+ Q_OBJECT
+ Q_PROPERTY(OpcUaNodeIdType* objectNodeId READ objectNodeId WRITE setObjectNodeId NOTIFY objectNodeIdChanged)
+
public:
- explicit QFreeOpcUaClientImpl();
- ~QFreeOpcUaClientImpl() override;
+ OpcUaMethodNode(QObject *parent = nullptr);
+ OpcUaNodeIdType *objectNodeId() const;
- void connectToEndpoint(const QUrl &url) override;
- void disconnectFromEndpoint() override;
- QOpcUaNode *node(const QString &nodeId) override;
+public slots:
+ void setObjectNodeId(OpcUaNodeIdType *nodeId);
+ void callMethod();
- QString backend() const override { return QStringLiteral("freeopcua"); }
+signals:
+ void objectNodeIdChanged();
- QFreeOpcUaWorker *m_opcuaWorker{};
+private slots:
+ void handleObjectNodeIdChanged();
private:
- QThread *m_thread{};
+ void setupNode(const QString &absolutePath) override;
+
+private:
+ OpcUaNodeIdType *m_objectNodeId = nullptr;
+ OpcUaNode *m_objectNode = nullptr;
};
QT_END_NAMESPACE
-
-#endif // QFREEOPCUACLIENT_P_H
diff --git a/src/imports/opcua/opcuanode.cpp b/src/imports/opcua/opcuanode.cpp
new file mode 100644
index 0000000..28fe73c
--- /dev/null
+++ b/src/imports/opcua/opcuanode.cpp
@@ -0,0 +1,362 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "opcuanode.h"
+#include "opcuanodeidtype.h"
+#include "opcuaconnection.h"
+#include "opcuanodeid.h"
+#include "opcuarelativenodepath.h"
+#include "opcuarelativenodeid.h"
+#include "opcuapathresolver.h"
+#include "opcuaattributevalue.h"
+#include <qopcuatype.h>
+#include <QOpcUaNode>
+#include <QOpcUaClient>
+#include <QLoggingCategory>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \qmltype Node
+ \inqmlmodule QtOpcUa
+ \brief Represents a node on a server.
+ \since QtOpcUa 5.12
+
+ \code
+ import QtOpcUa 5.12 as QtOpcUa
+
+ QtOpcUa.Node {
+ nodeId : QtOpcUa.NodeId {
+ identifier: "s=Example.Method"
+ ns: "Example Namespace"
+ }
+ connection: myConnection
+ }
+ \endcode
+*/
+
+/*!
+ \qmlproperty NodeId Node::nodeId
+
+ ID of the node on the server to be used.
+ This can be an absolute node ID or a relative node ID.
+
+ \sa NodeId, RelativeNodeId
+*/
+
+/*!
+ \qmlproperty Connection Node::connection
+
+ The connection to be used for node instances.
+ The node will automatically be accessible when the associated connection
+ has established a connection to a server.
+
+ If this property is not set, the default connection will be used, if any.
+
+ \sa Connection, Connection::defaultConnection
+*/
+
+/*!
+ \qmlproperty bool Node::readyToUse
+ \readonly
+
+ This property returns whether the node is ready to use.
+ This happens once after a successful connection to a server was established
+ and the node was successfully set up.
+*/
+
+/*!
+ \qmlsignal Connection::nodeChanged()
+
+ Emitted when the underlying node has changed.
+ This happens when the namespace or identifier of the \l NodeId changed.
+*/
+
+/*!
+ \qmlproperty QOpcUa::NodeClass Node::nodeClass
+ \readonly
+
+ The node class of the node. In case the information is not available
+ \c QtOpcUa.Constants.NodeClass.Undefined is returned.
+*/
+
+/*!
+ \qmlproperty string Node::browseName
+
+ The browse name of the node. In case the information is not available
+ an empty string is returned.
+*/
+
+/*!
+ \qmlproperty LocalizedText Node::displayName
+
+ The localized text of the node. In case the information is not available
+ a default constructed \l LocalizedText is returned.
+*/
+
+/*!
+ \qmlproperty LocalizedText Node::description
+
+ The description of the node. In case the information is not available
+ a default constructed \l LocalizedText is returned.
+*/
+
+Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_QML)
+
+OpcUaNode::OpcUaNode(QObject *parent):
+ QObject(parent),
+ m_nodeId(new OpcUaNodeIdType(this)),
+ m_attributesToRead(QOpcUaNode::mandatoryBaseAttributes())
+{
+ m_attributesToRead |= QOpcUa::NodeAttribute::Description;
+ connect(&m_resolvedNode, &UniversalNode::nodeChanged, this, &OpcUaNode::nodeChanged);
+ connect(m_attributeCache.attribute(QOpcUa::NodeAttribute::BrowseName), &OpcUaAttributeValue::changed, this, &OpcUaNode::browseNameChanged);
+ connect(m_attributeCache.attribute(QOpcUa::NodeAttribute::NodeClass), &OpcUaAttributeValue::changed, this, &OpcUaNode::nodeClassChanged);
+ connect(m_attributeCache.attribute(QOpcUa::NodeAttribute::DisplayName), &OpcUaAttributeValue::changed, this, &OpcUaNode::displayNameChanged);
+ connect(m_attributeCache.attribute(QOpcUa::NodeAttribute::Description), &OpcUaAttributeValue::changed, this, &OpcUaNode::descriptionChanged);
+}
+
+OpcUaNode::~OpcUaNode()
+{
+ delete m_node;
+}
+
+OpcUaNodeIdType *OpcUaNode::nodeId() const
+{
+ return m_nodeId;
+}
+
+OpcUaConnection *OpcUaNode::connection()
+{
+ if (!m_connection)
+ setConnection(OpcUaConnection::defaultConnection());
+
+ return m_connection;
+}
+
+bool OpcUaNode::readyToUse() const
+{
+ return m_readyToUse;
+}
+
+void OpcUaNode::setBrowseName(const QString &value)
+{
+ if (!m_connection || !m_node)
+ return;
+ if (!m_resolvedNode.isNamespaceIndexValid())
+ return;
+
+ m_node->writeAttribute(QOpcUa::NodeAttribute::BrowseName, QOpcUa::QQualifiedName(m_resolvedNode.namespaceIndex(), value));
+}
+
+QString OpcUaNode::browseName()
+{
+ return m_attributeCache.attributeValue(QOpcUa::NodeAttribute::BrowseName).value<QOpcUa::QQualifiedName>().name();
+}
+
+QOpcUa::NodeClass OpcUaNode::nodeClass()
+{
+ return m_attributeCache.attributeValue(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>();
+}
+
+void OpcUaNode::setDisplayName(const QOpcUa::QLocalizedText &value)
+{
+ if (!m_connection || !m_node)
+ return;
+ m_node->writeAttribute(QOpcUa::NodeAttribute::DisplayName, value);
+}
+
+QOpcUa::QLocalizedText OpcUaNode::displayName()
+{
+ return m_attributeCache.attributeValue(QOpcUa::NodeAttribute::DisplayName).value<QOpcUa::QLocalizedText>();
+}
+
+void OpcUaNode::setDescription(const QOpcUa::QLocalizedText &value)
+{
+ if (!m_connection || !m_node)
+ return;
+ m_node->writeAttribute(QOpcUa::NodeAttribute::Description, value);
+}
+
+QOpcUa::QLocalizedText OpcUaNode::description()
+{
+ return m_attributeCache.attributeValue(QOpcUa::NodeAttribute::Description).value<QOpcUa::QLocalizedText>();
+}
+
+void OpcUaNode::setNodeId(OpcUaNodeIdType *nodeId)
+{
+ if (m_nodeId == nodeId)
+ return;
+
+ // This deletes the initial dummy object that was created in the
+ // constructor in case a "real" nodeId is set.
+ if (m_nodeId->parent() == this)
+ m_nodeId->deleteLater();
+
+ // Disconnect signals from old node
+ m_nodeId->disconnect(this);
+ m_nodeId = nodeId;
+ connect(m_nodeId, &OpcUaNodeIdType::nodeChanged, this, &OpcUaNode::updateNode);
+ connect(m_nodeId, &OpcUaNodeIdType::destroyed, this, [&]() { m_nodeId = nullptr; });
+
+ updateNode();
+}
+
+void OpcUaNode::setConnection(OpcUaConnection *connection)
+{
+ if (connection == m_connection)
+ return;
+
+ m_connection = connection;
+ connect(connection, SIGNAL(connectedChanged()), this, SLOT(updateNode()));
+
+ updateNode();
+ emit connectionChanged(connection);
+}
+
+void OpcUaNode::setupNode(const QString &absoluteNodePath)
+{
+ m_attributeCache.invalidate();
+ m_absoluteNodePath = absoluteNodePath;
+
+ if (m_node) {
+ m_node->deleteLater();
+ m_node = nullptr;
+ }
+
+ if (m_absoluteNodePath.isEmpty())
+ return;
+
+ auto conn = connection();
+ if (!conn || !m_nodeId || !conn->m_client)
+ return;
+
+ if (!conn->connected())
+ return;
+
+ m_node = conn->m_client->node(m_absoluteNodePath);
+ if (!m_node) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Invalid node:" << m_absoluteNodePath;
+ return;
+ }
+
+ connect(m_node, &QOpcUaNode::attributeUpdated, &m_attributeCache, &OpcUaAttributeCache::setAttributeValue);
+ connect(m_node, &QOpcUaNode::attributeRead, this, [this](){
+ setReadyToUse(true);
+ });
+
+ // Read mandatory attributes
+ if (!m_node->readAttributes(m_attributesToRead))
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Reading attributes" << m_node->nodeId() << "failed";
+}
+
+void OpcUaNode::updateNode()
+{
+ retrieveAbsoluteNodePath(m_nodeId, [this](const QString &absoluteNodePath) {setupNode(absoluteNodePath);});
+}
+
+const UniversalNode &OpcUaNode::resolvedNode() const
+{
+ return m_resolvedNode;
+}
+
+QOpcUaNode *OpcUaNode::node() const
+{
+ return m_node;
+}
+
+void OpcUaNode::setAttributesToRead(QOpcUa::NodeAttributes attributes)
+{
+ m_attributesToRead = attributes;
+}
+
+QOpcUa::NodeAttributes OpcUaNode::attributesToRead() const
+{
+ return m_attributesToRead;
+}
+
+void OpcUaNode::retrieveAbsoluteNodePath(OpcUaNodeIdType *node, std::function<void (const QString &)> functor)
+{
+ auto conn = connection();
+ if (!conn || !m_nodeId || !conn->m_client) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "connection, nodeID or client is invalid";
+ return;
+ }
+
+ if (!conn->connected()) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "not connected";
+ return;
+ }
+
+ if (qobject_cast<const OpcUaNodeId *>(node)) {
+ UniversalNode tmp(node);
+ tmp.resolveNamespace(conn->m_client);
+ m_resolvedNode.from(tmp);
+ functor(m_resolvedNode.fullNodeId());
+ emit nodeIdChanged(m_nodeId);
+ emit nodeChanged();
+ } else if (qobject_cast<OpcUaRelativeNodeId *>(node)) {
+ auto nodeId = qobject_cast<OpcUaRelativeNodeId *>(node);
+ OpcUaPathResolver *resolver = new OpcUaPathResolver(nodeId, conn->m_client, this);
+ connect(resolver, &OpcUaPathResolver::resolvedNode, this, [this, functor, resolver](UniversalNode nodeToUse, const QString &errorMessage) {
+ resolver->deleteLater();
+
+ if (!errorMessage.isEmpty()) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Failed to resolve node:" << errorMessage;
+ functor(QString());
+ return;
+ }
+
+ m_resolvedNode.from(nodeToUse);
+ functor(m_resolvedNode.fullNodeId());
+ emit nodeIdChanged(m_nodeId);
+ emit nodeChanged();
+ });
+ resolver->startResolving();
+ } else {
+ functor(QString());
+ }
+}
+
+void OpcUaNode::setReadyToUse(bool value)
+{
+ bool old = m_readyToUse;
+ m_readyToUse = value;
+ if (!old && value)
+ emit readyToUseChanged();
+}
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuanode.h b/src/imports/opcua/opcuanode.h
new file mode 100644
index 0000000..c5763bd
--- /dev/null
+++ b/src/imports/opcua/opcuanode.h
@@ -0,0 +1,124 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+#include <QObject>
+#include "qopcuatype.h"
+#include "universalnode.h"
+#include "opcuaattributecache.h"
+
+QT_BEGIN_NAMESPACE
+
+class QOpcUaNode;
+class OpcUaConnection;
+class OpcUaNodeIdType;
+
+class OpcUaNode : public QObject
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(OpcUaNode)
+ Q_PROPERTY(OpcUaNodeIdType* nodeId READ nodeId WRITE setNodeId NOTIFY nodeIdChanged)
+ Q_PROPERTY(OpcUaConnection* connection READ connection WRITE setConnection NOTIFY connectionChanged)
+ Q_PROPERTY(bool readyToUse READ readyToUse NOTIFY readyToUseChanged)
+
+ // basic node properties
+ Q_PROPERTY(QString browseName READ browseName WRITE setBrowseName NOTIFY browseNameChanged)
+ Q_PROPERTY(QOpcUa::NodeClass nodeClass READ nodeClass NOTIFY nodeClassChanged)
+ Q_PROPERTY(QOpcUa::QLocalizedText displayName READ displayName WRITE setDisplayName NOTIFY displayNameChanged)
+ Q_PROPERTY(QOpcUa::QLocalizedText description READ description WRITE setDescription NOTIFY descriptionChanged)
+
+ Q_ENUM(QOpcUa::NodeClass);
+
+public:
+ OpcUaNode(QObject *parent = nullptr);
+ ~OpcUaNode();
+ OpcUaNodeIdType *nodeId() const;
+ OpcUaConnection *connection();
+ bool readyToUse() const;
+
+ void setBrowseName(const QString &value);
+ QString browseName();
+
+ QOpcUa::NodeClass nodeClass();
+
+ void setDisplayName(const QOpcUa::QLocalizedText &value);
+ QOpcUa::QLocalizedText displayName();
+
+ void setDescription(const QOpcUa::QLocalizedText &value);
+ QOpcUa::QLocalizedText description();
+
+ // This function is not exposed to QML
+ const UniversalNode &resolvedNode() const;
+
+ // This function is not exposed to QML
+ QOpcUaNode* node() const;
+
+public slots:
+ void setNodeId(OpcUaNodeIdType *nodeId);
+ void setConnection(OpcUaConnection *);
+
+signals:
+ void nodeIdChanged(const OpcUaNodeIdType *nodeId);
+ void connectionChanged(OpcUaConnection *);
+ void nodeChanged();
+ void readyToUseChanged();
+ void browseNameChanged();
+ void nodeClassChanged();
+ void displayNameChanged();
+ void descriptionChanged();
+
+protected slots:
+ virtual void setupNode(const QString &absoluteNodePath);
+ void updateNode();
+
+protected:
+ void setAttributesToRead(QOpcUa::NodeAttributes attributes);
+ QOpcUa::NodeAttributes attributesToRead() const;
+ void retrieveAbsoluteNodePath(OpcUaNodeIdType *, std::function<void (const QString &)>);
+ void setReadyToUse(bool value = true);
+
+ OpcUaNodeIdType *m_nodeId = nullptr;
+ QOpcUaNode *m_node = nullptr;
+ OpcUaConnection *m_connection = nullptr;
+ QString m_absoluteNodePath; // not exposed
+ bool m_readyToUse = false;
+ UniversalNode m_resolvedNode;
+ OpcUaAttributeCache m_attributeCache;
+ QOpcUa::NodeAttributes m_attributesToRead;
+};
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuanodeid.cpp b/src/imports/opcua/opcuanodeid.cpp
new file mode 100644
index 0000000..7ed6954
--- /dev/null
+++ b/src/imports/opcua/opcuanodeid.cpp
@@ -0,0 +1,111 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "opcuanodeid.h"
+#include <QDebug>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \qmltype NodeId
+ \inqmlmodule QtOpcUa
+ \brief Specifies a node by an identifier.
+ \since QtOpcUa 5.12
+
+ \code
+ import QtOpcUa 5.12 as QtOpcUa
+
+ QtOpcUa.NodeId {
+ identifier: "s=Example.Node"
+ ns: "Example Namespace"
+ }
+ \endcode
+*/
+
+/*!
+ \qmlproperty string NodeId::namespace
+
+ Namespace of the node identifier.
+ The identifier can be the index as a number or the name as string.
+ A string which can be converted to an integer is considered a namespace index.
+*/
+
+/*!
+ \qmlproperty string NodeId::identifier
+
+ Identifer of the node.
+ The identifier has to be given in one of the followig types.
+
+ \table
+ \header
+ \li Type
+ \li Example
+ \row
+ \li Numeric
+ \li \c i=23
+ \row
+ \li String
+ \li \c s=MyStringIdentifier
+ \row
+ \li GUID
+ \li \c g=08081e75-8e5e-319b-954f-f3a7613dc29b
+ \row
+ \li Opaque (base64)
+ \li \c b=UXQgZnR3IQ==
+ \endtable
+
+ It is possible but not recommended to include the namespace index \c {ns=X;s=...}.
+ In this case the given namespace index is internally stripped off the identifier and set
+ to the namespace property.
+*/
+
+/*!
+ \qmlsignal NodeId::nodeChanged()
+
+ Emitted when the underlying node has changed.
+ This happens when the namespace or identifier has changed.
+*/
+
+OpcUaNodeId::OpcUaNodeId(QObject *parent)
+ : OpcUaNodeIdType(parent)
+{
+ connect(this, &OpcUaNodeIdType::nodeNamespaceChanged, this, &OpcUaNodeId::nodeNamespaceChanged);
+ connect(this, &OpcUaNodeIdType::identifierChanged, this, &OpcUaNodeId::identifierChanged);
+ connect(this, &OpcUaNodeIdType::nodeNamespaceChanged, this, &OpcUaNodeId::nodeChanged);
+ connect(this, &OpcUaNodeIdType::identifierChanged, this, &OpcUaNodeId::nodeChanged);
+}
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuanodeid.h b/src/imports/opcua/opcuanodeid.h
new file mode 100644
index 0000000..63078f9
--- /dev/null
+++ b/src/imports/opcua/opcuanodeid.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+#include "opcuanodeidtype.h"
+
+QT_BEGIN_NAMESPACE
+
+class OpcUaNodeId : public OpcUaNodeIdType
+{
+ Q_OBJECT
+ Q_PROPERTY(QString ns READ nodeNamespace WRITE setNodeNamespace NOTIFY nodeNamespaceChanged)
+ Q_PROPERTY(QString identifier READ identifier WRITE setIdentifier NOTIFY identifierChanged)
+
+public:
+ OpcUaNodeId(QObject *parent = nullptr);
+
+signals:
+ void nodeNamespaceChanged(const QString &);
+ void identifierChanged(const QString &);
+ void nodeChanged();
+};
+
+QT_END_NAMESPACE
diff --git a/src/plugins/opcua/freeopcua/qfreeopcuavalueconverter.h b/src/imports/opcua/opcuanodeidtype.cpp
index 0c6962e..f89f526 100644
--- a/src/plugins/opcua/freeopcua/qfreeopcuavalueconverter.h
+++ b/src/imports/opcua/opcuanodeidtype.cpp
@@ -1,9 +1,9 @@
/****************************************************************************
**
-** Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
-** This file is part of the QtOpcUa module of the Qt Toolkit.
+** This file is part of the Qt OPC UA module.
**
** $QT_BEGIN_LICENSE:LGPL3$
** Commercial License Usage
@@ -34,55 +34,64 @@
**
****************************************************************************/
-#ifndef QFREEOPCUAVALUECONVERTER_H
-#define QFREEOPCUAVALUECONVERTER_H
+#include "opcuanodeidtype.h"
+#include <QtDebug>
-#include <QtOpcUa/qopcuanode.h>
-#include <QtOpcUa/qopcuatype.h>
-
-#include <QtCore/qstring.h>
-#include <QtCore/qvariant.h>
+QT_BEGIN_NAMESPACE
-#include <vector>
+/*!
+ \qmltype OpcUaNodeIdType
+ \inqmlmodule QtOpcUa
+ \brief Common base class for all node IDs.
+ \internal
-#include <opc/ua/client/client.h>
-#include <opc/ua/protocol/variant.h>
+ This base class provides common functions for node ID related classes.
+ It is not supposed to be used from QML directly.
-QT_BEGIN_NAMESPACE
+ \sa NodeId, RelativeNodeId
+*/
-namespace QFreeOpcUaValueConverter
+OpcUaNodeIdType::OpcUaNodeIdType(QObject *parent) : QObject(parent)
{
- OpcUa::Variant toVariant(const QVariant &variant);
- QVariant toQVariant(const OpcUa::Variant &variant);
- OpcUa::Variant toTypedVariant(const QVariant &variant, QOpcUa::Types type);
- QString nodeIdToString(const OpcUa::NodeId &id);
- OpcUa::NodeId stringToNodeId(const QString &id);
+ connect(&m_universalNode, SIGNAL(namespaceNameChanged(const QString &)), this, SIGNAL(nodeNamespaceChanged(const QString &)));
+ connect(&m_universalNode, SIGNAL(nodeIdentifierChanged(const QString &)), this, SIGNAL(identifierChanged(const QString &)));
+ connect(&m_universalNode, SIGNAL(namespaceNameChanged(const QString &)), this, SIGNAL(nodeChanged()));
+ connect(&m_universalNode, SIGNAL(nodeIdentifierChanged(const QString &)), this, SIGNAL(nodeChanged()));
+}
- QOpcUa::UaStatusCode exceptionToStatusCode(const std::exception &ex);
+void OpcUaNodeIdType::setNodeNamespace(const QString &name)
+{
+ m_universalNode.setNamespace(name);
+}
- template <typename UATYPE, typename QTTYPE=UATYPE>
- OpcUa::Variant arrayFromQVariant(const QVariant &var);
+const QString &OpcUaNodeIdType::nodeNamespace() const
+{
+ return m_universalNode.namespaceName();
+}
- inline OpcUa::AttributeId toUaAttributeId(QOpcUa::NodeAttribute attr)
- {
- const int attributeIdUsedBits = 22;
- for (int i = 0; i < attributeIdUsedBits; ++i)
- if (static_cast<int>(attr) == (1 << i))
- return static_cast<OpcUa::AttributeId>(i + 1);
+void OpcUaNodeIdType::setIdentifier(const QString &name)
+{
+ m_universalNode.setNodeIdentifier(name);
+}
- return OpcUa::AttributeId::Unknown;
- }
+void OpcUaNodeIdType::from(const OpcUaNodeIdType &other)
+{
+ m_universalNode.from(other);
+}
- template <typename UATYPE, typename QTTYPE=UATYPE>
- UATYPE scalarFromQVariant(const QVariant &var);
+void OpcUaNodeIdType::from(const UniversalNode &other)
+{
+ m_universalNode.from(other);
+}
- template<typename QTTYPE, typename UATYPE>
- QTTYPE scalarUaToQt(const UATYPE &data);
+const QString &OpcUaNodeIdType::identifier() const
+{
+ return m_universalNode.nodeIdentifier();
+}
- template<typename QTTYPE, typename UATYPE>
- QVariant arrayToQVariant(const OpcUa::Variant &var, QMetaType::Type type = QMetaType::UnknownType);
+QString OpcUaNodeIdType::fullNodePath() const
+{
+ return m_universalNode.fullNodeId();
}
QT_END_NAMESPACE
-
-#endif // QFREEOPCUAVALUECONVERTER_H
diff --git a/src/imports/opcua/opcuanodeidtype.h b/src/imports/opcua/opcuanodeidtype.h
new file mode 100644
index 0000000..883edf2
--- /dev/null
+++ b/src/imports/opcua/opcuanodeidtype.h
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+#include <QObject>
+#include "universalnode.h"
+
+QT_BEGIN_NAMESPACE
+
+class OpcUaNodeIdType : public QObject
+{
+ Q_OBJECT
+
+public:
+ /* These functions are not exposed to QML intentionally.
+ The reason is that some derived QML types have to prohibit access to some of these functions.
+ Exposing is done selectively in the derived classes.
+ */
+ explicit OpcUaNodeIdType(QObject *parent = nullptr);
+ void setNodeNamespace(const QString &);
+ const QString &nodeNamespace() const;
+ void setIdentifier(const QString &);
+ const QString &identifier() const;
+ QString fullNodePath() const;
+ void from(const OpcUaNodeIdType &);
+ void from(const UniversalNode &);
+
+signals:
+ void nodeNamespaceChanged(const QString &);
+ void identifierChanged(const QString &);
+ void nodeChanged();
+
+private:
+ UniversalNode m_universalNode;
+
+ friend class UniversalNode;
+};
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuapathresolver.cpp b/src/imports/opcua/opcuapathresolver.cpp
new file mode 100644
index 0000000..e5c8865
--- /dev/null
+++ b/src/imports/opcua/opcuapathresolver.cpp
@@ -0,0 +1,214 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "opcuapathresolver.h"
+#include "opcuarelativenodeid.h"
+#include "opcuarelativenodepath.h"
+#include <QOpcUaClient>
+#include <QMetaEnum>
+#include <QLoggingCategory>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class OpcUaPathResolver
+ \inqmlmodule QtOpcUa
+ \internal
+ \brief This class resolves relative nodes.
+
+ This class is used to resolve relative node IDs. It will emit \c resolvedNode
+ with the result and delete itself afterwards.
+ In case of errors the resolved node is empty and the error message is set.
+
+ This class is capable of resolving cascaded relative nodes by recursively instantiating
+ further resolvers. The maximum recursion depth is 50.
+
+ \sa RelativeNodeId, Node
+*/
+const int maxRecursionDepth = 50;
+Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_QML)
+
+OpcUaPathResolver::OpcUaPathResolver(OpcUaRelativeNodeId *relativeNode, QOpcUaClient *client, QObject *target)
+ : QObject(target)
+ , m_level(0)
+ , m_relativeNode(relativeNode)
+ , m_target(target)
+ , m_client(client)
+ , m_node(nullptr)
+{
+}
+
+OpcUaPathResolver::OpcUaPathResolver(int level, OpcUaRelativeNodeId *relativeNode, QOpcUaClient *client, QObject *target)
+ : QObject(target)
+ , m_level(level)
+ , m_relativeNode(relativeNode)
+ , m_target(target)
+ , m_client(client)
+ , m_node(nullptr)
+{
+}
+
+OpcUaPathResolver::~OpcUaPathResolver()
+{
+ if (m_node) {
+ m_node->deleteLater();
+ m_node = nullptr;
+ }
+}
+
+void OpcUaPathResolver::startResolving()
+{
+ if (!m_relativeNode || !m_client || !m_target) {
+ emit resolvedNode(UniversalNode(), QLatin1String("Member has been deleted"));
+ deleteLater();
+ return;
+ }
+
+ auto startNode = m_relativeNode->startNode();
+ if (!startNode) {
+ emit resolvedNode(UniversalNode(), QLatin1String("Aborted resolving because start node not present"));
+ deleteLater();
+ return;
+ }
+
+ if (m_relativeNode->pathCount() == 0) {
+ emit resolvedNode(UniversalNode(), QLatin1String("Skipping to resolve relative node with empty path"));
+ deleteLater();
+ return;
+ }
+
+ if (qobject_cast<const OpcUaRelativeNodeId *>(startNode)) {
+ // Trigger recursive resolving
+ if (m_level >= maxRecursionDepth) {
+ emit resolvedNode(UniversalNode(), QLatin1String("Maximum recursion depth reached during node resolution"));
+ deleteLater();
+ return;
+ }
+ auto node = qobject_cast<OpcUaRelativeNodeId *>(startNode);
+ auto resolver = new OpcUaPathResolver(m_level + 1, node, m_client, this);
+ connect(resolver, &OpcUaPathResolver::resolvedNode, this, &OpcUaPathResolver::startNodeResolved);
+ resolver->startResolving();
+ return;
+ } else {
+ startNodeResolved(startNode, QString());
+ }
+}
+
+void OpcUaPathResolver::startNodeResolved(UniversalNode startNode, const QString &errorMessage)
+{
+ if (!m_relativeNode || !m_client || !m_target) {
+ emit resolvedNode(UniversalNode(), QLatin1String("Member has been deleted"));
+ deleteLater();
+ return;
+ }
+
+ if (sender())
+ sender()->deleteLater();
+
+ if (!errorMessage.isEmpty()) {
+ emit resolvedNode(startNode, errorMessage);
+ deleteLater();
+ return;
+ }
+
+ startNode.resolveNamespace(m_client);
+ m_node = m_client->node(startNode.fullNodeId());
+ if (!m_node) {
+ emit resolvedNode(startNode, QString("Could not create node from '%1'").arg(startNode.fullNodeId()));
+ deleteLater();
+ return;
+ }
+
+ // construct path vector
+ QVector<QOpcUa::QRelativePathElement> path;
+ for (int i = 0; i < m_relativeNode->pathCount(); ++i)
+ path.append(m_relativeNode->path(i)->toRelativePathElement(m_client));
+
+ qCDebug(QT_OPCUA_PLUGINS_QML) << "Starting browse on" << m_node->nodeId();
+ connect(m_node, &QOpcUaNode::resolveBrowsePathFinished, this, &OpcUaPathResolver::browsePathFinished);
+ if (!m_node->resolveBrowsePath(path)) {
+ emit resolvedNode(UniversalNode(), QString("Failed to start browse"));
+ deleteLater();
+ return;
+ }
+}
+
+void OpcUaPathResolver::browsePathFinished(QVector<QOpcUa::QBrowsePathTarget> results, QVector<QOpcUa::QRelativePathElement> path, QOpcUa::UaStatusCode status)
+{
+ Q_UNUSED(path);
+ UniversalNode nodeToUse;
+
+ if (status != QOpcUa::Good) {
+ const char *name = QMetaEnum::fromType<QOpcUa::UaStatusCode>().valueToKey(status);
+ emit resolvedNode(UniversalNode(), QString("Resolving browse path return error code %1").arg(name));
+ deleteLater();
+ return;
+ }
+
+ if (results.size() == 0) {
+ emit resolvedNode(UniversalNode(), QString("Relative path could not be resolved: Results are empty"));
+ deleteLater();
+ return;
+ } else if (results.size() == 1) {
+ nodeToUse.from(results.at(0));
+ } else { // greater than one
+ UniversalNode tmp;
+ for (const auto &result : results) {
+ if (result.isFullyResolved()) {
+ if (!tmp.nodeIdentifier().isEmpty()) {
+ emit resolvedNode(UniversalNode(), QLatin1String("There are multiple resolved nodes"));
+ deleteLater();
+ return;
+ }
+ tmp.from(result);
+ }
+ }
+
+ if (!tmp.nodeIdentifier().isEmpty()) {
+ nodeToUse = tmp;
+ } else {
+ emit resolvedNode(UniversalNode(), QString("No resolved node found"));
+ deleteLater();
+ return;
+ }
+ }
+
+ nodeToUse.resolveNamespace(m_client);
+ qCDebug(QT_OPCUA_PLUGINS_QML) << "Relative node fully resolved to:" << nodeToUse.fullNodeId();
+ emit resolvedNode(nodeToUse, QString());
+}
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuapathresolver.h b/src/imports/opcua/opcuapathresolver.h
new file mode 100644
index 0000000..7abebd7
--- /dev/null
+++ b/src/imports/opcua/opcuapathresolver.h
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+#include <QObject>
+#include <QPointer>
+#include "qopcuatype.h"
+#include "universalnode.h"
+
+QT_BEGIN_NAMESPACE
+
+class QOpcUaNode;
+class QOpcUaClient;
+class QRelativePathElement;
+class OpcUaRelativeNodeId;
+class QOpcUaClient;
+
+class OpcUaPathResolver : public QObject
+{
+ Q_OBJECT
+public:
+ OpcUaPathResolver(OpcUaRelativeNodeId *relativeNode, QOpcUaClient *client, QObject *target);
+ ~OpcUaPathResolver();
+ void startResolving();
+
+signals:
+ void resolvedStartNode(const UniversalNode &nodeId, const QString &errorMessage);
+ void resolvedNode(UniversalNode node, QString errorMessage);
+
+private slots:
+ void startNodeResolved(UniversalNode startNode, const QString &errorMessage);
+ void browsePathFinished(QVector<QOpcUa::QBrowsePathTarget> results, QVector<QOpcUa::QRelativePathElement> path, QOpcUa::UaStatusCode status);
+
+private:
+ OpcUaPathResolver(int level, OpcUaRelativeNodeId *relativeNode, QOpcUaClient *client, QObject *target);
+
+ int m_level;
+ QPointer<OpcUaRelativeNodeId> m_relativeNode;
+ QPointer<QObject> m_target;
+ QPointer<QOpcUaClient> m_client;
+ QOpcUaNode *m_node;
+};
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuarelativenodeid.cpp b/src/imports/opcua/opcuarelativenodeid.cpp
new file mode 100644
index 0000000..a4afb89
--- /dev/null
+++ b/src/imports/opcua/opcuarelativenodeid.cpp
@@ -0,0 +1,173 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "opcuarelativenodeid.h"
+#include "opcuanodeid.h"
+#include "opcuarelativenodepath.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \qmltype RelativeNodeId
+ \inqmlmodule QtOpcUa
+ \brief Specifies a relative node by a start node and a path.
+ \since QtOpcUa 5.12
+
+ Proceeding from the given start node, the server tries to match the content
+ of the path property to any existing nodes on the server. Only if the path fully
+ matches to exactly one single target node, it will be used. Partial or multiple
+ matches can not be handled and are treated as error.
+
+ \code
+ import QtOpcUa 5.12 as QtOpcUa
+
+ QtOpcUa.RelativeNodeId {
+ startNode: QtOpcUa.RelativeNodeId {
+ identifier: "s=Example.Node"
+ ns: "Example Namespace"
+ }
+ path: [ QtOpcUa.RelativeNodePath {
+ ns: "Test Namespace"
+ browseName: "SomeName"
+ }
+ ...
+ ]
+ }
+ }
+ \endcode
+
+ \sa NodeId, Node
+*/
+
+/*!
+ \qmlproperty NodeId RelativeNodeId::startNode
+
+ Namespace of the node identifier.
+ The start node specifies the node where resolving the path starts.
+ It can be an absolute or relative node ID.
+
+ \sa NodeId, RelativeNodeId
+*/
+
+/*!
+ \qmlproperty list RelativeNodeId::path
+
+ Search path for the designated node.
+ This is a list of \c OpcUaRelativeNodePath objects specifying the path where
+ the target node can be found relative to the start node.
+*/
+
+/*!
+ \qmlsignal Relative::nodeChanged()
+
+ Emitted when the underlying node has changed.
+ This happens when the namespace or identifier has changed.
+*/
+
+OpcUaRelativeNodeId::OpcUaRelativeNodeId(QObject *parent) : OpcUaNodeIdType(parent)
+{
+}
+
+OpcUaNodeIdType *OpcUaRelativeNodeId::startNode() const
+{
+ return m_startNode;
+}
+
+void OpcUaRelativeNodeId::setStartNode(OpcUaNodeIdType *startNode)
+{
+ if (m_startNode == startNode)
+ return;
+
+ if (m_startNode)
+ disconnect(m_startNode);
+
+ m_startNode = startNode;
+ connect(m_startNode, &OpcUaNodeIdType::nodeChanged, this, &OpcUaRelativeNodeId::nodeChanged);
+
+ emit startNodeChanged(m_startNode);
+ emit nodeChanged();
+}
+
+QQmlListProperty<OpcUaRelativeNodePath> OpcUaRelativeNodeId::paths()
+{
+ return QQmlListProperty<OpcUaRelativeNodePath>(this, this,
+ &OpcUaRelativeNodeId::appendPath,
+ &OpcUaRelativeNodeId::pathCount,
+ &OpcUaRelativeNodeId::path,
+ &OpcUaRelativeNodeId::clearPaths);
+}
+
+void OpcUaRelativeNodeId::appendPath(OpcUaRelativeNodePath* p) {
+ if (!p)
+ return;
+ m_paths.append(p);
+ emit pathChanged();
+ emit nodeChanged();
+}
+
+int OpcUaRelativeNodeId::pathCount() const
+{
+ return m_paths.count();
+}
+
+OpcUaRelativeNodePath *OpcUaRelativeNodeId::path(int index) const
+{
+ return m_paths.at(index);
+}
+
+void OpcUaRelativeNodeId::clearPaths() {
+ m_paths.clear();
+ emit pathChanged();
+ emit nodeChanged();
+}
+
+void OpcUaRelativeNodeId::appendPath(QQmlListProperty<OpcUaRelativeNodePath>* list, OpcUaRelativeNodePath* p) {
+ reinterpret_cast< OpcUaRelativeNodeId* >(list->data)->appendPath(p);
+}
+
+void OpcUaRelativeNodeId::clearPaths(QQmlListProperty<OpcUaRelativeNodePath>* list) {
+ reinterpret_cast< OpcUaRelativeNodeId* >(list->data)->clearPaths();
+}
+
+OpcUaRelativeNodePath* OpcUaRelativeNodeId::path(QQmlListProperty<OpcUaRelativeNodePath>* list, int i) {
+ return reinterpret_cast< OpcUaRelativeNodeId* >(list->data)->path(i);
+}
+
+int OpcUaRelativeNodeId::pathCount(QQmlListProperty<OpcUaRelativeNodePath>* list) {
+ return reinterpret_cast< OpcUaRelativeNodeId* >(list->data)->pathCount();
+}
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuarelativenodeid.h b/src/imports/opcua/opcuarelativenodeid.h
new file mode 100644
index 0000000..5d7f6db
--- /dev/null
+++ b/src/imports/opcua/opcuarelativenodeid.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+#include "opcuanodeidtype.h"
+#include <QList>
+#include <QQmlListProperty>
+
+QT_BEGIN_NAMESPACE
+
+class OpcUaRelativeNodePath;
+class OpcUaNodeIdType;
+
+class OpcUaRelativeNodeId : public OpcUaNodeIdType
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(OpcUaRelativeNodeId)
+ Q_PROPERTY(OpcUaNodeIdType* startNode READ startNode WRITE setStartNode NOTIFY startNodeChanged)
+ Q_PROPERTY(QQmlListProperty<OpcUaRelativeNodePath> path READ paths)
+
+public:
+ explicit OpcUaRelativeNodeId(QObject *parent = nullptr);
+
+ OpcUaNodeIdType *startNode() const;
+ QQmlListProperty<OpcUaRelativeNodePath> paths();
+ void appendPath(OpcUaRelativeNodePath *path);
+ int pathCount() const;
+ OpcUaRelativeNodePath *path(int) const;
+ void clearPaths();
+
+signals:
+ void startNodeChanged(OpcUaNodeIdType *startNode);
+ void pathChanged();
+
+public slots:
+ void setStartNode(OpcUaNodeIdType *startNode);
+
+private:
+ static void appendPath(QQmlListProperty<OpcUaRelativeNodePath>*, OpcUaRelativeNodePath *);
+ static int pathCount(QQmlListProperty<OpcUaRelativeNodePath>*);
+ static OpcUaRelativeNodePath* path(QQmlListProperty<OpcUaRelativeNodePath>*, int);
+ static void clearPaths(QQmlListProperty<OpcUaRelativeNodePath>*);
+
+ OpcUaNodeIdType *m_startNode = nullptr;
+ QList<OpcUaRelativeNodePath *> m_paths;
+
+};
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuarelativenodepath.cpp b/src/imports/opcua/opcuarelativenodepath.cpp
new file mode 100644
index 0000000..bcae709
--- /dev/null
+++ b/src/imports/opcua/opcuarelativenodepath.cpp
@@ -0,0 +1,176 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "opcuarelativenodepath.h"
+#include "qopcuatype.h"
+#include "qopcuaclient.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \qmltype RelativeNodePath
+ \inqmlmodule QtOpcUa
+ \brief Specifies a relative node path element.
+ \since QtOpcUa 5.12
+
+ \code
+ import QtOpcUa 5.12 as QtOpcUa
+
+ QtOpcUa.RelativeNodePath {
+ ns: "Test Namespace"
+ browseName: "SomeName"
+ }
+ \endcode
+
+ \sa Node, NodeId, RelativeNodeId
+*/
+
+/*!
+ \qmlproperty NodeId RelativeNodePath::ns
+
+ Namespace name of this path element.
+ The identifier can be the index as a number or the name as string.
+ A string which can be converted to an integer is considered a namespace index.
+*/
+
+/*!
+ \qmlproperty NodeId RelativeNodePath::browseName
+
+ Browse name of this path element.
+*/
+
+/*!
+ \qmlproperty bool RelativeNodePath::includeSubtypes
+
+ Whether subtypes are included when matching this path element.
+ The default value of this property is \c true.
+*/
+
+/*!
+ \qmlproperty bool RelativeNodePath::isInverse
+
+ Whether the reference to follow is inverse.
+ The default value of this property is \c false.
+*/
+
+/*!
+ \qmlproperty QOpcUa::ReferenceTypeId RelativeNodePath::referenceType
+
+ Type of reference when mathing this path element.
+ The default value of this property is \c QOpcUa::ReferenceTypeId::References.
+*/
+
+OpcUaRelativeNodePath::OpcUaRelativeNodePath(QObject *parent) : QObject(parent)
+{
+ connect(&m_browseNode, &UniversalNode::namespaceNameChanged, this, &OpcUaRelativeNodePath::nodeNamespaceChanged);
+ connect(&m_browseNode, &UniversalNode::nodeIdentifierChanged, this, &OpcUaRelativeNodePath::browseNameChanged);
+}
+
+const QString &OpcUaRelativeNodePath::nodeNamespace() const
+{
+ return m_browseNode.namespaceName();
+}
+
+const QString &OpcUaRelativeNodePath::browseName() const
+{
+ return m_browseNode.nodeIdentifier();
+}
+
+QOpcUa::ReferenceTypeId OpcUaRelativeNodePath::referenceType() const
+{
+ return m_referenceType;
+}
+
+bool OpcUaRelativeNodePath::includeSubtypes() const
+{
+ return m_includeSubtypes;
+}
+
+void OpcUaRelativeNodePath::setNodeNamespace(QString ns)
+{
+ m_browseNode.setNamespace(ns);
+}
+
+void OpcUaRelativeNodePath::setBrowseName(QString browseName)
+{
+ m_browseNode.setNodeIdentifier(browseName);
+}
+
+void OpcUaRelativeNodePath::setReferenceType(QOpcUa::ReferenceTypeId referenceType)
+{
+ if (m_referenceType == referenceType)
+ return;
+
+ m_referenceType = referenceType;
+ emit referenceTypeChanged(m_referenceType);
+}
+
+void OpcUaRelativeNodePath::setIncludeSubtypes(bool includeSubtypes)
+{
+ if (m_includeSubtypes == includeSubtypes)
+ return;
+
+ m_includeSubtypes = includeSubtypes;
+ emit includeSubtypesChanged(m_includeSubtypes);
+}
+
+bool OpcUaRelativeNodePath::isInverse() const
+{
+ return m_isInverse;
+}
+
+QOpcUa::QRelativePathElement OpcUaRelativeNodePath::toRelativePathElement(QOpcUaClient *client) const
+{
+ m_browseNode.resolveNamespaceNameToIndex(client);
+
+ QOpcUa::QRelativePathElement x;
+ x.setIsInverse(isInverse());
+ x.setIncludeSubtypes(includeSubtypes());
+ x.setTargetName(m_browseNode.toQualifiedName());
+ x.setReferenceTypeId(referenceType());
+ return x;
+}
+
+void OpcUaRelativeNodePath::setIsInverse(bool isInverse)
+{
+ if (m_isInverse == isInverse)
+ return;
+
+ m_isInverse = isInverse;
+ emit isInverseChanged(m_isInverse);
+}
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuarelativenodepath.h b/src/imports/opcua/opcuarelativenodepath.h
new file mode 100644
index 0000000..19f7f9b
--- /dev/null
+++ b/src/imports/opcua/opcuarelativenodepath.h
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+#include <QObject>
+#include <qopcuatype.h>
+#include "universalnode.h"
+
+QT_BEGIN_NAMESPACE
+
+class QOpcUaClient;
+
+class OpcUaRelativeNodePath : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QString ns READ nodeNamespace WRITE setNodeNamespace NOTIFY nodeNamespaceChanged)
+ Q_PROPERTY(QString browseName READ browseName WRITE setBrowseName NOTIFY browseNameChanged)
+ Q_PROPERTY(QOpcUa::ReferenceTypeId referenceType READ referenceType WRITE setReferenceType NOTIFY referenceTypeChanged)
+ Q_PROPERTY(bool includeSubtypes READ includeSubtypes WRITE setIncludeSubtypes NOTIFY includeSubtypesChanged)
+ Q_PROPERTY(bool isInverse READ isInverse WRITE setIsInverse NOTIFY isInverseChanged)
+
+public:
+ explicit OpcUaRelativeNodePath(QObject *parent = nullptr);
+ const QString &nodeNamespace() const;
+ const QString &browseName() const;
+ QOpcUa::ReferenceTypeId referenceType() const;
+ bool includeSubtypes() const;
+ bool isInverse() const;
+ QOpcUa::QRelativePathElement toRelativePathElement(QOpcUaClient *client) const;
+
+signals:
+ void nodeNamespaceChanged(QString ns);
+ void browseNameChanged(QString browseName);
+ void referenceTypeChanged(QOpcUa::ReferenceTypeId referenceType);
+ void includeSubtypesChanged(bool includeSubtypes);
+ void isInverseChanged(bool isInverse);
+
+public slots:
+ void setNodeNamespace(QString ns);
+ void setBrowseName(QString browseName);
+ void setReferenceType(QOpcUa::ReferenceTypeId referenceType);
+ void setIncludeSubtypes(bool includeSubtypes);
+ void setIsInverse(bool isInverse);
+
+private:
+ mutable UniversalNode m_browseNode;
+ QOpcUa::ReferenceTypeId m_referenceType = QOpcUa::ReferenceTypeId::References;
+ bool m_includeSubtypes = true;
+ bool m_isInverse = false;
+};
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/opcuavaluenode.cpp b/src/imports/opcua/opcuavaluenode.cpp
new file mode 100644
index 0000000..1126719
--- /dev/null
+++ b/src/imports/opcua/opcuavaluenode.cpp
@@ -0,0 +1,115 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "opcuavaluenode.h"
+#include "opcuaconnection.h"
+#include "opcuanodeid.h"
+#include "opcuaattributevalue.h"
+#include <QLoggingCategory>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \qmltype ValueNode
+ \inqmlmodule QtOpcUa
+ \brief Represents a value node from a server.
+ \inherits Node
+ \since QtOpcUa 5.12
+
+ \code
+ import QtOpcUa 5.12 as QtOpcUa
+
+ QtOpcUa.ValueNode {
+ nodeId: QtOpcUa.NodeId {
+ ns: "Test Namespace"
+ identifier: "s=TestName"
+ }
+ connection: myConnection
+ }
+ \endcode
+
+ A subscription will be created on the server in order to track value changes on the server.
+
+ \sa NodeId, Connection, Node
+*/
+
+/*!
+ \qmlproperty variant ValueNode::value
+
+ Value of this node.
+ Reading and writing this property will access the node on the server.
+*/
+
+Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_QML)
+
+OpcUaValueNode::OpcUaValueNode(QObject *parent):
+ OpcUaNode(parent)
+{
+ connect(m_attributeCache.attribute(QOpcUa::NodeAttribute::Value), &OpcUaAttributeValue::changed, this, &OpcUaValueNode::valueChanged);
+}
+
+OpcUaValueNode::~OpcUaValueNode()
+{
+}
+
+void OpcUaValueNode::setValue(const QVariant &value)
+{
+ m_node->writeAttribute(QOpcUa::NodeAttribute::Value, value, QOpcUa::Types::Undefined);
+}
+
+void OpcUaValueNode::setupNode(const QString &absolutePath)
+{
+ // Additionally read the value attribute
+ setAttributesToRead(attributesToRead()
+ | QOpcUa::NodeAttribute::Value
+ | QOpcUa::NodeAttribute::DataType);
+
+ OpcUaNode::setupNode(absolutePath);
+ if (!m_node)
+ return;
+
+ if (!m_node->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100)))
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Failed monitoring" << m_node->nodeId();
+}
+
+QVariant OpcUaValueNode::value() const
+{
+ if (!m_node)
+ return QVariant();
+ return m_node->attribute(QOpcUa::NodeAttribute::Value);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/opcua/freeopcua/qfreeopcuaplugin.h b/src/imports/opcua/opcuavaluenode.h
index 18b6309..cab3474 100644
--- a/src/plugins/opcua/freeopcua/qfreeopcuaplugin.h
+++ b/src/imports/opcua/opcuavaluenode.h
@@ -1,9 +1,9 @@
/****************************************************************************
**
-** Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
-** This file is part of the QtOpcUa module of the Qt Toolkit.
+** This file is part of the Qt OPC UA module.
**
** $QT_BEGIN_LICENSE:LGPL3$
** Commercial License Usage
@@ -34,31 +34,31 @@
**
****************************************************************************/
-#ifndef QFREEOPCUAPLUGIN_H
-#define QFREEOPCUAPLUGIN_H
+#pragma once
-#include "qfreeopcuanode.h"
-#include <QtOpcUa/qopcuaplugin.h>
+#include "opcuanode.h"
QT_BEGIN_NAMESPACE
-class QFreeOpcUaPlugin : public QOpcUaPlugin
+class OpcUaValueNode : public OpcUaNode
{
Q_OBJECT
-
- Q_PLUGIN_METADATA(IID "org.qt-project.qt.opcua.providerfactory/1.0" FILE "freeopcua-metadata.json")
- Q_INTERFACES(QOpcUaPlugin)
+ Q_DISABLE_COPY(OpcUaValueNode)
+ Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged)
public:
- explicit QFreeOpcUaPlugin(QObject *parent = 0);
- ~QFreeOpcUaPlugin() override;
+ OpcUaValueNode(QObject *parent = nullptr);
+ ~OpcUaValueNode();
+ QVariant value() const;
- QOpcUaClient *createClient() override;
-};
+public slots:
+ void setValue(const QVariant &);
-QT_END_NAMESPACE
+signals:
+ void valueChanged(const QVariant &value);
-Q_DECLARE_METATYPE(OpcUa::NodeId)
-Q_DECLARE_METATYPE(OpcUa::Node)
+private slots:
+ void setupNode(const QString &absolutePath) override;
+};
-#endif // QFREEOPCUAPLUGIN_H
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/plugin.json b/src/imports/opcua/plugin.json
new file mode 100644
index 0000000..2c63c08
--- /dev/null
+++ b/src/imports/opcua/plugin.json
@@ -0,0 +1,2 @@
+{
+}
diff --git a/src/imports/opcua/plugins.qmltypes b/src/imports/opcua/plugins.qmltypes
new file mode 100644
index 0000000..922280c
--- /dev/null
+++ b/src/imports/opcua/plugins.qmltypes
@@ -0,0 +1,195 @@
+import QtQuick.tooling 1.2
+
+// This file describes the plugin-supplied types contained in the library.
+// It is used for QML tooling purposes only.
+//
+// This file was auto-generated by:
+// 'qmlplugindump -nonrelocatable QtOpcUa 5.12'
+
+Module {
+ dependencies: ["QtQuick 2.8"]
+ Component {
+ name: "Constants"
+ exports: ["QtOpcUa/Constants 5.12"]
+ isCreatable: false
+ exportMetaObjectRevisions: [0]
+ }
+ Component {
+ name: "OpcUaConnection"
+ prototype: "QObject"
+ exports: ["QtOpcUa/Connection 5.12"]
+ exportMetaObjectRevisions: [0]
+ Property { name: "availableBackends"; type: "QStringList"; isReadonly: true }
+ Property { name: "connected"; type: "bool"; isReadonly: true }
+ Property { name: "backend"; type: "string" }
+ Property { name: "defaultConnection"; type: "bool" }
+ Property { name: "namespaces"; type: "QStringList"; isReadonly: true }
+ Method {
+ name: "connectToEndpoint"
+ Parameter { name: "url"; type: "QUrl" }
+ }
+ Method { name: "disconnectFromEndpoint" }
+ Method {
+ name: "setDefaultConnection"
+ Parameter { name: "defaultConnection"; type: "bool" }
+ }
+ Method { name: "setDefaultConnection" }
+ }
+ Component {
+ name: "OpcUaMethodNode"
+ prototype: "OpcUaNode"
+ exports: ["QtOpcUa/MethodNode 5.12"]
+ exportMetaObjectRevisions: [0]
+ Property { name: "objectNodeId"; type: "OpcUaNodeIdType"; isPointer: true }
+ Method {
+ name: "setObjectNodeId"
+ Parameter { name: "nodeId"; type: "OpcUaNodeIdType"; isPointer: true }
+ }
+ Method { name: "callMethod" }
+ }
+ Component {
+ name: "OpcUaNode"
+ prototype: "QObject"
+ exports: ["QtOpcUa/Node 5.12"]
+ exportMetaObjectRevisions: [0]
+ Property { name: "nodeId"; type: "OpcUaNodeIdType"; isPointer: true }
+ Property { name: "connection"; type: "OpcUaConnection"; isPointer: true }
+ Property { name: "readyToUse"; type: "bool"; isReadonly: true }
+ Property { name: "browseName"; type: "string" }
+ Property { name: "nodeClass"; type: "QOpcUa::NodeClass"; isReadonly: true }
+ Property { name: "displayName"; type: "QOpcUa::QLocalizedText" }
+ Property { name: "description"; type: "QOpcUa::QLocalizedText" }
+ Signal {
+ name: "nodeIdChanged"
+ Parameter { name: "nodeId"; type: "const OpcUaNodeIdType"; isPointer: true }
+ }
+ Signal {
+ name: "connectionChanged"
+ Parameter { type: "OpcUaConnection"; isPointer: true }
+ }
+ Signal { name: "nodeChanged" }
+ Method {
+ name: "setNodeId"
+ Parameter { name: "nodeId"; type: "OpcUaNodeIdType"; isPointer: true }
+ }
+ Method {
+ name: "setConnection"
+ Parameter { type: "OpcUaConnection"; isPointer: true }
+ }
+ }
+ Component {
+ name: "OpcUaNodeId"
+ prototype: "OpcUaNodeIdType"
+ exports: ["QtOpcUa/NodeId 5.12"]
+ exportMetaObjectRevisions: [0]
+ Property { name: "ns"; type: "string" }
+ Property { name: "identifier"; type: "string" }
+ Signal {
+ name: "nodeNamespaceChanged"
+ Parameter { type: "string" }
+ }
+ Signal {
+ name: "identifierChanged"
+ Parameter { type: "string" }
+ }
+ Signal { name: "nodeChanged" }
+ }
+ Component {
+ name: "OpcUaNodeIdType"
+ prototype: "QObject"
+ exports: ["QtOpcUa/NodeIdType 5.12"]
+ isCreatable: false
+ exportMetaObjectRevisions: [0]
+ Signal {
+ name: "nodeNamespaceChanged"
+ Parameter { type: "string" }
+ }
+ Signal {
+ name: "identifierChanged"
+ Parameter { type: "string" }
+ }
+ Signal { name: "nodeChanged" }
+ }
+ Component {
+ name: "OpcUaRelativeNodeId"
+ prototype: "OpcUaNodeIdType"
+ exports: ["QtOpcUa/RelativeNodeId 5.12"]
+ exportMetaObjectRevisions: [0]
+ Property { name: "startNode"; type: "OpcUaNodeIdType"; isPointer: true }
+ Property { name: "path"; type: "OpcUaRelativeNodePath"; isList: true; isReadonly: true }
+ Signal {
+ name: "startNodeChanged"
+ Parameter { name: "startNode"; type: "OpcUaNodeIdType"; isPointer: true }
+ }
+ Method {
+ name: "setStartNode"
+ Parameter { name: "startNode"; type: "OpcUaNodeIdType"; isPointer: true }
+ }
+ }
+ Component {
+ name: "OpcUaRelativeNodePath"
+ prototype: "QObject"
+ exports: ["QtOpcUa/RelativeNodePath 5.12"]
+ exportMetaObjectRevisions: [0]
+ Property { name: "ns"; type: "string" }
+ Property { name: "browseName"; type: "string" }
+ Property { name: "referenceType"; type: "QOpcUa::ReferenceTypeId" }
+ Property { name: "includeSubtypes"; type: "bool" }
+ Property { name: "isInverse"; type: "bool" }
+ Signal {
+ name: "nodeNamespaceChanged"
+ Parameter { name: "ns"; type: "string" }
+ }
+ Signal {
+ name: "browseNameChanged"
+ Parameter { name: "browseName"; type: "string" }
+ }
+ Signal {
+ name: "referenceTypeChanged"
+ Parameter { name: "referenceType"; type: "QOpcUa::ReferenceTypeId" }
+ }
+ Signal {
+ name: "includeSubtypesChanged"
+ Parameter { name: "includeSubtypes"; type: "bool" }
+ }
+ Signal {
+ name: "isInverseChanged"
+ Parameter { name: "isInverse"; type: "bool" }
+ }
+ Method {
+ name: "setNodeNamespace"
+ Parameter { name: "ns"; type: "string" }
+ }
+ Method {
+ name: "setBrowseName"
+ Parameter { name: "browseName"; type: "string" }
+ }
+ Method {
+ name: "setReferenceType"
+ Parameter { name: "referenceType"; type: "QOpcUa::ReferenceTypeId" }
+ }
+ Method {
+ name: "setIncludeSubtypes"
+ Parameter { name: "includeSubtypes"; type: "bool" }
+ }
+ Method {
+ name: "setIsInverse"
+ Parameter { name: "isInverse"; type: "bool" }
+ }
+ }
+ Component {
+ name: "OpcUaValueNode"
+ prototype: "OpcUaNode"
+ exports: ["QtOpcUa/ValueNode 5.12"]
+ exportMetaObjectRevisions: [0]
+ Property { name: "value"; type: "QVariant" }
+ Signal {
+ name: "valueChanged"
+ Parameter { name: "value"; type: "QVariant" }
+ }
+ Method {
+ name: "setValue"
+ Parameter { type: "QVariant" }
+ }
+ }
+}
diff --git a/src/imports/opcua/qmldir b/src/imports/opcua/qmldir
new file mode 100644
index 0000000..6f4d087
--- /dev/null
+++ b/src/imports/opcua/qmldir
@@ -0,0 +1,4 @@
+module QtOpcUa
+plugin declarative_opcua
+classname OpcUaPlugin
+typeinfo plugins.qmltypes
diff --git a/src/imports/opcua/universalnode.cpp b/src/imports/opcua/universalnode.cpp
new file mode 100644
index 0000000..a56700c
--- /dev/null
+++ b/src/imports/opcua/universalnode.cpp
@@ -0,0 +1,376 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "universalnode.h"
+#include "qopcuaclient.h"
+#include "opcuanodeidtype.h"
+#include <QLoggingCategory>
+
+QT_BEGIN_NAMESPACE
+
+Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_QML)
+
+UniversalNode::UniversalNode(QObject *parent)
+ : QObject(parent)
+{
+}
+
+UniversalNode::UniversalNode()
+ :QObject(nullptr)
+{
+}
+
+UniversalNode::UniversalNode(const QString &nodeIdentifier, QObject *parent)
+ : QObject(parent)
+{
+ setNodeIdentifier(nodeIdentifier);
+}
+
+UniversalNode::UniversalNode(const QString &namespaceName, const QString &nodeIdentifier, QObject *parent)
+ : QObject(parent)
+{
+ setMembers(false, 0, true, namespaceName, true, nodeIdentifier);
+}
+
+UniversalNode::UniversalNode(quint16 namespaceIndex, const QString &nodeIdentifier, QObject *parent)
+ : QObject(parent)
+{
+ setMembers(true, namespaceIndex, false, QString(), true, nodeIdentifier);
+}
+
+UniversalNode::UniversalNode(const UniversalNode &other, QObject *parent)
+ : QObject(parent)
+{
+ setMembers(other.isNamespaceNameValid(), other.namespaceIndex(),
+ !other.namespaceName().isEmpty(), other.namespaceName(),
+ !other.nodeIdentifier().isEmpty(), other.nodeIdentifier());
+}
+
+UniversalNode::UniversalNode(const OpcUaNodeIdType *other, QObject *parent)
+ : QObject(parent)
+{
+ if (other)
+ from(*other);
+}
+
+const QString &UniversalNode::namespaceName() const
+{
+ return m_namespaceName;
+}
+
+void UniversalNode::setNamespace(const QString &namespaceName)
+{
+ bool ok;
+ int index = namespaceName.toUInt(&ok);
+
+ setMembers(ok, index, !ok, namespaceName, false, QString());
+}
+
+quint16 UniversalNode::namespaceIndex() const
+{
+ return m_namespaceIndex;
+}
+
+void UniversalNode::setNamespace(quint16 namespaceIndex)
+{
+ setMembers(true, namespaceIndex, false, QString(), false, QString());
+}
+
+const QString &UniversalNode::nodeIdentifier() const
+{
+ return m_nodeIdentifier;
+}
+
+void UniversalNode::setNodeIdentifier(const QString &nodeIdentifier)
+{
+ int index = 0;
+ QString name;
+
+ if (splitNodeIdAndNamespace(nodeIdentifier, &index, &name)) {
+ setMembers(true, index, false, QString(), true, name);
+ } else {
+ setMembers(false, 0, false, QString(), true, nodeIdentifier);
+ }
+}
+
+void UniversalNode::resolveNamespace(QOpcUaClient *client)
+{
+ if (!m_namespaceIndexValid)
+ resolveNamespaceNameToIndex(client);
+ else if (m_namespaceName.isEmpty())
+ resolveNamespaceIndexToName(client);
+}
+
+void UniversalNode::resolveNamespaceIndexToName(QOpcUaClient *client)
+{
+ if (!m_namespaceIndexValid) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Could not resolve namespace: Namespace index is not valid";
+ return;
+ }
+
+ const auto namespaceArray = client->namespaceArray();
+
+ if (!namespaceArray.size()) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Namespaces table missing, unable to resolve namespace name.";
+ return;
+ }
+
+ if (m_namespaceIndex >= namespaceArray.size()) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Namespace index not in a valid range";
+ return;
+ }
+
+ setMembers(true, m_namespaceIndex, true, namespaceArray.at(m_namespaceIndex), false, QString());
+}
+
+void UniversalNode::resolveNamespaceNameToIndex(QOpcUaClient *client)
+{
+ if (m_namespaceIndexValid)
+ return; // Namespace index already resolved, nothing to do
+
+ const auto namespaceArray = client->namespaceArray();
+
+ if (!namespaceArray.size()) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Namespaces table missing, unable to resolve namespace name.";
+ return;
+ }
+
+ if (m_namespaceName.isEmpty()) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Could not resolve namespace: Namespace name is empty" << (m_nodeIdentifier.isEmpty() ? QString() : (QString("(") + m_nodeIdentifier + ")"));
+ return;
+ }
+
+ int index = namespaceArray.indexOf(m_namespaceName);
+ if (index < 0) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Could not resolve namespace: Namespace" << m_namespaceName << "not found in" << namespaceArray;
+ return;
+ }
+
+ setMembers(true, index, true, m_namespaceName, false, QString());
+}
+
+bool UniversalNode::isNamespaceNameValid() const
+{
+ return !m_namespaceName.isEmpty();
+}
+
+bool UniversalNode::isNamespaceIndexValid() const
+{
+ return m_namespaceIndexValid;
+}
+
+QOpcUa::QQualifiedName UniversalNode::toQualifiedName() const
+{
+ QOpcUa::QQualifiedName qualifiedName;
+
+ if (!m_namespaceIndexValid || m_nodeIdentifier.isEmpty()) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Insufficient information to create a QQualifiedName";
+ return qualifiedName;
+ }
+
+ qualifiedName.setNamespaceIndex(m_namespaceIndex);
+ qualifiedName.setName(m_nodeIdentifier);
+ return qualifiedName;
+}
+
+QOpcUa::QExpandedNodeId UniversalNode::toExpandedNodeId() const
+{
+ QOpcUa::QExpandedNodeId expandedNodeId;
+
+ if (m_namespaceName.isEmpty() || m_nodeIdentifier.isEmpty()) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Insufficient information to create a QExpandedNodeId";
+ return expandedNodeId;
+ }
+
+ expandedNodeId.setServerIndex(0);
+ expandedNodeId.setNamespaceUri(m_namespaceName);
+ expandedNodeId.setNodeId(m_nodeIdentifier);
+ return expandedNodeId;
+}
+
+void UniversalNode::from(const QOpcUa::QQualifiedName &qualifiedName)
+{
+ setMembers(true, qualifiedName.namespaceIndex(), false, QString(), true, qualifiedName.name());
+}
+
+void UniversalNode::from(const QOpcUa::QExpandedNodeId &expandedNodeId)
+{
+ setMembers(false, 0, true, expandedNodeId.namespaceUri(), true, expandedNodeId.nodeId());
+}
+
+void UniversalNode::from(const QOpcUa::QBrowsePathTarget &browsePathTarget)
+{
+ // QExpandedNodeId is too unreliable and needs some casehandling around it to get a common information
+ int index = 0;
+ QString namespaceName = browsePathTarget.targetId().namespaceUri();
+ QString identifier;
+ bool namespaceIndexValid = splitNodeIdAndNamespace(browsePathTarget.targetId().nodeId(), &index, &identifier);
+
+ setMembers(namespaceIndexValid, index, !namespaceName.isEmpty(), namespaceName, true, identifier);
+}
+
+void UniversalNode::from(const OpcUaNodeIdType *other) {
+ from(*other);
+}
+
+void UniversalNode::from(const OpcUaNodeIdType &other)
+{
+ setMembers(other.m_universalNode.m_namespaceIndexValid, other.m_universalNode.m_namespaceIndex,
+ !other.nodeNamespace().isEmpty(), other.nodeNamespace(),
+ !other.identifier().isEmpty(), other.identifier());
+}
+
+void UniversalNode::from(const UniversalNode &other)
+{
+ setMembers(other.isNamespaceIndexValid(), other.namespaceIndex(),
+ true, other.namespaceName(), true, other.nodeIdentifier());
+}
+
+QString UniversalNode::fullNodeId() const
+{
+ if (!m_namespaceIndexValid || m_nodeIdentifier.isEmpty()) {
+ QString message("Unable to construct a full node id");
+ if (!m_nodeIdentifier.isEmpty())
+ message += " for node " + m_nodeIdentifier;
+ else
+ message += " because node id string is empty.";
+
+ if (!m_namespaceIndexValid)
+ message += "; namespace index is not valid.";
+ qCWarning(QT_OPCUA_PLUGINS_QML) << message;
+ return QString();
+ }
+
+ return QString("ns=%1;%2").arg(m_namespaceIndex).arg(m_nodeIdentifier);
+}
+
+QOpcUaNode *UniversalNode::createNode(QOpcUaClient *client)
+{
+ return client->node(fullNodeId());
+}
+
+UniversalNode &UniversalNode::operator=(const UniversalNode &rhs)
+{
+ m_namespaceName = rhs.m_namespaceName;
+ m_nodeIdentifier = rhs.m_nodeIdentifier;
+ m_namespaceIndex = rhs.m_namespaceIndex;
+ m_namespaceIndexValid = rhs.m_namespaceIndexValid;
+ return *this;
+}
+
+/* This function sets the members to the desired values and emits changes signal only once after all variables
+ * have already been set.
+ * If the namespace index or name changes without setting the counterpart as well it will invalidate
+ * not part not being set.
+ */
+void UniversalNode::setMembers(bool setNamespaceIndex, quint16 namespaceIndex,
+ bool setNamespaceName, const QString &namespaceName,
+ bool setNodeIdentifier, const QString &nodeIdentifier)
+{
+ // qCDebug(QT_OPCUA_PLUGINS_QML) << Q_FUNC_INFO << setNamespaceIndex << namespaceIndex << setNamespaceName << namespaceName << setNodeIdentifier << nodeIdentifier;
+ bool emitNamespaceIndexChanged = false;
+ bool emitNamespaceNameChanged = false;
+ bool emitNodeIdentifierChanged = false;
+
+ if (setNamespaceIndex && (namespaceIndex != m_namespaceIndex || !m_namespaceIndexValid)) {
+ m_namespaceIndex = namespaceIndex;
+ m_namespaceIndexValid = true;
+ emitNamespaceIndexChanged = true;
+
+ if (!setNamespaceName) // Index changed without name given: invalidate name
+ m_namespaceName.clear();
+ }
+
+ if (setNamespaceName && namespaceName != m_namespaceName) {
+ m_namespaceName = namespaceName;
+ emitNamespaceNameChanged = true;
+
+ if (!setNamespaceIndex) // Name changed without index given: invalidate index
+ m_namespaceIndexValid = false;
+ }
+
+ if (setNodeIdentifier && nodeIdentifier != m_nodeIdentifier) {
+ if (nodeIdentifier.startsWith(QLatin1String("ns=")))
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Setting node identifier with namespace internally is not allowed.";
+
+ m_nodeIdentifier = nodeIdentifier;
+ emitNodeIdentifierChanged = true;
+ }
+
+ if (emitNamespaceIndexChanged)
+ emit namespaceIndexChanged(m_namespaceIndex);
+ if (emitNamespaceNameChanged)
+ emit namespaceNameChanged(m_namespaceName);
+ if (emitNodeIdentifierChanged)
+ emit nodeIdentifierChanged(m_nodeIdentifier);
+ if (emitNamespaceIndexChanged || emitNamespaceNameChanged)
+ emit namespaceChanged();
+ if (emitNamespaceIndexChanged || emitNamespaceNameChanged || emitNodeIdentifierChanged) {
+ emit nodeChanged();
+ }
+}
+
+bool UniversalNode::splitNodeIdAndNamespace(const QString nodeIdentifier, int *namespaceIndex, QString *identifier)
+{
+ if (nodeIdentifier.startsWith(QLatin1String("ns="))) {
+ const auto token = nodeIdentifier.split(QLatin1Char(';'));
+ if (token.size() != 2) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Invalid node identifier:" << nodeIdentifier;
+ return false;
+ }
+
+ const QString ns = token[0].mid(3);
+ bool ok;
+ *namespaceIndex = ns.toUInt(&ok);
+ if (!ok) {
+ qCWarning(QT_OPCUA_PLUGINS_QML) << "Namespace index is not a number:" << nodeIdentifier;
+ return false;
+ }
+ *identifier = token[1];
+ return true;
+ }
+ return false;
+}
+
+bool UniversalNode::operator==(const UniversalNode &rhs) const
+{
+ return this->m_namespaceName == rhs.m_namespaceName &&
+ this->m_nodeIdentifier == rhs.m_nodeIdentifier &&
+ this->m_namespaceIndex == rhs.m_namespaceIndex &&
+ this->m_namespaceIndexValid == rhs.m_namespaceIndexValid;
+}
+
+QT_END_NAMESPACE
diff --git a/src/imports/opcua/universalnode.h b/src/imports/opcua/universalnode.h
new file mode 100644
index 0000000..0db4c9d
--- /dev/null
+++ b/src/imports/opcua/universalnode.h
@@ -0,0 +1,113 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#pragma once
+
+#include <QObject>
+#include "qopcuatype.h"
+
+QT_BEGIN_NAMESPACE
+
+class QOpcUaClient;
+class QOpcUaNode;
+class OpcUaNodeIdType;
+
+class UniversalNode : public QObject
+{
+ Q_OBJECT
+public:
+ UniversalNode();
+ UniversalNode(QObject *parent);
+ UniversalNode(const QString &nodeIdentifier, QObject *parent = nullptr);
+ UniversalNode(const QString &namespaceName, const QString &nodeIdentifier, QObject *parent = nullptr);
+ UniversalNode(quint16 namespaceIndex, const QString &nodeIdentifier, QObject *parent = nullptr);
+ UniversalNode(const UniversalNode &other, QObject *parent = nullptr);
+ UniversalNode(const OpcUaNodeIdType *other, QObject *parent = nullptr);
+
+ void setNamespace(quint16 namespaceIndex);
+ void setNamespace(const QString &name);
+
+ const QString &namespaceName() const;
+ void setNamespaceName(const QString &namespaceName);
+ bool isNamespaceNameValid() const;
+
+ quint16 namespaceIndex() const;
+ bool isNamespaceIndexValid() const;
+
+ const QString &nodeIdentifier() const;
+ void setNodeIdentifier(const QString &nodeIdentifier);
+
+ void resolveNamespaceIndexToName(QOpcUaClient *client);
+ void resolveNamespaceNameToIndex(QOpcUaClient *client);
+ void resolveNamespace(QOpcUaClient *client);
+
+ QOpcUa::QQualifiedName toQualifiedName() const;
+ void from(const QOpcUa::QQualifiedName &qualifiedName);
+
+ QOpcUa::QExpandedNodeId toExpandedNodeId() const;
+ void from(const QOpcUa::QExpandedNodeId &expandedNodeId);
+
+ void from(const QOpcUa::QBrowsePathTarget &browsePathTarget);
+ void from(const OpcUaNodeIdType &);
+ void from(const OpcUaNodeIdType *);
+ void from(const UniversalNode &);
+
+ QString fullNodeId() const;
+ QOpcUaNode *createNode(QOpcUaClient *client);
+
+ UniversalNode& operator=(const UniversalNode&);
+ bool operator==(const UniversalNode &rhs) const;
+
+signals:
+ void namespaceNameChanged(const QString &);
+ void namespaceIndexChanged(quint16);
+ void nodeIdentifierChanged(const QString &);
+ void nodeChanged();
+ void namespaceChanged();
+
+private:
+ void setMembers(bool setNamespaceIndex, quint16 namespaceIndex,
+ bool setNamespaceName, const QString &namespaceName,
+ bool setNodeIdentifier, const QString &nodeIdentifier);
+ bool splitNodeIdAndNamespace(const QString nodeIdentifier, int *namespaceIndex, QString *identifier);
+
+ QString m_namespaceName;
+ QString m_nodeIdentifier;
+ quint16 m_namespaceIndex = 0;
+ bool m_namespaceIndexValid = false;
+};
+
+QT_END_NAMESPACE
diff --git a/src/opcua/client/client.pri b/src/opcua/client/client.pri
index 6937b39..c6167d3 100644
--- a/src/opcua/client/client.pri
+++ b/src/opcua/client/client.pri
@@ -14,8 +14,18 @@ SOURCES += \
client/qopcuaclientprivate.cpp \
client/qopcuabackend.cpp \
client/qopcuamonitoringparameters.cpp \
+ client/qopcuabinarydataencoding.cpp \
+ client/qopcuabrowserequest.cpp \
client/qopcuareferencedescription.cpp \
- client/qopcuabinarydataencoding.cpp
+ client/qopcuareaditem.cpp \
+ client/qopcuareadresult.cpp \
+ client/qopcuanodeids.cpp \
+ client/qopcuawriteitem.cpp \
+ client/qopcuawriteresult.cpp \
+ client/qopcuanodecreationattributes.cpp \
+ client/qopcuaaddreferenceitem.cpp \
+ client/qopcuadeletereferenceitem.cpp \
+ client/qopcuaaddnodeitem.cpp
HEADERS += \
client/qopcuaclient_p.h \
@@ -25,6 +35,16 @@ HEADERS += \
client/qopcuabackend_p.h \
client/qopcuamonitoringparameters.h \
client/qopcuamonitoringparameters_p.h \
+ client/qopcuabinarydataencoding.h \
+ client/qopcuabrowserequest.h \
client/qopcuareferencedescription.h \
- client/qopcuareferencedescription_p.h \
- client/qopcuabinarydataencoding_p.h
+ client/qopcuareaditem.h \
+ client/qopcuareadresult.h \
+ client/qopcuanodeids.h \
+ client/qopcuawriteitem.h \
+ client/qopcuawriteresult.h \
+ client/qopcuanodecreationattributes.h \
+ client/qopcuanodecreationattributes_p.h \
+ client/qopcuaaddnodeitem.h \
+ client/qopcuaaddreferenceitem.h \
+ client/qopcuadeletereferenceitem.h
diff --git a/src/opcua/client/qopcuaaddnodeitem.cpp b/src/opcua/client/qopcuaaddnodeitem.cpp
new file mode 100644
index 0000000..62eea3e
--- /dev/null
+++ b/src/opcua/client/qopcuaaddnodeitem.cpp
@@ -0,0 +1,215 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qopcuanodecreationattributes.h"
+#include "qopcuaaddnodeitem.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QOpcUaAddNodeItem
+ \inmodule QtOpcUa
+ \brief This class stores the necessary information to create a new node on the server.
+
+ \sa QOpcUaClient::addNode()
+*/
+
+class QOpcUaAddNodeItemData : public QSharedData
+{
+public:
+ QOpcUa::QExpandedNodeId parentNodeId;
+ QString referenceTypeId;
+ QOpcUa::QExpandedNodeId requestedNewNodeId;
+ QOpcUa::QQualifiedName browseName;
+ QOpcUa::NodeClass nodeClass {QOpcUa::NodeClass::Object};
+ QOpcUaNodeCreationAttributes nodeAttributes;
+ QOpcUa::QExpandedNodeId typeDefinition;
+};
+
+QOpcUaAddNodeItem::QOpcUaAddNodeItem()
+ : data(new QOpcUaAddNodeItemData)
+{
+}
+
+/*!
+ Constructs a add node item from \a other.
+*/
+QOpcUaAddNodeItem::QOpcUaAddNodeItem(const QOpcUaAddNodeItem &other)
+ : data(other.data)
+{
+}
+
+/*!
+ Assigns the values from \a rhs to this add node item.
+*/
+QOpcUaAddNodeItem &QOpcUaAddNodeItem::operator=(const QOpcUaAddNodeItem &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUaAddNodeItem::~QOpcUaAddNodeItem()
+{
+}
+
+/*!
+ Returns the node id of the type definition node.
+*/
+QOpcUa::QExpandedNodeId QOpcUaAddNodeItem::typeDefinition() const
+{
+ return data->typeDefinition;
+}
+
+/*!
+ Sets the node id of the type definition node to \a typeDefinition. This value shall be set if the node class
+ is not Object or Variable.
+*/
+void QOpcUaAddNodeItem::setTypeDefinition(const QOpcUa::QExpandedNodeId &typeDefinition)
+{
+ data->typeDefinition = typeDefinition;
+}
+
+/*!
+ Returns the values for the node attributes of the new node.
+*/
+QOpcUaNodeCreationAttributes QOpcUaAddNodeItem::nodeAttributes() const
+{
+ return data->nodeAttributes;
+}
+
+/*!
+ Returns a reference to the values for the node attributes of the new node.
+*/
+QOpcUaNodeCreationAttributes &QOpcUaAddNodeItem::nodeAttributesRef()
+{
+ return data->nodeAttributes;
+}
+
+/*!
+ Sets the values for the node attributes of the new node to \a nodeAttributes.
+ Only the attributes supported by the node class of the new node will be used.
+*/
+void QOpcUaAddNodeItem::setNodeAttributes(const QOpcUaNodeCreationAttributes &nodeAttributes)
+{
+ data->nodeAttributes = nodeAttributes;
+}
+
+/*!
+ Returns the node class of the new node.
+*/
+QOpcUa::NodeClass QOpcUaAddNodeItem::nodeClass() const
+{
+ return data->nodeClass;
+}
+
+/*!
+ Sets the node class of the new node to \a nodeClass.
+*/
+void QOpcUaAddNodeItem::setNodeClass(const QOpcUa::NodeClass &nodeClass)
+{
+ data->nodeClass = nodeClass;
+}
+
+/*!
+ Returns the browse name of the new node.
+*/
+QOpcUa::QQualifiedName QOpcUaAddNodeItem::browseName() const
+{
+ return data->browseName;
+}
+
+/*!
+ Sets the browse name of the new node to \a browseName.
+*/
+void QOpcUaAddNodeItem::setBrowseName(const QOpcUa::QQualifiedName &browseName)
+{
+ data->browseName = browseName;
+}
+
+/*!
+ Returns the requested new node id.
+*/
+QOpcUa::QExpandedNodeId QOpcUaAddNodeItem::requestedNewNodeId() const
+{
+ return data->requestedNewNodeId;
+}
+
+/*!
+ Sets the requested new node id to \a requestedNewNodeId.
+*/
+void QOpcUaAddNodeItem::setRequestedNewNodeId(const QOpcUa::QExpandedNodeId &requestedNewNodeId)
+{
+ data->requestedNewNodeId = requestedNewNodeId;
+}
+
+/*!
+ Returns the reference type id.
+*/
+QString QOpcUaAddNodeItem::referenceTypeId() const
+{
+ return data->referenceTypeId;
+}
+
+/*!
+ Sets the reference type id to \a referenceTypeId. A reference of this type will be used to connect
+ the node to the parent node.
+*/
+void QOpcUaAddNodeItem::setReferenceTypeId(const QString &referenceTypeId)
+{
+ data->referenceTypeId = referenceTypeId;
+}
+
+/*!
+ Returns the parent node id.
+*/
+QOpcUa::QExpandedNodeId QOpcUaAddNodeItem::parentNodeId() const
+{
+ return data->parentNodeId;
+}
+
+/*!
+ Sets the parent node id to \a parentNodeId. A reference of the type set in \l setReferenceTypeId()
+ from this node to the newly added node will be created.
+
+ \sa setReferenceTypeId()
+*/
+void QOpcUaAddNodeItem::setParentNodeId(const QOpcUa::QExpandedNodeId &parentNodeId)
+{
+ data->parentNodeId = parentNodeId;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/opcua/freeopcua/qfreeopcuanode.h b/src/opcua/client/qopcuaaddnodeitem.h
index b067929..188dba7 100644
--- a/src/plugins/opcua/freeopcua/qfreeopcuanode.h
+++ b/src/opcua/client/qopcuaaddnodeitem.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtOpcUa module of the Qt Toolkit.
@@ -34,40 +34,51 @@
**
****************************************************************************/
-#ifndef QFREEOPCUANODE_H
-#define QFREEOPCUANODE_H
+#ifndef QOPCUADDNODEITEM_H
+#define QOPCUADDNODEITEM_H
-#include <private/qopcuanodeimpl_p.h>
-
-#include <QtCore/qpointer.h>
-
-#include <opc/ua/node.h>
+#include <QtOpcUa/qopcuanodecreationattributes.h>
+#include <QtOpcUa/qopcuatype.h>
QT_BEGIN_NAMESPACE
-class QFreeOpcUaClientImpl;
-
-class QFreeOpcUaNode : public QOpcUaNodeImpl
+class QOpcUaAddNodeItemData;
+class Q_OPCUA_EXPORT QOpcUaAddNodeItem
{
public:
- explicit QFreeOpcUaNode(OpcUa::Node node, QFreeOpcUaClientImpl *client);
- ~QFreeOpcUaNode() override;
+ QOpcUaAddNodeItem();
+ QOpcUaAddNodeItem(const QOpcUaAddNodeItem &);
+ QOpcUaAddNodeItem &operator=(const QOpcUaAddNodeItem &);
+ ~QOpcUaAddNodeItem();
+
+ QOpcUa::QExpandedNodeId parentNodeId() const;
+ void setParentNodeId(const QOpcUa::QExpandedNodeId &parentNodeId);
+
+ QString referenceTypeId() const;
+ void setReferenceTypeId(const QString &referenceTypeId);
- bool readAttributes(QOpcUa::NodeAttributes attr, const QString &indexRange) override;
- bool enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings);
- bool disableMonitoring(QOpcUa::NodeAttributes attr);
- bool modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, const QVariant &value);
- bool browseChildren(QOpcUa::ReferenceTypeId referenceType, QOpcUa::NodeClasses nodeClassMask) override;
- QString nodeId() const override;
+ QOpcUa::QExpandedNodeId requestedNewNodeId() const;
+ void setRequestedNewNodeId(const QOpcUa::QExpandedNodeId &requestedNewNodeId);
- bool writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant &value, QOpcUa::Types type, const QString &indexRange) override;
- bool writeAttributes(const QOpcUaNode::AttributeMap &toWrite, QOpcUa::Types valueAttributeType) override;
- bool callMethod(const QString &methodNodeId, const QVector<QOpcUa::TypedVariant> &args) override;
+ QOpcUa::QQualifiedName browseName() const;
+ void setBrowseName(const QOpcUa::QQualifiedName &browseName);
- OpcUa::Node m_node;
- QPointer<QFreeOpcUaClientImpl> m_client;
+ QOpcUa::NodeClass nodeClass() const;
+ void setNodeClass(const QOpcUa::NodeClass &nodeClass);
+
+ QOpcUaNodeCreationAttributes nodeAttributes() const;
+ QOpcUaNodeCreationAttributes &nodeAttributesRef();
+ void setNodeAttributes(const QOpcUaNodeCreationAttributes &nodeAttributes);
+
+ QOpcUa::QExpandedNodeId typeDefinition() const;
+ void setTypeDefinition(const QOpcUa::QExpandedNodeId &typeDefinition);
+
+private:
+ QSharedDataPointer<QOpcUaAddNodeItemData> data;
};
QT_END_NAMESPACE
-#endif // QFREEOPCUANODE_H
+Q_DECLARE_METATYPE(QOpcUaAddNodeItem)
+
+#endif // QOPCUADDNODEITEM_H
diff --git a/src/opcua/client/qopcuaaddreferenceitem.cpp b/src/opcua/client/qopcuaaddreferenceitem.cpp
new file mode 100644
index 0000000..3d01851
--- /dev/null
+++ b/src/opcua/client/qopcuaaddreferenceitem.cpp
@@ -0,0 +1,189 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qopcuanodecreationattributes.h"
+#include "qopcuaaddreferenceitem.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QOpcUaAddReferenceItem
+ \inmodule QtOpcUa
+ \brief This class stores the necessary information to add a new reference on the server.
+
+ \sa QOpcUaClient::addReference()
+*/
+class QOpcUaAddReferenceItemData : public QSharedData
+{
+public:
+ QString sourceNodeId;
+ QString referenceTypeId;
+ bool isForwardReference {true};
+ QOpcUa::QExpandedNodeId targetNodeId;
+ QOpcUa::NodeClass targetNodeClass {QOpcUa::NodeClass::Undefined};
+ QString targetServerUri;
+};
+
+QOpcUaAddReferenceItem::QOpcUaAddReferenceItem()
+ : data(new QOpcUaAddReferenceItemData)
+{
+}
+
+/*!
+ Constructs an add reference item from \a other.
+*/
+QOpcUaAddReferenceItem::QOpcUaAddReferenceItem(const QOpcUaAddReferenceItem &other)
+ : data(other.data)
+{
+
+}
+
+/*!
+ Sets the values from \a rhs in this add reference item.
+*/
+QOpcUaAddReferenceItem &QOpcUaAddReferenceItem::operator=(const QOpcUaAddReferenceItem &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUaAddReferenceItem::~QOpcUaAddReferenceItem()
+{
+}
+
+/*!
+ Returns the target node class.
+*/
+QOpcUa::NodeClass QOpcUaAddReferenceItem::targetNodeClass() const
+{
+ return data->targetNodeClass;
+}
+
+/*!
+ Sets the node class of the target node to \a targetNodeClass.
+ The target node class shall be specified because the target node might be located on another server.
+*/
+void QOpcUaAddReferenceItem::setTargetNodeClass(QOpcUa::NodeClass targetNodeClass)
+{
+ data->targetNodeClass = targetNodeClass;
+}
+
+/*!
+ Returns the target server URI.
+*/
+QString QOpcUaAddReferenceItem::targetServerUri() const
+{
+ return data->targetServerUri;
+}
+
+/*!
+ Sets the URI of the target server to \a targetServerUri.
+ If this value is set, it will override the server URI from \l setTargetNodeId().
+*/
+void QOpcUaAddReferenceItem::setTargetServerUri(const QString &targetServerUri)
+{
+ data->targetServerUri = targetServerUri;
+}
+
+/*!
+ Returns the target node id.
+*/
+QOpcUa::QExpandedNodeId QOpcUaAddReferenceItem::targetNodeId() const
+{
+ return data->targetNodeId;
+}
+
+/*!
+ Sets the node id of the target node to \a targetNodeId.
+*/
+void QOpcUaAddReferenceItem::setTargetNodeId(const QOpcUa::QExpandedNodeId &targetNodeId)
+{
+ data->targetNodeId = targetNodeId;
+}
+
+/*!
+ Returns the isForwardReference flag.
+*/
+bool QOpcUaAddReferenceItem::isForwardReference() const
+{
+ return data->isForwardReference;
+}
+
+/*!
+ Sets the isForwardReference flag to \a isForwardReference.
+ If the flag is set, a forward reference is created.
+ Otherwise, an inverse reference is created.
+*/
+void QOpcUaAddReferenceItem::setIsForwardReference(bool isForwardReference)
+{
+ data->isForwardReference = isForwardReference;
+}
+
+/*!
+ Returns the reference type id.
+*/
+QString QOpcUaAddReferenceItem::referenceTypeId() const
+{
+ return data->referenceTypeId;
+}
+
+/*!
+ Sets the reference type id to \a referenceTypeId.
+ A reference of this type will be created on the server.
+*/
+void QOpcUaAddReferenceItem::setReferenceTypeId(const QString &referenceTypeId)
+{
+ data->referenceTypeId = referenceTypeId;
+}
+
+/*!
+ Returns the source node id.
+*/
+QString QOpcUaAddReferenceItem::sourceNodeId() const
+{
+ return data->sourceNodeId;
+}
+
+/*!
+ Sets the node id of the source node to \a sourceNodeId.
+*/
+void QOpcUaAddReferenceItem::setSourceNodeId(const QString &sourceNodeId)
+{
+ data->sourceNodeId = sourceNodeId;
+}
+
+QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuaaddreferenceitem.h b/src/opcua/client/qopcuaaddreferenceitem.h
new file mode 100644
index 0000000..a3673de
--- /dev/null
+++ b/src/opcua/client/qopcuaaddreferenceitem.h
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOPCUAADDREFERENCEITEM_H
+#define QOPCUAADDREFERENCEITEM_H
+
+#include <QtOpcUa/qopcuanodecreationattributes.h>
+#include <QtOpcUa/qopcuatype.h>
+
+QT_BEGIN_NAMESPACE
+
+class QOpcUaAddReferenceItemData;
+class Q_OPCUA_EXPORT QOpcUaAddReferenceItem
+{
+public:
+ QOpcUaAddReferenceItem();
+ QOpcUaAddReferenceItem(const QOpcUaAddReferenceItem &other);
+ QOpcUaAddReferenceItem &operator=(const QOpcUaAddReferenceItem &rhs);
+ ~QOpcUaAddReferenceItem();
+
+ QString sourceNodeId() const;
+ void setSourceNodeId(const QString &sourceNodeId);
+
+ QString referenceTypeId() const;
+ void setReferenceTypeId(const QString &referenceTypeId);
+
+ bool isForwardReference() const;
+ void setIsForwardReference(bool isForwardReference);
+
+ QOpcUa::QExpandedNodeId targetNodeId() const;
+ void setTargetNodeId(const QOpcUa::QExpandedNodeId &targetNodeId);
+
+ QOpcUa::NodeClass targetNodeClass() const;
+ void setTargetNodeClass(QOpcUa::NodeClass targetNodeClass);
+
+ QString targetServerUri() const;
+ void setTargetServerUri(const QString &targetServerUri);
+
+private:
+ QSharedDataPointer<QOpcUaAddReferenceItemData> data;
+};
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QOpcUaAddReferenceItem)
+
+#endif // QOPCUAADDREFERENCEITEM_H
diff --git a/src/opcua/client/qopcuabackend.cpp b/src/opcua/client/qopcuabackend.cpp
index d36b204..b9e2c57 100644
--- a/src/opcua/client/qopcuabackend.cpp
+++ b/src/opcua/client/qopcuabackend.cpp
@@ -86,7 +86,7 @@ QOpcUa::Types QOpcUaBackend::attributeIdToTypeId(QOpcUa::NodeAttribute attr)
double QOpcUaBackend::revisePublishingInterval(double requestedValue, double minimumValue)
{
- return std::max(requestedValue, minimumValue);
+ return (std::max)(requestedValue, minimumValue);
}
QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuabackend_p.h b/src/opcua/client/qopcuabackend_p.h
index 4f9ccab..11c89fe 100644
--- a/src/opcua/client/qopcuabackend_p.h
+++ b/src/opcua/client/qopcuabackend_p.h
@@ -79,15 +79,30 @@ public:
Q_SIGNALS:
void stateAndOrErrorChanged(QOpcUaClient::ClientState state,
QOpcUaClient::ClientError error);
- void attributesRead(uintptr_t handle, QVector<QOpcUaReadResult> attributes, QOpcUa::UaStatusCode serviceResult);
- void attributeWritten(uintptr_t hande, QOpcUa::NodeAttribute attribute, QVariant value, QOpcUa::UaStatusCode statusCode);
- void methodCallFinished(uintptr_t handle, QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode);
-
- void attributeUpdated(uintptr_t handle, QOpcUaReadResult res);
- void monitoringEnableDisable(uintptr_t handle, QOpcUa::NodeAttribute attr, bool subscribe, QOpcUaMonitoringParameters status);
- void monitoringStatusChanged(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items,
+ void attributesRead(quint64 handle, QVector<QOpcUaReadResult> attributes, QOpcUa::UaStatusCode serviceResult);
+ void attributeWritten(quint64 hande, QOpcUa::NodeAttribute attribute, QVariant value, QOpcUa::UaStatusCode statusCode);
+ void methodCallFinished(quint64 handle, QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode);
+
+ void dataChangeOccurred(quint64 handle, QOpcUaReadResult res);
+ void eventOccurred(quint64 handle, QVariantList fields);
+ void monitoringEnableDisable(quint64 handle, QOpcUa::NodeAttribute attr, bool subscribe, QOpcUaMonitoringParameters status);
+ void monitoringStatusChanged(quint64 handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items,
QOpcUaMonitoringParameters param);
- void browseFinished(uintptr_t handle, QVector<QOpcUaReferenceDescription> children, QOpcUa::UaStatusCode statusCode);
+ void browseFinished(quint64 handle, QVector<QOpcUaReferenceDescription> children, QOpcUa::UaStatusCode statusCode);
+
+ void resolveBrowsePathFinished(quint64 handle, const QVector<QOpcUa::QBrowsePathTarget> &targets,
+ const QVector<QOpcUa::QRelativePathElement> &path, QOpcUa::UaStatusCode statusCode);
+ void endpointsRequestFinished(QVector<QOpcUa::QEndpointDescription> endpoints, QOpcUa::UaStatusCode statusCode);
+ void findServersFinished(QVector<QOpcUa::QApplicationDescription> servers, QOpcUa::UaStatusCode statusCode);
+ void batchReadFinished(QVector<QOpcUaReadResult> results, QOpcUa::UaStatusCode serviceResult);
+ void batchWriteFinished(QVector<QOpcUaWriteResult> results, QOpcUa::UaStatusCode serviceResult);
+
+ void addNodeFinished(QOpcUa::QExpandedNodeId requestedNodeId, QString assignedNodeId, QOpcUa::UaStatusCode statusCode);
+ void deleteNodeFinished(QString nodeId, QOpcUa::UaStatusCode statusCode);
+ void addReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUa::QExpandedNodeId targetNodeId, bool isForwardReference,
+ QOpcUa::UaStatusCode statusCode);
+ void deleteReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUa::QExpandedNodeId targetNodeId, bool isForwardReference,
+ QOpcUa::UaStatusCode statusCode);
private:
Q_DISABLE_COPY(QOpcUaBackend)
diff --git a/src/opcua/client/qopcuabinarydataencoding.cpp b/src/opcua/client/qopcuabinarydataencoding.cpp
index e03fc37..1fb09f9 100644
--- a/src/opcua/client/qopcuabinarydataencoding.cpp
+++ b/src/opcua/client/qopcuabinarydataencoding.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2017 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtOpcUa module of the Qt Toolkit.
@@ -34,292 +34,205 @@
**
****************************************************************************/
-#include <private/qopcuabinarydataencoding_p.h>
+#include "qopcuabinarydataencoding.h"
QT_BEGIN_NAMESPACE
-template<typename T>
-T QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success)
-{
- if (bufferSize >= sizeof(T)) {
- T temp = *reinterpret_cast<const T *>(ptr);
- ptr += sizeof(T);
- success = true;
- bufferSize -= sizeof(T);
- return temp;
- } else {
- success = false;
- return T(0);
- }
-}
-
-template<>
-bool QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success)
-{
- if (bufferSize) {
- quint8 temp = *reinterpret_cast<const quint8*>(ptr);
- ptr += 1;
- bufferSize -= 1;
- success = true;
- return temp == 0 ? false : true;
- } else {
- success = false;
+/*!
+ \class QOpcUaBinaryDataEncoding
+ \inmodule QtOpcUa
+ \brief QOpcUaBinaryDataEncoding is a partial implementation of the OPC UA binary data encoding described in OPC-UA part 6.
+
+ It offers template functions for encoding and decoding data for reading and writing extension objects.
+
+ The following types are supported:
+
+ \table
+ \header
+ \li Qt type
+ \li OPC UA type
+ \row
+ \li quint8
+ \li uint8
+ \row
+ \li qint8
+ \li int8
+ \row
+ \li quint16
+ \li uint16
+ \row
+ \li qint16
+ \li int16
+ \row
+ \li quint32
+ \li uint32
+ \row
+ \li qint32
+ \li int32
+ \row
+ \li quint64
+ \li uint64
+ \row
+ \li qint64
+ \li int64
+ \row
+ \li float
+ \li float
+ \row
+ \li double
+ \li double
+ \row
+ \li QString
+ \li String
+ \row
+ \li QOpcUa::QQualifiedName
+ \li QualifiedName
+ \row
+ \li QOpcUa::QLocalizedText
+ \li LocalizedText
+ \row
+ \li QOpcUa::QEUInformation
+ \li EUInformation
+ \row
+ \li QOpcUa::QRange
+ \li Range
+ \row
+ \li QOpcUa::QComplexNumber
+ \li ComplexNumber
+ \row
+ \li QOpcUa::QDoubleComplexNumber
+ \li DoubleComplexNumber
+ \row
+ \li QOpcUa::QAxisInformation
+ \li AxisInformation
+ \row
+ \li QOpcUa::QXValue
+ \li XV
+ \row
+ \li QUuid
+ \li GUID
+ \row
+ \li QString node id
+ \li NodeId
+ \row
+ \li QByteArray
+ \li ByteString
+ \row
+ \li QDateTime
+ \li DateTime
+ \row
+ \li QOpcUa::UaStatusCode
+ \li StatusCode
+ \row
+ \li QOpcUa::QExpandedNodeId
+ \li ExpandedNodeId
+ \row
+ \li QOpcUa::QExtensionObject
+ \li ExtensionObject
+ \row
+ \li QOpcUa::QArgument
+ \li Argument
+ \endtable
+*/
+
+/*!
+ \fn template<typename T, QOpcUa::Types OVERLAY> T QOpcUaBinaryDataEncoding::decode(bool &success)
+
+ Decodes a scalar value of type T from the data buffer.
+ \a success is set to \c true if the decoding was successful, \c false if not.
+
+ The decoded value is returned. If \a success is false, the returned value is invalid.
+
+ \sa decodeArray()
+*/
+
+/*!
+ \fn template<typename T, QOpcUa::Types OVERLAY> bool QOpcUaBinaryDataEncoding::encode(const T &src)
+
+ Encodes \a src of type T and appends the encoded value to the data buffer.
+ Returns \c true if the value has been successfully encoded.
+
+ \sa encodeArray()
+*/
+
+/*!
+ \fn template<typename T, QOpcUa::Types OVERLAY> QVector<T> QOpcUaBinaryDataEncoding::decodeArray(bool &success)
+
+ Decodes an array of type T from the data buffer.
+ \a success is set to \c true if the decoding was successful, \c false if not.
+
+ The decoded value is returned. If \a success is false, the returned value is invalid.
+
+ \sa decode()
+*/
+
+/*!
+ \fn template<typename T, QOpcUa::Types OVERLAY> bool QOpcUaBinaryDataEncoding::encodeArray(const QVector<T> &src)
+
+ Encodes all elements of type T in \a src and appends the encoded values to the data buffer.
+
+ Returns \c true if the value has been successfully encoded.
+
+ \sa encode()
+*/
+
+/*!
+ Constructs a binary data encoding object for the data buffer \a buffer.
+ \a buffer must not be deleted as long as this binary data encoding object is used.
+*/
+QOpcUaBinaryDataEncoding::QOpcUaBinaryDataEncoding(QByteArray *buffer)
+ : m_data(buffer)
+{
+}
+
+/*!
+ Constructs a binary data encoding object using the encoded body of \a object as data buffer.
+
+ \a object must not be deleted as long as this binary data encoding oject is used.
+*/
+QOpcUaBinaryDataEncoding::QOpcUaBinaryDataEncoding(QOpcUa::QExtensionObject &object)
+ : m_data(&object.encodedBodyRef())
+{
+}
+
+bool QOpcUaBinaryDataEncoding::enoughData(int requiredSize)
+{
+ if (!m_data)
return false;
- }
-}
-
-template<>
-QString QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success)
-{
- if (bufferSize < sizeof(qint32)) {
- success = false;
- return QString();
- }
-
- const qint32 length = decode<qint32>(ptr, bufferSize, success);
-
- if (!success)
- return QString();
-
- if (length > 0 && bufferSize < static_cast<size_t>(length)) {
- success = false;
- return QString();
- }
-
- if (length > 0) {
- QString temp = QString::fromUtf8(reinterpret_cast<const char *>(ptr), length);
- ptr += length;
- bufferSize -= length;
- success = true;
- return temp;
- } else { // Empty string
- success = true;
- return QString();
- }
+ return (m_data->size() + m_offset) >= requiredSize;
}
-template <>
-QOpcUa::QLocalizedText QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success)
+/*!
+ Returns the current offset in the data buffer.
+*/
+int QOpcUaBinaryDataEncoding::offset() const
{
- QOpcUa::QLocalizedText temp;
- quint8 encodingMask = decode<quint8>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QLocalizedText();
-
- if (encodingMask & 0x01) {
- temp.locale = decode<QString>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QLocalizedText();
- }
- if (encodingMask & 0x02) {
- temp.text = decode<QString>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QLocalizedText();
- }
- return temp;
+ return m_offset;
}
-template <>
-QOpcUa::QEUInformation QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success)
+/*!
+ Sets the current offset in the data buffer to \a offset.
+ The first byte in the buffer has the offset 0.
+*/
+void QOpcUaBinaryDataEncoding::setOffset(int offset)
{
- QOpcUa::QEUInformation temp;
- temp.namespaceUri = decode<QString>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QEUInformation();
- temp.unitId = decode<qint32>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QEUInformation();
- temp.displayName = decode<QOpcUa::QLocalizedText>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QEUInformation();
- temp.description = decode<QOpcUa::QLocalizedText>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QEUInformation();
- return temp;
+ m_offset = offset;
}
-template <>
-QOpcUa::QRange QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success)
-{
- QOpcUa::QRange temp;
- temp.low = decode<double>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QRange();
- temp.high = decode<double>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QRange();
- return temp;
-}
+/*!
+ Truncates the data buffer to the current \l offset().
+ If the offset is behind the current buffer size, this method does nothing.
-template <>
-QOpcUa::QComplexNumber QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success)
+ This method can be used to roll back after an unsuccessful encode by setting
+ the old offset and calling truncateBufferToOffset().
+*/
+void QOpcUaBinaryDataEncoding::truncateBufferToOffset()
{
- QOpcUa::QComplexNumber temp;
- temp.real = decode<float>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QComplexNumber();
- temp.imaginary = decode<float>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QComplexNumber();
- return temp;
-}
+ if (!m_data)
+ return;
-template <>
-QOpcUa::QDoubleComplexNumber QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success)
-{
- QOpcUa::QDoubleComplexNumber temp;
- temp.real = decode<double>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QDoubleComplexNumber();
- temp.imaginary = decode<double>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QDoubleComplexNumber();
- return temp;
-}
-
-template <>
-QOpcUa::QAxisInformation QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success)
-{
- QOpcUa::QAxisInformation temp;
- temp.engineeringUnits = decode<QOpcUa::QEUInformation>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QAxisInformation();
- temp.eURange = decode<QOpcUa::QRange>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QAxisInformation();
- temp.title = decode<QOpcUa::QLocalizedText>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QAxisInformation();
- temp.axisScaleType = static_cast<QOpcUa::AxisScale>(decode<quint32>(ptr, bufferSize, success));
- if (!success)
- return QOpcUa::QAxisInformation();
- temp.axisSteps = decodeArray<double>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QAxisInformation();
- return temp;
-}
-
-template <>
-QOpcUa::QXValue QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success)
-{
- QOpcUa::QXValue temp;
- temp.x = decode<double>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QXValue();
- temp.value = decode<float>(ptr, bufferSize, success);
- if (!success)
- return QOpcUa::QXValue();
- return temp;
-}
-
-template<typename T>
-void QOpcUaBinaryDataEncoding::encode(const T &src, QByteArray &dst)
-{
- dst.append(reinterpret_cast<const char *>(&src), sizeof(T));
-}
-
-template<>
-void QOpcUaBinaryDataEncoding::encode<bool>(const bool &src, QByteArray &dst)
-{
- const quint8 value = src ? 1 : 0;
- dst.append(reinterpret_cast<const char *>(&value), 1);
-}
-
-template<>
-void QOpcUaBinaryDataEncoding::encode<QString>(const QString &src, QByteArray &dst)
-{
- QByteArray arr = src.toUtf8();
- encode<qint32>(arr.length() > 0 ? arr.length() : -1 , dst);
- if (arr.length())
- dst.append(arr.data(), arr.length());
-}
-
-template<>
-void QOpcUaBinaryDataEncoding::encode<QOpcUa::QLocalizedText>(const QOpcUa::QLocalizedText &src, QByteArray &dst)
-{
- quint8 mask = 0;
- if (src.locale.length() != 0)
- mask |= 0x01;
- if (src.text.length() != 0)
- mask |= 0x02;
- encode<quint8>(mask, dst);
- if (src.locale.length())
- encode(src.locale, dst);
- if (src.text.length())
- encode(src.text, dst);
-}
-
-template <>
-void QOpcUaBinaryDataEncoding::encode<QOpcUa::QRange>(const QOpcUa::QRange &src, QByteArray &dst)
-{
- encode<double>(src.low, dst);
- encode<double>(src.high, dst);
-}
-
-template <>
-void QOpcUaBinaryDataEncoding::encode<QOpcUa::QEUInformation>(const QOpcUa::QEUInformation &src, QByteArray &dst)
-{
- encode<QString>(src.namespaceUri, dst);
- encode<qint32>(src.unitId, dst);
- encode<QOpcUa::QLocalizedText>(src.displayName, dst);
- encode<QOpcUa::QLocalizedText>(src.description, dst);
-}
-
-template <>
-void QOpcUaBinaryDataEncoding::encode<QOpcUa::QComplexNumber>(const QOpcUa::QComplexNumber &src, QByteArray &dst)
-{
- encode<float>(src.real, dst);
- encode<float>(src.imaginary, dst);
-}
-
-template <>
-void QOpcUaBinaryDataEncoding::encode<QOpcUa::QDoubleComplexNumber>(const QOpcUa::QDoubleComplexNumber &src, QByteArray &dst)
-{
- encode<double>(src.real, dst);
- encode<double>(src.imaginary, dst);
-}
-
-template <>
-void QOpcUaBinaryDataEncoding::encode<QOpcUa::QAxisInformation>(const QOpcUa::QAxisInformation &src, QByteArray &dst)
-{
- encode<QOpcUa::QEUInformation>(src.engineeringUnits, dst);
- encode<QOpcUa::QRange>(src.eURange, dst);
- encode<QOpcUa::QLocalizedText>(src.title, dst);
- encode<quint32>(static_cast<quint32>(src.axisScaleType), dst);
- encodeArray<double>(src.axisSteps, dst);
-}
-
-template <>
-void QOpcUaBinaryDataEncoding::encode<QOpcUa::QXValue>(const QOpcUa::QXValue &src, QByteArray &dst)
-{
- encode<double>(src.x, dst);
- encode<float>(src.value, dst);
-}
-
-template<typename T>
-QVector<T> QOpcUaBinaryDataEncoding::decodeArray(const char *&ptr, size_t &bufferSize, bool &success)
-{
- QVector<T> temp;
-
- qint32 size = decode<qint32>(ptr, bufferSize, success);
- if (!success)
- return temp;
-
- for (int i = 0; i < size; ++i) {
- temp.push_back(decode<T>(ptr, bufferSize, success));
- if (!success)
- return QVector<T>();
- }
-
- return temp;
-}
-
-template<typename T>
-void QOpcUaBinaryDataEncoding::encodeArray(const QVector<T> &src, QByteArray &dst)
-{
- encode<qint32>(src.isEmpty() ? -1 : src.size(), dst);
- for (const auto &element : src)
- encode<T>(element, dst);
+ if (m_offset < m_data->size() - 1)
+ m_data->truncate(m_offset + 1);
}
QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuabinarydataencoding.h b/src/opcua/client/qopcuabinarydataencoding.h
new file mode 100644
index 0000000..e22410c
--- /dev/null
+++ b/src/opcua/client/qopcuabinarydataencoding.h
@@ -0,0 +1,961 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOPCUABINARYDATAENCODING_H
+#define QOPCUABINARYDATAENCODING_H
+
+#include <QtOpcUa/qopcuatype.h>
+
+#include <QtCore/qdatetime.h>
+#include <QtCore/qmetatype.h>
+#include <QtCore/quuid.h>
+#include <QtCore/qendian.h>
+
+#include <limits>
+
+QT_BEGIN_NAMESPACE
+
+// This class implements a subset of the OPC UA Binary DataEncoding defined in OPC-UA part 6, 5.2.
+class Q_OPCUA_EXPORT QOpcUaBinaryDataEncoding
+{
+public:
+
+ QOpcUaBinaryDataEncoding(QByteArray *buffer);
+ QOpcUaBinaryDataEncoding(QOpcUa::QExtensionObject &object);
+
+ template <typename T, QOpcUa::Types OVERLAY = QOpcUa::Types::Undefined>
+ T decode(bool &success);
+ template <typename T, QOpcUa::Types OVERLAY = QOpcUa::Types::Undefined>
+ QVector<T> decodeArray(bool &success);
+
+ template <typename T, QOpcUa::Types OVERLAY = QOpcUa::Types::Undefined>
+ bool encode(const T &src);
+ template <typename T, QOpcUa::Types OVERLAY = QOpcUa::Types::Undefined>
+ bool encodeArray(const QVector<T> &src);
+
+
+ int offset() const;
+ void setOffset(int offset);
+ void truncateBufferToOffset();
+
+private:
+ bool enoughData(int requiredSize);
+ template <typename T>
+ T upperBound();
+
+ QByteArray *m_data{nullptr};
+ int m_offset{0};
+};
+
+template<typename T>
+T QOpcUaBinaryDataEncoding::upperBound()
+{
+ // Use extra parentheses to prevent macro substitution for max() on windows
+ return (std::numeric_limits<T>::max)();
+}
+
+template<typename T, QOpcUa::Types OVERLAY>
+inline T QOpcUaBinaryDataEncoding::decode(bool &success)
+{
+ static_assert(OVERLAY == QOpcUa::Types::Undefined, "Ambiguous types are only permitted for template specializations");
+ static_assert(std::is_arithmetic<T>::value == true, "Non-numeric types are only permitted for template specializations");
+
+ if (!m_data) {
+ success = false;
+ return T(0);
+ }
+
+ if (enoughData(sizeof(T))) {
+ T temp = *reinterpret_cast<const T *>(m_data->constData() + m_offset);
+ m_offset += sizeof(T);
+ success = true;
+ return qFromLittleEndian<T>(temp);
+ } else {
+ success = false;
+ return T(0);
+ }
+}
+
+template<>
+inline bool QOpcUaBinaryDataEncoding::decode<bool>(bool &success)
+{
+ if (!m_data) {
+ success = false;
+ return success;
+ }
+
+ if (enoughData(sizeof(quint8))) {
+ auto temp = *reinterpret_cast<const quint8 *>(m_data->constData() + m_offset);
+ m_offset += sizeof(temp);
+ success = true;
+ return temp != 0;
+ } else {
+ success = false;
+ return false;
+ }
+}
+
+template<>
+inline QString QOpcUaBinaryDataEncoding::decode<QString>(bool &success)
+{
+ if (!m_data) {
+ success = false;
+ return QString();
+ }
+
+ const auto length = decode<qint32>(success);
+
+ if (length > 0 && !enoughData(static_cast<size_t>(length))) {
+ success = false;
+ return QString();
+ }
+
+ if (length > 0) {
+ QString temp = QString::fromUtf8(reinterpret_cast<const char *>(m_data->constData() + m_offset), length);
+ m_offset += length;
+ success = true;
+ return temp;
+ } else if (length == 0) { // Empty string
+ success = true;
+ return QString::fromUtf8("");
+ } else if (length == -1) { // Null string
+ success = true;
+ return QString();
+ }
+
+ success = false;
+ return QString();
+}
+
+template <>
+inline QOpcUa::QQualifiedName QOpcUaBinaryDataEncoding::decode<QOpcUa::QQualifiedName>(bool &success)
+{
+ QOpcUa::QQualifiedName temp;
+ temp.setNamespaceIndex(decode<quint16>(success));
+ if (!success)
+ return QOpcUa::QQualifiedName();
+
+ temp.setName(decode<QString>(success));
+ if (!success)
+ return QOpcUa::QQualifiedName();
+
+ return temp;
+}
+
+template <>
+inline QOpcUa::QLocalizedText QOpcUaBinaryDataEncoding::decode<QOpcUa::QLocalizedText>(bool &success)
+{
+ QOpcUa::QLocalizedText temp;
+ quint8 encodingMask = decode<quint8>(success);
+ if (!success)
+ return QOpcUa::QLocalizedText();
+
+ if (encodingMask & 0x01) {
+ temp.setLocale(decode<QString>(success));
+ if (!success)
+ return QOpcUa::QLocalizedText();
+ }
+ if (encodingMask & 0x02) {
+ temp.setText(decode<QString>(success));
+ if (!success)
+ return QOpcUa::QLocalizedText();
+ }
+ return temp;
+}
+
+template <>
+inline QOpcUa::QEUInformation QOpcUaBinaryDataEncoding::decode<QOpcUa::QEUInformation>(bool &success)
+{
+ QOpcUa::QEUInformation temp;
+
+ temp.setNamespaceUri(decode<QString>(success));
+ if (!success)
+ return QOpcUa::QEUInformation();
+
+ temp.setUnitId(decode<qint32>(success));
+ if (!success)
+ return QOpcUa::QEUInformation();
+
+ temp.setDisplayName(decode<QOpcUa::QLocalizedText>(success));
+ if (!success)
+ return QOpcUa::QEUInformation();
+
+ temp.setDescription(decode<QOpcUa::QLocalizedText>(success));
+ if (!success)
+ return QOpcUa::QEUInformation();
+
+ return temp;
+}
+
+template <>
+inline QOpcUa::QRange QOpcUaBinaryDataEncoding::decode<QOpcUa::QRange>(bool &success)
+{
+ QOpcUa::QRange temp;
+
+ temp.setLow(decode<double>(success));
+ if (!success)
+ return QOpcUa::QRange();
+
+ temp.setHigh(decode<double>(success));
+ if (!success)
+ return QOpcUa::QRange();
+
+ return temp;
+}
+
+template <>
+inline QOpcUa::QComplexNumber QOpcUaBinaryDataEncoding::decode<QOpcUa::QComplexNumber>(bool &success)
+{
+ QOpcUa::QComplexNumber temp;
+
+ temp.setReal(decode<float>(success));
+ if (!success)
+ return QOpcUa::QComplexNumber();
+
+ temp.setImaginary(decode<float>(success));
+ if (!success)
+ return QOpcUa::QComplexNumber();
+
+ return temp;
+}
+
+template <>
+inline QOpcUa::QDoubleComplexNumber QOpcUaBinaryDataEncoding::decode<QOpcUa::QDoubleComplexNumber>(bool &success)
+{
+ QOpcUa::QDoubleComplexNumber temp;
+
+ temp.setReal(decode<double>(success));
+ if (!success)
+ return QOpcUa::QDoubleComplexNumber();
+
+ temp.setImaginary(decode<double>(success));
+ if (!success)
+ return QOpcUa::QDoubleComplexNumber();
+
+ return temp;
+}
+
+template <>
+inline QOpcUa::QAxisInformation QOpcUaBinaryDataEncoding::decode<QOpcUa::QAxisInformation>(bool &success)
+{
+ QOpcUa::QAxisInformation temp;
+
+ temp.setEngineeringUnits(decode<QOpcUa::QEUInformation>(success));
+ if (!success)
+ return QOpcUa::QAxisInformation();
+
+ temp.setEURange(decode<QOpcUa::QRange>(success));
+ if (!success)
+ return QOpcUa::QAxisInformation();
+
+ temp.setTitle(decode<QOpcUa::QLocalizedText>(success));
+ if (!success)
+ return QOpcUa::QAxisInformation();
+
+ temp.setAxisScaleType(static_cast<QOpcUa::AxisScale>(decode<quint32>(success)));
+ if (!success)
+ return QOpcUa::QAxisInformation();
+
+ temp.setAxisSteps(decodeArray<double>(success));
+ if (!success)
+ return QOpcUa::QAxisInformation();
+
+ return temp;
+}
+
+template <>
+inline QOpcUa::QXValue QOpcUaBinaryDataEncoding::decode<QOpcUa::QXValue>(bool &success)
+{
+ QOpcUa::QXValue temp;
+
+ temp.setX(decode<double>(success));
+ if (!success)
+ return QOpcUa::QXValue();
+
+ temp.setValue(decode<float>(success));
+ if (!success)
+ return QOpcUa::QXValue();
+
+ return temp;
+}
+
+template <>
+inline QUuid QOpcUaBinaryDataEncoding::decode<QUuid>(bool &success)
+{
+ if (!m_data) {
+ success = false;
+ return QUuid();
+ }
+
+ // An UUID is 16 bytes long
+ const size_t uuidSize = 16;
+ if (!enoughData(uuidSize)) {
+ success = false;
+ return QUuid();
+ }
+
+ const QUuid temp = QUuid::fromRfc4122(QByteArray::fromRawData(m_data->constData() + m_offset, uuidSize));
+ m_offset += uuidSize;
+ success = true;
+ return temp;
+}
+
+template <>
+inline QByteArray QOpcUaBinaryDataEncoding::decode<QByteArray>(bool &success)
+{
+ if (!m_data) {
+ success = false;
+ return QByteArray();
+ }
+
+ qint32 size = decode<qint32>(success);
+ if (!success)
+ return QByteArray();
+
+ if (size > 0 && enoughData(size)) {
+ const QByteArray temp(m_data->constData() + m_offset, size);
+ m_offset += size;
+ return temp;
+ } else if (size == 0) {
+ return QByteArray("");
+ } else if (size == -1) {
+ return QByteArray();
+ }
+
+ success = false;
+ return QByteArray();
+}
+
+template <>
+inline QString QOpcUaBinaryDataEncoding::decode<QString, QOpcUa::Types::NodeId>(bool &success)
+{
+ quint8 identifierType = decode<quint8>(success);
+ if (!success)
+ return QString();
+
+ identifierType &= ~(0x40 | 0x80); // Remove expanded node id flags
+
+ quint16 namespaceIndex;
+
+ if (identifierType == 0x00) {
+ // encodingType 0x00 does not transfer the namespace index, it has to be zero
+ // Part 6, Chapter 5.2.2.9, Section "Two Byte NodeId Binary DataEncoding"
+ namespaceIndex = 0;
+ } else if (identifierType == 0x01){
+ // encodingType 0x01 transfers only one byte namespace index, has to be in range 0-255
+ // Part 6, Chapter 5.2.2.9, Section "Four Byte NodeId Binary DataEncoding"
+ namespaceIndex = decode<quint8>(success);
+ } else {
+ namespaceIndex = decode<quint16>(success);
+ }
+
+ if (!success)
+ return QString();
+
+ switch (identifierType) {
+ case 0x00: {
+ quint8 identifier = decode<quint8>(success);
+ if (!success)
+ return QString();
+ return QStringLiteral("ns=%1;i=%2").arg(namespaceIndex).arg(identifier);
+ }
+ case 0x01: {
+ quint16 identifier = decode<quint16>(success);
+ if (!success)
+ return QString();
+ return QStringLiteral("ns=%1;i=%2").arg(namespaceIndex).arg(identifier);
+ }
+ case 0x02: {
+ quint32 identifier = decode<quint32>(success);
+ if (!success)
+ return QString();
+ return QStringLiteral("ns=%1;i=%2").arg(namespaceIndex).arg(identifier);
+ }
+ case 0x03: {
+ QString identifier = decode<QString>(success);
+ if (!success)
+ return QString();
+ return QStringLiteral("ns=%1;s=%2").arg(namespaceIndex).arg(identifier);
+ }
+ case 0x04: {
+ QUuid identifier = decode<QUuid>(success);
+ if (!success)
+ return QString();
+ return QStringLiteral("ns=%1;g=%2").arg(namespaceIndex).arg(identifier.toString().midRef(1, 36)); // Remove enclosing {...}
+ }
+ case 0x05: {
+ QByteArray identifier = decode<QByteArray>(success);
+ if (!success)
+ return QString();
+ return QStringLiteral("ns=%1;b=%2").arg(namespaceIndex).arg(QString::fromLatin1(identifier.toBase64().constData()));
+ }
+ }
+
+ success = false;
+ return QString();
+}
+
+template <>
+inline QOpcUa::QExpandedNodeId QOpcUaBinaryDataEncoding::decode<QOpcUa::QExpandedNodeId>(bool &success)
+{
+ if (!m_data) {
+ success = false;
+ return QOpcUa::QExpandedNodeId();
+ }
+
+ // Don't decode the first byte, it is required for decode<QString, QOpcUa::Types::NodeId>()
+ if (!enoughData(sizeof(quint8))) {
+ success = false;
+ return QOpcUa::QExpandedNodeId();
+ }
+ bool hasNamespaceUri = *(reinterpret_cast<const quint8 *>(m_data->constData() + m_offset)) & 0x80;
+ bool hasServerIndex = *(reinterpret_cast<const quint8 *>(m_data->constData() + m_offset)) & 0x40;
+
+ QString nodeId = decode<QString, QOpcUa::Types::NodeId>(success);
+ if (!success)
+ return QOpcUa::QExpandedNodeId();
+
+ QString namespaceUri;
+ if (hasNamespaceUri) {
+ namespaceUri = decode<QString>(success);
+ if (!success)
+ return QOpcUa::QExpandedNodeId();
+ }
+
+ quint32 serverIndex = 0;
+ if (hasServerIndex) {
+ serverIndex = decode<quint32>(success);
+ if (!success)
+ return QOpcUa::QExpandedNodeId();
+ }
+
+ return QOpcUa::QExpandedNodeId(namespaceUri, nodeId, serverIndex);
+}
+
+template <>
+inline QDateTime QOpcUaBinaryDataEncoding::decode<QDateTime>(bool &success)
+{
+ qint64 timestamp = decode<qint64>(success);
+ if (!success)
+ return QDateTime();
+
+ if (timestamp == 0 || timestamp == upperBound<qint64>())
+ return QDateTime();
+
+ // OPC-UA part 6, 5.2.2.5
+ const QDateTime epochStart(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC);
+ return epochStart.addMSecs(timestamp / 10000);
+}
+
+template <>
+inline QOpcUa::UaStatusCode QOpcUaBinaryDataEncoding::decode<QOpcUa::UaStatusCode>(bool &success)
+{
+ quint32 value = decode<quint32>(success);
+ if (!success)
+ return QOpcUa::UaStatusCode(0);
+
+ return QOpcUa::UaStatusCode(value);
+}
+
+template <>
+inline QOpcUa::QExtensionObject QOpcUaBinaryDataEncoding::decode<QOpcUa::QExtensionObject>(bool &success)
+{
+ QOpcUa::QExtensionObject temp;
+
+ QString typeId = decode<QString, QOpcUa::Types::NodeId>(success);
+ if (!success)
+ return QOpcUa::QExtensionObject();
+
+ temp.setEncodingTypeId(typeId);
+ quint8 encoding = decode<quint8>(success);
+ if (!success || encoding > 2) {
+ success = false;
+ return QOpcUa::QExtensionObject();
+ }
+ temp.setEncoding(QOpcUa::QExtensionObject::Encoding(encoding));
+ if (encoding == 0)
+ return temp;
+
+ QByteArray body = decode<QByteArray>(success);
+ if (!success)
+ return QOpcUa::QExtensionObject();
+
+ temp.setEncodedBody(body);
+ return temp;
+}
+
+template <>
+inline QOpcUa::QArgument QOpcUaBinaryDataEncoding::decode<QOpcUa::QArgument>(bool &success)
+{
+ QOpcUa::QArgument temp;
+
+ temp.setName(decode<QString>(success));
+ if (!success)
+ return QOpcUa::QArgument();
+
+ temp.setDataTypeId(decode<QString, QOpcUa::Types::NodeId>(success));
+ if (!success)
+ return QOpcUa::QArgument();
+
+ temp.setValueRank(decode<qint32>(success));
+ if (!success)
+ return QOpcUa::QArgument();
+
+ temp.setArrayDimensions(decodeArray<quint32>(success));
+ if (!success)
+ return QOpcUa::QArgument();
+
+ temp.setDescription(decode<QOpcUa::QLocalizedText>(success));
+ if (!success)
+ return QOpcUa::QArgument();
+
+ return temp;
+}
+
+template<typename T, QOpcUa::Types OVERLAY>
+inline bool QOpcUaBinaryDataEncoding::encode(const T &src)
+{
+ static_assert(OVERLAY == QOpcUa::Types::Undefined, "Ambiguous types are only permitted for template specializations");
+ static_assert(std::is_arithmetic<T>::value == true, "Non-numeric types are only permitted for template specializations");
+
+ if (!m_data)
+ return false;
+
+ T temp = qToLittleEndian<T>(src);
+ m_data->append(reinterpret_cast<const char *>(&temp), sizeof(T));
+ return true;
+}
+
+template<>
+inline bool QOpcUaBinaryDataEncoding::encode<bool>(const bool &src)
+{
+ if (!m_data)
+ return false;
+
+ const quint8 value = src ? 1 : 0;
+ m_data->append(reinterpret_cast<const char *>(&value), sizeof(value));
+ return true;
+}
+
+template<>
+inline bool QOpcUaBinaryDataEncoding::encode<QString>(const QString &src)
+{
+ if (!m_data)
+ return false;
+
+ if (src.size() > upperBound<qint32>())
+ return false;
+
+ QByteArray arr = src.toUtf8();
+ if (!encode<qint32>(arr.isNull() ? -1 : arr.length()))
+ return false;
+ m_data->append(arr);
+ return true;
+}
+
+template<>
+inline bool QOpcUaBinaryDataEncoding::encode<QOpcUa::QQualifiedName>(const QOpcUa::QQualifiedName &src)
+{
+ if (!encode<quint16>(src.namespaceIndex()))
+ return false;
+ if (!encode<QString>(src.name()))
+ return false;
+ return true;
+}
+
+template<>
+inline bool QOpcUaBinaryDataEncoding::encode<QOpcUa::QLocalizedText>(const QOpcUa::QLocalizedText &src)
+{
+ quint8 mask = 0;
+ if (src.locale().length() != 0)
+ mask |= 0x01;
+ if (src.text().length() != 0)
+ mask |= 0x02;
+ if (!encode<quint8>(mask))
+ return false;
+ if (src.locale().length())
+ if (!encode<QString>(src.locale()))
+ return false;
+ if (src.text().length())
+ if (!encode<QString>(src.text()))
+ return false;
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QOpcUa::QRange>(const QOpcUa::QRange &src)
+{
+ if (!encode<double>(src.low()))
+ return false;
+ if (!encode<double>(src.high()))
+ return false;
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QOpcUa::QEUInformation>(const QOpcUa::QEUInformation &src)
+{
+ if (!encode<QString>(src.namespaceUri()))
+ return false;
+ if (!encode<qint32>(src.unitId()))
+ return false;
+ if (!encode<QOpcUa::QLocalizedText>(src.displayName()))
+ return false;
+ if (!encode<QOpcUa::QLocalizedText>(src.description()))
+ return false;
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QOpcUa::QComplexNumber>(const QOpcUa::QComplexNumber &src)
+{
+ if (!encode<float>(src.real()))
+ return false;
+ if (!encode<float>(src.imaginary()))
+ return false;
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QOpcUa::QDoubleComplexNumber>(const QOpcUa::QDoubleComplexNumber &src)
+{
+ if (!encode<double>(src.real()))
+ return false;
+ if (!encode<double>(src.imaginary()))
+ return false;
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QOpcUa::QAxisInformation>(const QOpcUa::QAxisInformation &src)
+{
+ if (!encode<QOpcUa::QEUInformation>(src.engineeringUnits()))
+ return false;
+ if (!encode<QOpcUa::QRange>(src.eURange()))
+ return false;
+ if (!encode<QOpcUa::QLocalizedText>(src.title()))
+ return false;
+ if (!encode<quint32>(static_cast<quint32>(src.axisScaleType())))
+ return false;
+ if (!encodeArray<double>(src.axisSteps()))
+ return false;
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QOpcUa::QXValue>(const QOpcUa::QXValue &src)
+{
+ if (!encode<double>(src.x()))
+ return false;
+ if (!encode<float>(src.value()))
+ return false;
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QUuid>(const QUuid &src)
+{
+ if (!m_data)
+ return false;
+
+ m_data->append(src.toRfc4122());
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QByteArray>(const QByteArray &src)
+{
+ if (!m_data)
+ return false;
+
+ if (src.size() > upperBound<qint32>())
+ return false;
+
+ if (!encode<qint32>(src.isNull() ? -1 : src.size()))
+ return false;
+ if (src.size() > 1)
+ m_data->append(src);
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QString, QOpcUa::Types::NodeId>(const QString &src)
+{
+ if (!m_data)
+ return false;
+
+ quint16 index;
+ QString identifier;
+ char type;
+ if (!QOpcUa::nodeIdStringSplit(src, &index, &identifier, &type))
+ return false;
+
+ qint32 identifierType;
+ switch (type) {
+ case 'i':
+ identifierType = 0;
+ break;
+ case 's':
+ identifierType = 1;
+ break;
+ case 'g':
+ identifierType = 2;
+ break;
+ case 'b':
+ identifierType = 3;
+ break;
+ default:
+ return false;
+ }
+
+ QByteArray encodedIdentifier;
+ QOpcUaBinaryDataEncoding encoder(&encodedIdentifier);
+ quint8 encodingType = 0;
+
+ switch (identifierType) {
+ case 0: {
+ bool isNumber;
+ uint integerIdentifier = identifier.toUInt(&isNumber);
+ if (!isNumber || integerIdentifier > upperBound<quint32>())
+ return false;
+
+ if (integerIdentifier <= 255 && index == 0) {
+ // encodingType 0x00 does not transfer the namespace index, it has to be zero
+ // Part 6, Chapter 5.2.2.9, Section "Two Byte NodeId Binary DataEncoding"
+ if (!encoder.encode<quint8>(integerIdentifier))
+ return false;
+ encodingType = 0x00; // 8 bit numeric
+ break;
+ } else if (integerIdentifier <= 65535 && index <= 255) {
+ // encodingType 0x01 transfers only one byte namespace index, has to be in range 0-255
+ // Part 6, Chapter 5.2.2.9, Section "Four Byte NodeId Binary DataEncoding"
+ if (!encoder.encode<quint16>(integerIdentifier))
+ return false;
+ encodingType = 0x01; // 16 bit numeric
+ break;
+ } else {
+ if (!encoder.encode<quint32>(integerIdentifier))
+ return false;
+ encodingType = 0x02; // 32 bit numeric
+ break;
+ }
+ }
+ case 1: {
+ if (identifier.isEmpty())
+ return false;
+ if (!encoder.encode<QString>(identifier))
+ return false;
+ encodingType = 0x03; // String
+ break;
+ }
+ case 2: {
+ QUuid uuid(identifier);
+ if (uuid.isNull())
+ return false;
+ if (!encoder.encode<QUuid>(uuid))
+ return false;
+ encodingType = 0x04; // GUID
+ break;
+ }
+ case 3: {
+ const QByteArray temp = QByteArray::fromBase64(identifier.toLatin1());
+ if (temp.isEmpty())
+ return false;
+ if (!encoder.encode<QByteArray>(temp))
+ return false;
+ encodingType = 0x05; // ByteString
+ break;
+ }
+ default:
+ return false;
+ }
+
+ if (!encode<quint8>(encodingType))
+ return false;
+
+ if (encodingType == 0x00) {
+ // encodingType == 0x00 skips namespace completely, defaults to zero
+ // Part 6, Chapter 5.2.2.9, Section "Two Byte NodeId Binary DataEncoding"
+ } else if (encodingType == 0x01) {
+ if (!encode<quint8>(index))
+ return false;
+ } else {
+ if (!encode<quint16>(index))
+ return false;
+ }
+
+ m_data->append(encodedIdentifier);
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QOpcUa::QExpandedNodeId>(const QOpcUa::QExpandedNodeId &src)
+{
+ if (!m_data)
+ return false;
+
+ QByteArray temp;
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ if (!encoder.encode<QString, QOpcUa::Types::NodeId>(src.nodeId()))
+ return false;
+
+ quint8 mask = temp.at(0);
+
+ if (!src.namespaceUri().isEmpty()) {
+ mask |= 0x80;
+ if (!encoder.encode<QString>(src.namespaceUri()))
+ return false;
+ }
+
+ if (src.serverIndex() != 0) {
+ mask |= 0x40;
+ if (!encoder.encode<quint32>(src.serverIndex()))
+ return false;
+ }
+
+ temp[0] = mask;
+
+ m_data->append(temp);
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QDateTime>(const QDateTime &src)
+{
+ // OPC-UA part 6, 5.2.2.5
+ if (src >= QDateTime(QDate(9999, 12, 31), QTime(11, 59, 59))) {
+ if (!encode<qint64>(upperBound<qint64>()))
+ return false;
+ return true;
+ }
+
+ const QDateTime uaEpochStart(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC);
+
+ if (src <= uaEpochStart) {
+ if (!encode<qint64>(0))
+ return false;
+ return true;
+ }
+
+ qint64 timestamp = 10000 * (src.toMSecsSinceEpoch() - uaEpochStart.toMSecsSinceEpoch());
+ if (!encode<qint64>(timestamp))
+ return false;
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QOpcUa::UaStatusCode>(const QOpcUa::UaStatusCode &src)
+{
+ if (!encode<quint32>(src))
+ return false;
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QOpcUa::QExtensionObject>(const QOpcUa::QExtensionObject &src)
+{
+ if (!encode<QString, QOpcUa::Types::NodeId>(src.encodingTypeId()))
+ return false;
+
+ if (!encode<quint8>(quint8(src.encoding())))
+ return false;
+ if (src.encoding() != QOpcUa::QExtensionObject::Encoding::NoBody)
+ if (!encode<QByteArray>(src.encodedBody()))
+ return false;
+
+ return true;
+}
+
+template <>
+inline bool QOpcUaBinaryDataEncoding::encode<QOpcUa::QArgument>(const QOpcUa::QArgument &src)
+{
+ if (!m_data)
+ return false;
+
+ QByteArray temp;
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ if (!encoder.encode<QString>(src.name()))
+ return false;
+ if (!encoder.encode<QString, QOpcUa::Types::NodeId>(src.dataTypeId()))
+ return false;
+
+ if (!encoder.encode<qint32>(src.valueRank()))
+ return false;
+ if (!encoder.encodeArray<quint32>(src.arrayDimensions()))
+ return false;
+ if (!encoder.encode<QOpcUa::QLocalizedText>(src.description()))
+ return false;
+ m_data->append(temp);
+
+ return true;
+}
+
+template<typename T, QOpcUa::Types OVERLAY>
+inline QVector<T> QOpcUaBinaryDataEncoding::decodeArray(bool &success)
+{
+ QVector<T> temp;
+
+ qint32 size = decode<qint32>(success);
+ if (!success)
+ return temp;
+
+ for (int i = 0; i < size; ++i) {
+ temp.push_back(decode<T, OVERLAY>(success));
+ if (!success)
+ return QVector<T>();
+ }
+
+ return temp;
+}
+
+template<typename T, QOpcUa::Types OVERLAY>
+inline bool QOpcUaBinaryDataEncoding::encodeArray(const QVector<T> &src)
+{
+ if (src.size() > upperBound<qint32>())
+ return false;
+
+ if (!encode<qint32>(src.size()))
+ return false;
+ for (const auto &element : src) {
+ if (!encode<T, OVERLAY>(element))
+ return false;
+ }
+ return true;
+}
+
+QT_END_NAMESPACE
+
+#endif // QOPCUABINARYDATAENCODING_H
diff --git a/src/opcua/client/qopcuabinarydataencoding_p.h b/src/opcua/client/qopcuabinarydataencoding_p.h
deleted file mode 100644
index 883eb10..0000000
--- a/src/opcua/client/qopcuabinarydataencoding_p.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 basysKom GmbH, opensource@basyskom.com
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtOpcUa module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL3$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPLv3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or later as published by the Free
-** Software Foundation and appearing in the file LICENSE.GPL included in
-** the packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 2.0 requirements will be
-** met: http://www.gnu.org/licenses/gpl-2.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QOPCUABINARYDATAENCODING_H
-#define QOPCUABINARYDATAENCODING_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qopcuaglobal.h"
-#include "qopcuatype.h"
-
-#include <QtCore/qmetatype.h>
-
-QT_BEGIN_NAMESPACE
-
-// This class implements a subset of the OPC UA Binary DataEncoding defined in OPC-UA part 6, 5.2.
-// Only the types needed to handle the data types in OPC-UA part 8, 5.6 have been implemented.
-class Q_OPCUA_EXPORT QOpcUaBinaryDataEncoding
-{
-public:
-
- // The Ids in this enum are the numeric ids of the _Encoding_DefaultBinary nodes for the respective types
- // as listed in https://opcfoundation.org/UA/schemas/1.03/NodeIds.csv
- enum class TypeEncodingId {
- Range = 886,
- EUInformation = 889,
- ComplexNumber = 12181,
- DoubleComplexNumber = 12182,
- AxisInformation = 12089,
- XV = 12090
- };
-
- template <typename T>
- static T decode(const char *&ptr, size_t &bufferSize, bool &success);
- template <typename T>
- static QVector<T> decodeArray(const char *&ptr, size_t &bufferSize, bool &success);
-
- template <typename T>
- static void encode(const T &src, QByteArray &dst);
- template <typename T>
- static void encodeArray(const QVector<T> &src, QByteArray &dst);
-};
-
-template <>
-Q_OPCUA_EXPORT bool QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success);
-template <>
-Q_OPCUA_EXPORT QOpcUa::QEUInformation QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success);
-template <>
-Q_OPCUA_EXPORT QOpcUa::QRange QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success);
-template <>
-Q_OPCUA_EXPORT QOpcUa::QComplexNumber QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success);
-template <>
-Q_OPCUA_EXPORT QOpcUa::QDoubleComplexNumber QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success);
-template <>
-Q_OPCUA_EXPORT QOpcUa::QAxisInformation QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success);
-template <>
-Q_OPCUA_EXPORT QOpcUa::QXValue QOpcUaBinaryDataEncoding::decode(const char *&ptr, size_t &bufferSize, bool &success);
-template <>
-Q_OPCUA_EXPORT void QOpcUaBinaryDataEncoding::encode(const bool &src, QByteArray &dst);
-template <>
-Q_OPCUA_EXPORT void QOpcUaBinaryDataEncoding::encode(const QOpcUa::QEUInformation &src, QByteArray &dst);
-template <>
-Q_OPCUA_EXPORT void QOpcUaBinaryDataEncoding::encode(const QOpcUa::QRange &src, QByteArray &dst);
-template <>
-Q_OPCUA_EXPORT void QOpcUaBinaryDataEncoding::encode(const QOpcUa::QComplexNumber &src, QByteArray &dst);
-template <>
-Q_OPCUA_EXPORT void QOpcUaBinaryDataEncoding::encode(const QOpcUa::QDoubleComplexNumber &src, QByteArray &dst);
-template <>
-Q_OPCUA_EXPORT void QOpcUaBinaryDataEncoding::encode(const QOpcUa::QAxisInformation &src, QByteArray &dst);
-template <>
-Q_OPCUA_EXPORT void QOpcUaBinaryDataEncoding::encode(const QOpcUa::QXValue &src, QByteArray &dst);
-
-QT_END_NAMESPACE
-
-#endif // QOPCUABINARYDATAENCODING_H
diff --git a/src/opcua/client/qopcuabrowserequest.cpp b/src/opcua/client/qopcuabrowserequest.cpp
new file mode 100644
index 0000000..64d835b
--- /dev/null
+++ b/src/opcua/client/qopcuabrowserequest.cpp
@@ -0,0 +1,169 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qopcuabrowserequest.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QOpcUaBrowseRequest
+ \inmodule QtOpcUa
+ \brief Contains parameters for a call to the OPC UA browse service.
+
+ \sa QOpcUaNode::browse()
+*/
+
+/*!
+ \enum QOpcUaBrowseRequest::BrowseDirection
+
+ This enum specifies the possible browse directions supported by a browse call.
+
+ \value Forward Follow references in the forward direction.
+ \value Inverse Follow references in the inverse direction.
+ \value Both Follow references in both directions.
+*/
+
+class QOpcUaBrowseRequestData : public QSharedData
+{
+public:
+ QOpcUaBrowseRequest::BrowseDirection browseDirection {QOpcUaBrowseRequest::BrowseDirection::Forward};
+ QString referenceTypeId;
+ bool includeSubtypes {false};
+ QOpcUa::NodeClasses nodeClassMask;
+};
+
+QOpcUaBrowseRequest::QOpcUaBrowseRequest()
+ : data(new QOpcUaBrowseRequestData)
+{
+}
+
+/*!
+ Creates a browse request from \a other.
+*/
+QOpcUaBrowseRequest::QOpcUaBrowseRequest(const QOpcUaBrowseRequest &other)
+ : data(other.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this browse request.
+*/
+QOpcUaBrowseRequest &QOpcUaBrowseRequest::operator=(const QOpcUaBrowseRequest &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUaBrowseRequest::~QOpcUaBrowseRequest()
+{
+}
+
+/*!
+ Returns the browse direction.
+*/
+QOpcUaBrowseRequest::BrowseDirection QOpcUaBrowseRequest::browseDirection() const
+{
+ return data->browseDirection;
+}
+
+/*!
+ Sets the browse direction to \a browseDirection.
+*/
+void QOpcUaBrowseRequest::setBrowseDirection(const QOpcUaBrowseRequest::BrowseDirection &browseDirection)
+{
+ data->browseDirection = browseDirection;
+}
+
+/*!
+ Returns the reference type id.
+*/
+QString QOpcUaBrowseRequest::referenceTypeId() const
+{
+ return data->referenceTypeId;
+}
+
+/*!
+ Sets the reference type id to \a referenceTypeId.
+*/
+void QOpcUaBrowseRequest::setReferenceTypeId(const QString &referenceTypeId)
+{
+ data->referenceTypeId = referenceTypeId;
+}
+
+/*!
+ Sets the reference type id to \a referenceTypeId.
+*/
+void QOpcUaBrowseRequest::setReferenceTypeId(QOpcUa::ReferenceTypeId referenceTypeId)
+{
+ data->referenceTypeId = QOpcUa::nodeIdFromReferenceType(referenceTypeId);
+}
+
+/*!
+ Returns true if subtypes of the reference type will be retrieved too.
+*/
+bool QOpcUaBrowseRequest::includeSubtypes() const
+{
+ return data->includeSubtypes;
+}
+
+/*!
+ Sets the inclusion of subtypes of the reference type to \a includeSubtypes.
+*/
+void QOpcUaBrowseRequest::setIncludeSubtypes(bool includeSubtypes)
+{
+ data->includeSubtypes = includeSubtypes;
+}
+
+/*!
+ Returns the node class mask.
+*/
+QOpcUa::NodeClasses QOpcUaBrowseRequest::nodeClassMask() const
+{
+ return data->nodeClassMask;
+}
+
+/*!
+ Sets the node class mask to \a nodeClassMask.
+ Nodes of all classes included into the node class mask will be returned
+ by the browse operation.
+*/
+void QOpcUaBrowseRequest::setNodeClassMask(const QOpcUa::NodeClasses &nodeClassMask)
+{
+ data->nodeClassMask = nodeClassMask;
+}
+
+QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuabrowserequest.h b/src/opcua/client/qopcuabrowserequest.h
new file mode 100644
index 0000000..be02c8c
--- /dev/null
+++ b/src/opcua/client/qopcuabrowserequest.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOPCUABROWSEREQUEST_H
+#define QOPCUABROWSEREQUEST_H
+
+#include <QtOpcUa/qopcuatype.h>
+
+#include <QtCore/qshareddata.h>
+
+QT_BEGIN_NAMESPACE
+
+class QOpcUaBrowseRequestData;
+class Q_OPCUA_EXPORT QOpcUaBrowseRequest
+{
+public:
+
+ enum class BrowseDirection : quint32 {
+ Forward = 0,
+ Inverse = 1,
+ Both = 2
+ };
+
+ QOpcUaBrowseRequest();
+ QOpcUaBrowseRequest(const QOpcUaBrowseRequest &other);
+ QOpcUaBrowseRequest &operator=(const QOpcUaBrowseRequest &rhs);
+ ~QOpcUaBrowseRequest();
+
+ QOpcUaBrowseRequest::BrowseDirection browseDirection() const;
+ void setBrowseDirection(const QOpcUaBrowseRequest::BrowseDirection &browseDirection);
+
+ QString referenceTypeId() const;
+ void setReferenceTypeId(const QString &referenceTypeId);
+ void setReferenceTypeId(QOpcUa::ReferenceTypeId referenceTypeId);
+
+ bool includeSubtypes() const;
+ void setIncludeSubtypes(bool includeSubtypes);
+
+ QOpcUa::NodeClasses nodeClassMask() const;
+ void setNodeClassMask(const QOpcUa::NodeClasses &nodeClassMask);
+
+private:
+ QSharedDataPointer<QOpcUaBrowseRequestData> data;
+};
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QOpcUaBrowseRequest)
+
+#endif // QOPCUABROWSEREQUEST_H
diff --git a/src/opcua/client/qopcuaclient.cpp b/src/opcua/client/qopcuaclient.cpp
index a27f18d..ccabefa 100644
--- a/src/opcua/client/qopcuaclient.cpp
+++ b/src/opcua/client/qopcuaclient.cpp
@@ -52,8 +52,19 @@ Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA)
\section1 QOpcUaClient
QOpcUaClient implements basic client capabilities to communicate with
- OPC UA enabled devices and applications. This includes connecting,
- disconnecting and getting \l QOpcUaNode objects for a node on the server.
+ OPC UA enabled devices and applications. This includes querying a discovery server
+ for known servers, requesting a list of endpoints from a server, connecting and
+ disconnecting.
+
+ After successfully connecting to a server, QOpcUaClient allows getting \l QOpcUaNode
+ objects which enable further interaction with nodes on the OPC UA server.
+ For operations that concern multiple nodes, QOpcUaClient offers a batch API which supports
+ reading multiple attributes of multiple nodes in a single request to the server.
+
+ QOpcUaClient also keeps a local copy of the server's namespace array which is created after
+ a successful connect. This information can be queried or updated while the connection lasts.
+ The copy of the namespace array is also used for the resolution of expanded node ids and the
+ creation of qualified names from a namespace URI.
\section1 Addressing Nodes
@@ -142,6 +153,97 @@ Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA)
This signal is emitted after an updateNamespaceArray operation has finished.
\a namespaces contains the content of the server's namespace table. The index
of an entry in \a namespaces corresponds to the namespace index used in the node id.
+
+ If the namespace array content stays the same after the update this signal is emitted nevertheless.
+
+ \sa namespaceArrayChanged() updateNamespaceArray()
+*/
+
+/*!
+ \fn void QOpcUaClient::namespaceArrayChanged(QStringList namespaces)
+
+ This signal is emitted after the namespace array has changed.
+ \a namespaces contains the content of the server's namespace table. The index
+ of an entry in \a namespaces corresponds to the namespace index used in the node id.
+
+ \sa namespaceArrayUpdated() updateNamespaceArray()
+*/
+
+/*!
+ \fn void QOpcUaClient::endpointsRequestFinished(QVector<QOpcUa::QEndpointDescription> endpoints, QOpcUa::UaStatusCode statusCode)
+
+ This signal is emitted after a \l requestEndpoints() operation has finished.
+ \a statusCode contains the result of the operation. If the result is \l {QOpcUa::UaStatusCode} {Good},
+ \a endpoints contains the descriptions of all endpoints that are available on the server.
+*/
+
+/*!
+ \fn void QOpcUaClient::findServersFinished(QVector<QOpcUa::QApplicationDescription> servers, QOpcUa::UaStatusCode statusCode);
+
+ This signal is emitted after a \l findServers() operation has finished.
+ \a statusCode contains the result of the operation. If the result is \l {QOpcUa::UaStatusCode} {Good},
+ \a servers contains the application descriptions of all servers known to the queried server that matched the filter criteria.
+*/
+
+/*!
+ \fn void QOpcUaClient::batchReadFinished(QVector<QOpcUaReadResult> results, QOpcUa::UaStatusCode serviceResult)
+
+ This signal is emitted after a \l batchRead() operation has finished.
+
+ The elements in \a results have the same order as the elements in the request. For each requested element,
+ there is a value together with timestamps and the status code in \a results.
+ \a serviceResult contains the status code from the OPC UA Read service.
+
+ \sa batchRead() QOpcUaReadResult QOpcUaReadItem
+*/
+
+/*!
+ \fn void QOpcUaClient::batchWriteFinished(QVector<QOpcUaWriteResult> results, QOpcUa::UaStatusCode serviceResult)
+
+ This signal is emitted after a \l batchWrite() operation has finished.
+
+ The elements in \a results have the same order as the elements in the batch write request.
+ They contain the value, timestamps and status code received from the server as well as the node id,
+ attribute and index range from the write item. This facilitates matching the result with the request.
+
+ \a serviceResult is the status code from the the OPC UA Write service. If \a serviceResult is not
+ \l {QOpcUa::UaStatusCode} {Good}, the entries in \a results also have an invalid status code and must
+ not be used.
+
+ \sa batchWrite() QOpcUaWriteResult
+*/
+
+/*!
+ \fn void QOpcUaClient::addNodeFinished(QOpcUa::QExpandedNodeId requestedNodeId, QString assignedNodeId, QOpcUa::UaStatusCode statusCode)
+
+ This signal is emitted after an \l addNode() operation has finished.
+ \a requestedNodeId is the requested node id from the \l addNode() call, \a assignedNodeId is the node id the server has assigned to the new node.
+ \a statusCode contains the result of the operation. If the result is \l {QOpcUa::UaStatusCode} {Bad}, \a assignedNodeId is empty and no node
+ has been added to the server's address space.
+*/
+
+/*!
+ \fn void QOpcUaClient::deleteNodeFinished(QString nodeId, QOpcUa::UaStatusCode statusCode)
+
+ This signal is emitted after a \l deleteNode() operation has finished.
+ \a nodeId is the node id from the \l deleteNode() call.
+ \a statusCode contains the result of the operation.
+*/
+
+/*!
+ \fn void QOpcUaClient::addReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUa::QExpandedNodeId targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode)
+
+ This signal is emitted after an \l addReference() operation has finished.
+ \a sourceNodeId, \a referenceTypeId, \a targetNodeId and \a isForwardReference are the values from the \l addReference() call.
+ \a statusCode contains the result of the operation.
+*/
+
+/*!
+ \fn void QOpcUaClient::deleteReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUa::QExpandedNodeId targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode)
+
+ This signal is emitted after a \l deleteReference() operation has finished.
+ \a sourceNodeId, \a referenceTypeId, \a targetNodeId and \a isForwardReference are the values from the \l deleteReference() call.
+ \a statusCode contains the result of the operation.
*/
/*!
@@ -235,6 +337,30 @@ QOpcUaNode *QOpcUaClient::node(const QString &nodeId)
}
/*!
+ Returns a \l QOpcUaNode object associated with the OPC UA node identified
+ by \a expandedNodeId. The caller becomes owner of the node object.
+
+ If the node is not on the currently connected server, the namespace can't be resolved,
+ the node id is malformed or the client is not connected, \c nullptr is returned.
+
+ \sa updateNamespaceArray()
+*/
+QOpcUaNode *QOpcUaClient::node(const QOpcUa::QExpandedNodeId &expandedNodeId)
+{
+ if (expandedNodeId.serverIndex()) {
+ qCWarning(QT_OPCUA) << "Can't create a QOpcuaNode for a node on a different server.";
+ return nullptr;
+ }
+
+ const QString nodeId = resolveExpandedNodeId(expandedNodeId);
+
+ if (!nodeId.isEmpty())
+ return node(nodeId);
+ else
+ return nullptr;
+}
+
+/*!
Requests an update of the namespace array from the server.
Returns \c true if the operation has been successfully dispatched.
@@ -265,6 +391,337 @@ QStringList QOpcUaClient::namespaceArray() const
}
/*!
+ Attempts to resolve \a expandedNodeId to a node id string with numeric namespace index.
+ Returns the node id string if the conversion was successful.
+
+ An empty string is returned if the namespace index can't be resolved or if the identifier part
+ of the expanded node id is malformed. \a ok will be set to \c true if the conversion has been successful.
+ If the expanded node id could not be resolved, \a ok will be set to \c false.
+*/
+QString QOpcUaClient::resolveExpandedNodeId(const QOpcUa::QExpandedNodeId &expandedNodeId, bool *ok) const
+{
+ if (expandedNodeId.serverIndex() && !expandedNodeId.namespaceUri().isEmpty()) {
+ qCWarning(QT_OPCUA) << "Can't resolve a namespace index on a different server.";
+ if (ok)
+ *ok = false;
+ return QString();
+ }
+
+ if (expandedNodeId.namespaceUri().isEmpty()) {
+ if (ok)
+ *ok = true;
+ return expandedNodeId.nodeId();
+ } else {
+ if (!namespaceArray().size()) {
+ qCWarning(QT_OPCUA) << "Namespaces table missing, unable to resolve namespace URI.";
+ if (ok)
+ *ok = false;
+ return QString();
+ }
+
+ int index = namespaceArray().indexOf(expandedNodeId.namespaceUri());
+
+ if (index < 0) {
+ qCWarning(QT_OPCUA) << "Failed to resolve namespace" << expandedNodeId.namespaceUri();
+ if (ok)
+ *ok = false;
+ return QString();
+ }
+
+ QStringList splitId = expandedNodeId.nodeId().split(QLatin1String(";"));
+ if (splitId.size() != 2) {
+ qCWarning(QT_OPCUA) << "Failed to split node id" << expandedNodeId.nodeId();
+ if (ok)
+ *ok = false;
+ return QString();
+ }
+
+ if (ok)
+ *ok = true;
+ return QStringLiteral("ns=%1;").arg(index).append(splitId.at(1));
+ }
+}
+
+/*!
+ Attempts to create a qualified name from \a namespaceUri and the name string \a name.
+ Returns the resulting qualified name. An empty qualified name is returned if
+ \a namespaceUri can't be resolved.
+
+ \a ok will be set to \c true if the namespace URI resolution has been successful.
+ If the namespace URI could not be resolved, \a ok will be set to \c false.
+*/
+QOpcUa::QQualifiedName QOpcUaClient::qualifiedNameFromNamespaceUri(const QString &namespaceUri, const QString &name, bool *ok) const
+{
+ if (namespaceArray().isEmpty()) {
+ qCWarning(QT_OPCUA) << "Namespaces table missing, unable to resolve namespace URI.";
+ if (ok)
+ *ok = false;
+ return QOpcUa::QQualifiedName();
+ }
+
+ int index = namespaceArray().indexOf(namespaceUri);
+
+ if (index < 0) {
+ qCWarning(QT_OPCUA) << "Failed to resolve namespace" << namespaceUri;
+ if (ok)
+ *ok = false;
+ return QOpcUa::QQualifiedName();
+ }
+
+ if (ok)
+ *ok = true;
+
+ return QOpcUa::QQualifiedName(index, name);
+};
+
+/*!
+ Adds the node described by \a nodeToAdd on the server.
+
+ Returns \c true if the asynchronous call has been successfully dispatched.
+
+ The success of the operation is returned in the \l addNodeFinished() signal.
+
+ The following example code adds new a Variable node on the server:
+
+ \code
+ QOpcUaNodeCreationAttributes attributes;
+ attributes.setDisplayName(QOpcUa::QLocalizedText("en", "My new Variable node"));
+ attributes.setDescription(QOpcUa::QLocalizedText("en", "A node which has been added at runtime"));
+ attributes.setValue(23.0, QOpcUa::Types::Double);
+ attributes.setDataTypeId(QOpcUa::ns0ID(QOpcUa::NodeIds::Namespace0::Double));
+ attributes.setValueRank(-2); // Scalar or array
+ attributes.setAccessLevel(QOpcUa::AccessLevelBit::CurrentRead);
+ attributes.setUserAccessLevel(QOpcUa::AccessLevelBit::CurrentRead);
+
+ QOpcUaAddNodeItem item;
+ item.setParentNodeId(QOpcUa::QExpandedNodeId("ns=3;s=TestFolder"));
+ item.setReferenceTypeId(QOpcUa::nodeIdFromReferenceType(QOpcUa::ReferenceTypeId::Organizes));
+ item.setRequestedNewNodeId(QOpcUa::QExpandedNodeId("ns=3;s=MyNewVariableNode"));
+ item.setBrowseName(QOpcUa::QQualifiedName(3, "MyNewVariableNode"));
+ item.setNodeClass(QOpcUa::NodeClass::Variable);
+ item.setNodeAttributes(attributes);
+
+ m_client->addNode(item);
+ \endcode
+
+ \sa deleteNode() addNodeFinished() QOpcUaAddNodeItem
+*/
+bool QOpcUaClient::addNode(const QOpcUaAddNodeItem &nodeToAdd)
+{
+ if (state() != QOpcUaClient::Connected)
+ return false;
+
+ Q_D(QOpcUaClient);
+ return d->m_impl->addNode(nodeToAdd);
+}
+
+/*!
+ Deletes the node with node id \a nodeId from the server.
+ If \a deleteTargetReferences is \c false, only the references with source node \a nodeId are deleted.
+ If \a deleteTargetReferences is \c true, references with \a nodeId as target are deleted too.
+
+ Returns \c true if the asynchronous call has been successfully dispatched.
+
+ The success of the operation is returned in the \l deleteNodeFinished() signal.
+
+ The following example code deletes a node and all references to it from the server:
+
+ \code
+ m_client->deleteNode(QOpcUa::QExpandedNodeId("ns=3;s=MyNewVariableNode"), true);
+ \endcode
+
+ \sa addNode() deleteNodeFinished()
+*/
+bool QOpcUaClient::deleteNode(const QString &nodeId, bool deleteTargetReferences)
+{
+ if (state() != QOpcUaClient::Connected)
+ return false;
+
+ Q_D(QOpcUaClient);
+ return d->m_impl->deleteNode(nodeId, deleteTargetReferences);
+}
+
+/*!
+ Adds the reference described by \a referenceToAdd to the server.
+
+ Returns \c true if the asynchronous call has been successfully dispatched.
+
+ The success of the operation is returned in the \l addReferenceFinished() signal.
+
+ The following example code adds a reference to a node to the "Objects" folder:
+
+ \code
+ QOpcUaAddReferenceItem item;
+ item.setSourceNodeId(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::ObjectsFolder));
+ item.setReferenceTypeId(QOpcUa::nodeIdFromInteger(0, static_cast<quint32>(QOpcUa::ReferenceTypeId::Organizes)));
+ item.setIsForwardReference(true);
+ item.setTargetNodeId(QOpcUa::QExpandedNodeId("ns=3;s=MyNewVariableNode"));
+ item.setTargetNodeClass(QOpcUa::NodeClass::Variable);
+
+ m_client->addReference(item);
+ \endcode
+
+ \sa deleteReference() addReferenceFinished() QOpcUaAddReferenceItem
+*/
+bool QOpcUaClient::addReference(const QOpcUaAddReferenceItem &referenceToAdd)
+{
+ if (state() != QOpcUaClient::Connected)
+ return false;
+
+ Q_D(QOpcUaClient);
+ return d->m_impl->addReference(referenceToAdd);
+}
+
+/*!
+ Deletes the reference described by \a referenceToDelete from the server.
+
+ Returns \c true if the asynchronous call has been successfully dispatched.
+
+ The success of the operation is returned in the \l deleteReferenceFinished() signal.
+
+ The following example code deletes a reference to a node from the "Objects" folder:
+
+ \code
+ QOpcUaDeleteReferenceItem item;
+ item.setSourceNodeId(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::ObjectsFolder));
+ item.setReferenceTypeId(QOpcUa::nodeIdFromInteger(0, static_cast<quint32>(QOpcUa::ReferenceTypeId::Organizes)));
+ item.setIsForwardReference(true);
+ item.setTargetNodeId(QOpcUa::QExpandedNodeId("ns=3;s=MyNewVariableNode"));
+ item.setDeleteBidirectional(true);
+
+ m_client->deleteReference(item);
+ \endcode
+
+ \sa addReference() deleteReferenceFinished() QOpcUaDeleteReferenceItem
+*/
+bool QOpcUaClient::deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete)
+{
+ if (state() != QOpcUaClient::Connected)
+ return false;
+
+ Q_D(QOpcUaClient);
+ return d->m_impl->deleteReference(referenceToDelete);
+}
+
+/*!
+ Starts an asynchronous \c GetEndpoints request to read a list of available endpoints
+ from the server at \a url.
+ Returns \c true if the asynchronous call has been successfully dispatched.
+
+ The endpoint information is returned in the \l endpointsRequestFinished() signal.
+*/
+bool QOpcUaClient::requestEndpoints(const QUrl &url)
+{
+ Q_D(QOpcUaClient);
+ return d->m_impl->requestEndpoints(url);
+}
+
+/*!
+ Starts an asynchronous FindServers request to read a list of known servers from a server or
+ discovery server at \a url.
+ Returns \c true if the asynchronous call has been successfully dispatched.
+
+ \a localeIds can be used to select the language of the application names returned by the request.
+ The format is specified in OPC-UA part 3, 8.4, for example "en" for English, or "de-DE" for
+ German (Germany). If more than one locale ID is specified, the server uses the first match. If there
+ is no match or \a localeIds is empty, a default locale is chosen by the server.
+
+ \a serverUris may be used to restrict the results to servers with a matching applicationUri in their
+ application description. For example, finding the current URL of the server with the applicationUri
+ "MyPLC", the following call can be used:
+
+ \code
+ client->findServers(discoveryServerUrl, QStringList(), QStringList({"MyPLC"}));
+ \endcode
+
+ The results are returned in the \l findServersFinished() signal.
+*/
+bool QOpcUaClient::findServers(const QUrl &url, const QStringList &localeIds, const QStringList &serverUris)
+{
+ Q_D(QOpcUaClient);
+ return d->m_impl->findServers(url, localeIds, serverUris);
+}
+
+/*!
+ Starts a batch read of multiple attributes on different nodes.
+ The node id, the attribute and an index range can be specified for every entry in \a nodesToRead.
+
+ Returns true if the asynchronous request has been successfully dispatched.
+ The results are returned in the \l batchReadFinished() signal.
+
+ The batch read API offers an alternative way to read attributes of nodes which can be used
+ for scenarios where the values of a large number of node attributes on different nodes must be read
+ without requiring the other features of the \l QOpcUaNode based API like monitoring for value changes.
+ All read items in the request are sent to the server in a single request and are answered in a single
+ response which generates a single \l batchReadFinished() signal. This reduces the network overhead and
+ the number of signal slot connections if many different nodes are involved.
+
+ In the following example, the display name attribute and the two index ranges "0:2" and "5:7" of the value
+ attribute of the same node and the entire value attribute of a second node are read using a single service call:
+ \code
+ QVector<QOpcUaReadItem> request;
+ request.push_back(QOpcUaReadItem("ns=1;s=MyArrayNode",
+ QOpcUa::NodeAttribute::DisplayName));
+ request.push_back(QOpcUaReadItem("ns=1;s=MyArrayNode",
+ QOpcUa::NodeAttribute::Value, "0:2"));
+ request.push_back(QOpcUaReadItem("ns=1;s=MyArrayNode",
+ QOpcUa::NodeAttribute::Value, "5:7"));
+ request.push_back(QOpcUaReadItem("ns=1;s=MyScalarNode));
+ m_client->batchRead(request);
+ \endcode
+
+ \sa QOpcUaReadItem batchReadFinished()
+*/
+bool QOpcUaClient::batchRead(const QVector<QOpcUaReadItem> &nodesToRead)
+{
+ if (state() != QOpcUaClient::Connected)
+ return false;
+
+ Q_D(QOpcUaClient);
+ return d->m_impl->batchRead(nodesToRead);
+}
+
+/*!
+ Starts a batch write for multiple attributes on different nodes.
+ The node id, the attribute, the value, the value type and an index range can be specified
+ for every entry in \a nodesToWrite.
+
+ Returns \c true if the asynchronous request has been successfully dispatched.
+ The results are returned in the \l batchWriteFinished() signal.
+
+ The batch write API offers an alternative way to write attributes of nodes which can be used
+ for scenarios where the values of a large number of node attributes on different nodes must be written
+ without requiring the other features of the \l QOpcUaNode based API like monitoring for value changes.
+ All write items in the request are sent to the server in a single request and are answered in a single
+ response which generates a single \l batchWriteFinished() signal. This reduces the network overhead and
+ the number of signal slot connections if many different nodes are involved.
+
+ In the following example, the Values attributes of two different nodes are written in one call.
+ The second node has an array value of which only the first two elements are overwritten:
+
+ \code
+ QVector<QOpcUaWriteItem> request;
+
+ request.append(QOpcUaWriteItem("ns=2;s=Demo.Static.Scalar.Double", QOpcUa::NodeAttribute::Value,
+ 23.0, QOpcUa::Types::Double));
+ request.append(QOpcUaWriteItem("ns=2;s=Demo.Static.Arrays.UInt32", QOpcUa::NodeAttribute::Value,
+ QVariantList({0, 1, 2}), QOpcUa::Types::UInt32, "0:2"));
+
+ m_client->batchWrite(request);
+ \endcode
+
+ \sa QOpcUaWriteItem batchWriteFinished()
+*/
+bool QOpcUaClient::batchWrite(const QVector<QOpcUaWriteItem> &nodesToWrite)
+{
+ if (state() != QOpcUaClient::Connected)
+ return false;
+
+ Q_D(QOpcUaClient);
+ return d->m_impl->batchWrite(nodesToWrite);
+}
+
+/*!
Returns the name of the backend used by this instance of QOpcUaClient,
e.g. "open62541".
*/
@@ -274,4 +731,59 @@ QString QOpcUaClient::backend() const
return d->m_impl->backend();
}
+/*!
+ Enables automatic update of the namespace table.
+
+ Enabling this will keep the local copy of the namespace table updated automatically.
+ \l namespaceArrayUpdated will be emitted when the array changed.
+
+ A subscription will be made on the node on the server to keep track of changes.
+ In case a server does not support subscriptions this will not work and
+ \l isNamespaceAutoupdateEnabled returns \c false.
+
+ \sa namespaceArray() namespaceArrayUpdated()
+*/
+void QOpcUaClient::setNamespaceAutoupdate(bool isEnabled)
+{
+ Q_D(QOpcUaClient);
+ d->m_enableNamespaceArrayAutoupdate = isEnabled;
+ d->setupNamespaceArrayMonitoring();
+}
+
+/*!
+ Returns whether autoupdate of the namespace array is enabled.
+*/
+bool QOpcUaClient::isNamespaceAutoupdateEnabled() const
+{
+ Q_D(const QOpcUaClient);
+ return d->m_enableNamespaceArrayAutoupdate;
+}
+
+/*!
+ Sets the interval for the namespace table subscription.
+
+ The subscription may be revised by the server.
+
+ \a interval determines the interval to check for changes in milliseconds. The default is once per second.
+
+ \sa QOpcUaClient::setNamespaceAutoupdate(bool isEnabled)
+*/
+void QOpcUaClient::setNamespaceAutoupdateInterval(int interval)
+{
+ Q_D(QOpcUaClient);
+ d->m_namespaceArrayUpdateInterval = interval;
+ d->setupNamespaceArrayMonitoring();
+}
+
+/*!
+ Returns the current revised update inverval of the namespace array.
+
+ \sa setNamespaceAutoupdateInterval(int interval)
+*/
+int QOpcUaClient::namespaceAutoupdateInterval() const
+{
+ Q_D(const QOpcUaClient);
+ return d->m_namespaceArrayUpdateInterval;
+}
+
QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuaclient.h b/src/opcua/client/qopcuaclient.h
index b813b2b..9f5274f 100644
--- a/src/opcua/client/qopcuaclient.h
+++ b/src/opcua/client/qopcuaclient.h
@@ -39,6 +39,13 @@
#include <QtOpcUa/qopcuaglobal.h>
#include <QtOpcUa/qopcuanode.h>
+#include <QtOpcUa/qopcuareaditem.h>
+#include <QtOpcUa/qopcuareadresult.h>
+#include <QtOpcUa/qopcuawriteitem.h>
+#include <QtOpcUa/qopcuawriteresult.h>
+#include <QtOpcUa/qopcuaaddnodeitem.h>
+#include <QtOpcUa/qopcuaaddreferenceitem.h>
+#include <QtOpcUa/qopcuadeletereferenceitem.h>
#include <QtCore/qobject.h>
#include <QtCore/qurl.h>
@@ -79,10 +86,27 @@ public:
Q_INVOKABLE void connectToEndpoint(const QUrl &url);
Q_INVOKABLE void disconnectFromEndpoint();
QOpcUaNode *node(const QString &nodeId);
+ QOpcUaNode *node(const QOpcUa::QExpandedNodeId &expandedNodeId);
bool updateNamespaceArray();
QStringList namespaceArray() const;
+ QString resolveExpandedNodeId(const QOpcUa::QExpandedNodeId &expandedNodeId, bool *ok = nullptr) const;
+ QOpcUa::QQualifiedName qualifiedNameFromNamespaceUri(const QString &namespaceUri, const QString &name, bool *ok = nullptr) const;
+
+ bool requestEndpoints(const QUrl &url);
+ bool findServers(const QUrl &url, const QStringList &localeIds = QStringList(),
+ const QStringList &serverUris = QStringList());
+
+ bool batchRead(const QVector<QOpcUaReadItem> &nodesToRead);
+ bool batchWrite(const QVector<QOpcUaWriteItem> &nodesToWrite);
+
+ bool addNode(const QOpcUaAddNodeItem &nodeToAdd);
+ bool deleteNode(const QString &nodeId, bool deleteTargetReferences = true);
+
+ bool addReference(const QOpcUaAddReferenceItem &referenceToAdd);
+ bool deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete);
+
QUrl url() const;
ClientState state() const;
@@ -90,12 +114,28 @@ public:
QString backend() const;
+ void setNamespaceAutoupdate(bool isEnabled);
+ bool isNamespaceAutoupdateEnabled() const;
+ void setNamespaceAutoupdateInterval(int interval);
+ int namespaceAutoupdateInterval() const;
+
Q_SIGNALS:
void connected();
void disconnected();
void stateChanged(QOpcUaClient::ClientState state);
void errorChanged(QOpcUaClient::ClientError error);
void namespaceArrayUpdated(QStringList namespaces);
+ void namespaceArrayChanged(QStringList namespaces);
+ void endpointsRequestFinished(QVector<QOpcUa::QEndpointDescription> endpoints, QOpcUa::UaStatusCode statusCode);
+ void findServersFinished(QVector<QOpcUa::QApplicationDescription> servers, QOpcUa::UaStatusCode statusCode);
+ void batchReadFinished(QVector<QOpcUaReadResult> results, QOpcUa::UaStatusCode serviceResult);
+ void batchWriteFinished(QVector<QOpcUaWriteResult> results, QOpcUa::UaStatusCode serviceResult);
+ void addNodeFinished(QOpcUa::QExpandedNodeId requestedNodeId, QString assignedNodeId, QOpcUa::UaStatusCode statusCode);
+ void deleteNodeFinished(QString nodeId, QOpcUa::UaStatusCode statusCode);
+ void addReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUa::QExpandedNodeId targetNodeId, bool isForwardReference,
+ QOpcUa::UaStatusCode statusCode);
+ void deleteReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUa::QExpandedNodeId targetNodeId, bool isForwardReference,
+ QOpcUa::UaStatusCode statusCode);
private:
Q_DISABLE_COPY(QOpcUaClient)
diff --git a/src/opcua/client/qopcuaclient_p.h b/src/opcua/client/qopcuaclient_p.h
index fe2aaa2..51ce5d0 100644
--- a/src/opcua/client/qopcuaclient_p.h
+++ b/src/opcua/client/qopcuaclient_p.h
@@ -72,6 +72,7 @@ public:
QOpcUaClient::ClientState m_state;
QOpcUaClient::ClientError m_error;
QUrl m_url;
+ bool m_enableNamespaceArrayAutoupdate;
bool checkAndSetUrl(const QUrl &url);
void setStateAndError(QOpcUaClient::ClientState state,
@@ -80,11 +81,14 @@ public:
bool updateNamespaceArray();
QStringList namespaceArray() const;
void namespaceArrayUpdated(QOpcUa::NodeAttributes attr);
+ void setupNamespaceArrayMonitoring();
private:
Q_DECLARE_PUBLIC(QOpcUaClient)
QStringList m_namespaceArray;
QScopedPointer<QOpcUaNode> m_namespaceArrayNode;
+ bool m_namespaceArrayAutoupdateEnabled;
+ unsigned int m_namespaceArrayUpdateInterval;
};
QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuaclientimpl.cpp b/src/opcua/client/qopcuaclientimpl.cpp
index 4c95e1e..af77e72 100644
--- a/src/opcua/client/qopcuaclientimpl.cpp
+++ b/src/opcua/client/qopcuaclientimpl.cpp
@@ -42,19 +42,31 @@ QT_BEGIN_NAMESPACE
QOpcUaClientImpl::QOpcUaClientImpl(QObject *parent)
: QObject(parent)
+ , m_handleCounter(0)
{}
QOpcUaClientImpl::~QOpcUaClientImpl()
{}
-void QOpcUaClientImpl::registerNode(QPointer<QOpcUaNodeImpl> obj)
+bool QOpcUaClientImpl::registerNode(QPointer<QOpcUaNodeImpl> obj)
{
- m_handles[reinterpret_cast<uintptr_t>(obj.data())] = obj;
+ if (m_handles.count() == (std::numeric_limits<int>::max)())
+ return false;
+
+ while (true) {
+ ++m_handleCounter;
+
+ if (!m_handles.contains(m_handleCounter)) {
+ obj->setHandle(m_handleCounter);
+ m_handles[m_handleCounter] = obj;
+ return true;
+ }
+ }
}
void QOpcUaClientImpl::unregisterNode(QPointer<QOpcUaNodeImpl> obj)
{
- m_handles.remove(reinterpret_cast<uintptr_t>(obj.data()));
+ m_handles.remove(obj->handle());
}
void QOpcUaClientImpl::connectBackendWithClient(QOpcUaBackend *backend)
@@ -62,60 +74,85 @@ void QOpcUaClientImpl::connectBackendWithClient(QOpcUaBackend *backend)
connect(backend, &QOpcUaBackend::attributesRead, this, &QOpcUaClientImpl::handleAttributesRead);
connect(backend, &QOpcUaBackend::stateAndOrErrorChanged, this, &QOpcUaClientImpl::stateAndOrErrorChanged);
connect(backend, &QOpcUaBackend::attributeWritten, this, &QOpcUaClientImpl::handleAttributeWritten);
- connect(backend, &QOpcUaBackend::attributeUpdated, this, &QOpcUaClientImpl::handleAttributeUpdated);
+ connect(backend, &QOpcUaBackend::dataChangeOccurred, this, &QOpcUaClientImpl::handleDataChangeOccurred);
connect(backend, &QOpcUaBackend::monitoringEnableDisable, this, &QOpcUaClientImpl::handleMonitoringEnableDisable);
connect(backend, &QOpcUaBackend::monitoringStatusChanged, this, &QOpcUaClientImpl::handleMonitoringStatusChanged);
connect(backend, &QOpcUaBackend::methodCallFinished, this, &QOpcUaClientImpl::handleMethodCallFinished);
connect(backend, &QOpcUaBackend::browseFinished, this, &QOpcUaClientImpl::handleBrowseFinished);
+ connect(backend, &QOpcUaBackend::resolveBrowsePathFinished, this, &QOpcUaClientImpl::handleResolveBrowsePathFinished);
+ connect(backend, &QOpcUaBackend::eventOccurred, this, &QOpcUaClientImpl::handleNewEvent);
+ connect(backend, &QOpcUaBackend::endpointsRequestFinished, this, &QOpcUaClientImpl::endpointsRequestFinished);
+ connect(backend, &QOpcUaBackend::findServersFinished, this, &QOpcUaClientImpl::findServersFinished);
+ connect(backend, &QOpcUaBackend::batchReadFinished, this, &QOpcUaClientImpl::batchReadFinished);
+ connect(backend, &QOpcUaBackend::batchWriteFinished, this, &QOpcUaClientImpl::batchWriteFinished);
+ connect(backend, &QOpcUaBackend::addNodeFinished, this, &QOpcUaClientImpl::addNodeFinished);
+ connect(backend, &QOpcUaBackend::deleteNodeFinished, this, &QOpcUaClientImpl::deleteNodeFinished);
+ connect(backend, &QOpcUaBackend::addReferenceFinished, this, &QOpcUaClientImpl::addReferenceFinished);
+ connect(backend, &QOpcUaBackend::deleteReferenceFinished, this, &QOpcUaClientImpl::deleteReferenceFinished);
}
-void QOpcUaClientImpl::handleAttributesRead(uintptr_t handle, QVector<QOpcUaReadResult> attr, QOpcUa::UaStatusCode serviceResult)
+void QOpcUaClientImpl::handleAttributesRead(quint64 handle, QVector<QOpcUaReadResult> attr, QOpcUa::UaStatusCode serviceResult)
{
auto it = m_handles.constFind(handle);
if (it != m_handles.constEnd() && !it->isNull())
emit (*it)->attributesRead(attr, serviceResult);
}
-void QOpcUaClientImpl::handleAttributeWritten(uintptr_t handle, QOpcUa::NodeAttribute attr, const QVariant &value, QOpcUa::UaStatusCode statusCode)
+void QOpcUaClientImpl::handleAttributeWritten(quint64 handle, QOpcUa::NodeAttribute attr, const QVariant &value, QOpcUa::UaStatusCode statusCode)
{
auto it = m_handles.constFind(handle);
if (it != m_handles.constEnd() && !it->isNull())
emit (*it)->attributeWritten(attr, value, statusCode);
}
-void QOpcUaClientImpl::handleAttributeUpdated(uintptr_t handle, const QOpcUaReadResult &value)
+void QOpcUaClientImpl::handleDataChangeOccurred(quint64 handle, const QOpcUaReadResult &value)
{
auto it = m_handles.constFind(handle);
if (it != m_handles.constEnd() && !it->isNull())
- emit (*it)->attributeUpdated(value.attributeId, value);
+ emit (*it)->dataChangeOccurred(value.attribute(), value);
}
-void QOpcUaClientImpl::handleMonitoringEnableDisable(uintptr_t handle, QOpcUa::NodeAttribute attr, bool subscribe, QOpcUaMonitoringParameters status)
+void QOpcUaClientImpl::handleMonitoringEnableDisable(quint64 handle, QOpcUa::NodeAttribute attr, bool subscribe, QOpcUaMonitoringParameters status)
{
auto it = m_handles.constFind(handle);
if (it != m_handles.constEnd() && !it->isNull())
emit (*it)->monitoringEnableDisable(attr, subscribe, status);
}
-void QOpcUaClientImpl::handleMonitoringStatusChanged(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items, QOpcUaMonitoringParameters param)
+void QOpcUaClientImpl::handleMonitoringStatusChanged(quint64 handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items, QOpcUaMonitoringParameters param)
{
auto it = m_handles.constFind(handle);
if (it != m_handles.constEnd() && !it->isNull())
emit (*it)->monitoringStatusChanged(attr, items, param);
}
-void QOpcUaClientImpl::handleMethodCallFinished(uintptr_t handle, QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode)
+void QOpcUaClientImpl::handleMethodCallFinished(quint64 handle, QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode)
{
auto it = m_handles.constFind(handle);
if (it != m_handles.constEnd() && !it->isNull())
emit (*it)->methodCallFinished(methodNodeId, result, statusCode);
}
-void QOpcUaClientImpl::handleBrowseFinished(uintptr_t handle, const QVector<QOpcUaReferenceDescription> &children, QOpcUa::UaStatusCode statusCode)
+void QOpcUaClientImpl::handleBrowseFinished(quint64 handle, const QVector<QOpcUaReferenceDescription> &children, QOpcUa::UaStatusCode statusCode)
{
auto it = m_handles.constFind(handle);
if (it != m_handles.constEnd() && !it->isNull())
emit (*it)->browseFinished(children, statusCode);
}
+void QOpcUaClientImpl::handleResolveBrowsePathFinished(quint64 handle, QVector<QOpcUa::QBrowsePathTarget> targets,
+ QVector<QOpcUa::QRelativePathElement> path, QOpcUa::UaStatusCode status)
+{
+ auto it = m_handles.constFind(handle);
+ if (it != m_handles.constEnd() && !it->isNull())
+ emit (*it)->resolveBrowsePathFinished(targets, path, status);
+}
+
+void QOpcUaClientImpl::handleNewEvent(quint64 handle, QVariantList eventFields)
+{
+ auto it = m_handles.constFind(handle);
+ if (it != m_handles.constEnd() && !it->isNull())
+ emit (*it)->eventOccurred(eventFields);
+}
+
QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuaclientimpl_p.h b/src/opcua/client/qopcuaclientimpl_p.h
index d7d1d11..d377a48 100644
--- a/src/opcua/client/qopcuaclientimpl_p.h
+++ b/src/opcua/client/qopcuaclientimpl_p.h
@@ -75,32 +75,59 @@ public:
virtual void disconnectFromEndpoint() = 0;
virtual QOpcUaNode *node(const QString &nodeId) = 0;
virtual QString backend() const = 0;
+ virtual bool requestEndpoints(const QUrl &url) = 0;
+ virtual bool findServers(const QUrl &url, const QStringList &localeIds, const QStringList &serverUris) = 0;
+ virtual bool batchRead(const QVector<QOpcUaReadItem> &nodesToRead) = 0;
+ virtual bool batchWrite(const QVector<QOpcUaWriteItem> &nodesToWrite) = 0;
- void registerNode(QPointer<QOpcUaNodeImpl> obj);
+ bool registerNode(QPointer<QOpcUaNodeImpl> obj);
void unregisterNode(QPointer<QOpcUaNodeImpl> obj);
+ virtual bool addNode(const QOpcUaAddNodeItem &nodeToAdd) = 0;
+ virtual bool deleteNode(const QString &nodeId, bool deleteTargetReferences) = 0;
+
+ virtual bool addReference(const QOpcUaAddReferenceItem &referenceToAdd) = 0;
+ virtual bool deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete) = 0;
+
void connectBackendWithClient(QOpcUaBackend *backend);
QOpcUaClient *m_client;
private Q_SLOTS:
- void handleAttributesRead(uintptr_t handle, QVector<QOpcUaReadResult> attr, QOpcUa::UaStatusCode serviceResult);
- void handleAttributeWritten(uintptr_t handle, QOpcUa::NodeAttribute attr, const QVariant &value, QOpcUa::UaStatusCode statusCode);
- void handleAttributeUpdated(uintptr_t handle, const QOpcUaReadResult &value);
- void handleMonitoringEnableDisable(uintptr_t handle, QOpcUa::NodeAttribute attr, bool subscribe, QOpcUaMonitoringParameters status);
- void handleMonitoringStatusChanged(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items,
+ void handleAttributesRead(quint64 handle, QVector<QOpcUaReadResult> attr, QOpcUa::UaStatusCode serviceResult);
+ void handleAttributeWritten(quint64 handle, QOpcUa::NodeAttribute attr, const QVariant &value, QOpcUa::UaStatusCode statusCode);
+ void handleDataChangeOccurred(quint64 handle, const QOpcUaReadResult &value);
+ void handleMonitoringEnableDisable(quint64 handle, QOpcUa::NodeAttribute attr, bool subscribe, QOpcUaMonitoringParameters status);
+ void handleMonitoringStatusChanged(quint64 handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items,
QOpcUaMonitoringParameters param);
- void handleMethodCallFinished(uintptr_t handle, QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode);
- void handleBrowseFinished(uintptr_t handle, const QVector<QOpcUaReferenceDescription> &children, QOpcUa::UaStatusCode statusCode);
+ void handleMethodCallFinished(quint64 handle, QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode);
+ void handleBrowseFinished(quint64 handle, const QVector<QOpcUaReferenceDescription> &children, QOpcUa::UaStatusCode statusCode);
+
+ void handleResolveBrowsePathFinished(quint64 handle, QVector<QOpcUa::QBrowsePathTarget> targets,
+ QVector<QOpcUa::QRelativePathElement> path, QOpcUa::UaStatusCode status);
+
+ void handleNewEvent(quint64 handle, QVariantList eventFields);
signals:
void connected();
void disconnected();
void stateAndOrErrorChanged(QOpcUaClient::ClientState state,
QOpcUaClient::ClientError error);
+ void endpointsRequestFinished(QVector<QOpcUa::QEndpointDescription> endpoints, QOpcUa::UaStatusCode statusCode);
+ void findServersFinished(QVector<QOpcUa::QApplicationDescription> servers, QOpcUa::UaStatusCode statusCode);
+ void batchReadFinished(QVector<QOpcUaReadResult> results, QOpcUa::UaStatusCode serviceResult);
+ void batchWriteFinished(QVector<QOpcUaWriteResult> results, QOpcUa::UaStatusCode serviceResult);
+ void addNodeFinished(QOpcUa::QExpandedNodeId requestedNodeId, QString assignedNodeId, QOpcUa::UaStatusCode statusCode);
+ void deleteNodeFinished(QString nodeId, QOpcUa::UaStatusCode statusCode);
+ void addReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUa::QExpandedNodeId targetNodeId, bool isForwardReference,
+ QOpcUa::UaStatusCode statusCode);
+ void deleteReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUa::QExpandedNodeId targetNodeId, bool isForwardReference,
+ QOpcUa::UaStatusCode statusCode);
+
private:
Q_DISABLE_COPY(QOpcUaClientImpl)
- QHash<uintptr_t, QPointer<QOpcUaNodeImpl>> m_handles;
+ QHash<quint64, QPointer<QOpcUaNodeImpl>> m_handles;
+ quint64 m_handleCounter;
};
inline uint qHash(const QPointer<QOpcUaNodeImpl>& n)
diff --git a/src/opcua/client/qopcuaclientprivate.cpp b/src/opcua/client/qopcuaclientprivate.cpp
index 4d1c71a..db34ce4 100644
--- a/src/opcua/client/qopcuaclientprivate.cpp
+++ b/src/opcua/client/qopcuaclientprivate.cpp
@@ -47,11 +47,61 @@ QOpcUaClientPrivate::QOpcUaClientPrivate(QOpcUaClientImpl *impl)
, m_impl(impl)
, m_state(QOpcUaClient::Disconnected)
, m_error(QOpcUaClient::NoError)
+ , m_enableNamespaceArrayAutoupdate(false)
+ , m_namespaceArrayAutoupdateEnabled(false)
+ , m_namespaceArrayUpdateInterval(1000)
{
// callback from client implementation
QObject::connect(m_impl.data(), &QOpcUaClientImpl::stateAndOrErrorChanged,
[this](QOpcUaClient::ClientState state, QOpcUaClient::ClientError error) {
setStateAndError(state, error);
+ if (state == QOpcUaClient::ClientState::Connected) {
+ updateNamespaceArray();
+ setupNamespaceArrayMonitoring();
+ }
+ });
+
+ QObject::connect(m_impl.data(), &QOpcUaClientImpl::endpointsRequestFinished, m_impl.data(),
+ [this](const QVector<QOpcUa::QEndpointDescription> &e, QOpcUa::UaStatusCode s) {
+ Q_Q(QOpcUaClient);
+ emit q->endpointsRequestFinished(e, s);
+ });
+
+ QObject::connect(m_impl.data(), &QOpcUaClientImpl::findServersFinished, [this](const QVector<QOpcUa::QApplicationDescription> &a, QOpcUa::UaStatusCode s) {
+ Q_Q(QOpcUaClient);
+ emit q->findServersFinished(a, s);
+ });
+
+ QObject::connect(m_impl.data(), &QOpcUaClientImpl::batchReadFinished, [this](const QVector<QOpcUaReadResult> &results, QOpcUa::UaStatusCode serviceResult) {
+ Q_Q(QOpcUaClient);
+ emit q->batchReadFinished(results, serviceResult);
+ });
+
+ QObject::connect(m_impl.data(), &QOpcUaClientImpl::batchWriteFinished, [this](const QVector<QOpcUaWriteResult> &results, QOpcUa::UaStatusCode serviceResult) {
+ Q_Q(QOpcUaClient);
+ emit q->batchWriteFinished(results, serviceResult);
+ });
+
+ QObject::connect(m_impl.data(), &QOpcUaClientImpl::addNodeFinished, [this](const QOpcUa::QExpandedNodeId &requestedNodeId, const QString &assignedNodeId, QOpcUa::UaStatusCode statusCode) {
+ Q_Q(QOpcUaClient);
+ emit q->addNodeFinished(requestedNodeId, assignedNodeId, statusCode);
+ });
+
+ QObject::connect(m_impl.data(), &QOpcUaClientImpl::deleteNodeFinished, [this](const QString &nodeId, QOpcUa::UaStatusCode statusCode) {
+ Q_Q(QOpcUaClient);
+ emit q->deleteNodeFinished(nodeId, statusCode);
+ });
+
+ QObject::connect(m_impl.data(), &QOpcUaClientImpl::addReferenceFinished, [this](const QString &sourceNodeId, const QString &referenceTypeId,
+ const QOpcUa::QExpandedNodeId &targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode) {
+ Q_Q(QOpcUaClient);
+ emit q->addReferenceFinished(sourceNodeId, referenceTypeId, targetNodeId, isForwardReference, statusCode);
+ });
+
+ QObject::connect(m_impl.data(), &QOpcUaClientImpl::deleteReferenceFinished, [this](const QString &sourceNodeId, const QString &referenceTypeId,
+ const QOpcUa::QExpandedNodeId &targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode) {
+ Q_Q(QOpcUaClient);
+ emit q->deleteReferenceFinished(sourceNodeId, referenceTypeId, targetNodeId, isForwardReference, statusCode);
});
}
@@ -160,11 +210,55 @@ void QOpcUaClientPrivate::namespaceArrayUpdated(QOpcUa::NodeAttributes attr)
return;
}
- m_namespaceArray.clear();
+ QStringList updatedNamespaceArray;
for (auto it : value.toList())
- m_namespaceArray.append(it.toString());
+ updatedNamespaceArray.append(it.toString());
+ if (updatedNamespaceArray != m_namespaceArray) {
+ m_namespaceArray = updatedNamespaceArray;
+ emit q->namespaceArrayChanged(m_namespaceArray);
+ }
emit q->namespaceArrayUpdated(m_namespaceArray);
}
+void QOpcUaClientPrivate::setupNamespaceArrayMonitoring()
+{
+ Q_Q(QOpcUaClient);
+
+ if (!m_namespaceArrayNode || m_state != QOpcUaClient::ClientState::Connected)
+ return;
+
+ if (!m_enableNamespaceArrayAutoupdate && m_namespaceArrayAutoupdateEnabled) {
+ m_namespaceArrayNode->disableMonitoring(QOpcUa::NodeAttribute::Value);
+ m_namespaceArrayAutoupdateEnabled = false;
+ return;
+ }
+
+ if (m_enableNamespaceArrayAutoupdate && !m_namespaceArrayAutoupdateEnabled) {
+ QOpcUaMonitoringParameters options;
+ options.setSubscriptionType(QOpcUaMonitoringParameters::SubscriptionType::Exclusive);
+ options.setMaxKeepAliveCount((std::numeric_limits<quint32>::max)() - 1);
+ options.setPublishingInterval(m_namespaceArrayUpdateInterval);
+ m_namespaceArrayAutoupdateEnabled = true;
+
+ QObject::connect(m_namespaceArrayNode.data(), &QOpcUaNode::enableMonitoringFinished, q,
+ [&] (QOpcUa::NodeAttribute, QOpcUa::UaStatusCode statusCode) {
+ if (statusCode == QOpcUa::Good) {
+ // Update interval member to the revised value from the server
+ m_namespaceArrayUpdateInterval = m_namespaceArrayNode->monitoringStatus(QOpcUa::NodeAttribute::Value).publishingInterval();
+ } else {
+ m_namespaceArrayAutoupdateEnabled = m_enableNamespaceArrayAutoupdate = false;
+ }
+ }
+ );
+ QObject::connect(m_namespaceArrayNode.data(), &QOpcUaNode::attributeUpdated, q,
+ [&] (QOpcUa::NodeAttribute attr, QVariant /*value*/) {
+ namespaceArrayUpdated(attr);
+ }
+ );
+
+ m_namespaceArrayNode->enableMonitoring(QOpcUa::NodeAttribute::Value, options);
+ }
+}
+
QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuadeletereferenceitem.cpp b/src/opcua/client/qopcuadeletereferenceitem.cpp
new file mode 100644
index 0000000..8a4fb7d
--- /dev/null
+++ b/src/opcua/client/qopcuadeletereferenceitem.cpp
@@ -0,0 +1,169 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qopcuanodecreationattributes.h"
+#include "qopcuadeletereferenceitem.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QOpcUaDeleteReferenceItem
+ \inmodule QtOpcUa
+ \brief This class stores the necessary information to delete a reference from the server.
+
+ \sa QOpcUaClient::deleteReference()
+*/
+
+class QOpcUaDeleteReferenceItemData : public QSharedData
+{
+public:
+ QString sourceNodeId;
+ QString referenceTypeId;
+ bool isForwardReference {true};
+ QOpcUa::QExpandedNodeId targetNodeId;
+ bool deleteBidirectional {true};
+};
+
+QOpcUaDeleteReferenceItem::QOpcUaDeleteReferenceItem()
+ : data(new QOpcUaDeleteReferenceItemData)
+{
+}
+
+/*!
+ Constructs a delete reference item from \a other.
+*/
+QOpcUaDeleteReferenceItem::QOpcUaDeleteReferenceItem(const QOpcUaDeleteReferenceItem &other)
+ : data(other.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this delete reference item.
+*/
+QOpcUaDeleteReferenceItem &QOpcUaDeleteReferenceItem::operator=(const QOpcUaDeleteReferenceItem &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUaDeleteReferenceItem::~QOpcUaDeleteReferenceItem()
+{
+}
+
+/*!
+ Returns the deleteBidirectional Flag.
+*/
+bool QOpcUaDeleteReferenceItem::deleteBidirectional() const
+{
+ return data->deleteBidirectional;
+}
+
+/*!
+ Sets the deleteBidirectional flag to \a deleteBidirectional.
+ If this flag is false, only this reference will be deleted.
+ Else, the opposite reference from the target node is deleted too if accessible by the server.
+*/
+void QOpcUaDeleteReferenceItem::setDeleteBidirectional(bool deleteBidirectional)
+{
+ data->deleteBidirectional = deleteBidirectional;
+}
+
+/*!
+ Returns the target node id.
+*/
+QOpcUa::QExpandedNodeId QOpcUaDeleteReferenceItem::targetNodeId() const
+{
+ return data->targetNodeId;
+}
+
+/*!
+ Sets the node id of the target node to \a targetNodeId.
+*/
+void QOpcUaDeleteReferenceItem::setTargetNodeId(const QOpcUa::QExpandedNodeId &targetNodeId)
+{
+ data->targetNodeId = targetNodeId;
+}
+
+/*!
+ Returns the isForwardReference flag.
+*/
+bool QOpcUaDeleteReferenceItem::isForwardReference() const
+{
+ return data->isForwardReference;
+}
+
+/*!
+ Sets the isForwardReference flag to \a isForwardReference.
+*/
+void QOpcUaDeleteReferenceItem::setIsForwardReference(bool isForwardReference)
+{
+ data->isForwardReference = isForwardReference;
+}
+
+/*!
+ Returns the reference type id.
+*/
+QString QOpcUaDeleteReferenceItem::referenceTypeId() const
+{
+ return data->referenceTypeId;
+}
+
+/*!
+ Sets the reference type id to \a referenceTypeId.
+*/
+void QOpcUaDeleteReferenceItem::setReferenceTypeId(const QString &referenceTypeId)
+{
+ data->referenceTypeId = referenceTypeId;
+}
+
+/*!
+ Returns the source node id.
+*/
+QString QOpcUaDeleteReferenceItem::sourceNodeId() const
+{
+ return data->sourceNodeId;
+}
+
+/*!
+ Sets the node id of the source node to \a sourceNodeId.
+*/
+void QOpcUaDeleteReferenceItem::setSourceNodeId(const QString &sourceNodeId)
+{
+ data->sourceNodeId = sourceNodeId;
+}
+
+QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuadeletereferenceitem.h b/src/opcua/client/qopcuadeletereferenceitem.h
new file mode 100644
index 0000000..9d36902
--- /dev/null
+++ b/src/opcua/client/qopcuadeletereferenceitem.h
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOPCUADELETEREFERENCEITEM_H
+#define QOPCUADELETEREFERENCEITEM_H
+
+#include <QtOpcUa/qopcuanodecreationattributes.h>
+#include <QtOpcUa/qopcuatype.h>
+
+QT_BEGIN_NAMESPACE
+
+class QOpcUaDeleteReferenceItemData;
+class Q_OPCUA_EXPORT QOpcUaDeleteReferenceItem
+{
+public:
+ QOpcUaDeleteReferenceItem();
+ QOpcUaDeleteReferenceItem(const QOpcUaDeleteReferenceItem &other);
+ QOpcUaDeleteReferenceItem &operator=(const QOpcUaDeleteReferenceItem &rhs);
+ ~QOpcUaDeleteReferenceItem();
+
+ QString sourceNodeId() const;
+ void setSourceNodeId(const QString &sourceNodeId);
+
+ QString referenceTypeId() const;
+ void setReferenceTypeId(const QString &referenceTypeId);
+
+ bool isForwardReference() const;
+ void setIsForwardReference(bool isForwardReference);
+
+ QOpcUa::QExpandedNodeId targetNodeId() const;
+ void setTargetNodeId(const QOpcUa::QExpandedNodeId &targetNodeId);
+
+ bool deleteBidirectional() const;
+ void setDeleteBidirectional(bool deleteBidirectional);
+
+private:
+ QSharedDataPointer<QOpcUaDeleteReferenceItemData> data;
+};
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QOpcUaDeleteReferenceItem)
+
+#endif // QOPCUADELETEREFERENCEITEM_H
diff --git a/src/opcua/client/qopcuamonitoringparameters.cpp b/src/opcua/client/qopcuamonitoringparameters.cpp
index 1eec6d8..9b9947a 100644
--- a/src/opcua/client/qopcuamonitoringparameters.cpp
+++ b/src/opcua/client/qopcuamonitoringparameters.cpp
@@ -74,82 +74,66 @@ QT_BEGIN_NAMESPACE
\li Parameter
\li Open62541 plugin
\li UACpp plugin
- \li FreeOPCUA plugin
\row
\li PublishingInterval
\li X
\li X
- \li X
\row
\li SamplingInterval
\li X
\li X
- \li
\row
\li LifetimeCount
\li X
\li X
- \li
\row
\li MaxKeepAliveCount
\li X
\li X
- \li
\row
\li Priority
\li X
\li X
- \li
\row
\li IndexRange
\li X
\li X
- \li X
\row
\li Shared
\li X
\li X
- \li X
\row
\li SubscriptionId
\li X
\li X
- \li X
\row
\li PublishingEnabled
\li X
\li X
- \li
\row
\li Filter
\li X
\li X
- \li
\row
\li QueueSize
\li X
\li X
- \li
\row
\li DiscardOldest
\li X
\li X
- \li
\row
\li MonitoringMode
\li X
\li X
- \li
\row
\li IndexRange
\li X
\li X
- \li
\row
\li MaxNotificationsPerPublish
\li X
\li X
- \li
\endtable
*/
@@ -166,6 +150,9 @@ QT_BEGIN_NAMESPACE
/*!
\enum QOpcUaMonitoringParameters::SubscriptionType
+ This enum is used to determine if the monitored item can be added to a shared subscription
+ or if a new subscription must be created.
+
\value Shared Share subscription with other monitored items with the same interval
\value Exclusive Request a new subscription for this attribute
*/
@@ -191,61 +178,6 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \class QOpcUaMonitoringParameters::DataChangeFilter
- \inmodule QtOpcUa
- \brief Defines a DataChangeFilter for a monitored item
-
- This struct is used to set up filtering for a DataChange monitored item.
- It is defined in OPC-UA part 4, 7.12.2.
-*/
-
-/*!
- \fn QOpcUaMonitoringParameters::DataChangeFilter::DataChangeFilter(DataChangeTrigger p_trigger, DeadbandType p_deadbandType, double p_deadbandValue)
-
- Constructs a DataChangeFilter with trigger \a p_trigger, deadband type \a p_deadbandType and deadband value \a p_deadbandValue.
-*/
-
-/*!
- \variable QOpcUaMonitoringParameters::DataChangeFilter::trigger
-
- The trigger for this filter.
-*/
-
-/*!
- \variable QOpcUaMonitoringParameters::DataChangeFilter::deadbandType
-
- The deadband type for this filter.
-*/
-
-/*!
- \variable QOpcUaMonitoringParameters::DataChangeFilter::deadbandValue
-
- The deadband value for this filter.
-*/
-
-/*!
- \enum QOpcUaMonitoringParameters::DataChangeFilter::DataChangeTrigger
-
- Enumerates the possible triggers for a \l DataChangeFilter.
-
- \value Status Triggers if the value's status code changes.
- \value StatusValue Triggers if the value's status code or the value itself changes.
- \value StatusValueTimestamp Triggers if the value's status code, the value itself or the source timestamp changes.
-*/
-
-/*!
- \enum QOpcUaMonitoringParameters::DataChangeFilter::DeadbandType
-
- Enumerates the possible deadband types for a \l DataChangeFilter.
-
- \value None No deadband filtering.
- \value Absolute A notification is generated if the absolute value of the difference between the last cached value
- and the current value is greater than the deadband value.
- \value Percent Only valid for AnalogItems with an EURange property. A notification is generated if the absolute value
- of the difference between the last cached value and the current value is greater than value percent of the EURange.
-*/
-
-/*!
The default constructor for QOpcUaMonitoringParameters.
*/
QOpcUaMonitoringParameters::QOpcUaMonitoringParameters()
@@ -290,7 +222,7 @@ QOpcUaMonitoringParameters &QOpcUaMonitoringParameters::operator=(const QOpcUaMo
/*!
Returns the subscription type.
*/
-QOpcUaMonitoringParameters::SubscriptionType QOpcUaMonitoringParameters::shared() const
+QOpcUaMonitoringParameters::SubscriptionType QOpcUaMonitoringParameters::subscriptionType() const
{
return d_ptr->shared;
}
@@ -298,7 +230,7 @@ QOpcUaMonitoringParameters::SubscriptionType QOpcUaMonitoringParameters::shared(
/*!
Request \a shared as subscription type for the subscription.
*/
-void QOpcUaMonitoringParameters::setShared(SubscriptionType shared)
+void QOpcUaMonitoringParameters::setSubscriptionType(SubscriptionType shared)
{
d_ptr->shared = shared;
}
@@ -339,7 +271,7 @@ void QOpcUaMonitoringParameters::setStatusCode(QOpcUa::UaStatusCode statusCode)
/*!
Returns the publishing mode for the subscription.
*/
-bool QOpcUaMonitoringParameters::publishingEnabled() const
+bool QOpcUaMonitoringParameters::isPublishingEnabled() const
{
return d_ptr->publishingEnabled;
}
@@ -451,6 +383,26 @@ void QOpcUaMonitoringParameters::setSubscriptionId(quint32 subscriptionId)
}
/*!
+ Returns the monitored item id assigned by the server.
+ If the monitored item id is 0, the monitored item could
+ not be successfully created.
+*/
+quint32 QOpcUaMonitoringParameters::monitoredItemId() const
+{
+ return d_ptr->monitoredItemId;
+}
+
+/*!
+ Sets the monitored item id to \a monitoredItemId.
+
+ Setting this value as a client has no effect.
+*/
+void QOpcUaMonitoringParameters::setMonitoredItemId(quint32 monitoredItemId)
+{
+ d_ptr->monitoredItemId = monitoredItemId;
+}
+
+/*!
Returns the monitoring mode for the monitored item.
*/
QOpcUaMonitoringParameters::MonitoringMode QOpcUaMonitoringParameters::monitoringMode() const
@@ -499,7 +451,8 @@ void QOpcUaMonitoringParameters::setQueueSize(quint32 queueSize)
}
/*!
- Returns the filter result. Empty for DataChangeFilter.
+ Returns the current filter.
+ \sa setFilter()
*/
QVariant QOpcUaMonitoringParameters::filter() const
{
@@ -507,24 +460,75 @@ QVariant QOpcUaMonitoringParameters::filter() const
}
/*!
- Request \l DataChangeFilter \a filter as filter for the monitored item.
- \sa setFilter()
+ Sets \l DataChangeFilter \a filter as filter for the monitored item.
+ If another data change filter or an event filter is present, it will be replaced.
+
+ If the server does not accept the filter, this will be indicated by the
+ status code after the \l enableMonitoring() request has finished.
+
+ \sa filter()
*/
-void QOpcUaMonitoringParameters::setDataChangeFilter(const QOpcUaMonitoringParameters::DataChangeFilter &filter)
+void QOpcUaMonitoringParameters::setFilter(const QOpcUaMonitoringParameters::DataChangeFilter &filter)
{
d_ptr->filter = QVariant::fromValue(filter);
}
/*!
- Request \a filter as filter for the monitored item.
+ Request \a eventFilter as filter for the monitored item.
+ If another event filter or a data change filter is present, it will be replaced.
+ If the server does not accept the filter, this will be indicated by the
+ status code and the event filter result after the \l enableMonitoring()
+ request has finished.
- For general use, the type-safe versions that are listed below are preferred.
+ \sa filter()
+*/
+void QOpcUaMonitoringParameters::setFilter(const EventFilter &eventFilter)
+{
+ d_ptr->filter = QVariant::fromValue(eventFilter);
+}
- \sa setDataChangeFilter()
+/*!
+ Removes the current filter from the monitoring parameters.
+
+ \sa filter() setFilter()
*/
-void QOpcUaMonitoringParameters::setFilter(const QVariant &filter)
+void QOpcUaMonitoringParameters::clearFilter()
{
- d_ptr->filter = filter;
+ d_ptr->filter.clear();
+}
+
+/*!
+ Returns the filter result.
+
+ This value is empty for an attribute monitoring. In case of an event monitoring,
+ the filter result can be empty if the server did not detect any errors in the filter.
+*/
+QVariant QOpcUaMonitoringParameters::filterResult() const
+{
+ return d_ptr->filterResult;
+}
+
+/*!
+ Sets the event filter result to \a eventFilterResult.
+
+ This method must only be used by the backend, setting an event filter result as a user
+ does not have any effect.
+
+ \sa filterResult()
+*/
+void QOpcUaMonitoringParameters::setFilterResult(const QOpcUa::QEventFilterResult &eventFilterResult)
+{
+ d_ptr->filterResult = QVariant::fromValue(eventFilterResult);
+}
+
+/*!
+ Removes the current filter result from the monitoring parameters.
+
+ \sa filterResult() setFilterResult()
+*/
+void QOpcUaMonitoringParameters::clearFilterResult()
+{
+ d_ptr->filterResult.clear();
}
/*!
@@ -545,4 +549,316 @@ void QOpcUaMonitoringParameters::setSamplingInterval(double samplingInterval)
d_ptr->samplingInterval = samplingInterval;
}
+/*!
+ \class QOpcUaMonitoringParameters::DataChangeFilter
+ \inmodule QtOpcUa
+ \inheaderfile QOpcUaMonitoringParameters
+ \brief Defines a DataChangeFilter for a monitored item.
+
+ This class is used to set up filtering for a DataChange monitored item.
+ It is defined in OPC-UA part 4, 7.12.2.
+*/
+
+/*!
+ \enum QOpcUaMonitoringParameters::DataChangeFilter::DataChangeTrigger
+
+ Enumerates the possible triggers for a \l DataChangeFilter.
+
+ \value Status Triggers if the value's status code changes.
+ \value StatusOrValue Triggers if the value's status code or the value itself changes.
+ \value StatusOrValueOrTimestamp Triggers if the value's status code, the value itself or the source timestamp changes.
+*/
+
+/*!
+ \enum QOpcUaMonitoringParameters::DataChangeFilter::DeadbandType
+
+ Enumerates the possible deadband types for a \l DataChangeFilter.
+
+ \value None No deadband filtering.
+ \value Absolute A notification is generated if the absolute value of the difference between the last cached value
+ and the current value is greater than the deadband value.
+ \value Percent Only valid for AnalogItems with an EURange property. A notification is generated if the absolute value
+ of the difference between the last cached value and the current value is greater than value percent of the EURange.
+*/
+
+class QOpcUaMonitoringParameters::DataChangeFilterData : public QSharedData
+{
+public:
+ DataChangeFilterData()
+ : trigger(DataChangeFilter::DataChangeTrigger::Status)
+ , deadbandType(DataChangeFilter::DeadbandType::None)
+ , deadbandValue(0)
+ {}
+
+ DataChangeFilter::DataChangeTrigger trigger;
+ DataChangeFilter::DeadbandType deadbandType;
+ double deadbandValue;
+};
+
+/*!
+ Constructs a data change filter with trigger on \c status, deadband type \c none and deadbandValue \c 0.
+*/
+QOpcUaMonitoringParameters::DataChangeFilter::DataChangeFilter()
+ : data(new QOpcUaMonitoringParameters::DataChangeFilterData)
+{
+}
+
+/*!
+ Constructs a data change filter from \a rhs.
+*/
+QOpcUaMonitoringParameters::DataChangeFilter::DataChangeFilter(const DataChangeFilter &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Constructs a data change filter with trigger \a trigger, deadband type \a deadbandType and deadband value \a deadbandValue.
+*/
+QOpcUaMonitoringParameters::DataChangeFilter::DataChangeFilter(DataChangeFilter::DataChangeTrigger trigger,
+ DataChangeFilter::DeadbandType deadbandType, double deadbandValue)
+ : data(new QOpcUaMonitoringParameters::DataChangeFilterData)
+{
+ data->trigger = trigger;
+ data->deadbandType = deadbandType;
+ data->deadbandValue = deadbandValue;
+}
+
+/*!
+ Sets the values from \a rhs in this data change filter.
+*/
+QOpcUaMonitoringParameters::DataChangeFilter &QOpcUaMonitoringParameters::DataChangeFilter::operator=(const DataChangeFilter &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Returns \c true if this data change filter has the same value as \a rhs.
+*/
+bool QOpcUaMonitoringParameters::DataChangeFilter::operator==(const QOpcUaMonitoringParameters::DataChangeFilter &rhs) const
+{
+ return data->deadbandType == rhs.deadbandType() &&
+ data->trigger == rhs.trigger() &&
+ data->deadbandValue == rhs.deadbandValue();
+}
+
+QOpcUaMonitoringParameters::DataChangeFilter::~DataChangeFilter()
+{
+}
+
+/*!
+ Returns the deadband value.
+*/
+double QOpcUaMonitoringParameters::DataChangeFilter::deadbandValue() const
+{
+ return data->deadbandValue;
+}
+
+/*!
+ Sets the deadband value to \a deadbandValue.
+*/
+void QOpcUaMonitoringParameters::DataChangeFilter::setDeadbandValue(double deadbandValue)
+{
+ data->deadbandValue = deadbandValue;
+}
+
+/*!
+ Returns the deadband type.
+*/
+QOpcUaMonitoringParameters::DataChangeFilter::DeadbandType QOpcUaMonitoringParameters::DataChangeFilter::deadbandType() const
+{
+ return data->deadbandType;
+}
+
+/*!
+ Sets the deadband type to \a deadbandType.
+*/
+void QOpcUaMonitoringParameters::DataChangeFilter::setDeadbandType(DeadbandType deadbandType)
+{
+ data->deadbandType = deadbandType;
+}
+
+/*!
+ Returns the trigger.
+*/
+QOpcUaMonitoringParameters::DataChangeFilter::DataChangeTrigger QOpcUaMonitoringParameters::DataChangeFilter::trigger() const
+{
+ return data->trigger;
+}
+
+/*!
+ Sets the trigger to \a trigger.
+*/
+void QOpcUaMonitoringParameters::DataChangeFilter::setTrigger(DataChangeTrigger trigger)
+{
+ data->trigger = trigger;
+}
+
+/*!
+ Converts this data change filter to \l QVariant.
+*/
+QOpcUaMonitoringParameters::DataChangeFilter::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
+
+/*!
+ \class QOpcUaMonitoringParameters::EventFilter
+ \inmodule QtOpcUa
+ \inheaderfile QOpcUaMonitoringParameters
+ \brief Defines an EventFilter for a monitored item.
+
+ An event filter is required for monitoring events on the server.
+ It consists of \c select clauses and a \c where clause.
+
+ The \c select clauses are used to specify the data the user wants to receive when an event occurs.
+ It consists of \l {QOpcUa::QSimpleAttributeOperand} simple attribute operands which select
+ attributes of child nodes of an event type, for example the value attribute of the "Message"
+ property of BaseEventType.
+
+ The \c where clause is used to restrict the reported events by matching against certain criteria.
+ Several operators and four different operand types allow filtering based on the values of the
+ attributes of the child nodes of an event type.
+
+ Filters can be constructed using the setter or the streaming operator. Streaming a \l QOpcUa::QSimpleAttributeOperand
+ into an event filter adds a new \c select clause to the filter, a \l QOpcUa::QContentFilterElement is appended to the \c where clause.
+ A content filter element can be constructed by streaming operands of the types \l QOpcUa::QLiteralOperand,
+ \l QOpcUa::QElementOperand, \l QOpcUa::QAttributeOperand and \l QOpcUa::QSimpleAttributeOperand and an operator into a content
+ filter element. Only the last operator is used, previous operators will be discarded.
+
+ The following EventFilter tells the server to report the value of the "Message" field for events that have a "Severity" field with value >= 500:
+
+ \code
+ QOpcUaMonitoringParameters::EventFilter filter;
+ filter << QOpcUa::QSimpleAttributeOperand("Message"); // Select clause of the filter
+
+ QOpcUa::QContentFilterElement condition;
+ condition << OpcUa::QContentFilterElement::FilterOperator::GreaterThanOrEqual;
+ condition << QOpcUa::QSimpleAttributeOperand("Severity");
+ condition << QOpcUa::QLiteralOperand(500, QOpcUa::Types::UInt16);
+ filter << condition; // Where clause of the filter
+ \endcode
+
+ For a more complex example with two conditions, see \l QOpcUa::QElementOperand.
+*/
+
+class QOpcUaMonitoringParameters::EventFilterData : public QSharedData
+{
+public:
+ QVector<QOpcUa::QSimpleAttributeOperand> selectClauses;
+ QVector<QOpcUa::QContentFilterElement> whereClause;
+};
+
+QOpcUaMonitoringParameters::EventFilter::EventFilter()
+ : data(new EventFilterData)
+{
+}
+
+/*!
+ Constructs an event filter from \a rhs.
+*/
+QOpcUaMonitoringParameters::EventFilter::EventFilter(const QOpcUaMonitoringParameters::EventFilter &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this event filter.
+*/
+QOpcUaMonitoringParameters::EventFilter &QOpcUaMonitoringParameters::EventFilter::operator=(const QOpcUaMonitoringParameters::EventFilter &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Returns \c true if this event filter has the same value as \a rhs.
+*/
+bool QOpcUaMonitoringParameters::EventFilter::operator==(const QOpcUaMonitoringParameters::EventFilter &rhs) const
+{
+ return selectClauses() == rhs.selectClauses() && whereClause() == rhs.whereClause();
+}
+
+/*!
+ Adds the content filter element \a whereClauseElement to the where clause of this event filter.
+*/
+QOpcUaMonitoringParameters::EventFilter &QOpcUaMonitoringParameters::EventFilter::operator<<(const QOpcUa::QContentFilterElement &whereClauseElement)
+{
+ whereClauseRef().append(whereClauseElement);
+ return *this;
+}
+
+/*!
+ Adds the simple attribute operand \a selectClauseElement to the select clause of this content filter element.
+*/
+QOpcUaMonitoringParameters::EventFilter &QOpcUaMonitoringParameters::EventFilter::operator<<(const QOpcUa::QSimpleAttributeOperand &selectClauseElement)
+{
+ selectClausesRef().append(selectClauseElement);
+ return *this;
+}
+
+/*!
+ Converts this event filter to \l QVariant.
+*/
+QOpcUaMonitoringParameters::EventFilter::operator const QVariant()
+{
+ return QVariant::fromValue(*this);
+}
+
+QOpcUaMonitoringParameters::EventFilter::~EventFilter()
+{
+}
+
+/*!
+ Returns the content filter used to restrict the reported events to events matching certain criteria.
+*/
+QVector<QOpcUa::QContentFilterElement> QOpcUaMonitoringParameters::EventFilter::whereClause() const
+{
+ return data->whereClause;
+}
+
+/*!
+ Returns a reference to the where clause.
+
+ \sa whereClause()
+*/
+QVector<QOpcUa::QContentFilterElement> &QOpcUaMonitoringParameters::EventFilter::whereClauseRef()
+{
+ return data->whereClause;
+}
+
+/*!
+ Sets the where clause to \a whereClause.
+*/
+void QOpcUaMonitoringParameters::EventFilter::setWhereClause(const QVector<QOpcUa::QContentFilterElement> &whereClause)
+{
+ data->whereClause = whereClause;
+}
+
+/*!
+ Returns the selected event fields that shall be included when a new event is reported.
+*/
+QVector<QOpcUa::QSimpleAttributeOperand> QOpcUaMonitoringParameters::EventFilter::selectClauses() const
+{
+ return data->selectClauses;
+}
+
+/*!
+ Returns a reference to the select clauses.
+*/
+QVector<QOpcUa::QSimpleAttributeOperand> &QOpcUaMonitoringParameters::EventFilter::selectClausesRef()
+{
+ return data->selectClauses;
+}
+
+/*!
+ Sets the select clauses to \a selectClauses.
+*/
+void QOpcUaMonitoringParameters::EventFilter::setSelectClauses(const QVector<QOpcUa::QSimpleAttributeOperand> &selectClauses)
+{
+ data->selectClauses = selectClauses;
+}
+
QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuamonitoringparameters.h b/src/opcua/client/qopcuamonitoringparameters.h
index 9cb6771..3ebfcd5 100644
--- a/src/opcua/client/qopcuamonitoringparameters.h
+++ b/src/opcua/client/qopcuamonitoringparameters.h
@@ -79,11 +79,14 @@ public:
Q_DECLARE_FLAGS(Parameters, Parameter)
// This type and the enums are defined in OPC-UA part 4, 7.12.2
- struct DataChangeFilter {
+ class DataChangeFilterData;
+ class Q_OPCUA_EXPORT DataChangeFilter
+ {
+ public:
enum class DataChangeTrigger {
Status = 0,
- StatusValue = 1,
- StatusValueTimestamp = 2
+ StatusOrValue = 1,
+ StatusOrValueOrTimestamp = 2
};
enum class DeadbandType {
@@ -92,33 +95,67 @@ public:
Percent = 2
};
- DataChangeTrigger trigger;
- DeadbandType deadbandType;
- double deadbandValue;
-
- DataChangeFilter()
- : trigger(DataChangeTrigger::Status)
- , deadbandType(DeadbandType::None)
- , deadbandValue(0)
- {}
- DataChangeFilter(DataChangeTrigger p_trigger, DeadbandType p_deadbandType, double p_deadbandValue)
- : trigger(p_trigger)
- , deadbandType(p_deadbandType)
- , deadbandValue(p_deadbandValue)
- {}
+ DataChangeFilter();
+ DataChangeFilter(const DataChangeFilter &);
+ DataChangeFilter(DataChangeTrigger trigger, DeadbandType deadbandType, double deadbandValue);
+ DataChangeFilter &operator=(const DataChangeFilter &);
+ bool operator==(const DataChangeFilter &rhs) const;
+ operator QVariant() const;
+ ~DataChangeFilter();
+
+ DataChangeTrigger trigger() const;
+ void setTrigger(DataChangeTrigger trigger);
+
+ DeadbandType deadbandType() const;
+ void setDeadbandType(DeadbandType deadbandType);
+
+ double deadbandValue() const;
+ void setDeadbandValue(double deadbandValue);
+
+ private:
+ QSharedDataPointer<DataChangeFilterData> data;
+ };
+
+ class EventFilterData;
+ class Q_OPCUA_EXPORT EventFilter
+ {
+ public:
+ EventFilter();
+ EventFilter(const EventFilter &);
+ EventFilter &operator=(const EventFilter &);
+ operator QVariant const();
+ bool operator==(const QOpcUaMonitoringParameters::EventFilter &rhs) const;
+ EventFilter &operator<<(const QOpcUa::QContentFilterElement &whereClauseElement);
+ EventFilter &operator<<(const QOpcUa::QSimpleAttributeOperand &selectClauseElement);
+ ~EventFilter();
+
+ QVector<QOpcUa::QSimpleAttributeOperand> selectClauses() const;
+ QVector<QOpcUa::QSimpleAttributeOperand> &selectClausesRef();
+ void setSelectClauses(const QVector<QOpcUa::QSimpleAttributeOperand> &selectClauses);
+
+ QVector<QOpcUa::QContentFilterElement> whereClause() const;
+ QVector<QOpcUa::QContentFilterElement> &whereClauseRef();
+ void setWhereClause(const QVector<QOpcUa::QContentFilterElement> &whereClause);
+
+ private:
+ QSharedDataPointer<QOpcUaMonitoringParameters::EventFilterData> data;
};
QOpcUaMonitoringParameters();
~QOpcUaMonitoringParameters();
- QOpcUaMonitoringParameters(double publishingInterval, SubscriptionType shared = SubscriptionType::Shared, quint32 subscriptionId = 0);
+ QOpcUaMonitoringParameters(double publishingInterval, SubscriptionType subscriptionType = SubscriptionType::Shared, quint32 subscriptionId = 0);
QOpcUaMonitoringParameters(const QOpcUaMonitoringParameters &other);
QOpcUaMonitoringParameters &operator=(const QOpcUaMonitoringParameters &other);
double samplingInterval() const;
void setSamplingInterval(double samplingInterval);
QVariant filter() const;
- void setDataChangeFilter(const QOpcUaMonitoringParameters::DataChangeFilter &filter);
- void setFilter(const QVariant &filter);
+ void setFilter(const QOpcUaMonitoringParameters::DataChangeFilter &filter);
+ void setFilter(const QOpcUaMonitoringParameters::EventFilter &eventFilter);
+ void clearFilter();
+ QVariant filterResult() const;
+ void setFilterResult(const QOpcUa::QEventFilterResult &eventFilterResult);
+ void clearFilterResult();
quint32 queueSize() const;
void setQueueSize(quint32 queueSize);
bool discardOldest() const;
@@ -127,6 +164,8 @@ public:
void setMonitoringMode(MonitoringMode monitoringMode);
quint32 subscriptionId() const;
void setSubscriptionId(quint32 subscriptionId);
+ quint32 monitoredItemId() const;
+ void setMonitoredItemId(quint32 monitoredItemId);
double publishingInterval() const;
void setPublishingInterval(double publishingInterval);
quint32 lifetimeCount() const;
@@ -137,12 +176,12 @@ public:
void setMaxNotificationsPerPublish(quint32 maxNotificationsPerPublish);
quint8 priority() const;
void setPriority(quint8 priority);
- bool publishingEnabled() const;
+ bool isPublishingEnabled() const;
void setPublishingEnabled(bool publishingEnabled);
QOpcUa::UaStatusCode statusCode() const;
void setStatusCode(QOpcUa::UaStatusCode statusCode);
- QOpcUaMonitoringParameters::SubscriptionType shared() const;
- void setShared(SubscriptionType subscriptionType);
+ QOpcUaMonitoringParameters::SubscriptionType subscriptionType() const;
+ void setSubscriptionType(SubscriptionType subscriptionType);
QString indexRange() const;
void setIndexRange(const QString &indexRange);
@@ -165,5 +204,6 @@ Q_DECLARE_METATYPE(QOpcUaMonitoringParameters::DataChangeFilter::DeadbandType)
Q_DECLARE_METATYPE(QOpcUaMonitoringParameters::Parameter)
Q_DECLARE_METATYPE(QOpcUaMonitoringParameters::Parameters)
Q_DECLARE_METATYPE(QOpcUaMonitoringParameters::MonitoringMode)
+Q_DECLARE_METATYPE(QOpcUaMonitoringParameters::EventFilter)
#endif // QOPCUAMONITORINGPARAMETERS_H
diff --git a/src/opcua/client/qopcuamonitoringparameters_p.h b/src/opcua/client/qopcuamonitoringparameters_p.h
index 2c11145..589dce3 100644
--- a/src/opcua/client/qopcuamonitoringparameters_p.h
+++ b/src/opcua/client/qopcuamonitoringparameters_p.h
@@ -64,19 +64,21 @@ public:
, discardOldest(true)
, monitoringMode(QOpcUaMonitoringParameters::MonitoringMode::Reporting)
, subscriptionId(0)
+ , monitoredItemId(0)
, publishingInterval(0)
, lifetimeCount(150) // Must be at least three times the maxKeepAliveCount (OPC-UA part 4, page 76).
, maxKeepAliveCount(50) // Allow 50 publishing intervals before a keepalive is expected to reduce the network traffic.
, maxNotificationsPerPublish(0)
, priority(0)
, publishingEnabled(true)
- , statusCode(QOpcUa::UaStatusCode::BadAttributeIdInvalid)
+ , statusCode(QOpcUa::UaStatusCode::BadNoEntryExists)
, shared(QOpcUaMonitoringParameters::SubscriptionType::Shared)
{}
// MonitoredItem
double samplingInterval;
QVariant filter;
+ QVariant filterResult;
quint32 queueSize;
bool discardOldest;
QOpcUaMonitoringParameters::MonitoringMode monitoringMode;
@@ -84,6 +86,7 @@ public:
// Subscription
quint32 subscriptionId;
+ quint32 monitoredItemId;
double publishingInterval;
quint32 lifetimeCount;
quint32 maxKeepAliveCount;
diff --git a/src/opcua/client/qopcuanode.cpp b/src/opcua/client/qopcuanode.cpp
index c780827..666165a 100644
--- a/src/opcua/client/qopcuanode.cpp
+++ b/src/opcua/client/qopcuanode.cpp
@@ -79,7 +79,7 @@ QT_BEGIN_NAMESPACE
This status code can be simplified by converting it to a \l QOpcUa::ErrorCategory using
\l QOpcUa::errorCategory().
- \section1 Subscribing to data changes
+ \section1 Subscriptions and monitored items
Subscriptions are a concept in OPC UA which allows receiving of notifications for changes in data
or in case of events instead of continuously polling a node for changes.
Monitored items define how attributes of a node are watched for changes. They are added to a
@@ -89,23 +89,37 @@ QT_BEGIN_NAMESPACE
\l QOpcUaNode offers an abstraction to interact with subscriptions and monitored items.
\l enableMonitoring() enables data change notifications for one or more attributes.
- The \l attributeUpdated signal contains new values and the local cache is updated.
+ The \l dataChangeOccurred signal contains new values and the local cache is updated.
\l disableMonitoring() disables the data change notifications.
The \l monitoringStatusChanged signal notifies about changes of the monitoring status, e. g. after
manual enable and disable or a status change on the server.
+ Event monitoring uses the same API for setup and life cycle management.
+ The \l {QOpcUa::NodeAttribute} {EventNotifier} attribute
+ must be monitored using an \l {QOpcUaMonitoringParameters::EventFilter} {EventFilter} which selects
+ the required event fields and filters the reported events by user defined criteria. The events are
+ reported in the \l eventOccurred() signal as a \l QVariantList which contains the values of the selected
+ event fields.
+
Settings of the subscription and monitored item can be modified at runtime using \l modifyMonitoring().
\section1 Browsing the address space
The OPC UA address space consists of nodes connected by references.
\l browseChildren follows these references in forward direction and returns attributes from all
nodes connected to the node behind an instance of \l QOpcUaNode in the \l browseFinished signal.
+ \l browse() is similar to \l browseChildren() but offers more options to configure the browse call.
\section1 Method calls
OPC UA specifies methods on the server which can be called by the user.
\l QOpcUaNode supports this via \l callMethod which takes parameters and returns the results of
the call in the \l methodCallFinished signal.
+ \section1 Resolving browse paths
+ To support programming against a type description, OPC UA supports the resolution of a path of browse names
+ starting from a certain node to obtain the node id of the target node. The \l resolveBrowsePath() method
+ follows a path starting from the node it was called on and returns the result in the
+ \l resolveBrowsePathFinished() signal.
+
\section1 Example
For connecting the client to a server and getting a \l QOpcUaNode object, see \l QOpcUaClient.
@@ -120,7 +134,7 @@ QT_BEGIN_NAMESPACE
qDebug() << "Failed to read attribute:" << rootNode->attributeError(QOpcUa::NodeAttribute::BrowseName);
client->disconnectFromEndpoint();
}
- qDebug() << "Browse name:" << rootNode->attribute(QOpcUa::NodeAttribute::BrowseName).value<QOpcUa::QQualifiedName>().name;
+ qDebug() << "Browse name:" << rootNode->attribute(QOpcUa::NodeAttribute::BrowseName).value<QOpcUa::QQualifiedName>().name();
});
rootNode->readAttributes(QOpcUa::NodeAttribute::BrowseName); // Start a read operation for the node's BrowseName attribute.
\endcode
@@ -152,10 +166,22 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn void QOpcUaNode::attributeUpdated(QOpcUa::NodeAttribute attr, QVariant value)
+ \fn void QOpcUaNode::dataChangeOccurred(QOpcUa::NodeAttribute attr, QVariant value)
This signal is emitted after a data change notification has been received. \a value contains the
new value for the node attribute \a attr.
+
+ \sa attribute() serverTimestamp() sourceTimestamp()
+*/
+
+/*!
+ \fn void QOpcUaNode::attributeUpdated(QOpcUa::NodeAttribute attr, QVariant value)
+
+ This signal is emitted after the value in the attribute cache has been updated by a
+ data change notification from the server, a read or a write operation. \a value contains the
+ new value for the node attribute \a attr.
+
+ \sa attribute() attributeError() serverTimestamp() sourceTimestamp()
*/
/*!
@@ -190,12 +216,21 @@ QT_BEGIN_NAMESPACE
\a statusCode contains the status code from the method call, \a result contains the output
arguments of the method. \a result is empty if the method has no output arguments or \a statusCode
is not \l {QOpcUa::UaStatusCode} {Good}.
+ The \a result variant is either a single value if there is only one output argument or it contains a list of
+ variants in case the called function returned multiple output arguments.
+ \code
+ if (result.canConvert<QVariantList>()) {
+ // handle list type
+ } else {
+ // handle value type
+ }
+ \endcode
*/
/*!
\fn void QOpcUaNode::browseFinished(QVector<QOpcUaReferenceDescription> children, QOpcUa::UaStatusCode statusCode)
- This signal is emitted after a \l browseChildren() operation has finished.
+ This signal is emitted after a \l browseChildren() or \l browse() operation has finished.
\a children contains information about all nodes which matched the criteria in \l browseChildren().
\a statusCode contains the service result of the browse operation. If \a statusCode is not \l {QOpcUa::UaStatusCode} {Good},
@@ -204,6 +239,24 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ \fn void QOpcUaNode::resolveBrowsePathFinished(QVector<QOpcUa::QBrowsePathTarget> targets, QVector<QOpcUa::QRelativePathElement> path, QOpcUa::UaStatusCode statusCode)
+
+ This signal is emitted after a \l resolveBrowsePath() call has finished.
+
+ \l QOpcUa::QBrowsePathTarget \a targets contains the matches, \a statusCode is the status code of the operation.
+ If \a statusCode is not \l {QOpcUa::UaStatusCode} {Good}, \a targets is empty.
+ The browse path \a path is the browse path from the request. It can be used to associate results with requests.
+*/
+
+/*!
+ \fn void QOpcUaNode::eventOccurred(QVariantList eventFields)
+
+ This signal is emitted after a new event has been received.
+
+ \a eventFields contains the values of the event fields in the order specified in the \c select clause of the event filter.
+*/
+
+/*!
\fn QOpcUa::NodeAttributes QOpcUaNode::mandatoryBaseAttributes()
Contains all mandatory attributes of the OPC UA base node class.
@@ -249,6 +302,18 @@ bool QOpcUaNode::readAttributeRange(QOpcUa::NodeAttribute attribute, const QStri
}
/*!
+ Starts an asynchronous read operation for the node's Value attribute.
+
+ Returns \c true if the asynchronous call has been successfully dispatched.
+
+ \sa readAttributes()
+*/
+bool QOpcUaNode::readValueAttribute()
+{
+ return readAttributes(QOpcUa::NodeAttribute::Value);
+}
+
+/*!
Starts an asynchronous read operation for the node attributes in \a attributes.
Returns \c true if the asynchronous call has been successfully dispatched.
@@ -277,7 +342,24 @@ QVariant QOpcUaNode::attribute(QOpcUa::NodeAttribute attribute) const
if (it == d->m_nodeAttributes.constEnd())
return QVariant();
- return it->value;
+ return it->value();
+}
+
+/*!
+ Returns the value of the node's Value attribute.
+
+ The returned value is only valid after the Value attribute has been successfully read or written
+ or after a data change from a monitoring has updated the attribute cache.
+ This is indicated by a \l attributeRead() or \l attributeWritten() signal with status code
+ \l {QOpcUa::UaStatusCode} {Good} or a \l dataChangeOccurred() signal for the Value attribute.
+
+ If there is no value in the attribute cache, an invalid \l QVariant is returned.
+
+ \sa readValueAttribute() writeValueAttribute() valueAttributeError()
+*/
+QVariant QOpcUaNode::valueAttribute() const
+{
+ return attribute(QOpcUa::NodeAttribute::Value);
}
/*!
@@ -285,6 +367,8 @@ QVariant QOpcUaNode::attribute(QOpcUa::NodeAttribute attribute) const
The error code is only valid after the \l attributeRead or \l attributeWritten signal has been emitted.
+ If there is no entry in the attribute cache, \l {QOpcUa::UaStatusCode} {BadNoEntryExists} is returned.
+
\sa QOpcUa::errorCategory
*/
QOpcUa::UaStatusCode QOpcUaNode::attributeError(QOpcUa::NodeAttribute attribute) const
@@ -292,14 +376,24 @@ QOpcUa::UaStatusCode QOpcUaNode::attributeError(QOpcUa::NodeAttribute attribute)
Q_D(const QOpcUaNode);
auto it = d->m_nodeAttributes.constFind(attribute);
if (it == d->m_nodeAttributes.constEnd())
- return QOpcUa::UaStatusCode::BadNotFound;
+ return QOpcUa::UaStatusCode::BadNoEntryExists;
- return it->statusCode;
+ return it->statusCode();
+}
+
+/*!
+ Returns the error code for the node's Value attribute.
+ The status code \l {QOpcUa::UaStatusCode} {Good} indicates a valid return value for \l valueAttribute().
+ If there is no entry in the attribute cache, \l {QOpcUa::UaStatusCode} {BadNoEntryExists} is returned.
+*/
+QOpcUa::UaStatusCode QOpcUaNode::valueAttributeError() const
+{
+ return attributeError(QOpcUa::NodeAttribute::Value);
}
/*!
Returns the source timestamp from the last read or data change of \a attribute.
- Before at least one \l attributeRead or \l attributeUpdated signal has been emitted,
+ Before at least one \l attributeRead or \l dataChangeOccurred signal has been emitted,
a null datetime is returned.
*/
@@ -310,12 +404,12 @@ QDateTime QOpcUaNode::sourceTimestamp(QOpcUa::NodeAttribute attribute) const
if (it == d->m_nodeAttributes.constEnd())
return QDateTime();
- return it->sourceTimestamp;
+ return it->sourceTimestamp();
}
/*!
Returns the server timestamp from the last read or data change of \a attribute.
- Before at least one \l attributeRead or \l attributeUpdated signal has been emitted,
+ Before at least one \l attributeRead or \l dataChangeOccurred signal has been emitted,
a null datetime is returned.
*/
QDateTime QOpcUaNode::serverTimestamp(QOpcUa::NodeAttribute attribute) const
@@ -325,7 +419,7 @@ QDateTime QOpcUaNode::serverTimestamp(QOpcUa::NodeAttribute attribute) const
if (it == d->m_nodeAttributes.constEnd())
return QDateTime();
- return it->serverTimestamp;
+ return it->serverTimestamp();
}
/*!
@@ -338,6 +432,14 @@ QDateTime QOpcUaNode::serverTimestamp(QOpcUa::NodeAttribute attribute) const
There are multiple error cases in which a bad status code is generated: A subscription with the subscription id specified in \a settings does not exist,
the node does not exist on the server, the node does not have the requested attribute or the maximum number of monitored items for
the server is reached.
+
+ The same method is used to enable event monitoring. Events are special objects in the OPC UA address space which contain information
+ about an event that has occurred. If an event is triggered on the server, an event monitored item collects selected values of
+ node attributes of the event object and its child nodes.
+ Every node that has an event source can be monitored for events.
+ To monitor a node for events, the attribute \l {QOpcUa::NodeAttribute} {EventNotifier} must be monitored using an EventFilter which contains the event fields
+ the user needs and optionally a where clause which is used to filter events by criteria (for more details, see \l QOpcUaMonitoringParameters::EventFilter).
+
*/
bool QOpcUaNode::enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings)
{
@@ -370,7 +472,9 @@ bool QOpcUaNode::modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringPa
/*!
Returns the monitoring parameters associated with the attribute \a attr. This can be used to check the success of \l enableMonitoring()
or if parameters have been revised.
- The returned values are only valid after \l enableMonitoringFinished or \l monitoringStatusChanged have been emitted for \a attr.
+ The returned values are only valid after \l enableMonitoringFinished or \l monitoringStatusChanged have been emitted
+ for \a attr. If the status is queried before a signal has been emitted, \l QOpcUaMonitoringParameters::statusCode()
+ returns \l {QOpcUa::UaStatusCode} {BadNoEntryExists}.
*/
QOpcUaMonitoringParameters QOpcUaNode::monitoringStatus(QOpcUa::NodeAttribute attr)
{
@@ -378,7 +482,7 @@ QOpcUaMonitoringParameters QOpcUaNode::monitoringStatus(QOpcUa::NodeAttribute at
auto it = d->m_monitoringStatus.constFind(attr);
if (it == d->m_monitoringStatus.constEnd()) {
QOpcUaMonitoringParameters p;
- p.setStatusCode(QOpcUa::UaStatusCode::BadAttributeIdInvalid);
+ p.setStatusCode(QOpcUa::UaStatusCode::BadNoEntryExists);
return p;
}
@@ -386,6 +490,18 @@ QOpcUaMonitoringParameters QOpcUaNode::monitoringStatus(QOpcUa::NodeAttribute at
}
/*!
+ Modifies an existing event monitoring to use \a eventFilter as event filter.
+
+ Returns \c true if the filter modification request has been successfully dispatched to the backend.
+
+ \l monitoringStatusChanged for \l {QOpcUa::NodeAttribute} {EventNotifier} is emitted after the operation has finished.
+*/
+bool QOpcUaNode::modifyEventFilter(const QOpcUaMonitoringParameters::EventFilter &eventFilter)
+{
+ return modifyMonitoring(QOpcUa::NodeAttribute::EventNotifier, QOpcUaMonitoringParameters::Parameter::Filter, QVariant::fromValue(eventFilter));
+}
+
+/*!
Modifies an existing data change monitoring to use \a filter as data change filter.
Returns \c true if the filter modification request has been successfully dispatched to the backend.
@@ -497,6 +613,18 @@ bool QOpcUaNode::writeAttributes(const AttributeMap &toWrite, QOpcUa::Types valu
}
/*!
+ Writes \a value to the node's Value attribute using the type information from \a type.
+
+ Returns \c true if the asynchronous call has been successfully dispatched.
+
+ \sa writeAttribute()
+*/
+bool QOpcUaNode::writeValueAttribute(const QVariant &value, QOpcUa::Types type)
+{
+ return writeAttribute(QOpcUa::NodeAttribute::Value, value, type);
+}
+
+/*!
This method disables monitoring for the attributes given in \a attr.
Returns \c true if the asynchronous call has been successfully dispatched.
@@ -530,7 +658,12 @@ bool QOpcUaNode::browseChildren(QOpcUa::ReferenceTypeId referenceType, QOpcUa::N
if (d->m_client.isNull() || d->m_client->state() != QOpcUaClient::Connected)
return false;
- return d->m_impl->browseChildren(referenceType, nodeClassMask);
+ QOpcUaBrowseRequest request;
+ request.setReferenceTypeId(referenceType);
+ request.setNodeClassMask(nodeClassMask);
+ request.setBrowseDirection(QOpcUaBrowseRequest::BrowseDirection::Forward);
+ request.setIncludeSubtypes(true);
+ return d->m_impl->browse(request);
}
/*!
@@ -546,6 +679,15 @@ QString QOpcUaNode::nodeId() const
}
/*!
+ Returns a pointer to the client that has created this node.
+*/
+QOpcUaClient *QOpcUaNode::client() const
+{
+ Q_D(const QOpcUaNode);
+ return d->m_client.data();
+}
+
+/*!
Calls the OPC UA method \a methodNodeId with the parameters given via \a args. The result is
returned in the \l methodCallFinished signal.
@@ -560,6 +702,86 @@ bool QOpcUaNode::callMethod(const QString &methodNodeId, const QVector<QOpcUa::T
return d->m_impl->callMethod(methodNodeId, args);
}
+/*!
+ Resolves the browse path \a path to one or more node ids starting from this node
+ using the TranslateBrowsePathsToNodeIds service specified in OPC-UA part 4, 5.8.4.
+
+ Returns \c true if the asynchronous call has been successfully dispatched.
+
+ TranslateBrowsePathsToNodeIds is mainly used to program against type definitions instead of a concrete set of
+ nodes in the OPC UA address space.
+ For example, a type definition for a machine model could consist of a starting node with browse name "Machine"
+ which has a component with browse name "Fan". Fan has a component with browse name "RPM" which is a Variable node
+ holding the current RPM value of the fan. There are multiple machines of that type and each of these machines is
+ mapped into the OPC UA address space as an object of the machine type.
+ For each of these machine objects, the path from the machine node to the "RPM" node is the same. If a client wants
+ to read the current RPM value, it needs to call \l resolveBrowsePath() with the machine node as starting node
+ and the browse path from the machine to the "RPM" node:
+
+ \code
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=1;s=machine1"));
+
+ QVector<QOpcUa::QRelativePathElement> path;
+ path.append(QOpcUa::QRelativePathElement(QOpcUa::QQualifiedName(1, "Fan"), QOpcUa::ReferenceTypeId::HasComponent));
+ path.append(QOpcUa::QRelativePathElement(QOpcUa::QQualifiedName(1, "RPM"), QOpcUa::ReferenceTypeId::HasComponent));
+ node->resolveBrowsePath(path);
+ \endcode
+
+ The result returned in \l resolveBrowsePathFinished() contains the node id of the "RPM" node which can be
+ used to access the node's attributes:
+
+ \code
+ if (!results.size()) {
+ qWarning() << "Browse path resolution failed";
+ return;
+ }
+
+ if (results.at(0).isFullyResolved()) {
+ QOpcUaNode *rpmNode = client->node(results.at(0).targetId());
+ if (!rpmNode) {
+ qWarning() << "Failed to create node";
+ return;
+ }
+ // Connect slots, call methods
+ } else {
+ qWarning() << "Browse path could not be fully resolved, the target node is on another server";
+ return;
+ }
+ \endcode
+*/
+bool QOpcUaNode::resolveBrowsePath(const QVector<QOpcUa::QRelativePathElement> &path)
+{
+ Q_D(QOpcUaNode);
+ if (d->m_client.isNull() || d->m_client->state() != QOpcUaClient::Connected)
+ return 0;
+
+ return d->m_impl->resolveBrowsePath(path);
+}
+
+/*!
+ Starts a browse call from this node.
+
+ Returns \c true if the asynchronous call has been successfully dispatched.
+
+ All references matching the criteria specified in \a request are returned in the \l browseFinished() signal.
+
+ For example, an inverse browse call can be used to find the parent node of a property node:
+ \code
+ QOpcUaBrowseRequest request;
+ request.setBrowseDirection(QOpcUaBrowseRequest::BrowseDirection::Inverse);
+ request.setReferenceTypeId(QOpcUa::ReferenceTypeId::HasProperty);
+ propertyNode->browse(request);
+ \endcode
+*/
+bool QOpcUaNode::browse(const QOpcUaBrowseRequest &request)
+{
+ Q_D(QOpcUaNode);
+ if (d->m_client.isNull() || d->m_client->state() != QOpcUaClient::Connected)
+ return false;
+
+ return d->m_impl->browse(request);
+}
+
QDebug operator<<(QDebug dbg, const QOpcUaNode &node)
{
dbg << "QOpcUaNode {"
diff --git a/src/opcua/client/qopcuanode.h b/src/opcua/client/qopcuanode.h
index 4ab1138..70d5886 100644
--- a/src/opcua/client/qopcuanode.h
+++ b/src/opcua/client/qopcuanode.h
@@ -37,6 +37,7 @@
#ifndef QOPCUANODE_H
#define QOPCUANODE_H
+#include <QtOpcUa/qopcuabrowserequest.h>
#include <QtOpcUa/qopcuaglobal.h>
#include <QtOpcUa/qopcuamonitoringparameters.h>
#include <QtOpcUa/qopcuareferencedescription.h>
@@ -69,32 +70,44 @@ public:
bool readAttributes(QOpcUa::NodeAttributes attributes = mandatoryBaseAttributes());
bool readAttributeRange(QOpcUa::NodeAttribute attribute, const QString &indexRange);
+ bool readValueAttribute();
QVariant attribute(QOpcUa::NodeAttribute attribute) const;
+ QVariant valueAttribute() const;
QOpcUa::UaStatusCode attributeError(QOpcUa::NodeAttribute attribute) const;
+ QOpcUa::UaStatusCode valueAttributeError() const;
QDateTime sourceTimestamp(QOpcUa::NodeAttribute attribute) const;
QDateTime serverTimestamp(QOpcUa::NodeAttribute attribute) const;
bool writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined);
bool writeAttributeRange(QOpcUa::NodeAttribute attribute, const QVariant &value,
const QString &indexRange, QOpcUa::Types type = QOpcUa::Types::Undefined);
bool writeAttributes(const AttributeMap &toWrite, QOpcUa::Types valueAttributeType = QOpcUa::Types::Undefined);
+ bool writeValueAttribute(const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined);
bool enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings);
bool disableMonitoring(QOpcUa::NodeAttributes attr);
bool modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, const QVariant &value);
QOpcUaMonitoringParameters monitoringStatus(QOpcUa::NodeAttribute attr);
+ bool modifyEventFilter(const QOpcUaMonitoringParameters::EventFilter &eventFilter);
bool modifyDataChangeFilter(QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::DataChangeFilter &filter);
bool browseChildren(QOpcUa::ReferenceTypeId referenceType = QOpcUa::ReferenceTypeId::HierarchicalReferences,
QOpcUa::NodeClasses nodeClassMask = QOpcUa::NodeClass::Undefined);
QString nodeId() const;
+ QOpcUaClient *client() const;
bool callMethod(const QString &methodNodeId, const QVector<QOpcUa::TypedVariant> &args = QVector<QOpcUa::TypedVariant>());
+ bool resolveBrowsePath(const QVector<QOpcUa::QRelativePathElement> &path);
+
+ bool browse(const QOpcUaBrowseRequest &request);
+
Q_SIGNALS:
void attributeRead(QOpcUa::NodeAttributes attributes);
void attributeWritten(QOpcUa::NodeAttribute attribute, QOpcUa::UaStatusCode statusCode);
+ void dataChangeOccurred(QOpcUa::NodeAttribute attr, QVariant value);
void attributeUpdated(QOpcUa::NodeAttribute attr, QVariant value);
+ void eventOccurred(QVariantList eventFields);
void monitoringStatusChanged(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items,
QOpcUa::UaStatusCode statusCode);
@@ -102,6 +115,8 @@ Q_SIGNALS:
void disableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode);
void methodCallFinished(QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode);
void browseFinished(QVector<QOpcUaReferenceDescription> children, QOpcUa::UaStatusCode statusCode);
+ void resolveBrowsePathFinished(QVector<QOpcUa::QBrowsePathTarget> targets,
+ QVector<QOpcUa::QRelativePathElement> path, QOpcUa::UaStatusCode statusCode);
private:
Q_DISABLE_COPY(QOpcUaNode)
diff --git a/src/opcua/client/qopcuanode_p.h b/src/opcua/client/qopcuanode_p.h
index 4fb2da8..0f752ba 100644
--- a/src/opcua/client/qopcuanode_p.h
+++ b/src/opcua/client/qopcuanode_p.h
@@ -71,42 +71,47 @@ public:
m_attributesReadConnection = QObject::connect(impl, &QOpcUaNodeImpl::attributesRead,
[this](QVector<QOpcUaReadResult> attr, QOpcUa::UaStatusCode serviceResult)
{
+ QOpcUa::NodeAttributes updatedAttributes;
+ Q_Q(QOpcUaNode);
+
for (auto &entry : qAsConst(attr)) {
if (serviceResult == QOpcUa::UaStatusCode::Good)
- m_nodeAttributes[entry.attributeId] = entry;
+ m_nodeAttributes[entry.attribute()] = entry;
else {
QOpcUaReadResult temp = entry;
- temp.statusCode = serviceResult;
- temp.value = QVariant();
- m_nodeAttributes[entry.attributeId] = temp;
+ temp.setStatusCode(serviceResult);
+ temp.setValue(QVariant());
+ m_nodeAttributes[entry.attribute()] = temp;
}
- }
- QOpcUa::NodeAttributes updatedAttributes;
- for (auto &entry : qAsConst(attr))
- updatedAttributes |= entry.attributeId;
+ updatedAttributes |= entry.attribute();
+ emit q->attributeUpdated(entry.attribute(), entry.value());
+ }
- Q_Q(QOpcUaNode);
emit q->attributeRead(updatedAttributes);
});
m_attributeWrittenConnection = QObject::connect(impl, &QOpcUaNodeImpl::attributeWritten,
[this](QOpcUa::NodeAttribute attr, QVariant value, QOpcUa::UaStatusCode statusCode)
{
- m_nodeAttributes[attr].statusCode = statusCode;
- if (statusCode == QOpcUa::UaStatusCode::Good)
- m_nodeAttributes[attr].value = value;
-
+ m_nodeAttributes[attr].setStatusCode(statusCode);
Q_Q(QOpcUaNode);
+
+ if (statusCode == QOpcUa::UaStatusCode::Good) {
+ m_nodeAttributes[attr].setValue(value);
+ emit q->attributeUpdated(attr, value);
+ }
+
emit q->attributeWritten(attr, statusCode);
});
- m_attributeUpdatedConnection = QObject::connect(impl, &QOpcUaNodeImpl::attributeUpdated,
+ m_dataChangeOccurredConnection = QObject::connect(impl, &QOpcUaNodeImpl::dataChangeOccurred,
[this](QOpcUa::NodeAttribute attr, QOpcUaReadResult value)
{
this->m_nodeAttributes[attr] = value;
Q_Q(QOpcUaNode);
- emit q->attributeUpdated(attr, value.value);
+ emit q->dataChangeOccurred(attr, value.value());
+ emit q->attributeUpdated(attr, value.value());
});
m_monitoringEnableDisableConnection = QObject::connect(impl, &QOpcUaNodeImpl::monitoringEnableDisable,
@@ -131,7 +136,7 @@ public:
auto it = m_monitoringStatus.find(attr);
if (param.statusCode() == QOpcUa::UaStatusCode::Good && it != m_monitoringStatus.end()) {
if (items & QOpcUaMonitoringParameters::Parameter::PublishingEnabled)
- it->setPublishingEnabled(param.publishingEnabled());
+ it->setPublishingEnabled(param.isPublishingEnabled());
if (items & QOpcUaMonitoringParameters::Parameter::PublishingInterval)
it->setPublishingInterval(param.publishingInterval());
if (items & QOpcUaMonitoringParameters::Parameter::LifetimeCount)
@@ -144,8 +149,18 @@ public:
it->setPriority(param.priority());
if (items & QOpcUaMonitoringParameters::Parameter::SamplingInterval)
it->setSamplingInterval(param.samplingInterval());
- if (items & QOpcUaMonitoringParameters::Parameter::Filter)
- it->setFilter(param.filter());
+ if (items & QOpcUaMonitoringParameters::Parameter::Filter) {
+ if (param.filter().canConvert<QOpcUaMonitoringParameters::DataChangeFilter>())
+ it->setFilter(param.filter().value<QOpcUaMonitoringParameters::DataChangeFilter>());
+ else if (param.filter().canConvert<QOpcUaMonitoringParameters::EventFilter>())
+ it->setFilter(param.filter().value<QOpcUaMonitoringParameters::EventFilter>());
+ else if (param.filter().isNull())
+ it->clearFilter();
+ if (param.filterResult().canConvert<QOpcUa::QEventFilterResult>())
+ it->setFilterResult(param.filterResult().value<QOpcUa::QEventFilterResult>());
+ else if (param.filterResult().isNull())
+ it->clearFilterResult();
+ }
if (items & QOpcUaMonitoringParameters::Parameter::QueueSize)
it->setQueueSize(param.queueSize());
if (items & QOpcUaMonitoringParameters::Parameter::DiscardOldest)
@@ -172,17 +187,34 @@ public:
Q_Q(QOpcUaNode);
emit q->browseFinished(children, statusCode);
});
+
+ m_resolveBrowsePathFinishedConnection = QObject::connect(impl, &QOpcUaNodeImpl::resolveBrowsePathFinished,
+ [this](QVector<QOpcUa::QBrowsePathTarget> targets, QVector<QOpcUa::QRelativePathElement> path,
+ QOpcUa::UaStatusCode statusCode)
+ {
+ Q_Q(QOpcUaNode);
+ emit q->resolveBrowsePathFinished(targets, path, statusCode);
+ });
+
+ m_eventOccurredConnection = QObject::connect(impl, &QOpcUaNodeImpl::eventOccurred,
+ [this](QVariantList eventFields)
+ {
+ Q_Q(QOpcUaNode);
+ emit q->eventOccurred(eventFields);
+ });
}
~QOpcUaNodePrivate()
{
QObject::disconnect(m_attributesReadConnection);
QObject::disconnect(m_attributeWrittenConnection);
- QObject::disconnect(m_attributeUpdatedConnection);
+ QObject::disconnect(m_dataChangeOccurredConnection);
QObject::disconnect(m_monitoringEnableDisableConnection);
QObject::disconnect(m_monitoringStatusChangedConnection);
QObject::disconnect(m_methodCallFinishedConnection);
QObject::disconnect(m_browseFinishedConnection);
+ QObject::disconnect(m_resolveBrowsePathFinishedConnection);
+ QObject::disconnect(m_eventOccurredConnection);
// Disable remaining monitorings
QOpcUa::NodeAttributes attr;
@@ -203,11 +235,13 @@ public:
QMetaObject::Connection m_attributesReadConnection;
QMetaObject::Connection m_attributeWrittenConnection;
- QMetaObject::Connection m_attributeUpdatedConnection;
+ QMetaObject::Connection m_dataChangeOccurredConnection;
QMetaObject::Connection m_monitoringEnableDisableConnection;
QMetaObject::Connection m_monitoringStatusChangedConnection;
QMetaObject::Connection m_methodCallFinishedConnection;
QMetaObject::Connection m_browseFinishedConnection;
+ QMetaObject::Connection m_resolveBrowsePathFinishedConnection;
+ QMetaObject::Connection m_eventOccurredConnection;
};
QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuanodecreationattributes.cpp b/src/opcua/client/qopcuanodecreationattributes.cpp
new file mode 100644
index 0000000..e9f2127
--- /dev/null
+++ b/src/opcua/client/qopcuanodecreationattributes.cpp
@@ -0,0 +1,767 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qopcuanodecreationattributes.h"
+
+#include "qopcuanodecreationattributes_p.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QOpcUaNodeCreationAttributes
+ \inmodule QtOpcUa
+ \brief This class manages attribute values for node creation.
+
+ This class holds values for node attributes that are passed to the server
+ when creating a new node in the OPC UA address space.
+
+ The following node attributes are supported by the different node classes:
+
+ \table
+ \header
+ \li Attribute
+ \li Object
+ \li Variable
+ \li Method
+ \li ObjectType
+ \li VariableType
+ \li ReferenceType
+ \li DataType
+ \li View
+ \row
+ \li AccessLevel
+ \li
+ \li X
+ \li
+ \li
+ \li
+ \li
+ \li
+ \li
+ \row
+ \li ArrayDimensions
+ \li
+ \li X
+ \li
+ \li
+ \li X
+ \li
+ \li
+ \li
+ \row
+ \li ContainsNoLoops
+ \li
+ \li
+ \li
+ \li
+ \li
+ \li
+ \li
+ \li X
+ \row
+ \li DataType
+ \li
+ \li X
+ \li
+ \li
+ \li X
+ \li
+ \li
+ \li
+ \row
+ \li Description
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \row
+ \li DisplayName
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \row
+ \li EventNotifier
+ \li X
+ \li
+ \li
+ \li
+ \li
+ \li
+ \li
+ \li
+ \row
+ \li Executable
+ \li
+ \li
+ \li X
+ \li
+ \li
+ \li
+ \li
+ \li
+ \row
+ \li Historizing
+ \li
+ \li X
+ \li
+ \li
+ \li
+ \li
+ \li
+ \li
+ \row
+ \li InverseName
+ \li
+ \li
+ \li
+ \li
+ \li
+ \li X
+ \li
+ \li
+ \row
+ \li IsAbstract
+ \li
+ \li
+ \li
+ \li X
+ \li X
+ \li X
+ \li X
+ \li
+ \row
+ \li MinimumSamplingInterval
+ \li
+ \li X
+ \li
+ \li
+ \li
+ \li
+ \li
+ \li
+ \row
+ \li Symmetric
+ \li
+ \li
+ \li
+ \li
+ \li
+ \li X
+ \li
+ \li
+ \row
+ \li UserAccessLevel
+ \li
+ \li X
+ \li
+ \li
+ \li
+ \li
+ \li
+ \li
+ \row
+ \li UserExecutable
+ \li
+ \li
+ \li X
+ \li
+ \li
+ \li
+ \li
+ \li
+ \row
+ \li UserWriteMask
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \row
+ \li Value
+ \li
+ \li X
+ \li
+ \li
+ \li X
+ \li
+ \li
+ \li
+ \row
+ \li ValueRank
+ \li
+ \li X
+ \li
+ \li
+ \li X
+ \li
+ \li
+ \li
+ \row
+ \li WriteMask
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \li X
+ \endtable
+
+ \sa QOpcUaClient::addNode()
+*/
+
+QOpcUaNodeCreationAttributes::QOpcUaNodeCreationAttributes()
+ : data(new QOpcUaNodeCreationAttributesPrivate())
+{}
+
+/*!
+ Constructs a node creation attributes object with the values of \a other.
+*/
+QOpcUaNodeCreationAttributes::QOpcUaNodeCreationAttributes(const QOpcUaNodeCreationAttributes &other)
+ : data(other.data)
+{}
+
+/*!
+ Assigns the value of \a rhs to this node creation attributes object.
+*/
+QOpcUaNodeCreationAttributes &QOpcUaNodeCreationAttributes::operator=(const QOpcUaNodeCreationAttributes &rhs)
+{
+ if (this != &rhs)
+ data = rhs.data;
+ return *this;
+}
+
+QOpcUaNodeCreationAttributes::~QOpcUaNodeCreationAttributes()
+{}
+
+/*!
+ Returns the value for the AccessLevel attribute.
+*/
+QOpcUa::AccessLevel QOpcUaNodeCreationAttributes::accessLevel() const
+{
+ return data->accessLevel;
+}
+
+/*!
+ Sets the value for the AccessLevel attribute to \a accessLevel.
+*/
+void QOpcUaNodeCreationAttributes::setAccessLevel(QOpcUa::AccessLevel accessLevel)
+{
+ data->accessLevel = accessLevel;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::AccessLevel);
+}
+
+/*!
+ Returns \c true if a value for the AccessLevel attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasAccessLevel() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::AccessLevel);
+}
+
+/*!
+ Returns the value for the ArrayDimensions attribute.
+*/
+QVector<quint32> QOpcUaNodeCreationAttributes::arrayDimensions() const
+{
+ return data->arrayDimensions;
+}
+
+/*!
+ Sets the value for the ArrayDimensions attribute to \a arrayDimensions.
+*/
+void QOpcUaNodeCreationAttributes::setArrayDimensions(const QVector<quint32> &arrayDimensions)
+{
+ data->arrayDimensions = arrayDimensions;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::ArrayDimensions);
+}
+
+/*!
+ Returns \c true if a value for the ArrayDimensions attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasArrayDimensions() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::ArrayDimensions);
+}
+
+/*!
+ Returns the value for the ContainsNoLoops attribute.
+*/
+bool QOpcUaNodeCreationAttributes::containsNoLoops() const
+{
+ return data->containsNoLoops;
+}
+
+/*!
+ Sets the value for the ContainsNoLoops attribute to \a containsNoLoops.
+*/
+void QOpcUaNodeCreationAttributes::setContainsNoLoops(bool containsNoLoops)
+{
+ data->containsNoLoops = containsNoLoops;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::ContainsNoLoops);
+}
+
+/*!
+ Returns \c true if a value for the ContainsNoLoops attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasContainsNoLoops() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::ContainsNoLoops);
+}
+
+/*!
+ Returns the value for the DataType attribute.
+*/
+QString QOpcUaNodeCreationAttributes::dataTypeId() const
+{
+ return data->dataTypeId;
+}
+
+/*!
+ Sets the value for the DataType attribute to \a dataTypeId.
+*/
+void QOpcUaNodeCreationAttributes::setDataTypeId(const QString &dataTypeId)
+{
+ data->dataTypeId = dataTypeId;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::DataType);
+}
+
+/*!
+ Returns \c true if a value for the DataType attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasDataTypeId() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::DataType);
+}
+
+/*!
+ Returns the value for the Description attribute.
+*/
+QOpcUa::QLocalizedText QOpcUaNodeCreationAttributes::description() const
+{
+ return data->description;
+}
+
+/*!
+ Sets the value for the Description attribute to \a description.
+*/
+void QOpcUaNodeCreationAttributes::setDescription(const QOpcUa::QLocalizedText &description)
+{
+ data->description = description;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::Description);
+}
+
+/*!
+ Returns \c true if a value for the Description attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasDescription() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::Description);
+}
+
+/*!
+ Returns the value for the DisplayName attribute.
+*/
+QOpcUa::QLocalizedText QOpcUaNodeCreationAttributes::displayName() const
+{
+ return data->displayName;
+}
+
+/*!
+ Sets the value for the DisplayName attribute to \a displayName.
+*/
+void QOpcUaNodeCreationAttributes::setDisplayName(const QOpcUa::QLocalizedText &displayName)
+{
+ data->displayName = displayName;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::DisplayName);
+}
+
+/*!
+ Returns \c true if a value for the DisplayName attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasDisplayName() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::DisplayName);
+}
+
+/*!
+ Returns the value for the EventNotifier attribute.
+*/
+QOpcUa::EventNotifier QOpcUaNodeCreationAttributes::eventNotifier() const
+{
+ return data->eventNotifier;
+}
+
+/*!
+ Sets the value for the EventNotifier attribute to \a eventNotifier.
+*/
+void QOpcUaNodeCreationAttributes::setEventNotifier(QOpcUa::EventNotifier eventNotifier)
+{
+ data->eventNotifier = eventNotifier;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::EventNotifier);
+}
+
+/*!
+ Returns \c true if a value for the EventNotifier attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasEventNotifier() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::EventNotifier);
+}
+
+/*!
+ Returns the value for the Executable attribute.
+*/
+bool QOpcUaNodeCreationAttributes::executable() const
+{
+ return data->executable;
+}
+
+/*!
+ Sets the value for the Executable attribute to \a executable.
+*/
+void QOpcUaNodeCreationAttributes::setExecutable(bool executable)
+{
+ data->executable = executable;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::Executable);
+}
+
+/*!
+ Returns \c true if a value for the Executable attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasExecutable() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::Executable);
+}
+
+/*!
+ Returns the value for the Historizing attribute.
+*/
+bool QOpcUaNodeCreationAttributes::historizing() const
+{
+ return data->historizing;
+}
+
+/*!
+ Sets the value for the Historizing attribute to \a historizing.
+*/
+void QOpcUaNodeCreationAttributes::setHistorizing(bool historizing)
+{
+ data->historizing = historizing;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::Historizing);
+}
+
+/*!
+ Returns \c true if a value for the Historizing attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasHistorizing() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::Historizing);
+}
+
+/*!
+ Returns the value for the InverseName attribute.
+*/
+QOpcUa::QLocalizedText QOpcUaNodeCreationAttributes::inverseName() const
+{
+ return data->inverseName;
+}
+
+/*!
+ Sets the value for the InverseName attribute to \a inverseName.
+*/
+void QOpcUaNodeCreationAttributes::setInverseName(const QOpcUa::QLocalizedText &inverseName)
+{
+ data->inverseName = inverseName;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::InverseName);
+}
+
+/*!
+ Returns \c true if a value for the InverseName attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasInverseName() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::InverseName);
+}
+
+/*!
+ Returns the value for the IsAbstract attribute.
+*/
+bool QOpcUaNodeCreationAttributes::isAbstract() const
+{
+ return data->isAbstract;
+}
+
+/*!
+ Sets the value for the IsAbstract attribute to \a isAbstract.
+*/
+void QOpcUaNodeCreationAttributes::setIsAbstract(bool isAbstract)
+{
+ data->isAbstract = isAbstract;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::IsAbstract);
+}
+
+/*!
+ Returns \c true if a value for the IsAbstract attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasIsAbstract() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::IsAbstract);
+}
+
+/*!
+ Returns the value for the MinimumSamplingInterval attribute.
+*/
+double QOpcUaNodeCreationAttributes::minimumSamplingInterval() const
+{
+ return data->minimumSamplingInterval;
+}
+
+/*!
+ Sets the value for the MinimumSamplingInterval attribute to \a minimumSamplingInterval.
+*/
+void QOpcUaNodeCreationAttributes::setMinimumSamplingInterval(double minimumSamplingInterval)
+{
+ data->minimumSamplingInterval = minimumSamplingInterval;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::MinimumSamplingInterval);
+}
+
+/*!
+ Returns \c true if a value for the MinimumSamplingInterval attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasMinimumSamplingInterval() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::MinimumSamplingInterval);
+}
+
+/*!
+ Returns the value for the Symmetric attribute.
+*/
+bool QOpcUaNodeCreationAttributes::symmetric() const
+{
+ return data->symmetric;
+}
+
+/*!
+ Sets the value for the Symmetric attribute to \a symmetric.
+*/
+void QOpcUaNodeCreationAttributes::setSymmetric(bool symmetric)
+{
+ data->symmetric = symmetric;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::Symmetric);
+}
+
+/*!
+ Returns \c true if a value for the Symmetric attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasSymmetric() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::Symmetric);
+}
+
+/*!
+ Returns the value for the UserAccessLevel attribute.
+*/
+QOpcUa::AccessLevel QOpcUaNodeCreationAttributes::userAccessLevel() const
+{
+ return data->userAccessLevel;
+}
+
+/*!
+ Sets the value for the UserAccessLevel attribute to \a userAccessLevel.
+*/
+void QOpcUaNodeCreationAttributes::setUserAccessLevel(QOpcUa::AccessLevel userAccessLevel)
+{
+ data->userAccessLevel = userAccessLevel;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::UserAccessLevel);
+}
+
+/*!
+ Returns \c true if a value for the UserAccessLevel attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasUserAccessLevel() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::UserAccessLevel);
+}
+
+/*!
+ Returns the value for the UserExecutable attribute.
+*/
+bool QOpcUaNodeCreationAttributes::userExecutable() const
+{
+ return data->userExecutable;
+}
+
+/*!
+ Sets the value for the UserExecutable attribute to \a userExecutable.
+*/
+void QOpcUaNodeCreationAttributes::setUserExecutable(bool userExecutable)
+{
+ data->userExecutable = userExecutable;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::UserExecutable);
+}
+
+/*!
+ Returns \c true if a value for the UserExecutable attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasUserExecutable() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::UserExecutable);
+}
+
+/*!
+ Returns the value for the UserWriteMask attribute.
+*/
+QOpcUa::WriteMask QOpcUaNodeCreationAttributes::userWriteMask() const
+{
+ return data->userWriteMask;
+}
+
+/*!
+ Sets the value for the UserWriteMask attribute to \a userWriteMask.
+*/
+void QOpcUaNodeCreationAttributes::setUserWriteMask(QOpcUa::WriteMask userWriteMask)
+{
+ data->userWriteMask = userWriteMask;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::UserWriteMask);
+}
+
+/*!
+ Returns \c true if a value for the UserWriteMask attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasUserWriteMask() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::UserWriteMask);
+}
+
+/*!
+ Returns the value for the ValueRank attribute.
+*/
+qint32 QOpcUaNodeCreationAttributes::valueRank() const
+{
+ return data->valueRank;
+}
+
+/*!
+ Sets the value for the ValueRank attribute to \a valueRank.
+*/
+void QOpcUaNodeCreationAttributes::setValueRank(qint32 valueRank)
+{
+ data->valueRank = valueRank;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::ValueRank);
+}
+
+/*!
+ Returns \c true if a value for the ValueRank attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasValueRank() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::ValueRank);
+}
+
+/*!
+ Returns the value for the WriteMask attribute.
+*/
+QOpcUa::WriteMask QOpcUaNodeCreationAttributes::writeMask() const
+{
+ return data->writeMask;
+}
+
+/*!
+ Sets the value for the WriteMask attribute to \a writeMask.
+*/
+void QOpcUaNodeCreationAttributes::setWriteMask(QOpcUa::WriteMask writeMask)
+{
+ data->writeMask = writeMask;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::WriteMask);
+}
+
+/*!
+ Returns \c true if a value for the WriteMask attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasWriteMask() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::WriteMask);
+}
+
+/*!
+ Returns the value for the Value attribute.
+*/
+QVariant QOpcUaNodeCreationAttributes::value() const
+{
+ return data->value;
+}
+
+/*!
+ Sets the value for the Value attribute to \a value of type \a type.
+*/
+void QOpcUaNodeCreationAttributes::setValue(const QVariant &value, QOpcUa::Types type)
+{
+ data->value = value;
+ data->valueType = type;
+ data->setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask::Value);
+}
+
+/*!
+ Returns \c true if a value for the Value attribute is set.
+*/
+bool QOpcUaNodeCreationAttributes::hasValue() const
+{
+ return data->attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask::Value);
+}
+
+/*!
+ Returns the type of the value attribute.
+*/
+QOpcUa::Types QOpcUaNodeCreationAttributes::valueType() const
+{
+ return data->valueType;
+}
+
+QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuanodecreationattributes.h b/src/opcua/client/qopcuanodecreationattributes.h
new file mode 100644
index 0000000..a0d4746
--- /dev/null
+++ b/src/opcua/client/qopcuanodecreationattributes.h
@@ -0,0 +1,143 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOPCUANODECREATIONATTRIBUTES_H
+#define QOPCUANODECREATIONATTRIBUTES_H
+
+#include <QtOpcUa/qopcuatype.h>
+
+#include <QtCore/qshareddata.h>
+
+QT_BEGIN_NAMESPACE
+
+class QOpcUaNodeCreationAttributesPrivate;
+
+class Q_OPCUA_EXPORT QOpcUaNodeCreationAttributes
+{
+public:
+ QOpcUaNodeCreationAttributes();
+ QOpcUaNodeCreationAttributes(const QOpcUaNodeCreationAttributes &other);
+ QOpcUaNodeCreationAttributes &operator=(const QOpcUaNodeCreationAttributes &rhs);
+
+ ~QOpcUaNodeCreationAttributes();
+
+ QOpcUa::AccessLevel accessLevel() const;
+ void setAccessLevel(QOpcUa::AccessLevel accessLevel);
+ bool hasAccessLevel() const;
+
+ QVector<quint32> arrayDimensions() const;
+ void setArrayDimensions(const QVector<quint32> &arrayDimensions);
+ bool hasArrayDimensions() const;
+
+ bool containsNoLoops() const;
+ void setContainsNoLoops(bool containsNoLoops);
+ bool hasContainsNoLoops() const;
+
+ QString dataTypeId() const;
+ void setDataTypeId(const QString &dataTypeId);
+ bool hasDataTypeId() const;
+
+ QOpcUa::QLocalizedText description() const;
+ void setDescription(const QOpcUa::QLocalizedText &description);
+ bool hasDescription() const;
+
+ QOpcUa::QLocalizedText displayName() const;
+ void setDisplayName(const QOpcUa::QLocalizedText &displayName);
+ bool hasDisplayName() const;
+
+ QOpcUa::EventNotifier eventNotifier() const;
+ void setEventNotifier(QOpcUa::EventNotifier eventNotifier);
+ bool hasEventNotifier() const;
+
+ bool executable() const;
+ void setExecutable(bool executable);
+ bool hasExecutable() const;
+
+ bool historizing() const;
+ void setHistorizing(bool historizing);
+ bool hasHistorizing() const;
+
+ QOpcUa::QLocalizedText inverseName() const;
+ void setInverseName(const QOpcUa::QLocalizedText &inverseName);
+ bool hasInverseName() const;
+
+ bool isAbstract() const;
+ void setIsAbstract(bool isAbstract);
+ bool hasIsAbstract() const;
+
+ double minimumSamplingInterval() const;
+ void setMinimumSamplingInterval(double minimumSamplingInterval);
+ bool hasMinimumSamplingInterval() const;
+
+ bool symmetric() const;
+ void setSymmetric(bool symmetric);
+ bool hasSymmetric() const;
+
+ QOpcUa::AccessLevel userAccessLevel() const;
+ void setUserAccessLevel(QOpcUa::AccessLevel userAccessLevel);
+ bool hasUserAccessLevel() const;
+
+ bool userExecutable() const;
+ void setUserExecutable(bool userExecutable);
+ bool hasUserExecutable() const;
+
+ QOpcUa::WriteMask userWriteMask() const;
+ void setUserWriteMask(QOpcUa::WriteMask userWriteMask);
+ bool hasUserWriteMask() const;
+
+ qint32 valueRank() const;
+ void setValueRank(qint32 valueRank);
+ bool hasValueRank() const;
+
+ QOpcUa::WriteMask writeMask() const;
+ void setWriteMask(QOpcUa::WriteMask writeMask);
+ bool hasWriteMask() const;
+
+ QVariant value() const;
+ void setValue(const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined);
+ bool hasValue() const;
+
+ QOpcUa::Types valueType() const;
+
+private:
+ QSharedDataPointer<QOpcUaNodeCreationAttributesPrivate> data;
+};
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QOpcUaNodeCreationAttributes)
+
+#endif // QOPCUANODECREATIONATTRIBUTES_H
diff --git a/src/opcua/client/qopcuanodecreationattributes_p.h b/src/opcua/client/qopcuanodecreationattributes_p.h
new file mode 100644
index 0000000..8434175
--- /dev/null
+++ b/src/opcua/client/qopcuanodecreationattributes_p.h
@@ -0,0 +1,124 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOPCUANODECREATIONATTRIBUTES_P_H
+#define QOPCUANODECREATIONATTRIBUTES_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qopcuatype.h"
+
+#include <QSharedData>
+
+QT_BEGIN_NAMESPACE
+
+class QOpcUaNodeCreationAttributesPrivate : public QSharedData
+{
+public:
+ QOpcUaNodeCreationAttributesPrivate()
+ : mask(0)
+ {}
+
+ // Bit positions from OPC-UA part 4, 7.19.1
+ enum class BitMask : quint32 {
+ AccessLevel = 0,
+ ArrayDimensions = 1,
+ ContainsNoLoops = 3,
+ DataType = 4,
+ Description = 5,
+ DisplayName = 6,
+ EventNotifier = 7,
+ Executable = 8,
+ Historizing = 9,
+ InverseName = 10,
+ IsAbstract = 11,
+ MinimumSamplingInterval = 12,
+ Symmetric = 15,
+ UserAccessLevel = 16,
+ UserExecutable = 17,
+ UserWriteMask = 18,
+ ValueRank = 19,
+ WriteMask = 20,
+ Value = 21
+ };
+
+ void setAttributeInMask(QOpcUaNodeCreationAttributesPrivate::BitMask attribute)
+ {
+ const quint32 position = static_cast<quint32>(attribute);
+ mask |= (1 << position);
+ }
+
+ bool attributeSet(QOpcUaNodeCreationAttributesPrivate::BitMask attribute) const
+ {
+ const quint32 position = static_cast<quint32>(attribute);
+ return mask & (1 << position);
+ }
+
+ quint32 mask {0};
+ QOpcUa::AccessLevel accessLevel {QOpcUa::AccessLevelBit::None};
+ QVector<quint32> arrayDimensions;
+ bool containsNoLoops {false};
+ QString dataTypeId;
+ QOpcUa::QLocalizedText description;
+ QOpcUa::QLocalizedText displayName;
+ QOpcUa::EventNotifier eventNotifier {QOpcUa::EventNotifierBit::None};
+ bool executable {false};
+ bool historizing {false};
+ QOpcUa::QLocalizedText inverseName;
+ bool isAbstract {false};
+ double minimumSamplingInterval {0};
+ bool symmetric {false};
+ QOpcUa::AccessLevel userAccessLevel {QOpcUa::AccessLevelBit::None};
+ bool userExecutable {false};
+ QOpcUa::WriteMask userWriteMask {QOpcUa::WriteMaskBit::None};
+ qint32 valueRank {0};
+ QOpcUa::WriteMask writeMask {QOpcUa::WriteMaskBit::None};
+ QVariant value;
+ QOpcUa::Types valueType {QOpcUa::Types::Undefined};
+};
+
+QT_END_NAMESPACE
+
+#endif // QOPCUANODECREATIONATTRIBUTES_P_H
diff --git a/src/opcua/client/qopcuanodeids.cpp b/src/opcua/client/qopcuanodeids.cpp
new file mode 100644
index 0000000..707e214
--- /dev/null
+++ b/src/opcua/client/qopcuanodeids.cpp
@@ -0,0 +1,5811 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qopcuanodeids.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \namespace QOpcUa::NodeIds
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuanodeids.h
+ \brief This namespace contains enums with known node ids.
+*/
+
+/*!
+ \enum QOpcUa::NodeIds::Namespace0
+
+ Contains all numeric node identifiers from namespace 0 defined in the OPC Foundation's
+ \l {https://opcfoundation.org/UA/schemas/1.03/NodeIds.csv} {NodeIds.csv} file.
+
+ The values in this enum follow the naming from the CSV file and can be converted between
+ enum and node id string using \l QOpcUa::namespace0Id() and \l QOpcUa::namespace0IdFromNodeId().
+ \l QOpcUa::namespace0IdName() provides a conversion from enum value to the name string from the CSV file.
+
+ \code
+ QScopedPointer<QOpcUaNode> rootNode(client->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::RootFolder)));
+ \endcode
+
+ \value Unknown
+ \value Boolean
+ \value SByte
+ \value Byte
+ \value Int16
+ \value UInt16
+ \value Int32
+ \value UInt32
+ \value Int64
+ \value UInt64
+ \value Float
+ \value Double
+ \value String
+ \value DateTime
+ \value Guid
+ \value ByteString
+ \value XmlElement
+ \value NodeId
+ \value ExpandedNodeId
+ \value StatusCode
+ \value QualifiedName
+ \value LocalizedText
+ \value Structure
+ \value DataValue
+ \value BaseDataType
+ \value DiagnosticInfo
+ \value Number
+ \value Integer
+ \value UInteger
+ \value Enumeration
+ \value Image
+ \value References
+ \value NonHierarchicalReferences
+ \value HierarchicalReferences
+ \value HasChild
+ \value Organizes
+ \value HasEventSource
+ \value HasModellingRule
+ \value HasEncoding
+ \value HasDescription
+ \value HasTypeDefinition
+ \value GeneratesEvent
+ \value Aggregates
+ \value HasSubtype
+ \value HasProperty
+ \value HasComponent
+ \value HasNotifier
+ \value HasOrderedComponent
+ \value FromState
+ \value ToState
+ \value HasCause
+ \value HasEffect
+ \value HasHistoricalConfiguration
+ \value BaseObjectType
+ \value FolderType
+ \value BaseVariableType
+ \value BaseDataVariableType
+ \value PropertyType
+ \value DataTypeDescriptionType
+ \value DataTypeDictionaryType
+ \value DataTypeSystemType
+ \value DataTypeEncodingType
+ \value ModellingRuleType
+ \value ModellingRule_Mandatory
+ \value ModellingRule_MandatoryShared
+ \value ModellingRule_Optional
+ \value ModellingRule_ExposesItsArray
+ \value RootFolder
+ \value ObjectsFolder
+ \value TypesFolder
+ \value ViewsFolder
+ \value ObjectTypesFolder
+ \value VariableTypesFolder
+ \value DataTypesFolder
+ \value ReferenceTypesFolder
+ \value XmlSchema_TypeSystem
+ \value OPCBinarySchema_TypeSystem
+ \value DataTypeDescriptionType_DataTypeVersion
+ \value DataTypeDescriptionType_DictionaryFragment
+ \value DataTypeDictionaryType_DataTypeVersion
+ \value DataTypeDictionaryType_NamespaceUri
+ \value ModellingRuleType_NamingRule
+ \value ModellingRule_Mandatory_NamingRule
+ \value ModellingRule_Optional_NamingRule
+ \value ModellingRule_ExposesItsArray_NamingRule
+ \value ModellingRule_MandatoryShared_NamingRule
+ \value HasSubStateMachine
+ \value NamingRuleType
+ \value Decimal128
+ \value IdType
+ \value NodeClass
+ \value Node
+ \value Node_Encoding_DefaultXml
+ \value Node_Encoding_DefaultBinary
+ \value ObjectNode
+ \value ObjectNode_Encoding_DefaultXml
+ \value ObjectNode_Encoding_DefaultBinary
+ \value ObjectTypeNode
+ \value ObjectTypeNode_Encoding_DefaultXml
+ \value ObjectTypeNode_Encoding_DefaultBinary
+ \value VariableNode
+ \value VariableNode_Encoding_DefaultXml
+ \value VariableNode_Encoding_DefaultBinary
+ \value VariableTypeNode
+ \value VariableTypeNode_Encoding_DefaultXml
+ \value VariableTypeNode_Encoding_DefaultBinary
+ \value ReferenceTypeNode
+ \value ReferenceTypeNode_Encoding_DefaultXml
+ \value ReferenceTypeNode_Encoding_DefaultBinary
+ \value MethodNode
+ \value MethodNode_Encoding_DefaultXml
+ \value MethodNode_Encoding_DefaultBinary
+ \value ViewNode
+ \value ViewNode_Encoding_DefaultXml
+ \value ViewNode_Encoding_DefaultBinary
+ \value DataTypeNode
+ \value DataTypeNode_Encoding_DefaultXml
+ \value DataTypeNode_Encoding_DefaultBinary
+ \value ReferenceNode
+ \value ReferenceNode_Encoding_DefaultXml
+ \value ReferenceNode_Encoding_DefaultBinary
+ \value IntegerId
+ \value Counter
+ \value Duration
+ \value NumericRange
+ \value Time
+ \value Date
+ \value UtcTime
+ \value LocaleId
+ \value Argument
+ \value Argument_Encoding_DefaultXml
+ \value Argument_Encoding_DefaultBinary
+ \value StatusResult
+ \value StatusResult_Encoding_DefaultXml
+ \value StatusResult_Encoding_DefaultBinary
+ \value MessageSecurityMode
+ \value UserTokenType
+ \value UserTokenPolicy
+ \value UserTokenPolicy_Encoding_DefaultXml
+ \value UserTokenPolicy_Encoding_DefaultBinary
+ \value ApplicationType
+ \value ApplicationDescription
+ \value ApplicationDescription_Encoding_DefaultXml
+ \value ApplicationDescription_Encoding_DefaultBinary
+ \value ApplicationInstanceCertificate
+ \value EndpointDescription
+ \value EndpointDescription_Encoding_DefaultXml
+ \value EndpointDescription_Encoding_DefaultBinary
+ \value SecurityTokenRequestType
+ \value UserIdentityToken
+ \value UserIdentityToken_Encoding_DefaultXml
+ \value UserIdentityToken_Encoding_DefaultBinary
+ \value AnonymousIdentityToken
+ \value AnonymousIdentityToken_Encoding_DefaultXml
+ \value AnonymousIdentityToken_Encoding_DefaultBinary
+ \value UserNameIdentityToken
+ \value UserNameIdentityToken_Encoding_DefaultXml
+ \value UserNameIdentityToken_Encoding_DefaultBinary
+ \value X509IdentityToken
+ \value X509IdentityToken_Encoding_DefaultXml
+ \value X509IdentityToken_Encoding_DefaultBinary
+ \value EndpointConfiguration
+ \value EndpointConfiguration_Encoding_DefaultXml
+ \value EndpointConfiguration_Encoding_DefaultBinary
+ \value BuildInfo
+ \value BuildInfo_Encoding_DefaultXml
+ \value BuildInfo_Encoding_DefaultBinary
+ \value SignedSoftwareCertificate
+ \value SignedSoftwareCertificate_Encoding_DefaultXml
+ \value SignedSoftwareCertificate_Encoding_DefaultBinary
+ \value AttributeWriteMask
+ \value NodeAttributesMask
+ \value NodeAttributes
+ \value NodeAttributes_Encoding_DefaultXml
+ \value NodeAttributes_Encoding_DefaultBinary
+ \value ObjectAttributes
+ \value ObjectAttributes_Encoding_DefaultXml
+ \value ObjectAttributes_Encoding_DefaultBinary
+ \value VariableAttributes
+ \value VariableAttributes_Encoding_DefaultXml
+ \value VariableAttributes_Encoding_DefaultBinary
+ \value MethodAttributes
+ \value MethodAttributes_Encoding_DefaultXml
+ \value MethodAttributes_Encoding_DefaultBinary
+ \value ObjectTypeAttributes
+ \value ObjectTypeAttributes_Encoding_DefaultXml
+ \value ObjectTypeAttributes_Encoding_DefaultBinary
+ \value VariableTypeAttributes
+ \value VariableTypeAttributes_Encoding_DefaultXml
+ \value VariableTypeAttributes_Encoding_DefaultBinary
+ \value ReferenceTypeAttributes
+ \value ReferenceTypeAttributes_Encoding_DefaultXml
+ \value ReferenceTypeAttributes_Encoding_DefaultBinary
+ \value DataTypeAttributes
+ \value DataTypeAttributes_Encoding_DefaultXml
+ \value DataTypeAttributes_Encoding_DefaultBinary
+ \value ViewAttributes
+ \value ViewAttributes_Encoding_DefaultXml
+ \value ViewAttributes_Encoding_DefaultBinary
+ \value AddNodesItem
+ \value AddNodesItem_Encoding_DefaultXml
+ \value AddNodesItem_Encoding_DefaultBinary
+ \value AddReferencesItem
+ \value AddReferencesItem_Encoding_DefaultXml
+ \value AddReferencesItem_Encoding_DefaultBinary
+ \value DeleteNodesItem
+ \value DeleteNodesItem_Encoding_DefaultXml
+ \value DeleteNodesItem_Encoding_DefaultBinary
+ \value DeleteReferencesItem
+ \value DeleteReferencesItem_Encoding_DefaultXml
+ \value DeleteReferencesItem_Encoding_DefaultBinary
+ \value SessionAuthenticationToken
+ \value RequestHeader
+ \value RequestHeader_Encoding_DefaultXml
+ \value RequestHeader_Encoding_DefaultBinary
+ \value ResponseHeader
+ \value ResponseHeader_Encoding_DefaultXml
+ \value ResponseHeader_Encoding_DefaultBinary
+ \value ServiceFault
+ \value ServiceFault_Encoding_DefaultXml
+ \value ServiceFault_Encoding_DefaultBinary
+ \value FindServersRequest
+ \value FindServersRequest_Encoding_DefaultXml
+ \value FindServersRequest_Encoding_DefaultBinary
+ \value FindServersResponse
+ \value FindServersResponse_Encoding_DefaultXml
+ \value FindServersResponse_Encoding_DefaultBinary
+ \value GetEndpointsRequest
+ \value GetEndpointsRequest_Encoding_DefaultXml
+ \value GetEndpointsRequest_Encoding_DefaultBinary
+ \value GetEndpointsResponse
+ \value GetEndpointsResponse_Encoding_DefaultXml
+ \value GetEndpointsResponse_Encoding_DefaultBinary
+ \value RegisteredServer
+ \value RegisteredServer_Encoding_DefaultXml
+ \value RegisteredServer_Encoding_DefaultBinary
+ \value RegisterServerRequest
+ \value RegisterServerRequest_Encoding_DefaultXml
+ \value RegisterServerRequest_Encoding_DefaultBinary
+ \value RegisterServerResponse
+ \value RegisterServerResponse_Encoding_DefaultXml
+ \value RegisterServerResponse_Encoding_DefaultBinary
+ \value ChannelSecurityToken
+ \value ChannelSecurityToken_Encoding_DefaultXml
+ \value ChannelSecurityToken_Encoding_DefaultBinary
+ \value OpenSecureChannelRequest
+ \value OpenSecureChannelRequest_Encoding_DefaultXml
+ \value OpenSecureChannelRequest_Encoding_DefaultBinary
+ \value OpenSecureChannelResponse
+ \value OpenSecureChannelResponse_Encoding_DefaultXml
+ \value OpenSecureChannelResponse_Encoding_DefaultBinary
+ \value CloseSecureChannelRequest
+ \value CloseSecureChannelRequest_Encoding_DefaultXml
+ \value CloseSecureChannelRequest_Encoding_DefaultBinary
+ \value CloseSecureChannelResponse
+ \value CloseSecureChannelResponse_Encoding_DefaultXml
+ \value CloseSecureChannelResponse_Encoding_DefaultBinary
+ \value SignatureData
+ \value SignatureData_Encoding_DefaultXml
+ \value SignatureData_Encoding_DefaultBinary
+ \value CreateSessionRequest
+ \value CreateSessionRequest_Encoding_DefaultXml
+ \value CreateSessionRequest_Encoding_DefaultBinary
+ \value CreateSessionResponse
+ \value CreateSessionResponse_Encoding_DefaultXml
+ \value CreateSessionResponse_Encoding_DefaultBinary
+ \value ActivateSessionRequest
+ \value ActivateSessionRequest_Encoding_DefaultXml
+ \value ActivateSessionRequest_Encoding_DefaultBinary
+ \value ActivateSessionResponse
+ \value ActivateSessionResponse_Encoding_DefaultXml
+ \value ActivateSessionResponse_Encoding_DefaultBinary
+ \value CloseSessionRequest
+ \value CloseSessionRequest_Encoding_DefaultXml
+ \value CloseSessionRequest_Encoding_DefaultBinary
+ \value CloseSessionResponse
+ \value CloseSessionResponse_Encoding_DefaultXml
+ \value CloseSessionResponse_Encoding_DefaultBinary
+ \value CancelRequest
+ \value CancelRequest_Encoding_DefaultXml
+ \value CancelRequest_Encoding_DefaultBinary
+ \value CancelResponse
+ \value CancelResponse_Encoding_DefaultXml
+ \value CancelResponse_Encoding_DefaultBinary
+ \value AddNodesResult
+ \value AddNodesResult_Encoding_DefaultXml
+ \value AddNodesResult_Encoding_DefaultBinary
+ \value AddNodesRequest
+ \value AddNodesRequest_Encoding_DefaultXml
+ \value AddNodesRequest_Encoding_DefaultBinary
+ \value AddNodesResponse
+ \value AddNodesResponse_Encoding_DefaultXml
+ \value AddNodesResponse_Encoding_DefaultBinary
+ \value AddReferencesRequest
+ \value AddReferencesRequest_Encoding_DefaultXml
+ \value AddReferencesRequest_Encoding_DefaultBinary
+ \value AddReferencesResponse
+ \value AddReferencesResponse_Encoding_DefaultXml
+ \value AddReferencesResponse_Encoding_DefaultBinary
+ \value DeleteNodesRequest
+ \value DeleteNodesRequest_Encoding_DefaultXml
+ \value DeleteNodesRequest_Encoding_DefaultBinary
+ \value DeleteNodesResponse
+ \value DeleteNodesResponse_Encoding_DefaultXml
+ \value DeleteNodesResponse_Encoding_DefaultBinary
+ \value DeleteReferencesRequest
+ \value DeleteReferencesRequest_Encoding_DefaultXml
+ \value DeleteReferencesRequest_Encoding_DefaultBinary
+ \value DeleteReferencesResponse
+ \value DeleteReferencesResponse_Encoding_DefaultXml
+ \value DeleteReferencesResponse_Encoding_DefaultBinary
+ \value BrowseDirection
+ \value ViewDescription
+ \value ViewDescription_Encoding_DefaultXml
+ \value ViewDescription_Encoding_DefaultBinary
+ \value BrowseDescription
+ \value BrowseDescription_Encoding_DefaultXml
+ \value BrowseDescription_Encoding_DefaultBinary
+ \value BrowseResultMask
+ \value ReferenceDescription
+ \value ReferenceDescription_Encoding_DefaultXml
+ \value ReferenceDescription_Encoding_DefaultBinary
+ \value ContinuationPoint
+ \value BrowseResult
+ \value BrowseResult_Encoding_DefaultXml
+ \value BrowseResult_Encoding_DefaultBinary
+ \value BrowseRequest
+ \value BrowseRequest_Encoding_DefaultXml
+ \value BrowseRequest_Encoding_DefaultBinary
+ \value BrowseResponse
+ \value BrowseResponse_Encoding_DefaultXml
+ \value BrowseResponse_Encoding_DefaultBinary
+ \value BrowseNextRequest
+ \value BrowseNextRequest_Encoding_DefaultXml
+ \value BrowseNextRequest_Encoding_DefaultBinary
+ \value BrowseNextResponse
+ \value BrowseNextResponse_Encoding_DefaultXml
+ \value BrowseNextResponse_Encoding_DefaultBinary
+ \value RelativePathElement
+ \value RelativePathElement_Encoding_DefaultXml
+ \value RelativePathElement_Encoding_DefaultBinary
+ \value RelativePath
+ \value RelativePath_Encoding_DefaultXml
+ \value RelativePath_Encoding_DefaultBinary
+ \value BrowsePath
+ \value BrowsePath_Encoding_DefaultXml
+ \value BrowsePath_Encoding_DefaultBinary
+ \value BrowsePathTarget
+ \value BrowsePathTarget_Encoding_DefaultXml
+ \value BrowsePathTarget_Encoding_DefaultBinary
+ \value BrowsePathResult
+ \value BrowsePathResult_Encoding_DefaultXml
+ \value BrowsePathResult_Encoding_DefaultBinary
+ \value TranslateBrowsePathsToNodeIdsRequest
+ \value TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml
+ \value TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary
+ \value TranslateBrowsePathsToNodeIdsResponse
+ \value TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml
+ \value TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary
+ \value RegisterNodesRequest
+ \value RegisterNodesRequest_Encoding_DefaultXml
+ \value RegisterNodesRequest_Encoding_DefaultBinary
+ \value RegisterNodesResponse
+ \value RegisterNodesResponse_Encoding_DefaultXml
+ \value RegisterNodesResponse_Encoding_DefaultBinary
+ \value UnregisterNodesRequest
+ \value UnregisterNodesRequest_Encoding_DefaultXml
+ \value UnregisterNodesRequest_Encoding_DefaultBinary
+ \value UnregisterNodesResponse
+ \value UnregisterNodesResponse_Encoding_DefaultXml
+ \value UnregisterNodesResponse_Encoding_DefaultBinary
+ \value QueryDataDescription
+ \value QueryDataDescription_Encoding_DefaultXml
+ \value QueryDataDescription_Encoding_DefaultBinary
+ \value NodeTypeDescription
+ \value NodeTypeDescription_Encoding_DefaultXml
+ \value NodeTypeDescription_Encoding_DefaultBinary
+ \value FilterOperator
+ \value QueryDataSet
+ \value QueryDataSet_Encoding_DefaultXml
+ \value QueryDataSet_Encoding_DefaultBinary
+ \value NodeReference
+ \value NodeReference_Encoding_DefaultXml
+ \value NodeReference_Encoding_DefaultBinary
+ \value ContentFilterElement
+ \value ContentFilterElement_Encoding_DefaultXml
+ \value ContentFilterElement_Encoding_DefaultBinary
+ \value ContentFilter
+ \value ContentFilter_Encoding_DefaultXml
+ \value ContentFilter_Encoding_DefaultBinary
+ \value FilterOperand
+ \value FilterOperand_Encoding_DefaultXml
+ \value FilterOperand_Encoding_DefaultBinary
+ \value ElementOperand
+ \value ElementOperand_Encoding_DefaultXml
+ \value ElementOperand_Encoding_DefaultBinary
+ \value LiteralOperand
+ \value LiteralOperand_Encoding_DefaultXml
+ \value LiteralOperand_Encoding_DefaultBinary
+ \value AttributeOperand
+ \value AttributeOperand_Encoding_DefaultXml
+ \value AttributeOperand_Encoding_DefaultBinary
+ \value SimpleAttributeOperand
+ \value SimpleAttributeOperand_Encoding_DefaultXml
+ \value SimpleAttributeOperand_Encoding_DefaultBinary
+ \value ContentFilterElementResult
+ \value ContentFilterElementResult_Encoding_DefaultXml
+ \value ContentFilterElementResult_Encoding_DefaultBinary
+ \value ContentFilterResult
+ \value ContentFilterResult_Encoding_DefaultXml
+ \value ContentFilterResult_Encoding_DefaultBinary
+ \value ParsingResult
+ \value ParsingResult_Encoding_DefaultXml
+ \value ParsingResult_Encoding_DefaultBinary
+ \value QueryFirstRequest
+ \value QueryFirstRequest_Encoding_DefaultXml
+ \value QueryFirstRequest_Encoding_DefaultBinary
+ \value QueryFirstResponse
+ \value QueryFirstResponse_Encoding_DefaultXml
+ \value QueryFirstResponse_Encoding_DefaultBinary
+ \value QueryNextRequest
+ \value QueryNextRequest_Encoding_DefaultXml
+ \value QueryNextRequest_Encoding_DefaultBinary
+ \value QueryNextResponse
+ \value QueryNextResponse_Encoding_DefaultXml
+ \value QueryNextResponse_Encoding_DefaultBinary
+ \value TimestampsToReturn
+ \value ReadValueId
+ \value ReadValueId_Encoding_DefaultXml
+ \value ReadValueId_Encoding_DefaultBinary
+ \value ReadRequest
+ \value ReadRequest_Encoding_DefaultXml
+ \value ReadRequest_Encoding_DefaultBinary
+ \value ReadResponse
+ \value ReadResponse_Encoding_DefaultXml
+ \value ReadResponse_Encoding_DefaultBinary
+ \value HistoryReadValueId
+ \value HistoryReadValueId_Encoding_DefaultXml
+ \value HistoryReadValueId_Encoding_DefaultBinary
+ \value HistoryReadResult
+ \value HistoryReadResult_Encoding_DefaultXml
+ \value HistoryReadResult_Encoding_DefaultBinary
+ \value HistoryReadDetails
+ \value HistoryReadDetails_Encoding_DefaultXml
+ \value HistoryReadDetails_Encoding_DefaultBinary
+ \value ReadEventDetails
+ \value ReadEventDetails_Encoding_DefaultXml
+ \value ReadEventDetails_Encoding_DefaultBinary
+ \value ReadRawModifiedDetails
+ \value ReadRawModifiedDetails_Encoding_DefaultXml
+ \value ReadRawModifiedDetails_Encoding_DefaultBinary
+ \value ReadProcessedDetails
+ \value ReadProcessedDetails_Encoding_DefaultXml
+ \value ReadProcessedDetails_Encoding_DefaultBinary
+ \value ReadAtTimeDetails
+ \value ReadAtTimeDetails_Encoding_DefaultXml
+ \value ReadAtTimeDetails_Encoding_DefaultBinary
+ \value HistoryData
+ \value HistoryData_Encoding_DefaultXml
+ \value HistoryData_Encoding_DefaultBinary
+ \value HistoryEvent
+ \value HistoryEvent_Encoding_DefaultXml
+ \value HistoryEvent_Encoding_DefaultBinary
+ \value HistoryReadRequest
+ \value HistoryReadRequest_Encoding_DefaultXml
+ \value HistoryReadRequest_Encoding_DefaultBinary
+ \value HistoryReadResponse
+ \value HistoryReadResponse_Encoding_DefaultXml
+ \value HistoryReadResponse_Encoding_DefaultBinary
+ \value WriteValue
+ \value WriteValue_Encoding_DefaultXml
+ \value WriteValue_Encoding_DefaultBinary
+ \value WriteRequest
+ \value WriteRequest_Encoding_DefaultXml
+ \value WriteRequest_Encoding_DefaultBinary
+ \value WriteResponse
+ \value WriteResponse_Encoding_DefaultXml
+ \value WriteResponse_Encoding_DefaultBinary
+ \value HistoryUpdateDetails
+ \value HistoryUpdateDetails_Encoding_DefaultXml
+ \value HistoryUpdateDetails_Encoding_DefaultBinary
+ \value UpdateDataDetails
+ \value UpdateDataDetails_Encoding_DefaultXml
+ \value UpdateDataDetails_Encoding_DefaultBinary
+ \value UpdateEventDetails
+ \value UpdateEventDetails_Encoding_DefaultXml
+ \value UpdateEventDetails_Encoding_DefaultBinary
+ \value DeleteRawModifiedDetails
+ \value DeleteRawModifiedDetails_Encoding_DefaultXml
+ \value DeleteRawModifiedDetails_Encoding_DefaultBinary
+ \value DeleteAtTimeDetails
+ \value DeleteAtTimeDetails_Encoding_DefaultXml
+ \value DeleteAtTimeDetails_Encoding_DefaultBinary
+ \value DeleteEventDetails
+ \value DeleteEventDetails_Encoding_DefaultXml
+ \value DeleteEventDetails_Encoding_DefaultBinary
+ \value HistoryUpdateResult
+ \value HistoryUpdateResult_Encoding_DefaultXml
+ \value HistoryUpdateResult_Encoding_DefaultBinary
+ \value HistoryUpdateRequest
+ \value HistoryUpdateRequest_Encoding_DefaultXml
+ \value HistoryUpdateRequest_Encoding_DefaultBinary
+ \value HistoryUpdateResponse
+ \value HistoryUpdateResponse_Encoding_DefaultXml
+ \value HistoryUpdateResponse_Encoding_DefaultBinary
+ \value CallMethodRequest
+ \value CallMethodRequest_Encoding_DefaultXml
+ \value CallMethodRequest_Encoding_DefaultBinary
+ \value CallMethodResult
+ \value CallMethodResult_Encoding_DefaultXml
+ \value CallMethodResult_Encoding_DefaultBinary
+ \value CallRequest
+ \value CallRequest_Encoding_DefaultXml
+ \value CallRequest_Encoding_DefaultBinary
+ \value CallResponse
+ \value CallResponse_Encoding_DefaultXml
+ \value CallResponse_Encoding_DefaultBinary
+ \value MonitoringMode
+ \value DataChangeTrigger
+ \value DeadbandType
+ \value MonitoringFilter
+ \value MonitoringFilter_Encoding_DefaultXml
+ \value MonitoringFilter_Encoding_DefaultBinary
+ \value DataChangeFilter
+ \value DataChangeFilter_Encoding_DefaultXml
+ \value DataChangeFilter_Encoding_DefaultBinary
+ \value EventFilter
+ \value EventFilter_Encoding_DefaultXml
+ \value EventFilter_Encoding_DefaultBinary
+ \value AggregateFilter
+ \value AggregateFilter_Encoding_DefaultXml
+ \value AggregateFilter_Encoding_DefaultBinary
+ \value MonitoringFilterResult
+ \value MonitoringFilterResult_Encoding_DefaultXml
+ \value MonitoringFilterResult_Encoding_DefaultBinary
+ \value EventFilterResult
+ \value EventFilterResult_Encoding_DefaultXml
+ \value EventFilterResult_Encoding_DefaultBinary
+ \value AggregateFilterResult
+ \value AggregateFilterResult_Encoding_DefaultXml
+ \value AggregateFilterResult_Encoding_DefaultBinary
+ \value MonitoringParameters
+ \value MonitoringParameters_Encoding_DefaultXml
+ \value MonitoringParameters_Encoding_DefaultBinary
+ \value MonitoredItemCreateRequest
+ \value MonitoredItemCreateRequest_Encoding_DefaultXml
+ \value MonitoredItemCreateRequest_Encoding_DefaultBinary
+ \value MonitoredItemCreateResult
+ \value MonitoredItemCreateResult_Encoding_DefaultXml
+ \value MonitoredItemCreateResult_Encoding_DefaultBinary
+ \value CreateMonitoredItemsRequest
+ \value CreateMonitoredItemsRequest_Encoding_DefaultXml
+ \value CreateMonitoredItemsRequest_Encoding_DefaultBinary
+ \value CreateMonitoredItemsResponse
+ \value CreateMonitoredItemsResponse_Encoding_DefaultXml
+ \value CreateMonitoredItemsResponse_Encoding_DefaultBinary
+ \value MonitoredItemModifyRequest
+ \value MonitoredItemModifyRequest_Encoding_DefaultXml
+ \value MonitoredItemModifyRequest_Encoding_DefaultBinary
+ \value MonitoredItemModifyResult
+ \value MonitoredItemModifyResult_Encoding_DefaultXml
+ \value MonitoredItemModifyResult_Encoding_DefaultBinary
+ \value ModifyMonitoredItemsRequest
+ \value ModifyMonitoredItemsRequest_Encoding_DefaultXml
+ \value ModifyMonitoredItemsRequest_Encoding_DefaultBinary
+ \value ModifyMonitoredItemsResponse
+ \value ModifyMonitoredItemsResponse_Encoding_DefaultXml
+ \value ModifyMonitoredItemsResponse_Encoding_DefaultBinary
+ \value SetMonitoringModeRequest
+ \value SetMonitoringModeRequest_Encoding_DefaultXml
+ \value SetMonitoringModeRequest_Encoding_DefaultBinary
+ \value SetMonitoringModeResponse
+ \value SetMonitoringModeResponse_Encoding_DefaultXml
+ \value SetMonitoringModeResponse_Encoding_DefaultBinary
+ \value SetTriggeringRequest
+ \value SetTriggeringRequest_Encoding_DefaultXml
+ \value SetTriggeringRequest_Encoding_DefaultBinary
+ \value SetTriggeringResponse
+ \value SetTriggeringResponse_Encoding_DefaultXml
+ \value SetTriggeringResponse_Encoding_DefaultBinary
+ \value DeleteMonitoredItemsRequest
+ \value DeleteMonitoredItemsRequest_Encoding_DefaultXml
+ \value DeleteMonitoredItemsRequest_Encoding_DefaultBinary
+ \value DeleteMonitoredItemsResponse
+ \value DeleteMonitoredItemsResponse_Encoding_DefaultXml
+ \value DeleteMonitoredItemsResponse_Encoding_DefaultBinary
+ \value CreateSubscriptionRequest
+ \value CreateSubscriptionRequest_Encoding_DefaultXml
+ \value CreateSubscriptionRequest_Encoding_DefaultBinary
+ \value CreateSubscriptionResponse
+ \value CreateSubscriptionResponse_Encoding_DefaultXml
+ \value CreateSubscriptionResponse_Encoding_DefaultBinary
+ \value ModifySubscriptionRequest
+ \value ModifySubscriptionRequest_Encoding_DefaultXml
+ \value ModifySubscriptionRequest_Encoding_DefaultBinary
+ \value ModifySubscriptionResponse
+ \value ModifySubscriptionResponse_Encoding_DefaultXml
+ \value ModifySubscriptionResponse_Encoding_DefaultBinary
+ \value SetPublishingModeRequest
+ \value SetPublishingModeRequest_Encoding_DefaultXml
+ \value SetPublishingModeRequest_Encoding_DefaultBinary
+ \value SetPublishingModeResponse
+ \value SetPublishingModeResponse_Encoding_DefaultXml
+ \value SetPublishingModeResponse_Encoding_DefaultBinary
+ \value NotificationMessage
+ \value NotificationMessage_Encoding_DefaultXml
+ \value NotificationMessage_Encoding_DefaultBinary
+ \value MonitoredItemNotification
+ \value MonitoredItemNotification_Encoding_DefaultXml
+ \value MonitoredItemNotification_Encoding_DefaultBinary
+ \value DataChangeNotification
+ \value DataChangeNotification_Encoding_DefaultXml
+ \value DataChangeNotification_Encoding_DefaultBinary
+ \value StatusChangeNotification
+ \value StatusChangeNotification_Encoding_DefaultXml
+ \value StatusChangeNotification_Encoding_DefaultBinary
+ \value SubscriptionAcknowledgement
+ \value SubscriptionAcknowledgement_Encoding_DefaultXml
+ \value SubscriptionAcknowledgement_Encoding_DefaultBinary
+ \value PublishRequest
+ \value PublishRequest_Encoding_DefaultXml
+ \value PublishRequest_Encoding_DefaultBinary
+ \value PublishResponse
+ \value PublishResponse_Encoding_DefaultXml
+ \value PublishResponse_Encoding_DefaultBinary
+ \value RepublishRequest
+ \value RepublishRequest_Encoding_DefaultXml
+ \value RepublishRequest_Encoding_DefaultBinary
+ \value RepublishResponse
+ \value RepublishResponse_Encoding_DefaultXml
+ \value RepublishResponse_Encoding_DefaultBinary
+ \value TransferResult
+ \value TransferResult_Encoding_DefaultXml
+ \value TransferResult_Encoding_DefaultBinary
+ \value TransferSubscriptionsRequest
+ \value TransferSubscriptionsRequest_Encoding_DefaultXml
+ \value TransferSubscriptionsRequest_Encoding_DefaultBinary
+ \value TransferSubscriptionsResponse
+ \value TransferSubscriptionsResponse_Encoding_DefaultXml
+ \value TransferSubscriptionsResponse_Encoding_DefaultBinary
+ \value DeleteSubscriptionsRequest
+ \value DeleteSubscriptionsRequest_Encoding_DefaultXml
+ \value DeleteSubscriptionsRequest_Encoding_DefaultBinary
+ \value DeleteSubscriptionsResponse
+ \value DeleteSubscriptionsResponse_Encoding_DefaultXml
+ \value DeleteSubscriptionsResponse_Encoding_DefaultBinary
+ \value RedundancySupport
+ \value ServerState
+ \value RedundantServerDataType
+ \value RedundantServerDataType_Encoding_DefaultXml
+ \value RedundantServerDataType_Encoding_DefaultBinary
+ \value SamplingIntervalDiagnosticsDataType
+ \value SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml
+ \value SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary
+ \value ServerDiagnosticsSummaryDataType
+ \value ServerDiagnosticsSummaryDataType_Encoding_DefaultXml
+ \value ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary
+ \value ServerStatusDataType
+ \value ServerStatusDataType_Encoding_DefaultXml
+ \value ServerStatusDataType_Encoding_DefaultBinary
+ \value SessionDiagnosticsDataType
+ \value SessionDiagnosticsDataType_Encoding_DefaultXml
+ \value SessionDiagnosticsDataType_Encoding_DefaultBinary
+ \value SessionSecurityDiagnosticsDataType
+ \value SessionSecurityDiagnosticsDataType_Encoding_DefaultXml
+ \value SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary
+ \value ServiceCounterDataType
+ \value ServiceCounterDataType_Encoding_DefaultXml
+ \value ServiceCounterDataType_Encoding_DefaultBinary
+ \value SubscriptionDiagnosticsDataType
+ \value SubscriptionDiagnosticsDataType_Encoding_DefaultXml
+ \value SubscriptionDiagnosticsDataType_Encoding_DefaultBinary
+ \value ModelChangeStructureDataType
+ \value ModelChangeStructureDataType_Encoding_DefaultXml
+ \value ModelChangeStructureDataType_Encoding_DefaultBinary
+ \value Range
+ \value Range_Encoding_DefaultXml
+ \value Range_Encoding_DefaultBinary
+ \value EUInformation
+ \value EUInformation_Encoding_DefaultXml
+ \value EUInformation_Encoding_DefaultBinary
+ \value ExceptionDeviationFormat
+ \value Annotation
+ \value Annotation_Encoding_DefaultXml
+ \value Annotation_Encoding_DefaultBinary
+ \value ProgramDiagnosticDataType
+ \value ProgramDiagnosticDataType_Encoding_DefaultXml
+ \value ProgramDiagnosticDataType_Encoding_DefaultBinary
+ \value SemanticChangeStructureDataType
+ \value SemanticChangeStructureDataType_Encoding_DefaultXml
+ \value SemanticChangeStructureDataType_Encoding_DefaultBinary
+ \value EventNotificationList
+ \value EventNotificationList_Encoding_DefaultXml
+ \value EventNotificationList_Encoding_DefaultBinary
+ \value EventFieldList
+ \value EventFieldList_Encoding_DefaultXml
+ \value EventFieldList_Encoding_DefaultBinary
+ \value HistoryEventFieldList
+ \value HistoryEventFieldList_Encoding_DefaultXml
+ \value HistoryEventFieldList_Encoding_DefaultBinary
+ \value IssuedIdentityToken
+ \value IssuedIdentityToken_Encoding_DefaultXml
+ \value IssuedIdentityToken_Encoding_DefaultBinary
+ \value NotificationData
+ \value NotificationData_Encoding_DefaultXml
+ \value NotificationData_Encoding_DefaultBinary
+ \value AggregateConfiguration
+ \value AggregateConfiguration_Encoding_DefaultXml
+ \value AggregateConfiguration_Encoding_DefaultBinary
+ \value ImageBMP
+ \value ImageGIF
+ \value ImageJPG
+ \value ImagePNG
+ \value ServerType
+ \value ServerType_ServerArray
+ \value ServerType_NamespaceArray
+ \value ServerType_ServerStatus
+ \value ServerType_ServiceLevel
+ \value ServerType_ServerCapabilities
+ \value ServerType_ServerDiagnostics
+ \value ServerType_VendorServerInfo
+ \value ServerType_ServerRedundancy
+ \value ServerCapabilitiesType
+ \value ServerCapabilitiesType_ServerProfileArray
+ \value ServerCapabilitiesType_LocaleIdArray
+ \value ServerCapabilitiesType_MinSupportedSampleRate
+ \value ServerCapabilitiesType_ModellingRules
+ \value ServerDiagnosticsType
+ \value ServerDiagnosticsType_ServerDiagnosticsSummary
+ \value ServerDiagnosticsType_SamplingIntervalDiagnosticsArray
+ \value ServerDiagnosticsType_SubscriptionDiagnosticsArray
+ \value ServerDiagnosticsType_EnabledFlag
+ \value SessionsDiagnosticsSummaryType
+ \value SessionsDiagnosticsSummaryType_SessionDiagnosticsArray
+ \value SessionsDiagnosticsSummaryType_SessionSecurityDiagnosticsArray
+ \value SessionDiagnosticsObjectType
+ \value SessionDiagnosticsObjectType_SessionDiagnostics
+ \value SessionDiagnosticsObjectType_SessionSecurityDiagnostics
+ \value SessionDiagnosticsObjectType_SubscriptionDiagnosticsArray
+ \value VendorServerInfoType
+ \value ServerRedundancyType
+ \value ServerRedundancyType_RedundancySupport
+ \value TransparentRedundancyType
+ \value TransparentRedundancyType_CurrentServerId
+ \value TransparentRedundancyType_RedundantServerArray
+ \value NonTransparentRedundancyType
+ \value NonTransparentRedundancyType_ServerUriArray
+ \value BaseEventType
+ \value BaseEventType_EventId
+ \value BaseEventType_EventType
+ \value BaseEventType_SourceNode
+ \value BaseEventType_SourceName
+ \value BaseEventType_Time
+ \value BaseEventType_ReceiveTime
+ \value BaseEventType_Message
+ \value BaseEventType_Severity
+ \value AuditEventType
+ \value AuditEventType_ActionTimeStamp
+ \value AuditEventType_Status
+ \value AuditEventType_ServerId
+ \value AuditEventType_ClientAuditEntryId
+ \value AuditEventType_ClientUserId
+ \value AuditSecurityEventType
+ \value AuditChannelEventType
+ \value AuditOpenSecureChannelEventType
+ \value AuditOpenSecureChannelEventType_ClientCertificate
+ \value AuditOpenSecureChannelEventType_RequestType
+ \value AuditOpenSecureChannelEventType_SecurityPolicyUri
+ \value AuditOpenSecureChannelEventType_SecurityMode
+ \value AuditOpenSecureChannelEventType_RequestedLifetime
+ \value AuditSessionEventType
+ \value AuditSessionEventType_SessionId
+ \value AuditCreateSessionEventType
+ \value AuditCreateSessionEventType_SecureChannelId
+ \value AuditCreateSessionEventType_ClientCertificate
+ \value AuditCreateSessionEventType_RevisedSessionTimeout
+ \value AuditActivateSessionEventType
+ \value AuditActivateSessionEventType_ClientSoftwareCertificates
+ \value AuditActivateSessionEventType_UserIdentityToken
+ \value AuditCancelEventType
+ \value AuditCancelEventType_RequestHandle
+ \value AuditCertificateEventType
+ \value AuditCertificateEventType_Certificate
+ \value AuditCertificateDataMismatchEventType
+ \value AuditCertificateDataMismatchEventType_InvalidHostname
+ \value AuditCertificateDataMismatchEventType_InvalidUri
+ \value AuditCertificateExpiredEventType
+ \value AuditCertificateInvalidEventType
+ \value AuditCertificateUntrustedEventType
+ \value AuditCertificateRevokedEventType
+ \value AuditCertificateMismatchEventType
+ \value AuditNodeManagementEventType
+ \value AuditAddNodesEventType
+ \value AuditAddNodesEventType_NodesToAdd
+ \value AuditDeleteNodesEventType
+ \value AuditDeleteNodesEventType_NodesToDelete
+ \value AuditAddReferencesEventType
+ \value AuditAddReferencesEventType_ReferencesToAdd
+ \value AuditDeleteReferencesEventType
+ \value AuditDeleteReferencesEventType_ReferencesToDelete
+ \value AuditUpdateEventType
+ \value AuditWriteUpdateEventType
+ \value AuditWriteUpdateEventType_IndexRange
+ \value AuditWriteUpdateEventType_OldValue
+ \value AuditWriteUpdateEventType_NewValue
+ \value AuditHistoryUpdateEventType
+ \value AuditUpdateMethodEventType
+ \value AuditUpdateMethodEventType_MethodId
+ \value AuditUpdateMethodEventType_InputArguments
+ \value SystemEventType
+ \value DeviceFailureEventType
+ \value BaseModelChangeEventType
+ \value GeneralModelChangeEventType
+ \value GeneralModelChangeEventType_Changes
+ \value ServerVendorCapabilityType
+ \value ServerStatusType
+ \value ServerStatusType_StartTime
+ \value ServerStatusType_CurrentTime
+ \value ServerStatusType_State
+ \value ServerStatusType_BuildInfo
+ \value ServerDiagnosticsSummaryType
+ \value ServerDiagnosticsSummaryType_ServerViewCount
+ \value ServerDiagnosticsSummaryType_CurrentSessionCount
+ \value ServerDiagnosticsSummaryType_CumulatedSessionCount
+ \value ServerDiagnosticsSummaryType_SecurityRejectedSessionCount
+ \value ServerDiagnosticsSummaryType_RejectedSessionCount
+ \value ServerDiagnosticsSummaryType_SessionTimeoutCount
+ \value ServerDiagnosticsSummaryType_SessionAbortCount
+ \value ServerDiagnosticsSummaryType_PublishingIntervalCount
+ \value ServerDiagnosticsSummaryType_CurrentSubscriptionCount
+ \value ServerDiagnosticsSummaryType_CumulatedSubscriptionCount
+ \value ServerDiagnosticsSummaryType_SecurityRejectedRequestsCount
+ \value ServerDiagnosticsSummaryType_RejectedRequestsCount
+ \value SamplingIntervalDiagnosticsArrayType
+ \value SamplingIntervalDiagnosticsType
+ \value SamplingIntervalDiagnosticsType_SamplingInterval
+ \value SubscriptionDiagnosticsArrayType
+ \value SubscriptionDiagnosticsType
+ \value SubscriptionDiagnosticsType_SessionId
+ \value SubscriptionDiagnosticsType_SubscriptionId
+ \value SubscriptionDiagnosticsType_Priority
+ \value SubscriptionDiagnosticsType_PublishingInterval
+ \value SubscriptionDiagnosticsType_MaxKeepAliveCount
+ \value SubscriptionDiagnosticsType_MaxNotificationsPerPublish
+ \value SubscriptionDiagnosticsType_PublishingEnabled
+ \value SubscriptionDiagnosticsType_ModifyCount
+ \value SubscriptionDiagnosticsType_EnableCount
+ \value SubscriptionDiagnosticsType_DisableCount
+ \value SubscriptionDiagnosticsType_RepublishRequestCount
+ \value SubscriptionDiagnosticsType_RepublishMessageRequestCount
+ \value SubscriptionDiagnosticsType_RepublishMessageCount
+ \value SubscriptionDiagnosticsType_TransferRequestCount
+ \value SubscriptionDiagnosticsType_TransferredToAltClientCount
+ \value SubscriptionDiagnosticsType_TransferredToSameClientCount
+ \value SubscriptionDiagnosticsType_PublishRequestCount
+ \value SubscriptionDiagnosticsType_DataChangeNotificationsCount
+ \value SubscriptionDiagnosticsType_NotificationsCount
+ \value SessionDiagnosticsArrayType
+ \value SessionDiagnosticsVariableType
+ \value SessionDiagnosticsVariableType_SessionId
+ \value SessionDiagnosticsVariableType_SessionName
+ \value SessionDiagnosticsVariableType_ClientDescription
+ \value SessionDiagnosticsVariableType_ServerUri
+ \value SessionDiagnosticsVariableType_EndpointUrl
+ \value SessionDiagnosticsVariableType_LocaleIds
+ \value SessionDiagnosticsVariableType_ActualSessionTimeout
+ \value SessionDiagnosticsVariableType_ClientConnectionTime
+ \value SessionDiagnosticsVariableType_ClientLastContactTime
+ \value SessionDiagnosticsVariableType_CurrentSubscriptionsCount
+ \value SessionDiagnosticsVariableType_CurrentMonitoredItemsCount
+ \value SessionDiagnosticsVariableType_CurrentPublishRequestsInQueue
+ \value SessionDiagnosticsVariableType_ReadCount
+ \value SessionDiagnosticsVariableType_HistoryReadCount
+ \value SessionDiagnosticsVariableType_WriteCount
+ \value SessionDiagnosticsVariableType_HistoryUpdateCount
+ \value SessionDiagnosticsVariableType_CallCount
+ \value SessionDiagnosticsVariableType_CreateMonitoredItemsCount
+ \value SessionDiagnosticsVariableType_ModifyMonitoredItemsCount
+ \value SessionDiagnosticsVariableType_SetMonitoringModeCount
+ \value SessionDiagnosticsVariableType_SetTriggeringCount
+ \value SessionDiagnosticsVariableType_DeleteMonitoredItemsCount
+ \value SessionDiagnosticsVariableType_CreateSubscriptionCount
+ \value SessionDiagnosticsVariableType_ModifySubscriptionCount
+ \value SessionDiagnosticsVariableType_SetPublishingModeCount
+ \value SessionDiagnosticsVariableType_PublishCount
+ \value SessionDiagnosticsVariableType_RepublishCount
+ \value SessionDiagnosticsVariableType_TransferSubscriptionsCount
+ \value SessionDiagnosticsVariableType_DeleteSubscriptionsCount
+ \value SessionDiagnosticsVariableType_AddNodesCount
+ \value SessionDiagnosticsVariableType_AddReferencesCount
+ \value SessionDiagnosticsVariableType_DeleteNodesCount
+ \value SessionDiagnosticsVariableType_DeleteReferencesCount
+ \value SessionDiagnosticsVariableType_BrowseCount
+ \value SessionDiagnosticsVariableType_BrowseNextCount
+ \value SessionDiagnosticsVariableType_TranslateBrowsePathsToNodeIdsCount
+ \value SessionDiagnosticsVariableType_QueryFirstCount
+ \value SessionDiagnosticsVariableType_QueryNextCount
+ \value SessionSecurityDiagnosticsArrayType
+ \value SessionSecurityDiagnosticsType
+ \value SessionSecurityDiagnosticsType_SessionId
+ \value SessionSecurityDiagnosticsType_ClientUserIdOfSession
+ \value SessionSecurityDiagnosticsType_ClientUserIdHistory
+ \value SessionSecurityDiagnosticsType_AuthenticationMechanism
+ \value SessionSecurityDiagnosticsType_Encoding
+ \value SessionSecurityDiagnosticsType_TransportProtocol
+ \value SessionSecurityDiagnosticsType_SecurityMode
+ \value SessionSecurityDiagnosticsType_SecurityPolicyUri
+ \value Server
+ \value Server_ServerArray
+ \value Server_NamespaceArray
+ \value Server_ServerStatus
+ \value Server_ServerStatus_StartTime
+ \value Server_ServerStatus_CurrentTime
+ \value Server_ServerStatus_State
+ \value Server_ServerStatus_BuildInfo
+ \value Server_ServerStatus_BuildInfo_ProductName
+ \value Server_ServerStatus_BuildInfo_ProductUri
+ \value Server_ServerStatus_BuildInfo_ManufacturerName
+ \value Server_ServerStatus_BuildInfo_SoftwareVersion
+ \value Server_ServerStatus_BuildInfo_BuildNumber
+ \value Server_ServerStatus_BuildInfo_BuildDate
+ \value Server_ServiceLevel
+ \value Server_ServerCapabilities
+ \value Server_ServerCapabilities_ServerProfileArray
+ \value Server_ServerCapabilities_LocaleIdArray
+ \value Server_ServerCapabilities_MinSupportedSampleRate
+ \value Server_ServerDiagnostics
+ \value Server_ServerDiagnostics_ServerDiagnosticsSummary
+ \value Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount
+ \value Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount
+ \value Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount
+ \value Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount
+ \value Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount
+ \value Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount
+ \value Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount
+ \value Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount
+ \value Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount
+ \value Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount
+ \value Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount
+ \value Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray
+ \value Server_ServerDiagnostics_SubscriptionDiagnosticsArray
+ \value Server_ServerDiagnostics_EnabledFlag
+ \value Server_VendorServerInfo
+ \value Server_ServerRedundancy
+ \value StateMachineType
+ \value StateType
+ \value StateType_StateNumber
+ \value InitialStateType
+ \value TransitionType
+ \value TransitionEventType
+ \value TransitionType_TransitionNumber
+ \value AuditUpdateStateEventType
+ \value HistoricalDataConfigurationType
+ \value HistoricalDataConfigurationType_Stepped
+ \value HistoricalDataConfigurationType_Definition
+ \value HistoricalDataConfigurationType_MaxTimeInterval
+ \value HistoricalDataConfigurationType_MinTimeInterval
+ \value HistoricalDataConfigurationType_ExceptionDeviation
+ \value HistoricalDataConfigurationType_ExceptionDeviationFormat
+ \value HistoryServerCapabilitiesType
+ \value HistoryServerCapabilitiesType_AccessHistoryDataCapability
+ \value HistoryServerCapabilitiesType_AccessHistoryEventsCapability
+ \value HistoryServerCapabilitiesType_InsertDataCapability
+ \value HistoryServerCapabilitiesType_ReplaceDataCapability
+ \value HistoryServerCapabilitiesType_UpdateDataCapability
+ \value HistoryServerCapabilitiesType_DeleteRawCapability
+ \value HistoryServerCapabilitiesType_DeleteAtTimeCapability
+ \value AggregateFunctionType
+ \value AggregateFunction_Interpolative
+ \value AggregateFunction_Average
+ \value AggregateFunction_TimeAverage
+ \value AggregateFunction_Total
+ \value AggregateFunction_Minimum
+ \value AggregateFunction_Maximum
+ \value AggregateFunction_MinimumActualTime
+ \value AggregateFunction_MaximumActualTime
+ \value AggregateFunction_Range
+ \value AggregateFunction_AnnotationCount
+ \value AggregateFunction_Count
+ \value AggregateFunction_NumberOfTransitions
+ \value AggregateFunction_Start
+ \value AggregateFunction_End
+ \value AggregateFunction_Delta
+ \value AggregateFunction_DurationGood
+ \value AggregateFunction_DurationBad
+ \value AggregateFunction_PercentGood
+ \value AggregateFunction_PercentBad
+ \value AggregateFunction_WorstQuality
+ \value DataItemType
+ \value DataItemType_Definition
+ \value DataItemType_ValuePrecision
+ \value AnalogItemType
+ \value AnalogItemType_EURange
+ \value AnalogItemType_InstrumentRange
+ \value AnalogItemType_EngineeringUnits
+ \value DiscreteItemType
+ \value TwoStateDiscreteType
+ \value TwoStateDiscreteType_FalseState
+ \value TwoStateDiscreteType_TrueState
+ \value MultiStateDiscreteType
+ \value MultiStateDiscreteType_EnumStrings
+ \value ProgramTransitionEventType
+ \value ProgramTransitionEventType_IntermediateResult
+ \value ProgramDiagnosticType
+ \value ProgramDiagnosticType_CreateSessionId
+ \value ProgramDiagnosticType_CreateClientName
+ \value ProgramDiagnosticType_InvocationCreationTime
+ \value ProgramDiagnosticType_LastTransitionTime
+ \value ProgramDiagnosticType_LastMethodCall
+ \value ProgramDiagnosticType_LastMethodSessionId
+ \value ProgramDiagnosticType_LastMethodInputArguments
+ \value ProgramDiagnosticType_LastMethodOutputArguments
+ \value ProgramDiagnosticType_LastMethodCallTime
+ \value ProgramDiagnosticType_LastMethodReturnStatus
+ \value ProgramStateMachineType
+ \value ProgramStateMachineType_Creatable
+ \value ProgramStateMachineType_Deletable
+ \value ProgramStateMachineType_AutoDelete
+ \value ProgramStateMachineType_RecycleCount
+ \value ProgramStateMachineType_InstanceCount
+ \value ProgramStateMachineType_MaxInstanceCount
+ \value ProgramStateMachineType_MaxRecycleCount
+ \value ProgramStateMachineType_ProgramDiagnostics
+ \value ProgramStateMachineType_Ready
+ \value ProgramStateMachineType_Ready_StateNumber
+ \value ProgramStateMachineType_Running
+ \value ProgramStateMachineType_Running_StateNumber
+ \value ProgramStateMachineType_Suspended
+ \value ProgramStateMachineType_Suspended_StateNumber
+ \value ProgramStateMachineType_Halted
+ \value ProgramStateMachineType_Halted_StateNumber
+ \value ProgramStateMachineType_HaltedToReady
+ \value ProgramStateMachineType_HaltedToReady_TransitionNumber
+ \value ProgramStateMachineType_ReadyToRunning
+ \value ProgramStateMachineType_ReadyToRunning_TransitionNumber
+ \value ProgramStateMachineType_RunningToHalted
+ \value ProgramStateMachineType_RunningToHalted_TransitionNumber
+ \value ProgramStateMachineType_RunningToReady
+ \value ProgramStateMachineType_RunningToReady_TransitionNumber
+ \value ProgramStateMachineType_RunningToSuspended
+ \value ProgramStateMachineType_RunningToSuspended_TransitionNumber
+ \value ProgramStateMachineType_SuspendedToRunning
+ \value ProgramStateMachineType_SuspendedToRunning_TransitionNumber
+ \value ProgramStateMachineType_SuspendedToHalted
+ \value ProgramStateMachineType_SuspendedToHalted_TransitionNumber
+ \value ProgramStateMachineType_SuspendedToReady
+ \value ProgramStateMachineType_SuspendedToReady_TransitionNumber
+ \value ProgramStateMachineType_ReadyToHalted
+ \value ProgramStateMachineType_ReadyToHalted_TransitionNumber
+ \value ProgramStateMachineType_Start
+ \value ProgramStateMachineType_Suspend
+ \value ProgramStateMachineType_Resume
+ \value ProgramStateMachineType_Halt
+ \value ProgramStateMachineType_Reset
+ \value SessionDiagnosticsVariableType_RegisterNodesCount
+ \value SessionDiagnosticsVariableType_UnregisterNodesCount
+ \value ServerCapabilitiesType_MaxBrowseContinuationPoints
+ \value ServerCapabilitiesType_MaxQueryContinuationPoints
+ \value ServerCapabilitiesType_MaxHistoryContinuationPoints
+ \value Server_ServerCapabilities_MaxBrowseContinuationPoints
+ \value Server_ServerCapabilities_MaxQueryContinuationPoints
+ \value Server_ServerCapabilities_MaxHistoryContinuationPoints
+ \value SemanticChangeEventType
+ \value SemanticChangeEventType_Changes
+ \value ServerType_Auditing
+ \value ServerDiagnosticsType_SessionsDiagnosticsSummary
+ \value AuditChannelEventType_SecureChannelId
+ \value AuditOpenSecureChannelEventType_ClientCertificateThumbprint
+ \value AuditCreateSessionEventType_ClientCertificateThumbprint
+ \value AuditUrlMismatchEventType
+ \value AuditUrlMismatchEventType_EndpointUrl
+ \value AuditWriteUpdateEventType_AttributeId
+ \value AuditHistoryUpdateEventType_ParameterDataTypeId
+ \value ServerStatusType_SecondsTillShutdown
+ \value ServerStatusType_ShutdownReason
+ \value ServerCapabilitiesType_AggregateFunctions
+ \value StateVariableType
+ \value StateVariableType_Id
+ \value StateVariableType_Name
+ \value StateVariableType_Number
+ \value StateVariableType_EffectiveDisplayName
+ \value FiniteStateVariableType
+ \value FiniteStateVariableType_Id
+ \value TransitionVariableType
+ \value TransitionVariableType_Id
+ \value TransitionVariableType_Name
+ \value TransitionVariableType_Number
+ \value TransitionVariableType_TransitionTime
+ \value FiniteTransitionVariableType
+ \value FiniteTransitionVariableType_Id
+ \value StateMachineType_CurrentState
+ \value StateMachineType_LastTransition
+ \value FiniteStateMachineType
+ \value FiniteStateMachineType_CurrentState
+ \value FiniteStateMachineType_LastTransition
+ \value TransitionEventType_Transition
+ \value TransitionEventType_FromState
+ \value TransitionEventType_ToState
+ \value AuditUpdateStateEventType_OldStateId
+ \value AuditUpdateStateEventType_NewStateId
+ \value ConditionType
+ \value RefreshStartEventType
+ \value RefreshEndEventType
+ \value RefreshRequiredEventType
+ \value AuditConditionEventType
+ \value AuditConditionEnableEventType
+ \value AuditConditionCommentEventType
+ \value DialogConditionType
+ \value DialogConditionType_Prompt
+ \value AcknowledgeableConditionType
+ \value AlarmConditionType
+ \value ShelvedStateMachineType
+ \value ShelvedStateMachineType_Unshelved
+ \value ShelvedStateMachineType_TimedShelved
+ \value ShelvedStateMachineType_OneShotShelved
+ \value ShelvedStateMachineType_UnshelvedToTimedShelved
+ \value ShelvedStateMachineType_UnshelvedToOneShotShelved
+ \value ShelvedStateMachineType_TimedShelvedToUnshelved
+ \value ShelvedStateMachineType_TimedShelvedToOneShotShelved
+ \value ShelvedStateMachineType_OneShotShelvedToUnshelved
+ \value ShelvedStateMachineType_OneShotShelvedToTimedShelved
+ \value ShelvedStateMachineType_Unshelve
+ \value ShelvedStateMachineType_OneShotShelve
+ \value ShelvedStateMachineType_TimedShelve
+ \value LimitAlarmType
+ \value ShelvedStateMachineType_TimedShelve_InputArguments
+ \value Server_ServerStatus_SecondsTillShutdown
+ \value Server_ServerStatus_ShutdownReason
+ \value Server_Auditing
+ \value Server_ServerCapabilities_ModellingRules
+ \value Server_ServerCapabilities_AggregateFunctions
+ \value SubscriptionDiagnosticsType_EventNotificationsCount
+ \value AuditHistoryEventUpdateEventType
+ \value AuditHistoryEventUpdateEventType_Filter
+ \value AuditHistoryValueUpdateEventType
+ \value AuditHistoryDeleteEventType
+ \value AuditHistoryRawModifyDeleteEventType
+ \value AuditHistoryRawModifyDeleteEventType_IsDeleteModified
+ \value AuditHistoryRawModifyDeleteEventType_StartTime
+ \value AuditHistoryRawModifyDeleteEventType_EndTime
+ \value AuditHistoryAtTimeDeleteEventType
+ \value AuditHistoryAtTimeDeleteEventType_ReqTimes
+ \value AuditHistoryAtTimeDeleteEventType_OldValues
+ \value AuditHistoryEventDeleteEventType
+ \value AuditHistoryEventDeleteEventType_EventIds
+ \value AuditHistoryEventDeleteEventType_OldValues
+ \value AuditHistoryEventUpdateEventType_UpdatedNode
+ \value AuditHistoryValueUpdateEventType_UpdatedNode
+ \value AuditHistoryDeleteEventType_UpdatedNode
+ \value AuditHistoryEventUpdateEventType_PerformInsertReplace
+ \value AuditHistoryEventUpdateEventType_NewValues
+ \value AuditHistoryEventUpdateEventType_OldValues
+ \value AuditHistoryValueUpdateEventType_PerformInsertReplace
+ \value AuditHistoryValueUpdateEventType_NewValues
+ \value AuditHistoryValueUpdateEventType_OldValues
+ \value AuditHistoryRawModifyDeleteEventType_OldValues
+ \value EventQueueOverflowEventType
+ \value EventTypesFolder
+ \value ServerCapabilitiesType_SoftwareCertificates
+ \value SessionDiagnosticsVariableType_MaxResponseMessageSize
+ \value BuildInfoType
+ \value BuildInfoType_ProductUri
+ \value BuildInfoType_ManufacturerName
+ \value BuildInfoType_ProductName
+ \value BuildInfoType_SoftwareVersion
+ \value BuildInfoType_BuildNumber
+ \value BuildInfoType_BuildDate
+ \value SessionSecurityDiagnosticsType_ClientCertificate
+ \value HistoricalDataConfigurationType_AggregateConfiguration
+ \value DefaultBinary
+ \value DefaultXml
+ \value AlwaysGeneratesEvent
+ \value Icon
+ \value NodeVersion
+ \value LocalTime
+ \value AllowNulls
+ \value EnumValues
+ \value InputArguments
+ \value OutputArguments
+ \value ServerType_ServerStatus_StartTime
+ \value ServerType_ServerStatus_CurrentTime
+ \value ServerType_ServerStatus_State
+ \value ServerType_ServerStatus_BuildInfo
+ \value ServerType_ServerStatus_BuildInfo_ProductUri
+ \value ServerType_ServerStatus_BuildInfo_ManufacturerName
+ \value ServerType_ServerStatus_BuildInfo_ProductName
+ \value ServerType_ServerStatus_BuildInfo_SoftwareVersion
+ \value ServerType_ServerStatus_BuildInfo_BuildNumber
+ \value ServerType_ServerStatus_BuildInfo_BuildDate
+ \value ServerType_ServerStatus_SecondsTillShutdown
+ \value ServerType_ServerStatus_ShutdownReason
+ \value ServerType_ServerCapabilities_ServerProfileArray
+ \value ServerType_ServerCapabilities_LocaleIdArray
+ \value ServerType_ServerCapabilities_MinSupportedSampleRate
+ \value ServerType_ServerCapabilities_MaxBrowseContinuationPoints
+ \value ServerType_ServerCapabilities_MaxQueryContinuationPoints
+ \value ServerType_ServerCapabilities_MaxHistoryContinuationPoints
+ \value ServerType_ServerCapabilities_SoftwareCertificates
+ \value ServerType_ServerCapabilities_ModellingRules
+ \value ServerType_ServerCapabilities_AggregateFunctions
+ \value ServerType_ServerDiagnostics_ServerDiagnosticsSummary
+ \value ServerType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount
+ \value ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount
+ \value ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount
+ \value ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount
+ \value ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount
+ \value ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount
+ \value ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount
+ \value ServerType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount
+ \value ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount
+ \value ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount
+ \value ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount
+ \value ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount
+ \value ServerType_ServerDiagnostics_SamplingIntervalDiagnosticsArray
+ \value ServerType_ServerDiagnostics_SubscriptionDiagnosticsArray
+ \value ServerType_ServerDiagnostics_SessionsDiagnosticsSummary
+ \value ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray
+ \value ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray
+ \value ServerType_ServerDiagnostics_EnabledFlag
+ \value ServerType_ServerRedundancy_RedundancySupport
+ \value ServerDiagnosticsType_ServerDiagnosticsSummary_ServerViewCount
+ \value ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSessionCount
+ \value ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSessionCount
+ \value ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedSessionCount
+ \value ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedSessionCount
+ \value ServerDiagnosticsType_ServerDiagnosticsSummary_SessionTimeoutCount
+ \value ServerDiagnosticsType_ServerDiagnosticsSummary_SessionAbortCount
+ \value ServerDiagnosticsType_ServerDiagnosticsSummary_PublishingIntervalCount
+ \value ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSubscriptionCount
+ \value ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSubscriptionCount
+ \value ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedRequestsCount
+ \value ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedRequestsCount
+ \value ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionDiagnosticsArray
+ \value ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_SessionId
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_SessionName
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_ClientDescription
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_ServerUri
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_EndpointUrl
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_LocaleIds
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_ActualSessionTimeout
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_MaxResponseMessageSize
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_ClientConnectionTime
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_ClientLastContactTime
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_CurrentSubscriptionsCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_CurrentMonitoredItemsCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_CurrentPublishRequestsInQueue
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_ReadCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_HistoryReadCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_WriteCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_HistoryUpdateCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_CallCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_CreateMonitoredItemsCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_ModifyMonitoredItemsCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_SetMonitoringModeCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_SetTriggeringCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_DeleteMonitoredItemsCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_CreateSubscriptionCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_ModifySubscriptionCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_SetPublishingModeCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_PublishCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_RepublishCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_TransferSubscriptionsCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_DeleteSubscriptionsCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_AddNodesCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_AddReferencesCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_DeleteNodesCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_DeleteReferencesCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_BrowseCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_BrowseNextCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_QueryFirstCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_QueryNextCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_RegisterNodesCount
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_UnregisterNodesCount
+ \value SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SessionId
+ \value SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdOfSession
+ \value SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdHistory
+ \value SessionDiagnosticsObjectType_SessionSecurityDiagnostics_AuthenticationMechanism
+ \value SessionDiagnosticsObjectType_SessionSecurityDiagnostics_Encoding
+ \value SessionDiagnosticsObjectType_SessionSecurityDiagnostics_TransportProtocol
+ \value SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityMode
+ \value SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityPolicyUri
+ \value SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientCertificate
+ \value TransparentRedundancyType_RedundancySupport
+ \value NonTransparentRedundancyType_RedundancySupport
+ \value BaseEventType_LocalTime
+ \value EventQueueOverflowEventType_EventId
+ \value EventQueueOverflowEventType_EventType
+ \value EventQueueOverflowEventType_SourceNode
+ \value EventQueueOverflowEventType_SourceName
+ \value EventQueueOverflowEventType_Time
+ \value EventQueueOverflowEventType_ReceiveTime
+ \value EventQueueOverflowEventType_LocalTime
+ \value EventQueueOverflowEventType_Message
+ \value EventQueueOverflowEventType_Severity
+ \value AuditEventType_EventId
+ \value AuditEventType_EventType
+ \value AuditEventType_SourceNode
+ \value AuditEventType_SourceName
+ \value AuditEventType_Time
+ \value AuditEventType_ReceiveTime
+ \value AuditEventType_LocalTime
+ \value AuditEventType_Message
+ \value AuditEventType_Severity
+ \value AuditSecurityEventType_EventId
+ \value AuditSecurityEventType_EventType
+ \value AuditSecurityEventType_SourceNode
+ \value AuditSecurityEventType_SourceName
+ \value AuditSecurityEventType_Time
+ \value AuditSecurityEventType_ReceiveTime
+ \value AuditSecurityEventType_LocalTime
+ \value AuditSecurityEventType_Message
+ \value AuditSecurityEventType_Severity
+ \value AuditSecurityEventType_ActionTimeStamp
+ \value AuditSecurityEventType_Status
+ \value AuditSecurityEventType_ServerId
+ \value AuditSecurityEventType_ClientAuditEntryId
+ \value AuditSecurityEventType_ClientUserId
+ \value AuditChannelEventType_EventId
+ \value AuditChannelEventType_EventType
+ \value AuditChannelEventType_SourceNode
+ \value AuditChannelEventType_SourceName
+ \value AuditChannelEventType_Time
+ \value AuditChannelEventType_ReceiveTime
+ \value AuditChannelEventType_LocalTime
+ \value AuditChannelEventType_Message
+ \value AuditChannelEventType_Severity
+ \value AuditChannelEventType_ActionTimeStamp
+ \value AuditChannelEventType_Status
+ \value AuditChannelEventType_ServerId
+ \value AuditChannelEventType_ClientAuditEntryId
+ \value AuditChannelEventType_ClientUserId
+ \value AuditOpenSecureChannelEventType_EventId
+ \value AuditOpenSecureChannelEventType_EventType
+ \value AuditOpenSecureChannelEventType_SourceNode
+ \value AuditOpenSecureChannelEventType_SourceName
+ \value AuditOpenSecureChannelEventType_Time
+ \value AuditOpenSecureChannelEventType_ReceiveTime
+ \value AuditOpenSecureChannelEventType_LocalTime
+ \value AuditOpenSecureChannelEventType_Message
+ \value AuditOpenSecureChannelEventType_Severity
+ \value AuditOpenSecureChannelEventType_ActionTimeStamp
+ \value AuditOpenSecureChannelEventType_Status
+ \value AuditOpenSecureChannelEventType_ServerId
+ \value AuditOpenSecureChannelEventType_ClientAuditEntryId
+ \value AuditOpenSecureChannelEventType_ClientUserId
+ \value AuditOpenSecureChannelEventType_SecureChannelId
+ \value AuditSessionEventType_EventId
+ \value AuditSessionEventType_EventType
+ \value AuditSessionEventType_SourceNode
+ \value AuditSessionEventType_SourceName
+ \value AuditSessionEventType_Time
+ \value AuditSessionEventType_ReceiveTime
+ \value AuditSessionEventType_LocalTime
+ \value AuditSessionEventType_Message
+ \value AuditSessionEventType_Severity
+ \value AuditSessionEventType_ActionTimeStamp
+ \value AuditSessionEventType_Status
+ \value AuditSessionEventType_ServerId
+ \value AuditSessionEventType_ClientAuditEntryId
+ \value AuditSessionEventType_ClientUserId
+ \value AuditCreateSessionEventType_EventId
+ \value AuditCreateSessionEventType_EventType
+ \value AuditCreateSessionEventType_SourceNode
+ \value AuditCreateSessionEventType_SourceName
+ \value AuditCreateSessionEventType_Time
+ \value AuditCreateSessionEventType_ReceiveTime
+ \value AuditCreateSessionEventType_LocalTime
+ \value AuditCreateSessionEventType_Message
+ \value AuditCreateSessionEventType_Severity
+ \value AuditCreateSessionEventType_ActionTimeStamp
+ \value AuditCreateSessionEventType_Status
+ \value AuditCreateSessionEventType_ServerId
+ \value AuditCreateSessionEventType_ClientAuditEntryId
+ \value AuditCreateSessionEventType_ClientUserId
+ \value AuditUrlMismatchEventType_EventId
+ \value AuditUrlMismatchEventType_EventType
+ \value AuditUrlMismatchEventType_SourceNode
+ \value AuditUrlMismatchEventType_SourceName
+ \value AuditUrlMismatchEventType_Time
+ \value AuditUrlMismatchEventType_ReceiveTime
+ \value AuditUrlMismatchEventType_LocalTime
+ \value AuditUrlMismatchEventType_Message
+ \value AuditUrlMismatchEventType_Severity
+ \value AuditUrlMismatchEventType_ActionTimeStamp
+ \value AuditUrlMismatchEventType_Status
+ \value AuditUrlMismatchEventType_ServerId
+ \value AuditUrlMismatchEventType_ClientAuditEntryId
+ \value AuditUrlMismatchEventType_ClientUserId
+ \value AuditUrlMismatchEventType_SecureChannelId
+ \value AuditUrlMismatchEventType_ClientCertificate
+ \value AuditUrlMismatchEventType_ClientCertificateThumbprint
+ \value AuditUrlMismatchEventType_RevisedSessionTimeout
+ \value AuditActivateSessionEventType_EventId
+ \value AuditActivateSessionEventType_EventType
+ \value AuditActivateSessionEventType_SourceNode
+ \value AuditActivateSessionEventType_SourceName
+ \value AuditActivateSessionEventType_Time
+ \value AuditActivateSessionEventType_ReceiveTime
+ \value AuditActivateSessionEventType_LocalTime
+ \value AuditActivateSessionEventType_Message
+ \value AuditActivateSessionEventType_Severity
+ \value AuditActivateSessionEventType_ActionTimeStamp
+ \value AuditActivateSessionEventType_Status
+ \value AuditActivateSessionEventType_ServerId
+ \value AuditActivateSessionEventType_ClientAuditEntryId
+ \value AuditActivateSessionEventType_ClientUserId
+ \value AuditActivateSessionEventType_SessionId
+ \value AuditCancelEventType_EventId
+ \value AuditCancelEventType_EventType
+ \value AuditCancelEventType_SourceNode
+ \value AuditCancelEventType_SourceName
+ \value AuditCancelEventType_Time
+ \value AuditCancelEventType_ReceiveTime
+ \value AuditCancelEventType_LocalTime
+ \value AuditCancelEventType_Message
+ \value AuditCancelEventType_Severity
+ \value AuditCancelEventType_ActionTimeStamp
+ \value AuditCancelEventType_Status
+ \value AuditCancelEventType_ServerId
+ \value AuditCancelEventType_ClientAuditEntryId
+ \value AuditCancelEventType_ClientUserId
+ \value AuditCancelEventType_SessionId
+ \value AuditCertificateEventType_EventId
+ \value AuditCertificateEventType_EventType
+ \value AuditCertificateEventType_SourceNode
+ \value AuditCertificateEventType_SourceName
+ \value AuditCertificateEventType_Time
+ \value AuditCertificateEventType_ReceiveTime
+ \value AuditCertificateEventType_LocalTime
+ \value AuditCertificateEventType_Message
+ \value AuditCertificateEventType_Severity
+ \value AuditCertificateEventType_ActionTimeStamp
+ \value AuditCertificateEventType_Status
+ \value AuditCertificateEventType_ServerId
+ \value AuditCertificateEventType_ClientAuditEntryId
+ \value AuditCertificateEventType_ClientUserId
+ \value AuditCertificateDataMismatchEventType_EventId
+ \value AuditCertificateDataMismatchEventType_EventType
+ \value AuditCertificateDataMismatchEventType_SourceNode
+ \value AuditCertificateDataMismatchEventType_SourceName
+ \value AuditCertificateDataMismatchEventType_Time
+ \value AuditCertificateDataMismatchEventType_ReceiveTime
+ \value AuditCertificateDataMismatchEventType_LocalTime
+ \value AuditCertificateDataMismatchEventType_Message
+ \value AuditCertificateDataMismatchEventType_Severity
+ \value AuditCertificateDataMismatchEventType_ActionTimeStamp
+ \value AuditCertificateDataMismatchEventType_Status
+ \value AuditCertificateDataMismatchEventType_ServerId
+ \value AuditCertificateDataMismatchEventType_ClientAuditEntryId
+ \value AuditCertificateDataMismatchEventType_ClientUserId
+ \value AuditCertificateDataMismatchEventType_Certificate
+ \value AuditCertificateExpiredEventType_EventId
+ \value AuditCertificateExpiredEventType_EventType
+ \value AuditCertificateExpiredEventType_SourceNode
+ \value AuditCertificateExpiredEventType_SourceName
+ \value AuditCertificateExpiredEventType_Time
+ \value AuditCertificateExpiredEventType_ReceiveTime
+ \value AuditCertificateExpiredEventType_LocalTime
+ \value AuditCertificateExpiredEventType_Message
+ \value AuditCertificateExpiredEventType_Severity
+ \value AuditCertificateExpiredEventType_ActionTimeStamp
+ \value AuditCertificateExpiredEventType_Status
+ \value AuditCertificateExpiredEventType_ServerId
+ \value AuditCertificateExpiredEventType_ClientAuditEntryId
+ \value AuditCertificateExpiredEventType_ClientUserId
+ \value AuditCertificateExpiredEventType_Certificate
+ \value AuditCertificateInvalidEventType_EventId
+ \value AuditCertificateInvalidEventType_EventType
+ \value AuditCertificateInvalidEventType_SourceNode
+ \value AuditCertificateInvalidEventType_SourceName
+ \value AuditCertificateInvalidEventType_Time
+ \value AuditCertificateInvalidEventType_ReceiveTime
+ \value AuditCertificateInvalidEventType_LocalTime
+ \value AuditCertificateInvalidEventType_Message
+ \value AuditCertificateInvalidEventType_Severity
+ \value AuditCertificateInvalidEventType_ActionTimeStamp
+ \value AuditCertificateInvalidEventType_Status
+ \value AuditCertificateInvalidEventType_ServerId
+ \value AuditCertificateInvalidEventType_ClientAuditEntryId
+ \value AuditCertificateInvalidEventType_ClientUserId
+ \value AuditCertificateInvalidEventType_Certificate
+ \value AuditCertificateUntrustedEventType_EventId
+ \value AuditCertificateUntrustedEventType_EventType
+ \value AuditCertificateUntrustedEventType_SourceNode
+ \value AuditCertificateUntrustedEventType_SourceName
+ \value AuditCertificateUntrustedEventType_Time
+ \value AuditCertificateUntrustedEventType_ReceiveTime
+ \value AuditCertificateUntrustedEventType_LocalTime
+ \value AuditCertificateUntrustedEventType_Message
+ \value AuditCertificateUntrustedEventType_Severity
+ \value AuditCertificateUntrustedEventType_ActionTimeStamp
+ \value AuditCertificateUntrustedEventType_Status
+ \value AuditCertificateUntrustedEventType_ServerId
+ \value AuditCertificateUntrustedEventType_ClientAuditEntryId
+ \value AuditCertificateUntrustedEventType_ClientUserId
+ \value AuditCertificateUntrustedEventType_Certificate
+ \value AuditCertificateRevokedEventType_EventId
+ \value AuditCertificateRevokedEventType_EventType
+ \value AuditCertificateRevokedEventType_SourceNode
+ \value AuditCertificateRevokedEventType_SourceName
+ \value AuditCertificateRevokedEventType_Time
+ \value AuditCertificateRevokedEventType_ReceiveTime
+ \value AuditCertificateRevokedEventType_LocalTime
+ \value AuditCertificateRevokedEventType_Message
+ \value AuditCertificateRevokedEventType_Severity
+ \value AuditCertificateRevokedEventType_ActionTimeStamp
+ \value AuditCertificateRevokedEventType_Status
+ \value AuditCertificateRevokedEventType_ServerId
+ \value AuditCertificateRevokedEventType_ClientAuditEntryId
+ \value AuditCertificateRevokedEventType_ClientUserId
+ \value AuditCertificateRevokedEventType_Certificate
+ \value AuditCertificateMismatchEventType_EventId
+ \value AuditCertificateMismatchEventType_EventType
+ \value AuditCertificateMismatchEventType_SourceNode
+ \value AuditCertificateMismatchEventType_SourceName
+ \value AuditCertificateMismatchEventType_Time
+ \value AuditCertificateMismatchEventType_ReceiveTime
+ \value AuditCertificateMismatchEventType_LocalTime
+ \value AuditCertificateMismatchEventType_Message
+ \value AuditCertificateMismatchEventType_Severity
+ \value AuditCertificateMismatchEventType_ActionTimeStamp
+ \value AuditCertificateMismatchEventType_Status
+ \value AuditCertificateMismatchEventType_ServerId
+ \value AuditCertificateMismatchEventType_ClientAuditEntryId
+ \value AuditCertificateMismatchEventType_ClientUserId
+ \value AuditCertificateMismatchEventType_Certificate
+ \value AuditNodeManagementEventType_EventId
+ \value AuditNodeManagementEventType_EventType
+ \value AuditNodeManagementEventType_SourceNode
+ \value AuditNodeManagementEventType_SourceName
+ \value AuditNodeManagementEventType_Time
+ \value AuditNodeManagementEventType_ReceiveTime
+ \value AuditNodeManagementEventType_LocalTime
+ \value AuditNodeManagementEventType_Message
+ \value AuditNodeManagementEventType_Severity
+ \value AuditNodeManagementEventType_ActionTimeStamp
+ \value AuditNodeManagementEventType_Status
+ \value AuditNodeManagementEventType_ServerId
+ \value AuditNodeManagementEventType_ClientAuditEntryId
+ \value AuditNodeManagementEventType_ClientUserId
+ \value AuditAddNodesEventType_EventId
+ \value AuditAddNodesEventType_EventType
+ \value AuditAddNodesEventType_SourceNode
+ \value AuditAddNodesEventType_SourceName
+ \value AuditAddNodesEventType_Time
+ \value AuditAddNodesEventType_ReceiveTime
+ \value AuditAddNodesEventType_LocalTime
+ \value AuditAddNodesEventType_Message
+ \value AuditAddNodesEventType_Severity
+ \value AuditAddNodesEventType_ActionTimeStamp
+ \value AuditAddNodesEventType_Status
+ \value AuditAddNodesEventType_ServerId
+ \value AuditAddNodesEventType_ClientAuditEntryId
+ \value AuditAddNodesEventType_ClientUserId
+ \value AuditDeleteNodesEventType_EventId
+ \value AuditDeleteNodesEventType_EventType
+ \value AuditDeleteNodesEventType_SourceNode
+ \value AuditDeleteNodesEventType_SourceName
+ \value AuditDeleteNodesEventType_Time
+ \value AuditDeleteNodesEventType_ReceiveTime
+ \value AuditDeleteNodesEventType_LocalTime
+ \value AuditDeleteNodesEventType_Message
+ \value AuditDeleteNodesEventType_Severity
+ \value AuditDeleteNodesEventType_ActionTimeStamp
+ \value AuditDeleteNodesEventType_Status
+ \value AuditDeleteNodesEventType_ServerId
+ \value AuditDeleteNodesEventType_ClientAuditEntryId
+ \value AuditDeleteNodesEventType_ClientUserId
+ \value AuditAddReferencesEventType_EventId
+ \value AuditAddReferencesEventType_EventType
+ \value AuditAddReferencesEventType_SourceNode
+ \value AuditAddReferencesEventType_SourceName
+ \value AuditAddReferencesEventType_Time
+ \value AuditAddReferencesEventType_ReceiveTime
+ \value AuditAddReferencesEventType_LocalTime
+ \value AuditAddReferencesEventType_Message
+ \value AuditAddReferencesEventType_Severity
+ \value AuditAddReferencesEventType_ActionTimeStamp
+ \value AuditAddReferencesEventType_Status
+ \value AuditAddReferencesEventType_ServerId
+ \value AuditAddReferencesEventType_ClientAuditEntryId
+ \value AuditAddReferencesEventType_ClientUserId
+ \value AuditDeleteReferencesEventType_EventId
+ \value AuditDeleteReferencesEventType_EventType
+ \value AuditDeleteReferencesEventType_SourceNode
+ \value AuditDeleteReferencesEventType_SourceName
+ \value AuditDeleteReferencesEventType_Time
+ \value AuditDeleteReferencesEventType_ReceiveTime
+ \value AuditDeleteReferencesEventType_LocalTime
+ \value AuditDeleteReferencesEventType_Message
+ \value AuditDeleteReferencesEventType_Severity
+ \value AuditDeleteReferencesEventType_ActionTimeStamp
+ \value AuditDeleteReferencesEventType_Status
+ \value AuditDeleteReferencesEventType_ServerId
+ \value AuditDeleteReferencesEventType_ClientAuditEntryId
+ \value AuditDeleteReferencesEventType_ClientUserId
+ \value AuditUpdateEventType_EventId
+ \value AuditUpdateEventType_EventType
+ \value AuditUpdateEventType_SourceNode
+ \value AuditUpdateEventType_SourceName
+ \value AuditUpdateEventType_Time
+ \value AuditUpdateEventType_ReceiveTime
+ \value AuditUpdateEventType_LocalTime
+ \value AuditUpdateEventType_Message
+ \value AuditUpdateEventType_Severity
+ \value AuditUpdateEventType_ActionTimeStamp
+ \value AuditUpdateEventType_Status
+ \value AuditUpdateEventType_ServerId
+ \value AuditUpdateEventType_ClientAuditEntryId
+ \value AuditUpdateEventType_ClientUserId
+ \value AuditWriteUpdateEventType_EventId
+ \value AuditWriteUpdateEventType_EventType
+ \value AuditWriteUpdateEventType_SourceNode
+ \value AuditWriteUpdateEventType_SourceName
+ \value AuditWriteUpdateEventType_Time
+ \value AuditWriteUpdateEventType_ReceiveTime
+ \value AuditWriteUpdateEventType_LocalTime
+ \value AuditWriteUpdateEventType_Message
+ \value AuditWriteUpdateEventType_Severity
+ \value AuditWriteUpdateEventType_ActionTimeStamp
+ \value AuditWriteUpdateEventType_Status
+ \value AuditWriteUpdateEventType_ServerId
+ \value AuditWriteUpdateEventType_ClientAuditEntryId
+ \value AuditWriteUpdateEventType_ClientUserId
+ \value AuditHistoryUpdateEventType_EventId
+ \value AuditHistoryUpdateEventType_EventType
+ \value AuditHistoryUpdateEventType_SourceNode
+ \value AuditHistoryUpdateEventType_SourceName
+ \value AuditHistoryUpdateEventType_Time
+ \value AuditHistoryUpdateEventType_ReceiveTime
+ \value AuditHistoryUpdateEventType_LocalTime
+ \value AuditHistoryUpdateEventType_Message
+ \value AuditHistoryUpdateEventType_Severity
+ \value AuditHistoryUpdateEventType_ActionTimeStamp
+ \value AuditHistoryUpdateEventType_Status
+ \value AuditHistoryUpdateEventType_ServerId
+ \value AuditHistoryUpdateEventType_ClientAuditEntryId
+ \value AuditHistoryUpdateEventType_ClientUserId
+ \value AuditHistoryEventUpdateEventType_EventId
+ \value AuditHistoryEventUpdateEventType_EventType
+ \value AuditHistoryEventUpdateEventType_SourceNode
+ \value AuditHistoryEventUpdateEventType_SourceName
+ \value AuditHistoryEventUpdateEventType_Time
+ \value AuditHistoryEventUpdateEventType_ReceiveTime
+ \value AuditHistoryEventUpdateEventType_LocalTime
+ \value AuditHistoryEventUpdateEventType_Message
+ \value AuditHistoryEventUpdateEventType_Severity
+ \value AuditHistoryEventUpdateEventType_ActionTimeStamp
+ \value AuditHistoryEventUpdateEventType_Status
+ \value AuditHistoryEventUpdateEventType_ServerId
+ \value AuditHistoryEventUpdateEventType_ClientAuditEntryId
+ \value AuditHistoryEventUpdateEventType_ClientUserId
+ \value AuditHistoryEventUpdateEventType_ParameterDataTypeId
+ \value AuditHistoryValueUpdateEventType_EventId
+ \value AuditHistoryValueUpdateEventType_EventType
+ \value AuditHistoryValueUpdateEventType_SourceNode
+ \value AuditHistoryValueUpdateEventType_SourceName
+ \value AuditHistoryValueUpdateEventType_Time
+ \value AuditHistoryValueUpdateEventType_ReceiveTime
+ \value AuditHistoryValueUpdateEventType_LocalTime
+ \value AuditHistoryValueUpdateEventType_Message
+ \value AuditHistoryValueUpdateEventType_Severity
+ \value AuditHistoryValueUpdateEventType_ActionTimeStamp
+ \value AuditHistoryValueUpdateEventType_Status
+ \value AuditHistoryValueUpdateEventType_ServerId
+ \value AuditHistoryValueUpdateEventType_ClientAuditEntryId
+ \value AuditHistoryValueUpdateEventType_ClientUserId
+ \value AuditHistoryValueUpdateEventType_ParameterDataTypeId
+ \value AuditHistoryDeleteEventType_EventId
+ \value AuditHistoryDeleteEventType_EventType
+ \value AuditHistoryDeleteEventType_SourceNode
+ \value AuditHistoryDeleteEventType_SourceName
+ \value AuditHistoryDeleteEventType_Time
+ \value AuditHistoryDeleteEventType_ReceiveTime
+ \value AuditHistoryDeleteEventType_LocalTime
+ \value AuditHistoryDeleteEventType_Message
+ \value AuditHistoryDeleteEventType_Severity
+ \value AuditHistoryDeleteEventType_ActionTimeStamp
+ \value AuditHistoryDeleteEventType_Status
+ \value AuditHistoryDeleteEventType_ServerId
+ \value AuditHistoryDeleteEventType_ClientAuditEntryId
+ \value AuditHistoryDeleteEventType_ClientUserId
+ \value AuditHistoryDeleteEventType_ParameterDataTypeId
+ \value AuditHistoryRawModifyDeleteEventType_EventId
+ \value AuditHistoryRawModifyDeleteEventType_EventType
+ \value AuditHistoryRawModifyDeleteEventType_SourceNode
+ \value AuditHistoryRawModifyDeleteEventType_SourceName
+ \value AuditHistoryRawModifyDeleteEventType_Time
+ \value AuditHistoryRawModifyDeleteEventType_ReceiveTime
+ \value AuditHistoryRawModifyDeleteEventType_LocalTime
+ \value AuditHistoryRawModifyDeleteEventType_Message
+ \value AuditHistoryRawModifyDeleteEventType_Severity
+ \value AuditHistoryRawModifyDeleteEventType_ActionTimeStamp
+ \value AuditHistoryRawModifyDeleteEventType_Status
+ \value AuditHistoryRawModifyDeleteEventType_ServerId
+ \value AuditHistoryRawModifyDeleteEventType_ClientAuditEntryId
+ \value AuditHistoryRawModifyDeleteEventType_ClientUserId
+ \value AuditHistoryRawModifyDeleteEventType_ParameterDataTypeId
+ \value AuditHistoryRawModifyDeleteEventType_UpdatedNode
+ \value AuditHistoryAtTimeDeleteEventType_EventId
+ \value AuditHistoryAtTimeDeleteEventType_EventType
+ \value AuditHistoryAtTimeDeleteEventType_SourceNode
+ \value AuditHistoryAtTimeDeleteEventType_SourceName
+ \value AuditHistoryAtTimeDeleteEventType_Time
+ \value AuditHistoryAtTimeDeleteEventType_ReceiveTime
+ \value AuditHistoryAtTimeDeleteEventType_LocalTime
+ \value AuditHistoryAtTimeDeleteEventType_Message
+ \value AuditHistoryAtTimeDeleteEventType_Severity
+ \value AuditHistoryAtTimeDeleteEventType_ActionTimeStamp
+ \value AuditHistoryAtTimeDeleteEventType_Status
+ \value AuditHistoryAtTimeDeleteEventType_ServerId
+ \value AuditHistoryAtTimeDeleteEventType_ClientAuditEntryId
+ \value AuditHistoryAtTimeDeleteEventType_ClientUserId
+ \value AuditHistoryAtTimeDeleteEventType_ParameterDataTypeId
+ \value AuditHistoryAtTimeDeleteEventType_UpdatedNode
+ \value AuditHistoryEventDeleteEventType_EventId
+ \value AuditHistoryEventDeleteEventType_EventType
+ \value AuditHistoryEventDeleteEventType_SourceNode
+ \value AuditHistoryEventDeleteEventType_SourceName
+ \value AuditHistoryEventDeleteEventType_Time
+ \value AuditHistoryEventDeleteEventType_ReceiveTime
+ \value AuditHistoryEventDeleteEventType_LocalTime
+ \value AuditHistoryEventDeleteEventType_Message
+ \value AuditHistoryEventDeleteEventType_Severity
+ \value AuditHistoryEventDeleteEventType_ActionTimeStamp
+ \value AuditHistoryEventDeleteEventType_Status
+ \value AuditHistoryEventDeleteEventType_ServerId
+ \value AuditHistoryEventDeleteEventType_ClientAuditEntryId
+ \value AuditHistoryEventDeleteEventType_ClientUserId
+ \value AuditHistoryEventDeleteEventType_ParameterDataTypeId
+ \value AuditHistoryEventDeleteEventType_UpdatedNode
+ \value AuditUpdateMethodEventType_EventId
+ \value AuditUpdateMethodEventType_EventType
+ \value AuditUpdateMethodEventType_SourceNode
+ \value AuditUpdateMethodEventType_SourceName
+ \value AuditUpdateMethodEventType_Time
+ \value AuditUpdateMethodEventType_ReceiveTime
+ \value AuditUpdateMethodEventType_LocalTime
+ \value AuditUpdateMethodEventType_Message
+ \value AuditUpdateMethodEventType_Severity
+ \value AuditUpdateMethodEventType_ActionTimeStamp
+ \value AuditUpdateMethodEventType_Status
+ \value AuditUpdateMethodEventType_ServerId
+ \value AuditUpdateMethodEventType_ClientAuditEntryId
+ \value AuditUpdateMethodEventType_ClientUserId
+ \value SystemEventType_EventId
+ \value SystemEventType_EventType
+ \value SystemEventType_SourceNode
+ \value SystemEventType_SourceName
+ \value SystemEventType_Time
+ \value SystemEventType_ReceiveTime
+ \value SystemEventType_LocalTime
+ \value SystemEventType_Message
+ \value SystemEventType_Severity
+ \value DeviceFailureEventType_EventId
+ \value DeviceFailureEventType_EventType
+ \value DeviceFailureEventType_SourceNode
+ \value DeviceFailureEventType_SourceName
+ \value DeviceFailureEventType_Time
+ \value DeviceFailureEventType_ReceiveTime
+ \value DeviceFailureEventType_LocalTime
+ \value DeviceFailureEventType_Message
+ \value DeviceFailureEventType_Severity
+ \value BaseModelChangeEventType_EventId
+ \value BaseModelChangeEventType_EventType
+ \value BaseModelChangeEventType_SourceNode
+ \value BaseModelChangeEventType_SourceName
+ \value BaseModelChangeEventType_Time
+ \value BaseModelChangeEventType_ReceiveTime
+ \value BaseModelChangeEventType_LocalTime
+ \value BaseModelChangeEventType_Message
+ \value BaseModelChangeEventType_Severity
+ \value GeneralModelChangeEventType_EventId
+ \value GeneralModelChangeEventType_EventType
+ \value GeneralModelChangeEventType_SourceNode
+ \value GeneralModelChangeEventType_SourceName
+ \value GeneralModelChangeEventType_Time
+ \value GeneralModelChangeEventType_ReceiveTime
+ \value GeneralModelChangeEventType_LocalTime
+ \value GeneralModelChangeEventType_Message
+ \value GeneralModelChangeEventType_Severity
+ \value SemanticChangeEventType_EventId
+ \value SemanticChangeEventType_EventType
+ \value SemanticChangeEventType_SourceNode
+ \value SemanticChangeEventType_SourceName
+ \value SemanticChangeEventType_Time
+ \value SemanticChangeEventType_ReceiveTime
+ \value SemanticChangeEventType_LocalTime
+ \value SemanticChangeEventType_Message
+ \value SemanticChangeEventType_Severity
+ \value ServerStatusType_BuildInfo_ProductUri
+ \value ServerStatusType_BuildInfo_ManufacturerName
+ \value ServerStatusType_BuildInfo_ProductName
+ \value ServerStatusType_BuildInfo_SoftwareVersion
+ \value ServerStatusType_BuildInfo_BuildNumber
+ \value ServerStatusType_BuildInfo_BuildDate
+ \value Server_ServerCapabilities_SoftwareCertificates
+ \value Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount
+ \value Server_ServerDiagnostics_SessionsDiagnosticsSummary
+ \value Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray
+ \value Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray
+ \value Server_ServerRedundancy_RedundancySupport
+ \value FiniteStateVariableType_Name
+ \value FiniteStateVariableType_Number
+ \value FiniteStateVariableType_EffectiveDisplayName
+ \value FiniteTransitionVariableType_Name
+ \value FiniteTransitionVariableType_Number
+ \value FiniteTransitionVariableType_TransitionTime
+ \value StateMachineType_CurrentState_Id
+ \value StateMachineType_CurrentState_Name
+ \value StateMachineType_CurrentState_Number
+ \value StateMachineType_CurrentState_EffectiveDisplayName
+ \value StateMachineType_LastTransition_Id
+ \value StateMachineType_LastTransition_Name
+ \value StateMachineType_LastTransition_Number
+ \value StateMachineType_LastTransition_TransitionTime
+ \value FiniteStateMachineType_CurrentState_Id
+ \value FiniteStateMachineType_CurrentState_Name
+ \value FiniteStateMachineType_CurrentState_Number
+ \value FiniteStateMachineType_CurrentState_EffectiveDisplayName
+ \value FiniteStateMachineType_LastTransition_Id
+ \value FiniteStateMachineType_LastTransition_Name
+ \value FiniteStateMachineType_LastTransition_Number
+ \value FiniteStateMachineType_LastTransition_TransitionTime
+ \value InitialStateType_StateNumber
+ \value TransitionEventType_EventId
+ \value TransitionEventType_EventType
+ \value TransitionEventType_SourceNode
+ \value TransitionEventType_SourceName
+ \value TransitionEventType_Time
+ \value TransitionEventType_ReceiveTime
+ \value TransitionEventType_LocalTime
+ \value TransitionEventType_Message
+ \value TransitionEventType_Severity
+ \value TransitionEventType_FromState_Id
+ \value TransitionEventType_FromState_Name
+ \value TransitionEventType_FromState_Number
+ \value TransitionEventType_FromState_EffectiveDisplayName
+ \value TransitionEventType_ToState_Id
+ \value TransitionEventType_ToState_Name
+ \value TransitionEventType_ToState_Number
+ \value TransitionEventType_ToState_EffectiveDisplayName
+ \value TransitionEventType_Transition_Id
+ \value TransitionEventType_Transition_Name
+ \value TransitionEventType_Transition_Number
+ \value TransitionEventType_Transition_TransitionTime
+ \value AuditUpdateStateEventType_EventId
+ \value AuditUpdateStateEventType_EventType
+ \value AuditUpdateStateEventType_SourceNode
+ \value AuditUpdateStateEventType_SourceName
+ \value AuditUpdateStateEventType_Time
+ \value AuditUpdateStateEventType_ReceiveTime
+ \value AuditUpdateStateEventType_LocalTime
+ \value AuditUpdateStateEventType_Message
+ \value AuditUpdateStateEventType_Severity
+ \value AuditUpdateStateEventType_ActionTimeStamp
+ \value AuditUpdateStateEventType_Status
+ \value AuditUpdateStateEventType_ServerId
+ \value AuditUpdateStateEventType_ClientAuditEntryId
+ \value AuditUpdateStateEventType_ClientUserId
+ \value AuditUpdateStateEventType_MethodId
+ \value AuditUpdateStateEventType_InputArguments
+ \value AnalogItemType_Definition
+ \value AnalogItemType_ValuePrecision
+ \value DiscreteItemType_Definition
+ \value DiscreteItemType_ValuePrecision
+ \value TwoStateDiscreteType_Definition
+ \value TwoStateDiscreteType_ValuePrecision
+ \value MultiStateDiscreteType_Definition
+ \value MultiStateDiscreteType_ValuePrecision
+ \value ProgramTransitionEventType_EventId
+ \value ProgramTransitionEventType_EventType
+ \value ProgramTransitionEventType_SourceNode
+ \value ProgramTransitionEventType_SourceName
+ \value ProgramTransitionEventType_Time
+ \value ProgramTransitionEventType_ReceiveTime
+ \value ProgramTransitionEventType_LocalTime
+ \value ProgramTransitionEventType_Message
+ \value ProgramTransitionEventType_Severity
+ \value ProgramTransitionEventType_FromState
+ \value ProgramTransitionEventType_FromState_Id
+ \value ProgramTransitionEventType_FromState_Name
+ \value ProgramTransitionEventType_FromState_Number
+ \value ProgramTransitionEventType_FromState_EffectiveDisplayName
+ \value ProgramTransitionEventType_ToState
+ \value ProgramTransitionEventType_ToState_Id
+ \value ProgramTransitionEventType_ToState_Name
+ \value ProgramTransitionEventType_ToState_Number
+ \value ProgramTransitionEventType_ToState_EffectiveDisplayName
+ \value ProgramTransitionEventType_Transition
+ \value ProgramTransitionEventType_Transition_Id
+ \value ProgramTransitionEventType_Transition_Name
+ \value ProgramTransitionEventType_Transition_Number
+ \value ProgramTransitionEventType_Transition_TransitionTime
+ \value ProgramTransitionAuditEventType
+ \value ProgramTransitionAuditEventType_EventId
+ \value ProgramTransitionAuditEventType_EventType
+ \value ProgramTransitionAuditEventType_SourceNode
+ \value ProgramTransitionAuditEventType_SourceName
+ \value ProgramTransitionAuditEventType_Time
+ \value ProgramTransitionAuditEventType_ReceiveTime
+ \value ProgramTransitionAuditEventType_LocalTime
+ \value ProgramTransitionAuditEventType_Message
+ \value ProgramTransitionAuditEventType_Severity
+ \value ProgramTransitionAuditEventType_ActionTimeStamp
+ \value ProgramTransitionAuditEventType_Status
+ \value ProgramTransitionAuditEventType_ServerId
+ \value ProgramTransitionAuditEventType_ClientAuditEntryId
+ \value ProgramTransitionAuditEventType_ClientUserId
+ \value ProgramTransitionAuditEventType_MethodId
+ \value ProgramTransitionAuditEventType_InputArguments
+ \value ProgramTransitionAuditEventType_OldStateId
+ \value ProgramTransitionAuditEventType_NewStateId
+ \value ProgramTransitionAuditEventType_Transition
+ \value ProgramTransitionAuditEventType_Transition_Id
+ \value ProgramTransitionAuditEventType_Transition_Name
+ \value ProgramTransitionAuditEventType_Transition_Number
+ \value ProgramTransitionAuditEventType_Transition_TransitionTime
+ \value ProgramStateMachineType_CurrentState
+ \value ProgramStateMachineType_CurrentState_Id
+ \value ProgramStateMachineType_CurrentState_Name
+ \value ProgramStateMachineType_CurrentState_Number
+ \value ProgramStateMachineType_CurrentState_EffectiveDisplayName
+ \value ProgramStateMachineType_LastTransition
+ \value ProgramStateMachineType_LastTransition_Id
+ \value ProgramStateMachineType_LastTransition_Name
+ \value ProgramStateMachineType_LastTransition_Number
+ \value ProgramStateMachineType_LastTransition_TransitionTime
+ \value ProgramStateMachineType_ProgramDiagnostics_CreateSessionId
+ \value ProgramStateMachineType_ProgramDiagnostics_CreateClientName
+ \value ProgramStateMachineType_ProgramDiagnostics_InvocationCreationTime
+ \value ProgramStateMachineType_ProgramDiagnostics_LastTransitionTime
+ \value ProgramStateMachineType_ProgramDiagnostics_LastMethodCall
+ \value ProgramStateMachineType_ProgramDiagnostics_LastMethodSessionId
+ \value ProgramStateMachineType_ProgramDiagnostics_LastMethodInputArguments
+ \value ProgramStateMachineType_ProgramDiagnostics_LastMethodOutputArguments
+ \value ProgramStateMachineType_ProgramDiagnostics_LastMethodCallTime
+ \value ProgramStateMachineType_ProgramDiagnostics_LastMethodReturnStatus
+ \value ProgramStateMachineType_FinalResultData
+ \value AddCommentMethodType
+ \value AddCommentMethodType_InputArguments
+ \value ConditionType_EventId
+ \value ConditionType_EventType
+ \value ConditionType_SourceNode
+ \value ConditionType_SourceName
+ \value ConditionType_Time
+ \value ConditionType_ReceiveTime
+ \value ConditionType_LocalTime
+ \value ConditionType_Message
+ \value ConditionType_Severity
+ \value ConditionType_Retain
+ \value ConditionType_ConditionRefresh
+ \value ConditionType_ConditionRefresh_InputArguments
+ \value RefreshStartEventType_EventId
+ \value RefreshStartEventType_EventType
+ \value RefreshStartEventType_SourceNode
+ \value RefreshStartEventType_SourceName
+ \value RefreshStartEventType_Time
+ \value RefreshStartEventType_ReceiveTime
+ \value RefreshStartEventType_LocalTime
+ \value RefreshStartEventType_Message
+ \value RefreshStartEventType_Severity
+ \value RefreshEndEventType_EventId
+ \value RefreshEndEventType_EventType
+ \value RefreshEndEventType_SourceNode
+ \value RefreshEndEventType_SourceName
+ \value RefreshEndEventType_Time
+ \value RefreshEndEventType_ReceiveTime
+ \value RefreshEndEventType_LocalTime
+ \value RefreshEndEventType_Message
+ \value RefreshEndEventType_Severity
+ \value RefreshRequiredEventType_EventId
+ \value RefreshRequiredEventType_EventType
+ \value RefreshRequiredEventType_SourceNode
+ \value RefreshRequiredEventType_SourceName
+ \value RefreshRequiredEventType_Time
+ \value RefreshRequiredEventType_ReceiveTime
+ \value RefreshRequiredEventType_LocalTime
+ \value RefreshRequiredEventType_Message
+ \value RefreshRequiredEventType_Severity
+ \value AuditConditionEventType_EventId
+ \value AuditConditionEventType_EventType
+ \value AuditConditionEventType_SourceNode
+ \value AuditConditionEventType_SourceName
+ \value AuditConditionEventType_Time
+ \value AuditConditionEventType_ReceiveTime
+ \value AuditConditionEventType_LocalTime
+ \value AuditConditionEventType_Message
+ \value AuditConditionEventType_Severity
+ \value AuditConditionEventType_ActionTimeStamp
+ \value AuditConditionEventType_Status
+ \value AuditConditionEventType_ServerId
+ \value AuditConditionEventType_ClientAuditEntryId
+ \value AuditConditionEventType_ClientUserId
+ \value AuditConditionEventType_MethodId
+ \value AuditConditionEventType_InputArguments
+ \value AuditConditionEnableEventType_EventId
+ \value AuditConditionEnableEventType_EventType
+ \value AuditConditionEnableEventType_SourceNode
+ \value AuditConditionEnableEventType_SourceName
+ \value AuditConditionEnableEventType_Time
+ \value AuditConditionEnableEventType_ReceiveTime
+ \value AuditConditionEnableEventType_LocalTime
+ \value AuditConditionEnableEventType_Message
+ \value AuditConditionEnableEventType_Severity
+ \value AuditConditionEnableEventType_ActionTimeStamp
+ \value AuditConditionEnableEventType_Status
+ \value AuditConditionEnableEventType_ServerId
+ \value AuditConditionEnableEventType_ClientAuditEntryId
+ \value AuditConditionEnableEventType_ClientUserId
+ \value AuditConditionEnableEventType_MethodId
+ \value AuditConditionEnableEventType_InputArguments
+ \value AuditConditionCommentEventType_EventId
+ \value AuditConditionCommentEventType_EventType
+ \value AuditConditionCommentEventType_SourceNode
+ \value AuditConditionCommentEventType_SourceName
+ \value AuditConditionCommentEventType_Time
+ \value AuditConditionCommentEventType_ReceiveTime
+ \value AuditConditionCommentEventType_LocalTime
+ \value AuditConditionCommentEventType_Message
+ \value AuditConditionCommentEventType_Severity
+ \value AuditConditionCommentEventType_ActionTimeStamp
+ \value AuditConditionCommentEventType_Status
+ \value AuditConditionCommentEventType_ServerId
+ \value AuditConditionCommentEventType_ClientAuditEntryId
+ \value AuditConditionCommentEventType_ClientUserId
+ \value AuditConditionCommentEventType_MethodId
+ \value AuditConditionCommentEventType_InputArguments
+ \value DialogConditionType_EventId
+ \value DialogConditionType_EventType
+ \value DialogConditionType_SourceNode
+ \value DialogConditionType_SourceName
+ \value DialogConditionType_Time
+ \value DialogConditionType_ReceiveTime
+ \value DialogConditionType_LocalTime
+ \value DialogConditionType_Message
+ \value DialogConditionType_Severity
+ \value DialogConditionType_Retain
+ \value DialogConditionType_ConditionRefresh
+ \value DialogConditionType_ConditionRefresh_InputArguments
+ \value AcknowledgeableConditionType_EventId
+ \value AcknowledgeableConditionType_EventType
+ \value AcknowledgeableConditionType_SourceNode
+ \value AcknowledgeableConditionType_SourceName
+ \value AcknowledgeableConditionType_Time
+ \value AcknowledgeableConditionType_ReceiveTime
+ \value AcknowledgeableConditionType_LocalTime
+ \value AcknowledgeableConditionType_Message
+ \value AcknowledgeableConditionType_Severity
+ \value AcknowledgeableConditionType_Retain
+ \value AcknowledgeableConditionType_ConditionRefresh
+ \value AcknowledgeableConditionType_ConditionRefresh_InputArguments
+ \value AlarmConditionType_EventId
+ \value AlarmConditionType_EventType
+ \value AlarmConditionType_SourceNode
+ \value AlarmConditionType_SourceName
+ \value AlarmConditionType_Time
+ \value AlarmConditionType_ReceiveTime
+ \value AlarmConditionType_LocalTime
+ \value AlarmConditionType_Message
+ \value AlarmConditionType_Severity
+ \value AlarmConditionType_Retain
+ \value AlarmConditionType_ConditionRefresh
+ \value AlarmConditionType_ConditionRefresh_InputArguments
+ \value ShelvedStateMachineType_CurrentState
+ \value ShelvedStateMachineType_CurrentState_Id
+ \value ShelvedStateMachineType_CurrentState_Name
+ \value ShelvedStateMachineType_CurrentState_Number
+ \value ShelvedStateMachineType_CurrentState_EffectiveDisplayName
+ \value ShelvedStateMachineType_LastTransition
+ \value ShelvedStateMachineType_LastTransition_Id
+ \value ShelvedStateMachineType_LastTransition_Name
+ \value ShelvedStateMachineType_LastTransition_Number
+ \value ShelvedStateMachineType_LastTransition_TransitionTime
+ \value ShelvedStateMachineType_Unshelved_StateNumber
+ \value ShelvedStateMachineType_TimedShelved_StateNumber
+ \value ShelvedStateMachineType_OneShotShelved_StateNumber
+ \value TimedShelveMethodType
+ \value TimedShelveMethodType_InputArguments
+ \value LimitAlarmType_EventId
+ \value LimitAlarmType_EventType
+ \value LimitAlarmType_SourceNode
+ \value LimitAlarmType_SourceName
+ \value LimitAlarmType_Time
+ \value LimitAlarmType_ReceiveTime
+ \value LimitAlarmType_LocalTime
+ \value LimitAlarmType_Message
+ \value LimitAlarmType_Severity
+ \value LimitAlarmType_Retain
+ \value LimitAlarmType_ConditionRefresh
+ \value LimitAlarmType_ConditionRefresh_InputArguments
+ \value IdType_EnumStrings
+ \value EnumValueType
+ \value MessageSecurityMode_EnumStrings
+ \value UserTokenType_EnumStrings
+ \value ApplicationType_EnumStrings
+ \value SecurityTokenRequestType_EnumStrings
+ \value BrowseDirection_EnumStrings
+ \value FilterOperator_EnumStrings
+ \value TimestampsToReturn_EnumStrings
+ \value MonitoringMode_EnumStrings
+ \value DataChangeTrigger_EnumStrings
+ \value DeadbandType_EnumStrings
+ \value RedundancySupport_EnumStrings
+ \value ServerState_EnumStrings
+ \value ExceptionDeviationFormat_EnumStrings
+ \value EnumValueType_Encoding_DefaultXml
+ \value OpcUa_BinarySchema
+ \value OpcUa_BinarySchema_DataTypeVersion
+ \value OpcUa_BinarySchema_NamespaceUri
+ \value OpcUa_BinarySchema_Argument
+ \value OpcUa_BinarySchema_Argument_DataTypeVersion
+ \value OpcUa_BinarySchema_Argument_DictionaryFragment
+ \value OpcUa_BinarySchema_EnumValueType
+ \value OpcUa_BinarySchema_EnumValueType_DataTypeVersion
+ \value OpcUa_BinarySchema_EnumValueType_DictionaryFragment
+ \value OpcUa_BinarySchema_StatusResult
+ \value OpcUa_BinarySchema_StatusResult_DataTypeVersion
+ \value OpcUa_BinarySchema_StatusResult_DictionaryFragment
+ \value OpcUa_BinarySchema_UserTokenPolicy
+ \value OpcUa_BinarySchema_UserTokenPolicy_DataTypeVersion
+ \value OpcUa_BinarySchema_UserTokenPolicy_DictionaryFragment
+ \value OpcUa_BinarySchema_ApplicationDescription
+ \value OpcUa_BinarySchema_ApplicationDescription_DataTypeVersion
+ \value OpcUa_BinarySchema_ApplicationDescription_DictionaryFragment
+ \value OpcUa_BinarySchema_EndpointDescription
+ \value OpcUa_BinarySchema_EndpointDescription_DataTypeVersion
+ \value OpcUa_BinarySchema_EndpointDescription_DictionaryFragment
+ \value OpcUa_BinarySchema_UserIdentityToken
+ \value OpcUa_BinarySchema_UserIdentityToken_DataTypeVersion
+ \value OpcUa_BinarySchema_UserIdentityToken_DictionaryFragment
+ \value OpcUa_BinarySchema_AnonymousIdentityToken
+ \value OpcUa_BinarySchema_AnonymousIdentityToken_DataTypeVersion
+ \value OpcUa_BinarySchema_AnonymousIdentityToken_DictionaryFragment
+ \value OpcUa_BinarySchema_UserNameIdentityToken
+ \value OpcUa_BinarySchema_UserNameIdentityToken_DataTypeVersion
+ \value OpcUa_BinarySchema_UserNameIdentityToken_DictionaryFragment
+ \value OpcUa_BinarySchema_X509IdentityToken
+ \value OpcUa_BinarySchema_X509IdentityToken_DataTypeVersion
+ \value OpcUa_BinarySchema_X509IdentityToken_DictionaryFragment
+ \value OpcUa_BinarySchema_IssuedIdentityToken
+ \value OpcUa_BinarySchema_IssuedIdentityToken_DataTypeVersion
+ \value OpcUa_BinarySchema_IssuedIdentityToken_DictionaryFragment
+ \value OpcUa_BinarySchema_EndpointConfiguration
+ \value OpcUa_BinarySchema_EndpointConfiguration_DataTypeVersion
+ \value OpcUa_BinarySchema_EndpointConfiguration_DictionaryFragment
+ \value OpcUa_BinarySchema_BuildInfo
+ \value OpcUa_BinarySchema_BuildInfo_DataTypeVersion
+ \value OpcUa_BinarySchema_BuildInfo_DictionaryFragment
+ \value OpcUa_BinarySchema_SignedSoftwareCertificate
+ \value OpcUa_BinarySchema_SignedSoftwareCertificate_DataTypeVersion
+ \value OpcUa_BinarySchema_SignedSoftwareCertificate_DictionaryFragment
+ \value OpcUa_BinarySchema_AddNodesItem
+ \value OpcUa_BinarySchema_AddNodesItem_DataTypeVersion
+ \value OpcUa_BinarySchema_AddNodesItem_DictionaryFragment
+ \value OpcUa_BinarySchema_AddReferencesItem
+ \value OpcUa_BinarySchema_AddReferencesItem_DataTypeVersion
+ \value OpcUa_BinarySchema_AddReferencesItem_DictionaryFragment
+ \value OpcUa_BinarySchema_DeleteNodesItem
+ \value OpcUa_BinarySchema_DeleteNodesItem_DataTypeVersion
+ \value OpcUa_BinarySchema_DeleteNodesItem_DictionaryFragment
+ \value OpcUa_BinarySchema_DeleteReferencesItem
+ \value OpcUa_BinarySchema_DeleteReferencesItem_DataTypeVersion
+ \value OpcUa_BinarySchema_DeleteReferencesItem_DictionaryFragment
+ \value OpcUa_BinarySchema_RegisteredServer
+ \value OpcUa_BinarySchema_RegisteredServer_DataTypeVersion
+ \value OpcUa_BinarySchema_RegisteredServer_DictionaryFragment
+ \value OpcUa_BinarySchema_ContentFilterElement
+ \value OpcUa_BinarySchema_ContentFilterElement_DataTypeVersion
+ \value OpcUa_BinarySchema_ContentFilterElement_DictionaryFragment
+ \value OpcUa_BinarySchema_ContentFilter
+ \value OpcUa_BinarySchema_ContentFilter_DataTypeVersion
+ \value OpcUa_BinarySchema_ContentFilter_DictionaryFragment
+ \value OpcUa_BinarySchema_FilterOperand
+ \value OpcUa_BinarySchema_FilterOperand_DataTypeVersion
+ \value OpcUa_BinarySchema_FilterOperand_DictionaryFragment
+ \value OpcUa_BinarySchema_ElementOperand
+ \value OpcUa_BinarySchema_ElementOperand_DataTypeVersion
+ \value OpcUa_BinarySchema_ElementOperand_DictionaryFragment
+ \value OpcUa_BinarySchema_LiteralOperand
+ \value OpcUa_BinarySchema_LiteralOperand_DataTypeVersion
+ \value OpcUa_BinarySchema_LiteralOperand_DictionaryFragment
+ \value OpcUa_BinarySchema_AttributeOperand
+ \value OpcUa_BinarySchema_AttributeOperand_DataTypeVersion
+ \value OpcUa_BinarySchema_AttributeOperand_DictionaryFragment
+ \value OpcUa_BinarySchema_SimpleAttributeOperand
+ \value OpcUa_BinarySchema_SimpleAttributeOperand_DataTypeVersion
+ \value OpcUa_BinarySchema_SimpleAttributeOperand_DictionaryFragment
+ \value OpcUa_BinarySchema_HistoryEvent
+ \value OpcUa_BinarySchema_HistoryEvent_DataTypeVersion
+ \value OpcUa_BinarySchema_HistoryEvent_DictionaryFragment
+ \value OpcUa_BinarySchema_MonitoringFilter
+ \value OpcUa_BinarySchema_MonitoringFilter_DataTypeVersion
+ \value OpcUa_BinarySchema_MonitoringFilter_DictionaryFragment
+ \value OpcUa_BinarySchema_EventFilter
+ \value OpcUa_BinarySchema_EventFilter_DataTypeVersion
+ \value OpcUa_BinarySchema_EventFilter_DictionaryFragment
+ \value OpcUa_BinarySchema_AggregateConfiguration
+ \value OpcUa_BinarySchema_AggregateConfiguration_DataTypeVersion
+ \value OpcUa_BinarySchema_AggregateConfiguration_DictionaryFragment
+ \value OpcUa_BinarySchema_HistoryEventFieldList
+ \value OpcUa_BinarySchema_HistoryEventFieldList_DataTypeVersion
+ \value OpcUa_BinarySchema_HistoryEventFieldList_DictionaryFragment
+ \value OpcUa_BinarySchema_RedundantServerDataType
+ \value OpcUa_BinarySchema_RedundantServerDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_RedundantServerDataType_DictionaryFragment
+ \value OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType
+ \value OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType_DictionaryFragment
+ \value OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType
+ \value OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType_DictionaryFragment
+ \value OpcUa_BinarySchema_ServerStatusDataType
+ \value OpcUa_BinarySchema_ServerStatusDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_ServerStatusDataType_DictionaryFragment
+ \value OpcUa_BinarySchema_SessionDiagnosticsDataType
+ \value OpcUa_BinarySchema_SessionDiagnosticsDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_SessionDiagnosticsDataType_DictionaryFragment
+ \value OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType
+ \value OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType_DictionaryFragment
+ \value OpcUa_BinarySchema_ServiceCounterDataType
+ \value OpcUa_BinarySchema_ServiceCounterDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_ServiceCounterDataType_DictionaryFragment
+ \value OpcUa_BinarySchema_SubscriptionDiagnosticsDataType
+ \value OpcUa_BinarySchema_SubscriptionDiagnosticsDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_SubscriptionDiagnosticsDataType_DictionaryFragment
+ \value OpcUa_BinarySchema_ModelChangeStructureDataType
+ \value OpcUa_BinarySchema_ModelChangeStructureDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_ModelChangeStructureDataType_DictionaryFragment
+ \value OpcUa_BinarySchema_SemanticChangeStructureDataType
+ \value OpcUa_BinarySchema_SemanticChangeStructureDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_SemanticChangeStructureDataType_DictionaryFragment
+ \value OpcUa_BinarySchema_Range
+ \value OpcUa_BinarySchema_Range_DataTypeVersion
+ \value OpcUa_BinarySchema_Range_DictionaryFragment
+ \value OpcUa_BinarySchema_EUInformation
+ \value OpcUa_BinarySchema_EUInformation_DataTypeVersion
+ \value OpcUa_BinarySchema_EUInformation_DictionaryFragment
+ \value OpcUa_BinarySchema_Annotation
+ \value OpcUa_BinarySchema_Annotation_DataTypeVersion
+ \value OpcUa_BinarySchema_Annotation_DictionaryFragment
+ \value OpcUa_BinarySchema_ProgramDiagnosticDataType
+ \value OpcUa_BinarySchema_ProgramDiagnosticDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_ProgramDiagnosticDataType_DictionaryFragment
+ \value EnumValueType_Encoding_DefaultBinary
+ \value OpcUa_XmlSchema
+ \value OpcUa_XmlSchema_DataTypeVersion
+ \value OpcUa_XmlSchema_NamespaceUri
+ \value OpcUa_XmlSchema_Argument
+ \value OpcUa_XmlSchema_Argument_DataTypeVersion
+ \value OpcUa_XmlSchema_Argument_DictionaryFragment
+ \value OpcUa_XmlSchema_EnumValueType
+ \value OpcUa_XmlSchema_EnumValueType_DataTypeVersion
+ \value OpcUa_XmlSchema_EnumValueType_DictionaryFragment
+ \value OpcUa_XmlSchema_StatusResult
+ \value OpcUa_XmlSchema_StatusResult_DataTypeVersion
+ \value OpcUa_XmlSchema_StatusResult_DictionaryFragment
+ \value OpcUa_XmlSchema_UserTokenPolicy
+ \value OpcUa_XmlSchema_UserTokenPolicy_DataTypeVersion
+ \value OpcUa_XmlSchema_UserTokenPolicy_DictionaryFragment
+ \value OpcUa_XmlSchema_ApplicationDescription
+ \value OpcUa_XmlSchema_ApplicationDescription_DataTypeVersion
+ \value OpcUa_XmlSchema_ApplicationDescription_DictionaryFragment
+ \value OpcUa_XmlSchema_EndpointDescription
+ \value OpcUa_XmlSchema_EndpointDescription_DataTypeVersion
+ \value OpcUa_XmlSchema_EndpointDescription_DictionaryFragment
+ \value OpcUa_XmlSchema_UserIdentityToken
+ \value OpcUa_XmlSchema_UserIdentityToken_DataTypeVersion
+ \value OpcUa_XmlSchema_UserIdentityToken_DictionaryFragment
+ \value OpcUa_XmlSchema_AnonymousIdentityToken
+ \value OpcUa_XmlSchema_AnonymousIdentityToken_DataTypeVersion
+ \value OpcUa_XmlSchema_AnonymousIdentityToken_DictionaryFragment
+ \value OpcUa_XmlSchema_UserNameIdentityToken
+ \value OpcUa_XmlSchema_UserNameIdentityToken_DataTypeVersion
+ \value OpcUa_XmlSchema_UserNameIdentityToken_DictionaryFragment
+ \value OpcUa_XmlSchema_X509IdentityToken
+ \value OpcUa_XmlSchema_X509IdentityToken_DataTypeVersion
+ \value OpcUa_XmlSchema_X509IdentityToken_DictionaryFragment
+ \value OpcUa_XmlSchema_IssuedIdentityToken
+ \value OpcUa_XmlSchema_IssuedIdentityToken_DataTypeVersion
+ \value OpcUa_XmlSchema_IssuedIdentityToken_DictionaryFragment
+ \value OpcUa_XmlSchema_EndpointConfiguration
+ \value OpcUa_XmlSchema_EndpointConfiguration_DataTypeVersion
+ \value OpcUa_XmlSchema_EndpointConfiguration_DictionaryFragment
+ \value OpcUa_XmlSchema_BuildInfo
+ \value OpcUa_XmlSchema_BuildInfo_DataTypeVersion
+ \value OpcUa_XmlSchema_BuildInfo_DictionaryFragment
+ \value OpcUa_XmlSchema_SignedSoftwareCertificate
+ \value OpcUa_XmlSchema_SignedSoftwareCertificate_DataTypeVersion
+ \value OpcUa_XmlSchema_SignedSoftwareCertificate_DictionaryFragment
+ \value OpcUa_XmlSchema_AddNodesItem
+ \value OpcUa_XmlSchema_AddNodesItem_DataTypeVersion
+ \value OpcUa_XmlSchema_AddNodesItem_DictionaryFragment
+ \value OpcUa_XmlSchema_AddReferencesItem
+ \value OpcUa_XmlSchema_AddReferencesItem_DataTypeVersion
+ \value OpcUa_XmlSchema_AddReferencesItem_DictionaryFragment
+ \value OpcUa_XmlSchema_DeleteNodesItem
+ \value OpcUa_XmlSchema_DeleteNodesItem_DataTypeVersion
+ \value OpcUa_XmlSchema_DeleteNodesItem_DictionaryFragment
+ \value OpcUa_XmlSchema_DeleteReferencesItem
+ \value OpcUa_XmlSchema_DeleteReferencesItem_DataTypeVersion
+ \value OpcUa_XmlSchema_DeleteReferencesItem_DictionaryFragment
+ \value OpcUa_XmlSchema_RegisteredServer
+ \value OpcUa_XmlSchema_RegisteredServer_DataTypeVersion
+ \value OpcUa_XmlSchema_RegisteredServer_DictionaryFragment
+ \value OpcUa_XmlSchema_ContentFilterElement
+ \value OpcUa_XmlSchema_ContentFilterElement_DataTypeVersion
+ \value OpcUa_XmlSchema_ContentFilterElement_DictionaryFragment
+ \value OpcUa_XmlSchema_ContentFilter
+ \value OpcUa_XmlSchema_ContentFilter_DataTypeVersion
+ \value OpcUa_XmlSchema_ContentFilter_DictionaryFragment
+ \value OpcUa_XmlSchema_FilterOperand
+ \value OpcUa_XmlSchema_FilterOperand_DataTypeVersion
+ \value OpcUa_XmlSchema_FilterOperand_DictionaryFragment
+ \value OpcUa_XmlSchema_ElementOperand
+ \value OpcUa_XmlSchema_ElementOperand_DataTypeVersion
+ \value OpcUa_XmlSchema_ElementOperand_DictionaryFragment
+ \value OpcUa_XmlSchema_LiteralOperand
+ \value OpcUa_XmlSchema_LiteralOperand_DataTypeVersion
+ \value OpcUa_XmlSchema_LiteralOperand_DictionaryFragment
+ \value OpcUa_XmlSchema_AttributeOperand
+ \value OpcUa_XmlSchema_AttributeOperand_DataTypeVersion
+ \value OpcUa_XmlSchema_AttributeOperand_DictionaryFragment
+ \value OpcUa_XmlSchema_SimpleAttributeOperand
+ \value OpcUa_XmlSchema_SimpleAttributeOperand_DataTypeVersion
+ \value OpcUa_XmlSchema_SimpleAttributeOperand_DictionaryFragment
+ \value OpcUa_XmlSchema_HistoryEvent
+ \value OpcUa_XmlSchema_HistoryEvent_DataTypeVersion
+ \value OpcUa_XmlSchema_HistoryEvent_DictionaryFragment
+ \value OpcUa_XmlSchema_MonitoringFilter
+ \value OpcUa_XmlSchema_MonitoringFilter_DataTypeVersion
+ \value OpcUa_XmlSchema_MonitoringFilter_DictionaryFragment
+ \value OpcUa_XmlSchema_EventFilter
+ \value OpcUa_XmlSchema_EventFilter_DataTypeVersion
+ \value OpcUa_XmlSchema_EventFilter_DictionaryFragment
+ \value OpcUa_XmlSchema_AggregateConfiguration
+ \value OpcUa_XmlSchema_AggregateConfiguration_DataTypeVersion
+ \value OpcUa_XmlSchema_AggregateConfiguration_DictionaryFragment
+ \value OpcUa_XmlSchema_HistoryEventFieldList
+ \value OpcUa_XmlSchema_HistoryEventFieldList_DataTypeVersion
+ \value OpcUa_XmlSchema_HistoryEventFieldList_DictionaryFragment
+ \value OpcUa_XmlSchema_RedundantServerDataType
+ \value OpcUa_XmlSchema_RedundantServerDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_RedundantServerDataType_DictionaryFragment
+ \value OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType
+ \value OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType_DictionaryFragment
+ \value OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType
+ \value OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType_DictionaryFragment
+ \value OpcUa_XmlSchema_ServerStatusDataType
+ \value OpcUa_XmlSchema_ServerStatusDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_ServerStatusDataType_DictionaryFragment
+ \value OpcUa_XmlSchema_SessionDiagnosticsDataType
+ \value OpcUa_XmlSchema_SessionDiagnosticsDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_SessionDiagnosticsDataType_DictionaryFragment
+ \value OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType
+ \value OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType_DictionaryFragment
+ \value OpcUa_XmlSchema_ServiceCounterDataType
+ \value OpcUa_XmlSchema_ServiceCounterDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_ServiceCounterDataType_DictionaryFragment
+ \value OpcUa_XmlSchema_SubscriptionDiagnosticsDataType
+ \value OpcUa_XmlSchema_SubscriptionDiagnosticsDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_SubscriptionDiagnosticsDataType_DictionaryFragment
+ \value OpcUa_XmlSchema_ModelChangeStructureDataType
+ \value OpcUa_XmlSchema_ModelChangeStructureDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_ModelChangeStructureDataType_DictionaryFragment
+ \value OpcUa_XmlSchema_SemanticChangeStructureDataType
+ \value OpcUa_XmlSchema_SemanticChangeStructureDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_SemanticChangeStructureDataType_DictionaryFragment
+ \value OpcUa_XmlSchema_Range
+ \value OpcUa_XmlSchema_Range_DataTypeVersion
+ \value OpcUa_XmlSchema_Range_DictionaryFragment
+ \value OpcUa_XmlSchema_EUInformation
+ \value OpcUa_XmlSchema_EUInformation_DataTypeVersion
+ \value OpcUa_XmlSchema_EUInformation_DictionaryFragment
+ \value OpcUa_XmlSchema_Annotation
+ \value OpcUa_XmlSchema_Annotation_DataTypeVersion
+ \value OpcUa_XmlSchema_Annotation_DictionaryFragment
+ \value OpcUa_XmlSchema_ProgramDiagnosticDataType
+ \value OpcUa_XmlSchema_ProgramDiagnosticDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_ProgramDiagnosticDataType_DictionaryFragment
+ \value SubscriptionDiagnosticsType_MaxLifetimeCount
+ \value SubscriptionDiagnosticsType_LatePublishRequestCount
+ \value SubscriptionDiagnosticsType_CurrentKeepAliveCount
+ \value SubscriptionDiagnosticsType_CurrentLifetimeCount
+ \value SubscriptionDiagnosticsType_UnacknowledgedMessageCount
+ \value SubscriptionDiagnosticsType_DiscardedMessageCount
+ \value SubscriptionDiagnosticsType_MonitoredItemCount
+ \value SubscriptionDiagnosticsType_DisabledMonitoredItemCount
+ \value SubscriptionDiagnosticsType_MonitoringQueueOverflowCount
+ \value SubscriptionDiagnosticsType_NextSequenceNumber
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_TotalRequestCount
+ \value SessionDiagnosticsVariableType_TotalRequestCount
+ \value SubscriptionDiagnosticsType_EventQueueOverFlowCount
+ \value TimeZoneDataType
+ \value TimeZoneDataType_Encoding_DefaultXml
+ \value OpcUa_BinarySchema_TimeZoneDataType
+ \value OpcUa_BinarySchema_TimeZoneDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_TimeZoneDataType_DictionaryFragment
+ \value TimeZoneDataType_Encoding_DefaultBinary
+ \value OpcUa_XmlSchema_TimeZoneDataType
+ \value OpcUa_XmlSchema_TimeZoneDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_TimeZoneDataType_DictionaryFragment
+ \value AuditConditionRespondEventType
+ \value AuditConditionRespondEventType_EventId
+ \value AuditConditionRespondEventType_EventType
+ \value AuditConditionRespondEventType_SourceNode
+ \value AuditConditionRespondEventType_SourceName
+ \value AuditConditionRespondEventType_Time
+ \value AuditConditionRespondEventType_ReceiveTime
+ \value AuditConditionRespondEventType_LocalTime
+ \value AuditConditionRespondEventType_Message
+ \value AuditConditionRespondEventType_Severity
+ \value AuditConditionRespondEventType_ActionTimeStamp
+ \value AuditConditionRespondEventType_Status
+ \value AuditConditionRespondEventType_ServerId
+ \value AuditConditionRespondEventType_ClientAuditEntryId
+ \value AuditConditionRespondEventType_ClientUserId
+ \value AuditConditionRespondEventType_MethodId
+ \value AuditConditionRespondEventType_InputArguments
+ \value AuditConditionAcknowledgeEventType
+ \value AuditConditionAcknowledgeEventType_EventId
+ \value AuditConditionAcknowledgeEventType_EventType
+ \value AuditConditionAcknowledgeEventType_SourceNode
+ \value AuditConditionAcknowledgeEventType_SourceName
+ \value AuditConditionAcknowledgeEventType_Time
+ \value AuditConditionAcknowledgeEventType_ReceiveTime
+ \value AuditConditionAcknowledgeEventType_LocalTime
+ \value AuditConditionAcknowledgeEventType_Message
+ \value AuditConditionAcknowledgeEventType_Severity
+ \value AuditConditionAcknowledgeEventType_ActionTimeStamp
+ \value AuditConditionAcknowledgeEventType_Status
+ \value AuditConditionAcknowledgeEventType_ServerId
+ \value AuditConditionAcknowledgeEventType_ClientAuditEntryId
+ \value AuditConditionAcknowledgeEventType_ClientUserId
+ \value AuditConditionAcknowledgeEventType_MethodId
+ \value AuditConditionAcknowledgeEventType_InputArguments
+ \value AuditConditionConfirmEventType
+ \value AuditConditionConfirmEventType_EventId
+ \value AuditConditionConfirmEventType_EventType
+ \value AuditConditionConfirmEventType_SourceNode
+ \value AuditConditionConfirmEventType_SourceName
+ \value AuditConditionConfirmEventType_Time
+ \value AuditConditionConfirmEventType_ReceiveTime
+ \value AuditConditionConfirmEventType_LocalTime
+ \value AuditConditionConfirmEventType_Message
+ \value AuditConditionConfirmEventType_Severity
+ \value AuditConditionConfirmEventType_ActionTimeStamp
+ \value AuditConditionConfirmEventType_Status
+ \value AuditConditionConfirmEventType_ServerId
+ \value AuditConditionConfirmEventType_ClientAuditEntryId
+ \value AuditConditionConfirmEventType_ClientUserId
+ \value AuditConditionConfirmEventType_MethodId
+ \value AuditConditionConfirmEventType_InputArguments
+ \value TwoStateVariableType
+ \value TwoStateVariableType_Id
+ \value TwoStateVariableType_Name
+ \value TwoStateVariableType_Number
+ \value TwoStateVariableType_EffectiveDisplayName
+ \value TwoStateVariableType_TransitionTime
+ \value TwoStateVariableType_EffectiveTransitionTime
+ \value ConditionVariableType
+ \value ConditionVariableType_SourceTimestamp
+ \value HasTrueSubState
+ \value HasFalseSubState
+ \value HasCondition
+ \value ConditionRefreshMethodType
+ \value ConditionRefreshMethodType_InputArguments
+ \value ConditionType_ConditionName
+ \value ConditionType_BranchId
+ \value ConditionType_EnabledState
+ \value ConditionType_EnabledState_Id
+ \value ConditionType_EnabledState_Name
+ \value ConditionType_EnabledState_Number
+ \value ConditionType_EnabledState_EffectiveDisplayName
+ \value ConditionType_EnabledState_TransitionTime
+ \value ConditionType_EnabledState_EffectiveTransitionTime
+ \value ConditionType_EnabledState_TrueState
+ \value ConditionType_EnabledState_FalseState
+ \value ConditionType_Quality
+ \value ConditionType_Quality_SourceTimestamp
+ \value ConditionType_LastSeverity
+ \value ConditionType_LastSeverity_SourceTimestamp
+ \value ConditionType_Comment
+ \value ConditionType_Comment_SourceTimestamp
+ \value ConditionType_ClientUserId
+ \value ConditionType_Enable
+ \value ConditionType_Disable
+ \value ConditionType_AddComment
+ \value ConditionType_AddComment_InputArguments
+ \value DialogResponseMethodType
+ \value DialogResponseMethodType_InputArguments
+ \value DialogConditionType_ConditionName
+ \value DialogConditionType_BranchId
+ \value DialogConditionType_EnabledState
+ \value DialogConditionType_EnabledState_Id
+ \value DialogConditionType_EnabledState_Name
+ \value DialogConditionType_EnabledState_Number
+ \value DialogConditionType_EnabledState_EffectiveDisplayName
+ \value DialogConditionType_EnabledState_TransitionTime
+ \value DialogConditionType_EnabledState_EffectiveTransitionTime
+ \value DialogConditionType_EnabledState_TrueState
+ \value DialogConditionType_EnabledState_FalseState
+ \value DialogConditionType_Quality
+ \value DialogConditionType_Quality_SourceTimestamp
+ \value DialogConditionType_LastSeverity
+ \value DialogConditionType_LastSeverity_SourceTimestamp
+ \value DialogConditionType_Comment
+ \value DialogConditionType_Comment_SourceTimestamp
+ \value DialogConditionType_ClientUserId
+ \value DialogConditionType_Enable
+ \value DialogConditionType_Disable
+ \value DialogConditionType_AddComment
+ \value DialogConditionType_AddComment_InputArguments
+ \value DialogConditionType_DialogState
+ \value DialogConditionType_DialogState_Id
+ \value DialogConditionType_DialogState_Name
+ \value DialogConditionType_DialogState_Number
+ \value DialogConditionType_DialogState_EffectiveDisplayName
+ \value DialogConditionType_DialogState_TransitionTime
+ \value DialogConditionType_DialogState_EffectiveTransitionTime
+ \value DialogConditionType_DialogState_TrueState
+ \value DialogConditionType_DialogState_FalseState
+ \value DialogConditionType_ResponseOptionSet
+ \value DialogConditionType_DefaultResponse
+ \value DialogConditionType_OkResponse
+ \value DialogConditionType_CancelResponse
+ \value DialogConditionType_LastResponse
+ \value DialogConditionType_Respond
+ \value DialogConditionType_Respond_InputArguments
+ \value AcknowledgeableConditionType_ConditionName
+ \value AcknowledgeableConditionType_BranchId
+ \value AcknowledgeableConditionType_EnabledState
+ \value AcknowledgeableConditionType_EnabledState_Id
+ \value AcknowledgeableConditionType_EnabledState_Name
+ \value AcknowledgeableConditionType_EnabledState_Number
+ \value AcknowledgeableConditionType_EnabledState_EffectiveDisplayName
+ \value AcknowledgeableConditionType_EnabledState_TransitionTime
+ \value AcknowledgeableConditionType_EnabledState_EffectiveTransitionTime
+ \value AcknowledgeableConditionType_EnabledState_TrueState
+ \value AcknowledgeableConditionType_EnabledState_FalseState
+ \value AcknowledgeableConditionType_Quality
+ \value AcknowledgeableConditionType_Quality_SourceTimestamp
+ \value AcknowledgeableConditionType_LastSeverity
+ \value AcknowledgeableConditionType_LastSeverity_SourceTimestamp
+ \value AcknowledgeableConditionType_Comment
+ \value AcknowledgeableConditionType_Comment_SourceTimestamp
+ \value AcknowledgeableConditionType_ClientUserId
+ \value AcknowledgeableConditionType_Enable
+ \value AcknowledgeableConditionType_Disable
+ \value AcknowledgeableConditionType_AddComment
+ \value AcknowledgeableConditionType_AddComment_InputArguments
+ \value AcknowledgeableConditionType_AckedState
+ \value AcknowledgeableConditionType_AckedState_Id
+ \value AcknowledgeableConditionType_AckedState_Name
+ \value AcknowledgeableConditionType_AckedState_Number
+ \value AcknowledgeableConditionType_AckedState_EffectiveDisplayName
+ \value AcknowledgeableConditionType_AckedState_TransitionTime
+ \value AcknowledgeableConditionType_AckedState_EffectiveTransitionTime
+ \value AcknowledgeableConditionType_AckedState_TrueState
+ \value AcknowledgeableConditionType_AckedState_FalseState
+ \value AcknowledgeableConditionType_ConfirmedState
+ \value AcknowledgeableConditionType_ConfirmedState_Id
+ \value AcknowledgeableConditionType_ConfirmedState_Name
+ \value AcknowledgeableConditionType_ConfirmedState_Number
+ \value AcknowledgeableConditionType_ConfirmedState_EffectiveDisplayName
+ \value AcknowledgeableConditionType_ConfirmedState_TransitionTime
+ \value AcknowledgeableConditionType_ConfirmedState_EffectiveTransitionTime
+ \value AcknowledgeableConditionType_ConfirmedState_TrueState
+ \value AcknowledgeableConditionType_ConfirmedState_FalseState
+ \value AcknowledgeableConditionType_Acknowledge
+ \value AcknowledgeableConditionType_Acknowledge_InputArguments
+ \value AcknowledgeableConditionType_Confirm
+ \value AcknowledgeableConditionType_Confirm_InputArguments
+ \value ShelvedStateMachineType_UnshelveTime
+ \value AlarmConditionType_ConditionName
+ \value AlarmConditionType_BranchId
+ \value AlarmConditionType_EnabledState
+ \value AlarmConditionType_EnabledState_Id
+ \value AlarmConditionType_EnabledState_Name
+ \value AlarmConditionType_EnabledState_Number
+ \value AlarmConditionType_EnabledState_EffectiveDisplayName
+ \value AlarmConditionType_EnabledState_TransitionTime
+ \value AlarmConditionType_EnabledState_EffectiveTransitionTime
+ \value AlarmConditionType_EnabledState_TrueState
+ \value AlarmConditionType_EnabledState_FalseState
+ \value AlarmConditionType_Quality
+ \value AlarmConditionType_Quality_SourceTimestamp
+ \value AlarmConditionType_LastSeverity
+ \value AlarmConditionType_LastSeverity_SourceTimestamp
+ \value AlarmConditionType_Comment
+ \value AlarmConditionType_Comment_SourceTimestamp
+ \value AlarmConditionType_ClientUserId
+ \value AlarmConditionType_Enable
+ \value AlarmConditionType_Disable
+ \value AlarmConditionType_AddComment
+ \value AlarmConditionType_AddComment_InputArguments
+ \value AlarmConditionType_AckedState
+ \value AlarmConditionType_AckedState_Id
+ \value AlarmConditionType_AckedState_Name
+ \value AlarmConditionType_AckedState_Number
+ \value AlarmConditionType_AckedState_EffectiveDisplayName
+ \value AlarmConditionType_AckedState_TransitionTime
+ \value AlarmConditionType_AckedState_EffectiveTransitionTime
+ \value AlarmConditionType_AckedState_TrueState
+ \value AlarmConditionType_AckedState_FalseState
+ \value AlarmConditionType_ConfirmedState
+ \value AlarmConditionType_ConfirmedState_Id
+ \value AlarmConditionType_ConfirmedState_Name
+ \value AlarmConditionType_ConfirmedState_Number
+ \value AlarmConditionType_ConfirmedState_EffectiveDisplayName
+ \value AlarmConditionType_ConfirmedState_TransitionTime
+ \value AlarmConditionType_ConfirmedState_EffectiveTransitionTime
+ \value AlarmConditionType_ConfirmedState_TrueState
+ \value AlarmConditionType_ConfirmedState_FalseState
+ \value AlarmConditionType_Acknowledge
+ \value AlarmConditionType_Acknowledge_InputArguments
+ \value AlarmConditionType_Confirm
+ \value AlarmConditionType_Confirm_InputArguments
+ \value AlarmConditionType_ActiveState
+ \value AlarmConditionType_ActiveState_Id
+ \value AlarmConditionType_ActiveState_Name
+ \value AlarmConditionType_ActiveState_Number
+ \value AlarmConditionType_ActiveState_EffectiveDisplayName
+ \value AlarmConditionType_ActiveState_TransitionTime
+ \value AlarmConditionType_ActiveState_EffectiveTransitionTime
+ \value AlarmConditionType_ActiveState_TrueState
+ \value AlarmConditionType_ActiveState_FalseState
+ \value AlarmConditionType_SuppressedState
+ \value AlarmConditionType_SuppressedState_Id
+ \value AlarmConditionType_SuppressedState_Name
+ \value AlarmConditionType_SuppressedState_Number
+ \value AlarmConditionType_SuppressedState_EffectiveDisplayName
+ \value AlarmConditionType_SuppressedState_TransitionTime
+ \value AlarmConditionType_SuppressedState_EffectiveTransitionTime
+ \value AlarmConditionType_SuppressedState_TrueState
+ \value AlarmConditionType_SuppressedState_FalseState
+ \value AlarmConditionType_ShelvingState
+ \value AlarmConditionType_ShelvingState_CurrentState
+ \value AlarmConditionType_ShelvingState_CurrentState_Id
+ \value AlarmConditionType_ShelvingState_CurrentState_Name
+ \value AlarmConditionType_ShelvingState_CurrentState_Number
+ \value AlarmConditionType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value AlarmConditionType_ShelvingState_LastTransition
+ \value AlarmConditionType_ShelvingState_LastTransition_Id
+ \value AlarmConditionType_ShelvingState_LastTransition_Name
+ \value AlarmConditionType_ShelvingState_LastTransition_Number
+ \value AlarmConditionType_ShelvingState_LastTransition_TransitionTime
+ \value AlarmConditionType_ShelvingState_UnshelveTime
+ \value AlarmConditionType_ShelvingState_Unshelve
+ \value AlarmConditionType_ShelvingState_OneShotShelve
+ \value AlarmConditionType_ShelvingState_TimedShelve
+ \value AlarmConditionType_ShelvingState_TimedShelve_InputArguments
+ \value AlarmConditionType_SuppressedOrShelved
+ \value AlarmConditionType_MaxTimeShelved
+ \value LimitAlarmType_ConditionName
+ \value LimitAlarmType_BranchId
+ \value LimitAlarmType_EnabledState
+ \value LimitAlarmType_EnabledState_Id
+ \value LimitAlarmType_EnabledState_Name
+ \value LimitAlarmType_EnabledState_Number
+ \value LimitAlarmType_EnabledState_EffectiveDisplayName
+ \value LimitAlarmType_EnabledState_TransitionTime
+ \value LimitAlarmType_EnabledState_EffectiveTransitionTime
+ \value LimitAlarmType_EnabledState_TrueState
+ \value LimitAlarmType_EnabledState_FalseState
+ \value LimitAlarmType_Quality
+ \value LimitAlarmType_Quality_SourceTimestamp
+ \value LimitAlarmType_LastSeverity
+ \value LimitAlarmType_LastSeverity_SourceTimestamp
+ \value LimitAlarmType_Comment
+ \value LimitAlarmType_Comment_SourceTimestamp
+ \value LimitAlarmType_ClientUserId
+ \value LimitAlarmType_Enable
+ \value LimitAlarmType_Disable
+ \value LimitAlarmType_AddComment
+ \value LimitAlarmType_AddComment_InputArguments
+ \value LimitAlarmType_AckedState
+ \value LimitAlarmType_AckedState_Id
+ \value LimitAlarmType_AckedState_Name
+ \value LimitAlarmType_AckedState_Number
+ \value LimitAlarmType_AckedState_EffectiveDisplayName
+ \value LimitAlarmType_AckedState_TransitionTime
+ \value LimitAlarmType_AckedState_EffectiveTransitionTime
+ \value LimitAlarmType_AckedState_TrueState
+ \value LimitAlarmType_AckedState_FalseState
+ \value LimitAlarmType_ConfirmedState
+ \value LimitAlarmType_ConfirmedState_Id
+ \value LimitAlarmType_ConfirmedState_Name
+ \value LimitAlarmType_ConfirmedState_Number
+ \value LimitAlarmType_ConfirmedState_EffectiveDisplayName
+ \value LimitAlarmType_ConfirmedState_TransitionTime
+ \value LimitAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value LimitAlarmType_ConfirmedState_TrueState
+ \value LimitAlarmType_ConfirmedState_FalseState
+ \value LimitAlarmType_Acknowledge
+ \value LimitAlarmType_Acknowledge_InputArguments
+ \value LimitAlarmType_Confirm
+ \value LimitAlarmType_Confirm_InputArguments
+ \value LimitAlarmType_ActiveState
+ \value LimitAlarmType_ActiveState_Id
+ \value LimitAlarmType_ActiveState_Name
+ \value LimitAlarmType_ActiveState_Number
+ \value LimitAlarmType_ActiveState_EffectiveDisplayName
+ \value LimitAlarmType_ActiveState_TransitionTime
+ \value LimitAlarmType_ActiveState_EffectiveTransitionTime
+ \value LimitAlarmType_ActiveState_TrueState
+ \value LimitAlarmType_ActiveState_FalseState
+ \value LimitAlarmType_SuppressedState
+ \value LimitAlarmType_SuppressedState_Id
+ \value LimitAlarmType_SuppressedState_Name
+ \value LimitAlarmType_SuppressedState_Number
+ \value LimitAlarmType_SuppressedState_EffectiveDisplayName
+ \value LimitAlarmType_SuppressedState_TransitionTime
+ \value LimitAlarmType_SuppressedState_EffectiveTransitionTime
+ \value LimitAlarmType_SuppressedState_TrueState
+ \value LimitAlarmType_SuppressedState_FalseState
+ \value LimitAlarmType_ShelvingState
+ \value LimitAlarmType_ShelvingState_CurrentState
+ \value LimitAlarmType_ShelvingState_CurrentState_Id
+ \value LimitAlarmType_ShelvingState_CurrentState_Name
+ \value LimitAlarmType_ShelvingState_CurrentState_Number
+ \value LimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value LimitAlarmType_ShelvingState_LastTransition
+ \value LimitAlarmType_ShelvingState_LastTransition_Id
+ \value LimitAlarmType_ShelvingState_LastTransition_Name
+ \value LimitAlarmType_ShelvingState_LastTransition_Number
+ \value LimitAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value LimitAlarmType_ShelvingState_UnshelveTime
+ \value LimitAlarmType_ShelvingState_Unshelve
+ \value LimitAlarmType_ShelvingState_OneShotShelve
+ \value LimitAlarmType_ShelvingState_TimedShelve
+ \value LimitAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value LimitAlarmType_SuppressedOrShelved
+ \value LimitAlarmType_MaxTimeShelved
+ \value ExclusiveLimitStateMachineType
+ \value ExclusiveLimitStateMachineType_CurrentState
+ \value ExclusiveLimitStateMachineType_CurrentState_Id
+ \value ExclusiveLimitStateMachineType_CurrentState_Name
+ \value ExclusiveLimitStateMachineType_CurrentState_Number
+ \value ExclusiveLimitStateMachineType_CurrentState_EffectiveDisplayName
+ \value ExclusiveLimitStateMachineType_LastTransition
+ \value ExclusiveLimitStateMachineType_LastTransition_Id
+ \value ExclusiveLimitStateMachineType_LastTransition_Name
+ \value ExclusiveLimitStateMachineType_LastTransition_Number
+ \value ExclusiveLimitStateMachineType_LastTransition_TransitionTime
+ \value ExclusiveLimitStateMachineType_HighHigh
+ \value ExclusiveLimitStateMachineType_HighHigh_StateNumber
+ \value ExclusiveLimitStateMachineType_High
+ \value ExclusiveLimitStateMachineType_High_StateNumber
+ \value ExclusiveLimitStateMachineType_Low
+ \value ExclusiveLimitStateMachineType_Low_StateNumber
+ \value ExclusiveLimitStateMachineType_LowLow
+ \value ExclusiveLimitStateMachineType_LowLow_StateNumber
+ \value ExclusiveLimitStateMachineType_LowLowToLow
+ \value ExclusiveLimitStateMachineType_LowToLowLow
+ \value ExclusiveLimitStateMachineType_HighHighToHigh
+ \value ExclusiveLimitStateMachineType_HighToHighHigh
+ \value ExclusiveLimitAlarmType
+ \value ExclusiveLimitAlarmType_EventId
+ \value ExclusiveLimitAlarmType_EventType
+ \value ExclusiveLimitAlarmType_SourceNode
+ \value ExclusiveLimitAlarmType_SourceName
+ \value ExclusiveLimitAlarmType_Time
+ \value ExclusiveLimitAlarmType_ReceiveTime
+ \value ExclusiveLimitAlarmType_LocalTime
+ \value ExclusiveLimitAlarmType_Message
+ \value ExclusiveLimitAlarmType_Severity
+ \value ExclusiveLimitAlarmType_ConditionName
+ \value ExclusiveLimitAlarmType_BranchId
+ \value ExclusiveLimitAlarmType_Retain
+ \value ExclusiveLimitAlarmType_EnabledState
+ \value ExclusiveLimitAlarmType_EnabledState_Id
+ \value ExclusiveLimitAlarmType_EnabledState_Name
+ \value ExclusiveLimitAlarmType_EnabledState_Number
+ \value ExclusiveLimitAlarmType_EnabledState_EffectiveDisplayName
+ \value ExclusiveLimitAlarmType_EnabledState_TransitionTime
+ \value ExclusiveLimitAlarmType_EnabledState_EffectiveTransitionTime
+ \value ExclusiveLimitAlarmType_EnabledState_TrueState
+ \value ExclusiveLimitAlarmType_EnabledState_FalseState
+ \value ExclusiveLimitAlarmType_Quality
+ \value ExclusiveLimitAlarmType_Quality_SourceTimestamp
+ \value ExclusiveLimitAlarmType_LastSeverity
+ \value ExclusiveLimitAlarmType_LastSeverity_SourceTimestamp
+ \value ExclusiveLimitAlarmType_Comment
+ \value ExclusiveLimitAlarmType_Comment_SourceTimestamp
+ \value ExclusiveLimitAlarmType_ClientUserId
+ \value ExclusiveLimitAlarmType_Enable
+ \value ExclusiveLimitAlarmType_Disable
+ \value ExclusiveLimitAlarmType_AddComment
+ \value ExclusiveLimitAlarmType_AddComment_InputArguments
+ \value ExclusiveLimitAlarmType_ConditionRefresh
+ \value ExclusiveLimitAlarmType_ConditionRefresh_InputArguments
+ \value ExclusiveLimitAlarmType_AckedState
+ \value ExclusiveLimitAlarmType_AckedState_Id
+ \value ExclusiveLimitAlarmType_AckedState_Name
+ \value ExclusiveLimitAlarmType_AckedState_Number
+ \value ExclusiveLimitAlarmType_AckedState_EffectiveDisplayName
+ \value ExclusiveLimitAlarmType_AckedState_TransitionTime
+ \value ExclusiveLimitAlarmType_AckedState_EffectiveTransitionTime
+ \value ExclusiveLimitAlarmType_AckedState_TrueState
+ \value ExclusiveLimitAlarmType_AckedState_FalseState
+ \value ExclusiveLimitAlarmType_ConfirmedState
+ \value ExclusiveLimitAlarmType_ConfirmedState_Id
+ \value ExclusiveLimitAlarmType_ConfirmedState_Name
+ \value ExclusiveLimitAlarmType_ConfirmedState_Number
+ \value ExclusiveLimitAlarmType_ConfirmedState_EffectiveDisplayName
+ \value ExclusiveLimitAlarmType_ConfirmedState_TransitionTime
+ \value ExclusiveLimitAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value ExclusiveLimitAlarmType_ConfirmedState_TrueState
+ \value ExclusiveLimitAlarmType_ConfirmedState_FalseState
+ \value ExclusiveLimitAlarmType_Acknowledge
+ \value ExclusiveLimitAlarmType_Acknowledge_InputArguments
+ \value ExclusiveLimitAlarmType_Confirm
+ \value ExclusiveLimitAlarmType_Confirm_InputArguments
+ \value ExclusiveLimitAlarmType_ActiveState
+ \value ExclusiveLimitAlarmType_ActiveState_Id
+ \value ExclusiveLimitAlarmType_ActiveState_Name
+ \value ExclusiveLimitAlarmType_ActiveState_Number
+ \value ExclusiveLimitAlarmType_ActiveState_EffectiveDisplayName
+ \value ExclusiveLimitAlarmType_ActiveState_TransitionTime
+ \value ExclusiveLimitAlarmType_ActiveState_EffectiveTransitionTime
+ \value ExclusiveLimitAlarmType_ActiveState_TrueState
+ \value ExclusiveLimitAlarmType_ActiveState_FalseState
+ \value ExclusiveLimitAlarmType_SuppressedState
+ \value ExclusiveLimitAlarmType_SuppressedState_Id
+ \value ExclusiveLimitAlarmType_SuppressedState_Name
+ \value ExclusiveLimitAlarmType_SuppressedState_Number
+ \value ExclusiveLimitAlarmType_SuppressedState_EffectiveDisplayName
+ \value ExclusiveLimitAlarmType_SuppressedState_TransitionTime
+ \value ExclusiveLimitAlarmType_SuppressedState_EffectiveTransitionTime
+ \value ExclusiveLimitAlarmType_SuppressedState_TrueState
+ \value ExclusiveLimitAlarmType_SuppressedState_FalseState
+ \value ExclusiveLimitAlarmType_ShelvingState
+ \value ExclusiveLimitAlarmType_ShelvingState_CurrentState
+ \value ExclusiveLimitAlarmType_ShelvingState_CurrentState_Id
+ \value ExclusiveLimitAlarmType_ShelvingState_CurrentState_Name
+ \value ExclusiveLimitAlarmType_ShelvingState_CurrentState_Number
+ \value ExclusiveLimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value ExclusiveLimitAlarmType_ShelvingState_LastTransition
+ \value ExclusiveLimitAlarmType_ShelvingState_LastTransition_Id
+ \value ExclusiveLimitAlarmType_ShelvingState_LastTransition_Name
+ \value ExclusiveLimitAlarmType_ShelvingState_LastTransition_Number
+ \value ExclusiveLimitAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value ExclusiveLimitAlarmType_ShelvingState_UnshelveTime
+ \value ExclusiveLimitAlarmType_ShelvingState_Unshelve
+ \value ExclusiveLimitAlarmType_ShelvingState_OneShotShelve
+ \value ExclusiveLimitAlarmType_ShelvingState_TimedShelve
+ \value ExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value ExclusiveLimitAlarmType_SuppressedOrShelved
+ \value ExclusiveLimitAlarmType_MaxTimeShelved
+ \value ExclusiveLimitAlarmType_LimitState
+ \value ExclusiveLimitAlarmType_LimitState_CurrentState
+ \value ExclusiveLimitAlarmType_LimitState_CurrentState_Id
+ \value ExclusiveLimitAlarmType_LimitState_CurrentState_Name
+ \value ExclusiveLimitAlarmType_LimitState_CurrentState_Number
+ \value ExclusiveLimitAlarmType_LimitState_CurrentState_EffectiveDisplayName
+ \value ExclusiveLimitAlarmType_LimitState_LastTransition
+ \value ExclusiveLimitAlarmType_LimitState_LastTransition_Id
+ \value ExclusiveLimitAlarmType_LimitState_LastTransition_Name
+ \value ExclusiveLimitAlarmType_LimitState_LastTransition_Number
+ \value ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime
+ \value ExclusiveLimitAlarmType_HighHighLimit
+ \value ExclusiveLimitAlarmType_HighLimit
+ \value ExclusiveLimitAlarmType_LowLimit
+ \value ExclusiveLimitAlarmType_LowLowLimit
+ \value ExclusiveLevelAlarmType
+ \value ExclusiveLevelAlarmType_EventId
+ \value ExclusiveLevelAlarmType_EventType
+ \value ExclusiveLevelAlarmType_SourceNode
+ \value ExclusiveLevelAlarmType_SourceName
+ \value ExclusiveLevelAlarmType_Time
+ \value ExclusiveLevelAlarmType_ReceiveTime
+ \value ExclusiveLevelAlarmType_LocalTime
+ \value ExclusiveLevelAlarmType_Message
+ \value ExclusiveLevelAlarmType_Severity
+ \value ExclusiveLevelAlarmType_ConditionName
+ \value ExclusiveLevelAlarmType_BranchId
+ \value ExclusiveLevelAlarmType_Retain
+ \value ExclusiveLevelAlarmType_EnabledState
+ \value ExclusiveLevelAlarmType_EnabledState_Id
+ \value ExclusiveLevelAlarmType_EnabledState_Name
+ \value ExclusiveLevelAlarmType_EnabledState_Number
+ \value ExclusiveLevelAlarmType_EnabledState_EffectiveDisplayName
+ \value ExclusiveLevelAlarmType_EnabledState_TransitionTime
+ \value ExclusiveLevelAlarmType_EnabledState_EffectiveTransitionTime
+ \value ExclusiveLevelAlarmType_EnabledState_TrueState
+ \value ExclusiveLevelAlarmType_EnabledState_FalseState
+ \value ExclusiveLevelAlarmType_Quality
+ \value ExclusiveLevelAlarmType_Quality_SourceTimestamp
+ \value ExclusiveLevelAlarmType_LastSeverity
+ \value ExclusiveLevelAlarmType_LastSeverity_SourceTimestamp
+ \value ExclusiveLevelAlarmType_Comment
+ \value ExclusiveLevelAlarmType_Comment_SourceTimestamp
+ \value ExclusiveLevelAlarmType_ClientUserId
+ \value ExclusiveLevelAlarmType_Enable
+ \value ExclusiveLevelAlarmType_Disable
+ \value ExclusiveLevelAlarmType_AddComment
+ \value ExclusiveLevelAlarmType_AddComment_InputArguments
+ \value ExclusiveLevelAlarmType_ConditionRefresh
+ \value ExclusiveLevelAlarmType_ConditionRefresh_InputArguments
+ \value ExclusiveLevelAlarmType_AckedState
+ \value ExclusiveLevelAlarmType_AckedState_Id
+ \value ExclusiveLevelAlarmType_AckedState_Name
+ \value ExclusiveLevelAlarmType_AckedState_Number
+ \value ExclusiveLevelAlarmType_AckedState_EffectiveDisplayName
+ \value ExclusiveLevelAlarmType_AckedState_TransitionTime
+ \value ExclusiveLevelAlarmType_AckedState_EffectiveTransitionTime
+ \value ExclusiveLevelAlarmType_AckedState_TrueState
+ \value ExclusiveLevelAlarmType_AckedState_FalseState
+ \value ExclusiveLevelAlarmType_ConfirmedState
+ \value ExclusiveLevelAlarmType_ConfirmedState_Id
+ \value ExclusiveLevelAlarmType_ConfirmedState_Name
+ \value ExclusiveLevelAlarmType_ConfirmedState_Number
+ \value ExclusiveLevelAlarmType_ConfirmedState_EffectiveDisplayName
+ \value ExclusiveLevelAlarmType_ConfirmedState_TransitionTime
+ \value ExclusiveLevelAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value ExclusiveLevelAlarmType_ConfirmedState_TrueState
+ \value ExclusiveLevelAlarmType_ConfirmedState_FalseState
+ \value ExclusiveLevelAlarmType_Acknowledge
+ \value ExclusiveLevelAlarmType_Acknowledge_InputArguments
+ \value ExclusiveLevelAlarmType_Confirm
+ \value ExclusiveLevelAlarmType_Confirm_InputArguments
+ \value ExclusiveLevelAlarmType_ActiveState
+ \value ExclusiveLevelAlarmType_ActiveState_Id
+ \value ExclusiveLevelAlarmType_ActiveState_Name
+ \value ExclusiveLevelAlarmType_ActiveState_Number
+ \value ExclusiveLevelAlarmType_ActiveState_EffectiveDisplayName
+ \value ExclusiveLevelAlarmType_ActiveState_TransitionTime
+ \value ExclusiveLevelAlarmType_ActiveState_EffectiveTransitionTime
+ \value ExclusiveLevelAlarmType_ActiveState_TrueState
+ \value ExclusiveLevelAlarmType_ActiveState_FalseState
+ \value ExclusiveLevelAlarmType_SuppressedState
+ \value ExclusiveLevelAlarmType_SuppressedState_Id
+ \value ExclusiveLevelAlarmType_SuppressedState_Name
+ \value ExclusiveLevelAlarmType_SuppressedState_Number
+ \value ExclusiveLevelAlarmType_SuppressedState_EffectiveDisplayName
+ \value ExclusiveLevelAlarmType_SuppressedState_TransitionTime
+ \value ExclusiveLevelAlarmType_SuppressedState_EffectiveTransitionTime
+ \value ExclusiveLevelAlarmType_SuppressedState_TrueState
+ \value ExclusiveLevelAlarmType_SuppressedState_FalseState
+ \value ExclusiveLevelAlarmType_ShelvingState
+ \value ExclusiveLevelAlarmType_ShelvingState_CurrentState
+ \value ExclusiveLevelAlarmType_ShelvingState_CurrentState_Id
+ \value ExclusiveLevelAlarmType_ShelvingState_CurrentState_Name
+ \value ExclusiveLevelAlarmType_ShelvingState_CurrentState_Number
+ \value ExclusiveLevelAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value ExclusiveLevelAlarmType_ShelvingState_LastTransition
+ \value ExclusiveLevelAlarmType_ShelvingState_LastTransition_Id
+ \value ExclusiveLevelAlarmType_ShelvingState_LastTransition_Name
+ \value ExclusiveLevelAlarmType_ShelvingState_LastTransition_Number
+ \value ExclusiveLevelAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value ExclusiveLevelAlarmType_ShelvingState_UnshelveTime
+ \value ExclusiveLevelAlarmType_ShelvingState_Unshelve
+ \value ExclusiveLevelAlarmType_ShelvingState_OneShotShelve
+ \value ExclusiveLevelAlarmType_ShelvingState_TimedShelve
+ \value ExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value ExclusiveLevelAlarmType_SuppressedOrShelved
+ \value ExclusiveLevelAlarmType_MaxTimeShelved
+ \value ExclusiveLevelAlarmType_LimitState
+ \value ExclusiveLevelAlarmType_LimitState_CurrentState
+ \value ExclusiveLevelAlarmType_LimitState_CurrentState_Id
+ \value ExclusiveLevelAlarmType_LimitState_CurrentState_Name
+ \value ExclusiveLevelAlarmType_LimitState_CurrentState_Number
+ \value ExclusiveLevelAlarmType_LimitState_CurrentState_EffectiveDisplayName
+ \value ExclusiveLevelAlarmType_LimitState_LastTransition
+ \value ExclusiveLevelAlarmType_LimitState_LastTransition_Id
+ \value ExclusiveLevelAlarmType_LimitState_LastTransition_Name
+ \value ExclusiveLevelAlarmType_LimitState_LastTransition_Number
+ \value ExclusiveLevelAlarmType_LimitState_LastTransition_TransitionTime
+ \value ExclusiveLevelAlarmType_HighHighLimit
+ \value ExclusiveLevelAlarmType_HighLimit
+ \value ExclusiveLevelAlarmType_LowLimit
+ \value ExclusiveLevelAlarmType_LowLowLimit
+ \value ExclusiveRateOfChangeAlarmType
+ \value ExclusiveRateOfChangeAlarmType_EventId
+ \value ExclusiveRateOfChangeAlarmType_EventType
+ \value ExclusiveRateOfChangeAlarmType_SourceNode
+ \value ExclusiveRateOfChangeAlarmType_SourceName
+ \value ExclusiveRateOfChangeAlarmType_Time
+ \value ExclusiveRateOfChangeAlarmType_ReceiveTime
+ \value ExclusiveRateOfChangeAlarmType_LocalTime
+ \value ExclusiveRateOfChangeAlarmType_Message
+ \value ExclusiveRateOfChangeAlarmType_Severity
+ \value ExclusiveRateOfChangeAlarmType_ConditionName
+ \value ExclusiveRateOfChangeAlarmType_BranchId
+ \value ExclusiveRateOfChangeAlarmType_Retain
+ \value ExclusiveRateOfChangeAlarmType_EnabledState
+ \value ExclusiveRateOfChangeAlarmType_EnabledState_Id
+ \value ExclusiveRateOfChangeAlarmType_EnabledState_Name
+ \value ExclusiveRateOfChangeAlarmType_EnabledState_Number
+ \value ExclusiveRateOfChangeAlarmType_EnabledState_EffectiveDisplayName
+ \value ExclusiveRateOfChangeAlarmType_EnabledState_TransitionTime
+ \value ExclusiveRateOfChangeAlarmType_EnabledState_EffectiveTransitionTime
+ \value ExclusiveRateOfChangeAlarmType_EnabledState_TrueState
+ \value ExclusiveRateOfChangeAlarmType_EnabledState_FalseState
+ \value ExclusiveRateOfChangeAlarmType_Quality
+ \value ExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp
+ \value ExclusiveRateOfChangeAlarmType_LastSeverity
+ \value ExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp
+ \value ExclusiveRateOfChangeAlarmType_Comment
+ \value ExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp
+ \value ExclusiveRateOfChangeAlarmType_ClientUserId
+ \value ExclusiveRateOfChangeAlarmType_Enable
+ \value ExclusiveRateOfChangeAlarmType_Disable
+ \value ExclusiveRateOfChangeAlarmType_AddComment
+ \value ExclusiveRateOfChangeAlarmType_AddComment_InputArguments
+ \value ExclusiveRateOfChangeAlarmType_ConditionRefresh
+ \value ExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments
+ \value ExclusiveRateOfChangeAlarmType_AckedState
+ \value ExclusiveRateOfChangeAlarmType_AckedState_Id
+ \value ExclusiveRateOfChangeAlarmType_AckedState_Name
+ \value ExclusiveRateOfChangeAlarmType_AckedState_Number
+ \value ExclusiveRateOfChangeAlarmType_AckedState_EffectiveDisplayName
+ \value ExclusiveRateOfChangeAlarmType_AckedState_TransitionTime
+ \value ExclusiveRateOfChangeAlarmType_AckedState_EffectiveTransitionTime
+ \value ExclusiveRateOfChangeAlarmType_AckedState_TrueState
+ \value ExclusiveRateOfChangeAlarmType_AckedState_FalseState
+ \value ExclusiveRateOfChangeAlarmType_ConfirmedState
+ \value ExclusiveRateOfChangeAlarmType_ConfirmedState_Id
+ \value ExclusiveRateOfChangeAlarmType_ConfirmedState_Name
+ \value ExclusiveRateOfChangeAlarmType_ConfirmedState_Number
+ \value ExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveDisplayName
+ \value ExclusiveRateOfChangeAlarmType_ConfirmedState_TransitionTime
+ \value ExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value ExclusiveRateOfChangeAlarmType_ConfirmedState_TrueState
+ \value ExclusiveRateOfChangeAlarmType_ConfirmedState_FalseState
+ \value ExclusiveRateOfChangeAlarmType_Acknowledge
+ \value ExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments
+ \value ExclusiveRateOfChangeAlarmType_Confirm
+ \value ExclusiveRateOfChangeAlarmType_Confirm_InputArguments
+ \value ExclusiveRateOfChangeAlarmType_ActiveState
+ \value ExclusiveRateOfChangeAlarmType_ActiveState_Id
+ \value ExclusiveRateOfChangeAlarmType_ActiveState_Name
+ \value ExclusiveRateOfChangeAlarmType_ActiveState_Number
+ \value ExclusiveRateOfChangeAlarmType_ActiveState_EffectiveDisplayName
+ \value ExclusiveRateOfChangeAlarmType_ActiveState_TransitionTime
+ \value ExclusiveRateOfChangeAlarmType_ActiveState_EffectiveTransitionTime
+ \value ExclusiveRateOfChangeAlarmType_ActiveState_TrueState
+ \value ExclusiveRateOfChangeAlarmType_ActiveState_FalseState
+ \value ExclusiveRateOfChangeAlarmType_SuppressedState
+ \value ExclusiveRateOfChangeAlarmType_SuppressedState_Id
+ \value ExclusiveRateOfChangeAlarmType_SuppressedState_Name
+ \value ExclusiveRateOfChangeAlarmType_SuppressedState_Number
+ \value ExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveDisplayName
+ \value ExclusiveRateOfChangeAlarmType_SuppressedState_TransitionTime
+ \value ExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveTransitionTime
+ \value ExclusiveRateOfChangeAlarmType_SuppressedState_TrueState
+ \value ExclusiveRateOfChangeAlarmType_SuppressedState_FalseState
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Name
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Number
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Name
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Number
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value ExclusiveRateOfChangeAlarmType_SuppressedOrShelved
+ \value ExclusiveRateOfChangeAlarmType_MaxTimeShelved
+ \value ExclusiveRateOfChangeAlarmType_LimitState
+ \value ExclusiveRateOfChangeAlarmType_LimitState_CurrentState
+ \value ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Id
+ \value ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Name
+ \value ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Number
+ \value ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_EffectiveDisplayName
+ \value ExclusiveRateOfChangeAlarmType_LimitState_LastTransition
+ \value ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Id
+ \value ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Name
+ \value ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Number
+ \value ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_TransitionTime
+ \value ExclusiveRateOfChangeAlarmType_HighHighLimit
+ \value ExclusiveRateOfChangeAlarmType_HighLimit
+ \value ExclusiveRateOfChangeAlarmType_LowLimit
+ \value ExclusiveRateOfChangeAlarmType_LowLowLimit
+ \value ExclusiveDeviationAlarmType
+ \value ExclusiveDeviationAlarmType_EventId
+ \value ExclusiveDeviationAlarmType_EventType
+ \value ExclusiveDeviationAlarmType_SourceNode
+ \value ExclusiveDeviationAlarmType_SourceName
+ \value ExclusiveDeviationAlarmType_Time
+ \value ExclusiveDeviationAlarmType_ReceiveTime
+ \value ExclusiveDeviationAlarmType_LocalTime
+ \value ExclusiveDeviationAlarmType_Message
+ \value ExclusiveDeviationAlarmType_Severity
+ \value ExclusiveDeviationAlarmType_ConditionName
+ \value ExclusiveDeviationAlarmType_BranchId
+ \value ExclusiveDeviationAlarmType_Retain
+ \value ExclusiveDeviationAlarmType_EnabledState
+ \value ExclusiveDeviationAlarmType_EnabledState_Id
+ \value ExclusiveDeviationAlarmType_EnabledState_Name
+ \value ExclusiveDeviationAlarmType_EnabledState_Number
+ \value ExclusiveDeviationAlarmType_EnabledState_EffectiveDisplayName
+ \value ExclusiveDeviationAlarmType_EnabledState_TransitionTime
+ \value ExclusiveDeviationAlarmType_EnabledState_EffectiveTransitionTime
+ \value ExclusiveDeviationAlarmType_EnabledState_TrueState
+ \value ExclusiveDeviationAlarmType_EnabledState_FalseState
+ \value ExclusiveDeviationAlarmType_Quality
+ \value ExclusiveDeviationAlarmType_Quality_SourceTimestamp
+ \value ExclusiveDeviationAlarmType_LastSeverity
+ \value ExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp
+ \value ExclusiveDeviationAlarmType_Comment
+ \value ExclusiveDeviationAlarmType_Comment_SourceTimestamp
+ \value ExclusiveDeviationAlarmType_ClientUserId
+ \value ExclusiveDeviationAlarmType_Enable
+ \value ExclusiveDeviationAlarmType_Disable
+ \value ExclusiveDeviationAlarmType_AddComment
+ \value ExclusiveDeviationAlarmType_AddComment_InputArguments
+ \value ExclusiveDeviationAlarmType_ConditionRefresh
+ \value ExclusiveDeviationAlarmType_ConditionRefresh_InputArguments
+ \value ExclusiveDeviationAlarmType_AckedState
+ \value ExclusiveDeviationAlarmType_AckedState_Id
+ \value ExclusiveDeviationAlarmType_AckedState_Name
+ \value ExclusiveDeviationAlarmType_AckedState_Number
+ \value ExclusiveDeviationAlarmType_AckedState_EffectiveDisplayName
+ \value ExclusiveDeviationAlarmType_AckedState_TransitionTime
+ \value ExclusiveDeviationAlarmType_AckedState_EffectiveTransitionTime
+ \value ExclusiveDeviationAlarmType_AckedState_TrueState
+ \value ExclusiveDeviationAlarmType_AckedState_FalseState
+ \value ExclusiveDeviationAlarmType_ConfirmedState
+ \value ExclusiveDeviationAlarmType_ConfirmedState_Id
+ \value ExclusiveDeviationAlarmType_ConfirmedState_Name
+ \value ExclusiveDeviationAlarmType_ConfirmedState_Number
+ \value ExclusiveDeviationAlarmType_ConfirmedState_EffectiveDisplayName
+ \value ExclusiveDeviationAlarmType_ConfirmedState_TransitionTime
+ \value ExclusiveDeviationAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value ExclusiveDeviationAlarmType_ConfirmedState_TrueState
+ \value ExclusiveDeviationAlarmType_ConfirmedState_FalseState
+ \value ExclusiveDeviationAlarmType_Acknowledge
+ \value ExclusiveDeviationAlarmType_Acknowledge_InputArguments
+ \value ExclusiveDeviationAlarmType_Confirm
+ \value ExclusiveDeviationAlarmType_Confirm_InputArguments
+ \value ExclusiveDeviationAlarmType_ActiveState
+ \value ExclusiveDeviationAlarmType_ActiveState_Id
+ \value ExclusiveDeviationAlarmType_ActiveState_Name
+ \value ExclusiveDeviationAlarmType_ActiveState_Number
+ \value ExclusiveDeviationAlarmType_ActiveState_EffectiveDisplayName
+ \value ExclusiveDeviationAlarmType_ActiveState_TransitionTime
+ \value ExclusiveDeviationAlarmType_ActiveState_EffectiveTransitionTime
+ \value ExclusiveDeviationAlarmType_ActiveState_TrueState
+ \value ExclusiveDeviationAlarmType_ActiveState_FalseState
+ \value ExclusiveDeviationAlarmType_SuppressedState
+ \value ExclusiveDeviationAlarmType_SuppressedState_Id
+ \value ExclusiveDeviationAlarmType_SuppressedState_Name
+ \value ExclusiveDeviationAlarmType_SuppressedState_Number
+ \value ExclusiveDeviationAlarmType_SuppressedState_EffectiveDisplayName
+ \value ExclusiveDeviationAlarmType_SuppressedState_TransitionTime
+ \value ExclusiveDeviationAlarmType_SuppressedState_EffectiveTransitionTime
+ \value ExclusiveDeviationAlarmType_SuppressedState_TrueState
+ \value ExclusiveDeviationAlarmType_SuppressedState_FalseState
+ \value ExclusiveDeviationAlarmType_ShelvingState
+ \value ExclusiveDeviationAlarmType_ShelvingState_CurrentState
+ \value ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id
+ \value ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Name
+ \value ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Number
+ \value ExclusiveDeviationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value ExclusiveDeviationAlarmType_ShelvingState_LastTransition
+ \value ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id
+ \value ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Name
+ \value ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Number
+ \value ExclusiveDeviationAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value ExclusiveDeviationAlarmType_ShelvingState_UnshelveTime
+ \value ExclusiveDeviationAlarmType_ShelvingState_Unshelve
+ \value ExclusiveDeviationAlarmType_ShelvingState_OneShotShelve
+ \value ExclusiveDeviationAlarmType_ShelvingState_TimedShelve
+ \value ExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value ExclusiveDeviationAlarmType_SuppressedOrShelved
+ \value ExclusiveDeviationAlarmType_MaxTimeShelved
+ \value ExclusiveDeviationAlarmType_LimitState
+ \value ExclusiveDeviationAlarmType_LimitState_CurrentState
+ \value ExclusiveDeviationAlarmType_LimitState_CurrentState_Id
+ \value ExclusiveDeviationAlarmType_LimitState_CurrentState_Name
+ \value ExclusiveDeviationAlarmType_LimitState_CurrentState_Number
+ \value ExclusiveDeviationAlarmType_LimitState_CurrentState_EffectiveDisplayName
+ \value ExclusiveDeviationAlarmType_LimitState_LastTransition
+ \value ExclusiveDeviationAlarmType_LimitState_LastTransition_Id
+ \value ExclusiveDeviationAlarmType_LimitState_LastTransition_Name
+ \value ExclusiveDeviationAlarmType_LimitState_LastTransition_Number
+ \value ExclusiveDeviationAlarmType_LimitState_LastTransition_TransitionTime
+ \value ExclusiveDeviationAlarmType_HighHighLimit
+ \value ExclusiveDeviationAlarmType_HighLimit
+ \value ExclusiveDeviationAlarmType_LowLimit
+ \value ExclusiveDeviationAlarmType_LowLowLimit
+ \value ExclusiveDeviationAlarmType_SetpointNode
+ \value NonExclusiveLimitAlarmType
+ \value NonExclusiveLimitAlarmType_EventId
+ \value NonExclusiveLimitAlarmType_EventType
+ \value NonExclusiveLimitAlarmType_SourceNode
+ \value NonExclusiveLimitAlarmType_SourceName
+ \value NonExclusiveLimitAlarmType_Time
+ \value NonExclusiveLimitAlarmType_ReceiveTime
+ \value NonExclusiveLimitAlarmType_LocalTime
+ \value NonExclusiveLimitAlarmType_Message
+ \value NonExclusiveLimitAlarmType_Severity
+ \value NonExclusiveLimitAlarmType_ConditionName
+ \value NonExclusiveLimitAlarmType_BranchId
+ \value NonExclusiveLimitAlarmType_Retain
+ \value NonExclusiveLimitAlarmType_EnabledState
+ \value NonExclusiveLimitAlarmType_EnabledState_Id
+ \value NonExclusiveLimitAlarmType_EnabledState_Name
+ \value NonExclusiveLimitAlarmType_EnabledState_Number
+ \value NonExclusiveLimitAlarmType_EnabledState_EffectiveDisplayName
+ \value NonExclusiveLimitAlarmType_EnabledState_TransitionTime
+ \value NonExclusiveLimitAlarmType_EnabledState_EffectiveTransitionTime
+ \value NonExclusiveLimitAlarmType_EnabledState_TrueState
+ \value NonExclusiveLimitAlarmType_EnabledState_FalseState
+ \value NonExclusiveLimitAlarmType_Quality
+ \value NonExclusiveLimitAlarmType_Quality_SourceTimestamp
+ \value NonExclusiveLimitAlarmType_LastSeverity
+ \value NonExclusiveLimitAlarmType_LastSeverity_SourceTimestamp
+ \value NonExclusiveLimitAlarmType_Comment
+ \value NonExclusiveLimitAlarmType_Comment_SourceTimestamp
+ \value NonExclusiveLimitAlarmType_ClientUserId
+ \value NonExclusiveLimitAlarmType_Enable
+ \value NonExclusiveLimitAlarmType_Disable
+ \value NonExclusiveLimitAlarmType_AddComment
+ \value NonExclusiveLimitAlarmType_AddComment_InputArguments
+ \value NonExclusiveLimitAlarmType_ConditionRefresh
+ \value NonExclusiveLimitAlarmType_ConditionRefresh_InputArguments
+ \value NonExclusiveLimitAlarmType_AckedState
+ \value NonExclusiveLimitAlarmType_AckedState_Id
+ \value NonExclusiveLimitAlarmType_AckedState_Name
+ \value NonExclusiveLimitAlarmType_AckedState_Number
+ \value NonExclusiveLimitAlarmType_AckedState_EffectiveDisplayName
+ \value NonExclusiveLimitAlarmType_AckedState_TransitionTime
+ \value NonExclusiveLimitAlarmType_AckedState_EffectiveTransitionTime
+ \value NonExclusiveLimitAlarmType_AckedState_TrueState
+ \value NonExclusiveLimitAlarmType_AckedState_FalseState
+ \value NonExclusiveLimitAlarmType_ConfirmedState
+ \value NonExclusiveLimitAlarmType_ConfirmedState_Id
+ \value NonExclusiveLimitAlarmType_ConfirmedState_Name
+ \value NonExclusiveLimitAlarmType_ConfirmedState_Number
+ \value NonExclusiveLimitAlarmType_ConfirmedState_EffectiveDisplayName
+ \value NonExclusiveLimitAlarmType_ConfirmedState_TransitionTime
+ \value NonExclusiveLimitAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value NonExclusiveLimitAlarmType_ConfirmedState_TrueState
+ \value NonExclusiveLimitAlarmType_ConfirmedState_FalseState
+ \value NonExclusiveLimitAlarmType_Acknowledge
+ \value NonExclusiveLimitAlarmType_Acknowledge_InputArguments
+ \value NonExclusiveLimitAlarmType_Confirm
+ \value NonExclusiveLimitAlarmType_Confirm_InputArguments
+ \value NonExclusiveLimitAlarmType_ActiveState
+ \value NonExclusiveLimitAlarmType_ActiveState_Id
+ \value NonExclusiveLimitAlarmType_ActiveState_Name
+ \value NonExclusiveLimitAlarmType_ActiveState_Number
+ \value NonExclusiveLimitAlarmType_ActiveState_EffectiveDisplayName
+ \value NonExclusiveLimitAlarmType_ActiveState_TransitionTime
+ \value NonExclusiveLimitAlarmType_ActiveState_EffectiveTransitionTime
+ \value NonExclusiveLimitAlarmType_ActiveState_TrueState
+ \value NonExclusiveLimitAlarmType_ActiveState_FalseState
+ \value NonExclusiveLimitAlarmType_SuppressedState
+ \value NonExclusiveLimitAlarmType_SuppressedState_Id
+ \value NonExclusiveLimitAlarmType_SuppressedState_Name
+ \value NonExclusiveLimitAlarmType_SuppressedState_Number
+ \value NonExclusiveLimitAlarmType_SuppressedState_EffectiveDisplayName
+ \value NonExclusiveLimitAlarmType_SuppressedState_TransitionTime
+ \value NonExclusiveLimitAlarmType_SuppressedState_EffectiveTransitionTime
+ \value NonExclusiveLimitAlarmType_SuppressedState_TrueState
+ \value NonExclusiveLimitAlarmType_SuppressedState_FalseState
+ \value NonExclusiveLimitAlarmType_ShelvingState
+ \value NonExclusiveLimitAlarmType_ShelvingState_CurrentState
+ \value NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Id
+ \value NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Name
+ \value NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Number
+ \value NonExclusiveLimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value NonExclusiveLimitAlarmType_ShelvingState_LastTransition
+ \value NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Id
+ \value NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Name
+ \value NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Number
+ \value NonExclusiveLimitAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value NonExclusiveLimitAlarmType_ShelvingState_UnshelveTime
+ \value NonExclusiveLimitAlarmType_ShelvingState_Unshelve
+ \value NonExclusiveLimitAlarmType_ShelvingState_OneShotShelve
+ \value NonExclusiveLimitAlarmType_ShelvingState_TimedShelve
+ \value NonExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value NonExclusiveLimitAlarmType_SuppressedOrShelved
+ \value NonExclusiveLimitAlarmType_MaxTimeShelved
+ \value NonExclusiveLimitAlarmType_HighHighState
+ \value NonExclusiveLimitAlarmType_HighHighState_Id
+ \value NonExclusiveLimitAlarmType_HighHighState_Name
+ \value NonExclusiveLimitAlarmType_HighHighState_Number
+ \value NonExclusiveLimitAlarmType_HighHighState_EffectiveDisplayName
+ \value NonExclusiveLimitAlarmType_HighHighState_TransitionTime
+ \value NonExclusiveLimitAlarmType_HighHighState_EffectiveTransitionTime
+ \value NonExclusiveLimitAlarmType_HighHighState_TrueState
+ \value NonExclusiveLimitAlarmType_HighHighState_FalseState
+ \value NonExclusiveLimitAlarmType_HighState
+ \value NonExclusiveLimitAlarmType_HighState_Id
+ \value NonExclusiveLimitAlarmType_HighState_Name
+ \value NonExclusiveLimitAlarmType_HighState_Number
+ \value NonExclusiveLimitAlarmType_HighState_EffectiveDisplayName
+ \value NonExclusiveLimitAlarmType_HighState_TransitionTime
+ \value NonExclusiveLimitAlarmType_HighState_EffectiveTransitionTime
+ \value NonExclusiveLimitAlarmType_HighState_TrueState
+ \value NonExclusiveLimitAlarmType_HighState_FalseState
+ \value NonExclusiveLimitAlarmType_LowState
+ \value NonExclusiveLimitAlarmType_LowState_Id
+ \value NonExclusiveLimitAlarmType_LowState_Name
+ \value NonExclusiveLimitAlarmType_LowState_Number
+ \value NonExclusiveLimitAlarmType_LowState_EffectiveDisplayName
+ \value NonExclusiveLimitAlarmType_LowState_TransitionTime
+ \value NonExclusiveLimitAlarmType_LowState_EffectiveTransitionTime
+ \value NonExclusiveLimitAlarmType_LowState_TrueState
+ \value NonExclusiveLimitAlarmType_LowState_FalseState
+ \value NonExclusiveLimitAlarmType_LowLowState
+ \value NonExclusiveLimitAlarmType_LowLowState_Id
+ \value NonExclusiveLimitAlarmType_LowLowState_Name
+ \value NonExclusiveLimitAlarmType_LowLowState_Number
+ \value NonExclusiveLimitAlarmType_LowLowState_EffectiveDisplayName
+ \value NonExclusiveLimitAlarmType_LowLowState_TransitionTime
+ \value NonExclusiveLimitAlarmType_LowLowState_EffectiveTransitionTime
+ \value NonExclusiveLimitAlarmType_LowLowState_TrueState
+ \value NonExclusiveLimitAlarmType_LowLowState_FalseState
+ \value NonExclusiveLimitAlarmType_HighHighLimit
+ \value NonExclusiveLimitAlarmType_HighLimit
+ \value NonExclusiveLimitAlarmType_LowLimit
+ \value NonExclusiveLimitAlarmType_LowLowLimit
+ \value NonExclusiveLevelAlarmType
+ \value NonExclusiveLevelAlarmType_EventId
+ \value NonExclusiveLevelAlarmType_EventType
+ \value NonExclusiveLevelAlarmType_SourceNode
+ \value NonExclusiveLevelAlarmType_SourceName
+ \value NonExclusiveLevelAlarmType_Time
+ \value NonExclusiveLevelAlarmType_ReceiveTime
+ \value NonExclusiveLevelAlarmType_LocalTime
+ \value NonExclusiveLevelAlarmType_Message
+ \value NonExclusiveLevelAlarmType_Severity
+ \value NonExclusiveLevelAlarmType_ConditionName
+ \value NonExclusiveLevelAlarmType_BranchId
+ \value NonExclusiveLevelAlarmType_Retain
+ \value NonExclusiveLevelAlarmType_EnabledState
+ \value NonExclusiveLevelAlarmType_EnabledState_Id
+ \value NonExclusiveLevelAlarmType_EnabledState_Name
+ \value NonExclusiveLevelAlarmType_EnabledState_Number
+ \value NonExclusiveLevelAlarmType_EnabledState_EffectiveDisplayName
+ \value NonExclusiveLevelAlarmType_EnabledState_TransitionTime
+ \value NonExclusiveLevelAlarmType_EnabledState_EffectiveTransitionTime
+ \value NonExclusiveLevelAlarmType_EnabledState_TrueState
+ \value NonExclusiveLevelAlarmType_EnabledState_FalseState
+ \value NonExclusiveLevelAlarmType_Quality
+ \value NonExclusiveLevelAlarmType_Quality_SourceTimestamp
+ \value NonExclusiveLevelAlarmType_LastSeverity
+ \value NonExclusiveLevelAlarmType_LastSeverity_SourceTimestamp
+ \value NonExclusiveLevelAlarmType_Comment
+ \value NonExclusiveLevelAlarmType_Comment_SourceTimestamp
+ \value NonExclusiveLevelAlarmType_ClientUserId
+ \value NonExclusiveLevelAlarmType_Enable
+ \value NonExclusiveLevelAlarmType_Disable
+ \value NonExclusiveLevelAlarmType_AddComment
+ \value NonExclusiveLevelAlarmType_AddComment_InputArguments
+ \value NonExclusiveLevelAlarmType_ConditionRefresh
+ \value NonExclusiveLevelAlarmType_ConditionRefresh_InputArguments
+ \value NonExclusiveLevelAlarmType_AckedState
+ \value NonExclusiveLevelAlarmType_AckedState_Id
+ \value NonExclusiveLevelAlarmType_AckedState_Name
+ \value NonExclusiveLevelAlarmType_AckedState_Number
+ \value NonExclusiveLevelAlarmType_AckedState_EffectiveDisplayName
+ \value NonExclusiveLevelAlarmType_AckedState_TransitionTime
+ \value NonExclusiveLevelAlarmType_AckedState_EffectiveTransitionTime
+ \value NonExclusiveLevelAlarmType_AckedState_TrueState
+ \value NonExclusiveLevelAlarmType_AckedState_FalseState
+ \value NonExclusiveLevelAlarmType_ConfirmedState
+ \value NonExclusiveLevelAlarmType_ConfirmedState_Id
+ \value NonExclusiveLevelAlarmType_ConfirmedState_Name
+ \value NonExclusiveLevelAlarmType_ConfirmedState_Number
+ \value NonExclusiveLevelAlarmType_ConfirmedState_EffectiveDisplayName
+ \value NonExclusiveLevelAlarmType_ConfirmedState_TransitionTime
+ \value NonExclusiveLevelAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value NonExclusiveLevelAlarmType_ConfirmedState_TrueState
+ \value NonExclusiveLevelAlarmType_ConfirmedState_FalseState
+ \value NonExclusiveLevelAlarmType_Acknowledge
+ \value NonExclusiveLevelAlarmType_Acknowledge_InputArguments
+ \value NonExclusiveLevelAlarmType_Confirm
+ \value NonExclusiveLevelAlarmType_Confirm_InputArguments
+ \value NonExclusiveLevelAlarmType_ActiveState
+ \value NonExclusiveLevelAlarmType_ActiveState_Id
+ \value NonExclusiveLevelAlarmType_ActiveState_Name
+ \value NonExclusiveLevelAlarmType_ActiveState_Number
+ \value NonExclusiveLevelAlarmType_ActiveState_EffectiveDisplayName
+ \value NonExclusiveLevelAlarmType_ActiveState_TransitionTime
+ \value NonExclusiveLevelAlarmType_ActiveState_EffectiveTransitionTime
+ \value NonExclusiveLevelAlarmType_ActiveState_TrueState
+ \value NonExclusiveLevelAlarmType_ActiveState_FalseState
+ \value NonExclusiveLevelAlarmType_SuppressedState
+ \value NonExclusiveLevelAlarmType_SuppressedState_Id
+ \value NonExclusiveLevelAlarmType_SuppressedState_Name
+ \value NonExclusiveLevelAlarmType_SuppressedState_Number
+ \value NonExclusiveLevelAlarmType_SuppressedState_EffectiveDisplayName
+ \value NonExclusiveLevelAlarmType_SuppressedState_TransitionTime
+ \value NonExclusiveLevelAlarmType_SuppressedState_EffectiveTransitionTime
+ \value NonExclusiveLevelAlarmType_SuppressedState_TrueState
+ \value NonExclusiveLevelAlarmType_SuppressedState_FalseState
+ \value NonExclusiveLevelAlarmType_ShelvingState
+ \value NonExclusiveLevelAlarmType_ShelvingState_CurrentState
+ \value NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Id
+ \value NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Name
+ \value NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Number
+ \value NonExclusiveLevelAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value NonExclusiveLevelAlarmType_ShelvingState_LastTransition
+ \value NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Id
+ \value NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Name
+ \value NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Number
+ \value NonExclusiveLevelAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value NonExclusiveLevelAlarmType_ShelvingState_UnshelveTime
+ \value NonExclusiveLevelAlarmType_ShelvingState_Unshelve
+ \value NonExclusiveLevelAlarmType_ShelvingState_OneShotShelve
+ \value NonExclusiveLevelAlarmType_ShelvingState_TimedShelve
+ \value NonExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value NonExclusiveLevelAlarmType_SuppressedOrShelved
+ \value NonExclusiveLevelAlarmType_MaxTimeShelved
+ \value NonExclusiveLevelAlarmType_HighHighState
+ \value NonExclusiveLevelAlarmType_HighHighState_Id
+ \value NonExclusiveLevelAlarmType_HighHighState_Name
+ \value NonExclusiveLevelAlarmType_HighHighState_Number
+ \value NonExclusiveLevelAlarmType_HighHighState_EffectiveDisplayName
+ \value NonExclusiveLevelAlarmType_HighHighState_TransitionTime
+ \value NonExclusiveLevelAlarmType_HighHighState_EffectiveTransitionTime
+ \value NonExclusiveLevelAlarmType_HighHighState_TrueState
+ \value NonExclusiveLevelAlarmType_HighHighState_FalseState
+ \value NonExclusiveLevelAlarmType_HighState
+ \value NonExclusiveLevelAlarmType_HighState_Id
+ \value NonExclusiveLevelAlarmType_HighState_Name
+ \value NonExclusiveLevelAlarmType_HighState_Number
+ \value NonExclusiveLevelAlarmType_HighState_EffectiveDisplayName
+ \value NonExclusiveLevelAlarmType_HighState_TransitionTime
+ \value NonExclusiveLevelAlarmType_HighState_EffectiveTransitionTime
+ \value NonExclusiveLevelAlarmType_HighState_TrueState
+ \value NonExclusiveLevelAlarmType_HighState_FalseState
+ \value NonExclusiveLevelAlarmType_LowState
+ \value NonExclusiveLevelAlarmType_LowState_Id
+ \value NonExclusiveLevelAlarmType_LowState_Name
+ \value NonExclusiveLevelAlarmType_LowState_Number
+ \value NonExclusiveLevelAlarmType_LowState_EffectiveDisplayName
+ \value NonExclusiveLevelAlarmType_LowState_TransitionTime
+ \value NonExclusiveLevelAlarmType_LowState_EffectiveTransitionTime
+ \value NonExclusiveLevelAlarmType_LowState_TrueState
+ \value NonExclusiveLevelAlarmType_LowState_FalseState
+ \value NonExclusiveLevelAlarmType_LowLowState
+ \value NonExclusiveLevelAlarmType_LowLowState_Id
+ \value NonExclusiveLevelAlarmType_LowLowState_Name
+ \value NonExclusiveLevelAlarmType_LowLowState_Number
+ \value NonExclusiveLevelAlarmType_LowLowState_EffectiveDisplayName
+ \value NonExclusiveLevelAlarmType_LowLowState_TransitionTime
+ \value NonExclusiveLevelAlarmType_LowLowState_EffectiveTransitionTime
+ \value NonExclusiveLevelAlarmType_LowLowState_TrueState
+ \value NonExclusiveLevelAlarmType_LowLowState_FalseState
+ \value NonExclusiveLevelAlarmType_HighHighLimit
+ \value NonExclusiveLevelAlarmType_HighLimit
+ \value NonExclusiveLevelAlarmType_LowLimit
+ \value NonExclusiveLevelAlarmType_LowLowLimit
+ \value NonExclusiveRateOfChangeAlarmType
+ \value NonExclusiveRateOfChangeAlarmType_EventId
+ \value NonExclusiveRateOfChangeAlarmType_EventType
+ \value NonExclusiveRateOfChangeAlarmType_SourceNode
+ \value NonExclusiveRateOfChangeAlarmType_SourceName
+ \value NonExclusiveRateOfChangeAlarmType_Time
+ \value NonExclusiveRateOfChangeAlarmType_ReceiveTime
+ \value NonExclusiveRateOfChangeAlarmType_LocalTime
+ \value NonExclusiveRateOfChangeAlarmType_Message
+ \value NonExclusiveRateOfChangeAlarmType_Severity
+ \value NonExclusiveRateOfChangeAlarmType_ConditionName
+ \value NonExclusiveRateOfChangeAlarmType_BranchId
+ \value NonExclusiveRateOfChangeAlarmType_Retain
+ \value NonExclusiveRateOfChangeAlarmType_EnabledState
+ \value NonExclusiveRateOfChangeAlarmType_EnabledState_Id
+ \value NonExclusiveRateOfChangeAlarmType_EnabledState_Name
+ \value NonExclusiveRateOfChangeAlarmType_EnabledState_Number
+ \value NonExclusiveRateOfChangeAlarmType_EnabledState_EffectiveDisplayName
+ \value NonExclusiveRateOfChangeAlarmType_EnabledState_TransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_EnabledState_EffectiveTransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_EnabledState_TrueState
+ \value NonExclusiveRateOfChangeAlarmType_EnabledState_FalseState
+ \value NonExclusiveRateOfChangeAlarmType_Quality
+ \value NonExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp
+ \value NonExclusiveRateOfChangeAlarmType_LastSeverity
+ \value NonExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp
+ \value NonExclusiveRateOfChangeAlarmType_Comment
+ \value NonExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp
+ \value NonExclusiveRateOfChangeAlarmType_ClientUserId
+ \value NonExclusiveRateOfChangeAlarmType_Enable
+ \value NonExclusiveRateOfChangeAlarmType_Disable
+ \value NonExclusiveRateOfChangeAlarmType_AddComment
+ \value NonExclusiveRateOfChangeAlarmType_AddComment_InputArguments
+ \value NonExclusiveRateOfChangeAlarmType_ConditionRefresh
+ \value NonExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments
+ \value NonExclusiveRateOfChangeAlarmType_AckedState
+ \value NonExclusiveRateOfChangeAlarmType_AckedState_Id
+ \value NonExclusiveRateOfChangeAlarmType_AckedState_Name
+ \value NonExclusiveRateOfChangeAlarmType_AckedState_Number
+ \value NonExclusiveRateOfChangeAlarmType_AckedState_EffectiveDisplayName
+ \value NonExclusiveRateOfChangeAlarmType_AckedState_TransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_AckedState_EffectiveTransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_AckedState_TrueState
+ \value NonExclusiveRateOfChangeAlarmType_AckedState_FalseState
+ \value NonExclusiveRateOfChangeAlarmType_ConfirmedState
+ \value NonExclusiveRateOfChangeAlarmType_ConfirmedState_Id
+ \value NonExclusiveRateOfChangeAlarmType_ConfirmedState_Name
+ \value NonExclusiveRateOfChangeAlarmType_ConfirmedState_Number
+ \value NonExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveDisplayName
+ \value NonExclusiveRateOfChangeAlarmType_ConfirmedState_TransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_ConfirmedState_TrueState
+ \value NonExclusiveRateOfChangeAlarmType_ConfirmedState_FalseState
+ \value NonExclusiveRateOfChangeAlarmType_Acknowledge
+ \value NonExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments
+ \value NonExclusiveRateOfChangeAlarmType_Confirm
+ \value NonExclusiveRateOfChangeAlarmType_Confirm_InputArguments
+ \value NonExclusiveRateOfChangeAlarmType_ActiveState
+ \value NonExclusiveRateOfChangeAlarmType_ActiveState_Id
+ \value NonExclusiveRateOfChangeAlarmType_ActiveState_Name
+ \value NonExclusiveRateOfChangeAlarmType_ActiveState_Number
+ \value NonExclusiveRateOfChangeAlarmType_ActiveState_EffectiveDisplayName
+ \value NonExclusiveRateOfChangeAlarmType_ActiveState_TransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_ActiveState_EffectiveTransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_ActiveState_TrueState
+ \value NonExclusiveRateOfChangeAlarmType_ActiveState_FalseState
+ \value NonExclusiveRateOfChangeAlarmType_SuppressedState
+ \value NonExclusiveRateOfChangeAlarmType_SuppressedState_Id
+ \value NonExclusiveRateOfChangeAlarmType_SuppressedState_Name
+ \value NonExclusiveRateOfChangeAlarmType_SuppressedState_Number
+ \value NonExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveDisplayName
+ \value NonExclusiveRateOfChangeAlarmType_SuppressedState_TransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveTransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_SuppressedState_TrueState
+ \value NonExclusiveRateOfChangeAlarmType_SuppressedState_FalseState
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Name
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Number
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Name
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Number
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value NonExclusiveRateOfChangeAlarmType_SuppressedOrShelved
+ \value NonExclusiveRateOfChangeAlarmType_MaxTimeShelved
+ \value NonExclusiveRateOfChangeAlarmType_HighHighState
+ \value NonExclusiveRateOfChangeAlarmType_HighHighState_Id
+ \value NonExclusiveRateOfChangeAlarmType_HighHighState_Name
+ \value NonExclusiveRateOfChangeAlarmType_HighHighState_Number
+ \value NonExclusiveRateOfChangeAlarmType_HighHighState_EffectiveDisplayName
+ \value NonExclusiveRateOfChangeAlarmType_HighHighState_TransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_HighHighState_EffectiveTransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_HighHighState_TrueState
+ \value NonExclusiveRateOfChangeAlarmType_HighHighState_FalseState
+ \value NonExclusiveRateOfChangeAlarmType_HighState
+ \value NonExclusiveRateOfChangeAlarmType_HighState_Id
+ \value NonExclusiveRateOfChangeAlarmType_HighState_Name
+ \value NonExclusiveRateOfChangeAlarmType_HighState_Number
+ \value NonExclusiveRateOfChangeAlarmType_HighState_EffectiveDisplayName
+ \value NonExclusiveRateOfChangeAlarmType_HighState_TransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_HighState_EffectiveTransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_HighState_TrueState
+ \value NonExclusiveRateOfChangeAlarmType_HighState_FalseState
+ \value NonExclusiveRateOfChangeAlarmType_LowState
+ \value NonExclusiveRateOfChangeAlarmType_LowState_Id
+ \value NonExclusiveRateOfChangeAlarmType_LowState_Name
+ \value NonExclusiveRateOfChangeAlarmType_LowState_Number
+ \value NonExclusiveRateOfChangeAlarmType_LowState_EffectiveDisplayName
+ \value NonExclusiveRateOfChangeAlarmType_LowState_TransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_LowState_EffectiveTransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_LowState_TrueState
+ \value NonExclusiveRateOfChangeAlarmType_LowState_FalseState
+ \value NonExclusiveRateOfChangeAlarmType_LowLowState
+ \value NonExclusiveRateOfChangeAlarmType_LowLowState_Id
+ \value NonExclusiveRateOfChangeAlarmType_LowLowState_Name
+ \value NonExclusiveRateOfChangeAlarmType_LowLowState_Number
+ \value NonExclusiveRateOfChangeAlarmType_LowLowState_EffectiveDisplayName
+ \value NonExclusiveRateOfChangeAlarmType_LowLowState_TransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_LowLowState_EffectiveTransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_LowLowState_TrueState
+ \value NonExclusiveRateOfChangeAlarmType_LowLowState_FalseState
+ \value NonExclusiveRateOfChangeAlarmType_HighHighLimit
+ \value NonExclusiveRateOfChangeAlarmType_HighLimit
+ \value NonExclusiveRateOfChangeAlarmType_LowLimit
+ \value NonExclusiveRateOfChangeAlarmType_LowLowLimit
+ \value NonExclusiveDeviationAlarmType
+ \value NonExclusiveDeviationAlarmType_EventId
+ \value NonExclusiveDeviationAlarmType_EventType
+ \value NonExclusiveDeviationAlarmType_SourceNode
+ \value NonExclusiveDeviationAlarmType_SourceName
+ \value NonExclusiveDeviationAlarmType_Time
+ \value NonExclusiveDeviationAlarmType_ReceiveTime
+ \value NonExclusiveDeviationAlarmType_LocalTime
+ \value NonExclusiveDeviationAlarmType_Message
+ \value NonExclusiveDeviationAlarmType_Severity
+ \value NonExclusiveDeviationAlarmType_ConditionName
+ \value NonExclusiveDeviationAlarmType_BranchId
+ \value NonExclusiveDeviationAlarmType_Retain
+ \value NonExclusiveDeviationAlarmType_EnabledState
+ \value NonExclusiveDeviationAlarmType_EnabledState_Id
+ \value NonExclusiveDeviationAlarmType_EnabledState_Name
+ \value NonExclusiveDeviationAlarmType_EnabledState_Number
+ \value NonExclusiveDeviationAlarmType_EnabledState_EffectiveDisplayName
+ \value NonExclusiveDeviationAlarmType_EnabledState_TransitionTime
+ \value NonExclusiveDeviationAlarmType_EnabledState_EffectiveTransitionTime
+ \value NonExclusiveDeviationAlarmType_EnabledState_TrueState
+ \value NonExclusiveDeviationAlarmType_EnabledState_FalseState
+ \value NonExclusiveDeviationAlarmType_Quality
+ \value NonExclusiveDeviationAlarmType_Quality_SourceTimestamp
+ \value NonExclusiveDeviationAlarmType_LastSeverity
+ \value NonExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp
+ \value NonExclusiveDeviationAlarmType_Comment
+ \value NonExclusiveDeviationAlarmType_Comment_SourceTimestamp
+ \value NonExclusiveDeviationAlarmType_ClientUserId
+ \value NonExclusiveDeviationAlarmType_Enable
+ \value NonExclusiveDeviationAlarmType_Disable
+ \value NonExclusiveDeviationAlarmType_AddComment
+ \value NonExclusiveDeviationAlarmType_AddComment_InputArguments
+ \value NonExclusiveDeviationAlarmType_ConditionRefresh
+ \value NonExclusiveDeviationAlarmType_ConditionRefresh_InputArguments
+ \value NonExclusiveDeviationAlarmType_AckedState
+ \value NonExclusiveDeviationAlarmType_AckedState_Id
+ \value NonExclusiveDeviationAlarmType_AckedState_Name
+ \value NonExclusiveDeviationAlarmType_AckedState_Number
+ \value NonExclusiveDeviationAlarmType_AckedState_EffectiveDisplayName
+ \value NonExclusiveDeviationAlarmType_AckedState_TransitionTime
+ \value NonExclusiveDeviationAlarmType_AckedState_EffectiveTransitionTime
+ \value NonExclusiveDeviationAlarmType_AckedState_TrueState
+ \value NonExclusiveDeviationAlarmType_AckedState_FalseState
+ \value NonExclusiveDeviationAlarmType_ConfirmedState
+ \value NonExclusiveDeviationAlarmType_ConfirmedState_Id
+ \value NonExclusiveDeviationAlarmType_ConfirmedState_Name
+ \value NonExclusiveDeviationAlarmType_ConfirmedState_Number
+ \value NonExclusiveDeviationAlarmType_ConfirmedState_EffectiveDisplayName
+ \value NonExclusiveDeviationAlarmType_ConfirmedState_TransitionTime
+ \value NonExclusiveDeviationAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value NonExclusiveDeviationAlarmType_ConfirmedState_TrueState
+ \value NonExclusiveDeviationAlarmType_ConfirmedState_FalseState
+ \value NonExclusiveDeviationAlarmType_Acknowledge
+ \value NonExclusiveDeviationAlarmType_Acknowledge_InputArguments
+ \value NonExclusiveDeviationAlarmType_Confirm
+ \value NonExclusiveDeviationAlarmType_Confirm_InputArguments
+ \value NonExclusiveDeviationAlarmType_ActiveState
+ \value NonExclusiveDeviationAlarmType_ActiveState_Id
+ \value NonExclusiveDeviationAlarmType_ActiveState_Name
+ \value NonExclusiveDeviationAlarmType_ActiveState_Number
+ \value NonExclusiveDeviationAlarmType_ActiveState_EffectiveDisplayName
+ \value NonExclusiveDeviationAlarmType_ActiveState_TransitionTime
+ \value NonExclusiveDeviationAlarmType_ActiveState_EffectiveTransitionTime
+ \value NonExclusiveDeviationAlarmType_ActiveState_TrueState
+ \value NonExclusiveDeviationAlarmType_ActiveState_FalseState
+ \value NonExclusiveDeviationAlarmType_SuppressedState
+ \value NonExclusiveDeviationAlarmType_SuppressedState_Id
+ \value NonExclusiveDeviationAlarmType_SuppressedState_Name
+ \value NonExclusiveDeviationAlarmType_SuppressedState_Number
+ \value NonExclusiveDeviationAlarmType_SuppressedState_EffectiveDisplayName
+ \value NonExclusiveDeviationAlarmType_SuppressedState_TransitionTime
+ \value NonExclusiveDeviationAlarmType_SuppressedState_EffectiveTransitionTime
+ \value NonExclusiveDeviationAlarmType_SuppressedState_TrueState
+ \value NonExclusiveDeviationAlarmType_SuppressedState_FalseState
+ \value NonExclusiveDeviationAlarmType_ShelvingState
+ \value NonExclusiveDeviationAlarmType_ShelvingState_CurrentState
+ \value NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id
+ \value NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Name
+ \value NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Number
+ \value NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value NonExclusiveDeviationAlarmType_ShelvingState_LastTransition
+ \value NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id
+ \value NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Name
+ \value NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Number
+ \value NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value NonExclusiveDeviationAlarmType_ShelvingState_UnshelveTime
+ \value NonExclusiveDeviationAlarmType_ShelvingState_Unshelve
+ \value NonExclusiveDeviationAlarmType_ShelvingState_OneShotShelve
+ \value NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve
+ \value NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value NonExclusiveDeviationAlarmType_SuppressedOrShelved
+ \value NonExclusiveDeviationAlarmType_MaxTimeShelved
+ \value NonExclusiveDeviationAlarmType_HighHighState
+ \value NonExclusiveDeviationAlarmType_HighHighState_Id
+ \value NonExclusiveDeviationAlarmType_HighHighState_Name
+ \value NonExclusiveDeviationAlarmType_HighHighState_Number
+ \value NonExclusiveDeviationAlarmType_HighHighState_EffectiveDisplayName
+ \value NonExclusiveDeviationAlarmType_HighHighState_TransitionTime
+ \value NonExclusiveDeviationAlarmType_HighHighState_EffectiveTransitionTime
+ \value NonExclusiveDeviationAlarmType_HighHighState_TrueState
+ \value NonExclusiveDeviationAlarmType_HighHighState_FalseState
+ \value NonExclusiveDeviationAlarmType_HighState
+ \value NonExclusiveDeviationAlarmType_HighState_Id
+ \value NonExclusiveDeviationAlarmType_HighState_Name
+ \value NonExclusiveDeviationAlarmType_HighState_Number
+ \value NonExclusiveDeviationAlarmType_HighState_EffectiveDisplayName
+ \value NonExclusiveDeviationAlarmType_HighState_TransitionTime
+ \value NonExclusiveDeviationAlarmType_HighState_EffectiveTransitionTime
+ \value NonExclusiveDeviationAlarmType_HighState_TrueState
+ \value NonExclusiveDeviationAlarmType_HighState_FalseState
+ \value NonExclusiveDeviationAlarmType_LowState
+ \value NonExclusiveDeviationAlarmType_LowState_Id
+ \value NonExclusiveDeviationAlarmType_LowState_Name
+ \value NonExclusiveDeviationAlarmType_LowState_Number
+ \value NonExclusiveDeviationAlarmType_LowState_EffectiveDisplayName
+ \value NonExclusiveDeviationAlarmType_LowState_TransitionTime
+ \value NonExclusiveDeviationAlarmType_LowState_EffectiveTransitionTime
+ \value NonExclusiveDeviationAlarmType_LowState_TrueState
+ \value NonExclusiveDeviationAlarmType_LowState_FalseState
+ \value NonExclusiveDeviationAlarmType_LowLowState
+ \value NonExclusiveDeviationAlarmType_LowLowState_Id
+ \value NonExclusiveDeviationAlarmType_LowLowState_Name
+ \value NonExclusiveDeviationAlarmType_LowLowState_Number
+ \value NonExclusiveDeviationAlarmType_LowLowState_EffectiveDisplayName
+ \value NonExclusiveDeviationAlarmType_LowLowState_TransitionTime
+ \value NonExclusiveDeviationAlarmType_LowLowState_EffectiveTransitionTime
+ \value NonExclusiveDeviationAlarmType_LowLowState_TrueState
+ \value NonExclusiveDeviationAlarmType_LowLowState_FalseState
+ \value NonExclusiveDeviationAlarmType_HighHighLimit
+ \value NonExclusiveDeviationAlarmType_HighLimit
+ \value NonExclusiveDeviationAlarmType_LowLimit
+ \value NonExclusiveDeviationAlarmType_LowLowLimit
+ \value NonExclusiveDeviationAlarmType_SetpointNode
+ \value DiscreteAlarmType
+ \value DiscreteAlarmType_EventId
+ \value DiscreteAlarmType_EventType
+ \value DiscreteAlarmType_SourceNode
+ \value DiscreteAlarmType_SourceName
+ \value DiscreteAlarmType_Time
+ \value DiscreteAlarmType_ReceiveTime
+ \value DiscreteAlarmType_LocalTime
+ \value DiscreteAlarmType_Message
+ \value DiscreteAlarmType_Severity
+ \value DiscreteAlarmType_ConditionName
+ \value DiscreteAlarmType_BranchId
+ \value DiscreteAlarmType_Retain
+ \value DiscreteAlarmType_EnabledState
+ \value DiscreteAlarmType_EnabledState_Id
+ \value DiscreteAlarmType_EnabledState_Name
+ \value DiscreteAlarmType_EnabledState_Number
+ \value DiscreteAlarmType_EnabledState_EffectiveDisplayName
+ \value DiscreteAlarmType_EnabledState_TransitionTime
+ \value DiscreteAlarmType_EnabledState_EffectiveTransitionTime
+ \value DiscreteAlarmType_EnabledState_TrueState
+ \value DiscreteAlarmType_EnabledState_FalseState
+ \value DiscreteAlarmType_Quality
+ \value DiscreteAlarmType_Quality_SourceTimestamp
+ \value DiscreteAlarmType_LastSeverity
+ \value DiscreteAlarmType_LastSeverity_SourceTimestamp
+ \value DiscreteAlarmType_Comment
+ \value DiscreteAlarmType_Comment_SourceTimestamp
+ \value DiscreteAlarmType_ClientUserId
+ \value DiscreteAlarmType_Enable
+ \value DiscreteAlarmType_Disable
+ \value DiscreteAlarmType_AddComment
+ \value DiscreteAlarmType_AddComment_InputArguments
+ \value DiscreteAlarmType_ConditionRefresh
+ \value DiscreteAlarmType_ConditionRefresh_InputArguments
+ \value DiscreteAlarmType_AckedState
+ \value DiscreteAlarmType_AckedState_Id
+ \value DiscreteAlarmType_AckedState_Name
+ \value DiscreteAlarmType_AckedState_Number
+ \value DiscreteAlarmType_AckedState_EffectiveDisplayName
+ \value DiscreteAlarmType_AckedState_TransitionTime
+ \value DiscreteAlarmType_AckedState_EffectiveTransitionTime
+ \value DiscreteAlarmType_AckedState_TrueState
+ \value DiscreteAlarmType_AckedState_FalseState
+ \value DiscreteAlarmType_ConfirmedState
+ \value DiscreteAlarmType_ConfirmedState_Id
+ \value DiscreteAlarmType_ConfirmedState_Name
+ \value DiscreteAlarmType_ConfirmedState_Number
+ \value DiscreteAlarmType_ConfirmedState_EffectiveDisplayName
+ \value DiscreteAlarmType_ConfirmedState_TransitionTime
+ \value DiscreteAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value DiscreteAlarmType_ConfirmedState_TrueState
+ \value DiscreteAlarmType_ConfirmedState_FalseState
+ \value DiscreteAlarmType_Acknowledge
+ \value DiscreteAlarmType_Acknowledge_InputArguments
+ \value DiscreteAlarmType_Confirm
+ \value DiscreteAlarmType_Confirm_InputArguments
+ \value DiscreteAlarmType_ActiveState
+ \value DiscreteAlarmType_ActiveState_Id
+ \value DiscreteAlarmType_ActiveState_Name
+ \value DiscreteAlarmType_ActiveState_Number
+ \value DiscreteAlarmType_ActiveState_EffectiveDisplayName
+ \value DiscreteAlarmType_ActiveState_TransitionTime
+ \value DiscreteAlarmType_ActiveState_EffectiveTransitionTime
+ \value DiscreteAlarmType_ActiveState_TrueState
+ \value DiscreteAlarmType_ActiveState_FalseState
+ \value DiscreteAlarmType_SuppressedState
+ \value DiscreteAlarmType_SuppressedState_Id
+ \value DiscreteAlarmType_SuppressedState_Name
+ \value DiscreteAlarmType_SuppressedState_Number
+ \value DiscreteAlarmType_SuppressedState_EffectiveDisplayName
+ \value DiscreteAlarmType_SuppressedState_TransitionTime
+ \value DiscreteAlarmType_SuppressedState_EffectiveTransitionTime
+ \value DiscreteAlarmType_SuppressedState_TrueState
+ \value DiscreteAlarmType_SuppressedState_FalseState
+ \value DiscreteAlarmType_ShelvingState
+ \value DiscreteAlarmType_ShelvingState_CurrentState
+ \value DiscreteAlarmType_ShelvingState_CurrentState_Id
+ \value DiscreteAlarmType_ShelvingState_CurrentState_Name
+ \value DiscreteAlarmType_ShelvingState_CurrentState_Number
+ \value DiscreteAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value DiscreteAlarmType_ShelvingState_LastTransition
+ \value DiscreteAlarmType_ShelvingState_LastTransition_Id
+ \value DiscreteAlarmType_ShelvingState_LastTransition_Name
+ \value DiscreteAlarmType_ShelvingState_LastTransition_Number
+ \value DiscreteAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value DiscreteAlarmType_ShelvingState_UnshelveTime
+ \value DiscreteAlarmType_ShelvingState_Unshelve
+ \value DiscreteAlarmType_ShelvingState_OneShotShelve
+ \value DiscreteAlarmType_ShelvingState_TimedShelve
+ \value DiscreteAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value DiscreteAlarmType_SuppressedOrShelved
+ \value DiscreteAlarmType_MaxTimeShelved
+ \value OffNormalAlarmType
+ \value OffNormalAlarmType_EventId
+ \value OffNormalAlarmType_EventType
+ \value OffNormalAlarmType_SourceNode
+ \value OffNormalAlarmType_SourceName
+ \value OffNormalAlarmType_Time
+ \value OffNormalAlarmType_ReceiveTime
+ \value OffNormalAlarmType_LocalTime
+ \value OffNormalAlarmType_Message
+ \value OffNormalAlarmType_Severity
+ \value OffNormalAlarmType_ConditionName
+ \value OffNormalAlarmType_BranchId
+ \value OffNormalAlarmType_Retain
+ \value OffNormalAlarmType_EnabledState
+ \value OffNormalAlarmType_EnabledState_Id
+ \value OffNormalAlarmType_EnabledState_Name
+ \value OffNormalAlarmType_EnabledState_Number
+ \value OffNormalAlarmType_EnabledState_EffectiveDisplayName
+ \value OffNormalAlarmType_EnabledState_TransitionTime
+ \value OffNormalAlarmType_EnabledState_EffectiveTransitionTime
+ \value OffNormalAlarmType_EnabledState_TrueState
+ \value OffNormalAlarmType_EnabledState_FalseState
+ \value OffNormalAlarmType_Quality
+ \value OffNormalAlarmType_Quality_SourceTimestamp
+ \value OffNormalAlarmType_LastSeverity
+ \value OffNormalAlarmType_LastSeverity_SourceTimestamp
+ \value OffNormalAlarmType_Comment
+ \value OffNormalAlarmType_Comment_SourceTimestamp
+ \value OffNormalAlarmType_ClientUserId
+ \value OffNormalAlarmType_Enable
+ \value OffNormalAlarmType_Disable
+ \value OffNormalAlarmType_AddComment
+ \value OffNormalAlarmType_AddComment_InputArguments
+ \value OffNormalAlarmType_ConditionRefresh
+ \value OffNormalAlarmType_ConditionRefresh_InputArguments
+ \value OffNormalAlarmType_AckedState
+ \value OffNormalAlarmType_AckedState_Id
+ \value OffNormalAlarmType_AckedState_Name
+ \value OffNormalAlarmType_AckedState_Number
+ \value OffNormalAlarmType_AckedState_EffectiveDisplayName
+ \value OffNormalAlarmType_AckedState_TransitionTime
+ \value OffNormalAlarmType_AckedState_EffectiveTransitionTime
+ \value OffNormalAlarmType_AckedState_TrueState
+ \value OffNormalAlarmType_AckedState_FalseState
+ \value OffNormalAlarmType_ConfirmedState
+ \value OffNormalAlarmType_ConfirmedState_Id
+ \value OffNormalAlarmType_ConfirmedState_Name
+ \value OffNormalAlarmType_ConfirmedState_Number
+ \value OffNormalAlarmType_ConfirmedState_EffectiveDisplayName
+ \value OffNormalAlarmType_ConfirmedState_TransitionTime
+ \value OffNormalAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value OffNormalAlarmType_ConfirmedState_TrueState
+ \value OffNormalAlarmType_ConfirmedState_FalseState
+ \value OffNormalAlarmType_Acknowledge
+ \value OffNormalAlarmType_Acknowledge_InputArguments
+ \value OffNormalAlarmType_Confirm
+ \value OffNormalAlarmType_Confirm_InputArguments
+ \value OffNormalAlarmType_ActiveState
+ \value OffNormalAlarmType_ActiveState_Id
+ \value OffNormalAlarmType_ActiveState_Name
+ \value OffNormalAlarmType_ActiveState_Number
+ \value OffNormalAlarmType_ActiveState_EffectiveDisplayName
+ \value OffNormalAlarmType_ActiveState_TransitionTime
+ \value OffNormalAlarmType_ActiveState_EffectiveTransitionTime
+ \value OffNormalAlarmType_ActiveState_TrueState
+ \value OffNormalAlarmType_ActiveState_FalseState
+ \value OffNormalAlarmType_SuppressedState
+ \value OffNormalAlarmType_SuppressedState_Id
+ \value OffNormalAlarmType_SuppressedState_Name
+ \value OffNormalAlarmType_SuppressedState_Number
+ \value OffNormalAlarmType_SuppressedState_EffectiveDisplayName
+ \value OffNormalAlarmType_SuppressedState_TransitionTime
+ \value OffNormalAlarmType_SuppressedState_EffectiveTransitionTime
+ \value OffNormalAlarmType_SuppressedState_TrueState
+ \value OffNormalAlarmType_SuppressedState_FalseState
+ \value OffNormalAlarmType_ShelvingState
+ \value OffNormalAlarmType_ShelvingState_CurrentState
+ \value OffNormalAlarmType_ShelvingState_CurrentState_Id
+ \value OffNormalAlarmType_ShelvingState_CurrentState_Name
+ \value OffNormalAlarmType_ShelvingState_CurrentState_Number
+ \value OffNormalAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value OffNormalAlarmType_ShelvingState_LastTransition
+ \value OffNormalAlarmType_ShelvingState_LastTransition_Id
+ \value OffNormalAlarmType_ShelvingState_LastTransition_Name
+ \value OffNormalAlarmType_ShelvingState_LastTransition_Number
+ \value OffNormalAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value OffNormalAlarmType_ShelvingState_UnshelveTime
+ \value OffNormalAlarmType_ShelvingState_Unshelve
+ \value OffNormalAlarmType_ShelvingState_OneShotShelve
+ \value OffNormalAlarmType_ShelvingState_TimedShelve
+ \value OffNormalAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value OffNormalAlarmType_SuppressedOrShelved
+ \value OffNormalAlarmType_MaxTimeShelved
+ \value TripAlarmType
+ \value TripAlarmType_EventId
+ \value TripAlarmType_EventType
+ \value TripAlarmType_SourceNode
+ \value TripAlarmType_SourceName
+ \value TripAlarmType_Time
+ \value TripAlarmType_ReceiveTime
+ \value TripAlarmType_LocalTime
+ \value TripAlarmType_Message
+ \value TripAlarmType_Severity
+ \value TripAlarmType_ConditionName
+ \value TripAlarmType_BranchId
+ \value TripAlarmType_Retain
+ \value TripAlarmType_EnabledState
+ \value TripAlarmType_EnabledState_Id
+ \value TripAlarmType_EnabledState_Name
+ \value TripAlarmType_EnabledState_Number
+ \value TripAlarmType_EnabledState_EffectiveDisplayName
+ \value TripAlarmType_EnabledState_TransitionTime
+ \value TripAlarmType_EnabledState_EffectiveTransitionTime
+ \value TripAlarmType_EnabledState_TrueState
+ \value TripAlarmType_EnabledState_FalseState
+ \value TripAlarmType_Quality
+ \value TripAlarmType_Quality_SourceTimestamp
+ \value TripAlarmType_LastSeverity
+ \value TripAlarmType_LastSeverity_SourceTimestamp
+ \value TripAlarmType_Comment
+ \value TripAlarmType_Comment_SourceTimestamp
+ \value TripAlarmType_ClientUserId
+ \value TripAlarmType_Enable
+ \value TripAlarmType_Disable
+ \value TripAlarmType_AddComment
+ \value TripAlarmType_AddComment_InputArguments
+ \value TripAlarmType_ConditionRefresh
+ \value TripAlarmType_ConditionRefresh_InputArguments
+ \value TripAlarmType_AckedState
+ \value TripAlarmType_AckedState_Id
+ \value TripAlarmType_AckedState_Name
+ \value TripAlarmType_AckedState_Number
+ \value TripAlarmType_AckedState_EffectiveDisplayName
+ \value TripAlarmType_AckedState_TransitionTime
+ \value TripAlarmType_AckedState_EffectiveTransitionTime
+ \value TripAlarmType_AckedState_TrueState
+ \value TripAlarmType_AckedState_FalseState
+ \value TripAlarmType_ConfirmedState
+ \value TripAlarmType_ConfirmedState_Id
+ \value TripAlarmType_ConfirmedState_Name
+ \value TripAlarmType_ConfirmedState_Number
+ \value TripAlarmType_ConfirmedState_EffectiveDisplayName
+ \value TripAlarmType_ConfirmedState_TransitionTime
+ \value TripAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value TripAlarmType_ConfirmedState_TrueState
+ \value TripAlarmType_ConfirmedState_FalseState
+ \value TripAlarmType_Acknowledge
+ \value TripAlarmType_Acknowledge_InputArguments
+ \value TripAlarmType_Confirm
+ \value TripAlarmType_Confirm_InputArguments
+ \value TripAlarmType_ActiveState
+ \value TripAlarmType_ActiveState_Id
+ \value TripAlarmType_ActiveState_Name
+ \value TripAlarmType_ActiveState_Number
+ \value TripAlarmType_ActiveState_EffectiveDisplayName
+ \value TripAlarmType_ActiveState_TransitionTime
+ \value TripAlarmType_ActiveState_EffectiveTransitionTime
+ \value TripAlarmType_ActiveState_TrueState
+ \value TripAlarmType_ActiveState_FalseState
+ \value TripAlarmType_SuppressedState
+ \value TripAlarmType_SuppressedState_Id
+ \value TripAlarmType_SuppressedState_Name
+ \value TripAlarmType_SuppressedState_Number
+ \value TripAlarmType_SuppressedState_EffectiveDisplayName
+ \value TripAlarmType_SuppressedState_TransitionTime
+ \value TripAlarmType_SuppressedState_EffectiveTransitionTime
+ \value TripAlarmType_SuppressedState_TrueState
+ \value TripAlarmType_SuppressedState_FalseState
+ \value TripAlarmType_ShelvingState
+ \value TripAlarmType_ShelvingState_CurrentState
+ \value TripAlarmType_ShelvingState_CurrentState_Id
+ \value TripAlarmType_ShelvingState_CurrentState_Name
+ \value TripAlarmType_ShelvingState_CurrentState_Number
+ \value TripAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value TripAlarmType_ShelvingState_LastTransition
+ \value TripAlarmType_ShelvingState_LastTransition_Id
+ \value TripAlarmType_ShelvingState_LastTransition_Name
+ \value TripAlarmType_ShelvingState_LastTransition_Number
+ \value TripAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value TripAlarmType_ShelvingState_UnshelveTime
+ \value TripAlarmType_ShelvingState_Unshelve
+ \value TripAlarmType_ShelvingState_OneShotShelve
+ \value TripAlarmType_ShelvingState_TimedShelve
+ \value TripAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value TripAlarmType_SuppressedOrShelved
+ \value TripAlarmType_MaxTimeShelved
+ \value AuditConditionShelvingEventType
+ \value AuditConditionShelvingEventType_EventId
+ \value AuditConditionShelvingEventType_EventType
+ \value AuditConditionShelvingEventType_SourceNode
+ \value AuditConditionShelvingEventType_SourceName
+ \value AuditConditionShelvingEventType_Time
+ \value AuditConditionShelvingEventType_ReceiveTime
+ \value AuditConditionShelvingEventType_LocalTime
+ \value AuditConditionShelvingEventType_Message
+ \value AuditConditionShelvingEventType_Severity
+ \value AuditConditionShelvingEventType_ActionTimeStamp
+ \value AuditConditionShelvingEventType_Status
+ \value AuditConditionShelvingEventType_ServerId
+ \value AuditConditionShelvingEventType_ClientAuditEntryId
+ \value AuditConditionShelvingEventType_ClientUserId
+ \value AuditConditionShelvingEventType_MethodId
+ \value AuditConditionShelvingEventType_InputArguments
+ \value TwoStateVariableType_TrueState
+ \value TwoStateVariableType_FalseState
+ \value ConditionType_ConditionClassId
+ \value ConditionType_ConditionClassName
+ \value DialogConditionType_ConditionClassId
+ \value DialogConditionType_ConditionClassName
+ \value AcknowledgeableConditionType_ConditionClassId
+ \value AcknowledgeableConditionType_ConditionClassName
+ \value AlarmConditionType_ConditionClassId
+ \value AlarmConditionType_ConditionClassName
+ \value AlarmConditionType_InputNode
+ \value LimitAlarmType_ConditionClassId
+ \value LimitAlarmType_ConditionClassName
+ \value LimitAlarmType_InputNode
+ \value LimitAlarmType_HighHighLimit
+ \value LimitAlarmType_HighLimit
+ \value LimitAlarmType_LowLimit
+ \value LimitAlarmType_LowLowLimit
+ \value ExclusiveLimitAlarmType_ConditionClassId
+ \value ExclusiveLimitAlarmType_ConditionClassName
+ \value ExclusiveLimitAlarmType_InputNode
+ \value ExclusiveLevelAlarmType_ConditionClassId
+ \value ExclusiveLevelAlarmType_ConditionClassName
+ \value ExclusiveLevelAlarmType_InputNode
+ \value ExclusiveRateOfChangeAlarmType_ConditionClassId
+ \value ExclusiveRateOfChangeAlarmType_ConditionClassName
+ \value ExclusiveRateOfChangeAlarmType_InputNode
+ \value ExclusiveDeviationAlarmType_ConditionClassId
+ \value ExclusiveDeviationAlarmType_ConditionClassName
+ \value ExclusiveDeviationAlarmType_InputNode
+ \value NonExclusiveLimitAlarmType_ConditionClassId
+ \value NonExclusiveLimitAlarmType_ConditionClassName
+ \value NonExclusiveLimitAlarmType_InputNode
+ \value NonExclusiveLevelAlarmType_ConditionClassId
+ \value NonExclusiveLevelAlarmType_ConditionClassName
+ \value NonExclusiveLevelAlarmType_InputNode
+ \value NonExclusiveRateOfChangeAlarmType_ConditionClassId
+ \value NonExclusiveRateOfChangeAlarmType_ConditionClassName
+ \value NonExclusiveRateOfChangeAlarmType_InputNode
+ \value NonExclusiveDeviationAlarmType_ConditionClassId
+ \value NonExclusiveDeviationAlarmType_ConditionClassName
+ \value NonExclusiveDeviationAlarmType_InputNode
+ \value DiscreteAlarmType_ConditionClassId
+ \value DiscreteAlarmType_ConditionClassName
+ \value DiscreteAlarmType_InputNode
+ \value OffNormalAlarmType_ConditionClassId
+ \value OffNormalAlarmType_ConditionClassName
+ \value OffNormalAlarmType_InputNode
+ \value OffNormalAlarmType_NormalState
+ \value TripAlarmType_ConditionClassId
+ \value TripAlarmType_ConditionClassName
+ \value TripAlarmType_InputNode
+ \value TripAlarmType_NormalState
+ \value BaseConditionClassType
+ \value ProcessConditionClassType
+ \value MaintenanceConditionClassType
+ \value SystemConditionClassType
+ \value HistoricalDataConfigurationType_AggregateConfiguration_TreatUncertainAsBad
+ \value HistoricalDataConfigurationType_AggregateConfiguration_PercentDataBad
+ \value HistoricalDataConfigurationType_AggregateConfiguration_PercentDataGood
+ \value HistoricalDataConfigurationType_AggregateConfiguration_UseSlopedExtrapolation
+ \value HistoryServerCapabilitiesType_AggregateFunctions
+ \value AggregateConfigurationType
+ \value AggregateConfigurationType_TreatUncertainAsBad
+ \value AggregateConfigurationType_PercentDataBad
+ \value AggregateConfigurationType_PercentDataGood
+ \value AggregateConfigurationType_UseSlopedExtrapolation
+ \value HistoryServerCapabilities
+ \value HistoryServerCapabilities_AccessHistoryDataCapability
+ \value HistoryServerCapabilities_InsertDataCapability
+ \value HistoryServerCapabilities_ReplaceDataCapability
+ \value HistoryServerCapabilities_UpdateDataCapability
+ \value HistoryServerCapabilities_DeleteRawCapability
+ \value HistoryServerCapabilities_DeleteAtTimeCapability
+ \value HistoryServerCapabilities_AggregateFunctions
+ \value HAConfiguration
+ \value HAConfiguration_AggregateConfiguration
+ \value HAConfiguration_AggregateConfiguration_TreatUncertainAsBad
+ \value HAConfiguration_AggregateConfiguration_PercentDataBad
+ \value HAConfiguration_AggregateConfiguration_PercentDataGood
+ \value HAConfiguration_AggregateConfiguration_UseSlopedExtrapolation
+ \value HAConfiguration_Stepped
+ \value HAConfiguration_Definition
+ \value HAConfiguration_MaxTimeInterval
+ \value HAConfiguration_MinTimeInterval
+ \value HAConfiguration_ExceptionDeviation
+ \value HAConfiguration_ExceptionDeviationFormat
+ \value Annotations
+ \value HistoricalEventFilter
+ \value ModificationInfo
+ \value HistoryModifiedData
+ \value ModificationInfo_Encoding_DefaultXml
+ \value HistoryModifiedData_Encoding_DefaultXml
+ \value ModificationInfo_Encoding_DefaultBinary
+ \value HistoryModifiedData_Encoding_DefaultBinary
+ \value HistoryUpdateType
+ \value MultiStateValueDiscreteType
+ \value MultiStateValueDiscreteType_Definition
+ \value MultiStateValueDiscreteType_ValuePrecision
+ \value MultiStateValueDiscreteType_EnumValues
+ \value HistoryServerCapabilities_AccessHistoryEventsCapability
+ \value HistoryServerCapabilitiesType_MaxReturnDataValues
+ \value HistoryServerCapabilitiesType_MaxReturnEventValues
+ \value HistoryServerCapabilitiesType_InsertAnnotationCapability
+ \value HistoryServerCapabilities_MaxReturnDataValues
+ \value HistoryServerCapabilities_MaxReturnEventValues
+ \value HistoryServerCapabilities_InsertAnnotationCapability
+ \value HistoryServerCapabilitiesType_InsertEventCapability
+ \value HistoryServerCapabilitiesType_ReplaceEventCapability
+ \value HistoryServerCapabilitiesType_UpdateEventCapability
+ \value HistoryServerCapabilities_InsertEventCapability
+ \value HistoryServerCapabilities_ReplaceEventCapability
+ \value HistoryServerCapabilities_UpdateEventCapability
+ \value AggregateFunction_TimeAverage2
+ \value AggregateFunction_Minimum2
+ \value AggregateFunction_Maximum2
+ \value AggregateFunction_Range2
+ \value AggregateFunction_WorstQuality2
+ \value PerformUpdateType
+ \value UpdateStructureDataDetails
+ \value UpdateStructureDataDetails_Encoding_DefaultXml
+ \value UpdateStructureDataDetails_Encoding_DefaultBinary
+ \value AggregateFunction_Total2
+ \value AggregateFunction_MinimumActualTime2
+ \value AggregateFunction_MaximumActualTime2
+ \value AggregateFunction_DurationInStateZero
+ \value AggregateFunction_DurationInStateNonZero
+ \value Server_ServerRedundancy_CurrentServerId
+ \value Server_ServerRedundancy_RedundantServerArray
+ \value Server_ServerRedundancy_ServerUriArray
+ \value ShelvedStateMachineType_UnshelvedToTimedShelved_TransitionNumber
+ \value ShelvedStateMachineType_UnshelvedToOneShotShelved_TransitionNumber
+ \value ShelvedStateMachineType_TimedShelvedToUnshelved_TransitionNumber
+ \value ShelvedStateMachineType_TimedShelvedToOneShotShelved_TransitionNumber
+ \value ShelvedStateMachineType_OneShotShelvedToUnshelved_TransitionNumber
+ \value ShelvedStateMachineType_OneShotShelvedToTimedShelved_TransitionNumber
+ \value ExclusiveLimitStateMachineType_LowLowToLow_TransitionNumber
+ \value ExclusiveLimitStateMachineType_LowToLowLow_TransitionNumber
+ \value ExclusiveLimitStateMachineType_HighHighToHigh_TransitionNumber
+ \value ExclusiveLimitStateMachineType_HighToHighHigh_TransitionNumber
+ \value AggregateFunction_StandardDeviationSample
+ \value AggregateFunction_StandardDeviationPopulation
+ \value AggregateFunction_VarianceSample
+ \value AggregateFunction_VariancePopulation
+ \value EnumStrings
+ \value ValueAsText
+ \value ProgressEventType
+ \value ProgressEventType_EventId
+ \value ProgressEventType_EventType
+ \value ProgressEventType_SourceNode
+ \value ProgressEventType_SourceName
+ \value ProgressEventType_Time
+ \value ProgressEventType_ReceiveTime
+ \value ProgressEventType_LocalTime
+ \value ProgressEventType_Message
+ \value ProgressEventType_Severity
+ \value SystemStatusChangeEventType
+ \value SystemStatusChangeEventType_EventId
+ \value SystemStatusChangeEventType_EventType
+ \value SystemStatusChangeEventType_SourceNode
+ \value SystemStatusChangeEventType_SourceName
+ \value SystemStatusChangeEventType_Time
+ \value SystemStatusChangeEventType_ReceiveTime
+ \value SystemStatusChangeEventType_LocalTime
+ \value SystemStatusChangeEventType_Message
+ \value SystemStatusChangeEventType_Severity
+ \value TransitionVariableType_EffectiveTransitionTime
+ \value FiniteTransitionVariableType_EffectiveTransitionTime
+ \value StateMachineType_LastTransition_EffectiveTransitionTime
+ \value FiniteStateMachineType_LastTransition_EffectiveTransitionTime
+ \value TransitionEventType_Transition_EffectiveTransitionTime
+ \value MultiStateValueDiscreteType_ValueAsText
+ \value ProgramTransitionEventType_Transition_EffectiveTransitionTime
+ \value ProgramTransitionAuditEventType_Transition_EffectiveTransitionTime
+ \value ProgramStateMachineType_LastTransition_EffectiveTransitionTime
+ \value ShelvedStateMachineType_LastTransition_EffectiveTransitionTime
+ \value AlarmConditionType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value LimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value ExclusiveLimitStateMachineType_LastTransition_EffectiveTransitionTime
+ \value ExclusiveLimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value ExclusiveLimitAlarmType_LimitState_LastTransition_EffectiveTransitionTime
+ \value ExclusiveLevelAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value ExclusiveLevelAlarmType_LimitState_LastTransition_EffectiveTransitionTime
+ \value ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_EffectiveTransitionTime
+ \value ExclusiveDeviationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value ExclusiveDeviationAlarmType_LimitState_LastTransition_EffectiveTransitionTime
+ \value NonExclusiveLimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value NonExclusiveLevelAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value DiscreteAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value OffNormalAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value TripAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value AuditActivateSessionEventType_SecureChannelId
+ \value OptionSetType
+ \value OptionSetType_OptionSetValues
+ \value ServerType_GetMonitoredItems
+ \value ServerType_GetMonitoredItems_InputArguments
+ \value ServerType_GetMonitoredItems_OutputArguments
+ \value Server_GetMonitoredItems
+ \value Server_GetMonitoredItems_InputArguments
+ \value Server_GetMonitoredItems_OutputArguments
+ \value GetMonitoredItemsMethodType
+ \value GetMonitoredItemsMethodType_InputArguments
+ \value GetMonitoredItemsMethodType_OutputArguments
+ \value MaxStringLength
+ \value HistoricalDataConfigurationType_StartOfArchive
+ \value HistoricalDataConfigurationType_StartOfOnlineArchive
+ \value HistoryServerCapabilitiesType_DeleteEventCapability
+ \value HistoryServerCapabilities_DeleteEventCapability
+ \value HAConfiguration_StartOfArchive
+ \value HAConfiguration_StartOfOnlineArchive
+ \value AggregateFunction_StartBound
+ \value AggregateFunction_EndBound
+ \value AggregateFunction_DeltaBounds
+ \value ModellingRule_OptionalPlaceholder
+ \value ModellingRule_OptionalPlaceholder_NamingRule
+ \value ModellingRule_MandatoryPlaceholder
+ \value ModellingRule_MandatoryPlaceholder_NamingRule
+ \value MaxArrayLength
+ \value EngineeringUnits
+ \value ServerType_ServerCapabilities_MaxArrayLength
+ \value ServerType_ServerCapabilities_MaxStringLength
+ \value ServerType_ServerCapabilities_OperationLimits
+ \value ServerType_ServerCapabilities_OperationLimits_MaxNodesPerRead
+ \value ServerType_ServerCapabilities_OperationLimits_MaxNodesPerWrite
+ \value ServerType_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall
+ \value ServerType_ServerCapabilities_OperationLimits_MaxNodesPerBrowse
+ \value ServerType_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes
+ \value ServerType_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds
+ \value ServerType_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement
+ \value ServerType_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall
+ \value ServerType_Namespaces
+ \value ServerType_Namespaces_AddressSpaceFile
+ \value ServerType_Namespaces_AddressSpaceFile_Size
+ \value ServerType_Namespaces_AddressSpaceFile_OpenCount
+ \value ServerType_Namespaces_AddressSpaceFile_Open
+ \value ServerType_Namespaces_AddressSpaceFile_Open_InputArguments
+ \value ServerType_Namespaces_AddressSpaceFile_Open_OutputArguments
+ \value ServerType_Namespaces_AddressSpaceFile_Close
+ \value ServerType_Namespaces_AddressSpaceFile_Close_InputArguments
+ \value ServerType_Namespaces_AddressSpaceFile_Read
+ \value ServerType_Namespaces_AddressSpaceFile_Read_InputArguments
+ \value ServerType_Namespaces_AddressSpaceFile_Read_OutputArguments
+ \value ServerType_Namespaces_AddressSpaceFile_Write
+ \value ServerType_Namespaces_AddressSpaceFile_Write_InputArguments
+ \value ServerType_Namespaces_AddressSpaceFile_GetPosition
+ \value ServerType_Namespaces_AddressSpaceFile_GetPosition_InputArguments
+ \value ServerType_Namespaces_AddressSpaceFile_GetPosition_OutputArguments
+ \value ServerType_Namespaces_AddressSpaceFile_SetPosition
+ \value ServerType_Namespaces_AddressSpaceFile_SetPosition_InputArguments
+ \value ServerType_Namespaces_AddressSpaceFile_ExportNamespace
+ \value ServerCapabilitiesType_MaxArrayLength
+ \value ServerCapabilitiesType_MaxStringLength
+ \value ServerCapabilitiesType_OperationLimits
+ \value ServerCapabilitiesType_OperationLimits_MaxNodesPerRead
+ \value ServerCapabilitiesType_OperationLimits_MaxNodesPerWrite
+ \value ServerCapabilitiesType_OperationLimits_MaxNodesPerMethodCall
+ \value ServerCapabilitiesType_OperationLimits_MaxNodesPerBrowse
+ \value ServerCapabilitiesType_OperationLimits_MaxNodesPerRegisterNodes
+ \value ServerCapabilitiesType_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds
+ \value ServerCapabilitiesType_OperationLimits_MaxNodesPerNodeManagement
+ \value ServerCapabilitiesType_OperationLimits_MaxMonitoredItemsPerCall
+ \value ServerCapabilitiesType_VendorCapability_Placeholder
+ \value OperationLimitsType
+ \value OperationLimitsType_MaxNodesPerRead
+ \value OperationLimitsType_MaxNodesPerWrite
+ \value OperationLimitsType_MaxNodesPerMethodCall
+ \value OperationLimitsType_MaxNodesPerBrowse
+ \value OperationLimitsType_MaxNodesPerRegisterNodes
+ \value OperationLimitsType_MaxNodesPerTranslateBrowsePathsToNodeIds
+ \value OperationLimitsType_MaxNodesPerNodeManagement
+ \value OperationLimitsType_MaxMonitoredItemsPerCall
+ \value FileType
+ \value FileType_Size
+ \value FileType_OpenCount
+ \value FileType_Open
+ \value FileType_Open_InputArguments
+ \value FileType_Open_OutputArguments
+ \value FileType_Close
+ \value FileType_Close_InputArguments
+ \value FileType_Read
+ \value FileType_Read_InputArguments
+ \value FileType_Read_OutputArguments
+ \value FileType_Write
+ \value FileType_Write_InputArguments
+ \value FileType_GetPosition
+ \value FileType_GetPosition_InputArguments
+ \value FileType_GetPosition_OutputArguments
+ \value FileType_SetPosition
+ \value FileType_SetPosition_InputArguments
+ \value AddressSpaceFileType
+ \value AddressSpaceFileType_Size
+ \value AddressSpaceFileType_OpenCount
+ \value AddressSpaceFileType_Open
+ \value AddressSpaceFileType_Open_InputArguments
+ \value AddressSpaceFileType_Open_OutputArguments
+ \value AddressSpaceFileType_Close
+ \value AddressSpaceFileType_Close_InputArguments
+ \value AddressSpaceFileType_Read
+ \value AddressSpaceFileType_Read_InputArguments
+ \value AddressSpaceFileType_Read_OutputArguments
+ \value AddressSpaceFileType_Write
+ \value AddressSpaceFileType_Write_InputArguments
+ \value AddressSpaceFileType_GetPosition
+ \value AddressSpaceFileType_GetPosition_InputArguments
+ \value AddressSpaceFileType_GetPosition_OutputArguments
+ \value AddressSpaceFileType_SetPosition
+ \value AddressSpaceFileType_SetPosition_InputArguments
+ \value AddressSpaceFileType_ExportNamespace
+ \value NamespaceMetadataType
+ \value NamespaceMetadataType_NamespaceUri
+ \value NamespaceMetadataType_NamespaceVersion
+ \value NamespaceMetadataType_NamespacePublicationDate
+ \value NamespaceMetadataType_IsNamespaceSubset
+ \value NamespaceMetadataType_StaticNodeIdTypes
+ \value NamespaceMetadataType_StaticNumericNodeIdRange
+ \value NamespaceMetadataType_StaticStringNodeIdPattern
+ \value NamespaceMetadataType_NamespaceFile
+ \value NamespaceMetadataType_NamespaceFile_Size
+ \value NamespaceMetadataType_NamespaceFile_OpenCount
+ \value NamespaceMetadataType_NamespaceFile_Open
+ \value NamespaceMetadataType_NamespaceFile_Open_InputArguments
+ \value NamespaceMetadataType_NamespaceFile_Open_OutputArguments
+ \value NamespaceMetadataType_NamespaceFile_Close
+ \value NamespaceMetadataType_NamespaceFile_Close_InputArguments
+ \value NamespaceMetadataType_NamespaceFile_Read
+ \value NamespaceMetadataType_NamespaceFile_Read_InputArguments
+ \value NamespaceMetadataType_NamespaceFile_Read_OutputArguments
+ \value NamespaceMetadataType_NamespaceFile_Write
+ \value NamespaceMetadataType_NamespaceFile_Write_InputArguments
+ \value NamespaceMetadataType_NamespaceFile_GetPosition
+ \value NamespaceMetadataType_NamespaceFile_GetPosition_InputArguments
+ \value NamespaceMetadataType_NamespaceFile_GetPosition_OutputArguments
+ \value NamespaceMetadataType_NamespaceFile_SetPosition
+ \value NamespaceMetadataType_NamespaceFile_SetPosition_InputArguments
+ \value NamespaceMetadataType_NamespaceFile_ExportNamespace
+ \value NamespacesType
+ \value NamespacesType_NamespaceIdentifier_Placeholder
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceUri
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceVersion
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespacePublicationDate
+ \value NamespacesType_NamespaceIdentifier_Placeholder_IsNamespaceSubset
+ \value NamespacesType_NamespaceIdentifier_Placeholder_StaticNodeIdTypes
+ \value NamespacesType_NamespaceIdentifier_Placeholder_StaticNumericNodeIdRange
+ \value NamespacesType_NamespaceIdentifier_Placeholder_StaticStringNodeIdPattern
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Size
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_OpenCount
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_InputArguments
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_OutputArguments
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close_InputArguments
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_InputArguments
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_OutputArguments
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write_InputArguments
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_InputArguments
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_OutputArguments
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition_InputArguments
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_ExportNamespace
+ \value NamespacesType_AddressSpaceFile
+ \value NamespacesType_AddressSpaceFile_Size
+ \value NamespacesType_AddressSpaceFile_OpenCount
+ \value NamespacesType_AddressSpaceFile_Open
+ \value NamespacesType_AddressSpaceFile_Open_InputArguments
+ \value NamespacesType_AddressSpaceFile_Open_OutputArguments
+ \value NamespacesType_AddressSpaceFile_Close
+ \value NamespacesType_AddressSpaceFile_Close_InputArguments
+ \value NamespacesType_AddressSpaceFile_Read
+ \value NamespacesType_AddressSpaceFile_Read_InputArguments
+ \value NamespacesType_AddressSpaceFile_Read_OutputArguments
+ \value NamespacesType_AddressSpaceFile_Write
+ \value NamespacesType_AddressSpaceFile_Write_InputArguments
+ \value NamespacesType_AddressSpaceFile_GetPosition
+ \value NamespacesType_AddressSpaceFile_GetPosition_InputArguments
+ \value NamespacesType_AddressSpaceFile_GetPosition_OutputArguments
+ \value NamespacesType_AddressSpaceFile_SetPosition
+ \value NamespacesType_AddressSpaceFile_SetPosition_InputArguments
+ \value NamespacesType_AddressSpaceFile_ExportNamespace
+ \value SystemStatusChangeEventType_SystemState
+ \value SamplingIntervalDiagnosticsType_SampledMonitoredItemsCount
+ \value SamplingIntervalDiagnosticsType_MaxSampledMonitoredItemsCount
+ \value SamplingIntervalDiagnosticsType_DisabledMonitoredItemsSamplingCount
+ \value OptionSetType_BitMask
+ \value Server_ServerCapabilities_MaxArrayLength
+ \value Server_ServerCapabilities_MaxStringLength
+ \value Server_ServerCapabilities_OperationLimits
+ \value Server_ServerCapabilities_OperationLimits_MaxNodesPerRead
+ \value Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite
+ \value Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall
+ \value Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse
+ \value Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes
+ \value Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds
+ \value Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement
+ \value Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall
+ \value Server_Namespaces
+ \value Server_Namespaces_AddressSpaceFile
+ \value Server_Namespaces_AddressSpaceFile_Size
+ \value Server_Namespaces_AddressSpaceFile_OpenCount
+ \value Server_Namespaces_AddressSpaceFile_Open
+ \value Server_Namespaces_AddressSpaceFile_Open_InputArguments
+ \value Server_Namespaces_AddressSpaceFile_Open_OutputArguments
+ \value Server_Namespaces_AddressSpaceFile_Close
+ \value Server_Namespaces_AddressSpaceFile_Close_InputArguments
+ \value Server_Namespaces_AddressSpaceFile_Read
+ \value Server_Namespaces_AddressSpaceFile_Read_InputArguments
+ \value Server_Namespaces_AddressSpaceFile_Read_OutputArguments
+ \value Server_Namespaces_AddressSpaceFile_Write
+ \value Server_Namespaces_AddressSpaceFile_Write_InputArguments
+ \value Server_Namespaces_AddressSpaceFile_GetPosition
+ \value Server_Namespaces_AddressSpaceFile_GetPosition_InputArguments
+ \value Server_Namespaces_AddressSpaceFile_GetPosition_OutputArguments
+ \value Server_Namespaces_AddressSpaceFile_SetPosition
+ \value Server_Namespaces_AddressSpaceFile_SetPosition_InputArguments
+ \value Server_Namespaces_AddressSpaceFile_ExportNamespace
+ \value BitFieldMaskDataType
+ \value OpenMethodType
+ \value OpenMethodType_InputArguments
+ \value OpenMethodType_OutputArguments
+ \value CloseMethodType
+ \value CloseMethodType_InputArguments
+ \value ReadMethodType
+ \value ReadMethodType_InputArguments
+ \value ReadMethodType_OutputArguments
+ \value WriteMethodType
+ \value WriteMethodType_InputArguments
+ \value GetPositionMethodType
+ \value GetPositionMethodType_InputArguments
+ \value GetPositionMethodType_OutputArguments
+ \value SetPositionMethodType
+ \value SetPositionMethodType_InputArguments
+ \value SystemOffNormalAlarmType
+ \value SystemOffNormalAlarmType_EventId
+ \value SystemOffNormalAlarmType_EventType
+ \value SystemOffNormalAlarmType_SourceNode
+ \value SystemOffNormalAlarmType_SourceName
+ \value SystemOffNormalAlarmType_Time
+ \value SystemOffNormalAlarmType_ReceiveTime
+ \value SystemOffNormalAlarmType_LocalTime
+ \value SystemOffNormalAlarmType_Message
+ \value SystemOffNormalAlarmType_Severity
+ \value SystemOffNormalAlarmType_ConditionClassId
+ \value SystemOffNormalAlarmType_ConditionClassName
+ \value SystemOffNormalAlarmType_ConditionName
+ \value SystemOffNormalAlarmType_BranchId
+ \value SystemOffNormalAlarmType_Retain
+ \value SystemOffNormalAlarmType_EnabledState
+ \value SystemOffNormalAlarmType_EnabledState_Id
+ \value SystemOffNormalAlarmType_EnabledState_Name
+ \value SystemOffNormalAlarmType_EnabledState_Number
+ \value SystemOffNormalAlarmType_EnabledState_EffectiveDisplayName
+ \value SystemOffNormalAlarmType_EnabledState_TransitionTime
+ \value SystemOffNormalAlarmType_EnabledState_EffectiveTransitionTime
+ \value SystemOffNormalAlarmType_EnabledState_TrueState
+ \value SystemOffNormalAlarmType_EnabledState_FalseState
+ \value SystemOffNormalAlarmType_Quality
+ \value SystemOffNormalAlarmType_Quality_SourceTimestamp
+ \value SystemOffNormalAlarmType_LastSeverity
+ \value SystemOffNormalAlarmType_LastSeverity_SourceTimestamp
+ \value SystemOffNormalAlarmType_Comment
+ \value SystemOffNormalAlarmType_Comment_SourceTimestamp
+ \value SystemOffNormalAlarmType_ClientUserId
+ \value SystemOffNormalAlarmType_Disable
+ \value SystemOffNormalAlarmType_Enable
+ \value SystemOffNormalAlarmType_AddComment
+ \value SystemOffNormalAlarmType_AddComment_InputArguments
+ \value SystemOffNormalAlarmType_ConditionRefresh
+ \value SystemOffNormalAlarmType_ConditionRefresh_InputArguments
+ \value SystemOffNormalAlarmType_AckedState
+ \value SystemOffNormalAlarmType_AckedState_Id
+ \value SystemOffNormalAlarmType_AckedState_Name
+ \value SystemOffNormalAlarmType_AckedState_Number
+ \value SystemOffNormalAlarmType_AckedState_EffectiveDisplayName
+ \value SystemOffNormalAlarmType_AckedState_TransitionTime
+ \value SystemOffNormalAlarmType_AckedState_EffectiveTransitionTime
+ \value SystemOffNormalAlarmType_AckedState_TrueState
+ \value SystemOffNormalAlarmType_AckedState_FalseState
+ \value SystemOffNormalAlarmType_ConfirmedState
+ \value SystemOffNormalAlarmType_ConfirmedState_Id
+ \value SystemOffNormalAlarmType_ConfirmedState_Name
+ \value SystemOffNormalAlarmType_ConfirmedState_Number
+ \value SystemOffNormalAlarmType_ConfirmedState_EffectiveDisplayName
+ \value SystemOffNormalAlarmType_ConfirmedState_TransitionTime
+ \value SystemOffNormalAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value SystemOffNormalAlarmType_ConfirmedState_TrueState
+ \value SystemOffNormalAlarmType_ConfirmedState_FalseState
+ \value SystemOffNormalAlarmType_Acknowledge
+ \value SystemOffNormalAlarmType_Acknowledge_InputArguments
+ \value SystemOffNormalAlarmType_Confirm
+ \value SystemOffNormalAlarmType_Confirm_InputArguments
+ \value SystemOffNormalAlarmType_ActiveState
+ \value SystemOffNormalAlarmType_ActiveState_Id
+ \value SystemOffNormalAlarmType_ActiveState_Name
+ \value SystemOffNormalAlarmType_ActiveState_Number
+ \value SystemOffNormalAlarmType_ActiveState_EffectiveDisplayName
+ \value SystemOffNormalAlarmType_ActiveState_TransitionTime
+ \value SystemOffNormalAlarmType_ActiveState_EffectiveTransitionTime
+ \value SystemOffNormalAlarmType_ActiveState_TrueState
+ \value SystemOffNormalAlarmType_ActiveState_FalseState
+ \value SystemOffNormalAlarmType_InputNode
+ \value SystemOffNormalAlarmType_SuppressedState
+ \value SystemOffNormalAlarmType_SuppressedState_Id
+ \value SystemOffNormalAlarmType_SuppressedState_Name
+ \value SystemOffNormalAlarmType_SuppressedState_Number
+ \value SystemOffNormalAlarmType_SuppressedState_EffectiveDisplayName
+ \value SystemOffNormalAlarmType_SuppressedState_TransitionTime
+ \value SystemOffNormalAlarmType_SuppressedState_EffectiveTransitionTime
+ \value SystemOffNormalAlarmType_SuppressedState_TrueState
+ \value SystemOffNormalAlarmType_SuppressedState_FalseState
+ \value SystemOffNormalAlarmType_ShelvingState
+ \value SystemOffNormalAlarmType_ShelvingState_CurrentState
+ \value SystemOffNormalAlarmType_ShelvingState_CurrentState_Id
+ \value SystemOffNormalAlarmType_ShelvingState_CurrentState_Name
+ \value SystemOffNormalAlarmType_ShelvingState_CurrentState_Number
+ \value SystemOffNormalAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value SystemOffNormalAlarmType_ShelvingState_LastTransition
+ \value SystemOffNormalAlarmType_ShelvingState_LastTransition_Id
+ \value SystemOffNormalAlarmType_ShelvingState_LastTransition_Name
+ \value SystemOffNormalAlarmType_ShelvingState_LastTransition_Number
+ \value SystemOffNormalAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value SystemOffNormalAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value SystemOffNormalAlarmType_ShelvingState_UnshelveTime
+ \value SystemOffNormalAlarmType_ShelvingState_Unshelve
+ \value SystemOffNormalAlarmType_ShelvingState_OneShotShelve
+ \value SystemOffNormalAlarmType_ShelvingState_TimedShelve
+ \value SystemOffNormalAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value SystemOffNormalAlarmType_SuppressedOrShelved
+ \value SystemOffNormalAlarmType_MaxTimeShelved
+ \value SystemOffNormalAlarmType_NormalState
+ \value AuditConditionCommentEventType_Comment
+ \value AuditConditionRespondEventType_SelectedResponse
+ \value AuditConditionAcknowledgeEventType_Comment
+ \value AuditConditionConfirmEventType_Comment
+ \value AuditConditionShelvingEventType_ShelvingTime
+ \value AuditProgramTransitionEventType
+ \value AuditProgramTransitionEventType_EventId
+ \value AuditProgramTransitionEventType_EventType
+ \value AuditProgramTransitionEventType_SourceNode
+ \value AuditProgramTransitionEventType_SourceName
+ \value AuditProgramTransitionEventType_Time
+ \value AuditProgramTransitionEventType_ReceiveTime
+ \value AuditProgramTransitionEventType_LocalTime
+ \value AuditProgramTransitionEventType_Message
+ \value AuditProgramTransitionEventType_Severity
+ \value AuditProgramTransitionEventType_ActionTimeStamp
+ \value AuditProgramTransitionEventType_Status
+ \value AuditProgramTransitionEventType_ServerId
+ \value AuditProgramTransitionEventType_ClientAuditEntryId
+ \value AuditProgramTransitionEventType_ClientUserId
+ \value AuditProgramTransitionEventType_MethodId
+ \value AuditProgramTransitionEventType_InputArguments
+ \value AuditProgramTransitionEventType_OldStateId
+ \value AuditProgramTransitionEventType_NewStateId
+ \value AuditProgramTransitionEventType_TransitionNumber
+ \value HistoricalDataConfigurationType_AggregateFunctions
+ \value HAConfiguration_AggregateFunctions
+ \value NodeClass_EnumValues
+ \value InstanceNode
+ \value TypeNode
+ \value NodeAttributesMask_EnumValues
+ \value AttributeWriteMask_EnumValues
+ \value BrowseResultMask_EnumValues
+ \value HistoryUpdateType_EnumValues
+ \value PerformUpdateType_EnumValues
+ \value InstanceNode_Encoding_DefaultXml
+ \value TypeNode_Encoding_DefaultXml
+ \value InstanceNode_Encoding_DefaultBinary
+ \value TypeNode_Encoding_DefaultBinary
+ \value SessionDiagnosticsObjectType_SessionDiagnostics_UnauthorizedRequestCount
+ \value SessionDiagnosticsVariableType_UnauthorizedRequestCount
+ \value OpenFileMode
+ \value OpenFileMode_EnumValues
+ \value ModelChangeStructureVerbMask
+ \value ModelChangeStructureVerbMask_EnumValues
+ \value EndpointUrlListDataType
+ \value NetworkGroupDataType
+ \value NonTransparentNetworkRedundancyType
+ \value NonTransparentNetworkRedundancyType_RedundancySupport
+ \value NonTransparentNetworkRedundancyType_ServerUriArray
+ \value NonTransparentNetworkRedundancyType_ServerNetworkGroups
+ \value EndpointUrlListDataType_Encoding_DefaultXml
+ \value NetworkGroupDataType_Encoding_DefaultXml
+ \value OpcUa_XmlSchema_EndpointUrlListDataType
+ \value OpcUa_XmlSchema_EndpointUrlListDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_EndpointUrlListDataType_DictionaryFragment
+ \value OpcUa_XmlSchema_NetworkGroupDataType
+ \value OpcUa_XmlSchema_NetworkGroupDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_NetworkGroupDataType_DictionaryFragment
+ \value EndpointUrlListDataType_Encoding_DefaultBinary
+ \value NetworkGroupDataType_Encoding_DefaultBinary
+ \value OpcUa_BinarySchema_EndpointUrlListDataType
+ \value OpcUa_BinarySchema_EndpointUrlListDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_EndpointUrlListDataType_DictionaryFragment
+ \value OpcUa_BinarySchema_NetworkGroupDataType
+ \value OpcUa_BinarySchema_NetworkGroupDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_NetworkGroupDataType_DictionaryFragment
+ \value ArrayItemType
+ \value ArrayItemType_Definition
+ \value ArrayItemType_ValuePrecision
+ \value ArrayItemType_InstrumentRange
+ \value ArrayItemType_EURange
+ \value ArrayItemType_EngineeringUnits
+ \value ArrayItemType_Title
+ \value ArrayItemType_AxisScaleType
+ \value YArrayItemType
+ \value YArrayItemType_Definition
+ \value YArrayItemType_ValuePrecision
+ \value YArrayItemType_InstrumentRange
+ \value YArrayItemType_EURange
+ \value YArrayItemType_EngineeringUnits
+ \value YArrayItemType_Title
+ \value YArrayItemType_AxisScaleType
+ \value YArrayItemType_XAxisDefinition
+ \value XYArrayItemType
+ \value XYArrayItemType_Definition
+ \value XYArrayItemType_ValuePrecision
+ \value XYArrayItemType_InstrumentRange
+ \value XYArrayItemType_EURange
+ \value XYArrayItemType_EngineeringUnits
+ \value XYArrayItemType_Title
+ \value XYArrayItemType_AxisScaleType
+ \value XYArrayItemType_XAxisDefinition
+ \value ImageItemType
+ \value ImageItemType_Definition
+ \value ImageItemType_ValuePrecision
+ \value ImageItemType_InstrumentRange
+ \value ImageItemType_EURange
+ \value ImageItemType_EngineeringUnits
+ \value ImageItemType_Title
+ \value ImageItemType_AxisScaleType
+ \value ImageItemType_XAxisDefinition
+ \value ImageItemType_YAxisDefinition
+ \value CubeItemType
+ \value CubeItemType_Definition
+ \value CubeItemType_ValuePrecision
+ \value CubeItemType_InstrumentRange
+ \value CubeItemType_EURange
+ \value CubeItemType_EngineeringUnits
+ \value CubeItemType_Title
+ \value CubeItemType_AxisScaleType
+ \value CubeItemType_XAxisDefinition
+ \value CubeItemType_YAxisDefinition
+ \value CubeItemType_ZAxisDefinition
+ \value NDimensionArrayItemType
+ \value NDimensionArrayItemType_Definition
+ \value NDimensionArrayItemType_ValuePrecision
+ \value NDimensionArrayItemType_InstrumentRange
+ \value NDimensionArrayItemType_EURange
+ \value NDimensionArrayItemType_EngineeringUnits
+ \value NDimensionArrayItemType_Title
+ \value NDimensionArrayItemType_AxisScaleType
+ \value NDimensionArrayItemType_AxisDefinition
+ \value AxisScaleEnumeration
+ \value AxisScaleEnumeration_EnumStrings
+ \value AxisInformation
+ \value XVType
+ \value AxisInformation_Encoding_DefaultXml
+ \value XVType_Encoding_DefaultXml
+ \value OpcUa_XmlSchema_AxisInformation
+ \value OpcUa_XmlSchema_AxisInformation_DataTypeVersion
+ \value OpcUa_XmlSchema_AxisInformation_DictionaryFragment
+ \value OpcUa_XmlSchema_XVType
+ \value OpcUa_XmlSchema_XVType_DataTypeVersion
+ \value OpcUa_XmlSchema_XVType_DictionaryFragment
+ \value AxisInformation_Encoding_DefaultBinary
+ \value XVType_Encoding_DefaultBinary
+ \value OpcUa_BinarySchema_AxisInformation
+ \value OpcUa_BinarySchema_AxisInformation_DataTypeVersion
+ \value OpcUa_BinarySchema_AxisInformation_DictionaryFragment
+ \value OpcUa_BinarySchema_XVType
+ \value OpcUa_BinarySchema_XVType_DataTypeVersion
+ \value OpcUa_BinarySchema_XVType_DictionaryFragment
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionId
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionName
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientDescription
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ServerUri
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_EndpointUrl
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_LocaleIds
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ActualSessionTimeout
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_MaxResponseMessageSize
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientConnectionTime
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientLastContactTime
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentSubscriptionsCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentMonitoredItemsCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentPublishRequestsInQueue
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TotalRequestCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnauthorizedRequestCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ReadCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryReadCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_WriteCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryUpdateCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CallCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateMonitoredItemsCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifyMonitoredItemsCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetMonitoringModeCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetTriggeringCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteMonitoredItemsCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateSubscriptionCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifySubscriptionCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetPublishingModeCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_PublishCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RepublishCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TransferSubscriptionsCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteSubscriptionsCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddNodesCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddReferencesCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteNodesCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteReferencesCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseNextCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryFirstCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryNextCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RegisterNodesCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnregisterNodesCount
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SessionId
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdOfSession
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdHistory
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_AuthenticationMechanism
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_Encoding
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_TransportProtocol
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityMode
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityPolicyUri
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientCertificate
+ \value SessionsDiagnosticsSummaryType_ClientName_Placeholder_SubscriptionDiagnosticsArray
+ \value ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData
+ \value ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents
+ \value ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData
+ \value ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents
+ \value ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryReadData
+ \value ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryReadEvents
+ \value ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryUpdateData
+ \value ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryUpdateEvents
+ \value OperationLimitsType_MaxNodesPerHistoryReadData
+ \value OperationLimitsType_MaxNodesPerHistoryReadEvents
+ \value OperationLimitsType_MaxNodesPerHistoryUpdateData
+ \value OperationLimitsType_MaxNodesPerHistoryUpdateEvents
+ \value Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData
+ \value Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents
+ \value Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData
+ \value Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents
+ \value NamingRuleType_EnumValues
+ \value ViewVersion
+ \value ComplexNumberType
+ \value DoubleComplexNumberType
+ \value ComplexNumberType_Encoding_DefaultXml
+ \value DoubleComplexNumberType_Encoding_DefaultXml
+ \value OpcUa_XmlSchema_ComplexNumberType
+ \value OpcUa_XmlSchema_ComplexNumberType_DataTypeVersion
+ \value OpcUa_XmlSchema_ComplexNumberType_DictionaryFragment
+ \value OpcUa_XmlSchema_DoubleComplexNumberType
+ \value OpcUa_XmlSchema_DoubleComplexNumberType_DataTypeVersion
+ \value OpcUa_XmlSchema_DoubleComplexNumberType_DictionaryFragment
+ \value ComplexNumberType_Encoding_DefaultBinary
+ \value DoubleComplexNumberType_Encoding_DefaultBinary
+ \value OpcUa_BinarySchema_ComplexNumberType
+ \value OpcUa_BinarySchema_ComplexNumberType_DataTypeVersion
+ \value OpcUa_BinarySchema_ComplexNumberType_DictionaryFragment
+ \value OpcUa_BinarySchema_DoubleComplexNumberType
+ \value OpcUa_BinarySchema_DoubleComplexNumberType_DataTypeVersion
+ \value OpcUa_BinarySchema_DoubleComplexNumberType_DictionaryFragment
+ \value ServerOnNetwork
+ \value FindServersOnNetworkRequest
+ \value FindServersOnNetworkResponse
+ \value RegisterServer2Request
+ \value RegisterServer2Response
+ \value ServerOnNetwork_Encoding_DefaultXml
+ \value FindServersOnNetworkRequest_Encoding_DefaultXml
+ \value FindServersOnNetworkResponse_Encoding_DefaultXml
+ \value RegisterServer2Request_Encoding_DefaultXml
+ \value RegisterServer2Response_Encoding_DefaultXml
+ \value OpcUa_XmlSchema_ServerOnNetwork
+ \value OpcUa_XmlSchema_ServerOnNetwork_DataTypeVersion
+ \value OpcUa_XmlSchema_ServerOnNetwork_DictionaryFragment
+ \value ServerOnNetwork_Encoding_DefaultBinary
+ \value FindServersOnNetworkRequest_Encoding_DefaultBinary
+ \value FindServersOnNetworkResponse_Encoding_DefaultBinary
+ \value RegisterServer2Request_Encoding_DefaultBinary
+ \value RegisterServer2Response_Encoding_DefaultBinary
+ \value OpcUa_BinarySchema_ServerOnNetwork
+ \value OpcUa_BinarySchema_ServerOnNetwork_DataTypeVersion
+ \value OpcUa_BinarySchema_ServerOnNetwork_DictionaryFragment
+ \value ProgressEventType_Context
+ \value ProgressEventType_Progress
+ \value OpenWithMasksMethodType
+ \value OpenWithMasksMethodType_InputArguments
+ \value OpenWithMasksMethodType_OutputArguments
+ \value CloseAndUpdateMethodType
+ \value CloseAndUpdateMethodType_OutputArguments
+ \value AddCertificateMethodType
+ \value AddCertificateMethodType_InputArguments
+ \value RemoveCertificateMethodType
+ \value RemoveCertificateMethodType_InputArguments
+ \value TrustListType
+ \value TrustListType_Size
+ \value TrustListType_OpenCount
+ \value TrustListType_Open
+ \value TrustListType_Open_InputArguments
+ \value TrustListType_Open_OutputArguments
+ \value TrustListType_Close
+ \value TrustListType_Close_InputArguments
+ \value TrustListType_Read
+ \value TrustListType_Read_InputArguments
+ \value TrustListType_Read_OutputArguments
+ \value TrustListType_Write
+ \value TrustListType_Write_InputArguments
+ \value TrustListType_GetPosition
+ \value TrustListType_GetPosition_InputArguments
+ \value TrustListType_GetPosition_OutputArguments
+ \value TrustListType_SetPosition
+ \value TrustListType_SetPosition_InputArguments
+ \value TrustListType_LastUpdateTime
+ \value TrustListType_OpenWithMasks
+ \value TrustListType_OpenWithMasks_InputArguments
+ \value TrustListType_OpenWithMasks_OutputArguments
+ \value TrustListType_CloseAndUpdate
+ \value TrustListType_CloseAndUpdate_OutputArguments
+ \value TrustListType_AddCertificate
+ \value TrustListType_AddCertificate_InputArguments
+ \value TrustListType_RemoveCertificate
+ \value TrustListType_RemoveCertificate_InputArguments
+ \value TrustListMasks
+ \value TrustListMasks_EnumValues
+ \value TrustListDataType
+ \value CertificateGroupType
+ \value CertificateType
+ \value ApplicationCertificateType
+ \value HttpsCertificateType
+ \value RsaMinApplicationCertificateType
+ \value RsaSha256ApplicationCertificateType
+ \value TrustListUpdatedAuditEventType
+ \value TrustListUpdatedAuditEventType_EventId
+ \value TrustListUpdatedAuditEventType_EventType
+ \value TrustListUpdatedAuditEventType_SourceNode
+ \value TrustListUpdatedAuditEventType_SourceName
+ \value TrustListUpdatedAuditEventType_Time
+ \value TrustListUpdatedAuditEventType_ReceiveTime
+ \value TrustListUpdatedAuditEventType_LocalTime
+ \value TrustListUpdatedAuditEventType_Message
+ \value TrustListUpdatedAuditEventType_Severity
+ \value TrustListUpdatedAuditEventType_ActionTimeStamp
+ \value TrustListUpdatedAuditEventType_Status
+ \value TrustListUpdatedAuditEventType_ServerId
+ \value TrustListUpdatedAuditEventType_ClientAuditEntryId
+ \value TrustListUpdatedAuditEventType_ClientUserId
+ \value TrustListUpdatedAuditEventType_MethodId
+ \value TrustListUpdatedAuditEventType_InputArguments
+ \value UpdateCertificateMethodType
+ \value UpdateCertificateMethodType_InputArguments
+ \value UpdateCertificateMethodType_OutputArguments
+ \value ServerConfigurationType
+ \value ServerConfigurationType_SupportedPrivateKeyFormats
+ \value ServerConfigurationType_MaxTrustListSize
+ \value ServerConfigurationType_MulticastDnsEnabled
+ \value ServerConfigurationType_UpdateCertificate
+ \value ServerConfigurationType_UpdateCertificate_InputArguments
+ \value ServerConfigurationType_UpdateCertificate_OutputArguments
+ \value CertificateUpdatedAuditEventType
+ \value CertificateUpdatedAuditEventType_EventId
+ \value CertificateUpdatedAuditEventType_EventType
+ \value CertificateUpdatedAuditEventType_SourceNode
+ \value CertificateUpdatedAuditEventType_SourceName
+ \value CertificateUpdatedAuditEventType_Time
+ \value CertificateUpdatedAuditEventType_ReceiveTime
+ \value CertificateUpdatedAuditEventType_LocalTime
+ \value CertificateUpdatedAuditEventType_Message
+ \value CertificateUpdatedAuditEventType_Severity
+ \value CertificateUpdatedAuditEventType_ActionTimeStamp
+ \value CertificateUpdatedAuditEventType_Status
+ \value CertificateUpdatedAuditEventType_ServerId
+ \value CertificateUpdatedAuditEventType_ClientAuditEntryId
+ \value CertificateUpdatedAuditEventType_ClientUserId
+ \value CertificateUpdatedAuditEventType_MethodId
+ \value CertificateUpdatedAuditEventType_InputArguments
+ \value ServerConfiguration
+ \value ServerConfiguration_SupportedPrivateKeyFormats
+ \value ServerConfiguration_MaxTrustListSize
+ \value ServerConfiguration_MulticastDnsEnabled
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Size
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments
+ \value TrustListDataType_Encoding_DefaultXml
+ \value OpcUa_XmlSchema_TrustListDataType
+ \value OpcUa_XmlSchema_TrustListDataType_DataTypeVersion
+ \value OpcUa_XmlSchema_TrustListDataType_DictionaryFragment
+ \value TrustListDataType_Encoding_DefaultBinary
+ \value OpcUa_BinarySchema_TrustListDataType
+ \value OpcUa_BinarySchema_TrustListDataType_DataTypeVersion
+ \value OpcUa_BinarySchema_TrustListDataType_DictionaryFragment
+ \value ServerType_Namespaces_AddressSpaceFile_Writable
+ \value ServerType_Namespaces_AddressSpaceFile_UserWritable
+ \value FileType_Writable
+ \value FileType_UserWritable
+ \value AddressSpaceFileType_Writable
+ \value AddressSpaceFileType_UserWritable
+ \value NamespaceMetadataType_NamespaceFile_Writable
+ \value NamespaceMetadataType_NamespaceFile_UserWritable
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Writable
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_UserWritable
+ \value NamespacesType_AddressSpaceFile_Writable
+ \value NamespacesType_AddressSpaceFile_UserWritable
+ \value Server_Namespaces_AddressSpaceFile_Writable
+ \value Server_Namespaces_AddressSpaceFile_UserWritable
+ \value TrustListType_Writable
+ \value TrustListType_UserWritable
+ \value CloseAndUpdateMethodType_InputArguments
+ \value TrustListType_CloseAndUpdate_InputArguments
+ \value ServerConfigurationType_ServerCapabilities
+ \value ServerConfiguration_ServerCapabilities
+ \value OpcUa_XmlSchema_RelativePathElement
+ \value OpcUa_XmlSchema_RelativePathElement_DataTypeVersion
+ \value OpcUa_XmlSchema_RelativePathElement_DictionaryFragment
+ \value OpcUa_XmlSchema_RelativePath
+ \value OpcUa_XmlSchema_RelativePath_DataTypeVersion
+ \value OpcUa_XmlSchema_RelativePath_DictionaryFragment
+ \value OpcUa_BinarySchema_RelativePathElement
+ \value OpcUa_BinarySchema_RelativePathElement_DataTypeVersion
+ \value OpcUa_BinarySchema_RelativePathElement_DictionaryFragment
+ \value OpcUa_BinarySchema_RelativePath
+ \value OpcUa_BinarySchema_RelativePath_DataTypeVersion
+ \value OpcUa_BinarySchema_RelativePath_DictionaryFragment
+ \value ServerConfigurationType_CreateSigningRequest
+ \value ServerConfigurationType_CreateSigningRequest_InputArguments
+ \value ServerConfigurationType_CreateSigningRequest_OutputArguments
+ \value ServerConfigurationType_ApplyChanges
+ \value ServerConfiguration_CreateSigningRequest
+ \value ServerConfiguration_CreateSigningRequest_InputArguments
+ \value ServerConfiguration_CreateSigningRequest_OutputArguments
+ \value ServerConfiguration_ApplyChanges
+ \value CreateSigningRequestMethodType
+ \value CreateSigningRequestMethodType_InputArguments
+ \value CreateSigningRequestMethodType_OutputArguments
+ \value OptionSetValues
+ \value ServerType_SetSubscriptionDurable
+ \value ServerType_SetSubscriptionDurable_InputArguments
+ \value ServerType_SetSubscriptionDurable_OutputArguments
+ \value Server_SetSubscriptionDurable
+ \value Server_SetSubscriptionDurable_InputArguments
+ \value Server_SetSubscriptionDurable_OutputArguments
+ \value SetSubscriptionDurableMethodType
+ \value SetSubscriptionDurableMethodType_InputArguments
+ \value SetSubscriptionDurableMethodType_OutputArguments
+ \value OptionSet
+ \value Union
+ \value OptionSet_Encoding_DefaultXml
+ \value Union_Encoding_DefaultXml
+ \value OpcUa_XmlSchema_OptionSet
+ \value OpcUa_XmlSchema_OptionSet_DataTypeVersion
+ \value OpcUa_XmlSchema_OptionSet_DictionaryFragment
+ \value OpcUa_XmlSchema_Union
+ \value OpcUa_XmlSchema_Union_DataTypeVersion
+ \value OpcUa_XmlSchema_Union_DictionaryFragment
+ \value OptionSet_Encoding_DefaultBinary
+ \value Union_Encoding_DefaultBinary
+ \value OpcUa_BinarySchema_OptionSet
+ \value OpcUa_BinarySchema_OptionSet_DataTypeVersion
+ \value OpcUa_BinarySchema_OptionSet_DictionaryFragment
+ \value OpcUa_BinarySchema_Union
+ \value OpcUa_BinarySchema_Union_DataTypeVersion
+ \value OpcUa_BinarySchema_Union_DictionaryFragment
+ \value GetRejectedListMethodType
+ \value GetRejectedListMethodType_OutputArguments
+ \value ServerConfigurationType_GetRejectedList
+ \value ServerConfigurationType_GetRejectedList_OutputArguments
+ \value ServerConfiguration_GetRejectedList
+ \value ServerConfiguration_GetRejectedList_OutputArguments
+ \value SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics
+ \value SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SamplingInterval
+ \value SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SampledMonitoredItemsCount
+ \value SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_MaxSampledMonitoredItemsCount
+ \value SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_DisabledMonitoredItemsSamplingCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SessionId
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SubscriptionId
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_Priority
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingInterval
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxKeepAliveCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxLifetimeCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxNotificationsPerPublish
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingEnabled
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_ModifyCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EnableCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisableCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishRequestCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageRequestCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferRequestCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToAltClientCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToSameClientCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishRequestCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DataChangeNotificationsCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventNotificationsCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NotificationsCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_LatePublishRequestCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentKeepAliveCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentLifetimeCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_UnacknowledgedMessageCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DiscardedMessageCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoredItemCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisabledMonitoredItemCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoringQueueOverflowCount
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NextSequenceNumber
+ \value SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventQueueOverFlowCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_SessionId
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_SessionName
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_ClientDescription
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_ServerUri
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_EndpointUrl
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_LocaleIds
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_ActualSessionTimeout
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_MaxResponseMessageSize
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_ClientConnectionTime
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_ClientLastContactTime
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_CurrentSubscriptionsCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_CurrentMonitoredItemsCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_CurrentPublishRequestsInQueue
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_TotalRequestCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_UnauthorizedRequestCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_ReadCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_HistoryReadCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_WriteCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_HistoryUpdateCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_CallCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_CreateMonitoredItemsCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_ModifyMonitoredItemsCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_SetMonitoringModeCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_SetTriggeringCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_DeleteMonitoredItemsCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_CreateSubscriptionCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_ModifySubscriptionCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_SetPublishingModeCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_PublishCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_RepublishCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_TransferSubscriptionsCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_DeleteSubscriptionsCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_AddNodesCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_AddReferencesCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_DeleteNodesCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_DeleteReferencesCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_BrowseCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_BrowseNextCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_QueryFirstCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_QueryNextCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_RegisterNodesCount
+ \value SessionDiagnosticsArrayType_SessionDiagnostics_UnregisterNodesCount
+ \value SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics
+ \value SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SessionId
+ \value SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdOfSession
+ \value SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdHistory
+ \value SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_AuthenticationMechanism
+ \value SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_Encoding
+ \value SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_TransportProtocol
+ \value SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityMode
+ \value SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityPolicyUri
+ \value SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientCertificate
+ \value ServerType_ResendData
+ \value ServerType_ResendData_InputArguments
+ \value Server_ResendData
+ \value Server_ResendData_InputArguments
+ \value ResendDataMethodType
+ \value ResendDataMethodType_InputArguments
+ \value NormalizedString
+ \value DecimalString
+ \value DurationString
+ \value TimeString
+ \value DateString
+ \value ServerType_EstimatedReturnTime
+ \value ServerType_RequestServerStateChange
+ \value ServerType_RequestServerStateChange_InputArguments
+ \value Server_EstimatedReturnTime
+ \value Server_RequestServerStateChange
+ \value Server_RequestServerStateChange_InputArguments
+ \value RequestServerStateChangeMethodType
+ \value RequestServerStateChangeMethodType_InputArguments
+ \value DiscoveryConfiguration
+ \value MdnsDiscoveryConfiguration
+ \value DiscoveryConfiguration_Encoding_DefaultXml
+ \value MdnsDiscoveryConfiguration_Encoding_DefaultXml
+ \value OpcUa_XmlSchema_DiscoveryConfiguration
+ \value OpcUa_XmlSchema_DiscoveryConfiguration_DataTypeVersion
+ \value OpcUa_XmlSchema_DiscoveryConfiguration_DictionaryFragment
+ \value OpcUa_XmlSchema_MdnsDiscoveryConfiguration
+ \value OpcUa_XmlSchema_MdnsDiscoveryConfiguration_DataTypeVersion
+ \value OpcUa_XmlSchema_MdnsDiscoveryConfiguration_DictionaryFragment
+ \value DiscoveryConfiguration_Encoding_DefaultBinary
+ \value MdnsDiscoveryConfiguration_Encoding_DefaultBinary
+ \value OpcUa_BinarySchema_DiscoveryConfiguration
+ \value OpcUa_BinarySchema_DiscoveryConfiguration_DataTypeVersion
+ \value OpcUa_BinarySchema_DiscoveryConfiguration_DictionaryFragment
+ \value OpcUa_BinarySchema_MdnsDiscoveryConfiguration
+ \value OpcUa_BinarySchema_MdnsDiscoveryConfiguration_DataTypeVersion
+ \value OpcUa_BinarySchema_MdnsDiscoveryConfiguration_DictionaryFragment
+ \value MaxByteStringLength
+ \value ServerType_ServerCapabilities_MaxByteStringLength
+ \value ServerCapabilitiesType_MaxByteStringLength
+ \value Server_ServerCapabilities_MaxByteStringLength
+ \value ConditionType_ConditionRefresh2
+ \value ConditionType_ConditionRefresh2_InputArguments
+ \value ConditionRefresh2MethodType
+ \value ConditionRefresh2MethodType_InputArguments
+ \value DialogConditionType_ConditionRefresh2
+ \value DialogConditionType_ConditionRefresh2_InputArguments
+ \value AcknowledgeableConditionType_ConditionRefresh2
+ \value AcknowledgeableConditionType_ConditionRefresh2_InputArguments
+ \value AlarmConditionType_ConditionRefresh2
+ \value AlarmConditionType_ConditionRefresh2_InputArguments
+ \value LimitAlarmType_ConditionRefresh2
+ \value LimitAlarmType_ConditionRefresh2_InputArguments
+ \value ExclusiveLimitAlarmType_ConditionRefresh2
+ \value ExclusiveLimitAlarmType_ConditionRefresh2_InputArguments
+ \value NonExclusiveLimitAlarmType_ConditionRefresh2
+ \value NonExclusiveLimitAlarmType_ConditionRefresh2_InputArguments
+ \value NonExclusiveLevelAlarmType_ConditionRefresh2
+ \value NonExclusiveLevelAlarmType_ConditionRefresh2_InputArguments
+ \value ExclusiveLevelAlarmType_ConditionRefresh2
+ \value ExclusiveLevelAlarmType_ConditionRefresh2_InputArguments
+ \value NonExclusiveDeviationAlarmType_ConditionRefresh2
+ \value NonExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments
+ \value ExclusiveDeviationAlarmType_ConditionRefresh2
+ \value ExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments
+ \value NonExclusiveRateOfChangeAlarmType_ConditionRefresh2
+ \value NonExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments
+ \value ExclusiveRateOfChangeAlarmType_ConditionRefresh2
+ \value ExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments
+ \value DiscreteAlarmType_ConditionRefresh2
+ \value DiscreteAlarmType_ConditionRefresh2_InputArguments
+ \value OffNormalAlarmType_ConditionRefresh2
+ \value OffNormalAlarmType_ConditionRefresh2_InputArguments
+ \value SystemOffNormalAlarmType_ConditionRefresh2
+ \value SystemOffNormalAlarmType_ConditionRefresh2_InputArguments
+ \value TripAlarmType_ConditionRefresh2
+ \value TripAlarmType_ConditionRefresh2_InputArguments
+ \value CertificateExpirationAlarmType
+ \value CertificateExpirationAlarmType_EventId
+ \value CertificateExpirationAlarmType_EventType
+ \value CertificateExpirationAlarmType_SourceNode
+ \value CertificateExpirationAlarmType_SourceName
+ \value CertificateExpirationAlarmType_Time
+ \value CertificateExpirationAlarmType_ReceiveTime
+ \value CertificateExpirationAlarmType_LocalTime
+ \value CertificateExpirationAlarmType_Message
+ \value CertificateExpirationAlarmType_Severity
+ \value CertificateExpirationAlarmType_ConditionClassId
+ \value CertificateExpirationAlarmType_ConditionClassName
+ \value CertificateExpirationAlarmType_ConditionName
+ \value CertificateExpirationAlarmType_BranchId
+ \value CertificateExpirationAlarmType_Retain
+ \value CertificateExpirationAlarmType_EnabledState
+ \value CertificateExpirationAlarmType_EnabledState_Id
+ \value CertificateExpirationAlarmType_EnabledState_Name
+ \value CertificateExpirationAlarmType_EnabledState_Number
+ \value CertificateExpirationAlarmType_EnabledState_EffectiveDisplayName
+ \value CertificateExpirationAlarmType_EnabledState_TransitionTime
+ \value CertificateExpirationAlarmType_EnabledState_EffectiveTransitionTime
+ \value CertificateExpirationAlarmType_EnabledState_TrueState
+ \value CertificateExpirationAlarmType_EnabledState_FalseState
+ \value CertificateExpirationAlarmType_Quality
+ \value CertificateExpirationAlarmType_Quality_SourceTimestamp
+ \value CertificateExpirationAlarmType_LastSeverity
+ \value CertificateExpirationAlarmType_LastSeverity_SourceTimestamp
+ \value CertificateExpirationAlarmType_Comment
+ \value CertificateExpirationAlarmType_Comment_SourceTimestamp
+ \value CertificateExpirationAlarmType_ClientUserId
+ \value CertificateExpirationAlarmType_Disable
+ \value CertificateExpirationAlarmType_Enable
+ \value CertificateExpirationAlarmType_AddComment
+ \value CertificateExpirationAlarmType_AddComment_InputArguments
+ \value CertificateExpirationAlarmType_ConditionRefresh
+ \value CertificateExpirationAlarmType_ConditionRefresh_InputArguments
+ \value CertificateExpirationAlarmType_ConditionRefresh2
+ \value CertificateExpirationAlarmType_ConditionRefresh2_InputArguments
+ \value CertificateExpirationAlarmType_AckedState
+ \value CertificateExpirationAlarmType_AckedState_Id
+ \value CertificateExpirationAlarmType_AckedState_Name
+ \value CertificateExpirationAlarmType_AckedState_Number
+ \value CertificateExpirationAlarmType_AckedState_EffectiveDisplayName
+ \value CertificateExpirationAlarmType_AckedState_TransitionTime
+ \value CertificateExpirationAlarmType_AckedState_EffectiveTransitionTime
+ \value CertificateExpirationAlarmType_AckedState_TrueState
+ \value CertificateExpirationAlarmType_AckedState_FalseState
+ \value CertificateExpirationAlarmType_ConfirmedState
+ \value CertificateExpirationAlarmType_ConfirmedState_Id
+ \value CertificateExpirationAlarmType_ConfirmedState_Name
+ \value CertificateExpirationAlarmType_ConfirmedState_Number
+ \value CertificateExpirationAlarmType_ConfirmedState_EffectiveDisplayName
+ \value CertificateExpirationAlarmType_ConfirmedState_TransitionTime
+ \value CertificateExpirationAlarmType_ConfirmedState_EffectiveTransitionTime
+ \value CertificateExpirationAlarmType_ConfirmedState_TrueState
+ \value CertificateExpirationAlarmType_ConfirmedState_FalseState
+ \value CertificateExpirationAlarmType_Acknowledge
+ \value CertificateExpirationAlarmType_Acknowledge_InputArguments
+ \value CertificateExpirationAlarmType_Confirm
+ \value CertificateExpirationAlarmType_Confirm_InputArguments
+ \value CertificateExpirationAlarmType_ActiveState
+ \value CertificateExpirationAlarmType_ActiveState_Id
+ \value CertificateExpirationAlarmType_ActiveState_Name
+ \value CertificateExpirationAlarmType_ActiveState_Number
+ \value CertificateExpirationAlarmType_ActiveState_EffectiveDisplayName
+ \value CertificateExpirationAlarmType_ActiveState_TransitionTime
+ \value CertificateExpirationAlarmType_ActiveState_EffectiveTransitionTime
+ \value CertificateExpirationAlarmType_ActiveState_TrueState
+ \value CertificateExpirationAlarmType_ActiveState_FalseState
+ \value CertificateExpirationAlarmType_InputNode
+ \value CertificateExpirationAlarmType_SuppressedState
+ \value CertificateExpirationAlarmType_SuppressedState_Id
+ \value CertificateExpirationAlarmType_SuppressedState_Name
+ \value CertificateExpirationAlarmType_SuppressedState_Number
+ \value CertificateExpirationAlarmType_SuppressedState_EffectiveDisplayName
+ \value CertificateExpirationAlarmType_SuppressedState_TransitionTime
+ \value CertificateExpirationAlarmType_SuppressedState_EffectiveTransitionTime
+ \value CertificateExpirationAlarmType_SuppressedState_TrueState
+ \value CertificateExpirationAlarmType_SuppressedState_FalseState
+ \value CertificateExpirationAlarmType_ShelvingState
+ \value CertificateExpirationAlarmType_ShelvingState_CurrentState
+ \value CertificateExpirationAlarmType_ShelvingState_CurrentState_Id
+ \value CertificateExpirationAlarmType_ShelvingState_CurrentState_Name
+ \value CertificateExpirationAlarmType_ShelvingState_CurrentState_Number
+ \value CertificateExpirationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName
+ \value CertificateExpirationAlarmType_ShelvingState_LastTransition
+ \value CertificateExpirationAlarmType_ShelvingState_LastTransition_Id
+ \value CertificateExpirationAlarmType_ShelvingState_LastTransition_Name
+ \value CertificateExpirationAlarmType_ShelvingState_LastTransition_Number
+ \value CertificateExpirationAlarmType_ShelvingState_LastTransition_TransitionTime
+ \value CertificateExpirationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime
+ \value CertificateExpirationAlarmType_ShelvingState_UnshelveTime
+ \value CertificateExpirationAlarmType_ShelvingState_Unshelve
+ \value CertificateExpirationAlarmType_ShelvingState_OneShotShelve
+ \value CertificateExpirationAlarmType_ShelvingState_TimedShelve
+ \value CertificateExpirationAlarmType_ShelvingState_TimedShelve_InputArguments
+ \value CertificateExpirationAlarmType_SuppressedOrShelved
+ \value CertificateExpirationAlarmType_MaxTimeShelved
+ \value CertificateExpirationAlarmType_NormalState
+ \value CertificateExpirationAlarmType_ExpirationDate
+ \value CertificateExpirationAlarmType_CertificateType
+ \value CertificateExpirationAlarmType_Certificate
+ \value ServerType_Namespaces_AddressSpaceFile_MimeType
+ \value FileType_MimeType
+ \value CreateDirectoryMethodType
+ \value CreateDirectoryMethodType_InputArguments
+ \value CreateDirectoryMethodType_OutputArguments
+ \value CreateFileMethodType
+ \value CreateFileMethodType_InputArguments
+ \value CreateFileMethodType_OutputArguments
+ \value DeleteFileMethodType
+ \value DeleteFileMethodType_InputArguments
+ \value MoveOrCopyMethodType
+ \value MoveOrCopyMethodType_InputArguments
+ \value MoveOrCopyMethodType_OutputArguments
+ \value FileDirectoryType
+ \value FileDirectoryType_FileDirectoryName_Placeholder
+ \value FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory
+ \value FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_InputArguments
+ \value FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments
+ \value FileDirectoryType_FileDirectoryName_Placeholder_CreateFile
+ \value FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_InputArguments
+ \value FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_OutputArguments
+ \value FileDirectoryType_FileDirectoryName_Placeholder_Delete
+ \value FileDirectoryType_FileDirectoryName_Placeholder_Delete_InputArguments
+ \value FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy
+ \value FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments
+ \value FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments
+ \value FileDirectoryType_FileName_Placeholder
+ \value FileDirectoryType_FileName_Placeholder_Size
+ \value FileDirectoryType_FileName_Placeholder_Writable
+ \value FileDirectoryType_FileName_Placeholder_UserWritable
+ \value FileDirectoryType_FileName_Placeholder_OpenCount
+ \value FileDirectoryType_FileName_Placeholder_MimeType
+ \value FileDirectoryType_FileName_Placeholder_Open
+ \value FileDirectoryType_FileName_Placeholder_Open_InputArguments
+ \value FileDirectoryType_FileName_Placeholder_Open_OutputArguments
+ \value FileDirectoryType_FileName_Placeholder_Close
+ \value FileDirectoryType_FileName_Placeholder_Close_InputArguments
+ \value FileDirectoryType_FileName_Placeholder_Read
+ \value FileDirectoryType_FileName_Placeholder_Read_InputArguments
+ \value FileDirectoryType_FileName_Placeholder_Read_OutputArguments
+ \value FileDirectoryType_FileName_Placeholder_Write
+ \value FileDirectoryType_FileName_Placeholder_Write_InputArguments
+ \value FileDirectoryType_FileName_Placeholder_GetPosition
+ \value FileDirectoryType_FileName_Placeholder_GetPosition_InputArguments
+ \value FileDirectoryType_FileName_Placeholder_GetPosition_OutputArguments
+ \value FileDirectoryType_FileName_Placeholder_SetPosition
+ \value FileDirectoryType_FileName_Placeholder_SetPosition_InputArguments
+ \value FileDirectoryType_CreateDirectory
+ \value FileDirectoryType_CreateDirectory_InputArguments
+ \value FileDirectoryType_CreateDirectory_OutputArguments
+ \value FileDirectoryType_CreateFile
+ \value FileDirectoryType_CreateFile_InputArguments
+ \value FileDirectoryType_CreateFile_OutputArguments
+ \value FileDirectoryType_Delete
+ \value FileDirectoryType_Delete_InputArguments
+ \value FileDirectoryType_MoveOrCopy
+ \value FileDirectoryType_MoveOrCopy_InputArguments
+ \value FileDirectoryType_MoveOrCopy_OutputArguments
+ \value AddressSpaceFileType_MimeType
+ \value NamespaceMetadataType_NamespaceFile_MimeType
+ \value NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_MimeType
+ \value NamespacesType_AddressSpaceFile_MimeType
+ \value Server_Namespaces_AddressSpaceFile_MimeType
+ \value TrustListType_MimeType
+ \value CertificateGroupType_TrustList
+ \value CertificateGroupType_TrustList_Size
+ \value CertificateGroupType_TrustList_Writable
+ \value CertificateGroupType_TrustList_UserWritable
+ \value CertificateGroupType_TrustList_OpenCount
+ \value CertificateGroupType_TrustList_MimeType
+ \value CertificateGroupType_TrustList_Open
+ \value CertificateGroupType_TrustList_Open_InputArguments
+ \value CertificateGroupType_TrustList_Open_OutputArguments
+ \value CertificateGroupType_TrustList_Close
+ \value CertificateGroupType_TrustList_Close_InputArguments
+ \value CertificateGroupType_TrustList_Read
+ \value CertificateGroupType_TrustList_Read_InputArguments
+ \value CertificateGroupType_TrustList_Read_OutputArguments
+ \value CertificateGroupType_TrustList_Write
+ \value CertificateGroupType_TrustList_Write_InputArguments
+ \value CertificateGroupType_TrustList_GetPosition
+ \value CertificateGroupType_TrustList_GetPosition_InputArguments
+ \value CertificateGroupType_TrustList_GetPosition_OutputArguments
+ \value CertificateGroupType_TrustList_SetPosition
+ \value CertificateGroupType_TrustList_SetPosition_InputArguments
+ \value CertificateGroupType_TrustList_LastUpdateTime
+ \value CertificateGroupType_TrustList_OpenWithMasks
+ \value CertificateGroupType_TrustList_OpenWithMasks_InputArguments
+ \value CertificateGroupType_TrustList_OpenWithMasks_OutputArguments
+ \value CertificateGroupType_TrustList_CloseAndUpdate
+ \value CertificateGroupType_TrustList_CloseAndUpdate_InputArguments
+ \value CertificateGroupType_TrustList_CloseAndUpdate_OutputArguments
+ \value CertificateGroupType_TrustList_AddCertificate
+ \value CertificateGroupType_TrustList_AddCertificate_InputArguments
+ \value CertificateGroupType_TrustList_RemoveCertificate
+ \value CertificateGroupType_TrustList_RemoveCertificate_InputArguments
+ \value CertificateGroupType_CertificateTypes
+ \value CertificateUpdatedAuditEventType_CertificateGroup
+ \value CertificateUpdatedAuditEventType_CertificateType
+ \value ServerConfiguration_UpdateCertificate
+ \value ServerConfiguration_UpdateCertificate_InputArguments
+ \value ServerConfiguration_UpdateCertificate_OutputArguments
+ \value CertificateGroupFolderType
+ \value CertificateGroupFolderType_DefaultApplicationGroup
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Size
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Writable
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_UserWritable
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenCount
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_MimeType
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_InputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_OutputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close_InputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_InputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_OutputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write_InputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_InputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition_InputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_LastUpdateTime
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate
+ \value CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments
+ \value CertificateGroupFolderType_DefaultApplicationGroup_CertificateTypes
+ \value CertificateGroupFolderType_DefaultHttpsGroup
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Size
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Writable
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_UserWritable
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenCount
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_MimeType
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_InputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_OutputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close_InputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_InputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_OutputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write_InputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_InputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition_InputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_LastUpdateTime
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate
+ \value CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments
+ \value CertificateGroupFolderType_DefaultHttpsGroup_CertificateTypes
+ \value CertificateGroupFolderType_DefaultUserTokenGroup
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Size
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Writable
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_UserWritable
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenCount
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_MimeType
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_InputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_OutputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close_InputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_InputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_OutputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write_InputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_LastUpdateTime
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments
+ \value CertificateGroupFolderType_DefaultUserTokenGroup_CertificateTypes
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Size
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Writable
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_UserWritable
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenCount
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_MimeType
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_InputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_OutputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close_InputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_InputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_OutputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write_InputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_InputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_OutputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition_InputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_LastUpdateTime
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_InputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_OutputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_InputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_OutputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate_InputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate_InputArguments
+ \value CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateTypes
+ \value ServerConfigurationType_CertificateGroups
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Size
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_MimeType
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateTypes
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Size
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_MimeType
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateTypes
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_MimeType
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments
+ \value ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes
+ \value ServerConfiguration_CertificateGroups
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Size
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Writable
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_MimeType
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateTypes
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Size
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_MimeType
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateTypes
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Writable
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_MimeType
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments
+ \value ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateTypes
+ \value AuditCreateSessionEventType_SessionId
+ \value AuditUrlMismatchEventType_SessionId
+ \value Server_ServerRedundancy_ServerNetworkGroups
+ \value CertificateExpirationAlarmType_ExpirationLimit
+ \value Server_Namespaces_OPCUANamespaceUri
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceUri
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceVersion
+ \value Server_Namespaces_OPCUANamespaceUri_NamespacePublicationDate
+ \value Server_Namespaces_OPCUANamespaceUri_IsNamespaceSubset
+ \value Server_Namespaces_OPCUANamespaceUri_StaticNodeIdTypes
+ \value Server_Namespaces_OPCUANamespaceUri_StaticNumericNodeIdRange
+ \value Server_Namespaces_OPCUANamespaceUri_StaticStringNodeIdPattern
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Size
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Writable
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_UserWritable
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_OpenCount
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_MimeType
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Open
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Open_InputArguments
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Open_OutputArguments
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Close
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Close_InputArguments
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Read
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Read_InputArguments
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Read_OutputArguments
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Write
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Write_InputArguments
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_GetPosition
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_GetPosition_InputArguments
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_GetPosition_OutputArguments
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_SetPosition
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_SetPosition_InputArguments
+ \value Server_Namespaces_OPCUANamespaceUri_NamespaceFile_ExportNamespace
+*/
+
+QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuanodeids.h b/src/opcua/client/qopcuanodeids.h
new file mode 100644
index 0000000..6a4dfbb
--- /dev/null
+++ b/src/opcua/client/qopcuanodeids.h
@@ -0,0 +1,5809 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOPCUANODEIDS_H
+#define QOPCUANODEIDS_H
+
+#include <QtOpcUa/qopcuaglobal.h>
+
+#include <QtCore/qmetatype.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace QOpcUa {
+ namespace NodeIds {
+#ifndef QT_OPCUA_NO_NS0IDNAMES
+ Q_OPCUA_EXPORT Q_NAMESPACE
+#endif
+
+ enum class Namespace0 : quint32 {
+ Unknown = 0,
+ Boolean = 1,
+ SByte = 2,
+ Byte = 3,
+ Int16 = 4,
+ UInt16 = 5,
+ Int32 = 6,
+ UInt32 = 7,
+ Int64 = 8,
+ UInt64 = 9,
+ Float = 10,
+ Double = 11,
+ String = 12,
+ DateTime = 13,
+ Guid = 14,
+ ByteString = 15,
+ XmlElement = 16,
+ NodeId = 17,
+ ExpandedNodeId = 18,
+ StatusCode = 19,
+ QualifiedName = 20,
+ LocalizedText = 21,
+ Structure = 22,
+ DataValue = 23,
+ BaseDataType = 24,
+ DiagnosticInfo = 25,
+ Number = 26,
+ Integer = 27,
+ UInteger = 28,
+ Enumeration = 29,
+ Image = 30,
+ References = 31,
+ NonHierarchicalReferences = 32,
+ HierarchicalReferences = 33,
+ HasChild = 34,
+ Organizes = 35,
+ HasEventSource = 36,
+ HasModellingRule = 37,
+ HasEncoding = 38,
+ HasDescription = 39,
+ HasTypeDefinition = 40,
+ GeneratesEvent = 41,
+ Aggregates = 44,
+ HasSubtype = 45,
+ HasProperty = 46,
+ HasComponent = 47,
+ HasNotifier = 48,
+ HasOrderedComponent = 49,
+ FromState = 51,
+ ToState = 52,
+ HasCause = 53,
+ HasEffect = 54,
+ HasHistoricalConfiguration = 56,
+ BaseObjectType = 58,
+ FolderType = 61,
+ BaseVariableType = 62,
+ BaseDataVariableType = 63,
+ PropertyType = 68,
+ DataTypeDescriptionType = 69,
+ DataTypeDictionaryType = 72,
+ DataTypeSystemType = 75,
+ DataTypeEncodingType = 76,
+ ModellingRuleType = 77,
+ ModellingRule_Mandatory = 78,
+ ModellingRule_MandatoryShared = 79,
+ ModellingRule_Optional = 80,
+ ModellingRule_ExposesItsArray = 83,
+ RootFolder = 84,
+ ObjectsFolder = 85,
+ TypesFolder = 86,
+ ViewsFolder = 87,
+ ObjectTypesFolder = 88,
+ VariableTypesFolder = 89,
+ DataTypesFolder = 90,
+ ReferenceTypesFolder = 91,
+ XmlSchema_TypeSystem = 92,
+ OPCBinarySchema_TypeSystem = 93,
+ DataTypeDescriptionType_DataTypeVersion = 104,
+ DataTypeDescriptionType_DictionaryFragment = 105,
+ DataTypeDictionaryType_DataTypeVersion = 106,
+ DataTypeDictionaryType_NamespaceUri = 107,
+ ModellingRuleType_NamingRule = 111,
+ ModellingRule_Mandatory_NamingRule = 112,
+ ModellingRule_Optional_NamingRule = 113,
+ ModellingRule_ExposesItsArray_NamingRule = 114,
+ ModellingRule_MandatoryShared_NamingRule = 116,
+ HasSubStateMachine = 117,
+ NamingRuleType = 120,
+ Decimal128 = 121,
+ IdType = 256,
+ NodeClass = 257,
+ Node = 258,
+ Node_Encoding_DefaultXml = 259,
+ Node_Encoding_DefaultBinary = 260,
+ ObjectNode = 261,
+ ObjectNode_Encoding_DefaultXml = 262,
+ ObjectNode_Encoding_DefaultBinary = 263,
+ ObjectTypeNode = 264,
+ ObjectTypeNode_Encoding_DefaultXml = 265,
+ ObjectTypeNode_Encoding_DefaultBinary = 266,
+ VariableNode = 267,
+ VariableNode_Encoding_DefaultXml = 268,
+ VariableNode_Encoding_DefaultBinary = 269,
+ VariableTypeNode = 270,
+ VariableTypeNode_Encoding_DefaultXml = 271,
+ VariableTypeNode_Encoding_DefaultBinary = 272,
+ ReferenceTypeNode = 273,
+ ReferenceTypeNode_Encoding_DefaultXml = 274,
+ ReferenceTypeNode_Encoding_DefaultBinary = 275,
+ MethodNode = 276,
+ MethodNode_Encoding_DefaultXml = 277,
+ MethodNode_Encoding_DefaultBinary = 278,
+ ViewNode = 279,
+ ViewNode_Encoding_DefaultXml = 280,
+ ViewNode_Encoding_DefaultBinary = 281,
+ DataTypeNode = 282,
+ DataTypeNode_Encoding_DefaultXml = 283,
+ DataTypeNode_Encoding_DefaultBinary = 284,
+ ReferenceNode = 285,
+ ReferenceNode_Encoding_DefaultXml = 286,
+ ReferenceNode_Encoding_DefaultBinary = 287,
+ IntegerId = 288,
+ Counter = 289,
+ Duration = 290,
+ NumericRange = 291,
+ Time = 292,
+ Date = 293,
+ UtcTime = 294,
+ LocaleId = 295,
+ Argument = 296,
+ Argument_Encoding_DefaultXml = 297,
+ Argument_Encoding_DefaultBinary = 298,
+ StatusResult = 299,
+ StatusResult_Encoding_DefaultXml = 300,
+ StatusResult_Encoding_DefaultBinary = 301,
+ MessageSecurityMode = 302,
+ UserTokenType = 303,
+ UserTokenPolicy = 304,
+ UserTokenPolicy_Encoding_DefaultXml = 305,
+ UserTokenPolicy_Encoding_DefaultBinary = 306,
+ ApplicationType = 307,
+ ApplicationDescription = 308,
+ ApplicationDescription_Encoding_DefaultXml = 309,
+ ApplicationDescription_Encoding_DefaultBinary = 310,
+ ApplicationInstanceCertificate = 311,
+ EndpointDescription = 312,
+ EndpointDescription_Encoding_DefaultXml = 313,
+ EndpointDescription_Encoding_DefaultBinary = 314,
+ SecurityTokenRequestType = 315,
+ UserIdentityToken = 316,
+ UserIdentityToken_Encoding_DefaultXml = 317,
+ UserIdentityToken_Encoding_DefaultBinary = 318,
+ AnonymousIdentityToken = 319,
+ AnonymousIdentityToken_Encoding_DefaultXml = 320,
+ AnonymousIdentityToken_Encoding_DefaultBinary = 321,
+ UserNameIdentityToken = 322,
+ UserNameIdentityToken_Encoding_DefaultXml = 323,
+ UserNameIdentityToken_Encoding_DefaultBinary = 324,
+ X509IdentityToken = 325,
+ X509IdentityToken_Encoding_DefaultXml = 326,
+ X509IdentityToken_Encoding_DefaultBinary = 327,
+ EndpointConfiguration = 331,
+ EndpointConfiguration_Encoding_DefaultXml = 332,
+ EndpointConfiguration_Encoding_DefaultBinary = 333,
+ BuildInfo = 338,
+ BuildInfo_Encoding_DefaultXml = 339,
+ BuildInfo_Encoding_DefaultBinary = 340,
+ SignedSoftwareCertificate = 344,
+ SignedSoftwareCertificate_Encoding_DefaultXml = 345,
+ SignedSoftwareCertificate_Encoding_DefaultBinary = 346,
+ AttributeWriteMask = 347,
+ NodeAttributesMask = 348,
+ NodeAttributes = 349,
+ NodeAttributes_Encoding_DefaultXml = 350,
+ NodeAttributes_Encoding_DefaultBinary = 351,
+ ObjectAttributes = 352,
+ ObjectAttributes_Encoding_DefaultXml = 353,
+ ObjectAttributes_Encoding_DefaultBinary = 354,
+ VariableAttributes = 355,
+ VariableAttributes_Encoding_DefaultXml = 356,
+ VariableAttributes_Encoding_DefaultBinary = 357,
+ MethodAttributes = 358,
+ MethodAttributes_Encoding_DefaultXml = 359,
+ MethodAttributes_Encoding_DefaultBinary = 360,
+ ObjectTypeAttributes = 361,
+ ObjectTypeAttributes_Encoding_DefaultXml = 362,
+ ObjectTypeAttributes_Encoding_DefaultBinary = 363,
+ VariableTypeAttributes = 364,
+ VariableTypeAttributes_Encoding_DefaultXml = 365,
+ VariableTypeAttributes_Encoding_DefaultBinary = 366,
+ ReferenceTypeAttributes = 367,
+ ReferenceTypeAttributes_Encoding_DefaultXml = 368,
+ ReferenceTypeAttributes_Encoding_DefaultBinary = 369,
+ DataTypeAttributes = 370,
+ DataTypeAttributes_Encoding_DefaultXml = 371,
+ DataTypeAttributes_Encoding_DefaultBinary = 372,
+ ViewAttributes = 373,
+ ViewAttributes_Encoding_DefaultXml = 374,
+ ViewAttributes_Encoding_DefaultBinary = 375,
+ AddNodesItem = 376,
+ AddNodesItem_Encoding_DefaultXml = 377,
+ AddNodesItem_Encoding_DefaultBinary = 378,
+ AddReferencesItem = 379,
+ AddReferencesItem_Encoding_DefaultXml = 380,
+ AddReferencesItem_Encoding_DefaultBinary = 381,
+ DeleteNodesItem = 382,
+ DeleteNodesItem_Encoding_DefaultXml = 383,
+ DeleteNodesItem_Encoding_DefaultBinary = 384,
+ DeleteReferencesItem = 385,
+ DeleteReferencesItem_Encoding_DefaultXml = 386,
+ DeleteReferencesItem_Encoding_DefaultBinary = 387,
+ SessionAuthenticationToken = 388,
+ RequestHeader = 389,
+ RequestHeader_Encoding_DefaultXml = 390,
+ RequestHeader_Encoding_DefaultBinary = 391,
+ ResponseHeader = 392,
+ ResponseHeader_Encoding_DefaultXml = 393,
+ ResponseHeader_Encoding_DefaultBinary = 394,
+ ServiceFault = 395,
+ ServiceFault_Encoding_DefaultXml = 396,
+ ServiceFault_Encoding_DefaultBinary = 397,
+ FindServersRequest = 420,
+ FindServersRequest_Encoding_DefaultXml = 421,
+ FindServersRequest_Encoding_DefaultBinary = 422,
+ FindServersResponse = 423,
+ FindServersResponse_Encoding_DefaultXml = 424,
+ FindServersResponse_Encoding_DefaultBinary = 425,
+ GetEndpointsRequest = 426,
+ GetEndpointsRequest_Encoding_DefaultXml = 427,
+ GetEndpointsRequest_Encoding_DefaultBinary = 428,
+ GetEndpointsResponse = 429,
+ GetEndpointsResponse_Encoding_DefaultXml = 430,
+ GetEndpointsResponse_Encoding_DefaultBinary = 431,
+ RegisteredServer = 432,
+ RegisteredServer_Encoding_DefaultXml = 433,
+ RegisteredServer_Encoding_DefaultBinary = 434,
+ RegisterServerRequest = 435,
+ RegisterServerRequest_Encoding_DefaultXml = 436,
+ RegisterServerRequest_Encoding_DefaultBinary = 437,
+ RegisterServerResponse = 438,
+ RegisterServerResponse_Encoding_DefaultXml = 439,
+ RegisterServerResponse_Encoding_DefaultBinary = 440,
+ ChannelSecurityToken = 441,
+ ChannelSecurityToken_Encoding_DefaultXml = 442,
+ ChannelSecurityToken_Encoding_DefaultBinary = 443,
+ OpenSecureChannelRequest = 444,
+ OpenSecureChannelRequest_Encoding_DefaultXml = 445,
+ OpenSecureChannelRequest_Encoding_DefaultBinary = 446,
+ OpenSecureChannelResponse = 447,
+ OpenSecureChannelResponse_Encoding_DefaultXml = 448,
+ OpenSecureChannelResponse_Encoding_DefaultBinary = 449,
+ CloseSecureChannelRequest = 450,
+ CloseSecureChannelRequest_Encoding_DefaultXml = 451,
+ CloseSecureChannelRequest_Encoding_DefaultBinary = 452,
+ CloseSecureChannelResponse = 453,
+ CloseSecureChannelResponse_Encoding_DefaultXml = 454,
+ CloseSecureChannelResponse_Encoding_DefaultBinary = 455,
+ SignatureData = 456,
+ SignatureData_Encoding_DefaultXml = 457,
+ SignatureData_Encoding_DefaultBinary = 458,
+ CreateSessionRequest = 459,
+ CreateSessionRequest_Encoding_DefaultXml = 460,
+ CreateSessionRequest_Encoding_DefaultBinary = 461,
+ CreateSessionResponse = 462,
+ CreateSessionResponse_Encoding_DefaultXml = 463,
+ CreateSessionResponse_Encoding_DefaultBinary = 464,
+ ActivateSessionRequest = 465,
+ ActivateSessionRequest_Encoding_DefaultXml = 466,
+ ActivateSessionRequest_Encoding_DefaultBinary = 467,
+ ActivateSessionResponse = 468,
+ ActivateSessionResponse_Encoding_DefaultXml = 469,
+ ActivateSessionResponse_Encoding_DefaultBinary = 470,
+ CloseSessionRequest = 471,
+ CloseSessionRequest_Encoding_DefaultXml = 472,
+ CloseSessionRequest_Encoding_DefaultBinary = 473,
+ CloseSessionResponse = 474,
+ CloseSessionResponse_Encoding_DefaultXml = 475,
+ CloseSessionResponse_Encoding_DefaultBinary = 476,
+ CancelRequest = 477,
+ CancelRequest_Encoding_DefaultXml = 478,
+ CancelRequest_Encoding_DefaultBinary = 479,
+ CancelResponse = 480,
+ CancelResponse_Encoding_DefaultXml = 481,
+ CancelResponse_Encoding_DefaultBinary = 482,
+ AddNodesResult = 483,
+ AddNodesResult_Encoding_DefaultXml = 484,
+ AddNodesResult_Encoding_DefaultBinary = 485,
+ AddNodesRequest = 486,
+ AddNodesRequest_Encoding_DefaultXml = 487,
+ AddNodesRequest_Encoding_DefaultBinary = 488,
+ AddNodesResponse = 489,
+ AddNodesResponse_Encoding_DefaultXml = 490,
+ AddNodesResponse_Encoding_DefaultBinary = 491,
+ AddReferencesRequest = 492,
+ AddReferencesRequest_Encoding_DefaultXml = 493,
+ AddReferencesRequest_Encoding_DefaultBinary = 494,
+ AddReferencesResponse = 495,
+ AddReferencesResponse_Encoding_DefaultXml = 496,
+ AddReferencesResponse_Encoding_DefaultBinary = 497,
+ DeleteNodesRequest = 498,
+ DeleteNodesRequest_Encoding_DefaultXml = 499,
+ DeleteNodesRequest_Encoding_DefaultBinary = 500,
+ DeleteNodesResponse = 501,
+ DeleteNodesResponse_Encoding_DefaultXml = 502,
+ DeleteNodesResponse_Encoding_DefaultBinary = 503,
+ DeleteReferencesRequest = 504,
+ DeleteReferencesRequest_Encoding_DefaultXml = 505,
+ DeleteReferencesRequest_Encoding_DefaultBinary = 506,
+ DeleteReferencesResponse = 507,
+ DeleteReferencesResponse_Encoding_DefaultXml = 508,
+ DeleteReferencesResponse_Encoding_DefaultBinary = 509,
+ BrowseDirection = 510,
+ ViewDescription = 511,
+ ViewDescription_Encoding_DefaultXml = 512,
+ ViewDescription_Encoding_DefaultBinary = 513,
+ BrowseDescription = 514,
+ BrowseDescription_Encoding_DefaultXml = 515,
+ BrowseDescription_Encoding_DefaultBinary = 516,
+ BrowseResultMask = 517,
+ ReferenceDescription = 518,
+ ReferenceDescription_Encoding_DefaultXml = 519,
+ ReferenceDescription_Encoding_DefaultBinary = 520,
+ ContinuationPoint = 521,
+ BrowseResult = 522,
+ BrowseResult_Encoding_DefaultXml = 523,
+ BrowseResult_Encoding_DefaultBinary = 524,
+ BrowseRequest = 525,
+ BrowseRequest_Encoding_DefaultXml = 526,
+ BrowseRequest_Encoding_DefaultBinary = 527,
+ BrowseResponse = 528,
+ BrowseResponse_Encoding_DefaultXml = 529,
+ BrowseResponse_Encoding_DefaultBinary = 530,
+ BrowseNextRequest = 531,
+ BrowseNextRequest_Encoding_DefaultXml = 532,
+ BrowseNextRequest_Encoding_DefaultBinary = 533,
+ BrowseNextResponse = 534,
+ BrowseNextResponse_Encoding_DefaultXml = 535,
+ BrowseNextResponse_Encoding_DefaultBinary = 536,
+ RelativePathElement = 537,
+ RelativePathElement_Encoding_DefaultXml = 538,
+ RelativePathElement_Encoding_DefaultBinary = 539,
+ RelativePath = 540,
+ RelativePath_Encoding_DefaultXml = 541,
+ RelativePath_Encoding_DefaultBinary = 542,
+ BrowsePath = 543,
+ BrowsePath_Encoding_DefaultXml = 544,
+ BrowsePath_Encoding_DefaultBinary = 545,
+ BrowsePathTarget = 546,
+ BrowsePathTarget_Encoding_DefaultXml = 547,
+ BrowsePathTarget_Encoding_DefaultBinary = 548,
+ BrowsePathResult = 549,
+ BrowsePathResult_Encoding_DefaultXml = 550,
+ BrowsePathResult_Encoding_DefaultBinary = 551,
+ TranslateBrowsePathsToNodeIdsRequest = 552,
+ TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultXml = 553,
+ TranslateBrowsePathsToNodeIdsRequest_Encoding_DefaultBinary = 554,
+ TranslateBrowsePathsToNodeIdsResponse = 555,
+ TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultXml = 556,
+ TranslateBrowsePathsToNodeIdsResponse_Encoding_DefaultBinary = 557,
+ RegisterNodesRequest = 558,
+ RegisterNodesRequest_Encoding_DefaultXml = 559,
+ RegisterNodesRequest_Encoding_DefaultBinary = 560,
+ RegisterNodesResponse = 561,
+ RegisterNodesResponse_Encoding_DefaultXml = 562,
+ RegisterNodesResponse_Encoding_DefaultBinary = 563,
+ UnregisterNodesRequest = 564,
+ UnregisterNodesRequest_Encoding_DefaultXml = 565,
+ UnregisterNodesRequest_Encoding_DefaultBinary = 566,
+ UnregisterNodesResponse = 567,
+ UnregisterNodesResponse_Encoding_DefaultXml = 568,
+ UnregisterNodesResponse_Encoding_DefaultBinary = 569,
+ QueryDataDescription = 570,
+ QueryDataDescription_Encoding_DefaultXml = 571,
+ QueryDataDescription_Encoding_DefaultBinary = 572,
+ NodeTypeDescription = 573,
+ NodeTypeDescription_Encoding_DefaultXml = 574,
+ NodeTypeDescription_Encoding_DefaultBinary = 575,
+ FilterOperator = 576,
+ QueryDataSet = 577,
+ QueryDataSet_Encoding_DefaultXml = 578,
+ QueryDataSet_Encoding_DefaultBinary = 579,
+ NodeReference = 580,
+ NodeReference_Encoding_DefaultXml = 581,
+ NodeReference_Encoding_DefaultBinary = 582,
+ ContentFilterElement = 583,
+ ContentFilterElement_Encoding_DefaultXml = 584,
+ ContentFilterElement_Encoding_DefaultBinary = 585,
+ ContentFilter = 586,
+ ContentFilter_Encoding_DefaultXml = 587,
+ ContentFilter_Encoding_DefaultBinary = 588,
+ FilterOperand = 589,
+ FilterOperand_Encoding_DefaultXml = 590,
+ FilterOperand_Encoding_DefaultBinary = 591,
+ ElementOperand = 592,
+ ElementOperand_Encoding_DefaultXml = 593,
+ ElementOperand_Encoding_DefaultBinary = 594,
+ LiteralOperand = 595,
+ LiteralOperand_Encoding_DefaultXml = 596,
+ LiteralOperand_Encoding_DefaultBinary = 597,
+ AttributeOperand = 598,
+ AttributeOperand_Encoding_DefaultXml = 599,
+ AttributeOperand_Encoding_DefaultBinary = 600,
+ SimpleAttributeOperand = 601,
+ SimpleAttributeOperand_Encoding_DefaultXml = 602,
+ SimpleAttributeOperand_Encoding_DefaultBinary = 603,
+ ContentFilterElementResult = 604,
+ ContentFilterElementResult_Encoding_DefaultXml = 605,
+ ContentFilterElementResult_Encoding_DefaultBinary = 606,
+ ContentFilterResult = 607,
+ ContentFilterResult_Encoding_DefaultXml = 608,
+ ContentFilterResult_Encoding_DefaultBinary = 609,
+ ParsingResult = 610,
+ ParsingResult_Encoding_DefaultXml = 611,
+ ParsingResult_Encoding_DefaultBinary = 612,
+ QueryFirstRequest = 613,
+ QueryFirstRequest_Encoding_DefaultXml = 614,
+ QueryFirstRequest_Encoding_DefaultBinary = 615,
+ QueryFirstResponse = 616,
+ QueryFirstResponse_Encoding_DefaultXml = 617,
+ QueryFirstResponse_Encoding_DefaultBinary = 618,
+ QueryNextRequest = 619,
+ QueryNextRequest_Encoding_DefaultXml = 620,
+ QueryNextRequest_Encoding_DefaultBinary = 621,
+ QueryNextResponse = 622,
+ QueryNextResponse_Encoding_DefaultXml = 623,
+ QueryNextResponse_Encoding_DefaultBinary = 624,
+ TimestampsToReturn = 625,
+ ReadValueId = 626,
+ ReadValueId_Encoding_DefaultXml = 627,
+ ReadValueId_Encoding_DefaultBinary = 628,
+ ReadRequest = 629,
+ ReadRequest_Encoding_DefaultXml = 630,
+ ReadRequest_Encoding_DefaultBinary = 631,
+ ReadResponse = 632,
+ ReadResponse_Encoding_DefaultXml = 633,
+ ReadResponse_Encoding_DefaultBinary = 634,
+ HistoryReadValueId = 635,
+ HistoryReadValueId_Encoding_DefaultXml = 636,
+ HistoryReadValueId_Encoding_DefaultBinary = 637,
+ HistoryReadResult = 638,
+ HistoryReadResult_Encoding_DefaultXml = 639,
+ HistoryReadResult_Encoding_DefaultBinary = 640,
+ HistoryReadDetails = 641,
+ HistoryReadDetails_Encoding_DefaultXml = 642,
+ HistoryReadDetails_Encoding_DefaultBinary = 643,
+ ReadEventDetails = 644,
+ ReadEventDetails_Encoding_DefaultXml = 645,
+ ReadEventDetails_Encoding_DefaultBinary = 646,
+ ReadRawModifiedDetails = 647,
+ ReadRawModifiedDetails_Encoding_DefaultXml = 648,
+ ReadRawModifiedDetails_Encoding_DefaultBinary = 649,
+ ReadProcessedDetails = 650,
+ ReadProcessedDetails_Encoding_DefaultXml = 651,
+ ReadProcessedDetails_Encoding_DefaultBinary = 652,
+ ReadAtTimeDetails = 653,
+ ReadAtTimeDetails_Encoding_DefaultXml = 654,
+ ReadAtTimeDetails_Encoding_DefaultBinary = 655,
+ HistoryData = 656,
+ HistoryData_Encoding_DefaultXml = 657,
+ HistoryData_Encoding_DefaultBinary = 658,
+ HistoryEvent = 659,
+ HistoryEvent_Encoding_DefaultXml = 660,
+ HistoryEvent_Encoding_DefaultBinary = 661,
+ HistoryReadRequest = 662,
+ HistoryReadRequest_Encoding_DefaultXml = 663,
+ HistoryReadRequest_Encoding_DefaultBinary = 664,
+ HistoryReadResponse = 665,
+ HistoryReadResponse_Encoding_DefaultXml = 666,
+ HistoryReadResponse_Encoding_DefaultBinary = 667,
+ WriteValue = 668,
+ WriteValue_Encoding_DefaultXml = 669,
+ WriteValue_Encoding_DefaultBinary = 670,
+ WriteRequest = 671,
+ WriteRequest_Encoding_DefaultXml = 672,
+ WriteRequest_Encoding_DefaultBinary = 673,
+ WriteResponse = 674,
+ WriteResponse_Encoding_DefaultXml = 675,
+ WriteResponse_Encoding_DefaultBinary = 676,
+ HistoryUpdateDetails = 677,
+ HistoryUpdateDetails_Encoding_DefaultXml = 678,
+ HistoryUpdateDetails_Encoding_DefaultBinary = 679,
+ UpdateDataDetails = 680,
+ UpdateDataDetails_Encoding_DefaultXml = 681,
+ UpdateDataDetails_Encoding_DefaultBinary = 682,
+ UpdateEventDetails = 683,
+ UpdateEventDetails_Encoding_DefaultXml = 684,
+ UpdateEventDetails_Encoding_DefaultBinary = 685,
+ DeleteRawModifiedDetails = 686,
+ DeleteRawModifiedDetails_Encoding_DefaultXml = 687,
+ DeleteRawModifiedDetails_Encoding_DefaultBinary = 688,
+ DeleteAtTimeDetails = 689,
+ DeleteAtTimeDetails_Encoding_DefaultXml = 690,
+ DeleteAtTimeDetails_Encoding_DefaultBinary = 691,
+ DeleteEventDetails = 692,
+ DeleteEventDetails_Encoding_DefaultXml = 693,
+ DeleteEventDetails_Encoding_DefaultBinary = 694,
+ HistoryUpdateResult = 695,
+ HistoryUpdateResult_Encoding_DefaultXml = 696,
+ HistoryUpdateResult_Encoding_DefaultBinary = 697,
+ HistoryUpdateRequest = 698,
+ HistoryUpdateRequest_Encoding_DefaultXml = 699,
+ HistoryUpdateRequest_Encoding_DefaultBinary = 700,
+ HistoryUpdateResponse = 701,
+ HistoryUpdateResponse_Encoding_DefaultXml = 702,
+ HistoryUpdateResponse_Encoding_DefaultBinary = 703,
+ CallMethodRequest = 704,
+ CallMethodRequest_Encoding_DefaultXml = 705,
+ CallMethodRequest_Encoding_DefaultBinary = 706,
+ CallMethodResult = 707,
+ CallMethodResult_Encoding_DefaultXml = 708,
+ CallMethodResult_Encoding_DefaultBinary = 709,
+ CallRequest = 710,
+ CallRequest_Encoding_DefaultXml = 711,
+ CallRequest_Encoding_DefaultBinary = 712,
+ CallResponse = 713,
+ CallResponse_Encoding_DefaultXml = 714,
+ CallResponse_Encoding_DefaultBinary = 715,
+ MonitoringMode = 716,
+ DataChangeTrigger = 717,
+ DeadbandType = 718,
+ MonitoringFilter = 719,
+ MonitoringFilter_Encoding_DefaultXml = 720,
+ MonitoringFilter_Encoding_DefaultBinary = 721,
+ DataChangeFilter = 722,
+ DataChangeFilter_Encoding_DefaultXml = 723,
+ DataChangeFilter_Encoding_DefaultBinary = 724,
+ EventFilter = 725,
+ EventFilter_Encoding_DefaultXml = 726,
+ EventFilter_Encoding_DefaultBinary = 727,
+ AggregateFilter = 728,
+ AggregateFilter_Encoding_DefaultXml = 729,
+ AggregateFilter_Encoding_DefaultBinary = 730,
+ MonitoringFilterResult = 731,
+ MonitoringFilterResult_Encoding_DefaultXml = 732,
+ MonitoringFilterResult_Encoding_DefaultBinary = 733,
+ EventFilterResult = 734,
+ EventFilterResult_Encoding_DefaultXml = 735,
+ EventFilterResult_Encoding_DefaultBinary = 736,
+ AggregateFilterResult = 737,
+ AggregateFilterResult_Encoding_DefaultXml = 738,
+ AggregateFilterResult_Encoding_DefaultBinary = 739,
+ MonitoringParameters = 740,
+ MonitoringParameters_Encoding_DefaultXml = 741,
+ MonitoringParameters_Encoding_DefaultBinary = 742,
+ MonitoredItemCreateRequest = 743,
+ MonitoredItemCreateRequest_Encoding_DefaultXml = 744,
+ MonitoredItemCreateRequest_Encoding_DefaultBinary = 745,
+ MonitoredItemCreateResult = 746,
+ MonitoredItemCreateResult_Encoding_DefaultXml = 747,
+ MonitoredItemCreateResult_Encoding_DefaultBinary = 748,
+ CreateMonitoredItemsRequest = 749,
+ CreateMonitoredItemsRequest_Encoding_DefaultXml = 750,
+ CreateMonitoredItemsRequest_Encoding_DefaultBinary = 751,
+ CreateMonitoredItemsResponse = 752,
+ CreateMonitoredItemsResponse_Encoding_DefaultXml = 753,
+ CreateMonitoredItemsResponse_Encoding_DefaultBinary = 754,
+ MonitoredItemModifyRequest = 755,
+ MonitoredItemModifyRequest_Encoding_DefaultXml = 756,
+ MonitoredItemModifyRequest_Encoding_DefaultBinary = 757,
+ MonitoredItemModifyResult = 758,
+ MonitoredItemModifyResult_Encoding_DefaultXml = 759,
+ MonitoredItemModifyResult_Encoding_DefaultBinary = 760,
+ ModifyMonitoredItemsRequest = 761,
+ ModifyMonitoredItemsRequest_Encoding_DefaultXml = 762,
+ ModifyMonitoredItemsRequest_Encoding_DefaultBinary = 763,
+ ModifyMonitoredItemsResponse = 764,
+ ModifyMonitoredItemsResponse_Encoding_DefaultXml = 765,
+ ModifyMonitoredItemsResponse_Encoding_DefaultBinary = 766,
+ SetMonitoringModeRequest = 767,
+ SetMonitoringModeRequest_Encoding_DefaultXml = 768,
+ SetMonitoringModeRequest_Encoding_DefaultBinary = 769,
+ SetMonitoringModeResponse = 770,
+ SetMonitoringModeResponse_Encoding_DefaultXml = 771,
+ SetMonitoringModeResponse_Encoding_DefaultBinary = 772,
+ SetTriggeringRequest = 773,
+ SetTriggeringRequest_Encoding_DefaultXml = 774,
+ SetTriggeringRequest_Encoding_DefaultBinary = 775,
+ SetTriggeringResponse = 776,
+ SetTriggeringResponse_Encoding_DefaultXml = 777,
+ SetTriggeringResponse_Encoding_DefaultBinary = 778,
+ DeleteMonitoredItemsRequest = 779,
+ DeleteMonitoredItemsRequest_Encoding_DefaultXml = 780,
+ DeleteMonitoredItemsRequest_Encoding_DefaultBinary = 781,
+ DeleteMonitoredItemsResponse = 782,
+ DeleteMonitoredItemsResponse_Encoding_DefaultXml = 783,
+ DeleteMonitoredItemsResponse_Encoding_DefaultBinary = 784,
+ CreateSubscriptionRequest = 785,
+ CreateSubscriptionRequest_Encoding_DefaultXml = 786,
+ CreateSubscriptionRequest_Encoding_DefaultBinary = 787,
+ CreateSubscriptionResponse = 788,
+ CreateSubscriptionResponse_Encoding_DefaultXml = 789,
+ CreateSubscriptionResponse_Encoding_DefaultBinary = 790,
+ ModifySubscriptionRequest = 791,
+ ModifySubscriptionRequest_Encoding_DefaultXml = 792,
+ ModifySubscriptionRequest_Encoding_DefaultBinary = 793,
+ ModifySubscriptionResponse = 794,
+ ModifySubscriptionResponse_Encoding_DefaultXml = 795,
+ ModifySubscriptionResponse_Encoding_DefaultBinary = 796,
+ SetPublishingModeRequest = 797,
+ SetPublishingModeRequest_Encoding_DefaultXml = 798,
+ SetPublishingModeRequest_Encoding_DefaultBinary = 799,
+ SetPublishingModeResponse = 800,
+ SetPublishingModeResponse_Encoding_DefaultXml = 801,
+ SetPublishingModeResponse_Encoding_DefaultBinary = 802,
+ NotificationMessage = 803,
+ NotificationMessage_Encoding_DefaultXml = 804,
+ NotificationMessage_Encoding_DefaultBinary = 805,
+ MonitoredItemNotification = 806,
+ MonitoredItemNotification_Encoding_DefaultXml = 807,
+ MonitoredItemNotification_Encoding_DefaultBinary = 808,
+ DataChangeNotification = 809,
+ DataChangeNotification_Encoding_DefaultXml = 810,
+ DataChangeNotification_Encoding_DefaultBinary = 811,
+ StatusChangeNotification = 818,
+ StatusChangeNotification_Encoding_DefaultXml = 819,
+ StatusChangeNotification_Encoding_DefaultBinary = 820,
+ SubscriptionAcknowledgement = 821,
+ SubscriptionAcknowledgement_Encoding_DefaultXml = 822,
+ SubscriptionAcknowledgement_Encoding_DefaultBinary = 823,
+ PublishRequest = 824,
+ PublishRequest_Encoding_DefaultXml = 825,
+ PublishRequest_Encoding_DefaultBinary = 826,
+ PublishResponse = 827,
+ PublishResponse_Encoding_DefaultXml = 828,
+ PublishResponse_Encoding_DefaultBinary = 829,
+ RepublishRequest = 830,
+ RepublishRequest_Encoding_DefaultXml = 831,
+ RepublishRequest_Encoding_DefaultBinary = 832,
+ RepublishResponse = 833,
+ RepublishResponse_Encoding_DefaultXml = 834,
+ RepublishResponse_Encoding_DefaultBinary = 835,
+ TransferResult = 836,
+ TransferResult_Encoding_DefaultXml = 837,
+ TransferResult_Encoding_DefaultBinary = 838,
+ TransferSubscriptionsRequest = 839,
+ TransferSubscriptionsRequest_Encoding_DefaultXml = 840,
+ TransferSubscriptionsRequest_Encoding_DefaultBinary = 841,
+ TransferSubscriptionsResponse = 842,
+ TransferSubscriptionsResponse_Encoding_DefaultXml = 843,
+ TransferSubscriptionsResponse_Encoding_DefaultBinary = 844,
+ DeleteSubscriptionsRequest = 845,
+ DeleteSubscriptionsRequest_Encoding_DefaultXml = 846,
+ DeleteSubscriptionsRequest_Encoding_DefaultBinary = 847,
+ DeleteSubscriptionsResponse = 848,
+ DeleteSubscriptionsResponse_Encoding_DefaultXml = 849,
+ DeleteSubscriptionsResponse_Encoding_DefaultBinary = 850,
+ RedundancySupport = 851,
+ ServerState = 852,
+ RedundantServerDataType = 853,
+ RedundantServerDataType_Encoding_DefaultXml = 854,
+ RedundantServerDataType_Encoding_DefaultBinary = 855,
+ SamplingIntervalDiagnosticsDataType = 856,
+ SamplingIntervalDiagnosticsDataType_Encoding_DefaultXml = 857,
+ SamplingIntervalDiagnosticsDataType_Encoding_DefaultBinary = 858,
+ ServerDiagnosticsSummaryDataType = 859,
+ ServerDiagnosticsSummaryDataType_Encoding_DefaultXml = 860,
+ ServerDiagnosticsSummaryDataType_Encoding_DefaultBinary = 861,
+ ServerStatusDataType = 862,
+ ServerStatusDataType_Encoding_DefaultXml = 863,
+ ServerStatusDataType_Encoding_DefaultBinary = 864,
+ SessionDiagnosticsDataType = 865,
+ SessionDiagnosticsDataType_Encoding_DefaultXml = 866,
+ SessionDiagnosticsDataType_Encoding_DefaultBinary = 867,
+ SessionSecurityDiagnosticsDataType = 868,
+ SessionSecurityDiagnosticsDataType_Encoding_DefaultXml = 869,
+ SessionSecurityDiagnosticsDataType_Encoding_DefaultBinary = 870,
+ ServiceCounterDataType = 871,
+ ServiceCounterDataType_Encoding_DefaultXml = 872,
+ ServiceCounterDataType_Encoding_DefaultBinary = 873,
+ SubscriptionDiagnosticsDataType = 874,
+ SubscriptionDiagnosticsDataType_Encoding_DefaultXml = 875,
+ SubscriptionDiagnosticsDataType_Encoding_DefaultBinary = 876,
+ ModelChangeStructureDataType = 877,
+ ModelChangeStructureDataType_Encoding_DefaultXml = 878,
+ ModelChangeStructureDataType_Encoding_DefaultBinary = 879,
+ Range = 884,
+ Range_Encoding_DefaultXml = 885,
+ Range_Encoding_DefaultBinary = 886,
+ EUInformation = 887,
+ EUInformation_Encoding_DefaultXml = 888,
+ EUInformation_Encoding_DefaultBinary = 889,
+ ExceptionDeviationFormat = 890,
+ Annotation = 891,
+ Annotation_Encoding_DefaultXml = 892,
+ Annotation_Encoding_DefaultBinary = 893,
+ ProgramDiagnosticDataType = 894,
+ ProgramDiagnosticDataType_Encoding_DefaultXml = 895,
+ ProgramDiagnosticDataType_Encoding_DefaultBinary = 896,
+ SemanticChangeStructureDataType = 897,
+ SemanticChangeStructureDataType_Encoding_DefaultXml = 898,
+ SemanticChangeStructureDataType_Encoding_DefaultBinary = 899,
+ EventNotificationList = 914,
+ EventNotificationList_Encoding_DefaultXml = 915,
+ EventNotificationList_Encoding_DefaultBinary = 916,
+ EventFieldList = 917,
+ EventFieldList_Encoding_DefaultXml = 918,
+ EventFieldList_Encoding_DefaultBinary = 919,
+ HistoryEventFieldList = 920,
+ HistoryEventFieldList_Encoding_DefaultXml = 921,
+ HistoryEventFieldList_Encoding_DefaultBinary = 922,
+ IssuedIdentityToken = 938,
+ IssuedIdentityToken_Encoding_DefaultXml = 939,
+ IssuedIdentityToken_Encoding_DefaultBinary = 940,
+ NotificationData = 945,
+ NotificationData_Encoding_DefaultXml = 946,
+ NotificationData_Encoding_DefaultBinary = 947,
+ AggregateConfiguration = 948,
+ AggregateConfiguration_Encoding_DefaultXml = 949,
+ AggregateConfiguration_Encoding_DefaultBinary = 950,
+ ImageBMP = 2000,
+ ImageGIF = 2001,
+ ImageJPG = 2002,
+ ImagePNG = 2003,
+ ServerType = 2004,
+ ServerType_ServerArray = 2005,
+ ServerType_NamespaceArray = 2006,
+ ServerType_ServerStatus = 2007,
+ ServerType_ServiceLevel = 2008,
+ ServerType_ServerCapabilities = 2009,
+ ServerType_ServerDiagnostics = 2010,
+ ServerType_VendorServerInfo = 2011,
+ ServerType_ServerRedundancy = 2012,
+ ServerCapabilitiesType = 2013,
+ ServerCapabilitiesType_ServerProfileArray = 2014,
+ ServerCapabilitiesType_LocaleIdArray = 2016,
+ ServerCapabilitiesType_MinSupportedSampleRate = 2017,
+ ServerCapabilitiesType_ModellingRules = 2019,
+ ServerDiagnosticsType = 2020,
+ ServerDiagnosticsType_ServerDiagnosticsSummary = 2021,
+ ServerDiagnosticsType_SamplingIntervalDiagnosticsArray = 2022,
+ ServerDiagnosticsType_SubscriptionDiagnosticsArray = 2023,
+ ServerDiagnosticsType_EnabledFlag = 2025,
+ SessionsDiagnosticsSummaryType = 2026,
+ SessionsDiagnosticsSummaryType_SessionDiagnosticsArray = 2027,
+ SessionsDiagnosticsSummaryType_SessionSecurityDiagnosticsArray = 2028,
+ SessionDiagnosticsObjectType = 2029,
+ SessionDiagnosticsObjectType_SessionDiagnostics = 2030,
+ SessionDiagnosticsObjectType_SessionSecurityDiagnostics = 2031,
+ SessionDiagnosticsObjectType_SubscriptionDiagnosticsArray = 2032,
+ VendorServerInfoType = 2033,
+ ServerRedundancyType = 2034,
+ ServerRedundancyType_RedundancySupport = 2035,
+ TransparentRedundancyType = 2036,
+ TransparentRedundancyType_CurrentServerId = 2037,
+ TransparentRedundancyType_RedundantServerArray = 2038,
+ NonTransparentRedundancyType = 2039,
+ NonTransparentRedundancyType_ServerUriArray = 2040,
+ BaseEventType = 2041,
+ BaseEventType_EventId = 2042,
+ BaseEventType_EventType = 2043,
+ BaseEventType_SourceNode = 2044,
+ BaseEventType_SourceName = 2045,
+ BaseEventType_Time = 2046,
+ BaseEventType_ReceiveTime = 2047,
+ BaseEventType_Message = 2050,
+ BaseEventType_Severity = 2051,
+ AuditEventType = 2052,
+ AuditEventType_ActionTimeStamp = 2053,
+ AuditEventType_Status = 2054,
+ AuditEventType_ServerId = 2055,
+ AuditEventType_ClientAuditEntryId = 2056,
+ AuditEventType_ClientUserId = 2057,
+ AuditSecurityEventType = 2058,
+ AuditChannelEventType = 2059,
+ AuditOpenSecureChannelEventType = 2060,
+ AuditOpenSecureChannelEventType_ClientCertificate = 2061,
+ AuditOpenSecureChannelEventType_RequestType = 2062,
+ AuditOpenSecureChannelEventType_SecurityPolicyUri = 2063,
+ AuditOpenSecureChannelEventType_SecurityMode = 2065,
+ AuditOpenSecureChannelEventType_RequestedLifetime = 2066,
+ AuditSessionEventType = 2069,
+ AuditSessionEventType_SessionId = 2070,
+ AuditCreateSessionEventType = 2071,
+ AuditCreateSessionEventType_SecureChannelId = 2072,
+ AuditCreateSessionEventType_ClientCertificate = 2073,
+ AuditCreateSessionEventType_RevisedSessionTimeout = 2074,
+ AuditActivateSessionEventType = 2075,
+ AuditActivateSessionEventType_ClientSoftwareCertificates = 2076,
+ AuditActivateSessionEventType_UserIdentityToken = 2077,
+ AuditCancelEventType = 2078,
+ AuditCancelEventType_RequestHandle = 2079,
+ AuditCertificateEventType = 2080,
+ AuditCertificateEventType_Certificate = 2081,
+ AuditCertificateDataMismatchEventType = 2082,
+ AuditCertificateDataMismatchEventType_InvalidHostname = 2083,
+ AuditCertificateDataMismatchEventType_InvalidUri = 2084,
+ AuditCertificateExpiredEventType = 2085,
+ AuditCertificateInvalidEventType = 2086,
+ AuditCertificateUntrustedEventType = 2087,
+ AuditCertificateRevokedEventType = 2088,
+ AuditCertificateMismatchEventType = 2089,
+ AuditNodeManagementEventType = 2090,
+ AuditAddNodesEventType = 2091,
+ AuditAddNodesEventType_NodesToAdd = 2092,
+ AuditDeleteNodesEventType = 2093,
+ AuditDeleteNodesEventType_NodesToDelete = 2094,
+ AuditAddReferencesEventType = 2095,
+ AuditAddReferencesEventType_ReferencesToAdd = 2096,
+ AuditDeleteReferencesEventType = 2097,
+ AuditDeleteReferencesEventType_ReferencesToDelete = 2098,
+ AuditUpdateEventType = 2099,
+ AuditWriteUpdateEventType = 2100,
+ AuditWriteUpdateEventType_IndexRange = 2101,
+ AuditWriteUpdateEventType_OldValue = 2102,
+ AuditWriteUpdateEventType_NewValue = 2103,
+ AuditHistoryUpdateEventType = 2104,
+ AuditUpdateMethodEventType = 2127,
+ AuditUpdateMethodEventType_MethodId = 2128,
+ AuditUpdateMethodEventType_InputArguments = 2129,
+ SystemEventType = 2130,
+ DeviceFailureEventType = 2131,
+ BaseModelChangeEventType = 2132,
+ GeneralModelChangeEventType = 2133,
+ GeneralModelChangeEventType_Changes = 2134,
+ ServerVendorCapabilityType = 2137,
+ ServerStatusType = 2138,
+ ServerStatusType_StartTime = 2139,
+ ServerStatusType_CurrentTime = 2140,
+ ServerStatusType_State = 2141,
+ ServerStatusType_BuildInfo = 2142,
+ ServerDiagnosticsSummaryType = 2150,
+ ServerDiagnosticsSummaryType_ServerViewCount = 2151,
+ ServerDiagnosticsSummaryType_CurrentSessionCount = 2152,
+ ServerDiagnosticsSummaryType_CumulatedSessionCount = 2153,
+ ServerDiagnosticsSummaryType_SecurityRejectedSessionCount = 2154,
+ ServerDiagnosticsSummaryType_RejectedSessionCount = 2155,
+ ServerDiagnosticsSummaryType_SessionTimeoutCount = 2156,
+ ServerDiagnosticsSummaryType_SessionAbortCount = 2157,
+ ServerDiagnosticsSummaryType_PublishingIntervalCount = 2159,
+ ServerDiagnosticsSummaryType_CurrentSubscriptionCount = 2160,
+ ServerDiagnosticsSummaryType_CumulatedSubscriptionCount = 2161,
+ ServerDiagnosticsSummaryType_SecurityRejectedRequestsCount = 2162,
+ ServerDiagnosticsSummaryType_RejectedRequestsCount = 2163,
+ SamplingIntervalDiagnosticsArrayType = 2164,
+ SamplingIntervalDiagnosticsType = 2165,
+ SamplingIntervalDiagnosticsType_SamplingInterval = 2166,
+ SubscriptionDiagnosticsArrayType = 2171,
+ SubscriptionDiagnosticsType = 2172,
+ SubscriptionDiagnosticsType_SessionId = 2173,
+ SubscriptionDiagnosticsType_SubscriptionId = 2174,
+ SubscriptionDiagnosticsType_Priority = 2175,
+ SubscriptionDiagnosticsType_PublishingInterval = 2176,
+ SubscriptionDiagnosticsType_MaxKeepAliveCount = 2177,
+ SubscriptionDiagnosticsType_MaxNotificationsPerPublish = 2179,
+ SubscriptionDiagnosticsType_PublishingEnabled = 2180,
+ SubscriptionDiagnosticsType_ModifyCount = 2181,
+ SubscriptionDiagnosticsType_EnableCount = 2182,
+ SubscriptionDiagnosticsType_DisableCount = 2183,
+ SubscriptionDiagnosticsType_RepublishRequestCount = 2184,
+ SubscriptionDiagnosticsType_RepublishMessageRequestCount = 2185,
+ SubscriptionDiagnosticsType_RepublishMessageCount = 2186,
+ SubscriptionDiagnosticsType_TransferRequestCount = 2187,
+ SubscriptionDiagnosticsType_TransferredToAltClientCount = 2188,
+ SubscriptionDiagnosticsType_TransferredToSameClientCount = 2189,
+ SubscriptionDiagnosticsType_PublishRequestCount = 2190,
+ SubscriptionDiagnosticsType_DataChangeNotificationsCount = 2191,
+ SubscriptionDiagnosticsType_NotificationsCount = 2193,
+ SessionDiagnosticsArrayType = 2196,
+ SessionDiagnosticsVariableType = 2197,
+ SessionDiagnosticsVariableType_SessionId = 2198,
+ SessionDiagnosticsVariableType_SessionName = 2199,
+ SessionDiagnosticsVariableType_ClientDescription = 2200,
+ SessionDiagnosticsVariableType_ServerUri = 2201,
+ SessionDiagnosticsVariableType_EndpointUrl = 2202,
+ SessionDiagnosticsVariableType_LocaleIds = 2203,
+ SessionDiagnosticsVariableType_ActualSessionTimeout = 2204,
+ SessionDiagnosticsVariableType_ClientConnectionTime = 2205,
+ SessionDiagnosticsVariableType_ClientLastContactTime = 2206,
+ SessionDiagnosticsVariableType_CurrentSubscriptionsCount = 2207,
+ SessionDiagnosticsVariableType_CurrentMonitoredItemsCount = 2208,
+ SessionDiagnosticsVariableType_CurrentPublishRequestsInQueue = 2209,
+ SessionDiagnosticsVariableType_ReadCount = 2217,
+ SessionDiagnosticsVariableType_HistoryReadCount = 2218,
+ SessionDiagnosticsVariableType_WriteCount = 2219,
+ SessionDiagnosticsVariableType_HistoryUpdateCount = 2220,
+ SessionDiagnosticsVariableType_CallCount = 2221,
+ SessionDiagnosticsVariableType_CreateMonitoredItemsCount = 2222,
+ SessionDiagnosticsVariableType_ModifyMonitoredItemsCount = 2223,
+ SessionDiagnosticsVariableType_SetMonitoringModeCount = 2224,
+ SessionDiagnosticsVariableType_SetTriggeringCount = 2225,
+ SessionDiagnosticsVariableType_DeleteMonitoredItemsCount = 2226,
+ SessionDiagnosticsVariableType_CreateSubscriptionCount = 2227,
+ SessionDiagnosticsVariableType_ModifySubscriptionCount = 2228,
+ SessionDiagnosticsVariableType_SetPublishingModeCount = 2229,
+ SessionDiagnosticsVariableType_PublishCount = 2230,
+ SessionDiagnosticsVariableType_RepublishCount = 2231,
+ SessionDiagnosticsVariableType_TransferSubscriptionsCount = 2232,
+ SessionDiagnosticsVariableType_DeleteSubscriptionsCount = 2233,
+ SessionDiagnosticsVariableType_AddNodesCount = 2234,
+ SessionDiagnosticsVariableType_AddReferencesCount = 2235,
+ SessionDiagnosticsVariableType_DeleteNodesCount = 2236,
+ SessionDiagnosticsVariableType_DeleteReferencesCount = 2237,
+ SessionDiagnosticsVariableType_BrowseCount = 2238,
+ SessionDiagnosticsVariableType_BrowseNextCount = 2239,
+ SessionDiagnosticsVariableType_TranslateBrowsePathsToNodeIdsCount = 2240,
+ SessionDiagnosticsVariableType_QueryFirstCount = 2241,
+ SessionDiagnosticsVariableType_QueryNextCount = 2242,
+ SessionSecurityDiagnosticsArrayType = 2243,
+ SessionSecurityDiagnosticsType = 2244,
+ SessionSecurityDiagnosticsType_SessionId = 2245,
+ SessionSecurityDiagnosticsType_ClientUserIdOfSession = 2246,
+ SessionSecurityDiagnosticsType_ClientUserIdHistory = 2247,
+ SessionSecurityDiagnosticsType_AuthenticationMechanism = 2248,
+ SessionSecurityDiagnosticsType_Encoding = 2249,
+ SessionSecurityDiagnosticsType_TransportProtocol = 2250,
+ SessionSecurityDiagnosticsType_SecurityMode = 2251,
+ SessionSecurityDiagnosticsType_SecurityPolicyUri = 2252,
+ Server = 2253,
+ Server_ServerArray = 2254,
+ Server_NamespaceArray = 2255,
+ Server_ServerStatus = 2256,
+ Server_ServerStatus_StartTime = 2257,
+ Server_ServerStatus_CurrentTime = 2258,
+ Server_ServerStatus_State = 2259,
+ Server_ServerStatus_BuildInfo = 2260,
+ Server_ServerStatus_BuildInfo_ProductName = 2261,
+ Server_ServerStatus_BuildInfo_ProductUri = 2262,
+ Server_ServerStatus_BuildInfo_ManufacturerName = 2263,
+ Server_ServerStatus_BuildInfo_SoftwareVersion = 2264,
+ Server_ServerStatus_BuildInfo_BuildNumber = 2265,
+ Server_ServerStatus_BuildInfo_BuildDate = 2266,
+ Server_ServiceLevel = 2267,
+ Server_ServerCapabilities = 2268,
+ Server_ServerCapabilities_ServerProfileArray = 2269,
+ Server_ServerCapabilities_LocaleIdArray = 2271,
+ Server_ServerCapabilities_MinSupportedSampleRate = 2272,
+ Server_ServerDiagnostics = 2274,
+ Server_ServerDiagnostics_ServerDiagnosticsSummary = 2275,
+ Server_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = 2276,
+ Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = 2277,
+ Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = 2278,
+ Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = 2279,
+ Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = 2281,
+ Server_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = 2282,
+ Server_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = 2284,
+ Server_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = 2285,
+ Server_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = 2286,
+ Server_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = 2287,
+ Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = 2288,
+ Server_ServerDiagnostics_SamplingIntervalDiagnosticsArray = 2289,
+ Server_ServerDiagnostics_SubscriptionDiagnosticsArray = 2290,
+ Server_ServerDiagnostics_EnabledFlag = 2294,
+ Server_VendorServerInfo = 2295,
+ Server_ServerRedundancy = 2296,
+ StateMachineType = 2299,
+ StateType = 2307,
+ StateType_StateNumber = 2308,
+ InitialStateType = 2309,
+ TransitionType = 2310,
+ TransitionEventType = 2311,
+ TransitionType_TransitionNumber = 2312,
+ AuditUpdateStateEventType = 2315,
+ HistoricalDataConfigurationType = 2318,
+ HistoricalDataConfigurationType_Stepped = 2323,
+ HistoricalDataConfigurationType_Definition = 2324,
+ HistoricalDataConfigurationType_MaxTimeInterval = 2325,
+ HistoricalDataConfigurationType_MinTimeInterval = 2326,
+ HistoricalDataConfigurationType_ExceptionDeviation = 2327,
+ HistoricalDataConfigurationType_ExceptionDeviationFormat = 2328,
+ HistoryServerCapabilitiesType = 2330,
+ HistoryServerCapabilitiesType_AccessHistoryDataCapability = 2331,
+ HistoryServerCapabilitiesType_AccessHistoryEventsCapability = 2332,
+ HistoryServerCapabilitiesType_InsertDataCapability = 2334,
+ HistoryServerCapabilitiesType_ReplaceDataCapability = 2335,
+ HistoryServerCapabilitiesType_UpdateDataCapability = 2336,
+ HistoryServerCapabilitiesType_DeleteRawCapability = 2337,
+ HistoryServerCapabilitiesType_DeleteAtTimeCapability = 2338,
+ AggregateFunctionType = 2340,
+ AggregateFunction_Interpolative = 2341,
+ AggregateFunction_Average = 2342,
+ AggregateFunction_TimeAverage = 2343,
+ AggregateFunction_Total = 2344,
+ AggregateFunction_Minimum = 2346,
+ AggregateFunction_Maximum = 2347,
+ AggregateFunction_MinimumActualTime = 2348,
+ AggregateFunction_MaximumActualTime = 2349,
+ AggregateFunction_Range = 2350,
+ AggregateFunction_AnnotationCount = 2351,
+ AggregateFunction_Count = 2352,
+ AggregateFunction_NumberOfTransitions = 2355,
+ AggregateFunction_Start = 2357,
+ AggregateFunction_End = 2358,
+ AggregateFunction_Delta = 2359,
+ AggregateFunction_DurationGood = 2360,
+ AggregateFunction_DurationBad = 2361,
+ AggregateFunction_PercentGood = 2362,
+ AggregateFunction_PercentBad = 2363,
+ AggregateFunction_WorstQuality = 2364,
+ DataItemType = 2365,
+ DataItemType_Definition = 2366,
+ DataItemType_ValuePrecision = 2367,
+ AnalogItemType = 2368,
+ AnalogItemType_EURange = 2369,
+ AnalogItemType_InstrumentRange = 2370,
+ AnalogItemType_EngineeringUnits = 2371,
+ DiscreteItemType = 2372,
+ TwoStateDiscreteType = 2373,
+ TwoStateDiscreteType_FalseState = 2374,
+ TwoStateDiscreteType_TrueState = 2375,
+ MultiStateDiscreteType = 2376,
+ MultiStateDiscreteType_EnumStrings = 2377,
+ ProgramTransitionEventType = 2378,
+ ProgramTransitionEventType_IntermediateResult = 2379,
+ ProgramDiagnosticType = 2380,
+ ProgramDiagnosticType_CreateSessionId = 2381,
+ ProgramDiagnosticType_CreateClientName = 2382,
+ ProgramDiagnosticType_InvocationCreationTime = 2383,
+ ProgramDiagnosticType_LastTransitionTime = 2384,
+ ProgramDiagnosticType_LastMethodCall = 2385,
+ ProgramDiagnosticType_LastMethodSessionId = 2386,
+ ProgramDiagnosticType_LastMethodInputArguments = 2387,
+ ProgramDiagnosticType_LastMethodOutputArguments = 2388,
+ ProgramDiagnosticType_LastMethodCallTime = 2389,
+ ProgramDiagnosticType_LastMethodReturnStatus = 2390,
+ ProgramStateMachineType = 2391,
+ ProgramStateMachineType_Creatable = 2392,
+ ProgramStateMachineType_Deletable = 2393,
+ ProgramStateMachineType_AutoDelete = 2394,
+ ProgramStateMachineType_RecycleCount = 2395,
+ ProgramStateMachineType_InstanceCount = 2396,
+ ProgramStateMachineType_MaxInstanceCount = 2397,
+ ProgramStateMachineType_MaxRecycleCount = 2398,
+ ProgramStateMachineType_ProgramDiagnostics = 2399,
+ ProgramStateMachineType_Ready = 2400,
+ ProgramStateMachineType_Ready_StateNumber = 2401,
+ ProgramStateMachineType_Running = 2402,
+ ProgramStateMachineType_Running_StateNumber = 2403,
+ ProgramStateMachineType_Suspended = 2404,
+ ProgramStateMachineType_Suspended_StateNumber = 2405,
+ ProgramStateMachineType_Halted = 2406,
+ ProgramStateMachineType_Halted_StateNumber = 2407,
+ ProgramStateMachineType_HaltedToReady = 2408,
+ ProgramStateMachineType_HaltedToReady_TransitionNumber = 2409,
+ ProgramStateMachineType_ReadyToRunning = 2410,
+ ProgramStateMachineType_ReadyToRunning_TransitionNumber = 2411,
+ ProgramStateMachineType_RunningToHalted = 2412,
+ ProgramStateMachineType_RunningToHalted_TransitionNumber = 2413,
+ ProgramStateMachineType_RunningToReady = 2414,
+ ProgramStateMachineType_RunningToReady_TransitionNumber = 2415,
+ ProgramStateMachineType_RunningToSuspended = 2416,
+ ProgramStateMachineType_RunningToSuspended_TransitionNumber = 2417,
+ ProgramStateMachineType_SuspendedToRunning = 2418,
+ ProgramStateMachineType_SuspendedToRunning_TransitionNumber = 2419,
+ ProgramStateMachineType_SuspendedToHalted = 2420,
+ ProgramStateMachineType_SuspendedToHalted_TransitionNumber = 2421,
+ ProgramStateMachineType_SuspendedToReady = 2422,
+ ProgramStateMachineType_SuspendedToReady_TransitionNumber = 2423,
+ ProgramStateMachineType_ReadyToHalted = 2424,
+ ProgramStateMachineType_ReadyToHalted_TransitionNumber = 2425,
+ ProgramStateMachineType_Start = 2426,
+ ProgramStateMachineType_Suspend = 2427,
+ ProgramStateMachineType_Resume = 2428,
+ ProgramStateMachineType_Halt = 2429,
+ ProgramStateMachineType_Reset = 2430,
+ SessionDiagnosticsVariableType_RegisterNodesCount = 2730,
+ SessionDiagnosticsVariableType_UnregisterNodesCount = 2731,
+ ServerCapabilitiesType_MaxBrowseContinuationPoints = 2732,
+ ServerCapabilitiesType_MaxQueryContinuationPoints = 2733,
+ ServerCapabilitiesType_MaxHistoryContinuationPoints = 2734,
+ Server_ServerCapabilities_MaxBrowseContinuationPoints = 2735,
+ Server_ServerCapabilities_MaxQueryContinuationPoints = 2736,
+ Server_ServerCapabilities_MaxHistoryContinuationPoints = 2737,
+ SemanticChangeEventType = 2738,
+ SemanticChangeEventType_Changes = 2739,
+ ServerType_Auditing = 2742,
+ ServerDiagnosticsType_SessionsDiagnosticsSummary = 2744,
+ AuditChannelEventType_SecureChannelId = 2745,
+ AuditOpenSecureChannelEventType_ClientCertificateThumbprint = 2746,
+ AuditCreateSessionEventType_ClientCertificateThumbprint = 2747,
+ AuditUrlMismatchEventType = 2748,
+ AuditUrlMismatchEventType_EndpointUrl = 2749,
+ AuditWriteUpdateEventType_AttributeId = 2750,
+ AuditHistoryUpdateEventType_ParameterDataTypeId = 2751,
+ ServerStatusType_SecondsTillShutdown = 2752,
+ ServerStatusType_ShutdownReason = 2753,
+ ServerCapabilitiesType_AggregateFunctions = 2754,
+ StateVariableType = 2755,
+ StateVariableType_Id = 2756,
+ StateVariableType_Name = 2757,
+ StateVariableType_Number = 2758,
+ StateVariableType_EffectiveDisplayName = 2759,
+ FiniteStateVariableType = 2760,
+ FiniteStateVariableType_Id = 2761,
+ TransitionVariableType = 2762,
+ TransitionVariableType_Id = 2763,
+ TransitionVariableType_Name = 2764,
+ TransitionVariableType_Number = 2765,
+ TransitionVariableType_TransitionTime = 2766,
+ FiniteTransitionVariableType = 2767,
+ FiniteTransitionVariableType_Id = 2768,
+ StateMachineType_CurrentState = 2769,
+ StateMachineType_LastTransition = 2770,
+ FiniteStateMachineType = 2771,
+ FiniteStateMachineType_CurrentState = 2772,
+ FiniteStateMachineType_LastTransition = 2773,
+ TransitionEventType_Transition = 2774,
+ TransitionEventType_FromState = 2775,
+ TransitionEventType_ToState = 2776,
+ AuditUpdateStateEventType_OldStateId = 2777,
+ AuditUpdateStateEventType_NewStateId = 2778,
+ ConditionType = 2782,
+ RefreshStartEventType = 2787,
+ RefreshEndEventType = 2788,
+ RefreshRequiredEventType = 2789,
+ AuditConditionEventType = 2790,
+ AuditConditionEnableEventType = 2803,
+ AuditConditionCommentEventType = 2829,
+ DialogConditionType = 2830,
+ DialogConditionType_Prompt = 2831,
+ AcknowledgeableConditionType = 2881,
+ AlarmConditionType = 2915,
+ ShelvedStateMachineType = 2929,
+ ShelvedStateMachineType_Unshelved = 2930,
+ ShelvedStateMachineType_TimedShelved = 2932,
+ ShelvedStateMachineType_OneShotShelved = 2933,
+ ShelvedStateMachineType_UnshelvedToTimedShelved = 2935,
+ ShelvedStateMachineType_UnshelvedToOneShotShelved = 2936,
+ ShelvedStateMachineType_TimedShelvedToUnshelved = 2940,
+ ShelvedStateMachineType_TimedShelvedToOneShotShelved = 2942,
+ ShelvedStateMachineType_OneShotShelvedToUnshelved = 2943,
+ ShelvedStateMachineType_OneShotShelvedToTimedShelved = 2945,
+ ShelvedStateMachineType_Unshelve = 2947,
+ ShelvedStateMachineType_OneShotShelve = 2948,
+ ShelvedStateMachineType_TimedShelve = 2949,
+ LimitAlarmType = 2955,
+ ShelvedStateMachineType_TimedShelve_InputArguments = 2991,
+ Server_ServerStatus_SecondsTillShutdown = 2992,
+ Server_ServerStatus_ShutdownReason = 2993,
+ Server_Auditing = 2994,
+ Server_ServerCapabilities_ModellingRules = 2996,
+ Server_ServerCapabilities_AggregateFunctions = 2997,
+ SubscriptionDiagnosticsType_EventNotificationsCount = 2998,
+ AuditHistoryEventUpdateEventType = 2999,
+ AuditHistoryEventUpdateEventType_Filter = 3003,
+ AuditHistoryValueUpdateEventType = 3006,
+ AuditHistoryDeleteEventType = 3012,
+ AuditHistoryRawModifyDeleteEventType = 3014,
+ AuditHistoryRawModifyDeleteEventType_IsDeleteModified = 3015,
+ AuditHistoryRawModifyDeleteEventType_StartTime = 3016,
+ AuditHistoryRawModifyDeleteEventType_EndTime = 3017,
+ AuditHistoryAtTimeDeleteEventType = 3019,
+ AuditHistoryAtTimeDeleteEventType_ReqTimes = 3020,
+ AuditHistoryAtTimeDeleteEventType_OldValues = 3021,
+ AuditHistoryEventDeleteEventType = 3022,
+ AuditHistoryEventDeleteEventType_EventIds = 3023,
+ AuditHistoryEventDeleteEventType_OldValues = 3024,
+ AuditHistoryEventUpdateEventType_UpdatedNode = 3025,
+ AuditHistoryValueUpdateEventType_UpdatedNode = 3026,
+ AuditHistoryDeleteEventType_UpdatedNode = 3027,
+ AuditHistoryEventUpdateEventType_PerformInsertReplace = 3028,
+ AuditHistoryEventUpdateEventType_NewValues = 3029,
+ AuditHistoryEventUpdateEventType_OldValues = 3030,
+ AuditHistoryValueUpdateEventType_PerformInsertReplace = 3031,
+ AuditHistoryValueUpdateEventType_NewValues = 3032,
+ AuditHistoryValueUpdateEventType_OldValues = 3033,
+ AuditHistoryRawModifyDeleteEventType_OldValues = 3034,
+ EventQueueOverflowEventType = 3035,
+ EventTypesFolder = 3048,
+ ServerCapabilitiesType_SoftwareCertificates = 3049,
+ SessionDiagnosticsVariableType_MaxResponseMessageSize = 3050,
+ BuildInfoType = 3051,
+ BuildInfoType_ProductUri = 3052,
+ BuildInfoType_ManufacturerName = 3053,
+ BuildInfoType_ProductName = 3054,
+ BuildInfoType_SoftwareVersion = 3055,
+ BuildInfoType_BuildNumber = 3056,
+ BuildInfoType_BuildDate = 3057,
+ SessionSecurityDiagnosticsType_ClientCertificate = 3058,
+ HistoricalDataConfigurationType_AggregateConfiguration = 3059,
+ DefaultBinary = 3062,
+ DefaultXml = 3063,
+ AlwaysGeneratesEvent = 3065,
+ Icon = 3067,
+ NodeVersion = 3068,
+ LocalTime = 3069,
+ AllowNulls = 3070,
+ EnumValues = 3071,
+ InputArguments = 3072,
+ OutputArguments = 3073,
+ ServerType_ServerStatus_StartTime = 3074,
+ ServerType_ServerStatus_CurrentTime = 3075,
+ ServerType_ServerStatus_State = 3076,
+ ServerType_ServerStatus_BuildInfo = 3077,
+ ServerType_ServerStatus_BuildInfo_ProductUri = 3078,
+ ServerType_ServerStatus_BuildInfo_ManufacturerName = 3079,
+ ServerType_ServerStatus_BuildInfo_ProductName = 3080,
+ ServerType_ServerStatus_BuildInfo_SoftwareVersion = 3081,
+ ServerType_ServerStatus_BuildInfo_BuildNumber = 3082,
+ ServerType_ServerStatus_BuildInfo_BuildDate = 3083,
+ ServerType_ServerStatus_SecondsTillShutdown = 3084,
+ ServerType_ServerStatus_ShutdownReason = 3085,
+ ServerType_ServerCapabilities_ServerProfileArray = 3086,
+ ServerType_ServerCapabilities_LocaleIdArray = 3087,
+ ServerType_ServerCapabilities_MinSupportedSampleRate = 3088,
+ ServerType_ServerCapabilities_MaxBrowseContinuationPoints = 3089,
+ ServerType_ServerCapabilities_MaxQueryContinuationPoints = 3090,
+ ServerType_ServerCapabilities_MaxHistoryContinuationPoints = 3091,
+ ServerType_ServerCapabilities_SoftwareCertificates = 3092,
+ ServerType_ServerCapabilities_ModellingRules = 3093,
+ ServerType_ServerCapabilities_AggregateFunctions = 3094,
+ ServerType_ServerDiagnostics_ServerDiagnosticsSummary = 3095,
+ ServerType_ServerDiagnostics_ServerDiagnosticsSummary_ServerViewCount = 3096,
+ ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSessionCount = 3097,
+ ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSessionCount = 3098,
+ ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedSessionCount = 3099,
+ ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = 3100,
+ ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionTimeoutCount = 3101,
+ ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SessionAbortCount = 3102,
+ ServerType_ServerDiagnostics_ServerDiagnosticsSummary_PublishingIntervalCount = 3104,
+ ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CurrentSubscriptionCount = 3105,
+ ServerType_ServerDiagnostics_ServerDiagnosticsSummary_CumulatedSubscriptionCount = 3106,
+ ServerType_ServerDiagnostics_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = 3107,
+ ServerType_ServerDiagnostics_ServerDiagnosticsSummary_RejectedRequestsCount = 3108,
+ ServerType_ServerDiagnostics_SamplingIntervalDiagnosticsArray = 3109,
+ ServerType_ServerDiagnostics_SubscriptionDiagnosticsArray = 3110,
+ ServerType_ServerDiagnostics_SessionsDiagnosticsSummary = 3111,
+ ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = 3112,
+ ServerType_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = 3113,
+ ServerType_ServerDiagnostics_EnabledFlag = 3114,
+ ServerType_ServerRedundancy_RedundancySupport = 3115,
+ ServerDiagnosticsType_ServerDiagnosticsSummary_ServerViewCount = 3116,
+ ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSessionCount = 3117,
+ ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSessionCount = 3118,
+ ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedSessionCount = 3119,
+ ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedSessionCount = 3120,
+ ServerDiagnosticsType_ServerDiagnosticsSummary_SessionTimeoutCount = 3121,
+ ServerDiagnosticsType_ServerDiagnosticsSummary_SessionAbortCount = 3122,
+ ServerDiagnosticsType_ServerDiagnosticsSummary_PublishingIntervalCount = 3124,
+ ServerDiagnosticsType_ServerDiagnosticsSummary_CurrentSubscriptionCount = 3125,
+ ServerDiagnosticsType_ServerDiagnosticsSummary_CumulatedSubscriptionCount = 3126,
+ ServerDiagnosticsType_ServerDiagnosticsSummary_SecurityRejectedRequestsCount = 3127,
+ ServerDiagnosticsType_ServerDiagnosticsSummary_RejectedRequestsCount = 3128,
+ ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionDiagnosticsArray = 3129,
+ ServerDiagnosticsType_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = 3130,
+ SessionDiagnosticsObjectType_SessionDiagnostics_SessionId = 3131,
+ SessionDiagnosticsObjectType_SessionDiagnostics_SessionName = 3132,
+ SessionDiagnosticsObjectType_SessionDiagnostics_ClientDescription = 3133,
+ SessionDiagnosticsObjectType_SessionDiagnostics_ServerUri = 3134,
+ SessionDiagnosticsObjectType_SessionDiagnostics_EndpointUrl = 3135,
+ SessionDiagnosticsObjectType_SessionDiagnostics_LocaleIds = 3136,
+ SessionDiagnosticsObjectType_SessionDiagnostics_ActualSessionTimeout = 3137,
+ SessionDiagnosticsObjectType_SessionDiagnostics_MaxResponseMessageSize = 3138,
+ SessionDiagnosticsObjectType_SessionDiagnostics_ClientConnectionTime = 3139,
+ SessionDiagnosticsObjectType_SessionDiagnostics_ClientLastContactTime = 3140,
+ SessionDiagnosticsObjectType_SessionDiagnostics_CurrentSubscriptionsCount = 3141,
+ SessionDiagnosticsObjectType_SessionDiagnostics_CurrentMonitoredItemsCount = 3142,
+ SessionDiagnosticsObjectType_SessionDiagnostics_CurrentPublishRequestsInQueue = 3143,
+ SessionDiagnosticsObjectType_SessionDiagnostics_ReadCount = 3151,
+ SessionDiagnosticsObjectType_SessionDiagnostics_HistoryReadCount = 3152,
+ SessionDiagnosticsObjectType_SessionDiagnostics_WriteCount = 3153,
+ SessionDiagnosticsObjectType_SessionDiagnostics_HistoryUpdateCount = 3154,
+ SessionDiagnosticsObjectType_SessionDiagnostics_CallCount = 3155,
+ SessionDiagnosticsObjectType_SessionDiagnostics_CreateMonitoredItemsCount = 3156,
+ SessionDiagnosticsObjectType_SessionDiagnostics_ModifyMonitoredItemsCount = 3157,
+ SessionDiagnosticsObjectType_SessionDiagnostics_SetMonitoringModeCount = 3158,
+ SessionDiagnosticsObjectType_SessionDiagnostics_SetTriggeringCount = 3159,
+ SessionDiagnosticsObjectType_SessionDiagnostics_DeleteMonitoredItemsCount = 3160,
+ SessionDiagnosticsObjectType_SessionDiagnostics_CreateSubscriptionCount = 3161,
+ SessionDiagnosticsObjectType_SessionDiagnostics_ModifySubscriptionCount = 3162,
+ SessionDiagnosticsObjectType_SessionDiagnostics_SetPublishingModeCount = 3163,
+ SessionDiagnosticsObjectType_SessionDiagnostics_PublishCount = 3164,
+ SessionDiagnosticsObjectType_SessionDiagnostics_RepublishCount = 3165,
+ SessionDiagnosticsObjectType_SessionDiagnostics_TransferSubscriptionsCount = 3166,
+ SessionDiagnosticsObjectType_SessionDiagnostics_DeleteSubscriptionsCount = 3167,
+ SessionDiagnosticsObjectType_SessionDiagnostics_AddNodesCount = 3168,
+ SessionDiagnosticsObjectType_SessionDiagnostics_AddReferencesCount = 3169,
+ SessionDiagnosticsObjectType_SessionDiagnostics_DeleteNodesCount = 3170,
+ SessionDiagnosticsObjectType_SessionDiagnostics_DeleteReferencesCount = 3171,
+ SessionDiagnosticsObjectType_SessionDiagnostics_BrowseCount = 3172,
+ SessionDiagnosticsObjectType_SessionDiagnostics_BrowseNextCount = 3173,
+ SessionDiagnosticsObjectType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount = 3174,
+ SessionDiagnosticsObjectType_SessionDiagnostics_QueryFirstCount = 3175,
+ SessionDiagnosticsObjectType_SessionDiagnostics_QueryNextCount = 3176,
+ SessionDiagnosticsObjectType_SessionDiagnostics_RegisterNodesCount = 3177,
+ SessionDiagnosticsObjectType_SessionDiagnostics_UnregisterNodesCount = 3178,
+ SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SessionId = 3179,
+ SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdOfSession = 3180,
+ SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientUserIdHistory = 3181,
+ SessionDiagnosticsObjectType_SessionSecurityDiagnostics_AuthenticationMechanism = 3182,
+ SessionDiagnosticsObjectType_SessionSecurityDiagnostics_Encoding = 3183,
+ SessionDiagnosticsObjectType_SessionSecurityDiagnostics_TransportProtocol = 3184,
+ SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityMode = 3185,
+ SessionDiagnosticsObjectType_SessionSecurityDiagnostics_SecurityPolicyUri = 3186,
+ SessionDiagnosticsObjectType_SessionSecurityDiagnostics_ClientCertificate = 3187,
+ TransparentRedundancyType_RedundancySupport = 3188,
+ NonTransparentRedundancyType_RedundancySupport = 3189,
+ BaseEventType_LocalTime = 3190,
+ EventQueueOverflowEventType_EventId = 3191,
+ EventQueueOverflowEventType_EventType = 3192,
+ EventQueueOverflowEventType_SourceNode = 3193,
+ EventQueueOverflowEventType_SourceName = 3194,
+ EventQueueOverflowEventType_Time = 3195,
+ EventQueueOverflowEventType_ReceiveTime = 3196,
+ EventQueueOverflowEventType_LocalTime = 3197,
+ EventQueueOverflowEventType_Message = 3198,
+ EventQueueOverflowEventType_Severity = 3199,
+ AuditEventType_EventId = 3200,
+ AuditEventType_EventType = 3201,
+ AuditEventType_SourceNode = 3202,
+ AuditEventType_SourceName = 3203,
+ AuditEventType_Time = 3204,
+ AuditEventType_ReceiveTime = 3205,
+ AuditEventType_LocalTime = 3206,
+ AuditEventType_Message = 3207,
+ AuditEventType_Severity = 3208,
+ AuditSecurityEventType_EventId = 3209,
+ AuditSecurityEventType_EventType = 3210,
+ AuditSecurityEventType_SourceNode = 3211,
+ AuditSecurityEventType_SourceName = 3212,
+ AuditSecurityEventType_Time = 3213,
+ AuditSecurityEventType_ReceiveTime = 3214,
+ AuditSecurityEventType_LocalTime = 3215,
+ AuditSecurityEventType_Message = 3216,
+ AuditSecurityEventType_Severity = 3217,
+ AuditSecurityEventType_ActionTimeStamp = 3218,
+ AuditSecurityEventType_Status = 3219,
+ AuditSecurityEventType_ServerId = 3220,
+ AuditSecurityEventType_ClientAuditEntryId = 3221,
+ AuditSecurityEventType_ClientUserId = 3222,
+ AuditChannelEventType_EventId = 3223,
+ AuditChannelEventType_EventType = 3224,
+ AuditChannelEventType_SourceNode = 3225,
+ AuditChannelEventType_SourceName = 3226,
+ AuditChannelEventType_Time = 3227,
+ AuditChannelEventType_ReceiveTime = 3228,
+ AuditChannelEventType_LocalTime = 3229,
+ AuditChannelEventType_Message = 3230,
+ AuditChannelEventType_Severity = 3231,
+ AuditChannelEventType_ActionTimeStamp = 3232,
+ AuditChannelEventType_Status = 3233,
+ AuditChannelEventType_ServerId = 3234,
+ AuditChannelEventType_ClientAuditEntryId = 3235,
+ AuditChannelEventType_ClientUserId = 3236,
+ AuditOpenSecureChannelEventType_EventId = 3237,
+ AuditOpenSecureChannelEventType_EventType = 3238,
+ AuditOpenSecureChannelEventType_SourceNode = 3239,
+ AuditOpenSecureChannelEventType_SourceName = 3240,
+ AuditOpenSecureChannelEventType_Time = 3241,
+ AuditOpenSecureChannelEventType_ReceiveTime = 3242,
+ AuditOpenSecureChannelEventType_LocalTime = 3243,
+ AuditOpenSecureChannelEventType_Message = 3244,
+ AuditOpenSecureChannelEventType_Severity = 3245,
+ AuditOpenSecureChannelEventType_ActionTimeStamp = 3246,
+ AuditOpenSecureChannelEventType_Status = 3247,
+ AuditOpenSecureChannelEventType_ServerId = 3248,
+ AuditOpenSecureChannelEventType_ClientAuditEntryId = 3249,
+ AuditOpenSecureChannelEventType_ClientUserId = 3250,
+ AuditOpenSecureChannelEventType_SecureChannelId = 3251,
+ AuditSessionEventType_EventId = 3252,
+ AuditSessionEventType_EventType = 3253,
+ AuditSessionEventType_SourceNode = 3254,
+ AuditSessionEventType_SourceName = 3255,
+ AuditSessionEventType_Time = 3256,
+ AuditSessionEventType_ReceiveTime = 3257,
+ AuditSessionEventType_LocalTime = 3258,
+ AuditSessionEventType_Message = 3259,
+ AuditSessionEventType_Severity = 3260,
+ AuditSessionEventType_ActionTimeStamp = 3261,
+ AuditSessionEventType_Status = 3262,
+ AuditSessionEventType_ServerId = 3263,
+ AuditSessionEventType_ClientAuditEntryId = 3264,
+ AuditSessionEventType_ClientUserId = 3265,
+ AuditCreateSessionEventType_EventId = 3266,
+ AuditCreateSessionEventType_EventType = 3267,
+ AuditCreateSessionEventType_SourceNode = 3268,
+ AuditCreateSessionEventType_SourceName = 3269,
+ AuditCreateSessionEventType_Time = 3270,
+ AuditCreateSessionEventType_ReceiveTime = 3271,
+ AuditCreateSessionEventType_LocalTime = 3272,
+ AuditCreateSessionEventType_Message = 3273,
+ AuditCreateSessionEventType_Severity = 3274,
+ AuditCreateSessionEventType_ActionTimeStamp = 3275,
+ AuditCreateSessionEventType_Status = 3276,
+ AuditCreateSessionEventType_ServerId = 3277,
+ AuditCreateSessionEventType_ClientAuditEntryId = 3278,
+ AuditCreateSessionEventType_ClientUserId = 3279,
+ AuditUrlMismatchEventType_EventId = 3281,
+ AuditUrlMismatchEventType_EventType = 3282,
+ AuditUrlMismatchEventType_SourceNode = 3283,
+ AuditUrlMismatchEventType_SourceName = 3284,
+ AuditUrlMismatchEventType_Time = 3285,
+ AuditUrlMismatchEventType_ReceiveTime = 3286,
+ AuditUrlMismatchEventType_LocalTime = 3287,
+ AuditUrlMismatchEventType_Message = 3288,
+ AuditUrlMismatchEventType_Severity = 3289,
+ AuditUrlMismatchEventType_ActionTimeStamp = 3290,
+ AuditUrlMismatchEventType_Status = 3291,
+ AuditUrlMismatchEventType_ServerId = 3292,
+ AuditUrlMismatchEventType_ClientAuditEntryId = 3293,
+ AuditUrlMismatchEventType_ClientUserId = 3294,
+ AuditUrlMismatchEventType_SecureChannelId = 3296,
+ AuditUrlMismatchEventType_ClientCertificate = 3297,
+ AuditUrlMismatchEventType_ClientCertificateThumbprint = 3298,
+ AuditUrlMismatchEventType_RevisedSessionTimeout = 3299,
+ AuditActivateSessionEventType_EventId = 3300,
+ AuditActivateSessionEventType_EventType = 3301,
+ AuditActivateSessionEventType_SourceNode = 3302,
+ AuditActivateSessionEventType_SourceName = 3303,
+ AuditActivateSessionEventType_Time = 3304,
+ AuditActivateSessionEventType_ReceiveTime = 3305,
+ AuditActivateSessionEventType_LocalTime = 3306,
+ AuditActivateSessionEventType_Message = 3307,
+ AuditActivateSessionEventType_Severity = 3308,
+ AuditActivateSessionEventType_ActionTimeStamp = 3309,
+ AuditActivateSessionEventType_Status = 3310,
+ AuditActivateSessionEventType_ServerId = 3311,
+ AuditActivateSessionEventType_ClientAuditEntryId = 3312,
+ AuditActivateSessionEventType_ClientUserId = 3313,
+ AuditActivateSessionEventType_SessionId = 3314,
+ AuditCancelEventType_EventId = 3315,
+ AuditCancelEventType_EventType = 3316,
+ AuditCancelEventType_SourceNode = 3317,
+ AuditCancelEventType_SourceName = 3318,
+ AuditCancelEventType_Time = 3319,
+ AuditCancelEventType_ReceiveTime = 3320,
+ AuditCancelEventType_LocalTime = 3321,
+ AuditCancelEventType_Message = 3322,
+ AuditCancelEventType_Severity = 3323,
+ AuditCancelEventType_ActionTimeStamp = 3324,
+ AuditCancelEventType_Status = 3325,
+ AuditCancelEventType_ServerId = 3326,
+ AuditCancelEventType_ClientAuditEntryId = 3327,
+ AuditCancelEventType_ClientUserId = 3328,
+ AuditCancelEventType_SessionId = 3329,
+ AuditCertificateEventType_EventId = 3330,
+ AuditCertificateEventType_EventType = 3331,
+ AuditCertificateEventType_SourceNode = 3332,
+ AuditCertificateEventType_SourceName = 3333,
+ AuditCertificateEventType_Time = 3334,
+ AuditCertificateEventType_ReceiveTime = 3335,
+ AuditCertificateEventType_LocalTime = 3336,
+ AuditCertificateEventType_Message = 3337,
+ AuditCertificateEventType_Severity = 3338,
+ AuditCertificateEventType_ActionTimeStamp = 3339,
+ AuditCertificateEventType_Status = 3340,
+ AuditCertificateEventType_ServerId = 3341,
+ AuditCertificateEventType_ClientAuditEntryId = 3342,
+ AuditCertificateEventType_ClientUserId = 3343,
+ AuditCertificateDataMismatchEventType_EventId = 3344,
+ AuditCertificateDataMismatchEventType_EventType = 3345,
+ AuditCertificateDataMismatchEventType_SourceNode = 3346,
+ AuditCertificateDataMismatchEventType_SourceName = 3347,
+ AuditCertificateDataMismatchEventType_Time = 3348,
+ AuditCertificateDataMismatchEventType_ReceiveTime = 3349,
+ AuditCertificateDataMismatchEventType_LocalTime = 3350,
+ AuditCertificateDataMismatchEventType_Message = 3351,
+ AuditCertificateDataMismatchEventType_Severity = 3352,
+ AuditCertificateDataMismatchEventType_ActionTimeStamp = 3353,
+ AuditCertificateDataMismatchEventType_Status = 3354,
+ AuditCertificateDataMismatchEventType_ServerId = 3355,
+ AuditCertificateDataMismatchEventType_ClientAuditEntryId = 3356,
+ AuditCertificateDataMismatchEventType_ClientUserId = 3357,
+ AuditCertificateDataMismatchEventType_Certificate = 3358,
+ AuditCertificateExpiredEventType_EventId = 3359,
+ AuditCertificateExpiredEventType_EventType = 3360,
+ AuditCertificateExpiredEventType_SourceNode = 3361,
+ AuditCertificateExpiredEventType_SourceName = 3362,
+ AuditCertificateExpiredEventType_Time = 3363,
+ AuditCertificateExpiredEventType_ReceiveTime = 3364,
+ AuditCertificateExpiredEventType_LocalTime = 3365,
+ AuditCertificateExpiredEventType_Message = 3366,
+ AuditCertificateExpiredEventType_Severity = 3367,
+ AuditCertificateExpiredEventType_ActionTimeStamp = 3368,
+ AuditCertificateExpiredEventType_Status = 3369,
+ AuditCertificateExpiredEventType_ServerId = 3370,
+ AuditCertificateExpiredEventType_ClientAuditEntryId = 3371,
+ AuditCertificateExpiredEventType_ClientUserId = 3372,
+ AuditCertificateExpiredEventType_Certificate = 3373,
+ AuditCertificateInvalidEventType_EventId = 3374,
+ AuditCertificateInvalidEventType_EventType = 3375,
+ AuditCertificateInvalidEventType_SourceNode = 3376,
+ AuditCertificateInvalidEventType_SourceName = 3377,
+ AuditCertificateInvalidEventType_Time = 3378,
+ AuditCertificateInvalidEventType_ReceiveTime = 3379,
+ AuditCertificateInvalidEventType_LocalTime = 3380,
+ AuditCertificateInvalidEventType_Message = 3381,
+ AuditCertificateInvalidEventType_Severity = 3382,
+ AuditCertificateInvalidEventType_ActionTimeStamp = 3383,
+ AuditCertificateInvalidEventType_Status = 3384,
+ AuditCertificateInvalidEventType_ServerId = 3385,
+ AuditCertificateInvalidEventType_ClientAuditEntryId = 3386,
+ AuditCertificateInvalidEventType_ClientUserId = 3387,
+ AuditCertificateInvalidEventType_Certificate = 3388,
+ AuditCertificateUntrustedEventType_EventId = 3389,
+ AuditCertificateUntrustedEventType_EventType = 3390,
+ AuditCertificateUntrustedEventType_SourceNode = 3391,
+ AuditCertificateUntrustedEventType_SourceName = 3392,
+ AuditCertificateUntrustedEventType_Time = 3393,
+ AuditCertificateUntrustedEventType_ReceiveTime = 3394,
+ AuditCertificateUntrustedEventType_LocalTime = 3395,
+ AuditCertificateUntrustedEventType_Message = 3396,
+ AuditCertificateUntrustedEventType_Severity = 3397,
+ AuditCertificateUntrustedEventType_ActionTimeStamp = 3398,
+ AuditCertificateUntrustedEventType_Status = 3399,
+ AuditCertificateUntrustedEventType_ServerId = 3400,
+ AuditCertificateUntrustedEventType_ClientAuditEntryId = 3401,
+ AuditCertificateUntrustedEventType_ClientUserId = 3402,
+ AuditCertificateUntrustedEventType_Certificate = 3403,
+ AuditCertificateRevokedEventType_EventId = 3404,
+ AuditCertificateRevokedEventType_EventType = 3405,
+ AuditCertificateRevokedEventType_SourceNode = 3406,
+ AuditCertificateRevokedEventType_SourceName = 3407,
+ AuditCertificateRevokedEventType_Time = 3408,
+ AuditCertificateRevokedEventType_ReceiveTime = 3409,
+ AuditCertificateRevokedEventType_LocalTime = 3410,
+ AuditCertificateRevokedEventType_Message = 3411,
+ AuditCertificateRevokedEventType_Severity = 3412,
+ AuditCertificateRevokedEventType_ActionTimeStamp = 3413,
+ AuditCertificateRevokedEventType_Status = 3414,
+ AuditCertificateRevokedEventType_ServerId = 3415,
+ AuditCertificateRevokedEventType_ClientAuditEntryId = 3416,
+ AuditCertificateRevokedEventType_ClientUserId = 3417,
+ AuditCertificateRevokedEventType_Certificate = 3418,
+ AuditCertificateMismatchEventType_EventId = 3419,
+ AuditCertificateMismatchEventType_EventType = 3420,
+ AuditCertificateMismatchEventType_SourceNode = 3421,
+ AuditCertificateMismatchEventType_SourceName = 3422,
+ AuditCertificateMismatchEventType_Time = 3423,
+ AuditCertificateMismatchEventType_ReceiveTime = 3424,
+ AuditCertificateMismatchEventType_LocalTime = 3425,
+ AuditCertificateMismatchEventType_Message = 3426,
+ AuditCertificateMismatchEventType_Severity = 3427,
+ AuditCertificateMismatchEventType_ActionTimeStamp = 3428,
+ AuditCertificateMismatchEventType_Status = 3429,
+ AuditCertificateMismatchEventType_ServerId = 3430,
+ AuditCertificateMismatchEventType_ClientAuditEntryId = 3431,
+ AuditCertificateMismatchEventType_ClientUserId = 3432,
+ AuditCertificateMismatchEventType_Certificate = 3433,
+ AuditNodeManagementEventType_EventId = 3434,
+ AuditNodeManagementEventType_EventType = 3435,
+ AuditNodeManagementEventType_SourceNode = 3436,
+ AuditNodeManagementEventType_SourceName = 3437,
+ AuditNodeManagementEventType_Time = 3438,
+ AuditNodeManagementEventType_ReceiveTime = 3439,
+ AuditNodeManagementEventType_LocalTime = 3440,
+ AuditNodeManagementEventType_Message = 3441,
+ AuditNodeManagementEventType_Severity = 3442,
+ AuditNodeManagementEventType_ActionTimeStamp = 3443,
+ AuditNodeManagementEventType_Status = 3444,
+ AuditNodeManagementEventType_ServerId = 3445,
+ AuditNodeManagementEventType_ClientAuditEntryId = 3446,
+ AuditNodeManagementEventType_ClientUserId = 3447,
+ AuditAddNodesEventType_EventId = 3448,
+ AuditAddNodesEventType_EventType = 3449,
+ AuditAddNodesEventType_SourceNode = 3450,
+ AuditAddNodesEventType_SourceName = 3451,
+ AuditAddNodesEventType_Time = 3452,
+ AuditAddNodesEventType_ReceiveTime = 3453,
+ AuditAddNodesEventType_LocalTime = 3454,
+ AuditAddNodesEventType_Message = 3455,
+ AuditAddNodesEventType_Severity = 3456,
+ AuditAddNodesEventType_ActionTimeStamp = 3457,
+ AuditAddNodesEventType_Status = 3458,
+ AuditAddNodesEventType_ServerId = 3459,
+ AuditAddNodesEventType_ClientAuditEntryId = 3460,
+ AuditAddNodesEventType_ClientUserId = 3461,
+ AuditDeleteNodesEventType_EventId = 3462,
+ AuditDeleteNodesEventType_EventType = 3463,
+ AuditDeleteNodesEventType_SourceNode = 3464,
+ AuditDeleteNodesEventType_SourceName = 3465,
+ AuditDeleteNodesEventType_Time = 3466,
+ AuditDeleteNodesEventType_ReceiveTime = 3467,
+ AuditDeleteNodesEventType_LocalTime = 3468,
+ AuditDeleteNodesEventType_Message = 3469,
+ AuditDeleteNodesEventType_Severity = 3470,
+ AuditDeleteNodesEventType_ActionTimeStamp = 3471,
+ AuditDeleteNodesEventType_Status = 3472,
+ AuditDeleteNodesEventType_ServerId = 3473,
+ AuditDeleteNodesEventType_ClientAuditEntryId = 3474,
+ AuditDeleteNodesEventType_ClientUserId = 3475,
+ AuditAddReferencesEventType_EventId = 3476,
+ AuditAddReferencesEventType_EventType = 3477,
+ AuditAddReferencesEventType_SourceNode = 3478,
+ AuditAddReferencesEventType_SourceName = 3479,
+ AuditAddReferencesEventType_Time = 3480,
+ AuditAddReferencesEventType_ReceiveTime = 3481,
+ AuditAddReferencesEventType_LocalTime = 3482,
+ AuditAddReferencesEventType_Message = 3483,
+ AuditAddReferencesEventType_Severity = 3484,
+ AuditAddReferencesEventType_ActionTimeStamp = 3485,
+ AuditAddReferencesEventType_Status = 3486,
+ AuditAddReferencesEventType_ServerId = 3487,
+ AuditAddReferencesEventType_ClientAuditEntryId = 3488,
+ AuditAddReferencesEventType_ClientUserId = 3489,
+ AuditDeleteReferencesEventType_EventId = 3490,
+ AuditDeleteReferencesEventType_EventType = 3491,
+ AuditDeleteReferencesEventType_SourceNode = 3492,
+ AuditDeleteReferencesEventType_SourceName = 3493,
+ AuditDeleteReferencesEventType_Time = 3494,
+ AuditDeleteReferencesEventType_ReceiveTime = 3495,
+ AuditDeleteReferencesEventType_LocalTime = 3496,
+ AuditDeleteReferencesEventType_Message = 3497,
+ AuditDeleteReferencesEventType_Severity = 3498,
+ AuditDeleteReferencesEventType_ActionTimeStamp = 3499,
+ AuditDeleteReferencesEventType_Status = 3500,
+ AuditDeleteReferencesEventType_ServerId = 3501,
+ AuditDeleteReferencesEventType_ClientAuditEntryId = 3502,
+ AuditDeleteReferencesEventType_ClientUserId = 3503,
+ AuditUpdateEventType_EventId = 3504,
+ AuditUpdateEventType_EventType = 3505,
+ AuditUpdateEventType_SourceNode = 3506,
+ AuditUpdateEventType_SourceName = 3507,
+ AuditUpdateEventType_Time = 3508,
+ AuditUpdateEventType_ReceiveTime = 3509,
+ AuditUpdateEventType_LocalTime = 3510,
+ AuditUpdateEventType_Message = 3511,
+ AuditUpdateEventType_Severity = 3512,
+ AuditUpdateEventType_ActionTimeStamp = 3513,
+ AuditUpdateEventType_Status = 3514,
+ AuditUpdateEventType_ServerId = 3515,
+ AuditUpdateEventType_ClientAuditEntryId = 3516,
+ AuditUpdateEventType_ClientUserId = 3517,
+ AuditWriteUpdateEventType_EventId = 3518,
+ AuditWriteUpdateEventType_EventType = 3519,
+ AuditWriteUpdateEventType_SourceNode = 3520,
+ AuditWriteUpdateEventType_SourceName = 3521,
+ AuditWriteUpdateEventType_Time = 3522,
+ AuditWriteUpdateEventType_ReceiveTime = 3523,
+ AuditWriteUpdateEventType_LocalTime = 3524,
+ AuditWriteUpdateEventType_Message = 3525,
+ AuditWriteUpdateEventType_Severity = 3526,
+ AuditWriteUpdateEventType_ActionTimeStamp = 3527,
+ AuditWriteUpdateEventType_Status = 3528,
+ AuditWriteUpdateEventType_ServerId = 3529,
+ AuditWriteUpdateEventType_ClientAuditEntryId = 3530,
+ AuditWriteUpdateEventType_ClientUserId = 3531,
+ AuditHistoryUpdateEventType_EventId = 3532,
+ AuditHistoryUpdateEventType_EventType = 3533,
+ AuditHistoryUpdateEventType_SourceNode = 3534,
+ AuditHistoryUpdateEventType_SourceName = 3535,
+ AuditHistoryUpdateEventType_Time = 3536,
+ AuditHistoryUpdateEventType_ReceiveTime = 3537,
+ AuditHistoryUpdateEventType_LocalTime = 3538,
+ AuditHistoryUpdateEventType_Message = 3539,
+ AuditHistoryUpdateEventType_Severity = 3540,
+ AuditHistoryUpdateEventType_ActionTimeStamp = 3541,
+ AuditHistoryUpdateEventType_Status = 3542,
+ AuditHistoryUpdateEventType_ServerId = 3543,
+ AuditHistoryUpdateEventType_ClientAuditEntryId = 3544,
+ AuditHistoryUpdateEventType_ClientUserId = 3545,
+ AuditHistoryEventUpdateEventType_EventId = 3546,
+ AuditHistoryEventUpdateEventType_EventType = 3547,
+ AuditHistoryEventUpdateEventType_SourceNode = 3548,
+ AuditHistoryEventUpdateEventType_SourceName = 3549,
+ AuditHistoryEventUpdateEventType_Time = 3550,
+ AuditHistoryEventUpdateEventType_ReceiveTime = 3551,
+ AuditHistoryEventUpdateEventType_LocalTime = 3552,
+ AuditHistoryEventUpdateEventType_Message = 3553,
+ AuditHistoryEventUpdateEventType_Severity = 3554,
+ AuditHistoryEventUpdateEventType_ActionTimeStamp = 3555,
+ AuditHistoryEventUpdateEventType_Status = 3556,
+ AuditHistoryEventUpdateEventType_ServerId = 3557,
+ AuditHistoryEventUpdateEventType_ClientAuditEntryId = 3558,
+ AuditHistoryEventUpdateEventType_ClientUserId = 3559,
+ AuditHistoryEventUpdateEventType_ParameterDataTypeId = 3560,
+ AuditHistoryValueUpdateEventType_EventId = 3561,
+ AuditHistoryValueUpdateEventType_EventType = 3562,
+ AuditHistoryValueUpdateEventType_SourceNode = 3563,
+ AuditHistoryValueUpdateEventType_SourceName = 3564,
+ AuditHistoryValueUpdateEventType_Time = 3565,
+ AuditHistoryValueUpdateEventType_ReceiveTime = 3566,
+ AuditHistoryValueUpdateEventType_LocalTime = 3567,
+ AuditHistoryValueUpdateEventType_Message = 3568,
+ AuditHistoryValueUpdateEventType_Severity = 3569,
+ AuditHistoryValueUpdateEventType_ActionTimeStamp = 3570,
+ AuditHistoryValueUpdateEventType_Status = 3571,
+ AuditHistoryValueUpdateEventType_ServerId = 3572,
+ AuditHistoryValueUpdateEventType_ClientAuditEntryId = 3573,
+ AuditHistoryValueUpdateEventType_ClientUserId = 3574,
+ AuditHistoryValueUpdateEventType_ParameterDataTypeId = 3575,
+ AuditHistoryDeleteEventType_EventId = 3576,
+ AuditHistoryDeleteEventType_EventType = 3577,
+ AuditHistoryDeleteEventType_SourceNode = 3578,
+ AuditHistoryDeleteEventType_SourceName = 3579,
+ AuditHistoryDeleteEventType_Time = 3580,
+ AuditHistoryDeleteEventType_ReceiveTime = 3581,
+ AuditHistoryDeleteEventType_LocalTime = 3582,
+ AuditHistoryDeleteEventType_Message = 3583,
+ AuditHistoryDeleteEventType_Severity = 3584,
+ AuditHistoryDeleteEventType_ActionTimeStamp = 3585,
+ AuditHistoryDeleteEventType_Status = 3586,
+ AuditHistoryDeleteEventType_ServerId = 3587,
+ AuditHistoryDeleteEventType_ClientAuditEntryId = 3588,
+ AuditHistoryDeleteEventType_ClientUserId = 3589,
+ AuditHistoryDeleteEventType_ParameterDataTypeId = 3590,
+ AuditHistoryRawModifyDeleteEventType_EventId = 3591,
+ AuditHistoryRawModifyDeleteEventType_EventType = 3592,
+ AuditHistoryRawModifyDeleteEventType_SourceNode = 3593,
+ AuditHistoryRawModifyDeleteEventType_SourceName = 3594,
+ AuditHistoryRawModifyDeleteEventType_Time = 3595,
+ AuditHistoryRawModifyDeleteEventType_ReceiveTime = 3596,
+ AuditHistoryRawModifyDeleteEventType_LocalTime = 3597,
+ AuditHistoryRawModifyDeleteEventType_Message = 3598,
+ AuditHistoryRawModifyDeleteEventType_Severity = 3599,
+ AuditHistoryRawModifyDeleteEventType_ActionTimeStamp = 3600,
+ AuditHistoryRawModifyDeleteEventType_Status = 3601,
+ AuditHistoryRawModifyDeleteEventType_ServerId = 3602,
+ AuditHistoryRawModifyDeleteEventType_ClientAuditEntryId = 3603,
+ AuditHistoryRawModifyDeleteEventType_ClientUserId = 3604,
+ AuditHistoryRawModifyDeleteEventType_ParameterDataTypeId = 3605,
+ AuditHistoryRawModifyDeleteEventType_UpdatedNode = 3606,
+ AuditHistoryAtTimeDeleteEventType_EventId = 3607,
+ AuditHistoryAtTimeDeleteEventType_EventType = 3608,
+ AuditHistoryAtTimeDeleteEventType_SourceNode = 3609,
+ AuditHistoryAtTimeDeleteEventType_SourceName = 3610,
+ AuditHistoryAtTimeDeleteEventType_Time = 3611,
+ AuditHistoryAtTimeDeleteEventType_ReceiveTime = 3612,
+ AuditHistoryAtTimeDeleteEventType_LocalTime = 3613,
+ AuditHistoryAtTimeDeleteEventType_Message = 3614,
+ AuditHistoryAtTimeDeleteEventType_Severity = 3615,
+ AuditHistoryAtTimeDeleteEventType_ActionTimeStamp = 3616,
+ AuditHistoryAtTimeDeleteEventType_Status = 3617,
+ AuditHistoryAtTimeDeleteEventType_ServerId = 3618,
+ AuditHistoryAtTimeDeleteEventType_ClientAuditEntryId = 3619,
+ AuditHistoryAtTimeDeleteEventType_ClientUserId = 3620,
+ AuditHistoryAtTimeDeleteEventType_ParameterDataTypeId = 3621,
+ AuditHistoryAtTimeDeleteEventType_UpdatedNode = 3622,
+ AuditHistoryEventDeleteEventType_EventId = 3623,
+ AuditHistoryEventDeleteEventType_EventType = 3624,
+ AuditHistoryEventDeleteEventType_SourceNode = 3625,
+ AuditHistoryEventDeleteEventType_SourceName = 3626,
+ AuditHistoryEventDeleteEventType_Time = 3627,
+ AuditHistoryEventDeleteEventType_ReceiveTime = 3628,
+ AuditHistoryEventDeleteEventType_LocalTime = 3629,
+ AuditHistoryEventDeleteEventType_Message = 3630,
+ AuditHistoryEventDeleteEventType_Severity = 3631,
+ AuditHistoryEventDeleteEventType_ActionTimeStamp = 3632,
+ AuditHistoryEventDeleteEventType_Status = 3633,
+ AuditHistoryEventDeleteEventType_ServerId = 3634,
+ AuditHistoryEventDeleteEventType_ClientAuditEntryId = 3635,
+ AuditHistoryEventDeleteEventType_ClientUserId = 3636,
+ AuditHistoryEventDeleteEventType_ParameterDataTypeId = 3637,
+ AuditHistoryEventDeleteEventType_UpdatedNode = 3638,
+ AuditUpdateMethodEventType_EventId = 3639,
+ AuditUpdateMethodEventType_EventType = 3640,
+ AuditUpdateMethodEventType_SourceNode = 3641,
+ AuditUpdateMethodEventType_SourceName = 3642,
+ AuditUpdateMethodEventType_Time = 3643,
+ AuditUpdateMethodEventType_ReceiveTime = 3644,
+ AuditUpdateMethodEventType_LocalTime = 3645,
+ AuditUpdateMethodEventType_Message = 3646,
+ AuditUpdateMethodEventType_Severity = 3647,
+ AuditUpdateMethodEventType_ActionTimeStamp = 3648,
+ AuditUpdateMethodEventType_Status = 3649,
+ AuditUpdateMethodEventType_ServerId = 3650,
+ AuditUpdateMethodEventType_ClientAuditEntryId = 3651,
+ AuditUpdateMethodEventType_ClientUserId = 3652,
+ SystemEventType_EventId = 3653,
+ SystemEventType_EventType = 3654,
+ SystemEventType_SourceNode = 3655,
+ SystemEventType_SourceName = 3656,
+ SystemEventType_Time = 3657,
+ SystemEventType_ReceiveTime = 3658,
+ SystemEventType_LocalTime = 3659,
+ SystemEventType_Message = 3660,
+ SystemEventType_Severity = 3661,
+ DeviceFailureEventType_EventId = 3662,
+ DeviceFailureEventType_EventType = 3663,
+ DeviceFailureEventType_SourceNode = 3664,
+ DeviceFailureEventType_SourceName = 3665,
+ DeviceFailureEventType_Time = 3666,
+ DeviceFailureEventType_ReceiveTime = 3667,
+ DeviceFailureEventType_LocalTime = 3668,
+ DeviceFailureEventType_Message = 3669,
+ DeviceFailureEventType_Severity = 3670,
+ BaseModelChangeEventType_EventId = 3671,
+ BaseModelChangeEventType_EventType = 3672,
+ BaseModelChangeEventType_SourceNode = 3673,
+ BaseModelChangeEventType_SourceName = 3674,
+ BaseModelChangeEventType_Time = 3675,
+ BaseModelChangeEventType_ReceiveTime = 3676,
+ BaseModelChangeEventType_LocalTime = 3677,
+ BaseModelChangeEventType_Message = 3678,
+ BaseModelChangeEventType_Severity = 3679,
+ GeneralModelChangeEventType_EventId = 3680,
+ GeneralModelChangeEventType_EventType = 3681,
+ GeneralModelChangeEventType_SourceNode = 3682,
+ GeneralModelChangeEventType_SourceName = 3683,
+ GeneralModelChangeEventType_Time = 3684,
+ GeneralModelChangeEventType_ReceiveTime = 3685,
+ GeneralModelChangeEventType_LocalTime = 3686,
+ GeneralModelChangeEventType_Message = 3687,
+ GeneralModelChangeEventType_Severity = 3688,
+ SemanticChangeEventType_EventId = 3689,
+ SemanticChangeEventType_EventType = 3690,
+ SemanticChangeEventType_SourceNode = 3691,
+ SemanticChangeEventType_SourceName = 3692,
+ SemanticChangeEventType_Time = 3693,
+ SemanticChangeEventType_ReceiveTime = 3694,
+ SemanticChangeEventType_LocalTime = 3695,
+ SemanticChangeEventType_Message = 3696,
+ SemanticChangeEventType_Severity = 3697,
+ ServerStatusType_BuildInfo_ProductUri = 3698,
+ ServerStatusType_BuildInfo_ManufacturerName = 3699,
+ ServerStatusType_BuildInfo_ProductName = 3700,
+ ServerStatusType_BuildInfo_SoftwareVersion = 3701,
+ ServerStatusType_BuildInfo_BuildNumber = 3702,
+ ServerStatusType_BuildInfo_BuildDate = 3703,
+ Server_ServerCapabilities_SoftwareCertificates = 3704,
+ Server_ServerDiagnostics_ServerDiagnosticsSummary_RejectedSessionCount = 3705,
+ Server_ServerDiagnostics_SessionsDiagnosticsSummary = 3706,
+ Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray = 3707,
+ Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray = 3708,
+ Server_ServerRedundancy_RedundancySupport = 3709,
+ FiniteStateVariableType_Name = 3714,
+ FiniteStateVariableType_Number = 3715,
+ FiniteStateVariableType_EffectiveDisplayName = 3716,
+ FiniteTransitionVariableType_Name = 3717,
+ FiniteTransitionVariableType_Number = 3718,
+ FiniteTransitionVariableType_TransitionTime = 3719,
+ StateMachineType_CurrentState_Id = 3720,
+ StateMachineType_CurrentState_Name = 3721,
+ StateMachineType_CurrentState_Number = 3722,
+ StateMachineType_CurrentState_EffectiveDisplayName = 3723,
+ StateMachineType_LastTransition_Id = 3724,
+ StateMachineType_LastTransition_Name = 3725,
+ StateMachineType_LastTransition_Number = 3726,
+ StateMachineType_LastTransition_TransitionTime = 3727,
+ FiniteStateMachineType_CurrentState_Id = 3728,
+ FiniteStateMachineType_CurrentState_Name = 3729,
+ FiniteStateMachineType_CurrentState_Number = 3730,
+ FiniteStateMachineType_CurrentState_EffectiveDisplayName = 3731,
+ FiniteStateMachineType_LastTransition_Id = 3732,
+ FiniteStateMachineType_LastTransition_Name = 3733,
+ FiniteStateMachineType_LastTransition_Number = 3734,
+ FiniteStateMachineType_LastTransition_TransitionTime = 3735,
+ InitialStateType_StateNumber = 3736,
+ TransitionEventType_EventId = 3737,
+ TransitionEventType_EventType = 3738,
+ TransitionEventType_SourceNode = 3739,
+ TransitionEventType_SourceName = 3740,
+ TransitionEventType_Time = 3741,
+ TransitionEventType_ReceiveTime = 3742,
+ TransitionEventType_LocalTime = 3743,
+ TransitionEventType_Message = 3744,
+ TransitionEventType_Severity = 3745,
+ TransitionEventType_FromState_Id = 3746,
+ TransitionEventType_FromState_Name = 3747,
+ TransitionEventType_FromState_Number = 3748,
+ TransitionEventType_FromState_EffectiveDisplayName = 3749,
+ TransitionEventType_ToState_Id = 3750,
+ TransitionEventType_ToState_Name = 3751,
+ TransitionEventType_ToState_Number = 3752,
+ TransitionEventType_ToState_EffectiveDisplayName = 3753,
+ TransitionEventType_Transition_Id = 3754,
+ TransitionEventType_Transition_Name = 3755,
+ TransitionEventType_Transition_Number = 3756,
+ TransitionEventType_Transition_TransitionTime = 3757,
+ AuditUpdateStateEventType_EventId = 3758,
+ AuditUpdateStateEventType_EventType = 3759,
+ AuditUpdateStateEventType_SourceNode = 3760,
+ AuditUpdateStateEventType_SourceName = 3761,
+ AuditUpdateStateEventType_Time = 3762,
+ AuditUpdateStateEventType_ReceiveTime = 3763,
+ AuditUpdateStateEventType_LocalTime = 3764,
+ AuditUpdateStateEventType_Message = 3765,
+ AuditUpdateStateEventType_Severity = 3766,
+ AuditUpdateStateEventType_ActionTimeStamp = 3767,
+ AuditUpdateStateEventType_Status = 3768,
+ AuditUpdateStateEventType_ServerId = 3769,
+ AuditUpdateStateEventType_ClientAuditEntryId = 3770,
+ AuditUpdateStateEventType_ClientUserId = 3771,
+ AuditUpdateStateEventType_MethodId = 3772,
+ AuditUpdateStateEventType_InputArguments = 3773,
+ AnalogItemType_Definition = 3774,
+ AnalogItemType_ValuePrecision = 3775,
+ DiscreteItemType_Definition = 3776,
+ DiscreteItemType_ValuePrecision = 3777,
+ TwoStateDiscreteType_Definition = 3778,
+ TwoStateDiscreteType_ValuePrecision = 3779,
+ MultiStateDiscreteType_Definition = 3780,
+ MultiStateDiscreteType_ValuePrecision = 3781,
+ ProgramTransitionEventType_EventId = 3782,
+ ProgramTransitionEventType_EventType = 3783,
+ ProgramTransitionEventType_SourceNode = 3784,
+ ProgramTransitionEventType_SourceName = 3785,
+ ProgramTransitionEventType_Time = 3786,
+ ProgramTransitionEventType_ReceiveTime = 3787,
+ ProgramTransitionEventType_LocalTime = 3788,
+ ProgramTransitionEventType_Message = 3789,
+ ProgramTransitionEventType_Severity = 3790,
+ ProgramTransitionEventType_FromState = 3791,
+ ProgramTransitionEventType_FromState_Id = 3792,
+ ProgramTransitionEventType_FromState_Name = 3793,
+ ProgramTransitionEventType_FromState_Number = 3794,
+ ProgramTransitionEventType_FromState_EffectiveDisplayName = 3795,
+ ProgramTransitionEventType_ToState = 3796,
+ ProgramTransitionEventType_ToState_Id = 3797,
+ ProgramTransitionEventType_ToState_Name = 3798,
+ ProgramTransitionEventType_ToState_Number = 3799,
+ ProgramTransitionEventType_ToState_EffectiveDisplayName = 3800,
+ ProgramTransitionEventType_Transition = 3801,
+ ProgramTransitionEventType_Transition_Id = 3802,
+ ProgramTransitionEventType_Transition_Name = 3803,
+ ProgramTransitionEventType_Transition_Number = 3804,
+ ProgramTransitionEventType_Transition_TransitionTime = 3805,
+ ProgramTransitionAuditEventType = 3806,
+ ProgramTransitionAuditEventType_EventId = 3807,
+ ProgramTransitionAuditEventType_EventType = 3808,
+ ProgramTransitionAuditEventType_SourceNode = 3809,
+ ProgramTransitionAuditEventType_SourceName = 3810,
+ ProgramTransitionAuditEventType_Time = 3811,
+ ProgramTransitionAuditEventType_ReceiveTime = 3812,
+ ProgramTransitionAuditEventType_LocalTime = 3813,
+ ProgramTransitionAuditEventType_Message = 3814,
+ ProgramTransitionAuditEventType_Severity = 3815,
+ ProgramTransitionAuditEventType_ActionTimeStamp = 3816,
+ ProgramTransitionAuditEventType_Status = 3817,
+ ProgramTransitionAuditEventType_ServerId = 3818,
+ ProgramTransitionAuditEventType_ClientAuditEntryId = 3819,
+ ProgramTransitionAuditEventType_ClientUserId = 3820,
+ ProgramTransitionAuditEventType_MethodId = 3821,
+ ProgramTransitionAuditEventType_InputArguments = 3822,
+ ProgramTransitionAuditEventType_OldStateId = 3823,
+ ProgramTransitionAuditEventType_NewStateId = 3824,
+ ProgramTransitionAuditEventType_Transition = 3825,
+ ProgramTransitionAuditEventType_Transition_Id = 3826,
+ ProgramTransitionAuditEventType_Transition_Name = 3827,
+ ProgramTransitionAuditEventType_Transition_Number = 3828,
+ ProgramTransitionAuditEventType_Transition_TransitionTime = 3829,
+ ProgramStateMachineType_CurrentState = 3830,
+ ProgramStateMachineType_CurrentState_Id = 3831,
+ ProgramStateMachineType_CurrentState_Name = 3832,
+ ProgramStateMachineType_CurrentState_Number = 3833,
+ ProgramStateMachineType_CurrentState_EffectiveDisplayName = 3834,
+ ProgramStateMachineType_LastTransition = 3835,
+ ProgramStateMachineType_LastTransition_Id = 3836,
+ ProgramStateMachineType_LastTransition_Name = 3837,
+ ProgramStateMachineType_LastTransition_Number = 3838,
+ ProgramStateMachineType_LastTransition_TransitionTime = 3839,
+ ProgramStateMachineType_ProgramDiagnostics_CreateSessionId = 3840,
+ ProgramStateMachineType_ProgramDiagnostics_CreateClientName = 3841,
+ ProgramStateMachineType_ProgramDiagnostics_InvocationCreationTime = 3842,
+ ProgramStateMachineType_ProgramDiagnostics_LastTransitionTime = 3843,
+ ProgramStateMachineType_ProgramDiagnostics_LastMethodCall = 3844,
+ ProgramStateMachineType_ProgramDiagnostics_LastMethodSessionId = 3845,
+ ProgramStateMachineType_ProgramDiagnostics_LastMethodInputArguments = 3846,
+ ProgramStateMachineType_ProgramDiagnostics_LastMethodOutputArguments = 3847,
+ ProgramStateMachineType_ProgramDiagnostics_LastMethodCallTime = 3848,
+ ProgramStateMachineType_ProgramDiagnostics_LastMethodReturnStatus = 3849,
+ ProgramStateMachineType_FinalResultData = 3850,
+ AddCommentMethodType = 3863,
+ AddCommentMethodType_InputArguments = 3864,
+ ConditionType_EventId = 3865,
+ ConditionType_EventType = 3866,
+ ConditionType_SourceNode = 3867,
+ ConditionType_SourceName = 3868,
+ ConditionType_Time = 3869,
+ ConditionType_ReceiveTime = 3870,
+ ConditionType_LocalTime = 3871,
+ ConditionType_Message = 3872,
+ ConditionType_Severity = 3873,
+ ConditionType_Retain = 3874,
+ ConditionType_ConditionRefresh = 3875,
+ ConditionType_ConditionRefresh_InputArguments = 3876,
+ RefreshStartEventType_EventId = 3969,
+ RefreshStartEventType_EventType = 3970,
+ RefreshStartEventType_SourceNode = 3971,
+ RefreshStartEventType_SourceName = 3972,
+ RefreshStartEventType_Time = 3973,
+ RefreshStartEventType_ReceiveTime = 3974,
+ RefreshStartEventType_LocalTime = 3975,
+ RefreshStartEventType_Message = 3976,
+ RefreshStartEventType_Severity = 3977,
+ RefreshEndEventType_EventId = 3978,
+ RefreshEndEventType_EventType = 3979,
+ RefreshEndEventType_SourceNode = 3980,
+ RefreshEndEventType_SourceName = 3981,
+ RefreshEndEventType_Time = 3982,
+ RefreshEndEventType_ReceiveTime = 3983,
+ RefreshEndEventType_LocalTime = 3984,
+ RefreshEndEventType_Message = 3985,
+ RefreshEndEventType_Severity = 3986,
+ RefreshRequiredEventType_EventId = 3987,
+ RefreshRequiredEventType_EventType = 3988,
+ RefreshRequiredEventType_SourceNode = 3989,
+ RefreshRequiredEventType_SourceName = 3990,
+ RefreshRequiredEventType_Time = 3991,
+ RefreshRequiredEventType_ReceiveTime = 3992,
+ RefreshRequiredEventType_LocalTime = 3993,
+ RefreshRequiredEventType_Message = 3994,
+ RefreshRequiredEventType_Severity = 3995,
+ AuditConditionEventType_EventId = 3996,
+ AuditConditionEventType_EventType = 3997,
+ AuditConditionEventType_SourceNode = 3998,
+ AuditConditionEventType_SourceName = 3999,
+ AuditConditionEventType_Time = 4000,
+ AuditConditionEventType_ReceiveTime = 4001,
+ AuditConditionEventType_LocalTime = 4002,
+ AuditConditionEventType_Message = 4003,
+ AuditConditionEventType_Severity = 4004,
+ AuditConditionEventType_ActionTimeStamp = 4005,
+ AuditConditionEventType_Status = 4006,
+ AuditConditionEventType_ServerId = 4007,
+ AuditConditionEventType_ClientAuditEntryId = 4008,
+ AuditConditionEventType_ClientUserId = 4009,
+ AuditConditionEventType_MethodId = 4010,
+ AuditConditionEventType_InputArguments = 4011,
+ AuditConditionEnableEventType_EventId = 4106,
+ AuditConditionEnableEventType_EventType = 4107,
+ AuditConditionEnableEventType_SourceNode = 4108,
+ AuditConditionEnableEventType_SourceName = 4109,
+ AuditConditionEnableEventType_Time = 4110,
+ AuditConditionEnableEventType_ReceiveTime = 4111,
+ AuditConditionEnableEventType_LocalTime = 4112,
+ AuditConditionEnableEventType_Message = 4113,
+ AuditConditionEnableEventType_Severity = 4114,
+ AuditConditionEnableEventType_ActionTimeStamp = 4115,
+ AuditConditionEnableEventType_Status = 4116,
+ AuditConditionEnableEventType_ServerId = 4117,
+ AuditConditionEnableEventType_ClientAuditEntryId = 4118,
+ AuditConditionEnableEventType_ClientUserId = 4119,
+ AuditConditionEnableEventType_MethodId = 4120,
+ AuditConditionEnableEventType_InputArguments = 4121,
+ AuditConditionCommentEventType_EventId = 4170,
+ AuditConditionCommentEventType_EventType = 4171,
+ AuditConditionCommentEventType_SourceNode = 4172,
+ AuditConditionCommentEventType_SourceName = 4173,
+ AuditConditionCommentEventType_Time = 4174,
+ AuditConditionCommentEventType_ReceiveTime = 4175,
+ AuditConditionCommentEventType_LocalTime = 4176,
+ AuditConditionCommentEventType_Message = 4177,
+ AuditConditionCommentEventType_Severity = 4178,
+ AuditConditionCommentEventType_ActionTimeStamp = 4179,
+ AuditConditionCommentEventType_Status = 4180,
+ AuditConditionCommentEventType_ServerId = 4181,
+ AuditConditionCommentEventType_ClientAuditEntryId = 4182,
+ AuditConditionCommentEventType_ClientUserId = 4183,
+ AuditConditionCommentEventType_MethodId = 4184,
+ AuditConditionCommentEventType_InputArguments = 4185,
+ DialogConditionType_EventId = 4188,
+ DialogConditionType_EventType = 4189,
+ DialogConditionType_SourceNode = 4190,
+ DialogConditionType_SourceName = 4191,
+ DialogConditionType_Time = 4192,
+ DialogConditionType_ReceiveTime = 4193,
+ DialogConditionType_LocalTime = 4194,
+ DialogConditionType_Message = 4195,
+ DialogConditionType_Severity = 4196,
+ DialogConditionType_Retain = 4197,
+ DialogConditionType_ConditionRefresh = 4198,
+ DialogConditionType_ConditionRefresh_InputArguments = 4199,
+ AcknowledgeableConditionType_EventId = 5113,
+ AcknowledgeableConditionType_EventType = 5114,
+ AcknowledgeableConditionType_SourceNode = 5115,
+ AcknowledgeableConditionType_SourceName = 5116,
+ AcknowledgeableConditionType_Time = 5117,
+ AcknowledgeableConditionType_ReceiveTime = 5118,
+ AcknowledgeableConditionType_LocalTime = 5119,
+ AcknowledgeableConditionType_Message = 5120,
+ AcknowledgeableConditionType_Severity = 5121,
+ AcknowledgeableConditionType_Retain = 5122,
+ AcknowledgeableConditionType_ConditionRefresh = 5123,
+ AcknowledgeableConditionType_ConditionRefresh_InputArguments = 5124,
+ AlarmConditionType_EventId = 5540,
+ AlarmConditionType_EventType = 5541,
+ AlarmConditionType_SourceNode = 5542,
+ AlarmConditionType_SourceName = 5543,
+ AlarmConditionType_Time = 5544,
+ AlarmConditionType_ReceiveTime = 5545,
+ AlarmConditionType_LocalTime = 5546,
+ AlarmConditionType_Message = 5547,
+ AlarmConditionType_Severity = 5548,
+ AlarmConditionType_Retain = 5549,
+ AlarmConditionType_ConditionRefresh = 5550,
+ AlarmConditionType_ConditionRefresh_InputArguments = 5551,
+ ShelvedStateMachineType_CurrentState = 6088,
+ ShelvedStateMachineType_CurrentState_Id = 6089,
+ ShelvedStateMachineType_CurrentState_Name = 6090,
+ ShelvedStateMachineType_CurrentState_Number = 6091,
+ ShelvedStateMachineType_CurrentState_EffectiveDisplayName = 6092,
+ ShelvedStateMachineType_LastTransition = 6093,
+ ShelvedStateMachineType_LastTransition_Id = 6094,
+ ShelvedStateMachineType_LastTransition_Name = 6095,
+ ShelvedStateMachineType_LastTransition_Number = 6096,
+ ShelvedStateMachineType_LastTransition_TransitionTime = 6097,
+ ShelvedStateMachineType_Unshelved_StateNumber = 6098,
+ ShelvedStateMachineType_TimedShelved_StateNumber = 6100,
+ ShelvedStateMachineType_OneShotShelved_StateNumber = 6101,
+ TimedShelveMethodType = 6102,
+ TimedShelveMethodType_InputArguments = 6103,
+ LimitAlarmType_EventId = 6116,
+ LimitAlarmType_EventType = 6117,
+ LimitAlarmType_SourceNode = 6118,
+ LimitAlarmType_SourceName = 6119,
+ LimitAlarmType_Time = 6120,
+ LimitAlarmType_ReceiveTime = 6121,
+ LimitAlarmType_LocalTime = 6122,
+ LimitAlarmType_Message = 6123,
+ LimitAlarmType_Severity = 6124,
+ LimitAlarmType_Retain = 6125,
+ LimitAlarmType_ConditionRefresh = 6126,
+ LimitAlarmType_ConditionRefresh_InputArguments = 6127,
+ IdType_EnumStrings = 7591,
+ EnumValueType = 7594,
+ MessageSecurityMode_EnumStrings = 7595,
+ UserTokenType_EnumStrings = 7596,
+ ApplicationType_EnumStrings = 7597,
+ SecurityTokenRequestType_EnumStrings = 7598,
+ BrowseDirection_EnumStrings = 7603,
+ FilterOperator_EnumStrings = 7605,
+ TimestampsToReturn_EnumStrings = 7606,
+ MonitoringMode_EnumStrings = 7608,
+ DataChangeTrigger_EnumStrings = 7609,
+ DeadbandType_EnumStrings = 7610,
+ RedundancySupport_EnumStrings = 7611,
+ ServerState_EnumStrings = 7612,
+ ExceptionDeviationFormat_EnumStrings = 7614,
+ EnumValueType_Encoding_DefaultXml = 7616,
+ OpcUa_BinarySchema = 7617,
+ OpcUa_BinarySchema_DataTypeVersion = 7618,
+ OpcUa_BinarySchema_NamespaceUri = 7619,
+ OpcUa_BinarySchema_Argument = 7650,
+ OpcUa_BinarySchema_Argument_DataTypeVersion = 7651,
+ OpcUa_BinarySchema_Argument_DictionaryFragment = 7652,
+ OpcUa_BinarySchema_EnumValueType = 7656,
+ OpcUa_BinarySchema_EnumValueType_DataTypeVersion = 7657,
+ OpcUa_BinarySchema_EnumValueType_DictionaryFragment = 7658,
+ OpcUa_BinarySchema_StatusResult = 7659,
+ OpcUa_BinarySchema_StatusResult_DataTypeVersion = 7660,
+ OpcUa_BinarySchema_StatusResult_DictionaryFragment = 7661,
+ OpcUa_BinarySchema_UserTokenPolicy = 7662,
+ OpcUa_BinarySchema_UserTokenPolicy_DataTypeVersion = 7663,
+ OpcUa_BinarySchema_UserTokenPolicy_DictionaryFragment = 7664,
+ OpcUa_BinarySchema_ApplicationDescription = 7665,
+ OpcUa_BinarySchema_ApplicationDescription_DataTypeVersion = 7666,
+ OpcUa_BinarySchema_ApplicationDescription_DictionaryFragment = 7667,
+ OpcUa_BinarySchema_EndpointDescription = 7668,
+ OpcUa_BinarySchema_EndpointDescription_DataTypeVersion = 7669,
+ OpcUa_BinarySchema_EndpointDescription_DictionaryFragment = 7670,
+ OpcUa_BinarySchema_UserIdentityToken = 7671,
+ OpcUa_BinarySchema_UserIdentityToken_DataTypeVersion = 7672,
+ OpcUa_BinarySchema_UserIdentityToken_DictionaryFragment = 7673,
+ OpcUa_BinarySchema_AnonymousIdentityToken = 7674,
+ OpcUa_BinarySchema_AnonymousIdentityToken_DataTypeVersion = 7675,
+ OpcUa_BinarySchema_AnonymousIdentityToken_DictionaryFragment = 7676,
+ OpcUa_BinarySchema_UserNameIdentityToken = 7677,
+ OpcUa_BinarySchema_UserNameIdentityToken_DataTypeVersion = 7678,
+ OpcUa_BinarySchema_UserNameIdentityToken_DictionaryFragment = 7679,
+ OpcUa_BinarySchema_X509IdentityToken = 7680,
+ OpcUa_BinarySchema_X509IdentityToken_DataTypeVersion = 7681,
+ OpcUa_BinarySchema_X509IdentityToken_DictionaryFragment = 7682,
+ OpcUa_BinarySchema_IssuedIdentityToken = 7683,
+ OpcUa_BinarySchema_IssuedIdentityToken_DataTypeVersion = 7684,
+ OpcUa_BinarySchema_IssuedIdentityToken_DictionaryFragment = 7685,
+ OpcUa_BinarySchema_EndpointConfiguration = 7686,
+ OpcUa_BinarySchema_EndpointConfiguration_DataTypeVersion = 7687,
+ OpcUa_BinarySchema_EndpointConfiguration_DictionaryFragment = 7688,
+ OpcUa_BinarySchema_BuildInfo = 7692,
+ OpcUa_BinarySchema_BuildInfo_DataTypeVersion = 7693,
+ OpcUa_BinarySchema_BuildInfo_DictionaryFragment = 7694,
+ OpcUa_BinarySchema_SignedSoftwareCertificate = 7698,
+ OpcUa_BinarySchema_SignedSoftwareCertificate_DataTypeVersion = 7699,
+ OpcUa_BinarySchema_SignedSoftwareCertificate_DictionaryFragment = 7700,
+ OpcUa_BinarySchema_AddNodesItem = 7728,
+ OpcUa_BinarySchema_AddNodesItem_DataTypeVersion = 7729,
+ OpcUa_BinarySchema_AddNodesItem_DictionaryFragment = 7730,
+ OpcUa_BinarySchema_AddReferencesItem = 7731,
+ OpcUa_BinarySchema_AddReferencesItem_DataTypeVersion = 7732,
+ OpcUa_BinarySchema_AddReferencesItem_DictionaryFragment = 7733,
+ OpcUa_BinarySchema_DeleteNodesItem = 7734,
+ OpcUa_BinarySchema_DeleteNodesItem_DataTypeVersion = 7735,
+ OpcUa_BinarySchema_DeleteNodesItem_DictionaryFragment = 7736,
+ OpcUa_BinarySchema_DeleteReferencesItem = 7737,
+ OpcUa_BinarySchema_DeleteReferencesItem_DataTypeVersion = 7738,
+ OpcUa_BinarySchema_DeleteReferencesItem_DictionaryFragment = 7739,
+ OpcUa_BinarySchema_RegisteredServer = 7782,
+ OpcUa_BinarySchema_RegisteredServer_DataTypeVersion = 7783,
+ OpcUa_BinarySchema_RegisteredServer_DictionaryFragment = 7784,
+ OpcUa_BinarySchema_ContentFilterElement = 7929,
+ OpcUa_BinarySchema_ContentFilterElement_DataTypeVersion = 7930,
+ OpcUa_BinarySchema_ContentFilterElement_DictionaryFragment = 7931,
+ OpcUa_BinarySchema_ContentFilter = 7932,
+ OpcUa_BinarySchema_ContentFilter_DataTypeVersion = 7933,
+ OpcUa_BinarySchema_ContentFilter_DictionaryFragment = 7934,
+ OpcUa_BinarySchema_FilterOperand = 7935,
+ OpcUa_BinarySchema_FilterOperand_DataTypeVersion = 7936,
+ OpcUa_BinarySchema_FilterOperand_DictionaryFragment = 7937,
+ OpcUa_BinarySchema_ElementOperand = 7938,
+ OpcUa_BinarySchema_ElementOperand_DataTypeVersion = 7939,
+ OpcUa_BinarySchema_ElementOperand_DictionaryFragment = 7940,
+ OpcUa_BinarySchema_LiteralOperand = 7941,
+ OpcUa_BinarySchema_LiteralOperand_DataTypeVersion = 7942,
+ OpcUa_BinarySchema_LiteralOperand_DictionaryFragment = 7943,
+ OpcUa_BinarySchema_AttributeOperand = 7944,
+ OpcUa_BinarySchema_AttributeOperand_DataTypeVersion = 7945,
+ OpcUa_BinarySchema_AttributeOperand_DictionaryFragment = 7946,
+ OpcUa_BinarySchema_SimpleAttributeOperand = 7947,
+ OpcUa_BinarySchema_SimpleAttributeOperand_DataTypeVersion = 7948,
+ OpcUa_BinarySchema_SimpleAttributeOperand_DictionaryFragment = 7949,
+ OpcUa_BinarySchema_HistoryEvent = 8004,
+ OpcUa_BinarySchema_HistoryEvent_DataTypeVersion = 8005,
+ OpcUa_BinarySchema_HistoryEvent_DictionaryFragment = 8006,
+ OpcUa_BinarySchema_MonitoringFilter = 8067,
+ OpcUa_BinarySchema_MonitoringFilter_DataTypeVersion = 8068,
+ OpcUa_BinarySchema_MonitoringFilter_DictionaryFragment = 8069,
+ OpcUa_BinarySchema_EventFilter = 8073,
+ OpcUa_BinarySchema_EventFilter_DataTypeVersion = 8074,
+ OpcUa_BinarySchema_EventFilter_DictionaryFragment = 8075,
+ OpcUa_BinarySchema_AggregateConfiguration = 8076,
+ OpcUa_BinarySchema_AggregateConfiguration_DataTypeVersion = 8077,
+ OpcUa_BinarySchema_AggregateConfiguration_DictionaryFragment = 8078,
+ OpcUa_BinarySchema_HistoryEventFieldList = 8172,
+ OpcUa_BinarySchema_HistoryEventFieldList_DataTypeVersion = 8173,
+ OpcUa_BinarySchema_HistoryEventFieldList_DictionaryFragment = 8174,
+ OpcUa_BinarySchema_RedundantServerDataType = 8208,
+ OpcUa_BinarySchema_RedundantServerDataType_DataTypeVersion = 8209,
+ OpcUa_BinarySchema_RedundantServerDataType_DictionaryFragment = 8210,
+ OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType = 8211,
+ OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType_DataTypeVersion = 8212,
+ OpcUa_BinarySchema_SamplingIntervalDiagnosticsDataType_DictionaryFragment = 8213,
+ OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType = 8214,
+ OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType_DataTypeVersion = 8215,
+ OpcUa_BinarySchema_ServerDiagnosticsSummaryDataType_DictionaryFragment = 8216,
+ OpcUa_BinarySchema_ServerStatusDataType = 8217,
+ OpcUa_BinarySchema_ServerStatusDataType_DataTypeVersion = 8218,
+ OpcUa_BinarySchema_ServerStatusDataType_DictionaryFragment = 8219,
+ OpcUa_BinarySchema_SessionDiagnosticsDataType = 8220,
+ OpcUa_BinarySchema_SessionDiagnosticsDataType_DataTypeVersion = 8221,
+ OpcUa_BinarySchema_SessionDiagnosticsDataType_DictionaryFragment = 8222,
+ OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType = 8223,
+ OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType_DataTypeVersion = 8224,
+ OpcUa_BinarySchema_SessionSecurityDiagnosticsDataType_DictionaryFragment = 8225,
+ OpcUa_BinarySchema_ServiceCounterDataType = 8226,
+ OpcUa_BinarySchema_ServiceCounterDataType_DataTypeVersion = 8227,
+ OpcUa_BinarySchema_ServiceCounterDataType_DictionaryFragment = 8228,
+ OpcUa_BinarySchema_SubscriptionDiagnosticsDataType = 8229,
+ OpcUa_BinarySchema_SubscriptionDiagnosticsDataType_DataTypeVersion = 8230,
+ OpcUa_BinarySchema_SubscriptionDiagnosticsDataType_DictionaryFragment = 8231,
+ OpcUa_BinarySchema_ModelChangeStructureDataType = 8232,
+ OpcUa_BinarySchema_ModelChangeStructureDataType_DataTypeVersion = 8233,
+ OpcUa_BinarySchema_ModelChangeStructureDataType_DictionaryFragment = 8234,
+ OpcUa_BinarySchema_SemanticChangeStructureDataType = 8235,
+ OpcUa_BinarySchema_SemanticChangeStructureDataType_DataTypeVersion = 8236,
+ OpcUa_BinarySchema_SemanticChangeStructureDataType_DictionaryFragment = 8237,
+ OpcUa_BinarySchema_Range = 8238,
+ OpcUa_BinarySchema_Range_DataTypeVersion = 8239,
+ OpcUa_BinarySchema_Range_DictionaryFragment = 8240,
+ OpcUa_BinarySchema_EUInformation = 8241,
+ OpcUa_BinarySchema_EUInformation_DataTypeVersion = 8242,
+ OpcUa_BinarySchema_EUInformation_DictionaryFragment = 8243,
+ OpcUa_BinarySchema_Annotation = 8244,
+ OpcUa_BinarySchema_Annotation_DataTypeVersion = 8245,
+ OpcUa_BinarySchema_Annotation_DictionaryFragment = 8246,
+ OpcUa_BinarySchema_ProgramDiagnosticDataType = 8247,
+ OpcUa_BinarySchema_ProgramDiagnosticDataType_DataTypeVersion = 8248,
+ OpcUa_BinarySchema_ProgramDiagnosticDataType_DictionaryFragment = 8249,
+ EnumValueType_Encoding_DefaultBinary = 8251,
+ OpcUa_XmlSchema = 8252,
+ OpcUa_XmlSchema_DataTypeVersion = 8253,
+ OpcUa_XmlSchema_NamespaceUri = 8254,
+ OpcUa_XmlSchema_Argument = 8285,
+ OpcUa_XmlSchema_Argument_DataTypeVersion = 8286,
+ OpcUa_XmlSchema_Argument_DictionaryFragment = 8287,
+ OpcUa_XmlSchema_EnumValueType = 8291,
+ OpcUa_XmlSchema_EnumValueType_DataTypeVersion = 8292,
+ OpcUa_XmlSchema_EnumValueType_DictionaryFragment = 8293,
+ OpcUa_XmlSchema_StatusResult = 8294,
+ OpcUa_XmlSchema_StatusResult_DataTypeVersion = 8295,
+ OpcUa_XmlSchema_StatusResult_DictionaryFragment = 8296,
+ OpcUa_XmlSchema_UserTokenPolicy = 8297,
+ OpcUa_XmlSchema_UserTokenPolicy_DataTypeVersion = 8298,
+ OpcUa_XmlSchema_UserTokenPolicy_DictionaryFragment = 8299,
+ OpcUa_XmlSchema_ApplicationDescription = 8300,
+ OpcUa_XmlSchema_ApplicationDescription_DataTypeVersion = 8301,
+ OpcUa_XmlSchema_ApplicationDescription_DictionaryFragment = 8302,
+ OpcUa_XmlSchema_EndpointDescription = 8303,
+ OpcUa_XmlSchema_EndpointDescription_DataTypeVersion = 8304,
+ OpcUa_XmlSchema_EndpointDescription_DictionaryFragment = 8305,
+ OpcUa_XmlSchema_UserIdentityToken = 8306,
+ OpcUa_XmlSchema_UserIdentityToken_DataTypeVersion = 8307,
+ OpcUa_XmlSchema_UserIdentityToken_DictionaryFragment = 8308,
+ OpcUa_XmlSchema_AnonymousIdentityToken = 8309,
+ OpcUa_XmlSchema_AnonymousIdentityToken_DataTypeVersion = 8310,
+ OpcUa_XmlSchema_AnonymousIdentityToken_DictionaryFragment = 8311,
+ OpcUa_XmlSchema_UserNameIdentityToken = 8312,
+ OpcUa_XmlSchema_UserNameIdentityToken_DataTypeVersion = 8313,
+ OpcUa_XmlSchema_UserNameIdentityToken_DictionaryFragment = 8314,
+ OpcUa_XmlSchema_X509IdentityToken = 8315,
+ OpcUa_XmlSchema_X509IdentityToken_DataTypeVersion = 8316,
+ OpcUa_XmlSchema_X509IdentityToken_DictionaryFragment = 8317,
+ OpcUa_XmlSchema_IssuedIdentityToken = 8318,
+ OpcUa_XmlSchema_IssuedIdentityToken_DataTypeVersion = 8319,
+ OpcUa_XmlSchema_IssuedIdentityToken_DictionaryFragment = 8320,
+ OpcUa_XmlSchema_EndpointConfiguration = 8321,
+ OpcUa_XmlSchema_EndpointConfiguration_DataTypeVersion = 8322,
+ OpcUa_XmlSchema_EndpointConfiguration_DictionaryFragment = 8323,
+ OpcUa_XmlSchema_BuildInfo = 8327,
+ OpcUa_XmlSchema_BuildInfo_DataTypeVersion = 8328,
+ OpcUa_XmlSchema_BuildInfo_DictionaryFragment = 8329,
+ OpcUa_XmlSchema_SignedSoftwareCertificate = 8333,
+ OpcUa_XmlSchema_SignedSoftwareCertificate_DataTypeVersion = 8334,
+ OpcUa_XmlSchema_SignedSoftwareCertificate_DictionaryFragment = 8335,
+ OpcUa_XmlSchema_AddNodesItem = 8363,
+ OpcUa_XmlSchema_AddNodesItem_DataTypeVersion = 8364,
+ OpcUa_XmlSchema_AddNodesItem_DictionaryFragment = 8365,
+ OpcUa_XmlSchema_AddReferencesItem = 8366,
+ OpcUa_XmlSchema_AddReferencesItem_DataTypeVersion = 8367,
+ OpcUa_XmlSchema_AddReferencesItem_DictionaryFragment = 8368,
+ OpcUa_XmlSchema_DeleteNodesItem = 8369,
+ OpcUa_XmlSchema_DeleteNodesItem_DataTypeVersion = 8370,
+ OpcUa_XmlSchema_DeleteNodesItem_DictionaryFragment = 8371,
+ OpcUa_XmlSchema_DeleteReferencesItem = 8372,
+ OpcUa_XmlSchema_DeleteReferencesItem_DataTypeVersion = 8373,
+ OpcUa_XmlSchema_DeleteReferencesItem_DictionaryFragment = 8374,
+ OpcUa_XmlSchema_RegisteredServer = 8417,
+ OpcUa_XmlSchema_RegisteredServer_DataTypeVersion = 8418,
+ OpcUa_XmlSchema_RegisteredServer_DictionaryFragment = 8419,
+ OpcUa_XmlSchema_ContentFilterElement = 8564,
+ OpcUa_XmlSchema_ContentFilterElement_DataTypeVersion = 8565,
+ OpcUa_XmlSchema_ContentFilterElement_DictionaryFragment = 8566,
+ OpcUa_XmlSchema_ContentFilter = 8567,
+ OpcUa_XmlSchema_ContentFilter_DataTypeVersion = 8568,
+ OpcUa_XmlSchema_ContentFilter_DictionaryFragment = 8569,
+ OpcUa_XmlSchema_FilterOperand = 8570,
+ OpcUa_XmlSchema_FilterOperand_DataTypeVersion = 8571,
+ OpcUa_XmlSchema_FilterOperand_DictionaryFragment = 8572,
+ OpcUa_XmlSchema_ElementOperand = 8573,
+ OpcUa_XmlSchema_ElementOperand_DataTypeVersion = 8574,
+ OpcUa_XmlSchema_ElementOperand_DictionaryFragment = 8575,
+ OpcUa_XmlSchema_LiteralOperand = 8576,
+ OpcUa_XmlSchema_LiteralOperand_DataTypeVersion = 8577,
+ OpcUa_XmlSchema_LiteralOperand_DictionaryFragment = 8578,
+ OpcUa_XmlSchema_AttributeOperand = 8579,
+ OpcUa_XmlSchema_AttributeOperand_DataTypeVersion = 8580,
+ OpcUa_XmlSchema_AttributeOperand_DictionaryFragment = 8581,
+ OpcUa_XmlSchema_SimpleAttributeOperand = 8582,
+ OpcUa_XmlSchema_SimpleAttributeOperand_DataTypeVersion = 8583,
+ OpcUa_XmlSchema_SimpleAttributeOperand_DictionaryFragment = 8584,
+ OpcUa_XmlSchema_HistoryEvent = 8639,
+ OpcUa_XmlSchema_HistoryEvent_DataTypeVersion = 8640,
+ OpcUa_XmlSchema_HistoryEvent_DictionaryFragment = 8641,
+ OpcUa_XmlSchema_MonitoringFilter = 8702,
+ OpcUa_XmlSchema_MonitoringFilter_DataTypeVersion = 8703,
+ OpcUa_XmlSchema_MonitoringFilter_DictionaryFragment = 8704,
+ OpcUa_XmlSchema_EventFilter = 8708,
+ OpcUa_XmlSchema_EventFilter_DataTypeVersion = 8709,
+ OpcUa_XmlSchema_EventFilter_DictionaryFragment = 8710,
+ OpcUa_XmlSchema_AggregateConfiguration = 8711,
+ OpcUa_XmlSchema_AggregateConfiguration_DataTypeVersion = 8712,
+ OpcUa_XmlSchema_AggregateConfiguration_DictionaryFragment = 8713,
+ OpcUa_XmlSchema_HistoryEventFieldList = 8807,
+ OpcUa_XmlSchema_HistoryEventFieldList_DataTypeVersion = 8808,
+ OpcUa_XmlSchema_HistoryEventFieldList_DictionaryFragment = 8809,
+ OpcUa_XmlSchema_RedundantServerDataType = 8843,
+ OpcUa_XmlSchema_RedundantServerDataType_DataTypeVersion = 8844,
+ OpcUa_XmlSchema_RedundantServerDataType_DictionaryFragment = 8845,
+ OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType = 8846,
+ OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType_DataTypeVersion = 8847,
+ OpcUa_XmlSchema_SamplingIntervalDiagnosticsDataType_DictionaryFragment = 8848,
+ OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType = 8849,
+ OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType_DataTypeVersion = 8850,
+ OpcUa_XmlSchema_ServerDiagnosticsSummaryDataType_DictionaryFragment = 8851,
+ OpcUa_XmlSchema_ServerStatusDataType = 8852,
+ OpcUa_XmlSchema_ServerStatusDataType_DataTypeVersion = 8853,
+ OpcUa_XmlSchema_ServerStatusDataType_DictionaryFragment = 8854,
+ OpcUa_XmlSchema_SessionDiagnosticsDataType = 8855,
+ OpcUa_XmlSchema_SessionDiagnosticsDataType_DataTypeVersion = 8856,
+ OpcUa_XmlSchema_SessionDiagnosticsDataType_DictionaryFragment = 8857,
+ OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType = 8858,
+ OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType_DataTypeVersion = 8859,
+ OpcUa_XmlSchema_SessionSecurityDiagnosticsDataType_DictionaryFragment = 8860,
+ OpcUa_XmlSchema_ServiceCounterDataType = 8861,
+ OpcUa_XmlSchema_ServiceCounterDataType_DataTypeVersion = 8862,
+ OpcUa_XmlSchema_ServiceCounterDataType_DictionaryFragment = 8863,
+ OpcUa_XmlSchema_SubscriptionDiagnosticsDataType = 8864,
+ OpcUa_XmlSchema_SubscriptionDiagnosticsDataType_DataTypeVersion = 8865,
+ OpcUa_XmlSchema_SubscriptionDiagnosticsDataType_DictionaryFragment = 8866,
+ OpcUa_XmlSchema_ModelChangeStructureDataType = 8867,
+ OpcUa_XmlSchema_ModelChangeStructureDataType_DataTypeVersion = 8868,
+ OpcUa_XmlSchema_ModelChangeStructureDataType_DictionaryFragment = 8869,
+ OpcUa_XmlSchema_SemanticChangeStructureDataType = 8870,
+ OpcUa_XmlSchema_SemanticChangeStructureDataType_DataTypeVersion = 8871,
+ OpcUa_XmlSchema_SemanticChangeStructureDataType_DictionaryFragment = 8872,
+ OpcUa_XmlSchema_Range = 8873,
+ OpcUa_XmlSchema_Range_DataTypeVersion = 8874,
+ OpcUa_XmlSchema_Range_DictionaryFragment = 8875,
+ OpcUa_XmlSchema_EUInformation = 8876,
+ OpcUa_XmlSchema_EUInformation_DataTypeVersion = 8877,
+ OpcUa_XmlSchema_EUInformation_DictionaryFragment = 8878,
+ OpcUa_XmlSchema_Annotation = 8879,
+ OpcUa_XmlSchema_Annotation_DataTypeVersion = 8880,
+ OpcUa_XmlSchema_Annotation_DictionaryFragment = 8881,
+ OpcUa_XmlSchema_ProgramDiagnosticDataType = 8882,
+ OpcUa_XmlSchema_ProgramDiagnosticDataType_DataTypeVersion = 8883,
+ OpcUa_XmlSchema_ProgramDiagnosticDataType_DictionaryFragment = 8884,
+ SubscriptionDiagnosticsType_MaxLifetimeCount = 8888,
+ SubscriptionDiagnosticsType_LatePublishRequestCount = 8889,
+ SubscriptionDiagnosticsType_CurrentKeepAliveCount = 8890,
+ SubscriptionDiagnosticsType_CurrentLifetimeCount = 8891,
+ SubscriptionDiagnosticsType_UnacknowledgedMessageCount = 8892,
+ SubscriptionDiagnosticsType_DiscardedMessageCount = 8893,
+ SubscriptionDiagnosticsType_MonitoredItemCount = 8894,
+ SubscriptionDiagnosticsType_DisabledMonitoredItemCount = 8895,
+ SubscriptionDiagnosticsType_MonitoringQueueOverflowCount = 8896,
+ SubscriptionDiagnosticsType_NextSequenceNumber = 8897,
+ SessionDiagnosticsObjectType_SessionDiagnostics_TotalRequestCount = 8898,
+ SessionDiagnosticsVariableType_TotalRequestCount = 8900,
+ SubscriptionDiagnosticsType_EventQueueOverFlowCount = 8902,
+ TimeZoneDataType = 8912,
+ TimeZoneDataType_Encoding_DefaultXml = 8913,
+ OpcUa_BinarySchema_TimeZoneDataType = 8914,
+ OpcUa_BinarySchema_TimeZoneDataType_DataTypeVersion = 8915,
+ OpcUa_BinarySchema_TimeZoneDataType_DictionaryFragment = 8916,
+ TimeZoneDataType_Encoding_DefaultBinary = 8917,
+ OpcUa_XmlSchema_TimeZoneDataType = 8918,
+ OpcUa_XmlSchema_TimeZoneDataType_DataTypeVersion = 8919,
+ OpcUa_XmlSchema_TimeZoneDataType_DictionaryFragment = 8920,
+ AuditConditionRespondEventType = 8927,
+ AuditConditionRespondEventType_EventId = 8928,
+ AuditConditionRespondEventType_EventType = 8929,
+ AuditConditionRespondEventType_SourceNode = 8930,
+ AuditConditionRespondEventType_SourceName = 8931,
+ AuditConditionRespondEventType_Time = 8932,
+ AuditConditionRespondEventType_ReceiveTime = 8933,
+ AuditConditionRespondEventType_LocalTime = 8934,
+ AuditConditionRespondEventType_Message = 8935,
+ AuditConditionRespondEventType_Severity = 8936,
+ AuditConditionRespondEventType_ActionTimeStamp = 8937,
+ AuditConditionRespondEventType_Status = 8938,
+ AuditConditionRespondEventType_ServerId = 8939,
+ AuditConditionRespondEventType_ClientAuditEntryId = 8940,
+ AuditConditionRespondEventType_ClientUserId = 8941,
+ AuditConditionRespondEventType_MethodId = 8942,
+ AuditConditionRespondEventType_InputArguments = 8943,
+ AuditConditionAcknowledgeEventType = 8944,
+ AuditConditionAcknowledgeEventType_EventId = 8945,
+ AuditConditionAcknowledgeEventType_EventType = 8946,
+ AuditConditionAcknowledgeEventType_SourceNode = 8947,
+ AuditConditionAcknowledgeEventType_SourceName = 8948,
+ AuditConditionAcknowledgeEventType_Time = 8949,
+ AuditConditionAcknowledgeEventType_ReceiveTime = 8950,
+ AuditConditionAcknowledgeEventType_LocalTime = 8951,
+ AuditConditionAcknowledgeEventType_Message = 8952,
+ AuditConditionAcknowledgeEventType_Severity = 8953,
+ AuditConditionAcknowledgeEventType_ActionTimeStamp = 8954,
+ AuditConditionAcknowledgeEventType_Status = 8955,
+ AuditConditionAcknowledgeEventType_ServerId = 8956,
+ AuditConditionAcknowledgeEventType_ClientAuditEntryId = 8957,
+ AuditConditionAcknowledgeEventType_ClientUserId = 8958,
+ AuditConditionAcknowledgeEventType_MethodId = 8959,
+ AuditConditionAcknowledgeEventType_InputArguments = 8960,
+ AuditConditionConfirmEventType = 8961,
+ AuditConditionConfirmEventType_EventId = 8962,
+ AuditConditionConfirmEventType_EventType = 8963,
+ AuditConditionConfirmEventType_SourceNode = 8964,
+ AuditConditionConfirmEventType_SourceName = 8965,
+ AuditConditionConfirmEventType_Time = 8966,
+ AuditConditionConfirmEventType_ReceiveTime = 8967,
+ AuditConditionConfirmEventType_LocalTime = 8968,
+ AuditConditionConfirmEventType_Message = 8969,
+ AuditConditionConfirmEventType_Severity = 8970,
+ AuditConditionConfirmEventType_ActionTimeStamp = 8971,
+ AuditConditionConfirmEventType_Status = 8972,
+ AuditConditionConfirmEventType_ServerId = 8973,
+ AuditConditionConfirmEventType_ClientAuditEntryId = 8974,
+ AuditConditionConfirmEventType_ClientUserId = 8975,
+ AuditConditionConfirmEventType_MethodId = 8976,
+ AuditConditionConfirmEventType_InputArguments = 8977,
+ TwoStateVariableType = 8995,
+ TwoStateVariableType_Id = 8996,
+ TwoStateVariableType_Name = 8997,
+ TwoStateVariableType_Number = 8998,
+ TwoStateVariableType_EffectiveDisplayName = 8999,
+ TwoStateVariableType_TransitionTime = 9000,
+ TwoStateVariableType_EffectiveTransitionTime = 9001,
+ ConditionVariableType = 9002,
+ ConditionVariableType_SourceTimestamp = 9003,
+ HasTrueSubState = 9004,
+ HasFalseSubState = 9005,
+ HasCondition = 9006,
+ ConditionRefreshMethodType = 9007,
+ ConditionRefreshMethodType_InputArguments = 9008,
+ ConditionType_ConditionName = 9009,
+ ConditionType_BranchId = 9010,
+ ConditionType_EnabledState = 9011,
+ ConditionType_EnabledState_Id = 9012,
+ ConditionType_EnabledState_Name = 9013,
+ ConditionType_EnabledState_Number = 9014,
+ ConditionType_EnabledState_EffectiveDisplayName = 9015,
+ ConditionType_EnabledState_TransitionTime = 9016,
+ ConditionType_EnabledState_EffectiveTransitionTime = 9017,
+ ConditionType_EnabledState_TrueState = 9018,
+ ConditionType_EnabledState_FalseState = 9019,
+ ConditionType_Quality = 9020,
+ ConditionType_Quality_SourceTimestamp = 9021,
+ ConditionType_LastSeverity = 9022,
+ ConditionType_LastSeverity_SourceTimestamp = 9023,
+ ConditionType_Comment = 9024,
+ ConditionType_Comment_SourceTimestamp = 9025,
+ ConditionType_ClientUserId = 9026,
+ ConditionType_Enable = 9027,
+ ConditionType_Disable = 9028,
+ ConditionType_AddComment = 9029,
+ ConditionType_AddComment_InputArguments = 9030,
+ DialogResponseMethodType = 9031,
+ DialogResponseMethodType_InputArguments = 9032,
+ DialogConditionType_ConditionName = 9033,
+ DialogConditionType_BranchId = 9034,
+ DialogConditionType_EnabledState = 9035,
+ DialogConditionType_EnabledState_Id = 9036,
+ DialogConditionType_EnabledState_Name = 9037,
+ DialogConditionType_EnabledState_Number = 9038,
+ DialogConditionType_EnabledState_EffectiveDisplayName = 9039,
+ DialogConditionType_EnabledState_TransitionTime = 9040,
+ DialogConditionType_EnabledState_EffectiveTransitionTime = 9041,
+ DialogConditionType_EnabledState_TrueState = 9042,
+ DialogConditionType_EnabledState_FalseState = 9043,
+ DialogConditionType_Quality = 9044,
+ DialogConditionType_Quality_SourceTimestamp = 9045,
+ DialogConditionType_LastSeverity = 9046,
+ DialogConditionType_LastSeverity_SourceTimestamp = 9047,
+ DialogConditionType_Comment = 9048,
+ DialogConditionType_Comment_SourceTimestamp = 9049,
+ DialogConditionType_ClientUserId = 9050,
+ DialogConditionType_Enable = 9051,
+ DialogConditionType_Disable = 9052,
+ DialogConditionType_AddComment = 9053,
+ DialogConditionType_AddComment_InputArguments = 9054,
+ DialogConditionType_DialogState = 9055,
+ DialogConditionType_DialogState_Id = 9056,
+ DialogConditionType_DialogState_Name = 9057,
+ DialogConditionType_DialogState_Number = 9058,
+ DialogConditionType_DialogState_EffectiveDisplayName = 9059,
+ DialogConditionType_DialogState_TransitionTime = 9060,
+ DialogConditionType_DialogState_EffectiveTransitionTime = 9061,
+ DialogConditionType_DialogState_TrueState = 9062,
+ DialogConditionType_DialogState_FalseState = 9063,
+ DialogConditionType_ResponseOptionSet = 9064,
+ DialogConditionType_DefaultResponse = 9065,
+ DialogConditionType_OkResponse = 9066,
+ DialogConditionType_CancelResponse = 9067,
+ DialogConditionType_LastResponse = 9068,
+ DialogConditionType_Respond = 9069,
+ DialogConditionType_Respond_InputArguments = 9070,
+ AcknowledgeableConditionType_ConditionName = 9071,
+ AcknowledgeableConditionType_BranchId = 9072,
+ AcknowledgeableConditionType_EnabledState = 9073,
+ AcknowledgeableConditionType_EnabledState_Id = 9074,
+ AcknowledgeableConditionType_EnabledState_Name = 9075,
+ AcknowledgeableConditionType_EnabledState_Number = 9076,
+ AcknowledgeableConditionType_EnabledState_EffectiveDisplayName = 9077,
+ AcknowledgeableConditionType_EnabledState_TransitionTime = 9078,
+ AcknowledgeableConditionType_EnabledState_EffectiveTransitionTime = 9079,
+ AcknowledgeableConditionType_EnabledState_TrueState = 9080,
+ AcknowledgeableConditionType_EnabledState_FalseState = 9081,
+ AcknowledgeableConditionType_Quality = 9082,
+ AcknowledgeableConditionType_Quality_SourceTimestamp = 9083,
+ AcknowledgeableConditionType_LastSeverity = 9084,
+ AcknowledgeableConditionType_LastSeverity_SourceTimestamp = 9085,
+ AcknowledgeableConditionType_Comment = 9086,
+ AcknowledgeableConditionType_Comment_SourceTimestamp = 9087,
+ AcknowledgeableConditionType_ClientUserId = 9088,
+ AcknowledgeableConditionType_Enable = 9089,
+ AcknowledgeableConditionType_Disable = 9090,
+ AcknowledgeableConditionType_AddComment = 9091,
+ AcknowledgeableConditionType_AddComment_InputArguments = 9092,
+ AcknowledgeableConditionType_AckedState = 9093,
+ AcknowledgeableConditionType_AckedState_Id = 9094,
+ AcknowledgeableConditionType_AckedState_Name = 9095,
+ AcknowledgeableConditionType_AckedState_Number = 9096,
+ AcknowledgeableConditionType_AckedState_EffectiveDisplayName = 9097,
+ AcknowledgeableConditionType_AckedState_TransitionTime = 9098,
+ AcknowledgeableConditionType_AckedState_EffectiveTransitionTime = 9099,
+ AcknowledgeableConditionType_AckedState_TrueState = 9100,
+ AcknowledgeableConditionType_AckedState_FalseState = 9101,
+ AcknowledgeableConditionType_ConfirmedState = 9102,
+ AcknowledgeableConditionType_ConfirmedState_Id = 9103,
+ AcknowledgeableConditionType_ConfirmedState_Name = 9104,
+ AcknowledgeableConditionType_ConfirmedState_Number = 9105,
+ AcknowledgeableConditionType_ConfirmedState_EffectiveDisplayName = 9106,
+ AcknowledgeableConditionType_ConfirmedState_TransitionTime = 9107,
+ AcknowledgeableConditionType_ConfirmedState_EffectiveTransitionTime = 9108,
+ AcknowledgeableConditionType_ConfirmedState_TrueState = 9109,
+ AcknowledgeableConditionType_ConfirmedState_FalseState = 9110,
+ AcknowledgeableConditionType_Acknowledge = 9111,
+ AcknowledgeableConditionType_Acknowledge_InputArguments = 9112,
+ AcknowledgeableConditionType_Confirm = 9113,
+ AcknowledgeableConditionType_Confirm_InputArguments = 9114,
+ ShelvedStateMachineType_UnshelveTime = 9115,
+ AlarmConditionType_ConditionName = 9116,
+ AlarmConditionType_BranchId = 9117,
+ AlarmConditionType_EnabledState = 9118,
+ AlarmConditionType_EnabledState_Id = 9119,
+ AlarmConditionType_EnabledState_Name = 9120,
+ AlarmConditionType_EnabledState_Number = 9121,
+ AlarmConditionType_EnabledState_EffectiveDisplayName = 9122,
+ AlarmConditionType_EnabledState_TransitionTime = 9123,
+ AlarmConditionType_EnabledState_EffectiveTransitionTime = 9124,
+ AlarmConditionType_EnabledState_TrueState = 9125,
+ AlarmConditionType_EnabledState_FalseState = 9126,
+ AlarmConditionType_Quality = 9127,
+ AlarmConditionType_Quality_SourceTimestamp = 9128,
+ AlarmConditionType_LastSeverity = 9129,
+ AlarmConditionType_LastSeverity_SourceTimestamp = 9130,
+ AlarmConditionType_Comment = 9131,
+ AlarmConditionType_Comment_SourceTimestamp = 9132,
+ AlarmConditionType_ClientUserId = 9133,
+ AlarmConditionType_Enable = 9134,
+ AlarmConditionType_Disable = 9135,
+ AlarmConditionType_AddComment = 9136,
+ AlarmConditionType_AddComment_InputArguments = 9137,
+ AlarmConditionType_AckedState = 9138,
+ AlarmConditionType_AckedState_Id = 9139,
+ AlarmConditionType_AckedState_Name = 9140,
+ AlarmConditionType_AckedState_Number = 9141,
+ AlarmConditionType_AckedState_EffectiveDisplayName = 9142,
+ AlarmConditionType_AckedState_TransitionTime = 9143,
+ AlarmConditionType_AckedState_EffectiveTransitionTime = 9144,
+ AlarmConditionType_AckedState_TrueState = 9145,
+ AlarmConditionType_AckedState_FalseState = 9146,
+ AlarmConditionType_ConfirmedState = 9147,
+ AlarmConditionType_ConfirmedState_Id = 9148,
+ AlarmConditionType_ConfirmedState_Name = 9149,
+ AlarmConditionType_ConfirmedState_Number = 9150,
+ AlarmConditionType_ConfirmedState_EffectiveDisplayName = 9151,
+ AlarmConditionType_ConfirmedState_TransitionTime = 9152,
+ AlarmConditionType_ConfirmedState_EffectiveTransitionTime = 9153,
+ AlarmConditionType_ConfirmedState_TrueState = 9154,
+ AlarmConditionType_ConfirmedState_FalseState = 9155,
+ AlarmConditionType_Acknowledge = 9156,
+ AlarmConditionType_Acknowledge_InputArguments = 9157,
+ AlarmConditionType_Confirm = 9158,
+ AlarmConditionType_Confirm_InputArguments = 9159,
+ AlarmConditionType_ActiveState = 9160,
+ AlarmConditionType_ActiveState_Id = 9161,
+ AlarmConditionType_ActiveState_Name = 9162,
+ AlarmConditionType_ActiveState_Number = 9163,
+ AlarmConditionType_ActiveState_EffectiveDisplayName = 9164,
+ AlarmConditionType_ActiveState_TransitionTime = 9165,
+ AlarmConditionType_ActiveState_EffectiveTransitionTime = 9166,
+ AlarmConditionType_ActiveState_TrueState = 9167,
+ AlarmConditionType_ActiveState_FalseState = 9168,
+ AlarmConditionType_SuppressedState = 9169,
+ AlarmConditionType_SuppressedState_Id = 9170,
+ AlarmConditionType_SuppressedState_Name = 9171,
+ AlarmConditionType_SuppressedState_Number = 9172,
+ AlarmConditionType_SuppressedState_EffectiveDisplayName = 9173,
+ AlarmConditionType_SuppressedState_TransitionTime = 9174,
+ AlarmConditionType_SuppressedState_EffectiveTransitionTime = 9175,
+ AlarmConditionType_SuppressedState_TrueState = 9176,
+ AlarmConditionType_SuppressedState_FalseState = 9177,
+ AlarmConditionType_ShelvingState = 9178,
+ AlarmConditionType_ShelvingState_CurrentState = 9179,
+ AlarmConditionType_ShelvingState_CurrentState_Id = 9180,
+ AlarmConditionType_ShelvingState_CurrentState_Name = 9181,
+ AlarmConditionType_ShelvingState_CurrentState_Number = 9182,
+ AlarmConditionType_ShelvingState_CurrentState_EffectiveDisplayName = 9183,
+ AlarmConditionType_ShelvingState_LastTransition = 9184,
+ AlarmConditionType_ShelvingState_LastTransition_Id = 9185,
+ AlarmConditionType_ShelvingState_LastTransition_Name = 9186,
+ AlarmConditionType_ShelvingState_LastTransition_Number = 9187,
+ AlarmConditionType_ShelvingState_LastTransition_TransitionTime = 9188,
+ AlarmConditionType_ShelvingState_UnshelveTime = 9189,
+ AlarmConditionType_ShelvingState_Unshelve = 9211,
+ AlarmConditionType_ShelvingState_OneShotShelve = 9212,
+ AlarmConditionType_ShelvingState_TimedShelve = 9213,
+ AlarmConditionType_ShelvingState_TimedShelve_InputArguments = 9214,
+ AlarmConditionType_SuppressedOrShelved = 9215,
+ AlarmConditionType_MaxTimeShelved = 9216,
+ LimitAlarmType_ConditionName = 9217,
+ LimitAlarmType_BranchId = 9218,
+ LimitAlarmType_EnabledState = 9219,
+ LimitAlarmType_EnabledState_Id = 9220,
+ LimitAlarmType_EnabledState_Name = 9221,
+ LimitAlarmType_EnabledState_Number = 9222,
+ LimitAlarmType_EnabledState_EffectiveDisplayName = 9223,
+ LimitAlarmType_EnabledState_TransitionTime = 9224,
+ LimitAlarmType_EnabledState_EffectiveTransitionTime = 9225,
+ LimitAlarmType_EnabledState_TrueState = 9226,
+ LimitAlarmType_EnabledState_FalseState = 9227,
+ LimitAlarmType_Quality = 9228,
+ LimitAlarmType_Quality_SourceTimestamp = 9229,
+ LimitAlarmType_LastSeverity = 9230,
+ LimitAlarmType_LastSeverity_SourceTimestamp = 9231,
+ LimitAlarmType_Comment = 9232,
+ LimitAlarmType_Comment_SourceTimestamp = 9233,
+ LimitAlarmType_ClientUserId = 9234,
+ LimitAlarmType_Enable = 9235,
+ LimitAlarmType_Disable = 9236,
+ LimitAlarmType_AddComment = 9237,
+ LimitAlarmType_AddComment_InputArguments = 9238,
+ LimitAlarmType_AckedState = 9239,
+ LimitAlarmType_AckedState_Id = 9240,
+ LimitAlarmType_AckedState_Name = 9241,
+ LimitAlarmType_AckedState_Number = 9242,
+ LimitAlarmType_AckedState_EffectiveDisplayName = 9243,
+ LimitAlarmType_AckedState_TransitionTime = 9244,
+ LimitAlarmType_AckedState_EffectiveTransitionTime = 9245,
+ LimitAlarmType_AckedState_TrueState = 9246,
+ LimitAlarmType_AckedState_FalseState = 9247,
+ LimitAlarmType_ConfirmedState = 9248,
+ LimitAlarmType_ConfirmedState_Id = 9249,
+ LimitAlarmType_ConfirmedState_Name = 9250,
+ LimitAlarmType_ConfirmedState_Number = 9251,
+ LimitAlarmType_ConfirmedState_EffectiveDisplayName = 9252,
+ LimitAlarmType_ConfirmedState_TransitionTime = 9253,
+ LimitAlarmType_ConfirmedState_EffectiveTransitionTime = 9254,
+ LimitAlarmType_ConfirmedState_TrueState = 9255,
+ LimitAlarmType_ConfirmedState_FalseState = 9256,
+ LimitAlarmType_Acknowledge = 9257,
+ LimitAlarmType_Acknowledge_InputArguments = 9258,
+ LimitAlarmType_Confirm = 9259,
+ LimitAlarmType_Confirm_InputArguments = 9260,
+ LimitAlarmType_ActiveState = 9261,
+ LimitAlarmType_ActiveState_Id = 9262,
+ LimitAlarmType_ActiveState_Name = 9263,
+ LimitAlarmType_ActiveState_Number = 9264,
+ LimitAlarmType_ActiveState_EffectiveDisplayName = 9265,
+ LimitAlarmType_ActiveState_TransitionTime = 9266,
+ LimitAlarmType_ActiveState_EffectiveTransitionTime = 9267,
+ LimitAlarmType_ActiveState_TrueState = 9268,
+ LimitAlarmType_ActiveState_FalseState = 9269,
+ LimitAlarmType_SuppressedState = 9270,
+ LimitAlarmType_SuppressedState_Id = 9271,
+ LimitAlarmType_SuppressedState_Name = 9272,
+ LimitAlarmType_SuppressedState_Number = 9273,
+ LimitAlarmType_SuppressedState_EffectiveDisplayName = 9274,
+ LimitAlarmType_SuppressedState_TransitionTime = 9275,
+ LimitAlarmType_SuppressedState_EffectiveTransitionTime = 9276,
+ LimitAlarmType_SuppressedState_TrueState = 9277,
+ LimitAlarmType_SuppressedState_FalseState = 9278,
+ LimitAlarmType_ShelvingState = 9279,
+ LimitAlarmType_ShelvingState_CurrentState = 9280,
+ LimitAlarmType_ShelvingState_CurrentState_Id = 9281,
+ LimitAlarmType_ShelvingState_CurrentState_Name = 9282,
+ LimitAlarmType_ShelvingState_CurrentState_Number = 9283,
+ LimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 9284,
+ LimitAlarmType_ShelvingState_LastTransition = 9285,
+ LimitAlarmType_ShelvingState_LastTransition_Id = 9286,
+ LimitAlarmType_ShelvingState_LastTransition_Name = 9287,
+ LimitAlarmType_ShelvingState_LastTransition_Number = 9288,
+ LimitAlarmType_ShelvingState_LastTransition_TransitionTime = 9289,
+ LimitAlarmType_ShelvingState_UnshelveTime = 9290,
+ LimitAlarmType_ShelvingState_Unshelve = 9312,
+ LimitAlarmType_ShelvingState_OneShotShelve = 9313,
+ LimitAlarmType_ShelvingState_TimedShelve = 9314,
+ LimitAlarmType_ShelvingState_TimedShelve_InputArguments = 9315,
+ LimitAlarmType_SuppressedOrShelved = 9316,
+ LimitAlarmType_MaxTimeShelved = 9317,
+ ExclusiveLimitStateMachineType = 9318,
+ ExclusiveLimitStateMachineType_CurrentState = 9319,
+ ExclusiveLimitStateMachineType_CurrentState_Id = 9320,
+ ExclusiveLimitStateMachineType_CurrentState_Name = 9321,
+ ExclusiveLimitStateMachineType_CurrentState_Number = 9322,
+ ExclusiveLimitStateMachineType_CurrentState_EffectiveDisplayName = 9323,
+ ExclusiveLimitStateMachineType_LastTransition = 9324,
+ ExclusiveLimitStateMachineType_LastTransition_Id = 9325,
+ ExclusiveLimitStateMachineType_LastTransition_Name = 9326,
+ ExclusiveLimitStateMachineType_LastTransition_Number = 9327,
+ ExclusiveLimitStateMachineType_LastTransition_TransitionTime = 9328,
+ ExclusiveLimitStateMachineType_HighHigh = 9329,
+ ExclusiveLimitStateMachineType_HighHigh_StateNumber = 9330,
+ ExclusiveLimitStateMachineType_High = 9331,
+ ExclusiveLimitStateMachineType_High_StateNumber = 9332,
+ ExclusiveLimitStateMachineType_Low = 9333,
+ ExclusiveLimitStateMachineType_Low_StateNumber = 9334,
+ ExclusiveLimitStateMachineType_LowLow = 9335,
+ ExclusiveLimitStateMachineType_LowLow_StateNumber = 9336,
+ ExclusiveLimitStateMachineType_LowLowToLow = 9337,
+ ExclusiveLimitStateMachineType_LowToLowLow = 9338,
+ ExclusiveLimitStateMachineType_HighHighToHigh = 9339,
+ ExclusiveLimitStateMachineType_HighToHighHigh = 9340,
+ ExclusiveLimitAlarmType = 9341,
+ ExclusiveLimitAlarmType_EventId = 9342,
+ ExclusiveLimitAlarmType_EventType = 9343,
+ ExclusiveLimitAlarmType_SourceNode = 9344,
+ ExclusiveLimitAlarmType_SourceName = 9345,
+ ExclusiveLimitAlarmType_Time = 9346,
+ ExclusiveLimitAlarmType_ReceiveTime = 9347,
+ ExclusiveLimitAlarmType_LocalTime = 9348,
+ ExclusiveLimitAlarmType_Message = 9349,
+ ExclusiveLimitAlarmType_Severity = 9350,
+ ExclusiveLimitAlarmType_ConditionName = 9351,
+ ExclusiveLimitAlarmType_BranchId = 9352,
+ ExclusiveLimitAlarmType_Retain = 9353,
+ ExclusiveLimitAlarmType_EnabledState = 9354,
+ ExclusiveLimitAlarmType_EnabledState_Id = 9355,
+ ExclusiveLimitAlarmType_EnabledState_Name = 9356,
+ ExclusiveLimitAlarmType_EnabledState_Number = 9357,
+ ExclusiveLimitAlarmType_EnabledState_EffectiveDisplayName = 9358,
+ ExclusiveLimitAlarmType_EnabledState_TransitionTime = 9359,
+ ExclusiveLimitAlarmType_EnabledState_EffectiveTransitionTime = 9360,
+ ExclusiveLimitAlarmType_EnabledState_TrueState = 9361,
+ ExclusiveLimitAlarmType_EnabledState_FalseState = 9362,
+ ExclusiveLimitAlarmType_Quality = 9363,
+ ExclusiveLimitAlarmType_Quality_SourceTimestamp = 9364,
+ ExclusiveLimitAlarmType_LastSeverity = 9365,
+ ExclusiveLimitAlarmType_LastSeverity_SourceTimestamp = 9366,
+ ExclusiveLimitAlarmType_Comment = 9367,
+ ExclusiveLimitAlarmType_Comment_SourceTimestamp = 9368,
+ ExclusiveLimitAlarmType_ClientUserId = 9369,
+ ExclusiveLimitAlarmType_Enable = 9370,
+ ExclusiveLimitAlarmType_Disable = 9371,
+ ExclusiveLimitAlarmType_AddComment = 9372,
+ ExclusiveLimitAlarmType_AddComment_InputArguments = 9373,
+ ExclusiveLimitAlarmType_ConditionRefresh = 9374,
+ ExclusiveLimitAlarmType_ConditionRefresh_InputArguments = 9375,
+ ExclusiveLimitAlarmType_AckedState = 9376,
+ ExclusiveLimitAlarmType_AckedState_Id = 9377,
+ ExclusiveLimitAlarmType_AckedState_Name = 9378,
+ ExclusiveLimitAlarmType_AckedState_Number = 9379,
+ ExclusiveLimitAlarmType_AckedState_EffectiveDisplayName = 9380,
+ ExclusiveLimitAlarmType_AckedState_TransitionTime = 9381,
+ ExclusiveLimitAlarmType_AckedState_EffectiveTransitionTime = 9382,
+ ExclusiveLimitAlarmType_AckedState_TrueState = 9383,
+ ExclusiveLimitAlarmType_AckedState_FalseState = 9384,
+ ExclusiveLimitAlarmType_ConfirmedState = 9385,
+ ExclusiveLimitAlarmType_ConfirmedState_Id = 9386,
+ ExclusiveLimitAlarmType_ConfirmedState_Name = 9387,
+ ExclusiveLimitAlarmType_ConfirmedState_Number = 9388,
+ ExclusiveLimitAlarmType_ConfirmedState_EffectiveDisplayName = 9389,
+ ExclusiveLimitAlarmType_ConfirmedState_TransitionTime = 9390,
+ ExclusiveLimitAlarmType_ConfirmedState_EffectiveTransitionTime = 9391,
+ ExclusiveLimitAlarmType_ConfirmedState_TrueState = 9392,
+ ExclusiveLimitAlarmType_ConfirmedState_FalseState = 9393,
+ ExclusiveLimitAlarmType_Acknowledge = 9394,
+ ExclusiveLimitAlarmType_Acknowledge_InputArguments = 9395,
+ ExclusiveLimitAlarmType_Confirm = 9396,
+ ExclusiveLimitAlarmType_Confirm_InputArguments = 9397,
+ ExclusiveLimitAlarmType_ActiveState = 9398,
+ ExclusiveLimitAlarmType_ActiveState_Id = 9399,
+ ExclusiveLimitAlarmType_ActiveState_Name = 9400,
+ ExclusiveLimitAlarmType_ActiveState_Number = 9401,
+ ExclusiveLimitAlarmType_ActiveState_EffectiveDisplayName = 9402,
+ ExclusiveLimitAlarmType_ActiveState_TransitionTime = 9403,
+ ExclusiveLimitAlarmType_ActiveState_EffectiveTransitionTime = 9404,
+ ExclusiveLimitAlarmType_ActiveState_TrueState = 9405,
+ ExclusiveLimitAlarmType_ActiveState_FalseState = 9406,
+ ExclusiveLimitAlarmType_SuppressedState = 9407,
+ ExclusiveLimitAlarmType_SuppressedState_Id = 9408,
+ ExclusiveLimitAlarmType_SuppressedState_Name = 9409,
+ ExclusiveLimitAlarmType_SuppressedState_Number = 9410,
+ ExclusiveLimitAlarmType_SuppressedState_EffectiveDisplayName = 9411,
+ ExclusiveLimitAlarmType_SuppressedState_TransitionTime = 9412,
+ ExclusiveLimitAlarmType_SuppressedState_EffectiveTransitionTime = 9413,
+ ExclusiveLimitAlarmType_SuppressedState_TrueState = 9414,
+ ExclusiveLimitAlarmType_SuppressedState_FalseState = 9415,
+ ExclusiveLimitAlarmType_ShelvingState = 9416,
+ ExclusiveLimitAlarmType_ShelvingState_CurrentState = 9417,
+ ExclusiveLimitAlarmType_ShelvingState_CurrentState_Id = 9418,
+ ExclusiveLimitAlarmType_ShelvingState_CurrentState_Name = 9419,
+ ExclusiveLimitAlarmType_ShelvingState_CurrentState_Number = 9420,
+ ExclusiveLimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 9421,
+ ExclusiveLimitAlarmType_ShelvingState_LastTransition = 9422,
+ ExclusiveLimitAlarmType_ShelvingState_LastTransition_Id = 9423,
+ ExclusiveLimitAlarmType_ShelvingState_LastTransition_Name = 9424,
+ ExclusiveLimitAlarmType_ShelvingState_LastTransition_Number = 9425,
+ ExclusiveLimitAlarmType_ShelvingState_LastTransition_TransitionTime = 9426,
+ ExclusiveLimitAlarmType_ShelvingState_UnshelveTime = 9427,
+ ExclusiveLimitAlarmType_ShelvingState_Unshelve = 9449,
+ ExclusiveLimitAlarmType_ShelvingState_OneShotShelve = 9450,
+ ExclusiveLimitAlarmType_ShelvingState_TimedShelve = 9451,
+ ExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments = 9452,
+ ExclusiveLimitAlarmType_SuppressedOrShelved = 9453,
+ ExclusiveLimitAlarmType_MaxTimeShelved = 9454,
+ ExclusiveLimitAlarmType_LimitState = 9455,
+ ExclusiveLimitAlarmType_LimitState_CurrentState = 9456,
+ ExclusiveLimitAlarmType_LimitState_CurrentState_Id = 9457,
+ ExclusiveLimitAlarmType_LimitState_CurrentState_Name = 9458,
+ ExclusiveLimitAlarmType_LimitState_CurrentState_Number = 9459,
+ ExclusiveLimitAlarmType_LimitState_CurrentState_EffectiveDisplayName = 9460,
+ ExclusiveLimitAlarmType_LimitState_LastTransition = 9461,
+ ExclusiveLimitAlarmType_LimitState_LastTransition_Id = 9462,
+ ExclusiveLimitAlarmType_LimitState_LastTransition_Name = 9463,
+ ExclusiveLimitAlarmType_LimitState_LastTransition_Number = 9464,
+ ExclusiveLimitAlarmType_LimitState_LastTransition_TransitionTime = 9465,
+ ExclusiveLimitAlarmType_HighHighLimit = 9478,
+ ExclusiveLimitAlarmType_HighLimit = 9479,
+ ExclusiveLimitAlarmType_LowLimit = 9480,
+ ExclusiveLimitAlarmType_LowLowLimit = 9481,
+ ExclusiveLevelAlarmType = 9482,
+ ExclusiveLevelAlarmType_EventId = 9483,
+ ExclusiveLevelAlarmType_EventType = 9484,
+ ExclusiveLevelAlarmType_SourceNode = 9485,
+ ExclusiveLevelAlarmType_SourceName = 9486,
+ ExclusiveLevelAlarmType_Time = 9487,
+ ExclusiveLevelAlarmType_ReceiveTime = 9488,
+ ExclusiveLevelAlarmType_LocalTime = 9489,
+ ExclusiveLevelAlarmType_Message = 9490,
+ ExclusiveLevelAlarmType_Severity = 9491,
+ ExclusiveLevelAlarmType_ConditionName = 9492,
+ ExclusiveLevelAlarmType_BranchId = 9493,
+ ExclusiveLevelAlarmType_Retain = 9494,
+ ExclusiveLevelAlarmType_EnabledState = 9495,
+ ExclusiveLevelAlarmType_EnabledState_Id = 9496,
+ ExclusiveLevelAlarmType_EnabledState_Name = 9497,
+ ExclusiveLevelAlarmType_EnabledState_Number = 9498,
+ ExclusiveLevelAlarmType_EnabledState_EffectiveDisplayName = 9499,
+ ExclusiveLevelAlarmType_EnabledState_TransitionTime = 9500,
+ ExclusiveLevelAlarmType_EnabledState_EffectiveTransitionTime = 9501,
+ ExclusiveLevelAlarmType_EnabledState_TrueState = 9502,
+ ExclusiveLevelAlarmType_EnabledState_FalseState = 9503,
+ ExclusiveLevelAlarmType_Quality = 9504,
+ ExclusiveLevelAlarmType_Quality_SourceTimestamp = 9505,
+ ExclusiveLevelAlarmType_LastSeverity = 9506,
+ ExclusiveLevelAlarmType_LastSeverity_SourceTimestamp = 9507,
+ ExclusiveLevelAlarmType_Comment = 9508,
+ ExclusiveLevelAlarmType_Comment_SourceTimestamp = 9509,
+ ExclusiveLevelAlarmType_ClientUserId = 9510,
+ ExclusiveLevelAlarmType_Enable = 9511,
+ ExclusiveLevelAlarmType_Disable = 9512,
+ ExclusiveLevelAlarmType_AddComment = 9513,
+ ExclusiveLevelAlarmType_AddComment_InputArguments = 9514,
+ ExclusiveLevelAlarmType_ConditionRefresh = 9515,
+ ExclusiveLevelAlarmType_ConditionRefresh_InputArguments = 9516,
+ ExclusiveLevelAlarmType_AckedState = 9517,
+ ExclusiveLevelAlarmType_AckedState_Id = 9518,
+ ExclusiveLevelAlarmType_AckedState_Name = 9519,
+ ExclusiveLevelAlarmType_AckedState_Number = 9520,
+ ExclusiveLevelAlarmType_AckedState_EffectiveDisplayName = 9521,
+ ExclusiveLevelAlarmType_AckedState_TransitionTime = 9522,
+ ExclusiveLevelAlarmType_AckedState_EffectiveTransitionTime = 9523,
+ ExclusiveLevelAlarmType_AckedState_TrueState = 9524,
+ ExclusiveLevelAlarmType_AckedState_FalseState = 9525,
+ ExclusiveLevelAlarmType_ConfirmedState = 9526,
+ ExclusiveLevelAlarmType_ConfirmedState_Id = 9527,
+ ExclusiveLevelAlarmType_ConfirmedState_Name = 9528,
+ ExclusiveLevelAlarmType_ConfirmedState_Number = 9529,
+ ExclusiveLevelAlarmType_ConfirmedState_EffectiveDisplayName = 9530,
+ ExclusiveLevelAlarmType_ConfirmedState_TransitionTime = 9531,
+ ExclusiveLevelAlarmType_ConfirmedState_EffectiveTransitionTime = 9532,
+ ExclusiveLevelAlarmType_ConfirmedState_TrueState = 9533,
+ ExclusiveLevelAlarmType_ConfirmedState_FalseState = 9534,
+ ExclusiveLevelAlarmType_Acknowledge = 9535,
+ ExclusiveLevelAlarmType_Acknowledge_InputArguments = 9536,
+ ExclusiveLevelAlarmType_Confirm = 9537,
+ ExclusiveLevelAlarmType_Confirm_InputArguments = 9538,
+ ExclusiveLevelAlarmType_ActiveState = 9539,
+ ExclusiveLevelAlarmType_ActiveState_Id = 9540,
+ ExclusiveLevelAlarmType_ActiveState_Name = 9541,
+ ExclusiveLevelAlarmType_ActiveState_Number = 9542,
+ ExclusiveLevelAlarmType_ActiveState_EffectiveDisplayName = 9543,
+ ExclusiveLevelAlarmType_ActiveState_TransitionTime = 9544,
+ ExclusiveLevelAlarmType_ActiveState_EffectiveTransitionTime = 9545,
+ ExclusiveLevelAlarmType_ActiveState_TrueState = 9546,
+ ExclusiveLevelAlarmType_ActiveState_FalseState = 9547,
+ ExclusiveLevelAlarmType_SuppressedState = 9548,
+ ExclusiveLevelAlarmType_SuppressedState_Id = 9549,
+ ExclusiveLevelAlarmType_SuppressedState_Name = 9550,
+ ExclusiveLevelAlarmType_SuppressedState_Number = 9551,
+ ExclusiveLevelAlarmType_SuppressedState_EffectiveDisplayName = 9552,
+ ExclusiveLevelAlarmType_SuppressedState_TransitionTime = 9553,
+ ExclusiveLevelAlarmType_SuppressedState_EffectiveTransitionTime = 9554,
+ ExclusiveLevelAlarmType_SuppressedState_TrueState = 9555,
+ ExclusiveLevelAlarmType_SuppressedState_FalseState = 9556,
+ ExclusiveLevelAlarmType_ShelvingState = 9557,
+ ExclusiveLevelAlarmType_ShelvingState_CurrentState = 9558,
+ ExclusiveLevelAlarmType_ShelvingState_CurrentState_Id = 9559,
+ ExclusiveLevelAlarmType_ShelvingState_CurrentState_Name = 9560,
+ ExclusiveLevelAlarmType_ShelvingState_CurrentState_Number = 9561,
+ ExclusiveLevelAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 9562,
+ ExclusiveLevelAlarmType_ShelvingState_LastTransition = 9563,
+ ExclusiveLevelAlarmType_ShelvingState_LastTransition_Id = 9564,
+ ExclusiveLevelAlarmType_ShelvingState_LastTransition_Name = 9565,
+ ExclusiveLevelAlarmType_ShelvingState_LastTransition_Number = 9566,
+ ExclusiveLevelAlarmType_ShelvingState_LastTransition_TransitionTime = 9567,
+ ExclusiveLevelAlarmType_ShelvingState_UnshelveTime = 9568,
+ ExclusiveLevelAlarmType_ShelvingState_Unshelve = 9590,
+ ExclusiveLevelAlarmType_ShelvingState_OneShotShelve = 9591,
+ ExclusiveLevelAlarmType_ShelvingState_TimedShelve = 9592,
+ ExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments = 9593,
+ ExclusiveLevelAlarmType_SuppressedOrShelved = 9594,
+ ExclusiveLevelAlarmType_MaxTimeShelved = 9595,
+ ExclusiveLevelAlarmType_LimitState = 9596,
+ ExclusiveLevelAlarmType_LimitState_CurrentState = 9597,
+ ExclusiveLevelAlarmType_LimitState_CurrentState_Id = 9598,
+ ExclusiveLevelAlarmType_LimitState_CurrentState_Name = 9599,
+ ExclusiveLevelAlarmType_LimitState_CurrentState_Number = 9600,
+ ExclusiveLevelAlarmType_LimitState_CurrentState_EffectiveDisplayName = 9601,
+ ExclusiveLevelAlarmType_LimitState_LastTransition = 9602,
+ ExclusiveLevelAlarmType_LimitState_LastTransition_Id = 9603,
+ ExclusiveLevelAlarmType_LimitState_LastTransition_Name = 9604,
+ ExclusiveLevelAlarmType_LimitState_LastTransition_Number = 9605,
+ ExclusiveLevelAlarmType_LimitState_LastTransition_TransitionTime = 9606,
+ ExclusiveLevelAlarmType_HighHighLimit = 9619,
+ ExclusiveLevelAlarmType_HighLimit = 9620,
+ ExclusiveLevelAlarmType_LowLimit = 9621,
+ ExclusiveLevelAlarmType_LowLowLimit = 9622,
+ ExclusiveRateOfChangeAlarmType = 9623,
+ ExclusiveRateOfChangeAlarmType_EventId = 9624,
+ ExclusiveRateOfChangeAlarmType_EventType = 9625,
+ ExclusiveRateOfChangeAlarmType_SourceNode = 9626,
+ ExclusiveRateOfChangeAlarmType_SourceName = 9627,
+ ExclusiveRateOfChangeAlarmType_Time = 9628,
+ ExclusiveRateOfChangeAlarmType_ReceiveTime = 9629,
+ ExclusiveRateOfChangeAlarmType_LocalTime = 9630,
+ ExclusiveRateOfChangeAlarmType_Message = 9631,
+ ExclusiveRateOfChangeAlarmType_Severity = 9632,
+ ExclusiveRateOfChangeAlarmType_ConditionName = 9633,
+ ExclusiveRateOfChangeAlarmType_BranchId = 9634,
+ ExclusiveRateOfChangeAlarmType_Retain = 9635,
+ ExclusiveRateOfChangeAlarmType_EnabledState = 9636,
+ ExclusiveRateOfChangeAlarmType_EnabledState_Id = 9637,
+ ExclusiveRateOfChangeAlarmType_EnabledState_Name = 9638,
+ ExclusiveRateOfChangeAlarmType_EnabledState_Number = 9639,
+ ExclusiveRateOfChangeAlarmType_EnabledState_EffectiveDisplayName = 9640,
+ ExclusiveRateOfChangeAlarmType_EnabledState_TransitionTime = 9641,
+ ExclusiveRateOfChangeAlarmType_EnabledState_EffectiveTransitionTime = 9642,
+ ExclusiveRateOfChangeAlarmType_EnabledState_TrueState = 9643,
+ ExclusiveRateOfChangeAlarmType_EnabledState_FalseState = 9644,
+ ExclusiveRateOfChangeAlarmType_Quality = 9645,
+ ExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp = 9646,
+ ExclusiveRateOfChangeAlarmType_LastSeverity = 9647,
+ ExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp = 9648,
+ ExclusiveRateOfChangeAlarmType_Comment = 9649,
+ ExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp = 9650,
+ ExclusiveRateOfChangeAlarmType_ClientUserId = 9651,
+ ExclusiveRateOfChangeAlarmType_Enable = 9652,
+ ExclusiveRateOfChangeAlarmType_Disable = 9653,
+ ExclusiveRateOfChangeAlarmType_AddComment = 9654,
+ ExclusiveRateOfChangeAlarmType_AddComment_InputArguments = 9655,
+ ExclusiveRateOfChangeAlarmType_ConditionRefresh = 9656,
+ ExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments = 9657,
+ ExclusiveRateOfChangeAlarmType_AckedState = 9658,
+ ExclusiveRateOfChangeAlarmType_AckedState_Id = 9659,
+ ExclusiveRateOfChangeAlarmType_AckedState_Name = 9660,
+ ExclusiveRateOfChangeAlarmType_AckedState_Number = 9661,
+ ExclusiveRateOfChangeAlarmType_AckedState_EffectiveDisplayName = 9662,
+ ExclusiveRateOfChangeAlarmType_AckedState_TransitionTime = 9663,
+ ExclusiveRateOfChangeAlarmType_AckedState_EffectiveTransitionTime = 9664,
+ ExclusiveRateOfChangeAlarmType_AckedState_TrueState = 9665,
+ ExclusiveRateOfChangeAlarmType_AckedState_FalseState = 9666,
+ ExclusiveRateOfChangeAlarmType_ConfirmedState = 9667,
+ ExclusiveRateOfChangeAlarmType_ConfirmedState_Id = 9668,
+ ExclusiveRateOfChangeAlarmType_ConfirmedState_Name = 9669,
+ ExclusiveRateOfChangeAlarmType_ConfirmedState_Number = 9670,
+ ExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveDisplayName = 9671,
+ ExclusiveRateOfChangeAlarmType_ConfirmedState_TransitionTime = 9672,
+ ExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveTransitionTime = 9673,
+ ExclusiveRateOfChangeAlarmType_ConfirmedState_TrueState = 9674,
+ ExclusiveRateOfChangeAlarmType_ConfirmedState_FalseState = 9675,
+ ExclusiveRateOfChangeAlarmType_Acknowledge = 9676,
+ ExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments = 9677,
+ ExclusiveRateOfChangeAlarmType_Confirm = 9678,
+ ExclusiveRateOfChangeAlarmType_Confirm_InputArguments = 9679,
+ ExclusiveRateOfChangeAlarmType_ActiveState = 9680,
+ ExclusiveRateOfChangeAlarmType_ActiveState_Id = 9681,
+ ExclusiveRateOfChangeAlarmType_ActiveState_Name = 9682,
+ ExclusiveRateOfChangeAlarmType_ActiveState_Number = 9683,
+ ExclusiveRateOfChangeAlarmType_ActiveState_EffectiveDisplayName = 9684,
+ ExclusiveRateOfChangeAlarmType_ActiveState_TransitionTime = 9685,
+ ExclusiveRateOfChangeAlarmType_ActiveState_EffectiveTransitionTime = 9686,
+ ExclusiveRateOfChangeAlarmType_ActiveState_TrueState = 9687,
+ ExclusiveRateOfChangeAlarmType_ActiveState_FalseState = 9688,
+ ExclusiveRateOfChangeAlarmType_SuppressedState = 9689,
+ ExclusiveRateOfChangeAlarmType_SuppressedState_Id = 9690,
+ ExclusiveRateOfChangeAlarmType_SuppressedState_Name = 9691,
+ ExclusiveRateOfChangeAlarmType_SuppressedState_Number = 9692,
+ ExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveDisplayName = 9693,
+ ExclusiveRateOfChangeAlarmType_SuppressedState_TransitionTime = 9694,
+ ExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveTransitionTime = 9695,
+ ExclusiveRateOfChangeAlarmType_SuppressedState_TrueState = 9696,
+ ExclusiveRateOfChangeAlarmType_SuppressedState_FalseState = 9697,
+ ExclusiveRateOfChangeAlarmType_ShelvingState = 9698,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState = 9699,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id = 9700,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Name = 9701,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Number = 9702,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 9703,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition = 9704,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id = 9705,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Name = 9706,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Number = 9707,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_TransitionTime = 9708,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime = 9709,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve = 9731,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve = 9732,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve = 9733,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments = 9734,
+ ExclusiveRateOfChangeAlarmType_SuppressedOrShelved = 9735,
+ ExclusiveRateOfChangeAlarmType_MaxTimeShelved = 9736,
+ ExclusiveRateOfChangeAlarmType_LimitState = 9737,
+ ExclusiveRateOfChangeAlarmType_LimitState_CurrentState = 9738,
+ ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Id = 9739,
+ ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Name = 9740,
+ ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_Number = 9741,
+ ExclusiveRateOfChangeAlarmType_LimitState_CurrentState_EffectiveDisplayName = 9742,
+ ExclusiveRateOfChangeAlarmType_LimitState_LastTransition = 9743,
+ ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Id = 9744,
+ ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Name = 9745,
+ ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_Number = 9746,
+ ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_TransitionTime = 9747,
+ ExclusiveRateOfChangeAlarmType_HighHighLimit = 9760,
+ ExclusiveRateOfChangeAlarmType_HighLimit = 9761,
+ ExclusiveRateOfChangeAlarmType_LowLimit = 9762,
+ ExclusiveRateOfChangeAlarmType_LowLowLimit = 9763,
+ ExclusiveDeviationAlarmType = 9764,
+ ExclusiveDeviationAlarmType_EventId = 9765,
+ ExclusiveDeviationAlarmType_EventType = 9766,
+ ExclusiveDeviationAlarmType_SourceNode = 9767,
+ ExclusiveDeviationAlarmType_SourceName = 9768,
+ ExclusiveDeviationAlarmType_Time = 9769,
+ ExclusiveDeviationAlarmType_ReceiveTime = 9770,
+ ExclusiveDeviationAlarmType_LocalTime = 9771,
+ ExclusiveDeviationAlarmType_Message = 9772,
+ ExclusiveDeviationAlarmType_Severity = 9773,
+ ExclusiveDeviationAlarmType_ConditionName = 9774,
+ ExclusiveDeviationAlarmType_BranchId = 9775,
+ ExclusiveDeviationAlarmType_Retain = 9776,
+ ExclusiveDeviationAlarmType_EnabledState = 9777,
+ ExclusiveDeviationAlarmType_EnabledState_Id = 9778,
+ ExclusiveDeviationAlarmType_EnabledState_Name = 9779,
+ ExclusiveDeviationAlarmType_EnabledState_Number = 9780,
+ ExclusiveDeviationAlarmType_EnabledState_EffectiveDisplayName = 9781,
+ ExclusiveDeviationAlarmType_EnabledState_TransitionTime = 9782,
+ ExclusiveDeviationAlarmType_EnabledState_EffectiveTransitionTime = 9783,
+ ExclusiveDeviationAlarmType_EnabledState_TrueState = 9784,
+ ExclusiveDeviationAlarmType_EnabledState_FalseState = 9785,
+ ExclusiveDeviationAlarmType_Quality = 9786,
+ ExclusiveDeviationAlarmType_Quality_SourceTimestamp = 9787,
+ ExclusiveDeviationAlarmType_LastSeverity = 9788,
+ ExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp = 9789,
+ ExclusiveDeviationAlarmType_Comment = 9790,
+ ExclusiveDeviationAlarmType_Comment_SourceTimestamp = 9791,
+ ExclusiveDeviationAlarmType_ClientUserId = 9792,
+ ExclusiveDeviationAlarmType_Enable = 9793,
+ ExclusiveDeviationAlarmType_Disable = 9794,
+ ExclusiveDeviationAlarmType_AddComment = 9795,
+ ExclusiveDeviationAlarmType_AddComment_InputArguments = 9796,
+ ExclusiveDeviationAlarmType_ConditionRefresh = 9797,
+ ExclusiveDeviationAlarmType_ConditionRefresh_InputArguments = 9798,
+ ExclusiveDeviationAlarmType_AckedState = 9799,
+ ExclusiveDeviationAlarmType_AckedState_Id = 9800,
+ ExclusiveDeviationAlarmType_AckedState_Name = 9801,
+ ExclusiveDeviationAlarmType_AckedState_Number = 9802,
+ ExclusiveDeviationAlarmType_AckedState_EffectiveDisplayName = 9803,
+ ExclusiveDeviationAlarmType_AckedState_TransitionTime = 9804,
+ ExclusiveDeviationAlarmType_AckedState_EffectiveTransitionTime = 9805,
+ ExclusiveDeviationAlarmType_AckedState_TrueState = 9806,
+ ExclusiveDeviationAlarmType_AckedState_FalseState = 9807,
+ ExclusiveDeviationAlarmType_ConfirmedState = 9808,
+ ExclusiveDeviationAlarmType_ConfirmedState_Id = 9809,
+ ExclusiveDeviationAlarmType_ConfirmedState_Name = 9810,
+ ExclusiveDeviationAlarmType_ConfirmedState_Number = 9811,
+ ExclusiveDeviationAlarmType_ConfirmedState_EffectiveDisplayName = 9812,
+ ExclusiveDeviationAlarmType_ConfirmedState_TransitionTime = 9813,
+ ExclusiveDeviationAlarmType_ConfirmedState_EffectiveTransitionTime = 9814,
+ ExclusiveDeviationAlarmType_ConfirmedState_TrueState = 9815,
+ ExclusiveDeviationAlarmType_ConfirmedState_FalseState = 9816,
+ ExclusiveDeviationAlarmType_Acknowledge = 9817,
+ ExclusiveDeviationAlarmType_Acknowledge_InputArguments = 9818,
+ ExclusiveDeviationAlarmType_Confirm = 9819,
+ ExclusiveDeviationAlarmType_Confirm_InputArguments = 9820,
+ ExclusiveDeviationAlarmType_ActiveState = 9821,
+ ExclusiveDeviationAlarmType_ActiveState_Id = 9822,
+ ExclusiveDeviationAlarmType_ActiveState_Name = 9823,
+ ExclusiveDeviationAlarmType_ActiveState_Number = 9824,
+ ExclusiveDeviationAlarmType_ActiveState_EffectiveDisplayName = 9825,
+ ExclusiveDeviationAlarmType_ActiveState_TransitionTime = 9826,
+ ExclusiveDeviationAlarmType_ActiveState_EffectiveTransitionTime = 9827,
+ ExclusiveDeviationAlarmType_ActiveState_TrueState = 9828,
+ ExclusiveDeviationAlarmType_ActiveState_FalseState = 9829,
+ ExclusiveDeviationAlarmType_SuppressedState = 9830,
+ ExclusiveDeviationAlarmType_SuppressedState_Id = 9831,
+ ExclusiveDeviationAlarmType_SuppressedState_Name = 9832,
+ ExclusiveDeviationAlarmType_SuppressedState_Number = 9833,
+ ExclusiveDeviationAlarmType_SuppressedState_EffectiveDisplayName = 9834,
+ ExclusiveDeviationAlarmType_SuppressedState_TransitionTime = 9835,
+ ExclusiveDeviationAlarmType_SuppressedState_EffectiveTransitionTime = 9836,
+ ExclusiveDeviationAlarmType_SuppressedState_TrueState = 9837,
+ ExclusiveDeviationAlarmType_SuppressedState_FalseState = 9838,
+ ExclusiveDeviationAlarmType_ShelvingState = 9839,
+ ExclusiveDeviationAlarmType_ShelvingState_CurrentState = 9840,
+ ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id = 9841,
+ ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Name = 9842,
+ ExclusiveDeviationAlarmType_ShelvingState_CurrentState_Number = 9843,
+ ExclusiveDeviationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 9844,
+ ExclusiveDeviationAlarmType_ShelvingState_LastTransition = 9845,
+ ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id = 9846,
+ ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Name = 9847,
+ ExclusiveDeviationAlarmType_ShelvingState_LastTransition_Number = 9848,
+ ExclusiveDeviationAlarmType_ShelvingState_LastTransition_TransitionTime = 9849,
+ ExclusiveDeviationAlarmType_ShelvingState_UnshelveTime = 9850,
+ ExclusiveDeviationAlarmType_ShelvingState_Unshelve = 9872,
+ ExclusiveDeviationAlarmType_ShelvingState_OneShotShelve = 9873,
+ ExclusiveDeviationAlarmType_ShelvingState_TimedShelve = 9874,
+ ExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments = 9875,
+ ExclusiveDeviationAlarmType_SuppressedOrShelved = 9876,
+ ExclusiveDeviationAlarmType_MaxTimeShelved = 9877,
+ ExclusiveDeviationAlarmType_LimitState = 9878,
+ ExclusiveDeviationAlarmType_LimitState_CurrentState = 9879,
+ ExclusiveDeviationAlarmType_LimitState_CurrentState_Id = 9880,
+ ExclusiveDeviationAlarmType_LimitState_CurrentState_Name = 9881,
+ ExclusiveDeviationAlarmType_LimitState_CurrentState_Number = 9882,
+ ExclusiveDeviationAlarmType_LimitState_CurrentState_EffectiveDisplayName = 9883,
+ ExclusiveDeviationAlarmType_LimitState_LastTransition = 9884,
+ ExclusiveDeviationAlarmType_LimitState_LastTransition_Id = 9885,
+ ExclusiveDeviationAlarmType_LimitState_LastTransition_Name = 9886,
+ ExclusiveDeviationAlarmType_LimitState_LastTransition_Number = 9887,
+ ExclusiveDeviationAlarmType_LimitState_LastTransition_TransitionTime = 9888,
+ ExclusiveDeviationAlarmType_HighHighLimit = 9901,
+ ExclusiveDeviationAlarmType_HighLimit = 9902,
+ ExclusiveDeviationAlarmType_LowLimit = 9903,
+ ExclusiveDeviationAlarmType_LowLowLimit = 9904,
+ ExclusiveDeviationAlarmType_SetpointNode = 9905,
+ NonExclusiveLimitAlarmType = 9906,
+ NonExclusiveLimitAlarmType_EventId = 9907,
+ NonExclusiveLimitAlarmType_EventType = 9908,
+ NonExclusiveLimitAlarmType_SourceNode = 9909,
+ NonExclusiveLimitAlarmType_SourceName = 9910,
+ NonExclusiveLimitAlarmType_Time = 9911,
+ NonExclusiveLimitAlarmType_ReceiveTime = 9912,
+ NonExclusiveLimitAlarmType_LocalTime = 9913,
+ NonExclusiveLimitAlarmType_Message = 9914,
+ NonExclusiveLimitAlarmType_Severity = 9915,
+ NonExclusiveLimitAlarmType_ConditionName = 9916,
+ NonExclusiveLimitAlarmType_BranchId = 9917,
+ NonExclusiveLimitAlarmType_Retain = 9918,
+ NonExclusiveLimitAlarmType_EnabledState = 9919,
+ NonExclusiveLimitAlarmType_EnabledState_Id = 9920,
+ NonExclusiveLimitAlarmType_EnabledState_Name = 9921,
+ NonExclusiveLimitAlarmType_EnabledState_Number = 9922,
+ NonExclusiveLimitAlarmType_EnabledState_EffectiveDisplayName = 9923,
+ NonExclusiveLimitAlarmType_EnabledState_TransitionTime = 9924,
+ NonExclusiveLimitAlarmType_EnabledState_EffectiveTransitionTime = 9925,
+ NonExclusiveLimitAlarmType_EnabledState_TrueState = 9926,
+ NonExclusiveLimitAlarmType_EnabledState_FalseState = 9927,
+ NonExclusiveLimitAlarmType_Quality = 9928,
+ NonExclusiveLimitAlarmType_Quality_SourceTimestamp = 9929,
+ NonExclusiveLimitAlarmType_LastSeverity = 9930,
+ NonExclusiveLimitAlarmType_LastSeverity_SourceTimestamp = 9931,
+ NonExclusiveLimitAlarmType_Comment = 9932,
+ NonExclusiveLimitAlarmType_Comment_SourceTimestamp = 9933,
+ NonExclusiveLimitAlarmType_ClientUserId = 9934,
+ NonExclusiveLimitAlarmType_Enable = 9935,
+ NonExclusiveLimitAlarmType_Disable = 9936,
+ NonExclusiveLimitAlarmType_AddComment = 9937,
+ NonExclusiveLimitAlarmType_AddComment_InputArguments = 9938,
+ NonExclusiveLimitAlarmType_ConditionRefresh = 9939,
+ NonExclusiveLimitAlarmType_ConditionRefresh_InputArguments = 9940,
+ NonExclusiveLimitAlarmType_AckedState = 9941,
+ NonExclusiveLimitAlarmType_AckedState_Id = 9942,
+ NonExclusiveLimitAlarmType_AckedState_Name = 9943,
+ NonExclusiveLimitAlarmType_AckedState_Number = 9944,
+ NonExclusiveLimitAlarmType_AckedState_EffectiveDisplayName = 9945,
+ NonExclusiveLimitAlarmType_AckedState_TransitionTime = 9946,
+ NonExclusiveLimitAlarmType_AckedState_EffectiveTransitionTime = 9947,
+ NonExclusiveLimitAlarmType_AckedState_TrueState = 9948,
+ NonExclusiveLimitAlarmType_AckedState_FalseState = 9949,
+ NonExclusiveLimitAlarmType_ConfirmedState = 9950,
+ NonExclusiveLimitAlarmType_ConfirmedState_Id = 9951,
+ NonExclusiveLimitAlarmType_ConfirmedState_Name = 9952,
+ NonExclusiveLimitAlarmType_ConfirmedState_Number = 9953,
+ NonExclusiveLimitAlarmType_ConfirmedState_EffectiveDisplayName = 9954,
+ NonExclusiveLimitAlarmType_ConfirmedState_TransitionTime = 9955,
+ NonExclusiveLimitAlarmType_ConfirmedState_EffectiveTransitionTime = 9956,
+ NonExclusiveLimitAlarmType_ConfirmedState_TrueState = 9957,
+ NonExclusiveLimitAlarmType_ConfirmedState_FalseState = 9958,
+ NonExclusiveLimitAlarmType_Acknowledge = 9959,
+ NonExclusiveLimitAlarmType_Acknowledge_InputArguments = 9960,
+ NonExclusiveLimitAlarmType_Confirm = 9961,
+ NonExclusiveLimitAlarmType_Confirm_InputArguments = 9962,
+ NonExclusiveLimitAlarmType_ActiveState = 9963,
+ NonExclusiveLimitAlarmType_ActiveState_Id = 9964,
+ NonExclusiveLimitAlarmType_ActiveState_Name = 9965,
+ NonExclusiveLimitAlarmType_ActiveState_Number = 9966,
+ NonExclusiveLimitAlarmType_ActiveState_EffectiveDisplayName = 9967,
+ NonExclusiveLimitAlarmType_ActiveState_TransitionTime = 9968,
+ NonExclusiveLimitAlarmType_ActiveState_EffectiveTransitionTime = 9969,
+ NonExclusiveLimitAlarmType_ActiveState_TrueState = 9970,
+ NonExclusiveLimitAlarmType_ActiveState_FalseState = 9971,
+ NonExclusiveLimitAlarmType_SuppressedState = 9972,
+ NonExclusiveLimitAlarmType_SuppressedState_Id = 9973,
+ NonExclusiveLimitAlarmType_SuppressedState_Name = 9974,
+ NonExclusiveLimitAlarmType_SuppressedState_Number = 9975,
+ NonExclusiveLimitAlarmType_SuppressedState_EffectiveDisplayName = 9976,
+ NonExclusiveLimitAlarmType_SuppressedState_TransitionTime = 9977,
+ NonExclusiveLimitAlarmType_SuppressedState_EffectiveTransitionTime = 9978,
+ NonExclusiveLimitAlarmType_SuppressedState_TrueState = 9979,
+ NonExclusiveLimitAlarmType_SuppressedState_FalseState = 9980,
+ NonExclusiveLimitAlarmType_ShelvingState = 9981,
+ NonExclusiveLimitAlarmType_ShelvingState_CurrentState = 9982,
+ NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Id = 9983,
+ NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Name = 9984,
+ NonExclusiveLimitAlarmType_ShelvingState_CurrentState_Number = 9985,
+ NonExclusiveLimitAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 9986,
+ NonExclusiveLimitAlarmType_ShelvingState_LastTransition = 9987,
+ NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Id = 9988,
+ NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Name = 9989,
+ NonExclusiveLimitAlarmType_ShelvingState_LastTransition_Number = 9990,
+ NonExclusiveLimitAlarmType_ShelvingState_LastTransition_TransitionTime = 9991,
+ NonExclusiveLimitAlarmType_ShelvingState_UnshelveTime = 9992,
+ NonExclusiveLimitAlarmType_ShelvingState_Unshelve = 10014,
+ NonExclusiveLimitAlarmType_ShelvingState_OneShotShelve = 10015,
+ NonExclusiveLimitAlarmType_ShelvingState_TimedShelve = 10016,
+ NonExclusiveLimitAlarmType_ShelvingState_TimedShelve_InputArguments = 10017,
+ NonExclusiveLimitAlarmType_SuppressedOrShelved = 10018,
+ NonExclusiveLimitAlarmType_MaxTimeShelved = 10019,
+ NonExclusiveLimitAlarmType_HighHighState = 10020,
+ NonExclusiveLimitAlarmType_HighHighState_Id = 10021,
+ NonExclusiveLimitAlarmType_HighHighState_Name = 10022,
+ NonExclusiveLimitAlarmType_HighHighState_Number = 10023,
+ NonExclusiveLimitAlarmType_HighHighState_EffectiveDisplayName = 10024,
+ NonExclusiveLimitAlarmType_HighHighState_TransitionTime = 10025,
+ NonExclusiveLimitAlarmType_HighHighState_EffectiveTransitionTime = 10026,
+ NonExclusiveLimitAlarmType_HighHighState_TrueState = 10027,
+ NonExclusiveLimitAlarmType_HighHighState_FalseState = 10028,
+ NonExclusiveLimitAlarmType_HighState = 10029,
+ NonExclusiveLimitAlarmType_HighState_Id = 10030,
+ NonExclusiveLimitAlarmType_HighState_Name = 10031,
+ NonExclusiveLimitAlarmType_HighState_Number = 10032,
+ NonExclusiveLimitAlarmType_HighState_EffectiveDisplayName = 10033,
+ NonExclusiveLimitAlarmType_HighState_TransitionTime = 10034,
+ NonExclusiveLimitAlarmType_HighState_EffectiveTransitionTime = 10035,
+ NonExclusiveLimitAlarmType_HighState_TrueState = 10036,
+ NonExclusiveLimitAlarmType_HighState_FalseState = 10037,
+ NonExclusiveLimitAlarmType_LowState = 10038,
+ NonExclusiveLimitAlarmType_LowState_Id = 10039,
+ NonExclusiveLimitAlarmType_LowState_Name = 10040,
+ NonExclusiveLimitAlarmType_LowState_Number = 10041,
+ NonExclusiveLimitAlarmType_LowState_EffectiveDisplayName = 10042,
+ NonExclusiveLimitAlarmType_LowState_TransitionTime = 10043,
+ NonExclusiveLimitAlarmType_LowState_EffectiveTransitionTime = 10044,
+ NonExclusiveLimitAlarmType_LowState_TrueState = 10045,
+ NonExclusiveLimitAlarmType_LowState_FalseState = 10046,
+ NonExclusiveLimitAlarmType_LowLowState = 10047,
+ NonExclusiveLimitAlarmType_LowLowState_Id = 10048,
+ NonExclusiveLimitAlarmType_LowLowState_Name = 10049,
+ NonExclusiveLimitAlarmType_LowLowState_Number = 10050,
+ NonExclusiveLimitAlarmType_LowLowState_EffectiveDisplayName = 10051,
+ NonExclusiveLimitAlarmType_LowLowState_TransitionTime = 10052,
+ NonExclusiveLimitAlarmType_LowLowState_EffectiveTransitionTime = 10053,
+ NonExclusiveLimitAlarmType_LowLowState_TrueState = 10054,
+ NonExclusiveLimitAlarmType_LowLowState_FalseState = 10055,
+ NonExclusiveLimitAlarmType_HighHighLimit = 10056,
+ NonExclusiveLimitAlarmType_HighLimit = 10057,
+ NonExclusiveLimitAlarmType_LowLimit = 10058,
+ NonExclusiveLimitAlarmType_LowLowLimit = 10059,
+ NonExclusiveLevelAlarmType = 10060,
+ NonExclusiveLevelAlarmType_EventId = 10061,
+ NonExclusiveLevelAlarmType_EventType = 10062,
+ NonExclusiveLevelAlarmType_SourceNode = 10063,
+ NonExclusiveLevelAlarmType_SourceName = 10064,
+ NonExclusiveLevelAlarmType_Time = 10065,
+ NonExclusiveLevelAlarmType_ReceiveTime = 10066,
+ NonExclusiveLevelAlarmType_LocalTime = 10067,
+ NonExclusiveLevelAlarmType_Message = 10068,
+ NonExclusiveLevelAlarmType_Severity = 10069,
+ NonExclusiveLevelAlarmType_ConditionName = 10070,
+ NonExclusiveLevelAlarmType_BranchId = 10071,
+ NonExclusiveLevelAlarmType_Retain = 10072,
+ NonExclusiveLevelAlarmType_EnabledState = 10073,
+ NonExclusiveLevelAlarmType_EnabledState_Id = 10074,
+ NonExclusiveLevelAlarmType_EnabledState_Name = 10075,
+ NonExclusiveLevelAlarmType_EnabledState_Number = 10076,
+ NonExclusiveLevelAlarmType_EnabledState_EffectiveDisplayName = 10077,
+ NonExclusiveLevelAlarmType_EnabledState_TransitionTime = 10078,
+ NonExclusiveLevelAlarmType_EnabledState_EffectiveTransitionTime = 10079,
+ NonExclusiveLevelAlarmType_EnabledState_TrueState = 10080,
+ NonExclusiveLevelAlarmType_EnabledState_FalseState = 10081,
+ NonExclusiveLevelAlarmType_Quality = 10082,
+ NonExclusiveLevelAlarmType_Quality_SourceTimestamp = 10083,
+ NonExclusiveLevelAlarmType_LastSeverity = 10084,
+ NonExclusiveLevelAlarmType_LastSeverity_SourceTimestamp = 10085,
+ NonExclusiveLevelAlarmType_Comment = 10086,
+ NonExclusiveLevelAlarmType_Comment_SourceTimestamp = 10087,
+ NonExclusiveLevelAlarmType_ClientUserId = 10088,
+ NonExclusiveLevelAlarmType_Enable = 10089,
+ NonExclusiveLevelAlarmType_Disable = 10090,
+ NonExclusiveLevelAlarmType_AddComment = 10091,
+ NonExclusiveLevelAlarmType_AddComment_InputArguments = 10092,
+ NonExclusiveLevelAlarmType_ConditionRefresh = 10093,
+ NonExclusiveLevelAlarmType_ConditionRefresh_InputArguments = 10094,
+ NonExclusiveLevelAlarmType_AckedState = 10095,
+ NonExclusiveLevelAlarmType_AckedState_Id = 10096,
+ NonExclusiveLevelAlarmType_AckedState_Name = 10097,
+ NonExclusiveLevelAlarmType_AckedState_Number = 10098,
+ NonExclusiveLevelAlarmType_AckedState_EffectiveDisplayName = 10099,
+ NonExclusiveLevelAlarmType_AckedState_TransitionTime = 10100,
+ NonExclusiveLevelAlarmType_AckedState_EffectiveTransitionTime = 10101,
+ NonExclusiveLevelAlarmType_AckedState_TrueState = 10102,
+ NonExclusiveLevelAlarmType_AckedState_FalseState = 10103,
+ NonExclusiveLevelAlarmType_ConfirmedState = 10104,
+ NonExclusiveLevelAlarmType_ConfirmedState_Id = 10105,
+ NonExclusiveLevelAlarmType_ConfirmedState_Name = 10106,
+ NonExclusiveLevelAlarmType_ConfirmedState_Number = 10107,
+ NonExclusiveLevelAlarmType_ConfirmedState_EffectiveDisplayName = 10108,
+ NonExclusiveLevelAlarmType_ConfirmedState_TransitionTime = 10109,
+ NonExclusiveLevelAlarmType_ConfirmedState_EffectiveTransitionTime = 10110,
+ NonExclusiveLevelAlarmType_ConfirmedState_TrueState = 10111,
+ NonExclusiveLevelAlarmType_ConfirmedState_FalseState = 10112,
+ NonExclusiveLevelAlarmType_Acknowledge = 10113,
+ NonExclusiveLevelAlarmType_Acknowledge_InputArguments = 10114,
+ NonExclusiveLevelAlarmType_Confirm = 10115,
+ NonExclusiveLevelAlarmType_Confirm_InputArguments = 10116,
+ NonExclusiveLevelAlarmType_ActiveState = 10117,
+ NonExclusiveLevelAlarmType_ActiveState_Id = 10118,
+ NonExclusiveLevelAlarmType_ActiveState_Name = 10119,
+ NonExclusiveLevelAlarmType_ActiveState_Number = 10120,
+ NonExclusiveLevelAlarmType_ActiveState_EffectiveDisplayName = 10121,
+ NonExclusiveLevelAlarmType_ActiveState_TransitionTime = 10122,
+ NonExclusiveLevelAlarmType_ActiveState_EffectiveTransitionTime = 10123,
+ NonExclusiveLevelAlarmType_ActiveState_TrueState = 10124,
+ NonExclusiveLevelAlarmType_ActiveState_FalseState = 10125,
+ NonExclusiveLevelAlarmType_SuppressedState = 10126,
+ NonExclusiveLevelAlarmType_SuppressedState_Id = 10127,
+ NonExclusiveLevelAlarmType_SuppressedState_Name = 10128,
+ NonExclusiveLevelAlarmType_SuppressedState_Number = 10129,
+ NonExclusiveLevelAlarmType_SuppressedState_EffectiveDisplayName = 10130,
+ NonExclusiveLevelAlarmType_SuppressedState_TransitionTime = 10131,
+ NonExclusiveLevelAlarmType_SuppressedState_EffectiveTransitionTime = 10132,
+ NonExclusiveLevelAlarmType_SuppressedState_TrueState = 10133,
+ NonExclusiveLevelAlarmType_SuppressedState_FalseState = 10134,
+ NonExclusiveLevelAlarmType_ShelvingState = 10135,
+ NonExclusiveLevelAlarmType_ShelvingState_CurrentState = 10136,
+ NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Id = 10137,
+ NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Name = 10138,
+ NonExclusiveLevelAlarmType_ShelvingState_CurrentState_Number = 10139,
+ NonExclusiveLevelAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 10140,
+ NonExclusiveLevelAlarmType_ShelvingState_LastTransition = 10141,
+ NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Id = 10142,
+ NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Name = 10143,
+ NonExclusiveLevelAlarmType_ShelvingState_LastTransition_Number = 10144,
+ NonExclusiveLevelAlarmType_ShelvingState_LastTransition_TransitionTime = 10145,
+ NonExclusiveLevelAlarmType_ShelvingState_UnshelveTime = 10146,
+ NonExclusiveLevelAlarmType_ShelvingState_Unshelve = 10168,
+ NonExclusiveLevelAlarmType_ShelvingState_OneShotShelve = 10169,
+ NonExclusiveLevelAlarmType_ShelvingState_TimedShelve = 10170,
+ NonExclusiveLevelAlarmType_ShelvingState_TimedShelve_InputArguments = 10171,
+ NonExclusiveLevelAlarmType_SuppressedOrShelved = 10172,
+ NonExclusiveLevelAlarmType_MaxTimeShelved = 10173,
+ NonExclusiveLevelAlarmType_HighHighState = 10174,
+ NonExclusiveLevelAlarmType_HighHighState_Id = 10175,
+ NonExclusiveLevelAlarmType_HighHighState_Name = 10176,
+ NonExclusiveLevelAlarmType_HighHighState_Number = 10177,
+ NonExclusiveLevelAlarmType_HighHighState_EffectiveDisplayName = 10178,
+ NonExclusiveLevelAlarmType_HighHighState_TransitionTime = 10179,
+ NonExclusiveLevelAlarmType_HighHighState_EffectiveTransitionTime = 10180,
+ NonExclusiveLevelAlarmType_HighHighState_TrueState = 10181,
+ NonExclusiveLevelAlarmType_HighHighState_FalseState = 10182,
+ NonExclusiveLevelAlarmType_HighState = 10183,
+ NonExclusiveLevelAlarmType_HighState_Id = 10184,
+ NonExclusiveLevelAlarmType_HighState_Name = 10185,
+ NonExclusiveLevelAlarmType_HighState_Number = 10186,
+ NonExclusiveLevelAlarmType_HighState_EffectiveDisplayName = 10187,
+ NonExclusiveLevelAlarmType_HighState_TransitionTime = 10188,
+ NonExclusiveLevelAlarmType_HighState_EffectiveTransitionTime = 10189,
+ NonExclusiveLevelAlarmType_HighState_TrueState = 10190,
+ NonExclusiveLevelAlarmType_HighState_FalseState = 10191,
+ NonExclusiveLevelAlarmType_LowState = 10192,
+ NonExclusiveLevelAlarmType_LowState_Id = 10193,
+ NonExclusiveLevelAlarmType_LowState_Name = 10194,
+ NonExclusiveLevelAlarmType_LowState_Number = 10195,
+ NonExclusiveLevelAlarmType_LowState_EffectiveDisplayName = 10196,
+ NonExclusiveLevelAlarmType_LowState_TransitionTime = 10197,
+ NonExclusiveLevelAlarmType_LowState_EffectiveTransitionTime = 10198,
+ NonExclusiveLevelAlarmType_LowState_TrueState = 10199,
+ NonExclusiveLevelAlarmType_LowState_FalseState = 10200,
+ NonExclusiveLevelAlarmType_LowLowState = 10201,
+ NonExclusiveLevelAlarmType_LowLowState_Id = 10202,
+ NonExclusiveLevelAlarmType_LowLowState_Name = 10203,
+ NonExclusiveLevelAlarmType_LowLowState_Number = 10204,
+ NonExclusiveLevelAlarmType_LowLowState_EffectiveDisplayName = 10205,
+ NonExclusiveLevelAlarmType_LowLowState_TransitionTime = 10206,
+ NonExclusiveLevelAlarmType_LowLowState_EffectiveTransitionTime = 10207,
+ NonExclusiveLevelAlarmType_LowLowState_TrueState = 10208,
+ NonExclusiveLevelAlarmType_LowLowState_FalseState = 10209,
+ NonExclusiveLevelAlarmType_HighHighLimit = 10210,
+ NonExclusiveLevelAlarmType_HighLimit = 10211,
+ NonExclusiveLevelAlarmType_LowLimit = 10212,
+ NonExclusiveLevelAlarmType_LowLowLimit = 10213,
+ NonExclusiveRateOfChangeAlarmType = 10214,
+ NonExclusiveRateOfChangeAlarmType_EventId = 10215,
+ NonExclusiveRateOfChangeAlarmType_EventType = 10216,
+ NonExclusiveRateOfChangeAlarmType_SourceNode = 10217,
+ NonExclusiveRateOfChangeAlarmType_SourceName = 10218,
+ NonExclusiveRateOfChangeAlarmType_Time = 10219,
+ NonExclusiveRateOfChangeAlarmType_ReceiveTime = 10220,
+ NonExclusiveRateOfChangeAlarmType_LocalTime = 10221,
+ NonExclusiveRateOfChangeAlarmType_Message = 10222,
+ NonExclusiveRateOfChangeAlarmType_Severity = 10223,
+ NonExclusiveRateOfChangeAlarmType_ConditionName = 10224,
+ NonExclusiveRateOfChangeAlarmType_BranchId = 10225,
+ NonExclusiveRateOfChangeAlarmType_Retain = 10226,
+ NonExclusiveRateOfChangeAlarmType_EnabledState = 10227,
+ NonExclusiveRateOfChangeAlarmType_EnabledState_Id = 10228,
+ NonExclusiveRateOfChangeAlarmType_EnabledState_Name = 10229,
+ NonExclusiveRateOfChangeAlarmType_EnabledState_Number = 10230,
+ NonExclusiveRateOfChangeAlarmType_EnabledState_EffectiveDisplayName = 10231,
+ NonExclusiveRateOfChangeAlarmType_EnabledState_TransitionTime = 10232,
+ NonExclusiveRateOfChangeAlarmType_EnabledState_EffectiveTransitionTime = 10233,
+ NonExclusiveRateOfChangeAlarmType_EnabledState_TrueState = 10234,
+ NonExclusiveRateOfChangeAlarmType_EnabledState_FalseState = 10235,
+ NonExclusiveRateOfChangeAlarmType_Quality = 10236,
+ NonExclusiveRateOfChangeAlarmType_Quality_SourceTimestamp = 10237,
+ NonExclusiveRateOfChangeAlarmType_LastSeverity = 10238,
+ NonExclusiveRateOfChangeAlarmType_LastSeverity_SourceTimestamp = 10239,
+ NonExclusiveRateOfChangeAlarmType_Comment = 10240,
+ NonExclusiveRateOfChangeAlarmType_Comment_SourceTimestamp = 10241,
+ NonExclusiveRateOfChangeAlarmType_ClientUserId = 10242,
+ NonExclusiveRateOfChangeAlarmType_Enable = 10243,
+ NonExclusiveRateOfChangeAlarmType_Disable = 10244,
+ NonExclusiveRateOfChangeAlarmType_AddComment = 10245,
+ NonExclusiveRateOfChangeAlarmType_AddComment_InputArguments = 10246,
+ NonExclusiveRateOfChangeAlarmType_ConditionRefresh = 10247,
+ NonExclusiveRateOfChangeAlarmType_ConditionRefresh_InputArguments = 10248,
+ NonExclusiveRateOfChangeAlarmType_AckedState = 10249,
+ NonExclusiveRateOfChangeAlarmType_AckedState_Id = 10250,
+ NonExclusiveRateOfChangeAlarmType_AckedState_Name = 10251,
+ NonExclusiveRateOfChangeAlarmType_AckedState_Number = 10252,
+ NonExclusiveRateOfChangeAlarmType_AckedState_EffectiveDisplayName = 10253,
+ NonExclusiveRateOfChangeAlarmType_AckedState_TransitionTime = 10254,
+ NonExclusiveRateOfChangeAlarmType_AckedState_EffectiveTransitionTime = 10255,
+ NonExclusiveRateOfChangeAlarmType_AckedState_TrueState = 10256,
+ NonExclusiveRateOfChangeAlarmType_AckedState_FalseState = 10257,
+ NonExclusiveRateOfChangeAlarmType_ConfirmedState = 10258,
+ NonExclusiveRateOfChangeAlarmType_ConfirmedState_Id = 10259,
+ NonExclusiveRateOfChangeAlarmType_ConfirmedState_Name = 10260,
+ NonExclusiveRateOfChangeAlarmType_ConfirmedState_Number = 10261,
+ NonExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveDisplayName = 10262,
+ NonExclusiveRateOfChangeAlarmType_ConfirmedState_TransitionTime = 10263,
+ NonExclusiveRateOfChangeAlarmType_ConfirmedState_EffectiveTransitionTime = 10264,
+ NonExclusiveRateOfChangeAlarmType_ConfirmedState_TrueState = 10265,
+ NonExclusiveRateOfChangeAlarmType_ConfirmedState_FalseState = 10266,
+ NonExclusiveRateOfChangeAlarmType_Acknowledge = 10267,
+ NonExclusiveRateOfChangeAlarmType_Acknowledge_InputArguments = 10268,
+ NonExclusiveRateOfChangeAlarmType_Confirm = 10269,
+ NonExclusiveRateOfChangeAlarmType_Confirm_InputArguments = 10270,
+ NonExclusiveRateOfChangeAlarmType_ActiveState = 10271,
+ NonExclusiveRateOfChangeAlarmType_ActiveState_Id = 10272,
+ NonExclusiveRateOfChangeAlarmType_ActiveState_Name = 10273,
+ NonExclusiveRateOfChangeAlarmType_ActiveState_Number = 10274,
+ NonExclusiveRateOfChangeAlarmType_ActiveState_EffectiveDisplayName = 10275,
+ NonExclusiveRateOfChangeAlarmType_ActiveState_TransitionTime = 10276,
+ NonExclusiveRateOfChangeAlarmType_ActiveState_EffectiveTransitionTime = 10277,
+ NonExclusiveRateOfChangeAlarmType_ActiveState_TrueState = 10278,
+ NonExclusiveRateOfChangeAlarmType_ActiveState_FalseState = 10279,
+ NonExclusiveRateOfChangeAlarmType_SuppressedState = 10280,
+ NonExclusiveRateOfChangeAlarmType_SuppressedState_Id = 10281,
+ NonExclusiveRateOfChangeAlarmType_SuppressedState_Name = 10282,
+ NonExclusiveRateOfChangeAlarmType_SuppressedState_Number = 10283,
+ NonExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveDisplayName = 10284,
+ NonExclusiveRateOfChangeAlarmType_SuppressedState_TransitionTime = 10285,
+ NonExclusiveRateOfChangeAlarmType_SuppressedState_EffectiveTransitionTime = 10286,
+ NonExclusiveRateOfChangeAlarmType_SuppressedState_TrueState = 10287,
+ NonExclusiveRateOfChangeAlarmType_SuppressedState_FalseState = 10288,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState = 10289,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState = 10290,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Id = 10291,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Name = 10292,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_Number = 10293,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 10294,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition = 10295,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Id = 10296,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Name = 10297,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_Number = 10298,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_TransitionTime = 10299,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_UnshelveTime = 10300,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_Unshelve = 10322,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_OneShotShelve = 10323,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve = 10324,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_TimedShelve_InputArguments = 10325,
+ NonExclusiveRateOfChangeAlarmType_SuppressedOrShelved = 10326,
+ NonExclusiveRateOfChangeAlarmType_MaxTimeShelved = 10327,
+ NonExclusiveRateOfChangeAlarmType_HighHighState = 10328,
+ NonExclusiveRateOfChangeAlarmType_HighHighState_Id = 10329,
+ NonExclusiveRateOfChangeAlarmType_HighHighState_Name = 10330,
+ NonExclusiveRateOfChangeAlarmType_HighHighState_Number = 10331,
+ NonExclusiveRateOfChangeAlarmType_HighHighState_EffectiveDisplayName = 10332,
+ NonExclusiveRateOfChangeAlarmType_HighHighState_TransitionTime = 10333,
+ NonExclusiveRateOfChangeAlarmType_HighHighState_EffectiveTransitionTime = 10334,
+ NonExclusiveRateOfChangeAlarmType_HighHighState_TrueState = 10335,
+ NonExclusiveRateOfChangeAlarmType_HighHighState_FalseState = 10336,
+ NonExclusiveRateOfChangeAlarmType_HighState = 10337,
+ NonExclusiveRateOfChangeAlarmType_HighState_Id = 10338,
+ NonExclusiveRateOfChangeAlarmType_HighState_Name = 10339,
+ NonExclusiveRateOfChangeAlarmType_HighState_Number = 10340,
+ NonExclusiveRateOfChangeAlarmType_HighState_EffectiveDisplayName = 10341,
+ NonExclusiveRateOfChangeAlarmType_HighState_TransitionTime = 10342,
+ NonExclusiveRateOfChangeAlarmType_HighState_EffectiveTransitionTime = 10343,
+ NonExclusiveRateOfChangeAlarmType_HighState_TrueState = 10344,
+ NonExclusiveRateOfChangeAlarmType_HighState_FalseState = 10345,
+ NonExclusiveRateOfChangeAlarmType_LowState = 10346,
+ NonExclusiveRateOfChangeAlarmType_LowState_Id = 10347,
+ NonExclusiveRateOfChangeAlarmType_LowState_Name = 10348,
+ NonExclusiveRateOfChangeAlarmType_LowState_Number = 10349,
+ NonExclusiveRateOfChangeAlarmType_LowState_EffectiveDisplayName = 10350,
+ NonExclusiveRateOfChangeAlarmType_LowState_TransitionTime = 10351,
+ NonExclusiveRateOfChangeAlarmType_LowState_EffectiveTransitionTime = 10352,
+ NonExclusiveRateOfChangeAlarmType_LowState_TrueState = 10353,
+ NonExclusiveRateOfChangeAlarmType_LowState_FalseState = 10354,
+ NonExclusiveRateOfChangeAlarmType_LowLowState = 10355,
+ NonExclusiveRateOfChangeAlarmType_LowLowState_Id = 10356,
+ NonExclusiveRateOfChangeAlarmType_LowLowState_Name = 10357,
+ NonExclusiveRateOfChangeAlarmType_LowLowState_Number = 10358,
+ NonExclusiveRateOfChangeAlarmType_LowLowState_EffectiveDisplayName = 10359,
+ NonExclusiveRateOfChangeAlarmType_LowLowState_TransitionTime = 10360,
+ NonExclusiveRateOfChangeAlarmType_LowLowState_EffectiveTransitionTime = 10361,
+ NonExclusiveRateOfChangeAlarmType_LowLowState_TrueState = 10362,
+ NonExclusiveRateOfChangeAlarmType_LowLowState_FalseState = 10363,
+ NonExclusiveRateOfChangeAlarmType_HighHighLimit = 10364,
+ NonExclusiveRateOfChangeAlarmType_HighLimit = 10365,
+ NonExclusiveRateOfChangeAlarmType_LowLimit = 10366,
+ NonExclusiveRateOfChangeAlarmType_LowLowLimit = 10367,
+ NonExclusiveDeviationAlarmType = 10368,
+ NonExclusiveDeviationAlarmType_EventId = 10369,
+ NonExclusiveDeviationAlarmType_EventType = 10370,
+ NonExclusiveDeviationAlarmType_SourceNode = 10371,
+ NonExclusiveDeviationAlarmType_SourceName = 10372,
+ NonExclusiveDeviationAlarmType_Time = 10373,
+ NonExclusiveDeviationAlarmType_ReceiveTime = 10374,
+ NonExclusiveDeviationAlarmType_LocalTime = 10375,
+ NonExclusiveDeviationAlarmType_Message = 10376,
+ NonExclusiveDeviationAlarmType_Severity = 10377,
+ NonExclusiveDeviationAlarmType_ConditionName = 10378,
+ NonExclusiveDeviationAlarmType_BranchId = 10379,
+ NonExclusiveDeviationAlarmType_Retain = 10380,
+ NonExclusiveDeviationAlarmType_EnabledState = 10381,
+ NonExclusiveDeviationAlarmType_EnabledState_Id = 10382,
+ NonExclusiveDeviationAlarmType_EnabledState_Name = 10383,
+ NonExclusiveDeviationAlarmType_EnabledState_Number = 10384,
+ NonExclusiveDeviationAlarmType_EnabledState_EffectiveDisplayName = 10385,
+ NonExclusiveDeviationAlarmType_EnabledState_TransitionTime = 10386,
+ NonExclusiveDeviationAlarmType_EnabledState_EffectiveTransitionTime = 10387,
+ NonExclusiveDeviationAlarmType_EnabledState_TrueState = 10388,
+ NonExclusiveDeviationAlarmType_EnabledState_FalseState = 10389,
+ NonExclusiveDeviationAlarmType_Quality = 10390,
+ NonExclusiveDeviationAlarmType_Quality_SourceTimestamp = 10391,
+ NonExclusiveDeviationAlarmType_LastSeverity = 10392,
+ NonExclusiveDeviationAlarmType_LastSeverity_SourceTimestamp = 10393,
+ NonExclusiveDeviationAlarmType_Comment = 10394,
+ NonExclusiveDeviationAlarmType_Comment_SourceTimestamp = 10395,
+ NonExclusiveDeviationAlarmType_ClientUserId = 10396,
+ NonExclusiveDeviationAlarmType_Enable = 10397,
+ NonExclusiveDeviationAlarmType_Disable = 10398,
+ NonExclusiveDeviationAlarmType_AddComment = 10399,
+ NonExclusiveDeviationAlarmType_AddComment_InputArguments = 10400,
+ NonExclusiveDeviationAlarmType_ConditionRefresh = 10401,
+ NonExclusiveDeviationAlarmType_ConditionRefresh_InputArguments = 10402,
+ NonExclusiveDeviationAlarmType_AckedState = 10403,
+ NonExclusiveDeviationAlarmType_AckedState_Id = 10404,
+ NonExclusiveDeviationAlarmType_AckedState_Name = 10405,
+ NonExclusiveDeviationAlarmType_AckedState_Number = 10406,
+ NonExclusiveDeviationAlarmType_AckedState_EffectiveDisplayName = 10407,
+ NonExclusiveDeviationAlarmType_AckedState_TransitionTime = 10408,
+ NonExclusiveDeviationAlarmType_AckedState_EffectiveTransitionTime = 10409,
+ NonExclusiveDeviationAlarmType_AckedState_TrueState = 10410,
+ NonExclusiveDeviationAlarmType_AckedState_FalseState = 10411,
+ NonExclusiveDeviationAlarmType_ConfirmedState = 10412,
+ NonExclusiveDeviationAlarmType_ConfirmedState_Id = 10413,
+ NonExclusiveDeviationAlarmType_ConfirmedState_Name = 10414,
+ NonExclusiveDeviationAlarmType_ConfirmedState_Number = 10415,
+ NonExclusiveDeviationAlarmType_ConfirmedState_EffectiveDisplayName = 10416,
+ NonExclusiveDeviationAlarmType_ConfirmedState_TransitionTime = 10417,
+ NonExclusiveDeviationAlarmType_ConfirmedState_EffectiveTransitionTime = 10418,
+ NonExclusiveDeviationAlarmType_ConfirmedState_TrueState = 10419,
+ NonExclusiveDeviationAlarmType_ConfirmedState_FalseState = 10420,
+ NonExclusiveDeviationAlarmType_Acknowledge = 10421,
+ NonExclusiveDeviationAlarmType_Acknowledge_InputArguments = 10422,
+ NonExclusiveDeviationAlarmType_Confirm = 10423,
+ NonExclusiveDeviationAlarmType_Confirm_InputArguments = 10424,
+ NonExclusiveDeviationAlarmType_ActiveState = 10425,
+ NonExclusiveDeviationAlarmType_ActiveState_Id = 10426,
+ NonExclusiveDeviationAlarmType_ActiveState_Name = 10427,
+ NonExclusiveDeviationAlarmType_ActiveState_Number = 10428,
+ NonExclusiveDeviationAlarmType_ActiveState_EffectiveDisplayName = 10429,
+ NonExclusiveDeviationAlarmType_ActiveState_TransitionTime = 10430,
+ NonExclusiveDeviationAlarmType_ActiveState_EffectiveTransitionTime = 10431,
+ NonExclusiveDeviationAlarmType_ActiveState_TrueState = 10432,
+ NonExclusiveDeviationAlarmType_ActiveState_FalseState = 10433,
+ NonExclusiveDeviationAlarmType_SuppressedState = 10434,
+ NonExclusiveDeviationAlarmType_SuppressedState_Id = 10435,
+ NonExclusiveDeviationAlarmType_SuppressedState_Name = 10436,
+ NonExclusiveDeviationAlarmType_SuppressedState_Number = 10437,
+ NonExclusiveDeviationAlarmType_SuppressedState_EffectiveDisplayName = 10438,
+ NonExclusiveDeviationAlarmType_SuppressedState_TransitionTime = 10439,
+ NonExclusiveDeviationAlarmType_SuppressedState_EffectiveTransitionTime = 10440,
+ NonExclusiveDeviationAlarmType_SuppressedState_TrueState = 10441,
+ NonExclusiveDeviationAlarmType_SuppressedState_FalseState = 10442,
+ NonExclusiveDeviationAlarmType_ShelvingState = 10443,
+ NonExclusiveDeviationAlarmType_ShelvingState_CurrentState = 10444,
+ NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Id = 10445,
+ NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Name = 10446,
+ NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_Number = 10447,
+ NonExclusiveDeviationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 10448,
+ NonExclusiveDeviationAlarmType_ShelvingState_LastTransition = 10449,
+ NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Id = 10450,
+ NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Name = 10451,
+ NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_Number = 10452,
+ NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_TransitionTime = 10453,
+ NonExclusiveDeviationAlarmType_ShelvingState_UnshelveTime = 10454,
+ NonExclusiveDeviationAlarmType_ShelvingState_Unshelve = 10476,
+ NonExclusiveDeviationAlarmType_ShelvingState_OneShotShelve = 10477,
+ NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve = 10478,
+ NonExclusiveDeviationAlarmType_ShelvingState_TimedShelve_InputArguments = 10479,
+ NonExclusiveDeviationAlarmType_SuppressedOrShelved = 10480,
+ NonExclusiveDeviationAlarmType_MaxTimeShelved = 10481,
+ NonExclusiveDeviationAlarmType_HighHighState = 10482,
+ NonExclusiveDeviationAlarmType_HighHighState_Id = 10483,
+ NonExclusiveDeviationAlarmType_HighHighState_Name = 10484,
+ NonExclusiveDeviationAlarmType_HighHighState_Number = 10485,
+ NonExclusiveDeviationAlarmType_HighHighState_EffectiveDisplayName = 10486,
+ NonExclusiveDeviationAlarmType_HighHighState_TransitionTime = 10487,
+ NonExclusiveDeviationAlarmType_HighHighState_EffectiveTransitionTime = 10488,
+ NonExclusiveDeviationAlarmType_HighHighState_TrueState = 10489,
+ NonExclusiveDeviationAlarmType_HighHighState_FalseState = 10490,
+ NonExclusiveDeviationAlarmType_HighState = 10491,
+ NonExclusiveDeviationAlarmType_HighState_Id = 10492,
+ NonExclusiveDeviationAlarmType_HighState_Name = 10493,
+ NonExclusiveDeviationAlarmType_HighState_Number = 10494,
+ NonExclusiveDeviationAlarmType_HighState_EffectiveDisplayName = 10495,
+ NonExclusiveDeviationAlarmType_HighState_TransitionTime = 10496,
+ NonExclusiveDeviationAlarmType_HighState_EffectiveTransitionTime = 10497,
+ NonExclusiveDeviationAlarmType_HighState_TrueState = 10498,
+ NonExclusiveDeviationAlarmType_HighState_FalseState = 10499,
+ NonExclusiveDeviationAlarmType_LowState = 10500,
+ NonExclusiveDeviationAlarmType_LowState_Id = 10501,
+ NonExclusiveDeviationAlarmType_LowState_Name = 10502,
+ NonExclusiveDeviationAlarmType_LowState_Number = 10503,
+ NonExclusiveDeviationAlarmType_LowState_EffectiveDisplayName = 10504,
+ NonExclusiveDeviationAlarmType_LowState_TransitionTime = 10505,
+ NonExclusiveDeviationAlarmType_LowState_EffectiveTransitionTime = 10506,
+ NonExclusiveDeviationAlarmType_LowState_TrueState = 10507,
+ NonExclusiveDeviationAlarmType_LowState_FalseState = 10508,
+ NonExclusiveDeviationAlarmType_LowLowState = 10509,
+ NonExclusiveDeviationAlarmType_LowLowState_Id = 10510,
+ NonExclusiveDeviationAlarmType_LowLowState_Name = 10511,
+ NonExclusiveDeviationAlarmType_LowLowState_Number = 10512,
+ NonExclusiveDeviationAlarmType_LowLowState_EffectiveDisplayName = 10513,
+ NonExclusiveDeviationAlarmType_LowLowState_TransitionTime = 10514,
+ NonExclusiveDeviationAlarmType_LowLowState_EffectiveTransitionTime = 10515,
+ NonExclusiveDeviationAlarmType_LowLowState_TrueState = 10516,
+ NonExclusiveDeviationAlarmType_LowLowState_FalseState = 10517,
+ NonExclusiveDeviationAlarmType_HighHighLimit = 10518,
+ NonExclusiveDeviationAlarmType_HighLimit = 10519,
+ NonExclusiveDeviationAlarmType_LowLimit = 10520,
+ NonExclusiveDeviationAlarmType_LowLowLimit = 10521,
+ NonExclusiveDeviationAlarmType_SetpointNode = 10522,
+ DiscreteAlarmType = 10523,
+ DiscreteAlarmType_EventId = 10524,
+ DiscreteAlarmType_EventType = 10525,
+ DiscreteAlarmType_SourceNode = 10526,
+ DiscreteAlarmType_SourceName = 10527,
+ DiscreteAlarmType_Time = 10528,
+ DiscreteAlarmType_ReceiveTime = 10529,
+ DiscreteAlarmType_LocalTime = 10530,
+ DiscreteAlarmType_Message = 10531,
+ DiscreteAlarmType_Severity = 10532,
+ DiscreteAlarmType_ConditionName = 10533,
+ DiscreteAlarmType_BranchId = 10534,
+ DiscreteAlarmType_Retain = 10535,
+ DiscreteAlarmType_EnabledState = 10536,
+ DiscreteAlarmType_EnabledState_Id = 10537,
+ DiscreteAlarmType_EnabledState_Name = 10538,
+ DiscreteAlarmType_EnabledState_Number = 10539,
+ DiscreteAlarmType_EnabledState_EffectiveDisplayName = 10540,
+ DiscreteAlarmType_EnabledState_TransitionTime = 10541,
+ DiscreteAlarmType_EnabledState_EffectiveTransitionTime = 10542,
+ DiscreteAlarmType_EnabledState_TrueState = 10543,
+ DiscreteAlarmType_EnabledState_FalseState = 10544,
+ DiscreteAlarmType_Quality = 10545,
+ DiscreteAlarmType_Quality_SourceTimestamp = 10546,
+ DiscreteAlarmType_LastSeverity = 10547,
+ DiscreteAlarmType_LastSeverity_SourceTimestamp = 10548,
+ DiscreteAlarmType_Comment = 10549,
+ DiscreteAlarmType_Comment_SourceTimestamp = 10550,
+ DiscreteAlarmType_ClientUserId = 10551,
+ DiscreteAlarmType_Enable = 10552,
+ DiscreteAlarmType_Disable = 10553,
+ DiscreteAlarmType_AddComment = 10554,
+ DiscreteAlarmType_AddComment_InputArguments = 10555,
+ DiscreteAlarmType_ConditionRefresh = 10556,
+ DiscreteAlarmType_ConditionRefresh_InputArguments = 10557,
+ DiscreteAlarmType_AckedState = 10558,
+ DiscreteAlarmType_AckedState_Id = 10559,
+ DiscreteAlarmType_AckedState_Name = 10560,
+ DiscreteAlarmType_AckedState_Number = 10561,
+ DiscreteAlarmType_AckedState_EffectiveDisplayName = 10562,
+ DiscreteAlarmType_AckedState_TransitionTime = 10563,
+ DiscreteAlarmType_AckedState_EffectiveTransitionTime = 10564,
+ DiscreteAlarmType_AckedState_TrueState = 10565,
+ DiscreteAlarmType_AckedState_FalseState = 10566,
+ DiscreteAlarmType_ConfirmedState = 10567,
+ DiscreteAlarmType_ConfirmedState_Id = 10568,
+ DiscreteAlarmType_ConfirmedState_Name = 10569,
+ DiscreteAlarmType_ConfirmedState_Number = 10570,
+ DiscreteAlarmType_ConfirmedState_EffectiveDisplayName = 10571,
+ DiscreteAlarmType_ConfirmedState_TransitionTime = 10572,
+ DiscreteAlarmType_ConfirmedState_EffectiveTransitionTime = 10573,
+ DiscreteAlarmType_ConfirmedState_TrueState = 10574,
+ DiscreteAlarmType_ConfirmedState_FalseState = 10575,
+ DiscreteAlarmType_Acknowledge = 10576,
+ DiscreteAlarmType_Acknowledge_InputArguments = 10577,
+ DiscreteAlarmType_Confirm = 10578,
+ DiscreteAlarmType_Confirm_InputArguments = 10579,
+ DiscreteAlarmType_ActiveState = 10580,
+ DiscreteAlarmType_ActiveState_Id = 10581,
+ DiscreteAlarmType_ActiveState_Name = 10582,
+ DiscreteAlarmType_ActiveState_Number = 10583,
+ DiscreteAlarmType_ActiveState_EffectiveDisplayName = 10584,
+ DiscreteAlarmType_ActiveState_TransitionTime = 10585,
+ DiscreteAlarmType_ActiveState_EffectiveTransitionTime = 10586,
+ DiscreteAlarmType_ActiveState_TrueState = 10587,
+ DiscreteAlarmType_ActiveState_FalseState = 10588,
+ DiscreteAlarmType_SuppressedState = 10589,
+ DiscreteAlarmType_SuppressedState_Id = 10590,
+ DiscreteAlarmType_SuppressedState_Name = 10591,
+ DiscreteAlarmType_SuppressedState_Number = 10592,
+ DiscreteAlarmType_SuppressedState_EffectiveDisplayName = 10593,
+ DiscreteAlarmType_SuppressedState_TransitionTime = 10594,
+ DiscreteAlarmType_SuppressedState_EffectiveTransitionTime = 10595,
+ DiscreteAlarmType_SuppressedState_TrueState = 10596,
+ DiscreteAlarmType_SuppressedState_FalseState = 10597,
+ DiscreteAlarmType_ShelvingState = 10598,
+ DiscreteAlarmType_ShelvingState_CurrentState = 10599,
+ DiscreteAlarmType_ShelvingState_CurrentState_Id = 10600,
+ DiscreteAlarmType_ShelvingState_CurrentState_Name = 10601,
+ DiscreteAlarmType_ShelvingState_CurrentState_Number = 10602,
+ DiscreteAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 10603,
+ DiscreteAlarmType_ShelvingState_LastTransition = 10604,
+ DiscreteAlarmType_ShelvingState_LastTransition_Id = 10605,
+ DiscreteAlarmType_ShelvingState_LastTransition_Name = 10606,
+ DiscreteAlarmType_ShelvingState_LastTransition_Number = 10607,
+ DiscreteAlarmType_ShelvingState_LastTransition_TransitionTime = 10608,
+ DiscreteAlarmType_ShelvingState_UnshelveTime = 10609,
+ DiscreteAlarmType_ShelvingState_Unshelve = 10631,
+ DiscreteAlarmType_ShelvingState_OneShotShelve = 10632,
+ DiscreteAlarmType_ShelvingState_TimedShelve = 10633,
+ DiscreteAlarmType_ShelvingState_TimedShelve_InputArguments = 10634,
+ DiscreteAlarmType_SuppressedOrShelved = 10635,
+ DiscreteAlarmType_MaxTimeShelved = 10636,
+ OffNormalAlarmType = 10637,
+ OffNormalAlarmType_EventId = 10638,
+ OffNormalAlarmType_EventType = 10639,
+ OffNormalAlarmType_SourceNode = 10640,
+ OffNormalAlarmType_SourceName = 10641,
+ OffNormalAlarmType_Time = 10642,
+ OffNormalAlarmType_ReceiveTime = 10643,
+ OffNormalAlarmType_LocalTime = 10644,
+ OffNormalAlarmType_Message = 10645,
+ OffNormalAlarmType_Severity = 10646,
+ OffNormalAlarmType_ConditionName = 10647,
+ OffNormalAlarmType_BranchId = 10648,
+ OffNormalAlarmType_Retain = 10649,
+ OffNormalAlarmType_EnabledState = 10650,
+ OffNormalAlarmType_EnabledState_Id = 10651,
+ OffNormalAlarmType_EnabledState_Name = 10652,
+ OffNormalAlarmType_EnabledState_Number = 10653,
+ OffNormalAlarmType_EnabledState_EffectiveDisplayName = 10654,
+ OffNormalAlarmType_EnabledState_TransitionTime = 10655,
+ OffNormalAlarmType_EnabledState_EffectiveTransitionTime = 10656,
+ OffNormalAlarmType_EnabledState_TrueState = 10657,
+ OffNormalAlarmType_EnabledState_FalseState = 10658,
+ OffNormalAlarmType_Quality = 10659,
+ OffNormalAlarmType_Quality_SourceTimestamp = 10660,
+ OffNormalAlarmType_LastSeverity = 10661,
+ OffNormalAlarmType_LastSeverity_SourceTimestamp = 10662,
+ OffNormalAlarmType_Comment = 10663,
+ OffNormalAlarmType_Comment_SourceTimestamp = 10664,
+ OffNormalAlarmType_ClientUserId = 10665,
+ OffNormalAlarmType_Enable = 10666,
+ OffNormalAlarmType_Disable = 10667,
+ OffNormalAlarmType_AddComment = 10668,
+ OffNormalAlarmType_AddComment_InputArguments = 10669,
+ OffNormalAlarmType_ConditionRefresh = 10670,
+ OffNormalAlarmType_ConditionRefresh_InputArguments = 10671,
+ OffNormalAlarmType_AckedState = 10672,
+ OffNormalAlarmType_AckedState_Id = 10673,
+ OffNormalAlarmType_AckedState_Name = 10674,
+ OffNormalAlarmType_AckedState_Number = 10675,
+ OffNormalAlarmType_AckedState_EffectiveDisplayName = 10676,
+ OffNormalAlarmType_AckedState_TransitionTime = 10677,
+ OffNormalAlarmType_AckedState_EffectiveTransitionTime = 10678,
+ OffNormalAlarmType_AckedState_TrueState = 10679,
+ OffNormalAlarmType_AckedState_FalseState = 10680,
+ OffNormalAlarmType_ConfirmedState = 10681,
+ OffNormalAlarmType_ConfirmedState_Id = 10682,
+ OffNormalAlarmType_ConfirmedState_Name = 10683,
+ OffNormalAlarmType_ConfirmedState_Number = 10684,
+ OffNormalAlarmType_ConfirmedState_EffectiveDisplayName = 10685,
+ OffNormalAlarmType_ConfirmedState_TransitionTime = 10686,
+ OffNormalAlarmType_ConfirmedState_EffectiveTransitionTime = 10687,
+ OffNormalAlarmType_ConfirmedState_TrueState = 10688,
+ OffNormalAlarmType_ConfirmedState_FalseState = 10689,
+ OffNormalAlarmType_Acknowledge = 10690,
+ OffNormalAlarmType_Acknowledge_InputArguments = 10691,
+ OffNormalAlarmType_Confirm = 10692,
+ OffNormalAlarmType_Confirm_InputArguments = 10693,
+ OffNormalAlarmType_ActiveState = 10694,
+ OffNormalAlarmType_ActiveState_Id = 10695,
+ OffNormalAlarmType_ActiveState_Name = 10696,
+ OffNormalAlarmType_ActiveState_Number = 10697,
+ OffNormalAlarmType_ActiveState_EffectiveDisplayName = 10698,
+ OffNormalAlarmType_ActiveState_TransitionTime = 10699,
+ OffNormalAlarmType_ActiveState_EffectiveTransitionTime = 10700,
+ OffNormalAlarmType_ActiveState_TrueState = 10701,
+ OffNormalAlarmType_ActiveState_FalseState = 10702,
+ OffNormalAlarmType_SuppressedState = 10703,
+ OffNormalAlarmType_SuppressedState_Id = 10704,
+ OffNormalAlarmType_SuppressedState_Name = 10705,
+ OffNormalAlarmType_SuppressedState_Number = 10706,
+ OffNormalAlarmType_SuppressedState_EffectiveDisplayName = 10707,
+ OffNormalAlarmType_SuppressedState_TransitionTime = 10708,
+ OffNormalAlarmType_SuppressedState_EffectiveTransitionTime = 10709,
+ OffNormalAlarmType_SuppressedState_TrueState = 10710,
+ OffNormalAlarmType_SuppressedState_FalseState = 10711,
+ OffNormalAlarmType_ShelvingState = 10712,
+ OffNormalAlarmType_ShelvingState_CurrentState = 10713,
+ OffNormalAlarmType_ShelvingState_CurrentState_Id = 10714,
+ OffNormalAlarmType_ShelvingState_CurrentState_Name = 10715,
+ OffNormalAlarmType_ShelvingState_CurrentState_Number = 10716,
+ OffNormalAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 10717,
+ OffNormalAlarmType_ShelvingState_LastTransition = 10718,
+ OffNormalAlarmType_ShelvingState_LastTransition_Id = 10719,
+ OffNormalAlarmType_ShelvingState_LastTransition_Name = 10720,
+ OffNormalAlarmType_ShelvingState_LastTransition_Number = 10721,
+ OffNormalAlarmType_ShelvingState_LastTransition_TransitionTime = 10722,
+ OffNormalAlarmType_ShelvingState_UnshelveTime = 10723,
+ OffNormalAlarmType_ShelvingState_Unshelve = 10745,
+ OffNormalAlarmType_ShelvingState_OneShotShelve = 10746,
+ OffNormalAlarmType_ShelvingState_TimedShelve = 10747,
+ OffNormalAlarmType_ShelvingState_TimedShelve_InputArguments = 10748,
+ OffNormalAlarmType_SuppressedOrShelved = 10749,
+ OffNormalAlarmType_MaxTimeShelved = 10750,
+ TripAlarmType = 10751,
+ TripAlarmType_EventId = 10752,
+ TripAlarmType_EventType = 10753,
+ TripAlarmType_SourceNode = 10754,
+ TripAlarmType_SourceName = 10755,
+ TripAlarmType_Time = 10756,
+ TripAlarmType_ReceiveTime = 10757,
+ TripAlarmType_LocalTime = 10758,
+ TripAlarmType_Message = 10759,
+ TripAlarmType_Severity = 10760,
+ TripAlarmType_ConditionName = 10761,
+ TripAlarmType_BranchId = 10762,
+ TripAlarmType_Retain = 10763,
+ TripAlarmType_EnabledState = 10764,
+ TripAlarmType_EnabledState_Id = 10765,
+ TripAlarmType_EnabledState_Name = 10766,
+ TripAlarmType_EnabledState_Number = 10767,
+ TripAlarmType_EnabledState_EffectiveDisplayName = 10768,
+ TripAlarmType_EnabledState_TransitionTime = 10769,
+ TripAlarmType_EnabledState_EffectiveTransitionTime = 10770,
+ TripAlarmType_EnabledState_TrueState = 10771,
+ TripAlarmType_EnabledState_FalseState = 10772,
+ TripAlarmType_Quality = 10773,
+ TripAlarmType_Quality_SourceTimestamp = 10774,
+ TripAlarmType_LastSeverity = 10775,
+ TripAlarmType_LastSeverity_SourceTimestamp = 10776,
+ TripAlarmType_Comment = 10777,
+ TripAlarmType_Comment_SourceTimestamp = 10778,
+ TripAlarmType_ClientUserId = 10779,
+ TripAlarmType_Enable = 10780,
+ TripAlarmType_Disable = 10781,
+ TripAlarmType_AddComment = 10782,
+ TripAlarmType_AddComment_InputArguments = 10783,
+ TripAlarmType_ConditionRefresh = 10784,
+ TripAlarmType_ConditionRefresh_InputArguments = 10785,
+ TripAlarmType_AckedState = 10786,
+ TripAlarmType_AckedState_Id = 10787,
+ TripAlarmType_AckedState_Name = 10788,
+ TripAlarmType_AckedState_Number = 10789,
+ TripAlarmType_AckedState_EffectiveDisplayName = 10790,
+ TripAlarmType_AckedState_TransitionTime = 10791,
+ TripAlarmType_AckedState_EffectiveTransitionTime = 10792,
+ TripAlarmType_AckedState_TrueState = 10793,
+ TripAlarmType_AckedState_FalseState = 10794,
+ TripAlarmType_ConfirmedState = 10795,
+ TripAlarmType_ConfirmedState_Id = 10796,
+ TripAlarmType_ConfirmedState_Name = 10797,
+ TripAlarmType_ConfirmedState_Number = 10798,
+ TripAlarmType_ConfirmedState_EffectiveDisplayName = 10799,
+ TripAlarmType_ConfirmedState_TransitionTime = 10800,
+ TripAlarmType_ConfirmedState_EffectiveTransitionTime = 10801,
+ TripAlarmType_ConfirmedState_TrueState = 10802,
+ TripAlarmType_ConfirmedState_FalseState = 10803,
+ TripAlarmType_Acknowledge = 10804,
+ TripAlarmType_Acknowledge_InputArguments = 10805,
+ TripAlarmType_Confirm = 10806,
+ TripAlarmType_Confirm_InputArguments = 10807,
+ TripAlarmType_ActiveState = 10808,
+ TripAlarmType_ActiveState_Id = 10809,
+ TripAlarmType_ActiveState_Name = 10810,
+ TripAlarmType_ActiveState_Number = 10811,
+ TripAlarmType_ActiveState_EffectiveDisplayName = 10812,
+ TripAlarmType_ActiveState_TransitionTime = 10813,
+ TripAlarmType_ActiveState_EffectiveTransitionTime = 10814,
+ TripAlarmType_ActiveState_TrueState = 10815,
+ TripAlarmType_ActiveState_FalseState = 10816,
+ TripAlarmType_SuppressedState = 10817,
+ TripAlarmType_SuppressedState_Id = 10818,
+ TripAlarmType_SuppressedState_Name = 10819,
+ TripAlarmType_SuppressedState_Number = 10820,
+ TripAlarmType_SuppressedState_EffectiveDisplayName = 10821,
+ TripAlarmType_SuppressedState_TransitionTime = 10822,
+ TripAlarmType_SuppressedState_EffectiveTransitionTime = 10823,
+ TripAlarmType_SuppressedState_TrueState = 10824,
+ TripAlarmType_SuppressedState_FalseState = 10825,
+ TripAlarmType_ShelvingState = 10826,
+ TripAlarmType_ShelvingState_CurrentState = 10827,
+ TripAlarmType_ShelvingState_CurrentState_Id = 10828,
+ TripAlarmType_ShelvingState_CurrentState_Name = 10829,
+ TripAlarmType_ShelvingState_CurrentState_Number = 10830,
+ TripAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 10831,
+ TripAlarmType_ShelvingState_LastTransition = 10832,
+ TripAlarmType_ShelvingState_LastTransition_Id = 10833,
+ TripAlarmType_ShelvingState_LastTransition_Name = 10834,
+ TripAlarmType_ShelvingState_LastTransition_Number = 10835,
+ TripAlarmType_ShelvingState_LastTransition_TransitionTime = 10836,
+ TripAlarmType_ShelvingState_UnshelveTime = 10837,
+ TripAlarmType_ShelvingState_Unshelve = 10859,
+ TripAlarmType_ShelvingState_OneShotShelve = 10860,
+ TripAlarmType_ShelvingState_TimedShelve = 10861,
+ TripAlarmType_ShelvingState_TimedShelve_InputArguments = 10862,
+ TripAlarmType_SuppressedOrShelved = 10863,
+ TripAlarmType_MaxTimeShelved = 10864,
+ AuditConditionShelvingEventType = 11093,
+ AuditConditionShelvingEventType_EventId = 11094,
+ AuditConditionShelvingEventType_EventType = 11095,
+ AuditConditionShelvingEventType_SourceNode = 11096,
+ AuditConditionShelvingEventType_SourceName = 11097,
+ AuditConditionShelvingEventType_Time = 11098,
+ AuditConditionShelvingEventType_ReceiveTime = 11099,
+ AuditConditionShelvingEventType_LocalTime = 11100,
+ AuditConditionShelvingEventType_Message = 11101,
+ AuditConditionShelvingEventType_Severity = 11102,
+ AuditConditionShelvingEventType_ActionTimeStamp = 11103,
+ AuditConditionShelvingEventType_Status = 11104,
+ AuditConditionShelvingEventType_ServerId = 11105,
+ AuditConditionShelvingEventType_ClientAuditEntryId = 11106,
+ AuditConditionShelvingEventType_ClientUserId = 11107,
+ AuditConditionShelvingEventType_MethodId = 11108,
+ AuditConditionShelvingEventType_InputArguments = 11109,
+ TwoStateVariableType_TrueState = 11110,
+ TwoStateVariableType_FalseState = 11111,
+ ConditionType_ConditionClassId = 11112,
+ ConditionType_ConditionClassName = 11113,
+ DialogConditionType_ConditionClassId = 11114,
+ DialogConditionType_ConditionClassName = 11115,
+ AcknowledgeableConditionType_ConditionClassId = 11116,
+ AcknowledgeableConditionType_ConditionClassName = 11117,
+ AlarmConditionType_ConditionClassId = 11118,
+ AlarmConditionType_ConditionClassName = 11119,
+ AlarmConditionType_InputNode = 11120,
+ LimitAlarmType_ConditionClassId = 11121,
+ LimitAlarmType_ConditionClassName = 11122,
+ LimitAlarmType_InputNode = 11123,
+ LimitAlarmType_HighHighLimit = 11124,
+ LimitAlarmType_HighLimit = 11125,
+ LimitAlarmType_LowLimit = 11126,
+ LimitAlarmType_LowLowLimit = 11127,
+ ExclusiveLimitAlarmType_ConditionClassId = 11128,
+ ExclusiveLimitAlarmType_ConditionClassName = 11129,
+ ExclusiveLimitAlarmType_InputNode = 11130,
+ ExclusiveLevelAlarmType_ConditionClassId = 11131,
+ ExclusiveLevelAlarmType_ConditionClassName = 11132,
+ ExclusiveLevelAlarmType_InputNode = 11133,
+ ExclusiveRateOfChangeAlarmType_ConditionClassId = 11134,
+ ExclusiveRateOfChangeAlarmType_ConditionClassName = 11135,
+ ExclusiveRateOfChangeAlarmType_InputNode = 11136,
+ ExclusiveDeviationAlarmType_ConditionClassId = 11137,
+ ExclusiveDeviationAlarmType_ConditionClassName = 11138,
+ ExclusiveDeviationAlarmType_InputNode = 11139,
+ NonExclusiveLimitAlarmType_ConditionClassId = 11140,
+ NonExclusiveLimitAlarmType_ConditionClassName = 11141,
+ NonExclusiveLimitAlarmType_InputNode = 11142,
+ NonExclusiveLevelAlarmType_ConditionClassId = 11143,
+ NonExclusiveLevelAlarmType_ConditionClassName = 11144,
+ NonExclusiveLevelAlarmType_InputNode = 11145,
+ NonExclusiveRateOfChangeAlarmType_ConditionClassId = 11146,
+ NonExclusiveRateOfChangeAlarmType_ConditionClassName = 11147,
+ NonExclusiveRateOfChangeAlarmType_InputNode = 11148,
+ NonExclusiveDeviationAlarmType_ConditionClassId = 11149,
+ NonExclusiveDeviationAlarmType_ConditionClassName = 11150,
+ NonExclusiveDeviationAlarmType_InputNode = 11151,
+ DiscreteAlarmType_ConditionClassId = 11152,
+ DiscreteAlarmType_ConditionClassName = 11153,
+ DiscreteAlarmType_InputNode = 11154,
+ OffNormalAlarmType_ConditionClassId = 11155,
+ OffNormalAlarmType_ConditionClassName = 11156,
+ OffNormalAlarmType_InputNode = 11157,
+ OffNormalAlarmType_NormalState = 11158,
+ TripAlarmType_ConditionClassId = 11159,
+ TripAlarmType_ConditionClassName = 11160,
+ TripAlarmType_InputNode = 11161,
+ TripAlarmType_NormalState = 11162,
+ BaseConditionClassType = 11163,
+ ProcessConditionClassType = 11164,
+ MaintenanceConditionClassType = 11165,
+ SystemConditionClassType = 11166,
+ HistoricalDataConfigurationType_AggregateConfiguration_TreatUncertainAsBad = 11168,
+ HistoricalDataConfigurationType_AggregateConfiguration_PercentDataBad = 11169,
+ HistoricalDataConfigurationType_AggregateConfiguration_PercentDataGood = 11170,
+ HistoricalDataConfigurationType_AggregateConfiguration_UseSlopedExtrapolation = 11171,
+ HistoryServerCapabilitiesType_AggregateFunctions = 11172,
+ AggregateConfigurationType = 11187,
+ AggregateConfigurationType_TreatUncertainAsBad = 11188,
+ AggregateConfigurationType_PercentDataBad = 11189,
+ AggregateConfigurationType_PercentDataGood = 11190,
+ AggregateConfigurationType_UseSlopedExtrapolation = 11191,
+ HistoryServerCapabilities = 11192,
+ HistoryServerCapabilities_AccessHistoryDataCapability = 11193,
+ HistoryServerCapabilities_InsertDataCapability = 11196,
+ HistoryServerCapabilities_ReplaceDataCapability = 11197,
+ HistoryServerCapabilities_UpdateDataCapability = 11198,
+ HistoryServerCapabilities_DeleteRawCapability = 11199,
+ HistoryServerCapabilities_DeleteAtTimeCapability = 11200,
+ HistoryServerCapabilities_AggregateFunctions = 11201,
+ HAConfiguration = 11202,
+ HAConfiguration_AggregateConfiguration = 11203,
+ HAConfiguration_AggregateConfiguration_TreatUncertainAsBad = 11204,
+ HAConfiguration_AggregateConfiguration_PercentDataBad = 11205,
+ HAConfiguration_AggregateConfiguration_PercentDataGood = 11206,
+ HAConfiguration_AggregateConfiguration_UseSlopedExtrapolation = 11207,
+ HAConfiguration_Stepped = 11208,
+ HAConfiguration_Definition = 11209,
+ HAConfiguration_MaxTimeInterval = 11210,
+ HAConfiguration_MinTimeInterval = 11211,
+ HAConfiguration_ExceptionDeviation = 11212,
+ HAConfiguration_ExceptionDeviationFormat = 11213,
+ Annotations = 11214,
+ HistoricalEventFilter = 11215,
+ ModificationInfo = 11216,
+ HistoryModifiedData = 11217,
+ ModificationInfo_Encoding_DefaultXml = 11218,
+ HistoryModifiedData_Encoding_DefaultXml = 11219,
+ ModificationInfo_Encoding_DefaultBinary = 11226,
+ HistoryModifiedData_Encoding_DefaultBinary = 11227,
+ HistoryUpdateType = 11234,
+ MultiStateValueDiscreteType = 11238,
+ MultiStateValueDiscreteType_Definition = 11239,
+ MultiStateValueDiscreteType_ValuePrecision = 11240,
+ MultiStateValueDiscreteType_EnumValues = 11241,
+ HistoryServerCapabilities_AccessHistoryEventsCapability = 11242,
+ HistoryServerCapabilitiesType_MaxReturnDataValues = 11268,
+ HistoryServerCapabilitiesType_MaxReturnEventValues = 11269,
+ HistoryServerCapabilitiesType_InsertAnnotationCapability = 11270,
+ HistoryServerCapabilities_MaxReturnDataValues = 11273,
+ HistoryServerCapabilities_MaxReturnEventValues = 11274,
+ HistoryServerCapabilities_InsertAnnotationCapability = 11275,
+ HistoryServerCapabilitiesType_InsertEventCapability = 11278,
+ HistoryServerCapabilitiesType_ReplaceEventCapability = 11279,
+ HistoryServerCapabilitiesType_UpdateEventCapability = 11280,
+ HistoryServerCapabilities_InsertEventCapability = 11281,
+ HistoryServerCapabilities_ReplaceEventCapability = 11282,
+ HistoryServerCapabilities_UpdateEventCapability = 11283,
+ AggregateFunction_TimeAverage2 = 11285,
+ AggregateFunction_Minimum2 = 11286,
+ AggregateFunction_Maximum2 = 11287,
+ AggregateFunction_Range2 = 11288,
+ AggregateFunction_WorstQuality2 = 11292,
+ PerformUpdateType = 11293,
+ UpdateStructureDataDetails = 11295,
+ UpdateStructureDataDetails_Encoding_DefaultXml = 11296,
+ UpdateStructureDataDetails_Encoding_DefaultBinary = 11300,
+ AggregateFunction_Total2 = 11304,
+ AggregateFunction_MinimumActualTime2 = 11305,
+ AggregateFunction_MaximumActualTime2 = 11306,
+ AggregateFunction_DurationInStateZero = 11307,
+ AggregateFunction_DurationInStateNonZero = 11308,
+ Server_ServerRedundancy_CurrentServerId = 11312,
+ Server_ServerRedundancy_RedundantServerArray = 11313,
+ Server_ServerRedundancy_ServerUriArray = 11314,
+ ShelvedStateMachineType_UnshelvedToTimedShelved_TransitionNumber = 11322,
+ ShelvedStateMachineType_UnshelvedToOneShotShelved_TransitionNumber = 11323,
+ ShelvedStateMachineType_TimedShelvedToUnshelved_TransitionNumber = 11324,
+ ShelvedStateMachineType_TimedShelvedToOneShotShelved_TransitionNumber = 11325,
+ ShelvedStateMachineType_OneShotShelvedToUnshelved_TransitionNumber = 11326,
+ ShelvedStateMachineType_OneShotShelvedToTimedShelved_TransitionNumber = 11327,
+ ExclusiveLimitStateMachineType_LowLowToLow_TransitionNumber = 11340,
+ ExclusiveLimitStateMachineType_LowToLowLow_TransitionNumber = 11341,
+ ExclusiveLimitStateMachineType_HighHighToHigh_TransitionNumber = 11342,
+ ExclusiveLimitStateMachineType_HighToHighHigh_TransitionNumber = 11343,
+ AggregateFunction_StandardDeviationSample = 11426,
+ AggregateFunction_StandardDeviationPopulation = 11427,
+ AggregateFunction_VarianceSample = 11428,
+ AggregateFunction_VariancePopulation = 11429,
+ EnumStrings = 11432,
+ ValueAsText = 11433,
+ ProgressEventType = 11436,
+ ProgressEventType_EventId = 11437,
+ ProgressEventType_EventType = 11438,
+ ProgressEventType_SourceNode = 11439,
+ ProgressEventType_SourceName = 11440,
+ ProgressEventType_Time = 11441,
+ ProgressEventType_ReceiveTime = 11442,
+ ProgressEventType_LocalTime = 11443,
+ ProgressEventType_Message = 11444,
+ ProgressEventType_Severity = 11445,
+ SystemStatusChangeEventType = 11446,
+ SystemStatusChangeEventType_EventId = 11447,
+ SystemStatusChangeEventType_EventType = 11448,
+ SystemStatusChangeEventType_SourceNode = 11449,
+ SystemStatusChangeEventType_SourceName = 11450,
+ SystemStatusChangeEventType_Time = 11451,
+ SystemStatusChangeEventType_ReceiveTime = 11452,
+ SystemStatusChangeEventType_LocalTime = 11453,
+ SystemStatusChangeEventType_Message = 11454,
+ SystemStatusChangeEventType_Severity = 11455,
+ TransitionVariableType_EffectiveTransitionTime = 11456,
+ FiniteTransitionVariableType_EffectiveTransitionTime = 11457,
+ StateMachineType_LastTransition_EffectiveTransitionTime = 11458,
+ FiniteStateMachineType_LastTransition_EffectiveTransitionTime = 11459,
+ TransitionEventType_Transition_EffectiveTransitionTime = 11460,
+ MultiStateValueDiscreteType_ValueAsText = 11461,
+ ProgramTransitionEventType_Transition_EffectiveTransitionTime = 11462,
+ ProgramTransitionAuditEventType_Transition_EffectiveTransitionTime = 11463,
+ ProgramStateMachineType_LastTransition_EffectiveTransitionTime = 11464,
+ ShelvedStateMachineType_LastTransition_EffectiveTransitionTime = 11465,
+ AlarmConditionType_ShelvingState_LastTransition_EffectiveTransitionTime = 11466,
+ LimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 11467,
+ ExclusiveLimitStateMachineType_LastTransition_EffectiveTransitionTime = 11468,
+ ExclusiveLimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 11469,
+ ExclusiveLimitAlarmType_LimitState_LastTransition_EffectiveTransitionTime = 11470,
+ ExclusiveLevelAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 11471,
+ ExclusiveLevelAlarmType_LimitState_LastTransition_EffectiveTransitionTime = 11472,
+ ExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 11473,
+ ExclusiveRateOfChangeAlarmType_LimitState_LastTransition_EffectiveTransitionTime = 11474,
+ ExclusiveDeviationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 11475,
+ ExclusiveDeviationAlarmType_LimitState_LastTransition_EffectiveTransitionTime = 11476,
+ NonExclusiveLimitAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 11477,
+ NonExclusiveLevelAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 11478,
+ NonExclusiveRateOfChangeAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 11479,
+ NonExclusiveDeviationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 11480,
+ DiscreteAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 11481,
+ OffNormalAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 11482,
+ TripAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 11483,
+ AuditActivateSessionEventType_SecureChannelId = 11485,
+ OptionSetType = 11487,
+ OptionSetType_OptionSetValues = 11488,
+ ServerType_GetMonitoredItems = 11489,
+ ServerType_GetMonitoredItems_InputArguments = 11490,
+ ServerType_GetMonitoredItems_OutputArguments = 11491,
+ Server_GetMonitoredItems = 11492,
+ Server_GetMonitoredItems_InputArguments = 11493,
+ Server_GetMonitoredItems_OutputArguments = 11494,
+ GetMonitoredItemsMethodType = 11495,
+ GetMonitoredItemsMethodType_InputArguments = 11496,
+ GetMonitoredItemsMethodType_OutputArguments = 11497,
+ MaxStringLength = 11498,
+ HistoricalDataConfigurationType_StartOfArchive = 11499,
+ HistoricalDataConfigurationType_StartOfOnlineArchive = 11500,
+ HistoryServerCapabilitiesType_DeleteEventCapability = 11501,
+ HistoryServerCapabilities_DeleteEventCapability = 11502,
+ HAConfiguration_StartOfArchive = 11503,
+ HAConfiguration_StartOfOnlineArchive = 11504,
+ AggregateFunction_StartBound = 11505,
+ AggregateFunction_EndBound = 11506,
+ AggregateFunction_DeltaBounds = 11507,
+ ModellingRule_OptionalPlaceholder = 11508,
+ ModellingRule_OptionalPlaceholder_NamingRule = 11509,
+ ModellingRule_MandatoryPlaceholder = 11510,
+ ModellingRule_MandatoryPlaceholder_NamingRule = 11511,
+ MaxArrayLength = 11512,
+ EngineeringUnits = 11513,
+ ServerType_ServerCapabilities_MaxArrayLength = 11514,
+ ServerType_ServerCapabilities_MaxStringLength = 11515,
+ ServerType_ServerCapabilities_OperationLimits = 11516,
+ ServerType_ServerCapabilities_OperationLimits_MaxNodesPerRead = 11517,
+ ServerType_ServerCapabilities_OperationLimits_MaxNodesPerWrite = 11519,
+ ServerType_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall = 11521,
+ ServerType_ServerCapabilities_OperationLimits_MaxNodesPerBrowse = 11522,
+ ServerType_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes = 11523,
+ ServerType_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds = 11524,
+ ServerType_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement = 11525,
+ ServerType_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall = 11526,
+ ServerType_Namespaces = 11527,
+ ServerType_Namespaces_AddressSpaceFile = 11528,
+ ServerType_Namespaces_AddressSpaceFile_Size = 11529,
+ ServerType_Namespaces_AddressSpaceFile_OpenCount = 11532,
+ ServerType_Namespaces_AddressSpaceFile_Open = 11533,
+ ServerType_Namespaces_AddressSpaceFile_Open_InputArguments = 11534,
+ ServerType_Namespaces_AddressSpaceFile_Open_OutputArguments = 11535,
+ ServerType_Namespaces_AddressSpaceFile_Close = 11536,
+ ServerType_Namespaces_AddressSpaceFile_Close_InputArguments = 11537,
+ ServerType_Namespaces_AddressSpaceFile_Read = 11538,
+ ServerType_Namespaces_AddressSpaceFile_Read_InputArguments = 11539,
+ ServerType_Namespaces_AddressSpaceFile_Read_OutputArguments = 11540,
+ ServerType_Namespaces_AddressSpaceFile_Write = 11541,
+ ServerType_Namespaces_AddressSpaceFile_Write_InputArguments = 11542,
+ ServerType_Namespaces_AddressSpaceFile_GetPosition = 11543,
+ ServerType_Namespaces_AddressSpaceFile_GetPosition_InputArguments = 11544,
+ ServerType_Namespaces_AddressSpaceFile_GetPosition_OutputArguments = 11545,
+ ServerType_Namespaces_AddressSpaceFile_SetPosition = 11546,
+ ServerType_Namespaces_AddressSpaceFile_SetPosition_InputArguments = 11547,
+ ServerType_Namespaces_AddressSpaceFile_ExportNamespace = 11548,
+ ServerCapabilitiesType_MaxArrayLength = 11549,
+ ServerCapabilitiesType_MaxStringLength = 11550,
+ ServerCapabilitiesType_OperationLimits = 11551,
+ ServerCapabilitiesType_OperationLimits_MaxNodesPerRead = 11552,
+ ServerCapabilitiesType_OperationLimits_MaxNodesPerWrite = 11554,
+ ServerCapabilitiesType_OperationLimits_MaxNodesPerMethodCall = 11556,
+ ServerCapabilitiesType_OperationLimits_MaxNodesPerBrowse = 11557,
+ ServerCapabilitiesType_OperationLimits_MaxNodesPerRegisterNodes = 11558,
+ ServerCapabilitiesType_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds = 11559,
+ ServerCapabilitiesType_OperationLimits_MaxNodesPerNodeManagement = 11560,
+ ServerCapabilitiesType_OperationLimits_MaxMonitoredItemsPerCall = 11561,
+ ServerCapabilitiesType_VendorCapability_Placeholder = 11562,
+ OperationLimitsType = 11564,
+ OperationLimitsType_MaxNodesPerRead = 11565,
+ OperationLimitsType_MaxNodesPerWrite = 11567,
+ OperationLimitsType_MaxNodesPerMethodCall = 11569,
+ OperationLimitsType_MaxNodesPerBrowse = 11570,
+ OperationLimitsType_MaxNodesPerRegisterNodes = 11571,
+ OperationLimitsType_MaxNodesPerTranslateBrowsePathsToNodeIds = 11572,
+ OperationLimitsType_MaxNodesPerNodeManagement = 11573,
+ OperationLimitsType_MaxMonitoredItemsPerCall = 11574,
+ FileType = 11575,
+ FileType_Size = 11576,
+ FileType_OpenCount = 11579,
+ FileType_Open = 11580,
+ FileType_Open_InputArguments = 11581,
+ FileType_Open_OutputArguments = 11582,
+ FileType_Close = 11583,
+ FileType_Close_InputArguments = 11584,
+ FileType_Read = 11585,
+ FileType_Read_InputArguments = 11586,
+ FileType_Read_OutputArguments = 11587,
+ FileType_Write = 11588,
+ FileType_Write_InputArguments = 11589,
+ FileType_GetPosition = 11590,
+ FileType_GetPosition_InputArguments = 11591,
+ FileType_GetPosition_OutputArguments = 11592,
+ FileType_SetPosition = 11593,
+ FileType_SetPosition_InputArguments = 11594,
+ AddressSpaceFileType = 11595,
+ AddressSpaceFileType_Size = 11596,
+ AddressSpaceFileType_OpenCount = 11599,
+ AddressSpaceFileType_Open = 11600,
+ AddressSpaceFileType_Open_InputArguments = 11601,
+ AddressSpaceFileType_Open_OutputArguments = 11602,
+ AddressSpaceFileType_Close = 11603,
+ AddressSpaceFileType_Close_InputArguments = 11604,
+ AddressSpaceFileType_Read = 11605,
+ AddressSpaceFileType_Read_InputArguments = 11606,
+ AddressSpaceFileType_Read_OutputArguments = 11607,
+ AddressSpaceFileType_Write = 11608,
+ AddressSpaceFileType_Write_InputArguments = 11609,
+ AddressSpaceFileType_GetPosition = 11610,
+ AddressSpaceFileType_GetPosition_InputArguments = 11611,
+ AddressSpaceFileType_GetPosition_OutputArguments = 11612,
+ AddressSpaceFileType_SetPosition = 11613,
+ AddressSpaceFileType_SetPosition_InputArguments = 11614,
+ AddressSpaceFileType_ExportNamespace = 11615,
+ NamespaceMetadataType = 11616,
+ NamespaceMetadataType_NamespaceUri = 11617,
+ NamespaceMetadataType_NamespaceVersion = 11618,
+ NamespaceMetadataType_NamespacePublicationDate = 11619,
+ NamespaceMetadataType_IsNamespaceSubset = 11620,
+ NamespaceMetadataType_StaticNodeIdTypes = 11621,
+ NamespaceMetadataType_StaticNumericNodeIdRange = 11622,
+ NamespaceMetadataType_StaticStringNodeIdPattern = 11623,
+ NamespaceMetadataType_NamespaceFile = 11624,
+ NamespaceMetadataType_NamespaceFile_Size = 11625,
+ NamespaceMetadataType_NamespaceFile_OpenCount = 11628,
+ NamespaceMetadataType_NamespaceFile_Open = 11629,
+ NamespaceMetadataType_NamespaceFile_Open_InputArguments = 11630,
+ NamespaceMetadataType_NamespaceFile_Open_OutputArguments = 11631,
+ NamespaceMetadataType_NamespaceFile_Close = 11632,
+ NamespaceMetadataType_NamespaceFile_Close_InputArguments = 11633,
+ NamespaceMetadataType_NamespaceFile_Read = 11634,
+ NamespaceMetadataType_NamespaceFile_Read_InputArguments = 11635,
+ NamespaceMetadataType_NamespaceFile_Read_OutputArguments = 11636,
+ NamespaceMetadataType_NamespaceFile_Write = 11637,
+ NamespaceMetadataType_NamespaceFile_Write_InputArguments = 11638,
+ NamespaceMetadataType_NamespaceFile_GetPosition = 11639,
+ NamespaceMetadataType_NamespaceFile_GetPosition_InputArguments = 11640,
+ NamespaceMetadataType_NamespaceFile_GetPosition_OutputArguments = 11641,
+ NamespaceMetadataType_NamespaceFile_SetPosition = 11642,
+ NamespaceMetadataType_NamespaceFile_SetPosition_InputArguments = 11643,
+ NamespaceMetadataType_NamespaceFile_ExportNamespace = 11644,
+ NamespacesType = 11645,
+ NamespacesType_NamespaceIdentifier_Placeholder = 11646,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceUri = 11647,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceVersion = 11648,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespacePublicationDate = 11649,
+ NamespacesType_NamespaceIdentifier_Placeholder_IsNamespaceSubset = 11650,
+ NamespacesType_NamespaceIdentifier_Placeholder_StaticNodeIdTypes = 11651,
+ NamespacesType_NamespaceIdentifier_Placeholder_StaticNumericNodeIdRange = 11652,
+ NamespacesType_NamespaceIdentifier_Placeholder_StaticStringNodeIdPattern = 11653,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile = 11654,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Size = 11655,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_OpenCount = 11658,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open = 11659,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_InputArguments = 11660,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Open_OutputArguments = 11661,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close = 11662,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Close_InputArguments = 11663,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read = 11664,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_InputArguments = 11665,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Read_OutputArguments = 11666,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write = 11667,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Write_InputArguments = 11668,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition = 11669,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_InputArguments = 11670,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_GetPosition_OutputArguments = 11671,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition = 11672,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_SetPosition_InputArguments = 11673,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_ExportNamespace = 11674,
+ NamespacesType_AddressSpaceFile = 11675,
+ NamespacesType_AddressSpaceFile_Size = 11676,
+ NamespacesType_AddressSpaceFile_OpenCount = 11679,
+ NamespacesType_AddressSpaceFile_Open = 11680,
+ NamespacesType_AddressSpaceFile_Open_InputArguments = 11681,
+ NamespacesType_AddressSpaceFile_Open_OutputArguments = 11682,
+ NamespacesType_AddressSpaceFile_Close = 11683,
+ NamespacesType_AddressSpaceFile_Close_InputArguments = 11684,
+ NamespacesType_AddressSpaceFile_Read = 11685,
+ NamespacesType_AddressSpaceFile_Read_InputArguments = 11686,
+ NamespacesType_AddressSpaceFile_Read_OutputArguments = 11687,
+ NamespacesType_AddressSpaceFile_Write = 11688,
+ NamespacesType_AddressSpaceFile_Write_InputArguments = 11689,
+ NamespacesType_AddressSpaceFile_GetPosition = 11690,
+ NamespacesType_AddressSpaceFile_GetPosition_InputArguments = 11691,
+ NamespacesType_AddressSpaceFile_GetPosition_OutputArguments = 11692,
+ NamespacesType_AddressSpaceFile_SetPosition = 11693,
+ NamespacesType_AddressSpaceFile_SetPosition_InputArguments = 11694,
+ NamespacesType_AddressSpaceFile_ExportNamespace = 11695,
+ SystemStatusChangeEventType_SystemState = 11696,
+ SamplingIntervalDiagnosticsType_SampledMonitoredItemsCount = 11697,
+ SamplingIntervalDiagnosticsType_MaxSampledMonitoredItemsCount = 11698,
+ SamplingIntervalDiagnosticsType_DisabledMonitoredItemsSamplingCount = 11699,
+ OptionSetType_BitMask = 11701,
+ Server_ServerCapabilities_MaxArrayLength = 11702,
+ Server_ServerCapabilities_MaxStringLength = 11703,
+ Server_ServerCapabilities_OperationLimits = 11704,
+ Server_ServerCapabilities_OperationLimits_MaxNodesPerRead = 11705,
+ Server_ServerCapabilities_OperationLimits_MaxNodesPerWrite = 11707,
+ Server_ServerCapabilities_OperationLimits_MaxNodesPerMethodCall = 11709,
+ Server_ServerCapabilities_OperationLimits_MaxNodesPerBrowse = 11710,
+ Server_ServerCapabilities_OperationLimits_MaxNodesPerRegisterNodes = 11711,
+ Server_ServerCapabilities_OperationLimits_MaxNodesPerTranslateBrowsePathsToNodeIds = 11712,
+ Server_ServerCapabilities_OperationLimits_MaxNodesPerNodeManagement = 11713,
+ Server_ServerCapabilities_OperationLimits_MaxMonitoredItemsPerCall = 11714,
+ Server_Namespaces = 11715,
+ Server_Namespaces_AddressSpaceFile = 11716,
+ Server_Namespaces_AddressSpaceFile_Size = 11717,
+ Server_Namespaces_AddressSpaceFile_OpenCount = 11720,
+ Server_Namespaces_AddressSpaceFile_Open = 11721,
+ Server_Namespaces_AddressSpaceFile_Open_InputArguments = 11722,
+ Server_Namespaces_AddressSpaceFile_Open_OutputArguments = 11723,
+ Server_Namespaces_AddressSpaceFile_Close = 11724,
+ Server_Namespaces_AddressSpaceFile_Close_InputArguments = 11725,
+ Server_Namespaces_AddressSpaceFile_Read = 11726,
+ Server_Namespaces_AddressSpaceFile_Read_InputArguments = 11727,
+ Server_Namespaces_AddressSpaceFile_Read_OutputArguments = 11728,
+ Server_Namespaces_AddressSpaceFile_Write = 11729,
+ Server_Namespaces_AddressSpaceFile_Write_InputArguments = 11730,
+ Server_Namespaces_AddressSpaceFile_GetPosition = 11731,
+ Server_Namespaces_AddressSpaceFile_GetPosition_InputArguments = 11732,
+ Server_Namespaces_AddressSpaceFile_GetPosition_OutputArguments = 11733,
+ Server_Namespaces_AddressSpaceFile_SetPosition = 11734,
+ Server_Namespaces_AddressSpaceFile_SetPosition_InputArguments = 11735,
+ Server_Namespaces_AddressSpaceFile_ExportNamespace = 11736,
+ BitFieldMaskDataType = 11737,
+ OpenMethodType = 11738,
+ OpenMethodType_InputArguments = 11739,
+ OpenMethodType_OutputArguments = 11740,
+ CloseMethodType = 11741,
+ CloseMethodType_InputArguments = 11742,
+ ReadMethodType = 11743,
+ ReadMethodType_InputArguments = 11744,
+ ReadMethodType_OutputArguments = 11745,
+ WriteMethodType = 11746,
+ WriteMethodType_InputArguments = 11747,
+ GetPositionMethodType = 11748,
+ GetPositionMethodType_InputArguments = 11749,
+ GetPositionMethodType_OutputArguments = 11750,
+ SetPositionMethodType = 11751,
+ SetPositionMethodType_InputArguments = 11752,
+ SystemOffNormalAlarmType = 11753,
+ SystemOffNormalAlarmType_EventId = 11754,
+ SystemOffNormalAlarmType_EventType = 11755,
+ SystemOffNormalAlarmType_SourceNode = 11756,
+ SystemOffNormalAlarmType_SourceName = 11757,
+ SystemOffNormalAlarmType_Time = 11758,
+ SystemOffNormalAlarmType_ReceiveTime = 11759,
+ SystemOffNormalAlarmType_LocalTime = 11760,
+ SystemOffNormalAlarmType_Message = 11761,
+ SystemOffNormalAlarmType_Severity = 11762,
+ SystemOffNormalAlarmType_ConditionClassId = 11763,
+ SystemOffNormalAlarmType_ConditionClassName = 11764,
+ SystemOffNormalAlarmType_ConditionName = 11765,
+ SystemOffNormalAlarmType_BranchId = 11766,
+ SystemOffNormalAlarmType_Retain = 11767,
+ SystemOffNormalAlarmType_EnabledState = 11768,
+ SystemOffNormalAlarmType_EnabledState_Id = 11769,
+ SystemOffNormalAlarmType_EnabledState_Name = 11770,
+ SystemOffNormalAlarmType_EnabledState_Number = 11771,
+ SystemOffNormalAlarmType_EnabledState_EffectiveDisplayName = 11772,
+ SystemOffNormalAlarmType_EnabledState_TransitionTime = 11773,
+ SystemOffNormalAlarmType_EnabledState_EffectiveTransitionTime = 11774,
+ SystemOffNormalAlarmType_EnabledState_TrueState = 11775,
+ SystemOffNormalAlarmType_EnabledState_FalseState = 11776,
+ SystemOffNormalAlarmType_Quality = 11777,
+ SystemOffNormalAlarmType_Quality_SourceTimestamp = 11778,
+ SystemOffNormalAlarmType_LastSeverity = 11779,
+ SystemOffNormalAlarmType_LastSeverity_SourceTimestamp = 11780,
+ SystemOffNormalAlarmType_Comment = 11781,
+ SystemOffNormalAlarmType_Comment_SourceTimestamp = 11782,
+ SystemOffNormalAlarmType_ClientUserId = 11783,
+ SystemOffNormalAlarmType_Disable = 11784,
+ SystemOffNormalAlarmType_Enable = 11785,
+ SystemOffNormalAlarmType_AddComment = 11786,
+ SystemOffNormalAlarmType_AddComment_InputArguments = 11787,
+ SystemOffNormalAlarmType_ConditionRefresh = 11788,
+ SystemOffNormalAlarmType_ConditionRefresh_InputArguments = 11789,
+ SystemOffNormalAlarmType_AckedState = 11790,
+ SystemOffNormalAlarmType_AckedState_Id = 11791,
+ SystemOffNormalAlarmType_AckedState_Name = 11792,
+ SystemOffNormalAlarmType_AckedState_Number = 11793,
+ SystemOffNormalAlarmType_AckedState_EffectiveDisplayName = 11794,
+ SystemOffNormalAlarmType_AckedState_TransitionTime = 11795,
+ SystemOffNormalAlarmType_AckedState_EffectiveTransitionTime = 11796,
+ SystemOffNormalAlarmType_AckedState_TrueState = 11797,
+ SystemOffNormalAlarmType_AckedState_FalseState = 11798,
+ SystemOffNormalAlarmType_ConfirmedState = 11799,
+ SystemOffNormalAlarmType_ConfirmedState_Id = 11800,
+ SystemOffNormalAlarmType_ConfirmedState_Name = 11801,
+ SystemOffNormalAlarmType_ConfirmedState_Number = 11802,
+ SystemOffNormalAlarmType_ConfirmedState_EffectiveDisplayName = 11803,
+ SystemOffNormalAlarmType_ConfirmedState_TransitionTime = 11804,
+ SystemOffNormalAlarmType_ConfirmedState_EffectiveTransitionTime = 11805,
+ SystemOffNormalAlarmType_ConfirmedState_TrueState = 11806,
+ SystemOffNormalAlarmType_ConfirmedState_FalseState = 11807,
+ SystemOffNormalAlarmType_Acknowledge = 11808,
+ SystemOffNormalAlarmType_Acknowledge_InputArguments = 11809,
+ SystemOffNormalAlarmType_Confirm = 11810,
+ SystemOffNormalAlarmType_Confirm_InputArguments = 11811,
+ SystemOffNormalAlarmType_ActiveState = 11812,
+ SystemOffNormalAlarmType_ActiveState_Id = 11813,
+ SystemOffNormalAlarmType_ActiveState_Name = 11814,
+ SystemOffNormalAlarmType_ActiveState_Number = 11815,
+ SystemOffNormalAlarmType_ActiveState_EffectiveDisplayName = 11816,
+ SystemOffNormalAlarmType_ActiveState_TransitionTime = 11817,
+ SystemOffNormalAlarmType_ActiveState_EffectiveTransitionTime = 11818,
+ SystemOffNormalAlarmType_ActiveState_TrueState = 11819,
+ SystemOffNormalAlarmType_ActiveState_FalseState = 11820,
+ SystemOffNormalAlarmType_InputNode = 11821,
+ SystemOffNormalAlarmType_SuppressedState = 11822,
+ SystemOffNormalAlarmType_SuppressedState_Id = 11823,
+ SystemOffNormalAlarmType_SuppressedState_Name = 11824,
+ SystemOffNormalAlarmType_SuppressedState_Number = 11825,
+ SystemOffNormalAlarmType_SuppressedState_EffectiveDisplayName = 11826,
+ SystemOffNormalAlarmType_SuppressedState_TransitionTime = 11827,
+ SystemOffNormalAlarmType_SuppressedState_EffectiveTransitionTime = 11828,
+ SystemOffNormalAlarmType_SuppressedState_TrueState = 11829,
+ SystemOffNormalAlarmType_SuppressedState_FalseState = 11830,
+ SystemOffNormalAlarmType_ShelvingState = 11831,
+ SystemOffNormalAlarmType_ShelvingState_CurrentState = 11832,
+ SystemOffNormalAlarmType_ShelvingState_CurrentState_Id = 11833,
+ SystemOffNormalAlarmType_ShelvingState_CurrentState_Name = 11834,
+ SystemOffNormalAlarmType_ShelvingState_CurrentState_Number = 11835,
+ SystemOffNormalAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 11836,
+ SystemOffNormalAlarmType_ShelvingState_LastTransition = 11837,
+ SystemOffNormalAlarmType_ShelvingState_LastTransition_Id = 11838,
+ SystemOffNormalAlarmType_ShelvingState_LastTransition_Name = 11839,
+ SystemOffNormalAlarmType_ShelvingState_LastTransition_Number = 11840,
+ SystemOffNormalAlarmType_ShelvingState_LastTransition_TransitionTime = 11841,
+ SystemOffNormalAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 11842,
+ SystemOffNormalAlarmType_ShelvingState_UnshelveTime = 11843,
+ SystemOffNormalAlarmType_ShelvingState_Unshelve = 11844,
+ SystemOffNormalAlarmType_ShelvingState_OneShotShelve = 11845,
+ SystemOffNormalAlarmType_ShelvingState_TimedShelve = 11846,
+ SystemOffNormalAlarmType_ShelvingState_TimedShelve_InputArguments = 11847,
+ SystemOffNormalAlarmType_SuppressedOrShelved = 11848,
+ SystemOffNormalAlarmType_MaxTimeShelved = 11849,
+ SystemOffNormalAlarmType_NormalState = 11850,
+ AuditConditionCommentEventType_Comment = 11851,
+ AuditConditionRespondEventType_SelectedResponse = 11852,
+ AuditConditionAcknowledgeEventType_Comment = 11853,
+ AuditConditionConfirmEventType_Comment = 11854,
+ AuditConditionShelvingEventType_ShelvingTime = 11855,
+ AuditProgramTransitionEventType = 11856,
+ AuditProgramTransitionEventType_EventId = 11857,
+ AuditProgramTransitionEventType_EventType = 11858,
+ AuditProgramTransitionEventType_SourceNode = 11859,
+ AuditProgramTransitionEventType_SourceName = 11860,
+ AuditProgramTransitionEventType_Time = 11861,
+ AuditProgramTransitionEventType_ReceiveTime = 11862,
+ AuditProgramTransitionEventType_LocalTime = 11863,
+ AuditProgramTransitionEventType_Message = 11864,
+ AuditProgramTransitionEventType_Severity = 11865,
+ AuditProgramTransitionEventType_ActionTimeStamp = 11866,
+ AuditProgramTransitionEventType_Status = 11867,
+ AuditProgramTransitionEventType_ServerId = 11868,
+ AuditProgramTransitionEventType_ClientAuditEntryId = 11869,
+ AuditProgramTransitionEventType_ClientUserId = 11870,
+ AuditProgramTransitionEventType_MethodId = 11871,
+ AuditProgramTransitionEventType_InputArguments = 11872,
+ AuditProgramTransitionEventType_OldStateId = 11873,
+ AuditProgramTransitionEventType_NewStateId = 11874,
+ AuditProgramTransitionEventType_TransitionNumber = 11875,
+ HistoricalDataConfigurationType_AggregateFunctions = 11876,
+ HAConfiguration_AggregateFunctions = 11877,
+ NodeClass_EnumValues = 11878,
+ InstanceNode = 11879,
+ TypeNode = 11880,
+ NodeAttributesMask_EnumValues = 11881,
+ AttributeWriteMask_EnumValues = 11882,
+ BrowseResultMask_EnumValues = 11883,
+ HistoryUpdateType_EnumValues = 11884,
+ PerformUpdateType_EnumValues = 11885,
+ InstanceNode_Encoding_DefaultXml = 11887,
+ TypeNode_Encoding_DefaultXml = 11888,
+ InstanceNode_Encoding_DefaultBinary = 11889,
+ TypeNode_Encoding_DefaultBinary = 11890,
+ SessionDiagnosticsObjectType_SessionDiagnostics_UnauthorizedRequestCount = 11891,
+ SessionDiagnosticsVariableType_UnauthorizedRequestCount = 11892,
+ OpenFileMode = 11939,
+ OpenFileMode_EnumValues = 11940,
+ ModelChangeStructureVerbMask = 11941,
+ ModelChangeStructureVerbMask_EnumValues = 11942,
+ EndpointUrlListDataType = 11943,
+ NetworkGroupDataType = 11944,
+ NonTransparentNetworkRedundancyType = 11945,
+ NonTransparentNetworkRedundancyType_RedundancySupport = 11946,
+ NonTransparentNetworkRedundancyType_ServerUriArray = 11947,
+ NonTransparentNetworkRedundancyType_ServerNetworkGroups = 11948,
+ EndpointUrlListDataType_Encoding_DefaultXml = 11949,
+ NetworkGroupDataType_Encoding_DefaultXml = 11950,
+ OpcUa_XmlSchema_EndpointUrlListDataType = 11951,
+ OpcUa_XmlSchema_EndpointUrlListDataType_DataTypeVersion = 11952,
+ OpcUa_XmlSchema_EndpointUrlListDataType_DictionaryFragment = 11953,
+ OpcUa_XmlSchema_NetworkGroupDataType = 11954,
+ OpcUa_XmlSchema_NetworkGroupDataType_DataTypeVersion = 11955,
+ OpcUa_XmlSchema_NetworkGroupDataType_DictionaryFragment = 11956,
+ EndpointUrlListDataType_Encoding_DefaultBinary = 11957,
+ NetworkGroupDataType_Encoding_DefaultBinary = 11958,
+ OpcUa_BinarySchema_EndpointUrlListDataType = 11959,
+ OpcUa_BinarySchema_EndpointUrlListDataType_DataTypeVersion = 11960,
+ OpcUa_BinarySchema_EndpointUrlListDataType_DictionaryFragment = 11961,
+ OpcUa_BinarySchema_NetworkGroupDataType = 11962,
+ OpcUa_BinarySchema_NetworkGroupDataType_DataTypeVersion = 11963,
+ OpcUa_BinarySchema_NetworkGroupDataType_DictionaryFragment = 11964,
+ ArrayItemType = 12021,
+ ArrayItemType_Definition = 12022,
+ ArrayItemType_ValuePrecision = 12023,
+ ArrayItemType_InstrumentRange = 12024,
+ ArrayItemType_EURange = 12025,
+ ArrayItemType_EngineeringUnits = 12026,
+ ArrayItemType_Title = 12027,
+ ArrayItemType_AxisScaleType = 12028,
+ YArrayItemType = 12029,
+ YArrayItemType_Definition = 12030,
+ YArrayItemType_ValuePrecision = 12031,
+ YArrayItemType_InstrumentRange = 12032,
+ YArrayItemType_EURange = 12033,
+ YArrayItemType_EngineeringUnits = 12034,
+ YArrayItemType_Title = 12035,
+ YArrayItemType_AxisScaleType = 12036,
+ YArrayItemType_XAxisDefinition = 12037,
+ XYArrayItemType = 12038,
+ XYArrayItemType_Definition = 12039,
+ XYArrayItemType_ValuePrecision = 12040,
+ XYArrayItemType_InstrumentRange = 12041,
+ XYArrayItemType_EURange = 12042,
+ XYArrayItemType_EngineeringUnits = 12043,
+ XYArrayItemType_Title = 12044,
+ XYArrayItemType_AxisScaleType = 12045,
+ XYArrayItemType_XAxisDefinition = 12046,
+ ImageItemType = 12047,
+ ImageItemType_Definition = 12048,
+ ImageItemType_ValuePrecision = 12049,
+ ImageItemType_InstrumentRange = 12050,
+ ImageItemType_EURange = 12051,
+ ImageItemType_EngineeringUnits = 12052,
+ ImageItemType_Title = 12053,
+ ImageItemType_AxisScaleType = 12054,
+ ImageItemType_XAxisDefinition = 12055,
+ ImageItemType_YAxisDefinition = 12056,
+ CubeItemType = 12057,
+ CubeItemType_Definition = 12058,
+ CubeItemType_ValuePrecision = 12059,
+ CubeItemType_InstrumentRange = 12060,
+ CubeItemType_EURange = 12061,
+ CubeItemType_EngineeringUnits = 12062,
+ CubeItemType_Title = 12063,
+ CubeItemType_AxisScaleType = 12064,
+ CubeItemType_XAxisDefinition = 12065,
+ CubeItemType_YAxisDefinition = 12066,
+ CubeItemType_ZAxisDefinition = 12067,
+ NDimensionArrayItemType = 12068,
+ NDimensionArrayItemType_Definition = 12069,
+ NDimensionArrayItemType_ValuePrecision = 12070,
+ NDimensionArrayItemType_InstrumentRange = 12071,
+ NDimensionArrayItemType_EURange = 12072,
+ NDimensionArrayItemType_EngineeringUnits = 12073,
+ NDimensionArrayItemType_Title = 12074,
+ NDimensionArrayItemType_AxisScaleType = 12075,
+ NDimensionArrayItemType_AxisDefinition = 12076,
+ AxisScaleEnumeration = 12077,
+ AxisScaleEnumeration_EnumStrings = 12078,
+ AxisInformation = 12079,
+ XVType = 12080,
+ AxisInformation_Encoding_DefaultXml = 12081,
+ XVType_Encoding_DefaultXml = 12082,
+ OpcUa_XmlSchema_AxisInformation = 12083,
+ OpcUa_XmlSchema_AxisInformation_DataTypeVersion = 12084,
+ OpcUa_XmlSchema_AxisInformation_DictionaryFragment = 12085,
+ OpcUa_XmlSchema_XVType = 12086,
+ OpcUa_XmlSchema_XVType_DataTypeVersion = 12087,
+ OpcUa_XmlSchema_XVType_DictionaryFragment = 12088,
+ AxisInformation_Encoding_DefaultBinary = 12089,
+ XVType_Encoding_DefaultBinary = 12090,
+ OpcUa_BinarySchema_AxisInformation = 12091,
+ OpcUa_BinarySchema_AxisInformation_DataTypeVersion = 12092,
+ OpcUa_BinarySchema_AxisInformation_DictionaryFragment = 12093,
+ OpcUa_BinarySchema_XVType = 12094,
+ OpcUa_BinarySchema_XVType_DataTypeVersion = 12095,
+ OpcUa_BinarySchema_XVType_DictionaryFragment = 12096,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder = 12097,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics = 12098,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionId = 12099,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SessionName = 12100,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientDescription = 12101,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ServerUri = 12102,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_EndpointUrl = 12103,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_LocaleIds = 12104,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ActualSessionTimeout = 12105,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_MaxResponseMessageSize = 12106,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientConnectionTime = 12107,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ClientLastContactTime = 12108,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentSubscriptionsCount = 12109,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentMonitoredItemsCount = 12110,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CurrentPublishRequestsInQueue = 12111,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TotalRequestCount = 12112,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnauthorizedRequestCount = 12113,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ReadCount = 12114,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryReadCount = 12115,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_WriteCount = 12116,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_HistoryUpdateCount = 12117,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CallCount = 12118,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateMonitoredItemsCount = 12119,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifyMonitoredItemsCount = 12120,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetMonitoringModeCount = 12121,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetTriggeringCount = 12122,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteMonitoredItemsCount = 12123,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_CreateSubscriptionCount = 12124,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_ModifySubscriptionCount = 12125,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_SetPublishingModeCount = 12126,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_PublishCount = 12127,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RepublishCount = 12128,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TransferSubscriptionsCount = 12129,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteSubscriptionsCount = 12130,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddNodesCount = 12131,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_AddReferencesCount = 12132,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteNodesCount = 12133,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_DeleteReferencesCount = 12134,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseCount = 12135,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_BrowseNextCount = 12136,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount = 12137,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryFirstCount = 12138,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_QueryNextCount = 12139,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_RegisterNodesCount = 12140,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionDiagnostics_UnregisterNodesCount = 12141,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics = 12142,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SessionId = 12143,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdOfSession = 12144,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientUserIdHistory = 12145,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_AuthenticationMechanism = 12146,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_Encoding = 12147,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_TransportProtocol = 12148,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityMode = 12149,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_SecurityPolicyUri = 12150,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SessionSecurityDiagnostics_ClientCertificate = 12151,
+ SessionsDiagnosticsSummaryType_ClientName_Placeholder_SubscriptionDiagnosticsArray = 12152,
+ ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData = 12153,
+ ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents = 12154,
+ ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData = 12155,
+ ServerType_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents = 12156,
+ ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryReadData = 12157,
+ ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryReadEvents = 12158,
+ ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryUpdateData = 12159,
+ ServerCapabilitiesType_OperationLimits_MaxNodesPerHistoryUpdateEvents = 12160,
+ OperationLimitsType_MaxNodesPerHistoryReadData = 12161,
+ OperationLimitsType_MaxNodesPerHistoryReadEvents = 12162,
+ OperationLimitsType_MaxNodesPerHistoryUpdateData = 12163,
+ OperationLimitsType_MaxNodesPerHistoryUpdateEvents = 12164,
+ Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadData = 12165,
+ Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryReadEvents = 12166,
+ Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateData = 12167,
+ Server_ServerCapabilities_OperationLimits_MaxNodesPerHistoryUpdateEvents = 12168,
+ NamingRuleType_EnumValues = 12169,
+ ViewVersion = 12170,
+ ComplexNumberType = 12171,
+ DoubleComplexNumberType = 12172,
+ ComplexNumberType_Encoding_DefaultXml = 12173,
+ DoubleComplexNumberType_Encoding_DefaultXml = 12174,
+ OpcUa_XmlSchema_ComplexNumberType = 12175,
+ OpcUa_XmlSchema_ComplexNumberType_DataTypeVersion = 12176,
+ OpcUa_XmlSchema_ComplexNumberType_DictionaryFragment = 12177,
+ OpcUa_XmlSchema_DoubleComplexNumberType = 12178,
+ OpcUa_XmlSchema_DoubleComplexNumberType_DataTypeVersion = 12179,
+ OpcUa_XmlSchema_DoubleComplexNumberType_DictionaryFragment = 12180,
+ ComplexNumberType_Encoding_DefaultBinary = 12181,
+ DoubleComplexNumberType_Encoding_DefaultBinary = 12182,
+ OpcUa_BinarySchema_ComplexNumberType = 12183,
+ OpcUa_BinarySchema_ComplexNumberType_DataTypeVersion = 12184,
+ OpcUa_BinarySchema_ComplexNumberType_DictionaryFragment = 12185,
+ OpcUa_BinarySchema_DoubleComplexNumberType = 12186,
+ OpcUa_BinarySchema_DoubleComplexNumberType_DataTypeVersion = 12187,
+ OpcUa_BinarySchema_DoubleComplexNumberType_DictionaryFragment = 12188,
+ ServerOnNetwork = 12189,
+ FindServersOnNetworkRequest = 12190,
+ FindServersOnNetworkResponse = 12191,
+ RegisterServer2Request = 12193,
+ RegisterServer2Response = 12194,
+ ServerOnNetwork_Encoding_DefaultXml = 12195,
+ FindServersOnNetworkRequest_Encoding_DefaultXml = 12196,
+ FindServersOnNetworkResponse_Encoding_DefaultXml = 12197,
+ RegisterServer2Request_Encoding_DefaultXml = 12199,
+ RegisterServer2Response_Encoding_DefaultXml = 12200,
+ OpcUa_XmlSchema_ServerOnNetwork = 12201,
+ OpcUa_XmlSchema_ServerOnNetwork_DataTypeVersion = 12202,
+ OpcUa_XmlSchema_ServerOnNetwork_DictionaryFragment = 12203,
+ ServerOnNetwork_Encoding_DefaultBinary = 12207,
+ FindServersOnNetworkRequest_Encoding_DefaultBinary = 12208,
+ FindServersOnNetworkResponse_Encoding_DefaultBinary = 12209,
+ RegisterServer2Request_Encoding_DefaultBinary = 12211,
+ RegisterServer2Response_Encoding_DefaultBinary = 12212,
+ OpcUa_BinarySchema_ServerOnNetwork = 12213,
+ OpcUa_BinarySchema_ServerOnNetwork_DataTypeVersion = 12214,
+ OpcUa_BinarySchema_ServerOnNetwork_DictionaryFragment = 12215,
+ ProgressEventType_Context = 12502,
+ ProgressEventType_Progress = 12503,
+ OpenWithMasksMethodType = 12513,
+ OpenWithMasksMethodType_InputArguments = 12514,
+ OpenWithMasksMethodType_OutputArguments = 12515,
+ CloseAndUpdateMethodType = 12516,
+ CloseAndUpdateMethodType_OutputArguments = 12517,
+ AddCertificateMethodType = 12518,
+ AddCertificateMethodType_InputArguments = 12519,
+ RemoveCertificateMethodType = 12520,
+ RemoveCertificateMethodType_InputArguments = 12521,
+ TrustListType = 12522,
+ TrustListType_Size = 12523,
+ TrustListType_OpenCount = 12526,
+ TrustListType_Open = 12527,
+ TrustListType_Open_InputArguments = 12528,
+ TrustListType_Open_OutputArguments = 12529,
+ TrustListType_Close = 12530,
+ TrustListType_Close_InputArguments = 12531,
+ TrustListType_Read = 12532,
+ TrustListType_Read_InputArguments = 12533,
+ TrustListType_Read_OutputArguments = 12534,
+ TrustListType_Write = 12535,
+ TrustListType_Write_InputArguments = 12536,
+ TrustListType_GetPosition = 12537,
+ TrustListType_GetPosition_InputArguments = 12538,
+ TrustListType_GetPosition_OutputArguments = 12539,
+ TrustListType_SetPosition = 12540,
+ TrustListType_SetPosition_InputArguments = 12541,
+ TrustListType_LastUpdateTime = 12542,
+ TrustListType_OpenWithMasks = 12543,
+ TrustListType_OpenWithMasks_InputArguments = 12544,
+ TrustListType_OpenWithMasks_OutputArguments = 12545,
+ TrustListType_CloseAndUpdate = 12546,
+ TrustListType_CloseAndUpdate_OutputArguments = 12547,
+ TrustListType_AddCertificate = 12548,
+ TrustListType_AddCertificate_InputArguments = 12549,
+ TrustListType_RemoveCertificate = 12550,
+ TrustListType_RemoveCertificate_InputArguments = 12551,
+ TrustListMasks = 12552,
+ TrustListMasks_EnumValues = 12553,
+ TrustListDataType = 12554,
+ CertificateGroupType = 12555,
+ CertificateType = 12556,
+ ApplicationCertificateType = 12557,
+ HttpsCertificateType = 12558,
+ RsaMinApplicationCertificateType = 12559,
+ RsaSha256ApplicationCertificateType = 12560,
+ TrustListUpdatedAuditEventType = 12561,
+ TrustListUpdatedAuditEventType_EventId = 12562,
+ TrustListUpdatedAuditEventType_EventType = 12563,
+ TrustListUpdatedAuditEventType_SourceNode = 12564,
+ TrustListUpdatedAuditEventType_SourceName = 12565,
+ TrustListUpdatedAuditEventType_Time = 12566,
+ TrustListUpdatedAuditEventType_ReceiveTime = 12567,
+ TrustListUpdatedAuditEventType_LocalTime = 12568,
+ TrustListUpdatedAuditEventType_Message = 12569,
+ TrustListUpdatedAuditEventType_Severity = 12570,
+ TrustListUpdatedAuditEventType_ActionTimeStamp = 12571,
+ TrustListUpdatedAuditEventType_Status = 12572,
+ TrustListUpdatedAuditEventType_ServerId = 12573,
+ TrustListUpdatedAuditEventType_ClientAuditEntryId = 12574,
+ TrustListUpdatedAuditEventType_ClientUserId = 12575,
+ TrustListUpdatedAuditEventType_MethodId = 12576,
+ TrustListUpdatedAuditEventType_InputArguments = 12577,
+ UpdateCertificateMethodType = 12578,
+ UpdateCertificateMethodType_InputArguments = 12579,
+ UpdateCertificateMethodType_OutputArguments = 12580,
+ ServerConfigurationType = 12581,
+ ServerConfigurationType_SupportedPrivateKeyFormats = 12583,
+ ServerConfigurationType_MaxTrustListSize = 12584,
+ ServerConfigurationType_MulticastDnsEnabled = 12585,
+ ServerConfigurationType_UpdateCertificate = 12616,
+ ServerConfigurationType_UpdateCertificate_InputArguments = 12617,
+ ServerConfigurationType_UpdateCertificate_OutputArguments = 12618,
+ CertificateUpdatedAuditEventType = 12620,
+ CertificateUpdatedAuditEventType_EventId = 12621,
+ CertificateUpdatedAuditEventType_EventType = 12622,
+ CertificateUpdatedAuditEventType_SourceNode = 12623,
+ CertificateUpdatedAuditEventType_SourceName = 12624,
+ CertificateUpdatedAuditEventType_Time = 12625,
+ CertificateUpdatedAuditEventType_ReceiveTime = 12626,
+ CertificateUpdatedAuditEventType_LocalTime = 12627,
+ CertificateUpdatedAuditEventType_Message = 12628,
+ CertificateUpdatedAuditEventType_Severity = 12629,
+ CertificateUpdatedAuditEventType_ActionTimeStamp = 12630,
+ CertificateUpdatedAuditEventType_Status = 12631,
+ CertificateUpdatedAuditEventType_ServerId = 12632,
+ CertificateUpdatedAuditEventType_ClientAuditEntryId = 12633,
+ CertificateUpdatedAuditEventType_ClientUserId = 12634,
+ CertificateUpdatedAuditEventType_MethodId = 12635,
+ CertificateUpdatedAuditEventType_InputArguments = 12636,
+ ServerConfiguration = 12637,
+ ServerConfiguration_SupportedPrivateKeyFormats = 12639,
+ ServerConfiguration_MaxTrustListSize = 12640,
+ ServerConfiguration_MulticastDnsEnabled = 12641,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList = 12642,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Size = 12643,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount = 12646,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open = 12647,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments = 12648,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments = 12649,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close = 12650,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments = 12651,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read = 12652,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments = 12653,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments = 12654,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write = 12655,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments = 12656,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition = 12657,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments = 12658,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments = 12659,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition = 12660,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments = 12661,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime = 12662,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks = 12663,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments = 12664,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments = 12665,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate = 12666,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments = 12667,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate = 12668,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments = 12669,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate = 12670,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments = 12671,
+ TrustListDataType_Encoding_DefaultXml = 12676,
+ OpcUa_XmlSchema_TrustListDataType = 12677,
+ OpcUa_XmlSchema_TrustListDataType_DataTypeVersion = 12678,
+ OpcUa_XmlSchema_TrustListDataType_DictionaryFragment = 12679,
+ TrustListDataType_Encoding_DefaultBinary = 12680,
+ OpcUa_BinarySchema_TrustListDataType = 12681,
+ OpcUa_BinarySchema_TrustListDataType_DataTypeVersion = 12682,
+ OpcUa_BinarySchema_TrustListDataType_DictionaryFragment = 12683,
+ ServerType_Namespaces_AddressSpaceFile_Writable = 12684,
+ ServerType_Namespaces_AddressSpaceFile_UserWritable = 12685,
+ FileType_Writable = 12686,
+ FileType_UserWritable = 12687,
+ AddressSpaceFileType_Writable = 12688,
+ AddressSpaceFileType_UserWritable = 12689,
+ NamespaceMetadataType_NamespaceFile_Writable = 12690,
+ NamespaceMetadataType_NamespaceFile_UserWritable = 12691,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_Writable = 12692,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_UserWritable = 12693,
+ NamespacesType_AddressSpaceFile_Writable = 12694,
+ NamespacesType_AddressSpaceFile_UserWritable = 12695,
+ Server_Namespaces_AddressSpaceFile_Writable = 12696,
+ Server_Namespaces_AddressSpaceFile_UserWritable = 12697,
+ TrustListType_Writable = 12698,
+ TrustListType_UserWritable = 12699,
+ CloseAndUpdateMethodType_InputArguments = 12704,
+ TrustListType_CloseAndUpdate_InputArguments = 12705,
+ ServerConfigurationType_ServerCapabilities = 12708,
+ ServerConfiguration_ServerCapabilities = 12710,
+ OpcUa_XmlSchema_RelativePathElement = 12712,
+ OpcUa_XmlSchema_RelativePathElement_DataTypeVersion = 12713,
+ OpcUa_XmlSchema_RelativePathElement_DictionaryFragment = 12714,
+ OpcUa_XmlSchema_RelativePath = 12715,
+ OpcUa_XmlSchema_RelativePath_DataTypeVersion = 12716,
+ OpcUa_XmlSchema_RelativePath_DictionaryFragment = 12717,
+ OpcUa_BinarySchema_RelativePathElement = 12718,
+ OpcUa_BinarySchema_RelativePathElement_DataTypeVersion = 12719,
+ OpcUa_BinarySchema_RelativePathElement_DictionaryFragment = 12720,
+ OpcUa_BinarySchema_RelativePath = 12721,
+ OpcUa_BinarySchema_RelativePath_DataTypeVersion = 12722,
+ OpcUa_BinarySchema_RelativePath_DictionaryFragment = 12723,
+ ServerConfigurationType_CreateSigningRequest = 12731,
+ ServerConfigurationType_CreateSigningRequest_InputArguments = 12732,
+ ServerConfigurationType_CreateSigningRequest_OutputArguments = 12733,
+ ServerConfigurationType_ApplyChanges = 12734,
+ ServerConfiguration_CreateSigningRequest = 12737,
+ ServerConfiguration_CreateSigningRequest_InputArguments = 12738,
+ ServerConfiguration_CreateSigningRequest_OutputArguments = 12739,
+ ServerConfiguration_ApplyChanges = 12740,
+ CreateSigningRequestMethodType = 12741,
+ CreateSigningRequestMethodType_InputArguments = 12742,
+ CreateSigningRequestMethodType_OutputArguments = 12743,
+ OptionSetValues = 12745,
+ ServerType_SetSubscriptionDurable = 12746,
+ ServerType_SetSubscriptionDurable_InputArguments = 12747,
+ ServerType_SetSubscriptionDurable_OutputArguments = 12748,
+ Server_SetSubscriptionDurable = 12749,
+ Server_SetSubscriptionDurable_InputArguments = 12750,
+ Server_SetSubscriptionDurable_OutputArguments = 12751,
+ SetSubscriptionDurableMethodType = 12752,
+ SetSubscriptionDurableMethodType_InputArguments = 12753,
+ SetSubscriptionDurableMethodType_OutputArguments = 12754,
+ OptionSet = 12755,
+ Union = 12756,
+ OptionSet_Encoding_DefaultXml = 12757,
+ Union_Encoding_DefaultXml = 12758,
+ OpcUa_XmlSchema_OptionSet = 12759,
+ OpcUa_XmlSchema_OptionSet_DataTypeVersion = 12760,
+ OpcUa_XmlSchema_OptionSet_DictionaryFragment = 12761,
+ OpcUa_XmlSchema_Union = 12762,
+ OpcUa_XmlSchema_Union_DataTypeVersion = 12763,
+ OpcUa_XmlSchema_Union_DictionaryFragment = 12764,
+ OptionSet_Encoding_DefaultBinary = 12765,
+ Union_Encoding_DefaultBinary = 12766,
+ OpcUa_BinarySchema_OptionSet = 12767,
+ OpcUa_BinarySchema_OptionSet_DataTypeVersion = 12768,
+ OpcUa_BinarySchema_OptionSet_DictionaryFragment = 12769,
+ OpcUa_BinarySchema_Union = 12770,
+ OpcUa_BinarySchema_Union_DataTypeVersion = 12771,
+ OpcUa_BinarySchema_Union_DictionaryFragment = 12772,
+ GetRejectedListMethodType = 12773,
+ GetRejectedListMethodType_OutputArguments = 12774,
+ ServerConfigurationType_GetRejectedList = 12775,
+ ServerConfigurationType_GetRejectedList_OutputArguments = 12776,
+ ServerConfiguration_GetRejectedList = 12777,
+ ServerConfiguration_GetRejectedList_OutputArguments = 12778,
+ SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics = 12779,
+ SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SamplingInterval = 12780,
+ SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_SampledMonitoredItemsCount = 12781,
+ SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_MaxSampledMonitoredItemsCount = 12782,
+ SamplingIntervalDiagnosticsArrayType_SamplingIntervalDiagnostics_DisabledMonitoredItemsSamplingCount = 12783,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics = 12784,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SessionId = 12785,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_SubscriptionId = 12786,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_Priority = 12787,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingInterval = 12788,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxKeepAliveCount = 12789,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxLifetimeCount = 12790,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MaxNotificationsPerPublish = 12791,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishingEnabled = 12792,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_ModifyCount = 12793,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EnableCount = 12794,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisableCount = 12795,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishRequestCount = 12796,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageRequestCount = 12797,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_RepublishMessageCount = 12798,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferRequestCount = 12799,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToAltClientCount = 12800,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_TransferredToSameClientCount = 12801,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_PublishRequestCount = 12802,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DataChangeNotificationsCount = 12803,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventNotificationsCount = 12804,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NotificationsCount = 12805,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_LatePublishRequestCount = 12806,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentKeepAliveCount = 12807,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_CurrentLifetimeCount = 12808,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_UnacknowledgedMessageCount = 12809,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DiscardedMessageCount = 12810,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoredItemCount = 12811,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_DisabledMonitoredItemCount = 12812,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_MonitoringQueueOverflowCount = 12813,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_NextSequenceNumber = 12814,
+ SubscriptionDiagnosticsArrayType_SubscriptionDiagnostics_EventQueueOverFlowCount = 12815,
+ SessionDiagnosticsArrayType_SessionDiagnostics = 12816,
+ SessionDiagnosticsArrayType_SessionDiagnostics_SessionId = 12817,
+ SessionDiagnosticsArrayType_SessionDiagnostics_SessionName = 12818,
+ SessionDiagnosticsArrayType_SessionDiagnostics_ClientDescription = 12819,
+ SessionDiagnosticsArrayType_SessionDiagnostics_ServerUri = 12820,
+ SessionDiagnosticsArrayType_SessionDiagnostics_EndpointUrl = 12821,
+ SessionDiagnosticsArrayType_SessionDiagnostics_LocaleIds = 12822,
+ SessionDiagnosticsArrayType_SessionDiagnostics_ActualSessionTimeout = 12823,
+ SessionDiagnosticsArrayType_SessionDiagnostics_MaxResponseMessageSize = 12824,
+ SessionDiagnosticsArrayType_SessionDiagnostics_ClientConnectionTime = 12825,
+ SessionDiagnosticsArrayType_SessionDiagnostics_ClientLastContactTime = 12826,
+ SessionDiagnosticsArrayType_SessionDiagnostics_CurrentSubscriptionsCount = 12827,
+ SessionDiagnosticsArrayType_SessionDiagnostics_CurrentMonitoredItemsCount = 12828,
+ SessionDiagnosticsArrayType_SessionDiagnostics_CurrentPublishRequestsInQueue = 12829,
+ SessionDiagnosticsArrayType_SessionDiagnostics_TotalRequestCount = 12830,
+ SessionDiagnosticsArrayType_SessionDiagnostics_UnauthorizedRequestCount = 12831,
+ SessionDiagnosticsArrayType_SessionDiagnostics_ReadCount = 12832,
+ SessionDiagnosticsArrayType_SessionDiagnostics_HistoryReadCount = 12833,
+ SessionDiagnosticsArrayType_SessionDiagnostics_WriteCount = 12834,
+ SessionDiagnosticsArrayType_SessionDiagnostics_HistoryUpdateCount = 12835,
+ SessionDiagnosticsArrayType_SessionDiagnostics_CallCount = 12836,
+ SessionDiagnosticsArrayType_SessionDiagnostics_CreateMonitoredItemsCount = 12837,
+ SessionDiagnosticsArrayType_SessionDiagnostics_ModifyMonitoredItemsCount = 12838,
+ SessionDiagnosticsArrayType_SessionDiagnostics_SetMonitoringModeCount = 12839,
+ SessionDiagnosticsArrayType_SessionDiagnostics_SetTriggeringCount = 12840,
+ SessionDiagnosticsArrayType_SessionDiagnostics_DeleteMonitoredItemsCount = 12841,
+ SessionDiagnosticsArrayType_SessionDiagnostics_CreateSubscriptionCount = 12842,
+ SessionDiagnosticsArrayType_SessionDiagnostics_ModifySubscriptionCount = 12843,
+ SessionDiagnosticsArrayType_SessionDiagnostics_SetPublishingModeCount = 12844,
+ SessionDiagnosticsArrayType_SessionDiagnostics_PublishCount = 12845,
+ SessionDiagnosticsArrayType_SessionDiagnostics_RepublishCount = 12846,
+ SessionDiagnosticsArrayType_SessionDiagnostics_TransferSubscriptionsCount = 12847,
+ SessionDiagnosticsArrayType_SessionDiagnostics_DeleteSubscriptionsCount = 12848,
+ SessionDiagnosticsArrayType_SessionDiagnostics_AddNodesCount = 12849,
+ SessionDiagnosticsArrayType_SessionDiagnostics_AddReferencesCount = 12850,
+ SessionDiagnosticsArrayType_SessionDiagnostics_DeleteNodesCount = 12851,
+ SessionDiagnosticsArrayType_SessionDiagnostics_DeleteReferencesCount = 12852,
+ SessionDiagnosticsArrayType_SessionDiagnostics_BrowseCount = 12853,
+ SessionDiagnosticsArrayType_SessionDiagnostics_BrowseNextCount = 12854,
+ SessionDiagnosticsArrayType_SessionDiagnostics_TranslateBrowsePathsToNodeIdsCount = 12855,
+ SessionDiagnosticsArrayType_SessionDiagnostics_QueryFirstCount = 12856,
+ SessionDiagnosticsArrayType_SessionDiagnostics_QueryNextCount = 12857,
+ SessionDiagnosticsArrayType_SessionDiagnostics_RegisterNodesCount = 12858,
+ SessionDiagnosticsArrayType_SessionDiagnostics_UnregisterNodesCount = 12859,
+ SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics = 12860,
+ SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SessionId = 12861,
+ SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdOfSession = 12862,
+ SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientUserIdHistory = 12863,
+ SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_AuthenticationMechanism = 12864,
+ SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_Encoding = 12865,
+ SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_TransportProtocol = 12866,
+ SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityMode = 12867,
+ SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_SecurityPolicyUri = 12868,
+ SessionSecurityDiagnosticsArrayType_SessionSecurityDiagnostics_ClientCertificate = 12869,
+ ServerType_ResendData = 12871,
+ ServerType_ResendData_InputArguments = 12872,
+ Server_ResendData = 12873,
+ Server_ResendData_InputArguments = 12874,
+ ResendDataMethodType = 12875,
+ ResendDataMethodType_InputArguments = 12876,
+ NormalizedString = 12877,
+ DecimalString = 12878,
+ DurationString = 12879,
+ TimeString = 12880,
+ DateString = 12881,
+ ServerType_EstimatedReturnTime = 12882,
+ ServerType_RequestServerStateChange = 12883,
+ ServerType_RequestServerStateChange_InputArguments = 12884,
+ Server_EstimatedReturnTime = 12885,
+ Server_RequestServerStateChange = 12886,
+ Server_RequestServerStateChange_InputArguments = 12887,
+ RequestServerStateChangeMethodType = 12888,
+ RequestServerStateChangeMethodType_InputArguments = 12889,
+ DiscoveryConfiguration = 12890,
+ MdnsDiscoveryConfiguration = 12891,
+ DiscoveryConfiguration_Encoding_DefaultXml = 12892,
+ MdnsDiscoveryConfiguration_Encoding_DefaultXml = 12893,
+ OpcUa_XmlSchema_DiscoveryConfiguration = 12894,
+ OpcUa_XmlSchema_DiscoveryConfiguration_DataTypeVersion = 12895,
+ OpcUa_XmlSchema_DiscoveryConfiguration_DictionaryFragment = 12896,
+ OpcUa_XmlSchema_MdnsDiscoveryConfiguration = 12897,
+ OpcUa_XmlSchema_MdnsDiscoveryConfiguration_DataTypeVersion = 12898,
+ OpcUa_XmlSchema_MdnsDiscoveryConfiguration_DictionaryFragment = 12899,
+ DiscoveryConfiguration_Encoding_DefaultBinary = 12900,
+ MdnsDiscoveryConfiguration_Encoding_DefaultBinary = 12901,
+ OpcUa_BinarySchema_DiscoveryConfiguration = 12902,
+ OpcUa_BinarySchema_DiscoveryConfiguration_DataTypeVersion = 12903,
+ OpcUa_BinarySchema_DiscoveryConfiguration_DictionaryFragment = 12904,
+ OpcUa_BinarySchema_MdnsDiscoveryConfiguration = 12905,
+ OpcUa_BinarySchema_MdnsDiscoveryConfiguration_DataTypeVersion = 12906,
+ OpcUa_BinarySchema_MdnsDiscoveryConfiguration_DictionaryFragment = 12907,
+ MaxByteStringLength = 12908,
+ ServerType_ServerCapabilities_MaxByteStringLength = 12909,
+ ServerCapabilitiesType_MaxByteStringLength = 12910,
+ Server_ServerCapabilities_MaxByteStringLength = 12911,
+ ConditionType_ConditionRefresh2 = 12912,
+ ConditionType_ConditionRefresh2_InputArguments = 12913,
+ ConditionRefresh2MethodType = 12914,
+ ConditionRefresh2MethodType_InputArguments = 12915,
+ DialogConditionType_ConditionRefresh2 = 12916,
+ DialogConditionType_ConditionRefresh2_InputArguments = 12917,
+ AcknowledgeableConditionType_ConditionRefresh2 = 12918,
+ AcknowledgeableConditionType_ConditionRefresh2_InputArguments = 12919,
+ AlarmConditionType_ConditionRefresh2 = 12984,
+ AlarmConditionType_ConditionRefresh2_InputArguments = 12985,
+ LimitAlarmType_ConditionRefresh2 = 12986,
+ LimitAlarmType_ConditionRefresh2_InputArguments = 12987,
+ ExclusiveLimitAlarmType_ConditionRefresh2 = 12988,
+ ExclusiveLimitAlarmType_ConditionRefresh2_InputArguments = 12989,
+ NonExclusiveLimitAlarmType_ConditionRefresh2 = 12990,
+ NonExclusiveLimitAlarmType_ConditionRefresh2_InputArguments = 12991,
+ NonExclusiveLevelAlarmType_ConditionRefresh2 = 12992,
+ NonExclusiveLevelAlarmType_ConditionRefresh2_InputArguments = 12993,
+ ExclusiveLevelAlarmType_ConditionRefresh2 = 12994,
+ ExclusiveLevelAlarmType_ConditionRefresh2_InputArguments = 12995,
+ NonExclusiveDeviationAlarmType_ConditionRefresh2 = 12996,
+ NonExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments = 12997,
+ ExclusiveDeviationAlarmType_ConditionRefresh2 = 12998,
+ ExclusiveDeviationAlarmType_ConditionRefresh2_InputArguments = 12999,
+ NonExclusiveRateOfChangeAlarmType_ConditionRefresh2 = 13000,
+ NonExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments = 13001,
+ ExclusiveRateOfChangeAlarmType_ConditionRefresh2 = 13002,
+ ExclusiveRateOfChangeAlarmType_ConditionRefresh2_InputArguments = 13003,
+ DiscreteAlarmType_ConditionRefresh2 = 13004,
+ DiscreteAlarmType_ConditionRefresh2_InputArguments = 13005,
+ OffNormalAlarmType_ConditionRefresh2 = 13006,
+ OffNormalAlarmType_ConditionRefresh2_InputArguments = 13007,
+ SystemOffNormalAlarmType_ConditionRefresh2 = 13008,
+ SystemOffNormalAlarmType_ConditionRefresh2_InputArguments = 13009,
+ TripAlarmType_ConditionRefresh2 = 13010,
+ TripAlarmType_ConditionRefresh2_InputArguments = 13011,
+ CertificateExpirationAlarmType = 13225,
+ CertificateExpirationAlarmType_EventId = 13226,
+ CertificateExpirationAlarmType_EventType = 13227,
+ CertificateExpirationAlarmType_SourceNode = 13228,
+ CertificateExpirationAlarmType_SourceName = 13229,
+ CertificateExpirationAlarmType_Time = 13230,
+ CertificateExpirationAlarmType_ReceiveTime = 13231,
+ CertificateExpirationAlarmType_LocalTime = 13232,
+ CertificateExpirationAlarmType_Message = 13233,
+ CertificateExpirationAlarmType_Severity = 13234,
+ CertificateExpirationAlarmType_ConditionClassId = 13235,
+ CertificateExpirationAlarmType_ConditionClassName = 13236,
+ CertificateExpirationAlarmType_ConditionName = 13237,
+ CertificateExpirationAlarmType_BranchId = 13238,
+ CertificateExpirationAlarmType_Retain = 13239,
+ CertificateExpirationAlarmType_EnabledState = 13240,
+ CertificateExpirationAlarmType_EnabledState_Id = 13241,
+ CertificateExpirationAlarmType_EnabledState_Name = 13242,
+ CertificateExpirationAlarmType_EnabledState_Number = 13243,
+ CertificateExpirationAlarmType_EnabledState_EffectiveDisplayName = 13244,
+ CertificateExpirationAlarmType_EnabledState_TransitionTime = 13245,
+ CertificateExpirationAlarmType_EnabledState_EffectiveTransitionTime = 13246,
+ CertificateExpirationAlarmType_EnabledState_TrueState = 13247,
+ CertificateExpirationAlarmType_EnabledState_FalseState = 13248,
+ CertificateExpirationAlarmType_Quality = 13249,
+ CertificateExpirationAlarmType_Quality_SourceTimestamp = 13250,
+ CertificateExpirationAlarmType_LastSeverity = 13251,
+ CertificateExpirationAlarmType_LastSeverity_SourceTimestamp = 13252,
+ CertificateExpirationAlarmType_Comment = 13253,
+ CertificateExpirationAlarmType_Comment_SourceTimestamp = 13254,
+ CertificateExpirationAlarmType_ClientUserId = 13255,
+ CertificateExpirationAlarmType_Disable = 13256,
+ CertificateExpirationAlarmType_Enable = 13257,
+ CertificateExpirationAlarmType_AddComment = 13258,
+ CertificateExpirationAlarmType_AddComment_InputArguments = 13259,
+ CertificateExpirationAlarmType_ConditionRefresh = 13260,
+ CertificateExpirationAlarmType_ConditionRefresh_InputArguments = 13261,
+ CertificateExpirationAlarmType_ConditionRefresh2 = 13262,
+ CertificateExpirationAlarmType_ConditionRefresh2_InputArguments = 13263,
+ CertificateExpirationAlarmType_AckedState = 13264,
+ CertificateExpirationAlarmType_AckedState_Id = 13265,
+ CertificateExpirationAlarmType_AckedState_Name = 13266,
+ CertificateExpirationAlarmType_AckedState_Number = 13267,
+ CertificateExpirationAlarmType_AckedState_EffectiveDisplayName = 13268,
+ CertificateExpirationAlarmType_AckedState_TransitionTime = 13269,
+ CertificateExpirationAlarmType_AckedState_EffectiveTransitionTime = 13270,
+ CertificateExpirationAlarmType_AckedState_TrueState = 13271,
+ CertificateExpirationAlarmType_AckedState_FalseState = 13272,
+ CertificateExpirationAlarmType_ConfirmedState = 13273,
+ CertificateExpirationAlarmType_ConfirmedState_Id = 13274,
+ CertificateExpirationAlarmType_ConfirmedState_Name = 13275,
+ CertificateExpirationAlarmType_ConfirmedState_Number = 13276,
+ CertificateExpirationAlarmType_ConfirmedState_EffectiveDisplayName = 13277,
+ CertificateExpirationAlarmType_ConfirmedState_TransitionTime = 13278,
+ CertificateExpirationAlarmType_ConfirmedState_EffectiveTransitionTime = 13279,
+ CertificateExpirationAlarmType_ConfirmedState_TrueState = 13280,
+ CertificateExpirationAlarmType_ConfirmedState_FalseState = 13281,
+ CertificateExpirationAlarmType_Acknowledge = 13282,
+ CertificateExpirationAlarmType_Acknowledge_InputArguments = 13283,
+ CertificateExpirationAlarmType_Confirm = 13284,
+ CertificateExpirationAlarmType_Confirm_InputArguments = 13285,
+ CertificateExpirationAlarmType_ActiveState = 13286,
+ CertificateExpirationAlarmType_ActiveState_Id = 13287,
+ CertificateExpirationAlarmType_ActiveState_Name = 13288,
+ CertificateExpirationAlarmType_ActiveState_Number = 13289,
+ CertificateExpirationAlarmType_ActiveState_EffectiveDisplayName = 13290,
+ CertificateExpirationAlarmType_ActiveState_TransitionTime = 13291,
+ CertificateExpirationAlarmType_ActiveState_EffectiveTransitionTime = 13292,
+ CertificateExpirationAlarmType_ActiveState_TrueState = 13293,
+ CertificateExpirationAlarmType_ActiveState_FalseState = 13294,
+ CertificateExpirationAlarmType_InputNode = 13295,
+ CertificateExpirationAlarmType_SuppressedState = 13296,
+ CertificateExpirationAlarmType_SuppressedState_Id = 13297,
+ CertificateExpirationAlarmType_SuppressedState_Name = 13298,
+ CertificateExpirationAlarmType_SuppressedState_Number = 13299,
+ CertificateExpirationAlarmType_SuppressedState_EffectiveDisplayName = 13300,
+ CertificateExpirationAlarmType_SuppressedState_TransitionTime = 13301,
+ CertificateExpirationAlarmType_SuppressedState_EffectiveTransitionTime = 13302,
+ CertificateExpirationAlarmType_SuppressedState_TrueState = 13303,
+ CertificateExpirationAlarmType_SuppressedState_FalseState = 13304,
+ CertificateExpirationAlarmType_ShelvingState = 13305,
+ CertificateExpirationAlarmType_ShelvingState_CurrentState = 13306,
+ CertificateExpirationAlarmType_ShelvingState_CurrentState_Id = 13307,
+ CertificateExpirationAlarmType_ShelvingState_CurrentState_Name = 13308,
+ CertificateExpirationAlarmType_ShelvingState_CurrentState_Number = 13309,
+ CertificateExpirationAlarmType_ShelvingState_CurrentState_EffectiveDisplayName = 13310,
+ CertificateExpirationAlarmType_ShelvingState_LastTransition = 13311,
+ CertificateExpirationAlarmType_ShelvingState_LastTransition_Id = 13312,
+ CertificateExpirationAlarmType_ShelvingState_LastTransition_Name = 13313,
+ CertificateExpirationAlarmType_ShelvingState_LastTransition_Number = 13314,
+ CertificateExpirationAlarmType_ShelvingState_LastTransition_TransitionTime = 13315,
+ CertificateExpirationAlarmType_ShelvingState_LastTransition_EffectiveTransitionTime = 13316,
+ CertificateExpirationAlarmType_ShelvingState_UnshelveTime = 13317,
+ CertificateExpirationAlarmType_ShelvingState_Unshelve = 13318,
+ CertificateExpirationAlarmType_ShelvingState_OneShotShelve = 13319,
+ CertificateExpirationAlarmType_ShelvingState_TimedShelve = 13320,
+ CertificateExpirationAlarmType_ShelvingState_TimedShelve_InputArguments = 13321,
+ CertificateExpirationAlarmType_SuppressedOrShelved = 13322,
+ CertificateExpirationAlarmType_MaxTimeShelved = 13323,
+ CertificateExpirationAlarmType_NormalState = 13324,
+ CertificateExpirationAlarmType_ExpirationDate = 13325,
+ CertificateExpirationAlarmType_CertificateType = 13326,
+ CertificateExpirationAlarmType_Certificate = 13327,
+ ServerType_Namespaces_AddressSpaceFile_MimeType = 13340,
+ FileType_MimeType = 13341,
+ CreateDirectoryMethodType = 13342,
+ CreateDirectoryMethodType_InputArguments = 13343,
+ CreateDirectoryMethodType_OutputArguments = 13344,
+ CreateFileMethodType = 13345,
+ CreateFileMethodType_InputArguments = 13346,
+ CreateFileMethodType_OutputArguments = 13347,
+ DeleteFileMethodType = 13348,
+ DeleteFileMethodType_InputArguments = 13349,
+ MoveOrCopyMethodType = 13350,
+ MoveOrCopyMethodType_InputArguments = 13351,
+ MoveOrCopyMethodType_OutputArguments = 13352,
+ FileDirectoryType = 13353,
+ FileDirectoryType_FileDirectoryName_Placeholder = 13354,
+ FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory = 13355,
+ FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_InputArguments = 13356,
+ FileDirectoryType_FileDirectoryName_Placeholder_CreateDirectory_OutputArguments = 13357,
+ FileDirectoryType_FileDirectoryName_Placeholder_CreateFile = 13358,
+ FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_InputArguments = 13359,
+ FileDirectoryType_FileDirectoryName_Placeholder_CreateFile_OutputArguments = 13360,
+ FileDirectoryType_FileDirectoryName_Placeholder_Delete = 13361,
+ FileDirectoryType_FileDirectoryName_Placeholder_Delete_InputArguments = 13362,
+ FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy = 13363,
+ FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_InputArguments = 13364,
+ FileDirectoryType_FileDirectoryName_Placeholder_MoveOrCopy_OutputArguments = 13365,
+ FileDirectoryType_FileName_Placeholder = 13366,
+ FileDirectoryType_FileName_Placeholder_Size = 13367,
+ FileDirectoryType_FileName_Placeholder_Writable = 13368,
+ FileDirectoryType_FileName_Placeholder_UserWritable = 13369,
+ FileDirectoryType_FileName_Placeholder_OpenCount = 13370,
+ FileDirectoryType_FileName_Placeholder_MimeType = 13371,
+ FileDirectoryType_FileName_Placeholder_Open = 13372,
+ FileDirectoryType_FileName_Placeholder_Open_InputArguments = 13373,
+ FileDirectoryType_FileName_Placeholder_Open_OutputArguments = 13374,
+ FileDirectoryType_FileName_Placeholder_Close = 13375,
+ FileDirectoryType_FileName_Placeholder_Close_InputArguments = 13376,
+ FileDirectoryType_FileName_Placeholder_Read = 13377,
+ FileDirectoryType_FileName_Placeholder_Read_InputArguments = 13378,
+ FileDirectoryType_FileName_Placeholder_Read_OutputArguments = 13379,
+ FileDirectoryType_FileName_Placeholder_Write = 13380,
+ FileDirectoryType_FileName_Placeholder_Write_InputArguments = 13381,
+ FileDirectoryType_FileName_Placeholder_GetPosition = 13382,
+ FileDirectoryType_FileName_Placeholder_GetPosition_InputArguments = 13383,
+ FileDirectoryType_FileName_Placeholder_GetPosition_OutputArguments = 13384,
+ FileDirectoryType_FileName_Placeholder_SetPosition = 13385,
+ FileDirectoryType_FileName_Placeholder_SetPosition_InputArguments = 13386,
+ FileDirectoryType_CreateDirectory = 13387,
+ FileDirectoryType_CreateDirectory_InputArguments = 13388,
+ FileDirectoryType_CreateDirectory_OutputArguments = 13389,
+ FileDirectoryType_CreateFile = 13390,
+ FileDirectoryType_CreateFile_InputArguments = 13391,
+ FileDirectoryType_CreateFile_OutputArguments = 13392,
+ FileDirectoryType_Delete = 13393,
+ FileDirectoryType_Delete_InputArguments = 13394,
+ FileDirectoryType_MoveOrCopy = 13395,
+ FileDirectoryType_MoveOrCopy_InputArguments = 13396,
+ FileDirectoryType_MoveOrCopy_OutputArguments = 13397,
+ AddressSpaceFileType_MimeType = 13398,
+ NamespaceMetadataType_NamespaceFile_MimeType = 13399,
+ NamespacesType_NamespaceIdentifier_Placeholder_NamespaceFile_MimeType = 13400,
+ NamespacesType_AddressSpaceFile_MimeType = 13401,
+ Server_Namespaces_AddressSpaceFile_MimeType = 13402,
+ TrustListType_MimeType = 13403,
+ CertificateGroupType_TrustList = 13599,
+ CertificateGroupType_TrustList_Size = 13600,
+ CertificateGroupType_TrustList_Writable = 13601,
+ CertificateGroupType_TrustList_UserWritable = 13602,
+ CertificateGroupType_TrustList_OpenCount = 13603,
+ CertificateGroupType_TrustList_MimeType = 13604,
+ CertificateGroupType_TrustList_Open = 13605,
+ CertificateGroupType_TrustList_Open_InputArguments = 13606,
+ CertificateGroupType_TrustList_Open_OutputArguments = 13607,
+ CertificateGroupType_TrustList_Close = 13608,
+ CertificateGroupType_TrustList_Close_InputArguments = 13609,
+ CertificateGroupType_TrustList_Read = 13610,
+ CertificateGroupType_TrustList_Read_InputArguments = 13611,
+ CertificateGroupType_TrustList_Read_OutputArguments = 13612,
+ CertificateGroupType_TrustList_Write = 13613,
+ CertificateGroupType_TrustList_Write_InputArguments = 13614,
+ CertificateGroupType_TrustList_GetPosition = 13615,
+ CertificateGroupType_TrustList_GetPosition_InputArguments = 13616,
+ CertificateGroupType_TrustList_GetPosition_OutputArguments = 13617,
+ CertificateGroupType_TrustList_SetPosition = 13618,
+ CertificateGroupType_TrustList_SetPosition_InputArguments = 13619,
+ CertificateGroupType_TrustList_LastUpdateTime = 13620,
+ CertificateGroupType_TrustList_OpenWithMasks = 13621,
+ CertificateGroupType_TrustList_OpenWithMasks_InputArguments = 13622,
+ CertificateGroupType_TrustList_OpenWithMasks_OutputArguments = 13623,
+ CertificateGroupType_TrustList_CloseAndUpdate = 13624,
+ CertificateGroupType_TrustList_CloseAndUpdate_InputArguments = 13625,
+ CertificateGroupType_TrustList_CloseAndUpdate_OutputArguments = 13626,
+ CertificateGroupType_TrustList_AddCertificate = 13627,
+ CertificateGroupType_TrustList_AddCertificate_InputArguments = 13628,
+ CertificateGroupType_TrustList_RemoveCertificate = 13629,
+ CertificateGroupType_TrustList_RemoveCertificate_InputArguments = 13630,
+ CertificateGroupType_CertificateTypes = 13631,
+ CertificateUpdatedAuditEventType_CertificateGroup = 13735,
+ CertificateUpdatedAuditEventType_CertificateType = 13736,
+ ServerConfiguration_UpdateCertificate = 13737,
+ ServerConfiguration_UpdateCertificate_InputArguments = 13738,
+ ServerConfiguration_UpdateCertificate_OutputArguments = 13739,
+ CertificateGroupFolderType = 13813,
+ CertificateGroupFolderType_DefaultApplicationGroup = 13814,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList = 13815,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Size = 13816,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Writable = 13817,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_UserWritable = 13818,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenCount = 13819,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_MimeType = 13820,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open = 13821,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_InputArguments = 13822,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Open_OutputArguments = 13823,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close = 13824,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Close_InputArguments = 13825,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read = 13826,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_InputArguments = 13827,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Read_OutputArguments = 13828,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write = 13829,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_Write_InputArguments = 13830,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition = 13831,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_InputArguments = 13832,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments = 13833,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition = 13834,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_SetPosition_InputArguments = 13835,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_LastUpdateTime = 13836,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks = 13837,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments = 13838,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments = 13839,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate = 13840,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments = 13841,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments = 13842,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate = 13843,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments = 13844,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate = 13845,
+ CertificateGroupFolderType_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments = 13846,
+ CertificateGroupFolderType_DefaultApplicationGroup_CertificateTypes = 13847,
+ CertificateGroupFolderType_DefaultHttpsGroup = 13848,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList = 13849,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Size = 13850,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Writable = 13851,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_UserWritable = 13852,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenCount = 13853,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_MimeType = 13854,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open = 13855,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_InputArguments = 13856,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Open_OutputArguments = 13857,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close = 13858,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Close_InputArguments = 13859,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read = 13860,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_InputArguments = 13861,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Read_OutputArguments = 13862,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write = 13863,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_Write_InputArguments = 13864,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition = 13865,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_InputArguments = 13866,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments = 13867,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition = 13868,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_SetPosition_InputArguments = 13869,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_LastUpdateTime = 13870,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks = 13871,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments = 13872,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments = 13873,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate = 13874,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments = 13875,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments = 13876,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate = 13877,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments = 13878,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate = 13879,
+ CertificateGroupFolderType_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments = 13880,
+ CertificateGroupFolderType_DefaultHttpsGroup_CertificateTypes = 13881,
+ CertificateGroupFolderType_DefaultUserTokenGroup = 13882,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList = 13883,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Size = 13884,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Writable = 13885,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_UserWritable = 13886,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenCount = 13887,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_MimeType = 13888,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open = 13889,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_InputArguments = 13890,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Open_OutputArguments = 13891,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close = 13892,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Close_InputArguments = 13893,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read = 13894,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_InputArguments = 13895,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Read_OutputArguments = 13896,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write = 13897,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_Write_InputArguments = 13898,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition = 13899,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments = 13900,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments = 13901,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition = 13902,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments = 13903,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_LastUpdateTime = 13904,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks = 13905,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments = 13906,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments = 13907,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate = 13908,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments = 13909,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments = 13910,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate = 13911,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments = 13912,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate = 13913,
+ CertificateGroupFolderType_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments = 13914,
+ CertificateGroupFolderType_DefaultUserTokenGroup_CertificateTypes = 13915,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder = 13916,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList = 13917,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Size = 13918,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Writable = 13919,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_UserWritable = 13920,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenCount = 13921,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_MimeType = 13922,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open = 13923,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_InputArguments = 13924,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Open_OutputArguments = 13925,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close = 13926,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Close_InputArguments = 13927,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read = 13928,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_InputArguments = 13929,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Read_OutputArguments = 13930,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write = 13931,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_Write_InputArguments = 13932,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition = 13933,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_InputArguments = 13934,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_GetPosition_OutputArguments = 13935,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition = 13936,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_SetPosition_InputArguments = 13937,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_LastUpdateTime = 13938,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks = 13939,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_InputArguments = 13940,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_OpenWithMasks_OutputArguments = 13941,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate = 13942,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_InputArguments = 13943,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_CloseAndUpdate_OutputArguments = 13944,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate = 13945,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_AddCertificate_InputArguments = 13946,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate = 13947,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_TrustList_RemoveCertificate_InputArguments = 13948,
+ CertificateGroupFolderType_AdditionalGroup_Placeholder_CertificateTypes = 13949,
+ ServerConfigurationType_CertificateGroups = 13950,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup = 13951,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList = 13952,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Size = 13953,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Writable = 13954,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable = 13955,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenCount = 13956,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_MimeType = 13957,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open = 13958,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_InputArguments = 13959,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Open_OutputArguments = 13960,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close = 13961,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Close_InputArguments = 13962,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read = 13963,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_InputArguments = 13964,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Read_OutputArguments = 13965,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write = 13966,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_Write_InputArguments = 13967,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition = 13968,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_InputArguments = 13969,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_GetPosition_OutputArguments = 13970,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition = 13971,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_SetPosition_InputArguments = 13972,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_LastUpdateTime = 13973,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks = 13974,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_InputArguments = 13975,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_OpenWithMasks_OutputArguments = 13976,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate = 13977,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments = 13978,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_OutputArguments = 13979,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate = 13980,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_AddCertificate_InputArguments = 13981,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate = 13982,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_TrustList_RemoveCertificate_InputArguments = 13983,
+ ServerConfigurationType_CertificateGroups_DefaultApplicationGroup_CertificateTypes = 13984,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup = 13985,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList = 13986,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Size = 13987,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Writable = 13988,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable = 13989,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount = 13990,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_MimeType = 13991,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open = 13992,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments = 13993,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments = 13994,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close = 13995,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments = 13996,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read = 13997,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments = 13998,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments = 13999,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write = 14000,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments = 14001,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition = 14002,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments = 14003,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments = 14004,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition = 14005,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments = 14006,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime = 14007,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks = 14008,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments = 14009,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments = 14010,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate = 14011,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments = 14012,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments = 14013,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate = 14014,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments = 14015,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate = 14016,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments = 14017,
+ ServerConfigurationType_CertificateGroups_DefaultHttpsGroup_CertificateTypes = 14018,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup = 14019,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList = 14020,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Size = 14021,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable = 14022,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable = 14023,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount = 14024,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_MimeType = 14025,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open = 14026,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments = 14027,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments = 14028,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close = 14029,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments = 14030,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read = 14031,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments = 14032,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments = 14033,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write = 14034,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments = 14035,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition = 14036,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments = 14037,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments = 14038,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition = 14039,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments = 14040,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime = 14041,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks = 14042,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments = 14043,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments = 14044,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate = 14045,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments = 14046,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments = 14047,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate = 14048,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments = 14049,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate = 14050,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments = 14051,
+ ServerConfigurationType_CertificateGroups_DefaultUserTokenGroup_CertificateTypes = 14052,
+ ServerConfiguration_CertificateGroups = 14053,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup = 14088,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList = 14089,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Size = 14090,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Writable = 14091,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_UserWritable = 14092,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenCount = 14093,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_MimeType = 14094,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open = 14095,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_InputArguments = 14096,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Open_OutputArguments = 14097,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close = 14098,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Close_InputArguments = 14099,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read = 14100,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_InputArguments = 14101,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Read_OutputArguments = 14102,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write = 14103,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_Write_InputArguments = 14104,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition = 14105,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_InputArguments = 14106,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_GetPosition_OutputArguments = 14107,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition = 14108,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_SetPosition_InputArguments = 14109,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_LastUpdateTime = 14110,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks = 14111,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_InputArguments = 14112,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_OpenWithMasks_OutputArguments = 14113,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate = 14114,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_InputArguments = 14115,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_CloseAndUpdate_OutputArguments = 14116,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate = 14117,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_AddCertificate_InputArguments = 14118,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate = 14119,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_TrustList_RemoveCertificate_InputArguments = 14120,
+ ServerConfiguration_CertificateGroups_DefaultHttpsGroup_CertificateTypes = 14121,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup = 14122,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList = 14123,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Size = 14124,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Writable = 14125,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_UserWritable = 14126,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenCount = 14127,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_MimeType = 14128,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open = 14129,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_InputArguments = 14130,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Open_OutputArguments = 14131,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close = 14132,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Close_InputArguments = 14133,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read = 14134,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_InputArguments = 14135,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Read_OutputArguments = 14136,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write = 14137,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_Write_InputArguments = 14138,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition = 14139,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_InputArguments = 14140,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_GetPosition_OutputArguments = 14141,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition = 14142,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_SetPosition_InputArguments = 14143,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_LastUpdateTime = 14144,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks = 14145,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_InputArguments = 14146,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_OpenWithMasks_OutputArguments = 14147,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate = 14148,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_InputArguments = 14149,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_CloseAndUpdate_OutputArguments = 14150,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate = 14151,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_AddCertificate_InputArguments = 14152,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate = 14153,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_TrustList_RemoveCertificate_InputArguments = 14154,
+ ServerConfiguration_CertificateGroups_DefaultUserTokenGroup_CertificateTypes = 14155,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup = 14156,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_Writable = 14157,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_UserWritable = 14158,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_MimeType = 14159,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_TrustList_CloseAndUpdate_InputArguments = 14160,
+ ServerConfiguration_CertificateGroups_DefaultApplicationGroup_CertificateTypes = 14161,
+ AuditCreateSessionEventType_SessionId = 14413,
+ AuditUrlMismatchEventType_SessionId = 14414,
+ Server_ServerRedundancy_ServerNetworkGroups = 14415,
+ CertificateExpirationAlarmType_ExpirationLimit = 14900,
+ Server_Namespaces_OPCUANamespaceUri = 15182,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceUri = 15183,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceVersion = 15184,
+ Server_Namespaces_OPCUANamespaceUri_NamespacePublicationDate = 15185,
+ Server_Namespaces_OPCUANamespaceUri_IsNamespaceSubset = 15186,
+ Server_Namespaces_OPCUANamespaceUri_StaticNodeIdTypes = 15187,
+ Server_Namespaces_OPCUANamespaceUri_StaticNumericNodeIdRange = 15188,
+ Server_Namespaces_OPCUANamespaceUri_StaticStringNodeIdPattern = 15189,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile = 15190,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Size = 15191,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Writable = 15192,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_UserWritable = 15193,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_OpenCount = 15194,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_MimeType = 15195,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Open = 15196,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Open_InputArguments = 15197,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Open_OutputArguments = 15198,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Close = 15199,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Close_InputArguments = 15200,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Read = 15201,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Read_InputArguments = 15202,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Read_OutputArguments = 15203,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Write = 15204,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_Write_InputArguments = 15205,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_GetPosition = 15206,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_GetPosition_InputArguments = 15207,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_GetPosition_OutputArguments = 15208,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_SetPosition = 15209,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_SetPosition_InputArguments = 15210,
+ Server_Namespaces_OPCUANamespaceUri_NamespaceFile_ExportNamespace = 15211,
+ };
+#ifndef QT_OPCUA_NO_NS0IDNAMES
+ Q_ENUM_NS(Namespace0)
+#endif
+ }
+}
+
+QT_END_NAMESPACE
+
+#endif // QOPCUANODEIDS_H
diff --git a/src/opcua/client/qopcuanodeimpl.cpp b/src/opcua/client/qopcuanodeimpl.cpp
index eea0367..25d940e 100644
--- a/src/opcua/client/qopcuanodeimpl.cpp
+++ b/src/opcua/client/qopcuanodeimpl.cpp
@@ -39,6 +39,8 @@
QT_BEGIN_NAMESPACE
QOpcUaNodeImpl::QOpcUaNodeImpl()
+ : m_handle{0}
+ , m_registered{false}
{
}
@@ -46,4 +48,24 @@ QOpcUaNodeImpl::~QOpcUaNodeImpl()
{
}
+quint64 QOpcUaNodeImpl::handle() const
+{
+ return m_handle;
+}
+
+void QOpcUaNodeImpl::setHandle(quint64 handle)
+{
+ m_handle = handle;
+}
+
+bool QOpcUaNodeImpl::registered() const
+{
+ return m_registered;
+}
+
+void QOpcUaNodeImpl::setRegistered(bool registered)
+{
+ m_registered = registered;
+}
+
QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuanodeimpl_p.h b/src/opcua/client/qopcuanodeimpl_p.h
index 62f2d91..9a9793e 100644
--- a/src/opcua/client/qopcuanodeimpl_p.h
+++ b/src/opcua/client/qopcuanodeimpl_p.h
@@ -51,20 +51,14 @@
#include <QtOpcUa/qopcuaglobal.h>
#include <QtOpcUa/qopcuamonitoringparameters.h>
#include <QtOpcUa/qopcuanode.h>
+#include <QtOpcUa/qopcuareaditem.h>
+#include <QtOpcUa/qopcuareadresult.h>
#include <QtOpcUa/qopcuatype.h>
#include <QtCore/qvariant.h>
QT_BEGIN_NAMESPACE
-struct QOpcUaReadResult {
- QOpcUa::NodeAttribute attributeId;
- QOpcUa::UaStatusCode statusCode;
- QDateTime sourceTimestamp;
- QDateTime serverTimestamp;
- QVariant value;
-};
-
class Q_OPCUA_EXPORT QOpcUaNodeImpl : public QObject
{
Q_OBJECT
@@ -75,7 +69,7 @@ public:
virtual bool readAttributes(QOpcUa::NodeAttributes attr, const QString &indexRange) = 0;
virtual bool enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings) = 0;
virtual bool disableMonitoring(QOpcUa::NodeAttributes attr) = 0;
- virtual bool browseChildren(QOpcUa::ReferenceTypeId referenceType, QOpcUa::NodeClasses nodeClassMask) = 0;
+ virtual bool browse(const QOpcUaBrowseRequest &request) = 0;
virtual QString nodeId() const = 0;
virtual bool writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant &value, QOpcUa::Types type, const QString &indexRange) = 0;
@@ -85,20 +79,33 @@ public:
virtual bool callMethod(const QString &methodNodeId, const QVector<QOpcUa::TypedVariant> &args) = 0;
+ virtual bool resolveBrowsePath(const QVector<QOpcUa::QRelativePathElement> &path) = 0;
+
+ quint64 handle() const;
+ void setHandle(quint64 handle);
+
+ bool registered() const;
+ void setRegistered(bool registered);
+
Q_SIGNALS:
void attributesRead(QVector<QOpcUaReadResult> attr, QOpcUa::UaStatusCode serviceResult);
void attributeWritten(QOpcUa::NodeAttribute attr, QVariant value, QOpcUa::UaStatusCode statusCode);
void browseFinished(QVector<QOpcUaReferenceDescription> children, QOpcUa::UaStatusCode statusCode);
- void attributeUpdated(QOpcUa::NodeAttribute attr, QOpcUaReadResult value);
+ void dataChangeOccurred(QOpcUa::NodeAttribute attr, QOpcUaReadResult value);
+ void eventOccurred(QVariantList eventFields);
void monitoringEnableDisable(QOpcUa::NodeAttribute attr, bool subscribe, QOpcUaMonitoringParameters status);
void monitoringStatusChanged(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items,
QOpcUaMonitoringParameters param);
void methodCallFinished(QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode);
+ void resolveBrowsePathFinished(QVector<QOpcUa::QBrowsePathTarget> targets,
+ QVector<QOpcUa::QRelativePathElement> path, QOpcUa::UaStatusCode status);
+
+private:
+ quint64 m_handle;
+ bool m_registered;
};
QT_END_NAMESPACE
-Q_DECLARE_METATYPE(QOpcUaReadResult)
-
#endif // QOPCUANODEIMPL_P_H
diff --git a/src/opcua/client/qopcuareaditem.cpp b/src/opcua/client/qopcuareaditem.cpp
new file mode 100644
index 0000000..c9261bc
--- /dev/null
+++ b/src/opcua/client/qopcuareaditem.cpp
@@ -0,0 +1,150 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qopcuareaditem.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QOpcUaReadItem
+ \inmodule QtOpcUa
+ \brief This class stores the options for a read operation.
+
+ A read operation on an OPC UA server returns the entire value or a certain index range of the value of an
+ attribute of a node on the server. This class contains the necessary information for the backend to make
+ a read request to the server.
+
+ One or multiple objects of this class make up the request of a \l QOpcUaClient::batchRead() operation.
+
+ \sa QOpcUaClient::batchRead() QOpcUaReadResult
+*/
+
+class QOpcUaReadItemData : public QSharedData
+{
+public:
+ QString nodeId;
+ QOpcUa::NodeAttribute attribute {QOpcUa::NodeAttribute::Value};
+ QString indexRange;
+};
+
+QOpcUaReadItem::QOpcUaReadItem()
+ : data(new QOpcUaReadItemData)
+{
+
+}
+
+/*!
+ Constructs a read item from \a other.
+*/
+QOpcUaReadItem::QOpcUaReadItem(const QOpcUaReadItem &other)
+ : data(other.data)
+{
+}
+
+/*!
+ Constructs a read item for the index range \a indexRange of the attribute \a attr of node \a nodeId.
+*/
+QOpcUaReadItem::QOpcUaReadItem(const QString &nodeId, QOpcUa::NodeAttribute attr, const QString &indexRange)
+ : data(new QOpcUaReadItemData)
+{
+ setNodeId(nodeId);
+ setAttribute(attr);
+ setIndexRange(indexRange);
+}
+
+/*!
+ Sets the values from \a rhs in this read item.
+*/
+QOpcUaReadItem &QOpcUaReadItem::operator=(const QOpcUaReadItem &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUaReadItem::~QOpcUaReadItem()
+{
+}
+
+/*!
+ Returns the index range.
+*/
+QString QOpcUaReadItem::indexRange() const
+{
+ return data->indexRange;
+}
+
+/*!
+ Sets the index range to \a indexRange.
+*/
+void QOpcUaReadItem::setIndexRange(const QString &indexRange)
+{
+ data->indexRange = indexRange;
+}
+
+/*!
+ Returns the node attribute id.
+*/
+QOpcUa::NodeAttribute QOpcUaReadItem::attribute() const
+{
+ return data->attribute;
+}
+
+/*!
+ Sets the node attribute id to \a attribute.
+*/
+void QOpcUaReadItem::setAttribute(QOpcUa::NodeAttribute attribute)
+{
+ data->attribute = attribute;
+}
+
+/*!
+ Returns the node id.
+*/
+QString QOpcUaReadItem::nodeId() const
+{
+ return data->nodeId;
+}
+
+/*!
+ Sets the node id to \a nodeId.
+*/
+void QOpcUaReadItem::setNodeId(const QString &nodeId)
+{
+ data->nodeId = nodeId;
+}
+
+QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuareaditem.h b/src/opcua/client/qopcuareaditem.h
new file mode 100644
index 0000000..35a33e7
--- /dev/null
+++ b/src/opcua/client/qopcuareaditem.h
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOPCUAREADITEM_H
+#define QOPCUAREADITEM_H
+
+#include <QtOpcUa/qopcuatype.h>
+
+QT_BEGIN_NAMESPACE
+
+class QOpcUaReadItemData;
+class Q_OPCUA_EXPORT QOpcUaReadItem
+{
+public:
+ QOpcUaReadItem();
+ QOpcUaReadItem(const QOpcUaReadItem &other);
+ QOpcUaReadItem(const QString &nodeId, QOpcUa::NodeAttribute attr = QOpcUa::NodeAttribute::Value,
+ const QString &indexRange = QString());
+ QOpcUaReadItem &operator=(const QOpcUaReadItem &rhs);
+ ~QOpcUaReadItem();
+
+ QString nodeId() const;
+ void setNodeId(const QString &nodeId);
+
+ QOpcUa::NodeAttribute attribute() const;
+ void setAttribute(QOpcUa::NodeAttribute attribute);
+
+ QString indexRange() const;
+ void setIndexRange(const QString &indexRange);
+
+private:
+ QSharedDataPointer<QOpcUaReadItemData> data;
+};
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QOpcUaReadItem)
+
+#endif // QOPCUAREADITEM_H
diff --git a/src/opcua/client/qopcuareadresult.cpp b/src/opcua/client/qopcuareadresult.cpp
new file mode 100644
index 0000000..739717f
--- /dev/null
+++ b/src/opcua/client/qopcuareadresult.cpp
@@ -0,0 +1,211 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qopcuareadresult.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QOpcUaReadResult
+ \inmodule QtOpcUa
+ \brief This class stores the result of a read operation.
+
+ A read operation on an OPC UA server returns the value and timestamps which describe when a value was generated
+ by the source and when the server obtained it. It also returns a status code which describes if the value could
+ be read and if not, for what reason the read has failed.
+
+ In addition to the data returned by the server, this class also contains the node id, the attribute and the index
+ range from the request to enable a client to match the result with a request.
+
+ Objects of this class are returned in the \l QOpcUaClient::batchReadFinished()
+ signal and contain the result of a read operation that was part of a \l QOpcUaClient::batchRead()
+ request.
+
+ \sa QOpcUaClient::batchRead() QOpcUaClient::batchReadFinished() QOpcUaReadItem
+*/
+class QOpcUaReadResultData : public QSharedData
+{
+public:
+ QDateTime serverTimestamp;
+ QDateTime sourceTimestamp;
+ QOpcUa::UaStatusCode statusCode {QOpcUa::UaStatusCode::Good};
+ QString nodeId;
+ QOpcUa::NodeAttribute attribute {QOpcUa::NodeAttribute::Value};
+ QString indexRange;
+ QVariant value;
+};
+
+QOpcUaReadResult::QOpcUaReadResult()
+ : data(new QOpcUaReadResultData)
+{
+}
+
+/*!
+ Constructs a read result from \a other.
+*/
+QOpcUaReadResult::QOpcUaReadResult(const QOpcUaReadResult &other)
+ : data(other.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this read result.
+*/
+QOpcUaReadResult &QOpcUaReadResult::operator=(const QOpcUaReadResult &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUaReadResult::~QOpcUaReadResult()
+{
+}
+
+/*!
+ Returns the value.
+*/
+QVariant QOpcUaReadResult::value() const
+{
+ return data->value;
+}
+
+/*!
+ Sets the value to \a value.
+*/
+void QOpcUaReadResult::setValue(const QVariant &value)
+{
+ data->value = value;
+}
+
+/*!
+ Returns the attribute id.
+*/
+QOpcUa::NodeAttribute QOpcUaReadResult::attribute() const
+{
+ return data->attribute;
+}
+
+/*!
+ Sets the attribute id to \a attribute.
+*/
+void QOpcUaReadResult::setAttribute(QOpcUa::NodeAttribute attribute)
+{
+ data->attribute = attribute;
+}
+
+/*!
+ Returns the index range.
+*/
+QString QOpcUaReadResult::indexRange() const
+{
+ return data->indexRange;
+}
+
+/*!
+ Sets the index range to \a indexRange.
+*/
+void QOpcUaReadResult::setIndexRange(const QString &indexRange)
+{
+ data->indexRange = indexRange;
+}
+
+/*!
+ Returns the node id.
+*/
+QString QOpcUaReadResult::nodeId() const
+{
+ return data->nodeId;
+}
+
+/*!
+ Sets the node id to \a nodeId.
+*/
+void QOpcUaReadResult::setNodeId(const QString &nodeId)
+{
+ data->nodeId = nodeId;
+}
+
+/*!
+ Returns the status code for this element. If the status code is not \l {QOpcUa::UaStatusCode} {Good}, the
+ value and the timestamps are invalid.
+*/
+QOpcUa::UaStatusCode QOpcUaReadResult::statusCode() const
+{
+ return data->statusCode;
+}
+
+/*!
+ Sets the status code to \a statusCode.
+*/
+void QOpcUaReadResult::setStatusCode(QOpcUa::UaStatusCode statusCode)
+{
+ data->statusCode = statusCode;
+}
+
+/*!
+ Returns the source timestamp for \l value().
+*/
+QDateTime QOpcUaReadResult::sourceTimestamp() const
+{
+ return data->sourceTimestamp;
+}
+
+/*!
+ Sets the source timestamp to \a sourceTimestamp.
+*/
+void QOpcUaReadResult::setSourceTimestamp(const QDateTime &sourceTimestamp)
+{
+ data->sourceTimestamp = sourceTimestamp;
+}
+
+/*!
+ Returns the server timestamp for \l value().
+*/
+QDateTime QOpcUaReadResult::serverTimestamp() const
+{
+ return data->serverTimestamp;
+}
+
+/*!
+ Sets the server timestamp to \a serverTimestamp.
+*/
+void QOpcUaReadResult::setServerTimestamp(const QDateTime &serverTimestamp)
+{
+ data->serverTimestamp = serverTimestamp;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/opcua/freeopcua/qfreeopcuaplugin.cpp b/src/opcua/client/qopcuareadresult.h
index 9308c31..83cec19 100644
--- a/src/plugins/opcua/freeopcua/qfreeopcuaplugin.cpp
+++ b/src/opcua/client/qopcuareadresult.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtOpcUa module of the Qt Toolkit.
@@ -34,40 +34,51 @@
**
****************************************************************************/
-#include "qfreeopcuaclient.h"
-#include "qfreeopcuaplugin.h"
-#include "qfreeopcuavalueconverter.h"
-#include <QtOpcUa/qopcuaclient.h>
+#ifndef QOPCUAREADRESULT_H
+#define QOPCUAREADRESULT_H
-#include <QtCore/qloggingcategory.h>
+#include <QtOpcUa/qopcuatype.h>
+
+#include <QtCore/qdatetime.h>
QT_BEGIN_NAMESPACE
-static void compileTimeEnforceEnumMappings(void)
-{
- static_assert(static_cast<QOpcUa::NodeClass>(OpcUa::NodeClass::Unspecified) == QOpcUa::NodeClass::Undefined,
- "FreeOPCUA and QOpcUa values for NodeClasses must be the same");
- static_assert(static_cast<QOpcUa::NodeClass>(OpcUa::NodeClass::Variable) == QOpcUa::NodeClass::Variable,
- "FreeOPCUA and QOpcUa values for NodeClasses must be the same");
-}
-
-QFreeOpcUaPlugin::QFreeOpcUaPlugin(QObject *parent)
- : QOpcUaPlugin(parent)
+class QOpcUaReadResultData;
+class Q_OPCUA_EXPORT QOpcUaReadResult
{
- compileTimeEnforceEnumMappings();
- qRegisterMetaType<OpcUa::NodeId>();
- qRegisterMetaType<OpcUa::Node>();
-}
+public:
+ QOpcUaReadResult();
+ QOpcUaReadResult(const QOpcUaReadResult &other);
+ QOpcUaReadResult &operator=(const QOpcUaReadResult &rhs);
+ ~QOpcUaReadResult();
-QFreeOpcUaPlugin::~QFreeOpcUaPlugin()
-{
-}
+ QDateTime serverTimestamp() const;
+ void setServerTimestamp(const QDateTime &serverTimestamp);
-QOpcUaClient *QFreeOpcUaPlugin::createClient()
-{
- return new QOpcUaClient(new QFreeOpcUaClientImpl);
-}
+ QDateTime sourceTimestamp() const;
+ void setSourceTimestamp(const QDateTime &sourceTimestamp);
+
+ QOpcUa::UaStatusCode statusCode() const;
+ void setStatusCode(QOpcUa::UaStatusCode statusCode);
+
+ QString nodeId() const;
+ void setNodeId(const QString &nodeId);
-Q_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_FREEOPCUA, "qt.opcua.plugins.freeopcua")
+ QOpcUa::NodeAttribute attribute() const;
+ void setAttribute(QOpcUa::NodeAttribute attribute);
+
+ QString indexRange() const;
+ void setIndexRange(const QString &indexRange);
+
+ QVariant value() const;
+ void setValue(const QVariant &value);
+
+private:
+ QSharedDataPointer<QOpcUaReadResultData> data;
+};
QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QOpcUaReadResult)
+
+#endif // QOPCUAREADRESULT_H
diff --git a/src/opcua/client/qopcuareferencedescription.cpp b/src/opcua/client/qopcuareferencedescription.cpp
index 60c293f..d0d0143 100644
--- a/src/opcua/client/qopcuareferencedescription.cpp
+++ b/src/opcua/client/qopcuareferencedescription.cpp
@@ -35,22 +35,46 @@
****************************************************************************/
#include "qopcuareferencedescription.h"
-#include "qopcuareferencedescription_p.h"
QT_BEGIN_NAMESPACE
/*!
\class QOpcUaReferenceDescription
\inmodule QtOpcUa
- \brief Contains information about a node
-
- This class is used to return the results of a call to \l QOpcUaNode::browseChildren().
-
- It contains the type of the reference used to connect the child node to the parent
- and the values of the following attributes of the node:
- NodeClass, DisplayName, BrowseName and NodeId (see \l QOpcUa::NodeAttribute).
+ \brief Contains information about a node.
+
+ This class is used to return the results of a call to \l QOpcUaNode::browse() or
+ \l QOpcUaNode::browseChildren().
+
+ It contains the type and direction of the reference used to connect the node
+ to the starting node of the browse operation, the node id of the target's type
+ definition node and the values of the following \l {QOpcUa::NodeAttribute} {node attributes}:
+ \table
+ \header
+ \li Attribute
+ \row
+ \li NodeId
+ \row
+ \li BrowseName
+ \row
+ \li DisplayName
+ \row
+ \li NodeClass
+ \endtable
*/
+class QOpcUaReferenceDescriptionPrivate : public QSharedData
+{
+public:
+ QString refTypeId;
+ QOpcUa::QExpandedNodeId targetNodeId;
+ QOpcUa::QExpandedNodeId typeDefinition;
+ QOpcUa::QQualifiedName browseName;
+ QOpcUa::QLocalizedText displayName;
+ QOpcUa::NodeClass nodeClass {QOpcUa::NodeClass::Object};
+ bool isForwardReference {true};
+};
+
/*!
Creates an empty QOpcUaReferenceDescription object
*/
@@ -97,9 +121,40 @@ void QOpcUaReferenceDescription::setNodeClass(QOpcUa::NodeClass nodeClass)
}
/*!
- Returns the display name of the node.
+ Sets \a isForwardReference as isForwardReference information for the reference.
+*/
+void QOpcUaReferenceDescription::setIsForwardReference(bool isForwardReference)
+{
+ d_ptr->isForwardReference = isForwardReference;
+}
+
+/*!
+ Returns \c true if the reference is forward.
+*/
+bool QOpcUaReferenceDescription::isForwardReference() const
+{
+ return d_ptr->isForwardReference;
+}
+
+/*!
+ Sets \a typeDefinition as id of the type definition.
*/
+void QOpcUaReferenceDescription::setTypeDefinition(const QOpcUa::QExpandedNodeId &typeDefinition)
+{
+ d_ptr->typeDefinition = typeDefinition;
+}
+/*!
+ Returns the type definition id.
+*/
+QOpcUa::QExpandedNodeId QOpcUaReferenceDescription::typeDefinition() const
+{
+ return d_ptr->typeDefinition;
+}
+
+/*!
+ Returns the display name of the node.
+*/
QOpcUa::QLocalizedText QOpcUaReferenceDescription::displayName() const
{
return d_ptr->displayName;
@@ -132,33 +187,35 @@ void QOpcUaReferenceDescription::setBrowseName(const QOpcUa::QQualifiedName &bro
/*!
Returns the node id of the node.
*/
-QString QOpcUaReferenceDescription::nodeId() const
+QOpcUa::QExpandedNodeId QOpcUaReferenceDescription::targetNodeId() const
{
- return d_ptr->nodeId;
+ return d_ptr->targetNodeId;
}
/*!
Sets the node id of the node to \a nodeId.
*/
-void QOpcUaReferenceDescription::setNodeId(const QString &nodeId)
+void QOpcUaReferenceDescription::setTargetNodeId(const QOpcUa::QExpandedNodeId &nodeId)
{
- d_ptr->nodeId = nodeId;
+ d_ptr->targetNodeId = nodeId;
}
/*!
- Returns the reference type of the node.
+ Returns the reference type id of the node.
*/
-QOpcUa::ReferenceTypeId QOpcUaReferenceDescription::refType() const
+QString QOpcUaReferenceDescription::refTypeId() const
{
- return d_ptr->refType;
+ return d_ptr->refTypeId;
}
/*!
- Sets the reference type of the node to \a refType.
+ Sets the reference type id of the node to \a refTypeId.
+
+ \sa QOpcUa::nodeIdFromReferenceType()
*/
-void QOpcUaReferenceDescription::setRefType(QOpcUa::ReferenceTypeId refType)
+void QOpcUaReferenceDescription::setRefTypeId(const QString &refTypeId)
{
- d_ptr->refType = refType;
+ d_ptr->refTypeId = refTypeId;
}
QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuareferencedescription.h b/src/opcua/client/qopcuareferencedescription.h
index 6344ead..95fa6ae 100644
--- a/src/opcua/client/qopcuareferencedescription.h
+++ b/src/opcua/client/qopcuareferencedescription.h
@@ -44,7 +44,6 @@
QT_BEGIN_NAMESPACE
class QOpcUaReferenceDescriptionPrivate;
-
class Q_OPCUA_EXPORT QOpcUaReferenceDescription
{
public:
@@ -54,16 +53,20 @@ public:
~QOpcUaReferenceDescription();
- QOpcUa::ReferenceTypeId refType() const;
- void setRefType(QOpcUa::ReferenceTypeId refType);
- QString nodeId() const;
- void setNodeId(const QString &nodeId);
+ QString refTypeId() const;
+ void setRefTypeId(const QString &refTypeId);
+ QOpcUa::QExpandedNodeId targetNodeId() const;
+ void setTargetNodeId(const QOpcUa::QExpandedNodeId &targetNodeId);
QOpcUa::QQualifiedName browseName() const;
void setBrowseName(const QOpcUa::QQualifiedName &browseName);
QOpcUa::QLocalizedText displayName() const;
void setDisplayName(const QOpcUa::QLocalizedText &displayName);
QOpcUa::NodeClass nodeClass() const;
void setNodeClass(QOpcUa::NodeClass nodeClass);
+ void setIsForwardReference(bool isForwardReference);
+ bool isForwardReference() const;
+ void setTypeDefinition(const QOpcUa::QExpandedNodeId &typeDefinition);
+ QOpcUa::QExpandedNodeId typeDefinition() const;
private:
QSharedDataPointer<QOpcUaReferenceDescriptionPrivate> d_ptr;
diff --git a/src/opcua/client/qopcuatype.cpp b/src/opcua/client/qopcuatype.cpp
index 93ec888..1416a26 100644
--- a/src/opcua/client/qopcuatype.cpp
+++ b/src/opcua/client/qopcuatype.cpp
@@ -36,6 +36,8 @@
#include "qopcuatype.h"
+#include <QMetaEnum>
+#include <QRegularExpression>
#include <QUuid>
QT_BEGIN_NAMESPACE
@@ -135,6 +137,71 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ \enum QOpcUa::WriteMaskBit
+
+ This enum contains all possible bits for the WriteMask and UserWriteMask node attributes
+ defined in OPC-UA part 3, Tabe 3.
+
+ \value None No attribute is writable.
+ \value AccessLevel The AccessLevel attribute is writable.
+ \value ArrayDimensions The ArrayDimensions attribute is writable.
+ \value BrowseName The BrowseName attribute is writable.
+ \value ContainsNoLoops The ContainsNoLoops attribute is writable.
+ \value DataType The DataType attribute is writable.
+ \value Description The Description attribute is writable.
+ \value DisplayName The DisplayName attribute is writable.
+ \value EventNotifier The EventNotifier attribute is writable.
+ \value Executable The Executable attribute is writable.
+ \value Historizing The Historizing attribute is writable.
+ \value InverseName The InverseName attribute is writable.
+ \value IsAbstract The IsAbstract attribute is writable.
+ \value MinimumSamplingInterval The MinimumSamplingInterval attribute is writable.
+ \value NodeClass The NodeClass attribute is writable.
+ \value NodeId The NodeId attribute is writable.
+ \value Symmetric The Symmetric attribute is writable.
+ \value UserAccessLevel The UserAccessLevel attribute is writable.
+ \value UserExecutable The UserExecutable attribute is writable.
+ \value UserWriteMask The UserWriteMask attribute is writable.
+ \value ValueRank The ValueRank attribute is writable.
+ \value WriteMask The WriteMask attribute is writable.
+ \value ValueForVariableType The Value attribute of a variable type is writable.
+*/
+
+/*!
+ \enum QOpcUa::AccessLevelBit
+
+ This enum contains all possible bits for the AccessLevel and UserAccessLevel node attributes
+ defined in OPC-UA part 3, Table 8.
+
+ \value None No read access to the Value attribute is permitted.
+ \value CurrentRead The current value can be read.
+ \value CurrentWrite The current value can be written.
+ \value HistoryRead The history of the value is readable.
+ \value HistoryWrite The history of the value is writable.
+ \value SemanticChange The property variable generates SemanticChangeEvents.
+ \value StatusWrite The status code of the value is writable.
+ \value TimestampWrite The SourceTimestamp is writable.
+*/
+
+/*!
+ \enum QOpcUa::EventNotifierBit
+
+ This enum contains all possible bits for the EventNotifier node attribute
+ defined in OPC-UA part 3, Table 6.
+
+ \value None The node can't be used to interact with events.
+ \value SubscribeToEvents A client can subscribe to events.
+ \value HistoryRead A client can read the event history.
+ \value HistoryWrite A client can write the event history.
+*/
+
+/*!
+ \fn inline uint QOpcUa::qHash(const QOpcUa::NodeAttribute& attr)
+
+ Returns a \l QHash key for \a attr.
+*/
+
+/*!
\enum QOpcUa::Types
Enumerates the types supported by Qt OPC UA.
@@ -154,8 +221,8 @@ QT_BEGIN_NAMESPACE
\value Byte
\value SByte
\value ByteString
- \value XmlElement \warning Currently not supported by the FreeOPCUA backend
- \value NodeId \warning Currently not supported by the FreeOPCUA backend
+ \value XmlElement
+ \value NodeId
\value Guid
\value QualifiedName A name qualified by an OPC UA namespace index.
\value StatusCode
@@ -166,6 +233,8 @@ QT_BEGIN_NAMESPACE
\value DoubleComplexNumber The OPC UA DoubleComplexNumber type.
\value AxisInformation Information about an axis.
\value XV A float value with a double precision position on an axis.
+ \value ExpandedNodeId A node id with additional namespace URI and server index.
+ \value Argument The OPC UA Argument type.
\value Undefined
*/
@@ -438,41 +507,112 @@ bool QOpcUa::isSuccessStatus(QOpcUa::UaStatusCode statusCode)
/*!
\class QOpcUa::QQualifiedName
\inmodule QtOpcUa
- \brief The OPC UA QualifiedName type
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA QualifiedName type.
This is the Qt OPC UA representation for the OPC UA QualifiedName type defined in OPC-UA part 3, 8.3.
A QualifiedName is a name qualified by a namespace index. The namespace index corresponds to an entry in the server's namespace array.
QualifiedName is mainly used to represent the BrowseName attribute of a node.
*/
+class QOpcUa::QQualifiedNameData : public QSharedData
+{
+public:
+ QString name;
+ quint16 namespaceIndex{0}; //OPC UA part 4, page 116: a string is converted to a qualified name by setting the namespace index to 0.
+};
+
+QOpcUa::QQualifiedName::QQualifiedName()
+ : data(new QOpcUa::QQualifiedNameData)
+{
+}
+
/*!
- \fn QOpcUa::QQualifiedName::QQualifiedName(quint16 p_namespaceIndex, const QString &p_name)
+ Constructs a qualified name from \a rhs.
+*/
+QOpcUa::QQualifiedName::QQualifiedName(const QOpcUa::QQualifiedName &rhs)
+ : data(rhs.data)
+{
+}
- Constructs an instance of QQualifiedName with the namespace index given in \a p_namespaceIndex and the name given in \a p_name.
+/*!
+ Constructs a qualified name with namespace index \a namespaceIndex and the name \a name.
*/
+QOpcUa::QQualifiedName::QQualifiedName(quint16 namespaceIndex, const QString &name)
+ : data(new QOpcUa::QQualifiedNameData)
+{
+ data->namespaceIndex = namespaceIndex;
+ data->name = name;
+}
/*!
- \fn bool QOpcUa::QQualifiedName::operator==(const QQualifiedName &other) const
+ Returns \c true if this qualified name has the same value as \a rhs.
+*/
+bool QOpcUa::QQualifiedName::operator==(const QOpcUa::QQualifiedName &rhs) const
+{
+ return data->namespaceIndex == rhs.namespaceIndex() &&
+ data->name == rhs.name();
+}
+
+/*!
+ Converts this qualified name to \l QVariant.
+*/
+QOpcUa::QQualifiedName::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
- Returns \c true if this QQualifiedName has the same value as \a other.
+/*!
+ Sets the values from \a rhs in this qualified name.
*/
+QOpcUa::QQualifiedName &QOpcUa::QQualifiedName::operator=(const QOpcUa::QQualifiedName &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUa::QQualifiedName::~QQualifiedName()
+{
+}
/*!
- \variable QOpcUa::QQualifiedName::namespaceIndex
+ Returns the namespace index.
+*/
+quint16 QOpcUa::QQualifiedName::namespaceIndex() const
+{
+ return data->namespaceIndex;
+}
- The namespace index of the QQualifiedName.
+/*!
+ Sets the namespace index to \a namespaceIndex.
*/
+void QOpcUa::QQualifiedName::setNamespaceIndex(quint16 namespaceIndex)
+{
+ data->namespaceIndex = namespaceIndex;
+}
/*!
- \variable QOpcUa::QQualifiedName::name
+ Returns the name.
+*/
+QString QOpcUa::QQualifiedName::name() const
+{
+ return data->name;
+}
- The name string of the QQualifiedName.
+/*!
+ Sets the name to \a name.
*/
+void QOpcUa::QQualifiedName::setName(const QString &name)
+{
+ data->name = name;
+}
/*!
\class QOpcUa::QLocalizedText
\inmodule QtOpcUa
- \brief The OPC UA LocalizedText type
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA LocalizedText type.
This is the Qt OPC UA representation for the OPC UA LocalizedText type defined in OPC-UA part 3, 8.5.
A LocalizedText value contains a text string with associated locale information in a second string (e. g. "en" or "en-US").
@@ -482,28 +622,121 @@ bool QOpcUa::isSuccessStatus(QOpcUa::UaStatusCode statusCode)
*/
/*!
- \fn QOpcUa::QLocalizedText::QLocalizedText(const QString &p_locale, const QString &p_text)
+ \qmltype LocalizedText
+ \inqmlmodule QtOpcUa
+ \brief Contains a text with associated locale.
+ \since QtOpcUa 5.12
- Constructs an instance of QLocalizedText with the locale given in \a p_locale and the text given in \a p_text.
+ The two members of this type contain the actual text and the locale of the text.
*/
/*!
- \fn bool QOpcUa::QLocalizedText::operator==(const QLocalizedText &other) const
+ \qmlproperty string LocalizedText::text
- Returns \c true if this QLocalizedText has the same value as \a other.
+ Textual content.
*/
/*!
- \variable QOpcUa::QLocalizedText::text
+ \qmlproperty string LocalizedText::locale
- The text string of the QLocalizedText.
+ Locale of the contained text.
+ This has to be in a modified ISO standard notation, for example \c en-US.
+ See OPC UA specification part 3, 8.4 for details.
*/
+class QOpcUa::QLocalizedTextData : public QSharedData
+{
+public:
+ QString locale;
+ QString text;
+};
+
+QOpcUa::QLocalizedText::QLocalizedText()
+ : data(new QOpcUa::QLocalizedTextData)
+{
+}
+
/*!
- \variable QOpcUa::QLocalizedText::locale
+ Constructs a localized text from \a rhs.
+*/
+QOpcUa::QLocalizedText::QLocalizedText(const QOpcUa::QLocalizedText &rhs)
+ : data(rhs.data)
+{
+}
- The locale of the QLocalizedText.
+/*!
+ Constructs a localized text with the locale \a locale and the text \a text.
+*/
+QOpcUa::QLocalizedText::QLocalizedText(const QString &locale, const QString &text)
+ : data(new QOpcUa::QLocalizedTextData)
+{
+ data->locale = locale;
+ data->text = text;
+}
+
+/*!
+ Sets the values from \a rhs in this localized text.
+*/
+QOpcUa::QLocalizedText &QOpcUa::QLocalizedText::operator=(const QOpcUa::QLocalizedText &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Returns \c true if this localized text has the same value as \a rhs.
+*/
+bool QOpcUa::QLocalizedText::operator==(const QOpcUa::QLocalizedText &rhs) const
+{
+ return data->locale == rhs.locale() &&
+ data->text == rhs.text();
+}
+
+/*!
+ Converts this localized text to \l QVariant.
+*/
+QOpcUa::QLocalizedText::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
+
+QOpcUa::QLocalizedText::~QLocalizedText()
+{
+}
+
+/*!
+ Returns the text.
+*/
+QString QOpcUa::QLocalizedText::text() const
+{
+ return data->text;
+}
+
+/*!
+ Sets the text to \a text.
+
+*/
+void QOpcUa::QLocalizedText::setText(const QString &text)
+{
+ data->text = text;
+}
+
+/*!
+ Returns the locale.
+*/
+QString QOpcUa::QLocalizedText::locale() const
+{
+ return data->locale;
+}
+
+/*!
+ Sets the locale to \a locale.
*/
+void QOpcUa::QLocalizedText::setLocale(const QString &locale)
+{
+ data->locale = locale;
+}
static bool isNodeError(QOpcUa::UaStatusCode statusCode)
{
@@ -646,127 +879,580 @@ QString QOpcUa::nodeIdFromInteger(quint16 ns, quint32 identifier)
}
/*!
+ Creates a node id string for the reference type id \a referenceType.
+*/
+QString QOpcUa::nodeIdFromReferenceType(QOpcUa::ReferenceTypeId referenceType)
+{
+ return QStringLiteral("ns=0;i=%1").arg(static_cast<quint32>(referenceType));
+}
+
+/*!
+ Splits the node id string \a nodeIdString in its components.
+ The namespace index of the node id will be copied into \a nsIndex.
+ The identifier string is copied into \a identifier and the identifier type
+ (i, s, g, b) is copied into \a identifierType.
+
+ Returns \c true if the node id could be split successfully.
+
+ For example, "ns=1;s=MyString" is split into 1, 's' and "MyString".
+ If no namespace index is given, ns=0 is assumed.
+*/
+bool QOpcUa::nodeIdStringSplit(const QString &nodeIdString, quint16 *nsIndex, QString *identifier, char *identifierType)
+{
+ quint16 namespaceIndex = 0;
+
+ QStringList components = nodeIdString.split(QLatin1String(";"));
+
+ if (components.size() > 2)
+ return false;
+
+ if (components.size() == 2 && components.at(0).contains(QRegularExpression(QLatin1String("^ns=[0-9]+")))) {
+ bool success = false;
+ uint ns = components.at(0).midRef(3).toString().toUInt(&success);
+ if (!success || ns > (std::numeric_limits<quint16>::max)())
+ return false;
+ namespaceIndex = ns;
+ }
+
+ if (components.last().size() < 3)
+ return false;
+
+ if (!components.last().contains(QRegularExpression(QLatin1String("^[isgb]="))))
+ return false;
+
+ if (nsIndex)
+ *nsIndex = namespaceIndex;
+ if (identifier)
+ *identifier = components.last().midRef(2).toString();
+ if (identifierType)
+ *identifierType = components.last().at(0).toLatin1();
+
+ return true;
+}
+
+/*!
+ Returns \c true if the two node ids \a first and \a second have the same namespace index and identifier.
+ A node id string without a namespace index is assumed to be in namespace 0.
+*/
+bool QOpcUa::nodeIdEquals(const QString &first, const QString &second)
+{
+ if (first.startsWith(QLatin1String("ns=0;")) && !second.startsWith(QLatin1String("ns=")))
+ return first.midRef(5) == second;
+ else if (second.startsWith(QLatin1String("ns=0;")) && !first.startsWith(QLatin1String("ns=")))
+ return second.midRef(5) == first;
+ else
+ return first == second;
+}
+
+/*!
+ Returns a node id string for the namespace 0 identifier \a id.
+*/
+QString QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0 id)
+{
+ return QStringLiteral("ns=0;i=%1").arg(quint32(id));
+}
+
+/*!
+ Returns the enum value from \l QOpcUa::NodeIds::Namespace0 for \a nodeId.
+
+ If the node id is not in namespace 0 or doesn't have a numeric
+ identifier which is part of the OPC Foundation's NodeIds.csv file,
+ \l {QOpcUa::NodeIds::Namespace0} {Unknown} is returned.
+
+ If Qt OPC UA has been configured with -no-feature-ns0idnames,
+ the check if the numeric identifier is part of the NodeIds.csv
+ file is omitted. If the node id is in namespace 0 and has a
+ numeric identifier, the identifier is returned regardless if it
+ is part of the \l QOpcUa::NodeIds::Namespace0 enum.
+*/
+QOpcUa::NodeIds::Namespace0 QOpcUa::namespace0IdFromNodeId(const QString &nodeId)
+{
+ if (!nodeId.startsWith(QLatin1String("ns=0;i=")))
+ return QOpcUa::NodeIds::Namespace0::Unknown;
+
+ QStringRef sr = nodeId.midRef(7);
+
+ bool ok = false;
+ quint32 identifier = sr.toUInt(&ok);
+
+ if (!ok)
+ return QOpcUa::NodeIds::Namespace0::Unknown;
+
+#ifndef QT_OPCUA_NO_NS0IDNAMES
+ if (!QMetaEnum::fromType<QOpcUa::NodeIds::Namespace0>().valueToKey(identifier))
+ return QOpcUa::NodeIds::Namespace0::Unknown;
+#endif
+
+ return QOpcUa::NodeIds::Namespace0(identifier);
+}
+
+/*!
+ Returns the name of the namespace 0 node id \a id.
+
+ If \a id is unknown or Qt OPC UA has been configured with -no-feature-ns0idnames,
+ an empty string is returned.
+*/
+QString QOpcUa::namespace0IdName(QOpcUa::NodeIds::Namespace0 id)
+{
+#ifdef QT_OPCUA_NO_NS0IDNAMES
+ Q_UNUSED(id);
+ return QString();
+#else
+ if (id == QOpcUa::NodeIds::Namespace0::Unknown)
+ return QString();
+ return QString::fromUtf8(QMetaEnum::fromType<QOpcUa::NodeIds::Namespace0>().valueToKey(quint32(id)));
+#endif
+}
+
+/*!
\class QOpcUa::QRange
\inmodule QtOpcUa
- \brief The OPC UA Range type
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA Range type.
This is the Qt OPC UA representation for the OPC UA Range type defined in OPC-UA part 8, 5.6.2.
It consists of two double values which mark minimum and maximum of the range.
Ranges are mostly used to store information about acceptable values for a node.
*/
+class QOpcUa::QRangeData : public QSharedData
+{
+public:
+ double low{0};
+ double high{0};
+};
+
+QOpcUa::QRange::QRange()
+ : data(new QOpcUa::QRangeData)
+{
+}
+
/*!
- \variable QOpcUa::QRange::low
- The minimum value of the range.
+ Constructs a range from \a rhs.
*/
+QOpcUa::QRange::QRange(const QOpcUa::QRange &rhs)
+ : data(rhs.data)
+{
+}
/*!
- \variable QOpcUa::QRange::high
- The maximum value of the range.
+ Constructs a range with low value \a low and high value \a high.
*/
+QOpcUa::QRange::QRange(double low, double high)
+ : data(new QOpcUa::QRangeData)
+{
+ data->low = low;
+ data->high = high;
+}
/*!
- \fn bool QOpcUa::QRange::operator==(const QOpcUa::QRange &other) const
- Returns \c true if this QRange has the same value as \a other.
+ Sets the values from \a rhs in this range.
*/
+QOpcUa::QRange &QOpcUa::QRange::operator=(const QOpcUa::QRange &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Returns \c true if this range has the same value as \a rhs.
+*/
+bool QOpcUa::QRange::operator==(const QOpcUa::QRange &rhs) const
+{
+ return data->low == rhs.low() &&
+ data->high == rhs.high();
+}
+
+/*!
+ Converts this range to \l QVariant.
+*/
+QOpcUa::QRange::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
+
+QOpcUa::QRange::~QRange()
+{
+}
+
+/*!
+ Returns the high value of the range.
+*/
+double QOpcUa::QRange::high() const
+{
+ return data->high;
+}
+
+/*!
+ Sets the high value of the range to \a high.
+*/
+void QOpcUa::QRange::setHigh(double high)
+{
+ data->high = high;
+}
+
+/*!
+ Returns the low value of the range.
+*/
+double QOpcUa::QRange::low() const
+{
+ return data->low;
+}
+
+/*!
+ Sets the low value of the range to \a low.
+*/
+void QOpcUa::QRange::setLow(double low)
+{
+ data->low = low;
+}
/*!
\class QOpcUa::QEUInformation
\inmodule QtOpcUa
- \brief The OPC UA EURange type
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA EURange type.
This is the Qt OPC UA representation for the OPC UA EUInformation type defined in OPC-UA part 8, 5.6.3.
EUInformation values contain information about units and are mostly used as property of a node with a numeric value attribute.
The information can e. g. be used to add text and tooltips to GUI elements.
*/
+class QOpcUa::QEUInformationData : public QSharedData
+{
+public:
+ QString namespaceUri;
+ qint32 unitId{0};
+ QOpcUa::QLocalizedText displayName;
+ QOpcUa::QLocalizedText description;
+};
+
+QOpcUa::QEUInformation::QEUInformation()
+ : data(new QOpcUa::QEUInformationData)
+{
+}
+
+/*!
+ Constructs a EUinformation from \a rhs.
+*/
+QOpcUa::QEUInformation::QEUInformation(const QOpcUa::QEUInformation &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this EUinformation.
+*/
+QOpcUa::QEUInformation &QOpcUa::QEUInformation::operator=(const QOpcUa::QEUInformation &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUa::QEUInformation::~QEUInformation()
+{
+}
+
/*!
- \fn QOpcUa::QEUInformation::QEUInformation(QString p_namespaceUri, qint32 p_unitId, QLocalizedText p_displayName, QLocalizedText p_description)
+ Returns the description of the unit, for example \e {degree Celsius}.
+*/
+QOpcUa::QLocalizedText QOpcUa::QEUInformation::description() const
+{
+ return data->description;
+}
- Constructs a QEUInformation with namespace URI \a p_namespaceUri, unit id \a p_unitId, display name \a p_displayName
- and description \a p_description.
+/*!
+ Sets the description if the unit to \a description.
*/
+void QOpcUa::QEUInformation::setDescription(const QOpcUa::QLocalizedText &description)
+{
+ data->description = description;
+}
/*!
- \fn bool QOpcUa::QEUInformation::operator==(const QEUInformation &other) const
- Returns \c true if this QEUInformation has the same value as \a other.
+ Returns the display name of the unit, for example \e {°C}.
*/
+QOpcUa::QLocalizedText QOpcUa::QEUInformation::displayName() const
+{
+ return data->displayName;
+}
/*!
- \variable QOpcUa::QEUInformation::namespaceUri
+ Sets the display name of the unit to \a displayName.
+*/
+void QOpcUa::QEUInformation::setDisplayName(const QOpcUa::QLocalizedText &displayName)
+{
+ data->displayName = displayName;
+}
- The namespace URI of the unit.
+/*!
+ Returns the machine-readable identifier for the unit.
*/
+qint32 QOpcUa::QEUInformation::unitId() const
+{
+ return data->unitId;
+}
/*!
- \variable QOpcUa::QEUInformation::unitId
+ Sets the machine-readable identifier for the unit to \a unitId.
+*/
+void QOpcUa::QEUInformation::setUnitId(qint32 unitId)
+{
+ data->unitId = unitId;
+}
- A machine-readable identifier for the unit.
+/*!
+ Returns the namespace URI of the unit.
*/
+QString QOpcUa::QEUInformation::namespaceUri() const
+{
+ return data->namespaceUri;
+}
/*!
- \variable QOpcUa::QEUInformation::displayName
+ Sets the namespace URI of the unit to \a namespaceUri.
+*/
+void QOpcUa::QEUInformation::setNamespaceUri(const QString &namespaceUri)
+{
+ data->namespaceUri = namespaceUri;
+}
- The displayName of the unit, e. g. °C
+/*!
+ Constructs a EUinformation with namespace URI \a namespaceUri, unit id \a unitId,
+ display name \a displayName and description \a description.
*/
+QOpcUa::QEUInformation::QEUInformation(const QString &namespaceUri, qint32 unitId, const QOpcUa::QLocalizedText &displayName,
+ const QOpcUa::QLocalizedText &description)
+ : data(new QOpcUa::QEUInformationData)
+{
+ data->namespaceUri = namespaceUri;
+ data->unitId = unitId;
+ data->displayName = displayName;
+ data->description = description;
+}
/*!
- \variable QOpcUa::QEUInformation::description
+ Returns \c true if this EUinformation has the same value as \a rhs.
+*/
+bool QOpcUa::QEUInformation::operator==(const QOpcUa::QEUInformation &rhs) const
+{
+ return data->namespaceUri == rhs.namespaceUri() &&
+ data->unitId == rhs.unitId() &&
+ data->displayName == rhs.displayName() &&
+ data->description == rhs.description();
+}
- The description of the unit, e. g. "degree Celsius".
+/*!
+ Converts this EUinformation to \l QVariant.
*/
+QOpcUa::QEUInformation::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
/*!
\class QOpcUa::QComplexNumber
\inmodule QtOpcUa
- \brief The OPC UA ComplexNumber type
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA ComplexNumber type.
The ComplexNumberType defined in OPC-UA part 8, 5.6.4.
It stores a complex number with float precision.
*/
+class QOpcUa::QComplexNumberData : public QSharedData
+{
+public:
+ float real{0};
+ float imaginary{0};
+};
+
+QOpcUa::QComplexNumber::QComplexNumber()
+ : data(new QOpcUa::QComplexNumberData)
+{
+}
+
+QOpcUa::QComplexNumber::QComplexNumber(const QOpcUa::QComplexNumber &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this complex number.
+*/
+QOpcUa::QComplexNumber &QOpcUa::QComplexNumber::operator=(const QOpcUa::QComplexNumber &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUa::QComplexNumber::~QComplexNumber()
+{
+
+}
+
+/*!
+ Returns the imaginary part of the complex number.
+*/
+float QOpcUa::QComplexNumber::imaginary() const
+{
+ return data->imaginary;
+}
+
/*!
- \variable QOpcUa::QComplexNumber::real
+ Sets the imaginary part of the complex number to \a imaginary.
+*/
+void QOpcUa::QComplexNumber::setImaginary(float imaginary)
+{
+ data->imaginary = imaginary;
+}
- The real part of the value.
+/*!
+ Returns the real part of the complex number.
*/
+float QOpcUa::QComplexNumber::real() const
+{
+ return data->real;
+}
/*!
- \variable QOpcUa::QComplexNumber::imaginary
+ Sets the real part of the complex number to \a real.
+*/
+void QOpcUa::QComplexNumber::setReal(float real)
+{
+ data->real = real;
+}
- The imaginary part of the value.
+/*!
+ Constructs a complex number with real part \a real and imaginary part \a imaginary.
*/
+QOpcUa::QComplexNumber::QComplexNumber(float real, float imaginary)
+ : data(new QOpcUa::QComplexNumberData)
+{
+ data->real = real;
+ data->imaginary = imaginary;
+}
/*!
- \fn bool QOpcUa::QComplexNumber::operator==(const QOpcUa::QComplexNumber &other) const
- Returns \c true if this QComplexNumber has the same value as \a other.
+ Returns \c true if this complex number has the same value as \a rhs.
*/
+bool QOpcUa::QComplexNumber::operator==(const QOpcUa::QComplexNumber &rhs) const
+{
+ return qFloatDistance(data->real, rhs.real()) == 0 &&
+ qFloatDistance(data->imaginary, rhs.imaginary()) == 0;
+}
+
+/*!
+ Converts this complex number to \l QVariant.
+*/
+QOpcUa::QComplexNumber::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
/*!
\class QOpcUa::QDoubleComplexNumber
\inmodule QtOpcUa
- \brief The OPC UA DoubleComplexNumber type
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA DoubleComplexNumber type.
The DoubleComplexNumberType defined in OPC-UA part 8, 5.6.5.
It stores a complex number with double precision.
*/
+class QOpcUa::QDoubleComplexNumberData : public QSharedData
+{
+public:
+ double real{0};
+ double imaginary{0};
+};
+
+QOpcUa::QDoubleComplexNumber::QDoubleComplexNumber()
+ : data(new QOpcUa::QDoubleComplexNumberData)
+{
+}
+
+QOpcUa::QDoubleComplexNumber::QDoubleComplexNumber(const QOpcUa::QDoubleComplexNumber &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this double complex number.
+*/
+QOpcUa::QDoubleComplexNumber &QOpcUa::QDoubleComplexNumber::operator=(const QOpcUa::QDoubleComplexNumber &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUa::QDoubleComplexNumber::~QDoubleComplexNumber()
+{
+
+}
+
+/*!
+ Returns the imaginary part of the complex number.
+*/
+double QOpcUa::QDoubleComplexNumber::imaginary() const
+{
+ return data->imaginary;
+}
+
+/*!
+ Sets the imaginary part of the complex number to \a imaginary.
+*/
+void QOpcUa::QDoubleComplexNumber::setImaginary(double imaginary)
+{
+ data->imaginary = imaginary;
+}
+
/*!
- \variable QOpcUa::QDoubleComplexNumber::real
+ Returns the real part of the complex number.
+*/
+double QOpcUa::QDoubleComplexNumber::real() const
+{
+ return data->real;
+}
- The real part of the value.
+/*!
+ Sets the real part of the complex number to \a real.
*/
+void QOpcUa::QDoubleComplexNumber::setReal(double real)
+{
+ data->real = real;
+}
/*!
- \variable QOpcUa::QDoubleComplexNumber::imaginary
+ Constructs a double complex number with real part \a real and imaginary part \a imaginary.
+*/
+QOpcUa::QDoubleComplexNumber::QDoubleComplexNumber(double real, double imaginary)
+ : data(new QOpcUa::QDoubleComplexNumberData)
+{
+ data->real = real;
+ data->imaginary = imaginary;
+}
- The imaginary part of the value.
+/*!
+ Returns \c true if this double complex number has the same value as \a rhs.
*/
+bool QOpcUa::QDoubleComplexNumber::operator==(const QOpcUa::QDoubleComplexNumber &rhs) const
+{
+ return qFloatDistance(data->real, rhs.real()) == 0 &&
+ qFloatDistance(data->imaginary, rhs.imaginary()) == 0;
+}
/*!
- \fn bool QOpcUa::QDoubleComplexNumber::operator==(const QOpcUa::QDoubleComplexNumber &other) const
- Returns \c true if this QDoubleComplexNumber has the same value as \a other.
+ Converts this double complex number to \l QVariant.
*/
+QOpcUa::QDoubleComplexNumber::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
/*!
\enum QOpcUa::AxisScale
@@ -781,7 +1467,8 @@ QString QOpcUa::nodeIdFromInteger(quint16 ns, quint32 identifier)
/*!
\class QOpcUa::QAxisInformation
\inmodule QtOpcUa
- \brief The OPC UA AxisInformation type
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA AxisInformation type.
This is the Qt OPC UA representation for the OPC UA AxisInformation type defined in OPC-UA part 8, 5.6.6.
It contains information about an axis which can be used for multiple purposes. A common use case could
@@ -789,83 +1476,2622 @@ QString QOpcUa::nodeIdFromInteger(quint16 ns, quint32 identifier)
range, axisScaleType and axisSteps provide the scaling and the axis ranges of the plot.
*/
+class QOpcUa::QAxisInformationData : public QSharedData
+{
+public:
+ QOpcUa::QEUInformation engineeringUnits;
+ QOpcUa::QRange eURange;
+ QOpcUa::QLocalizedText title;
+ QOpcUa::AxisScale axisScaleType{QOpcUa::AxisScale::Linear};
+ QVector<double> axisSteps;
+};
+
+QOpcUa::QAxisInformation::QAxisInformation()
+ : data(new QOpcUa::QAxisInformationData)
+{
+}
+
/*!
- \fn bool QOpcUa::QAxisInformation::operator==(const QAxisInformation &other) const
- Returns \c true if this QAxisInformation has the same value as \a other.
+ Constructs axis information from \a rhs.
*/
+QOpcUa::QAxisInformation::QAxisInformation(const QOpcUa::QAxisInformation &rhs)
+ : data(rhs.data)
+{
+}
/*!
- \fn QOpcUa::QAxisInformation::QAxisInformation(QEUInformation p_engineeringUnits, QRange p_eURange, QLocalizedText p_title, AxisScale p_axisScaleType, QVector<double> p_axisSteps)
-
- Constructs a QAxisInformation with engineering units \a p_engineeringUnits, range \a p_eURange, title \a p_title,
- scaling \a p_axisScaleType and axis steps \a p_axisSteps.
+ Sets the values from \a rhs in this axis information.
*/
+QOpcUa::QAxisInformation &QOpcUa::QAxisInformation::operator=(const QOpcUa::QAxisInformation &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
-/*!
- \variable QOpcUa::QAxisInformation::engineeringUnits
+QOpcUa::QAxisInformation::~QAxisInformation()
+{
+}
- The engineering units of this axis.
+/*!
+ Returns the lower and upper values of this axis.
*/
+QOpcUa::QRange QOpcUa::QAxisInformation::eURange() const
+{
+ return data->eURange;
+}
/*!
- \variable QOpcUa::QAxisInformation::eURange
-
- The lower and upper values of this axis.
+ Sets the lower and upper values of this axis to \a eURange.
*/
+void QOpcUa::QAxisInformation::setEURange(const QOpcUa::QRange &eURange)
+{
+ data->eURange = eURange;
+}
/*!
- \variable QOpcUa::QAxisInformation::title
-
- The title of this axis.
+ Returns the title of this axis.
*/
+QOpcUa::QLocalizedText QOpcUa::QAxisInformation::title() const
+{
+ return data->title;
+}
/*!
- \variable QOpcUa::QAxisInformation::axisScaleType
+ Sets the title to \a title.
+*/
+void QOpcUa::QAxisInformation::setTitle(const QOpcUa::QLocalizedText &title)
+{
+ data->title = title;
+}
- The scaling of this axis, defined by QOpcUa::AxisScale.
+/*!
+ Returns the scaling of this axis, defined by \l QOpcUa::AxisScale.
*/
+QOpcUa::AxisScale QOpcUa::QAxisInformation::axisScaleType() const
+{
+ return data->axisScaleType;
+}
/*!
- \variable QOpcUa::QAxisInformation::axisSteps
+ Sets the axis scale type to \a axisScaleType.
+*/
+void QOpcUa::QAxisInformation::setAxisScaleType(QOpcUa::AxisScale axisScaleType)
+{
+ data->axisScaleType = axisScaleType;
+}
- Specific values for each axis step.
+/*!
+ Returns specific values for each axis step.
This value is empty if the points are equally distributed and the step size can be
calculated from the number of steps and the range.
If the steps are different for each point but constant over a longer time, there is an entry for
each data point.
*/
+QVector<double> QOpcUa::QAxisInformation::axisSteps() const
+{
+ return data->axisSteps;
+}
+
+/*!
+ Sets the axis steps to \a axisSteps.
+*/
+void QOpcUa::QAxisInformation::setAxisSteps(const QVector<double> &axisSteps)
+{
+ data->axisSteps = axisSteps;
+}
+
+/*!
+ Returns a reference to the axis steps.
+*/
+QVector<double> &QOpcUa::QAxisInformation::axisStepsRef()
+{
+ return data->axisSteps;
+}
+
+/*!
+ Returns the engineering units of this axis.
+*/
+QOpcUa::QEUInformation QOpcUa::QAxisInformation::engineeringUnits() const
+{
+ return data->engineeringUnits;
+}
+
+/*!
+ Sets the engineering units to \a engineeringUnits.
+*/
+void QOpcUa::QAxisInformation::setEngineeringUnits(const QOpcUa::QEUInformation &engineeringUnits)
+{
+ data->engineeringUnits = engineeringUnits;
+}
+
+/*!
+ Returns \c true if this axis information has the same value as \a rhs.
+*/
+bool QOpcUa::QAxisInformation::operator==(const QOpcUa::QAxisInformation &rhs) const
+{
+ return data->axisScaleType == rhs.axisScaleType() &&
+ data->axisSteps == rhs.axisSteps() &&
+ data->engineeringUnits == rhs.engineeringUnits() &&
+ data->eURange == rhs.eURange() &&
+ data->title == rhs.title();
+}
+
+/*!
+ Converts this axis information to \l QVariant.
+*/
+QOpcUa::QAxisInformation::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
+
+/*!
+ Constructs axis information with engineering units \a engineeringUnits,
+ range \a eURange, title \a title, scaling \a axisScaleType and axis steps \a axisSteps.
+*/
+QOpcUa::QAxisInformation::QAxisInformation(const QOpcUa::QEUInformation &engineeringUnits, const QOpcUa::QRange &eURange, const QOpcUa::QLocalizedText &title,
+ const QOpcUa::AxisScale &axisScaleType, const QVector<double> &axisSteps)
+ : data (new QOpcUa::QAxisInformationData)
+{
+ data->engineeringUnits = engineeringUnits;
+ data->eURange = eURange;
+ data->title = title;
+ data->axisScaleType = axisScaleType;
+ data->axisSteps = axisSteps;
+}
+
/*!
\class QOpcUa::QXValue
\inmodule QtOpcUa
- \brief The OPC UA XVType
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA XVType.
This is the Qt OPC UA representation for the OPC UA XVType type defined in OPC-UA part 8, 5.6.8.
This type is used to position values of float precision on an axis with double precision.
*/
+class QOpcUa::QXValueData : public QSharedData
+{
+public:
+ double x{0};
+ float value{0};
+};
+
+QOpcUa::QXValue::QXValue()
+ : data(new QOpcUa::QXValueData)
+{
+}
+
+/*!
+ Constructs an XValue from \a rhs.
+*/
+QOpcUa::QXValue::QXValue(const QOpcUa::QXValue &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Constructs an XValue with position \a x and value \a value.
+*/
+QOpcUa::QXValue::QXValue(double x, float value)
+ : data(new QOpcUa::QXValueData)
+{
+ data->x = x;
+ data->value = value;
+}
+
+/*!
+ Sets the values from \a rhs in this XValue.
+*/
+QOpcUa::QXValue &QOpcUa::QXValue::operator=(const QOpcUa::QXValue &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Returns \c true if this XValue has the same value as \a rhs.
+*/
+bool QOpcUa::QXValue::operator==(const QOpcUa::QXValue &rhs) const
+{
+ return qFloatDistance(data->x, rhs.x()) == 0 &&
+ qFloatDistance(data->value, rhs.value()) == 0;
+}
+
/*!
- \variable QOpcUa::QXValue::x
+ Converts this XValue to \l QVariant.
+*/
+QOpcUa::QXValue::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
- The position of the value on the axis.
+QOpcUa::QXValue::~QXValue()
+{
+}
+
+/*!
+ Returns the value for position x.
*/
+float QOpcUa::QXValue::value() const
+{
+ return data->value;
+}
/*!
- \variable QOpcUa::QXValue::value
+ Sets the value for position x to \a value.
+*/
+void QOpcUa::QXValue::setValue(float value)
+{
+ data->value = value;
+}
- The value for position x.
+/*!
+ Returns the position of the value on the axis.
*/
+double QOpcUa::QXValue::x() const
+{
+ return data->x;
+}
/*!
- \fn bool QOpcUa::QXValue::operator==(const QOpcUa::QXValue &other) const
- Returns \c true if this QXValue has the same value as \a other.
+ Sets the position of the value on the axis to \a x.
*/
+void QOpcUa::QXValue::setX(double x)
+{
+ data->x = x;
+}
/*!
- \fn inline uint QOpcUa::qHash(const QOpcUa::NodeAttribute& attr)
+ \class QOpcUa::QExpandedNodeId
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA ExpandedNodeId.
- Returns a \l QHash key for \a attr.
+ An expanded node id is a node id where the namespace index can be given as index or as a string URI.
+ A list of namespaces and their indices on the server is provided by \l QOpcUaClient::namespaceArray().
+*/
+
+class QOpcUa::QExpandedNodeIdData : public QSharedData
+{
+public:
+ quint32 serverIndex{0};
+ QString namespaceUri;
+ QString nodeId;
+};
+
+QOpcUa::QExpandedNodeId::QExpandedNodeId()
+ : data(new QOpcUa::QExpandedNodeIdData)
+{
+}
+
+/*!
+ Constructs an expanded node id from \a rhs.
+*/
+QOpcUa::QExpandedNodeId::QExpandedNodeId(const QOpcUa::QExpandedNodeId &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Constructs an expanded node id from node id string \a nodeId.
+*/
+QOpcUa::QExpandedNodeId::QExpandedNodeId(const QString &nodeId)
+ : data(new QOpcUa::QExpandedNodeIdData)
+{
+ data->nodeId = nodeId;
+}
+
+/*!
+ Constructs an expanded node id from namespace URI \a namespaceUri, node id string \a nodeId
+ and server index \a serverIndex.
+*/
+QOpcUa::QExpandedNodeId::QExpandedNodeId(const QString &namespaceUri, const QString &nodeId, quint32 serverIndex)
+ : data(new QOpcUa::QExpandedNodeIdData)
+{
+ data->namespaceUri = namespaceUri;
+ data->nodeId = nodeId;
+ data->serverIndex = serverIndex;
+}
+
+/*!
+ Sets the values from \a rhs in this expanded node id.
+*/
+QOpcUa::QExpandedNodeId &QOpcUa::QExpandedNodeId::operator=(const QOpcUa::QExpandedNodeId &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Returns \c true if this expanded node id has the same value as \a rhs.
+*/
+bool QOpcUa::QExpandedNodeId::operator==(const QOpcUa::QExpandedNodeId &rhs) const
+{
+ return data->namespaceUri == rhs.namespaceUri() &&
+ nodeIdEquals(data->nodeId, rhs.nodeId()) &&
+ data->serverIndex == rhs.serverIndex();
+}
+
+/*!
+ Converts this expanded node id to \l QVariant.
+*/
+QOpcUa::QExpandedNodeId::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
+
+QOpcUa::QExpandedNodeId::~QExpandedNodeId()
+{
+}
+
+/*!
+ Returns the index of the server containing the node. This index maps to an entry in the server's server table.
+*/
+quint32 QOpcUa::QExpandedNodeId::serverIndex() const
+{
+ return data->serverIndex;
+}
+
+/*!
+ Sets the server index to \a serverIndex.
+*/
+void QOpcUa::QExpandedNodeId::setServerIndex(quint32 serverIndex)
+{
+ data->serverIndex = serverIndex;
+}
+
+/*!
+ Returns the namespace URI of the node id. If this value is specified, the namespace index in
+ \l {QOpcUa::QExpandedNodeId::nodeId} {nodeId} is 0 and must be ignored.
+*/
+QString QOpcUa::QExpandedNodeId::namespaceUri() const
+{
+ return data->namespaceUri;
+}
+
+/*!
+ Sets the namespace URI to \a namespaceUri.
+*/
+void QOpcUa::QExpandedNodeId::setNamespaceUri(const QString &namespaceUri)
+{
+ data->namespaceUri = namespaceUri;
+}
+
+/*!
+ Returns the node id. If \l {QOpcUa::QExpandedNodeId::namespaceUri} {namespaceUri} is specified, the namespace index is invalid.
+*/
+QString QOpcUa::QExpandedNodeId::nodeId() const
+{
+ return data->nodeId;
+}
+
+/*!
+ Sets the node id to \a nodeId.
+*/
+void QOpcUa::QExpandedNodeId::setNodeId(const QString &nodeId)
+{
+ data->nodeId = nodeId;
+}
+
+/*!
+ \class QOpcUa::QRelativePathElement
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA RelativePathElement.
+
+ QRelativePathElement defines an element of a relative path on an OPC UA server.
+ This is needed for resolution of browse paths to node ids in \l QOpcUaNode::resolveBrowsePath().
+*/
+
+class QOpcUa::QRelativePathElementData : public QSharedData
+{
+public:
+ QString referenceTypeId;
+ bool isInverse{false};
+ bool includeSubtypes{false};
+ QOpcUa::QQualifiedName targetName;
+};
+
+/*!
+ Constructs a relative path element with both flags set to \c false.
+*/
+QOpcUa::QRelativePathElement::QRelativePathElement()
+ : data(new QOpcUa::QRelativePathElementData())
+{
+}
+
+/*!
+ Constructs a relative path element with targetName \a target, reference type node id \a refType and both flags set to \c false.
+*/
+QOpcUa::QRelativePathElement::QRelativePathElement(const QOpcUa::QQualifiedName &target, const QString &refType)
+ : data(new QOpcUa::QRelativePathElementData())
+{
+ data->referenceTypeId = refType;
+ data->targetName = target;
+}
+
+/*!
+ Constructs a relative path element with targetName \a target, \l QOpcUa::ReferenceTypeId \a refType and both flags set to \c false.
+*/
+QOpcUa::QRelativePathElement::QRelativePathElement(const QOpcUa::QQualifiedName &target, QOpcUa::ReferenceTypeId refType)
+ : data(new QOpcUa::QRelativePathElementData())
+{
+ data->referenceTypeId = QOpcUa::nodeIdFromReferenceType(refType);
+ data->targetName = target;
+}
+
+/*!
+ Constructs a relative path element from \a rhs.
+*/
+QOpcUa::QRelativePathElement::QRelativePathElement(const QOpcUa::QRelativePathElement &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Sets the values of \a rhs in this relative path element.
+*/
+QOpcUa::QRelativePathElement &QOpcUa::QRelativePathElement::operator=(const QOpcUa::QRelativePathElement &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Returns \c true if this relative path element has the same value as \a rhs.
+*/
+bool QOpcUa::QRelativePathElement::operator==(const QOpcUa::QRelativePathElement &rhs) const
+{
+ return data->includeSubtypes == rhs.includeSubtypes() &&
+ data->isInverse == rhs.isInverse() &&
+ data->referenceTypeId == rhs.referenceTypeId() &&
+ data->targetName == rhs.targetName();
+}
+
+QOpcUa::QRelativePathElement::~QRelativePathElement()
+{
+}
+
+/*!
+ Returns the qualified name of the reference's target.
+*/
+QOpcUa::QQualifiedName QOpcUa::QRelativePathElement::targetName() const
+{
+ return data->targetName;
+}
+
+/*!
+ Sets the target name to \a targetName, for example QOpcUa::QQualifiedName(0, "DataTypes").
+*/
+void QOpcUa::QRelativePathElement::setTargetName(const QOpcUa::QQualifiedName &targetName)
+{
+ data->targetName = targetName;
+}
+
+/*!
+ Returns the value of the includeSubtypes flag.
+*/
+bool QOpcUa::QRelativePathElement::includeSubtypes() const
+{
+ return data->includeSubtypes;
+}
+
+/*!
+ Sets the includeSubtypes flag to \a includeSubtypes.
+ If the flag is \c true, the lookup also follows references with subtypes of \l referenceTypeId().
+*/
+void QOpcUa::QRelativePathElement::setIncludeSubtypes(bool includeSubtypes)
+{
+ data->includeSubtypes = includeSubtypes;
+}
+
+/*!
+ Returns the value of the isInverse flag.
+*/
+bool QOpcUa::QRelativePathElement::isInverse() const
+{
+ return data->isInverse;
+}
+
+/*!
+ Sets the isInverse flag to \a isInverse.
+ If the flag is \c true, the lookup follows the reverse reference.
+*/
+void QOpcUa::QRelativePathElement::setIsInverse(bool isInverse)
+{
+ data->isInverse = isInverse;
+}
+
+/*!
+ Returns the type id of the reference connecting this node to the previous node.
+*/
+QString QOpcUa::QRelativePathElement::referenceTypeId() const
+{
+ return data->referenceTypeId;
+}
+
+/*!
+ Sets the reference type id to \a referenceTypeId.
+*/
+void QOpcUa::QRelativePathElement::setReferenceTypeId(const QString &referenceTypeId)
+{
+ data->referenceTypeId = referenceTypeId;
+}
+
+/*!
+ Sets the reference type id to \a referenceTypeId.
+*/
+void QOpcUa::QRelativePathElement::setReferenceTypeId(QOpcUa::ReferenceTypeId referenceTypeId)
+{
+ data->referenceTypeId = QOpcUa::nodeIdFromReferenceType(referenceTypeId);
+}
+
+/*!
+ \class QOpcUa::QBrowsePathTarget
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA BrowsePathTarget.
+
+ A BrowsePathTarget contains a target of a browse path and information about the completeness of the node id resolution.
+*/
+class QOpcUa::QBrowsePathTargetData : public QSharedData
+{
+public:
+ QOpcUa::QExpandedNodeId targetId;
+ quint32 remainingPathIndex{(std::numeric_limits<quint32>::max)()};
+};
+
+QOpcUa::QBrowsePathTarget::QBrowsePathTarget()
+ : data(new QOpcUa::QBrowsePathTargetData)
+{
+}
+
+/*!
+ Constructs a browse path target from \a rhs.
+*/
+QOpcUa::QBrowsePathTarget::QBrowsePathTarget(const QOpcUa::QBrowsePathTarget &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Sets the values of \a rhs in this browse path target.
+*/
+QOpcUa::QBrowsePathTarget &QOpcUa::QBrowsePathTarget::operator=(const QOpcUa::QBrowsePathTarget &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Returns \c true if this browse path target has the same value as \a rhs.
+*/
+bool QOpcUa::QBrowsePathTarget::operator==(const QOpcUa::QBrowsePathTarget &rhs) const
+{
+ return data->targetId == rhs.targetId() &&
+ data->remainingPathIndex == rhs.remainingPathIndex();
+}
+
+QOpcUa::QBrowsePathTarget::~QBrowsePathTarget()
+{
+}
+
+/*!
+ Returns the index of the first unprocessed element in the browse path.
+ If the path was followed to the end, remainingPathIndex has the maximum value of quint32.
+ \sa QOpcUa::QBrowsePathTarget::targetId()
+*/
+quint32 QOpcUa::QBrowsePathTarget::remainingPathIndex() const
+{
+ return data->remainingPathIndex;
+}
+
+/*!
+ Sets the remaining path index to \a remainingPathIndex.
+*/
+void QOpcUa::QBrowsePathTarget::setRemainingPathIndex(quint32 remainingPathIndex)
+{
+ data->remainingPathIndex = remainingPathIndex;
+}
+
+/*!
+ Returns \c true if the browse path has been fully resolved.
+*/
+bool QOpcUa::QBrowsePathTarget::isFullyResolved() const
+{
+ return (data->remainingPathIndex == (std::numeric_limits<quint32>::max)());
+}
+
+/*!
+ Returns the target of the last reference the server was able to follow.
+ If the reference leads to an external server, \e targetId is the id of the first node on that server.
+ \sa QOpcUa::QBrowsePathTarget::remainingPathIndex
+*/
+QOpcUa::QExpandedNodeId QOpcUa::QBrowsePathTarget::targetId() const
+{
+ return data->targetId;
+}
+
+/*!
+ Returns a reference to the target id.
+*/
+QOpcUa::QExpandedNodeId &QOpcUa::QBrowsePathTarget::targetIdRef()
+{
+ return data->targetId;
+}
+
+/*!
+ Sets the node id of the target node to \a targetId.
+*/
+void QOpcUa::QBrowsePathTarget::setTargetId(const QOpcUa::QExpandedNodeId &targetId)
+{
+ data->targetId = targetId;
+}
+
+/*!
+ \class QOpcUa::QContentFilterElement
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA ContentFilterElement.
+
+ A content filter element contains an operator and a list of operands.
+ There are four different operator types which contain literal values, references to
+ attributes of nodes or to other content filter elements.
+
+ A combination of one or more content filter elements makes a content filter which is used
+ by the server to filter data for the criteria defined by the content filter elements.
+ For example, the \c where clause of an event filter is a content filter which is used to decide
+ if a notification is generated for an event.
+*/
+
+/*!
+ \enum QContentFilterElement::FilterOperator
+
+ FilterOperator enumerates all possible operators for a ContentFilterElement that are specified in
+ OPC-UA part 4, Tables 115 and 116.
+
+ \value Equals
+ \value IsNull
+ \value GreaterThan
+ \value LessThan
+ \value GreaterThanOrEqual
+ \value LessThanOrEqual
+ \value Like
+ \value Not
+ \value Between
+ \value InList
+ \value And
+ \value Or
+ \value Cast
+ \value InView
+ \value OfType
+ \value RelatedTo
+ \value BitwiseAnd
+ \value BitwiseOr
+*/
+
+class QOpcUa::QContentFilterElementData : public QSharedData
+{
+public:
+ QOpcUa::QContentFilterElement::FilterOperator filterOperator;
+ QVector<QVariant> filterOperands;
+};
+
+QOpcUa::QContentFilterElement::QContentFilterElement()
+ : data(new QContentFilterElementData)
+{
+}
+
+/*!
+ Constructs a content filter element from \a rhs.
+*/
+QOpcUa::QContentFilterElement::QContentFilterElement(const QOpcUa::QContentFilterElement &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this content filter element.
+*/
+QOpcUa::QContentFilterElement &QOpcUa::QContentFilterElement::operator=(const QOpcUa::QContentFilterElement &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Returns \c true if this content filter element has the same value as \a rhs.
+*/
+bool QOpcUa::QContentFilterElement::operator==(const QOpcUa::QContentFilterElement &rhs) const
+{
+ return filterOperator() == rhs.filterOperator() && filterOperands() == rhs.filterOperands();
+}
+
+/*!
+ Converts this content filter element to \l QVariant.
+*/
+QOpcUa::QContentFilterElement::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
+
+/*!
+ Returns the operands of the filter element.
+*/
+QVector<QVariant> QOpcUa::QContentFilterElement::filterOperands() const
+{
+ return data->filterOperands;
+}
+
+/*!
+ Returns a reference to the filter operands.
+
+ \sa filterOperands()
+*/
+QVector<QVariant> &QOpcUa::QContentFilterElement::filterOperandsRef()
+{
+ return data->filterOperands;
+}
+
+/*!
+ Sets the filter operands for this content filter element to \a filterOperands.
+ Supported classes are \l QOpcUa::QElementOperand, \l QOpcUa::QLiteralOperand,
+ \l QOpcUa::QSimpleAttributeOperand and \l QOpcUa::QAttributeOperand.
+*/
+void QOpcUa::QContentFilterElement::setFilterOperands(const QVector<QVariant> &filterOperands)
+{
+ data->filterOperands = filterOperands;
+}
+
+/*!
+ Returns the filter operator.
+*/
+QOpcUa::QContentFilterElement::FilterOperator QOpcUa::QContentFilterElement::filterOperator() const
+{
+ return data->filterOperator;
+}
+
+/*!
+ Sets the operator that is applied to the filter operands to \a filterOperator.
+*/
+void QOpcUa::QContentFilterElement::setFilterOperator(QOpcUa::QContentFilterElement::FilterOperator filterOperator)
+{
+ data->filterOperator = filterOperator;
+}
+
+QOpcUa::QContentFilterElement::~QContentFilterElement()
+{
+}
+
+/*!
+ Sets filter operator \a op in this content filter element.
+ If multiple operators are streamed into one content filter element, only the last operator is used.
+ All others are discarded.
+*/
+QOpcUa::QContentFilterElement &QOpcUa::QContentFilterElement::operator<<(QOpcUa::QContentFilterElement::FilterOperator op)
+{
+ setFilterOperator(op);
+ return *this;
+}
+
+/*!
+ Adds the simple attribute operand \a op to the operands list of this content filter element.
+*/
+QOpcUa::QContentFilterElement &QOpcUa::QContentFilterElement::operator<<(const QOpcUa::QSimpleAttributeOperand &op)
+{
+ filterOperandsRef().append(op);
+ return *this;
+}
+
+/*!
+ Adds the attribute operand \a op to the operands list of this content filter element.
+*/
+QOpcUa::QContentFilterElement &QOpcUa::QContentFilterElement::operator<<(const QOpcUa::QAttributeOperand &op)
+{
+ filterOperandsRef().append(op);
+ return *this;
+}
+
+/*!
+ Adds the literal operand \a op to the operands list of this content filter element.
+*/
+QOpcUa::QContentFilterElement &QOpcUa::QContentFilterElement::operator<<(const QOpcUa::QLiteralOperand &op)
+{
+ filterOperandsRef().append(op);
+ return *this;
+}
+
+/*!
+ Adds the element operand \a op to the operands list of this content filter element.
+*/
+QOpcUa::QContentFilterElement &QOpcUa::QContentFilterElement::operator<<(const QOpcUa::QElementOperand &op)
+{
+ filterOperandsRef().append(op);
+ return *this;
+}
+
+/*!
+ \class QOpcUa::QElementOperand
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA ElementOperand type.
+
+ The ElementOperand is defined in OPC-UA part 4, 7.4.4.2.
+ It is used to identify another element in the filter by its index
+ (the first element has the index 0).
+
+ This is required to create complex filters, for example to reference
+ the two operands of the AND operation in ((Severity > 500) AND (Message == "TestString")).
+ The first step is to create content filter elements for the two conditions (Severity > 500)
+ and (Message == "TestString"). A third content filter element is required to create an AND
+ combination of the two conditions. It consists of the AND operator and two element operands
+ with the indices of the two conditions created before:
+
+ \code
+ QOpcUaMonitoringParameters::EventFilter filter;
+ ...
+ // setup select clauses
+ ...
+ QOpcUa::QContentFilterElement condition1;
+ QOpcUa::QContentFilterElement condition2;
+ QOpcUa::QContentFilterElement condition3;
+ condition1 << QOpcUa::QContentFilterElement::FilterOperator::GreaterThan << QOpcUa::QSimpleAttributeOperand("Severity") <<
+ QOpcUa::QLiteralOperand(quint16(500), QOpcUa::Types::UInt16);
+ condition2 << QOpcUa::QContentFilterElement::FilterOperator::Equals << QOpcUa::QSimpleAttributeOperand("Message") <<
+ QOpcUa::QLiteralOperand("TestString", QOpcUa::Types::String);
+ condition3 << QOpcUa::QContentFilterElement::FilterOperator::And << QOpcUa::QElementOperand(0) << QOpcUa::QElementOperand(1);
+ filter << condition1 << condition2 << condition3;
+ \endcode
+*/
+
+class QOpcUa::QElementOperandData : public QSharedData
+{
+public:
+ quint32 index {0};
+};
+
+QOpcUa::QElementOperand::QElementOperand()
+ : data(new QOpcUa::QElementOperandData)
+{
+}
+
+/*!
+ Constructs an element operand from \a rhs.
+*/
+QOpcUa::QElementOperand::QElementOperand(const QOpcUa::QElementOperand &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Constructs an element operand with index \a index.
+*/
+QOpcUa::QElementOperand::QElementOperand(quint32 index)
+ : data(new QOpcUa::QElementOperandData)
+{
+ setIndex(index);
+}
+
+/*!
+ Sets the values from \a rhs in this element operand.
+*/
+QOpcUa::QElementOperand &QOpcUa::QElementOperand::operator=(const QOpcUa::QElementOperand &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Converts this element operand to \l QVariant.
+*/
+QOpcUa::QElementOperand::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
+
+QOpcUa::QElementOperand::~QElementOperand()
+{
+}
+
+/*!
+ Returns the index of the filter element that is going to be used as operand.
+*/
+quint32 QOpcUa::QElementOperand::index() const
+{
+ return data->index;
+}
+
+/*!
+ Sets the index of the filter element that is going to be used as operand to \a index.
+*/
+void QOpcUa::QElementOperand::setIndex(quint32 index)
+{
+ data->index = index;
+}
+
+/*!
+ \class QOpcUa::QLiteralOperand
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA LiteralOperand type.
+
+ The LiteralOperand is defined in OPC-UA part 4, 7.4.4.3.
+ It contains a literal value that is to be used as operand.
+*/
+class QOpcUa::QLiteralOperandData : public QSharedData
+{
+public:
+ QVariant value;
+ QOpcUa::Types type {QOpcUa::Types::Undefined};
+};
+
+QOpcUa::QLiteralOperand::QLiteralOperand()
+ : data(new QOpcUa::QLiteralOperandData)
+{
+ data->type = QOpcUa::Types::Undefined;
+}
+
+/*!
+ Constructs a literal operand from \a rhs.
+*/
+QOpcUa::QLiteralOperand::QLiteralOperand(const QLiteralOperand &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Constructs a literal operand of value \a value and type \a type.
+*/
+QOpcUa::QLiteralOperand::QLiteralOperand(const QVariant &value, QOpcUa::Types type)
+ : data(new QOpcUa::QLiteralOperandData)
+{
+ setValue(value);
+ setType(type);
+}
+
+/*!
+ Sets the values from \a rhs in this \l QLiteralOperand.
+*/
+QOpcUa::QLiteralOperand &QOpcUa::QLiteralOperand::operator=(const QOpcUa::QLiteralOperand &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Converts this literal operand to \l QVariant.
+*/
+QOpcUa::QLiteralOperand::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
+
+QOpcUa::QLiteralOperand::~QLiteralOperand()
+{
+}
+
+/*!
+ Returns the type of the value of the literal operand.
+*/
+QOpcUa::Types QOpcUa::QLiteralOperand::type() const
+{
+ return data->type;
+}
+
+/*!
+ Sets the type of the value of the literal operand to \a type.
+*/
+void QOpcUa::QLiteralOperand::setType(QOpcUa::Types type)
+{
+ data->type = type;
+}
+
+/*!
+ Returns the value of the literal operand.
+*/
+QVariant QOpcUa::QLiteralOperand::value() const
+{
+ return data->value;
+}
+
+/*!
+ Sets the value of the literal operand to \a value.
+*/
+void QOpcUa::QLiteralOperand::setValue(const QVariant &value)
+{
+ data->value = value;
+}
+
+/*!
+ \class QOpcUa::QSimpleAttributeOperand
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA SimpleAttributeOperand type.
+
+ The SimpleAttributeOperand is specified in OPC-UA part 4, 7.4.4.5.
+ It is used when a node attribute is required as operand.
+
+ For example, the following simple attribute operand represents the value
+ of the "Severity" field of the base event type:
+ \code
+ QOpcUa::QSimpleAttributeOperand("Severity");
+ \endcode
+*/
+class QOpcUa::QSimpleAttributeOperandData : public QSharedData
+{
+public:
+ QString typeId{QStringLiteral("ns=0;i=2041")}; // BaseEventType
+ QVector<QOpcUa::QQualifiedName> browsePath;
+ QOpcUa::NodeAttribute attributeId {QOpcUa::NodeAttribute::Value};
+ QString indexRange;
+};
+
+QOpcUa::QSimpleAttributeOperand::QSimpleAttributeOperand()
+ : data(new QSimpleAttributeOperandData)
+{
+}
+
+/*!
+ Constructs a simple attribute operand from \a rhs.
+*/
+QOpcUa::QSimpleAttributeOperand::QSimpleAttributeOperand(const QOpcUa::QSimpleAttributeOperand &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Constructs a simple attribute operand for attribute \a attributeId of the direct child with the browse name
+ \a name in namespace \a namespaceIndex. \a typeId is the node id of a type definition node. The operand will
+ be restricted to instances of type \a typeId or a subtype.
+*/
+QOpcUa::QSimpleAttributeOperand::QSimpleAttributeOperand(const QString &name, quint16 namespaceIndex, const QString &typeId, QOpcUa::NodeAttribute attributeId)
+ : data(new QOpcUa::QSimpleAttributeOperandData)
+{
+ browsePathRef().append(QOpcUa::QQualifiedName(namespaceIndex, name));
+ setTypeId(typeId);
+ setAttributeId(attributeId);
+}
+
+/*!
+ Constructs a simple attribute operand for the attribute \a attributeId of an object or variable of type \a typeId.
+ This can be used for requesting the ConditionId in an event filter as described in OPC-UA part 9, Table 8.
+*/
+QOpcUa::QSimpleAttributeOperand::QSimpleAttributeOperand(QOpcUa::NodeAttribute attributeId, const QString &typeId)
+ : data(new QOpcUa::QSimpleAttributeOperandData)
+{
+ setTypeId(typeId);
+ setAttributeId(attributeId);
+}
+
+/*!
+ Sets the values from \a rhs in this simple attribute operand.
+*/
+QOpcUa::QSimpleAttributeOperand &QOpcUa::QSimpleAttributeOperand::operator=(const QOpcUa::QSimpleAttributeOperand &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Returns \c true if this simple attribute operand has the same value as \a rhs.
+*/
+bool QOpcUa::QSimpleAttributeOperand::operator==(const QOpcUa::QSimpleAttributeOperand &rhs) const
+{
+ return attributeId() == rhs.attributeId() && browsePath() == rhs.browsePath() &&
+ indexRange() == rhs.indexRange() && typeId() == rhs.typeId();
+}
+
+/*!
+ Converts this simple attribute operand to \l QVariant.
+*/
+QOpcUa::QSimpleAttributeOperand::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
+
+QOpcUa::QSimpleAttributeOperand::~QSimpleAttributeOperand()
+{
+}
+
+/*!
+ Returns the index range string.
+*/
+QString QOpcUa::QSimpleAttributeOperand::indexRange() const
+{
+ return data->indexRange;
+}
+
+/*!
+ Sets the index range string used to identify a single value or subset of the attribute's value to \a indexRange.
+*/
+void QOpcUa::QSimpleAttributeOperand::setIndexRange(const QString &indexRange)
+{
+ data->indexRange = indexRange;
+}
+
+/*!
+ Returns the attribute of the node \l browsePath is pointing to.
+*/
+QOpcUa::NodeAttribute QOpcUa::QSimpleAttributeOperand::attributeId() const
+{
+ return data->attributeId;
+}
+
+/*!
+ Sets the attribute id to \a attributeId.
+*/
+void QOpcUa::QSimpleAttributeOperand::setAttributeId(QOpcUa::NodeAttribute attributeId)
+{
+ data->attributeId = attributeId;
+}
+
+/*!
+ Returns the relative path to a node starting from \l typeId.
+*/
+QVector<QOpcUa::QQualifiedName> QOpcUa::QSimpleAttributeOperand::browsePath() const
+{
+ return data->browsePath;
+}
+
+/*!
+ Returns a reference to the browse path.
+
+ \sa browsePath()
+*/
+QVector<QOpcUa::QQualifiedName> &QOpcUa::QSimpleAttributeOperand::browsePathRef()
+{
+ return data->browsePath;
+}
+
+/*!
+ Sets the browse path to the node holding the attribute to \a browsePath.
+*/
+void QOpcUa::QSimpleAttributeOperand::setBrowsePath(const QVector<QOpcUa::QQualifiedName> &browsePath)
+{
+ data->browsePath = browsePath;
+}
+
+/*!
+ Returns the node id of a type definition node.
+*/
+QString QOpcUa::QSimpleAttributeOperand::typeId() const
+{
+ return data->typeId;
+}
+
+/*!
+ Sets the node id of the type definition node to \a typeId. The operand will be of the type or one of its subtypes.
+*/
+void QOpcUa::QSimpleAttributeOperand::setTypeId(const QString &typeId)
+{
+ data->typeId = typeId;
+}
+
+/*!
+ \class QOpcUa::QAttributeOperand
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA AttributeOperand type.
+
+ The AttributeOperand is defined in OPC-UA part 4, 7.4.4.4.
+ It has the same purpose as \l QSimpleAttributeOperand but has more configurable options.
+*/
+
+class QOpcUa::QAttributeOperandData : public QSharedData
+{
+public:
+ QString nodeId;
+ QString alias;
+ QVector<QOpcUa::QRelativePathElement> browsePath;
+ QOpcUa::NodeAttribute attributeId {QOpcUa::NodeAttribute::Value};
+ QString indexRange;
+};
+
+QOpcUa::QAttributeOperand::QAttributeOperand()
+ : data(new QAttributeOperandData)
+{
+}
+
+/*!
+ Constructs an attribute operand from \a rhs.
+*/
+QOpcUa::QAttributeOperand::QAttributeOperand(const QOpcUa::QAttributeOperand &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this attribute operand.
+*/
+QOpcUa::QAttributeOperand &QOpcUa::QAttributeOperand::operator=(const QOpcUa::QAttributeOperand &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Converts this attribute operand to \l QVariant.
+*/
+QOpcUa::QAttributeOperand::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
+
+QOpcUa::QAttributeOperand::~QAttributeOperand()
+{
+}
+
+/*!
+ Returns the index range string.
+*/
+QString QOpcUa::QAttributeOperand::indexRange() const
+{
+ return data->indexRange;
+}
+
+/*!
+ Sets the index range string used to identify a single value or subset of the attribute's value to \a indexRange.
+*/
+void QOpcUa::QAttributeOperand::setIndexRange(const QString &indexRange)
+{
+ data->indexRange = indexRange;
+}
+
+/*!
+ Returns the attribute id for an attribute of the node \l browsePath is pointing to.
+*/
+QOpcUa::NodeAttribute QOpcUa::QAttributeOperand::attributeId() const
+{
+ return data->attributeId;
+}
+
+/*!
+ Sets the attribute id to \a attributeId.
+*/
+void QOpcUa::QAttributeOperand::setAttributeId(QOpcUa::NodeAttribute attributeId)
+{
+ data->attributeId = attributeId;
+}
+
+/*!
+ Returns the browse path.
+*/
+QVector<QOpcUa::QRelativePathElement> QOpcUa::QAttributeOperand::browsePath() const
+{
+ return data->browsePath;
+}
+
+/*!
+ Returns a reference to the browse path.
+
+ \sa browsePath()
+*/
+QVector<QOpcUa::QRelativePathElement> &QOpcUa::QAttributeOperand::browsePathRef()
+{
+ return data->browsePath;
+}
+
+/*!
+ Sets the relative path to a node starting from \l nodeId() to \a browsePath.
+*/
+void QOpcUa::QAttributeOperand::setBrowsePath(const QVector<QOpcUa::QRelativePathElement> &browsePath)
+{
+ data->browsePath = browsePath;
+}
+
+/*!
+ Returns the alias for this QAttributeOperand.
+*/
+QString QOpcUa::QAttributeOperand::alias() const
+{
+ return data->alias;
+}
+
+/*!
+ Sets the alias to \a alias. This allows using this instance
+ as operand for other operations in the filter.
+*/
+void QOpcUa::QAttributeOperand::setAlias(const QString &alias)
+{
+ data->alias = alias;
+}
+
+/*!
+ Returns the node id of the type definition node.
+*/
+QString QOpcUa::QAttributeOperand::nodeId() const
+{
+ return data->nodeId;
+}
+
+/*!
+ Sets the node id of the type definition node to \a nodeId.
+*/
+void QOpcUa::QAttributeOperand::setNodeId(const QString &nodeId)
+{
+ data->nodeId = nodeId;
+}
+
+/*!
+ \class QOpcUa::QContentFilterElementResult
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA ContentFilterElementResult.
+
+ QContentFilterElementResult contains the status code for a
+ filter element and all its operands.
+*/
+
+class QOpcUa::QContentFilterElementResultData : public QSharedData
+{
+public:
+ QOpcUa::UaStatusCode statusCode {QOpcUa::UaStatusCode::Good};
+ QVector<QOpcUa::UaStatusCode> operandStatusCodes;
+};
+
+QOpcUa::QContentFilterElementResult::QContentFilterElementResult()
+ : data(new QOpcUa::QContentFilterElementResultData)
+{
+}
+
+/*!
+ Constructs a content filter element result from \a rhs.
+*/
+QOpcUa::QContentFilterElementResult::QContentFilterElementResult(const QOpcUa::QContentFilterElementResult &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this content filter element result.
+*/
+QOpcUa::QContentFilterElementResult &QOpcUa::QContentFilterElementResult::operator=(const QOpcUa::QContentFilterElementResult &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUa::QContentFilterElementResult::~QContentFilterElementResult()
+{
+}
+
+/*!
+ Returns the status code for the filter element.
+*/
+QOpcUa::UaStatusCode QOpcUa::QContentFilterElementResult::statusCode() const
+{
+ return data->statusCode;
+}
+
+/*!
+ Sets the status code for the filter element to \a statusCode.
+*/
+void QOpcUa::QContentFilterElementResult::setStatusCode(QOpcUa::UaStatusCode statusCode)
+{
+ data->statusCode = statusCode;
+}
+
+/*!
+ Returns the status codes for all filter operands in the order that was used in the filter.
+*/
+QVector<QOpcUa::UaStatusCode> QOpcUa::QContentFilterElementResult::operandStatusCodes() const
+{
+ return data->operandStatusCodes;
+}
+
+/*!
+ Sets the status codes for all filter operands to \a operandStatusCodes.
+*/
+void QOpcUa::QContentFilterElementResult::setOperandStatusCodes(const QVector<QOpcUa::UaStatusCode> &operandStatusCodes)
+{
+ data->operandStatusCodes = operandStatusCodes;
+}
+
+/*!
+ Returns a reference to the operand status codes.
+
+ \sa operandStatusCodes()
+*/
+QVector<QOpcUa::UaStatusCode> &QOpcUa::QContentFilterElementResult::operandStatusCodesRef()
+{
+ return data->operandStatusCodes;
+}
+
+/*!
+ \class QOpcUa::QEventFilterResult
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPCUA EventFilterResult.
+
+ The EventFilterResult contains status codes for all elements of the \c select clauses
+ and all elements of the \c where clause.
+*/
+
+class QOpcUa::QEventFilterResultData : public QSharedData
+{
+public:
+ QVector<QOpcUa::UaStatusCode> selectClauseResults;
+ QVector<QOpcUa::QContentFilterElementResult> whereClauseResults;
+};
+
+QOpcUa::QEventFilterResult::QEventFilterResult()
+ : data(new QOpcUa::QEventFilterResultData)
+{
+}
+
+/*!
+ Constructs an event filter result from \a rhs.
+*/
+QOpcUa::QEventFilterResult::QEventFilterResult(const QOpcUa::QEventFilterResult &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this event filter result.
+*/
+QOpcUa::QEventFilterResult &QOpcUa::QEventFilterResult::operator=(const QOpcUa::QEventFilterResult &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUa::QEventFilterResult::~QEventFilterResult()
+{
+}
+
+/*!
+ Returns \c true if this event filter result is good.
+*/
+bool QOpcUa::QEventFilterResult::isGood() const
+{
+ for (auto status : qAsConst(data->selectClauseResults)) {
+ if (status != QOpcUa::UaStatusCode::Good)
+ return false;
+ }
+ for (QOpcUa::QContentFilterElementResult element : qAsConst(data->whereClauseResults)) {
+ if (element.statusCode() != QOpcUa::UaStatusCode::Good)
+ return false;
+ for (auto status : qAsConst(element.operandStatusCodesRef())) {
+ if (status != QOpcUa::UaStatusCode::Good)
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/*!
+ Returns the status codes for all elements of the \c where clause in the order that was used in the filter.
+*/
+QVector<QOpcUa::QContentFilterElementResult> QOpcUa::QEventFilterResult::whereClauseResults() const
+{
+ return data->whereClauseResults;
+}
+
+/*!
+ Returns a reference to the \c where clause results.
+
+ \sa whereClauseResults()
+*/
+QVector<QOpcUa::QContentFilterElementResult> &QOpcUa::QEventFilterResult::whereClauseResultsRef()
+{
+ return data->whereClauseResults;
+}
+
+/*!
+ Sets the \c where clause results to \a whereClausesResult.
+*/
+void QOpcUa::QEventFilterResult::setWhereClauseResults(const QVector<QOpcUa::QContentFilterElementResult> &whereClausesResult)
+{
+ data->whereClauseResults = whereClausesResult;
+}
+
+/*!
+ Returns the status codes for all elements of the \c select clauses in the order that was used in the filter.
+*/
+QVector<QOpcUa::UaStatusCode> QOpcUa::QEventFilterResult::selectClauseResults() const
+{
+ return data->selectClauseResults;
+}
+
+/*!
+ Returns a reference to the \c select clause results.
+
+ \sa selectClauseResults()
+*/
+QVector<QOpcUa::UaStatusCode> &QOpcUa::QEventFilterResult::selectClauseResultsRef()
+{
+ return data->selectClauseResults;
+}
+
+/*!
+ Sets the \c select clause results to \a selectClausesResult.
+*/
+void QOpcUa::QEventFilterResult::setSelectClauseResults(const QVector<QOpcUa::UaStatusCode> &selectClausesResult)
+{
+ data->selectClauseResults = selectClausesResult;
+}
+
+/*!
+ \class QOpcUa::QUserTokenPolicy
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA UserTokenPolicy.
+
+ The user token policy contains information about an user token accepted by the server.
+*/
+
+/*!
+ \enum QOpcUa::QUserTokenPolicy::TokenType
+
+ \value Anonymous No token required.
+ \value Username Username and password are required.
+ \value Certificate A client certificate is required.
+ \value IssuedToken Any Web Services Security (WS-Security) defined token.
+*/
+
+class QOpcUa::QUserTokenPolicyData : public QSharedData
+{
+public:
+ QString policyId;
+ QOpcUa::QUserTokenPolicy::TokenType tokenType{QOpcUa::QUserTokenPolicy::TokenType::Anonymous};
+ QString issuedTokenType;
+ QString issuerEndpointUrl;
+ QString securityPolicyUri;
+};
+
+QOpcUa::QUserTokenPolicy::QUserTokenPolicy()
+ : data(new QOpcUa::QUserTokenPolicyData)
+{
+}
+
+/*!
+ Constructs an user token policy from \a rhs.
+*/
+QOpcUa::QUserTokenPolicy::QUserTokenPolicy(const QUserTokenPolicy &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this user token policy.
+*/
+QOpcUa::QUserTokenPolicy &QOpcUa::QUserTokenPolicy::operator=(const QOpcUa::QUserTokenPolicy &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUa::QUserTokenPolicy::~QUserTokenPolicy()
+{
+}
+
+/*!
+ Returns the URI of the security policy required when encrypting or signing the token for ActivateSession.
+*/
+QString QOpcUa::QUserTokenPolicy::securityPolicyUri() const
+{
+ return data->securityPolicyUri;
+}
+
+/*!
+ Sets the URI of the security policy to \a securityPolicyUri.
+*/
+void QOpcUa::QUserTokenPolicy::setSecurityPolicyUri(const QString &securityPolicyUri)
+{
+ data->securityPolicyUri = securityPolicyUri;
+}
+
+/*!
+ Returns the URL of a token issuing service.
+*/
+QString QOpcUa::QUserTokenPolicy::issuerEndpointUrl() const
+{
+ return data->issuerEndpointUrl;
+}
+
+/*!
+ Sets the URL of the token issuing service to \a issuerEndpointUrl.
+*/
+void QOpcUa::QUserTokenPolicy::setIssuerEndpointUrl(const QString &issuerEndpointUrl)
+{
+ data->issuerEndpointUrl = issuerEndpointUrl;
+}
+
+/*!
+ Returns the URI for the token type.
+*/
+QString QOpcUa::QUserTokenPolicy::issuedTokenType() const
+{
+ return data->issuedTokenType;
+}
+
+/*!
+ Sets the URI for the token type to \a issuedTokenType.
+*/
+void QOpcUa::QUserTokenPolicy::setIssuedTokenType(const QString &issuedTokenType)
+{
+ data->issuedTokenType = issuedTokenType;
+}
+
+/*!
+ Returns the type of the required user identity token.
+*/
+QOpcUa::QUserTokenPolicy::TokenType QOpcUa::QUserTokenPolicy::tokenType() const
+{
+ return data->tokenType;
+}
+
+/*!
+ Sets the type of the required user identity token to \a tokenType.
+*/
+void QOpcUa::QUserTokenPolicy::setTokenType(TokenType tokenType)
+{
+ data->tokenType = tokenType;
+}
+
+/*!
+ Returns a server assigned identifier for this policy.
+*/
+QString QOpcUa::QUserTokenPolicy::policyId() const
+{
+ return data->policyId;
+}
+
+/*!
+ Sets the identifier for this policy to \a policyId.
+*/
+void QOpcUa::QUserTokenPolicy::setPolicyId(const QString &policyId)
+{
+ data->policyId = policyId;
+}
+
+/*!
+ \class QOpcUa::QApplicationDescription
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA ApplicationDescription.
+
+ The application description contains information about an OPC UA application.
+*/
+
+/*!
+ \enum QOpcUa::QApplicationDescription::ApplicationType
+
+ \value Server This application is a server.
+ \value Client This application is a client.
+ \value ClientAndServer This application is a client and a server.
+ \value DiscoveryServer This application is a discovery server.
+*/
+
+class QOpcUa::QApplicationDescriptionData : public QSharedData
+{
+public:
+ QString applicationUri;
+ QString productUri;
+ QOpcUa::QLocalizedText applicationName;
+ QOpcUa::QApplicationDescription::ApplicationType applicationType{QOpcUa::QApplicationDescription::ApplicationType::Server};
+ QString gatewayServerUri;
+ QString discoveryProfileUri;
+ QVector<QString> discoveryUrls;
+};
+
+QOpcUa::QApplicationDescription::QApplicationDescription()
+ : data(new QOpcUa::QApplicationDescriptionData)
+{
+}
+
+/*!
+ Constructs an application description from \a other.
+*/
+QOpcUa::QApplicationDescription::QApplicationDescription(const QOpcUa::QApplicationDescription &other)
+ : data(other.data)
+{
+}
+
+/*!
+ Sets the values from \a other in this application description.
+*/
+QOpcUa::QApplicationDescription &QOpcUa::QApplicationDescription::operator=(const QOpcUa::QApplicationDescription &other)
+{
+ this->data = other.data;
+ return *this;
+}
+
+QOpcUa::QApplicationDescription::~QApplicationDescription()
+{
+}
+
+/*!
+ Returns a list of URLs of discovery endpoints.
+*/
+QVector<QString> QOpcUa::QApplicationDescription::discoveryUrls() const
+{
+ return data->discoveryUrls;
+}
+
+/*!
+ Returns a reference to a list of URLs of discovery endpoints.
+*/
+QVector<QString> &QOpcUa::QApplicationDescription::discoveryUrlsRef()
+{
+ return data->discoveryUrls;
+}
+
+/*!
+ Sets the discovery URLs to \a discoveryUrls.
+*/
+void QOpcUa::QApplicationDescription::setDiscoveryUrls(const QVector<QString> &discoveryUrls)
+{
+ data->discoveryUrls = discoveryUrls;
+}
+
+/*!
+ Returns the URI of the supported discovery profile.
+*/
+QString QOpcUa::QApplicationDescription::discoveryProfileUri() const
+{
+ return data->discoveryProfileUri;
+}
+
+/*!
+ Sets the discovery profile URI to \a discoveryProfileUri.
+*/
+void QOpcUa::QApplicationDescription::setDiscoveryProfileUri(const QString &discoveryProfileUri)
+{
+ data->discoveryProfileUri = discoveryProfileUri;
+}
+
+/*!
+ Returns the URI of the gateway server.
+*/
+QString QOpcUa::QApplicationDescription::gatewayServerUri() const
+{
+ return data->gatewayServerUri;
+}
+
+/*!
+ Sets the URI of the gateway server to \a gatewayServerUri.
+*/
+void QOpcUa::QApplicationDescription::setGatewayServerUri(const QString &gatewayServerUri)
+{
+ data->gatewayServerUri = gatewayServerUri;
+}
+
+/*!
+ Returns the application's type (server, client, both, discovery server).
+*/
+QOpcUa::QApplicationDescription::ApplicationType QOpcUa::QApplicationDescription::applicationType() const
+{
+ return data->applicationType;
+}
+
+/*!
+ Sets the application type to \a applicationType.
+*/
+void QOpcUa::QApplicationDescription::setApplicationType(ApplicationType applicationType)
+{
+ data->applicationType = applicationType;
+}
+
+/*!
+ Returns a name describing the application.
+*/
+QOpcUa::QLocalizedText QOpcUa::QApplicationDescription::applicationName() const
+{
+ return data->applicationName;
+}
+
+/*!
+ Sets the application name to \a applicationName.
+*/
+void QOpcUa::QApplicationDescription::setApplicationName(const QOpcUa::QLocalizedText &applicationName)
+{
+ data->applicationName = applicationName;
+}
+
+/*!
+ Returns the globally unique identifier for this product.
+*/
+QString QOpcUa::QApplicationDescription::productUri() const
+{
+ return data->productUri;
+}
+
+/*!
+ Sets the globally unique identifier for this product to \a productUri.
+*/
+void QOpcUa::QApplicationDescription::setProductUri(const QString &productUri)
+{
+ data->productUri = productUri;
+}
+
+/*!
+ Returns the globally unique identifier for this application instance.
+*/
+QString QOpcUa::QApplicationDescription::applicationUri() const
+{
+ return data->applicationUri;
+}
+
+/*!
+ Sets the globally unique identifier for this application instance to \a applicationUri.
+*/
+void QOpcUa::QApplicationDescription::setApplicationUri(const QString &applicationUri)
+{
+ data->applicationUri = applicationUri;
+}
+
+/*!
+ \class QOpcUa::QEndpointDescription
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA EndpointDescription.
+
+ An endpoint description contains information about an endpoint and how to connect to it.
+*/
+
+/*!
+ \enum QOpcUa::QEndpointDescription::MessageSecurityMode
+
+ \value Invalid The default value, will be rejected by the server.
+ \value None No security.
+ \value Sign Messages are signed but not encrypted.
+ \value SignAndEncrypt Messages are signed and encrypted.
+*/
+
+class QOpcUa::QEndpointDescriptionData : public QSharedData
+{
+public:
+ QString endpointUrl;
+ QOpcUa::QApplicationDescription server;
+ QByteArray serverCertificate;
+ QOpcUa::QEndpointDescription::MessageSecurityMode securityMode{QOpcUa::QEndpointDescription::MessageSecurityMode::None};
+ QString securityPolicyUri;
+ QVector<QOpcUa::QUserTokenPolicy> userIdentityTokens;
+ QString transportProfileUri;
+ quint8 securityLevel{0};
+};
+
+QOpcUa::QEndpointDescription::QEndpointDescription()
+ : data(new QOpcUa::QEndpointDescriptionData)
+{
+}
+
+/*!
+ Constructs an endpoint description from \a rhs.
+*/
+QOpcUa::QEndpointDescription::QEndpointDescription(const QOpcUa::QEndpointDescription &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this endpoint description.
+*/
+QOpcUa::QEndpointDescription &QOpcUa::QEndpointDescription::operator=(const QOpcUa::QEndpointDescription &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUa::QEndpointDescription::~QEndpointDescription()
+{
+}
+
+/*!
+ Returns a relative index assigned by the server. It describes how secure this
+ endpoint is compared to other endpoints of the same server. An endpoint with strong
+ security measures has a higher security level than one with weaker or no security
+ measures.
+
+ Security level 0 indicates an endpoint for backward compatibility purposes which
+ should only be used if the client does not support the security measures required
+ by more secure endpoints.
+*/
+quint8 QOpcUa::QEndpointDescription::securityLevel() const
+{
+ return data->securityLevel;
+}
+
+/*!
+ Sets the security level to \a securityLevel.
+*/
+void QOpcUa::QEndpointDescription::setSecurityLevel(quint8 securityLevel)
+{
+ data->securityLevel = securityLevel;
+}
+
+/*!
+ Returns the URI of the transport profile supported by the endpoint.
+*/
+QString QOpcUa::QEndpointDescription::transportProfileUri() const
+{
+ return data->transportProfileUri;
+}
+
+/*!
+ Sets the URI of the transport profile supported by the endpoint to \a transportProfileUri.
+*/
+void QOpcUa::QEndpointDescription::setTransportProfileUri(const QString &transportProfileUri)
+{
+ data->transportProfileUri = transportProfileUri;
+}
+
+/*!
+ Returns a list of user identity tokens the endpoint will accept.
+*/
+QVector<QOpcUa::QUserTokenPolicy> QOpcUa::QEndpointDescription::userIdentityTokens() const
+{
+ return data->userIdentityTokens;
+}
+
+/*!
+ Returns a reference to a list of user identity tokens the endpoint will accept.
+*/
+QVector<QOpcUa::QUserTokenPolicy> &QOpcUa::QEndpointDescription::userIdentityTokensRef()
+{
+ return data->userIdentityTokens;
+}
+
+/*!
+ Sets the user identity tokens to \a userIdentityTokens.
+*/
+void QOpcUa::QEndpointDescription::setUserIdentityTokens(const QVector<QOpcUa::QUserTokenPolicy> &userIdentityTokens)
+{
+ data->userIdentityTokens = userIdentityTokens;
+}
+
+/*!
+ Returns the URI of the security policy.
+*/
+QString QOpcUa::QEndpointDescription::securityPolicyUri() const
+{
+ return data->securityPolicyUri;
+}
+
+/*!
+ Sets the URI of the security policy to \a securityPolicyUri.
+*/
+void QOpcUa::QEndpointDescription::setSecurityPolicyUri(const QString &securityPolicyUri)
+{
+ data->securityPolicyUri = securityPolicyUri;
+}
+
+/*!
+ Returns the security mode supported by this endpoint.
+*/
+QOpcUa::QEndpointDescription::MessageSecurityMode QOpcUa::QEndpointDescription::securityMode() const
+{
+ return data->securityMode;
+}
+
+/*!
+ Sets the security mode supported by this endpoint to \a securityMode.
+*/
+void QOpcUa::QEndpointDescription::setSecurityMode(MessageSecurityMode securityMode)
+{
+ data->securityMode = securityMode;
+}
+
+/*!
+ Returns the application instance certificate of the server.
+*/
+QByteArray QOpcUa::QEndpointDescription::serverCertificate() const
+{
+ return data->serverCertificate;
+}
+
+/*!
+ Sets the application instance certificate of the server to \a serverCertificate.
+*/
+void QOpcUa::QEndpointDescription::setServerCertificate(const QByteArray &serverCertificate)
+{
+ data->serverCertificate = serverCertificate;
+}
+
+/*!
+ Returns the application description of the server.
+*/
+QOpcUa::QApplicationDescription QOpcUa::QEndpointDescription::server() const
+{
+ return data->server;
+}
+
+/*!
+ Returns a reference to the application description of the server.
+*/
+QOpcUa::QApplicationDescription &QOpcUa::QEndpointDescription::serverRef()
+{
+ return data->server;
+}
+
+/*!
+ Sets the application description of the server to \a server.
+*/
+void QOpcUa::QEndpointDescription::setServer(const QOpcUa::QApplicationDescription &server)
+{
+ data->server = server;
+}
+
+/*!
+ Returns the URL for the endpoint.
+*/
+QString QOpcUa::QEndpointDescription::endpointUrl() const
+{
+ return data->endpointUrl;
+}
+
+/*!
+ Sets the URL for the endpoint to \a endpointUrl.
+*/
+void QOpcUa::QEndpointDescription::setEndpointUrl(const QString &endpointUrl)
+{
+ data->endpointUrl = endpointUrl;
+}
+
+/*!
+ \class QOpcUa::QArgument
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief The OPC UA Argument type.
+
+ This is the Qt OPC UA representation for the Argument type defined in OPC-UA part 3, 8.6.
+
+ The Argument type is mainly used for the values of the InputArguments and OutputArguments properties
+ which describe the parameters and return values of method nodes.
+*/
+class QOpcUa::QArgumentData : public QSharedData
+{
+public:
+ QString name;
+ QString dataTypeId;
+ qint32 valueRank{-2};
+ QVector<quint32> arrayDimensions;
+ QOpcUa::QLocalizedText description;
+};
+
+QOpcUa::QArgument::QArgument()
+ : data(new QOpcUa::QArgumentData)
+{
+}
+
+QOpcUa::QArgument::QArgument(const QOpcUa::QArgument &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Constructs an argument with name \a name, data type id \a dataTypeId, value rank \a valueRank,
+ array dimensions \a arrayDimensions and description \a description.
+*/
+QOpcUa::QArgument::QArgument(const QString &name, const QString &dataTypeId, qint32 valueRank,
+ const QVector<quint32> &arrayDimensions, const QOpcUa::QLocalizedText &description)
+ : data(new QOpcUa::QArgumentData)
+{
+ setName(name);
+ setDataTypeId(dataTypeId);
+ setValueRank(valueRank);
+ setArrayDimensions(arrayDimensions);
+ setDescription(description);
+}
+
+/*!
+ Sets the values from \a rhs in this argument.
+*/
+QOpcUa::QArgument &QOpcUa::QArgument::operator=(const QOpcUa::QArgument &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Returns true if this argument has the same value as \a other.
+*/
+bool QOpcUa::QArgument::operator==(const QOpcUa::QArgument &other) const
+{
+ return data->arrayDimensions == other.arrayDimensions() &&
+ nodeIdEquals(data->dataTypeId, other.dataTypeId()) &&
+ data->description == other.description() &&
+ data->name == other.name() &&
+ data->valueRank == other.valueRank();
+}
+
+/*!
+ Converts this argument to \l QVariant.
+*/
+QOpcUa::QArgument::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
+
+QOpcUa::QArgument::~QArgument()
+{
+}
+
+/*!
+ Returns the name of the argument.
+*/
+QString QOpcUa::QArgument::name() const
+{
+ return data->name;
+}
+
+/*!
+ Sets the name of the argument to \a name.
+*/
+void QOpcUa::QArgument::setName(const QString &name)
+{
+ data->name = name;
+}
+
+/*!
+ Returns the data type node id of the argument.
+*/
+QString QOpcUa::QArgument::dataTypeId() const
+{
+ return data->dataTypeId;
+}
+
+/*!
+ Sets the data type node id of the argument to \a dataTypeId.
+*/
+void QOpcUa::QArgument::setDataTypeId(const QString &dataTypeId)
+{
+ data->dataTypeId = dataTypeId;
+}
+
+/*!
+ Returns the value rank of the argument.
+ The value rank describes the structure of the value.
+ \table
+ \header
+ \li ValueRank
+ \li Meaning
+ \row
+ \li -3
+ \li Scalar or one dimensional array
+ \row
+ \li -2
+ \li Scalar or array with any number of dimensions
+ \row
+ \li -1
+ \li Not an array
+ \row
+ \li 0
+ \li Array with one or more dimensions
+ \row
+ \li 1
+ \li One dimensional array
+ \row
+ \li >1
+ \li Array with n dimensions
+ \endtable
+*/
+qint32 QOpcUa::QArgument::valueRank() const
+{
+ return data->valueRank;
+}
+
+/*!
+ Sets the value rank of the argument to \a valueRank.
+*/
+void QOpcUa::QArgument::setValueRank(qint32 valueRank)
+{
+ data->valueRank = valueRank;
+}
+
+/*!
+ Returns the array dimensions of the argument.
+
+ The array dimensions describe the length of each array dimension.
+*/
+QVector<quint32> QOpcUa::QArgument::arrayDimensions() const
+{
+ return data->arrayDimensions;
+}
+
+/*!
+ Returns a reference to the array dimensions of the argument.
+*/
+QVector<quint32> &QOpcUa::QArgument::arrayDimensionsRef()
+{
+ return data->arrayDimensions;
+}
+
+/*!
+ Sets the array dimensions of the argument to \a arrayDimensions.
+*/
+void QOpcUa::QArgument::setArrayDimensions(const QVector<quint32> &arrayDimensions)
+{
+ data->arrayDimensions = arrayDimensions;
+}
+
+/*!
+ Returns the description of the argument.
+*/
+QOpcUa::QLocalizedText QOpcUa::QArgument::description() const
+{
+ return data->description;
+}
+
+/*!
+ Sets the description of the argument to \a description.
+*/
+void QOpcUa::QArgument::setDescription(const QOpcUa::QLocalizedText &description)
+{
+ data->description = description;
+}
+
+/*!
+ \class QOpcUa::QExtensionObject
+ \inmodule QtOpcUa
+ \brief The OPC UA ExtensionObject.
+
+ This is the Qt OPC UA representation for an extension object.
+ Extension objects are used as a container in OPC UA whenever a non-builtin type is stored
+ in a Variant. It contains information about the type and encoding of the data as well as
+ the data itself encoded with one of the encodings specified in OPC-UA part 6.
+ Decoders are supposed to decode extension objects if they can handle the type. If the type
+ is not supported by the decoder, the extension object is not decoded and decoding is left
+ to the user.
+*/
+
+/*!
+ \enum QOpcUa::QExtensionObject::Encoding
+
+ Enumerates the possible encodings of the body.
+
+ \value NoBody
+ \value ByteString
+ \value Xml
+*/
+
+class QOpcUa::QExtensionObjectData : public QSharedData
+{
+public:
+ QString encodingTypeId;
+ QByteArray encodedBody;
+ QOpcUa::QExtensionObject::Encoding encoding{QOpcUa::QExtensionObject::Encoding::NoBody};
+};
+
+QOpcUa::QExtensionObject::QExtensionObject()
+ : data(new QExtensionObjectData)
+{
+}
+
+/*!
+ Constructs an extension object from \a rhs.
+*/
+QOpcUa::QExtensionObject::QExtensionObject(const QExtensionObject &rhs)
+ : data(rhs.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this extension object.
+*/
+QOpcUa::QExtensionObject &QOpcUa::QExtensionObject::operator=(const QOpcUa::QExtensionObject &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Returns \c true if this extension object has the same value as \a rhs.
+*/
+bool QOpcUa::QExtensionObject::operator==(const QOpcUa::QExtensionObject &rhs) const
+{
+ return data->encoding == rhs.encoding() &&
+ nodeIdEquals(data->encodingTypeId, rhs.encodingTypeId()) &&
+ data->encodedBody == rhs.encodedBody();
+}
+
+/*!
+ Converts this extension object to \l QVariant.
+*/
+QOpcUa::QExtensionObject::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
+
+QOpcUa::QExtensionObject::~QExtensionObject()
+{
+}
+
+/*!
+ Returns the \l {QOpcUa::QExtensionObject::Encoding} {encoding} of the body.
+*/
+QOpcUa::QExtensionObject::Encoding QOpcUa::QExtensionObject::encoding() const
+{
+ return data->encoding;
+}
+
+/*!
+ Sets the encoding of the body to \a encoding.
+*/
+void QOpcUa::QExtensionObject::setEncoding(QOpcUa::QExtensionObject::Encoding encoding)
+{
+ data->encoding = encoding;
+}
+
+/*!
+ Returns the body of this extension object. It contains the encoded data.
+*/
+QByteArray QOpcUa::QExtensionObject::encodedBody() const
+{
+ return data->encodedBody;
+}
+
+/*!
+ Returns a reference to the body of this extension object.
+*/
+QByteArray &QOpcUa::QExtensionObject::encodedBodyRef()
+{
+ return data->encodedBody;
+}
+/*!
+ Sets the body of this extension object to \a encodedBody.
+*/
+void QOpcUa::QExtensionObject::setEncodedBody(const QByteArray &encodedBody)
+{
+ data->encodedBody = encodedBody;
+}
+
+/*!
+ Returns the node id of the encoding for the type stored by this extension object, for example ns=0;i=886 for
+ Range_Encoding_DefaultBinary. All encoding ids are listed in \l {https://opcfoundation.org/UA/schemas/1.03/NodeIds.csv}.
+*/
+QString QOpcUa::QExtensionObject::encodingTypeId() const
+{
+ return data->encodingTypeId;
+}
+
+/*!
+ Sets the node id of the encoding for the type stored by this extension object to \a encodingTypeId.
+*/
+void QOpcUa::QExtensionObject::setEncodingTypeId(const QString &encodingTypeId)
+{
+ data->encodingTypeId = encodingTypeId;
+}
+
+/*
+ This class has been modelled in the style of the Variant encoding
+ defined in OPC-UA part 6, 5.2.2.16.
+
+ This solution has been preferred to returning nested QVariantLists
+ due to the following reasons:
+ - A QVariantList inside a QVariantList is stored as a QVariant which must be converted
+ to QVariantList before the elements can be accessed. This makes it impossible to update the
+ values in place.
+ - The length of the array is encoded as a 32 bit unsigned integer.
+ Array dimensions are encoded in an array, so an array can have UINT32_MAX dimensions.
+ Depending on the number of dimensions, there could be lots of nested QVariantLists
+ which would require a huge effort when calculating the array dimensions for conversions
+ between QVariantList and the sdk specific variant type.
+*/
+
+/*!
+ \class QOpcUa::QMultiDimensionalArray
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuatype.h
+ \brief A container class for multidimensional arrays.
+
+ This class manages arrays of Qt OPC UA types with associated array dimensions information.
+ It is returned as value when a multidimensional array is received from the server. It can also
+ be used as a write value or as parameter for filters and method calls.
+*/
+
+class QOpcUa::QMultiDimensionalArrayData : public QSharedData
+{
+public:
+ QVariantList value;
+ QVector<quint32> arrayDimensions;
+ quint32 expectedArrayLength{0};
+};
+
+QOpcUa::QMultiDimensionalArray::QMultiDimensionalArray()
+ : data(new QOpcUa::QMultiDimensionalArrayData)
+{
+}
+
+/*!
+ Constructs a multidimensional array from \a other.
+*/
+QOpcUa::QMultiDimensionalArray::QMultiDimensionalArray(const QOpcUa::QMultiDimensionalArray &other)
+ : data(other.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in the multidimensional array.
+*/
+QOpcUa::QMultiDimensionalArray &QOpcUa::QMultiDimensionalArray::operator=(const QOpcUa::QMultiDimensionalArray &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+/*!
+ Constructs a multidimensional array with value \a value and array dimensions \a arrayDimensions.
+*/
+QOpcUa::QMultiDimensionalArray::QMultiDimensionalArray(const QVariantList &value, const QVector<quint32> &arrayDimensions)
+ : data(new QOpcUa::QMultiDimensionalArrayData)
+{
+ setValueArray(value);
+ setArrayDimensions(arrayDimensions);
+}
+
+/*!
+ Creates a multidimensional array with preallocated data fitting \a arrayDimensions.
+*/
+QOpcUa::QMultiDimensionalArray::QMultiDimensionalArray(const QVector<quint32> &arrayDimensions)
+ : data(new QOpcUa::QMultiDimensionalArrayData)
+{
+ setArrayDimensions(arrayDimensions);
+ if (data->expectedArrayLength) {
+ data->value.reserve(data->expectedArrayLength);
+ for (size_t i = 0; i < data->expectedArrayLength; ++i)
+ data->value.append(QVariant());
+ }
+}
+
+QOpcUa::QMultiDimensionalArray::~QMultiDimensionalArray()
+{
+}
+
+/*!
+ Returns the dimensions of the multidimensional array.
+ The element at position n contains the length of the n-th dimension.
+*/
+QVector<quint32> QOpcUa::QMultiDimensionalArray::arrayDimensions() const
+{
+ return data->arrayDimensions;
+}
+
+/*!
+ Sets the dimensions of the multidimensional array to \a arrayDimensions.
+*/
+void QOpcUa::QMultiDimensionalArray::setArrayDimensions(const QVector<quint32> &arrayDimensions)
+{
+ data->arrayDimensions = arrayDimensions;
+ data->expectedArrayLength = std::accumulate(data->arrayDimensions.begin(), data->arrayDimensions.end(),
+ 1, std::multiplies<quint32>());
+}
+
+/*!
+ Returns \c true if this multidimensional array has the same value as \a other.
+*/
+bool QOpcUa::QMultiDimensionalArray::operator==(const QOpcUa::QMultiDimensionalArray &other) const
+{
+ return arrayDimensions() == other.arrayDimensions() &&
+ valueArray() == other.valueArray();
+}
+
+/*!
+ Converts this multidimensional array to \l QVariant.
+*/
+QOpcUa::QMultiDimensionalArray::operator QVariant() const
+{
+ return QVariant::fromValue(*this);
+}
+
+/*!
+ Returns the value array of the multidimensional array.
*/
+QVariantList QOpcUa::QMultiDimensionalArray::valueArray() const
+{
+ return data->value;
+}
+
+/*!
+ Returns a reference to the value array of the multidimensional array.
+*/
+QVariantList &QOpcUa::QMultiDimensionalArray::valueArrayRef()
+{
+ return data->value;
+}
+
+/*!
+ Sets the value array of the multidimensional array to \a value.
+*/
+void QOpcUa::QMultiDimensionalArray::setValueArray(const QVariantList &value)
+{
+ data->value = value;
+}
+
+/*!
+ Returns the array index in \l valueArray() of the element identified by \a indices.
+ If \a indices is invalid for the array or if the array's dimensions don't match
+ the size of \l valueArray(), the invalid index \c -1 is returned.
+*/
+int QOpcUa::QMultiDimensionalArray::arrayIndex(const QVector<quint32> &indices) const
+{
+ // A QList can store INT_MAX values. Depending on the platform, this allows a size > UINT32_MAX
+ if (data->expectedArrayLength > static_cast<quint64>((std::numeric_limits<int>::max)()) ||
+ static_cast<quint64>(data->value.size()) > (std::numeric_limits<quint32>::max)())
+ return -1;
+
+ // Check number of dimensions and data size
+ if (indices.size() != data->arrayDimensions.size() ||
+ data->expectedArrayLength != static_cast<quint32>(data->value.size()))
+ return -1; // Missing array dimensions or array dimensions don't fit the array
+
+ quint32 index = 0;
+ quint32 stride = 1;
+ // Reverse iteration to avoid repetitions while calculating the stride
+ for (int i = data->arrayDimensions.size() - 1; i >= 0; --i) {
+ if (indices.at(i) >= data->arrayDimensions.at(i)) // Out of bounds
+ return -1;
+
+ // Arrays are encoded in row-major order: [0,0,0], [0,0,1], [0,1,0], [0,1,1], [1,0,0], [1,0,1], [1,1,0], [1,1,1]
+ // The stride for dimension i in a n dimensional array is the product of all array dimensions from i+1 to n
+ if (i < data->arrayDimensions.size() - 1)
+ stride *= data->arrayDimensions.at(i + 1);
+ index += stride * indices.at(i);
+ }
+
+ return (index <= static_cast<quint64>((std::numeric_limits<int>::max)())) ?
+ static_cast<int>(index) : -1;
+}
+
+/*!
+ Returns the value of the element identified by \a indices.
+ If the indices are invalid for the array, an empty \l QVariant is returned.
+*/
+QVariant QOpcUa::QMultiDimensionalArray::value(const QVector<quint32> &indices) const
+{
+ int index = arrayIndex(indices);
+
+ if (index < 0)
+ return QVariant();
+
+ return data->value.at(index);
+}
+
+/*!
+ Sets the value at position \a indices to \a value.
+ Returns \c true if the value has been successfully set.
+*/
+bool QOpcUa::QMultiDimensionalArray::setValue(const QVector<quint32> &indices, const QVariant &value)
+{
+ int index = arrayIndex(indices);
+
+ if (index < 0)
+ return false;
+
+ data->value[index] = value;
+ return true;
+}
+
+/*!
+ Returns \c true if the multidimensional array is valid
+*/
+bool QOpcUa::QMultiDimensionalArray::isValid() const
+{
+ return static_cast<quint64>(data->value.size()) == data->expectedArrayLength &&
+ static_cast<quint64>(data->value.size()) <= (std::numeric_limits<quint32>::max)() &&
+ static_cast<quint64>(data->arrayDimensions.size()) <= (std::numeric_limits<quint32>::max)();
+}
QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuatype.h b/src/opcua/client/qopcuatype.h
index 677ef76..f64ebe3 100644
--- a/src/opcua/client/qopcuatype.h
+++ b/src/opcua/client/qopcuatype.h
@@ -38,9 +38,11 @@
#define QOPCUATYPE
#include <QtOpcUa/qopcuaglobal.h>
+#include <QtOpcUa/qopcuanodeids.h>
#include <QtCore/qmetatype.h>
#include <QtCore/qpair.h>
+#include <QtCore/qshareddata.h>
#include <QtCore/qvariant.h>
#include <QtCore/qvector.h>
@@ -96,6 +98,59 @@ enum class NodeAttribute {
Q_ENUM_NS(NodeAttribute)
Q_DECLARE_FLAGS(NodeAttributes, NodeAttribute)
+// Defined in OPC-UA part 3, Table 8.
+enum class WriteMaskBit : quint32 {
+ None = 0,
+ AccessLevel = (1 << 0),
+ ArrayDimensions = (1 << 1),
+ BrowseName = (1 << 2),
+ ContainsNoLoops = (1 << 3),
+ DataType = (1 << 4),
+ Description = (1 << 5),
+ DisplayName = (1 << 6),
+ EventNotifier = (1 << 7),
+ Executable = (1 << 8),
+ Historizing = (1 << 9),
+ InverseName = (1 << 10),
+ IsAbstract = (1 << 11),
+ MinimumSamplingInterval = (1 << 12),
+ NodeClass = (1 << 13),
+ NodeId = (1 << 14),
+ Symmetric = (1 << 15),
+ UserAccessLevel = (1 << 16),
+ UserExecutable = (1 << 17),
+ UserWriteMask = (1 << 18),
+ ValueRank = (1 << 19),
+ WriteMask = (1 << 20),
+ ValueForVariableType = (1 << 21),
+};
+Q_ENUM_NS(WriteMaskBit)
+Q_DECLARE_FLAGS(WriteMask, WriteMaskBit)
+
+// Defined in OPC-UA part 3, Table 8.
+enum class AccessLevelBit : quint8 {
+ None = 0,
+ CurrentRead = (1 << 0),
+ CurrentWrite = (1 << 1),
+ HistoryRead = (1 << 2),
+ HistoryWrite = (1 << 3),
+ SemanticChange = (1 << 4),
+ StatusWrite = (1 << 5),
+ TimestampWrite = (1 << 6),
+};
+Q_ENUM_NS(AccessLevelBit)
+Q_DECLARE_FLAGS(AccessLevel, AccessLevelBit)
+
+// Defined in OPC-UA part 3, Table 6.
+enum class EventNotifierBit : quint8 {
+ None = 0,
+ SubscribeToEvents = (1 << 0),
+ HistoryRead = (1 << 2),
+ HistoryWrite = (1 << 3)
+};
+Q_ENUM_NS(EventNotifierBit)
+Q_DECLARE_FLAGS(EventNotifier, EventNotifierBit)
+
inline uint qHash(const QOpcUa::NodeAttribute& attr)
{
return ::qHash(static_cast<uint>(attr));
@@ -164,8 +219,11 @@ enum Types
DoubleComplexNumber = 24,
AxisInformation = 25,
XV = 26,
+ ExpandedNodeId = 27,
+ Argument = 28,
Undefined = 0xFFFFFFFF
};
+Q_ENUM_NS(Types)
enum UaStatusCode : quint32
{
@@ -420,116 +478,157 @@ Q_OPCUA_EXPORT QString nodeIdFromString(quint16 ns, const QString &identifier);
Q_OPCUA_EXPORT QString nodeIdFromByteString(quint16 ns, const QByteArray &identifier);
Q_OPCUA_EXPORT QString nodeIdFromGuid(quint16 ns, const QUuid &identifier);
Q_OPCUA_EXPORT QString nodeIdFromInteger(quint16 ns, quint32 identifier);
+Q_OPCUA_EXPORT QString nodeIdFromReferenceType(QOpcUa::ReferenceTypeId referenceType);
+Q_OPCUA_EXPORT bool nodeIdStringSplit(const QString &nodeIdString, quint16 *nsIndex,
+ QString *identifier, char *identifierType);
+Q_OPCUA_EXPORT bool nodeIdEquals(const QString &first, const QString &second);
+Q_OPCUA_EXPORT QString namespace0Id(QOpcUa::NodeIds::Namespace0 id);
+Q_OPCUA_EXPORT QOpcUa::NodeIds::Namespace0 namespace0IdFromNodeId(const QString &nodeId);
+Q_OPCUA_EXPORT QString namespace0IdName(QOpcUa::NodeIds::Namespace0 id);
typedef QPair<QVariant, QOpcUa::Types> TypedVariant;
-struct QQualifiedName {
- quint16 namespaceIndex;
- QString name;
- QQualifiedName(quint16 p_namespaceIndex, const QString &p_name)
- : namespaceIndex(p_namespaceIndex)
- , name(p_name)
- {}
- QQualifiedName()
- : namespaceIndex(0)
- {}
- bool operator==(const QQualifiedName &other) const
- {
- return namespaceIndex == other.namespaceIndex &&
- name == other.name;
- }
-};
-
-struct QLocalizedText {
- QString locale;
- QString text;
- QLocalizedText(const QString &p_locale, const QString &p_text)
- : locale(p_locale)
- , text(p_text)
- {}
- QLocalizedText() {}
- bool operator==(const QLocalizedText &other) const
- {
- return locale == other.locale && text == other.text;
- }
-};
-
-struct QRange {
- double low;
- double high;
- constexpr QRange(double p_low, double p_high) noexcept
- : low(p_low)
- , high(p_high)
- {}
- constexpr QRange() noexcept
- : low(0)
- , high(0)
- {}
- bool operator==(const QOpcUa::QRange &other) const
- {
- return qFloatDistance(low, other.low) == 0 &&
- qFloatDistance(high, other.high) == 0;
- }
-};
-
-struct QEUInformation {
- QString namespaceUri;
- qint32 unitId;
- QLocalizedText displayName;
- QLocalizedText description;
- QEUInformation()
- : unitId(0)
- {}
- QEUInformation(QString p_namespaceUri, qint32 p_unitId,
- QLocalizedText p_displayName, QLocalizedText p_description)
- : namespaceUri(p_namespaceUri)
- , unitId(p_unitId)
- , displayName(p_displayName)
- , description(p_description)
- {}
- bool operator==(const QEUInformation &other) const
- {
- return namespaceUri == other.namespaceUri &&
- unitId == other.unitId &&
- displayName == other.displayName &&
- description == other.description;
- }
-};
-
-struct QComplexNumber {
- float real;
- float imaginary;
- constexpr QComplexNumber() noexcept
- : real(0)
- , imaginary(0)
- {}
- constexpr QComplexNumber(float p_real, float p_imaginary) noexcept
- : real(p_real)
- , imaginary(p_imaginary)
- {}
- bool operator==(const QComplexNumber &other) const
- {
- return qFloatDistance(real, other.real) == 0 &&
- qFloatDistance(imaginary, other.imaginary) == 0;
- }
-};
-
-struct QDoubleComplexNumber {
- double real;
- double imaginary;
- constexpr QDoubleComplexNumber() noexcept
- : real(0)
- , imaginary(0)
- {}
- constexpr QDoubleComplexNumber(double p_real, double p_imaginary) noexcept
- : real(p_real)
- , imaginary(p_imaginary)
- {}
- bool operator==(const QDoubleComplexNumber &other) const
- {
- return qFloatDistance(real, other.real) == 0 &&
- qFloatDistance(imaginary, other.imaginary) == 0;
- }
+class QQualifiedNameData;
+class Q_OPCUA_EXPORT QQualifiedName
+{
+public:
+ QQualifiedName();
+ QQualifiedName(const QOpcUa::QQualifiedName &);
+ QQualifiedName(quint16 namespaceIndex, const QString &name);
+ QQualifiedName &operator=(const QOpcUa::QQualifiedName &);
+ bool operator==(const QOpcUa::QQualifiedName &rhs) const;
+ operator QVariant() const;
+ ~QQualifiedName();
+
+ QString name() const;
+ void setName(const QString &name);
+
+ quint16 namespaceIndex() const;
+ void setNamespaceIndex(quint16 namespaceIndex);
+
+private:
+ QSharedDataPointer<QOpcUa::QQualifiedNameData> data;
+};
+
+class QLocalizedTextData;
+class Q_OPCUA_EXPORT QLocalizedText
+{
+ Q_GADGET
+ Q_PROPERTY(QString locale READ locale WRITE setLocale)
+ Q_PROPERTY(QString text READ text WRITE setText)
+
+public:
+ QLocalizedText();
+ QLocalizedText(const QOpcUa::QLocalizedText &);
+ QLocalizedText(const QString &locale, const QString &text);
+ QLocalizedText &operator=(const QOpcUa::QLocalizedText &);
+ bool operator==(const QOpcUa::QLocalizedText &rhs) const;
+ operator QVariant() const;
+ ~QLocalizedText();
+
+ QString locale() const;
+ void setLocale(const QString &locale);
+
+ QString text() const;
+ void setText(const QString &text);
+
+private:
+ QSharedDataPointer<QOpcUa::QLocalizedTextData> data;
+};
+
+class QRangeData;
+class Q_OPCUA_EXPORT QRange
+{
+public:
+ QRange();
+ QRange(const QOpcUa::QRange &);
+ QRange(double low, double high);
+ QRange &operator=(const QOpcUa::QRange &);
+ bool operator==(const QOpcUa::QRange &rhs) const;
+ operator QVariant() const;
+ ~QRange();
+
+ double low() const;
+ void setLow(double low);
+
+ double high() const;
+ void setHigh(double high);
+
+private:
+ QSharedDataPointer<QOpcUa::QRangeData> data;
+};
+
+class QEUInformationData;
+class Q_OPCUA_EXPORT QEUInformation
+{
+public:
+ QEUInformation();
+ QEUInformation(const QOpcUa::QEUInformation &);
+ QEUInformation(const QString &namespaceUri, qint32 unitId,
+ const QOpcUa::QLocalizedText &displayName, const QOpcUa::QLocalizedText &description);
+ QEUInformation &operator=(const QOpcUa::QEUInformation &);
+ bool operator==(const QOpcUa::QEUInformation &rhs) const;
+ operator QVariant() const;
+ ~QEUInformation();
+
+ QString namespaceUri() const;
+ void setNamespaceUri(const QString &namespaceUri);
+
+ qint32 unitId() const;
+ void setUnitId(qint32 unitId);
+
+ QOpcUa::QLocalizedText displayName() const;
+ void setDisplayName(const QOpcUa::QLocalizedText &displayName);
+
+ QOpcUa::QLocalizedText description() const;
+ void setDescription(const QOpcUa::QLocalizedText &description);
+
+private:
+ QSharedDataPointer<QOpcUa::QEUInformationData> data;
+};
+
+class QComplexNumberData;
+class Q_OPCUA_EXPORT QComplexNumber
+{
+public:
+ QComplexNumber();
+ QComplexNumber(const QOpcUa::QComplexNumber &);
+ QComplexNumber(float real, float imaginary);
+ QComplexNumber &operator=(const QOpcUa::QComplexNumber &);
+ bool operator==(const QOpcUa::QComplexNumber &rhs) const;
+ operator QVariant() const;
+ ~QComplexNumber();
+
+ float real() const;
+ void setReal(float real);
+
+ float imaginary() const;
+ void setImaginary(float imaginary);
+
+private:
+ QSharedDataPointer<QOpcUa::QComplexNumberData> data;
+};
+
+class QDoubleComplexNumberData;
+class Q_OPCUA_EXPORT QDoubleComplexNumber
+{
+public:
+ QDoubleComplexNumber();
+ QDoubleComplexNumber(const QOpcUa::QDoubleComplexNumber &);
+ QDoubleComplexNumber(double real, double imaginary);
+ QDoubleComplexNumber &operator=(const QOpcUa::QDoubleComplexNumber &);
+ bool operator==(const QOpcUa::QDoubleComplexNumber &rhs) const;
+ operator QVariant() const;
+ ~QDoubleComplexNumber();
+
+ double real() const;
+ void setReal(double real);
+
+ double imaginary() const;
+ void setImaginary(double imaginary);
+
+private:
+ QSharedDataPointer<QOpcUa::QDoubleComplexNumberData> data;
};
enum class AxisScale : quint32 {
@@ -538,48 +637,559 @@ enum class AxisScale : quint32 {
Ln = 2
};
-struct QAxisInformation {
- QEUInformation engineeringUnits;
- QRange eURange;
- QLocalizedText title;
- AxisScale axisScaleType;
- QVector<double> axisSteps;
- QAxisInformation() {}
- QAxisInformation(QEUInformation p_engineeringUnits, QRange p_eURange, QLocalizedText p_title,
- AxisScale p_axisScaleType, QVector<double> p_axisSteps)
- : engineeringUnits(p_engineeringUnits)
- , eURange(p_eURange)
- , title(p_title)
- , axisScaleType(p_axisScaleType)
- , axisSteps(p_axisSteps)
- {}
- bool operator==(const QAxisInformation &other) const
- {
- return engineeringUnits == other.engineeringUnits &&
- eURange == other.eURange &&
- title == other.title &&
- axisScaleType == other.axisScaleType &&
- axisSteps == other.axisSteps;
- }
-};
-
-struct QXValue {
- double x;
- float value;
- constexpr QXValue() noexcept
- : x(0)
- , value()
- {}
- constexpr QXValue(float p_x, float p_value) noexcept
- : x(p_x)
- , value(p_value)
- {}
- bool operator==(const QXValue &other) const
- {
- return qFloatDistance(x, other.x) == 0 &&
- qFloatDistance(value, other.value) == 0;
- }
+class QAxisInformationData;
+class Q_OPCUA_EXPORT QAxisInformation
+{
+public:
+ QAxisInformation();
+ QAxisInformation(const QOpcUa::QAxisInformation &);
+ QAxisInformation(const QOpcUa::QEUInformation &engineeringUnits, const QOpcUa::QRange &eURange, const QOpcUa::QLocalizedText &title,
+ const QOpcUa::AxisScale &axisScaleType, const QVector<double> &axisSteps);
+ QAxisInformation &operator=(const QOpcUa::QAxisInformation &);
+ bool operator==(const QOpcUa::QAxisInformation &rhs) const;
+ operator QVariant() const;
+ ~QAxisInformation();
+
+ QOpcUa::QEUInformation engineeringUnits() const;
+ void setEngineeringUnits(const QOpcUa::QEUInformation &engineeringUnits);
+
+ QOpcUa::QRange eURange() const;
+ void setEURange(const QOpcUa::QRange &eURange);
+
+ QOpcUa::QLocalizedText title() const;
+ void setTitle(const QOpcUa::QLocalizedText &title);
+
+ QOpcUa::AxisScale axisScaleType() const;
+ void setAxisScaleType(QOpcUa::AxisScale axisScaleType);
+
+ QVector<double> axisSteps() const;
+ void setAxisSteps(const QVector<double> &axisSteps);
+ QVector<double> &axisStepsRef();
+
+private:
+ QSharedDataPointer<QOpcUa::QAxisInformationData> data;
+};
+
+class QXValueData;
+class Q_OPCUA_EXPORT QXValue
+{
+public:
+ QXValue();
+ QXValue(const QOpcUa::QXValue &);
+ QXValue(double x, float value);
+ QXValue &operator=(const QOpcUa::QXValue &);
+ bool operator==(const QOpcUa::QXValue &rhs) const;
+ operator QVariant() const;
+ ~QXValue();
+
+ double x() const;
+ void setX(double x);
+
+ float value() const;
+ void setValue(float value);
+
+private:
+ QSharedDataPointer<QOpcUa::QXValueData> data;
+};
+
+class QExpandedNodeIdData;
+class Q_OPCUA_EXPORT QExpandedNodeId
+{
+public:
+ QExpandedNodeId();
+ QExpandedNodeId(const QOpcUa::QExpandedNodeId &);
+ QExpandedNodeId(const QString &nodeId);
+ QExpandedNodeId(const QString &namespaceUri, const QString &nodeId, quint32 serverIndex = 0);
+ QExpandedNodeId &operator=(const QOpcUa::QExpandedNodeId &);
+ bool operator==(const QOpcUa::QExpandedNodeId &) const;
+ operator QVariant() const;
+ ~QExpandedNodeId();
+
+ quint32 serverIndex() const;
+ void setServerIndex(quint32 serverIndex);
+
+ QString namespaceUri() const;
+ void setNamespaceUri(const QString &namespaceUri);
+
+ QString nodeId() const;
+ void setNodeId(const QString &nodeId);
+
+private:
+ QSharedDataPointer<QOpcUa::QExpandedNodeIdData> data;
+};
+
+class QRelativePathElementData;
+class Q_OPCUA_EXPORT QRelativePathElement
+{
+public:
+ QRelativePathElement();
+ QRelativePathElement(const QOpcUa::QQualifiedName &target, const QString &refType);
+ QRelativePathElement(const QOpcUa::QQualifiedName &target, QOpcUa::ReferenceTypeId refType);
+ QRelativePathElement(const QOpcUa::QRelativePathElement &);
+ QRelativePathElement &operator=(const QOpcUa::QRelativePathElement &);
+ bool operator==(const QOpcUa::QRelativePathElement &rhs) const;
+ ~QRelativePathElement();
+
+ QString referenceTypeId() const;
+ void setReferenceTypeId(const QString &referenceTypeId);
+ void setReferenceTypeId(QOpcUa::ReferenceTypeId referenceTypeId);
+
+ bool isInverse() const;
+ void setIsInverse(bool isInverse);
+
+ bool includeSubtypes() const;
+ void setIncludeSubtypes(bool includeSubtypes);
+
+ QOpcUa::QQualifiedName targetName() const;
+ void setTargetName(const QOpcUa::QQualifiedName &targetName);
+
+private:
+ QSharedDataPointer<QOpcUa::QRelativePathElementData> data;
+};
+
+class QBrowsePathTargetData;
+class Q_OPCUA_EXPORT QBrowsePathTarget
+{
+public:
+ QBrowsePathTarget();
+ QBrowsePathTarget(const QOpcUa::QBrowsePathTarget &);
+ QBrowsePathTarget &operator=(const QOpcUa::QBrowsePathTarget &);
+ bool operator==(const QOpcUa::QBrowsePathTarget &rhs) const;
+ ~QBrowsePathTarget();
+
+ QOpcUa::QExpandedNodeId targetId() const;
+ QOpcUa::QExpandedNodeId &targetIdRef();
+ void setTargetId(const QOpcUa::QExpandedNodeId &targetId);
+
+ quint32 remainingPathIndex() const;
+ void setRemainingPathIndex(quint32 remainingPathIndex);
+
+ bool isFullyResolved() const;
+
+
+private:
+ QSharedDataPointer<QOpcUa::QBrowsePathTargetData> data;
+};
+
+// OPC-UA part 4, 7.4.4.2
+class QElementOperandData;
+class Q_OPCUA_EXPORT QElementOperand
+{
+public:
+ QElementOperand();
+ QElementOperand(const QElementOperand &);
+ QElementOperand(quint32 index);
+ QElementOperand &operator=(const QElementOperand &);
+ operator QVariant() const;
+ ~QElementOperand();
+
+ quint32 index() const;
+ void setIndex(quint32 index);
+
+private:
+ QSharedDataPointer<QOpcUa::QElementOperandData> data;
+};
+
+// OPC-UA part 4, 7.4.4.3
+class QLiteralOperandData;
+class Q_OPCUA_EXPORT QLiteralOperand
+{
+public:
+ QLiteralOperand();
+ QLiteralOperand(const QOpcUa::QLiteralOperand &);
+ QLiteralOperand(const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined);
+ QLiteralOperand &operator=(const QOpcUa::QLiteralOperand &);
+ operator QVariant() const;
+ ~QLiteralOperand();
+
+ QVariant value() const;
+ void setValue(const QVariant &value);
+
+ QOpcUa::Types type() const;
+ void setType(QOpcUa::Types type);
+
+private:
+ QSharedDataPointer<QOpcUa::QLiteralOperandData> data;
+};
+
+// OPC-UA part 4, 7.4.4.5
+class QSimpleAttributeOperandData;
+class Q_OPCUA_EXPORT QSimpleAttributeOperand
+{
+public:
+ QSimpleAttributeOperand();
+ QSimpleAttributeOperand(const QOpcUa::QSimpleAttributeOperand &);
+ QSimpleAttributeOperand(const QString &name, quint16 namespaceIndex = 0,
+ const QString &typeId = QStringLiteral("ns=0;i=2041"), // BaseEventType
+ QOpcUa::NodeAttribute attributeId = QOpcUa::NodeAttribute::Value);
+ QSimpleAttributeOperand(QOpcUa::NodeAttribute attributeId,
+ const QString &typeId = QStringLiteral("ns=0;i=2041")); // BaseEventType
+ QSimpleAttributeOperand &operator=(const QOpcUa::QSimpleAttributeOperand &);
+ bool operator==(const QSimpleAttributeOperand &rhs) const;
+ operator QVariant() const;
+ ~QSimpleAttributeOperand();
+
+ QString typeId() const;
+ void setTypeId(const QString &typeId);
+
+ QVector<QOpcUa::QQualifiedName> browsePath() const;
+ QVector<QOpcUa::QQualifiedName> &browsePathRef();
+ void setBrowsePath(const QVector<QOpcUa::QQualifiedName> &browsePath);
+
+ QOpcUa::NodeAttribute attributeId() const;
+ void setAttributeId(QOpcUa::NodeAttribute attributeId);
+
+ QString indexRange() const;
+ void setIndexRange(const QString &indexRange);
+
+private:
+ QSharedDataPointer<QOpcUa::QSimpleAttributeOperandData> data;
+};
+
+// OPC-UA part 4, 7.4.4.4
+class QAttributeOperandData;
+class Q_OPCUA_EXPORT QAttributeOperand
+{
+public:
+ QAttributeOperand();
+ QAttributeOperand(const QOpcUa::QAttributeOperand &);
+ QAttributeOperand &operator=(const QOpcUa::QAttributeOperand &);
+ operator QVariant() const;
+ ~QAttributeOperand();
+
+ QString nodeId() const;
+ void setNodeId(const QString &nodeId);
+
+ QString alias() const;
+ void setAlias(const QString &alias);
+
+ QVector<QOpcUa::QRelativePathElement> browsePath() const;
+ QVector<QOpcUa::QRelativePathElement> &browsePathRef();
+ void setBrowsePath(const QVector<QOpcUa::QRelativePathElement> &browsePath);
+
+ QOpcUa::NodeAttribute attributeId() const;
+ void setAttributeId(QOpcUa::NodeAttribute attributeId);
+
+ QString indexRange() const;
+ void setIndexRange(const QString &indexRange);
+
+private:
+ QSharedDataPointer<QOpcUa::QAttributeOperandData> data;
+};
+
+class QContentFilterElementData;
+class Q_OPCUA_EXPORT QContentFilterElement
+{
+public:
+ QContentFilterElement();
+ QContentFilterElement(const QContentFilterElement &);
+ QContentFilterElement &operator=(const QContentFilterElement &);
+ bool operator==(const QContentFilterElement &rhs) const;
+ operator QVariant() const;
+ ~QContentFilterElement();
+
+ // Specified in OPC-UA part 4, Tables 115 and 116
+ enum FilterOperator : quint32 {
+ Equals = 0,
+ IsNull = 1,
+ GreaterThan = 2,
+ LessThan = 3,
+ GreaterThanOrEqual = 4,
+ LessThanOrEqual = 5,
+ Like = 6,
+ Not = 7,
+ Between = 8,
+ InList = 9,
+ And = 10,
+ Or = 11,
+ Cast = 12,
+ InView = 13,
+ OfType = 14,
+ RelatedTo = 15,
+ BitwiseAnd = 16,
+ BitwiseOr = 17
+ };
+
+ QContentFilterElement &operator<<(FilterOperator op);
+ QContentFilterElement &operator<<(const QSimpleAttributeOperand &op);
+ QContentFilterElement &operator<<(const QAttributeOperand &op);
+ QContentFilterElement &operator<<(const QLiteralOperand &op);
+ QContentFilterElement &operator<<(const QElementOperand &op);
+
+
+ QOpcUa::QContentFilterElement::FilterOperator filterOperator() const;
+ void setFilterOperator(QOpcUa::QContentFilterElement::FilterOperator filterOperator);
+
+ QVector<QVariant> filterOperands() const;
+ QVector<QVariant> &filterOperandsRef();
+ void setFilterOperands(const QVector<QVariant> &filterOperands);
+
+private:
+ QSharedDataPointer<QOpcUa::QContentFilterElementData> data;
+};
+
+class QContentFilterElementResultData;
+class Q_OPCUA_EXPORT QContentFilterElementResult
+{
+public:
+ QContentFilterElementResult();
+ QContentFilterElementResult(const QOpcUa::QContentFilterElementResult &);
+ QContentFilterElementResult &operator=(const QOpcUa::QContentFilterElementResult &);
+ ~QContentFilterElementResult();
+
+ QOpcUa::UaStatusCode statusCode() const;
+ void setStatusCode(QOpcUa::UaStatusCode statusCode);
+
+ QVector<QOpcUa::UaStatusCode> operandStatusCodes() const;
+ QVector<QOpcUa::UaStatusCode> &operandStatusCodesRef();
+ void setOperandStatusCodes(const QVector<QOpcUa::UaStatusCode> &operandStatusCodes);
+
+private:
+ QSharedDataPointer<QOpcUa::QContentFilterElementResultData> data;
+};
+
+class QEventFilterResultData;
+class Q_OPCUA_EXPORT QEventFilterResult
+{
+public:
+ QEventFilterResult();
+ QEventFilterResult(const QOpcUa::QEventFilterResult &);
+ QEventFilterResult &operator=(const QOpcUa::QEventFilterResult &);
+ ~QEventFilterResult();
+
+ bool isGood() const;
+
+ QVector<QOpcUa::UaStatusCode> selectClauseResults() const;
+ QVector<QOpcUa::UaStatusCode> &selectClauseResultsRef();
+ void setSelectClauseResults(const QVector<QOpcUa::UaStatusCode> &selectClausesResult);
+
+ QVector<QOpcUa::QContentFilterElementResult> whereClauseResults() const;
+ QVector<QOpcUa::QContentFilterElementResult> &whereClauseResultsRef();
+ void setWhereClauseResults(const QVector<QOpcUa::QContentFilterElementResult> &whereClauseResult);
+
+private:
+ QSharedDataPointer<QEventFilterResultData> data;
+};
+
+class QUserTokenPolicyData;
+class Q_OPCUA_EXPORT QUserTokenPolicy
+{
+public:
+ QUserTokenPolicy();
+ QUserTokenPolicy(const QUserTokenPolicy &);
+ QUserTokenPolicy &operator=(const QUserTokenPolicy &);
+ ~QUserTokenPolicy();
+
+ enum TokenType {
+ Anonymous = 0,
+ Username = 1,
+ Certificate = 2,
+ IssuedToken = 3
+ };
+
+ QString policyId() const;
+ void setPolicyId(const QString &policyId);
+
+ TokenType tokenType() const;
+ void setTokenType(QOpcUa::QUserTokenPolicy::TokenType tokenType);
+
+ QString issuedTokenType() const;
+ void setIssuedTokenType(const QString &issuedTokenType);
+
+ QString issuerEndpointUrl() const;
+ void setIssuerEndpointUrl(const QString &issuerEndpointUrl);
+
+ QString securityPolicyUri() const;
+ void setSecurityPolicyUri(const QString &securityPolicyUri);
+
+private:
+ QSharedDataPointer<QUserTokenPolicyData> data;
+};
+
+class QApplicationDescriptionData;
+class Q_OPCUA_EXPORT QApplicationDescription
+{
+public:
+ QApplicationDescription();
+ QApplicationDescription(const QApplicationDescription &);
+ QApplicationDescription &operator=(const QApplicationDescription &);
+ ~QApplicationDescription();
+
+ enum ApplicationType {
+ Server = 0,
+ Client = 1,
+ ClientAndServer = 2,
+ DiscoveryServer = 3
+ };
+
+ QString applicationUri() const;
+ void setApplicationUri(const QString &applicationUri);
+
+ QString productUri() const;
+ void setProductUri(const QString &productUri);
+
+ QOpcUa::QLocalizedText applicationName() const;
+ void setApplicationName(const QOpcUa::QLocalizedText &applicationName);
+
+ QOpcUa::QApplicationDescription::ApplicationType applicationType() const;
+ void setApplicationType(QOpcUa::QApplicationDescription::ApplicationType applicationType);
+
+ QString gatewayServerUri() const;
+ void setGatewayServerUri(const QString &gatewayServerUri);
+
+ QString discoveryProfileUri() const;
+ void setDiscoveryProfileUri(const QString &discoveryProfileUri);
+
+ QVector<QString> discoveryUrls() const;
+ QVector<QString> &discoveryUrlsRef();
+ void setDiscoveryUrls(const QVector<QString> &discoveryUrls);
+
+private:
+ QSharedDataPointer<QApplicationDescriptionData> data;
+};
+
+class QEndpointDescriptionData;
+class Q_OPCUA_EXPORT QEndpointDescription
+{
+public:
+ QEndpointDescription();
+ QEndpointDescription(const QEndpointDescription &);
+ QEndpointDescription &operator=(const QEndpointDescription &);
+ ~QEndpointDescription();
+
+ enum MessageSecurityMode {
+ Invalid = 0,
+ None = 1,
+ Sign = 2,
+ SignAndEncrypt = 3
+ };
+
+ QString endpointUrl() const;
+ void setEndpointUrl(const QString &endpointUrl);
+
+ QOpcUa::QApplicationDescription server() const;
+ QOpcUa::QApplicationDescription &serverRef();
+ void setServer(const QOpcUa::QApplicationDescription &server);
+
+ QByteArray serverCertificate() const;
+ void setServerCertificate(const QByteArray &serverCertificate);
+
+ QOpcUa::QEndpointDescription::MessageSecurityMode securityMode() const;
+ void setSecurityMode(QOpcUa::QEndpointDescription::MessageSecurityMode securityMode);
+
+ QString securityPolicyUri() const;
+ void setSecurityPolicyUri(const QString &securityPolicyUri);
+
+ QVector<QOpcUa::QUserTokenPolicy> userIdentityTokens() const;
+ QVector<QOpcUa::QUserTokenPolicy> &userIdentityTokensRef();
+ void setUserIdentityTokens(const QVector<QOpcUa::QUserTokenPolicy> &userIdentityTokens);
+
+ QString transportProfileUri() const;
+ void setTransportProfileUri(const QString &transportProfileUri);
+
+ quint8 securityLevel() const;
+ void setSecurityLevel(quint8 securityLevel);
+
+private:
+ QSharedDataPointer<QEndpointDescriptionData> data;
};
+
+class QArgumentData;
+class Q_OPCUA_EXPORT QArgument
+{
+public:
+ QArgument();
+ QArgument(const QArgument &rhs);
+ QArgument(const QString &name, const QString &dataTypeId, qint32 valueRank,
+ const QVector<quint32> &arrayDimensions, const QOpcUa::QLocalizedText &description);
+ QArgument &operator=(const QArgument &);
+ bool operator==(const QArgument &other) const;
+ operator QVariant() const;
+ ~QArgument();
+
+ QString name() const;
+ void setName(const QString &name);
+
+ QString dataTypeId() const;
+ void setDataTypeId(const QString &dataTypeId);
+
+ qint32 valueRank() const;
+ void setValueRank(qint32 valueRank);
+
+ QVector<quint32> arrayDimensions() const;
+ QVector<quint32> &arrayDimensionsRef();
+ void setArrayDimensions(const QVector<quint32> &arrayDimensions);
+
+ QOpcUa::QLocalizedText description() const;
+ void setDescription(const QOpcUa::QLocalizedText &description);
+
+private:
+ QSharedDataPointer<QOpcUa::QArgumentData> data;
+};
+
+class QExtensionObjectData;
+class Q_OPCUA_EXPORT QExtensionObject
+{
+public:
+ enum Encoding {
+ NoBody = 0,
+ ByteString = 1,
+ Xml = 2
+ };
+
+ QExtensionObject();
+ QExtensionObject(const QOpcUa::QExtensionObject &);
+ ~QExtensionObject();
+ QExtensionObject &operator=(const QOpcUa::QExtensionObject &);
+ bool operator==(const QOpcUa::QExtensionObject &rhs) const;
+ operator QVariant() const;
+
+ QString encodingTypeId() const;
+ void setEncodingTypeId(const QString &encodingTypeId);
+
+ QByteArray encodedBody() const;
+ QByteArray &encodedBodyRef();
+ void setEncodedBody(const QByteArray &encodedBody);
+
+ QOpcUa::QExtensionObject::Encoding encoding() const;
+ void setEncoding(QOpcUa::QExtensionObject::Encoding encoding);
+
+private:
+ QSharedDataPointer<QOpcUa::QExtensionObjectData> data;
+};
+
+class QMultiDimensionalArrayData;
+class Q_OPCUA_EXPORT QMultiDimensionalArray
+{
+public:
+ QMultiDimensionalArray();
+ QMultiDimensionalArray(const QOpcUa::QMultiDimensionalArray &other);
+ QMultiDimensionalArray &operator=(const QOpcUa::QMultiDimensionalArray &rhs);
+ QMultiDimensionalArray(const QVariantList &valueArray, const QVector<quint32> &arrayDimensions);
+ QMultiDimensionalArray(const QVector<quint32> &arrayDimensions);
+ ~QMultiDimensionalArray();
+
+ QVariantList valueArray() const;
+ QVariantList &valueArrayRef();
+ void setValueArray(const QVariantList &valueArray);
+
+ int arrayIndex(const QVector<quint32> &indices) const;
+ QVariant value(const QVector<quint32> &indices) const;
+ bool setValue(const QVector<quint32> &indices, const QVariant &value);
+
+ bool isValid() const;
+
+ QVector<quint32> arrayDimensions() const;
+ void setArrayDimensions(const QVector<quint32> &arrayDimensions);
+
+ bool operator==(const QOpcUa::QMultiDimensionalArray &other) const;
+
+ operator QVariant() const;
+
+private:
+ QSharedDataPointer<QOpcUa::QMultiDimensionalArrayData> data;
+};
+
}
Q_DECLARE_TYPEINFO(QOpcUa::Types, Q_PRIMITIVE_TYPE);
@@ -589,6 +1199,9 @@ Q_DECLARE_TYPEINFO(QOpcUa::ErrorCategory, Q_PRIMITIVE_TYPE);
Q_DECLARE_TYPEINFO(QOpcUa::NodeClass, Q_PRIMITIVE_TYPE);
Q_DECLARE_TYPEINFO(QOpcUa::NodeAttribute, Q_PRIMITIVE_TYPE);
Q_DECLARE_OPERATORS_FOR_FLAGS(QOpcUa::NodeAttributes)
+Q_DECLARE_OPERATORS_FOR_FLAGS(QOpcUa::WriteMask)
+Q_DECLARE_OPERATORS_FOR_FLAGS(QOpcUa::AccessLevel)
+Q_DECLARE_OPERATORS_FOR_FLAGS(QOpcUa::EventNotifier)
Q_DECLARE_OPERATORS_FOR_FLAGS(QOpcUa::NodeClasses)
Q_DECLARE_TYPEINFO(QOpcUa::ReferenceTypeId, Q_PRIMITIVE_TYPE);
@@ -603,6 +1216,12 @@ Q_DECLARE_METATYPE(QOpcUa::ErrorCategory)
Q_DECLARE_METATYPE(QOpcUa::NodeClass)
Q_DECLARE_METATYPE(QOpcUa::NodeAttribute)
Q_DECLARE_METATYPE(QOpcUa::NodeAttributes)
+Q_DECLARE_METATYPE(QOpcUa::WriteMaskBit)
+Q_DECLARE_METATYPE(QOpcUa::WriteMask)
+Q_DECLARE_METATYPE(QOpcUa::AccessLevelBit)
+Q_DECLARE_METATYPE(QOpcUa::AccessLevel)
+Q_DECLARE_METATYPE(QOpcUa::EventNotifierBit)
+Q_DECLARE_METATYPE(QOpcUa::EventNotifier)
Q_DECLARE_METATYPE(QOpcUa::ReferenceTypeId)
Q_DECLARE_METATYPE(QOpcUa::NodeClasses)
Q_DECLARE_METATYPE(QOpcUa::QRange)
@@ -611,5 +1230,21 @@ Q_DECLARE_METATYPE(QOpcUa::QComplexNumber)
Q_DECLARE_METATYPE(QOpcUa::QDoubleComplexNumber)
Q_DECLARE_METATYPE(QOpcUa::QAxisInformation)
Q_DECLARE_METATYPE(QOpcUa::QXValue)
+Q_DECLARE_METATYPE(QOpcUa::QExpandedNodeId)
+Q_DECLARE_METATYPE(QOpcUa::QRelativePathElement)
+Q_DECLARE_METATYPE(QOpcUa::QBrowsePathTarget)
+Q_DECLARE_METATYPE(QOpcUa::QContentFilterElement)
+Q_DECLARE_METATYPE(QOpcUa::QElementOperand)
+Q_DECLARE_METATYPE(QOpcUa::QLiteralOperand)
+Q_DECLARE_METATYPE(QOpcUa::QSimpleAttributeOperand)
+Q_DECLARE_METATYPE(QOpcUa::QAttributeOperand)
+Q_DECLARE_METATYPE(QOpcUa::QContentFilterElementResult)
+Q_DECLARE_METATYPE(QOpcUa::QEventFilterResult)
+Q_DECLARE_METATYPE(QOpcUa::QUserTokenPolicy)
+Q_DECLARE_METATYPE(QOpcUa::QApplicationDescription)
+Q_DECLARE_METATYPE(QOpcUa::QEndpointDescription)
+Q_DECLARE_METATYPE(QOpcUa::QArgument)
+Q_DECLARE_METATYPE(QOpcUa::QExtensionObject)
+Q_DECLARE_METATYPE(QOpcUa::QMultiDimensionalArray)
#endif // QOPCUATYPE
diff --git a/src/opcua/client/qopcuawriteitem.cpp b/src/opcua/client/qopcuawriteitem.cpp
new file mode 100644
index 0000000..325e655
--- /dev/null
+++ b/src/opcua/client/qopcuawriteitem.cpp
@@ -0,0 +1,267 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qopcuawriteitem.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QOpcUaWriteItem
+ \inmodule QtOpcUa
+ \brief This class stores the options for a write operation.
+
+ A write operation on an OPC UA server overwrites the entire value or a certain index range of the value of an
+ attribute of a node on the server. This class contains the necessary information for the backend to make
+ a write request to the server.
+
+ One or multiple objects of this class make up the request of a \l QOpcUaClient::batchWrite() operation.
+
+ \sa QOpcUaClient::batchWrite() QOpcUaWriteResult
+*/
+class QOpcUaWriteItemData : public QSharedData
+{
+public:
+ QString nodeId;
+ QOpcUa::NodeAttribute attribute {QOpcUa::NodeAttribute::Value};
+ QString indexRange;
+ QVariant value;
+ QOpcUa::Types type {QOpcUa::Types::Undefined};
+ QDateTime sourceTimestamp;
+ QDateTime serverTimestamp;
+ QOpcUa::UaStatusCode statusCode {QOpcUa::UaStatusCode::Good};
+ bool hasStatusCode {false};
+};
+
+QOpcUaWriteItem::QOpcUaWriteItem()
+ : data(new QOpcUaWriteItemData)
+{
+}
+
+/*!
+ Creates a new write item from \a other.
+*/
+QOpcUaWriteItem::QOpcUaWriteItem(const QOpcUaWriteItem &other)
+ : data(other.data)
+{
+}
+
+/*!
+ Creates a write item for the attribute \a attribute from node \a nodeId.
+ The value \a value of type \a type will be written at position \a indexRange of \a attribute.
+*/
+QOpcUaWriteItem::QOpcUaWriteItem(const QString &nodeId, QOpcUa::NodeAttribute attribute,
+ const QVariant &value, QOpcUa::Types type, const QString &indexRange)
+ : data(new QOpcUaWriteItemData)
+{
+ setNodeId(nodeId);
+ setAttribute(attribute);
+ setValue(value);
+ setType(type);
+ setIndexRange(indexRange);
+}
+
+/*!
+ Sets the values from \a rhs in this write item.
+*/
+QOpcUaWriteItem &QOpcUaWriteItem::operator=(const QOpcUaWriteItem &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUaWriteItem::~QOpcUaWriteItem()
+{
+}
+
+/*!
+ Returns the node id of the write item.
+*/
+QString QOpcUaWriteItem::nodeId() const
+{
+ return data->nodeId;
+}
+
+/*!
+ Sets the node id of the write item to \a nodeId.
+*/
+void QOpcUaWriteItem::setNodeId(const QString &nodeId)
+{
+ data->nodeId = nodeId;
+}
+
+/*!
+ Returns the attribute of the write item.
+*/
+QOpcUa::NodeAttribute QOpcUaWriteItem::attribute() const
+{
+ return data->attribute;
+}
+
+/*!
+ Sets the attribute of the write item to \a attribute.
+*/
+void QOpcUaWriteItem::setAttribute(QOpcUa::NodeAttribute attribute)
+{
+ data->attribute = attribute;
+}
+
+/*!
+ Returns the index range of the write item.
+*/
+QString QOpcUaWriteItem::indexRange() const
+{
+ return data->indexRange;
+}
+
+/*!
+ Sets the index range of the write item to \a indexRange.
+*/
+void QOpcUaWriteItem::setIndexRange(const QString &indexRange)
+{
+ data->indexRange = indexRange;
+}
+
+/*!
+ Returns the value of the write item.
+*/
+QVariant QOpcUaWriteItem::value() const
+{
+ return data->value;
+}
+
+/*!
+ Sets the value of the write item to \a value.
+ If given, the type information from \l setType() will be used in converting
+ the value to a SDK specific data type.
+
+ \sa setType()
+*/
+void QOpcUaWriteItem::setValue(const QVariant &value)
+{
+ data->value = value;
+}
+
+/*!
+ Sets the value of the write item to \value and the type of the value to \a type.
+*/
+void QOpcUaWriteItem::setValue(const QVariant &value, QOpcUa::Types type)
+{
+ data->value = value;
+ data->type = type;
+}
+
+/*!
+ Returns the type of the value of the write item.
+*/
+QOpcUa::Types QOpcUaWriteItem::type() const
+{
+ return data->type;
+}
+
+/*!
+ Sets the type of the value of the write item to \a type.
+*/
+void QOpcUaWriteItem::setType(QOpcUa::Types type)
+{
+ data->type = type;
+}
+
+/*!
+ Returns the source timestamp for the value to write.
+*/
+QDateTime QOpcUaWriteItem::sourceTimestamp() const
+{
+ return data->sourceTimestamp;
+}
+
+/*!
+ Sets the source timestamp for the value to write to \a sourceTimestamp.
+ If the source timestamp is invalid, it is ignored by the client and not sent to the server.
+ If the server doesn't support writing timestamps, the write operation for this item
+ will fail with status code \l {QOpcUa::UaStatusCode} {BadWriteNotSupported}.
+*/
+void QOpcUaWriteItem::setSourceTimestamp(const QDateTime &sourceTimestamp)
+{
+ data->sourceTimestamp = sourceTimestamp;
+}
+
+/*!
+ Returns the server timestamp for the value to write.
+*/
+QDateTime QOpcUaWriteItem::serverTimestamp() const
+{
+ return data->serverTimestamp;
+}
+
+/*!
+ Sets the server timestamp for the value to write to \a serverTimestamp.
+ If the server timestamp is invalid, it is ignored by the client and not sent to the server.
+ If the server doesn't support writing timestamps, the write operation for this item
+ will fail with status code \l {QOpcUa::UaStatusCode} {BadWriteNotSupported}.
+*/
+void QOpcUaWriteItem::setServerTimestamp(const QDateTime &serverTimestamp)
+{
+ data->serverTimestamp = serverTimestamp;
+}
+
+/*!
+ Returns the status code for the value to write.
+*/
+QOpcUa::UaStatusCode QOpcUaWriteItem::statusCode() const
+{
+ return data->statusCode;
+}
+
+/*!
+ Returns true if a status code for the value to write has been set.
+*/
+bool QOpcUaWriteItem::hasStatusCode() const
+{
+ return data->statusCode;
+}
+
+/*!
+ Sets the status code for the value to write to \a statusCode.
+ If no status code is set, no status code is sent to the server.
+*/
+void QOpcUaWriteItem::setStatusCode(QOpcUa::UaStatusCode statusCode)
+{
+ data->statusCode = statusCode;
+ data->hasStatusCode = true;
+}
+
+QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuawriteitem.h b/src/opcua/client/qopcuawriteitem.h
new file mode 100644
index 0000000..b0cc9b3
--- /dev/null
+++ b/src/opcua/client/qopcuawriteitem.h
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOPCUAWRITEITEM_H
+#define QOPCUAWRITEITEM_H
+
+#include <QtOpcUa/qopcuatype.h>
+
+#include <QtCore/qdatetime.h>
+
+QT_BEGIN_NAMESPACE
+
+class QOpcUaWriteItemData;
+class Q_OPCUA_EXPORT QOpcUaWriteItem
+{
+public:
+ QOpcUaWriteItem();
+ QOpcUaWriteItem(const QOpcUaWriteItem &other);
+ QOpcUaWriteItem(const QString &nodeId, QOpcUa::NodeAttribute attribute, const QVariant &value,
+ QOpcUa::Types type = QOpcUa::Types::Undefined, const QString &indexRange = QString());
+ QOpcUaWriteItem &operator=(const QOpcUaWriteItem &rhs);
+ ~QOpcUaWriteItem();
+
+ QString nodeId() const;
+ void setNodeId(const QString &nodeId);
+
+ QOpcUa::NodeAttribute attribute() const;
+ void setAttribute(QOpcUa::NodeAttribute attribute);
+
+ QString indexRange() const;
+ void setIndexRange(const QString &indexRange);
+
+ QVariant value() const;
+ void setValue(const QVariant &value);
+ void setValue(const QVariant &value, QOpcUa::Types type);
+
+ QOpcUa::Types type() const;
+ void setType(QOpcUa::Types type);
+
+ QDateTime sourceTimestamp() const;
+ void setSourceTimestamp(const QDateTime &sourceTimestamp);
+
+ QDateTime serverTimestamp() const;
+ void setServerTimestamp(const QDateTime &serverTimestamp);
+
+ QOpcUa::UaStatusCode statusCode() const;
+ bool hasStatusCode() const;
+ void setStatusCode(QOpcUa::UaStatusCode statusCode);
+
+private:
+ QSharedDataPointer<QOpcUaWriteItemData> data;
+};
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QOpcUaWriteItem)
+
+#endif // QOPCUAWRITEITEM_H
diff --git a/src/opcua/client/qopcuawriteresult.cpp b/src/opcua/client/qopcuawriteresult.cpp
new file mode 100644
index 0000000..89327d1
--- /dev/null
+++ b/src/opcua/client/qopcuawriteresult.cpp
@@ -0,0 +1,158 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qopcuawriteresult.h"
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QOpcUaWriteResult
+ \inmodule QtOpcUa
+ \brief This class stores the result of a write operation.
+
+ A write operation on an OPC UA server returns a status code which describes if the value could
+ be written and if not, for what reason the write has failed.
+
+ In addition to the status code returned by the server, this class also contains the node id, the attribute and the index
+ range from the request to enable a client to match the result with a request.
+
+ Objects of this class are returned in the \l QOpcUaClient::batchWriteFinished()
+ signal and contain the result of a write operation that was part of a \l QOpcUaClient::batchWrite()
+ request.
+
+ \sa QOpcUaClient::batchWrite() QOpcUaClient::batchWriteFinished() QOpcUaWriteItem
+*/
+class QOpcUaWriteResultData : public QSharedData
+{
+public:
+ QString nodeId;
+ QOpcUa::NodeAttribute attribute {QOpcUa::NodeAttribute::Value};
+ QString indexRange;
+ QOpcUa::UaStatusCode statusCode {QOpcUa::UaStatusCode::Good};
+};
+
+QOpcUaWriteResult::QOpcUaWriteResult()
+ : data(new QOpcUaWriteResultData)
+{
+}
+
+/*!
+ Constructs a write result from \a other.
+*/
+QOpcUaWriteResult::QOpcUaWriteResult(const QOpcUaWriteResult &other)
+ : data(other.data)
+{
+}
+
+/*!
+ Sets the values from \a rhs in this write result.
+*/
+QOpcUaWriteResult &QOpcUaWriteResult::operator=(const QOpcUaWriteResult &rhs)
+{
+ if (this != &rhs)
+ data.operator=(rhs.data);
+ return *this;
+}
+
+QOpcUaWriteResult::~QOpcUaWriteResult()
+{
+}
+
+/*!
+ Returns the node id of the write result.
+*/
+QString QOpcUaWriteResult::nodeId() const
+{
+ return data->nodeId;
+}
+
+/*!
+ Sets the node id of the write result to \a nodeId.
+*/
+void QOpcUaWriteResult::setNodeId(const QString &nodeId)
+{
+ data->nodeId = nodeId;
+}
+
+/*!
+ Returns the attribute of the write result.
+*/
+QOpcUa::NodeAttribute QOpcUaWriteResult::attribute() const
+{
+ return data->attribute;
+}
+
+/*!
+ Sets the attribute of the write result to \a attribute.
+*/
+void QOpcUaWriteResult::setAttribute(QOpcUa::NodeAttribute attribute)
+{
+ data->attribute = attribute;
+}
+
+/*!
+ Returns the index range of the write result.
+*/
+QString QOpcUaWriteResult::indexRange() const
+{
+ return data->indexRange;
+}
+
+/*!
+ Sets the index range of the write result to \a indexRange.
+*/
+void QOpcUaWriteResult::setIndexRange(const QString &indexRange)
+{
+ data->indexRange = indexRange;
+}
+
+/*!
+ Returns the status code of the write result.
+*/
+QOpcUa::UaStatusCode QOpcUaWriteResult::statusCode() const
+{
+ return data->statusCode;
+}
+
+/*!
+ Sets the status code of the write result to \a statusCode.
+*/
+void QOpcUaWriteResult::setStatusCode(QOpcUa::UaStatusCode statusCode)
+{
+ data->statusCode = statusCode;
+}
+
+QT_END_NAMESPACE
diff --git a/src/opcua/client/qopcuawriteresult.h b/src/opcua/client/qopcuawriteresult.h
new file mode 100644
index 0000000..095dbdb
--- /dev/null
+++ b/src/opcua/client/qopcuawriteresult.h
@@ -0,0 +1,73 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOPCUAWRITERESULT_H
+#define QOPCUAWRITERESULT_H
+
+#include <QtOpcUa/qopcuatype.h>
+
+QT_BEGIN_NAMESPACE
+
+class QOpcUaWriteResultData;
+class Q_OPCUA_EXPORT QOpcUaWriteResult
+{
+public:
+ QOpcUaWriteResult();
+ QOpcUaWriteResult(const QOpcUaWriteResult &other);
+ QOpcUaWriteResult &operator=(const QOpcUaWriteResult &rhs);
+ ~QOpcUaWriteResult();
+
+ QString nodeId() const;
+ void setNodeId(const QString &nodeId);
+
+ QOpcUa::NodeAttribute attribute() const;
+ void setAttribute(QOpcUa::NodeAttribute attribute);
+
+ QString indexRange() const;
+ void setIndexRange(const QString &indexRange);
+
+ QOpcUa::UaStatusCode statusCode() const;
+ void setStatusCode(QOpcUa::UaStatusCode statusCode);
+
+private:
+ QSharedDataPointer<QOpcUaWriteResultData> data;
+};
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QOpcUaWriteResult)
+
+#endif // QOPCUAWRITERESULT_H
diff --git a/src/opcua/configure.json b/src/opcua/configure.json
index f158772..5cdc63e 100644
--- a/src/opcua/configure.json
+++ b/src/opcua/configure.json
@@ -3,44 +3,19 @@
"testDir": "../../config.tests",
"libraries": {
- "freeopcua": {
- "label": "FreeOpcua",
- "test": "freeopcua",
- "sources": [
- {
- "type": "pkgConfig",
- "args": "libopcuacore libopcuaprotocol libopcuaclient libopcuaserver",
- "condition": "!config.win32"
- },
- {
- "libs": "-lopcuacore -lopcuaclient -lopcuaprotocol -lopcuaserver -lWininet",
- "condition": "config.win32"
- }
- ]
- },
"open62541": {
"label": "Open62541",
"test": "open62541",
"sources": [
{
"libs": "-lopen62541",
- "condition": "!config.win32",
- "type": "open62541"
- },
- {
- "libs": "-lopen62541 -lws2_32",
- "condition": "config.win32",
- "type": "open62541"
+ "condition": "!config.win32"
},
{
"libs": "-lopen62541 -lws2_32",
"condition": "config.win32"
},
{
- "libs": "-lopen62541",
- "condition": "!config.win32"
- },
- {
"type": "pkgConfig",
"args": "open62541"
}
@@ -68,11 +43,6 @@
},
"features": {
- "freeopcua": {
- "label": "FreeOpcua",
- "condition": "libs.freeopcua",
- "output": [ "privateFeature" ]
- },
"open62541": {
"label": "Open62541",
"condition": "libs.open62541",
@@ -82,13 +52,24 @@
"label": "Unified Automation C++ SDK",
"condition": "libs.uacpp",
"output": [ "privateFeature" ]
+ },
+ "ns0idnames": {
+ "label": "Support for namespace 0 NodeId names",
+ "purpose": "Provides names for the QOpcUa::NodeIds::Namespace0 enum.",
+ "output": [ "privateFeature" ]
+ },
+ "ns0idgenerator": {
+ "label": "Namespace 0 NodeIds generator",
+ "purpose": "Build a generator for updating the QOpcUa::NodeIds::Namespace0 enum from the NodeIds.csv file.",
+ "autoDetect": "false",
+ "output": [ "privateFeature" ]
}
},
"summary": [
{
"section": "Qt Opcua",
- "entries": [ "freeopcua", "open62541", "uacpp" ]
+ "entries": [ "open62541", "uacpp", "ns0idnames", "ns0idgenerator" ]
}
]
}
diff --git a/src/opcua/configure.pri b/src/opcua/configure.pri
index 4aad72f..d3322c2 100644
--- a/src/opcua/configure.pri
+++ b/src/opcua/configure.pri
@@ -1,26 +1,3 @@
-# Add OPC UA SDKs using environment variable
-
-defineTest(qtConfLibrary_open62541) {
- inc = $$getenv("QTOPCUA_OPEN62541_INCLUDE_PATH")
- lib = $$getenv("QTOPCUA_OPEN62541_LIB_PATH")
-
- isEmpty(inc) {
- qtLog("$QTOPCUA_OPEN62541_INCLUDE_PATH is not set.")
- return(false)
- }
-
- isEmpty(lib) {
- qtLog("$QTOPCUA_OPEN62541_LIB_PATH is not set.")
- return(false)
- }
-
- $${1}.libs += -L$${lib}
- $${1}.includedir = $${inc}
- export($${1}.libs)
- export($${1}.includedir)
- return(true)
-}
-
defineTest(qtConfLibrary_uacpp) {
!qtConfLibrary_inline($$1, $$2): \
return(false)
diff --git a/src/opcua/core/qopcuaprovider.cpp b/src/opcua/core/qopcuaprovider.cpp
index 52c0e50..6f19a0d 100644
--- a/src/opcua/core/qopcuaprovider.cpp
+++ b/src/opcua/core/qopcuaprovider.cpp
@@ -54,7 +54,7 @@ Q_LOGGING_CATEGORY(QT_OPCUA, "qt.opcua")
\class QOpcUaProvider
\inmodule QtOpcUa
- \brief QOpcUaProvider creates an instance of QOpcUaClient
+ \brief QOpcUaProvider creates an instance of QOpcUaClient.
QOpcUaProvider allows the user to create an instance of QOpcUaClient by
loading a QOpcUaPlugin using the Qt plugin system.
@@ -134,7 +134,6 @@ QOpcUaProvider::QOpcUaProvider(QObject *parent)
qRegisterMetaType<QOpcUaClient::ClientState>();
qRegisterMetaType<QOpcUaClient::ClientError>();
qRegisterMetaType<QOpcUa::ReferenceTypeId>();
- qRegisterMetaType<uintptr_t>("uintptr_t");
qRegisterMetaType<QOpcUaMonitoringParameters::SubscriptionType>();
qRegisterMetaType<QOpcUaMonitoringParameters::Parameter>();
qRegisterMetaType<QOpcUaMonitoringParameters::Parameters>();
@@ -148,6 +147,29 @@ QOpcUaProvider::QOpcUaProvider(QObject *parent)
qRegisterMetaType<QOpcUa::QDoubleComplexNumber>();
qRegisterMetaType<QOpcUa::QAxisInformation>();
qRegisterMetaType<QOpcUa::QXValue>();
+ qRegisterMetaType<QOpcUa::QExpandedNodeId>();
+ qRegisterMetaType<QOpcUa::QRelativePathElement>();
+ qRegisterMetaType<QVector<QOpcUa::QRelativePathElement>>();
+ qRegisterMetaType<QOpcUa::QBrowsePathTarget>();
+ qRegisterMetaType<QVector<QOpcUa::QBrowsePathTarget>>();
+ qRegisterMetaType<QOpcUa::QEndpointDescription>();
+ qRegisterMetaType<QVector<QOpcUa::QEndpointDescription>>();
+ qRegisterMetaType<QOpcUa::QArgument>();
+ qRegisterMetaType<QOpcUa::QExtensionObject>();
+ qRegisterMetaType<QOpcUaBrowseRequest>();
+ qRegisterMetaType<QOpcUaReadItem>();
+ qRegisterMetaType<QOpcUaReadResult>();
+ qRegisterMetaType<QVector<QOpcUaReadItem>>();
+ qRegisterMetaType<QVector<QOpcUaReadResult>>();
+ qRegisterMetaType<QOpcUaWriteItem>();
+ qRegisterMetaType<QOpcUaWriteResult>();
+ qRegisterMetaType<QVector<QOpcUaWriteItem>>();
+ qRegisterMetaType<QVector<QOpcUaWriteResult>>();
+ qRegisterMetaType<QOpcUaNodeCreationAttributes>();
+ qRegisterMetaType<QOpcUaAddNodeItem>();
+ qRegisterMetaType<QOpcUaAddReferenceItem>();
+ qRegisterMetaType<QOpcUaDeleteReferenceItem>();
+ qRegisterMetaType<QVector<QOpcUa::QApplicationDescription>>();
}
QOpcUaProvider::~QOpcUaProvider()
diff --git a/src/opcua/doc/qtopcua.qdocconf b/src/opcua/doc/qtopcua.qdocconf
index 0f57f64..e053b13 100644
--- a/src/opcua/doc/qtopcua.qdocconf
+++ b/src/opcua/doc/qtopcua.qdocconf
@@ -4,8 +4,10 @@ project = QtOpcUa
description = An OPC UA module for Qt
version = $QT_VERSION
-sourcedirs += ..
-headerdirs += ..
+sourcedirs += .. \
+ ../../imports
+headerdirs += .. \
+ ../../imports
exampledirs += ../../../examples/opcua
imagedirs += images
@@ -33,6 +35,11 @@ qhp.QtOpcUa.subprojects.classes.indexTitle = Qt OPC UA C++ Classes
qhp.QtOpcUa.subprojects.classes.selectors = class function namespace fake:headerfile
qhp.QtOpcUa.subprojects.classes.sortPages = true
+qhp.QtOpcUa.subprojects.qmltypes.title = QML Types
+qhp.QtOpcUa.subprojects.qmltypes.indexTitle = Qt OPC UA QML Types
+qhp.QtOpcUa.subprojects.qmltypes.selectors = qmltype
+qhp.QtOpcUa.subprojects.qmltypes.sortPages = true
+
qhp.QtOpcUa.subprojects.examples.title = Examples
qhp.QtOpcUa.subprojects.examples.indexTitle = Qt OPC UA Examples
qhp.QtOpcUa.subprojects.examples.selectors = fake:example
@@ -41,6 +48,7 @@ examples.fileextensions = "*.cpp"
navigation.landingpage = "Qt OPC UA"
navigation.cppclassespage = "Qt OPC UA C++ Classes"
+navigation.qmltypespage = "Qt OPC UA QML Types"
examplesinstallpath = opcua
@@ -49,7 +57,8 @@ depends += \
qtqml \
qtquick \
qtdoc \
- qmake
+ qmake \
+ qtwidgets
Cpp.ignoretokens += \
Q_OPCUA_EXPORT
diff --git a/src/opcua/doc/src/qtopcua.qdoc b/src/opcua/doc/src/qtopcua.qdoc
index 7152016..7259540 100644
--- a/src/opcua/doc/src/qtopcua.qdoc
+++ b/src/opcua/doc/src/qtopcua.qdoc
@@ -41,10 +41,32 @@
*/
/*!
+ \qmlmodule QtOpcUa
+ \title Qt OPC UA QML Types
+ \brief Provides QML types for Qt OPC UA.
+ \ingroup qmlmodules
+
+ The QML types can be imported into your application using the following
+ import statements in your .qml file:
+
+ \badcode
+ import QtOpcUa 5.12 as QtOpcUa
+ \endcode
+
+ To link against the module, add the following QT variable to your qmake .pro
+ file:
+
+ \badcode
+ QT += opcua
+ \endcode
+*/
+
+/*!
\page qtopcua-index.html
\since 5.7
\title Qt OPC UA
\brief Implements OPC UA connectivity through a Qt API.
+ \preliminary
The Qt \l{Qt OPC UA#A short introduction to OPC UA}{OPC UA} module
implements a Qt API to interact with OPC UA on top of a 3rd party
@@ -56,9 +78,11 @@
\list
\li Open62541 v0.3, MPLv2
\li Unified Automation C++ SDK (UACpp), Commercial
- \li FreeOPCUA, LGPL v3
\endlist
+ This module is still in development but is available as a technology preview.
+ This means it is unstable, likely to change and provided as a convenience only.
+
\section1 Getting started
Add the following line to your .pro file
@@ -101,37 +125,62 @@
\li Feature
\li Open62541 plugin
\li UACpp plugin
- \li FreeOPCUA plugin
\row
\li Read
\li X
\li X
+ \row
+ \li Batch read
\li X
+ \li
\row
\li Write
\li X
\li X
+ \row
+ \li Batch write
\li X
+ \li
\row
- \li Browse
+ \li Multidimensional arrays
\li X
+ \li
+ \row
+ \li Browse
\li X
\li X
\row
\li Data change subscriptions
\li X
\li X
+ \row
+ \li Event subscriptions
+ \li X
\li X
\row
\li Modify subscriptions / monitored Items
\li X
\li X
- \li
\row
\li Method calls
\li X
\li X
+ \row
+ \li Browse path resolution
+ \li X
+ \li X
+ \row
+ \li GetEndpoints
\li X
+ \li X
+ \row
+ \li FindServers
+ \li X
+ \li
+ \row
+ \li NodeManagement
+ \li X
+ \li
\endtable
\section1 Data types
@@ -143,140 +192,132 @@
\li Data type
\li Open62541 plugin
\li UACpp plugin
- \li FreeOPCUA plugin
\li Qt OPC UA data type
\row
\li Int16, Int32, Int64
\li X
\li X
- \li X
\li Directly used
\row
\li UInt16, UInt32, UInt64
\li X
\li X
- \li X
\li Directly used
\row
\li Byte
\li X
\li X
- \li X
\li quint8
\row
\li SByte
\li X
\li X
- \li X
\li qint8
\row
\li Boolean
\li X
\li X
- \li X
\li Directly used
\row
\li Double
\li X
\li X
- \li X
\li Directly used
\row
\li Float
\li X
\li X
- \li X
\li Directly used
\row
\li String
\li X
\li X
- \li X
\li QString
\row
\li LocalizedText
\li X
\li X
- \li X
\li \l QOpcUa::QLocalizedText
\row
\li DateTime
\li X
\li X
- \li X
\li QDateTime
\row
\li ByteString
\li X
\li X
- \li X
\li QByteArray
\row
\li XmlElement
\li X
\li X
- \li
\li QString
\row
\li NodeId
\li X
\li X
- \li X
\li QString
\row
\li GUID
\li X
\li X
- \li X
\li QUuid
\row
\li QualifiedName
\li X
\li X
- \li X
\li \l QOpcUa::QQualifiedName
\row
\li StatusCode
\li X
\li X
- \li X
\li \l QOpcUa::UaStatusCode
\row
\li Range
\li X
\li X
- \li
\li \l QOpcUa::QRange
\row
\li EUInformation
\li X
\li X
- \li
\li \l QOpcUa::QEUInformation
\row
\li ComplexNumber
\li X
\li X
- \li
\li \l QOpcUa::QComplexNumber
\row
\li DoubleComplexNumber
\li X
\li X
- \li
\li \l QOpcUa::QDoubleComplexNumber
\row
\li AxisInformation
\li X
\li X
- \li
\li \l QOpcUa::QAxisInformation
\row
\li XV
\li X
\li X
- \li
\li \l QOpcUa::QXValue
+ \row
+ \li Argument
+ \li X
+ \li
+ \li QOpcUa::QArgument
+ \row
+ \li ExpandedNodeId
+ \li X
+ \li X
+ \li QOpcUa::QExpandedNodeId
+ \row
+ \li ExtensionObject
+ \li X
+ \li
+ \li QOpcUa::QExtensionObject
\endtable
\section1 Classes and ownership
@@ -299,16 +340,36 @@
\row
\li qt.opcua.plugins.uacpp
\li Messages generated by the UACpp plugin
- \row
- \li qt.opcua.plugins.freeopcua
- \li Messages generated by the freeopcua plugin
\endtable
+ \section1 Licenses
+
+ The Qt OPC UA module is available under commercial licenses from \l{The Qt Company}.
+ In addition, it is available under free software licenses.
+ These free software licenses are
+ \l{GNU Lesser General Public License, version 3}, or
+ the \l{GNU General Public License, version 2}.
+ See \l{Qt Licensing} for further details.
+
+ Furthermore Qt OPC UA contains plugins under following licenses:
+
+ \section2 Open62541
+
+ The Open62541 plugin is available under the same licenses as Qt OPC UA. The Open62541 library itself
+ is licensed under \l {https://open62541}{Mozilla Public License v2.0}.
+
+ \section2 UA CPP
+
+ The UA CPP plugin is available under commercial licenses from \l{The Qt Company}.
+ The UA CPP library itself is available under commercial licenses from \l {https://www.unified-automation.com}{Unified Automation}.
+
\section1 Related Information
\list
+ \li \l{Building Qt OPC UA Open62541 Plugin}
\li \l{Building Qt OPC UA UACPP Plugin}
\li \l{Qt OPC UA C++ Classes}{C++ Classes}
+ \li \l{Qt OPC UA QML Types}{QML Types}
\li \l{Qt OPC UA Examples}{Examples}
\li \l{https://opcfoundation.org/about/opc-technologies/opc-ua/}{OPC UA at the OPC foundation}
\endlist
@@ -316,6 +377,53 @@
*/
/*!
+ \page qtopcua-build-open62541.html
+ \title Building Qt OPC UA Open62541 Plugin
+ \brief Build instructions for the Qt OPC UA Open62541 plugin.
+
+ The Open62541 plugin requires Open62541 v0.3 built with UA_ENABLE_AMALGAMATION=ON.
+
+ When building at the top level, you have to specify the path to the Open62541 SDK:
+
+ \code
+ configure OPEN62541_PREFIX=/path/to/sdk
+ \endcode
+
+ If you are not building at the top level, this setting has to be given to qmake:
+
+ \code
+ qmake </path/to/qtopcua> -- OPEN62541_PREFIX=/path/to/sdk
+ \endcode
+
+ If the open62541 header and library files are located in a custom path, different settings must be used:
+
+ \table
+ \header
+ \li Setting
+ \li Value
+ \row
+ \li OPEN62541_INCDIR
+ \li The directory which contains open62541.h
+ \row
+ \li OPEN62541_LIBDIR
+ \li The directory which contains the library file
+ \endtable
+
+ For example, the following settings can be used for building the open62541 plugin using a static build
+ directly from its build directory without installing it:
+ \code
+ OPEN62541_INCDIR=/path/to/open62541/build OPEN62541_LIBDIR=/path/to/open62541/build/bin
+ \endcode
+
+ The output of the configuration step indicates whether the detection was successful:
+
+ \code
+ Open62541 .............................. yes
+ \endcode
+
+*/
+
+/*!
\page qtopcua-build-uacpp.html
\title Building Qt OPC UA UACPP Plugin
\brief Build instructions for the Qt OPC UA UACPP plugin.
@@ -332,10 +440,9 @@
qmake </path/to/qtopcua> -- UACPP_PREFIX=/path/to/sdk
\endcode
- Check the output of the configuration step if the detection was successful:
+ The output of the configuration step indicates whether the detection was successful:
\code
Unified Automation C++ SDK ............. yes
\endcode
-
*/
diff --git a/src/opcua/opcua.pro b/src/opcua/opcua.pro
index abccb71..fba759b 100644
--- a/src/opcua/opcua.pro
+++ b/src/opcua/opcua.pro
@@ -14,3 +14,7 @@ PUBLIC_HEADERS += qopcuaglobal.h
DEFINES += QT_NO_FOREACH
HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS
+
+!qtConfig(ns0idnames): {
+ DEFINES += QT_OPCUA_NO_NS0IDNAMES
+}
diff --git a/src/plugins/opcua/freeopcua/freeopcua-metadata.json b/src/plugins/opcua/freeopcua/freeopcua-metadata.json
deleted file mode 100644
index 47411a5..0000000
--- a/src/plugins/opcua/freeopcua/freeopcua-metadata.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "Keys" : [ "freeopcua" ],
- "Provider" : "freeopcua",
- "Version" : "1.0",
- "Features" : [ "client" ],
- "stability" : 1
-}
diff --git a/src/plugins/opcua/freeopcua/freeopcua.pro b/src/plugins/opcua/freeopcua/freeopcua.pro
deleted file mode 100644
index cda9cae..0000000
--- a/src/plugins/opcua/freeopcua/freeopcua.pro
+++ /dev/null
@@ -1,30 +0,0 @@
-TARGET = freeopcua_backend
-QT += core core-private opcua opcua-private network concurrent
-
-PLUGIN_TYPE = opcua
-PLUGIN_CLASS_NAME = QFreeOpcUaPlugin
-load(qt_plugin)
-
-CONFIG += exceptions
-DEFINES += QT_NO_FOREACH
-QMAKE_USE_PRIVATE += freeopcua
-
-# Input
-HEADERS += \
- qfreeopcuanode.h \
- qfreeopcuasubscription.h \
- qfreeopcuaplugin.h \
- qfreeopcuavalueconverter.h \
- qfreeopcuaclient.h \
- qfreeopcuaworker.h
-
-SOURCES += qfreeopcuaclient.cpp \
- qfreeopcuanode.cpp \
- qfreeopcuasubscription.cpp \
- qfreeopcuaplugin.cpp \
- qfreeopcuavalueconverter.cpp \
- qfreeopcuaworker.cpp
-
-OTHER_FILES = freeopcua-metadata.json
-
-HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS
diff --git a/src/plugins/opcua/freeopcua/qfreeopcuaclient.cpp b/src/plugins/opcua/freeopcua/qfreeopcuaclient.cpp
deleted file mode 100644
index 9afe4ff..0000000
--- a/src/plugins/opcua/freeopcua/qfreeopcuaclient.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtOpcUa module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL3$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPLv3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or later as published by the Free
-** Software Foundation and appearing in the file LICENSE.GPL included in
-** the packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 2.0 requirements will be
-** met: http://www.gnu.org/licenses/gpl-2.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qfreeopcuaclient.h"
-#include "qfreeopcuanode.h"
-#include "qfreeopcuavalueconverter.h"
-#include "qfreeopcuaworker.h"
-#include <private/qopcuaclient_p.h>
-
-#include <QtCore/qloggingcategory.h>
-
-QT_BEGIN_NAMESPACE
-
-Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_FREEOPCUA)
-
-QFreeOpcUaClientImpl::QFreeOpcUaClientImpl()
- : QOpcUaClientImpl()
-{
- m_thread = new QThread();
- m_opcuaWorker = new QFreeOpcUaWorker(this);
- connectBackendWithClient(m_opcuaWorker);
- m_opcuaWorker->moveToThread(m_thread);
- connect(m_thread, &QThread::finished, m_opcuaWorker, &QObject::deleteLater);
- connect(m_thread, &QThread::finished, m_thread, &QObject::deleteLater);
- m_thread->start();
-}
-
-QFreeOpcUaClientImpl::~QFreeOpcUaClientImpl()
-{
- if (m_thread->isRunning())
- m_thread->quit();
-}
-
-void QFreeOpcUaClientImpl::connectToEndpoint(const QUrl &url)
-{
- QMetaObject::invokeMethod(m_opcuaWorker, "asyncConnectToEndpoint", Qt::QueuedConnection,
- Q_ARG(QUrl, url));
-}
-
-void QFreeOpcUaClientImpl::disconnectFromEndpoint()
-{
- QMetaObject::invokeMethod(m_opcuaWorker, "asyncDisconnectFromEndpoint", Qt::QueuedConnection);
-}
-
-QOpcUaNode *QFreeOpcUaClientImpl::node(const QString &nodeId)
-{
- if (!m_opcuaWorker)
- return nullptr;
-
- OpcUa::NodeId id = QFreeOpcUaValueConverter::stringToNodeId(nodeId);
-
- if (id.IsNull())
- return nullptr;
-
- try {
- OpcUa::Node node = m_opcuaWorker->GetNode(id);
- QFreeOpcUaNode *n = new QFreeOpcUaNode(node, this);
- return new QOpcUaNode(n, m_client);
- } catch (const std::exception &ex) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Could not get node:" << nodeId << ex.what();
- return nullptr;
- }
-}
-
-QT_END_NAMESPACE
diff --git a/src/plugins/opcua/freeopcua/qfreeopcuanode.cpp b/src/plugins/opcua/freeopcua/qfreeopcuanode.cpp
deleted file mode 100644
index 8677a27..0000000
--- a/src/plugins/opcua/freeopcua/qfreeopcuanode.cpp
+++ /dev/null
@@ -1,155 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtOpcUa module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL3$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPLv3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or later as published by the Free
-** Software Foundation and appearing in the file LICENSE.GPL included in
-** the packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 2.0 requirements will be
-** met: http://www.gnu.org/licenses/gpl-2.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qfreeopcuaclient.h"
-#include "qfreeopcuanode.h"
-#include "qfreeopcuasubscription.h"
-#include "qfreeopcuavalueconverter.h"
-#include "qfreeopcuaworker.h"
-
-#include <QtCore/qdatetime.h>
-#include <QtCore/qloggingcategory.h>
-
-#include <opc/ua/client/client.h>
-
-QT_BEGIN_NAMESPACE
-
-Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_FREEOPCUA)
-
-QFreeOpcUaNode::QFreeOpcUaNode(OpcUa::Node node, QFreeOpcUaClientImpl *client)
- : m_node(node)
- , m_client(client)
-{
- m_client->registerNode(this);
-}
-
-QFreeOpcUaNode::~QFreeOpcUaNode()
-{
- if (m_client)
- m_client->unregisterNode(this);
-}
-
-bool QFreeOpcUaNode::readAttributes(QOpcUa::NodeAttributes attr, const QString &indexRange)
-{
- return QMetaObject::invokeMethod(m_client->m_opcuaWorker, "readAttributes",
- Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
- Q_ARG(OpcUa::NodeId, m_node.GetId()),
- Q_ARG(QOpcUa::NodeAttributes, attr),
- Q_ARG(QString, indexRange));
-}
-
-bool QFreeOpcUaNode::enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings)
-{
- return QMetaObject::invokeMethod(m_client->m_opcuaWorker, "enableMonitoring",
- Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
- Q_ARG(OpcUa::Node, m_node),
- Q_ARG(QOpcUa::NodeAttributes, attr),
- Q_ARG(QOpcUaMonitoringParameters, settings));
-}
-
-bool QFreeOpcUaNode::disableMonitoring(QOpcUa::NodeAttributes attr)
-{
- return QMetaObject::invokeMethod(m_client->m_opcuaWorker, "disableMonitoring",
- Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
- Q_ARG(QOpcUa::NodeAttributes, attr));
-}
-
-bool QFreeOpcUaNode::modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, const QVariant &value)
-{
- return QMetaObject::invokeMethod(m_client->m_opcuaWorker, "modifyMonitoring",
- Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
- Q_ARG(QOpcUa::NodeAttribute, attr),
- Q_ARG(QOpcUaMonitoringParameters::Parameter, item),
- Q_ARG(QVariant, value));
-}
-
-QString QFreeOpcUaNode::nodeId() const
-{
- try {
- return QFreeOpcUaValueConverter::nodeIdToString(m_node.GetId());
- } catch (const std::exception &ex) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Failed to get id for node:" << ex.what();
- return QString();
- }
-}
-
-bool QFreeOpcUaNode::browseChildren(QOpcUa::ReferenceTypeId referenceType, QOpcUa::NodeClasses nodeClassMask)
-{
- return QMetaObject::invokeMethod(m_client->m_opcuaWorker, "browseChildren",
- Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
- Q_ARG(OpcUa::NodeId, m_node.GetId()),
- Q_ARG(QOpcUa::ReferenceTypeId, referenceType),
- Q_ARG(QOpcUa::NodeClasses, nodeClassMask));
-}
-
-bool QFreeOpcUaNode::writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant &value, QOpcUa::Types type, const QString &indexRange)
-{
- return QMetaObject::invokeMethod(m_client->m_opcuaWorker, "writeAttribute",
- Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
- Q_ARG(OpcUa::Node, m_node),
- Q_ARG(QOpcUa::NodeAttribute, attribute),
- Q_ARG(QVariant, value),
- Q_ARG(QOpcUa::Types, type),
- Q_ARG(QString, indexRange));
-}
-
-bool QFreeOpcUaNode::writeAttributes(const QOpcUaNode::AttributeMap &toWrite, QOpcUa::Types valueAttributeType)
-{
- return QMetaObject::invokeMethod(m_client->m_opcuaWorker, "writeAttributes",
- Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
- Q_ARG(OpcUa::Node, m_node),
- Q_ARG(QOpcUaNode::AttributeMap, toWrite),
- Q_ARG(QOpcUa::Types, valueAttributeType));
-}
-
-bool QFreeOpcUaNode::callMethod(const QString &methodNodeId, const QVector<QOpcUa::TypedVariant> &args)
-{
- return QMetaObject::invokeMethod(m_client->m_opcuaWorker, "callMethod",
- Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
- Q_ARG(OpcUa::NodeId, m_node.GetId()),
- Q_ARG(OpcUa::NodeId, QFreeOpcUaValueConverter::scalarFromQVariant<OpcUa::NodeId>(methodNodeId)),
- Q_ARG(QVector<QOpcUa::TypedVariant>, args));
-}
-
-QT_END_NAMESPACE
diff --git a/src/plugins/opcua/freeopcua/qfreeopcuasubscription.cpp b/src/plugins/opcua/freeopcua/qfreeopcuasubscription.cpp
deleted file mode 100644
index f15c9b6..0000000
--- a/src/plugins/opcua/freeopcua/qfreeopcuasubscription.cpp
+++ /dev/null
@@ -1,284 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtOpcUa module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL3$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPLv3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or later as published by the Free
-** Software Foundation and appearing in the file LICENSE.GPL included in
-** the packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 2.0 requirements will be
-** met: http://www.gnu.org/licenses/gpl-2.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qfreeopcuaclient.h"
-#include "qfreeopcuasubscription.h"
-#include "qfreeopcuavalueconverter.h"
-#include "qfreeopcuaworker.h"
-#include <private/qopcuanode_p.h>
-
-#include <QtCore/qloggingcategory.h>
-
-QT_BEGIN_NAMESPACE
-
-Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_FREEOPCUA)
-
-QFreeOpcUaSubscription::QFreeOpcUaSubscription(QFreeOpcUaWorker *backend, const QOpcUaMonitoringParameters &settings)
- : m_interval(settings.publishingInterval())
- , m_shared(settings.shared())
- , m_backend(backend)
- , m_timeout(false)
-{
- Q_ASSERT(m_backend);
-}
-
-QFreeOpcUaSubscription::~QFreeOpcUaSubscription()
-{
- removeOnServer();
-}
-
-quint32 QFreeOpcUaSubscription::createOnServer()
-{
- if (m_subscription)
- return 0;
-
- try {
- m_subscription = m_backend->CreateSubscription(m_interval, *this);
- m_interval = m_subscription->GetData().RevisedPublishingInterval;
- } catch (const std::exception &ex) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "CreateOnServer caught:" << ex.what();
- return 0;
- }
- return m_subscription->GetId();
-}
-
-bool QFreeOpcUaSubscription::removeOnServer()
-{
- bool success = false;
- try {
- if (m_subscription) {
- m_subscription->Delete();
- success = true;
- }
- } catch (const std::exception &ex) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "RemoveOnServer caught:" << ex.what();
- }
-
- m_subscription.reset();
-
- for (auto it : qAsConst(m_itemIdToItemMapping)) {
- QOpcUaMonitoringParameters s;
- s.setStatusCode(m_timeout ? QOpcUa::UaStatusCode::BadTimeout : QOpcUa::UaStatusCode::BadDisconnect);
- emit m_backend->monitoringEnableDisable(it->handle, it->attr, false, s);
- }
-
- qDeleteAll(m_itemIdToItemMapping);
-
- m_itemIdToItemMapping.clear();
- m_handleToItemMapping.clear();
-
- return success;
-}
-
-void QFreeOpcUaSubscription::StatusChange(OpcUa::StatusCode status)
-{
- if (status != OpcUa::StatusCode::BadTimeout)
- return;
-
- QVector<QPair<uintptr_t, QOpcUa::NodeAttribute>> items;
- for (auto it : qAsConst(m_handleToItemMapping)) {
- for (auto item : it) {
- items.push_back({item->handle, item->attr});
- }
- }
- m_timeout = true;
- emit timeout(this, items);
-}
-
-void QFreeOpcUaSubscription::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value)
-{
- Q_UNUSED(item);
- Q_UNUSED(value);
-
- if (!getItemForAttribute(handle, attr)) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Could not modify parameter for" << handle << ", there are no monitored items";
- QOpcUaMonitoringParameters p;
- p.setStatusCode(QOpcUa::UaStatusCode::BadAttributeIdInvalid);
- emit m_backend->monitoringStatusChanged(handle, attr, item, p);
- return;
- }
-
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Modifying" << item << "is not implemented";
- QOpcUaMonitoringParameters s;
- s.setStatusCode(QOpcUa::UaStatusCode::BadNotImplemented);
- emit m_backend->monitoringEnableDisable(handle, attr, true, s);
-}
-
-bool QFreeOpcUaSubscription::addAttributeMonitoredItem(uintptr_t handle, QOpcUa::NodeAttribute attr, const OpcUa::Node &node, QOpcUaMonitoringParameters settings)
-{
- Q_UNUSED(settings); // Setting these options is not yet supported
-
- quint32 monitoredItemId;
-
- try {
- if (m_subscription) {
- std::vector<OpcUa::ReadValueId> ids;
- OpcUa::ReadValueId rvid;
- rvid.NodeId = node.GetId();
- rvid.AttributeId = QFreeOpcUaValueConverter::toUaAttributeId(attr);
- rvid.IndexRange = settings.indexRange().toStdString();
- ids.push_back(rvid);
- std::vector<uint32_t> monitoredItemIds = m_subscription->SubscribeDataChange(ids);
- monitoredItemId = monitoredItemIds.size() ? monitoredItemIds[0] : 0;
- }
- else {
- QOpcUaMonitoringParameters s;
- s.setStatusCode(QOpcUa::UaStatusCode::BadSubscriptionIdInvalid);
- emit m_backend->monitoringEnableDisable(handle, attr, true, s);
- return false;
- }
- } catch (const std::exception &ex) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "addAttributeMonitoredItem caught:" << ex.what();
- QOpcUaMonitoringParameters s;
- s.setStatusCode(QFreeOpcUaValueConverter::exceptionToStatusCode(ex));
- emit m_backend->monitoringEnableDisable(handle, attr, true, s);
- return false;
- }
-
- MonitoredItem *temp = new MonitoredItem(handle, attr, monitoredItemId);
- m_handleToItemMapping[handle][attr] = temp;
- m_itemIdToItemMapping[monitoredItemId] = temp;
-
- QOpcUaMonitoringParameters s;
- s.setSubscriptionId(m_subscription->GetId());
- s.setPublishingInterval(m_interval);
- s.setMaxKeepAliveCount(m_subscription->GetData().RevisedMaxKeepAliveCount);
- s.setLifetimeCount(m_subscription->GetData().RevisedLifetimeCount);
- s.setStatusCode(QOpcUa::UaStatusCode::Good);
- s.setSamplingInterval(m_interval);
- emit m_backend->monitoringEnableDisable(handle, attr, true, s);
-
- return true;
-}
-
-bool QFreeOpcUaSubscription::removeAttributeMonitoredItem(uintptr_t handle, QOpcUa::NodeAttribute attr)
-{
- QScopedPointer<MonitoredItem> item(getItemForAttribute(handle, attr));
-
- if (!item) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "There is no monitored item for this attribute";
- QOpcUaMonitoringParameters s;
- s.setStatusCode(QOpcUa::UaStatusCode::BadMonitoredItemIdInvalid);
- emit m_backend->monitoringEnableDisable(handle, attr, false, s);
- return false;
- }
-
- QOpcUaMonitoringParameters s;
-
- try {
- m_subscription->UnSubscribe(item->monitoredItemId);
- s.setStatusCode(QOpcUa::UaStatusCode::Good);
- } catch (const std::exception &ex) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "removeAttributeMonitoredItem caught:" << ex.what();
- s.setStatusCode(QFreeOpcUaValueConverter::exceptionToStatusCode(ex));
- }
-
- m_itemIdToItemMapping.remove(item->monitoredItemId);
- auto it = m_handleToItemMapping.find(handle);
- it->remove(attr);
- if (it->empty())
- m_handleToItemMapping.erase(it);
-
- emit m_backend->monitoringEnableDisable(handle, attr, false, s);
-
- return true;
-}
-
-double QFreeOpcUaSubscription::interval() const
-{
- return m_interval;
-}
-
-QOpcUaMonitoringParameters::SubscriptionType QFreeOpcUaSubscription::shared() const
-{
- return m_shared;
-}
-
-quint32 QFreeOpcUaSubscription::subscriptionId() const
-{
- if (m_subscription)
- return m_subscription->GetId();
- else
- return 0;
-}
-
-int QFreeOpcUaSubscription::monitoredItemsCount() const
-{
- return m_itemIdToItemMapping.size();
-}
-
-QFreeOpcUaSubscription::MonitoredItem *QFreeOpcUaSubscription::getItemForAttribute(uintptr_t handle, QOpcUa::NodeAttribute attr)
-{
- auto nodeEntry = m_handleToItemMapping.find(handle);
-
- if (nodeEntry == m_handleToItemMapping.end())
- return nullptr;
-
- auto item = nodeEntry->find(attr);
- if (item == nodeEntry->end())
- return nullptr;
-
- return item.value();
-}
-
-// Override the "default dc" message the default implementation writes to std::cout.
-void QFreeOpcUaSubscription::DataChange(uint32_t handle, const OpcUa::Node &node, const OpcUa::Variant &val, OpcUa::AttributeId attr)
-{
- Q_UNUSED(handle);
- Q_UNUSED(node);
- Q_UNUSED(val);
- Q_UNUSED(attr)
-}
-
-void QFreeOpcUaSubscription::DataValueChange(uint32_t handle, const OpcUa::Node &node,
- const OpcUa::DataValue &val, OpcUa::AttributeId attr)
-{
- OPCUA_UNUSED(node);
- OPCUA_UNUSED(attr);
-
- auto item = m_itemIdToItemMapping.find(handle);
- if (item == m_itemIdToItemMapping.end())
- return;
-
- QOpcUaReadResult res;
- res.attributeId = item.value()->attr;
- res.sourceTimestamp = QFreeOpcUaValueConverter::scalarUaToQt<QDateTime, OpcUa::DateTime>(val.SourceTimestamp);
- res.serverTimestamp = QFreeOpcUaValueConverter::scalarUaToQt<QDateTime, OpcUa::DateTime>(val.ServerTimestamp);
- res.value = QFreeOpcUaValueConverter::toQVariant(val.Value);
- emit m_backend->attributeUpdated(item.value()->handle, res);
-}
-
-QT_END_NAMESPACE
diff --git a/src/plugins/opcua/freeopcua/qfreeopcuasubscription.h b/src/plugins/opcua/freeopcua/qfreeopcuasubscription.h
deleted file mode 100644
index b8bf8e9..0000000
--- a/src/plugins/opcua/freeopcua/qfreeopcuasubscription.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtOpcUa module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL3$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPLv3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or later as published by the Free
-** Software Foundation and appearing in the file LICENSE.GPL included in
-** the packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 2.0 requirements will be
-** met: http://www.gnu.org/licenses/gpl-2.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QFREEOPCUASUBSCRIPTION_H
-#define QFREEOPCUASUBSCRIPTION_H
-
-#include "qfreeopcuanode.h"
-
-#include <QtCore/qhash.h>
-
-#include <opc/ua/subscription.h>
-
-QT_BEGIN_NAMESPACE
-
-class QFreeOpcUaWorker;
-
-class QFreeOpcUaSubscription : public QObject, public OpcUa::SubscriptionHandler
-{
- Q_OBJECT
-
-public:
- QFreeOpcUaSubscription(QFreeOpcUaWorker *backend, const QOpcUaMonitoringParameters &settings);
- ~QFreeOpcUaSubscription() override;
-
- // FreeOPC-UA callbacks
- void DataChange(uint32_t handle, const OpcUa::Node &node, const OpcUa::Variant &val,
- OpcUa::AttributeId attr) override;
- void DataValueChange(uint32_t handle, const OpcUa::Node &node, const OpcUa::DataValue &val,
- OpcUa::AttributeId attr) override;
- void StatusChange(OpcUa::StatusCode status) override;
-
- quint32 createOnServer();
- bool removeOnServer();
-
- void modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value);
-
- bool addAttributeMonitoredItem(uintptr_t handle, QOpcUa::NodeAttribute attr, const OpcUa::Node &node, QOpcUaMonitoringParameters settings);
- bool removeAttributeMonitoredItem(uintptr_t handle, QOpcUa::NodeAttribute attr);
-
- double interval() const;
- QOpcUaMonitoringParameters::SubscriptionType shared() const;
- quint32 subscriptionId() const;
- int monitoredItemsCount() const;
-
- struct MonitoredItem {
- uintptr_t handle;
- QOpcUa::NodeAttribute attr;
- quint32 monitoredItemId;
- MonitoredItem(uintptr_t h, QOpcUa::NodeAttribute a, quint32 id)
- : handle(h)
- , attr(a)
- , monitoredItemId(id)
- {}
- MonitoredItem()
- : handle(0)
- , monitoredItemId(0)
- {}
- };
-
-signals:
- void timeout(QFreeOpcUaSubscription *sub, QVector<QPair<uintptr_t, QOpcUa::NodeAttribute>> items);
-
-private:
- MonitoredItem *getItemForAttribute(uintptr_t handle, QOpcUa::NodeAttribute attr);
-
- double m_interval;
- QOpcUaMonitoringParameters::SubscriptionType m_shared;
-
- OpcUa::Subscription::SharedPtr m_subscription;
- QFreeOpcUaWorker *m_backend;
-
- QHash<quint32, MonitoredItem *> m_itemIdToItemMapping;
- QHash<uintptr_t, QHash<QOpcUa::NodeAttribute, MonitoredItem *>> m_handleToItemMapping;
-
- bool m_timeout;
-};
-
-QT_END_NAMESPACE
-
-#endif // QFREEOPCUASUBSCRIPTION_H
diff --git a/src/plugins/opcua/freeopcua/qfreeopcuavalueconverter.cpp b/src/plugins/opcua/freeopcua/qfreeopcuavalueconverter.cpp
deleted file mode 100644
index d1dd6f8..0000000
--- a/src/plugins/opcua/freeopcua/qfreeopcuavalueconverter.cpp
+++ /dev/null
@@ -1,520 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtOpcUa module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL3$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPLv3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or later as published by the Free
-** Software Foundation and appearing in the file LICENSE.GPL included in
-** the packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 2.0 requirements will be
-** met: http://www.gnu.org/licenses/gpl-2.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qfreeopcuavalueconverter.h"
-
-#include <QtCore/qdatetime.h>
-#include <QtCore/qloggingcategory.h>
-#include <QtCore/qmetaobject.h>
-#include <QtCore/qregularexpression.h>
-#include <QtCore/quuid.h>
-
-#include <vector>
-
-#include <opc/ua/protocol/string_utils.h>
-
-QT_BEGIN_NAMESPACE
-
-Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_FREEOPCUA)
-
-namespace QFreeOpcUaValueConverter {
-
-QVariant toQVariant(const OpcUa::Variant &variant)
-{
- // Null variant, return empty QVariant
- if (!variant.IsScalar() && !variant.IsArray()) {
- return QVariant();
- }
-
- switch (variant.Type()) {
- case OpcUa::VariantType::NUL:
- return QVariant::fromValue(static_cast<QObject *>(nullptr));
-
- case OpcUa::VariantType::BOOLEAN:
- return arrayToQVariant<bool, bool>(variant);
-
- case OpcUa::VariantType::SBYTE:
- return arrayToQVariant<qint8, qint8>(variant, QMetaType::SChar);
-
- case OpcUa::VariantType::BYTE:
- return arrayToQVariant<quint8, quint8>(variant, QMetaType::UChar);
-
- case OpcUa::VariantType::INT16:
- return arrayToQVariant<qint16, qint16>(variant, QMetaType::Short);
-
- case OpcUa::VariantType::UINT16:
- return arrayToQVariant<quint16, quint16>(variant, QMetaType::UShort);
-
- case OpcUa::VariantType::INT32:
- return arrayToQVariant<qint32, qint32>(variant, QMetaType::Int);
-
- case OpcUa::VariantType::UINT32:
- return arrayToQVariant<quint32, quint32>(variant, QMetaType::UInt);
-
- case OpcUa::VariantType::INT64:
- return arrayToQVariant<int64_t, int64_t>(variant, QMetaType::LongLong);
-
- case OpcUa::VariantType::UINT64:
- return arrayToQVariant<uint64_t, uint64_t>(variant, QMetaType::ULongLong);
-
- case OpcUa::VariantType::FLOAT:
- return arrayToQVariant<float, float>(variant, QMetaType::Float);
-
- case OpcUa::VariantType::DOUBLE:
- return arrayToQVariant<double, double>(variant, QMetaType::Double);
-
- case OpcUa::VariantType::STRING:
- return arrayToQVariant<QString, std::string>(variant, QMetaType::QString);
-
- case OpcUa::VariantType::DATE_TIME:
- return arrayToQVariant<QDateTime, OpcUa::DateTime>(variant, QMetaType::QDateTime);
-
- case OpcUa::VariantType::BYTE_STRING:
- return arrayToQVariant<QByteArray, OpcUa::ByteString>(variant, QMetaType::QByteArray);
-
- case OpcUa::VariantType::LOCALIZED_TEXT:
- return arrayToQVariant<QOpcUa::QLocalizedText, OpcUa::LocalizedText>(variant);
-
- case OpcUa::VariantType::NODE_Id:
- return arrayToQVariant<QString, OpcUa::NodeId>(variant, QMetaType::QString);
-
- case OpcUa::VariantType::XML_ELEMENT:
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Type XMLElement is not yet supported in FreeOPCUA";
- return QVariant();
-
- case OpcUa::VariantType::GUId:
- return arrayToQVariant<QUuid, OpcUa::Guid>(variant, QMetaType::QUuid);
-
- case OpcUa::VariantType::QUALIFIED_NAME:
- return arrayToQVariant<QOpcUa::QQualifiedName, OpcUa::QualifiedName>(variant);
-
- case OpcUa::VariantType::STATUS_CODE:
- return arrayToQVariant<QOpcUa::UaStatusCode, OpcUa::StatusCode>(variant);
-
- default:
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Variant type is not yet supported:" << static_cast<int>(variant.Type());
- return QVariant();
- }
-}
-
-OpcUa::Variant toTypedVariant(const QVariant &variant, QOpcUa::Types type)
-{
- switch (type) {
- case QOpcUa::Boolean:
- return arrayFromQVariant<bool>(variant);
-
- case QOpcUa::Byte:
- return arrayFromQVariant<uint8_t>(variant);
-
- case QOpcUa::DateTime:
- return arrayFromQVariant<OpcUa::DateTime>(variant);
- case QOpcUa::Double:
- return arrayFromQVariant<double>(variant);
-
- case QOpcUa::Float:
- return arrayFromQVariant<float>(variant);
-
- case QOpcUa::Int16:
- return arrayFromQVariant<int16_t>(variant);
-
- case QOpcUa::Int32:
- return arrayFromQVariant<int32_t>(variant);
-
- case QOpcUa::Int64:
- return arrayFromQVariant<int64_t>(variant);
-
- case QOpcUa::SByte:
- return arrayFromQVariant<int8_t>(variant);
-
- case QOpcUa::String:
- return arrayFromQVariant<std::string>(variant);
-
- case QOpcUa::UInt16:
- return arrayFromQVariant<uint16_t>(variant);
-
- case QOpcUa::UInt32:
- return arrayFromQVariant<uint32_t>(variant);
-
- case QOpcUa::UInt64:
- return arrayFromQVariant<uint64_t>(variant);
-
- case QOpcUa::LocalizedText:
- return arrayFromQVariant<OpcUa::LocalizedText>(variant);
-
- case QOpcUa::ByteString:
- return arrayFromQVariant<OpcUa::ByteString>(variant);
-
- case QOpcUa::NodeId:
- return arrayFromQVariant<OpcUa::NodeId>(variant);
-
- case QOpcUa::XmlElement:
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Type XMLElement is not yet supported in FreeOPCUA";
- return OpcUa::Variant();
-
- case QOpcUa::Guid:
- return arrayFromQVariant<OpcUa::Guid>(variant);
-
- case QOpcUa::QualifiedName:
- return arrayFromQVariant<OpcUa::QualifiedName>(variant);
-
- case QOpcUa::StatusCode:
- return arrayFromQVariant<OpcUa::StatusCode, QOpcUa::UaStatusCode>(variant);
-
- default:
- return toVariant(variant);
- }
-}
-
-QString nodeIdToString(const OpcUa::NodeId &id)
-{
- QString nodeId = QStringLiteral("ns=%1;").arg(id.GetNamespaceIndex());
- if (id.IsInteger()) {
- nodeId += QStringLiteral("i=%1").arg(id.GetIntegerIdentifier());
- } else if (id.IsString()) {
- nodeId += QStringLiteral("s=%1").arg(id.GetStringIdentifier().c_str());
- } else if (id.IsGuid()) {
- const OpcUa::Guid tempId = id.GetGuidIdentifier();
- const QUuid uuid(tempId.Data1, tempId.Data2, tempId.Data3, tempId.Data4[0], tempId.Data4[1], tempId.Data4[2],
- tempId.Data4[3], tempId.Data4[4], tempId.Data4[5], tempId.Data4[6], tempId.Data4[7]);
- nodeId += QStringLiteral("g=").append(uuid.toString().midRef(1, 36)); // Remove enclosing {...}
- } else if (id.IsBinary()) {
- const QString base64String = QByteArray(reinterpret_cast<const char *>(id.GetBinaryIdentifier().data()),
- id.GetBinaryIdentifier().size()).toBase64();
- nodeId += QStringLiteral("b=").append(base64String);
- } else {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Unknown nodeId type";
- nodeId = QString();
- }
- return nodeId;
-}
-
-OpcUa::Variant toVariant(const QVariant &variant)
-{
- switch (variant.type()) {
- case QMetaType::Bool:
- return arrayFromQVariant<bool>(variant);
- case QMetaType::Int:
- return arrayFromQVariant<qint32>(variant);
- case QMetaType::UInt:
- return arrayFromQVariant<quint32>(variant);
- case QMetaType::Double:
- return arrayFromQVariant<double>(variant);
- case QMetaType::QString:
- return arrayFromQVariant<std::string>(variant);
- default:
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Variant type is not yet supported:" << variant.type();
- return OpcUa::Variant();
- }
-}
-
-template<typename UATYPE, typename QTTYPE>
-OpcUa::Variant arrayFromQVariant(const QVariant &var)
-{
- if (var.type() == QVariant::List) {
- QVariantList list = var.toList();
- std::vector<UATYPE> temp;
- for (int i = 0; i < list.size(); ++i)
- temp.push_back(scalarFromQVariant<UATYPE, QTTYPE>(list[i]));
- return OpcUa::Variant(temp);
- }
- return OpcUa::Variant(scalarFromQVariant<UATYPE, QTTYPE>(var));
-}
-
-template<typename UATYPE, typename QTTYPE>
-UATYPE scalarFromQVariant(const QVariant &var)
-{
- return static_cast<UATYPE>(var.value<QTTYPE>());
-}
-
-template<>
-std::string scalarFromQVariant(const QVariant &var)
-{
- return var.toString().toStdString();
-}
-
-template<>
-OpcUa::DateTime scalarFromQVariant(const QVariant &var)
-{
- // OPC-UA part 3, Table C.9
- const QDateTime uaEpochStart(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC);
- return OpcUa::DateTime(var.toDateTime().toMSecsSinceEpoch() - uaEpochStart.toMSecsSinceEpoch());
-}
-
-template<>
-OpcUa::ByteString scalarFromQVariant(const QVariant &var)
-{
- const QByteArray arr = var.toByteArray();
- const char *start = arr.data();
- const char *end = start + arr.length();
- std::vector<uint8_t> temp(start, end);
- return OpcUa::ByteString(temp);
-}
-
-template<>
-OpcUa::LocalizedText scalarFromQVariant(const QVariant &var)
-{
- const QOpcUa::QLocalizedText lt = var.value<QOpcUa::QLocalizedText>();
- return OpcUa::LocalizedText(lt.text.toStdString(), lt.locale.toStdString());
-}
-
-template<>
-OpcUa::NodeId scalarFromQVariant(const QVariant &var)
-{
- try {
- return OpcUa::ToNodeId(var.toString().toStdString());
- } catch (const std::exception &ex) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Failed to parse node id:" << ex.what();
- return OpcUa::NodeId();
- }
-}
-
-template<>
-OpcUa::Guid scalarFromQVariant(const QVariant &var)
-{
- OpcUa::Guid temp;
- const QUuid uuid = var.toUuid();
- temp.Data1 = uuid.data1;
- temp.Data2 = uuid.data2;
- temp.Data3 = uuid.data3;
- std::memcpy(temp.Data4, uuid.data4, sizeof(uuid.data4));
- return temp;
-}
-
-template<>
-OpcUa::QualifiedName scalarFromQVariant(const QVariant &var)
-{
- OpcUa::QualifiedName temp;
- const QOpcUa::QQualifiedName qn = var.value<QOpcUa::QQualifiedName>();
- temp.Name = qn.name.toStdString();
- temp.NamespaceIndex = qn.namespaceIndex;
- return temp;
-}
-
-template<typename QTTYPE, typename UATYPE>
-QVariant arrayToQVariant(const OpcUa::Variant &var, QMetaType::Type type)
-{
- if (var.IsArray()) {
- QVariantList list;
- std::vector<UATYPE> temp = var.As<std::vector<UATYPE>>();
-
- for (unsigned int i = 0; i < temp.size(); ++i) {
- QTTYPE data = scalarUaToQt<QTTYPE, UATYPE>(temp[i]);
- if (type == QMetaType::UnknownType)
- list.append(QVariant::fromValue(data));
- else
- list.append(QVariant(type, &data));
- }
- if (list.size() == 1)
- return list.at(0);
- else
- return list;
-
- } else if (var.IsScalar()) {
- QTTYPE data = scalarUaToQt<QTTYPE, UATYPE>(var.As<UATYPE>());
- if (type == QMetaType::UnknownType)
- return QVariant::fromValue(data);
- return QVariant(type, &data);
- }
- return QVariant();
-}
-
-template<typename QTTYPE, typename UATYPE>
-QTTYPE scalarUaToQt(const UATYPE &data)
-{
- return static_cast<QTTYPE>(data);
-}
-
-template<>
-QString scalarUaToQt<QString, std::string>(const std::string &data)
-{
- return QString::fromStdString(data);
-}
-
-template<>
-QDateTime scalarUaToQt<QDateTime, OpcUa::DateTime>(const OpcUa::DateTime &data)
-{
- // OPC-UA part 3, Table C.9
- const QDateTime uaEpochStart(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC);
- return uaEpochStart.addMSecs(data.Value).toLocalTime();
-}
-
-template<>
-QByteArray scalarUaToQt<QByteArray, OpcUa::ByteString>(const OpcUa::ByteString &data)
-{
- return QByteArray(reinterpret_cast<const char *>(data.Data.data()), data.Data.size());
-}
-
-template<>
-QOpcUa::QLocalizedText scalarUaToQt<QOpcUa::QLocalizedText, OpcUa::LocalizedText>(const OpcUa::LocalizedText &data)
-{
- return QOpcUa::QLocalizedText(QString::fromStdString(data.Locale), QString::fromStdString(data.Text));
-}
-
-template<>
-QString scalarUaToQt<QString, OpcUa::NodeId>(const OpcUa::NodeId &data)
-{
- return nodeIdToString(data);
-}
-
-template<>
-QUuid scalarUaToQt<QUuid, OpcUa::Guid>(const OpcUa::Guid &data)
-{
- return QUuid(data.Data1, data.Data2, data.Data3, data.Data4[0],
- data.Data4[1], data.Data4[2], data.Data4[3], data.Data4[4],
- data.Data4[5], data.Data4[6], data.Data4[7]);
-}
-
-template<>
-QOpcUa::QQualifiedName scalarUaToQt<QOpcUa::QQualifiedName, OpcUa::QualifiedName>(const OpcUa::QualifiedName &data)
-{
- return QOpcUa::QQualifiedName(data.NamespaceIndex, QString::fromStdString(data.Name));
-}
-
-QOpcUa::UaStatusCode exceptionToStatusCode(const std::exception &ex)
-{
- QOpcUa::UaStatusCode statusCode = QOpcUa::UaStatusCode::BadUnexpectedError;
-
- QString text(ex.what());
- int index = text.lastIndexOf(QRegularExpression(QStringLiteral("0x[0-9A-Fa-f]{8}")));
- if (index != -1) {
- bool good = false;
- quint32 code = text.midRef(index, 10).toUInt(&good, 16);
- if (good && QMetaEnum::fromType<QOpcUa::UaStatusCode>().valueToKey(code) != 0)
- statusCode = static_cast<QOpcUa::UaStatusCode>(code);
- }
- return statusCode;
-}
-
-OpcUa::NodeId stringToNodeId(const QString &id)
-{
- const int semicolonIndex = id.indexOf(';');
-
- if (semicolonIndex <= 0) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Unable to split node id string:" << qUtf8Printable(id);
- return OpcUa::NodeId();
- }
-
- QStringRef namespaceString = id.leftRef(semicolonIndex);
- if (namespaceString.length() <= 3 || !namespaceString.startsWith(QLatin1String("ns="))) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Not a valid index string in node id string:" << id;
- return OpcUa::NodeId();
- }
- namespaceString = namespaceString.mid(3); // Remove "ns="
-
- QStringRef identifierString = id.midRef(semicolonIndex + 1);
-
- if (identifierString.length() <= 2) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "There is no identifier in node id string:" << id;
- return OpcUa::NodeId();
- }
-
- char identifierType;
- if (identifierString.startsWith(QLatin1String("s=")))
- identifierType = 's';
- else if (identifierString.startsWith(QLatin1String("i=")))
- identifierType = 'i';
- else if (identifierString.startsWith(QLatin1String("g=")))
- identifierType = 'g';
- else if (identifierString.startsWith(QLatin1String("b=")))
- identifierType = 'b';
- else {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "There is no valid identifier type in node id string:" << id;
- return OpcUa::NodeId();
- }
- identifierString = identifierString.mid(2); // Remove identifier type
-
- bool ok = false;
- quint16 index = static_cast<quint16>(namespaceString.toUInt(&ok));
-
- if (!ok) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Not a valid namespace index in node id string:" << id;
- return OpcUa::NodeId();
- }
-
- switch (identifierType) {
- case 'i': {
- bool isNumber;
- quint32 identifier = static_cast<quint32>(identifierString.toUInt(&isNumber));
- if (isNumber)
- return OpcUa::NumericNodeId(identifier, index);
- else
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << id << "does not contain a valid numeric identifier";
- break;
- }
- case 's': {
- if (identifierString.length() > 0) {
- return OpcUa::StringNodeId(identifierString.toString().toStdString(), index);
- }
- else
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << id << "does not contain a valid string identifier";
- break;
- }
- case 'g': {
- QUuid uuid(identifierString.toString());
-
- if (uuid.isNull()) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << id << "does not contain a valid guid identifier";
- }
-
- OpcUa::Guid guid;
- guid.Data1 = uuid.data1;
- guid.Data2 = uuid.data2;
- guid.Data3 = uuid.data3;
- std::memcpy(guid.Data4, uuid.data4, sizeof(uuid.data4));
- return OpcUa::GuidNodeId(guid, index);
- }
- case 'b': {
- const QByteArray temp = QByteArray::fromBase64(identifierString.toLocal8Bit());
- if (temp.size() > 0) {
- OpcUa::NodeId result;
- result.Encoding = OpcUa::NodeIdEncoding::EV_BYTE_STRING;
- result.BinaryData.NamespaceIndex = index;
- result.BinaryData.Identifier.assign(temp.data(), temp.data() + temp.size());
- return result;
- }
- else
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << id << "does not contain a valid byte string identifier";
- break;
- }
- default:
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Could not parse node id:" << id;
- }
- return OpcUa::NodeId();
-}
-
-}
-
-QT_END_NAMESPACE
diff --git a/src/plugins/opcua/freeopcua/qfreeopcuaworker.cpp b/src/plugins/opcua/freeopcua/qfreeopcuaworker.cpp
deleted file mode 100644
index 75a4692..0000000
--- a/src/plugins/opcua/freeopcua/qfreeopcuaworker.cpp
+++ /dev/null
@@ -1,441 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtOpcUa module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL3$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPLv3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or later as published by the Free
-** Software Foundation and appearing in the file LICENSE.GPL included in
-** the packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 2.0 requirements will be
-** met: http://www.gnu.org/licenses/gpl-2.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qfreeopcuaclient.h"
-#include "qfreeopcuanode.h"
-#include "qfreeopcuasubscription.h"
-#include "qfreeopcuavalueconverter.h"
-#include "qfreeopcuaworker.h"
-
-#include <QtNetwork/qhostinfo.h>
-#include <QtCore/qloggingcategory.h>
-
-#include <opc/ua/node.h>
-
-QT_BEGIN_NAMESPACE
-
-Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_FREEOPCUA)
-
-QFreeOpcUaWorker::QFreeOpcUaWorker(QFreeOpcUaClientImpl *client)
- : QOpcUaBackend()
- , m_client(client)
- , m_minPublishingInterval(0)
-{}
-
-QFreeOpcUaWorker::~QFreeOpcUaWorker()
-{
- cleanupSubscriptions();
-}
-
-void QFreeOpcUaWorker::asyncConnectToEndpoint(const QUrl &url)
-{
- cleanupSubscriptions();
-
- try {
- QString sNodeName = QHostInfo::localHostName();
- SetApplicationURI(QString("urn:%1:%2:%3").arg(
- sNodeName).arg("qt-project").arg("QOpcUaClient").toStdString());
- SetProductURI("urn:qt-project:QOpcUaClient");
- SetSessionName(GetApplicationURI());
-
- Connect(url.toString().toStdString());
-
- // Check connection status by getting the root node
- GetRootNode();
- } catch (const std::exception &e) {
- // FreeOPCUA does not expose the error code, the only information is in ex.what()
- const QString errorString = QString::fromUtf8(e.what());
- QOpcUaClient::ClientError error = QOpcUaClient::UnknownError;
- if (errorString.contains(QStringLiteral("0x801f0000")))
- error = QOpcUaClient::AccessDenied;
- try {
- Disconnect();
- } catch (const std::exception &e) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Disconnect failed";
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << e.what();
- }
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Client could not connect to endpoint" << url << e.what();
- emit stateAndOrErrorChanged(QOpcUaClient::Disconnected, error);
- return;
- }
-
- emit stateAndOrErrorChanged(QOpcUaClient::Connected, QOpcUaClient::NoError);
-}
-
-void QFreeOpcUaWorker::asyncDisconnectFromEndpoint()
-{
- try {
- Disconnect();
- emit stateAndOrErrorChanged(QOpcUaClient::Disconnected, QOpcUaClient::NoError);
- return;
- } catch (const std::exception &ex) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Could not disconnect from endpoint:" << ex.what();
- }
-
- cleanupSubscriptions();
-
- emit stateAndOrErrorChanged(QOpcUaClient::Disconnected, QOpcUaClient::UnknownError);
-}
-
-void QFreeOpcUaWorker::browseChildren(uintptr_t handle, OpcUa::NodeId id, QOpcUa::ReferenceTypeId referenceType, QOpcUa::NodeClasses nodeClassMask)
-{
- OpcUa::BrowseDescription description;
- description.NodeToBrowse = id;
- description.Direction = OpcUa::BrowseDirection::Forward;
- description.IncludeSubtypes = true;
- description.NodeClasses = static_cast<OpcUa::NodeClass>(static_cast<quint32>(nodeClassMask));
- description.ResultMask = OpcUa::BrowseResultMask::BrowseName | OpcUa::BrowseResultMask::DisplayName |
- OpcUa::BrowseResultMask::ReferenceTypeId | OpcUa::BrowseResultMask::NodeClass;
- description.ReferenceTypeId = static_cast<OpcUa::ReferenceId>(referenceType);
-
- OpcUa::NodesQuery query;
- query.NodesToBrowse.push_back(description);
- query.MaxReferenciesPerNode = 0; // Let the server choose a maximum value
-
- QOpcUa::UaStatusCode statusCode = QOpcUa::UaStatusCode::Good;
- QVector<QOpcUaReferenceDescription> ret;
-
- try {
- std::vector<OpcUa::BrowseResult> results = Server->Views()->Browse(query);
-
- while (!results.empty()) {
- if (results[0].Status != OpcUa::StatusCode::Good) {
- statusCode = static_cast<QOpcUa::UaStatusCode>(results[0].Status);
- break;
- }
-
- for (std::vector<OpcUa::ReferenceDescription>::const_iterator it = results[0].Referencies.begin(); it != results[0].Referencies.end(); ++it) {
- QOpcUaReferenceDescription temp;
- temp.setNodeId(QFreeOpcUaValueConverter::nodeIdToString(it->TargetNodeId));
- temp.setRefType(static_cast<QOpcUa::ReferenceTypeId>(it->ReferenceTypeId.GetIntegerIdentifier()));
- temp.setNodeClass(static_cast<QOpcUa::NodeClass>(it->TargetNodeClass));
- temp.setBrowseName(QFreeOpcUaValueConverter::scalarUaToQt<QOpcUa::QQualifiedName>(it->BrowseName));
- temp.setDisplayName(QFreeOpcUaValueConverter::scalarUaToQt<QOpcUa::QLocalizedText>(it->DisplayName));
- ret.push_back(temp);
- }
-
- results = Server->Views()->BrowseNext();
- }
- } catch (const std::exception &ex) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Browse error:" << ex.what();
- statusCode = QFreeOpcUaValueConverter::exceptionToStatusCode(ex);
- }
-
- emit browseFinished(handle, ret, statusCode);
-}
-
-void QFreeOpcUaWorker::readAttributes(uintptr_t handle, OpcUa::NodeId id, QOpcUa::NodeAttributes attr, QString indexRange)
-{
- QVector<QOpcUaReadResult> vec;
-
- try {
- OpcUa::ReadParameters params;
- params.TimestampsToReturn = OpcUa::TimestampsToReturn::Both;
- OpcUa::ReadValueId attribute;
- attribute.NodeId = id;
-
- qt_forEachAttribute(attr, [&](QOpcUa::NodeAttribute attr) {
- attribute.AttributeId = QFreeOpcUaValueConverter::toUaAttributeId(attr);
- attribute.IndexRange = indexRange.toStdString();
- params.AttributesToRead.push_back(attribute);
- QOpcUaReadResult temp;
- temp.attributeId = attr;
- vec.push_back(temp);
- });
-
- std::vector<OpcUa::DataValue> res = GetRootNode().GetServices()->Attributes()->Read(params);
-
- for (size_t i = 0; i < res.size(); ++i) {
- vec[i].statusCode = static_cast<QOpcUa::UaStatusCode>(res[i].Status);
- if (res[i].Status == OpcUa::StatusCode::Good) {
- vec[i].value = QFreeOpcUaValueConverter::toQVariant(res[i].Value);
- }
- vec[i].sourceTimestamp = QFreeOpcUaValueConverter::scalarUaToQt<QDateTime, OpcUa::DateTime>(res[i].SourceTimestamp);
- vec[i].serverTimestamp = QFreeOpcUaValueConverter::scalarUaToQt<QDateTime, OpcUa::DateTime>(res[i].ServerTimestamp);
- }
-
- emit attributesRead(handle, vec, QOpcUa::UaStatusCode::Good);
- } catch(const std::exception &ex) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Batch read of node attributes failed:" << ex.what();
- emit attributesRead(handle, vec, QFreeOpcUaValueConverter::exceptionToStatusCode(ex));
- }
-}
-
-void QFreeOpcUaWorker::writeAttribute(uintptr_t handle, OpcUa::Node node, QOpcUa::NodeAttribute attr, QVariant value, QOpcUa::Types type, QString indexRange)
-{
- std::vector<OpcUa::StatusCode> res;
-
- try {
- if (type == QOpcUa::Types::Undefined && attr != QOpcUa::NodeAttribute::Value)
- type = attributeIdToTypeId(attr);
- OpcUa::Variant toWrite = QFreeOpcUaValueConverter::toTypedVariant(value, type);
-
- OpcUa::WriteValue val;
- val.NodeId = node.GetId();
- val.AttributeId = QFreeOpcUaValueConverter::toUaAttributeId(attr);
- val.Value = OpcUa::DataValue(toWrite);
- val.IndexRange = indexRange.toStdString();
- std::vector<OpcUa::WriteValue> req;
- req.push_back(val);
-
- res = node.GetServices()->Attributes()->Write(req);
-
- emit attributeWritten(handle, attr, res[0] == OpcUa::StatusCode::Good ? value : QVariant(), static_cast<QOpcUa::UaStatusCode>(res[0]));
- } catch (const std::exception &ex) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Could not write value to node:" << OpcUa::ToString(node.GetId()).c_str() << ex.what();
- emit attributeWritten(handle, attr, QVariant(), QFreeOpcUaValueConverter::exceptionToStatusCode(ex));
- }
-}
-
-void QFreeOpcUaWorker::writeAttributes(uintptr_t handle, OpcUa::Node node, QOpcUaNode::AttributeMap toWrite, QOpcUa::Types valueAttributeType)
-{
- if (toWrite.size() == 0) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "No values to be written";
- emit attributeWritten(handle, QOpcUa::NodeAttribute::None, QVariant(), QOpcUa::UaStatusCode::BadNothingToDo);
- return;
- }
-
- std::vector<OpcUa::StatusCode> res;
-
- try {
- std::vector<OpcUa::WriteValue> req;
-
- for (auto it = toWrite.constBegin(); it != toWrite.constEnd(); ++it) {
- OpcUa::WriteValue val;
- val.NodeId = node.GetId();
- val.AttributeId = QFreeOpcUaValueConverter::toUaAttributeId(it.key());
- QOpcUa::Types type = it.key() == QOpcUa::NodeAttribute::Value ? valueAttributeType : attributeIdToTypeId(it.key());
- val.Value = OpcUa::DataValue(QFreeOpcUaValueConverter::toTypedVariant(it.value(), type));
- req.push_back(val);
- }
-
- res = node.GetServices()->Attributes()->Write(req);
-
- size_t index = 0;
- for (auto it = toWrite.constBegin(); it != toWrite.constEnd(); ++it, ++index) {
- emit attributeWritten(handle, it.key(), res[index] == OpcUa::StatusCode::Good ? it.value() : QVariant(), static_cast<QOpcUa::UaStatusCode>(res[index]));
- }
-
- } catch (const std::exception &ex) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Could not write attributes:" << ex.what();
- for (auto it = toWrite.constBegin(); it != toWrite.constEnd(); ++it) {
- emit attributeWritten(handle, it.key(), QVariant(), QFreeOpcUaValueConverter::exceptionToStatusCode(ex));
- }
- }
-}
-
-QFreeOpcUaSubscription *QFreeOpcUaWorker::getSubscription(const QOpcUaMonitoringParameters &settings)
-{
- if (settings.shared() == QOpcUaMonitoringParameters::SubscriptionType::Shared) {
- // Requesting multiple subscriptions with publishing interval < minimum publishing interval breaks subscription sharing
- double interval = revisePublishingInterval(settings.publishingInterval(), m_minPublishingInterval);
- for (auto entry : qAsConst(m_subscriptions))
- if (qFuzzyCompare(entry->interval(), interval) && entry->shared() == QOpcUaMonitoringParameters::SubscriptionType::Shared)
- return entry;
- }
-
- QFreeOpcUaSubscription *sub = new QFreeOpcUaSubscription(this, settings);
- quint32 id = sub->createOnServer();
- if (!id) {
- delete sub;
- return nullptr;
- }
- if (sub->interval() > settings.samplingInterval()) // The publishing interval has been revised by the server.
- m_minPublishingInterval = sub->interval();
- QObject::connect(sub, &QFreeOpcUaSubscription::timeout, this, &QFreeOpcUaWorker::handleSubscriptionTimeout, Qt::QueuedConnection);
- m_subscriptions[id] = sub;
- return sub;
-}
-
-bool QFreeOpcUaWorker::removeSubscription(quint32 subscriptionId)
-{
- auto sub = m_subscriptions.find(subscriptionId);
- if (sub != m_subscriptions.end()) {
- sub.value()->removeOnServer();
- delete sub.value();
- m_subscriptions.remove(subscriptionId);
- return true;
- }
- return false;
-}
-
-void QFreeOpcUaWorker::enableMonitoring(uintptr_t handle, OpcUa::Node node, QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings)
-{
- QFreeOpcUaSubscription *usedSubscription = nullptr;
-
- // Create a new subscription if necessary
- if (settings.subscriptionId()) {
- if (!m_subscriptions.contains(settings.subscriptionId())) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "There is no subscription with id" << settings.subscriptionId();
- qt_forEachAttribute(attr, [&](QOpcUa::NodeAttribute attr) {
- QOpcUaMonitoringParameters s;
- s.setStatusCode(QOpcUa::UaStatusCode::BadSubscriptionIdInvalid);
- emit monitoringEnableDisable(handle, attr, true, s);
- });
- return;
- }
- usedSubscription = m_subscriptions[settings.subscriptionId()]; // Ignore interval != subscription.interval
- } else {
- usedSubscription = getSubscription(settings);
- }
-
- if (!usedSubscription) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Could not create subscription with interval" << settings.publishingInterval();
- qt_forEachAttribute(attr, [&](QOpcUa::NodeAttribute attr) {
- QOpcUaMonitoringParameters s;
- s.setStatusCode(QOpcUa::UaStatusCode::BadSubscriptionIdInvalid);
- emit monitoringEnableDisable(handle, attr, true, s);
- });
- return;
- }
-
- qt_forEachAttribute(attr, [&](QOpcUa::NodeAttribute attr) {
- if (getSubscriptionForItem(handle, attr)) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Monitored item for" << attr << "has already been created";
- QOpcUaMonitoringParameters s;
- s.setStatusCode(QOpcUa::UaStatusCode::BadEntryExists);
- emit monitoringEnableDisable(handle, attr, true, s);
- } else {
- bool success = usedSubscription->addAttributeMonitoredItem(handle, attr, node, settings);
- if (success)
- m_attributeMapping[handle][attr] = usedSubscription;
- }
- });
-
- if (usedSubscription->monitoredItemsCount() == 0)
- removeSubscription(usedSubscription->subscriptionId()); // No items were added
-}
-
-void QFreeOpcUaWorker::disableMonitoring(uintptr_t handle, QOpcUa::NodeAttributes attr)
-{
- qt_forEachAttribute(attr, [&](QOpcUa::NodeAttribute attr) {
- QFreeOpcUaSubscription *sub = getSubscriptionForItem(handle, attr);
- if (sub) {
- sub->removeAttributeMonitoredItem(handle, attr);
- m_attributeMapping[handle].remove(attr);
- if (sub->monitoredItemsCount() == 0)
- removeSubscription(sub->subscriptionId());
- }
- });
-}
-
-void QFreeOpcUaWorker::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value)
-{
- QFreeOpcUaSubscription *subscription = getSubscriptionForItem(handle, attr);
- if (!subscription) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Could not modify parameter for" << handle << ", the monitored item does not exist";
- QOpcUaMonitoringParameters p;
- p.setStatusCode(QOpcUa::UaStatusCode::BadSubscriptionIdInvalid);
- emit monitoringStatusChanged(handle, attr, item, p);
- return;
- }
-
- subscription->modifyMonitoring(handle, attr, item, value);
-}
-
-QFreeOpcUaSubscription *QFreeOpcUaWorker::getSubscriptionForItem(uintptr_t handle, QOpcUa::NodeAttribute attr)
-{
- auto nodeEntry = m_attributeMapping.find(handle);
- if (nodeEntry == m_attributeMapping.end())
- return nullptr;
-
- auto subscription = nodeEntry->find(attr);
- if (subscription == nodeEntry->end())
- return nullptr;
-
- return subscription.value();
-}
-
-void QFreeOpcUaWorker::cleanupSubscriptions()
-{
- qDeleteAll(m_subscriptions);
- m_subscriptions.clear();
- m_attributeMapping.clear();
- m_minPublishingInterval = 0;
-}
-
-void QFreeOpcUaWorker::callMethod(uintptr_t handle, OpcUa::NodeId objectId, OpcUa::NodeId methodId, QVector<QOpcUa::TypedVariant> args)
-{
- try {
- std::vector<OpcUa::Variant> arguments;
- if (args.size()) {
- arguments.reserve(args.size());
- for (const QOpcUa::TypedVariant &v: qAsConst(args))
- arguments.push_back(QFreeOpcUaValueConverter::toTypedVariant(v.first, v.second));
- }
- OpcUa::CallMethodRequest myCallRequest;
- myCallRequest.ObjectId = objectId;
- myCallRequest.MethodId = methodId;
- myCallRequest.InputArguments = arguments;
- std::vector<OpcUa::CallMethodRequest> myCallVector;
- myCallVector.push_back(myCallRequest);
-
- OpcUa::Node object = this->GetNode(objectId);
- std::vector<OpcUa::Variant> returnedValues = object.CallMethod(methodId, arguments);
-
- QVariant result;
-
- if (returnedValues.size() > 1) {
- QVariantList temp;
- for (auto it = returnedValues.cbegin(); it != returnedValues.cend(); ++it)
- temp.append(QFreeOpcUaValueConverter::toQVariant(*it));
-
- result = temp;
- } else if (returnedValues.size() == 1) {
- result = QFreeOpcUaValueConverter::toQVariant(returnedValues[0]);
- }
-
- emit methodCallFinished(handle, QFreeOpcUaValueConverter::nodeIdToString(methodId), result, QOpcUa::UaStatusCode::Good);
-
- } catch (const std::exception &ex) {
- qCWarning(QT_OPCUA_PLUGINS_FREEOPCUA) << "Method call failed: " << ex.what();
- emit methodCallFinished(handle, QFreeOpcUaValueConverter::nodeIdToString(methodId), QVariant(), QFreeOpcUaValueConverter::exceptionToStatusCode(ex));
- }
-}
-
-void QFreeOpcUaWorker::handleSubscriptionTimeout(QFreeOpcUaSubscription *sub, QVector<QPair<uintptr_t, QOpcUa::NodeAttribute> > items)
-{
- for (auto it : items) {
- auto item = m_attributeMapping.find(it.first);
- if (item == m_attributeMapping.end())
- continue;
- item->remove(it.second);
- }
- m_subscriptions.remove(sub->subscriptionId());
- delete sub;
-}
-
-QT_END_NAMESPACE
diff --git a/src/plugins/opcua/freeopcua/qfreeopcuaworker.h b/src/plugins/opcua/freeopcua/qfreeopcuaworker.h
deleted file mode 100644
index e65ca81..0000000
--- a/src/plugins/opcua/freeopcua/qfreeopcuaworker.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtOpcUa module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL3$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPLv3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or later as published by the Free
-** Software Foundation and appearing in the file LICENSE.GPL included in
-** the packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 2.0 requirements will be
-** met: http://www.gnu.org/licenses/gpl-2.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QFREEOPCUAWORKER_H
-#define QFREEOPCUAWORKER_H
-
-#include "qfreeopcuasubscription.h"
-#include <QtOpcUa/qopcuanode.h>
-#include <private/qopcuabackend_p.h>
-
-#include <QtCore/qobject.h>
-#include <QtCore/qurl.h>
-
-#include <opc/ua/client/client.h>
-
-QT_BEGIN_NAMESPACE
-
-class QFreeOpcUaClientImpl;
-
-class QFreeOpcUaWorker : public QOpcUaBackend, public OpcUa::UaClient
-{
- Q_OBJECT
-public:
- QFreeOpcUaWorker(QFreeOpcUaClientImpl *client);
- ~QFreeOpcUaWorker();
-
-public slots:
- void asyncConnectToEndpoint(const QUrl &url);
- void asyncDisconnectFromEndpoint();
-
- void readAttributes(uintptr_t handle, OpcUa::NodeId id, QOpcUa::NodeAttributes attr, QString indexRange);
- void writeAttribute(uintptr_t handle, OpcUa::Node node, QOpcUa::NodeAttribute attr, QVariant value, QOpcUa::Types type, QString indexRange);
- void writeAttributes(uintptr_t handle, OpcUa::Node node, QOpcUaNode::AttributeMap toWrite, QOpcUa::Types valueAttributeType);
- void browseChildren(uintptr_t handle, OpcUa::NodeId id, QOpcUa::ReferenceTypeId referenceType, QOpcUa::NodeClasses nodeClassMask);
-
- QFreeOpcUaSubscription *getSubscription(const QOpcUaMonitoringParameters &settings);
- bool removeSubscription(quint32 subscriptionId);
-
- void enableMonitoring(uintptr_t handle, OpcUa::Node node, QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings);
- void disableMonitoring(uintptr_t handle, QOpcUa::NodeAttributes attr);
- void modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value);
- void callMethod(uintptr_t handle, OpcUa::NodeId objectId, OpcUa::NodeId methodId, QVector<QOpcUa::TypedVariant> args);
-
- void handleSubscriptionTimeout(QFreeOpcUaSubscription *sub, QVector<QPair<uintptr_t, QOpcUa::NodeAttribute>> items);
-private:
- QFreeOpcUaSubscription *getSubscriptionForItem(uintptr_t handle, QOpcUa::NodeAttribute attr);
- void cleanupSubscriptions();
-
- QFreeOpcUaClientImpl *m_client;
-
- QHash<quint32, QFreeOpcUaSubscription *> m_subscriptions;
- QHash<uintptr_t, QHash<QOpcUa::NodeAttribute, QFreeOpcUaSubscription *>> m_attributeMapping; // Handle -> Attribute -> Subscription
-
- double m_minPublishingInterval;
-};
-
-QT_END_NAMESPACE
-
-#endif // QFREEOPCUAWORKER_H
diff --git a/src/plugins/opcua/opcua.pro b/src/plugins/opcua/opcua.pro
index 46228fb..7d215d6 100644
--- a/src/plugins/opcua/opcua.pro
+++ b/src/plugins/opcua/opcua.pro
@@ -1,9 +1,6 @@
TEMPLATE = subdirs
QT_FOR_CONFIG += opcua-private
-qtConfig(freeopcua) {
- SUBDIRS += freeopcua
-}
qtConfig(open62541) {
SUBDIRS += open62541
diff --git a/src/plugins/opcua/open62541/qopen62541.h b/src/plugins/opcua/open62541/qopen62541.h
index c4e0f4e..c8a55a7 100644
--- a/src/plugins/opcua/open62541/qopen62541.h
+++ b/src/plugins/opcua/open62541/qopen62541.h
@@ -49,7 +49,7 @@
#pragma clang diagnostic ignored "-Wunused-parameter"
#endif
-#include <open62541.h>
+#include <open62541/open62541.h>
#if defined(_MSC_VER)
#pragma warning(pop)
diff --git a/src/plugins/opcua/open62541/qopen62541backend.cpp b/src/plugins/opcua/open62541/qopen62541backend.cpp
index 93a568a..74dce4c 100644
--- a/src/plugins/opcua/open62541/qopen62541backend.cpp
+++ b/src/plugins/opcua/open62541/qopen62541backend.cpp
@@ -49,16 +49,6 @@ QT_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_OPEN62541)
-struct UaVariantMemberDeleter
-{
- static void cleanup(UA_Variant *p) { UA_Variant_deleteMembers(p); }
-};
-
-struct UaLocalizedTextMemberDeleter
-{
- static void cleanup(UA_LocalizedText *p) { UA_LocalizedText_deleteMembers(p); }
-};
-
Open62541AsyncBackend::Open62541AsyncBackend(QOpen62541Client *parent)
: QOpcUaBackend()
, m_uaclient(nullptr)
@@ -80,7 +70,7 @@ Open62541AsyncBackend::~Open62541AsyncBackend()
UA_Client_delete(m_uaclient);
}
-void Open62541AsyncBackend::readAttributes(uintptr_t handle, UA_NodeId id, QOpcUa::NodeAttributes attr, QString indexRange)
+void Open62541AsyncBackend::readAttributes(quint64 handle, UA_NodeId id, QOpcUa::NodeAttributes attr, QString indexRange)
{
UA_ReadRequest req;
UA_ReadRequest_init(&req);
@@ -88,6 +78,7 @@ void Open62541AsyncBackend::readAttributes(uintptr_t handle, UA_NodeId id, QOpcU
UA_ReadValueId readId;
UA_ReadValueId_init(&readId);
+ UaDeleter<UA_ReadValueId> readIdDeleter(&readId, UA_ReadValueId_deleteMembers);
readId.nodeId = id;
QVector<QOpcUaReadResult> vec;
@@ -95,10 +86,10 @@ void Open62541AsyncBackend::readAttributes(uintptr_t handle, UA_NodeId id, QOpcU
qt_forEachAttribute(attr, [&](QOpcUa::NodeAttribute attribute){
readId.attributeId = QOpen62541ValueConverter::toUaAttributeId(attribute);
if (indexRange.length())
- readId.indexRange = UA_STRING_ALLOC(indexRange.toUtf8().data());
+ QOpen62541ValueConverter::scalarFromQt<UA_String, QString>(indexRange, &readId.indexRange);
valueIds.push_back(readId);
QOpcUaReadResult temp;
- temp.attributeId = attribute;
+ temp.setAttribute(attribute);
vec.push_back(temp);
});
@@ -110,36 +101,37 @@ void Open62541AsyncBackend::readAttributes(uintptr_t handle, UA_NodeId id, QOpcU
res = UA_Client_Service_read(m_uaclient, req);
+ UaDeleter<UA_ReadResponse> responseDeleter(&res, UA_ReadResponse_deleteMembers);
+
for (int i = 0; i < vec.size(); ++i) {
// Use the service result as status code if there is no specific result for the current value.
// This ensures a result for each attribute when UA_Client_Service_read is called for a disconnected client.
if (static_cast<size_t>(i) >= res.resultsSize) {
- vec[i].statusCode = static_cast<QOpcUa::UaStatusCode>(res.responseHeader.serviceResult);
+ vec[i].setStatusCode(static_cast<QOpcUa::UaStatusCode>(res.responseHeader.serviceResult));
continue;
}
if (res.results[i].hasStatus)
- vec[i].statusCode = static_cast<QOpcUa::UaStatusCode>(res.results[i].status);
+ vec[i].setStatusCode(static_cast<QOpcUa::UaStatusCode>(res.results[i].status));
else
- vec[i].statusCode = QOpcUa::UaStatusCode::Good;
+ vec[i].setStatusCode(QOpcUa::UaStatusCode::Good);
if (res.results[i].hasValue && res.results[i].value.data)
- vec[i].value = QOpen62541ValueConverter::toQVariant(res.results[i].value);
+ vec[i].setValue(QOpen62541ValueConverter::toQVariant(res.results[i].value));
if (res.results[i].hasServerTimestamp)
- vec[i].sourceTimestamp = QOpen62541ValueConverter::uaDateTimeToQDateTime(res.results[i].sourceTimestamp);
+ vec[i].setSourceTimestamp(QOpen62541ValueConverter::scalarToQt<QDateTime, UA_DateTime>(&res.results[i].sourceTimestamp));
if (res.results[i].hasSourceTimestamp)
- vec[i].serverTimestamp = QOpen62541ValueConverter::uaDateTimeToQDateTime(res.results[i].serverTimestamp);
+ vec[i].setServerTimestamp(QOpen62541ValueConverter::scalarToQt<QDateTime, UA_DateTime>(&res.results[i].serverTimestamp));
}
emit attributesRead(handle, vec, static_cast<QOpcUa::UaStatusCode>(res.responseHeader.serviceResult));
- UA_ReadValueId_deleteMembers(&readId);
- UA_ReadResponse_deleteMembers(&res);
}
-void Open62541AsyncBackend::writeAttribute(uintptr_t handle, UA_NodeId id, QOpcUa::NodeAttribute attrId, QVariant value, QOpcUa::Types type, QString indexRange)
+void Open62541AsyncBackend::writeAttribute(quint64 handle, UA_NodeId id, QOpcUa::NodeAttribute attrId, QVariant value, QOpcUa::Types type, QString indexRange)
{
if (type == QOpcUa::Types::Undefined && attrId != QOpcUa::NodeAttribute::Value)
type = attributeIdToTypeId(attrId);
UA_WriteRequest req;
UA_WriteRequest_init(&req);
+ UaDeleter<UA_WriteRequest> requestDeleter(&req, UA_WriteRequest_deleteMembers);
req.nodesToWriteSize = 1;
req.nodesToWrite = UA_WriteValue_new();
@@ -149,21 +141,21 @@ void Open62541AsyncBackend::writeAttribute(uintptr_t handle, UA_NodeId id, QOpcU
req.nodesToWrite->value.value = QOpen62541ValueConverter::toOpen62541Variant(value, type);
req.nodesToWrite->value.hasValue = true;
if (indexRange.length())
- req.nodesToWrite->indexRange = UA_STRING_ALLOC(indexRange.toUtf8().data());
+ QOpen62541ValueConverter::scalarFromQt<UA_String, QString>(indexRange, &req.nodesToWrite->indexRange);
UA_WriteResponse res = UA_Client_Service_write(m_uaclient, req);
+ UaDeleter<UA_WriteResponse> responseDeleter(&res, UA_WriteResponse_deleteMembers);
QOpcUa::UaStatusCode status = res.resultsSize ?
static_cast<QOpcUa::UaStatusCode>(res.results[0]) : static_cast<QOpcUa::UaStatusCode>(res.responseHeader.serviceResult);
emit attributeWritten(handle, attrId, value, status);
-
- UA_WriteRequest_deleteMembers(&req);
- UA_WriteResponse_deleteMembers(&res);
}
-void Open62541AsyncBackend::writeAttributes(uintptr_t handle, UA_NodeId id, QOpcUaNode::AttributeMap toWrite, QOpcUa::Types valueAttributeType)
+void Open62541AsyncBackend::writeAttributes(quint64 handle, UA_NodeId id, QOpcUaNode::AttributeMap toWrite, QOpcUa::Types valueAttributeType)
{
+ UaDeleter<UA_NodeId> nodeIdDeleter(&id, UA_NodeId_deleteMembers);
+
if (toWrite.size() == 0) {
qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "No values to be written";
emit attributeWritten(handle, QOpcUa::NodeAttribute::None, QVariant(), QOpcUa::UaStatusCode::BadNothingToDo);
@@ -172,6 +164,7 @@ void Open62541AsyncBackend::writeAttributes(uintptr_t handle, UA_NodeId id, QOpc
UA_WriteRequest req;
UA_WriteRequest_init(&req);
+ UaDeleter<UA_WriteRequest> requestDeleter(&req, UA_WriteRequest_deleteMembers);
req.nodesToWriteSize = toWrite.size();
req.nodesToWrite = static_cast<UA_WriteValue *>(UA_Array_new(req.nodesToWriteSize, &UA_TYPES[UA_TYPES_WRITEVALUE]));
size_t index = 0;
@@ -183,6 +176,7 @@ void Open62541AsyncBackend::writeAttributes(uintptr_t handle, UA_NodeId id, QOpc
req.nodesToWrite[index].value.value = QOpen62541ValueConverter::toOpen62541Variant(it.value(), type);
}
UA_WriteResponse res = UA_Client_Service_write(m_uaclient, req);
+ UaDeleter<UA_WriteResponse> responseDeleter(&res, UA_WriteResponse_deleteMembers);
index = 0;
for (auto it = toWrite.begin(); it != toWrite.end(); ++it, ++index) {
@@ -190,14 +184,12 @@ void Open62541AsyncBackend::writeAttributes(uintptr_t handle, UA_NodeId id, QOpc
static_cast<QOpcUa::UaStatusCode>(res.results[index]) : static_cast<QOpcUa::UaStatusCode>(res.responseHeader.serviceResult);
emit attributeWritten(handle, it.key(), it.value(), status);
}
-
- UA_WriteRequest_deleteMembers(&req);
- UA_WriteResponse_deleteMembers(&res);
- UA_NodeId_deleteMembers(&id);
}
-void Open62541AsyncBackend::enableMonitoring(uintptr_t handle, UA_NodeId id, QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings)
+void Open62541AsyncBackend::enableMonitoring(quint64 handle, UA_NodeId id, QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings)
{
+ UaDeleter<UA_NodeId> nodeIdDeleter(&id, UA_NodeId_deleteMembers);
+
QOpen62541Subscription *usedSubscription = nullptr;
// Create a new subscription if necessary
@@ -241,15 +233,13 @@ void Open62541AsyncBackend::enableMonitoring(uintptr_t handle, UA_NodeId id, QOp
}
});
- UA_NodeId_deleteMembers(&id);
-
if (usedSubscription->monitoredItemsCount() == 0)
removeSubscription(usedSubscription->subscriptionId()); // No items were added
modifyPublishRequests();
}
-void Open62541AsyncBackend::disableMonitoring(uintptr_t handle, QOpcUa::NodeAttributes attr)
+void Open62541AsyncBackend::disableMonitoring(quint64 handle, QOpcUa::NodeAttributes attr)
{
qt_forEachAttribute(attr, [&](QOpcUa::NodeAttribute attribute){
QOpen62541Subscription *sub = getSubscriptionForItem(handle, attribute);
@@ -263,11 +253,11 @@ void Open62541AsyncBackend::disableMonitoring(uintptr_t handle, QOpcUa::NodeAttr
modifyPublishRequests();
}
-void Open62541AsyncBackend::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value)
+void Open62541AsyncBackend::modifyMonitoring(quint64 handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value)
{
QOpen62541Subscription *subscription = getSubscriptionForItem(handle, attr);
if (!subscription) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify parameter for" << handle << ", the monitored item does not exist";
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify" << item << ", the monitored item does not exist";
QOpcUaMonitoringParameters p;
p.setStatusCode(QOpcUa::UaStatusCode::BadMonitoredItemIdInvalid);
emit monitoringStatusChanged(handle, attr, item, p);
@@ -280,7 +270,7 @@ void Open62541AsyncBackend::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttri
QOpen62541Subscription *Open62541AsyncBackend::getSubscription(const QOpcUaMonitoringParameters &settings)
{
- if (settings.shared() == QOpcUaMonitoringParameters::SubscriptionType::Shared) {
+ if (settings.subscriptionType() == QOpcUaMonitoringParameters::SubscriptionType::Shared) {
// Requesting multiple subscriptions with publishing interval < minimum publishing interval breaks subscription sharing
double interval = revisePublishingInterval(settings.publishingInterval(), m_minPublishingInterval);
for (auto entry : qAsConst(m_subscriptions)) {
@@ -316,8 +306,11 @@ bool Open62541AsyncBackend::removeSubscription(UA_UInt32 subscriptionId)
return false;
}
-void Open62541AsyncBackend::callMethod(uintptr_t handle, UA_NodeId objectId, UA_NodeId methodId, QVector<QOpcUa::TypedVariant> args)
+void Open62541AsyncBackend::callMethod(quint64 handle, UA_NodeId objectId, UA_NodeId methodId, QVector<QOpcUa::TypedVariant> args)
{
+ UaDeleter<UA_NodeId> objectIdDeleter(&objectId, UA_NodeId_deleteMembers);
+ UaDeleter<UA_NodeId> methodIdDeleter(&methodId, UA_NodeId_deleteMembers);
+
UA_Variant *inputArgs = nullptr;
if (args.size()) {
@@ -325,10 +318,12 @@ void Open62541AsyncBackend::callMethod(uintptr_t handle, UA_NodeId objectId, UA_
for (int i = 0; i < args.size(); ++i)
inputArgs[i] = QOpen62541ValueConverter::toOpen62541Variant(args[i].first, args[i].second);
}
+ UaArrayDeleter<UA_TYPES_VARIANT> inputArgsDeleter(inputArgs, args.size());
size_t outputSize = 0;
- UA_Variant *outputArguments;
+ UA_Variant *outputArguments = nullptr;
UA_StatusCode res = UA_Client_call(m_uaclient, objectId, methodId, args.size(), inputArgs, &outputSize, &outputArguments);
+ UaArrayDeleter<UA_TYPES_VARIANT> outputArgsDeleter(outputArguments, outputSize);
if (res != UA_STATUSCODE_GOOD)
qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not call method:" << UA_StatusCode_name(res);
@@ -345,14 +340,342 @@ void Open62541AsyncBackend::callMethod(uintptr_t handle, UA_NodeId objectId, UA_
result = QOpen62541ValueConverter::toQVariant(outputArguments[0]);
}
- UA_Array_delete(inputArgs, args.size(), &UA_TYPES[UA_TYPES_VARIANT]);
- if (outputSize > 0)
- UA_Array_delete(outputArguments, outputSize, &UA_TYPES[UA_TYPES_VARIANT]);
-
emit methodCallFinished(handle, Open62541Utils::nodeIdToQString(methodId), result, static_cast<QOpcUa::UaStatusCode>(res));
+}
+
+void Open62541AsyncBackend::resolveBrowsePath(quint64 handle, UA_NodeId startNode, const QVector<QOpcUa::QRelativePathElement> &path)
+{
+ UA_TranslateBrowsePathsToNodeIdsRequest req;
+ UA_TranslateBrowsePathsToNodeIdsRequest_init(&req);
+ UaDeleter<UA_TranslateBrowsePathsToNodeIdsRequest> requestDeleter(
+ &req,UA_TranslateBrowsePathsToNodeIdsRequest_deleteMembers);
+
+ req.browsePathsSize = 1;
+ req.browsePaths = UA_BrowsePath_new();
+ UA_BrowsePath_init(req.browsePaths);
+ req.browsePaths->startingNode = startNode;
+ req.browsePaths->relativePath.elementsSize = path.size();
+ req.browsePaths->relativePath.elements = static_cast<UA_RelativePathElement *>(UA_Array_new(path.size(), &UA_TYPES[UA_TYPES_RELATIVEPATHELEMENT]));
+
+ for (int i = 0 ; i < path.size(); ++i) {
+ req.browsePaths->relativePath.elements[i].includeSubtypes = path[i].includeSubtypes();
+ req.browsePaths->relativePath.elements[i].isInverse = path[i].isInverse();
+ req.browsePaths->relativePath.elements[i].referenceTypeId = Open62541Utils::nodeIdFromQString(path[i].referenceTypeId());
+ req.browsePaths->relativePath.elements[i].targetName = UA_QUALIFIEDNAME_ALLOC(path[i].targetName().namespaceIndex(),
+ path[i].targetName().name().toUtf8().constData());
+ }
+
+ UA_TranslateBrowsePathsToNodeIdsResponse res = UA_Client_Service_translateBrowsePathsToNodeIds(m_uaclient, req);
+ UaDeleter<UA_TranslateBrowsePathsToNodeIdsResponse> responseDeleter(
+ &res, UA_TranslateBrowsePathsToNodeIdsResponse_deleteMembers);
+
+ if (res.responseHeader.serviceResult != UA_STATUSCODE_GOOD || res.resultsSize != 1) {
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Translate browse path failed:" << UA_StatusCode_name(res.responseHeader.serviceResult);
+ emit resolveBrowsePathFinished(handle, QVector<QOpcUa::QBrowsePathTarget>(), path,
+ static_cast<QOpcUa::UaStatusCode>(res.responseHeader.serviceResult));
+ return;
+ }
+
+ QVector<QOpcUa::QBrowsePathTarget> ret;
+ for (size_t i = 0; i < res.results[0].targetsSize ; ++i) {
+ QOpcUa::QBrowsePathTarget temp;
+ temp.setRemainingPathIndex(res.results[0].targets[i].remainingPathIndex);
+ temp.targetIdRef().setNamespaceUri(QString::fromUtf8(reinterpret_cast<char *>(res.results[0].targets[i].targetId.namespaceUri.data)));
+ temp.targetIdRef().setServerIndex(res.results[0].targets[i].targetId.serverIndex);
+ temp.targetIdRef().setNodeId(Open62541Utils::nodeIdToQString(res.results[0].targets[i].targetId.nodeId));
+ ret.append(temp);
+ }
+
+ emit resolveBrowsePathFinished(handle, ret, path, static_cast<QOpcUa::UaStatusCode>(res.results[0].statusCode));
+}
+
+void Open62541AsyncBackend::findServers(const QUrl &url, const QStringList &localeIds, const QStringList &serverUris)
+{
+ UA_Client *tmpClient = UA_Client_new(UA_ClientConfig_default);
+ UaDeleter<UA_Client> clientDeleter(tmpClient, UA_Client_delete);
+
+ UA_String *uaServerUris = nullptr;
+ if (!serverUris.isEmpty()) {
+ uaServerUris = static_cast<UA_String *>(UA_Array_new(serverUris.size(), &UA_TYPES[UA_TYPES_STRING]));
+ for (int i = 0; i < serverUris.size(); ++i)
+ QOpen62541ValueConverter::scalarFromQt(serverUris.at(i), &uaServerUris[i]);
+ }
+ UaArrayDeleter<UA_TYPES_STRING> serverUrisDeleter(uaServerUris, serverUris.size());
+
+ UA_String *uaLocaleIds = nullptr;
+ if (!localeIds.isEmpty()) {
+ uaLocaleIds = static_cast<UA_String *>(UA_Array_new(localeIds.size(), &UA_TYPES[UA_TYPES_STRING]));
+ for (int i = 0; i < localeIds.size(); ++i)
+ QOpen62541ValueConverter::scalarFromQt(localeIds.at(i), &uaLocaleIds[i]);
+ }
+ UaArrayDeleter<UA_TYPES_STRING> localeIdsDeleter(uaLocaleIds, localeIds.size());
+
+ size_t serversSize;
+ UA_ApplicationDescription *servers;
+
+ UA_StatusCode result = UA_Client_findServers(tmpClient, url.toString(QUrl::RemoveUserInfo).toUtf8().constData(),
+ serverUris.size(), uaServerUris, localeIds.size(), uaLocaleIds,
+ &serversSize, &servers);
+
+ UaArrayDeleter<UA_TYPES_APPLICATIONDESCRIPTION> serversDeleter(servers, serversSize);
+
+ QVector<QOpcUa::QApplicationDescription> ret;
+
+ for (size_t i = 0; i < serversSize; ++i)
+ ret.append(convertApplicationDescription(servers[i]));
+
+ if (result != UA_STATUSCODE_GOOD) {
+ qCDebug(QT_OPCUA_PLUGINS_OPEN62541) << "Failed to get servers:" << static_cast<QOpcUa::UaStatusCode>(result);
+ }
+
+ emit findServersFinished(ret, static_cast<QOpcUa::UaStatusCode>(result));
+}
+
+void Open62541AsyncBackend::batchRead(const QVector<QOpcUaReadItem> &nodesToRead)
+{
+ if (nodesToRead.size() == 0) {
+ emit batchReadFinished(QVector<QOpcUaReadResult>(), QOpcUa::UaStatusCode::BadNothingToDo);
+ return;
+ }
+
+ UA_ReadRequest req;
+ UA_ReadRequest_init(&req);
+ UaDeleter<UA_ReadRequest> requestDeleter(&req, UA_ReadRequest_deleteMembers);
+
+ req.nodesToReadSize = nodesToRead.size();
+ req.nodesToRead = static_cast<UA_ReadValueId *>(UA_Array_new(nodesToRead.size(), &UA_TYPES[UA_TYPES_READVALUEID]));
+ req.timestampsToReturn = UA_TIMESTAMPSTORETURN_BOTH;
+
+ for (int i = 0; i < nodesToRead.size(); ++i) {
+ UA_ReadValueId_init(&req.nodesToRead[i]);
+ req.nodesToRead[i].attributeId = QOpen62541ValueConverter::toUaAttributeId(nodesToRead.at(i).attribute());
+ req.nodesToRead[i].nodeId = Open62541Utils::nodeIdFromQString(nodesToRead.at(i).nodeId());
+ if (!nodesToRead[i].indexRange().isEmpty())
+ QOpen62541ValueConverter::scalarFromQt<UA_String, QString>(nodesToRead.at(i).indexRange(),
+ &req.nodesToRead[i].indexRange);
+ }
+
+ UA_ReadResponse res = UA_Client_Service_read(m_uaclient, req);
+ UaDeleter<UA_ReadResponse> responseDeleter(&res, UA_ReadResponse_deleteMembers);
+
+ QOpcUa::UaStatusCode serviceResult = static_cast<QOpcUa::UaStatusCode>(res.responseHeader.serviceResult);
+
+ if (serviceResult != QOpcUa::UaStatusCode::Good) {
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Batch read failed:" << serviceResult;
+ emit batchReadFinished(QVector<QOpcUaReadResult>(), serviceResult);
+ } else {
+ QVector<QOpcUaReadResult> ret;
+
+ for (int i = 0; i < nodesToRead.size(); ++i) {
+ QOpcUaReadResult item;
+ item.setAttribute(nodesToRead.at(i).attribute());
+ item.setNodeId(nodesToRead.at(i).nodeId());
+ item.setIndexRange(nodesToRead.at(i).indexRange());
+ if (static_cast<size_t>(i) < res.resultsSize) {
+ if (res.results[i].hasServerTimestamp)
+ item.setServerTimestamp(QOpen62541ValueConverter::scalarToQt<QDateTime>(&res.results[i].serverTimestamp));
+ if (res.results[i].hasSourceTimestamp)
+ item.setSourceTimestamp(QOpen62541ValueConverter::scalarToQt<QDateTime>(&res.results[i].sourceTimestamp));
+ if (res.results[i].hasValue)
+ item.setValue(QOpen62541ValueConverter::toQVariant(res.results[i].value));
+ if (res.results[i].hasStatus)
+ item.setStatusCode(static_cast<QOpcUa::UaStatusCode>(res.results[i].status));
+ else
+ item.setStatusCode(serviceResult);
+ } else {
+ item.setStatusCode(serviceResult);
+ }
+ ret.push_back(item);
+ }
+ emit batchReadFinished(ret, serviceResult);
+ }
+}
+
+void Open62541AsyncBackend::batchWrite(const QVector<QOpcUaWriteItem> &nodesToWrite)
+{
+ if (nodesToWrite.isEmpty()) {
+ emit batchWriteFinished(QVector<QOpcUaWriteResult>(), QOpcUa::UaStatusCode::BadNothingToDo);
+ return;
+ }
+
+ UA_WriteRequest req;
+ UA_WriteRequest_init(&req);
+ UaDeleter<UA_WriteRequest> requestDeleter(&req, UA_WriteRequest_deleteMembers);
+
+ req.nodesToWriteSize = nodesToWrite.size();
+ req.nodesToWrite = static_cast<UA_WriteValue *>(UA_Array_new(nodesToWrite.size(), &UA_TYPES[UA_TYPES_WRITEVALUE]));
+
+ for (int i = 0; i < nodesToWrite.size(); ++i) {
+ const auto &currentItem = nodesToWrite.at(i);
+ auto &currentUaItem = req.nodesToWrite[i];
+ currentUaItem.attributeId = QOpen62541ValueConverter::toUaAttributeId(currentItem.attribute());
+ currentUaItem.nodeId = Open62541Utils::nodeIdFromQString(currentItem.nodeId());
+ if (currentItem.hasStatusCode()) {
+ currentUaItem.value.status = currentItem.statusCode();
+ currentUaItem.value.hasStatus = UA_TRUE;
+ }
+ if (!currentItem.indexRange().isEmpty())
+ QOpen62541ValueConverter::scalarFromQt<UA_String, QString>(currentItem.indexRange(), &currentUaItem.indexRange);
+ if (!currentItem.value().isNull()) {
+ currentUaItem.value.hasValue = true;
+ currentUaItem.value.value = QOpen62541ValueConverter::toOpen62541Variant(currentItem.value(), currentItem.type());
+ }
+ if (currentItem.sourceTimestamp().isValid()) {
+ QOpen62541ValueConverter::scalarFromQt<UA_DateTime, QDateTime>(currentItem.sourceTimestamp(),
+ &currentUaItem.value.sourceTimestamp);
+ currentUaItem.value.hasSourceTimestamp = UA_TRUE;
+ }
+ if (currentItem.serverTimestamp().isValid()) {
+ QOpen62541ValueConverter::scalarFromQt<UA_DateTime, QDateTime>(currentItem.serverTimestamp(),
+ &currentUaItem.value.serverTimestamp);
+ currentUaItem.value.hasServerTimestamp = UA_TRUE;
+ }
+ }
+
+ UA_WriteResponse res = UA_Client_Service_write(m_uaclient, req);
+ UaDeleter<UA_WriteResponse> responseDeleter(&res, UA_WriteResponse_deleteMembers);
+
+ QOpcUa::UaStatusCode serviceResult = QOpcUa::UaStatusCode(res.responseHeader.serviceResult);
- UA_NodeId_deleteMembers(&objectId);
- UA_NodeId_deleteMembers(&methodId);
+ if (serviceResult != QOpcUa::UaStatusCode::Good) {
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Batch write failed:" << serviceResult;
+ emit batchWriteFinished(QVector<QOpcUaWriteResult>(), serviceResult);
+ } else {
+ QVector<QOpcUaWriteResult> ret;
+
+ for (int i = 0; i < nodesToWrite.size(); ++i) {
+ QOpcUaWriteResult item;
+ item.setAttribute(nodesToWrite.at(i).attribute());
+ item.setNodeId(nodesToWrite.at(i).nodeId());
+ item.setIndexRange(nodesToWrite.at(i).indexRange());
+ if (static_cast<size_t>(i) < res.resultsSize)
+ item.setStatusCode(QOpcUa::UaStatusCode(res.results[i]));
+ else
+ item.setStatusCode(serviceResult);
+ ret.push_back(item);
+ }
+ emit batchWriteFinished(ret, serviceResult);
+ }
+}
+
+void Open62541AsyncBackend::addNode(const QOpcUaAddNodeItem &nodeToAdd)
+{
+ UA_AddNodesRequest req;
+ UA_AddNodesRequest_init(&req);
+ UaDeleter<UA_AddNodesRequest> requestDeleter(&req, UA_AddNodesRequest_deleteMembers);
+ req.nodesToAddSize = 1;
+ req.nodesToAdd = UA_AddNodesItem_new();
+ UA_AddNodesItem_init(req.nodesToAdd);
+
+ QOpen62541ValueConverter::scalarFromQt<UA_ExpandedNodeId, QOpcUa::QExpandedNodeId>(
+ nodeToAdd.parentNodeId(), &req.nodesToAdd->parentNodeId);
+
+ req.nodesToAdd->referenceTypeId = Open62541Utils::nodeIdFromQString(nodeToAdd.referenceTypeId());
+
+ QOpen62541ValueConverter::scalarFromQt<UA_ExpandedNodeId, QOpcUa::QExpandedNodeId>(
+ nodeToAdd.requestedNewNodeId(), &req.nodesToAdd->requestedNewNodeId);
+
+ QOpen62541ValueConverter::scalarFromQt<UA_QualifiedName, QOpcUa::QQualifiedName>(
+ nodeToAdd.browseName(), &req.nodesToAdd->browseName);
+
+ req.nodesToAdd->nodeClass = static_cast<UA_NodeClass>(nodeToAdd.nodeClass());
+
+ req.nodesToAdd->nodeAttributes = assembleNodeAttributes(nodeToAdd.nodeAttributes(),
+ nodeToAdd.nodeClass());
+
+ if (!nodeToAdd.typeDefinition().nodeId().isEmpty())
+ QOpen62541ValueConverter::scalarFromQt<UA_ExpandedNodeId, QOpcUa::QExpandedNodeId>(
+ nodeToAdd.typeDefinition(), &req.nodesToAdd->typeDefinition);
+
+ UA_AddNodesResponse res = UA_Client_Service_addNodes(m_uaclient, req);
+ UaDeleter<UA_AddNodesResponse> responseDeleter(&res, UA_AddNodesResponse_deleteMembers);
+
+ QOpcUa::UaStatusCode status = QOpcUa::UaStatusCode::Good;
+ QString resultId;
+ if (res.responseHeader.serviceResult == UA_STATUSCODE_GOOD) {
+ if (res.results[0].statusCode == UA_STATUSCODE_GOOD)
+ resultId = Open62541Utils::nodeIdToQString(res.results[0].addedNodeId);
+ else {
+ status = static_cast<QOpcUa::UaStatusCode>(res.results[0].statusCode);
+ qCDebug(QT_OPCUA_PLUGINS_OPEN62541) << "Failed to add node:" << status;
+ }
+ } else {
+ status = static_cast<QOpcUa::UaStatusCode>(res.responseHeader.serviceResult);
+ qCDebug(QT_OPCUA_PLUGINS_OPEN62541) << "Failed to add node:" << status;
+ }
+
+ emit addNodeFinished(nodeToAdd.requestedNewNodeId(), resultId, status);
+}
+
+void Open62541AsyncBackend::deleteNode(const QString &nodeId, bool deleteTargetReferences)
+{
+ UA_NodeId id = Open62541Utils::nodeIdFromQString(nodeId);
+ UaDeleter<UA_NodeId> nodeIdDeleter(&id, UA_NodeId_deleteMembers);
+
+ UA_StatusCode res = UA_Client_deleteNode(m_uaclient, id, deleteTargetReferences);
+
+ QOpcUa::UaStatusCode resultStatus = static_cast<QOpcUa::UaStatusCode>(res);
+
+ if (resultStatus != QOpcUa::UaStatusCode::Good) {
+ qCDebug(QT_OPCUA_PLUGINS_OPEN62541) << "Failed to delete node" << nodeId << "with status code" << resultStatus;
+ }
+
+ emit deleteNodeFinished(nodeId, resultStatus);
+}
+
+void Open62541AsyncBackend::addReference(const QOpcUaAddReferenceItem &referenceToAdd)
+{
+ UA_ExpandedNodeId target;
+ UA_ExpandedNodeId_init(&target);
+ UaDeleter<UA_ExpandedNodeId> nodeIdDeleter(&target, UA_ExpandedNodeId_deleteMembers);
+
+ QOpen62541ValueConverter::scalarFromQt<UA_ExpandedNodeId, QOpcUa::QExpandedNodeId>(
+ referenceToAdd.targetNodeId(), &target);
+
+ UA_String serverUri;
+ UaDeleter<UA_String> serverUriDeleter(&serverUri, UA_String_deleteMembers);
+ QOpen62541ValueConverter::scalarFromQt<UA_String, QString>(
+ referenceToAdd.targetServerUri(), &serverUri);
+
+ UA_NodeClass nodeClass = static_cast<UA_NodeClass>(referenceToAdd.targetNodeClass());
+
+ UA_StatusCode res = UA_Client_addReference(m_uaclient,
+ Open62541Utils::nodeIdFromQString(referenceToAdd.sourceNodeId()),
+ Open62541Utils::nodeIdFromQString(referenceToAdd.referenceTypeId()),
+ referenceToAdd.isForwardReference(), serverUri, target, nodeClass);
+
+ QOpcUa::UaStatusCode statusCode = static_cast<QOpcUa::UaStatusCode>(res);
+ if (res != UA_STATUSCODE_GOOD)
+ qCDebug(QT_OPCUA_PLUGINS_OPEN62541) << "Failed to add reference from" << referenceToAdd.sourceNodeId() << "to"
+ << referenceToAdd.targetNodeId().nodeId() << ":" << statusCode;
+
+ emit addReferenceFinished(referenceToAdd.sourceNodeId(), referenceToAdd.referenceTypeId(),
+ referenceToAdd.targetNodeId(),
+ referenceToAdd.isForwardReference(), statusCode);
+}
+
+void Open62541AsyncBackend::deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete)
+{
+ UA_ExpandedNodeId target;
+ UA_ExpandedNodeId_init(&target);
+ UaDeleter<UA_ExpandedNodeId> targetDeleter(&target, UA_ExpandedNodeId_deleteMembers);
+ QOpen62541ValueConverter::scalarFromQt<UA_ExpandedNodeId, QOpcUa::QExpandedNodeId>(
+ referenceToDelete.targetNodeId(), &target);
+
+ UA_StatusCode res = UA_Client_deleteReference(m_uaclient,
+ Open62541Utils::nodeIdFromQString(referenceToDelete.sourceNodeId()),
+ Open62541Utils::nodeIdFromQString(referenceToDelete.referenceTypeId()),
+ referenceToDelete.isForwardReference(),
+ target, referenceToDelete.deleteBidirectional());
+
+ QOpcUa::UaStatusCode statusCode = static_cast<QOpcUa::UaStatusCode>(res);
+ if (res != UA_STATUSCODE_GOOD)
+ qCDebug(QT_OPCUA_PLUGINS_OPEN62541) << "Failed to delete reference from" << referenceToDelete.sourceNodeId() << "to"
+ << referenceToDelete.targetNodeId().nodeId() << ":" << statusCode;
+
+ emit deleteReferenceFinished(referenceToDelete.sourceNodeId(), referenceToDelete.referenceTypeId(),
+ referenceToDelete.targetNodeId(),
+ referenceToDelete.isForwardReference(), statusCode);
}
static void convertBrowseResult(UA_BrowseResult *src, quint32 referencesSize, QVector<QOpcUaReferenceDescription> &dst)
@@ -362,35 +685,36 @@ static void convertBrowseResult(UA_BrowseResult *src, quint32 referencesSize, QV
for (size_t i = 0; i < referencesSize; ++i) {
QOpcUaReferenceDescription temp;
- temp.setNodeId(Open62541Utils::nodeIdToQString(src->references[i].nodeId.nodeId));
- temp.setRefType(static_cast<QOpcUa::ReferenceTypeId>(src->references[i].referenceTypeId.identifier.numeric));
+ temp.setTargetNodeId(QOpen62541ValueConverter::scalarToQt<QOpcUa::QExpandedNodeId>(&src->references[i].nodeId));
+ temp.setTypeDefinition(QOpen62541ValueConverter::scalarToQt<QOpcUa::QExpandedNodeId>(&src->references[i].typeDefinition));
+ temp.setRefTypeId(Open62541Utils::nodeIdToQString(src->references[i].referenceTypeId));
temp.setNodeClass(static_cast<QOpcUa::NodeClass>(src->references[i].nodeClass));
- temp.setBrowseName(QOpen62541ValueConverter::scalarToQVariant<QOpcUa::QQualifiedName, UA_QualifiedName>(
- &(src->references[i].browseName), QMetaType::Type::UnknownType).value<QOpcUa::QQualifiedName>());
- temp.setDisplayName(QOpen62541ValueConverter::scalarToQVariant<QOpcUa::QLocalizedText, UA_LocalizedText>(
- &(src->references[i].displayName), QMetaType::Type::UnknownType).value<QOpcUa::QLocalizedText>());
+ temp.setBrowseName(QOpen62541ValueConverter::scalarToQt<QOpcUa::QQualifiedName, UA_QualifiedName>(&src->references[i].browseName));
+ temp.setDisplayName(QOpen62541ValueConverter::scalarToQt<QOpcUa::QLocalizedText, UA_LocalizedText>(&src->references[i].displayName));
+ temp.setIsForwardReference(src->references[i].isForward);
dst.push_back(temp);
}
}
-void Open62541AsyncBackend::browseChildren(uintptr_t handle, UA_NodeId id, QOpcUa::ReferenceTypeId referenceType, QOpcUa::NodeClasses nodeClassMask)
+void Open62541AsyncBackend::browse(quint64 handle, UA_NodeId id, const QOpcUaBrowseRequest &request)
{
- UA_BrowseRequest request;
- UA_BrowseRequest_init(&request);
- request.nodesToBrowse = UA_BrowseDescription_new();
- request.nodesToBrowseSize = 1;
- request.nodesToBrowse->browseDirection = UA_BROWSEDIRECTION_FORWARD;
- request.nodesToBrowse->includeSubtypes = true;
- request.nodesToBrowse->nodeClassMask = static_cast<quint32>(nodeClassMask);
- request.nodesToBrowse->nodeId = id;
- request.nodesToBrowse->resultMask = UA_BROWSERESULTMASK_BROWSENAME | UA_BROWSERESULTMASK_DISPLAYNAME |
- UA_BROWSERESULTMASK_REFERENCETYPEID | UA_BROWSERESULTMASK_NODECLASS;
- request.nodesToBrowse->referenceTypeId = UA_NODEID_NUMERIC(0, static_cast<quint32>(referenceType));
- request.requestedMaxReferencesPerNode = 0; // Let the server choose a maximum value
+ UA_BrowseRequest uaRequest;
+ UA_BrowseRequest_init(&uaRequest);
+ UaDeleter<UA_BrowseRequest> requestDeleter(&uaRequest, UA_BrowseRequest_deleteMembers);
+
+ uaRequest.nodesToBrowse = UA_BrowseDescription_new();
+ uaRequest.nodesToBrowseSize = 1;
+ uaRequest.nodesToBrowse->browseDirection = static_cast<UA_BrowseDirection>(request.browseDirection());
+ uaRequest.nodesToBrowse->includeSubtypes = request.includeSubtypes();
+ uaRequest.nodesToBrowse->nodeClassMask = static_cast<quint32>(request.nodeClassMask());
+ uaRequest.nodesToBrowse->nodeId = id;
+ uaRequest.nodesToBrowse->resultMask = UA_BROWSERESULTMASK_ALL;
+ uaRequest.nodesToBrowse->referenceTypeId = Open62541Utils::nodeIdFromQString(request.referenceTypeId());
+ uaRequest.requestedMaxReferencesPerNode = 0; // Let the server choose a maximum value
UA_BrowseResponse *response = UA_BrowseResponse_new();
- *response = UA_Client_Service_browse(m_uaclient, request);
- UA_BrowseRequest_deleteMembers(&request);
+ UaDeleter<UA_BrowseResponse> responseDeleter(response, UA_BrowseResponse_delete);
+ *response = UA_Client_Service_browse(m_uaclient, uaRequest);
QVector<QOpcUaReferenceDescription> ret;
@@ -409,20 +733,18 @@ void Open62541AsyncBackend::browseChildren(uintptr_t handle, UA_NodeId id, QOpcU
if (res->results->continuationPoint.length) {
UA_BrowseNextRequest nextReq;
UA_BrowseNextRequest_init(&nextReq);
+ UaDeleter<UA_BrowseNextRequest> nextReqDeleter(&nextReq, UA_BrowseNextRequest_deleteMembers);
nextReq.continuationPoints = UA_ByteString_new();
UA_ByteString_copy(&(res->results->continuationPoint), nextReq.continuationPoints);
nextReq.continuationPointsSize = 1;
- UA_BrowseResponse_deleteMembers(res);
+ UA_BrowseResponse_deleteMembers(res); // Deallocate the pointer members before overwriting the response
*reinterpret_cast<UA_BrowseNextResponse *>(response) = UA_Client_Service_browseNext(m_uaclient, nextReq);
- UA_BrowseNextRequest_deleteMembers(&nextReq);
} else {
break;
}
}
emit browseFinished(handle, ret, statusCode);
-
- UA_BrowseResponse_delete(static_cast<UA_BrowseResponse *>(response));
}
static void clientStateCallback(UA_Client *client, UA_ClientState state)
@@ -434,7 +756,9 @@ static void clientStateCallback(UA_Client *client, UA_ClientState state)
if (state == UA_CLIENTSTATE_DISCONNECTED) {
emit backend->stateAndOrErrorChanged(QOpcUaClient::Disconnected, QOpcUaClient::ConnectionError);
backend->m_useStateCallback = false;
- backend->cleanupSubscriptions();
+ // Use a queued connection to make sure the subscription is not deleted if the callback was triggered
+ // inside of one of its methods.
+ QMetaObject::invokeMethod(backend, "cleanupSubscriptions", Qt::QueuedConnection);
}
}
@@ -493,6 +817,57 @@ void Open62541AsyncBackend::disconnectFromEndpoint()
emit stateAndOrErrorChanged(QOpcUaClient::Disconnected, QOpcUaClient::NoError);
}
+void Open62541AsyncBackend::requestEndpoints(const QUrl &url)
+{
+ UA_Client *tmpClient = UA_Client_new(UA_ClientConfig_default);
+ size_t numEndpoints = 0;
+ UA_EndpointDescription *endpoints = nullptr;
+ UA_StatusCode res = UA_Client_getEndpoints(tmpClient, url.toString(QUrl::RemoveUserInfo).toUtf8().constData(), &numEndpoints, &endpoints);
+ UaArrayDeleter<UA_TYPES_ENDPOINTDESCRIPTION> endpointDescriptionDeleter(endpoints, numEndpoints);
+ QVector<QOpcUa::QEndpointDescription> ret;
+
+ namespace vc = QOpen62541ValueConverter;
+ using namespace QOpcUa;
+ if (res == UA_STATUSCODE_GOOD && numEndpoints) {
+ for (size_t i = 0; i < numEndpoints ; ++i) {
+ QOpcUa::QEndpointDescription epd;
+ QOpcUa::QApplicationDescription &apd = epd.serverRef();
+
+ apd.setApplicationUri(vc::scalarToQt<QString, UA_String>(&endpoints[i].server.applicationUri));
+ apd.setProductUri(vc::scalarToQt<QString, UA_String>(&endpoints[i].server.productUri));
+ apd.setApplicationName(vc::scalarToQt<QLocalizedText, UA_LocalizedText>(&endpoints[i].server.applicationName));
+ apd.setApplicationType(static_cast<QApplicationDescription::ApplicationType>(endpoints[i].server.applicationType));
+ apd.setGatewayServerUri(vc::scalarToQt<QString, UA_String>(&endpoints[i].server.gatewayServerUri));
+ apd.setDiscoveryProfileUri(vc::scalarToQt<QString, UA_String>(&endpoints[i].server.discoveryProfileUri));
+ for (size_t j = 0; j < endpoints[i].server.discoveryUrlsSize; ++j)
+ apd.discoveryUrlsRef().append(vc::scalarToQt<QString, UA_String>(&endpoints[i].server.discoveryUrls[j]));
+
+ epd.setEndpointUrl(vc::scalarToQt<QString, UA_String>(&endpoints[i].endpointUrl));
+ epd.setServerCertificate(vc::scalarToQt<QByteArray, UA_ByteString>(&endpoints[i].serverCertificate));
+ epd.setSecurityMode(static_cast<QEndpointDescription::MessageSecurityMode>(endpoints[i].securityMode));
+ epd.setSecurityPolicyUri(vc::scalarToQt<QString, UA_String>(&endpoints[i].securityPolicyUri));
+ for (size_t j = 0; j < endpoints[i].userIdentityTokensSize; ++j) {
+ QUserTokenPolicy policy;
+ UA_UserTokenPolicy *policySrc = &endpoints[i].userIdentityTokens[j];
+ policy.setPolicyId(vc::scalarToQt<QString, UA_String>(&policySrc->policyId));
+ policy.setTokenType(static_cast<QUserTokenPolicy::TokenType>(endpoints[i].userIdentityTokens[j].tokenType));
+ policy.setIssuedTokenType(vc::scalarToQt<QString, UA_String>(&endpoints[i].userIdentityTokens[j].issuedTokenType));
+ policy.setIssuerEndpointUrl(vc::scalarToQt<QString, UA_String>(&endpoints[i].userIdentityTokens[j].issuerEndpointUrl));
+ policy.setSecurityPolicyUri(vc::scalarToQt<QString, UA_String>(&endpoints[i].userIdentityTokens[j].securityPolicyUri));
+ epd.userIdentityTokensRef().append(policy);
+ }
+
+ epd.setTransportProfileUri(vc::scalarToQt<QString, UA_String>(&endpoints[i].transportProfileUri));
+ epd.setSecurityLevel(endpoints[i].securityLevel);
+ ret.append(epd);
+ }
+ }
+
+ emit endpointsRequestFinished(ret, static_cast<QOpcUa::UaStatusCode>(res));
+
+ UA_Client_delete(tmpClient);
+}
+
void Open62541AsyncBackend::sendPublishRequest()
{
if (!m_uaclient)
@@ -526,7 +901,7 @@ void Open62541AsyncBackend::modifyPublishRequests()
sendPublishRequest();
}
-void Open62541AsyncBackend::handleSubscriptionTimeout(QOpen62541Subscription *sub, QVector<QPair<uintptr_t, QOpcUa::NodeAttribute>> items)
+void Open62541AsyncBackend::handleSubscriptionTimeout(QOpen62541Subscription *sub, QVector<QPair<quint64, QOpcUa::NodeAttribute>> items)
{
for (auto it : qAsConst(items)) {
auto item = m_attributeMapping.find(it.first);
@@ -539,7 +914,7 @@ void Open62541AsyncBackend::handleSubscriptionTimeout(QOpen62541Subscription *su
modifyPublishRequests();
}
-QOpen62541Subscription *Open62541AsyncBackend::getSubscriptionForItem(uintptr_t handle, QOpcUa::NodeAttribute attr)
+QOpen62541Subscription *Open62541AsyncBackend::getSubscriptionForItem(quint64 handle, QOpcUa::NodeAttribute attr)
{
auto nodeEntry = m_attributeMapping.find(handle);
if (nodeEntry == m_attributeMapping.end())
@@ -553,6 +928,24 @@ QOpen62541Subscription *Open62541AsyncBackend::getSubscriptionForItem(uintptr_t
return subscription.value();
}
+QOpcUa::QApplicationDescription Open62541AsyncBackend::convertApplicationDescription(UA_ApplicationDescription &desc)
+{
+ QOpcUa::QApplicationDescription temp;
+
+ temp.setApplicationUri(QOpen62541ValueConverter::scalarToQt<QString, UA_String>(&desc.applicationUri));
+ temp.setProductUri(QOpen62541ValueConverter::scalarToQt<QString, UA_String>(&desc.productUri));
+ temp.setApplicationName(QOpen62541ValueConverter::scalarToQt<QOpcUa::QLocalizedText, UA_LocalizedText>(&desc.applicationName));
+ temp.setApplicationType(static_cast<QOpcUa::QApplicationDescription::ApplicationType>(desc.applicationType));
+ temp.setGatewayServerUri(QOpen62541ValueConverter::scalarToQt<QString, UA_String>(&desc.gatewayServerUri));
+ temp.setDiscoveryProfileUri(QOpen62541ValueConverter::scalarToQt<QString, UA_String>(&desc.discoveryProfileUri));
+
+
+ for (size_t i = 0; i < desc.discoveryUrlsSize; ++i)
+ temp.discoveryUrlsRef().append(QOpen62541ValueConverter::scalarToQt<QString, UA_String>(&desc.discoveryUrls[i]));
+
+ return temp;
+}
+
void Open62541AsyncBackend::cleanupSubscriptions()
{
qDeleteAll(m_subscriptions);
@@ -561,4 +954,214 @@ void Open62541AsyncBackend::cleanupSubscriptions()
m_minPublishingInterval = 0;
}
+UA_ExtensionObject Open62541AsyncBackend::assembleNodeAttributes(const QOpcUaNodeCreationAttributes &nodeAttributes,
+ QOpcUa::NodeClass nodeClass)
+{
+ UA_ExtensionObject obj;
+ UA_ExtensionObject_init(&obj);
+ obj.encoding = UA_EXTENSIONOBJECT_DECODED;
+
+ switch (nodeClass) {
+ case QOpcUa::NodeClass::Object: {
+ UA_ObjectAttributes *attr = UA_ObjectAttributes_new();
+ *attr = UA_ObjectAttributes_default;
+ obj.content.decoded.data = attr;
+ obj.content.decoded.type = &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES];
+
+ if (nodeAttributes.hasEventNotifier()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_EVENTNOTIFIER;
+ attr->eventNotifier = nodeAttributes.eventNotifier();
+ }
+ break;
+ }
+ case QOpcUa::NodeClass::Variable: {
+ UA_VariableAttributes *attr = UA_VariableAttributes_new();
+ *attr = UA_VariableAttributes_default;
+ obj.content.decoded.data = attr;
+ obj.content.decoded.type = &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES];
+
+ if (nodeAttributes.hasValue()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_VALUE;
+ attr->value = QOpen62541ValueConverter::toOpen62541Variant(nodeAttributes.value(),
+ nodeAttributes.valueType());
+ }
+ if (nodeAttributes.hasDataTypeId()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_DATATYPE;
+ attr->dataType = Open62541Utils::nodeIdFromQString(nodeAttributes.dataTypeId());
+ }
+ if (nodeAttributes.hasValueRank()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_VALUERANK;
+ attr->valueRank = nodeAttributes.valueRank();
+ }
+ if (nodeAttributes.hasArrayDimensions()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_ARRAYDIMENSIONS;
+ attr->arrayDimensions = copyArrayDimensions(nodeAttributes.arrayDimensions(), &attr->arrayDimensionsSize);
+ }
+ if (nodeAttributes.hasAccessLevel()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_ACCESSLEVEL;
+ attr->accessLevel = nodeAttributes.accessLevel();
+ }
+ if (nodeAttributes.hasUserAccessLevel()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_USERACCESSLEVEL;
+ attr->userAccessLevel = nodeAttributes.userAccessLevel();
+ }
+ if (nodeAttributes.hasMinimumSamplingInterval()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_MINIMUMSAMPLINGINTERVAL;
+ attr->minimumSamplingInterval = nodeAttributes.minimumSamplingInterval();
+ }
+ if (nodeAttributes.hasHistorizing()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_HISTORIZING;
+ attr->historizing = nodeAttributes.historizing();
+ }
+ break;
+ }
+ case QOpcUa::NodeClass::Method: {
+ UA_MethodAttributes *attr = UA_MethodAttributes_new();
+ *attr = UA_MethodAttributes_default;
+ obj.content.decoded.data = attr;
+ obj.content.decoded.type = &UA_TYPES[UA_TYPES_METHODATTRIBUTES];
+
+ if (nodeAttributes.hasExecutable()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_EXECUTABLE;
+ attr->executable = nodeAttributes.executable();
+ }
+ if (nodeAttributes.hasUserExecutable()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_USEREXECUTABLE;
+ attr->userExecutable = nodeAttributes.userExecutable();
+ }
+ break;
+ }
+ case QOpcUa::NodeClass::ObjectType: {
+ UA_ObjectTypeAttributes *attr = UA_ObjectTypeAttributes_new();
+ *attr = UA_ObjectTypeAttributes_default;
+ obj.content.decoded.data = attr;
+ obj.content.decoded.type = &UA_TYPES[UA_TYPES_OBJECTTYPEATTRIBUTES];
+
+ if (nodeAttributes.hasIsAbstract()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_ISABSTRACT;
+ attr->isAbstract = nodeAttributes.isAbstract();
+ }
+ break;
+ }
+ case QOpcUa::NodeClass::VariableType: {
+ UA_VariableTypeAttributes *attr = UA_VariableTypeAttributes_new();
+ *attr = UA_VariableTypeAttributes_default;
+ obj.content.decoded.data = attr;
+ obj.content.decoded.type = &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES];
+
+ if (nodeAttributes.hasValue()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_VALUE;
+ attr->value = QOpen62541ValueConverter::toOpen62541Variant(nodeAttributes.value(),
+ nodeAttributes.valueType());
+ }
+ if (nodeAttributes.hasDataTypeId()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_DATATYPE;
+ attr->dataType = Open62541Utils::nodeIdFromQString(nodeAttributes.dataTypeId());
+ }
+ if (nodeAttributes.hasValueRank()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_VALUERANK;
+ attr->valueRank = nodeAttributes.valueRank();
+ }
+ if (nodeAttributes.hasArrayDimensions()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_ARRAYDIMENSIONS;
+ attr->arrayDimensions = copyArrayDimensions(nodeAttributes.arrayDimensions(), &attr->arrayDimensionsSize);
+ }
+ if (nodeAttributes.hasIsAbstract()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_ISABSTRACT;
+ attr->isAbstract = nodeAttributes.isAbstract();
+ }
+ break;
+ }
+ case QOpcUa::NodeClass::ReferenceType: {
+ UA_ReferenceTypeAttributes *attr = UA_ReferenceTypeAttributes_new();
+ *attr = UA_ReferenceTypeAttributes_default;
+ obj.content.decoded.data = attr;
+ obj.content.decoded.type = &UA_TYPES[UA_TYPES_REFERENCETYPEATTRIBUTES];
+
+ if (nodeAttributes.hasIsAbstract()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_ISABSTRACT;
+ attr->isAbstract = nodeAttributes.isAbstract();
+ }
+ if (nodeAttributes.hasSymmetric()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_SYMMETRIC;
+ attr->symmetric = nodeAttributes.symmetric();
+ }
+ if (nodeAttributes.hasInverseName()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_INVERSENAME;
+ QOpen62541ValueConverter::scalarFromQt<UA_LocalizedText, QOpcUa::QLocalizedText>(
+ nodeAttributes.inverseName(), &attr->inverseName);
+ }
+ break;
+ }
+ case QOpcUa::NodeClass::DataType: {
+ UA_DataTypeAttributes *attr = UA_DataTypeAttributes_new();
+ *attr = UA_DataTypeAttributes_default;
+ obj.content.decoded.data = attr;
+ obj.content.decoded.type = &UA_TYPES[UA_TYPES_DATATYPEATTRIBUTES];
+
+ if (nodeAttributes.hasIsAbstract()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_ISABSTRACT;
+ attr->isAbstract = nodeAttributes.isAbstract();
+ }
+ break;
+ }
+ case QOpcUa::NodeClass::View: {
+ UA_ViewAttributes *attr = UA_ViewAttributes_new();
+ *attr = UA_ViewAttributes_default;
+ obj.content.decoded.data = attr;
+ obj.content.decoded.type = &UA_TYPES[UA_TYPES_VIEWATTRIBUTES];
+
+ if (nodeAttributes.hasContainsNoLoops()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_CONTAINSNOLOOPS;
+ attr->containsNoLoops = nodeAttributes.containsNoLoops();
+ }
+ if (nodeAttributes.hasEventNotifier()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_EVENTNOTIFIER;
+ attr->eventNotifier = nodeAttributes.eventNotifier();
+ }
+ break;
+ }
+ default:
+ qCDebug(QT_OPCUA_PLUGINS_OPEN62541) << "Could not convert node attributes, unknown node class";
+ UA_ExtensionObject_init(&obj);
+ return obj;
+ }
+
+ UA_ObjectAttributes *attr = reinterpret_cast<UA_ObjectAttributes *>(obj.content.decoded.data);
+ if (nodeAttributes.hasDisplayName()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_DISPLAYNAME;
+ QOpen62541ValueConverter::scalarFromQt<UA_LocalizedText, QOpcUa::QLocalizedText>(
+ nodeAttributes.displayName(), &attr->displayName);
+ }
+ if (nodeAttributes.hasDescription()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_DESCRIPTION;
+ QOpen62541ValueConverter::scalarFromQt<UA_LocalizedText, QOpcUa::QLocalizedText>(
+ nodeAttributes.description(), &attr->description);
+ }
+ if (nodeAttributes.hasWriteMask()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_WRITEMASK;
+ attr->writeMask = nodeAttributes.writeMask();
+ }
+ if (nodeAttributes.hasUserWriteMask()) {
+ attr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_USERWRITEMASK;
+ attr->userWriteMask = nodeAttributes.userWriteMask();
+ }
+
+ return obj;
+}
+
+UA_UInt32 *Open62541AsyncBackend::copyArrayDimensions(const QVector<quint32> &arrayDimensions, size_t *outputSize)
+{
+ if (outputSize)
+ *outputSize = arrayDimensions.size();
+
+ if (!outputSize)
+ return nullptr;
+
+ UA_UInt32 *data = nullptr;
+ UA_StatusCode res = UA_Array_copy(arrayDimensions.constData(), arrayDimensions.size(),
+ reinterpret_cast<void **>(&data), &UA_TYPES[UA_TYPES_UINT32]);
+ return res == UA_STATUSCODE_GOOD ? data : nullptr;
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/opcua/open62541/qopen62541backend.h b/src/plugins/opcua/open62541/qopen62541backend.h
index 3a4c1fa..622f91d 100644
--- a/src/plugins/opcua/open62541/qopen62541backend.h
+++ b/src/plugins/opcua/open62541/qopen62541backend.h
@@ -54,24 +54,36 @@ public:
public Q_SLOTS:
void connectToEndpoint(const QUrl &url);
void disconnectFromEndpoint();
+ void requestEndpoints(const QUrl &url);
// Node functions
- void browseChildren(uintptr_t handle, UA_NodeId id, QOpcUa::ReferenceTypeId referenceType, QOpcUa::NodeClasses nodeClassMask);
- void readAttributes(uintptr_t handle, UA_NodeId id, QOpcUa::NodeAttributes attr, QString indexRange);
-
- void writeAttribute(uintptr_t handle, UA_NodeId id, QOpcUa::NodeAttribute attrId, QVariant value, QOpcUa::Types type, QString indexRange);
- void writeAttributes(uintptr_t handle, UA_NodeId id, QOpcUaNode::AttributeMap toWrite, QOpcUa::Types valueAttributeType);
- void enableMonitoring(uintptr_t handle, UA_NodeId id, QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings);
- void disableMonitoring(uintptr_t handle, QOpcUa::NodeAttributes attr);
- void modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value);
- void callMethod(uintptr_t handle, UA_NodeId objectId, UA_NodeId methodId, QVector<QOpcUa::TypedVariant> args);
+ void browse(quint64 handle, UA_NodeId id, const QOpcUaBrowseRequest &request);
+ void readAttributes(quint64 handle, UA_NodeId id, QOpcUa::NodeAttributes attr, QString indexRange);
+
+ void writeAttribute(quint64 handle, UA_NodeId id, QOpcUa::NodeAttribute attrId, QVariant value, QOpcUa::Types type, QString indexRange);
+ void writeAttributes(quint64 handle, UA_NodeId id, QOpcUaNode::AttributeMap toWrite, QOpcUa::Types valueAttributeType);
+ void enableMonitoring(quint64 handle, UA_NodeId id, QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings);
+ void disableMonitoring(quint64 handle, QOpcUa::NodeAttributes attr);
+ void modifyMonitoring(quint64 handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value);
+ void callMethod(quint64 handle, UA_NodeId objectId, UA_NodeId methodId, QVector<QOpcUa::TypedVariant> args);
+ void resolveBrowsePath(quint64 handle, UA_NodeId startNode, const QVector<QOpcUa::QRelativePathElement> &path);
+ void findServers(const QUrl &url, const QStringList &localeIds, const QStringList &serverUris);
+
+ void batchRead(const QVector<QOpcUaReadItem> &nodesToRead);
+ void batchWrite(const QVector<QOpcUaWriteItem> &nodesToWrite);
+
+ // Node management
+ void addNode(const QOpcUaAddNodeItem &nodeToAdd);
+ void deleteNode(const QString &nodeId, bool deleteTargetReferences);
+ void addReference(const QOpcUaAddReferenceItem &referenceToAdd);
+ void deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete);
// Subscription
QOpen62541Subscription *getSubscription(const QOpcUaMonitoringParameters &settings);
bool removeSubscription(UA_UInt32 subscriptionId);
void sendPublishRequest();
void modifyPublishRequests();
- void handleSubscriptionTimeout(QOpen62541Subscription *sub, QVector<QPair<uintptr_t, QOpcUa::NodeAttribute>> items);
+ void handleSubscriptionTimeout(QOpen62541Subscription *sub, QVector<QPair<quint64, QOpcUa::NodeAttribute>> items);
void cleanupSubscriptions();
public:
@@ -80,13 +92,17 @@ public:
bool m_useStateCallback;
private:
- QOpen62541Subscription *getSubscriptionForItem(uintptr_t handle, QOpcUa::NodeAttribute attr);
+ QOpen62541Subscription *getSubscriptionForItem(quint64 handle, QOpcUa::NodeAttribute attr);
+ QOpcUa::QApplicationDescription convertApplicationDescription(UA_ApplicationDescription &desc);
+
+ UA_ExtensionObject assembleNodeAttributes(const QOpcUaNodeCreationAttributes &nodeAttributes, QOpcUa::NodeClass nodeClass);
+ UA_UInt32 *copyArrayDimensions(const QVector<quint32> &arrayDimensions, size_t *outputSize);
QTimer m_subscriptionTimer;
QHash<quint32, QOpen62541Subscription *> m_subscriptions;
- QHash<uintptr_t, QHash<QOpcUa::NodeAttribute, QOpen62541Subscription *>> m_attributeMapping; // Handle -> Attribute -> Subscription
+ QHash<quint64, QHash<QOpcUa::NodeAttribute, QOpen62541Subscription *>> m_attributeMapping; // Handle -> Attribute -> Subscription
bool m_sendPublishRequests;
diff --git a/src/plugins/opcua/open62541/qopen62541client.cpp b/src/plugins/opcua/open62541/qopen62541client.cpp
index 8b0d160..370bcee 100644
--- a/src/plugins/opcua/open62541/qopen62541client.cpp
+++ b/src/plugins/opcua/open62541/qopen62541client.cpp
@@ -42,12 +42,15 @@
#include "qopen62541valueconverter.h"
#include <private/qopcuaclient_p.h>
+#include <QtCore/qloggingcategory.h>
#include <QtCore/qstringlist.h>
#include <QtCore/qthread.h>
#include <QtCore/qurl.h>
QT_BEGIN_NAMESPACE
+Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_OPEN62541)
+
QOpen62541Client::QOpen62541Client()
: QOpcUaClientImpl()
, m_backend(new Open62541AsyncBackend(this))
@@ -82,7 +85,13 @@ QOpcUaNode *QOpen62541Client::node(const QString &nodeId)
if (UA_NodeId_isNull(&uaNodeId))
return nullptr;
- return new QOpcUaNode(new QOpen62541Node(uaNodeId, this, nodeId), m_client);
+ auto tempNode = new QOpen62541Node(uaNodeId, this, nodeId);
+ if (!tempNode->registered()) {
+ qCDebug(QT_OPCUA_PLUGINS_OPEN62541) << "Failed to register node with backend, maximum number of nodes reached.";
+ delete tempNode;
+ return nullptr;
+ }
+ return new QOpcUaNode(tempNode, m_client);
}
QString QOpen62541Client::backend() const
@@ -90,4 +99,54 @@ QString QOpen62541Client::backend() const
return QStringLiteral("open62541");
}
+bool QOpen62541Client::requestEndpoints(const QUrl &url)
+{
+ return QMetaObject::invokeMethod(m_backend, "requestEndpoints", Qt::QueuedConnection, Q_ARG(QUrl, url));
+}
+
+bool QOpen62541Client::findServers(const QUrl &url, const QStringList &localeIds, const QStringList &serverUris)
+{
+ return QMetaObject::invokeMethod(m_backend, "findServers", Qt::QueuedConnection,
+ Q_ARG(QUrl, url),
+ Q_ARG(QStringList, localeIds),
+ Q_ARG(QStringList, serverUris));
+}
+
+bool QOpen62541Client::batchRead(const QVector<QOpcUaReadItem> &nodesToRead)
+{
+ return QMetaObject::invokeMethod(m_backend, "batchRead", Qt::QueuedConnection,
+ Q_ARG(QVector<QOpcUaReadItem>, nodesToRead));
+}
+
+bool QOpen62541Client::batchWrite(const QVector<QOpcUaWriteItem> &nodesToWrite)
+{
+ return QMetaObject::invokeMethod(m_backend, "batchWrite", Qt::QueuedConnection,
+ Q_ARG(QVector<QOpcUaWriteItem>, nodesToWrite));
+}
+
+bool QOpen62541Client::addNode(const QOpcUaAddNodeItem &nodeToAdd)
+{
+ return QMetaObject::invokeMethod(m_backend, "addNode", Qt::QueuedConnection,
+ Q_ARG(QOpcUaAddNodeItem, nodeToAdd));
+}
+
+bool QOpen62541Client::deleteNode(const QString &nodeId, bool deleteTargetReferences)
+{
+ return QMetaObject::invokeMethod(m_backend, "deleteNode", Qt::QueuedConnection,
+ Q_ARG(QString, nodeId),
+ Q_ARG(bool, deleteTargetReferences));
+}
+
+bool QOpen62541Client::addReference(const QOpcUaAddReferenceItem &referenceToAdd)
+{
+ return QMetaObject::invokeMethod(m_backend, "addReference", Qt::QueuedConnection,
+ Q_ARG(QOpcUaAddReferenceItem, referenceToAdd));
+}
+
+bool QOpen62541Client::deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete)
+{
+ return QMetaObject::invokeMethod(m_backend, "deleteReference", Qt::QueuedConnection,
+ Q_ARG(QOpcUaDeleteReferenceItem, referenceToDelete));
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/opcua/open62541/qopen62541client.h b/src/plugins/opcua/open62541/qopen62541client.h
index 7aec0d9..466b60a 100644
--- a/src/plugins/opcua/open62541/qopen62541client.h
+++ b/src/plugins/opcua/open62541/qopen62541client.h
@@ -61,6 +61,19 @@ public:
QString backend() const override;
+ bool requestEndpoints(const QUrl &url) override;
+
+ bool findServers(const QUrl &url, const QStringList &localeIds, const QStringList &serverUris) override;
+
+ bool batchRead(const QVector<QOpcUaReadItem> &nodesToRead) override;
+ bool batchWrite(const QVector<QOpcUaWriteItem> &nodesToWrite) override;
+
+ bool addNode(const QOpcUaAddNodeItem &nodeToAdd) override;
+ bool deleteNode(const QString &nodeId, bool deleteTargetReferences) override;
+
+ bool addReference(const QOpcUaAddReferenceItem &referenceToAdd) override;
+ bool deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete) override;
+
private slots:
private:
diff --git a/src/plugins/opcua/open62541/qopen62541node.cpp b/src/plugins/opcua/open62541/qopen62541node.cpp
index 868c36a..a258e67 100644
--- a/src/plugins/opcua/open62541/qopen62541node.cpp
+++ b/src/plugins/opcua/open62541/qopen62541node.cpp
@@ -51,7 +51,8 @@ QOpen62541Node::QOpen62541Node(const UA_NodeId nodeId, QOpen62541Client *client,
, m_nodeIdString(nodeIdString)
, m_nodeId(nodeId)
{
- m_client->registerNode(this);
+ bool success = m_client->registerNode(this);
+ setRegistered(success);
}
QOpen62541Node::~QOpen62541Node()
@@ -71,7 +72,7 @@ bool QOpen62541Node::readAttributes(QOpcUa::NodeAttributes attr, const QString &
UA_NodeId_copy(&m_nodeId, &tempId);
return QMetaObject::invokeMethod(m_client->m_backend, "readAttributes",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(UA_NodeId, tempId),
Q_ARG(QOpcUa::NodeAttributes, attr),
Q_ARG(QString, indexRange));
@@ -86,7 +87,7 @@ bool QOpen62541Node::enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaM
UA_NodeId_copy(&m_nodeId, &tempId);
return QMetaObject::invokeMethod(m_client->m_backend, "enableMonitoring",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(UA_NodeId, tempId),
Q_ARG(QOpcUa::NodeAttributes, attr),
Q_ARG(QOpcUaMonitoringParameters, settings));
@@ -99,7 +100,7 @@ bool QOpen62541Node::disableMonitoring(QOpcUa::NodeAttributes attr)
return QMetaObject::invokeMethod(m_client->m_backend, "disableMonitoring",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(QOpcUa::NodeAttributes, attr));
}
@@ -110,7 +111,7 @@ bool QOpen62541Node::modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitori
return QMetaObject::invokeMethod(m_client->m_backend, "modifyMonitoring",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(QOpcUa::NodeAttribute, attr),
Q_ARG(QOpcUaMonitoringParameters::Parameter, item),
Q_ARG(QVariant, value));
@@ -121,19 +122,18 @@ QString QOpen62541Node::nodeId() const
return m_nodeIdString;
}
-bool QOpen62541Node::browseChildren(QOpcUa::ReferenceTypeId referenceType, QOpcUa::NodeClasses nodeClassMask)
+bool QOpen62541Node::browse(const QOpcUaBrowseRequest &request)
{
if (!m_client)
return false;
UA_NodeId tempId;
UA_NodeId_copy(&m_nodeId, &tempId);
- return QMetaObject::invokeMethod(m_client->m_backend, "browseChildren",
+ return QMetaObject::invokeMethod(m_client->m_backend, "browse",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(UA_NodeId, tempId),
- Q_ARG(QOpcUa::ReferenceTypeId, referenceType),
- Q_ARG(QOpcUa::NodeClasses, nodeClassMask));
+ Q_ARG(QOpcUaBrowseRequest, request));
}
bool QOpen62541Node::writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant &value, QOpcUa::Types type, const QString &indexRange)
@@ -145,7 +145,7 @@ bool QOpen62541Node::writeAttribute(QOpcUa::NodeAttribute attribute, const QVari
UA_NodeId_copy(&m_nodeId, &tempId);
return QMetaObject::invokeMethod(m_client->m_backend, "writeAttribute",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(UA_NodeId, tempId),
Q_ARG(QOpcUa::NodeAttribute, attribute),
Q_ARG(QVariant, value),
@@ -162,7 +162,7 @@ bool QOpen62541Node::writeAttributes(const QOpcUaNode::AttributeMap &toWrite, QO
UA_NodeId_copy(&m_nodeId, &tempId);
return QMetaObject::invokeMethod(m_client->m_backend, "writeAttributes",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(UA_NodeId, tempId),
Q_ARG(QOpcUaNode::AttributeMap, toWrite),
Q_ARG(QOpcUa::Types, valueAttributeType));
@@ -177,10 +177,24 @@ bool QOpen62541Node::callMethod(const QString &methodNodeId, const QVector<QOpcU
UA_NodeId_copy(&m_nodeId, &obj);
return QMetaObject::invokeMethod(m_client->m_backend, "callMethod",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(UA_NodeId, obj),
Q_ARG(UA_NodeId, Open62541Utils::nodeIdFromQString(methodNodeId)),
Q_ARG(QVector<QOpcUa::TypedVariant>, args));
}
+bool QOpen62541Node::resolveBrowsePath(const QVector<QOpcUa::QRelativePathElement> &path)
+{
+ if (!m_client)
+ return false;
+
+ UA_NodeId start;
+ UA_NodeId_copy(&m_nodeId, &start);
+
+ return QMetaObject::invokeMethod(m_client->m_backend, "resolveBrowsePath", Qt::QueuedConnection,
+ Q_ARG(quint64, handle()),
+ Q_ARG(UA_NodeId, start),
+ Q_ARG(QVector<QOpcUa::QRelativePathElement>, path));
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/opcua/open62541/qopen62541node.h b/src/plugins/opcua/open62541/qopen62541node.h
index 42659c4..293b075 100644
--- a/src/plugins/opcua/open62541/qopen62541node.h
+++ b/src/plugins/opcua/open62541/qopen62541node.h
@@ -54,13 +54,15 @@ public:
bool enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings) override;
bool disableMonitoring(QOpcUa::NodeAttributes attr) override;
bool modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, const QVariant &value) override;
- bool browseChildren(QOpcUa::ReferenceTypeId referenceType, QOpcUa::NodeClasses nodeClassMask) override;
+ bool browse(const QOpcUaBrowseRequest &request);
QString nodeId() const override;
bool writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant &value, QOpcUa::Types type, const QString &indexRange) override;
bool writeAttributes(const QOpcUaNode::AttributeMap &toWrite, QOpcUa::Types valueAttributeType) override;
bool callMethod(const QString &methodNodeId, const QVector<QOpcUa::TypedVariant> &args) override;
+ bool resolveBrowsePath(const QVector<QOpcUa::QRelativePathElement> &path) override;
+
private:
QPointer<QOpen62541Client> m_client;
QString m_nodeIdString;
diff --git a/src/plugins/opcua/open62541/qopen62541subscription.cpp b/src/plugins/opcua/open62541/qopen62541subscription.cpp
index 72e96fb..cf8ac3f 100644
--- a/src/plugins/opcua/open62541/qopen62541subscription.cpp
+++ b/src/plugins/opcua/open62541/qopen62541subscription.cpp
@@ -38,7 +38,9 @@
#include "qopen62541client.h"
#include "qopen62541node.h"
#include "qopen62541subscription.h"
+#include "qopen62541utils.h"
#include "qopen62541valueconverter.h"
+#include "qopen62541utils.h"
#include <private/qopcuanode_p.h>
#include <QtCore/qloggingcategory.h>
@@ -68,13 +70,28 @@ static void stateChangeHandler(UA_Client *client, UA_UInt32 subId, void *subCont
sub->sendTimeoutNotification();
}
+static void eventHandler(UA_Client *client, UA_UInt32 subId, void *subContext, UA_UInt32 monId, void *monContext,
+ size_t numFields, UA_Variant *eventFields)
+{
+ Q_UNUSED(client);
+ Q_UNUSED(subId);
+ Q_UNUSED(subContext);
+
+ QOpen62541Subscription *subscription = static_cast<QOpen62541Subscription *>(monContext);
+
+ QVariantList list;
+ for (size_t i = 0; i < numFields; ++i)
+ list.append(QOpen62541ValueConverter::toQVariant(eventFields[i]));
+ subscription->eventReceived(monId, list);
+}
+
QOpen62541Subscription::QOpen62541Subscription(Open62541AsyncBackend *backend, const QOpcUaMonitoringParameters &settings)
: m_backend(backend)
, m_interval(settings.publishingInterval())
, m_subscriptionId(0)
, m_lifetimeCount(settings.lifetimeCount() ? settings.lifetimeCount() : UA_SubscriptionSettings_default.requestedLifetimeCount)
, m_maxKeepaliveCount(settings.maxKeepAliveCount() ? settings.maxKeepAliveCount() : UA_SubscriptionSettings_default.requestedMaxKeepAliveCount)
- , m_shared(settings.shared())
+ , m_shared(settings.subscriptionType())
, m_priority(settings.priority())
, m_maxNotificationsPerPublish(settings.maxNotificationsPerPublish())
, m_clientHandle(0)
@@ -95,7 +112,7 @@ UA_UInt32 QOpen62541Subscription::createOnServer()
req.requestedMaxKeepAliveCount = m_maxKeepaliveCount;
req.priority = m_priority;
req.maxNotificationsPerPublish = m_maxNotificationsPerPublish;
- UA_CreateSubscriptionResponse res = UA_Client_Subscriptions_create(m_backend->m_uaclient, req, this, stateChangeHandler, NULL);
+ UA_CreateSubscriptionResponse res = UA_Client_Subscriptions_create(m_backend->m_uaclient, req, this, stateChangeHandler, nullptr);
if (res.responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not create subscription with interval" << m_interval << UA_StatusCode_name(res.responseHeader.serviceResult);
@@ -131,14 +148,14 @@ bool QOpen62541Subscription::removeOnServer()
return (res == UA_STATUSCODE_GOOD) ? true : false;
}
-void QOpen62541Subscription::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value)
+void QOpen62541Subscription::modifyMonitoring(quint64 handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value)
{
QOpcUaMonitoringParameters p;
p.setStatusCode(QOpcUa::UaStatusCode::BadNotImplemented);
MonitoredItem *monItem = getItemForAttribute(handle, attr);
if (!monItem) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify parameter for" << handle << ", there are no monitored items";
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify parameter" << item << "there are no monitored items";
p.setStatusCode(QOpcUa::UaStatusCode::BadAttributeIdInvalid);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
return;
@@ -157,11 +174,13 @@ void QOpen62541Subscription::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttr
UA_SetPublishingModeRequest req;
UA_SetPublishingModeRequest_init(&req);
+ UaDeleter<UA_SetPublishingModeRequest> requestDeleter(&req, UA_SetPublishingModeRequest_deleteMembers);
req.publishingEnabled = value.toBool();
req.subscriptionIdsSize = 1;
req.subscriptionIds = UA_UInt32_new();
*req.subscriptionIds = m_subscriptionId;
UA_SetPublishingModeResponse res = UA_Client_Subscriptions_setPublishingMode(m_backend->m_uaclient, req);
+ UaDeleter<UA_SetPublishingModeResponse> responseDeleter(&res, UA_SetPublishingModeResponse_deleteMembers);
if (res.responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Failed to set publishing mode:" << res.responseHeader.serviceResult;
@@ -176,8 +195,6 @@ void QOpen62541Subscription::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttr
p.setStatusCode(static_cast<QOpcUa::UaStatusCode>(res.results[0]));
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
- UA_SetPublishingModeRequest_deleteMembers(&req);
- UA_SetPublishingModeResponse_deleteMembers(&res);
return;
}
@@ -192,12 +209,14 @@ void QOpen62541Subscription::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttr
UA_SetMonitoringModeRequest req;
UA_SetMonitoringModeRequest_init(&req);
+ UaDeleter<UA_SetMonitoringModeRequest> requestDeleter(&req, UA_SetMonitoringModeRequest_deleteMembers);
req.monitoringMode = static_cast<UA_MonitoringMode>(value.value<QOpcUaMonitoringParameters::MonitoringMode>());
req.monitoredItemIdsSize = 1;
req.monitoredItemIds = UA_UInt32_new();
*req.monitoredItemIds = monItem->monitoredItemId;
req.subscriptionId = m_subscriptionId;
UA_SetMonitoringModeResponse res = UA_Client_MonitoredItems_setMonitoringMode(m_backend->m_uaclient, req);
+ UaDeleter<UA_SetMonitoringModeResponse> responseDeleter(&res, UA_SetMonitoringModeResponse_deleteMembers);
if (res.responseHeader.serviceResult != UA_STATUSCODE_GOOD) {
qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Failed to set monitoring mode:" << res.responseHeader.serviceResult;
@@ -211,9 +230,6 @@ void QOpen62541Subscription::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttr
p.setStatusCode(static_cast<QOpcUa::UaStatusCode>(res.results[0]));
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
-
- UA_SetMonitoringModeRequest_deleteMembers(&req);
- UA_SetMonitoringModeResponse_deleteMembers(&res);
return;
}
@@ -227,28 +243,45 @@ void QOpen62541Subscription::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttr
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
}
-bool QOpen62541Subscription::addAttributeMonitoredItem(uintptr_t handle, QOpcUa::NodeAttribute attr, const UA_NodeId &id, QOpcUaMonitoringParameters settings)
+bool QOpen62541Subscription::addAttributeMonitoredItem(quint64 handle, QOpcUa::NodeAttribute attr, const UA_NodeId &id, QOpcUaMonitoringParameters settings)
{
UA_MonitoredItemCreateRequest req;
UA_MonitoredItemCreateRequest_init(&req);
+ UaDeleter<UA_MonitoredItemCreateRequest> requestDeleter(&req, UA_MonitoredItemCreateRequest_deleteMembers);
req.itemToMonitor.attributeId = QOpen62541ValueConverter::toUaAttributeId(attr);
UA_NodeId_copy(&id, &(req.itemToMonitor.nodeId));
if (settings.indexRange().size())
- req.itemToMonitor.indexRange = UA_STRING_ALLOC(settings.indexRange().toUtf8().data());
+ QOpen62541ValueConverter::scalarFromQt<UA_String, QString>(settings.indexRange(), &req.itemToMonitor.indexRange);
req.monitoringMode = static_cast<UA_MonitoringMode>(settings.monitoringMode());
req.requestedParameters.samplingInterval = qFuzzyCompare(settings.samplingInterval(), 0.0) ? m_interval : settings.samplingInterval();
req.requestedParameters.queueSize = settings.queueSize() == 0 ? 1 : settings.queueSize();
req.requestedParameters.discardOldest = settings.discardOldest();
req.requestedParameters.clientHandle = ++m_clientHandle;
- if (settings.filter().type() == QVariant::UserType && settings.filter().userType() == QMetaType::type("QOpcUaMonitoringParameters::DataChangeFilter"))
- req.requestedParameters.filter = createFilter(settings.filter());
- UA_MonitoredItemCreateResult res = UA_Client_MonitoredItems_createDataChange(m_backend->m_uaclient, m_subscriptionId, UA_TIMESTAMPSTORETURN_BOTH, req, this, monitoredValueHandler, nullptr);
+ if (settings.filter().isValid()) {
+ UA_ExtensionObject filter = createFilter(settings.filter());
+ if (filter.content.decoded.data)
+ req.requestedParameters.filter = filter;
+ else {
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not create monitored item, filter creation failed";
+ QOpcUaMonitoringParameters s;
+ s.setStatusCode(QOpcUa::UaStatusCode::BadInternalError);
+ emit m_backend->monitoringEnableDisable(handle, attr, true, s);
+ return false;
+ }
+ }
- UA_MonitoredItemCreateRequest_deleteMembers(&req);
+ UA_MonitoredItemCreateResult res;
+ UaDeleter<UA_MonitoredItemCreateResult> resultDeleter(&res, UA_MonitoredItemCreateResult_deleteMembers);
+
+ if (attr == QOpcUa::NodeAttribute::EventNotifier && settings.filter().canConvert<QOpcUaMonitoringParameters::EventFilter>())
+ res = UA_Client_MonitoredItems_createEvent(m_backend->m_uaclient, m_subscriptionId,
+ UA_TIMESTAMPSTORETURN_BOTH, req, this, eventHandler, nullptr);
+ else
+ res = UA_Client_MonitoredItems_createDataChange(m_backend->m_uaclient, m_subscriptionId, UA_TIMESTAMPSTORETURN_BOTH, req, this, monitoredValueHandler, nullptr);
if (res.statusCode != UA_STATUSCODE_GOOD) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not add monitored item to subscription" << m_subscriptionId << ":" << UA_StatusCode_name(res.statusCode);
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not add monitored item for" << attr << "of node" << Open62541Utils::nodeIdToQString(id) << ":" << UA_StatusCode_name(res.statusCode);
QOpcUaMonitoringParameters s;
s.setStatusCode(static_cast<QOpcUa::UaStatusCode>(res.statusCode));
emit m_backend->monitoringEnableDisable(handle, attr, true, s);
@@ -267,16 +300,22 @@ bool QOpen62541Subscription::addAttributeMonitoredItem(uintptr_t handle, QOpcUa:
s.setStatusCode(QOpcUa::UaStatusCode::Good);
s.setSamplingInterval(res.revisedSamplingInterval);
s.setQueueSize(res.revisedQueueSize);
+ s.setMonitoredItemId(res.monitoredItemId);
temp->parameters = s;
temp->clientHandle = m_clientHandle;
- s.setFilter(QVariant());
+ if (res.filterResult.encoding >= UA_EXTENSIONOBJECT_DECODED &&
+ res.filterResult.content.decoded.type == &UA_TYPES[UA_TYPES_EVENTFILTERRESULT])
+ s.setFilterResult(convertEventFilterResult(&res.filterResult));
+ else
+ s.clearFilterResult();
+
emit m_backend->monitoringEnableDisable(handle, attr, true, s);
return true;
}
-bool QOpen62541Subscription::removeAttributeMonitoredItem(uintptr_t handle, QOpcUa::NodeAttribute attr)
+bool QOpen62541Subscription::removeAttributeMonitoredItem(quint64 handle, QOpcUa::NodeAttribute attr)
{
MonitoredItem *item = getItemForAttribute(handle, attr);
if (!item) {
@@ -314,24 +353,24 @@ void QOpen62541Subscription::monitoredValueUpdated(UA_UInt32 monId, UA_DataValue
QOpcUaReadResult res;
if (!value || value == UA_EMPTY_ARRAY_SENTINEL) {
- res.statusCode = QOpcUa::UaStatusCode::Good;
- emit m_backend->attributeUpdated(item.value()->handle, res);
+ res.setStatusCode(QOpcUa::UaStatusCode::Good);
+ emit m_backend->dataChangeOccurred(item.value()->handle, res);
return;
}
- res.value = QOpen62541ValueConverter::toQVariant(value->value);
- res.attributeId = item.value()->attr;
+ res.setValue(QOpen62541ValueConverter::toQVariant(value->value));
+ res.setAttribute(item.value()->attr);
if (value->hasServerTimestamp)
- res.serverTimestamp = QOpen62541ValueConverter::uaDateTimeToQDateTime(value->serverTimestamp);
+ res.setServerTimestamp(QOpen62541ValueConverter::scalarToQt<QDateTime, UA_DateTime>(&value->serverTimestamp));
if (value->hasSourceTimestamp)
- res.sourceTimestamp = QOpen62541ValueConverter::uaDateTimeToQDateTime(value->sourceTimestamp);
- res.statusCode = QOpcUa::UaStatusCode::Good;
- emit m_backend->attributeUpdated(item.value()->handle, res);
+ res.setSourceTimestamp(QOpen62541ValueConverter::scalarToQt<QDateTime, UA_DateTime>(&value->sourceTimestamp));
+ res.setStatusCode(QOpcUa::UaStatusCode::Good);
+ emit m_backend->dataChangeOccurred(item.value()->handle, res);
}
void QOpen62541Subscription::sendTimeoutNotification()
{
- QVector<QPair<uintptr_t, QOpcUa::NodeAttribute>> items;
+ QVector<QPair<quint64, QOpcUa::NodeAttribute>> items;
for (auto it : qAsConst(m_handleToItemMapping)) {
for (auto item : it) {
items.push_back({item->handle, item->attr});
@@ -341,6 +380,14 @@ void QOpen62541Subscription::sendTimeoutNotification()
m_timeout = true;
}
+void QOpen62541Subscription::eventReceived(UA_UInt32 monId, QVariantList list)
+{
+ auto item = m_itemIdToItemMapping.constFind(monId);
+ if (item == m_itemIdToItemMapping.constEnd())
+ return;
+ emit m_backend->eventOccurred(item.value()->handle, list);
+}
+
double QOpen62541Subscription::interval() const
{
return m_interval;
@@ -361,7 +408,7 @@ QOpcUaMonitoringParameters::SubscriptionType QOpen62541Subscription::shared() co
return m_shared;
}
-QOpen62541Subscription::MonitoredItem *QOpen62541Subscription::getItemForAttribute(uintptr_t handle, QOpcUa::NodeAttribute attr)
+QOpen62541Subscription::MonitoredItem *QOpen62541Subscription::getItemForAttribute(quint64 handle, QOpcUa::NodeAttribute attr)
{
auto nodeEntry = m_handleToItemMapping.constFind(handle);
@@ -380,15 +427,13 @@ UA_ExtensionObject QOpen62541Subscription::createFilter(const QVariant &filterDa
UA_ExtensionObject obj;
UA_ExtensionObject_init(&obj);
- if (filterData.type() == QVariant::UserType && filterData.userType() == QMetaType::type("QOpcUaMonitoringParameters::DataChangeFilter")) {
- QOpcUaMonitoringParameters::DataChangeFilter temp = filterData.value<QOpcUaMonitoringParameters::DataChangeFilter>();
- UA_DataChangeFilter *filter = UA_DataChangeFilter_new();
- filter->deadbandType = static_cast<UA_UInt32>(temp.deadbandType);
- filter->deadbandValue = temp.deadbandValue;
- filter->trigger = static_cast<UA_DataChangeTrigger>(temp.trigger);
- obj.encoding = UA_EXTENSIONOBJECT_DECODED;
- obj.content.decoded.type = &UA_TYPES[UA_TYPES_DATACHANGEFILTER];
- obj.content.decoded.data = filter;
+ if (filterData.canConvert<QOpcUaMonitoringParameters::DataChangeFilter>()) {
+ createDataChangeFilter(filterData.value<QOpcUaMonitoringParameters::DataChangeFilter>(), &obj);
+ return obj;
+ }
+
+ if (filterData.canConvert<QOpcUaMonitoringParameters::EventFilter>()) {
+ createEventFilter(filterData.value<QOpcUaMonitoringParameters::EventFilter>(), &obj);
return obj;
}
@@ -398,7 +443,175 @@ UA_ExtensionObject QOpen62541Subscription::createFilter(const QVariant &filterDa
return obj;
}
-bool QOpen62541Subscription::modifySubscriptionParameters(uintptr_t handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value)
+void QOpen62541Subscription::createDataChangeFilter(const QOpcUaMonitoringParameters::DataChangeFilter &filter, UA_ExtensionObject *out)
+{
+ UA_DataChangeFilter *uaFilter = UA_DataChangeFilter_new();
+ uaFilter->deadbandType = static_cast<UA_UInt32>(filter.deadbandType());
+ uaFilter->deadbandValue = filter.deadbandValue();
+ uaFilter->trigger = static_cast<UA_DataChangeTrigger>(filter.trigger());
+ out->encoding = UA_EXTENSIONOBJECT_DECODED;
+ out->content.decoded.type = &UA_TYPES[UA_TYPES_DATACHANGEFILTER];
+ out->content.decoded.data = uaFilter;
+}
+
+void QOpen62541Subscription::createEventFilter(const QOpcUaMonitoringParameters::EventFilter &filter, UA_ExtensionObject *out)
+{
+ UA_EventFilter *uaFilter = UA_EventFilter_new();
+ UA_EventFilter_init(uaFilter);
+ out->encoding = UA_EXTENSIONOBJECT_DECODED;
+ out->content.decoded.data = uaFilter;
+ out->content.decoded.type = &UA_TYPES[UA_TYPES_EVENTFILTER];
+
+ convertSelectClause(filter, &uaFilter->selectClauses, &uaFilter->selectClausesSize);
+ if (!convertWhereClause(filter, &uaFilter->whereClause))
+ UA_ExtensionObject_deleteMembers(out);
+}
+
+bool QOpen62541Subscription::convertSelectClause(const QOpcUaMonitoringParameters::EventFilter &filter,
+ UA_SimpleAttributeOperand **selectClauses, size_t *size)
+{
+ if (!filter.selectClauses().isEmpty()) {
+ UA_SimpleAttributeOperand *select = static_cast<UA_SimpleAttributeOperand *>(
+ UA_Array_new(filter.selectClauses().size(), &UA_TYPES[UA_TYPES_SIMPLEATTRIBUTEOPERAND]));
+
+ for (int i = 0; i < filter.selectClauses().size(); ++i) {
+ UA_SimpleAttributeOperand_init(&select[i]);
+ if (!filter.selectClauses().at(i).typeId().isEmpty())
+ select[i].typeDefinitionId = Open62541Utils::nodeIdFromQString(filter.selectClauses().at(i).typeId());
+ select[i].browsePathSize = filter.selectClauses().at(i).browsePath().size();
+ if (select[i].browsePathSize) {
+ select[i].browsePath = static_cast<UA_QualifiedName *>(
+ UA_Array_new(select[i].browsePathSize, &UA_TYPES[UA_TYPES_QUALIFIEDNAME]));
+ for (size_t j = 0; j < select[i].browsePathSize; ++j)
+ QOpen62541ValueConverter::scalarFromQt<UA_QualifiedName, QOpcUa::QQualifiedName>(
+ filter.selectClauses().at(i).browsePath().at(j), &select[i].browsePath[j]);
+ }
+ QOpen62541ValueConverter::scalarFromQt<UA_String, QString>(filter.selectClauses().at(i).indexRange(),
+ &select[i].indexRange);
+ select[i].attributeId = QOpen62541ValueConverter::toUaAttributeId(filter.selectClauses().at(i).attributeId());
+ }
+
+ *selectClauses = select;
+ *size = filter.selectClauses().size();
+
+ return true;
+ }
+
+ *selectClauses = nullptr;
+ *size = 0;
+ return true;
+}
+
+bool QOpen62541Subscription::convertWhereClause(const QOpcUaMonitoringParameters::EventFilter &filter, UA_ContentFilter *result)
+{
+ if (!filter.whereClause().isEmpty()) {
+ result->elementsSize = filter.whereClause().size();
+ result->elements = static_cast<UA_ContentFilterElement *>(
+ UA_Array_new(filter.whereClause().size(), &UA_TYPES[UA_TYPES_CONTENTFILTERELEMENT]));
+ for (int i = 0; i < filter.whereClause().size(); ++i) {
+ UA_ContentFilterElement_init(&result->elements[i]);
+ result->elements[i].filterOperator = static_cast<UA_FilterOperator>(filter.whereClause().at(i).filterOperator());
+ result->elements[i].filterOperandsSize = filter.whereClause().at(i).filterOperands().size();
+ result->elements[i].filterOperands = static_cast<UA_ExtensionObject *>(
+ UA_Array_new(filter.whereClause().at(i).filterOperands().size(), &UA_TYPES[UA_TYPES_EXTENSIONOBJECT]));
+ for (int j = 0; j < filter.whereClause().at(i).filterOperands().size(); ++j) {
+ UA_ExtensionObject_init(&result->elements[i].filterOperands[j]);
+ result->elements[i].filterOperands[j].encoding = UA_EXTENSIONOBJECT_DECODED;
+ const QVariant &currentOperand = filter.whereClause().at(i).filterOperands().at(j);
+ if (currentOperand.canConvert<QOpcUa::QElementOperand>()) {
+ UA_ElementOperand *op = UA_ElementOperand_new();
+ UA_ElementOperand_init(op);
+ op->index = currentOperand.value<QOpcUa::QElementOperand>().index();
+ result->elements[i].filterOperands[j].content.decoded.data = op;
+ result->elements[i].filterOperands[j].content.decoded.type = &UA_TYPES[UA_TYPES_ELEMENTOPERAND];
+ } else if (currentOperand.canConvert<QOpcUa::QLiteralOperand>()) {
+ UA_LiteralOperand *op = UA_LiteralOperand_new();
+ UA_LiteralOperand_init(op);
+ QOpcUa::QLiteralOperand litOp = currentOperand.value<QOpcUa::QLiteralOperand>();
+ op->value = QOpen62541ValueConverter::toOpen62541Variant(litOp.value(), litOp.type());
+ result->elements[i].filterOperands[j].content.decoded.data = op;
+ result->elements[i].filterOperands[j].content.decoded.type = &UA_TYPES[UA_TYPES_LITERALOPERAND];
+ } else if (currentOperand.canConvert<QOpcUa::QSimpleAttributeOperand>()) {
+ UA_SimpleAttributeOperand *op = UA_SimpleAttributeOperand_new();
+ UA_SimpleAttributeOperand_init(op);
+ QOpcUa::QSimpleAttributeOperand operand = currentOperand.value<QOpcUa::QSimpleAttributeOperand>();
+ op->attributeId = QOpen62541ValueConverter::toUaAttributeId(operand.attributeId());
+ QOpen62541ValueConverter::scalarFromQt<UA_String, QString>(operand.indexRange(), &op->indexRange);
+ if (!operand.typeId().isEmpty())
+ op->typeDefinitionId = Open62541Utils::nodeIdFromQString(operand.typeId());
+ op->browsePathSize = operand.browsePath().size();
+ op->browsePath = static_cast<UA_QualifiedName *>(UA_Array_new(operand.browsePath().size(),
+ &UA_TYPES[UA_TYPES_QUALIFIEDNAME]));
+ for (int k = 0; k < operand.browsePath().size(); ++k)
+ QOpen62541ValueConverter::scalarFromQt<UA_QualifiedName, QOpcUa::QQualifiedName>(
+ operand.browsePath().at(k), &op->browsePath[k]);
+ result->elements[i].filterOperands[j].content.decoded.data = op;
+ result->elements[i].filterOperands[j].content.decoded.type = &UA_TYPES[UA_TYPES_SIMPLEATTRIBUTEOPERAND];
+ } else if (currentOperand.canConvert<QOpcUa::QAttributeOperand>()) {
+ UA_AttributeOperand *op = UA_AttributeOperand_new();
+ UA_AttributeOperand_init(op);
+ QOpcUa::QAttributeOperand operand = currentOperand.value<QOpcUa::QAttributeOperand>();
+ op->attributeId = QOpen62541ValueConverter::toUaAttributeId(operand.attributeId());
+ QOpen62541ValueConverter::scalarFromQt<UA_String, QString>(operand.indexRange(), &op->indexRange);
+ op->alias = UA_STRING_ALLOC(operand.alias().toUtf8().constData());
+ if (!operand.nodeId().isEmpty())
+ op->nodeId = Open62541Utils::nodeIdFromQString(operand.nodeId());
+ op->browsePath.elementsSize = operand.browsePath().size();
+ op->browsePath.elements = static_cast<UA_RelativePathElement *>(
+ UA_Array_new(operand.browsePathRef().size(), &UA_TYPES[UA_TYPES_RELATIVEPATHELEMENT]));
+
+ for (int k = 0; k < operand.browsePathRef().size(); ++k) {
+ UA_RelativePathElement_init(&op->browsePath.elements[k]);
+ op->browsePath.elements[k].includeSubtypes = operand.browsePath().at(k).includeSubtypes();
+ op->browsePath.elements[k].isInverse = operand.browsePath().at(k).isInverse();
+ if (!operand.browsePath().at(k).referenceTypeId().isEmpty())
+ op->browsePath.elements[k].referenceTypeId = Open62541Utils::nodeIdFromQString(
+ operand.browsePath().at(k).referenceTypeId());
+ QOpen62541ValueConverter::scalarFromQt<UA_QualifiedName, QOpcUa::QQualifiedName>(
+ operand.browsePath().at(k).targetName(), &op->browsePath.elements[k].targetName);
+ }
+
+ result->elements[i].filterOperands[j].content.decoded.data = op;
+ result->elements[i].filterOperands[j].content.decoded.type = &UA_TYPES[UA_TYPES_ATTRIBUTEOPERAND];
+ } else {
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Unknown filter operand type for event filter" <<
+ filter.whereClause().at(i).filterOperands().at(j).typeName();
+ UA_ContentFilter_deleteMembers(result);
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+}
+
+QOpcUa::QEventFilterResult QOpen62541Subscription::convertEventFilterResult(UA_ExtensionObject *obj)
+{
+ QOpcUa::QEventFilterResult result;
+
+ if (!obj)
+ return result;
+
+ if (obj->encoding == UA_EXTENSIONOBJECT_DECODED && obj->content.decoded.type == &UA_TYPES[UA_TYPES_EVENTFILTERRESULT]) {
+ UA_EventFilterResult *filterResult = static_cast<UA_EventFilterResult *>(obj->content.decoded.data);
+
+ for (size_t i = 0; i < filterResult->selectClauseResultsSize; ++i)
+ result.selectClauseResultsRef().append(static_cast<QOpcUa::UaStatusCode>(filterResult->selectClauseResults[i]));
+
+ for (size_t i = 0; i < filterResult->whereClauseResult.elementResultsSize; ++i) {
+ QOpcUa::QContentFilterElementResult temp;
+ temp.setStatusCode(static_cast<QOpcUa::UaStatusCode>(filterResult->whereClauseResult.elementResults[i].statusCode));
+ for (size_t j = 0; j < filterResult->whereClauseResult.elementResults[i].operandStatusCodesSize; ++j)
+ temp.operandStatusCodesRef().append(static_cast<QOpcUa::UaStatusCode>(
+ filterResult->whereClauseResult.elementResults[i].operandStatusCodes[j]));
+ result.whereClauseResultsRef().append(temp);
+ }
+ }
+
+ return result;
+}
+
+bool QOpen62541Subscription::modifySubscriptionParameters(quint64 handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value)
{
QOpcUaMonitoringParameters p;
@@ -417,7 +630,7 @@ bool QOpen62541Subscription::modifySubscriptionParameters(uintptr_t handle, QOpc
bool ok;
req.requestedPublishingInterval = value.toDouble(&ok);
if (!ok) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify PublishingInterval for" << handle << ", value is not a double";
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify PublishingInterval, value is not a double";
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
return true;
@@ -428,7 +641,7 @@ bool QOpen62541Subscription::modifySubscriptionParameters(uintptr_t handle, QOpc
bool ok;
req.requestedLifetimeCount = value.toUInt(&ok);
if (!ok) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify LifetimeCount for" << handle << ", value is not an integer";
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify LifetimeCount, value is not an integer";
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
return true;
@@ -439,7 +652,7 @@ bool QOpen62541Subscription::modifySubscriptionParameters(uintptr_t handle, QOpc
bool ok;
req.requestedMaxKeepAliveCount = value.toUInt(&ok);
if (!ok) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify MaxKeepAliveCount for" << handle << ", value is not an integer";
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify MaxKeepAliveCount, value is not an integer";
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
return true;
@@ -450,7 +663,7 @@ bool QOpen62541Subscription::modifySubscriptionParameters(uintptr_t handle, QOpc
bool ok;
req.priority = value.toUInt(&ok);
if (!ok) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify Priority for" << handle << ", value is not an integer";
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify Priority, value is not an integer";
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
return true;
@@ -461,7 +674,7 @@ bool QOpen62541Subscription::modifySubscriptionParameters(uintptr_t handle, QOpc
bool ok;
req.maxNotificationsPerPublish = value.toUInt(&ok);
if (!ok) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify MaxNotificationsPerPublish for" << handle << ", value is not an integer";
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify MaxNotificationsPerPublish, value is not an integer";
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
return true;
@@ -511,13 +724,14 @@ bool QOpen62541Subscription::modifySubscriptionParameters(uintptr_t handle, QOpc
return false;
}
-bool QOpen62541Subscription::modifyMonitoredItemParameters(uintptr_t handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value)
+bool QOpen62541Subscription::modifyMonitoredItemParameters(quint64 handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value)
{
MonitoredItem *monItem = getItemForAttribute(handle, attr);
QOpcUaMonitoringParameters p = monItem->parameters;
UA_ModifyMonitoredItemsRequest req;
UA_ModifyMonitoredItemsRequest_init(&req);
+ UaDeleter<UA_ModifyMonitoredItemsRequest> requestDeleter(&req, UA_ModifyMonitoredItemsRequest_deleteMembers);
req.subscriptionId = m_subscriptionId;
req.itemsToModifySize = 1;
req.itemsToModify = UA_MonitoredItemModifyRequest_new();
@@ -528,18 +742,15 @@ bool QOpen62541Subscription::modifyMonitoredItemParameters(uintptr_t handle, QOp
req.itemsToModify->requestedParameters.samplingInterval = monItem->parameters.samplingInterval();
req.itemsToModify->monitoredItemId = monItem->monitoredItemId;
req.itemsToModify->requestedParameters.clientHandle = monItem->clientHandle;
- if (item != QOpcUaMonitoringParameters::Parameter::Filter)
- req.itemsToModify->requestedParameters.filter = createFilter(monItem->parameters.filter());
bool match = true;
switch (item) {
case QOpcUaMonitoringParameters::Parameter::DiscardOldest: {
if (value.type() != QVariant::Bool) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify DiscardOldest for" << handle << ", value is not a bool";
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify DiscardOldest, value is not a bool";
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
- UA_ModifyMonitoredItemsRequest_deleteMembers(&req);
return true;
}
req.itemsToModify->requestedParameters.discardOldest = value.toBool();
@@ -547,10 +758,9 @@ bool QOpen62541Subscription::modifyMonitoredItemParameters(uintptr_t handle, QOp
}
case QOpcUaMonitoringParameters::Parameter::QueueSize: {
if (value.type() != QVariant::UInt) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify QueueSize for" << handle << ", value is not an integer";
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify QueueSize, value is not an integer";
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
- UA_ModifyMonitoredItemsRequest_deleteMembers(&req);
return true;
}
req.itemsToModify->requestedParameters.queueSize = value.toUInt();
@@ -558,17 +768,24 @@ bool QOpen62541Subscription::modifyMonitoredItemParameters(uintptr_t handle, QOp
}
case QOpcUaMonitoringParameters::Parameter::SamplingInterval: {
if (value.type() != QVariant::Double) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify SamplingInterval for" << handle << ", value is not a double";
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify SamplingInterval, value is not a double";
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
- UA_ModifyMonitoredItemsRequest_deleteMembers(&req);
return true;
}
req.itemsToModify->requestedParameters.samplingInterval = value.toDouble();
break;
}
case QOpcUaMonitoringParameters::Parameter::Filter: {
- req.itemsToModify->requestedParameters.filter = createFilter(value);
+ UA_ExtensionObject filter = createFilter(value);
+ if (filter.content.decoded.data)
+ req.itemsToModify->requestedParameters.filter = filter;
+ else {
+ qCDebug(QT_OPCUA_PLUGINS_OPEN62541) << "Unable to modify filter, filter creation failed";
+ p.setStatusCode(QOpcUa::UaStatusCode::BadInternalError);
+ emit m_backend->monitoringStatusChanged(handle, attr, item, p);
+ return true;
+ }
break;
}
default:
@@ -577,13 +794,25 @@ bool QOpen62541Subscription::modifyMonitoredItemParameters(uintptr_t handle, QOp
}
if (match) {
+ if (item != QOpcUaMonitoringParameters::Parameter::Filter && p.filter().isValid()) {
+ UA_ExtensionObject filter = createFilter(monItem->parameters.filter());
+ if (filter.content.decoded.data)
+ req.itemsToModify->requestedParameters.filter = filter;
+ else {
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Could not modify monitored item, filter creation failed";
+ p.setStatusCode(QOpcUa::UaStatusCode::BadInternalError);
+ emit m_backend->monitoringStatusChanged(handle, attr, item, p);
+ return true;
+ }
+ }
+
UA_ModifyMonitoredItemsResponse res = UA_Client_MonitoredItems_modify(m_backend->m_uaclient, req);
+ UaDeleter<UA_ModifyMonitoredItemsResponse> responseDeleter(
+ &res, UA_ModifyMonitoredItemsResponse_deleteMembers);
if (res.responseHeader.serviceResult != UA_STATUSCODE_GOOD || res.results[0].statusCode != UA_STATUSCODE_GOOD) {
p.setStatusCode(static_cast<QOpcUa::UaStatusCode>(res.responseHeader.serviceResult == UA_STATUSCODE_GOOD ? res.results[0].statusCode : res.responseHeader.serviceResult));
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
- UA_ModifyMonitoredItemsRequest_deleteMembers(&req);
- UA_ModifyMonitoredItemsResponse_deleteMembers(&res);
return true;
} else {
p.setStatusCode(QOpcUa::UaStatusCode::Good);
@@ -602,16 +831,22 @@ bool QOpen62541Subscription::modifyMonitoredItemParameters(uintptr_t handle, QOp
changed |= QOpcUaMonitoringParameters::Parameter::DiscardOldest;
}
+ if (item == QOpcUaMonitoringParameters::Parameter::Filter) {
+ changed |= QOpcUaMonitoringParameters::Parameter::Filter;
+ if (value.canConvert<QOpcUaMonitoringParameters::DataChangeFilter>())
+ p.setFilter(value.value<QOpcUaMonitoringParameters::DataChangeFilter>());
+ else if (value.canConvert<QOpcUaMonitoringParameters::EventFilter>())
+ p.setFilter(value.value<QOpcUaMonitoringParameters::EventFilter>());
+ if (res.results[0].filterResult.content.decoded.type == &UA_TYPES[UA_TYPES_EVENTFILTERRESULT])
+ p.setFilterResult(convertEventFilterResult(&res.results[0].filterResult));
+ }
+
emit m_backend->monitoringStatusChanged(handle, attr, changed, p);
+
monItem->parameters = p;
- UA_ModifyMonitoredItemsRequest_deleteMembers(&req);
- UA_ModifyMonitoredItemsResponse_deleteMembers(&res);
}
return true;
}
-
- UA_ModifyMonitoredItemsRequest_deleteMembers(&req);
-
return false;
}
diff --git a/src/plugins/opcua/open62541/qopen62541subscription.h b/src/plugins/opcua/open62541/qopen62541subscription.h
index a572817..b20b50f 100644
--- a/src/plugins/opcua/open62541/qopen62541subscription.h
+++ b/src/plugins/opcua/open62541/qopen62541subscription.h
@@ -55,21 +55,23 @@ public:
UA_UInt32 createOnServer();
bool removeOnServer();
- void modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value);
+ void modifyMonitoring(quint64 handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value);
- bool addAttributeMonitoredItem(uintptr_t handle, QOpcUa::NodeAttribute attr, const UA_NodeId &id, QOpcUaMonitoringParameters settings);
- bool removeAttributeMonitoredItem(uintptr_t handle, QOpcUa::NodeAttribute attr);
+ bool addAttributeMonitoredItem(quint64 handle, QOpcUa::NodeAttribute attr, const UA_NodeId &id, QOpcUaMonitoringParameters settings);
+ bool removeAttributeMonitoredItem(quint64 handle, QOpcUa::NodeAttribute attr);
void monitoredValueUpdated(UA_UInt32 monId, UA_DataValue *value);
+ void eventReceived(UA_UInt32 monId, QVariantList list);
+
void sendTimeoutNotification();
struct MonitoredItem {
- uintptr_t handle;
+ quint64 handle;
QOpcUa::NodeAttribute attr;
UA_UInt32 monitoredItemId;
UA_UInt32 clientHandle;
QOpcUaMonitoringParameters parameters;
- MonitoredItem(uintptr_t h, QOpcUa::NodeAttribute a, UA_UInt32 id)
+ MonitoredItem(quint64 h, QOpcUa::NodeAttribute a, UA_UInt32 id)
: handle(h)
, attr(a)
, monitoredItemId(id)
@@ -87,14 +89,20 @@ public:
QOpcUaMonitoringParameters::SubscriptionType shared() const;
signals:
- void timeout(QOpen62541Subscription *sub, QVector<QPair<uintptr_t, QOpcUa::NodeAttribute>> items);
+ void timeout(QOpen62541Subscription *sub, QVector<QPair<quint64, QOpcUa::NodeAttribute>> items);
private:
- MonitoredItem *getItemForAttribute(uintptr_t handle, QOpcUa::NodeAttribute attr);
+ MonitoredItem *getItemForAttribute(quint64 handle, QOpcUa::NodeAttribute attr);
UA_ExtensionObject createFilter(const QVariant &filterData);
+ void createDataChangeFilter(const QOpcUaMonitoringParameters::DataChangeFilter &filter, UA_ExtensionObject *out);
+ void createEventFilter(const QOpcUaMonitoringParameters::EventFilter &filter, UA_ExtensionObject *out);
+ bool convertSelectClause(const QOpcUaMonitoringParameters::EventFilter &filter,
+ UA_SimpleAttributeOperand **selectClauses, size_t *size);
+ bool convertWhereClause(const QOpcUaMonitoringParameters::EventFilter &filter, UA_ContentFilter *result);
- bool modifySubscriptionParameters(uintptr_t handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value);
- bool modifyMonitoredItemParameters(uintptr_t handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value);
+ bool modifySubscriptionParameters(quint64 handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value);
+ bool modifyMonitoredItemParameters(quint64 handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value);
+ QOpcUa::QEventFilterResult convertEventFilterResult(UA_ExtensionObject *obj);
Open62541AsyncBackend *m_backend;
double m_interval;
@@ -105,7 +113,7 @@ private:
quint8 m_priority;
quint32 m_maxNotificationsPerPublish;
- QHash<uintptr_t, QHash<QOpcUa::NodeAttribute, MonitoredItem *>> m_handleToItemMapping; // Handle -> Attribute -> MonitoredItem
+ QHash<quint64, QHash<QOpcUa::NodeAttribute, MonitoredItem *>> m_handleToItemMapping; // Handle -> Attribute -> MonitoredItem
QHash<UA_UInt32, MonitoredItem *> m_itemIdToItemMapping; // ItemId -> Item for fast lookup on data change
quint32 m_clientHandle;
diff --git a/src/plugins/opcua/open62541/qopen62541utils.cpp b/src/plugins/opcua/open62541/qopen62541utils.cpp
index 1749ce4..7a4e9d7 100644
--- a/src/plugins/opcua/open62541/qopen62541utils.cpp
+++ b/src/plugins/opcua/open62541/qopen62541utils.cpp
@@ -35,6 +35,7 @@
****************************************************************************/
#include "qopen62541utils.h"
+#include <qopcuatype.h>
#include <QtCore/qloggingcategory.h>
#include <QtCore/qstringlist.h>
@@ -48,75 +49,39 @@ Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_OPEN62541)
UA_NodeId Open62541Utils::nodeIdFromQString(const QString &name)
{
- const int semicolonIndex = name.indexOf(';');
-
- if (semicolonIndex <= 0) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Unable to split node id string:" << qUtf8Printable(name);
- return UA_NODEID_NULL;
- }
-
- QStringRef namespaceString = name.leftRef(semicolonIndex);
- if (namespaceString.length() <= 3 || !namespaceString.startsWith(QLatin1String("ns="))) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Not a valid index string in node id string:" << name;
- return UA_NODEID_NULL;
- }
- namespaceString = namespaceString.mid(3); // Remove "ns="
-
- QStringRef identifierString = name.midRef(semicolonIndex + 1);
-
- if (identifierString.length() <= 2) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "There is no identifier in node id string:" << name;
- return UA_NODEID_NULL;
- }
-
+ quint16 namespaceIndex;
+ QString identifierString;
char identifierType;
- if (identifierString.startsWith(QLatin1String("s=")))
- identifierType = 's';
- else if (identifierString.startsWith(QLatin1String("i=")))
- identifierType = 'i';
- else if (identifierString.startsWith(QLatin1String("g=")))
- identifierType = 'g';
- else if (identifierString.startsWith(QLatin1String("b=")))
- identifierType = 'b';
- else {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "There is no valid identifier type in node id string:" << name;
- return UA_NODEID_NULL;
- }
- identifierString = identifierString.mid(2); // Remove identifier type
-
- UA_NodeId uaNodeId;
- UA_NodeId_init(&uaNodeId);
-
- bool ok = false;
- UA_UInt16 index = static_cast<UA_UInt16>(namespaceString.toUInt(&ok));
+ bool success = QOpcUa::nodeIdStringSplit(name, &namespaceIndex, &identifierString, &identifierType);
- if (!ok) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Not a valid namespace index in node id string:" << name;
+ if (!success) {
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Failed to split node id string:" << name;
return UA_NODEID_NULL;
}
switch (identifierType) {
case 'i': {
bool isNumber;
- UA_UInt32 identifier = static_cast<UA_UInt32>(identifierString.toUInt(&isNumber));
- if (isNumber)
- return UA_NODEID_NUMERIC(index, identifier);
+ uint identifier = identifierString.toUInt(&isNumber);
+ if (isNumber && identifier <= ((std::numeric_limits<quint32>::max)()))
+ return UA_NODEID_NUMERIC(namespaceIndex, static_cast<UA_UInt32>(identifier));
else
qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << name << "does not contain a valid numeric identifier";
break;
}
case 's': {
if (identifierString.length() > 0)
- return UA_NODEID_STRING_ALLOC(index, identifierString.toUtf8().constData());
+ return UA_NODEID_STRING_ALLOC(namespaceIndex, identifierString.toUtf8().constData());
else
qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << name << "does not contain a valid string identifier";
break;
}
case 'g': {
- QUuid uuid(identifierString.toString());
+ QUuid uuid(identifierString);
if (uuid.isNull()) {
qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << name << "does not contain a valid guid identifier";
+ break;
}
UA_Guid guid;
@@ -124,12 +89,12 @@ UA_NodeId Open62541Utils::nodeIdFromQString(const QString &name)
guid.data2 = uuid.data2;
guid.data3 = uuid.data3;
std::memcpy(guid.data4, uuid.data4, sizeof(uuid.data4));
- return UA_NODEID_GUID(index, guid);
+ return UA_NODEID_GUID(namespaceIndex, guid);
}
case 'b': {
- const QByteArray temp = QByteArray::fromBase64(identifierString.toLocal8Bit());
+ const QByteArray temp = QByteArray::fromBase64(identifierString.toLatin1());
if (temp.size() > 0) {
- return UA_NODEID_BYTESTRING_ALLOC(index, temp.data());
+ return UA_NODEID_BYTESTRING_ALLOC(namespaceIndex, temp.constData());
}
else
qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << name << "does not contain a valid byte string identifier";
diff --git a/src/plugins/opcua/open62541/qopen62541utils.h b/src/plugins/opcua/open62541/qopen62541utils.h
index d9738ad..5a40c6c 100644
--- a/src/plugins/opcua/open62541/qopen62541utils.h
+++ b/src/plugins/opcua/open62541/qopen62541utils.h
@@ -41,8 +41,49 @@
#include <QtCore/qstring.h>
+#include <functional>
+
QT_BEGIN_NAMESPACE
+template <typename T>
+class UaDeleter
+{
+public:
+ UaDeleter(T *data, std::function<void(T *value)> f)
+ : m_data(data)
+ , m_function(f)
+ {
+ }
+ ~UaDeleter()
+ {
+ if (m_data)
+ m_function(m_data);
+ }
+private:
+ T *m_data {nullptr};
+ std::function<void(T *attribute)> m_function;
+};
+
+template <uint TYPEINDEX>
+class UaArrayDeleter
+{
+public:
+ UaArrayDeleter(void *data, size_t arrayLength)
+ : m_data(data)
+ , m_arrayLength(arrayLength)
+ {
+ static_assert (TYPEINDEX < UA_TYPES_COUNT, "Invalid index outside the UA_TYPES array.");
+ }
+ ~UaArrayDeleter()
+ {
+ if (m_data && m_arrayLength > 0)
+ UA_Array_delete(m_data, m_arrayLength, &UA_TYPES[TYPEINDEX]);
+ }
+private:
+ void *m_data {nullptr};
+ size_t m_arrayLength {0};
+};
+
namespace Open62541Utils {
UA_NodeId nodeIdFromQString(const QString &name);
QString nodeIdToQString(UA_NodeId id);
diff --git a/src/plugins/opcua/open62541/qopen62541valueconverter.cpp b/src/plugins/opcua/open62541/qopen62541valueconverter.cpp
index 226b8b7..f342a8e 100644
--- a/src/plugins/opcua/open62541/qopen62541valueconverter.cpp
+++ b/src/plugins/opcua/open62541/qopen62541valueconverter.cpp
@@ -48,6 +48,8 @@ QT_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_OPEN62541)
+using namespace QOpcUa::NodeIds;
+
namespace QOpen62541ValueConverter {
QOpcUa::Types qvariantTypeToQOpcUaType(QMetaType::Type type)
@@ -77,15 +79,12 @@ QOpcUa::Types qvariantTypeToQOpcUaType(QMetaType::Type type)
return QOpcUa::Float;
case QMetaType::QString:
return QOpcUa::String;
- //return QOpcUa::LocalizedText; // TODO: unclear
case QMetaType::QDateTime:
return QOpcUa::DateTime;
case QMetaType::QByteArray:
return QOpcUa::ByteString;
case QMetaType::QUuid:
return QOpcUa::Guid;
- //return QOpcUa::XmlElement;
- //return QOpcUa::NodeId;
default:
break;
}
@@ -98,6 +97,20 @@ UA_Variant toOpen62541Variant(const QVariant &value, QOpcUa::Types type)
UA_Variant open62541value;
UA_Variant_init(&open62541value);
+ if (value.canConvert<QOpcUa::QMultiDimensionalArray>()) {
+ QOpcUa::QMultiDimensionalArray data = value.value<QOpcUa::QMultiDimensionalArray>();
+ UA_Variant result = toOpen62541Variant(data.valueArray(), type);
+
+ if (!data.arrayDimensions().isEmpty()) {
+ // Ensure that the array dimensions size is < UINT32_MAX
+ if (static_cast<quint64>(data.arrayDimensions().size()) > (std::numeric_limits<quint32>::max)())
+ return open62541value;
+ result.arrayDimensionsSize = data.arrayDimensions().size();
+ result.arrayDimensions = static_cast<UA_UInt32 *>(UA_Array_new(result.arrayDimensionsSize, &UA_TYPES[UA_TYPES_UINT32]));
+ std::copy(data.arrayDimensions().constBegin(), data.arrayDimensions().constEnd(), result.arrayDimensions);
+ }
+ return result;
+ }
if (value.type() == QVariant::List && value.toList().size() == 0)
return open62541value;
@@ -161,6 +174,12 @@ UA_Variant toOpen62541Variant(const QVariant &value, QOpcUa::Types type)
return arrayFromQVariant<UA_ExtensionObject, QOpcUa::QAxisInformation>(value, dt);
case QOpcUa::XV:
return arrayFromQVariant<UA_ExtensionObject, QOpcUa::QXValue>(value, dt);
+ case QOpcUa::ExpandedNodeId:
+ return arrayFromQVariant<UA_ExpandedNodeId, QOpcUa::QExpandedNodeId>(value, dt);
+ case QOpcUa::Argument:
+ return arrayFromQVariant<UA_Argument, QOpcUa::QArgument>(value, dt);
+ case QOpcUa::ExtensionObject:
+ return arrayFromQVariant<UA_ExtensionObject, QOpcUa::QExtensionObject>(value, dt);
default:
qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Variant conversion to Open62541 for typeIndex" << type << " not implemented";
}
@@ -171,7 +190,6 @@ UA_Variant toOpen62541Variant(const QVariant &value, QOpcUa::Types type)
QVariant toQVariant(const UA_Variant &value)
{
if (value.type == nullptr) {
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Null variant received, unable to convert";
return QVariant();
}
@@ -203,7 +221,7 @@ QVariant toQVariant(const UA_Variant &value)
case UA_TYPES_BYTESTRING:
return arrayToQVariant<QByteArray, UA_ByteString>(value, QMetaType::QByteArray);
case UA_TYPES_LOCALIZEDTEXT:
- return arrayToQVariant<QOpcUa::QLocalizedText, UA_LocalizedText>(value, QMetaType::QString);
+ return arrayToQVariant<QOpcUa::QLocalizedText, UA_LocalizedText>(value);
case UA_TYPES_NODEID:
return arrayToQVariant<QString, UA_NodeId>(value, QMetaType::QString);
case UA_TYPES_DATETIME:
@@ -218,6 +236,10 @@ QVariant toQVariant(const UA_Variant &value)
return arrayToQVariant<QOpcUa::UaStatusCode, UA_StatusCode>(value, QMetaType::UInt);
case UA_TYPES_EXTENSIONOBJECT:
return arrayToQVariant<QVariant, UA_ExtensionObject>(value);
+ case UA_TYPES_EXPANDEDNODEID:
+ return arrayToQVariant<QOpcUa::QExpandedNodeId, UA_ExpandedNodeId>(value);
+ case UA_TYPES_ARGUMENT:
+ return arrayToQVariant<QOpcUa::QArgument, UA_Argument>(value);
default:
qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Variant conversion from Open62541 for typeIndex" << value.type->typeIndex << " not implemented";
return QVariant();
@@ -273,7 +295,12 @@ const UA_DataType *toDataType(QOpcUa::Types valueType)
case QOpcUa::DoubleComplexNumber:
case QOpcUa::AxisInformation:
case QOpcUa::XV:
+ case QOpcUa::ExtensionObject:
return &UA_TYPES[UA_TYPES_EXTENSIONOBJECT];
+ case QOpcUa::ExpandedNodeId:
+ return &UA_TYPES[UA_TYPES_EXPANDEDNODEID];
+ case QOpcUa::Argument:
+ return &UA_TYPES[UA_TYPES_ARGUMENT];
default:
qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Trying to convert undefined type:" << valueType;
return nullptr;
@@ -281,121 +308,130 @@ const UA_DataType *toDataType(QOpcUa::Types valueType)
}
template<typename TARGETTYPE, typename UATYPE>
-QVariant scalarToQVariant(UATYPE *data, QMetaType::Type type)
+TARGETTYPE scalarToQt(const UATYPE *data)
{
- return QVariant(type, reinterpret_cast<TARGETTYPE *>(data));
+ return *reinterpret_cast<const TARGETTYPE *>(data);
}
template<>
-QVariant scalarToQVariant<QString, UA_String>(UA_String *data, QMetaType::Type type)
+QString scalarToQt<QString, UA_String>(const UA_String *data)
{
- Q_UNUSED(type)
- UA_String *uaStr = static_cast<UA_String *>(data);
- return QVariant(QString::fromUtf8(reinterpret_cast<char *>(uaStr->data), uaStr->length));
+ return QString::fromUtf8(reinterpret_cast<const char *>(data->data), data->length);
}
template<>
-QVariant scalarToQVariant<QByteArray, UA_ByteString>(UA_ByteString *data, QMetaType::Type type)
+QByteArray scalarToQt<QByteArray, UA_ByteString>(const UA_ByteString *data)
{
- Q_UNUSED(type)
- UA_ByteString *uaBs = static_cast<UA_ByteString *>(data);
- return QVariant(QByteArray(reinterpret_cast<char *>(uaBs->data), uaBs->length));
+ return QByteArray(reinterpret_cast<const char *>(data->data), data->length);
}
template<>
-QVariant scalarToQVariant<QOpcUa::QLocalizedText, UA_LocalizedText>(UA_LocalizedText *data, QMetaType::Type type)
+QOpcUa::QLocalizedText scalarToQt<QOpcUa::QLocalizedText, UA_LocalizedText>(const UA_LocalizedText *data)
{
- Q_UNUSED(type)
-
QOpcUa::QLocalizedText lt;
- lt.locale = scalarToQVariant<QString, UA_String>(&(data->locale), QMetaType::Type::QString).toString();
- lt.text = scalarToQVariant<QString, UA_String>(&(data->text), QMetaType::Type::QString).toString();
- return QVariant::fromValue(lt);
+ lt.setLocale(scalarToQt<QString, UA_String>(&(data->locale)));
+ lt.setText(scalarToQt<QString, UA_String>(&(data->text)));
+ return lt;
}
template<>
-QVariant scalarToQVariant<QString, UA_NodeId>(UA_NodeId *data, QMetaType::Type type)
+QString scalarToQt<QString, UA_NodeId>(const UA_NodeId *data)
{
- Q_UNUSED(type)
- UA_NodeId *uan = static_cast<UA_NodeId *>(data);
- return Open62541Utils::nodeIdToQString(*uan);
+ return Open62541Utils::nodeIdToQString(*data);
}
template<>
-QVariant scalarToQVariant<QDateTime, UA_DateTime>(UA_DateTime *data, QMetaType::Type type)
+QDateTime scalarToQt<QDateTime, UA_DateTime>(const UA_DateTime *data)
{
- Q_UNUSED(type)
- if (!data)
- return QVariant();
- return QVariant(uaDateTimeToQDateTime(*data));
+ // OPC-UA part 3, Table C.9
+ const QDateTime epochStart(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC);
+ return epochStart.addMSecs(*data / UA_DATETIME_MSEC).toLocalTime();
}
template<>
-QVariant scalarToQVariant<QUuid, UA_Guid>(UA_Guid *data, QMetaType::Type type)
+QUuid scalarToQt<QUuid, UA_Guid>(const UA_Guid *data)
{
- Q_UNUSED(type)
return QUuid(data->data1, data->data2, data->data3, data->data4[0], data->data4[1], data->data4[2],
data->data4[3], data->data4[4], data->data4[5], data->data4[6], data->data4[7]);
}
template<>
-QVariant scalarToQVariant<QOpcUa::QQualifiedName, UA_QualifiedName>(UA_QualifiedName *data, QMetaType::Type type)
+QOpcUa::QQualifiedName scalarToQt<QOpcUa::QQualifiedName, UA_QualifiedName>(const UA_QualifiedName *data)
{
- Q_UNUSED(type);
QOpcUa::QQualifiedName temp;
- temp.namespaceIndex = data->namespaceIndex;
- temp.name = scalarToQVariant<QString, UA_String>(&(data->name), QMetaType::Type::QString).toString();
- return QVariant::fromValue(temp);
+ temp.setNamespaceIndex(data->namespaceIndex);
+ temp.setName(scalarToQt<QString, UA_String>(&(data->name)));
+ return temp;
}
-template <>
-QVariant scalarToQVariant<QVariant, UA_ExtensionObject>(UA_ExtensionObject *data, QMetaType::Type type)
+template<>
+QOpcUa::QArgument scalarToQt<QOpcUa::QArgument, UA_Argument>(const UA_Argument *data)
{
- Q_UNUSED(type);
+ QOpcUa::QArgument temp;
+ temp.setValueRank(data->valueRank);
+ temp.setDataTypeId(Open62541Utils::nodeIdToQString(data->dataType));
+ temp.setName(scalarToQt<QString, UA_String>(&data->name));
+ temp.setDescription(scalarToQt<QOpcUa::QLocalizedText, UA_LocalizedText>(&data->description));
+ for (size_t i = 0; i < data->arrayDimensionsSize; ++i)
+ temp.arrayDimensionsRef().append(data->arrayDimensions[i]);
+ return temp;
+}
+template <>
+QVariant scalarToQt<QVariant, UA_ExtensionObject>(const UA_ExtensionObject *data)
+{
// OPC-UA part 6, Table 13 states that an extension object can have no body, a ByteString encoded body
// or an XML encoded body.
// Handle extension object without body
if (data->encoding == UA_EXTENSIONOBJECT_ENCODED_NOBODY) {
- return QByteArray();
+ QOpcUa::QExtensionObject obj;
+ obj.setEncoding(QOpcUa::QExtensionObject::Encoding::NoBody);
+ return QVariant::fromValue(obj);
}
// Some types are automatically decoded by open62541. In this case, the encoding is UA_EXTENSIONOBJECT_DECODED
if (data->encoding != UA_EXTENSIONOBJECT_ENCODED_XML && data->encoding != UA_EXTENSIONOBJECT_ENCODED_BYTESTRING) {
+
+ if (data->content.decoded.type == &UA_TYPES[UA_TYPES_ARGUMENT] && data->content.decoded.data != nullptr) {
+ return scalarToQt<QOpcUa::QArgument, UA_Argument>(reinterpret_cast<UA_Argument *>(data->content.decoded.data));
+ }
+
qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Unsupported decoded extension object type, unable to convert";
return QVariant();
}
- const char *buffer = reinterpret_cast<const char *>(data->content.encoded.body.data);
+ QByteArray buffer = QByteArray::fromRawData(reinterpret_cast<const char *>(data->content.encoded.body.data),
+ data->content.encoded.body.length);
// Decode recognized types, as required by OPC-UA part 4, 5.2.2.15
if (data->content.encoded.typeId.identifierType == UA_NODEIDTYPE_NUMERIC &&
data->content.encoded.typeId.namespaceIndex == 0 &&
data->encoding == UA_EXTENSIONOBJECT_ENCODED_BYTESTRING) {
- size_t length = data->content.encoded.body.length;
+ QOpcUaBinaryDataEncoding decoder(&buffer);
+
bool success = false;
QVariant result;
- QOpcUaBinaryDataEncoding::TypeEncodingId objType = static_cast<QOpcUaBinaryDataEncoding::TypeEncodingId>(data->content.encoded.typeId.identifier.numeric);
+ Namespace0 objType = Namespace0(data->content.encoded.typeId.identifier.numeric);
switch (objType) {
- case QOpcUaBinaryDataEncoding::TypeEncodingId::EUInformation:
- result = QVariant::fromValue(QOpcUaBinaryDataEncoding::decode<QOpcUa::QEUInformation>(buffer, length, success));
+ case Namespace0::EUInformation_Encoding_DefaultBinary:
+ result = decoder.decode<QOpcUa::QEUInformation>(success);
break;
- case QOpcUaBinaryDataEncoding::TypeEncodingId::Range:
- result = QVariant::fromValue(QOpcUaBinaryDataEncoding::decode<QOpcUa::QRange>(buffer, length, success));
+ case Namespace0::Range_Encoding_DefaultBinary:
+ result = decoder.decode<QOpcUa::QRange>(success);
break;
- case QOpcUaBinaryDataEncoding::TypeEncodingId::ComplexNumber:
- result = QVariant::fromValue(QOpcUaBinaryDataEncoding::decode<QOpcUa::QComplexNumber>(buffer, length, success));
+ case Namespace0::ComplexNumberType_Encoding_DefaultBinary:
+ result = decoder.decode<QOpcUa::QComplexNumber>(success);
break;
- case QOpcUaBinaryDataEncoding::TypeEncodingId::DoubleComplexNumber:
- result = QVariant::fromValue(QOpcUaBinaryDataEncoding::decode<QOpcUa::QDoubleComplexNumber>(buffer, length, success));
+ case Namespace0::DoubleComplexNumberType_Encoding_DefaultBinary:
+ result = decoder.decode<QOpcUa::QDoubleComplexNumber>(success);
break;
- case QOpcUaBinaryDataEncoding::TypeEncodingId::AxisInformation:
- result = QVariant::fromValue(QOpcUaBinaryDataEncoding::decode<QOpcUa::QAxisInformation>(buffer, length, success));
+ case Namespace0::AxisInformation_Encoding_DefaultBinary:
+ result = decoder.decode<QOpcUa::QAxisInformation>(success);
break;
- case QOpcUaBinaryDataEncoding::TypeEncodingId::XV:
- result = QVariant::fromValue(QOpcUaBinaryDataEncoding::decode<QOpcUa::QXValue>(buffer, length, success));
+ case Namespace0::XVType_Encoding_DefaultBinary:
+ result = decoder.decode<QOpcUa::QXValue>(success);
break;
default:
break;
@@ -404,9 +440,22 @@ QVariant scalarToQVariant<QVariant, UA_ExtensionObject>(UA_ExtensionObject *data
return result;
}
- // Treat the object as opaque data, as required by OPC-UA part 4, 5.2.2.15
- qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Returning raw data for unknown extension object type:" << Open62541Utils::nodeIdToQString(data->content.encoded.typeId);
- return QVariant::fromValue(QByteArray(buffer, data->content.encoded.body.length));
+ // Return extension objects with binary or XML body as QOpcUa::QExtensionObject
+ QOpcUa::QExtensionObject obj;
+ obj.setEncoding(static_cast<QOpcUa::QExtensionObject::Encoding>(data->encoding));
+ obj.setEncodingTypeId(Open62541Utils::nodeIdToQString(data->content.encoded.typeId));
+ obj.setEncodedBody(QByteArray(buffer.constData(), buffer.size()));
+ return obj;
+}
+
+template<>
+QOpcUa::QExpandedNodeId scalarToQt<QOpcUa::QExpandedNodeId, UA_ExpandedNodeId>(const UA_ExpandedNodeId *data)
+{
+ QOpcUa::QExpandedNodeId temp;
+ temp.setServerIndex(data->serverIndex);
+ temp.setNodeId(Open62541Utils::nodeIdToQString(data->nodeId));
+ temp.setNamespaceUri(scalarToQt<QString, UA_String>(&data->namespaceUri));
+ return temp;
}
template<typename TARGETTYPE, typename UATYPE>
@@ -417,14 +466,30 @@ QVariant arrayToQVariant(const UA_Variant &var, QMetaType::Type type)
if (var.arrayLength > 0) {
QVariantList list;
for (size_t i = 0; i < var.arrayLength; ++i) {
- list.append(scalarToQVariant<TARGETTYPE, UATYPE>(&temp[i], type));
+ QVariant tempVar = QVariant::fromValue(scalarToQt<TARGETTYPE, UATYPE>(&temp[i]));
+ if (type != QMetaType::UnknownType && type != static_cast<QMetaType::Type>(tempVar.type()))
+ tempVar.convert(type);
+ list.append(tempVar);
}
+
+ if (var.arrayDimensionsSize > 0) {
+ // Ensure that the array dimensions fit in a QVector
+ if (var.arrayDimensionsSize > static_cast<quint64>((std::numeric_limits<int>::max)()))
+ return QOpcUa::QMultiDimensionalArray();
+ QVector<quint32> arrayDimensions;
+ std::copy(var.arrayDimensions, var.arrayDimensions+var.arrayDimensionsSize, std::back_inserter(arrayDimensions));
+ return QOpcUa::QMultiDimensionalArray(list, arrayDimensions);
+ }
+
if (list.size() == 1)
return list.at(0);
else
return list;
} else if (UA_Variant_isScalar(&var)) {
- return scalarToQVariant<TARGETTYPE, UATYPE>(temp, type);
+ QVariant tempVar = QVariant::fromValue(scalarToQt<TARGETTYPE, UATYPE>(temp));
+ if (type != QMetaType::UnknownType && type != static_cast<QMetaType::Type>(tempVar.type()))
+ tempVar.convert(type);
+ return tempVar;
} else if (var.arrayLength == 0 && var.data == UA_EMPTY_ARRAY_SENTINEL) {
return QVariantList(); // Return empty QVariantList for empty array
}
@@ -433,125 +498,156 @@ QVariant arrayToQVariant(const UA_Variant &var, QMetaType::Type type)
}
template<typename TARGETTYPE, typename QTTYPE>
-void scalarFromQVariant(const QVariant &var, TARGETTYPE *ptr)
+void scalarFromQt(const QTTYPE &value, TARGETTYPE *ptr)
{
- *ptr = static_cast<TARGETTYPE>(var.value<QTTYPE>());
+ *ptr = static_cast<TARGETTYPE>(value);
}
template<>
-void scalarFromQVariant<UA_DateTime, QDateTime>(const QVariant &var, UA_DateTime *ptr)
+void scalarFromQt<UA_DateTime, QDateTime>(const QDateTime &value, UA_DateTime *ptr)
{
// OPC-UA part 3, Table C.9
const QDateTime uaEpochStart(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC);
- *ptr = UA_MSEC_TO_DATETIME * (var.toDateTime().toMSecsSinceEpoch() - uaEpochStart.toMSecsSinceEpoch());
+ *ptr = UA_DATETIME_MSEC * (value.toMSecsSinceEpoch() - uaEpochStart.toMSecsSinceEpoch());
}
template<>
-void scalarFromQVariant<UA_String, QString>(const QVariant &var, UA_String *ptr)
+void scalarFromQt<UA_String, QString>(const QString &value, UA_String *ptr)
{
- UA_String tmpValue = UA_String_fromChars(var.toString().toUtf8().constData());
- UA_String_copy(&tmpValue, ptr);
- UA_String_deleteMembers(&tmpValue);
+ *ptr = UA_STRING_ALLOC(value.toUtf8().constData());
}
template<>
-void scalarFromQVariant<UA_LocalizedText, QOpcUa::QLocalizedText>(const QVariant &var, UA_LocalizedText *ptr)
+void scalarFromQt<UA_LocalizedText, QOpcUa::QLocalizedText>(const QOpcUa::QLocalizedText &value, UA_LocalizedText *ptr)
{
- QOpcUa::QLocalizedText lt = var.value<QOpcUa::QLocalizedText>();
- scalarFromQVariant<UA_String, QString>(lt.locale, &(ptr->locale));
- scalarFromQVariant<UA_String, QString>(lt.text, &(ptr->text));
+ scalarFromQt<UA_String, QString>(value.locale(), &(ptr->locale));
+ scalarFromQt<UA_String, QString>(value.text(), &(ptr->text));
}
template<>
-void scalarFromQVariant<UA_ByteString, QByteArray>(const QVariant &var, UA_ByteString *ptr)
+void scalarFromQt<UA_ByteString, QByteArray>(const QByteArray &value, UA_ByteString *ptr)
{
- QByteArray arr = var.toByteArray();
- UA_ByteString tmpValue;
- UA_ByteString_init(&tmpValue);
- tmpValue.length = arr.length();
- tmpValue.data = reinterpret_cast<UA_Byte *>(arr.data());
- UA_ByteString_copy(&tmpValue, ptr);
+ ptr->length = value.length();
+ UA_StatusCode success = UA_Array_copy(reinterpret_cast<const UA_Byte *>(value.constData()),
+ value.length(), reinterpret_cast<void **>(&ptr->data), &UA_TYPES[UA_TYPES_BYTE]);
+ if (success != UA_STATUSCODE_GOOD) {
+ ptr->length = 0;
+ ptr->data = nullptr;
+ }
}
template<>
-void scalarFromQVariant<UA_NodeId, QString>(const QVariant &var, UA_NodeId *ptr)
+void scalarFromQt<UA_NodeId, QString>(const QString &value, UA_NodeId *ptr)
{
- UA_NodeId tmpValue = Open62541Utils::nodeIdFromQString(var.toString());
- UA_NodeId_copy(&tmpValue, ptr);
- UA_NodeId_deleteMembers(&tmpValue);
+ *ptr = Open62541Utils::nodeIdFromQString(value);
}
template<>
-void scalarFromQVariant<UA_QualifiedName, QOpcUa::QQualifiedName>(const QVariant &var, UA_QualifiedName *ptr)
+void scalarFromQt<UA_QualifiedName, QOpcUa::QQualifiedName>(const QOpcUa::QQualifiedName &value, UA_QualifiedName *ptr)
{
- QOpcUa::QQualifiedName temp = var.value<QOpcUa::QQualifiedName>();
- ptr->namespaceIndex = temp.namespaceIndex;
- scalarFromQVariant<UA_String, QString>(temp.name, &(ptr->name));
+ ptr->namespaceIndex = value.namespaceIndex();
+ scalarFromQt<UA_String, QString>(value.name(), &(ptr->name));
}
template<>
-void scalarFromQVariant<UA_Guid, QUuid>(const QVariant &var, UA_Guid *ptr)
+void scalarFromQt<UA_Guid, QUuid>(const QUuid &value, UA_Guid *ptr)
{
- const QUuid uuid = var.toUuid();
- ptr->data1 = uuid.data1;
- ptr->data2 = uuid.data2;
- ptr->data3 = uuid.data3;
- std::memcpy(ptr->data4, uuid.data4, sizeof(uuid.data4));
+ ptr->data1 = value.data1;
+ ptr->data2 = value.data2;
+ ptr->data3 = value.data3;
+ std::memcpy(ptr->data4, value.data4, sizeof(value.data4));
}
template<>
-void scalarFromQVariant<UA_ExtensionObject, QOpcUa::QRange>(const QVariant &var, UA_ExtensionObject *ptr)
+void scalarFromQt<UA_ExtensionObject, QOpcUa::QRange>(const QOpcUa::QRange &value, UA_ExtensionObject *ptr)
{
- const QOpcUa::QRange range = var.value<QOpcUa::QRange>();
QByteArray temp;
- QOpcUaBinaryDataEncoding::encode<QOpcUa::QRange>(range, temp);
- return createExtensionObject(temp, QOpcUaBinaryDataEncoding::TypeEncodingId::Range, ptr);
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ encoder.encode<QOpcUa::QRange>(value);
+ return createExtensionObject(temp,
+ UA_NODEID_NUMERIC(0,static_cast<UA_UInt32>(Namespace0::Range_Encoding_DefaultBinary)), ptr);
}
template<>
-void scalarFromQVariant<UA_ExtensionObject, QOpcUa::QEUInformation>(const QVariant &var, UA_ExtensionObject *ptr)
+void scalarFromQt<UA_ExtensionObject, QOpcUa::QEUInformation>(const QOpcUa::QEUInformation &value, UA_ExtensionObject *ptr)
{
- const QOpcUa::QEUInformation info = var.value<QOpcUa::QEUInformation>();
QByteArray temp;
- QOpcUaBinaryDataEncoding::encode<QOpcUa::QEUInformation>(info, temp);
- return createExtensionObject(temp, QOpcUaBinaryDataEncoding::TypeEncodingId::EUInformation, ptr);
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ encoder.encode<QOpcUa::QEUInformation>(value);
+ return createExtensionObject(temp,
+ UA_NODEID_NUMERIC(0, static_cast<UA_UInt32>(Namespace0::EUInformation_Encoding_DefaultBinary)), ptr);
}
template<>
-void scalarFromQVariant<UA_ExtensionObject, QOpcUa::QComplexNumber>(const QVariant &var, UA_ExtensionObject *ptr)
+void scalarFromQt<UA_ExtensionObject, QOpcUa::QComplexNumber>(const QOpcUa::QComplexNumber &value, UA_ExtensionObject *ptr)
{
- const QOpcUa::QComplexNumber num = var.value<QOpcUa::QComplexNumber>();
QByteArray temp;
- QOpcUaBinaryDataEncoding::encode<QOpcUa::QComplexNumber>(num, temp);
- return createExtensionObject(temp, QOpcUaBinaryDataEncoding::TypeEncodingId::ComplexNumber, ptr);
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ encoder.encode<QOpcUa::QComplexNumber>(value);
+ return createExtensionObject(temp,
+ UA_NODEID_NUMERIC(0, static_cast<UA_UInt32>(Namespace0::ComplexNumberType_Encoding_DefaultBinary)), ptr);
}
template<>
-void scalarFromQVariant<UA_ExtensionObject, QOpcUa::QDoubleComplexNumber>(const QVariant &var, UA_ExtensionObject *ptr)
+void scalarFromQt<UA_ExtensionObject, QOpcUa::QDoubleComplexNumber>(const QOpcUa::QDoubleComplexNumber &value, UA_ExtensionObject *ptr)
{
- const QOpcUa::QDoubleComplexNumber num = var.value<QOpcUa::QDoubleComplexNumber>();
QByteArray temp;
- QOpcUaBinaryDataEncoding::encode<QOpcUa::QDoubleComplexNumber>(num, temp);
- return createExtensionObject(temp, QOpcUaBinaryDataEncoding::TypeEncodingId::DoubleComplexNumber, ptr);
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ encoder.encode<QOpcUa::QDoubleComplexNumber>(value);
+ return createExtensionObject(temp,
+ UA_NODEID_NUMERIC(0, static_cast<UA_UInt32>(Namespace0::DoubleComplexNumberType_Encoding_DefaultBinary)), ptr);
}
template<>
-void scalarFromQVariant<UA_ExtensionObject, QOpcUa::QAxisInformation>(const QVariant &var, UA_ExtensionObject *ptr)
+void scalarFromQt<UA_ExtensionObject, QOpcUa::QAxisInformation>(const QOpcUa::QAxisInformation &value, UA_ExtensionObject *ptr)
{
- const QOpcUa::QAxisInformation num = var.value<QOpcUa::QAxisInformation>();
QByteArray temp;
- QOpcUaBinaryDataEncoding::encode<QOpcUa::QAxisInformation>(num, temp);
- return createExtensionObject(temp, QOpcUaBinaryDataEncoding::TypeEncodingId::AxisInformation, ptr);
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ encoder.encode<QOpcUa::QAxisInformation>(value);
+ return createExtensionObject(temp,
+ UA_NODEID_NUMERIC(0, static_cast<UA_UInt32>(Namespace0::AxisInformation_Encoding_DefaultBinary)), ptr);
}
template<>
-void scalarFromQVariant<UA_ExtensionObject, QOpcUa::QXValue>(const QVariant &var, UA_ExtensionObject *ptr)
+void scalarFromQt<UA_ExtensionObject, QOpcUa::QXValue>(const QOpcUa::QXValue &value, UA_ExtensionObject *ptr)
{
- const QOpcUa::QXValue num = var.value<QOpcUa::QXValue>();
QByteArray temp;
- QOpcUaBinaryDataEncoding::encode<QOpcUa::QXValue>(num, temp);
- return createExtensionObject(temp, QOpcUaBinaryDataEncoding::TypeEncodingId::XV, ptr);
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ encoder.encode<QOpcUa::QXValue>(value);
+ return createExtensionObject(temp,
+ UA_NODEID_NUMERIC(0, static_cast<UA_UInt32>(Namespace0::XVType_Encoding_DefaultBinary)), ptr);
+}
+
+template<>
+void scalarFromQt<UA_ExtensionObject, QOpcUa::QExtensionObject>(const QOpcUa::QExtensionObject &obj, UA_ExtensionObject *ptr)
+{
+ QByteArray temp = obj.encodedBody();
+ UA_NodeId encodingId = Open62541Utils::nodeIdFromQString(obj.encodingTypeId());
+ UaDeleter<UA_NodeId> nodeIdDeleter(&encodingId, UA_NodeId_deleteMembers);
+ createExtensionObject(temp, encodingId, ptr, obj.encoding());
+}
+
+template<>
+void scalarFromQt<UA_ExpandedNodeId, QOpcUa::QExpandedNodeId>(const QOpcUa::QExpandedNodeId &value, UA_ExpandedNodeId *ptr)
+{
+ ptr->serverIndex = value.serverIndex();
+ scalarFromQt<UA_String, QString>(value.namespaceUri(), &ptr->namespaceUri);
+ ptr->nodeId = Open62541Utils::nodeIdFromQString(value.nodeId());
+}
+
+template<>
+void scalarFromQt<UA_Argument, QOpcUa::QArgument>(const QOpcUa::QArgument &value, UA_Argument *ptr)
+{
+ ptr->valueRank = value.valueRank();
+ scalarFromQt<UA_LocalizedText, QOpcUa::QLocalizedText>(value.description(), &ptr->description);
+ scalarFromQt<UA_String, QString>(value.name(), &ptr->name);
+ ptr->dataType = Open62541Utils::nodeIdFromQString(value.dataTypeId());
+ ptr->arrayDimensionsSize = value.arrayDimensions().size();
+ UA_StatusCode res = UA_Array_copy(value.arrayDimensions().constData(), ptr->arrayDimensionsSize,
+ reinterpret_cast<void **>(&ptr->arrayDimensions), &UA_TYPES[UA_TYPES_UINT32]);
+ if (res != UA_STATUSCODE_GOOD)
+ ptr->arrayDimensionsSize = 0;
}
template<typename TARGETTYPE, typename QTTYPE>
@@ -560,47 +656,58 @@ UA_Variant arrayFromQVariant(const QVariant &var, const UA_DataType *type)
UA_Variant open62541value;
UA_Variant_init(&open62541value);
+ if (type == nullptr) {
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Unable to convert QVariant to UA_Variant, unknown type";
+ return open62541value;
+ }
+
if (var.type() == QVariant::List) {
const QVariantList list = var.toList();
if (list.isEmpty())
return open62541value;
+ for (auto it : qAsConst(list)) {
+ if (!it.canConvert<QTTYPE>()) {
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Value type" << var.typeName() <<
+ "in the QVariant does not match type parameter" << type->typeName;
+ return open62541value;
+ }
+ }
+
TARGETTYPE *arr = static_cast<TARGETTYPE *>(UA_Array_new(list.size(), type));
for (int i = 0; i < list.size(); ++i)
- scalarFromQVariant<TARGETTYPE, QTTYPE>(list[i], &arr[i]);
+ scalarFromQt<TARGETTYPE, QTTYPE>(list[i].value<QTTYPE>(), &arr[i]);
UA_Variant_setArray(&open62541value, arr, list.size(), type);
return open62541value;
}
+ if (!var.canConvert<QTTYPE>()) {
+ qCWarning(QT_OPCUA_PLUGINS_OPEN62541) << "Value type" << var.typeName() <<
+ "in the QVariant does not match type parameter" << type->typeName;
+ return open62541value;
+ }
+
TARGETTYPE *temp = static_cast<TARGETTYPE *>(UA_new(type));
- scalarFromQVariant<TARGETTYPE, QTTYPE>(var, temp);
+ scalarFromQt<TARGETTYPE, QTTYPE>(var.value<QTTYPE>(), temp);
UA_Variant_setScalar(&open62541value, temp, type);
return open62541value;
}
-void createExtensionObject(QByteArray &data, QOpcUaBinaryDataEncoding::TypeEncodingId id, UA_ExtensionObject *ptr)
+void createExtensionObject(QByteArray &data, const UA_NodeId &typeEncodingId, UA_ExtensionObject *ptr, QOpcUa::QExtensionObject::Encoding encoding)
{
UA_ExtensionObject obj;
UA_ExtensionObject_init(&obj);
- obj.encoding = UA_EXTENSIONOBJECT_ENCODED_BYTESTRING;
- obj.content.encoded.body.data = reinterpret_cast<UA_Byte *>(data.data());
- obj.content.encoded.body.length = data.length();
- obj.content.encoded.typeId = UA_NODEID_NUMERIC(0, static_cast<UA_UInt32>(id));
+ if (encoding != QOpcUa::QExtensionObject::Encoding::NoBody) {
+ obj.encoding = static_cast<UA_ExtensionObjectEncoding>(encoding);
+ obj.content.encoded.body.data = reinterpret_cast<UA_Byte *>(data.data());
+ obj.content.encoded.body.length = data.length();
+ }
+ obj.content.encoded.typeId = typeEncodingId;
UA_ExtensionObject_copy(&obj, ptr);
}
-QDateTime uaDateTimeToQDateTime(UA_DateTime dt)
-{
- if (!dt)
- return QDateTime();
-
- // OPC-UA part 3, Table C.9
- const QDateTime epochStart(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC);
- return epochStart.addMSecs(dt * UA_DATETIME_TO_MSEC).toLocalTime();
-}
-
}
QT_END_NAMESPACE
diff --git a/src/plugins/opcua/open62541/qopen62541valueconverter.h b/src/plugins/opcua/open62541/qopen62541valueconverter.h
index f2b3995..8dd1253 100644
--- a/src/plugins/opcua/open62541/qopen62541valueconverter.h
+++ b/src/plugins/opcua/open62541/qopen62541valueconverter.h
@@ -40,7 +40,7 @@
#include "qopen62541.h"
#include <QtOpcUa/qopcuanode.h>
#include <QtOpcUa/qopcuatype.h>
-#include <private/qopcuabinarydataencoding_p.h>
+#include <QtOpcUa/qopcuabinarydataencoding.h>
#include <QtCore/qvariant.h>
@@ -65,20 +65,19 @@ namespace QOpen62541ValueConverter {
QOpcUa::Types qvariantTypeToQOpcUaType(QMetaType::Type type);
template<typename TARGETTYPE, typename UATYPE>
- QVariant scalarToQVariant(UATYPE *data, QMetaType::Type type = QMetaType::UnknownType);
+ TARGETTYPE scalarToQt(const UATYPE *data);
template<typename TARGETTYPE, typename UATYPE>
QVariant arrayToQVariant(const UA_Variant &var, QMetaType::Type type = QMetaType::UnknownType);
template<typename TARGETTYPE, typename QTTYPE>
- void scalarFromQVariant(const QVariant &var, TARGETTYPE *ptr);
+ void scalarFromQt(const QTTYPE &var, TARGETTYPE *ptr);
template<typename TARGETTYPE, typename QTTYPE>
UA_Variant arrayFromQVariant(const QVariant &var, const UA_DataType *type);
- void createExtensionObject(QByteArray &data, QOpcUaBinaryDataEncoding::TypeEncodingId id, UA_ExtensionObject *ptr);
-
- QDateTime uaDateTimeToQDateTime(UA_DateTime dt);
+ void createExtensionObject(QByteArray &data, const UA_NodeId &typeEncodingId, UA_ExtensionObject *ptr,
+ QOpcUa::QExtensionObject::Encoding encoding = QOpcUa::QExtensionObject::Encoding::ByteString);
}
QT_END_NAMESPACE
diff --git a/src/plugins/opcua/uacpp/quacppbackend.cpp b/src/plugins/opcua/uacpp/quacppbackend.cpp
index 52ad6a5..4e21535 100644
--- a/src/plugins/opcua/uacpp/quacppbackend.cpp
+++ b/src/plugins/opcua/uacpp/quacppbackend.cpp
@@ -37,6 +37,7 @@
#include <uabase/uaplatformlayer.h>
#include <uaclient/uasession.h>
#include <uabase/uastring.h>
+#include <uaclient/uadiscovery.h>
#include <limits>
@@ -121,7 +122,7 @@ void UACppAsyncBackend::connectionStatusChanged(OpcUa_UInt32 clientConnectionId,
}
}
-void UACppAsyncBackend::browseChildren(uintptr_t handle, const UaNodeId &id, QOpcUa::ReferenceTypeId referenceType, QOpcUa::NodeClasses nodeClassMask)
+void UACppAsyncBackend::browse(quint64 handle, const UaNodeId &id, const QOpcUaBrowseRequest &request)
{
UaStatus status;
ServiceSettings serviceSettings;
@@ -129,8 +130,10 @@ void UACppAsyncBackend::browseChildren(uintptr_t handle, const UaNodeId &id, QOp
UaByteString continuationPoint;
UaReferenceDescriptions referenceDescriptions;
- browseContext.referenceTypeId = UaNodeId(static_cast<OpcUa_UInt32>(referenceType));
- browseContext.nodeClassMask = nodeClassMask;
+ browseContext.referenceTypeId = UACppUtils::nodeIdFromQString(request.referenceTypeId());
+ browseContext.nodeClassMask = request.nodeClassMask();
+ browseContext.includeSubtype = request.includeSubtypes();
+ browseContext.browseDirection = static_cast<OpcUa_BrowseDirection>(request.browseDirection());
QStringList result;
QVector<QOpcUaReferenceDescription> ret;
@@ -154,13 +157,22 @@ void UACppAsyncBackend::browseChildren(uintptr_t handle, const UaNodeId &id, QOp
result.append(QString::fromUtf8(uastr.toUtf8(), uastr.size()));
QOpcUaReferenceDescription temp;
- temp.setNodeId(UACppUtils::nodeIdToQString(referenceDescriptions[i].NodeId.NodeId));
- temp.setRefType(static_cast<QOpcUa::ReferenceTypeId>(UaNodeId(referenceDescriptions[i].ReferenceTypeId).identifierNumeric()));
+ QOpcUa::QExpandedNodeId expandedId;
+ expandedId.setNamespaceUri(QString::fromUtf8(UaString(referenceDescriptions[i].NodeId.NamespaceUri).toUtf8()));
+ expandedId.setServerIndex(referenceDescriptions[i].NodeId.ServerIndex);
+ expandedId.setNodeId(UACppUtils::nodeIdToQString(referenceDescriptions[i].NodeId.NodeId));
+ temp.setTargetNodeId(expandedId);
+ expandedId.setNamespaceUri(QString::fromUtf8(UaString(referenceDescriptions[i].TypeDefinition.NamespaceUri).toUtf8()));
+ expandedId.setServerIndex(referenceDescriptions[i].TypeDefinition.ServerIndex);
+ expandedId.setNodeId(UACppUtils::nodeIdToQString(referenceDescriptions[i].TypeDefinition.NodeId));
+ temp.setTypeDefinition(expandedId);
+ temp.setRefTypeId(UACppUtils::nodeIdToQString(UaNodeId(referenceDescriptions[i].ReferenceTypeId)));
temp.setNodeClass(static_cast<QOpcUa::NodeClass>(referenceDescriptions[i].NodeClass));
temp.setBrowseName(QUACppValueConverter::scalarToQVariant<QOpcUa::QQualifiedName, OpcUa_QualifiedName>(
&referenceDescriptions[i].BrowseName, QMetaType::Type::UnknownType).value<QOpcUa::QQualifiedName>());
temp.setDisplayName(QUACppValueConverter::scalarToQVariant<QOpcUa::QLocalizedText, OpcUa_LocalizedText>(
&referenceDescriptions[i].DisplayName, QMetaType::Type::UnknownType).value<QOpcUa::QLocalizedText>());
+ temp.setIsForwardReference(referenceDescriptions[i].IsForward);
ret.append(temp);
}
} while (continuationPoint.length() > 0);
@@ -219,6 +231,52 @@ void UACppAsyncBackend::disconnectFromEndpoint()
emit stateAndOrErrorChanged(QOpcUaClient::Disconnected, err);
}
+void UACppAsyncBackend::requestEndpoints(const QUrl &url)
+{
+ UaDiscovery discovery;
+ ServiceSettings ServiceSettings;
+ ClientSecurityInfo clientSecurityInfo;
+ UaEndpointDescriptions endpoints;
+ QVector<QOpcUa::QEndpointDescription> ret;
+
+ UaStatus res = discovery.getEndpoints(ServiceSettings, UaString(url.toString(QUrl::RemoveUserInfo).toUtf8().data()), clientSecurityInfo, endpoints);
+
+ if (res.isGood() && endpoints.length()) {
+ for (size_t i = 0; i < endpoints.length() ; ++i) {
+ QOpcUa::QEndpointDescription temp;
+ temp.setEndpointUrl(QString::fromUtf8(UaString(endpoints[i].EndpointUrl).toUtf8()));
+ temp.serverRef().setApplicationUri(QString::fromUtf8(UaString(endpoints[i].Server.ApplicationUri).toUtf8()));
+ temp.serverRef().setProductUri(QString::fromUtf8(UaString(endpoints[i].Server.ProductUri).toUtf8()));
+ temp.serverRef().setApplicationName(QOpcUa::QLocalizedText(QString::fromUtf8(UaString(endpoints[i].Server.ApplicationName.Locale).toUtf8()),
+ QString::fromUtf8(UaString(endpoints[i].Server.ApplicationName.Text).toUtf8())));
+ temp.serverRef().setApplicationType(static_cast<QOpcUa::QApplicationDescription::ApplicationType>(endpoints[i].Server.ApplicationType));
+ temp.serverRef().setGatewayServerUri(QString::fromUtf8(UaString(endpoints[i].Server.GatewayServerUri).toUtf8()));
+ temp.serverRef().setDiscoveryProfileUri(QString::fromUtf8(UaString(endpoints[i].Server.DiscoveryProfileUri).toUtf8()));
+ for (int j = 0; j < endpoints[i].Server.NoOfDiscoveryUrls; ++j) {
+ QString url = QString::fromUtf8(UaString(endpoints[i].Server.DiscoveryUrls[j]).toUtf8());
+ temp.serverRef().discoveryUrlsRef().append(url);
+ }
+ temp.setServerCertificate(QByteArray(reinterpret_cast<char *>(endpoints[i].ServerCertificate.Data), endpoints[i].ServerCertificate.Length));
+ temp.setSecurityMode(static_cast<QOpcUa::QEndpointDescription::MessageSecurityMode>(endpoints[i].SecurityMode));
+ temp.setSecurityPolicyUri(QString::fromUtf8(UaString(endpoints[i].SecurityPolicyUri).toUtf8()));
+ for (int j = 0; j < endpoints[i].NoOfUserIdentityTokens; ++j) {
+ QOpcUa::QUserTokenPolicy policy;
+ policy.setPolicyId(QString::fromUtf8(UaString(endpoints[i].UserIdentityTokens[j].PolicyId).toUtf8()));
+ policy.setTokenType(static_cast<QOpcUa::QUserTokenPolicy::TokenType>(endpoints[i].UserIdentityTokens[j].TokenType));
+ policy.setIssuedTokenType(QString::fromUtf8(UaString(endpoints[i].UserIdentityTokens[j].IssuedTokenType).toUtf8()));
+ policy.setIssuerEndpointUrl(QString::fromUtf8(UaString(endpoints[i].UserIdentityTokens[j].IssuerEndpointUrl).toUtf8()));
+ policy.setSecurityPolicyUri(QString::fromUtf8(UaString(endpoints[i].UserIdentityTokens[j].SecurityPolicyUri).toUtf8()));
+ temp.userIdentityTokensRef().append(policy);
+ }
+ temp.setTransportProfileUri(QString::fromUtf8(UaString(endpoints[i].TransportProfileUri).toUtf8()));
+ temp.setSecurityLevel(endpoints[i].SecurityLevel);
+ ret.append(temp);
+ }
+ }
+
+ emit endpointsRequestFinished(ret, static_cast<QOpcUa::UaStatusCode>(res.code()));
+}
+
inline OpcUa_UInt32 toUaAttributeId(QOpcUa::NodeAttribute attr)
{
const int attributeIdUsedBits = 22;
@@ -229,7 +287,7 @@ inline OpcUa_UInt32 toUaAttributeId(QOpcUa::NodeAttribute attr)
return static_cast<OpcUa_UInt32>(0);
}
-void UACppAsyncBackend::readAttributes(uintptr_t handle, const UaNodeId &id, QOpcUa::NodeAttributes attr, QString indexRange)
+void UACppAsyncBackend::readAttributes(quint64 handle, const UaNodeId &id, QOpcUa::NodeAttributes attr, QString indexRange)
{
UaStatus result;
@@ -252,7 +310,7 @@ void UACppAsyncBackend::readAttributes(uintptr_t handle, const UaNodeId &id, QOp
ir.copyTo(&nodeToRead[attributeSize - 1].IndexRange);
}
QOpcUaReadResult temp;
- temp.attributeId = attribute;
+ temp.setAttribute(attribute);
vec.push_back(temp);
});
@@ -266,17 +324,17 @@ void UACppAsyncBackend::readAttributes(uintptr_t handle, const UaNodeId &id, QOp
qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Reading attributes failed:" << result.toString().toUtf8();
} else {
for (int i = 0; i < vec.size(); ++i) {
- vec[i].statusCode = static_cast<QOpcUa::UaStatusCode>(values[i].StatusCode);
- vec[i].value = QUACppValueConverter::toQVariant(values[i].Value);
- vec[i].serverTimestamp = QUACppValueConverter::toQDateTime(&values[i].ServerTimestamp);
- vec[i].sourceTimestamp = QUACppValueConverter::toQDateTime(&values[i].SourceTimestamp);
+ vec[i].setStatusCode(static_cast<QOpcUa::UaStatusCode>(values[i].StatusCode));
+ vec[i].setValue(QUACppValueConverter::toQVariant(values[i].Value));
+ vec[i].setServerTimestamp(QUACppValueConverter::toQDateTime(&values[i].ServerTimestamp));
+ vec[i].setSourceTimestamp(QUACppValueConverter::toQDateTime(&values[i].SourceTimestamp));
}
}
emit attributesRead(handle, vec, static_cast<QOpcUa::UaStatusCode>(result.statusCode()));
}
-void UACppAsyncBackend::writeAttribute(uintptr_t handle, const UaNodeId &id, QOpcUa::NodeAttribute attrId, QVariant value, QOpcUa::Types type, QString indexRange)
+void UACppAsyncBackend::writeAttribute(quint64 handle, const UaNodeId &id, QOpcUa::NodeAttribute attrId, QVariant value, QOpcUa::Types type, QString indexRange)
{
if (type == QOpcUa::Types::Undefined && attrId != QOpcUa::NodeAttribute::Value)
type = attributeIdToTypeId(attrId);
@@ -304,7 +362,7 @@ void UACppAsyncBackend::writeAttribute(uintptr_t handle, const UaNodeId &id, QOp
static_cast<QOpcUa::UaStatusCode>(writeResults[0]) : static_cast<QOpcUa::UaStatusCode>(result.statusCode()));
}
-void UACppAsyncBackend::writeAttributes(uintptr_t handle, const UaNodeId &id, QOpcUaNode::AttributeMap toWrite, QOpcUa::Types valueAttributeType)
+void UACppAsyncBackend::writeAttributes(quint64 handle, const UaNodeId &id, QOpcUaNode::AttributeMap toWrite, QOpcUa::Types valueAttributeType)
{
if (toWrite.size() == 0) {
qCWarning(QT_OPCUA_PLUGINS_UACPP, "No values to be written");
@@ -342,7 +400,7 @@ void UACppAsyncBackend::writeAttributes(uintptr_t handle, const UaNodeId &id, QO
}
}
-void UACppAsyncBackend::enableMonitoring(uintptr_t handle, const UaNodeId &id, QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings)
+void UACppAsyncBackend::enableMonitoring(quint64 handle, const UaNodeId &id, QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings)
{
QUACppSubscription *usedSubscription = nullptr;
@@ -391,11 +449,11 @@ void UACppAsyncBackend::enableMonitoring(uintptr_t handle, const UaNodeId &id, Q
removeSubscription(usedSubscription->subscriptionId()); // No items were added
}
-void UACppAsyncBackend::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value)
+void UACppAsyncBackend::modifyMonitoring(quint64 handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value)
{
QUACppSubscription *subscription = getSubscriptionForItem(handle, attr);
if (!subscription) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP, "Could not modify parameter for %lu, the monitored item does not exist", handle);
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not modify" << item << ", the monitored item does not exist";
QOpcUaMonitoringParameters p;
p.setStatusCode(QOpcUa::UaStatusCode::BadMonitoredItemIdInvalid);
emit monitoringStatusChanged(handle, attr, item, p);
@@ -405,7 +463,7 @@ void UACppAsyncBackend::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribute
subscription->modifyMonitoring(handle, attr, item, value);
}
-void UACppAsyncBackend::disableMonitoring(uintptr_t handle, QOpcUa::NodeAttributes attr)
+void UACppAsyncBackend::disableMonitoring(quint64 handle, QOpcUa::NodeAttributes attr)
{
qt_forEachAttribute(attr, [&](QOpcUa::NodeAttribute attribute){
QUACppSubscription *sub = getSubscriptionForItem(handle, attribute);
@@ -417,7 +475,7 @@ void UACppAsyncBackend::disableMonitoring(uintptr_t handle, QOpcUa::NodeAttribut
});
}
-void UACppAsyncBackend::callMethod(uintptr_t handle, const UaNodeId &objectId, const UaNodeId &methodId, QVector<QOpcUa::TypedVariant> args)
+void UACppAsyncBackend::callMethod(quint64 handle, const UaNodeId &objectId, const UaNodeId &methodId, QVector<QOpcUa::TypedVariant> args)
{
ServiceSettings settings;
CallIn in;
@@ -454,9 +512,51 @@ void UACppAsyncBackend::callMethod(uintptr_t handle, const UaNodeId &objectId, c
emit methodCallFinished(handle, UACppUtils::nodeIdToQString(methodId), result, static_cast<QOpcUa::UaStatusCode>(status.statusCode()));
}
+void UACppAsyncBackend::resolveBrowsePath(quint64 handle, const UaNodeId &startNode, const QVector<QOpcUa::QRelativePathElement> &path)
+{
+ ServiceSettings settings;
+ UaDiagnosticInfos diagnosticInfos;
+ UaBrowsePaths paths;
+ UaBrowsePathResults result;
+ UaRelativePathElements pathElements;
+
+ paths.create(1);
+ startNode.copyTo(&paths[0].StartingNode);
+ pathElements.create(path.size());
+
+ for (int i = 0; i < path.size(); ++i) {
+ pathElements[i].IncludeSubtypes = path[i].includeSubtypes();
+ pathElements[i].IsInverse = path[i].isInverse();
+ UaNodeId(UACppUtils::nodeIdFromQString(path[i].referenceTypeId())).copyTo(&pathElements[i].ReferenceTypeId);
+ UaQualifiedName(UaString(path[i].targetName().name().toUtf8().constData()), path[i].targetName().namespaceIndex()).copyTo(&pathElements[i].TargetName);
+ }
+
+ paths[0].RelativePath.Elements = pathElements.detach();
+ paths[0].RelativePath.NoOfElements = path.size();
+
+ UaStatusCode serviceResult = m_nativeSession->translateBrowsePathsToNodeIds(settings, paths, result, diagnosticInfos);
+ QOpcUa::UaStatusCode status = static_cast<QOpcUa::UaStatusCode>(serviceResult.code());
+
+ QVector<QOpcUa::QBrowsePathTarget> ret;
+
+ if (status == QOpcUa::UaStatusCode::Good && result.length()) {
+ status = static_cast<QOpcUa::UaStatusCode>(result[0].StatusCode);
+ for (int i = 0; i < result[0].NoOfTargets; ++i) {
+ QOpcUa::QBrowsePathTarget temp;
+ temp.setRemainingPathIndex(result[0].Targets[i].RemainingPathIndex);
+ temp.targetIdRef().setNamespaceUri(QString::fromUtf8(UaString(result[0].Targets[i].TargetId.NamespaceUri).toUtf8()));
+ temp.targetIdRef().setServerIndex(result[0].Targets[i].TargetId.ServerIndex);
+ temp.targetIdRef().setNodeId(UACppUtils::nodeIdToQString(result[0].Targets[i].TargetId.NodeId));
+ ret.append(temp);
+ }
+ }
+
+ emit resolveBrowsePathFinished(handle, ret, path, status);
+}
+
QUACppSubscription *UACppAsyncBackend::getSubscription(const QOpcUaMonitoringParameters &settings)
{
- if (settings.shared() == QOpcUaMonitoringParameters::SubscriptionType::Shared) {
+ if (settings.subscriptionType() == QOpcUaMonitoringParameters::SubscriptionType::Shared) {
// Requesting multiple subscriptions with publishing interval < minimum publishing interval breaks subscription sharing
double interval = revisePublishingInterval(settings.publishingInterval(), m_minPublishingInterval);
for (auto entry : qAsConst(m_subscriptions)) {
@@ -477,7 +577,7 @@ QUACppSubscription *UACppAsyncBackend::getSubscription(const QOpcUaMonitoringPar
return sub;
}
-QUACppSubscription *UACppAsyncBackend::getSubscriptionForItem(uintptr_t handle, QOpcUa::NodeAttribute attr)
+QUACppSubscription *UACppAsyncBackend::getSubscriptionForItem(quint64 handle, QOpcUa::NodeAttribute attr)
{
auto entriesForHandle = m_attributeMapping.find(handle);
if (entriesForHandle == m_attributeMapping.end())
diff --git a/src/plugins/opcua/uacpp/quacppbackend.h b/src/plugins/opcua/uacpp/quacppbackend.h
index a96db60..a8b9b97 100644
--- a/src/plugins/opcua/uacpp/quacppbackend.h
+++ b/src/plugins/opcua/uacpp/quacppbackend.h
@@ -52,26 +52,28 @@ public Q_SLOTS:
void connectToEndpoint(const QUrl &url);
void disconnectFromEndpoint();
- void browseChildren(uintptr_t handle, const UaNodeId &id, QOpcUa::ReferenceTypeId referenceType, QOpcUa::NodeClasses nodeClassMask);
- void readAttributes(uintptr_t handle, const UaNodeId &id, QOpcUa::NodeAttributes attr, QString indexRange);
- void writeAttribute(uintptr_t handle, const UaNodeId &id, QOpcUa::NodeAttribute attrId, QVariant value, QOpcUa::Types type, QString indexRange);
- void writeAttributes(uintptr_t handle, const UaNodeId &id, QOpcUaNode::AttributeMap toWrite, QOpcUa::Types valueAttributeType);
- void enableMonitoring(uintptr_t handle, const UaNodeId &id, QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings);
- void modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value);
- void disableMonitoring(uintptr_t handle, QOpcUa::NodeAttributes attr);
- void callMethod(uintptr_t handle, const UaNodeId &objectId, const UaNodeId &methodId, QVector<QOpcUa::TypedVariant> args);
+ void browse(quint64 handle, const UaNodeId &id, const QOpcUaBrowseRequest &request);
+ void readAttributes(quint64 handle, const UaNodeId &id, QOpcUa::NodeAttributes attr, QString indexRange);
+ void writeAttribute(quint64 handle, const UaNodeId &id, QOpcUa::NodeAttribute attrId, QVariant value, QOpcUa::Types type, QString indexRange);
+ void writeAttributes(quint64 handle, const UaNodeId &id, QOpcUaNode::AttributeMap toWrite, QOpcUa::Types valueAttributeType);
+ void enableMonitoring(quint64 handle, const UaNodeId &id, QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings);
+ void modifyMonitoring(quint64 handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value);
+ void disableMonitoring(quint64 handle, QOpcUa::NodeAttributes attr);
+ void callMethod(quint64 handle, const UaNodeId &objectId, const UaNodeId &methodId, QVector<QOpcUa::TypedVariant> args);
+ void resolveBrowsePath(quint64 handle, const UaNodeId &startNode, const QVector<QOpcUa::QRelativePathElement> &path);
+ void requestEndpoints(const QUrl &url);
bool removeSubscription(quint32 subscriptionId);
public:
QUACppSubscription *getSubscription(const QOpcUaMonitoringParameters &settings);
- QUACppSubscription *getSubscriptionForItem(uintptr_t handle, QOpcUa::NodeAttribute attr);
+ QUACppSubscription *getSubscriptionForItem(quint64 handle, QOpcUa::NodeAttribute attr);
void cleanupSubscriptions();
Q_DISABLE_COPY(UACppAsyncBackend);
UaClientSdk::UaSession *m_nativeSession;
QUACppClient *m_clientImpl;
QHash<quint32, QUACppSubscription *> m_subscriptions;
- QHash<uintptr_t, QHash<QOpcUa::NodeAttribute, QUACppSubscription *>> m_attributeMapping; // Handle -> Attribute -> Subscription
+ QHash<quint64, QHash<QOpcUa::NodeAttribute, QUACppSubscription *>> m_attributeMapping; // Handle -> Attribute -> Subscription
static quint32 m_numClients;
static bool m_platformLayerInitialized;
QMutex m_lifecycleMutex;
diff --git a/src/plugins/opcua/uacpp/quacppclient.cpp b/src/plugins/opcua/uacpp/quacppclient.cpp
index e0305bc..bd6d784 100644
--- a/src/plugins/opcua/uacpp/quacppclient.cpp
+++ b/src/plugins/opcua/uacpp/quacppclient.cpp
@@ -69,7 +69,14 @@ QOpcUaNode *QUACppClient::node(const QString &nodeId)
UaNodeId nativeId = UACppUtils::nodeIdFromQString(nodeId);
if (nativeId.isNull())
return nullptr;
- return new QOpcUaNode(new QUACppNode(nativeId, this, nodeId), m_client);
+
+ auto tempNode = new QUACppNode(nativeId, this, nodeId);
+ if (!tempNode->registered()) {
+ qCDebug(QT_OPCUA_PLUGINS_UACPP) << "Failed to register node with backend, maximum number of nodes reached.";
+ delete tempNode;
+ return nullptr;
+ }
+ return new QOpcUaNode(tempNode, m_client);
}
QString QUACppClient::backend() const
@@ -77,4 +84,68 @@ QString QUACppClient::backend() const
return QStringLiteral("uacpp");
}
+bool QUACppClient::requestEndpoints(const QUrl &url)
+{
+ return QMetaObject::invokeMethod(m_backend, "requestEndpoints", Qt::QueuedConnection, Q_ARG(QUrl, url));
+}
+
+bool QUACppClient::findServers(const QUrl &url, const QStringList &localeIds, const QStringList &serverUris)
+{
+ Q_UNUSED(url);
+ Q_UNUSED(localeIds);
+ Q_UNUSED(serverUris);
+
+ qCInfo(QT_OPCUA_PLUGINS_UACPP) << "The uacpp backend does not yet support the FindServers service.";
+
+ return false;
+}
+
+bool QUACppClient::batchRead(const QVector<QOpcUaReadItem> &nodesToRead)
+{
+ Q_UNUSED(nodesToRead);
+ qCInfo(QT_OPCUA_PLUGINS_UACPP) << "Batch read is currently not implemented in the uacpp backend";
+ return false;
+}
+
+bool QUACppClient::batchWrite(const QVector<QOpcUaWriteItem> &nodesToWrite)
+{
+ Q_UNUSED(nodesToWrite);
+
+ qCInfo(QT_OPCUA_PLUGINS_UACPP) << "Batch write is currently not implemented in the uacpp backend";
+ return false;
+}
+
+bool QUACppClient::addNode(const QOpcUaAddNodeItem &nodeToAdd)
+{
+ Q_UNUSED(nodeToAdd);
+
+ qCInfo(QT_OPCUA_PLUGINS_UACPP) << "AddNode is not yet supported by the uacpp backend";
+ return false;
+}
+
+bool QUACppClient::deleteNode(const QString &nodeId, bool deleteTargetReferences)
+{
+ Q_UNUSED(nodeId);
+ Q_UNUSED(deleteTargetReferences);
+
+ qCInfo(QT_OPCUA_PLUGINS_UACPP) << "DeleteNode is not yet supported by the uacpp backend";
+ return false;
+}
+
+bool QUACppClient::addReference(const QOpcUaAddReferenceItem &referenceToAdd)
+{
+ Q_UNUSED(referenceToAdd);
+
+ qCInfo(QT_OPCUA_PLUGINS_UACPP) << "AddReference is not yet supported by the uacpp backend";
+ return false;
+}
+
+bool QUACppClient::deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete)
+{
+ Q_UNUSED(referenceToDelete);
+
+ qCInfo(QT_OPCUA_PLUGINS_UACPP) << "deleteReference is not yet supported by the uacpp backend";
+ return false;
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/opcua/uacpp/quacppclient.h b/src/plugins/opcua/uacpp/quacppclient.h
index a5759c4..af16cd2 100644
--- a/src/plugins/opcua/uacpp/quacppclient.h
+++ b/src/plugins/opcua/uacpp/quacppclient.h
@@ -45,6 +45,19 @@ public:
QString backend() const override;
+ bool requestEndpoints(const QUrl &url) override;
+
+ bool findServers(const QUrl &url, const QStringList &localeIds, const QStringList &serverUris) override;
+
+ bool batchRead(const QVector<QOpcUaReadItem> &nodesToRead) override;
+ bool batchWrite(const QVector<QOpcUaWriteItem> &nodesToWrite) override;
+
+ bool addNode(const QOpcUaAddNodeItem &nodeToAdd) override;
+ bool deleteNode(const QString &nodeId, bool deleteTargetReferences) override;
+
+ bool addReference(const QOpcUaAddReferenceItem &referenceToAdd) override;
+ bool deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete) override;
+
private:
friend class QUACppNode;
QThread *m_thread;
diff --git a/src/plugins/opcua/uacpp/quacppnode.cpp b/src/plugins/opcua/uacpp/quacppnode.cpp
index dec71a4..91265f9 100644
--- a/src/plugins/opcua/uacpp/quacppnode.cpp
+++ b/src/plugins/opcua/uacpp/quacppnode.cpp
@@ -34,8 +34,10 @@ QUACppNode::QUACppNode(const UaNodeId nodeId, QUACppClient *client, const QStrin
: m_client(client)
, m_nodeIdString(nodeIdString)
, m_nodeId(nodeId)
+ , m_handle(0)
{
- m_client->registerNode(this);
+ bool success = m_client->registerNode(this);
+ setRegistered(success);
}
QUACppNode::~QUACppNode()
@@ -51,7 +53,7 @@ bool QUACppNode::readAttributes(QOpcUa::NodeAttributes attr, const QString &inde
return QMetaObject::invokeMethod(m_client->m_backend, "readAttributes",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(UaNodeId, m_nodeId),
Q_ARG(QOpcUa::NodeAttributes, attr),
Q_ARG(QString, indexRange));
@@ -64,7 +66,7 @@ bool QUACppNode::enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonit
return QMetaObject::invokeMethod(m_client->m_backend, "enableMonitoring",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(UaNodeId, m_nodeId),
Q_ARG(QOpcUa::NodeAttributes, attr),
Q_ARG(QOpcUaMonitoringParameters, settings));
@@ -77,7 +79,7 @@ bool QUACppNode::disableMonitoring(QOpcUa::NodeAttributes attr)
return QMetaObject::invokeMethod(m_client->m_backend, "disableMonitoring",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(QOpcUa::NodeAttributes, attr));
}
@@ -88,24 +90,22 @@ bool QUACppNode::modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringPa
return QMetaObject::invokeMethod(m_client->m_backend, "modifyMonitoring",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(QOpcUa::NodeAttribute, attr),
Q_ARG(QOpcUaMonitoringParameters::Parameter, item),
Q_ARG(QVariant, value));
}
-bool QUACppNode::browseChildren(QOpcUa::ReferenceTypeId referenceType, QOpcUa::NodeClasses nodeClassMask)
+bool QUACppNode::browse(const QOpcUaBrowseRequest &request)
{
if (!m_client)
return false;
- return QMetaObject::invokeMethod(m_client->m_backend, "browseChildren",
+ return QMetaObject::invokeMethod(m_client->m_backend, "browse",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(UaNodeId, m_nodeId),
- Q_ARG(QOpcUa::ReferenceTypeId, referenceType),
- Q_ARG(QOpcUa::NodeClasses, nodeClassMask));
-
+ Q_ARG(QOpcUaBrowseRequest, request));
}
QString QUACppNode::nodeId() const
@@ -120,7 +120,7 @@ bool QUACppNode::writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant
return QMetaObject::invokeMethod(m_client->m_backend, "writeAttribute",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(UaNodeId, m_nodeId),
Q_ARG(QOpcUa::NodeAttribute, attribute),
Q_ARG(QVariant, value),
@@ -135,7 +135,7 @@ bool QUACppNode::writeAttributes(const QOpcUaNode::AttributeMap &toWrite, QOpcUa
return QMetaObject::invokeMethod(m_client->m_backend, "writeAttributes",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(UaNodeId, m_nodeId),
Q_ARG(QOpcUaNode::AttributeMap, toWrite),
Q_ARG(QOpcUa::Types, valueAttributeType));
@@ -151,10 +151,22 @@ bool QUACppNode::callMethod(const QString &methodNodeId, const QVector<QOpcUa::T
return QMetaObject::invokeMethod(m_client->m_backend, "callMethod",
Qt::QueuedConnection,
- Q_ARG(uintptr_t, reinterpret_cast<uintptr_t>(this)),
+ Q_ARG(quint64, handle()),
Q_ARG(UaNodeId, m_nodeId),
Q_ARG(UaNodeId, methodId),
Q_ARG(QVector<QOpcUa::TypedVariant>, args));
}
+bool QUACppNode::resolveBrowsePath(const QVector<QOpcUa::QRelativePathElement> &path)
+{
+ if (!m_client)
+ return false;
+
+ return QMetaObject::invokeMethod(m_client->m_backend, "resolveBrowsePath",
+ Qt::QueuedConnection,
+ Q_ARG(quint64, handle()),
+ Q_ARG(UaNodeId, m_nodeId),
+ Q_ARG(QVector<QOpcUa::QRelativePathElement>, path));
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/opcua/uacpp/quacppnode.h b/src/plugins/opcua/uacpp/quacppnode.h
index b5f2fad..f8e7220 100644
--- a/src/plugins/opcua/uacpp/quacppnode.h
+++ b/src/plugins/opcua/uacpp/quacppnode.h
@@ -42,7 +42,7 @@ public:
bool enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings) override;
bool disableMonitoring(QOpcUa::NodeAttributes attr) override;
bool modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, const QVariant &value) override;
- bool browseChildren(QOpcUa::ReferenceTypeId referenceType, QOpcUa::NodeClasses nodeClassMask) override;
+ bool browse(const QOpcUaBrowseRequest &request);
QString nodeId() const override;
@@ -50,10 +50,13 @@ public:
bool writeAttributes(const QOpcUaNode::AttributeMap &toWrite, QOpcUa::Types valueAttributeType) override;
bool callMethod(const QString &methodNodeId, const QVector<QOpcUa::TypedVariant> &args) override;
+ bool resolveBrowsePath(const QVector<QOpcUa::QRelativePathElement> &path) override;
+
private:
QPointer<QUACppClient> m_client;
QString m_nodeIdString;
UaNodeId m_nodeId;
+ quint32 m_handle;
};
QT_END_NAMESPACE
diff --git a/src/plugins/opcua/uacpp/quacppsubscription.cpp b/src/plugins/opcua/uacpp/quacppsubscription.cpp
index fba72e1..a4a8edf 100644
--- a/src/plugins/opcua/uacpp/quacppsubscription.cpp
+++ b/src/plugins/opcua/uacpp/quacppsubscription.cpp
@@ -21,11 +21,13 @@
#include "quacppsubscription.h"
#include "quacppclient.h"
+#include "quacpputils.h"
#include "quacppvalueconverter.h"
#include <QtCore/QLoggingCategory>
#include <uaclient/uasession.h>
+#include <uaeventfilterresult.h>
using namespace UaClientSdk;
@@ -89,9 +91,9 @@ bool QUACppSubscription::removeOnServer()
return true;
}
-bool QUACppSubscription::addAttributeMonitoredItem(uintptr_t handle, QOpcUa::NodeAttribute attr, const UaNodeId &id, QOpcUaMonitoringParameters parameters)
+bool QUACppSubscription::addAttributeMonitoredItem(quint64 handle, QOpcUa::NodeAttribute attr, const UaNodeId &id, QOpcUaMonitoringParameters parameters)
{
- qCDebug(QT_OPCUA_PLUGINS_UACPP) << "Adding monitored Item: " << handle << ":" << attr;
+ qCDebug(QT_OPCUA_PLUGINS_UACPP) << "Adding monitored Item for" << attr;
static quint32 monitorId = 100;
UaStatus result;
@@ -111,8 +113,16 @@ bool QUACppSubscription::addAttributeMonitoredItem(uintptr_t handle, QOpcUa::Nod
createRequests[0].RequestedParameters.QueueSize = 1;
createRequests[0].RequestedParameters.DiscardOldest = OpcUa_True;
createRequests[0].MonitoringMode = static_cast<OpcUa_MonitoringMode>(parameters.monitoringMode());
- if (parameters.filter().type() == QVariant::UserType && parameters.filter().userType() == QMetaType::type("QOpcUaMonitoringParameters::DataChangeFilter"))
+ if (parameters.filter().isValid()) {
createRequests[0].RequestedParameters.Filter = createFilter(parameters.filter());
+ if (!createRequests[0].RequestedParameters.Filter.Body.EncodeableObject.Object) {
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Unable to create the monitored item, filter creation failed";
+ QOpcUaMonitoringParameters s;
+ s.setStatusCode(QOpcUa::UaStatusCode::BadInternalError);
+ emit m_backend->monitoringEnableDisable(handle, attr, true, s);
+ return false;
+ }
+ }
result = m_nativeSubscription->createMonitoredItems(settings, OpcUa_TimestampsToReturn_Both,
createRequests, createResults);
@@ -134,6 +144,7 @@ bool QUACppSubscription::addAttributeMonitoredItem(uintptr_t handle, QOpcUa::Nod
s.setLifetimeCount(m_nativeSubscription->lifetimeCount());
s.setStatusCode(static_cast<QOpcUa::UaStatusCode>(result.statusCode()));
s.setSamplingInterval(createResults[0].RevisedSamplingInterval);
+ s.setMonitoredItemId(createResults[0].MonitoredItemId);
// Store information
const auto key = qMakePair(handle, attr);
@@ -142,20 +153,23 @@ bool QUACppSubscription::addAttributeMonitoredItem(uintptr_t handle, QOpcUa::Nod
m_monitoredIds.insert(monitorId, key);
monitorId++;
- s.setFilter(QVariant());
+ if (UaNodeId(createResults[0].FilterResult.TypeId.NodeId) == UaNodeId(OpcUaId_EventFilterResult_Encoding_DefaultBinary, 0))
+ s.setFilterResult(convertEventFilterResult(createResults[0].FilterResult));
+ else
+ s.clearFilterResult(); // The server did not return an EventFilterResult
emit m_backend->monitoringEnableDisable(handle, attr, true, s);
return true;
}
-void QUACppSubscription::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value)
+void QUACppSubscription::modifyMonitoring(quint64 handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value)
{
QOpcUaMonitoringParameters p;
p.setStatusCode(QOpcUa::UaStatusCode::BadNotImplemented);
const auto key = qMakePair(handle, attr);
if (!m_monitoredItems.contains(key)) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP, "Could not modify parameter for %lu, there are no monitored items", handle);
+ qCWarning(QT_OPCUA_PLUGINS_UACPP, "Could not modify parameter, there are no monitored items");
p.setStatusCode(QOpcUa::UaStatusCode::BadAttributeIdInvalid);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
return;
@@ -228,13 +242,13 @@ void QUACppSubscription::modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribut
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
}
-bool QUACppSubscription::removeAttributeMonitoredItem(uintptr_t handle, QOpcUa::NodeAttribute attr)
+bool QUACppSubscription::removeAttributeMonitoredItem(quint64 handle, QOpcUa::NodeAttribute attr)
{
- qCDebug(QT_OPCUA_PLUGINS_UACPP) << "Removing monitored Item: " << handle << ":" << attr;
+ qCDebug(QT_OPCUA_PLUGINS_UACPP) << "Removing monitored Item for" << attr;
- const QPair<uintptr_t, QOpcUa::NodeAttribute> pair(handle, attr);
+ const QPair<quint64, QOpcUa::NodeAttribute> pair(handle, attr);
if (!m_monitoredItems.contains(pair)) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Trying to remove unknown monitored item:" << handle << ":" << attr;
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Trying to remove unknown monitored item for" << attr;
return false;
}
@@ -248,7 +262,7 @@ bool QUACppSubscription::removeAttributeMonitoredItem(uintptr_t handle, QOpcUa::
UaStatusCodeArray removeResults;
result = m_nativeSubscription->deleteMonitoredItems(settings, removeIds, removeResults);
if (result.isBad() || removeResults.length() != 1 || OpcUa_IsBad(removeResults[0])) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Failed to remove monitored item:" << handle << ":" << attr;
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Failed to remove monitored item for" << attr;
return false;
}
@@ -280,7 +294,7 @@ int QUACppSubscription::monitoredItemsCount() const
QOpcUaMonitoringParameters::SubscriptionType QUACppSubscription::shared() const
{
- return m_subscriptionParameters.shared();
+ return m_subscriptionParameters.subscriptionType();
}
void QUACppSubscription::subscriptionStatusChanged(OpcUa_UInt32 clientSubscriptionHandle, const UaStatus &status)
@@ -303,22 +317,33 @@ void QUACppSubscription::dataChange(OpcUa_UInt32 clientSubscriptionHandle, const
continue;
QOpcUaReadResult temp;
- temp.value = var;
- temp.serverTimestamp = QUACppValueConverter::toQDateTime(&dataNotifications[i].Value.ServerTimestamp);
- temp.sourceTimestamp = QUACppValueConverter::toQDateTime(&dataNotifications[i].Value.SourceTimestamp);
- temp.attributeId = m_monitoredIds[monitorId].second;
- temp.statusCode = QOpcUa::UaStatusCode::Good;
+ temp.setValue(var);
+ temp.setServerTimestamp(QUACppValueConverter::toQDateTime(&dataNotifications[i].Value.ServerTimestamp));
+ temp.setSourceTimestamp(QUACppValueConverter::toQDateTime(&dataNotifications[i].Value.SourceTimestamp));
+ temp.setAttribute(m_monitoredIds[monitorId].second);
+ temp.setStatusCode(QOpcUa::UaStatusCode::Good);
- emit m_backend->attributeUpdated(m_monitoredIds[monitorId].first, temp);
+ emit m_backend->dataChangeOccurred(m_monitoredIds[monitorId].first, temp);
}
}
void QUACppSubscription::newEvents(OpcUa_UInt32 clientSubscriptionHandle, UaEventFieldLists &eventFieldList)
{
Q_UNUSED(clientSubscriptionHandle);
- Q_UNUSED(eventFieldList);
- Q_UNIMPLEMENTED();
- qCWarning(QT_OPCUA_PLUGINS_UACPP) << "eventsChange unhandled";
+
+ for (quint32 i = 0; i < eventFieldList.length(); ++i) {
+ const quint32 monitorId = eventFieldList[i].ClientHandle;
+
+ if (!m_monitoredIds.contains(monitorId))
+ continue;
+
+ QVariantList eventFields;
+
+ for (int j = 0; j < eventFieldList[i].NoOfEventFields; ++j)
+ eventFields.append(QUACppValueConverter::toQVariant(eventFieldList[i].EventFields[j]));
+
+ emit m_backend->eventOccurred(m_monitoredIds[monitorId].first, eventFields);
+ }
}
OpcUa_ExtensionObject QUACppSubscription::createFilter(const QVariant &filterData)
@@ -326,23 +351,13 @@ OpcUa_ExtensionObject QUACppSubscription::createFilter(const QVariant &filterDat
OpcUa_ExtensionObject obj;
OpcUa_ExtensionObject_Initialize(&obj);
- if (filterData.type() == QVariant::UserType && filterData.userType() == QMetaType::type("QOpcUaMonitoringParameters::DataChangeFilter")) {
- const QOpcUaMonitoringParameters::DataChangeFilter temp = filterData.value<QOpcUaMonitoringParameters::DataChangeFilter>();
-
- OpcUa_DataChangeFilter *filter = nullptr;
-
- OpcUa_EncodeableObject_CreateExtension(&OpcUa_DataChangeFilter_EncodeableType,
- &obj,
- reinterpret_cast<OpcUa_Void **>(&filter));
-
- if (!filter) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not create DataChangeFilter";
- return obj;
- }
- filter->DeadbandType = static_cast<OpcUa_UInt32>(temp.deadbandType);
- filter->DeadbandValue = static_cast<OpcUa_Double>(temp.deadbandValue);
- filter->Trigger = static_cast<OpcUa_DataChangeTrigger>(temp.trigger);
+ if (filterData.canConvert<QOpcUaMonitoringParameters::DataChangeFilter>()) {
+ createDataChangeFilter(filterData.value<QOpcUaMonitoringParameters::DataChangeFilter>(), &obj);
+ return obj;
+ }
+ if (filterData.canConvert<QOpcUaMonitoringParameters::EventFilter>()) {
+ createEventFilter(filterData.value<QOpcUaMonitoringParameters::EventFilter>(), &obj);
return obj;
}
@@ -352,7 +367,181 @@ OpcUa_ExtensionObject QUACppSubscription::createFilter(const QVariant &filterDat
return obj;
}
-bool QUACppSubscription::modifySubscriptionParameters(uintptr_t handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value)
+void QUACppSubscription::createDataChangeFilter(const QOpcUaMonitoringParameters::DataChangeFilter &filter, OpcUa_ExtensionObject *out)
+{
+ OpcUa_DataChangeFilter *uaFilter = nullptr;
+ OpcUa_EncodeableObject_CreateExtension(&OpcUa_DataChangeFilter_EncodeableType,
+ out, reinterpret_cast<OpcUa_Void **>(&uaFilter));
+ if (!uaFilter) {
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not create DataChangeFilter";
+ return;
+ }
+
+ uaFilter->DeadbandType = static_cast<OpcUa_UInt32>(filter.deadbandType());
+ uaFilter->DeadbandValue = static_cast<OpcUa_Double>(filter.deadbandValue());
+ uaFilter->Trigger = static_cast<OpcUa_DataChangeTrigger>(filter.trigger());
+}
+
+void QUACppSubscription::createEventFilter(const QOpcUaMonitoringParameters::EventFilter &filter, OpcUa_ExtensionObject *out)
+{
+ OpcUa_EventFilter *uaFilter = nullptr; // Use the stack structures because the C++ layer does not support AttributeOperand
+ OpcUa_EncodeableObject_CreateExtension(&OpcUa_EventFilter_EncodeableType,
+ out, reinterpret_cast<OpcUa_Void **>(&uaFilter));
+ if (!uaFilter) {
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not create EventFilter";
+ return;
+ }
+
+ // Select clause
+ if (filter.selectClauses().size()) {
+ UaSimpleAttributeOperands select;
+ select.create(filter.selectClauses().size());
+
+ for (int i = 0; i < filter.selectClauses().size(); ++i) {
+ if (!filter.selectClauses()[i].typeId().isEmpty())
+ UACppUtils::nodeIdFromQString(filter.selectClauses()[i].typeId()).copyTo(&select[i].TypeDefinitionId);
+ UaString(filter.selectClauses()[i].indexRange().toUtf8().constData()).copyTo(&select[i].IndexRange);
+ select[i].AttributeId = QUACppValueConverter::toUaAttributeId(filter.selectClauses()[i].attributeId());
+ UaQualifiedNameArray path;
+ path.create(filter.selectClauses()[i].browsePathRef().size());
+ for (int j = 0; j < filter.selectClauses()[i].browsePathRef().size(); ++j) {
+ UaQualifiedName(UaString(filter.selectClauses()[i].browsePathRef()[j].name().toUtf8().constData()),
+ filter.selectClauses()[i].browsePathRef()[j].namespaceIndex()).copyTo(&path[j]);
+ }
+ select[i].NoOfBrowsePath = filter.selectClauses()[i].browsePathRef().size();
+ select[i].BrowsePath = path.detach();
+ }
+ uaFilter->NoOfSelectClauses = filter.selectClauses().size();
+ uaFilter->SelectClauses = select.detach();
+ }
+
+ // Where clause
+ if (filter.whereClause().size()) {
+ uaFilter->WhereClause.NoOfElements = filter.whereClause().size();
+ uaFilter->WhereClause.Elements = static_cast<OpcUa_ContentFilterElement *>(malloc(filter.whereClause().size()*sizeof(OpcUa_ContentFilterElement)));
+
+ for (int i = 0; i < filter.whereClause().size(); ++i) {
+ uaFilter->WhereClause.Elements[i].FilterOperator = static_cast<OpcUa_FilterOperator>(filter.whereClause()[i].filterOperator());
+ uaFilter->WhereClause.Elements[i].NoOfFilterOperands = filter.whereClause()[i].filterOperandsRef().size();
+ UaExtensionObjectArray operands;
+ operands.create(filter.whereClause()[i].filterOperandsRef().size());
+
+ for (int j = 0; j < filter.whereClause()[i].filterOperandsRef().size(); ++j) {
+ if (filter.whereClause()[i].filterOperandsRef()[j].canConvert<QOpcUa::QElementOperand>()) {
+ OpcUa_ElementOperand *op;
+ OpcUa_EncodeableObject_CreateExtension(&OpcUa_ElementOperand_EncodeableType,
+ &operands[j],
+ reinterpret_cast<OpcUa_Void **>(&op));
+ if (!op) {
+ OpcUa_ExtensionObject_Clear(out);
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not allocate an ElementOperand for the event filter";
+ return;
+ }
+ op->Index = filter.whereClause()[i].filterOperandsRef()[j].value<QOpcUa::QElementOperand>().index();
+ } else if (filter.whereClause()[i].filterOperandsRef()[j].canConvert<QOpcUa::QLiteralOperand>()) {
+ OpcUa_LiteralOperand *op;
+ OpcUa_EncodeableObject_CreateExtension(&OpcUa_LiteralOperand_EncodeableType,
+ &operands[j],
+ reinterpret_cast<OpcUa_Void **>(&op));
+ if (!op) {
+ OpcUa_ExtensionObject_Clear(out);
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not allocate a LiteralOperand for the event filter";
+ return ;
+ }
+ QOpcUa::QLiteralOperand litOp = filter.whereClause()[i].filterOperandsRef()[j].value<QOpcUa::QLiteralOperand>();
+ op->Value = QUACppValueConverter::toUACppVariant(litOp.value(), litOp.type());
+ } else if (filter.whereClause()[i].filterOperandsRef()[j].canConvert<QOpcUa::QSimpleAttributeOperand>()) {
+ OpcUa_SimpleAttributeOperand *op;
+ OpcUa_EncodeableObject_CreateExtension(&OpcUa_SimpleAttributeOperand_EncodeableType,
+ &operands[j],
+ reinterpret_cast<OpcUa_Void **>(&op));
+ if (!op) {
+ OpcUa_ExtensionObject_Clear(out);
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not allocate a SimpleAttributeOperand for the event filter";
+ return;
+ }
+ QOpcUa::QSimpleAttributeOperand operand = filter.whereClause()[i].filterOperandsRef()[j].value<QOpcUa::QSimpleAttributeOperand>();
+ op->AttributeId = QUACppValueConverter::toUaAttributeId(operand.attributeId());
+ UaString(operand.indexRange().toUtf8().constData()).copyTo(&op->IndexRange);
+ if (!operand.typeId().isEmpty())
+ UACppUtils::nodeIdFromQString(operand.typeId()).copyTo(&op->TypeDefinitionId);
+ UaQualifiedNameArray path;
+ path.create(operand.browsePathRef().size());
+ for (int k = 0; k < operand.browsePathRef().size(); ++k) {
+ UaQualifiedName(UaString(operand.browsePathRef()[k].name().toUtf8().constData()), operand.browsePathRef()[k].namespaceIndex()).copyTo(&path[k]);
+ }
+ op->NoOfBrowsePath = operand.browsePathRef().size();
+ op->BrowsePath = path.detach();
+ } else if (filter.whereClause()[i].filterOperandsRef()[j].canConvert<QOpcUa::QAttributeOperand>()) {
+ OpcUa_AttributeOperand *op;
+ OpcUa_EncodeableObject_CreateExtension(&OpcUa_AttributeOperand_EncodeableType,
+ &operands[j],
+ reinterpret_cast<OpcUa_Void **>(&op));
+ if (!op) {
+ OpcUa_ExtensionObject_Clear(out);
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not allocate an AttributeOperand for the event filter";
+ return;
+ }
+ QOpcUa::QAttributeOperand operand = filter.whereClause()[i].filterOperandsRef()[j].value<QOpcUa::QAttributeOperand>();
+ op->AttributeId = QUACppValueConverter::toUaAttributeId(operand.attributeId());
+ UaString(operand.indexRange().toUtf8().constData()).copyTo(&op->IndexRange);
+ if (!operand.nodeId().isEmpty())
+ UACppUtils::nodeIdFromQString(operand.nodeId()).copyTo(&op->NodeId);
+ UaString(operand.alias().toUtf8().constData()).copyTo(&op->Alias);
+ UaRelativePathElements path;
+ path.create(operand.browsePathRef().size());
+ op->BrowsePath.NoOfElements = operand.browsePathRef().size();
+ for (int k = 0; k < operand.browsePathRef().size(); ++k) {
+ path[k].IncludeSubtypes = operand.browsePathRef()[k].includeSubtypes();
+ path[k].IsInverse = operand.browsePathRef()[k].isInverse();
+ if (!operand.browsePathRef()[k].referenceTypeId().isEmpty())
+ UACppUtils::nodeIdFromQString(operand.browsePathRef()[k].referenceTypeId()).copyTo(&path[k].ReferenceTypeId);
+ UaQualifiedName(UaString(operand.browsePathRef()[k].targetName().name().toUtf8().constData()),
+ operand.browsePathRef()[k].targetName().namespaceIndex()).copyTo(&path[k].TargetName);
+ }
+ op->BrowsePath.Elements = path.detach();
+
+ } else {
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Unknown filter operand type for event filter" << filter.whereClause()[i].filterOperands()[j].typeName();
+ OpcUa_ExtensionObject_Clear(out);
+ return;
+ }
+ }
+ uaFilter->WhereClause.Elements[i].FilterOperands = operands.detach();
+ }
+ }
+}
+
+QOpcUa::QEventFilterResult QUACppSubscription::convertEventFilterResult(const OpcUa_ExtensionObject &obj)
+{
+ QOpcUa::QEventFilterResult result;
+
+ if (UaNodeId(obj.TypeId.NodeId) == UaNodeId(OpcUaId_EventFilterResult_Encoding_DefaultBinary, 0)) {
+ UaEventFilterResult filterResult(obj);
+
+ UaStatusCodeArray arr;
+ filterResult.getSelectClauseResults(arr);
+ for (size_t i = 0; i < arr.length(); ++i)
+ result.selectClauseResultsRef().append(static_cast<QOpcUa::UaStatusCode>(arr[i]));
+
+ UaContentFilterResult contentFilterResult = filterResult.getWhereClauseResult();
+
+ UaContentFilterElementResults elementResults;
+ contentFilterResult.getElementResults(elementResults);
+
+ for (size_t i = 0; i < elementResults.length(); ++i) {
+ QOpcUa::QContentFilterElementResult temp;
+ temp.setStatusCode(static_cast<QOpcUa::UaStatusCode>(elementResults[i].StatusCode));
+ for (int j = 0; j < elementResults[i].NoOfOperandStatusCodes; ++j)
+ temp.operandStatusCodesRef().append(static_cast<QOpcUa::UaStatusCode>(elementResults[i].OperandStatusCodes[j]));
+ result.whereClauseResultsRef().append(temp);
+ }
+ }
+
+ return result;
+}
+
+bool QUACppSubscription::modifySubscriptionParameters(quint64 handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value)
{
QOpcUaMonitoringParameters p;
SubscriptionSettings settings;
@@ -369,7 +558,7 @@ bool QUACppSubscription::modifySubscriptionParameters(uintptr_t handle, QOpcUa::
settings.publishingInterval = value.toDouble(&ok);
if (!ok) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP, "Could not modify PublishingInterval for %lu, value is not a double", handle);
+ qCWarning(QT_OPCUA_PLUGINS_UACPP, "Could not modify PublishingInterval, value is not a double");
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
return true;
@@ -381,7 +570,7 @@ bool QUACppSubscription::modifySubscriptionParameters(uintptr_t handle, QOpcUa::
settings.lifetimeCount = value.toUInt(&ok);
if (!ok) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP, "Could not modify LifetimeCount for %lu, value is not an integer", handle);
+ qCWarning(QT_OPCUA_PLUGINS_UACPP, "Could not modify LifetimeCount, value is not an integer");
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
return true;
@@ -393,7 +582,7 @@ bool QUACppSubscription::modifySubscriptionParameters(uintptr_t handle, QOpcUa::
settings.maxKeepAliveCount = value.toUInt(&ok);
if (!ok) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP, "Could not modify MaxKeepAliveCount for %lu, value is not an integer", handle);
+ qCWarning(QT_OPCUA_PLUGINS_UACPP, "Could not modify MaxKeepAliveCount, value is not an integer");
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
return true;
@@ -441,10 +630,10 @@ bool QUACppSubscription::modifySubscriptionParameters(uintptr_t handle, QOpcUa::
return false;
}
-bool QUACppSubscription::modifyMonitoredItemParameters(uintptr_t handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value)
+bool QUACppSubscription::modifyMonitoredItemParameters(quint64 handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value)
{
// Get hold of OpcUa_MonitoredItemCreateResult
- const QPair<uintptr_t, QOpcUa::NodeAttribute> key(handle, attr);
+ const QPair<quint64, QOpcUa::NodeAttribute> key(handle, attr);
if (!m_monitoredItems.contains(key)) {
qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Did not find monitored item";
return false;
@@ -459,15 +648,12 @@ bool QUACppSubscription::modifyMonitoredItemParameters(uintptr_t handle, QOpcUa:
modifyRequest.RequestedParameters.ClientHandle = m_monitoredIds.key(key);
QOpcUaMonitoringParameters p = valuePair.second;
- if (item != QOpcUaMonitoringParameters::Parameter::Filter)
- modifyRequest.RequestedParameters.Filter = createFilter(valuePair.second.filter());
-
bool match = true;
switch (item) {
case QOpcUaMonitoringParameters::Parameter::DiscardOldest: {
if (value.type() != QVariant::Bool) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not modify DiscardOldest for" << handle << ", value is not a bool";
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not modify DiscardOldest, value is not a bool";
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
return true;
@@ -477,7 +663,7 @@ bool QUACppSubscription::modifyMonitoredItemParameters(uintptr_t handle, QOpcUa:
}
case QOpcUaMonitoringParameters::Parameter::QueueSize: {
if (value.type() != QVariant::UInt) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not modify QueueSize for" << handle << ", value is not an integer";
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not modify QueueSize, value is not an integer";
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
return true;
@@ -487,7 +673,7 @@ bool QUACppSubscription::modifyMonitoredItemParameters(uintptr_t handle, QOpcUa:
}
case QOpcUaMonitoringParameters::Parameter::SamplingInterval: {
if (value.type() != QVariant::Double) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not modify SamplingInterval for" << handle << ", value is not a double";
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not modify SamplingInterval, value is not a double";
p.setStatusCode(QOpcUa::UaStatusCode::BadTypeMismatch);
emit m_backend->monitoringStatusChanged(handle, attr, item, p);
return true;
@@ -497,6 +683,12 @@ bool QUACppSubscription::modifyMonitoredItemParameters(uintptr_t handle, QOpcUa:
}
case QOpcUaMonitoringParameters::Parameter::Filter: {
modifyRequest.RequestedParameters.Filter = createFilter(value);
+ if (!modifyRequest.RequestedParameters.Filter.Body.EncodeableObject.Object) {
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Could not modify the filter, filter creation failed";
+ p.setStatusCode(QOpcUa::UaStatusCode::BadInternalError);
+ emit m_backend->monitoringStatusChanged(handle, attr, item, p);
+ return true;
+ }
break;
}
default:
@@ -505,6 +697,16 @@ bool QUACppSubscription::modifyMonitoredItemParameters(uintptr_t handle, QOpcUa:
}
if (match) {
+ if (item != QOpcUaMonitoringParameters::Parameter::Filter && valuePair.second.filter().isValid()) {
+ modifyRequest.RequestedParameters.Filter = createFilter(valuePair.second.filter());
+ if (!modifyRequest.RequestedParameters.Filter.Body.EncodeableObject.Object) {
+ qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Unable to modify the monitored item, filter creation failed";
+ p.setStatusCode(QOpcUa::UaStatusCode::BadInternalError);
+ emit m_backend->monitoringStatusChanged(handle, attr, item, p);
+ return true;
+ }
+ }
+
ServiceSettings service;
UaMonitoredItemModifyRequests requests(1, &modifyRequest);
UaMonitoredItemModifyResults results;
@@ -533,7 +735,18 @@ bool QUACppSubscription::modifyMonitoredItemParameters(uintptr_t handle, QOpcUa:
changed | QOpcUaMonitoringParameters::Parameter::DiscardOldest;
}
+ if (item == QOpcUaMonitoringParameters::Parameter::Filter) {
+ changed |= QOpcUaMonitoringParameters::Parameter::Filter;
+ if (value.canConvert<QOpcUaMonitoringParameters::DataChangeFilter>())
+ p.setFilter(value.value<QOpcUaMonitoringParameters::DataChangeFilter>());
+ else if (value.canConvert<QOpcUaMonitoringParameters::EventFilter>())
+ p.setFilter(value.value<QOpcUaMonitoringParameters::EventFilter>());
+ if (UaNodeId(results[0].FilterResult.TypeId.NodeId) == UaNodeId(OpcUaId_EventFilterResult_Encoding_DefaultBinary, 0))
+ p.setFilterResult(convertEventFilterResult(results[0].FilterResult));
+ }
+
emit m_backend->monitoringStatusChanged(handle, attr, changed, p);
+
m_monitoredItems[key].second = p;
}
return true;
diff --git a/src/plugins/opcua/uacpp/quacppsubscription.h b/src/plugins/opcua/uacpp/quacppsubscription.h
index bbc5f80..e3a7450 100644
--- a/src/plugins/opcua/uacpp/quacppsubscription.h
+++ b/src/plugins/opcua/uacpp/quacppsubscription.h
@@ -39,9 +39,9 @@ public:
bool removeOnServer();
- bool addAttributeMonitoredItem(uintptr_t handle, QOpcUa::NodeAttribute attr, const UaNodeId &id, QOpcUaMonitoringParameters parameters);
- void modifyMonitoring(uintptr_t handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value);
- bool removeAttributeMonitoredItem(uintptr_t handle, QOpcUa::NodeAttribute attr);
+ bool addAttributeMonitoredItem(quint64 handle, QOpcUa::NodeAttribute attr, const UaNodeId &id, QOpcUaMonitoringParameters parameters);
+ void modifyMonitoring(quint64 handle, QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, QVariant value);
+ bool removeAttributeMonitoredItem(quint64 handle, QOpcUa::NodeAttribute attr);
double interval() const;
quint32 subscriptionId() const;
@@ -55,16 +55,19 @@ public:
void newEvents(OpcUa_UInt32 clientSubscriptionHandle, UaEventFieldLists &eventFieldList) override;
private:
OpcUa_ExtensionObject createFilter(const QVariant &filterData);
+ void createDataChangeFilter(const QOpcUaMonitoringParameters::DataChangeFilter &filter, OpcUa_ExtensionObject *out);
+ void createEventFilter(const QOpcUaMonitoringParameters::EventFilter &filter, OpcUa_ExtensionObject *out);
+ QOpcUa::QEventFilterResult convertEventFilterResult(const OpcUa_ExtensionObject &obj);
- bool modifySubscriptionParameters(uintptr_t handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value);
- bool modifyMonitoredItemParameters(uintptr_t handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value);
+ bool modifySubscriptionParameters(quint64 handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value);
+ bool modifyMonitoredItemParameters(quint64 handle, QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::Parameter &item, const QVariant &value);
UACppAsyncBackend *m_backend;
QOpcUaMonitoringParameters m_subscriptionParameters;
UaClientSdk::UaSubscription *m_nativeSubscription;
- QHash<QPair<uintptr_t, QOpcUa::NodeAttribute>,
+ QHash<QPair<quint64, QOpcUa::NodeAttribute>,
QPair<OpcUa_MonitoredItemCreateResult, QOpcUaMonitoringParameters>> m_monitoredItems;
- QHash<quint32, QPair<uintptr_t, QOpcUa::NodeAttribute>> m_monitoredIds;
+ QHash<quint32, QPair<quint64, QOpcUa::NodeAttribute>> m_monitoredIds;
};
QT_END_NAMESPACE
diff --git a/src/plugins/opcua/uacpp/quacpputils.cpp b/src/plugins/opcua/uacpp/quacpputils.cpp
index 940016d..4d5853e 100644
--- a/src/plugins/opcua/uacpp/quacpputils.cpp
+++ b/src/plugins/opcua/uacpp/quacpputils.cpp
@@ -21,6 +21,8 @@
#include "quacpputils.h"
+#include <QtOpcUa/qopcuatype.h>
+
#include <QtCore/QLoggingCategory>
#include <QtCore/QString>
#include <QtCore/QUuid>
@@ -36,50 +38,16 @@ namespace UACppUtils {
UaNodeId nodeIdFromQString(const QString &name)
{
- const int semicolonIndex = name.indexOf(';');
+ quint16 index = 0;
+ char identifierType = 0;
+ QString identifierString;
- if (semicolonIndex <= 0) {
+ bool success = QOpcUa::nodeIdStringSplit(name, &index, &identifierString, &identifierType);
+ if (!success) {
qCWarning(QT_OPCUA_PLUGINS_UACPP, "Unable to split node id string: %s", qUtf8Printable(name));
return UaNodeId();
}
- QStringRef namespaceString = name.leftRef(semicolonIndex);
- if (namespaceString.length() <= 3 || !namespaceString.startsWith(QLatin1String("ns="))) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP, "Not a valid index string in node id string: %s", qUtf8Printable(name));
- return UaNodeId();
- }
- namespaceString = namespaceString.mid(3); // Remove "ns="
-
- QStringRef identifierString = name.midRef(semicolonIndex + 1);
-
- if (identifierString.length() <= 2) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP, "There is no identifier in node id string: %s", qUtf8Printable(name));
- return UaNodeId();
- }
-
- char identifierType;
- if (identifierString.startsWith(QLatin1String("s=")))
- identifierType = 's';
- else if (identifierString.startsWith(QLatin1String("i=")))
- identifierType = 'i';
- else if (identifierString.startsWith(QLatin1String("g=")))
- identifierType = 'g';
- else if (identifierString.startsWith(QLatin1String("b=")))
- identifierType = 'b';
- else {
- qCWarning(QT_OPCUA_PLUGINS_UACPP, "There is no valid identifier type in node id string: %s", qUtf8Printable(name));
- return UaNodeId();
- }
- identifierString = identifierString.mid(2); // Remove identifier type
-
- bool ok = false;
- OpcUa_UInt16 index = static_cast<OpcUa_UInt16>(namespaceString.toUInt(&ok));
-
- if (!ok) {
- qCWarning(QT_OPCUA_PLUGINS_UACPP, "Not a valid namespace index in node id string: %s", qUtf8Printable(name));
- return UaNodeId();
- }
-
switch (identifierType) {
case 'i': {
bool isNumber;
@@ -98,7 +66,7 @@ UaNodeId nodeIdFromQString(const QString &name)
break;
}
case 'g': {
- QUuid uuid(identifierString.toString());
+ QUuid uuid(identifierString);
if (uuid.isNull()) {
qCWarning(QT_OPCUA_PLUGINS_UACPP, "%s does not contain a valid guid identifier", qUtf8Printable(name));
@@ -112,7 +80,7 @@ UaNodeId nodeIdFromQString(const QString &name)
return UaNodeId(guid, index);
}
case 'b': {
- QByteArray temp = QByteArray::fromBase64(identifierString.toLocal8Bit());
+ QByteArray temp = QByteArray::fromBase64(identifierString.toLatin1());
UaByteString bstr((OpcUa_Int32)temp.size(), reinterpret_cast<OpcUa_Byte *>(temp.data()));
if (temp.size() > 0) {
return UaNodeId(bstr, index);
diff --git a/src/plugins/opcua/uacpp/quacppvalueconverter.cpp b/src/plugins/opcua/uacpp/quacppvalueconverter.cpp
index af69d0a..5aa4f5c 100644
--- a/src/plugins/opcua/uacpp/quacppvalueconverter.cpp
+++ b/src/plugins/opcua/uacpp/quacppvalueconverter.cpp
@@ -22,7 +22,7 @@
#include "quacppvalueconverter.h"
#include "quacpputils.h"
-#include <private/qopcuabinarydataencoding_p.h>
+#include <QtOpcUa/qopcuabinarydataencoding.h>
#include <QtCore/QDateTime>
#include <QtCore/QLoggingCategory>
@@ -41,6 +41,8 @@ QT_BEGIN_NAMESPACE
Q_DECLARE_LOGGING_CATEGORY(QT_OPCUA_PLUGINS_UACPP)
+using namespace QOpcUa::NodeIds;
+
namespace QUACppValueConverter {
QOpcUa::Types qvariantTypeToQOpcUaType(QMetaType::Type type)
@@ -136,6 +138,8 @@ OpcUa_BuiltInType toDataType(QOpcUa::Types valueType)
case QOpcUa::AxisInformation:
case QOpcUa::XV:
return OpcUa_BuiltInType::OpcUaType_ExtensionObject;
+ case QOpcUa::ExpandedNodeId:
+ return OpcUa_BuiltInType::OpcUaType_ExpandedNodeId;
default:
qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Trying to convert undefined type:" << valueType;
return OpcUa_BuiltInType::OpcUaType_Null;
@@ -181,8 +185,8 @@ QVariant scalarToQVariant<QString, OpcUa_LocalizedText>(OpcUa_LocalizedText *dat
QOpcUa::QLocalizedText lt;
- lt.locale = QString::fromUtf8(ualtLocal.toUtf8(), ualtLocal.size());
- lt.text = QString::fromUtf8(ualtText.toUtf8(), ualtText.size());
+ lt.setLocale(QString::fromUtf8(ualtLocal.toUtf8(), ualtLocal.size()));
+ lt.setText(QString::fromUtf8(ualtText.toUtf8(), ualtText.size()));
return QVariant::fromValue(lt);
}
@@ -196,8 +200,8 @@ QVariant scalarToQVariant<QOpcUa::QLocalizedText, OpcUa_LocalizedText>(OpcUa_Loc
QOpcUa::QLocalizedText lt;
- lt.locale = QString::fromUtf8(ualtLocal.toUtf8(), ualtLocal.size());
- lt.text = QString::fromUtf8(ualtText.toUtf8(), ualtText.size());
+ lt.setLocale(QString::fromUtf8(ualtLocal.toUtf8(), ualtLocal.size()));
+ lt.setText(QString::fromUtf8(ualtText.toUtf8(), ualtText.size()));
return QVariant::fromValue(lt);
}
@@ -226,12 +230,24 @@ QVariant scalarToQVariant<QUuid, OpcUa_Guid>(OpcUa_Guid *data, QMetaType::Type t
}
template<>
+QVariant scalarToQVariant<QOpcUa::QExpandedNodeId, OpcUa_ExpandedNodeId>(OpcUa_ExpandedNodeId *data, QMetaType::Type type)
+{
+ Q_UNUSED(type)
+ QOpcUa::QExpandedNodeId temp;
+ temp.setServerIndex(data->ServerIndex);
+ temp.setNodeId(UACppUtils::nodeIdToQString(data->NodeId));
+ temp.setNamespaceUri(QString::fromUtf8(UaString(data->NamespaceUri).toUtf8(),
+ UaString(data->NamespaceUri).size()));
+ return temp;
+}
+
+template<>
QVariant scalarToQVariant<QOpcUa::QQualifiedName, OpcUa_QualifiedName>(OpcUa_QualifiedName *data, QMetaType::Type type)
{
Q_UNUSED(type);
QOpcUa::QQualifiedName temp;
- temp.namespaceIndex = data->NamespaceIndex;
- temp.name = scalarToQVariant<QString, OpcUa_String>(&data->Name, QMetaType::Type::QString).toString();
+ temp.setNamespaceIndex(data->NamespaceIndex);
+ temp.setName(scalarToQVariant<QString, OpcUa_String>(&data->Name, QMetaType::Type::QString).toString());
return QVariant::fromValue(temp);
}
@@ -261,14 +277,15 @@ QVariant scalarToQVariant<QVariant, OpcUa_ExtensionObject>(OpcUa_ExtensionObject
return QVariant();
}
- const char *buffer = reinterpret_cast<const char *>(data->Body.EncodeableObject.Object);
- size_t length = data->Body.EncodeableObject.Type->AllocationSize;
+ QByteArray buffer = QByteArray::fromRawData(reinterpret_cast<const char *>(data->Body.EncodeableObject.Object),
+ data->Body.EncodeableObject.Type->AllocationSize);
+ QOpcUaBinaryDataEncoding decoder(&buffer);
bool success = true;
QVariant result;
- QOpcUaBinaryDataEncoding::TypeEncodingId objType = static_cast<QOpcUaBinaryDataEncoding::TypeEncodingId>(data->TypeId.NodeId.Identifier.Numeric);
+ Namespace0 objType = Namespace0(data->TypeId.NodeId.Identifier.Numeric);
switch (objType) {
- case QOpcUaBinaryDataEncoding::TypeEncodingId::EUInformation: {
+ case Namespace0::EUInformation_Encoding_DefaultBinary: {
// ### TODO: Check for non ns=0 cases. Apparently there is an auto-conversion happening in the
// underlaying OpcUA SDK for ns=0 nodes, hence we do not receive a ByteStream, but rather an
// already decoded object. For non ns=0, we might be able to use the generic decoder from the module.
@@ -278,16 +295,16 @@ QVariant scalarToQVariant<QVariant, OpcUa_ExtensionObject>(OpcUa_ExtensionObject
result = QVariant::fromValue(euinfo);
break;
}
- case QOpcUaBinaryDataEncoding::TypeEncodingId::Range:
- result = QVariant::fromValue(QOpcUaBinaryDataEncoding::decode<QOpcUa::QRange>(buffer, length, success));
+ case Namespace0::Range_Encoding_DefaultBinary:
+ result = QVariant::fromValue(decoder.decode<QOpcUa::QRange>(success));
break;
- case QOpcUaBinaryDataEncoding::TypeEncodingId::ComplexNumber:
- result = QVariant::fromValue(QOpcUaBinaryDataEncoding::decode<QOpcUa::QComplexNumber>(buffer, length, success));
+ case Namespace0::ComplexNumberType_Encoding_DefaultBinary:
+ result = QVariant::fromValue(decoder.decode<QOpcUa::QComplexNumber>(success));
break;
- case QOpcUaBinaryDataEncoding::TypeEncodingId::DoubleComplexNumber:
- result = QVariant::fromValue(QOpcUaBinaryDataEncoding::decode<QOpcUa::QDoubleComplexNumber>(buffer, length, success));
+ case Namespace0::DoubleComplexNumberType_Encoding_DefaultBinary:
+ result = QVariant::fromValue(decoder.decode<QOpcUa::QDoubleComplexNumber>(success));
break;
- case QOpcUaBinaryDataEncoding::TypeEncodingId::AxisInformation: {
+ case Namespace0::AxisInformation_Encoding_DefaultBinary: {
UaAxisInformation info(*data);
const UaRange uaRange = info.getEURange();
const UaLocalizedText uaTitle = info.getTitle();
@@ -306,12 +323,12 @@ QVariant scalarToQVariant<QVariant, OpcUa_ExtensionObject>(OpcUa_ExtensionObject
result = QVariant::fromValue(qAxisInfo);
break;
}
- case QOpcUaBinaryDataEncoding::TypeEncodingId::XV:
- result = QVariant::fromValue(QOpcUaBinaryDataEncoding::decode<QOpcUa::QXValue>(buffer, length, success));
+ case Namespace0::XVType_Encoding_DefaultBinary:
+ result = QVariant::fromValue(decoder.decode<QOpcUa::QXValue>(success));
break;
default:
qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Unknown extension object type, returning raw data:" << UACppUtils::nodeIdToQString(data->TypeId.NodeId);
- result = QByteArray(buffer, length);
+ result = QByteArray(buffer.constData(), buffer.size());
success = true;
}
@@ -432,6 +449,24 @@ QVariant arrayToQVariant<QVariant, OpcUa_ExtensionObject *>(const OpcUa_Variant
return scalarToQVariant<QVariant, OpcUa_ExtensionObject>(temp, type);
}
+template<>
+QVariant arrayToQVariant<QOpcUa::QExpandedNodeId, OpcUa_ExpandedNodeId *>(const OpcUa_Variant &var, QMetaType::Type type)
+{
+ if (var.ArrayType == OpcUa_VariantArrayType_Array) {
+ QVariantList list;
+ for (OpcUa_Int32 i = 0; i < var.Value.Array.Length; ++i) {
+ OpcUa_ExpandedNodeId *temp = var.Value.Array.Value.ExpandedNodeIdArray;
+ list.append(scalarToQVariant<QOpcUa::QExpandedNodeId, OpcUa_ExpandedNodeId>(&temp[i], type));
+ }
+ if (list.size() == 1)
+ return list.at(0);
+ else
+ return list;
+ }
+ OpcUa_ExpandedNodeId *temp = var.Value.ExpandedNodeId;
+ return scalarToQVariant<QOpcUa::QExpandedNodeId, OpcUa_ExpandedNodeId>(temp, type);
+}
+
template<typename TARGETTYPE, typename QTTYPE>
void scalarFromQVariant(const QVariant &var, TARGETTYPE *ptr)
{
@@ -443,7 +478,8 @@ void scalarFromQVariant<OpcUa_DateTime, QDateTime>(const QVariant &var, OpcUa_Da
{
// OPC-UA part 3, Table C.9
const QDateTime uaEpochStart(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC);
- const UaDateTime dt = UaDateTime(var.toDateTime().toMSecsSinceEpoch() - uaEpochStart.toMSecsSinceEpoch());
+ // OpcUa time is defined in part 6, 5.2.2.5 in 100ns which need to be converted to milliseconds.
+ const UaDateTime dt = UaDateTime((var.toDateTime().toMSecsSinceEpoch() - uaEpochStart.toMSecsSinceEpoch()) * 10000);
*ptr = dt;
}
@@ -462,10 +498,10 @@ void scalarFromQVariant<OpcUa_LocalizedText, QString>(const QVariant &var, OpcUa
: QOpcUa::QLocalizedText(QLatin1String(""), var.value<QString>());
UaLocalizedText ualt;
- if (lt.locale.size())
- ualt.setLocale(UaString(lt.locale.toUtf8().constData()));
- if (lt.text.size())
- ualt.setText(UaString(lt.text.toUtf8().constData()));
+ if (lt.locale().size())
+ ualt.setLocale(UaString(lt.locale().toUtf8().constData()));
+ if (lt.text().size())
+ ualt.setText(UaString(lt.text().toUtf8().constData()));
ualt.copyTo(ptr);
}
@@ -494,8 +530,8 @@ template<>
void scalarFromQVariant<OpcUa_QualifiedName, QOpcUa::QQualifiedName>(const QVariant &var, OpcUa_QualifiedName *ptr)
{
QOpcUa::QQualifiedName temp = var.value<QOpcUa::QQualifiedName>();
- ptr->NamespaceIndex = temp.namespaceIndex;
- const UaString name(temp.name.toUtf8().constData());
+ ptr->NamespaceIndex = temp.namespaceIndex();
+ const UaString name(temp.name().toUtf8().constData());
name.copyTo(&ptr->Name);
}
@@ -509,7 +545,7 @@ void scalarFromQVariant<OpcUa_Guid, QUuid>(const QVariant &var, OpcUa_Guid *ptr)
memcpy(ptr->Data4, uuid.data4, sizeof(uuid.data4));
}
-void createExtensionObject(QByteArray &data, QOpcUaBinaryDataEncoding::TypeEncodingId id, OpcUa_ExtensionObject *ptr)
+void createExtensionObject(QByteArray &data, Namespace0 id, OpcUa_ExtensionObject *ptr)
{
OpcUa_ExtensionObject_Initialize(ptr);
UaByteArray arr(data.data(), data.length());
@@ -525,8 +561,9 @@ void scalarFromQVariant<OpcUa_ExtensionObject, QOpcUa::QRange>(const QVariant &v
{
const QOpcUa::QRange range = var.value<QOpcUa::QRange>();
QByteArray temp;
- QOpcUaBinaryDataEncoding::encode<QOpcUa::QRange>(range, temp);
- return createExtensionObject(temp, QOpcUaBinaryDataEncoding::TypeEncodingId::Range, ptr);
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ encoder.encode<QOpcUa::QRange>(range);
+ return createExtensionObject(temp, Namespace0::Range_Encoding_DefaultBinary, ptr);
}
template<>
@@ -534,8 +571,9 @@ void scalarFromQVariant<OpcUa_ExtensionObject, QOpcUa::QEUInformation>(const QVa
{
const QOpcUa::QEUInformation info = var.value<QOpcUa::QEUInformation>();
QByteArray temp;
- QOpcUaBinaryDataEncoding::encode<QOpcUa::QEUInformation>(info, temp);
- return createExtensionObject(temp, QOpcUaBinaryDataEncoding::TypeEncodingId::EUInformation, ptr);
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ encoder.encode<QOpcUa::QEUInformation>(info);
+ return createExtensionObject(temp, Namespace0::EUInformation_Encoding_DefaultBinary, ptr);
}
template<>
@@ -543,8 +581,9 @@ void scalarFromQVariant<OpcUa_ExtensionObject, QOpcUa::QComplexNumber>(const QVa
{
const QOpcUa::QComplexNumber num = var.value<QOpcUa::QComplexNumber>();
QByteArray temp;
- QOpcUaBinaryDataEncoding::encode<QOpcUa::QComplexNumber>(num, temp);
- return createExtensionObject(temp, QOpcUaBinaryDataEncoding::TypeEncodingId::ComplexNumber, ptr);
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ encoder.encode<QOpcUa::QComplexNumber>(num);
+ return createExtensionObject(temp, Namespace0::ComplexNumberType_Encoding_DefaultBinary, ptr);
}
template<>
@@ -552,8 +591,9 @@ void scalarFromQVariant<OpcUa_ExtensionObject, QOpcUa::QDoubleComplexNumber>(con
{
const QOpcUa::QDoubleComplexNumber num = var.value<QOpcUa::QDoubleComplexNumber>();
QByteArray temp;
- QOpcUaBinaryDataEncoding::encode<QOpcUa::QDoubleComplexNumber>(num, temp);
- return createExtensionObject(temp, QOpcUaBinaryDataEncoding::TypeEncodingId::DoubleComplexNumber, ptr);
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ encoder.encode<QOpcUa::QDoubleComplexNumber>(num);
+ return createExtensionObject(temp, Namespace0::DoubleComplexNumberType_Encoding_DefaultBinary, ptr);
}
template<>
@@ -561,8 +601,9 @@ void scalarFromQVariant<OpcUa_ExtensionObject, QOpcUa::QAxisInformation>(const Q
{
const QOpcUa::QAxisInformation num = var.value<QOpcUa::QAxisInformation>();
QByteArray temp;
- QOpcUaBinaryDataEncoding::encode<QOpcUa::QAxisInformation>(num, temp);
- return createExtensionObject(temp, QOpcUaBinaryDataEncoding::TypeEncodingId::AxisInformation, ptr);
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ encoder.encode<QOpcUa::QAxisInformation>(num);
+ return createExtensionObject(temp, Namespace0::AxisInformation_Encoding_DefaultBinary, ptr);
}
template<>
@@ -570,8 +611,18 @@ void scalarFromQVariant<OpcUa_ExtensionObject, QOpcUa::QXValue>(const QVariant &
{
const QOpcUa::QXValue num = var.value<QOpcUa::QXValue>();
QByteArray temp;
- QOpcUaBinaryDataEncoding::encode<QOpcUa::QXValue>(num, temp);
- return createExtensionObject(temp, QOpcUaBinaryDataEncoding::TypeEncodingId::XV, ptr);
+ QOpcUaBinaryDataEncoding encoder(&temp);
+ encoder.encode<QOpcUa::QXValue>(num);
+ return createExtensionObject(temp, Namespace0::XVType_Encoding_DefaultBinary, ptr);
+}
+
+template<>
+void scalarFromQVariant<OpcUa_ExpandedNodeId, QOpcUa::QExpandedNodeId>(const QVariant &var, OpcUa_ExpandedNodeId *ptr)
+{
+ const QOpcUa::QExpandedNodeId temp = var.value<QOpcUa::QExpandedNodeId>();
+ ptr->ServerIndex = temp.serverIndex();
+ UACppUtils::nodeIdFromQString(temp.nodeId()).copyTo(&ptr->NodeId);
+ UaString(temp.namespaceUri().toUtf8().constData()).copyTo(&ptr->NamespaceUri);
}
template<typename TARGETTYPE, typename QTTYPE>
@@ -702,6 +753,12 @@ OpcUa_Variant arrayFromQVariant<OpcUa_ExtensionObject, QOpcUa::QXValue>(const QV
return arrayFromQVariantPointer<OpcUa_ExtensionObject, QOpcUa::QXValue>(var, type);
}
+template<>
+OpcUa_Variant arrayFromQVariant<OpcUa_ExpandedNodeId, QOpcUa::QExpandedNodeId>(const QVariant &var, const OpcUa_BuiltInType type)
+{
+ return arrayFromQVariantPointer<OpcUa_ExpandedNodeId, QOpcUa::QExpandedNodeId>(var, type);
+}
+
QVariant toQVariant(const OpcUa_Variant &value)
{
switch (value.Datatype) {
@@ -747,6 +804,8 @@ QVariant toQVariant(const OpcUa_Variant &value)
return arrayToQVariant<QOpcUa::UaStatusCode, OpcUa_StatusCode>(value, QMetaType::UInt);
case OpcUa_BuiltInType::OpcUaType_ExtensionObject:
return arrayToQVariant<QVariant, OpcUa_ExtensionObject *>(value);
+ case OpcUa_BuiltInType::OpcUaType_ExpandedNodeId:
+ return arrayToQVariant<QOpcUa::QExpandedNodeId, OpcUa_ExpandedNodeId *>(value);
default:
qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Variant conversion from UACpp for typeIndex" << value.Datatype << " not implemented";
return QVariant();
@@ -880,6 +939,8 @@ OpcUa_Variant toUACppVariant(const QVariant &value, QOpcUa::Types type)
return arrayFromQVariant<OpcUa_ExtensionObject, QOpcUa::QAxisInformation>(value, dt);
case QOpcUa::XV:
return arrayFromQVariant<OpcUa_ExtensionObject, QOpcUa::QXValue>(value, dt);
+ case QOpcUa::ExpandedNodeId:
+ return arrayFromQVariant<OpcUa_ExpandedNodeId, QOpcUa::QExpandedNodeId>(value, dt);
default:
qCWarning(QT_OPCUA_PLUGINS_UACPP) << "Variant conversion to UACpp for typeIndex" << type << " not implemented";
}
@@ -892,7 +953,9 @@ QDateTime toQDateTime(const OpcUa_DateTime *dt)
// OPC-UA part 3, Table C.9
const QDateTime uaEpochStart(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC);
const UaDateTime temp(*dt);
- return uaEpochStart.addMSecs(temp).toLocalTime();
+
+ // OpcUa time is defined in part 6, 5.2.2.5 in 100ns which need to be converted to milliseconds.
+ return uaEpochStart.addMSecs(((quint64)temp) / 10000).toLocalTime();
}
}
diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index c15ab95..f04f96d 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -1,4 +1,2 @@
TEMPLATE = subdirs
SUBDIRS = opcua
-
-
diff --git a/src/src.pro b/src/src.pro
index f0f812b..9675c1a 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -8,3 +8,8 @@ SUBDIRS += plugins
plugin.subdir = plugins
plugin.target = sub-plugins
plugins.depends = opcua
+
+qtHaveModule(quick) {
+ SUBDIRS += imports
+ imports.depends += opcua
+}
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro
index a0c2827..cb2ff3e 100644
--- a/tests/auto/auto.pro
+++ b/tests/auto/auto.pro
@@ -1,2 +1,9 @@
TEMPLATE = subdirs
SUBDIRS += qopcuaclient
+
+QT_FOR_CONFIG += opcua-private
+
+# only build declarative tests if at least one backend was built
+qtConfig(open62541)|qtConfig(uacpp) {
+ SUBDIRS += declarative
+}
diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/declarative/declarative.pro
new file mode 100644
index 0000000..a484ccf
--- /dev/null
+++ b/tests/auto/declarative/declarative.pro
@@ -0,0 +1,5 @@
+TEMPLATE = app
+TARGET = tst_opcua
+CONFIG += warn_on qmltestcase
+SOURCES += tst_opcua.cpp
+IMPORTPATH += $$PWD/../../../src/plugins/declarative
diff --git a/tests/auto/declarative/tst_absolutenode.qml b/tests/auto/declarative/tst_absolutenode.qml
new file mode 100644
index 0000000..3d2f305
--- /dev/null
+++ b/tests/auto/declarative/tst_absolutenode.qml
@@ -0,0 +1,346 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.3
+import QtTest 1.0
+import QtOpcUa 5.12 as QtOpcUa
+
+Item {
+
+ QtOpcUa.Connection {
+ id: connection
+ backend: connection.availableBackends[0]
+ defaultConnection: true
+ }
+
+ Component.onCompleted: {
+ connection.connectToEndpoint("opc.tcp://127.0.0.1:43344");
+ }
+
+ TestCase {
+ name: "Create String Node Id"
+ when: node1.readyToUse
+
+ function test_nodeTest() {
+ compare(node1.value, "Value", "");
+ compare(node1.browseName, "theStringId");
+ compare(node1.nodeClass, QtOpcUa.Constants.NodeClass.Variable);
+ compare(node1.displayName.text, "theStringId");
+ compare(node1.description.text, "Description for ns=3;s=theStringId");
+ }
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.NodeId {
+ ns: "Test Namespace"
+ identifier: "s=theStringId"
+ }
+ id: node1
+ }
+ }
+
+ TestCase {
+ name: "Create GUID Node Id"
+ when: node2.readyToUse
+
+ function test_nodeTest() {
+ compare(node2.value, "Value", "");
+ }
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.NodeId {
+ ns: "Test Namespace"
+ identifier: "g=08081e75-8e5e-319b-954f-f3a7613dc29b"
+ }
+ id: node2
+ }
+ }
+
+ TestCase {
+ name: "Create Opaque Node Id"
+ when: node3.readyToUse
+
+ function test_nodeTest() {
+ compare(node3.value, "Value", "");
+ }
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.NodeId {
+ ns: "Test Namespace"
+ identifier: "b=UXQgZnR3IQ=="
+ }
+ id: node3
+ }
+ }
+
+ TestCase {
+ name: "Create Integer Node Id"
+ when: node4.readyToUse
+
+ function test_nodeTest() {
+ compare(node4.value, 255, "");
+ }
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.NodeId {
+ ns: "http://opcfoundation.org/UA/"
+ identifier: "i=2267"
+ }
+ id: node4
+ }
+ }
+
+ TestCase {
+ name: "Write Value Node with Multiple Listeners"
+ when: node5.readyToUse && node6.readyToUse && node7.readyToUse
+
+ function test_nodeTest() {
+ var oldValue = node5.value;
+ node6Spy.clear();
+ node7Spy.clear();
+ node5.value = oldValue + 1;
+ tryCompare(node5, "value", oldValue + 1);
+ tryCompare(node6, "value", oldValue + 1);
+ tryCompare(node7, "value", oldValue + 1);
+ wait(100);
+ compare(node6Spy.count, 1);
+ compare(node7Spy.count, 1);
+ }
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.NodeId {
+ ns: "Test Namespace"
+ identifier: "s=TestNode.ReadWrite"
+ }
+ id: node5
+ }
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.NodeId {
+ ns: "Test Namespace"
+ identifier: "s=TestNode.ReadWrite"
+ }
+ id: node6
+ }
+
+ SignalSpy {
+ id: node6Spy
+ target: node6
+ signalName: "valueChanged"
+ }
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.NodeId {
+ ns: "Test Namespace"
+ identifier: "s=TestNode.ReadWrite"
+ }
+ id: node7
+ }
+
+ SignalSpy {
+ id: node7Spy
+ target: node7
+ signalName: "valueChanged"
+ }
+ }
+
+ TestCase {
+ name: "Emitting signals on node changes"
+ when: node8.readyToUse
+
+ function test_changeIdentifier() {
+ node8NamespaceSpy.clear();
+ node8IdentifierSpy.clear();
+ node8NodeIdSpy.clear();
+ node8NodeChangedSpy.clear();
+ node8NodeIdChangedSpy.clear();
+ node8ValueSpy.clear();
+ verify(node8IdentifierSpy.valid);
+ node8.nodeId.identifier = "b=UXQgZnR3IQ==";
+ node8ValueSpy.wait();
+
+ // value has to be undefined because when node IDs are changed
+ // all attributes become undefined before they get the new values.
+ if (node8ValueSpy.count < 2)
+ node8ValueSpy.wait();
+ verify(!node8ValueSpy.signalArguments[0][0]);
+ compare(node8ValueSpy.signalArguments[1][0], "Value");
+
+ compare(node8IdentifierSpy.count, 1);
+ compare(node8NodeIdSpy.count, 1);
+ compare(node8NamespaceSpy.count, 0);
+ verify(node8NodeChangedSpy.count > 0);
+ compare(node8NodeIdChangedSpy.count, 1);
+ compare(node8ValueSpy.count, 2); // first undefined, then the real value
+ compare(node8.value, "Value");
+ }
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.NodeId {
+ ns: "Test Namespace"
+ identifier: "s=TestNode.ReadWrite"
+ }
+ id: node8
+ }
+
+ SignalSpy {
+ id: node8NamespaceSpy
+ target: node8.nodeId
+ signalName: "nodeNamespaceChanged"
+ }
+
+ SignalSpy {
+ id: node8IdentifierSpy
+ target: node8.nodeId
+ signalName: "identifierChanged"
+ }
+
+ SignalSpy {
+ id: node8NodeIdSpy
+ target: node8.nodeId
+ signalName: "nodeChanged"
+ }
+
+ SignalSpy {
+ id: node8NodeChangedSpy
+ target: node8
+ signalName: "nodeChanged"
+ }
+
+ SignalSpy {
+ id: node8NodeIdChangedSpy
+ target: node8
+ signalName: "nodeIdChanged"
+ }
+
+ SignalSpy {
+ id: node8ValueSpy
+ target: node8
+ signalName: "valueChanged"
+ }
+ }
+
+ TestCase {
+ name: "Node with namespace in Id"
+ when: node9.readyToUse
+
+ function test_nodeTest() {
+ compare(node9.value, "Value", "");
+ }
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.NodeId {
+ identifier: "ns=3;s=theStringId"
+ }
+ id: node9
+ }
+ }
+
+ TestCase {
+ name: "Standard attributes on variable node"
+ when: node10.readyToUse
+
+ SignalSpy {
+ id: node10BrowseNameSpy
+ target: node10
+ signalName: "browseNameChanged"
+ }
+
+ SignalSpy {
+ id: node10NodeClassSpy
+ target: node10
+ signalName: "nodeClassChanged"
+ }
+
+ SignalSpy {
+ id: node10DisplayNameSpy
+ target: node10
+ signalName: "displayNameChanged"
+ }
+
+ SignalSpy {
+ id: node10DescriptionSpy
+ target: node10
+ signalName: "descriptionChanged"
+ }
+
+ function test_nodeTest() {
+ compare(node10.browseName, "FullyWritableTest");
+ compare(node10.nodeClass, QtOpcUa.Constants.NodeClass.Variable);
+ compare(node10.displayName.text, "FullyWritableTest");
+ compare(node10.description.text, "Description for ns=3;s=Demo.Static.Scalar.FullyWritable");
+
+ node10BrowseNameSpy.clear();
+ node10NodeClassSpy.clear();
+ node10DisplayNameSpy.clear();
+ node10DescriptionSpy.clear();
+
+ node10.browseName = "modifiedBrowseName";
+ node10BrowseNameSpy.wait();
+ compare(node10BrowseNameSpy.count, 1);
+ node10.browseName = "FullyWritableTest"; // Setting back to default
+
+ // node class is not supposed to be changed: skipping tests
+
+ node10.displayName.text = "modifiedDisplayName";
+ node10DisplayNameSpy.wait();
+ compare(node10DisplayNameSpy.count, 1);
+ node10.displayName.text = "FullyWritableTest"; // Setting back to default
+
+ node10.description.text = "modifiedDescription";
+ node10DescriptionSpy.wait();
+ compare(node10DescriptionSpy.count, 1);
+ node10.description.text = "Description for ns=3;s=Demo.Static.Scalar.FullyWritable"; // Setting back to default
+ }
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.NodeId {
+ ns: "Test Namespace"
+ identifier: "s=Demo.Static.Scalar.FullyWritable"
+ }
+ id: node10
+ }
+ }
+}
diff --git a/tests/auto/declarative/tst_generic.qml b/tests/auto/declarative/tst_generic.qml
new file mode 100644
index 0000000..52a9fdb
--- /dev/null
+++ b/tests/auto/declarative/tst_generic.qml
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.3
+import QtTest 1.0
+import QtOpcUa 5.12 as QtOpcUa
+
+Item {
+ TestCase {
+ name: "Enum exports to QML"
+
+ function test_enumExports() {
+ compare(QtOpcUa.Constants.NodeClass.Method, 4);
+ compare(QtOpcUa.Constants.NodeAttribute.DisplayName, 8);
+
+ // Test return value of undefined node
+ compare(node1.nodeClass, QtOpcUa.Constants.NodeClass.Undefined);
+ }
+
+ QtOpcUa.Node {
+ id: node1
+ }
+ }
+}
diff --git a/tests/auto/declarative/tst_methodnode.qml b/tests/auto/declarative/tst_methodnode.qml
new file mode 100644
index 0000000..6b7fda3
--- /dev/null
+++ b/tests/auto/declarative/tst_methodnode.qml
@@ -0,0 +1,119 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.3
+import QtTest 1.0
+import QtOpcUa 5.12 as QtOpcUa
+
+Item {
+
+ QtOpcUa.Connection {
+ id: connection
+ backend: connection.availableBackends[0]
+ defaultConnection: true
+ }
+
+ Component.onCompleted: {
+ connection.connectToEndpoint("opc.tcp://127.0.0.1:43344");
+ }
+
+ TestCase {
+ name: "Standard attributes on method node"
+ when: node1.readyToUse
+
+ SignalSpy {
+ id: node1BrowseNameSpy
+ target: node1
+ signalName: "browseNameChanged"
+ }
+
+ SignalSpy {
+ id: node1NodeClassSpy
+ target: node1
+ signalName: "nodeClassChanged"
+ }
+
+ SignalSpy {
+ id: node1DisplayNameSpy
+ target: node1
+ signalName: "displayNameChanged"
+ }
+
+ SignalSpy {
+ id: node1DescriptionSpy
+ target: node1
+ signalName: "descriptionChanged"
+ }
+
+ SignalSpy {
+ id: node1ObjectNodeIdSpy
+ target: node1
+ signalName: "objectNodeIdChanged"
+ }
+
+ function test_nodeTest() {
+ compare(node1.browseName, "multiplyArguments");
+ compare(node1.nodeClass, QtOpcUa.Constants.NodeClass.Method);
+ compare(node1.displayName.text, "ns=3;s=Test.Method.Multiply");
+ compare(node1.description.text, "MultiplyDoubles");
+ compare(node1.objectNodeId.ns, "Test Namespace");
+ compare(node1.objectNodeId.identifier, "s=TestFolder");
+
+ compare(node1BrowseNameSpy.count, 1)
+ compare(node1NodeClassSpy.count, 1)
+ compare(node1DisplayNameSpy.count, 1)
+ compare(node1DescriptionSpy.count, 1)
+ compare(node1ObjectNodeIdSpy.count, 0)
+
+ node1.objectNodeId.identifier = "s=foo";
+ node1ObjectNodeIdSpy.wait()
+ compare(node1ObjectNodeIdSpy.count, 1);
+ }
+
+ QtOpcUa.MethodNode {
+ connection: connection
+ nodeId: QtOpcUa.NodeId {
+ ns: "Test Namespace"
+ identifier: "s=Test.Method.Multiply"
+ }
+ objectNodeId: QtOpcUa.NodeId {
+ ns: "Test Namespace"
+ identifier: "s=TestFolder"
+ }
+ id: node1
+ }
+ }
+}
diff --git a/tests/auto/declarative/tst_opcua.cpp b/tests/auto/declarative/tst_opcua.cpp
new file mode 100644
index 0000000..a14b05d
--- /dev/null
+++ b/tests/auto/declarative/tst_opcua.cpp
@@ -0,0 +1,121 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtQuickTest/quicktest.h>
+#include <QObject>
+#include <QProcess>
+#include <QTcpServer>
+#include <QTcpSocket>
+
+class QQmlEngine;
+
+static QString envOrDefault(const char *env, QString def)
+{
+ return qEnvironmentVariableIsSet(env) ? qgetenv(env).constData() : def;
+}
+
+class SetupClass : public QObject
+{
+ Q_OBJECT
+public:
+ SetupClass() {
+ };
+ ~SetupClass() {
+ }
+
+public slots:
+ void applicationAvailable() {
+ const quint16 defaultPort = 43344;
+ const QHostAddress defaultHost(QHostAddress::LocalHost);
+
+ if (qEnvironmentVariableIsEmpty("OPCUA_HOST") && qEnvironmentVariableIsEmpty("OPCUA_PORT")) {
+ m_testServerPath = qApp->applicationDirPath()
+#ifdef Q_OS_WIN
+ + QLatin1String("/..")
+#endif
+ + QLatin1String("/../../open62541-testserver/open62541-testserver")
+#ifdef Q_OS_WIN
+ + QLatin1String(".exe")
+#endif
+ ;
+ qDebug() << "Server Path:" << m_testServerPath;
+ if (!QFile::exists(m_testServerPath)) {
+ qFatal("all auto tests rely on an open62541-based test-server");
+ }
+
+ // In this case the test is supposed to open its own server.
+ // Unfortunately there is no way to check if the server has started up successfully
+ // because of missing error handling.
+ // This checks will detect other servers blocking the port.
+
+ // Check for running server
+ QTcpSocket socket;
+ socket.connectToHost(defaultHost, defaultPort);
+ QVERIFY2(socket.waitForConnected(1500) == false, "Server is already running");
+
+ // Check for running server which does not respond
+ QTcpServer server;
+ QVERIFY2(server.listen(defaultHost, defaultPort) == true, "Port is occupied by another process. Check for defunct server.");
+ server.close();
+
+ qDebug() << "Starting test server";
+ m_serverProcess.setProcessChannelMode(QProcess::ForwardedChannels);
+ m_serverProcess.start(m_testServerPath);
+ QVERIFY2(m_serverProcess.waitForStarted(), qPrintable(m_serverProcess.errorString()));
+ // Let the server come up
+ QTest::qSleep(2000);
+ }
+ QString host = envOrDefault("OPCUA_HOST", defaultHost.toString());
+ QString port = envOrDefault("OPCUA_PORT", QString::number(defaultPort));
+ }
+ void qmlEngineAvailable(QQmlEngine *engine) {
+ Q_UNUSED(engine);
+ // nothing
+ }
+ void cleanupTestCase() {
+ if (m_serverProcess.state() == QProcess::Running) {
+ m_serverProcess.kill();
+ m_serverProcess.waitForFinished(2000);
+ }
+ }
+private:
+ QProcess m_serverProcess;
+ QString m_testServerPath;
+};
+
+QUICK_TEST_MAIN_WITH_SETUP(opcua, SetupClass)
+
+#include "tst_opcua.moc"
diff --git a/tests/auto/declarative/tst_relativenode.qml b/tests/auto/declarative/tst_relativenode.qml
new file mode 100644
index 0000000..0aa0759
--- /dev/null
+++ b/tests/auto/declarative/tst_relativenode.qml
@@ -0,0 +1,299 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the Qt OPC UA module.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.3
+import QtTest 1.0
+import QtOpcUa 5.12 as QtOpcUa
+
+Item {
+
+ QtOpcUa.Connection {
+ id: connection
+ backend: "open62541"
+ defaultConnection: true
+ }
+
+ Component.onCompleted: {
+ connection.connectToEndpoint("opc.tcp://127.0.0.1:43344");
+ }
+
+ TestCase {
+ name: "RelativeNodePath"
+ when: node1.readyToUse
+
+ function test_nodeRead() {
+ tryVerify(function() { return node1.value > 0 });
+ }
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.RelativeNodeId {
+ startNode: QtOpcUa.NodeId {
+ ns: "Test Namespace"
+ identifier: "s=TestFolder"
+ }
+ path: [ QtOpcUa.RelativeNodePath {
+ ns: "Test Namespace"
+ browseName: "TestNode.ReadWrite"
+ }
+ ]
+ }
+ id: node1
+ }
+ }
+
+ TestCase {
+ name: "CascadedRelativeNodePath"
+ when: node2.readyToUse
+
+ function test_nodeRead() {
+ tryVerify(function() { return node2.value > 0 });
+ }
+
+ QtOpcUa.RelativeNodeId {
+ startNode: QtOpcUa.NodeId {
+ ns: "http://opcfoundation.org/UA/"
+ identifier: "i=85"
+ }
+ path: [ QtOpcUa.RelativeNodePath {
+ ns: "Test Namespace"
+ browseName: "TestFolder"
+ }
+ ]
+ id: secondLevelNode
+ }
+
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.RelativeNodeId {
+ startNode: secondLevelNode
+ path: [ QtOpcUa.RelativeNodePath {
+ ns: "Test Namespace"
+ browseName: "TestNode.ReadWrite"
+ }
+ ]
+ }
+ id: node2
+ }
+ }
+
+ TestCase {
+ name: "Emitting signals on node changes"
+ when: node3.readyToUse
+
+ function test_changeStartNode() {
+ node3NamespaceSpy.clear();
+ node3NodeIdSpy.clear();
+ node3NodeChangedSpy.clear();
+ node3NodeIdChangedSpy.clear();
+ node3ValueSpy.clear();
+ node3PathSpy.clear();
+ node3.nodeId.startNode.identifier = "s=TestFolder2";
+ node3ValueSpy.wait();
+
+ // value has to be undefined because when node IDs are changed
+ // all attributes become undefined before they get the new values.
+ if (node3ValueSpy.count < 2)
+ node3ValueSpy.wait();
+ verify(!node3ValueSpy.signalArguments[0][0]);
+ compare(node3ValueSpy.signalArguments[1][0], 0.1);
+
+ compare(node3NodeIdSpy.count, 1);
+ compare(node3NamespaceSpy.count, 0);
+ verify(node3NodeChangedSpy.count > 0);
+ compare(node3PathSpy.count, 0);
+ compare(node3NodeIdChangedSpy.count, 1);
+ compare(node3ValueSpy.count, 2); // first undefined, then the real value
+ compare(node3.value, 0.1);
+ }
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.RelativeNodeId {
+ startNode: QtOpcUa.NodeId {
+ ns: "Test Namespace"
+ identifier: "s=TestFolder"
+ }
+ path: [ QtOpcUa.RelativeNodePath {
+ ns: "Test Namespace"
+ browseName: "TestNode.ReadWrite"
+ }
+ ]
+ }
+ id: node3
+ }
+
+ SignalSpy {
+ id: node3NamespaceSpy
+ target: node3.nodeId
+ signalName: "nodeNamespaceChanged"
+ }
+
+ SignalSpy {
+ id: node3NodeIdSpy
+ target: node3.nodeId
+ signalName: "nodeChanged"
+ }
+
+ SignalSpy {
+ id: node3NodeChangedSpy
+ target: node3
+ signalName: "nodeChanged"
+ }
+
+ SignalSpy {
+ id: node3NodeIdChangedSpy
+ target: node3
+ signalName: "nodeIdChanged"
+ }
+
+ SignalSpy {
+ id: node3ValueSpy
+ target: node3
+ signalName: "valueChanged"
+ }
+
+ SignalSpy {
+ id: node3PathSpy
+ target: node3.nodeId
+ signalName: "pathChanged"
+ }
+ }
+
+ TestCase {
+ name: "Emitting signals on cascaded node changes"
+ when: node4.readyToUse
+
+ function test_nodeRead() {
+ node4NamespaceSpy.clear();
+ node4NodeIdSpy.clear();
+ node4NodeChangedSpy.clear();
+ node4NodeIdChangedSpy.clear();
+ node4ValueSpy.clear();
+ node4PathSpy.clear();
+ node4.nodeId.startNode.path = replacementNode.createObject(parent);
+ node4NodeChangedSpy.wait();
+ node4ValueSpy.wait();
+
+ // value has to be undefined because when node IDs are changed
+ // all attributes become undefined before they get the new values.
+ if (node4ValueSpy.count < 2)
+ node4ValueSpy.wait();
+ verify(!node4ValueSpy.signalArguments[0][0]);
+ compare(node4ValueSpy.signalArguments[1][0], 0.1);
+
+ compare(node4NodeIdSpy.count, 2);
+ compare(node4NamespaceSpy.count, 0);
+ verify(node4NodeChangedSpy.count > 0);
+ compare(node4NodeIdChangedSpy.count, 1);
+ compare(node4ValueSpy.count, 2); // first undefined, then the real value
+ compare(node4.value, 0.1);
+ compare(node4PathSpy.count, 2);
+ }
+
+ QtOpcUa.RelativeNodeId {
+ startNode: QtOpcUa.NodeId {
+ ns: "http://opcfoundation.org/UA/"
+ identifier: "i=85"
+ }
+ path: [ QtOpcUa.RelativeNodePath {
+ ns: "Test Namespace"
+ browseName: "TestFolder"
+ }
+ ]
+ id: secondLevelNode2
+ }
+
+
+ QtOpcUa.ValueNode {
+ connection: connection
+ nodeId: QtOpcUa.RelativeNodeId {
+ startNode: secondLevelNode2
+ path: [ QtOpcUa.RelativeNodePath {
+ ns: "Test Namespace"
+ browseName: "TestNode.ReadWrite"
+ }
+ ]
+ }
+ id: node4
+ }
+
+ Component {
+ id: replacementNode
+ QtOpcUa.RelativeNodePath {
+ ns: "Test Namespace";
+ browseName: "TestFolder2";
+ }
+ }
+
+ SignalSpy {
+ id: node4NamespaceSpy
+ target: node4.nodeId
+ signalName: "nodeNamespaceChanged"
+ }
+
+ SignalSpy {
+ id: node4NodeIdSpy
+ target: node4.nodeId
+ signalName: "nodeChanged"
+ }
+
+ SignalSpy {
+ id: node4NodeChangedSpy
+ target: node4
+ signalName: "nodeChanged"
+ }
+
+ SignalSpy {
+ id: node4NodeIdChangedSpy
+ target: node4
+ signalName: "nodeIdChanged"
+ }
+
+ SignalSpy {
+ id: node4ValueSpy
+ target: node4
+ signalName: "valueChanged"
+ }
+
+ SignalSpy {
+ id: node4PathSpy
+ target: node4.nodeId.startNode
+ signalName: "pathChanged"
+ }
+ }
+}
diff --git a/tests/auto/qopcuaclient/qopcuaclient.pro b/tests/auto/qopcuaclient/qopcuaclient.pro
index 836494e..bae9550 100644
--- a/tests/auto/qopcuaclient/qopcuaclient.pro
+++ b/tests/auto/qopcuaclient/qopcuaclient.pro
@@ -1,6 +1,6 @@
TARGET = tst_qopcuaclient
-QT += testlib opcua
+QT += testlib opcua network
CONFIG += testcase
SOURCES += \
diff --git a/tests/auto/qopcuaclient/tst_client.cpp b/tests/auto/qopcuaclient/tst_client.cpp
index 4e7c1a7..f12a96a 100644
--- a/tests/auto/qopcuaclient/tst_client.cpp
+++ b/tests/auto/qopcuaclient/tst_client.cpp
@@ -37,6 +37,7 @@
#include <QtOpcUa/QOpcUaClient>
#include <QtOpcUa/QOpcUaNode>
#include <QtOpcUa/QOpcUaProvider>
+#include <QtOpcUa/qopcuabinarydataencoding.h>
#include <QtCore/QCoreApplication>
#include <QtCore/QProcess>
@@ -46,6 +47,8 @@
#include <QtTest/QSignalSpy>
#include <QtTest/QtTest>
+#include <QTcpSocket>
+#include <QTcpServer>
class OpcuaConnector
{
@@ -150,7 +153,160 @@ const QVector<QOpcUa::QXValue> testXV = {
QOpcUa::QXValue(-10, 100.5),
QOpcUa::QXValue(10, -100.5)
};
-const int numberOfOperations = 1000;
+const QVector<QUuid> testUuid = {
+ QUuid("e0bd5ccd-f571-4545-9352-61a0f8cb9216"),
+ QUuid("460ebe04-89d8-42f3-a0e0-7b45940f1a4e"),
+ QUuid("72962b91-fa75-4ae6-8d28-b404dc7daf63")
+};
+const QVector<QString> testNodeId = {
+ QStringLiteral("ns=1;i=42"),
+ QStringLiteral("ns=2;s=TestString"),
+ QStringLiteral("ns=3;g=72962b91-fa75-4ae6-8d28-b404dc7daf63")
+};
+const QVector<QDateTime> testDateTime = {
+ QDateTime(QDate(1601, 1, 1), QTime(0, 0)),
+ QDateTime(QDate(2014, 01, 23), QTime(21, 0)),
+ QDateTime(QDate(2300, 01, 01), QTime(12, 0)),
+};
+const QVector<QOpcUa::UaStatusCode> testStatusCode = {
+ QOpcUa::UaStatusCode::Good,
+ QOpcUa::UaStatusCode::BadInvalidArgument,
+ QOpcUa::UaStatusCode::BadNodeIdUnknown
+};
+const QVector<QOpcUa::QExpandedNodeId> testExpandedId = {
+ QOpcUa::QExpandedNodeId(QString(), QLatin1String("ns=1;i=23")),
+ QOpcUa::QExpandedNodeId(QLatin1String("MyNamespace"), QLatin1String("ns=2;s=MyNode")),
+ QOpcUa::QExpandedNodeId(QLatin1String("RemoteNamespace"), QLatin1String("ns=3;b=UXQgZnR3IQ=="), 1)
+};
+const QVector<QOpcUa::QExpandedNodeId> testExpandedNodeId = {
+ QOpcUa::QExpandedNodeId(QStringLiteral("namespace1"), QStringLiteral("ns=0;i=99"), 1),
+ QOpcUa::QExpandedNodeId(QString(), QStringLiteral("ns=1;i=99")),
+ QOpcUa::QExpandedNodeId(QString(), QStringLiteral("ns=1;s=test"))
+};
+const QVector<QOpcUa::QArgument> testArguments = {
+ QOpcUa::QArgument(QStringLiteral("Argument1"), QStringLiteral("ns=0;i=12"), -1,
+ {},QOpcUa::QLocalizedText(QStringLiteral("en"), QStringLiteral("Description1"))),
+ QOpcUa::QArgument(QStringLiteral("Argument2"), QStringLiteral("ns=0;i=12"), 2,
+ {2, 2}, QOpcUa::QLocalizedText(QStringLiteral("en"), QStringLiteral("Description2"))),
+ QOpcUa::QArgument(QStringLiteral("Argument3"), QStringLiteral("ns=0;i=12"), 3,
+ {3, 3, 3}, QOpcUa::QLocalizedText(QStringLiteral("en"), QStringLiteral("Description3")))
+};
+
+#define ENCODE_EXTENSION_OBJECT(obj, index) \
+{ \
+ QVERIFY(index < 3); \
+ obj.setEncoding(QOpcUa::QExtensionObject::Encoding::ByteString); \
+ obj.setEncodingTypeId(QStringLiteral("ns=2;s=MyEncoding%1").arg(index)); \
+ QOpcUaBinaryDataEncoding encoder(obj); \
+ encoder.encode<quint8>(quint8(index)); \
+ encoder.encode<qint8>(qint8(index)); \
+ encoder.encode<quint16>(quint16(index)); \
+ encoder.encode<qint16>(qint16(index)); \
+ encoder.encode<quint32>(quint32(index)); \
+ encoder.encode<qint32>(qint32(index)); \
+ encoder.encode<quint64>(quint64(index)); \
+ encoder.encode<qint64>(qint64(index)); \
+ encoder.encode<float>(float(index)); \
+ encoder.encode<double>(double(index)); \
+ encoder.encode<bool>(bool(index)); \
+ encoder.encode<QString>(QStringLiteral("String %1").arg(index)); \
+ encoder.encode<QOpcUa::QQualifiedName>(QOpcUa::QQualifiedName(2, QStringLiteral("QualifiedName %1").arg(index))); \
+ encoder.encode<QOpcUa::QLocalizedText>(localizedTexts.at(index)); \
+ encoder.encode<QOpcUa::QRange>(testRanges.at(index)); \
+ encoder.encode<QOpcUa::QEUInformation>(testEUInfos.at(index)); \
+ encoder.encode<QOpcUa::QComplexNumber>(testComplex.at(index)); \
+ encoder.encode<QOpcUa::QDoubleComplexNumber>(testDoubleComplex.at(index)); \
+ encoder.encode<QOpcUa::QAxisInformation>(testAxisInfo.at(index)); \
+ encoder.encode<QOpcUa::QXValue>(testXV.at(index)); \
+ encoder.encode<QUuid>(testUuid.at(index)); \
+ encoder.encode<QString, QOpcUa::Types::NodeId>(testNodeId.at(index)); \
+ encoder.encode<QDateTime>(testDateTime.at(index)); \
+ encoder.encode<QOpcUa::UaStatusCode>(testStatusCode.at(index)); \
+ encoder.encode<QOpcUa::QExpandedNodeId>(testExpandedId.at(index)); \
+ QOpcUa::QExtensionObject ext; \
+ ext.setEncodingTypeId(obj.encodingTypeId()); \
+ ext.setEncoding(obj.encoding()); \
+ QOpcUaBinaryDataEncoding encoding2(&ext.encodedBodyRef()); \
+ encoding2.encode<QString>(QStringLiteral("String %1").arg(index)); \
+ encoder.encode<QOpcUa::QExtensionObject>(ext); \
+ encoder.encode<QOpcUa::QArgument>(testArguments.at(index)); \
+}
+
+#define VERIFY_EXTENSION_OBJECT(obj, index) \
+{ \
+ QVERIFY(index < 3); \
+ QCOMPARE(obj.encoding(), QOpcUa::QExtensionObject::Encoding::ByteString); \
+ QCOMPARE(obj.encodingTypeId(), QStringLiteral("ns=2;s=MyEncoding%1").arg(index)); \
+ bool success = false; \
+ QOpcUaBinaryDataEncoding decoder(obj); \
+ QCOMPARE(decoder.offset(), 0); \
+ QCOMPARE(decoder.decode<quint8>(success), quint8(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<qint8>(success), qint8(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<quint16>(success), quint16(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<qint16>(success), qint16(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<quint32>(success), quint32(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<qint32>(success), qint32(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<quint64>(success), quint64(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<qint64>(success), qint64(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<float>(success), float(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<double>(success), double(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<bool>(success), bool(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<QString>(success), QStringLiteral("String %1").arg(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<QOpcUa::QQualifiedName>(success), \
+ QOpcUa::QQualifiedName(2, QStringLiteral("QualifiedName %1").arg(index))); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<QOpcUa::QLocalizedText>(success), localizedTexts.at(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<QOpcUa::QRange>(success), testRanges.at(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<QOpcUa::QEUInformation>(success), testEUInfos.at(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<QOpcUa::QComplexNumber>(success), testComplex.at(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<QOpcUa::QDoubleComplexNumber>(success), testDoubleComplex.at(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<QOpcUa::QAxisInformation>(success), testAxisInfo.at(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<QOpcUa::QXValue>(success), testXV.at(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<QUuid>(success), testUuid.at(index)); \
+ QVERIFY(success == true); \
+ QString temp = decoder.decode<QString, QOpcUa::Types::NodeId>(success); \
+ QCOMPARE(temp, testNodeId.at(index)); \
+ QVERIFY(success == true); \
+ QDateTime dt = decoder.decode<QDateTime>(success); \
+ if (index == 0) \
+ QCOMPARE(dt, QDateTime()); \
+ else \
+ QCOMPARE(dt, testDateTime.at(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<QOpcUa::UaStatusCode>(success), testStatusCode.at(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<QOpcUa::QExpandedNodeId>(success), testExpandedId.at(index)); \
+ QVERIFY(success == true); \
+ QOpcUa::QExtensionObject ext = decoder.decode<QOpcUa::QExtensionObject>(success); \
+ QCOMPARE(ext.encodingTypeId(), obj.encodingTypeId()); \
+ QCOMPARE(ext.encoding(), obj.encoding()); \
+ QVERIFY(success == true); \
+ QOpcUaBinaryDataEncoding decoder2(&ext.encodedBodyRef()); \
+ QCOMPARE(decoder2.decode<QString>(success), QStringLiteral("String %1").arg(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.decode<QOpcUa::QArgument>(success), testArguments.at(index)); \
+ QVERIFY(success == true); \
+ QCOMPARE(decoder.offset(), obj.encodedBody().size()); \
+}
#define defineDataMethod(name) void name()\
{\
@@ -182,14 +338,32 @@ private slots:
defineDataMethod(connectAndDisconnectPassword_data)
void connectAndDisconnectPassword();
+ // Server discovery
+ defineDataMethod(findServers_data)
+ void findServers();
+
+ // Endpoint discovery
+ defineDataMethod(requestEndpoints_data)
+ void requestEndpoints();
+
+ defineDataMethod(compareNodeIds_data)
+ void compareNodeIds();
+ defineDataMethod(readNS0OmitNode_data)
+ void readNS0OmitNode();
defineDataMethod(readInvalidNode_data)
void readInvalidNode();
+ defineDataMethod(requestNotInCache_data)
+ void requestNotInCache();
defineDataMethod(writeInvalidNode_data)
void writeInvalidNode();
defineDataMethod(writeMultipleAttributes_data)
void writeMultipleAttributes();
defineDataMethod(readEmptyArrayVariable_data)
void readEmptyArrayVariable();
+ defineDataMethod(batchWrite_data)
+ void batchWrite();
+ defineDataMethod(batchRead_data)
+ void batchRead();
defineDataMethod(getRootNode_data)
void getRootNode();
@@ -201,6 +375,15 @@ private slots:
void childrenIdsGuidNodeId();
defineDataMethod(childrenIdsOpaqueNodeId_data)
void childrenIdsOpaqueNodeId();
+ defineDataMethod(inverseBrowse_data)
+ void inverseBrowse();
+
+ defineDataMethod(addAndRemoveObjectNode_data)
+ void addAndRemoveObjectNode();
+ defineDataMethod(addAndRemoveVariableNode_data)
+ void addAndRemoveVariableNode();
+ defineDataMethod(addAndRemoveReference_data)
+ void addAndRemoveReference();
defineDataMethod(dataChangeSubscription_data)
void dataChangeSubscription();
@@ -212,6 +395,8 @@ private slots:
void methodCall();
defineDataMethod(methodCallInvalid_data)
void methodCallInvalid();
+ defineDataMethod(readMethodArguments_data)
+ void readMethodArguments();
defineDataMethod(malformedNodeString_data)
void malformedNodeString();
defineDataMethod(nodeIdGeneration_data)
@@ -247,6 +432,8 @@ private slots:
void addDuplicateMonitoredItem();
defineDataMethod(checkMonitoredItemCleanup_data);
void checkMonitoredItemCleanup();
+ defineDataMethod(checkAttributeUpdated_data);
+ void checkAttributeUpdated();
defineDataMethod(stringCharset_data)
void stringCharset();
@@ -254,11 +441,33 @@ private slots:
defineDataMethod(namespaceArray_data)
void namespaceArray();
+ defineDataMethod(multiDimensionalArray_data)
+ void multiDimensionalArray();
+
defineDataMethod(dateTimeConversion_data)
void dateTimeConversion();
defineDataMethod(timeStamps_data)
void timeStamps();
+ defineDataMethod(createNodeFromExpandedId_data)
+ void createNodeFromExpandedId();
+ defineDataMethod(checkExpandedIdConversion_data)
+ void checkExpandedIdConversion();
+ defineDataMethod(checkExpandedIdConversionNoOk_data)
+ void checkExpandedIdConversionNoOk();
+ defineDataMethod(createQualifiedName_data)
+ void createQualifiedName();
+ defineDataMethod(createQualifiedNameNoOk_data)
+ void createQualifiedNameNoOk();
+ defineDataMethod(addNamespace_data)
+ void addNamespace();
+
+ void fixedTimestamp();
+ defineDataMethod(fixedTimestamp_data)
+
+ defineDataMethod(resolveBrowsePath_data)
+ void resolveBrowsePath();
+
// This test case restarts the server. It must be run last to avoid
// destroying state required by other test cases.
defineDataMethod(connectionLost_data)
@@ -284,7 +493,7 @@ private:
NODE->readAttributes(QOpcUaNode::mandatoryBaseAttributes()); \
attributeReadSpy.wait(); \
QCOMPARE(attributeReadSpy.count(), 1); \
- QVERIFY(attributeReadSpy.at(0).at(0).value<QOpcUa::NodeAttributes>() == QOpcUaNode::mandatoryBaseAttributes()); \
+ QCOMPARE(attributeReadSpy.at(0).at(0).value<QOpcUa::NodeAttributes>(), QOpcUaNode::mandatoryBaseAttributes()); \
QVERIFY(QOpcUa::isSuccessStatus(NODE->attributeError(QOpcUa::NodeAttribute::NodeId)) == true); \
QVERIFY(QOpcUa::isSuccessStatus(NODE->attributeError(QOpcUa::NodeAttribute::NodeClass)) == true); \
QVERIFY(QOpcUa::isSuccessStatus(NODE->attributeError(QOpcUa::NodeAttribute::BrowseName)) == true); \
@@ -297,7 +506,7 @@ private:
NODE->readAttributes(QOpcUaNode::mandatoryBaseAttributes() | QOpcUa::NodeAttribute::Value); \
attributeReadSpy.wait(); \
QCOMPARE(attributeReadSpy.count(), 1); \
- QVERIFY(attributeReadSpy.at(0).at(0).value<QOpcUa::NodeAttributes>() == (QOpcUaNode::mandatoryBaseAttributes() | QOpcUa::NodeAttribute::Value)); \
+ QCOMPARE(attributeReadSpy.at(0).at(0).value<QOpcUa::NodeAttributes>(), (QOpcUaNode::mandatoryBaseAttributes() | QOpcUa::NodeAttribute::Value)); \
QVERIFY(QOpcUa::isSuccessStatus(NODE->attributeError(QOpcUa::NodeAttribute::NodeId)) == true); \
QVERIFY(QOpcUa::isSuccessStatus(NODE->attributeError(QOpcUa::NodeAttribute::NodeClass)) == true); \
QVERIFY(QOpcUa::isSuccessStatus(NODE->attributeError(QOpcUa::NodeAttribute::BrowseName)) == true); \
@@ -322,12 +531,10 @@ Tst_QOpcUaClient::Tst_QOpcUaClient()
void Tst_QOpcUaClient::initTestCase()
{
- for (const auto &backend: m_backends) {
- if (backend == QStringLiteral("freeopcua") && qEnvironmentVariable("QTEST_ENVIRONMENT").split(' ').contains(QLatin1String("ci"))) {
- qDebug() << "The freeopcua tests randomly fail in the CI and are disabled by default";
- continue;
- }
+ const quint16 defaultPort = 43344;
+ const QHostAddress defaultHost(QHostAddress::LocalHost);
+ for (const auto &backend: m_backends) {
QOpcUaClient *client = m_opcUa.createClient(backend);
QVERIFY2(client != nullptr,
QString("Loading backend failed: %1").arg(backend).toLatin1().data());
@@ -351,13 +558,28 @@ void Tst_QOpcUaClient::initTestCase()
QSKIP("all auto tests rely on an open62541-based test-server");
}
+ // In this case the test is supposed to open its own server.
+ // Unfortunately there is no way to check if the server has started up successfully
+ // because of missing error handling.
+ // This checks will detect other servers blocking the port.
+
+ // Check for running server
+ QTcpSocket socket;
+ socket.connectToHost(defaultHost, defaultPort);
+ QVERIFY2(socket.waitForConnected(1500) == false, "Server is already running");
+
+ // Check for running server which does not respond
+ QTcpServer server;
+ QVERIFY2(server.listen(defaultHost, defaultPort) == true, "Port is occupied by another process. Check for defunct server.");
+ server.close();
+
m_serverProcess.start(m_testServerPath);
QVERIFY2(m_serverProcess.waitForStarted(), qPrintable(m_serverProcess.errorString()));
// Let the server come up
QTest::qSleep(2000);
}
- QString host = envOrDefault("OPCUA_HOST", "localhost");
- QString port = envOrDefault("OPCUA_PORT", "43344");
+ QString host = envOrDefault("OPCUA_HOST", defaultHost.toString());
+ QString port = envOrDefault("OPCUA_PORT", QString::number(defaultPort));
m_endpoint = QString("opc.tcp://%1:%2").arg(host).arg(port);
qDebug() << "Using endpoint:" << m_endpoint;
}
@@ -373,13 +595,13 @@ void Tst_QOpcUaClient::connectToInvalid()
QTest::qWait(50);
if (opcuaClient->state() == QOpcUaClient::Disconnected)
break;
- QVERIFY(opcuaClient->state() == QOpcUaClient::Connecting);
+ QCOMPARE(opcuaClient->state(), QOpcUaClient::Connecting);
}
QVERIFY(opcuaClient->state() == QOpcUaClient::Connected ||
opcuaClient->state() == QOpcUaClient::Disconnected);
QUrl url = opcuaClient->url();
- QVERIFY(url == QUrl("opc.tcp:127.0.0.1:1234"));
+ QCOMPARE(url, QUrl("opc.tcp:127.0.0.1:1234"));
}
void Tst_QOpcUaClient::connectAndDisconnect()
@@ -399,14 +621,12 @@ void Tst_QOpcUaClient::connectInvalidPassword()
QSignalSpy connectSpy(opcuaClient, &QOpcUaClient::stateChanged);
opcuaClient->connectToEndpoint(url);
- connectSpy.wait();
+ QTRY_VERIFY_WITH_TIMEOUT(connectSpy.count() == 2, 3000);
+ QCOMPARE(connectSpy.at(0).at(0), QOpcUaClient::Connecting);
+ QCOMPARE(connectSpy.at(1).at(0), QOpcUaClient::Disconnected);
- QVERIFY(connectSpy.count() == 2);
- QVERIFY(connectSpy.at(0).at(0) == QOpcUaClient::Connecting);
- QVERIFY(connectSpy.at(1).at(0) == QOpcUaClient::Disconnected);
-
- QVERIFY(opcuaClient->url() == url);
- QVERIFY(opcuaClient->error() == QOpcUaClient::AccessDenied);
+ QCOMPARE(opcuaClient->url(), url);
+ QCOMPARE(opcuaClient->error(), QOpcUaClient::AccessDenied);
}
void Tst_QOpcUaClient::connectAndDisconnectPassword()
@@ -422,19 +642,142 @@ void Tst_QOpcUaClient::connectAndDisconnectPassword()
opcuaClient->connectToEndpoint(url);
connectSpy.wait();
- QVERIFY(connectSpy.count() == 2);
- QVERIFY(connectSpy.at(0).at(0) == QOpcUaClient::Connecting);
- QVERIFY(connectSpy.at(1).at(0) == QOpcUaClient::Connected);
+ QCOMPARE(connectSpy.count(), 2);
+ QCOMPARE(connectSpy.at(0).at(0), QOpcUaClient::Connecting);
+ QCOMPARE(connectSpy.at(1).at(0), QOpcUaClient::Connected);
- QVERIFY(opcuaClient->url() == url);
- QVERIFY(opcuaClient->error() == QOpcUaClient::NoError);
+ QCOMPARE(opcuaClient->url(), url);
+ QCOMPARE(opcuaClient->error(), QOpcUaClient::NoError);
connectSpy.clear();
opcuaClient->disconnectFromEndpoint();
connectSpy.wait();
- QVERIFY(connectSpy.count() == 2);
- QVERIFY(connectSpy.at(0).at(0) == QOpcUaClient::Closing);
- QVERIFY(connectSpy.at(1).at(0) == QOpcUaClient::Disconnected);
+ QCOMPARE(connectSpy.count(), 2);
+ QCOMPARE(connectSpy.at(0).at(0), QOpcUaClient::Closing);
+ QCOMPARE(connectSpy.at(1).at(0), QOpcUaClient::Disconnected);
+}
+
+void Tst_QOpcUaClient::findServers()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ if (opcuaClient->backend() != QStringLiteral("open62541"))
+ QSKIP("FindServers is not yet supported in uacpp.");
+
+ QSignalSpy discoverySpy(opcuaClient, &QOpcUaClient::findServersFinished);
+
+ opcuaClient->findServers(m_endpoint);
+
+ discoverySpy.wait();
+
+ QCOMPARE(discoverySpy.size(), 1);
+
+ QCOMPARE(discoverySpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+ QVector<QOpcUa::QApplicationDescription> servers = discoverySpy.at(0).at(0).value<QVector<QOpcUa::QApplicationDescription>>();
+ QCOMPARE(servers.size(), 1);
+
+ QCOMPARE(servers.at(0).applicationName(), QOpcUa::QLocalizedText(QStringLiteral("en"), QStringLiteral("open62541-based OPC UA Application")));
+ QCOMPARE(servers.at(0).applicationUri(), QStringLiteral("urn:unconfigured:application"));
+ QCOMPARE(servers.at(0).discoveryUrls().size(), 1);
+}
+
+void Tst_QOpcUaClient::requestEndpoints()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ QSignalSpy endpointSpy(opcuaClient, &QOpcUaClient::endpointsRequestFinished);
+
+ opcuaClient->requestEndpoints(m_endpoint);
+ endpointSpy.wait();
+ QCOMPARE(endpointSpy.size(), 1);
+
+ QVector<QOpcUa::QEndpointDescription> desc = endpointSpy.at(0).at(0).value<QVector<QOpcUa::QEndpointDescription>>();
+ QVERIFY(desc.size() > 0);
+
+ QCOMPARE(QUrl(desc[0].endpointUrl()).port(), 43344);
+ QCOMPARE(desc[0].securityPolicyUri(), QStringLiteral("http://opcfoundation.org/UA/SecurityPolicy#None"));
+ QCOMPARE(desc[0].transportProfileUri(), QStringLiteral("http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary"));
+ QCOMPARE(desc[0].securityLevel(), 0);
+ QCOMPARE(desc[0].securityMode(), QOpcUa::QEndpointDescription::MessageSecurityMode::None);
+ QCOMPARE(desc[0].serverCertificate(), QByteArray());
+
+ QCOMPARE(desc[0].userIdentityTokens().size(), 2);
+ QCOMPARE(desc[0].userIdentityTokens()[0].policyId(), QStringLiteral("open62541-anonymous-policy"));
+ QCOMPARE(desc[0].userIdentityTokens()[0].tokenType(), QOpcUa::QUserTokenPolicy::TokenType::Anonymous);
+ QCOMPARE(desc[0].userIdentityTokens()[1].policyId(), QStringLiteral("open62541-username-policy"));
+ QCOMPARE(desc[0].userIdentityTokens()[1].tokenType(), QOpcUa::QUserTokenPolicy::TokenType::Username);
+
+ QCOMPARE(desc[0].serverRef().applicationName().text(), QStringLiteral("open62541-based OPC UA Application"));
+ QCOMPARE(desc[0].serverRef().applicationType(), QOpcUa::QApplicationDescription::ApplicationType::Server);
+ QCOMPARE(desc[0].serverRef().applicationUri(), QStringLiteral("urn:unconfigured:application"));
+ QCOMPARE(desc[0].serverRef().productUri(), QStringLiteral("http://open62541.org"));
+}
+
+void Tst_QOpcUaClient::compareNodeIds()
+{
+ const QString numericId = QStringLiteral("i=42");
+ const QString stringId = QStringLiteral ("s=TestString");
+ const QString guidId = QStringLiteral("g=72962b91-fa75-4ae6-8d28-b404dc7daf63");
+ const QString opaqueId = QStringLiteral("b=UXQgZnR3IQ==");
+
+ const QString prefix = QStringLiteral("ns=0;");
+
+ QVERIFY(QOpcUa::nodeIdEquals(numericId, prefix + numericId));
+ QVERIFY(QOpcUa::nodeIdEquals(stringId, prefix + stringId));
+ QVERIFY(QOpcUa::nodeIdEquals(guidId, prefix + guidId));
+ QVERIFY(QOpcUa::nodeIdEquals(opaqueId, prefix + opaqueId));
+
+ {
+ quint16 namespaceIndex = 1;
+ char identifierType = 0;
+ QString identifier;
+ QVERIFY(QOpcUa::nodeIdStringSplit(numericId, &namespaceIndex, &identifier, &identifierType));
+ QCOMPARE(namespaceIndex, 0);
+ QCOMPARE(identifierType, 'i');
+ QCOMPARE(identifier, QStringLiteral("42"));
+ }
+ {
+ quint16 namespaceIndex = 1;
+ char identifierType = 0;
+ QString identifier;
+ QVERIFY(QOpcUa::nodeIdStringSplit(stringId, &namespaceIndex, &identifier, &identifierType));
+ QCOMPARE(namespaceIndex, 0);
+ QCOMPARE(identifierType, 's');
+ QCOMPARE(identifier, QStringLiteral("TestString"));
+ }
+ {
+ quint16 namespaceIndex = 1;
+ char identifierType = 0;
+ QString identifier;
+ QVERIFY(QOpcUa::nodeIdStringSplit(guidId, &namespaceIndex, &identifier, &identifierType));
+ QCOMPARE(namespaceIndex, 0);
+ QCOMPARE(identifierType, 'g');
+ QCOMPARE(identifier, QStringLiteral("72962b91-fa75-4ae6-8d28-b404dc7daf63"));
+ }
+ {
+ quint16 namespaceIndex = 1;
+ char identifierType = 0;
+ QString identifier;
+ QVERIFY(QOpcUa::nodeIdStringSplit(opaqueId, &namespaceIndex, &identifier, &identifierType));
+ QCOMPARE(namespaceIndex, 0);
+ QCOMPARE(identifierType, 'b');
+ QCOMPARE(identifier, QStringLiteral("UXQgZnR3IQ=="));
+ }
+}
+
+void Tst_QOpcUaClient::readNS0OmitNode()
+{
+ QFETCH(QOpcUaClient*, opcuaClient);
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node("i=84")); // Root node
+ QVERIFY(node != nullptr);
+
+ READ_MANDATORY_BASE_NODE(node);
+
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::BrowseName).value<QOpcUa::QQualifiedName>(),
+ QOpcUa::QQualifiedName(0, QStringLiteral("Root")));
}
void Tst_QOpcUaClient::readInvalidNode()
@@ -444,8 +787,8 @@ void Tst_QOpcUaClient::readInvalidNode()
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=0;s=doesnotexist"));
- QVERIFY(node != 0);
- QCOMPARE(node->attribute(QOpcUa::NodeAttribute::DisplayName).value<QOpcUa::QLocalizedText>().text, QString());
+ QVERIFY(node != nullptr);
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::DisplayName).value<QOpcUa::QLocalizedText>().text(), QString());
QSignalSpy attributeReadSpy(node.data(), &QOpcUaNode::attributeRead);
@@ -457,10 +800,24 @@ void Tst_QOpcUaClient::readInvalidNode()
QCOMPARE(node->attribute(QOpcUa::NodeAttribute::DisplayName), QVariant());
QCOMPARE(node->attributeError(QOpcUa::NodeAttribute::DisplayName), QOpcUa::UaStatusCode::BadNodeIdUnknown);
- QVERIFY(QOpcUa::errorCategory(node->attributeError(QOpcUa::NodeAttribute::DisplayName)) == QOpcUa::ErrorCategory::NodeError);
+ QCOMPARE(QOpcUa::errorCategory(node->attributeError(QOpcUa::NodeAttribute::DisplayName)), QOpcUa::ErrorCategory::NodeError);
QVERIFY(QOpcUa::isSuccessStatus(node->attributeError(QOpcUa::NodeAttribute::DisplayName)) == false);
}
+void Tst_QOpcUaClient::requestNotInCache()
+{
+ QFETCH(QOpcUaClient*, opcuaClient);
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::RootFolder)));
+ QVERIFY(node != nullptr);
+
+ QCOMPARE(node->attributeError(QOpcUa::NodeAttribute::BrowseName), QOpcUa::UaStatusCode::BadNoEntryExists);
+ QCOMPARE(node->valueAttributeError(), QOpcUa::UaStatusCode::BadNoEntryExists);
+ QCOMPARE(node->monitoringStatus(QOpcUa::NodeAttribute::Value).statusCode(), QOpcUa::UaStatusCode::BadNoEntryExists);
+}
+
void Tst_QOpcUaClient::writeInvalidNode()
{
QFETCH(QOpcUaClient*, opcuaClient);
@@ -468,7 +825,7 @@ void Tst_QOpcUaClient::writeInvalidNode()
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=0;s=doesnotexist"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
QSignalSpy responseSpy(node.data(),&QOpcUaNode::attributeWritten);
bool result = node->writeAttribute(QOpcUa::NodeAttribute::Value, 10, QOpcUa::Types::Int32);
@@ -488,11 +845,11 @@ void Tst_QOpcUaClient::writeMultipleAttributes()
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=Demo.Static.Scalar.QualifiedName"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
QOpcUaNode::AttributeMap map;
- map[QOpcUa::NodeAttribute::DisplayName] = QVariant::fromValue(QOpcUa::QLocalizedText(QStringLiteral("en"), QStringLiteral("NewDisplayName")));
- map[QOpcUa::NodeAttribute::Value] = QVariant::fromValue(QOpcUa::QQualifiedName(2, QStringLiteral("TestString")));
+ map[QOpcUa::NodeAttribute::DisplayName] = QOpcUa::QLocalizedText(QStringLiteral("en"), QStringLiteral("NewDisplayName"));
+ map[QOpcUa::NodeAttribute::Value] = QOpcUa::QQualifiedName(2, QStringLiteral("TestString"));
QSignalSpy writeSpy(node.data(), &QOpcUaNode::attributeWritten);
@@ -502,16 +859,16 @@ void Tst_QOpcUaClient::writeMultipleAttributes()
if (writeSpy.size() < 2)
writeSpy.wait();
- QVERIFY(writeSpy.size() == 2);
- QVERIFY(writeSpy.at(0).at(0).value<QOpcUa::NodeAttribute>() == QOpcUa::NodeAttribute::DisplayName);
- QVERIFY(writeSpy.at(0).at(1).value<QOpcUa::UaStatusCode>() == QOpcUa::UaStatusCode::BadUserAccessDenied);
- QVERIFY(node->attributeError(QOpcUa::NodeAttribute::DisplayName) == QOpcUa::UaStatusCode::BadUserAccessDenied);
- QVERIFY(QOpcUa::errorCategory(node->attributeError(QOpcUa::NodeAttribute::DisplayName)) == QOpcUa::ErrorCategory::PermissionError);
+ QCOMPARE(writeSpy.size(), 2);
+ QCOMPARE(writeSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::DisplayName);
+ QCOMPARE(writeSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::BadUserAccessDenied);
+ QCOMPARE(node->attributeError(QOpcUa::NodeAttribute::DisplayName), QOpcUa::UaStatusCode::BadUserAccessDenied);
+ QCOMPARE(QOpcUa::errorCategory(node->attributeError(QOpcUa::NodeAttribute::DisplayName)), QOpcUa::ErrorCategory::PermissionError);
- QVERIFY(writeSpy.at(1).at(0).value<QOpcUa::NodeAttribute>() == QOpcUa::NodeAttribute::Value);
- QVERIFY(writeSpy.at(1).at(1).value<QOpcUa::UaStatusCode>() == QOpcUa::UaStatusCode::Good);
- QVERIFY(node->attributeError(QOpcUa::NodeAttribute::Value) == QOpcUa::UaStatusCode::Good);
- QVERIFY(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QQualifiedName>() == QOpcUa::QQualifiedName(2, QStringLiteral("TestString")));
+ QCOMPARE(writeSpy.at(1).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::Value);
+ QCOMPARE(writeSpy.at(1).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+ QCOMPARE(node->attributeError(QOpcUa::NodeAttribute::Value), QOpcUa::UaStatusCode::Good);
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QQualifiedName>(), QOpcUa::QQualifiedName(2, QStringLiteral("TestString")));
}
void Tst_QOpcUaClient::readEmptyArrayVariable()
@@ -520,26 +877,129 @@ void Tst_QOpcUaClient::readEmptyArrayVariable()
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=EmptyBoolArray"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QCOMPARE(node->attribute(QOpcUa::NodeAttribute::Value).type(), QVariant::List);
QVERIFY(node->attribute(QOpcUa::NodeAttribute::Value).toList().isEmpty());
}
+void Tst_QOpcUaClient::batchWrite()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ if (opcuaClient->backend() == QLatin1String("uacpp"))
+ QSKIP("Batch write is currently not supported in the uacpp backend");
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QVector<QOpcUaWriteItem> request;
+
+ request.append(QOpcUaWriteItem(QStringLiteral("ns=2;s=Demo.Static.Scalar.Double"), QOpcUa::NodeAttribute::Value,
+ 23.0, QOpcUa::Types::Double));
+ request.front().setSourceTimestamp(QDateTime::fromString(QStringLiteral("2018-08-03 01:00:00"), Qt::ISODate));
+ request.front().setServerTimestamp(QDateTime::fromString(QStringLiteral("2018-08-03T01:01:00"), Qt::ISODate));
+ request.append(QOpcUaWriteItem(QStringLiteral("ns=2;s=Demo.Static.Arrays.UInt32"), QOpcUa::NodeAttribute::Value,
+ QVariantList({0, 1, 2}), QOpcUa::Types::UInt32, QStringLiteral("0:2")));
+ request.append(QOpcUaWriteItem(QStringLiteral("ns=2;s=Demo.Static.Arrays.UInt32"), QOpcUa::NodeAttribute::Value,
+ QVariantList({0, 1, 2}), QOpcUa::Types::UInt32, QStringLiteral("0:2")));
+ // Trigger a write error by trying to update an index range with a status code mismatch.
+ request.back().setStatusCode(QOpcUa::UaStatusCode::BadDependentValueChanged);
+
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=Demo.Static.Arrays.UInt32"));
+ QVERIFY (node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, QVariantList({1, 2, 3, 4, 5}), QOpcUa::Types::UInt32);
+
+ QSignalSpy batchWriteSpy(opcuaClient, &QOpcUaClient::batchWriteFinished);
+
+ opcuaClient->batchWrite(request);
+
+ batchWriteSpy.wait();
+
+ QCOMPARE(batchWriteSpy.size(), 1);
+
+ QCOMPARE(batchWriteSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+ QVector<QOpcUaWriteResult> result = batchWriteSpy.at(0).at(0).value<QVector<QOpcUaWriteResult>>();
+
+ QCOMPARE(result.size(), 3);
+
+ for (int i = 0; i < result.size(); ++i) {
+ if (i == result.size() - 1)
+ QCOMPARE(result[i].statusCode(), QOpcUa::UaStatusCode::BadIndexRangeInvalid); // Status code mismatch
+ else
+ QCOMPARE(result[i].statusCode(), QOpcUa::UaStatusCode::Good);
+ QCOMPARE(result[i].nodeId(), request[i].nodeId());
+ QCOMPARE(result[i].attribute(), request[i].attribute());
+ QCOMPARE(result[i].indexRange(), request[i].indexRange());
+ }
+}
+
+void Tst_QOpcUaClient::batchRead()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ if (opcuaClient->backend() == QLatin1String("uacpp"))
+ QSKIP("batchRead is currently not supported in the uacpp backend");
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QVector<QOpcUaReadItem> request;
+
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=Demo.Static.Arrays.UInt32"));
+ QVERIFY (node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, QVariantList({0, 1, 2, 3, 4}), QOpcUa::Types::UInt32);
+
+ request.push_back(QOpcUaReadItem(QStringLiteral("ns=2;s=Demo.Static.Scalar.Double"),
+ QOpcUa::NodeAttribute::DisplayName));
+ request.push_back(QOpcUaReadItem(QStringLiteral("ns=2;s=Demo.Static.Scalar.Double")));
+ request.push_back(QOpcUaReadItem(QStringLiteral("ns=2;s=Demo.Static.Arrays.UInt32"),
+ QOpcUa::NodeAttribute::Value, QStringLiteral("0:2")));
+
+ QSignalSpy batchReadSpy(opcuaClient, &QOpcUaClient::batchReadFinished);
+
+ opcuaClient->batchRead(request);
+
+ batchReadSpy.wait();
+
+ QCOMPARE(batchReadSpy.size(), 1);
+
+ QCOMPARE(batchReadSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+ QVector<QOpcUaReadResult> result = batchReadSpy.at(0).at(0).value<QVector<QOpcUaReadResult>>();
+
+ QCOMPARE(result.size(), 3);
+
+ for (int i = 0; i < result.size(); ++i) {
+ QCOMPARE(result[i].statusCode(), QOpcUa::UaStatusCode::Good);
+ QVERIFY(result[i].serverTimestamp().isValid());
+ QCOMPARE(result[i].nodeId(), request[i].nodeId());
+ QCOMPARE(result[i].attribute(), request[i].attribute());
+ QCOMPARE(result[i].indexRange(), request[i].indexRange());
+ }
+ QVERIFY(!result[0].sourceTimestamp().isValid()); // The initial DisplayName attribute doesn't have a source timestamp
+ QVERIFY(result[1].sourceTimestamp().isValid());
+ QVERIFY(result[2].sourceTimestamp().isValid());
+ QCOMPARE(result[0].value().value<QOpcUa::QLocalizedText>().text(), QStringLiteral("DoubleScalarTest"));
+ QCOMPARE(result[1].value(), 23.0);
+ QCOMPARE(result[2].value(), QVariantList({0, 1, 2}));
+ // Only check the source timestamp, the server timestamp is replaced with the current DateTime in the open62541
+ // server's Read service.
+ QCOMPARE(result[1].sourceTimestamp(), QDateTime::fromString(QStringLiteral("2018-08-03 01:00:00"), Qt::ISODate));
+}
+
void Tst_QOpcUaClient::getRootNode()
{
QFETCH(QOpcUaClient *, opcuaClient);
OpcuaConnector connector(opcuaClient, m_endpoint);
- QScopedPointer<QOpcUaNode> root(opcuaClient->node("ns=0;i=84"));
- QVERIFY(root != 0);
+ QScopedPointer<QOpcUaNode> root(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::RootFolder)));
+ QVERIFY(root != nullptr);
+ QVERIFY(root->client() == opcuaClient);
READ_MANDATORY_BASE_NODE(root)
- QVERIFY(root->attribute(QOpcUa::NodeAttribute::DisplayName).value<QOpcUa::QLocalizedText>().text == QLatin1String("Root"));
+ QCOMPARE(root->attribute(QOpcUa::NodeAttribute::DisplayName).value<QOpcUa::QLocalizedText>().text(), QLatin1String("Root"));
QString nodeId = root->nodeId();
- QCOMPARE(nodeId, QStringLiteral("ns=0;i=84"));
+ QCOMPARE(nodeId, QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::RootFolder));
}
void Tst_QOpcUaClient::getChildren()
@@ -548,7 +1008,7 @@ void Tst_QOpcUaClient::getChildren()
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=1;s=Large.Folder"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
QSignalSpy spy(node.data(), &QOpcUaNode::browseFinished);
node->browseChildren(QOpcUa::ReferenceTypeId::HierarchicalReferences, QOpcUa::NodeClass::Object);
spy.wait();
@@ -563,14 +1023,14 @@ void Tst_QOpcUaClient::childrenIdsString()
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=3;s=testStringIdsFolder"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
QSignalSpy spy(node.data(), &QOpcUaNode::browseFinished);
node->browseChildren(QOpcUa::ReferenceTypeId::Organizes, QOpcUa::NodeClass::Variable);
spy.wait();
QCOMPARE(spy.size(), 1);
QVector<QOpcUaReferenceDescription> ref = spy.at(0).at(0).value<QVector<QOpcUaReferenceDescription>>();
QCOMPARE(ref.size(), 1);
- QCOMPARE(ref.at(0).nodeId(), QStringLiteral("ns=3;s=theStringId"));
+ QCOMPARE(ref.at(0).targetNodeId().nodeId(), QStringLiteral("ns=3;s=theStringId"));
}
void Tst_QOpcUaClient::childrenIdsGuidNodeId()
@@ -579,14 +1039,14 @@ void Tst_QOpcUaClient::childrenIdsGuidNodeId()
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=3;s=testGuidIdsFolder"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
QSignalSpy spy(node.data(), &QOpcUaNode::browseFinished);
node->browseChildren(QOpcUa::ReferenceTypeId::Organizes, QOpcUa::NodeClass::Variable);
spy.wait();
QCOMPARE(spy.size(), 1);
QVector<QOpcUaReferenceDescription> ref = spy.at(0).at(0).value<QVector<QOpcUaReferenceDescription>>();
QCOMPARE(ref.size(), 1);
- QCOMPARE(ref.at(0).nodeId(), QStringLiteral("ns=3;g=08081e75-8e5e-319b-954f-f3a7613dc29b"));
+ QCOMPARE(ref.at(0).targetNodeId().nodeId(), QStringLiteral("ns=3;g=08081e75-8e5e-319b-954f-f3a7613dc29b"));
}
void Tst_QOpcUaClient::childrenIdsOpaqueNodeId()
@@ -595,14 +1055,303 @@ void Tst_QOpcUaClient::childrenIdsOpaqueNodeId()
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=3;s=testOpaqueIdsFolder"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
QSignalSpy spy(node.data(), &QOpcUaNode::browseFinished);
node->browseChildren(QOpcUa::ReferenceTypeId::Organizes, QOpcUa::NodeClass::Variable);
spy.wait();
QCOMPARE(spy.size(), 1);
QVector<QOpcUaReferenceDescription> ref = spy.at(0).at(0).value<QVector<QOpcUaReferenceDescription>>();
QCOMPARE(ref.size(), 1);
- QCOMPARE(ref.at(0).nodeId(), QStringLiteral("ns=3;b=UXQgZnR3IQ=="));
+ QCOMPARE(ref.at(0).targetNodeId().nodeId(), QStringLiteral("ns=3;b=UXQgZnR3IQ=="));
+}
+
+void Tst_QOpcUaClient::inverseBrowse()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::Boolean)));
+ QVERIFY(node != nullptr);
+ QSignalSpy spy(node.data(), &QOpcUaNode::browseFinished);
+
+ QOpcUaBrowseRequest request;
+ request.setReferenceTypeId(QOpcUa::ReferenceTypeId::References);
+ request.setIncludeSubtypes(true);
+ request.setNodeClassMask(QOpcUa::NodeClass::Undefined);
+ request.setBrowseDirection(QOpcUaBrowseRequest::BrowseDirection::Inverse);
+ node->browse(request);
+ spy.wait();
+ QCOMPARE(spy.size(), 1);
+ QVector<QOpcUaReferenceDescription> ref = spy.at(0).at(0).value<QVector<QOpcUaReferenceDescription>>();
+ QCOMPARE(ref.size(), 1);
+ QCOMPARE(ref.at(0).targetNodeId().nodeId(), QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::BaseDataType));
+ QCOMPARE(ref.at(0).isForwardReference(), false);
+ QCOMPARE(ref.at(0).browseName().name(), QStringLiteral("BaseDataType"));
+ QCOMPARE(ref.at(0).displayName().text(), QStringLiteral("BaseDataType"));
+ QCOMPARE(ref.at(0).refTypeId(), QOpcUa::nodeIdFromReferenceType(QOpcUa::ReferenceTypeId::HasSubtype));
+ QCOMPARE(ref.at(0).nodeClass(), QOpcUa::NodeClass::DataType);
+}
+
+void Tst_QOpcUaClient::addAndRemoveObjectNode()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ if (opcuaClient->backend() != QLatin1String("open62541"))
+ QSKIP("NodeManagement is currently only supported in the open62541 backend");
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QSignalSpy addNodeSpy(opcuaClient, &QOpcUaClient::addNodeFinished);
+
+ QOpcUa::QExpandedNodeId parent;
+ parent.setNodeId(QStringLiteral("ns=3;s=TestFolder"));
+ QOpcUa::QExpandedNodeId requestedNewId;
+ requestedNewId.setNodeId(QStringLiteral("ns=3;s=DynamicObjectNode_%1").arg(opcuaClient->backend()));
+ const quint16 namespaceIndex = 3;
+ QOpcUa::QQualifiedName browseName(namespaceIndex, QStringLiteral("DynamicObjectNode_%1").arg(opcuaClient->backend()));
+
+ QOpcUaNodeCreationAttributes attributes;
+
+ QOpcUa::QLocalizedText displayName("en", browseName.name());
+ QOpcUa::QLocalizedText description("en", QStringLiteral("Node added at runtime by %1").arg(opcuaClient->backend()));
+
+ attributes.setDisplayName(displayName);
+ attributes.setDescription(description);
+
+ QOpcUaAddNodeItem nodeInfo;
+ nodeInfo.setParentNodeId(parent);
+ nodeInfo.setReferenceTypeId(QOpcUa::nodeIdFromReferenceType(QOpcUa::ReferenceTypeId::Organizes));
+ nodeInfo.setRequestedNewNodeId(requestedNewId);
+ nodeInfo.setBrowseName(browseName);
+ nodeInfo.setNodeClass(QOpcUa::NodeClass::Object);
+ nodeInfo.setNodeAttributes(attributes);
+
+ opcuaClient->addNode(nodeInfo);
+
+ addNodeSpy.wait();
+
+ QCOMPARE(addNodeSpy.count(), 1);
+
+ QCOMPARE(addNodeSpy.at(0).at(0).value<QOpcUa::QExpandedNodeId>().nodeId(), requestedNewId.nodeId());
+ QCOMPARE(addNodeSpy.at(0).at(1), requestedNewId.nodeId());
+ QCOMPARE(addNodeSpy.at(0).at(2).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+
+ QScopedPointer<QOpcUaNode> newNode(opcuaClient->node(requestedNewId.nodeId()));
+ QVERIFY(newNode != nullptr);
+
+ QSignalSpy readSpy(newNode.data(), &QOpcUaNode::attributeRead);
+ newNode->readAttributes(QOpcUa::NodeAttribute::BrowseName | QOpcUa::NodeAttribute::DisplayName | QOpcUa::NodeAttribute::Description);
+ readSpy.wait();
+
+ QCOMPARE(readSpy.size(), 1);
+
+ QCOMPARE(newNode->attributeError(QOpcUa::NodeAttribute::BrowseName), QOpcUa::UaStatusCode::Good);
+ QCOMPARE(newNode->attributeError(QOpcUa::NodeAttribute::DisplayName), QOpcUa::UaStatusCode::Good);
+ QCOMPARE(newNode->attributeError(QOpcUa::NodeAttribute::Description), QOpcUa::UaStatusCode::Good);
+
+ QCOMPARE(newNode->attribute(QOpcUa::NodeAttribute::BrowseName).value<QOpcUa::QQualifiedName>(), browseName);
+ QCOMPARE(newNode->attribute(QOpcUa::NodeAttribute::DisplayName).value<QOpcUa::QLocalizedText>(), displayName);
+ QCOMPARE(newNode->attribute(QOpcUa::NodeAttribute::Description).value<QOpcUa::QLocalizedText>(), description);
+
+ QSignalSpy removeNodeSpy(opcuaClient, &QOpcUaClient::deleteNodeFinished);
+ opcuaClient->deleteNode(requestedNewId.nodeId(), true);
+ removeNodeSpy.wait();
+
+ QCOMPARE(removeNodeSpy.size(), 1);
+ QCOMPARE(removeNodeSpy.at(0).at(0), requestedNewId.nodeId());
+ QCOMPARE(removeNodeSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node(requestedNewId.nodeId()));
+ QVERIFY(node != nullptr);
+
+ QSignalSpy unsuccessfulReadSpy(node.data(), &QOpcUaNode::attributeRead);
+
+ node->readAttributes(QOpcUa::NodeAttribute::NodeId);
+ unsuccessfulReadSpy.wait();
+ QCOMPARE(unsuccessfulReadSpy.size(), 1);
+ QVERIFY(unsuccessfulReadSpy.at(0).at(0).value<QOpcUa::NodeAttributes>() & QOpcUa::NodeAttribute::NodeId);
+ QCOMPARE(node->attributeError(QOpcUa::NodeAttribute::NodeId), QOpcUa::UaStatusCode::BadNodeIdUnknown);
+}
+
+void Tst_QOpcUaClient::addAndRemoveVariableNode()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ if (opcuaClient->backend() != QLatin1String("open62541"))
+ QSKIP("NodeManagement is currently only supported in the open62541 backend");
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QSignalSpy addNodeSpy(opcuaClient, &QOpcUaClient::addNodeFinished);
+
+ QOpcUa::QExpandedNodeId parent;
+ parent.setNodeId(QStringLiteral("ns=3;s=TestFolder"));
+ QOpcUa::QExpandedNodeId requestedNewId;
+ requestedNewId.setNodeId(QStringLiteral("ns=3;s=DynamicVariableNode_%1").arg(opcuaClient->backend()));
+ const quint16 namespaceIndex = 3;
+ QOpcUa::QQualifiedName browseName(namespaceIndex, QStringLiteral("DynamicVariableNode_%1").arg(opcuaClient->backend()));
+
+ QOpcUaNodeCreationAttributes attributes;
+
+ QOpcUa::QLocalizedText displayName("en", browseName.name());
+ QOpcUa::QLocalizedText description("en", QStringLiteral("Node added at runtime by %1").arg(opcuaClient->backend()));
+
+ attributes.setDisplayName(displayName);
+ attributes.setDescription(description);
+ attributes.setValue(23.0, QOpcUa::Types::Double);
+ attributes.setDataTypeId(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::Double));
+ attributes.setValueRank(-2); // Scalar or array
+
+ attributes.setAccessLevel(QOpcUa::AccessLevelBit::CurrentRead);
+ attributes.setUserAccessLevel(QOpcUa::AccessLevelBit::CurrentRead);
+
+ QOpcUaAddNodeItem nodeInfo;
+ nodeInfo.setParentNodeId(parent);
+ nodeInfo.setReferenceTypeId(QOpcUa::nodeIdFromReferenceType(QOpcUa::ReferenceTypeId::Organizes));
+ nodeInfo.setRequestedNewNodeId(requestedNewId);
+ nodeInfo.setBrowseName(browseName);
+ nodeInfo.setNodeClass(QOpcUa::NodeClass::Variable);
+ nodeInfo.setNodeAttributes(attributes);
+
+ opcuaClient->addNode(nodeInfo);
+
+ addNodeSpy.wait();
+
+ QCOMPARE(addNodeSpy.count(), 1);
+
+ QCOMPARE(addNodeSpy.at(0).at(0).value<QOpcUa::QExpandedNodeId>().nodeId(), requestedNewId.nodeId());
+ QCOMPARE(addNodeSpy.at(0).at(1), requestedNewId.nodeId());
+ QCOMPARE(addNodeSpy.at(0).at(2).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+
+ QScopedPointer<QOpcUaNode> newNode(opcuaClient->node(requestedNewId.nodeId()));
+ QVERIFY(newNode != nullptr);
+
+ QSignalSpy readSpy(newNode.data(), &QOpcUaNode::attributeRead);
+ newNode->readAttributes(QOpcUa::NodeAttribute::BrowseName | QOpcUa::NodeAttribute::DisplayName | QOpcUa::NodeAttribute::Description | QOpcUa::NodeAttribute::Value);
+ readSpy.wait();
+
+ QCOMPARE(readSpy.size(), 1);
+
+ QCOMPARE(newNode->attributeError(QOpcUa::NodeAttribute::BrowseName), QOpcUa::UaStatusCode::Good);
+ QCOMPARE(newNode->attributeError(QOpcUa::NodeAttribute::DisplayName), QOpcUa::UaStatusCode::Good);
+ QCOMPARE(newNode->attributeError(QOpcUa::NodeAttribute::Description), QOpcUa::UaStatusCode::Good);
+ QCOMPARE(newNode->attributeError(QOpcUa::NodeAttribute::Value), QOpcUa::UaStatusCode::Good);
+
+ QCOMPARE(newNode->attribute(QOpcUa::NodeAttribute::BrowseName).value<QOpcUa::QQualifiedName>(), browseName);
+ QCOMPARE(newNode->attribute(QOpcUa::NodeAttribute::DisplayName).value<QOpcUa::QLocalizedText>(), displayName);
+ QCOMPARE(newNode->attribute(QOpcUa::NodeAttribute::Description).value<QOpcUa::QLocalizedText>(), description);
+ QCOMPARE(newNode->attribute(QOpcUa::NodeAttribute::Value).toDouble(), 23.0);
+
+ QSignalSpy removeNodeSpy(opcuaClient, &QOpcUaClient::deleteNodeFinished);
+ opcuaClient->deleteNode(requestedNewId.nodeId(), true);
+ removeNodeSpy.wait();
+
+ QCOMPARE(removeNodeSpy.size(), 1);
+ QCOMPARE(removeNodeSpy.at(0).at(0), requestedNewId.nodeId());
+ QCOMPARE(removeNodeSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node(requestedNewId.nodeId()));
+ QVERIFY(node != nullptr);
+
+ QSignalSpy unsuccessfulReadSpy(node.data(), &QOpcUaNode::attributeRead);
+
+ node->readAttributes(QOpcUa::NodeAttribute::NodeId);
+ unsuccessfulReadSpy.wait();
+ QCOMPARE(unsuccessfulReadSpy.size(), 1);
+ QVERIFY(unsuccessfulReadSpy.at(0).at(0).value<QOpcUa::NodeAttributes>() & QOpcUa::NodeAttribute::NodeId);
+ QCOMPARE(node->attributeError(QOpcUa::NodeAttribute::NodeId), QOpcUa::UaStatusCode::BadNodeIdUnknown);
+}
+
+void Tst_QOpcUaClient::addAndRemoveReference()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ if (opcuaClient->backend() != QLatin1String("open62541"))
+ QSKIP("NodeManagement is currently only supported in the open62541 backend");
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QSignalSpy addReferenceSpy(opcuaClient, &QOpcUaClient::addReferenceFinished);
+
+ QOpcUa::QExpandedNodeId target;
+ target.setNodeId(QStringLiteral("ns=3;s=TestFolder"));
+ QString referenceType = QOpcUa::nodeIdFromInteger(0, static_cast<quint32>(QOpcUa::ReferenceTypeId::Organizes));
+
+ QOpcUaAddReferenceItem refInfo;
+ refInfo.setSourceNodeId(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::RootFolder));
+ refInfo.setReferenceTypeId(referenceType);
+ refInfo.setIsForwardReference(true);
+ refInfo.setTargetNodeId(target);
+ refInfo.setTargetNodeClass(QOpcUa::NodeClass::Variable);
+
+ opcuaClient->addReference(refInfo);
+ addReferenceSpy.wait();
+
+ QCOMPARE(addReferenceSpy.count(), 1);
+ QCOMPARE(addReferenceSpy.at(0).at(0), QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::RootFolder));
+ QCOMPARE(addReferenceSpy.at(0).at(1), referenceType);
+ QCOMPARE(addReferenceSpy.at(0).at(2).value<QOpcUa::QExpandedNodeId>().nodeId(), target.nodeId());
+ QCOMPARE(addReferenceSpy.at(0).at(3).value<bool>(), true);
+ QCOMPARE(addReferenceSpy.at(0).at(4).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+
+ // Check if the reference has been added
+ {
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::RootFolder)));
+ QVERIFY(node != nullptr);
+
+ QSignalSpy browseSpy(node.data(), &QOpcUaNode::browseFinished);
+
+ node->browseChildren(QOpcUa::ReferenceTypeId::Organizes);
+ browseSpy.wait();
+ QCOMPARE(browseSpy.size(), 1);
+ QCOMPARE(browseSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+ QVector<QOpcUaReferenceDescription> results = browseSpy.at(0).at(0).value<QVector<QOpcUaReferenceDescription>>();
+ QVERIFY(!results.isEmpty());
+ bool referenceExists = false;
+ for (auto item : results) {
+ if (item.targetNodeId().nodeId() == target.nodeId()) {
+ referenceExists = true;
+ break;
+ }
+ }
+ QVERIFY(referenceExists);
+ }
+
+ QSignalSpy deleteReferenceSpy(opcuaClient, &QOpcUaClient::deleteReferenceFinished);
+
+ QOpcUaDeleteReferenceItem refDelInfo;
+ refDelInfo.setSourceNodeId(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::RootFolder));
+ refDelInfo.setReferenceTypeId(referenceType);
+ refDelInfo.setIsForwardReference(true);
+ refDelInfo.setTargetNodeId(target);
+ refDelInfo.setDeleteBidirectional(true);
+
+ opcuaClient->deleteReference(refDelInfo);
+ deleteReferenceSpy.wait();
+
+ QCOMPARE(deleteReferenceSpy.count(), 1);
+ QCOMPARE(deleteReferenceSpy.at(0).at(0), QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::RootFolder));
+ QCOMPARE(deleteReferenceSpy.at(0).at(1), referenceType);
+ QCOMPARE(deleteReferenceSpy.at(0).at(2).value<QOpcUa::QExpandedNodeId>().nodeId(), target.nodeId());
+ QCOMPARE(deleteReferenceSpy.at(0).at(3).value<bool>(), true);
+ QCOMPARE(deleteReferenceSpy.at(0).at(4).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+
+ // Check if the reference has been deleted
+ {
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::RootFolder)));
+ QVERIFY(node != nullptr);
+
+ QSignalSpy browseSpy(node.data(), &QOpcUaNode::browseFinished);
+
+ node->browseChildren(QOpcUa::ReferenceTypeId::Organizes);
+ browseSpy.wait();
+ QCOMPARE(browseSpy.size(), 1);
+ QCOMPARE(browseSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+ QVector<QOpcUaReferenceDescription> results = browseSpy.at(0).at(0).value<QVector<QOpcUaReferenceDescription>>();
+ QVERIFY(!results.isEmpty());
+ for (auto item : results)
+ QVERIFY(item.targetNodeId().nodeId() != target.nodeId());
+ }
}
void Tst_QOpcUaClient::dataChangeSubscription()
@@ -611,26 +1360,27 @@ void Tst_QOpcUaClient::dataChangeSubscription()
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> node(opcuaClient->node(readWriteNode));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, QVariant(double(0)), QOpcUa::Types::Double);
READ_MANDATORY_VARIABLE_NODE(node);
QTRY_COMPARE(node->attribute(QOpcUa::NodeAttribute::Value).toDouble(), 0.0);
WRITE_VALUE_ATTRIBUTE(node, QVariant(double(0)), QOpcUa::Types::Double);
- QSignalSpy dataChangeSpy(node.data(), &QOpcUaNode::attributeUpdated);
+ QSignalSpy dataChangeSpy(node.data(), &QOpcUaNode::dataChangeOccurred);
QSignalSpy monitoringEnabledSpy(node.data(), &QOpcUaNode::enableMonitoringFinished);
node->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100, QOpcUaMonitoringParameters::SubscriptionType::Exclusive));
monitoringEnabledSpy.wait();
- QVERIFY(monitoringEnabledSpy.size() == 1);
- QVERIFY(monitoringEnabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>() == QOpcUa::NodeAttribute::Value);
- QVERIFY(node->monitoringStatus(QOpcUa::NodeAttribute::Value).statusCode() == 0);
+ QCOMPARE(monitoringEnabledSpy.size(), 1);
+ QCOMPARE(monitoringEnabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::Value);
+ QCOMPARE(node->monitoringStatus(QOpcUa::NodeAttribute::Value).statusCode(), QOpcUa::UaStatusCode::Good);
QOpcUaMonitoringParameters valueStatus = node->monitoringStatus(QOpcUa::NodeAttribute::Value);
QVERIFY(valueStatus.subscriptionId() != 0);
- QVERIFY(valueStatus.statusCode() == 0);
+ QVERIFY(valueStatus.monitoredItemId() != 0);
+ QCOMPARE(valueStatus.statusCode(), QOpcUa::UaStatusCode::Good);
WRITE_VALUE_ATTRIBUTE(node, QVariant(double(42)), QOpcUa::Types::Double);
dataChangeSpy.wait();
@@ -640,8 +1390,8 @@ void Tst_QOpcUaClient::dataChangeSubscription()
QVERIFY(dataChangeSpy.size() >= 1);
int index = dataChangeSpy.size() == 1 ? 0 : 1;
- QVERIFY(dataChangeSpy.at(index).at(0).value<QOpcUa::NodeAttribute>() == QOpcUa::NodeAttribute::Value);
- QVERIFY(dataChangeSpy.at(index).at(1) == double(42));
+ QCOMPARE(dataChangeSpy.at(index).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::Value);
+ QCOMPARE(dataChangeSpy.at(index).at(1), double(42));
monitoringEnabledSpy.clear();
dataChangeSpy.clear();
@@ -650,64 +1400,61 @@ void Tst_QOpcUaClient::dataChangeSubscription()
valueStatus.subscriptionId()));
monitoringEnabledSpy.wait();
- QVERIFY(monitoringEnabledSpy.size() == 1);
- QVERIFY(monitoringEnabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>() == QOpcUa::NodeAttribute::DisplayName);
- QVERIFY(node->monitoringStatus(QOpcUa::NodeAttribute::DisplayName).statusCode() == 0);
+ QCOMPARE(monitoringEnabledSpy.size(), 1);
+ QCOMPARE(monitoringEnabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::DisplayName);
+ QCOMPARE(node->monitoringStatus(QOpcUa::NodeAttribute::DisplayName).statusCode(), QOpcUa::UaStatusCode::Good);
QOpcUaMonitoringParameters displayNameStatus = node->monitoringStatus(QOpcUa::NodeAttribute::DisplayName);
- QVERIFY(displayNameStatus.subscriptionId() == valueStatus.subscriptionId());
- QVERIFY(displayNameStatus.statusCode() == 0);
+ QCOMPARE(displayNameStatus.subscriptionId(), valueStatus.subscriptionId());
+ QVERIFY(displayNameStatus.monitoredItemId() != 0);
+ QCOMPARE(displayNameStatus.statusCode(), QOpcUa::UaStatusCode::Good);
dataChangeSpy.wait();
- QVERIFY(dataChangeSpy.size() == 1);
- QVERIFY(dataChangeSpy.at(0).at(0).value<QOpcUa::NodeAttribute>() == QOpcUa::NodeAttribute::DisplayName);
- QVERIFY(dataChangeSpy.at(0).at(1).value<QOpcUa::QLocalizedText>().text == QLatin1String("TestNode.ReadWrite"));
+ QCOMPARE(dataChangeSpy.size(), 1);
+ QCOMPARE(dataChangeSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::DisplayName);
+ QCOMPARE(dataChangeSpy.at(0).at(1).value<QOpcUa::QLocalizedText>().text(), QLatin1String("TestNode.ReadWrite"));
monitoringEnabledSpy.clear();
dataChangeSpy.clear();
node->enableMonitoring(QOpcUa::NodeAttribute::NodeId, QOpcUaMonitoringParameters(100));
monitoringEnabledSpy.wait();
- QVERIFY(monitoringEnabledSpy.size() == 1);
- QVERIFY(monitoringEnabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>() == QOpcUa::NodeAttribute::NodeId);
+ QCOMPARE(monitoringEnabledSpy.size(), 1);
+ QCOMPARE(monitoringEnabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::NodeId);
QVERIFY(node->monitoringStatus(QOpcUa::NodeAttribute::NodeId).subscriptionId() != valueStatus.subscriptionId());
- QVERIFY(node->monitoringStatus(QOpcUa::NodeAttribute::NodeId).statusCode() == 0);
+ QCOMPARE(node->monitoringStatus(QOpcUa::NodeAttribute::NodeId).statusCode(), QOpcUa::UaStatusCode::Good);
QOpcUaMonitoringParameters nodeIdStatus = node->monitoringStatus(QOpcUa::NodeAttribute::NodeId);
QVERIFY(nodeIdStatus.subscriptionId() != valueStatus.subscriptionId());
- QVERIFY(nodeIdStatus.statusCode() == 0);
+ QVERIFY(nodeIdStatus.monitoredItemId() != 0);
+ QCOMPARE(nodeIdStatus.statusCode(), QOpcUa::UaStatusCode::Good);
dataChangeSpy.wait();
- QVERIFY(dataChangeSpy.size() == 1);
- QVERIFY(dataChangeSpy.at(0).at(0).value<QOpcUa::NodeAttribute>() == QOpcUa::NodeAttribute::NodeId);
- QVERIFY(dataChangeSpy.at(0).at(1) == QLatin1String("ns=3;s=TestNode.ReadWrite"));
+ QCOMPARE(dataChangeSpy.size(), 1);
+ QCOMPARE(dataChangeSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::NodeId);
+ QCOMPARE(dataChangeSpy.at(0).at(1), QLatin1String("ns=3;s=TestNode.ReadWrite"));
QVector<QOpcUa::NodeAttribute> attrs;
- if (opcuaClient->backend() == QLatin1String("open62541") ||
- opcuaClient->backend() == QLatin1String("uacpp")) {
- QSignalSpy monitoringModifiedSpy(node.data(), &QOpcUaNode::monitoringStatusChanged);
- node->modifyMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters::Parameter::PublishingInterval, 200);
+ QSignalSpy monitoringModifiedSpy(node.data(), &QOpcUaNode::monitoringStatusChanged);
+ node->modifyMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters::Parameter::PublishingInterval, 200);
+ monitoringModifiedSpy.wait();
+ if (monitoringModifiedSpy.size() < 2)
monitoringModifiedSpy.wait();
- if (monitoringModifiedSpy.size() < 2)
- monitoringModifiedSpy.wait();
-
- attrs = {QOpcUa::NodeAttribute::Value, QOpcUa::NodeAttribute::DisplayName};
- for (auto it : qAsConst(monitoringModifiedSpy)) {
- QOpcUa::NodeAttribute temp = it.at(0).value<QOpcUa::NodeAttribute>();
- QVERIFY(attrs.contains(temp));
- QVERIFY(it.at(1).value<QOpcUaMonitoringParameters::Parameters>() & QOpcUaMonitoringParameters::Parameter::PublishingInterval);
- QVERIFY(it.at(2) == QOpcUa::UaStatusCode::Good);
- QCOMPARE(node->monitoringStatus(temp).publishingInterval(), 200.0);
- attrs.remove(attrs.indexOf(temp));
- }
- QVERIFY(attrs.size() == 0);
- QCOMPARE(node->monitoringStatus(QOpcUa::NodeAttribute::Value).publishingInterval(), 200.0);
- QCOMPARE(node->monitoringStatus(QOpcUa::NodeAttribute::DisplayName).publishingInterval(), 200.0);
- } else {
- qDebug() << "Modifying monitoring settings is not supported by the freeopcua backend";
+ attrs = {QOpcUa::NodeAttribute::Value, QOpcUa::NodeAttribute::DisplayName};
+ for (auto it : qAsConst(monitoringModifiedSpy)) {
+ QOpcUa::NodeAttribute temp = it.at(0).value<QOpcUa::NodeAttribute>();
+ QVERIFY(attrs.contains(temp));
+ QVERIFY(it.at(1).value<QOpcUaMonitoringParameters::Parameters>() & QOpcUaMonitoringParameters::Parameter::PublishingInterval);
+ QCOMPARE(it.at(2), QOpcUa::UaStatusCode::Good);
+ QCOMPARE(node->monitoringStatus(temp).publishingInterval(), 200.0);
+ attrs.remove(attrs.indexOf(temp));
}
+ QCOMPARE(attrs.size(), 0);
+
+ QCOMPARE(node->monitoringStatus(QOpcUa::NodeAttribute::Value).publishingInterval(), 200.0);
+ QCOMPARE(node->monitoringStatus(QOpcUa::NodeAttribute::DisplayName).publishingInterval(), 200.0);
QSignalSpy monitoringDisabledSpy(node.data(), &QOpcUaNode::disableMonitoringFinished);
@@ -718,17 +1465,18 @@ void Tst_QOpcUaClient::dataChangeSubscription()
if (monitoringDisabledSpy.size() < 3)
monitoringDisabledSpy.wait();
- QVERIFY(monitoringDisabledSpy.size() == 3);
+ QCOMPARE(monitoringDisabledSpy.size(), 3);
attrs = {QOpcUa::NodeAttribute::Value, QOpcUa::NodeAttribute::DisplayName, QOpcUa::NodeAttribute::NodeId};
for (auto it : qAsConst(monitoringDisabledSpy)) {
QOpcUa::NodeAttribute temp = it.at(0).value<QOpcUa::NodeAttribute>();
QVERIFY(attrs.contains(temp));
- QVERIFY(node->monitoringStatus(temp).subscriptionId() == 0);
- QVERIFY(node->monitoringStatus(temp).statusCode() == QOpcUa::UaStatusCode::BadAttributeIdInvalid);
+ QCOMPARE(node->monitoringStatus(temp).subscriptionId(), (quint32)0);
+ QCOMPARE(node->monitoringStatus(temp).monitoredItemId(), (quint32)0);
+ QCOMPARE(node->monitoringStatus(temp).statusCode(), QOpcUa::UaStatusCode::BadNoEntryExists);
attrs.remove(attrs.indexOf(temp));
}
- QVERIFY(attrs.size() == 0);
+ QCOMPARE(attrs.size(), 0);
}
void Tst_QOpcUaClient::dataChangeSubscriptionInvalidNode()
@@ -736,7 +1484,7 @@ void Tst_QOpcUaClient::dataChangeSubscriptionInvalidNode()
QFETCH(QOpcUaClient *, opcuaClient);
OpcuaConnector connector(opcuaClient, m_endpoint);
- QScopedPointer<QOpcUaNode> noDataNode(opcuaClient->node("ns=0;i=84"));
+ QScopedPointer<QOpcUaNode> noDataNode(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::RootFolder)));
QSignalSpy monitoringEnabledSpy(noDataNode.data(), &QOpcUaNode::enableMonitoringFinished);
QOpcUaMonitoringParameters settings;
@@ -744,10 +1492,10 @@ void Tst_QOpcUaClient::dataChangeSubscriptionInvalidNode()
noDataNode->enableMonitoring(QOpcUa::NodeAttribute::Value, settings);
monitoringEnabledSpy.wait();
- QVERIFY(monitoringEnabledSpy.size() == 1);
- QVERIFY(monitoringEnabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>() == QOpcUa::NodeAttribute::Value);
- QVERIFY(noDataNode->monitoringStatus(QOpcUa::NodeAttribute::Value).statusCode() == QOpcUa::UaStatusCode::BadAttributeIdInvalid);
- QVERIFY(noDataNode->monitoringStatus(QOpcUa::NodeAttribute::Value).subscriptionId() == 0);
+ QCOMPARE(monitoringEnabledSpy.size(), 1);
+ QCOMPARE(monitoringEnabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::Value);
+ QCOMPARE(noDataNode->monitoringStatus(QOpcUa::NodeAttribute::Value).statusCode(), QOpcUa::UaStatusCode::BadAttributeIdInvalid);
+ QCOMPARE(noDataNode->monitoringStatus(QOpcUa::NodeAttribute::Value).subscriptionId(), (quint32)0);
}
void Tst_QOpcUaClient::dataChangeSubscriptionSharing()
@@ -760,34 +1508,34 @@ void Tst_QOpcUaClient::dataChangeSubscriptionSharing()
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> node(opcuaClient->node(readWriteNode));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
QSignalSpy monitoringEnabledSpy(node.data(), &QOpcUaNode::enableMonitoringFinished);
node->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(50));
monitoringEnabledSpy.wait();
- QVERIFY(monitoringEnabledSpy.size() == 1);
- QVERIFY(monitoringEnabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>() == QOpcUa::NodeAttribute::Value);
- QVERIFY(node->monitoringStatus(QOpcUa::NodeAttribute::Value).statusCode() == QOpcUa::UaStatusCode::Good);
+ QCOMPARE(monitoringEnabledSpy.size(), 1);
+ QCOMPARE(monitoringEnabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::Value);
+ QCOMPARE(node->monitoringStatus(QOpcUa::NodeAttribute::Value).statusCode(), QOpcUa::UaStatusCode::Good);
QOpcUaMonitoringParameters valueStatus = node->monitoringStatus(QOpcUa::NodeAttribute::Value);
QVERIFY(valueStatus.subscriptionId() != 0);
- QVERIFY(valueStatus.statusCode() == QOpcUa::UaStatusCode::Good);
+ QCOMPARE(valueStatus.statusCode(), QOpcUa::UaStatusCode::Good);
monitoringEnabledSpy.clear();
node->enableMonitoring(QOpcUa::NodeAttribute::DisplayName, QOpcUaMonitoringParameters(25));
monitoringEnabledSpy.wait();
- QVERIFY(monitoringEnabledSpy.size() == 1);
- QVERIFY(monitoringEnabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>() == QOpcUa::NodeAttribute::DisplayName);
- QVERIFY(node->monitoringStatus(QOpcUa::NodeAttribute::DisplayName).statusCode() == QOpcUa::UaStatusCode::Good);
+ QCOMPARE(monitoringEnabledSpy.size(), 1);
+ QCOMPARE(monitoringEnabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::DisplayName);
+ QCOMPARE(node->monitoringStatus(QOpcUa::NodeAttribute::DisplayName).statusCode(), QOpcUa::UaStatusCode::Good);
QOpcUaMonitoringParameters displayNameStatus = node->monitoringStatus(QOpcUa::NodeAttribute::DisplayName);
- QVERIFY(displayNameStatus.subscriptionId() == valueStatus.subscriptionId());
- QVERIFY(displayNameStatus.statusCode() == QOpcUa::UaStatusCode::Good);
+ QCOMPARE(displayNameStatus.subscriptionId(), valueStatus.subscriptionId());
+ QCOMPARE(displayNameStatus.statusCode(), QOpcUa::UaStatusCode::Good);
- QVERIFY(valueStatus.subscriptionId() == displayNameStatus.subscriptionId());
+ QCOMPARE(valueStatus.subscriptionId(), displayNameStatus.subscriptionId());
QCOMPARE(valueStatus.publishingInterval(), displayNameStatus.publishingInterval());
QCOMPARE(valueStatus.publishingInterval(), 100.0);
@@ -798,17 +1546,17 @@ void Tst_QOpcUaClient::dataChangeSubscriptionSharing()
if (monitoringDisabledSpy.size() < 2)
monitoringDisabledSpy.wait();
- QVERIFY(monitoringDisabledSpy.size() == 2);
+ QCOMPARE(monitoringDisabledSpy.size(), 2);
QVector<QOpcUa::NodeAttribute> attrs = {QOpcUa::NodeAttribute::Value, QOpcUa::NodeAttribute::DisplayName};
for (auto it : qAsConst(monitoringDisabledSpy)) {
auto temp = it.at(0).value<QOpcUa::NodeAttribute>();
QVERIFY(attrs.contains(temp));
- QVERIFY(node->monitoringStatus(temp).subscriptionId() == 0);
- QVERIFY(node->monitoringStatus(temp).statusCode() == QOpcUa::UaStatusCode::BadAttributeIdInvalid);
+ QCOMPARE(node->monitoringStatus(temp).subscriptionId(), (quint32)0);
+ QCOMPARE(node->monitoringStatus(temp).statusCode(), QOpcUa::UaStatusCode::BadNoEntryExists);
attrs.removeOne(temp);
}
- QVERIFY(attrs.size() == 0);
+ QCOMPARE(attrs.size(), 0);
}
void Tst_QOpcUaClient::methodCall()
@@ -822,7 +1570,7 @@ void Tst_QOpcUaClient::methodCall()
args.push_back(QOpcUa::TypedVariant(double(4), QOpcUa::Double));
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=3;s=TestFolder"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
QSignalSpy methodSpy(node.data(), &QOpcUaNode::methodCallFinished);
@@ -848,7 +1596,7 @@ void Tst_QOpcUaClient::methodCallInvalid()
args.push_back(QOpcUa::TypedVariant(double(4), QOpcUa::Double));
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=3;s=TestFolder"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
QSignalSpy methodSpy(node.data(), &QOpcUaNode::methodCallFinished);
@@ -874,28 +1622,71 @@ void Tst_QOpcUaClient::methodCallInvalid()
QCOMPARE(methodSpy.at(0).at(2).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::BadArgumentsMissing);
}
+void Tst_QOpcUaClient::readMethodArguments()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ if (opcuaClient->backend() != QStringLiteral("open62541"))
+ QSKIP("The argument type is currently only supported in the open62541 backend");
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QScopedPointer<QOpcUaNode> node(
+ opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::Server_GetMonitoredItems_InputArguments)));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+
+ QOpcUa::QArgument argument = node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QArgument>();
+ QCOMPARE(argument.name(), QStringLiteral("SubscriptionId"));
+ QCOMPARE(argument.dataTypeId(), QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::UInt32));
+ QCOMPARE(argument.valueRank(), -1);
+ QVERIFY(argument.arrayDimensions().isEmpty());
+ QCOMPARE(argument.description(), QOpcUa::QLocalizedText());
+
+ node.reset(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::Server_GetMonitoredItems_OutputArguments)));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+
+ QVariantList list = node->attribute(QOpcUa::NodeAttribute::Value).toList();
+ QCOMPARE(list.size(), 2);
+
+ argument = list.at(0).value<QOpcUa::QArgument>();
+ QCOMPARE(argument.name(), QStringLiteral("ServerHandles"));
+ QCOMPARE(argument.dataTypeId(), QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::UInt32));
+ QCOMPARE(argument.valueRank(), 1);
+ QVERIFY(argument.arrayDimensions().isEmpty());
+ QCOMPARE(argument.description(), QOpcUa::QLocalizedText());
+
+ argument = list.at(1).value<QOpcUa::QArgument>();
+ QCOMPARE(argument.name(), QStringLiteral("ClientHandles"));
+ QCOMPARE(argument.dataTypeId(), QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::UInt32));
+ QCOMPARE(argument.valueRank(), 1);
+ QVERIFY(argument.arrayDimensions().isEmpty());
+ QCOMPARE(argument.description(), QOpcUa::QLocalizedText());
+}
+
void Tst_QOpcUaClient::malformedNodeString()
{
QFETCH(QOpcUaClient *, opcuaClient);
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> invalidNode(opcuaClient->node("justsomerandomstring"));
- QVERIFY(invalidNode == 0);
+ QVERIFY(invalidNode == nullptr);
invalidNode.reset(opcuaClient->node("ns=a;i=b"));
- QVERIFY(invalidNode == 0);
+ QVERIFY(invalidNode == nullptr);
invalidNode.reset(opcuaClient->node("ns=;i="));
- QVERIFY(invalidNode == 0);
+ QVERIFY(invalidNode == nullptr);
invalidNode.reset(opcuaClient->node("ns=0;x=123"));
- QVERIFY(invalidNode == 0);
+ QVERIFY(invalidNode == nullptr);
invalidNode.reset(opcuaClient->node("ns=0,i=31;"));
- QVERIFY(invalidNode == 0);
+ QVERIFY(invalidNode == nullptr);
invalidNode.reset(opcuaClient->node("ns:0;i:31;"));
- QVERIFY(invalidNode == 0);
+ QVERIFY(invalidNode == nullptr);
}
void Tst_QOpcUaClient::nodeIdGeneration()
@@ -908,6 +1699,8 @@ void Tst_QOpcUaClient::nodeIdGeneration()
QCOMPARE(nodeId, QStringLiteral("ns=1;g=08081e75-8e5e-319b-954f-f3a7613dc29b"));
nodeId = QOpcUa::nodeIdFromByteString(1, QByteArray::fromBase64("UXQgZnR3IQ=="));
QCOMPARE(nodeId, QStringLiteral("ns=1;b=UXQgZnR3IQ=="));
+ nodeId = QOpcUa::nodeIdFromReferenceType(QOpcUa::ReferenceTypeId::HasComponent);
+ QCOMPARE(nodeId, QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::HasComponent));
}
void Tst_QOpcUaClient::multipleClients()
@@ -945,52 +1738,40 @@ void Tst_QOpcUaClient::nodeClass()
OpcuaConnector connector(opcuaClient, m_endpoint);
// Root -> Types -> ReferenceTypes -> References
- {
- QScopedPointer<QOpcUaNode> refNode(opcuaClient->node("ns=0;i=31"));
- QVERIFY(refNode != 0);
- READ_MANDATORY_BASE_NODE(refNode)
- QCOMPARE(refNode->attribute(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>(), QOpcUa::NodeClass::ReferenceType);
- }
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::References)));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_BASE_NODE(node)
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>(), QOpcUa::NodeClass::ReferenceType);
// Root -> Types -> DataTypes -> BaseDataTypes -> Boolean
- {
- QScopedPointer<QOpcUaNode> dataTypeNode(opcuaClient->node("ns=0;i=1"));
- QVERIFY(dataTypeNode != 0);
- READ_MANDATORY_BASE_NODE(dataTypeNode)
- QCOMPARE(dataTypeNode->attribute(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>(), QOpcUa::NodeClass::DataType);
- }
+ node.reset(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::Boolean)));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_BASE_NODE(node)
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>(), QOpcUa::NodeClass::DataType);
// Root -> Types -> DataTypes -> ObjectTypes -> BaseObjectTypes -> FolderType
- {
- QScopedPointer<QOpcUaNode> objectTypeNode(opcuaClient->node("ns=0;i=61"));
- QVERIFY(objectTypeNode != 0);
- READ_MANDATORY_BASE_NODE(objectTypeNode)
- QCOMPARE(objectTypeNode->attribute(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>(), QOpcUa::NodeClass::ObjectType);
- }
+ node.reset(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::FolderType)));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_BASE_NODE(node)
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>(), QOpcUa::NodeClass::ObjectType);
// Root -> Types -> DataTypes -> VariableTypes -> BaseVariableType -> PropertyType
- {
- QScopedPointer<QOpcUaNode> variableTypeNode(opcuaClient->node("ns=0;i=68"));
- QVERIFY(variableTypeNode != 0);
- READ_MANDATORY_BASE_NODE(variableTypeNode)
- QCOMPARE(variableTypeNode->attribute(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>(), QOpcUa::NodeClass::VariableType);
- }
+ node.reset(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::PropertyType)));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_BASE_NODE(node)
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>(), QOpcUa::NodeClass::VariableType);
// Root -> Objects
- {
- QScopedPointer<QOpcUaNode> objectNode(opcuaClient->node("ns=0;i=85"));
- QVERIFY(objectNode != 0);
- READ_MANDATORY_BASE_NODE(objectNode)
- QCOMPARE(objectNode->attribute(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>(), QOpcUa::NodeClass::Object);
- }
+ node.reset(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::ObjectsFolder)));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_BASE_NODE(node)
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>(), QOpcUa::NodeClass::Object);
// Root -> Objects -> Server -> NamespaceArray
- {
- QScopedPointer<QOpcUaNode> variableNode(opcuaClient->node("ns=0;i=2255"));
- QVERIFY(variableNode != 0);
- READ_MANDATORY_BASE_NODE(variableNode)
- QCOMPARE(variableNode->attribute(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>(), QOpcUa::NodeClass::Variable);
- }
+ node.reset(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::Server_NamespaceArray)));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_BASE_NODE(node)
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::NodeClass).value<QOpcUa::NodeClass>(), QOpcUa::NodeClass::Variable);
}
void Tst_QOpcUaClient::writeArray()
@@ -1004,15 +1785,15 @@ void Tst_QOpcUaClient::writeArray()
list.append(false);
list.append(true);
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Boolean"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::Boolean);
list.clear();
list.append(std::numeric_limits<quint8>::min());
- list.append(std::numeric_limits<quint8>::max());
+ list.append((std::numeric_limits<quint8>::max)());
list.append(10);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Byte"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::Byte);
list.clear();
@@ -1020,7 +1801,7 @@ void Tst_QOpcUaClient::writeArray()
list.append(QDateTime::currentDateTime());
list.append(QDateTime::currentDateTime());
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.DateTime"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::DateTime);
list.clear();
@@ -1028,7 +1809,7 @@ void Tst_QOpcUaClient::writeArray()
list.append(23.6);
list.append(23.7);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Double"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::Double);
list.clear();
@@ -1036,39 +1817,39 @@ void Tst_QOpcUaClient::writeArray()
list.append(23.6);
list.append(23.7);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Float"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::Float);
list.clear();
list.append(std::numeric_limits<qint16>::min());
- list.append(std::numeric_limits<qint16>::max());
+ list.append((std::numeric_limits<qint16>::max)());
list.append(10);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Int16"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::Int16);
list.clear();
list.append(std::numeric_limits<qint32>::min());
- list.append(std::numeric_limits<qint32>::max());
+ list.append((std::numeric_limits<qint32>::max)());
list.append(10);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Int32"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::Int32);
list.clear();
list.append(std::numeric_limits<qint64>::min());
- list.append(std::numeric_limits<qint64>::max());
+ list.append((std::numeric_limits<qint64>::max)());
list.append(10);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Int64"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::Int64);
list.clear();
list.append(std::numeric_limits<qint8>::min());
- list.append(std::numeric_limits<qint8>::max());
+ list.append((std::numeric_limits<qint8>::max)());
list.append(10);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.SByte"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::SByte);
list.clear();
@@ -1076,39 +1857,39 @@ void Tst_QOpcUaClient::writeArray()
list.append("Test2");
list.append("Test3");
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.String"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::String);
list.clear();
list.append(std::numeric_limits<quint16>::min());
- list.append(std::numeric_limits<quint16>::max());
+ list.append((std::numeric_limits<quint16>::max)());
list.append(10);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.UInt16"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::UInt16);
list.clear();
list.append(std::numeric_limits<quint32>::min());
- list.append(std::numeric_limits<quint32>::max());
+ list.append((std::numeric_limits<quint32>::max)());
list.append(10);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.UInt32"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::UInt32);
list.clear();
list.append(std::numeric_limits<quint64>::min());
- list.append(std::numeric_limits<quint64>::max());
+ list.append((std::numeric_limits<quint64>::max)());
list.append(10);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.UInt64"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::UInt64);
list.clear();
- list.append(QVariant::fromValue(localizedTexts[0]));
- list.append(QVariant::fromValue(localizedTexts[1]));
- list.append(QVariant::fromValue(localizedTexts[2]));
+ list.append(localizedTexts[0]);
+ list.append(localizedTexts[1]);
+ list.append(localizedTexts[2]);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.LocalizedText"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::LocalizedText);
list.clear();
@@ -1119,14 +1900,15 @@ void Tst_QOpcUaClient::writeArray()
withNull.append("i");
list.append(withNull);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.ByteString"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::ByteString);
list.clear();
- list.append(QUuid("e0bd5ccd-f571-4545-9352-61a0f8cb9216"));
- list.append(QUuid("460ebe04-89d8-42f3-a0e0-7b45940f1a4e4"));
+ list.append(testUuid[0]);
+ list.append(testUuid[1]);
+ list.append(testUuid[2]);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Guid"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::Guid);
list.clear();
@@ -1134,15 +1916,15 @@ void Tst_QOpcUaClient::writeArray()
list.append("ns=0;i=1");
list.append("ns=0;i=2");
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.NodeId"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::NodeId);
list.clear();
- list.append(QVariant::fromValue(QOpcUa::QQualifiedName(0, "Test0")));
- list.append(QVariant::fromValue(QOpcUa::QQualifiedName(1, "Test1")));
- list.append(QVariant::fromValue(QOpcUa::QQualifiedName(2, "Test2")));
+ list.append(QOpcUa::QQualifiedName(0, "Test0"));
+ list.append(QOpcUa::QQualifiedName(1, "Test1"));
+ list.append(QOpcUa::QQualifiedName(2, "Test2"));
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.QualifiedName"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::QualifiedName);
list.clear();
@@ -1150,71 +1932,101 @@ void Tst_QOpcUaClient::writeArray()
list.append(QOpcUa::UaStatusCode::BadUnexpectedError);
list.append(QOpcUa::UaStatusCode::BadInternalError);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.StatusCode"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::Types::StatusCode);
- if (opcuaClient->backend() != QLatin1String("freeopcua")) {
- list.clear();
- list.append(QVariant::fromValue(testRanges[0]));
- list.append(QVariant::fromValue(testRanges[1]));
- list.append(QVariant::fromValue(testRanges[2]));
- node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Range"));
- QVERIFY(node != 0);
- WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::Range);
+ list.clear();
+ list.append(QVariant::fromValue(testRanges[0]));
+ list.append(QVariant::fromValue(testRanges[1]));
+ list.append(QVariant::fromValue(testRanges[2]));
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Range"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::Range);
- list.clear();
- list.append(QVariant::fromValue(testEUInfos[0]));
- list.append(QVariant::fromValue(testEUInfos[1]));
- list.append(QVariant::fromValue(testEUInfos[2]));
- node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.EUInformation"));
- QVERIFY(node != 0);
- WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::EUInformation);
+ list.clear();
+ list.append(QVariant::fromValue(testEUInfos[0]));
+ list.append(QVariant::fromValue(testEUInfos[1]));
+ list.append(QVariant::fromValue(testEUInfos[2]));
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.EUInformation"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::EUInformation);
- list.clear();
- list.append(QVariant::fromValue(testComplex[0]));
- list.append(QVariant::fromValue(testComplex[1]));
- list.append(QVariant::fromValue(testComplex[2]));
- node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.ComplexNumber"));
- QVERIFY(node != 0);
- WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::ComplexNumber);
+ list.clear();
+ list.append(QVariant::fromValue(testComplex[0]));
+ list.append(QVariant::fromValue(testComplex[1]));
+ list.append(QVariant::fromValue(testComplex[2]));
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.ComplexNumber"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::ComplexNumber);
- list.clear();
- list.append(QVariant::fromValue(testDoubleComplex[0]));
- list.append(QVariant::fromValue(testDoubleComplex[1]));
- list.append(QVariant::fromValue(testDoubleComplex[2]));
- node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.DoubleComplexNumber"));
- QVERIFY(node != 0);
- WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::DoubleComplexNumber);
+ list.clear();
+ list.append(QVariant::fromValue(testDoubleComplex[0]));
+ list.append(QVariant::fromValue(testDoubleComplex[1]));
+ list.append(QVariant::fromValue(testDoubleComplex[2]));
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.DoubleComplexNumber"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::DoubleComplexNumber);
- list.clear();
- list.append(QVariant::fromValue(testAxisInfo[0]));
- list.append(QVariant::fromValue(testAxisInfo[1]));
- list.append(QVariant::fromValue(testAxisInfo[2]));
- node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.AxisInformation"));
- QVERIFY(node != 0);
- WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::AxisInformation);
+ list.clear();
+ list.append(QVariant::fromValue(testAxisInfo[0]));
+ list.append(QVariant::fromValue(testAxisInfo[1]));
+ list.append(QVariant::fromValue(testAxisInfo[2]));
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.AxisInformation"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::AxisInformation);
- list.clear();
- list.append(QVariant::fromValue(testXV[0]));
- list.append(QVariant::fromValue(testXV[1]));
- list.append(QVariant::fromValue(testXV[2]));
- node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.XV"));
- QVERIFY(node != 0);
- WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::XV);
- } else {
- QWARN("ExtensionObject types are not supported by freeopcua");
- }
+ list.clear();
+ list.append(QVariant::fromValue(testXV[0]));
+ list.append(QVariant::fromValue(testXV[1]));
+ list.append(QVariant::fromValue(testXV[2]));
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.XV"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::XV);
+
+ if (opcuaClient->backend() != QLatin1String("open62541"))
+ qInfo("The uacpp backend currently does not support writing extension objects");
+ else {
+ node.reset(opcuaClient->node(QStringLiteral("ns=2;s=Demo.Static.Arrays.ExtensionObject")));
+ QVERIFY(node != nullptr);
+
+ QVariantList value;
+
+ for (int i = 0; i < testRanges.size(); ++i) {
+ QOpcUa::QExtensionObject obj;
+ ENCODE_EXTENSION_OBJECT(obj, i);
+ value.append(obj);
+ }
- if (opcuaClient->backend() == QLatin1String("freeopcua"))
- QSKIP("XmlElement support is not yet implemented in the freeopcua library");
+ WRITE_VALUE_ATTRIBUTE(node, value, QOpcUa::Types::ExtensionObject); // Write value to check for
+ }
list.clear();
list.append(xmlElements[0]);
list.append(xmlElements[1]);
list.append(xmlElements[2]);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.XmlElement"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::XmlElement);
+
+ list.clear();
+ list.append(testExpandedNodeId[0]);
+ list.append(testExpandedNodeId[1]);
+ list.append(testExpandedNodeId[2]);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.ExpandedNodeId"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::ExpandedNodeId);
+
+ if (opcuaClient->backend() == QStringLiteral("open62541")) {
+ list.clear();
+ list.append(testArguments[0]);
+ list.append(testArguments[1]);
+ list.append(testArguments[2]);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Argument"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, list, QOpcUa::Argument);
+ } else {
+ qInfo("The argument type is currently only supported in the open62541 backend");
+ }
}
void Tst_QOpcUaClient::readArray()
@@ -1222,286 +2034,322 @@ void Tst_QOpcUaClient::readArray()
QFETCH(QOpcUaClient *, opcuaClient);
OpcuaConnector connector(opcuaClient, m_endpoint);
- QScopedPointer<QOpcUaNode> booleanArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Boolean"));
- QVERIFY(booleanArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(booleanArrayNode);
- QVariant booleanArray = booleanArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(booleanArray.type() == QVariant::List);
- QVERIFY(booleanArray.toList().length() == 3);
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Boolean"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant booleanArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(booleanArray.type(), QVariant::List);
+ QCOMPARE(booleanArray.toList().length(), 3);
QCOMPARE(booleanArray.toList()[0].type(), QVariant::Bool);
QCOMPARE(booleanArray.toList()[0].toBool(), true);
QCOMPARE(booleanArray.toList()[1].toBool(), false);
QCOMPARE(booleanArray.toList()[2].toBool(), true);
- QScopedPointer<QOpcUaNode> int32ArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Int32"));
- QVERIFY(int32ArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(int32ArrayNode);
- QVariant int32Array = int32ArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(int32Array.type() == QVariant::List);
- QVERIFY(int32Array.toList().length() == 3);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Int32"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant int32Array = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(int32Array.type(), QVariant::List);
+ QCOMPARE(int32Array.toList().length(), 3);
QCOMPARE(int32Array.toList()[0].type(), QVariant::Int);
QCOMPARE(int32Array.toList()[0].toInt(), std::numeric_limits<qint32>::min());
- QCOMPARE(int32Array.toList()[1].toInt(), std::numeric_limits<qint32>::max());
+ QCOMPARE(int32Array.toList()[1].toInt(), (std::numeric_limits<qint32>::max)());
QCOMPARE(int32Array.toList()[2].toInt(), 10);
- QScopedPointer<QOpcUaNode> uint32ArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.UInt32"));
- QVERIFY(uint32ArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(uint32ArrayNode);
- QVariant uint32Array = uint32ArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(uint32Array.type() == QVariant::List);
- QVERIFY(uint32Array.toList().length() == 3);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.UInt32"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant uint32Array = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(uint32Array.type(), QVariant::List);
+ QCOMPARE(uint32Array.toList().length(), 3);
QCOMPARE(uint32Array.toList()[0].type(), QVariant::UInt);
QCOMPARE(uint32Array.toList()[0].toUInt(), std::numeric_limits<quint32>::min());
- QCOMPARE(uint32Array.toList()[1].toUInt(), std::numeric_limits<quint32>::max());
+ QCOMPARE(uint32Array.toList()[1].toUInt(), (std::numeric_limits<quint32>::max)());
QCOMPARE(uint32Array.toList()[2].toUInt(), quint32(10));
- QScopedPointer<QOpcUaNode> doubleArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Double"));
- QVERIFY(doubleArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(doubleArrayNode);
- QVariant doubleArray = doubleArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(doubleArray.type() == QVariant::List);
- QVERIFY(doubleArray.toList().length() == 3);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Double"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant doubleArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(doubleArray.type(), QVariant::List);
+ QCOMPARE(doubleArray.toList().length(), 3);
QCOMPARE(doubleArray.toList()[0].type(), QVariant::Double);
QCOMPARE(doubleArray.toList()[0].toDouble(), double(23.5));
QCOMPARE(doubleArray.toList()[1].toDouble(), double(23.6));
QCOMPARE(doubleArray.toList()[2].toDouble(), double(23.7));
- QScopedPointer<QOpcUaNode> floatArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Float"));
- QVERIFY(floatArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(floatArrayNode);
- QVariant floatArray = floatArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(floatArray.type() == QVariant::List);
- QVERIFY(floatArray.toList().length() == 3);
- QVERIFY(floatArray.toList()[0].userType() == QMetaType::Float);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Float"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant floatArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(floatArray.type(), QVariant::List);
+ QCOMPARE(floatArray.toList().length(), 3);
+ QCOMPARE(floatArray.toList()[0].userType(), QMetaType::Float);
QCOMPARE(floatArray.toList()[0].toFloat(), float(23.5));
QCOMPARE(floatArray.toList()[1].toFloat(), float(23.6));
QCOMPARE(floatArray.toList()[2].toFloat(), float(23.7));
- QScopedPointer<QOpcUaNode> stringArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.String"));
- QVERIFY(stringArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(stringArrayNode);
- QVariant stringArray = stringArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(stringArray.type() == QVariant::List);
- QVERIFY(stringArray.toList().length() == 3);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.String"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant stringArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(stringArray.type(), QVariant::List);
+ QCOMPARE(stringArray.toList().length(), 3);
QCOMPARE(stringArray.toList()[0].type(), QVariant::String);
QCOMPARE(stringArray.toList()[0].toString(), QStringLiteral("Test1"));
QCOMPARE(stringArray.toList()[1].toString(), QStringLiteral("Test2"));
QCOMPARE(stringArray.toList()[2].toString(), QStringLiteral("Test3"));
- QScopedPointer<QOpcUaNode> dateTimeArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.DateTime"));
- QVERIFY(dateTimeArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(dateTimeArrayNode);
- QVariant dateTimeArray = dateTimeArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(dateTimeArray.type() == QVariant::List);
- QVERIFY(dateTimeArray.toList().length() == 3);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.DateTime"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant dateTimeArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(dateTimeArray.type(), QVariant::List);
+ QCOMPARE(dateTimeArray.toList().length(), 3);
QCOMPARE(dateTimeArray.toList()[0].type(), QVariant::DateTime);
- QScopedPointer<QOpcUaNode> ltArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.LocalizedText"));
- QVERIFY(ltArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(ltArrayNode);
- QVariant ltArray = ltArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(ltArray.type() == QVariant::List);
- QVERIFY(ltArray.toList().length() == 3);
- QVERIFY(ltArray.toList()[0].value<QOpcUa::QLocalizedText>() == localizedTexts[0]);
- QVERIFY(ltArray.toList()[1].value<QOpcUa::QLocalizedText>() == localizedTexts[1]);
- QVERIFY(ltArray.toList()[2].value<QOpcUa::QLocalizedText>() == localizedTexts[2]);
-
- QScopedPointer<QOpcUaNode> uint16ArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.UInt16"));
- QVERIFY(uint16ArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(uint16ArrayNode);
- QVariant uint16Array = uint16ArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(uint16Array.type() == QVariant::List);
- QVERIFY(uint16Array.toList().length() == 3);
- QVERIFY(uint16Array.toList()[0].userType() == QMetaType::UShort);
- QVERIFY(uint16Array.toList()[0] == std::numeric_limits<quint16>::min());
- QVERIFY(uint16Array.toList()[1] == std::numeric_limits<quint16>::max());
- QVERIFY(uint16Array.toList()[2] == quint16(10));
-
- QScopedPointer<QOpcUaNode> int16ArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Int16"));
- QVERIFY(int16ArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(int16ArrayNode);
- QVariant int16Array = int16ArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(int16Array.type() == QVariant::List);
- QVERIFY(int16Array.toList().length() == 3);
- QVERIFY(int16Array.toList()[0].userType() == QMetaType::Short);
- QVERIFY(int16Array.toList()[0] == std::numeric_limits<qint16>::min());
- QVERIFY(int16Array.toList()[1] == std::numeric_limits<qint16>::max());
- QVERIFY(int16Array.toList()[2] == qint16(10));
-
- QScopedPointer<QOpcUaNode> uint64ArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.UInt64"));
- QVERIFY(uint64ArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(uint64ArrayNode);
- QVariant uint64Array = uint64ArrayNode->attribute(QOpcUa::NodeAttribute::Value);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.LocalizedText"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant ltArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(ltArray.type(), QVariant::List);
+ QCOMPARE(ltArray.toList().length(), 3);
+ QCOMPARE(ltArray.toList()[0].value<QOpcUa::QLocalizedText>(), localizedTexts[0]);
+ QCOMPARE(ltArray.toList()[1].value<QOpcUa::QLocalizedText>(), localizedTexts[1]);
+ QCOMPARE(ltArray.toList()[2].value<QOpcUa::QLocalizedText>(), localizedTexts[2]);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.UInt16"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant uint16Array = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(uint16Array.type(), QVariant::List);
+ QCOMPARE(uint16Array.toList().length(), 3);
+ QCOMPARE(uint16Array.toList()[0].userType(), QMetaType::UShort);
+ QCOMPARE(uint16Array.toList()[0], std::numeric_limits<quint16>::min());
+ QCOMPARE(uint16Array.toList()[1], (std::numeric_limits<quint16>::max)());
+ QCOMPARE(uint16Array.toList()[2], quint16(10));
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Int16"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant int16Array = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(int16Array.type(), QVariant::List);
+ QCOMPARE(int16Array.toList().length(), 3);
+ QCOMPARE(int16Array.toList()[0].userType(), QMetaType::Short);
+ QCOMPARE(int16Array.toList()[0], std::numeric_limits<qint16>::min());
+ QCOMPARE(int16Array.toList()[1], (std::numeric_limits<qint16>::max)());
+ QCOMPARE(int16Array.toList()[2], qint16(10));
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.UInt64"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant uint64Array = node->attribute(QOpcUa::NodeAttribute::Value);
QCOMPARE(uint64Array.type(), QVariant::List);
QCOMPARE(uint64Array.toList().length(), 3);
QCOMPARE(uint64Array.toList()[0].type(), QVariant::ULongLong);
- QVERIFY(uint64Array.toList()[0] == std::numeric_limits<quint64>::min());
- QVERIFY(uint64Array.toList()[1] == std::numeric_limits<quint64>::max());
- QVERIFY(uint64Array.toList()[2] == quint64(10));
-
- QScopedPointer<QOpcUaNode> int64ArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Int64"));
- QVERIFY(int64ArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(int64ArrayNode);
- QVariant int64Array = int64ArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(int64Array.type() == QVariant::List && int64Array.toList().length() == 3);
+ QCOMPARE(uint64Array.toList()[0], std::numeric_limits<quint64>::min());
+ QCOMPARE(uint64Array.toList()[1], (std::numeric_limits<quint64>::max)());
+ QCOMPARE(uint64Array.toList()[2], quint64(10));
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Int64"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant int64Array = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(int64Array.type(), QVariant::List);
+ QCOMPARE(int64Array.toList().length(), 3);
QCOMPARE(int64Array.toList()[0].type(), QVariant::LongLong);
- QVERIFY(int64Array.toList()[0] == std::numeric_limits<qint64>::min());
- QVERIFY(int64Array.toList()[1] == std::numeric_limits<qint64>::max());
- QVERIFY(int64Array.toList()[2] == qint64(10));
-
- QScopedPointer<QOpcUaNode> byteArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Byte"));
- QVERIFY(byteArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(byteArrayNode);
- QVariant byteArray = byteArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(byteArray.type() == QVariant::List);
- QVERIFY(byteArray.toList().length() == 3);
- QVERIFY(byteArray.toList()[0].userType() == QMetaType::UChar);
- QVERIFY(byteArray.toList()[0] == std::numeric_limits<quint8>::min());
- QVERIFY(byteArray.toList()[1] == std::numeric_limits<quint8>::max());
- QVERIFY(byteArray.toList()[2] == quint8(10));
-
- QScopedPointer<QOpcUaNode> byteStringArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.ByteString"));
- QVERIFY(byteStringArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(byteStringArrayNode);
- QVariant byteStringArray = byteStringArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(byteStringArray.type() == QVariant::List);
- QVERIFY(byteStringArray.toList().length() == 3);
- QVERIFY(byteStringArray.toList()[0].userType() == QMetaType::QByteArray);
- QVERIFY(byteStringArray.toList()[0] == "abc");
- QVERIFY(byteStringArray.toList()[1] == "def");
+ QCOMPARE(int64Array.toList()[0], std::numeric_limits<qint64>::min());
+ QCOMPARE(int64Array.toList()[1], (std::numeric_limits<qint64>::max)());
+ QCOMPARE(int64Array.toList()[2], qint64(10));
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Byte"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant byteArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(byteArray.type(), QVariant::List);
+ QCOMPARE(byteArray.toList().length(), 3);
+ QCOMPARE(byteArray.toList()[0].userType(), QMetaType::UChar);
+ QCOMPARE(byteArray.toList()[0], std::numeric_limits<quint8>::min());
+ QCOMPARE(byteArray.toList()[1], (std::numeric_limits<quint8>::max)());
+ QCOMPARE(byteArray.toList()[2], quint8(10));
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.ByteString"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant byteStringArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(byteStringArray.type(), QVariant::List);
+ QCOMPARE(byteStringArray.toList().length(), 3);
+ QCOMPARE(byteStringArray.toList()[0].userType(), QMetaType::QByteArray);
+ QCOMPARE(byteStringArray.toList()[0], "abc");
+ QCOMPARE(byteStringArray.toList()[1], "def");
QByteArray withNull("gh");
withNull.append('\0');
withNull.append("i");
- QVERIFY(byteStringArray.toList()[2] == withNull);
-
- QScopedPointer<QOpcUaNode> guidArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Guid"));
- QVERIFY(guidArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(guidArrayNode);
- QVariant guidArray = guidArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(guidArray.type() == QVariant::List);
- QVERIFY(guidArray.toList().length() == 2);
- QCOMPARE(guidArray.toList()[0].toUuid(), QUuid("e0bd5ccd-f571-4545-9352-61a0f8cb9216}"));
- QCOMPARE(guidArray.toList()[1].toUuid(), QUuid("460ebe04-89d8-42f3-a0e0-7b45940f1a4e4"));
-
- QScopedPointer<QOpcUaNode> sbyteArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.SByte"));
- QVERIFY(sbyteArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(sbyteArrayNode);
- QVariant sbyteArray = sbyteArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(sbyteArray.type() == QVariant::List);
- QVERIFY(sbyteArray.toList().length() == 3);
- QVERIFY(sbyteArray.toList()[0].userType() == QMetaType::SChar);
- QVERIFY(sbyteArray.toList()[0] == std::numeric_limits<qint8>::min());
- QVERIFY(sbyteArray.toList()[1] == std::numeric_limits<qint8>::max());
- QVERIFY(sbyteArray.toList()[2] == qint8(10));
-
- QScopedPointer<QOpcUaNode> nodeIdArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.NodeId"));
- QVERIFY(nodeIdArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(nodeIdArrayNode);
- QVariant nodeIdArray = nodeIdArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(nodeIdArray.type() == QVariant::List);
- QVERIFY(nodeIdArray.toList().length() == 3);
+ QCOMPARE(byteStringArray.toList()[2], withNull);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Guid"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant guidArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(guidArray.type(), QVariant::List);
+ QCOMPARE(guidArray.toList().length(), 3);
+ QCOMPARE(guidArray.toList()[0].toUuid(), testUuid[0]);
+ QCOMPARE(guidArray.toList()[1].toUuid(), testUuid[1]);
+ QCOMPARE(guidArray.toList()[2].toUuid(), testUuid[2]);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.SByte"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant sbyteArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(sbyteArray.type(), QVariant::List);
+ QCOMPARE(sbyteArray.toList().length(), 3);
+ QCOMPARE(sbyteArray.toList()[0].userType(), QMetaType::SChar);
+ QCOMPARE(sbyteArray.toList()[0], std::numeric_limits<qint8>::min());
+ QCOMPARE(sbyteArray.toList()[1], (std::numeric_limits<qint8>::max)());
+ QCOMPARE(sbyteArray.toList()[2], qint8(10));
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.NodeId"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant nodeIdArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(nodeIdArray.type(), QVariant::List);
+ QCOMPARE(nodeIdArray.toList().length(), 3);
QCOMPARE(nodeIdArray.toList()[0].type(), QVariant::String);
QCOMPARE(nodeIdArray.toList()[0].toString(), QStringLiteral("ns=0;i=0"));
QCOMPARE(nodeIdArray.toList()[1].toString(), QStringLiteral("ns=0;i=1"));
QCOMPARE(nodeIdArray.toList()[2].toString(), QStringLiteral("ns=0;i=2"));
- QScopedPointer<QOpcUaNode> qualifiedNameArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.QualifiedName"));
- QVERIFY(nodeIdArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(qualifiedNameArrayNode)
- QVariant qualifiedNameArray = qualifiedNameArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(qualifiedNameArray.type() == QVariant::List);
- QVERIFY(qualifiedNameArray.toList().length() == 3);
- QVERIFY(qualifiedNameArray.toList()[0].value<QOpcUa::QQualifiedName>() == QOpcUa::QQualifiedName(0, "Test0"));
- QVERIFY(qualifiedNameArray.toList()[1].value<QOpcUa::QQualifiedName>() == QOpcUa::QQualifiedName(1, "Test1"));
- QVERIFY(qualifiedNameArray.toList()[2].value<QOpcUa::QQualifiedName>() == QOpcUa::QQualifiedName(2, "Test2"));
-
- QScopedPointer<QOpcUaNode> statusCodeArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.StatusCode"));
- QVERIFY(statusCodeArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(statusCodeArrayNode);
- QVariant statusCodeArray = statusCodeArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(statusCodeArray.type() == QVariant::List);
- QVERIFY(statusCodeArray.toList().length() == 3);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.QualifiedName"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node)
+ QVariant qualifiedNameArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(qualifiedNameArray.type(), QVariant::List);
+ QCOMPARE(qualifiedNameArray.toList().length(), 3);
+ QCOMPARE(qualifiedNameArray.toList()[0].value<QOpcUa::QQualifiedName>(), QOpcUa::QQualifiedName(0, "Test0"));
+ QCOMPARE(qualifiedNameArray.toList()[1].value<QOpcUa::QQualifiedName>(), QOpcUa::QQualifiedName(1, "Test1"));
+ QCOMPARE(qualifiedNameArray.toList()[2].value<QOpcUa::QQualifiedName>(), QOpcUa::QQualifiedName(2, "Test2"));
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.StatusCode"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant statusCodeArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(statusCodeArray.type(), QVariant::List);
+ QCOMPARE(statusCodeArray.toList().length(), 3);
QCOMPARE(statusCodeArray.toList()[0].value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
QCOMPARE(statusCodeArray.toList()[1].value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::BadUnexpectedError);
QCOMPARE(statusCodeArray.toList()[2].value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::BadInternalError);
- if (opcuaClient->backend() != QLatin1String("freeopcua")) {
- QScopedPointer<QOpcUaNode> rangeArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Range"));
- QVERIFY(rangeArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(rangeArrayNode);
- QVariant rangeArray = rangeArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(rangeArray.type() == QVariant::List);
- QVERIFY(rangeArray.toList().length() == 3);
- QCOMPARE(rangeArray.toList()[0].value<QOpcUa::QRange>(), testRanges[0]);
- QCOMPARE(rangeArray.toList()[1].value<QOpcUa::QRange>(), testRanges[1]);
- QCOMPARE(rangeArray.toList()[2].value<QOpcUa::QRange>(), testRanges[2]);
-
- QScopedPointer<QOpcUaNode> euiArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.EUInformation"));
- QVERIFY(euiArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(euiArrayNode);
- QVariant euiArray = euiArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(euiArray.type() == QVariant::List);
- QVERIFY(euiArray.toList().length() == 3);
- QCOMPARE(euiArray.toList()[0].value<QOpcUa::QEUInformation>(), testEUInfos[0]);
- QCOMPARE(euiArray.toList()[1].value<QOpcUa::QEUInformation>(), testEUInfos[1]);
- QCOMPARE(euiArray.toList()[2].value<QOpcUa::QEUInformation>(), testEUInfos[2]);
-
- QScopedPointer<QOpcUaNode> complexArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.ComplexNumber"));
- QVERIFY(complexArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(complexArrayNode);
- QVariant complexArray = complexArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(complexArray.type() == QVariant::List);
- QVERIFY(complexArray.toList().length() == 3);
- QCOMPARE(complexArray.toList()[0].value<QOpcUa::QComplexNumber>(), testComplex[0]);
- QCOMPARE(complexArray.toList()[1].value<QOpcUa::QComplexNumber>(), testComplex[1]);
- QCOMPARE(complexArray.toList()[2].value<QOpcUa::QComplexNumber>(), testComplex[2]);
-
- QScopedPointer<QOpcUaNode> doubleComplexArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.DoubleComplexNumber"));
- QVERIFY(doubleComplexArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(doubleComplexArrayNode);
- QVariant doubleComplexArray = doubleComplexArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(doubleComplexArray.type() == QVariant::List);
- QVERIFY(doubleComplexArray.toList().length() == 3);
- QCOMPARE(doubleComplexArray.toList()[0].value<QOpcUa::QDoubleComplexNumber>(), testDoubleComplex[0]);
- QCOMPARE(doubleComplexArray.toList()[1].value<QOpcUa::QDoubleComplexNumber>(), testDoubleComplex[1]);
- QCOMPARE(doubleComplexArray.toList()[2].value<QOpcUa::QDoubleComplexNumber>(), testDoubleComplex[2]);
-
- QScopedPointer<QOpcUaNode> axisInfoArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.AxisInformation"));
- QVERIFY(axisInfoArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(axisInfoArrayNode);
- QVariant axisInfoArray = axisInfoArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(axisInfoArray.type() == QVariant::List);
- QVERIFY(axisInfoArray.toList().length() == 3);
- QCOMPARE(axisInfoArray.toList()[0].value<QOpcUa::QAxisInformation>(), testAxisInfo[0]);
- QCOMPARE(axisInfoArray.toList()[1].value<QOpcUa::QAxisInformation>(), testAxisInfo[1]);
- QCOMPARE(axisInfoArray.toList()[2].value<QOpcUa::QAxisInformation>(), testAxisInfo[2]);
-
- QScopedPointer<QOpcUaNode> xVArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.XV"));
- QVERIFY(xVArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(xVArrayNode);
- QVariant xVArray = xVArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(xVArray.type() == QVariant::List);
- QVERIFY(xVArray.toList().length() == 3);
- QCOMPARE(xVArray.toList()[0].value<QOpcUa::QXValue>(), testXV[0]);
- QCOMPARE(xVArray.toList()[1].value<QOpcUa::QXValue>(), testXV[1]);
- QCOMPARE(xVArray.toList()[2].value<QOpcUa::QXValue>(), testXV[2]);
- } else {
- QWARN("ExtensionObject types are not supported by freeopcua");
- }
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Range"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant rangeArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(rangeArray.type(), QVariant::List);
+ QCOMPARE(rangeArray.toList().length(), 3);
+ QCOMPARE(rangeArray.toList()[0].value<QOpcUa::QRange>(), testRanges[0]);
+ QCOMPARE(rangeArray.toList()[1].value<QOpcUa::QRange>(), testRanges[1]);
+ QCOMPARE(rangeArray.toList()[2].value<QOpcUa::QRange>(), testRanges[2]);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.EUInformation"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant euiArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(euiArray.type(), QVariant::List);
+ QCOMPARE(euiArray.toList().length(), 3);
+ QCOMPARE(euiArray.toList()[0].value<QOpcUa::QEUInformation>(), testEUInfos[0]);
+ QCOMPARE(euiArray.toList()[1].value<QOpcUa::QEUInformation>(), testEUInfos[1]);
+ QCOMPARE(euiArray.toList()[2].value<QOpcUa::QEUInformation>(), testEUInfos[2]);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.ComplexNumber"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant complexArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(complexArray.type(), QVariant::List);
+ QCOMPARE(complexArray.toList().length(), 3);
+ QCOMPARE(complexArray.toList()[0].value<QOpcUa::QComplexNumber>(), testComplex[0]);
+ QCOMPARE(complexArray.toList()[1].value<QOpcUa::QComplexNumber>(), testComplex[1]);
+ QCOMPARE(complexArray.toList()[2].value<QOpcUa::QComplexNumber>(), testComplex[2]);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.DoubleComplexNumber"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant doubleComplexArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(doubleComplexArray.type(), QVariant::List);
+ QCOMPARE(doubleComplexArray.toList().length(), 3);
+ QCOMPARE(doubleComplexArray.toList()[0].value<QOpcUa::QDoubleComplexNumber>(), testDoubleComplex[0]);
+ QCOMPARE(doubleComplexArray.toList()[1].value<QOpcUa::QDoubleComplexNumber>(), testDoubleComplex[1]);
+ QCOMPARE(doubleComplexArray.toList()[2].value<QOpcUa::QDoubleComplexNumber>(), testDoubleComplex[2]);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.AxisInformation"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant axisInfoArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(axisInfoArray.type(), QVariant::List);
+ QCOMPARE(axisInfoArray.toList().length(), 3);
+ QCOMPARE(axisInfoArray.toList()[0].value<QOpcUa::QAxisInformation>(), testAxisInfo[0]);
+ QCOMPARE(axisInfoArray.toList()[1].value<QOpcUa::QAxisInformation>(), testAxisInfo[1]);
+ QCOMPARE(axisInfoArray.toList()[2].value<QOpcUa::QAxisInformation>(), testAxisInfo[2]);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.XV"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant xVArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(xVArray.type(), QVariant::List);
+ QCOMPARE(xVArray.toList().length(), 3);
+ QCOMPARE(xVArray.toList()[0].value<QOpcUa::QXValue>(), testXV[0]);
+ QCOMPARE(xVArray.toList()[1].value<QOpcUa::QXValue>(), testXV[1]);
+ QCOMPARE(xVArray.toList()[2].value<QOpcUa::QXValue>(), testXV[2]);
+
+ if (opcuaClient->backend() != QLatin1String("open62541"))
+ qInfo("The uacpp backend currently does not support reading extension objects");
+ else {
+ node.reset(opcuaClient->node(QStringLiteral("ns=2;s=Demo.Static.Arrays.ExtensionObject")));
+ QVERIFY(node != nullptr);
- if (opcuaClient->backend() == QLatin1String("freeopcua"))
- QSKIP("XmlElement support is not yet implemented in the freeopcua backend");
+ READ_MANDATORY_VARIABLE_NODE(node);
+
+ QVariantList list = node->attribute(QOpcUa::NodeAttribute::Value).toList();
+ QCOMPARE(list.size(), testRanges.size());
+
+ for (int i = 0; i < testRanges.size(); ++i) {
+ QOpcUa::QExtensionObject obj = list.at(i).value<QOpcUa::QExtensionObject>();
+ VERIFY_EXTENSION_OBJECT(obj, i);
+ }
+ }
- QScopedPointer<QOpcUaNode> xmlElementArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.XmlElement"));
- QVERIFY(xmlElementArrayNode != 0);
- READ_MANDATORY_VARIABLE_NODE(xmlElementArrayNode)
- QVariant xmlElementArray = xmlElementArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(xmlElementArray.type() == QVariant::List);
- QVERIFY(xmlElementArray.toList().length() == 3);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.XmlElement"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node)
+ QVariant xmlElementArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(xmlElementArray.type(), QVariant::List);
+ QCOMPARE(xmlElementArray.toList().length(), 3);
QCOMPARE(xmlElementArray.toList()[0].type(), QVariant::String);
QCOMPARE(xmlElementArray.toList()[0].toString(), xmlElements[0]);
QCOMPARE(xmlElementArray.toList()[1].toString(), xmlElements[1]);
QCOMPARE(xmlElementArray.toList()[2].toString(), xmlElements[2]);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.ExpandedNodeId"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node)
+ QVariant expandedNodeIdArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(expandedNodeIdArray.type(), QVariant::List);
+ QCOMPARE(expandedNodeIdArray.toList().length(), 3);
+ QCOMPARE(expandedNodeIdArray.toList()[0].value<QOpcUa::QExpandedNodeId>(), testExpandedNodeId[0]);
+ QCOMPARE(expandedNodeIdArray.toList()[1].value<QOpcUa::QExpandedNodeId>(), testExpandedNodeId[1]);
+ QCOMPARE(expandedNodeIdArray.toList()[2].value<QOpcUa::QExpandedNodeId>(), testExpandedNodeId[2]);
+
+ if (opcuaClient->backend() == QStringLiteral("open62541")) {
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Argument"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node)
+ QVariant argumentArray = node->attribute(QOpcUa::NodeAttribute::Value);
+ QCOMPARE(argumentArray.type(), QVariant::List);
+ QCOMPARE(argumentArray.toList().length(), 3);
+ QCOMPARE(argumentArray.toList()[0].value<QOpcUa::QArgument>(), testArguments[0]);
+ QCOMPARE(argumentArray.toList()[1].value<QOpcUa::QArgument>(), testArguments[1]);
+ QCOMPARE(argumentArray.toList()[2].value<QOpcUa::QArgument>(), testArguments[2]);
+ } else {
+ qInfo("The argument type is currently only supported in the open62541 backend");
+ }
}
void Tst_QOpcUaClient::writeScalar()
@@ -1509,61 +2357,61 @@ void Tst_QOpcUaClient::writeScalar()
QFETCH(QOpcUaClient *, opcuaClient);
OpcuaConnector connector(opcuaClient, m_endpoint);
- QScopedPointer<QOpcUaNode> booleanNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Boolean"));
- QVERIFY(booleanNode != 0);
- WRITE_VALUE_ATTRIBUTE(booleanNode, true, QOpcUa::Types::Boolean);
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Boolean"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, true, QOpcUa::Types::Boolean);
- QScopedPointer<QOpcUaNode> int32Node(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Int32"));
- QVERIFY(int32Node != 0);
- WRITE_VALUE_ATTRIBUTE(int32Node, std::numeric_limits<qint32>::min(), QOpcUa::Types::Int32);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Int32"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, std::numeric_limits<qint32>::min(), QOpcUa::Types::Int32);
- QScopedPointer<QOpcUaNode> uint32Node(opcuaClient->node("ns=2;s=Demo.Static.Scalar.UInt32"));
- QVERIFY(uint32Node != 0);
- WRITE_VALUE_ATTRIBUTE(uint32Node, std::numeric_limits<quint32>::max(), QOpcUa::UInt32);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.UInt32"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, (std::numeric_limits<quint32>::max)(), QOpcUa::UInt32);
- QScopedPointer<QOpcUaNode> doubleNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Double"));
- QVERIFY(doubleNode != 0);
- WRITE_VALUE_ATTRIBUTE(doubleNode, 42, QOpcUa::Double);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Double"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, 42, QOpcUa::Double);
- QScopedPointer<QOpcUaNode> floatNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Float"));
- QVERIFY(floatNode != 0);
- WRITE_VALUE_ATTRIBUTE(floatNode, 42, QOpcUa::Float);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Float"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, 42, QOpcUa::Float);
- QScopedPointer<QOpcUaNode> stringNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.String"));
- QVERIFY(stringNode != 0);
- WRITE_VALUE_ATTRIBUTE(stringNode, "QOpcUa Teststring", QOpcUa::String);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.String"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, "QOpcUa Teststring", QOpcUa::String);
- QScopedPointer<QOpcUaNode> dtNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.DateTime"));
- QVERIFY(dtNode != 0);
- WRITE_VALUE_ATTRIBUTE(dtNode, QDateTime::currentDateTime(), QOpcUa::DateTime);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.DateTime"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, QDateTime::currentDateTime(), QOpcUa::DateTime);
- QScopedPointer<QOpcUaNode> uint16Node(opcuaClient->node("ns=2;s=Demo.Static.Scalar.UInt16"));
- QVERIFY(uint16Node != 0);
- WRITE_VALUE_ATTRIBUTE(uint16Node, std::numeric_limits<quint16>::max(), QOpcUa::UInt16);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.UInt16"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, (std::numeric_limits<quint16>::max)(), QOpcUa::UInt16);
- QScopedPointer<QOpcUaNode> int16Node(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Int16"));
- QVERIFY(int16Node != 0);
- WRITE_VALUE_ATTRIBUTE(int16Node, std::numeric_limits<qint16>::min(), QOpcUa::Int16);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Int16"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, std::numeric_limits<qint16>::min(), QOpcUa::Int16);
- QScopedPointer<QOpcUaNode> uint64Node(opcuaClient->node("ns=2;s=Demo.Static.Scalar.UInt64"));
- QVERIFY(uint64Node != 0);
- WRITE_VALUE_ATTRIBUTE(uint64Node, std::numeric_limits<quint64>::max(), QOpcUa::UInt64);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.UInt64"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, (std::numeric_limits<quint64>::max)(), QOpcUa::UInt64);
- QScopedPointer<QOpcUaNode> int64Node(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Int64"));
- QVERIFY(int64Node != 0);
- WRITE_VALUE_ATTRIBUTE(int64Node, std::numeric_limits<qint64>::min(), QOpcUa::Int64);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Int64"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, std::numeric_limits<qint64>::min(), QOpcUa::Int64);
- QScopedPointer<QOpcUaNode> byteNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Byte"));
- QVERIFY(byteNode != 0);
- WRITE_VALUE_ATTRIBUTE(byteNode, std::numeric_limits<quint8>::max(), QOpcUa::Byte);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Byte"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, (std::numeric_limits<quint8>::max)(), QOpcUa::Byte);
- QScopedPointer<QOpcUaNode> sbyteNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.SByte"));
- QVERIFY(sbyteNode != 0);
- WRITE_VALUE_ATTRIBUTE(sbyteNode, std::numeric_limits<qint8>::min(), QOpcUa::SByte);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.SByte"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, std::numeric_limits<qint8>::min(), QOpcUa::SByte);
- QScopedPointer<QOpcUaNode> ltNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.LocalizedText"));
- QVERIFY(ltNode != 0);
- WRITE_VALUE_ATTRIBUTE(ltNode, QVariant::fromValue(localizedTexts[0]), QOpcUa::LocalizedText);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.LocalizedText"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, localizedTexts[0], QOpcUa::LocalizedText);
QByteArray withNull("gh");
withNull.append('\0');
@@ -1571,61 +2419,77 @@ void Tst_QOpcUaClient::writeScalar()
QVariant data = withNull;
- QScopedPointer<QOpcUaNode> byteStringNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.ByteString"));
- QVERIFY(byteStringNode != 0);
- WRITE_VALUE_ATTRIBUTE(byteStringNode, data, QOpcUa::ByteString);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.ByteString"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, data, QOpcUa::ByteString);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Guid"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, testUuid[0], QOpcUa::Guid);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.NodeId"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, "ns=42;s=Test", QOpcUa::NodeId);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.QualifiedName"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, QOpcUa::QQualifiedName(0, QLatin1String("Test0")), QOpcUa::QualifiedName);
- QScopedPointer<QOpcUaNode> guidNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Guid"));
- QVERIFY(guidNode != 0);
- data = QUuid("e0bd5ccd-f571-4545-9352-61a0f8cb9216");
- WRITE_VALUE_ATTRIBUTE(guidNode, data, QOpcUa::Guid);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.StatusCode"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, QOpcUa::UaStatusCode::BadInternalError, QOpcUa::StatusCode);
- QScopedPointer<QOpcUaNode> nodeIdNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.NodeId"));
- QVERIFY(nodeIdNode != 0);
- WRITE_VALUE_ATTRIBUTE(nodeIdNode, "ns=42;s=Test", QOpcUa::NodeId);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Range"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, QVariant::fromValue(testRanges[0]), QOpcUa::Range);
- QScopedPointer<QOpcUaNode> qualifiedNameNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.QualifiedName"));
- QVERIFY(qualifiedNameNode != 0);
- WRITE_VALUE_ATTRIBUTE(qualifiedNameNode, QVariant::fromValue(QOpcUa::QQualifiedName(0, QLatin1String("Test0"))), QOpcUa::QualifiedName);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.EUInformation"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, QVariant::fromValue(testEUInfos[0]), QOpcUa::EUInformation);
- QScopedPointer<QOpcUaNode> statusCodeNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.StatusCode"));
- QVERIFY(statusCodeNode != 0);
- WRITE_VALUE_ATTRIBUTE(statusCodeNode, QOpcUa::UaStatusCode::BadInternalError, QOpcUa::StatusCode);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.ComplexNumber"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, QVariant::fromValue(testComplex[0]), QOpcUa::ComplexNumber);
- if (opcuaClient->backend() != QLatin1String("freeopcua")) {
- QScopedPointer<QOpcUaNode> rangeNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Range"));
- QVERIFY(rangeNode != 0);
- WRITE_VALUE_ATTRIBUTE(rangeNode, QVariant::fromValue(testRanges[0]), QOpcUa::Range);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.DoubleComplexNumber"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, QVariant::fromValue(testDoubleComplex[0]), QOpcUa::DoubleComplexNumber);
- QScopedPointer<QOpcUaNode> euiNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.EUInformation"));
- QVERIFY(euiNode != 0);
- WRITE_VALUE_ATTRIBUTE(euiNode, QVariant::fromValue(testEUInfos[0]), QOpcUa::EUInformation);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.AxisInformation"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, QVariant::fromValue(testAxisInfo[0]), QOpcUa::AxisInformation);
- QScopedPointer<QOpcUaNode> complexNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.ComplexNumber"));
- QVERIFY(complexNode != 0);
- WRITE_VALUE_ATTRIBUTE(complexNode, QVariant::fromValue(testComplex[0]), QOpcUa::ComplexNumber);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.XV"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, QVariant::fromValue(testXV[0]), QOpcUa::XV);
- QScopedPointer<QOpcUaNode> doubleComplexNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.DoubleComplexNumber"));
- QVERIFY(doubleComplexNode != 0);
- WRITE_VALUE_ATTRIBUTE(doubleComplexNode, QVariant::fromValue(testDoubleComplex[0]), QOpcUa::DoubleComplexNumber);
+ if (opcuaClient->backend() != QLatin1String("open62541"))
+ qInfo("The uacpp backend currently does not support writing extension objects");
+ else {
+ node.reset(opcuaClient->node(QStringLiteral("ns=2;s=Demo.Static.Scalar.ExtensionObject")));
+ QVERIFY(node != nullptr);
- QScopedPointer<QOpcUaNode> axisInfoNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.AxisInformation"));
- QVERIFY(axisInfoNode != 0);
- WRITE_VALUE_ATTRIBUTE(axisInfoNode, QVariant::fromValue(testAxisInfo[0]), QOpcUa::AxisInformation);
+ QOpcUa::QExtensionObject obj;
+ ENCODE_EXTENSION_OBJECT(obj, 0);
- QScopedPointer<QOpcUaNode> xVNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.XV"));
- QVERIFY(xVNode != 0);
- WRITE_VALUE_ATTRIBUTE(xVNode, QVariant::fromValue(testXV[0]), QOpcUa::XV);
- } else {
- QWARN("ExtensionObject types are not supported by freeopcua");
+ WRITE_VALUE_ATTRIBUTE(node, obj, QOpcUa::Types::ExtensionObject); // Write value to check for
}
- if (opcuaClient->backend() == QLatin1String("freeopcua"))
- QSKIP("XmlElement support is not yet implemented in the freeopcua backend");
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.XmlElement"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, xmlElements[0], QOpcUa::XmlElement);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.ExpandedNodeId"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, testExpandedNodeId[0], QOpcUa::ExpandedNodeId);
- QScopedPointer<QOpcUaNode> xmlElementNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.XmlElement"));
- QVERIFY(xmlElementNode != 0);
- WRITE_VALUE_ATTRIBUTE(xmlElementNode, xmlElements[0], QOpcUa::XmlElement);
+ if (opcuaClient->backend() == QStringLiteral("open62541")) {
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Argument"));
+ QVERIFY(node != nullptr);
+ WRITE_VALUE_ATTRIBUTE(node, testArguments[0], QOpcUa::Argument);
+ } else {
+ qInfo("The argument type is currently only supported in the open62541 backend");
+ }
}
void Tst_QOpcUaClient::readScalar()
@@ -1634,7 +2498,7 @@ void Tst_QOpcUaClient::readScalar()
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Boolean"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant booleanScalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(booleanScalar.isValid());
@@ -1642,7 +2506,7 @@ void Tst_QOpcUaClient::readScalar()
QCOMPARE(booleanScalar.toBool(), true);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Int32"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant int32Scalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(int32Scalar.isValid());
@@ -1650,15 +2514,15 @@ void Tst_QOpcUaClient::readScalar()
QCOMPARE(int32Scalar.toInt(), std::numeric_limits<qint32>::min());
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.UInt32"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant uint32Scalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(uint32Scalar.isValid());
QCOMPARE(uint32Scalar.type(), QVariant::UInt);
- QCOMPARE(uint32Scalar.toUInt(), std::numeric_limits<quint32>::max());
+ QCOMPARE(uint32Scalar.toUInt(), (std::numeric_limits<quint32>::max)());
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Double"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant doubleScalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(doubleScalar.isValid());
@@ -1666,15 +2530,15 @@ void Tst_QOpcUaClient::readScalar()
QCOMPARE(doubleScalar.toDouble(), double(42));
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Float"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant floatScalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(floatScalar.isValid());
- QVERIFY(floatScalar.userType() == QMetaType::Float);
+ QCOMPARE(floatScalar.userType(), QMetaType::Float);
QCOMPARE(floatScalar.toFloat(), float(42));
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.String"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant stringScalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(stringScalar.isValid());
@@ -1682,88 +2546,88 @@ void Tst_QOpcUaClient::readScalar()
QCOMPARE(stringScalar.toString(), QStringLiteral("QOpcUa Teststring"));
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.DateTime"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant dateTimeScalar = node->attribute(QOpcUa::NodeAttribute::Value);
QCOMPARE(dateTimeScalar.type(), QVariant::DateTime);
QVERIFY(dateTimeScalar.isValid());
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.LocalizedText"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant ltScalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(ltScalar.isValid());
- QVERIFY(ltScalar.value<QOpcUa::QLocalizedText>() == localizedTexts[0]);
+ QCOMPARE(ltScalar.value<QOpcUa::QLocalizedText>(), localizedTexts[0]);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.UInt16"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant uint16Scalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(uint16Scalar.isValid());
- QVERIFY(uint16Scalar.userType() == QMetaType::UShort);
- QVERIFY(uint16Scalar == std::numeric_limits<quint16>::max());
+ QCOMPARE(uint16Scalar.userType(), QMetaType::UShort);
+ QCOMPARE(uint16Scalar, (std::numeric_limits<quint16>::max)());
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Int16"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant int16Scalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(int16Scalar.isValid());
- QVERIFY(int16Scalar.userType() == QMetaType::Short);
- QVERIFY(int16Scalar == std::numeric_limits<qint16>::min());
+ QCOMPARE(int16Scalar.userType(), QMetaType::Short);
+ QCOMPARE(int16Scalar, std::numeric_limits<qint16>::min());
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.UInt64"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant uint64Scalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(uint64Scalar.isValid());
QCOMPARE(uint64Scalar.type(), QVariant::ULongLong);
- QVERIFY(uint64Scalar == std::numeric_limits<quint64>::max());
+ QCOMPARE(uint64Scalar, (std::numeric_limits<quint64>::max)());
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Int64"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant int64Scalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(int64Scalar.isValid());
QCOMPARE(int64Scalar.type(), QVariant::LongLong);
- QVERIFY(int64Scalar == std::numeric_limits<qint64>::min());
+ QCOMPARE(int64Scalar, std::numeric_limits<qint64>::min());
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Byte"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant byteScalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(byteScalar.isValid());
- QVERIFY(byteScalar.userType() == QMetaType::UChar);
- QVERIFY(byteScalar == std::numeric_limits<quint8>::max());
+ QCOMPARE(byteScalar.userType(), QMetaType::UChar);
+ QCOMPARE(byteScalar, (std::numeric_limits<quint8>::max)());
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.SByte"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant sbyteScalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(sbyteScalar.isValid());
- QVERIFY(sbyteScalar.userType() == QMetaType::SChar);
- QVERIFY(sbyteScalar == std::numeric_limits<qint8>::min());
+ QCOMPARE(sbyteScalar.userType(), QMetaType::SChar);
+ QCOMPARE(sbyteScalar, std::numeric_limits<qint8>::min());
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.ByteString"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant byteStringScalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(byteStringScalar.isValid());
- QVERIFY(byteStringScalar.userType() == QMetaType::QByteArray);
+ QCOMPARE(byteStringScalar.userType(), QMetaType::QByteArray);
QByteArray withNull("gh");
withNull.append('\0');
withNull.append("i");
- QVERIFY(byteStringScalar == withNull);
+ QCOMPARE(byteStringScalar, withNull);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Guid"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant guidScalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(guidScalar.isValid());
- QVERIFY(guidScalar.userType() == QMetaType::QUuid);
- QCOMPARE(guidScalar.toUuid(), QUuid("e0bd5ccd-f571-4545-9352-61a0f8cb9216"));
+ QCOMPARE(guidScalar.userType(), QMetaType::QUuid);
+ QCOMPARE(guidScalar.toUuid(), testUuid[0]);
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.NodeId"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant nodeIdScalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(nodeIdScalar.isValid());
@@ -1771,62 +2635,85 @@ void Tst_QOpcUaClient::readScalar()
QCOMPARE(nodeIdScalar.toString(), QStringLiteral("ns=42;s=Test"));
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.QualifiedName"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node)
QVariant qualifiedNameScalar = node->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(qualifiedNameScalar.value<QOpcUa::QQualifiedName>() == QOpcUa::QQualifiedName(0, "Test0"));
+ QCOMPARE(qualifiedNameScalar.value<QOpcUa::QQualifiedName>(), QOpcUa::QQualifiedName(0, "Test0"));
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.StatusCode"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node);
QVariant statusCodeScalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(statusCodeScalar.isValid());
QCOMPARE(statusCodeScalar.value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::BadInternalError);
- if (opcuaClient->backend() != QLatin1String("freeopcua")) {
- node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Range"));
- QVERIFY(node != 0);
- READ_MANDATORY_VARIABLE_NODE(node);
- QVERIFY(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QRange>() == testRanges[0]);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Range"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QRange>(), testRanges[0]);
- node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.EUInformation"));
- QVERIFY(node != 0);
- READ_MANDATORY_VARIABLE_NODE(node);
- QVERIFY(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QEUInformation>() == testEUInfos[0]);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.EUInformation"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QEUInformation>(), testEUInfos[0]);
- node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.ComplexNumber"));
- QVERIFY(node != 0);
- READ_MANDATORY_VARIABLE_NODE(node);
- QVERIFY(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QComplexNumber>() == testComplex[0]);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.ComplexNumber"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QComplexNumber>(), testComplex[0]);
- node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.DoubleComplexNumber"));
- QVERIFY(node != 0);
- READ_MANDATORY_VARIABLE_NODE(node);
- QVERIFY(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QDoubleComplexNumber>() == testDoubleComplex[0]);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.DoubleComplexNumber"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QDoubleComplexNumber>(), testDoubleComplex[0]);
- node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.AxisInformation"));
- QVERIFY(node != 0);
- READ_MANDATORY_VARIABLE_NODE(node);
- QVERIFY(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QAxisInformation>() == testAxisInfo[0]);
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.AxisInformation"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QAxisInformation>(), testAxisInfo[0]);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.XV"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QXValue>(), testXV[0]);
+
+ if (opcuaClient->backend() != QLatin1String("open62541"))
+ qInfo("The uacpp backend currently does not support reading extension objects");
+ else {
+ node.reset(opcuaClient->node(QStringLiteral("ns=2;s=Demo.Static.Scalar.ExtensionObject")));
+ QVERIFY(node != nullptr);
- node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.XV"));
- QVERIFY(node != 0);
READ_MANDATORY_VARIABLE_NODE(node);
- QVERIFY(node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QXValue>() == testXV[0]);
- } else {
- QWARN("ExtensionObject types are not supported by freeopcua");
- }
- if (opcuaClient->backend() == QLatin1String("freeopcua"))
- QSKIP("XmlElement support is not yet implemented in the freeopcua backend");
+ QOpcUa::QExtensionObject obj = node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QExtensionObject>();
+ VERIFY_EXTENSION_OBJECT(obj, 0);
+ }
node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.XmlElement"));
- QVERIFY(node != 0);
+ QVERIFY(node != nullptr);
READ_MANDATORY_VARIABLE_NODE(node)
QVariant xmlElementScalar = node->attribute(QOpcUa::NodeAttribute::Value);
QVERIFY(xmlElementScalar.isValid());
QCOMPARE(xmlElementScalar.type(), QVariant::String);
QCOMPARE(xmlElementScalar.toString(), xmlElements[0]);
+
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.ExpandedNodeId"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node)
+ QVariant expandedNodeIdScalar = node->attribute(QOpcUa::NodeAttribute::Value);
+ QVERIFY(expandedNodeIdScalar.isValid());
+ QCOMPARE(expandedNodeIdScalar.value<QOpcUa::QExpandedNodeId>(), testExpandedNodeId[0]);
+
+ if (opcuaClient->backend() == QStringLiteral("open62541")) {
+ node.reset(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Argument"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node)
+ QVariant argumentScalar = node->attribute(QOpcUa::NodeAttribute::Value);
+ QVERIFY(argumentScalar.isValid());
+ QCOMPARE(argumentScalar.value<QOpcUa::QArgument>(), testArguments[0]);
+ } else {
+ qInfo("The argument type is currently only supported in the open62541 backend");
+ }
}
void Tst_QOpcUaClient::indexRange()
@@ -1844,8 +2731,8 @@ void Tst_QOpcUaClient::indexRange()
node->writeAttributeRange(QOpcUa::NodeAttribute::Value, QVariantList({10, 11, 12, 13}), "0:3", QOpcUa::Types::Int32);
attributeWrittenSpy.wait();
- QVERIFY(attributeWrittenSpy.size() == 1);
- QVERIFY(attributeWrittenSpy.at(0).at(1).value<QOpcUa::UaStatusCode>() == QOpcUa::UaStatusCode::Good);
+ QCOMPARE(attributeWrittenSpy.size(), 1);
+ QCOMPARE(attributeWrittenSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
QSignalSpy attributeReadSpy(node.data(), &QOpcUaNode::attributeRead);
node->readAttributeRange(QOpcUa::NodeAttribute::Value, "0:6");
@@ -1870,8 +2757,8 @@ void Tst_QOpcUaClient::invalidIndexRange()
node->writeAttributeRange(QOpcUa::NodeAttribute::Value, QVariantList({10, 11, 12, 13}), "notavalidrange", QOpcUa::Types::Int32);
attributeWrittenSpy.wait();
- QVERIFY(attributeWrittenSpy.size() == 1);
- QVERIFY(attributeWrittenSpy.at(0).at(1).value<QOpcUa::UaStatusCode>() == QOpcUa::UaStatusCode::BadIndexRangeInvalid);
+ QCOMPARE(attributeWrittenSpy.size(), 1);
+ QCOMPARE(attributeWrittenSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::BadIndexRangeInvalid);
QSignalSpy attributeReadSpy(node.data(), &QOpcUaNode::attributeRead);
node->readAttributeRange(QOpcUa::NodeAttribute::Value, "notavalidrange");
@@ -1887,14 +2774,14 @@ void Tst_QOpcUaClient::subscriptionIndexRange()
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> integerArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.Int32"));
- QVERIFY(integerArrayNode != 0);
+ QVERIFY(integerArrayNode != nullptr);
QOpcUaMonitoringParameters p(100);
p.setIndexRange(QStringLiteral("1"));
QSignalSpy monitoringEnabledSpy(integerArrayNode.data(), &QOpcUaNode::enableMonitoringFinished);
QSignalSpy monitoringDisabledSpy(integerArrayNode.data(), &QOpcUaNode::disableMonitoringFinished);
QSignalSpy writeSpy(integerArrayNode.data(), &QOpcUaNode::attributeWritten);
- QSignalSpy dataChangeSpy(integerArrayNode.data(), &QOpcUaNode::attributeUpdated);
+ QSignalSpy dataChangeSpy(integerArrayNode.data(), &QOpcUaNode::dataChangeOccurred);
QVariantList l({0, 1});
WRITE_VALUE_ATTRIBUTE(integerArrayNode, l, QOpcUa::Types::Int32);
@@ -1938,17 +2825,14 @@ void Tst_QOpcUaClient::subscriptionDataChangeFilter()
QFETCH(QOpcUaClient *, opcuaClient);
OpcuaConnector connector(opcuaClient, m_endpoint);
- if (opcuaClient->backend() == QLatin1String("freeopcua"))
- QSKIP("DataChangeFilter support is not implemented in the freeopcua plugin");
-
QScopedPointer<QOpcUaNode> doubleNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Double"));
- QVERIFY(doubleNode != 0);
+ QVERIFY(doubleNode != nullptr);
QOpcUaMonitoringParameters p(100);
QSignalSpy monitoringEnabledSpy(doubleNode.data(), &QOpcUaNode::enableMonitoringFinished);
QSignalSpy monitoringDisabledSpy(doubleNode.data(), &QOpcUaNode::disableMonitoringFinished);
- QSignalSpy dataChangeSpy(doubleNode.data(), &QOpcUaNode::attributeUpdated);
+ QSignalSpy dataChangeSpy(doubleNode.data(), &QOpcUaNode::dataChangeOccurred);
QSignalSpy monitoringModifiedSpy(doubleNode.data(), &QOpcUaNode::monitoringStatusChanged);
WRITE_VALUE_ATTRIBUTE(doubleNode, 1.0, QOpcUa::Types::Double);
@@ -1971,15 +2855,15 @@ void Tst_QOpcUaClient::subscriptionDataChangeFilter()
dataChangeSpy.clear();
QOpcUaMonitoringParameters::DataChangeFilter filter;
- filter.deadbandType = QOpcUaMonitoringParameters::DataChangeFilter::DeadbandType::Absolute;
- filter.trigger = QOpcUaMonitoringParameters::DataChangeFilter::DataChangeTrigger::StatusValue;
- filter.deadbandValue = 1.0;
+ filter.setDeadbandType(QOpcUaMonitoringParameters::DataChangeFilter::DeadbandType::Absolute);
+ filter.setTrigger(QOpcUaMonitoringParameters::DataChangeFilter::DataChangeTrigger::StatusOrValue);
+ filter.setDeadbandValue(1.0);
doubleNode->modifyDataChangeFilter(QOpcUa::NodeAttribute::Value, filter);
monitoringModifiedSpy.wait();
- QVERIFY(monitoringModifiedSpy.size() == 1);
- QVERIFY(monitoringModifiedSpy.at(0).at(0).value<QOpcUa::NodeAttribute>() == QOpcUa::NodeAttribute::Value);
+ QCOMPARE(monitoringModifiedSpy.size(), 1);
+ QCOMPARE(monitoringModifiedSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::Value);
QVERIFY(monitoringModifiedSpy.at(0).at(1).value<QOpcUaMonitoringParameters::Parameters>() & QOpcUaMonitoringParameters::Parameter::Filter);
- QVERIFY(monitoringModifiedSpy.at(0).at(2).value<QOpcUa::UaStatusCode>() == QOpcUa::UaStatusCode::Good);
+ QCOMPARE(monitoringModifiedSpy.at(0).at(2).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
WRITE_VALUE_ATTRIBUTE(doubleNode, 2.0, QOpcUa::Types::Double);
@@ -2004,17 +2888,14 @@ void Tst_QOpcUaClient::modifyPublishingMode()
QFETCH(QOpcUaClient *, opcuaClient);
OpcuaConnector connector(opcuaClient, m_endpoint);
- if (opcuaClient->backend() == QLatin1String("freeopcua"))
- QSKIP("Modification of monitoring is not supported in the freeopcua plugin");
-
QScopedPointer<QOpcUaNode> doubleNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Double"));
- QVERIFY(doubleNode != 0);
+ QVERIFY(doubleNode != nullptr);
QOpcUaMonitoringParameters p(100);
QSignalSpy monitoringEnabledSpy(doubleNode.data(), &QOpcUaNode::enableMonitoringFinished);
QSignalSpy monitoringDisabledSpy(doubleNode.data(), &QOpcUaNode::disableMonitoringFinished);
- QSignalSpy dataChangeSpy(doubleNode.data(), &QOpcUaNode::attributeUpdated);
+ QSignalSpy dataChangeSpy(doubleNode.data(), &QOpcUaNode::dataChangeOccurred);
QSignalSpy monitoringStatusSpy(doubleNode.data(), &QOpcUaNode::monitoringStatusChanged);
WRITE_VALUE_ATTRIBUTE(doubleNode, 1.0, QOpcUa::Types::Double);
@@ -2057,17 +2938,14 @@ void Tst_QOpcUaClient::modifyMonitoringMode()
QFETCH(QOpcUaClient *, opcuaClient);
OpcuaConnector connector(opcuaClient, m_endpoint);
- if (opcuaClient->backend() == QLatin1String("freeopcua"))
- QSKIP("Modification of monitoring is not supported in the freeopcua plugin");
-
QScopedPointer<QOpcUaNode> doubleNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Double"));
- QVERIFY(doubleNode != 0);
+ QVERIFY(doubleNode != nullptr);
QOpcUaMonitoringParameters p(100);
QSignalSpy monitoringEnabledSpy(doubleNode.data(), &QOpcUaNode::enableMonitoringFinished);
QSignalSpy monitoringDisabledSpy(doubleNode.data(), &QOpcUaNode::disableMonitoringFinished);
- QSignalSpy dataChangeSpy(doubleNode.data(), &QOpcUaNode::attributeUpdated);
+ QSignalSpy dataChangeSpy(doubleNode.data(), &QOpcUaNode::dataChangeOccurred);
QSignalSpy monitoringStatusSpy(doubleNode.data(), &QOpcUaNode::monitoringStatusChanged);
WRITE_VALUE_ATTRIBUTE(doubleNode, 1.0, QOpcUa::Types::Double);
@@ -2111,17 +2989,14 @@ void Tst_QOpcUaClient::modifyMonitoredItem()
QFETCH(QOpcUaClient *, opcuaClient);
OpcuaConnector connector(opcuaClient, m_endpoint);
- if (opcuaClient->backend() == QLatin1String("freeopcua"))
- QSKIP("Modification of monitoring is not supported in the freeopcua plugin");
-
QScopedPointer<QOpcUaNode> doubleNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Double"));
- QVERIFY(doubleNode != 0);
+ QVERIFY(doubleNode != nullptr);
QOpcUaMonitoringParameters p(100);
QSignalSpy monitoringEnabledSpy(doubleNode.data(), &QOpcUaNode::enableMonitoringFinished);
QSignalSpy monitoringDisabledSpy(doubleNode.data(), &QOpcUaNode::disableMonitoringFinished);
- QSignalSpy dataChangeSpy(doubleNode.data(), &QOpcUaNode::attributeUpdated);
+ QSignalSpy dataChangeSpy(doubleNode.data(), &QOpcUaNode::dataChangeOccurred);
QSignalSpy monitoringStatusSpy(doubleNode.data(), &QOpcUaNode::monitoringStatusChanged);
WRITE_VALUE_ATTRIBUTE(doubleNode, 1.0, QOpcUa::Types::Double);
@@ -2168,7 +3043,7 @@ void Tst_QOpcUaClient::addDuplicateMonitoredItem()
OpcuaConnector connector(opcuaClient, m_endpoint);
QScopedPointer<QOpcUaNode> doubleNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.Double"));
- QVERIFY(doubleNode != 0);
+ QVERIFY(doubleNode != nullptr);
QOpcUaMonitoringParameters p(100);
@@ -2205,7 +3080,7 @@ void Tst_QOpcUaClient::checkMonitoredItemCleanup()
QScopedPointer<QOpcUaNode> readWriteNode(opcuaClient->node("ns=3;s=TestNode.ReadWrite"));
QVERIFY(readWriteNode != nullptr);
- QScopedPointer<QOpcUaNode> serverNode(opcuaClient->node("ns=0;i=2253"));
+ QScopedPointer<QOpcUaNode> serverNode(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::Server)));
QVERIFY(serverNode != nullptr);
QSignalSpy monitoringEnabledSpy(readWriteNode.data(), &QOpcUaNode::enableMonitoringFinished);
@@ -2227,7 +3102,7 @@ void Tst_QOpcUaClient::checkMonitoredItemCleanup()
QSignalSpy methodSpy(serverNode.data(), &QOpcUaNode::methodCallFinished);
QVector<QOpcUa::TypedVariant> parameter;
parameter.append(QOpcUa::TypedVariant(QVariant(quint32(subscriptionId)), QOpcUa::Types::UInt32));
- serverNode->callMethod("ns=0;i=11492", parameter); // Call the getMonitoredItems method
+ serverNode->callMethod(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::Server_GetMonitoredItems), parameter);
methodSpy.wait();
QCOMPARE(methodSpy.size(), 1);
@@ -2243,12 +3118,37 @@ void Tst_QOpcUaClient::checkMonitoredItemCleanup()
methodSpy.wait(); // Give the backend some time to process the deletion request
methodSpy.clear();
- serverNode->callMethod("ns=0;i=11492", parameter); // Call the getMonitoredItems method
+ serverNode->callMethod(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::Server_GetMonitoredItems), parameter);
methodSpy.wait();
QCOMPARE(methodSpy.size(), 1);
+ QCOMPARE(methodSpy.at(0).at(2).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::BadNoMatch);
+}
- for (auto entry : methodSpy) {
- QCOMPARE(entry.at(2).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::BadSubscriptionIdInvalid);
+void Tst_QOpcUaClient::checkAttributeUpdated()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node(QStringLiteral("ns=3;s=TestNode.ReadWrite")));
+ QVERIFY(node != nullptr);
+
+ QSignalSpy spy(node.data(), &QOpcUaNode::attributeUpdated);
+
+ node->readAttributes(QOpcUa::NodeAttribute::Value);
+ spy.wait();
+ QCOMPARE(spy.size(), 1);
+
+ node->writeValueAttribute(23.0, QOpcUa::Types::Double);
+ spy.wait();
+ QCOMPARE(spy.size(), 2);
+
+ node->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100));
+ spy.wait();
+ QCOMPARE(spy.size(), 3);
+
+ for (auto it : spy) {
+ QCOMPARE(it.at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::Value);
+ QVERIFY(it.at(1).isValid());
}
}
@@ -2262,17 +3162,17 @@ void Tst_QOpcUaClient::stringCharset()
QScopedPointer<QOpcUaNode> stringArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.String"));
QScopedPointer<QOpcUaNode> localizedArrayNode(opcuaClient->node("ns=2;s=Demo.Static.Arrays.LocalizedText"));
- QVERIFY(stringScalarNode != 0);
- QVERIFY(localizedScalarNode != 0);
- QVERIFY(stringArrayNode != 0);
- QVERIFY(localizedArrayNode != 0);
+ QVERIFY(stringScalarNode != nullptr);
+ QVERIFY(localizedScalarNode != nullptr);
+ QVERIFY(stringArrayNode != nullptr);
+ QVERIFY(localizedArrayNode != nullptr);
QString testString = QString::fromUtf8("🞀🞁🞂🞃");
QOpcUa::QLocalizedText lt1("en", testString);
QOpcUa::QLocalizedText lt2("de", testString);
WRITE_VALUE_ATTRIBUTE(stringScalarNode, testString, QOpcUa::String);
- WRITE_VALUE_ATTRIBUTE(localizedScalarNode, QVariant::fromValue(localizedTexts[0]), QOpcUa::LocalizedText);
+ WRITE_VALUE_ATTRIBUTE(localizedScalarNode, localizedTexts[0], QOpcUa::LocalizedText);
QVariantList l;
l.append(testString);
@@ -2281,8 +3181,8 @@ void Tst_QOpcUaClient::stringCharset()
WRITE_VALUE_ATTRIBUTE(stringArrayNode, l, QOpcUa::String);
l.clear();
- l.append(QVariant::fromValue(lt1));
- l.append(QVariant::fromValue(lt2));
+ l.append(lt1);
+ l.append(lt2);
WRITE_VALUE_ATTRIBUTE(localizedArrayNode, l, QOpcUa::LocalizedText);
@@ -2292,23 +3192,23 @@ void Tst_QOpcUaClient::stringCharset()
READ_MANDATORY_VARIABLE_NODE(localizedScalarNode);
QVariant result = stringScalarNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(result.toString() == testString);
+ QCOMPARE(result.toString(), testString);
result = localizedScalarNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(result.value<QOpcUa::QLocalizedText>() == localizedTexts[0]);
+ QCOMPARE(result.value<QOpcUa::QLocalizedText>(), localizedTexts[0]);
result = stringArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(result.type() == QVariant::List);
- QVERIFY(result.toList().length() == 2);
- QVERIFY(result.toList()[0].type() == QVariant::String);
- QVERIFY(result.toList()[0].toString() == testString);
- QVERIFY(result.toList()[1].type() == QVariant::String);
- QVERIFY(result.toList()[1].toString() == testString);
+ QCOMPARE(result.type(), QVariant::List);
+ QCOMPARE(result.toList().length(), 2);
+ QCOMPARE(result.toList()[0].type(), QVariant::String);
+ QCOMPARE(result.toList()[0].toString(), testString);
+ QCOMPARE(result.toList()[1].type(), QVariant::String);
+ QCOMPARE(result.toList()[1].toString(), testString);
result = localizedArrayNode->attribute(QOpcUa::NodeAttribute::Value);
- QVERIFY(result.type() == QVariant::List);
- QVERIFY(result.toList().length() == 2);
- QVERIFY(result.toList()[0].value<QOpcUa::QLocalizedText>() == lt1);
- QVERIFY(result.toList()[1].value<QOpcUa::QLocalizedText>() == lt2);
+ QCOMPARE(result.type(), QVariant::List);
+ QCOMPARE(result.toList().length(), 2);
+ QCOMPARE(result.toList()[0].value<QOpcUa::QLocalizedText>(), lt1);
+ QCOMPARE(result.toList()[1].value<QOpcUa::QLocalizedText>(), lt2);
}
void Tst_QOpcUaClient::namespaceArray()
@@ -2316,8 +3216,6 @@ void Tst_QOpcUaClient::namespaceArray()
QFETCH(QOpcUaClient *, opcuaClient);
OpcuaConnector connector(opcuaClient, m_endpoint);
- QCOMPARE(opcuaClient->namespaceArray().size(), 0);
-
QSignalSpy spy(opcuaClient, &QOpcUaClient::namespaceArrayUpdated);
QCOMPARE(opcuaClient->updateNamespaceArray(), true);
@@ -2325,7 +3223,7 @@ void Tst_QOpcUaClient::namespaceArray()
QCOMPARE(spy.size(), 1);
QStringList namespaces = opcuaClient->namespaceArray();
- QVERIFY(namespaces.size() == 4);
+ QCOMPARE(namespaces.size(), 4);
int nsIndex = namespaces.indexOf("http://qt-project.org");
QVERIFY(nsIndex > 0);
@@ -2333,7 +3231,45 @@ void Tst_QOpcUaClient::namespaceArray()
QScopedPointer<QOpcUaNode> node(opcuaClient->node(QOpcUa::nodeIdFromString(nsIndex, QStringLiteral("Demo.Static.Scalar.String"))));
READ_MANDATORY_BASE_NODE(node);
- QCOMPARE(node->attribute(QOpcUa::NodeAttribute::DisplayName).value<QOpcUa::QLocalizedText>().text, QStringLiteral("StringScalarTest"));
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::DisplayName).value<QOpcUa::QLocalizedText>().text(), QStringLiteral("StringScalarTest"));
+}
+
+void Tst_QOpcUaClient::multiDimensionalArray()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ if (opcuaClient->backend() != QStringLiteral("open62541"))
+ QSKIP("Multidimensional arrays are only supported in open62541");
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=Demo.Static.Arrays.MultiDimensionalDouble"));
+
+ QVector<quint32> arrayDimensions({2, 2, 3});
+ QVariantList value({0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0});
+ QOpcUa::QMultiDimensionalArray arr(value, arrayDimensions);
+ QVERIFY(arr.isValid());
+ WRITE_VALUE_ATTRIBUTE(node, arr , QOpcUa::Double);
+ READ_MANDATORY_VARIABLE_NODE(node);
+
+ QCOMPARE(node->attributeError(QOpcUa::NodeAttribute::Value), QOpcUa::UaStatusCode::Good);
+ QOpcUa::QMultiDimensionalArray readBack = node->attribute(QOpcUa::NodeAttribute::Value).value<QOpcUa::QMultiDimensionalArray>();
+
+ QVERIFY(readBack.isValid());
+ QCOMPARE(readBack.value({0, 0, 0}), 0.0);
+ QCOMPARE(readBack.value({0, 0, 1}), 1.0);
+ QCOMPARE(readBack.value({0, 0, 2}), 2.0);
+ QCOMPARE(readBack.value({0, 1, 0}), 3.0);
+ QCOMPARE(readBack.value({0, 1, 1}), 4.0);
+ QCOMPARE(readBack.value({0, 1, 2}), 5.0);
+ QCOMPARE(readBack.value({1, 0, 0}), 6.0);
+ QCOMPARE(readBack.value({1, 0, 1}), 7.0);
+ QCOMPARE(readBack.value({1, 0, 2}), 8.0);
+ QCOMPARE(readBack.value({1, 1, 0}), 9.0);
+ QCOMPARE(readBack.value({1, 1, 1}), 10.0);
+ QCOMPARE(readBack.value({1, 1, 2}), 11.0);
+
+ QCOMPARE(arr, readBack);
}
void Tst_QOpcUaClient::dateTimeConversion()
@@ -2343,7 +3279,7 @@ void Tst_QOpcUaClient::dateTimeConversion()
QScopedPointer<QOpcUaNode> dateTimeScalarNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.DateTime"));
- QVERIFY(dateTimeScalarNode != 0);
+ QVERIFY(dateTimeScalarNode != nullptr);
QDateTime dt = QDateTime::currentDateTime();
@@ -2351,7 +3287,7 @@ void Tst_QOpcUaClient::dateTimeConversion()
READ_MANDATORY_VARIABLE_NODE(dateTimeScalarNode);
QDateTime result = dateTimeScalarNode->attribute(QOpcUa::NodeAttribute::Value).toDateTime();
- QVERIFY(dt == result);
+ QCOMPARE(dt, result);
}
void Tst_QOpcUaClient::timeStamps()
@@ -2361,7 +3297,7 @@ void Tst_QOpcUaClient::timeStamps()
QScopedPointer<QOpcUaNode> stringScalarNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.String"));
- QVERIFY(stringScalarNode != 0);
+ QVERIFY(stringScalarNode != nullptr);
QCOMPARE(stringScalarNode->sourceTimestamp(QOpcUa::NodeAttribute::Value).isValid(), false);
QCOMPARE(stringScalarNode->serverTimestamp(QOpcUa::NodeAttribute::Value).isValid(), false);
@@ -2377,7 +3313,7 @@ void Tst_QOpcUaClient::timeStamps()
QOpcUaMonitoringParameters p(100);
QSignalSpy monitoringEnabledSpy(stringScalarNode.data(), &QOpcUaNode::enableMonitoringFinished);
QSignalSpy monitoringDisabledSpy(stringScalarNode.data(), &QOpcUaNode::disableMonitoringFinished);
- QSignalSpy dataChangeSpy(stringScalarNode.data(), &QOpcUaNode::attributeUpdated);
+ QSignalSpy dataChangeSpy(stringScalarNode.data(), &QOpcUaNode::dataChangeOccurred);
QTest::qWait(10); // Make sure the timestamp has a chance to change
@@ -2406,6 +3342,302 @@ void Tst_QOpcUaClient::timeStamps()
QCOMPARE(monitoringDisabledSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
}
+void Tst_QOpcUaClient::createNodeFromExpandedId()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QSignalSpy updateSpy(opcuaClient, &QOpcUaClient::namespaceArrayUpdated);
+ opcuaClient->updateNamespaceArray();
+ updateSpy.wait();
+ QVERIFY(updateSpy.size() > 0);
+ QVERIFY(opcuaClient->namespaceArray().size() > 0);
+
+ // Node on a remote server, nullptr expected
+ QOpcUa::QExpandedNodeId id;
+ id.setNodeId(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::RootFolder));
+ id.setServerIndex(1);
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node(id));
+ QVERIFY(node == nullptr);
+
+ // Root node on the local server, valid pointer expected
+ id.setServerIndex(0);
+ node.reset(opcuaClient->node(id));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_BASE_NODE(node);
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::BrowseName).value<QOpcUa::QQualifiedName>(), QOpcUa::QQualifiedName(0, QStringLiteral("Root")));
+
+ // Successful namespace substitution, valid pointer expected
+ id.setNodeId("ns=0;s=TestNode.ReadWrite");
+ id.setNamespaceUri(QStringLiteral("Test Namespace"));
+ node.reset(opcuaClient->node(id));
+ QVERIFY(node != nullptr);
+ QCOMPARE(node->nodeId(), QStringLiteral("ns=3;s=TestNode.ReadWrite"));
+ READ_MANDATORY_BASE_NODE(node);
+ QCOMPARE(node->attribute(QOpcUa::NodeAttribute::BrowseName).value<QOpcUa::QQualifiedName>(),
+ QOpcUa::QQualifiedName(3, QStringLiteral("TestNode.ReadWrite")));
+
+ // Invalid namespace, nullptr expected
+ id.setNodeId("ns=0;s=TestNode.ReadWrite");
+ id.setNamespaceUri(QStringLiteral("InvalidNamespace"));
+ node.reset(opcuaClient->node(id));
+ QVERIFY(node == nullptr);
+}
+
+void Tst_QOpcUaClient::checkExpandedIdConversion()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ // Before the namespace array is populated, error expected
+ bool ok = true;
+ QOpcUa::QExpandedNodeId id;
+ id.setNodeId(QStringLiteral("ns=0;i=84"));
+ id.setNamespaceUri(QStringLiteral("MyNameSpace"));
+ QString result = opcuaClient->resolveExpandedNodeId(id, &ok);
+ QVERIFY(ok == false);
+ QCOMPARE(result, QString());
+ id.setNamespaceUri(QString());
+
+ QSignalSpy updateSpy(opcuaClient, &QOpcUaClient::namespaceArrayUpdated);
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ updateSpy.wait();
+ QVERIFY(updateSpy.size() > 0);
+ QVERIFY(!opcuaClient->namespaceArray().isEmpty());
+
+ // Root node on the local server, valid string expected
+ id.setServerIndex(0);
+ result = opcuaClient->resolveExpandedNodeId(id, &ok);
+ QVERIFY(ok == true);
+ QCOMPARE(result, QStringLiteral("ns=0;i=84"));
+
+ // Successful namespace substitution, valid string expected
+ ok = false;
+ id.setNodeId("ns=0;s=TestNode.ReadWrite");
+ id.setNamespaceUri(QStringLiteral("Test Namespace"));
+ result = opcuaClient->resolveExpandedNodeId(id, &ok);
+ QVERIFY(ok == true);
+ QCOMPARE(result, QStringLiteral("ns=3;s=TestNode.ReadWrite"));
+
+ // Invalid namespace, empty string expected
+ id.setNodeId("ns=0;s=TestNode.ReadWrite");
+ id.setNamespaceUri(QStringLiteral("InvalidNamespace"));
+ result = opcuaClient->resolveExpandedNodeId(id, &ok);
+ QVERIFY(ok == false);
+ QCOMPARE(result, QString());
+
+ // Malformed node id string, empty string expected
+ ok = true;
+ id.setNodeId("ns=0,s=TestNode.ReadWrite");
+ result = opcuaClient->resolveExpandedNodeId(id, &ok);
+ QVERIFY(ok == false);
+ QCOMPARE(result, QString());
+}
+
+void Tst_QOpcUaClient::checkExpandedIdConversionNoOk()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ // Before the namespace array is populated, empty string expected
+ QOpcUa::QExpandedNodeId id;
+ id.setNodeId(QStringLiteral("ns=0;i=84"));
+ id.setNamespaceUri(QStringLiteral("MyNameSpace"));
+ QString result = opcuaClient->resolveExpandedNodeId(id);
+ QCOMPARE(result, QString());
+ id.setNamespaceUri(QString());
+
+ QSignalSpy updateSpy(opcuaClient, &QOpcUaClient::namespaceArrayUpdated);
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ updateSpy.wait();
+ QVERIFY(updateSpy.size() > 0);
+ QVERIFY(!opcuaClient->namespaceArray().isEmpty());
+
+ // Root node on the local server, valid string expected
+ id.setServerIndex(0);
+ result = opcuaClient->resolveExpandedNodeId(id);
+ QCOMPARE(result, QStringLiteral("ns=0;i=84"));
+
+ // Successful namespace substitution, valid string expected
+ id.setNodeId("ns=0;s=TestNode.ReadWrite");
+ id.setNamespaceUri(QStringLiteral("Test Namespace"));
+ result = opcuaClient->resolveExpandedNodeId(id);
+ QCOMPARE(result, QStringLiteral("ns=3;s=TestNode.ReadWrite"));
+
+ // Invalid namespace, empty string expected
+ id.setNodeId("ns=0;s=TestNode.ReadWrite");
+ id.setNamespaceUri(QStringLiteral("InvalidNamespace"));
+ result = opcuaClient->resolveExpandedNodeId(id);
+ QCOMPARE(result, QString());
+
+ // Malformed node id string, empty string expected
+ id.setNodeId("ns=0,s=TestNode.ReadWrite");
+ result = opcuaClient->resolveExpandedNodeId(id);
+ QCOMPARE(result, QString());
+}
+
+void Tst_QOpcUaClient::createQualifiedName()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ // Before the namespace array is populated, empty qualified name expected
+ bool ok = true;
+ QOpcUa::QQualifiedName name = opcuaClient->qualifiedNameFromNamespaceUri(QStringLiteral("Test Namespace"), QStringLiteral("Name"), &ok);
+ QVERIFY(ok == false);
+ QCOMPARE(name, QOpcUa::QQualifiedName());
+
+ QSignalSpy updateSpy(opcuaClient, &QOpcUaClient::namespaceArrayUpdated);
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ updateSpy.wait();
+ QVERIFY(updateSpy.size() > 0);
+ QVERIFY(!opcuaClient->namespaceArray().isEmpty());
+
+ // Valid namespace, valid qualified name expected
+ name = opcuaClient->qualifiedNameFromNamespaceUri(QStringLiteral("Test Namespace"), QStringLiteral("Name"), &ok);
+ QVERIFY(ok == true);
+ QCOMPARE(name, QOpcUa::QQualifiedName(3, QStringLiteral("Name")));
+
+ // Invalid namespace, empty qualified name expected
+ name = opcuaClient->qualifiedNameFromNamespaceUri(QStringLiteral("InvalidNamespace"), QStringLiteral("Name"), &ok);
+ QVERIFY(ok == false);
+ QCOMPARE(name, QOpcUa::QQualifiedName());
+}
+
+void Tst_QOpcUaClient::createQualifiedNameNoOk()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ // Before the namespace array is populated, empty qualified name expected
+ QOpcUa::QQualifiedName name = opcuaClient->qualifiedNameFromNamespaceUri(QStringLiteral("Test Namespace"), QStringLiteral("Name"));
+ QCOMPARE(name, QOpcUa::QQualifiedName());
+
+ QSignalSpy updateSpy(opcuaClient, &QOpcUaClient::namespaceArrayUpdated);
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ updateSpy.wait();
+ QVERIFY(updateSpy.size() > 0);
+ QVERIFY(!opcuaClient->namespaceArray().isEmpty());
+
+ // Valid namespace, valid qualified name expected
+ name = opcuaClient->qualifiedNameFromNamespaceUri(QStringLiteral("Test Namespace"), QStringLiteral("Name"));
+ QCOMPARE(name, QOpcUa::QQualifiedName(3, QStringLiteral("Name")));
+
+ // Invalid namespace, empty qualified name expected
+ name = opcuaClient->qualifiedNameFromNamespaceUri(QStringLiteral("InvalidNamespace"), QStringLiteral("Name"));
+ QCOMPARE(name, QOpcUa::QQualifiedName());
+}
+
+void Tst_QOpcUaClient::resolveBrowsePath()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QScopedPointer<QOpcUaNode> typesNode(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::TypesFolder)));
+ QVERIFY(typesNode != nullptr);
+
+ QSignalSpy spy(typesNode.data(), &QOpcUaNode::resolveBrowsePathFinished);
+
+ QVector<QOpcUa::QRelativePathElement> path;
+ const QString referenceTypeId = QOpcUa::nodeIdFromReferenceType(QOpcUa::ReferenceTypeId::Organizes);
+ path.append(QOpcUa::QRelativePathElement(QOpcUa::QQualifiedName(0, "DataTypes"), referenceTypeId));
+ path.append(QOpcUa::QRelativePathElement(QOpcUa::QQualifiedName(0, "BaseDataType"), referenceTypeId));
+ bool success = typesNode->resolveBrowsePath(path);
+ QVERIFY(success == true);
+
+ spy.wait();
+ QCOMPARE(spy.size(), 1);
+ QVector<QOpcUa::QBrowsePathTarget> results = spy.at(0).at(0).value<QVector<QOpcUa::QBrowsePathTarget>>();
+ QCOMPARE(results.size(), 1);
+ QCOMPARE(results.at(0).remainingPathIndex(), (std::numeric_limits<quint32>::max)());
+ QCOMPARE(results.at(0).targetId().nodeId(), QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::BaseDataType));
+ QVERIFY(results.at(0).targetId().namespaceUri().isEmpty());
+ QCOMPARE(results.at(0).targetId().serverIndex(), 0U);
+ QCOMPARE(spy.at(0).at(1).value<QVector<QOpcUa::QRelativePathElement>>(), path);
+ QCOMPARE(spy.at(0).at(2).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+}
+
+void Tst_QOpcUaClient::addNamespace()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+
+ QSignalSpy namespaceUpdatedSpy(opcuaClient, &QOpcUaClient::namespaceArrayUpdated);
+ QSignalSpy namespaceChangedSpy(opcuaClient, &QOpcUaClient::namespaceArrayChanged);
+
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ opcuaClient->updateNamespaceArray();
+ namespaceUpdatedSpy.wait();
+ namespaceChangedSpy.wait();
+ QVERIFY(namespaceUpdatedSpy.count() > 0);
+ QCOMPARE(namespaceChangedSpy.count(), 1);
+
+ // Update second time: No change signal emitted
+ namespaceChangedSpy.clear();
+ namespaceUpdatedSpy.clear();
+ opcuaClient->updateNamespaceArray();
+ namespaceUpdatedSpy.wait();
+ namespaceChangedSpy.wait();
+ QCOMPARE(namespaceUpdatedSpy.count(), 1);
+ QCOMPARE(namespaceChangedSpy.count(), 0);
+
+ auto namespaceArray = opcuaClient->namespaceArray();
+ QString newNamespaceName = QString("DynamicTestNamespace#%1").arg(namespaceArray.size());
+
+ QVERIFY(!namespaceArray.isEmpty());
+ QVERIFY(!namespaceArray.contains(newNamespaceName));
+
+ QVector<QOpcUa::TypedVariant> args;
+ args.push_back(QOpcUa::TypedVariant(newNamespaceName, QOpcUa::String));
+
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::Server)));
+ QVERIFY(node != nullptr);
+
+ QSignalSpy methodSpy(node.data(), &QOpcUaNode::methodCallFinished);
+
+ opcuaClient->setNamespaceAutoupdate(true);
+ namespaceUpdatedSpy.clear();
+ namespaceChangedSpy.clear();
+
+ bool success = node->callMethod("ns=3;s=Test.Method.AddNamespace", args);
+ QVERIFY(success == true);
+
+ methodSpy.wait();
+
+ QCOMPARE(methodSpy.size(), 1);
+ QCOMPARE(methodSpy.at(0).at(0).value<QString>(), QStringLiteral("ns=3;s=Test.Method.AddNamespace"));
+ QCOMPARE(methodSpy.at(0).at(1).value<quint16>(), namespaceArray.size());
+ QCOMPARE(QOpcUa::isSuccessStatus(methodSpy.at(0).at(2).value<QOpcUa::UaStatusCode>()), true);
+
+ // Do not call updateNamespaceArray()
+ namespaceChangedSpy.wait();
+
+ QVERIFY(namespaceUpdatedSpy.size() > 0);
+ QCOMPARE(namespaceChangedSpy.size(), 1);
+ auto updatedNamespaceArray = opcuaClient->namespaceArray();
+ QCOMPARE(updatedNamespaceArray.size(), namespaceArray.size() + 1);
+ QVERIFY(updatedNamespaceArray.contains(newNamespaceName));
+ QCOMPARE(methodSpy.at(0).at(1).value<quint16>(), updatedNamespaceArray.indexOf(newNamespaceName));
+}
+
+void Tst_QOpcUaClient::fixedTimestamp()
+{
+ QFETCH(QOpcUaClient *, opcuaClient);
+ OpcuaConnector connector(opcuaClient, m_endpoint);
+
+ QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=Demo.Static.FixedTimestamp"));
+ QVERIFY(node != nullptr);
+ READ_MANDATORY_VARIABLE_NODE(node);
+ QVariant value = node->attribute(QOpcUa::NodeAttribute::Value);
+ QVERIFY(value.isValid());
+ QCOMPARE(value.type(), QVariant::DateTime);
+ QCOMPARE(value.toDateTime(), QDateTime(QDate(2012, 12, 19), QTime(13, 37)));
+}
+
void Tst_QOpcUaClient::connectionLost()
{
// Restart the test server if necessary
@@ -2418,9 +3650,6 @@ void Tst_QOpcUaClient::connectionLost()
QFETCH(QOpcUaClient *, opcuaClient);
OpcuaConnector connector(opcuaClient, m_endpoint);
- if (opcuaClient->backend() == QLatin1String("freeopcua"))
- QSKIP("State change on connection loss is not implemented in the freeopcua plugin");
-
QCOMPARE(opcuaClient->state(), QOpcUaClient::ClientState::Connected);
QScopedPointer<QOpcUaNode> stringNode(opcuaClient->node("ns=2;s=Demo.Static.Scalar.String"));
diff --git a/tests/manual/eventsubscription/eventsubscription.pro b/tests/manual/eventsubscription/eventsubscription.pro
new file mode 100644
index 0000000..611028d
--- /dev/null
+++ b/tests/manual/eventsubscription/eventsubscription.pro
@@ -0,0 +1,10 @@
+QT += testlib opcua
+QT -= gui
+
+TARGET = tst_eventsubscription
+CONFIG -= app_bundle
+
+TEMPLATE = app
+
+SOURCES += \
+ tst_eventsubscription.cpp
diff --git a/tests/manual/eventsubscription/tst_eventsubscription.cpp b/tests/manual/eventsubscription/tst_eventsubscription.cpp
new file mode 100644
index 0000000..49ab75b
--- /dev/null
+++ b/tests/manual/eventsubscription/tst_eventsubscription.cpp
@@ -0,0 +1,261 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QString>
+#include <QtTest>
+#include <QCoreApplication>
+#include <QtOpcUa>
+
+class OpcuaConnector
+{
+public:
+ OpcuaConnector(QOpcUaClient *client, const QString &endPoint)
+ : opcuaClient(client)
+ {
+ QVERIFY(opcuaClient != nullptr);
+ QSignalSpy connectedSpy(opcuaClient, &QOpcUaClient::connected);
+ QSignalSpy disconnectedSpy(opcuaClient, &QOpcUaClient::disconnected);
+ QSignalSpy stateSpy(opcuaClient, &QOpcUaClient::stateChanged);
+
+ QTest::qWait(500);
+ opcuaClient->connectToEndpoint(QUrl(endPoint));
+ QTRY_VERIFY2(opcuaClient->state() == QOpcUaClient::Connected, "Could not connect to server");
+
+ QCOMPARE(connectedSpy.count(), 1); // one connected signal fired
+ QCOMPARE(disconnectedSpy.count(), 0); // zero disconnected signals fired
+ QCOMPARE(stateSpy.count(), 2);
+
+ QCOMPARE(stateSpy.at(0).at(0).value<QOpcUaClient::ClientState>(),
+ QOpcUaClient::ClientState::Connecting);
+ QCOMPARE(stateSpy.at(1).at(0).value<QOpcUaClient::ClientState>(),
+ QOpcUaClient::ClientState::Connected);
+
+ stateSpy.clear();
+ connectedSpy.clear();
+ disconnectedSpy.clear();
+
+ QVERIFY(opcuaClient->url() == QUrl(endPoint));
+ }
+
+ ~OpcuaConnector()
+ {
+ QSignalSpy connectedSpy(opcuaClient, &QOpcUaClient::connected);
+ QSignalSpy disconnectedSpy(opcuaClient, &QOpcUaClient::disconnected);
+ QSignalSpy stateSpy(opcuaClient, &QOpcUaClient::stateChanged);
+ QSignalSpy errorSpy(opcuaClient, &QOpcUaClient::errorChanged);
+
+ QVERIFY(opcuaClient != nullptr);
+ if (opcuaClient->state() == QOpcUaClient::Connected) {
+
+ opcuaClient->disconnectFromEndpoint();
+
+ QTRY_VERIFY(opcuaClient->state() == QOpcUaClient::Disconnected);
+
+ QCOMPARE(connectedSpy.count(), 0);
+ QCOMPARE(disconnectedSpy.count(), 1);
+ QCOMPARE(stateSpy.count(), 2);
+ QCOMPARE(stateSpy.at(0).at(0).value<QOpcUaClient::ClientState>(),
+ QOpcUaClient::ClientState::Closing);
+ QCOMPARE(stateSpy.at(1).at(0).value<QOpcUaClient::ClientState>(),
+ QOpcUaClient::ClientState::Disconnected);
+ QCOMPARE(errorSpy.size(), 0);
+ }
+
+ opcuaClient = nullptr;
+ }
+
+ QOpcUaClient *opcuaClient;
+};
+
+class EventsubscriptionTest : public QObject
+{
+ Q_OBJECT
+
+public:
+ EventsubscriptionTest();
+
+private Q_SLOTS:
+ void initTestCase();
+ void cleanupTestCase();
+ void eventSubscription_data();
+ void eventSubscription();
+
+private:
+ QVector<QOpcUaClient *> m_clients;
+ QString m_serverUrl;
+};
+
+EventsubscriptionTest::EventsubscriptionTest()
+{
+ m_serverUrl = qEnvironmentVariable("TESTSERVER_URL",
+ QStringLiteral("opc.tcp://localhost:4840"));
+}
+
+void EventsubscriptionTest::initTestCase()
+{
+ QOpcUaProvider provider;
+ const QStringList backends = provider.availableBackends();
+
+ for (auto it : backends) {
+ QOpcUaClient *temp = provider.createClient(it);
+ if (temp)
+ m_clients.append(temp);
+ else
+ QFAIL(QStringLiteral("Failed to create client for backend %1").arg(it).toUtf8().constData());
+ }
+}
+
+void EventsubscriptionTest::cleanupTestCase()
+{
+ qDeleteAll(m_clients);
+ m_clients.clear();
+}
+
+void EventsubscriptionTest::eventSubscription_data()
+{
+ QTest::addColumn<QOpcUaClient *>("client");
+ for (auto it : m_clients)
+ QTest::newRow(it->backend().toLatin1().constData()) << it;
+}
+
+/*
+ This manual test requires the open62541 tutorial_server_events.c example
+ for the server side
+*/
+void EventsubscriptionTest::eventSubscription()
+{
+ QFETCH(QOpcUaClient *, client);
+ OpcuaConnector connector(client, m_serverUrl);
+
+ QScopedPointer<QOpcUaNode> serverNode(client->node("ns=0;i=2253")); // Server object
+ QVERIFY(serverNode != nullptr);
+
+ QScopedPointer<QOpcUaNode> objectsNode(client->node("ns=0;i=85")); // Objects folder
+ QVERIFY(objectsNode != nullptr);
+
+ qDebug() << "Node created";
+
+ QSignalSpy enabledSpy(serverNode.data(), &QOpcUaNode::enableMonitoringFinished);
+ QSignalSpy eventSpy(serverNode.data(), &QOpcUaNode::eventOccurred);
+
+ QOpcUaMonitoringParameters::EventFilter filter;
+ filter << QOpcUa::QSimpleAttributeOperand("Severity");
+ filter << QOpcUa::QSimpleAttributeOperand("Message");
+
+// Where clause is not yet supported in the open62541 server
+// // Only events with severity >= 700
+// QOpcUa::QContentFilterElement whereElement;
+// whereElement << QOpcUa::QContentFilterElement::FilterOperator::GreaterThanOrEqual << QOpcUa::QSimpleAttributeOperand("Severity") <<
+// QOpcUa::QLiteralOperand(quint16(700), QOpcUa::Types::UInt16);
+// filter << whereElement;
+
+ QOpcUaMonitoringParameters p(0);
+ p.setFilter(filter);
+
+ serverNode->enableMonitoring(QOpcUa::NodeAttribute::EventNotifier, p);
+ enabledSpy.wait();
+ QCOMPARE(enabledSpy.size(), 1);
+ QCOMPARE(enabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::EventNotifier);
+ QCOMPARE(enabledSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+
+ QCOMPARE(serverNode->monitoringStatus(QOpcUa::NodeAttribute::EventNotifier).filter().value<QOpcUaMonitoringParameters::EventFilter>(),
+ filter);
+
+// Disabled because the open62541 server does not currently return an EventFilterResult
+// QVERIFY(serverNode->monitoringStatus(QOpcUa::NodeAttribute::EventNotifier).filterResult().isValid());
+// QOpcUa::QEventFilterResult res = serverNode->monitoringStatus(QOpcUa::NodeAttribute::EventNotifier).filterResult().value<QOpcUa::QEventFilterResult>();
+// QVERIFY(res.isGood() == true);
+
+ qDebug() << "Monitoring enabled, waiting for event...";
+
+ objectsNode->callMethod(QStringLiteral("ns=1;i=62541")); // Trigger event
+ eventSpy.wait();
+ QCOMPARE(eventSpy.size(), 1);
+ QCOMPARE(eventSpy.at(0).at(0).toList().size(), 2);
+ quint16 severity = eventSpy.at(0).at(0).toList().at(0).value<quint16>();
+ QOpcUa::QLocalizedText message = eventSpy.at(0).at(0).toList().at(1).value<QOpcUa::QLocalizedText>();
+
+ qDebug() << "Event received";
+ qDebug() << "Message:" << message.locale() << message.text();
+ qDebug() << "Severity:" << severity;
+
+ QCOMPARE(severity, 100);
+ QCOMPARE(message, QOpcUa::QLocalizedText("en-US", "An event has been generated."));
+
+ qDebug() << "Modifying event filter...";
+
+ eventSpy.clear();
+
+ QSignalSpy modifySpy(serverNode.data(), &QOpcUaNode::monitoringStatusChanged);
+ filter << QOpcUa::QSimpleAttributeOperand("SourceNode");
+ serverNode->modifyEventFilter(filter);
+ modifySpy.wait();
+ QCOMPARE(modifySpy.size(), 1);
+ QCOMPARE(modifySpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::EventNotifier);
+ QVERIFY(modifySpy.at(0).at(1).value<QOpcUaMonitoringParameters::Parameters>().testFlag(QOpcUaMonitoringParameters::Parameter::Filter) == true);
+ QCOMPARE(modifySpy.at(0).at(2).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+ QCOMPARE(serverNode->monitoringStatus(QOpcUa::NodeAttribute::EventNotifier).filter().value<QOpcUaMonitoringParameters::EventFilter>(),
+ filter);
+ qDebug() << "EventFilter modified, waiting for event with additional SourceNode field...";
+
+ objectsNode->callMethod(QStringLiteral("ns=1;i=62541")); // Trigger event
+ eventSpy.wait();
+ QCOMPARE(eventSpy.size(), 1);
+ QCOMPARE(eventSpy.at(0).at(0).toList().size(), 3);
+ severity = eventSpy.at(0).at(0).toList().at(0).value<quint16>();
+ message = eventSpy.at(0).at(0).toList().at(1).value<QOpcUa::QLocalizedText>();
+ QString sourceNode = eventSpy.at(0).at(0).toList().at(2).toString();
+
+ qDebug() << "Event received";
+ qDebug() << "Message:" << message.locale() << message.text();
+ qDebug() << "Severity:" << severity;
+ qDebug() << "SourceNode:" << sourceNode;
+
+ QCOMPARE(severity, 100);
+ QCOMPARE(message, QOpcUa::QLocalizedText("en-US", "An event has been generated."));
+ QCOMPARE(sourceNode, QStringLiteral("ns=0;i=2253"));
+
+ QSignalSpy disabledSpy(serverNode.data(), &QOpcUaNode::disableMonitoringFinished);
+ serverNode->disableMonitoring(QOpcUa::NodeAttribute::EventNotifier);
+ disabledSpy.wait();
+ QCOMPARE(disabledSpy.size(), 1);
+ QCOMPARE(disabledSpy.at(0).at(0).value<QOpcUa::NodeAttribute>(), QOpcUa::NodeAttribute::EventNotifier);
+ QCOMPARE(disabledSpy.at(0).at(1).value<QOpcUa::UaStatusCode>(), QOpcUa::UaStatusCode::Good);
+}
+
+QTEST_MAIN(EventsubscriptionTest)
+
+#include "tst_eventsubscription.moc"
diff --git a/tests/manual/manual.pro b/tests/manual/manual.pro
new file mode 100644
index 0000000..3ee3e86
--- /dev/null
+++ b/tests/manual/manual.pro
@@ -0,0 +1,3 @@
+TEMPLATE = subdirs
+
+SUBDIRS += eventsubscription
diff --git a/tests/open62541-testserver/main.cpp b/tests/open62541-testserver/main.cpp
index 8f41763..bbd51a8 100644
--- a/tests/open62541-testserver/main.cpp
+++ b/tests/open62541-testserver/main.cpp
@@ -35,6 +35,7 @@
****************************************************************************/
#include "testserver.h"
+#include "qopen62541utils.h"
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
@@ -75,66 +76,99 @@ int main(int argc, char **argv)
// // TODO: Create Event
// Test variables containing arrays of various types
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Boolean", "BoolArrayTest", false, QOpcUa::Types::Boolean);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Byte", "ByteArrayTest", 0, QOpcUa::Types::Byte);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.SByte", "SByteArrayTest", 0, QOpcUa::Types::SByte);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Double", "DoubleArrayTest", 0.0, QOpcUa::Types::Double);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Float", "FloatArrayTest", 0.0f, QOpcUa::Types::Float);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Int16", "Int16ArrayTest", 0, QOpcUa::Types::Int16);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Int32", "Int32ArrayTest", 0, QOpcUa::Types::Int32);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Int64", "Int64ArrayTest", 0, QOpcUa::Types::Int64);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.UInt16", "UInt16ArrayTest", 0, QOpcUa::Types::UInt16);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.UInt32", "UInt32ArrayTest", 0, QOpcUa::Types::UInt32);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.UInt64", "UInt64ArrayTest", 0, QOpcUa::Types::UInt64);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.String", "StringArrayTest", QStringLiteral("Value 0"), QOpcUa::Types::String);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Boolean", "BoolArrayTest", QVariantList({true, false}), QOpcUa::Types::Boolean);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Byte", "ByteArrayTest", QVariantList({1, 2}), QOpcUa::Types::Byte);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.SByte", "SByteArrayTest", QVariantList({1, 2}), QOpcUa::Types::SByte);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Double", "DoubleArrayTest", QVariantList({1.0, 2.0}), QOpcUa::Types::Double);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Float", "FloatArrayTest", QVariantList({1.0f, 2.0f}), QOpcUa::Types::Float);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Int16", "Int16ArrayTest", QVariantList({1, 2}), QOpcUa::Types::Int16);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Int32", "Int32ArrayTest", QVariantList({1, 2}), QOpcUa::Types::Int32);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Int64", "Int64ArrayTest", QVariantList({1, 2}), QOpcUa::Types::Int64);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.UInt16", "UInt16ArrayTest", QVariantList({1, 2}), QOpcUa::Types::UInt16);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.UInt32", "UInt32ArrayTest", QVariantList({1, 2}), QOpcUa::Types::UInt32);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.UInt64", "UInt64ArrayTest", QVariantList({1, 2}), QOpcUa::Types::UInt64);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.String", "StringArrayTest",
+ QVariantList({QStringLiteral("Value 1"), QStringLiteral("Value 2")}), QOpcUa::Types::String);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.LocalizedText", "LocalizedTextArrayTest",
- QVariant::fromValue(QOpcUa::QLocalizedText(QStringLiteral("en_US"), QStringLiteral("Value 0"))), QOpcUa::Types::LocalizedText);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.ByteString", "ByteStringArrayTest", QByteArray("Value 0"), QOpcUa::Types::ByteString);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.DateTime", "DateTimeArrayTest", QDateTime::currentDateTime(), QOpcUa::Types::DateTime);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.NodeId", "NodeIdArrayTest", "ns=0;i=84", QOpcUa::Types::NodeId);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Guid", "GuidArrayTest", QUuid::createUuid(), QOpcUa::Types::Guid);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.XmlElement", "XmlElementArrayTest", QString(), QOpcUa::Types::XmlElement);
+ QVariantList({QVariant::fromValue(QOpcUa::QLocalizedText(QStringLiteral("en-US"), QStringLiteral("Value 1"))),
+ QVariant::fromValue(QOpcUa::QLocalizedText(QStringLiteral("en-US"), QStringLiteral("Value 2")))}),
+ QOpcUa::Types::LocalizedText);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.ByteString", "ByteStringArrayTest",
+ QVariantList({QByteArray("Value 1"), QByteArray("Value 2")}), QOpcUa::Types::ByteString);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.DateTime", "DateTimeArrayTest",
+ QVariantList({QDateTime::currentDateTime(), QDateTime::currentDateTime().addDays(1), QDateTime::currentDateTime().addDays(2)}),
+ QOpcUa::Types::DateTime);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.NodeId", "NodeIdArrayTest",
+ QVariantList({QStringLiteral("ns=0;i=84"), QStringLiteral("ns=0;i=85")}), QOpcUa::Types::NodeId);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Guid", "GuidArrayTest",
+ QVariantList({QUuid::createUuid(), QUuid::createUuid()}), QOpcUa::Types::Guid);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.XmlElement", "XmlElementArrayTest",
+ QVariantList({QStringLiteral("<?xml version=\"1\" encoding=\"UTF-8\"?>"),
+ QStringLiteral("<?xml version=\"1\" encoding=\"UTF-8\"?>")}), QOpcUa::Types::XmlElement);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.QualifiedName", "QualifiedNameArrayTest",
- QVariant::fromValue(QOpcUa::QQualifiedName(0, QStringLiteral("Value 0"))), QOpcUa::Types::QualifiedName);
+ QVariantList({QVariant::fromValue(QOpcUa::QQualifiedName(0, QStringLiteral("Value 1"))),
+ QVariant::fromValue(QOpcUa::QQualifiedName(0, QStringLiteral("Value 2")))}), QOpcUa::Types::QualifiedName);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.StatusCode", "StatusCodeArrayTest",
- QVariant::fromValue(QOpcUa::UaStatusCode::Good), QOpcUa::Types::StatusCode);
-
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Range", "RangeArrayTest", QVariant::fromValue(QOpcUa::QRange(0, 100)), QOpcUa::Types::Range);
+ QVariantList({QVariant::fromValue(QOpcUa::UaStatusCode::Good),
+ QVariant::fromValue(QOpcUa::UaStatusCode::BadInvalidArgument)}), QOpcUa::Types::StatusCode);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Range", "RangeArrayTest",
+ QVariantList({QVariant::fromValue(QOpcUa::QRange(0, 100)),
+ QVariant::fromValue(QOpcUa::QRange(100, 200))}), QOpcUa::Types::Range);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.EUInformation", "EUInformationArrayTest",
- QVariant::fromValue(QOpcUa::QEUInformation()), QOpcUa::Types::EUInformation);
+ QVariantList({QVariant::fromValue(QOpcUa::QEUInformation()),
+ QVariant::fromValue(QOpcUa::QEUInformation())}), QOpcUa::Types::EUInformation);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.ComplexNumber", "ComplexNumberArrayTest",
- QVariant::fromValue(QOpcUa::QComplexNumber(1, 2)), QOpcUa::Types::ComplexNumber);
+ QVariantList({QVariant::fromValue(QOpcUa::QComplexNumber(1, 2)),
+ QVariant::fromValue(QOpcUa::QComplexNumber(2, 3))}), QOpcUa::Types::ComplexNumber);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.DoubleComplexNumber", "DoubleComplexNumberArrayTest",
- QVariant::fromValue(QOpcUa::QDoubleComplexNumber(1, 2)), QOpcUa::Types::DoubleComplexNumber);
+ QVariantList({QVariant::fromValue(QOpcUa::QDoubleComplexNumber(1, 2)),
+ QVariant::fromValue(QOpcUa::QDoubleComplexNumber(2, 3))}), QOpcUa::Types::DoubleComplexNumber);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.AxisInformation", "AxisInformationArrayTest",
- QVariant::fromValue(QOpcUa::QAxisInformation()), QOpcUa::Types::AxisInformation);
+ QVariantList({QVariant::fromValue(QOpcUa::QAxisInformation()),
+ QVariant::fromValue(QOpcUa::QAxisInformation())}), QOpcUa::Types::AxisInformation);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.XV", "XVArrayTest",
- QVariant::fromValue(QOpcUa::QXValue(1, 2)), QOpcUa::Types::XV);
-
+ QVariantList({QVariant::fromValue(QOpcUa::QXValue(1, 2)),
+ QVariant::fromValue(QOpcUa::QXValue(2, 3))}), QOpcUa::Types::XV);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.ExpandedNodeId", "ExpandedNodeIdArrayTest",
+ QVariantList({QOpcUa::QExpandedNodeId(QStringLiteral("ns1"), QStringLiteral("ns=0;i=64"), 1),
+ QOpcUa::QExpandedNodeId(QString(), QStringLiteral("ns=1;i=84"))}),
+ QOpcUa::Types::ExpandedNodeId);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.Argument", "ArgumentArrayTest",
+ QVariantList({QOpcUa::QArgument(QStringLiteral("Argument1"), QStringLiteral("ns=0;i=12"), -1,
+ {},QOpcUa::QLocalizedText(QStringLiteral("en"), QStringLiteral("Description1"))),
+ QOpcUa::QArgument(QStringLiteral("Argument2"), QStringLiteral("ns=0;i=12"), 2,
+ {2, 2}, QOpcUa::QLocalizedText(QStringLiteral("en"), QStringLiteral("Description2")))}),
+ QOpcUa::Types::Argument);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.ExtensionObject", "ExtensionObjectArrayTest",
+ QVariantList({QOpcUa::QExtensionObject(), QOpcUa::QExtensionObject()}),
+ QOpcUa::Types::ExtensionObject);
+
+ // Test variables containing scalar values of various types
server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Boolean", "BoolScalarTest", false, QOpcUa::Types::Boolean);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Byte", "ByteScalarTest", 0, QOpcUa::Types::Byte);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.SByte", "SByteScalarTest", 0, QOpcUa::Types::SByte);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Double", "DoubleScalarTest", 0.0, QOpcUa::Types::Double);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Float", "FloatScalarTest", 0.0f, QOpcUa::Types::Float);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Int16", "Int16ScalarTest", 0, QOpcUa::Types::Int16);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Int32", "Int32ScalarTest", 0, QOpcUa::Types::Int32);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Int64", "Int64ScalarTest", 0, QOpcUa::Types::Int64);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.UInt16", "UInt16ScalarTest", 0, QOpcUa::Types::UInt16);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.UInt32", "UInt32ScalarTest", 0, QOpcUa::Types::UInt32);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.UInt64", "UInt64ScalarTest", 0, QOpcUa::Types::UInt64);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Byte", "ByteScalarTest", 1, QOpcUa::Types::Byte);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.SByte", "SByteScalarTest", 2, QOpcUa::Types::SByte);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Double", "DoubleScalarTest", 1.0, QOpcUa::Types::Double);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Float", "FloatScalarTest", 1.0f, QOpcUa::Types::Float);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Int16", "Int16ScalarTest", 1, QOpcUa::Types::Int16);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Int32", "Int32ScalarTest", 1, QOpcUa::Types::Int32);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Int64", "Int64ScalarTest", 1, QOpcUa::Types::Int64);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.UInt16", "UInt16ScalarTest", 1, QOpcUa::Types::UInt16);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.UInt32", "UInt32ScalarTest", 1, QOpcUa::Types::UInt32);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.UInt64", "UInt64ScalarTest", 1, QOpcUa::Types::UInt64);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.String", "StringScalarTest", QStringLiteral("Value"), QOpcUa::Types::String);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.LocalizedText", "LocalizedTextScalarTest",
- QVariant::fromValue(QOpcUa::QLocalizedText(QStringLiteral("en_US"), QStringLiteral("Value"))), QOpcUa::Types::LocalizedText);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.ByteString", "ByteStringScalarTest", QByteArray("Value"), QOpcUa::Types::ByteString);
+ QVariant::fromValue(QOpcUa::QLocalizedText(QStringLiteral("en-US"), QStringLiteral("Value"))),
+ QOpcUa::Types::LocalizedText);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.ByteString", "ByteStringScalarTest", QByteArray("Value 1"), QOpcUa::Types::ByteString);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.DateTime", "DateTimeScalarTest", QDateTime::currentDateTime(), QOpcUa::Types::DateTime);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.NodeId", "NodeIdScalarTest", "ns=0;i=84", QOpcUa::Types::NodeId);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.NodeId", "NodeIdScalarTest", QStringLiteral("ns=0;i=84"), QOpcUa::Types::NodeId);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Guid", "GuidScalarTest", QUuid::createUuid(), QOpcUa::Types::Guid);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.XmlElement", "XmlElementScalarTest", QString(), QOpcUa::Types::XmlElement);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.XmlElement", "XmlElementScalarTest",
+ QStringLiteral("<?xml version=\"1\" encoding=\"UTF-8\"?>"), QOpcUa::Types::XmlElement);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.QualifiedName", "QualifiedNameScalarTest",
QVariant::fromValue(QOpcUa::QQualifiedName(0, QStringLiteral("Value"))), QOpcUa::Types::QualifiedName);
- server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.StatusCode", "StatusCodeScalarTest", QVariant::fromValue(QOpcUa::UaStatusCode::Good), QOpcUa::Types::StatusCode);
-
-
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.StatusCode", "StatusCodeScalarTest", QVariant::fromValue(QOpcUa::UaStatusCode::Good),
+ QOpcUa::Types::StatusCode);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Range", "RangeScalarTest", QVariant::fromValue(QOpcUa::QRange(0, 100)), QOpcUa::Types::Range);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.EUInformation", "EUInformationScalarTest",
QVariant::fromValue(QOpcUa::QEUInformation()), QOpcUa::Types::EUInformation);
@@ -146,7 +180,18 @@ int main(int argc, char **argv)
QVariant::fromValue(QOpcUa::QAxisInformation()), QOpcUa::Types::AxisInformation);
server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.XV", "XVScalarTest",
QVariant::fromValue(QOpcUa::QXValue(1, 2)), QOpcUa::Types::XV);
-
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.ExpandedNodeId", "ExpandedNodeIdScalarTest",
+ QOpcUa::QExpandedNodeId(QStringLiteral("ns1"), QStringLiteral("ns=0;i=64"), 1),
+ QOpcUa::Types::ExpandedNodeId);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.Argument", "ArgumentScalarTest",
+ QOpcUa::QArgument(QStringLiteral("Argument1"), QStringLiteral("ns=0;i=12"), -1,
+ {},QOpcUa::QLocalizedText(QStringLiteral("en"), QStringLiteral("Description1"))),
+ QOpcUa::Types::Argument);
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Scalar.ExtensionObject", "ExtensionObjectScalarTest",
+ QOpcUa::QExtensionObject(), QOpcUa::Types::ExtensionObject);
+ server.addNodeWithFixedTimestamp(testFolder, "ns=2;s=Demo.Static.FixedTimestamp", "FixedTimestamp");
+
+ // Create folders containing child nodes with string, guid and opaque node ids
UA_NodeId testStringIdsFolder = server.addFolder("ns=3;s=testStringIdsFolder", "testStringIdsFolder");
server.addVariable(testStringIdsFolder, "ns=3;s=theStringId", "theStringId", QStringLiteral("Value"), QOpcUa::Types::String);
UA_NodeId testGuidIdsFolder = server.addFolder("ns=3;s=testGuidIdsFolder", "testGuidIdsFolder");
@@ -154,9 +199,31 @@ int main(int argc, char **argv)
UA_NodeId testOpaqueIdsFolder = server.addFolder("ns=3;s=testOpaqueIdsFolder", "testOpaqueIdsFolder");
server.addVariable(testOpaqueIdsFolder, "ns=3;b=UXQgZnR3IQ==", "theOpaqueId", QStringLiteral("Value"), QOpcUa::Types::String);
- server.addMethod(testFolder, "ns=3;s=Test.Method.Multiply", "MultiplyDoubles");
-
+ // Add a method to the test folder
+ server.addMultiplyMethod(testFolder, "ns=3;s=Test.Method.Multiply", "MultiplyDoubles");
+ server.addMultipleOutputArgumentsMethod(testFolder, "ns=3;s=Test.Method.MultipleOutputArguments", "MultipleOutputArguments");
server.addEmptyArrayVariable(testFolder, "ns=2;s=EmptyBoolArray", "EmptyBoolArrayTest");
+ const QVector<quint32> arrayDimensions({2, 2, 3});
+ const QVariantList value({0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0});
+ server.addVariable(testFolder, "ns=2;s=Demo.Static.Arrays.MultiDimensionalDouble", "MultiDimensionalDoubleTest",
+ QOpcUa::QMultiDimensionalArray(value, arrayDimensions), QOpcUa::Types::Double, QVector<quint32>({2, 2, 3}));
+
+ // Add folders for relative nodes
+ const UA_NodeId testFolder2 = server.addFolder("ns=3;s=TestFolder2", "TestFolder2");
+ server.addVariable(testFolder2, "ns=3;s=TestNode2.ReadWrite", "TestNode.ReadWrite", 0.1, QOpcUa::Types::Double);
+
+ // Add a method for adding namespaces
+ server.addAddNamespaceMethod(Open62541Utils::nodeIdFromQString("ns=0;i=2253"), "ns=3;s=Test.Method.AddNamespace", "AddNamespace");
+
+ // Add full writable node
+ quint32 fullWritableMask = UA_WRITEMASK_ACCESSLEVEL | UA_WRITEMASK_ARRRAYDIMENSIONS | UA_WRITEMASK_BROWSENAME | UA_WRITEMASK_CONTAINSNOLOOPS |
+ UA_WRITEMASK_DATATYPE | UA_WRITEMASK_DESCRIPTION | UA_WRITEMASK_DISPLAYNAME | UA_WRITEMASK_EVENTNOTIFIER | UA_WRITEMASK_EXECUTABLE |
+ UA_WRITEMASK_HISTORIZING | UA_WRITEMASK_INVERSENAME | UA_WRITEMASK_ISABSTRACT | UA_WRITEMASK_MINIMUMSAMPLINGINTERVAL | UA_WRITEMASK_NODECLASS |
+ UA_WRITEMASK_NODEID | UA_WRITEMASK_SYMMETRIC | UA_WRITEMASK_USERACCESSLEVEL | UA_WRITEMASK_USEREXECUTABLE | UA_WRITEMASK_USERWRITEMASK |
+ UA_WRITEMASK_VALUERANK | UA_WRITEMASK_WRITEMASK | UA_WRITEMASK_VALUEFORVARIABLETYPE;
+
+ server.addVariableWithWriteMask(testFolder, "ns=3;s=Demo.Static.Scalar.FullyWritable", "FullyWritableTest", 1.0, QOpcUa::Types::Double, fullWritableMask);
+
return app.exec();
}
diff --git a/tests/open62541-testserver/testserver.cpp b/tests/open62541-testserver/testserver.cpp
index d02d5c8..d83694d 100644
--- a/tests/open62541-testserver/testserver.cpp
+++ b/tests/open62541-testserver/testserver.cpp
@@ -67,7 +67,7 @@ TestServer::~TestServer()
bool TestServer::init()
{
- m_config = UA_ServerConfig_new_minimal(43344, NULL);
+ m_config = UA_ServerConfig_new_minimal(43344, nullptr);
if (!m_config)
return false;
@@ -112,22 +112,29 @@ UA_NodeId TestServer::addFolder(const QString &nodeString, const QString &displa
UA_NodeId resultNode;
UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
- oAttr.displayName = UA_LOCALIZEDTEXT_ALLOC("en_US", displayName.toUtf8().constData());
+ oAttr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", displayName.toUtf8().constData());
if (description.size())
- oAttr.description = UA_LOCALIZEDTEXT_ALLOC("en_US", description.toUtf8().constData());
+ oAttr.description = UA_LOCALIZEDTEXT_ALLOC("en-US", description.toUtf8().constData());
UA_StatusCode result;
UA_NodeId requestedNodeId = Open62541Utils::nodeIdFromQString(nodeString);
+ UA_QualifiedName nodeBrowseName = UA_QUALIFIEDNAME_ALLOC(requestedNodeId.namespaceIndex, displayName.toUtf8().constData());
+
result = UA_Server_addObjectNode(m_server,
requestedNodeId,
UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
- UA_QUALIFIEDNAME_ALLOC(requestedNodeId.namespaceIndex, nodeString.toUtf8().constData()),
+ nodeBrowseName,
UA_NODEID_NULL,
oAttr,
- NULL,
+ nullptr,
&resultNode);
+
+ UA_QualifiedName_deleteMembers(&nodeBrowseName);
+ UA_NodeId_deleteMembers(&requestedNodeId);
+ UA_ObjectAttributes_deleteMembers(&oAttr);
+
if (result != UA_STATUSCODE_GOOD) {
qWarning() << "Could not add folder:" << nodeString << " :" << result;
return UA_NODEID_NULL;
@@ -141,17 +148,23 @@ UA_NodeId TestServer::addObject(const UA_NodeId &parentFolder, int namespaceInde
UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
if (objectName.size())
- oAttr.displayName = UA_LOCALIZEDTEXT_ALLOC("en_US", objectName.toUtf8().constData());
+ oAttr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", objectName.toUtf8().constData());
+
+ UA_QualifiedName nodeBrowseName = UA_QUALIFIEDNAME_ALLOC(namespaceIndex, objectName.toUtf8().constData());
UA_StatusCode result;
result = UA_Server_addObjectNode(m_server, UA_NODEID_NULL,
parentFolder,
UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
- UA_QUALIFIEDNAME_ALLOC(namespaceIndex, objectName.toUtf8().constData()),
+ nodeBrowseName,
UA_NODEID_NULL,
oAttr,
- NULL,
+ nullptr,
&resultNode);
+
+ UA_QualifiedName_deleteMembers(&nodeBrowseName);
+ UA_ObjectAttributes_deleteMembers(&oAttr);
+
if (result != UA_STATUSCODE_GOOD) {
qWarning() << "Could not add object to folder:" << result;
return UA_NODEID_NULL;
@@ -159,15 +172,20 @@ UA_NodeId TestServer::addObject(const UA_NodeId &parentFolder, int namespaceInde
return resultNode;
}
-UA_NodeId TestServer::addVariable(const UA_NodeId &folder, const QString &variableNode, const QString &name, const QVariant &value, QOpcUa::Types type)
+UA_NodeId TestServer::addVariableWithWriteMask(const UA_NodeId &folder, const QString &variableNode, const QString &name, const QVariant &value,
+ QOpcUa::Types type, quint32 writeMask)
{
UA_NodeId variableNodeId = Open62541Utils::nodeIdFromQString(variableNode);
+ const QString description = QStringLiteral("Description for %1").arg(variableNode);
+
UA_VariableAttributes attr = UA_VariableAttributes_default;
attr.value = QOpen62541ValueConverter::toOpen62541Variant(value, type);
- attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en_US", name.toUtf8().constData());
+ attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", name.toUtf8().constData());
attr.dataType = attr.value.type ? attr.value.type->typeId : UA_TYPES[UA_TYPES_BOOLEAN].typeId;
attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
+ attr.description = UA_LOCALIZEDTEXT_ALLOC("en-US", description.toUtf8().constData());
+ attr.writeMask = writeMask;
UA_QualifiedName variableName;
variableName.namespaceIndex = variableNodeId.namespaceIndex;
@@ -181,9 +199,62 @@ UA_NodeId TestServer::addVariable(const UA_NodeId &folder, const QString &variab
variableName,
UA_NODEID_NULL,
attr,
- NULL,
+ nullptr,
+ &resultId);
+
+
+ UA_NodeId_deleteMembers(&variableNodeId);
+ UA_VariableAttributes_deleteMembers(&attr);
+
+ if (result != UA_STATUSCODE_GOOD) {
+ qWarning() << "Could not add variable:" << result;
+ return UA_NODEID_NULL;
+ }
+
+ return resultId;
+}
+
+UA_NodeId TestServer::addVariable(const UA_NodeId &folder, const QString &variableNode, const QString &name, const QVariant &value,
+ QOpcUa::Types type, QVector<quint32> arrayDimensions)
+{
+ UA_NodeId variableNodeId = Open62541Utils::nodeIdFromQString(variableNode);
+
+ const QString description = QStringLiteral("Description for %1").arg(variableNode);
+
+ UA_VariableAttributes attr = UA_VariableAttributes_default;
+ attr.value = QOpen62541ValueConverter::toOpen62541Variant(value, type);
+ attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", name.toUtf8().constData());
+ attr.dataType = attr.value.type ? attr.value.type->typeId : UA_TYPES[UA_TYPES_BOOLEAN].typeId;
+ attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
+ attr.description = UA_LOCALIZEDTEXT_ALLOC("en-US", description.toUtf8().constData());
+
+ if (arrayDimensions.size()) {
+ attr.arrayDimensionsSize = arrayDimensions.size();
+ attr.arrayDimensions = arrayDimensions.data();
+ }
+
+ UA_QualifiedName variableName;
+ variableName.namespaceIndex = variableNodeId.namespaceIndex;
+ variableName.name = attr.displayName.text;
+
+ UA_NodeId resultId;
+ UA_StatusCode result = UA_Server_addVariableNode(m_server,
+ variableNodeId,
+ folder,
+ UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
+ variableName,
+ UA_NODEID_NULL,
+ attr,
+ nullptr,
&resultId);
+ // Prevent deletion of the QVector's value by UA_VariableAttribute_deleteMembers
+ attr.arrayDimensions = nullptr;
+ attr.arrayDimensionsSize = 0;
+
+ UA_NodeId_deleteMembers(&variableNodeId);
+ UA_VariableAttributes_deleteMembers(&attr);
+
if (result != UA_STATUSCODE_GOOD) {
qWarning() << "Could not add variable:" << result;
return UA_NODEID_NULL;
@@ -197,7 +268,7 @@ UA_NodeId TestServer::addEmptyArrayVariable(const UA_NodeId &folder, const QStri
UA_NodeId variableNodeId = Open62541Utils::nodeIdFromQString(variableNode);
UA_VariableAttributes attr = UA_VariableAttributes_default;
- attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en_US", name.toUtf8().constData());
+ attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", name.toUtf8().constData());
attr.dataType = UA_TYPES[UA_TYPES_BOOLEAN].typeId;
attr.accessLevel = UA_ACCESSLEVELMASK_READ;
attr.valueRank = 1;
@@ -217,9 +288,12 @@ UA_NodeId TestServer::addEmptyArrayVariable(const UA_NodeId &folder, const QStri
variableName,
UA_NODEID_NULL,
attr,
- NULL,
+ nullptr,
&resultId);
+ UA_NodeId_deleteMembers(&variableNodeId);
+ UA_VariableAttributes_deleteMembers(&attr);
+
if (result != UA_STATUSCODE_GOOD) {
qWarning() << "Could not add empty array variable:" << result;
return UA_NODEID_NULL;
@@ -254,7 +328,7 @@ UA_StatusCode TestServer::multiplyMethod(UA_Server *server, const UA_NodeId *ses
return UA_STATUSCODE_GOOD;
}
-UA_NodeId TestServer::addMethod(const UA_NodeId &folder, const QString &variableNode, const QString &description)
+UA_NodeId TestServer::addMultiplyMethod(const UA_NodeId &folder, const QString &variableNode, const QString &description)
{
UA_NodeId methodNodeId = Open62541Utils::nodeIdFromQString(variableNode);
@@ -282,18 +356,28 @@ UA_NodeId TestServer::addMethod(const UA_NodeId &folder, const QString &variable
UA_MethodAttributes attr = UA_MethodAttributes_default;
- attr.description = UA_LOCALIZEDTEXT_ALLOC("en_US", description.toUtf8().constData());
- attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en_US", variableNode.toUtf8().constData());
+ attr.description = UA_LOCALIZEDTEXT_ALLOC("en-US", description.toUtf8().constData());
+ attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", variableNode.toUtf8().constData());
attr.executable = true;
+ UA_QualifiedName nodeBrowseName = UA_QUALIFIEDNAME_ALLOC(methodNodeId.namespaceIndex, "multiplyArguments");
+
UA_NodeId resultId;
UA_StatusCode result = UA_Server_addMethodNode(m_server, methodNodeId, folder,
UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
- UA_QUALIFIEDNAME_ALLOC(methodNodeId.namespaceIndex, "multiplyArguments"),
+ nodeBrowseName,
attr, &multiplyMethod,
2, inputArguments,
1, &outputArgument,
- NULL, &resultId);
+ nullptr, &resultId);
+
+ UA_QualifiedName_deleteMembers(&nodeBrowseName);
+ UA_NodeId_deleteMembers(&methodNodeId);
+ UA_MethodAttributes_deleteMembers(&attr);
+ UA_Argument_deleteMembers(&inputArguments[0]);
+ UA_Argument_deleteMembers(&inputArguments[1]);
+ UA_Argument_deleteMembers(&outputArgument);
+
if (result != UA_STATUSCODE_GOOD) {
qWarning() << "Could not add variable:" << result;
return UA_NODEID_NULL;
@@ -301,4 +385,204 @@ UA_NodeId TestServer::addMethod(const UA_NodeId &folder, const QString &variable
return resultId;
}
+UA_StatusCode TestServer::multipleOutputArgumentsMethod(UA_Server *server, const UA_NodeId *sessionId, void *sessionHandle, const UA_NodeId *methodId, void *methodContext, const UA_NodeId *objectId, void *objectContext, size_t inputSize, const UA_Variant *input, size_t outputSize, UA_Variant *output)
+{
+ Q_UNUSED(server);
+ Q_UNUSED(sessionId);
+ Q_UNUSED(sessionHandle);
+ Q_UNUSED(methodId);
+ Q_UNUSED(methodContext);
+ Q_UNUSED(objectId);
+ Q_UNUSED(objectContext);
+
+ if (inputSize < 2)
+ return QOpcUa::UaStatusCode::BadArgumentsMissing;
+ if (inputSize > 2)
+ return QOpcUa::UaStatusCode::BadTooManyArguments;
+ if (outputSize != 2)
+ return QOpcUa::UaStatusCode::BadInvalidArgument;
+
+ double arg1 = *static_cast<double *>(input[0].data);
+ double arg2 = *static_cast<double *>(input[1].data);
+
+ double product = arg1 * arg2;
+ auto someText = UA_LOCALIZEDTEXT_ALLOC("en-US", "some text argument");
+ UA_Variant_setScalarCopy(&output[0], &product, &UA_TYPES[UA_TYPES_DOUBLE]);
+ UA_Variant_setScalarCopy(&output[1], &someText, &UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
+
+ return UA_STATUSCODE_GOOD;
+}
+
+UA_NodeId TestServer::addMultipleOutputArgumentsMethod(const UA_NodeId &folder, const QString &variableNode, const QString &description)
+{
+ UA_NodeId methodNodeId = Open62541Utils::nodeIdFromQString(variableNode);
+
+ UA_Argument inputArguments[2];
+ UA_Argument_init(&inputArguments[0]);
+ UA_Argument_init(&inputArguments[1]);
+
+ inputArguments[0].description = UA_LOCALIZEDTEXT_ALLOC("en", "First value");
+ inputArguments[0].name = UA_STRING_ALLOC("The first double");
+ inputArguments[0].dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
+ inputArguments[0].valueRank = -1;
+
+ inputArguments[1].description = UA_LOCALIZEDTEXT_ALLOC("en", "Second value");
+ inputArguments[1].name = UA_STRING_ALLOC("The second double");
+ inputArguments[1].dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
+ inputArguments[1].valueRank = -1;
+
+ UA_Argument outputArgument[2];
+ UA_Argument_init(&outputArgument[0]);
+ UA_Argument_init(&outputArgument[1]);
+
+ outputArgument[0].description = UA_LOCALIZEDTEXT_ALLOC("en", "The product of the two arguments");
+ outputArgument[0].name = UA_STRING_ALLOC("The product of the two arguments");
+ outputArgument[0].dataType = UA_TYPES[UA_TYPES_DOUBLE].typeId;
+ outputArgument[0].valueRank = -1;
+
+ outputArgument[1].description = UA_LOCALIZEDTEXT_ALLOC("en", "Some additional text argument");
+ outputArgument[1].name = UA_STRING_ALLOC("Text argument");
+ outputArgument[1].dataType = UA_TYPES[UA_TYPES_LOCALIZEDTEXT].typeId;
+ outputArgument[1].valueRank = -1;
+
+ UA_MethodAttributes attr = UA_MethodAttributes_default;
+
+ attr.description = UA_LOCALIZEDTEXT_ALLOC("en-US", description.toUtf8().constData());
+ attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", variableNode.toUtf8().constData());
+ attr.executable = true;
+
+ UA_QualifiedName nodeBrowseName = UA_QUALIFIEDNAME_ALLOC(methodNodeId.namespaceIndex, "multipleOutputArguments");
+
+ UA_NodeId resultId;
+ UA_StatusCode result = UA_Server_addMethodNode(m_server, methodNodeId, folder,
+ UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
+ nodeBrowseName,
+ attr, &multipleOutputArgumentsMethod,
+ 2, inputArguments,
+ 2, outputArgument,
+ nullptr, &resultId);
+
+ UA_QualifiedName_deleteMembers(&nodeBrowseName);
+ UA_NodeId_deleteMembers(&methodNodeId);
+ UA_MethodAttributes_deleteMembers(&attr);
+ UA_Argument_deleteMembers(&inputArguments[0]);
+ UA_Argument_deleteMembers(&inputArguments[1]);
+ UA_Argument_deleteMembers(&outputArgument[0]);
+ UA_Argument_deleteMembers(&outputArgument[1]);
+
+ if (result != UA_STATUSCODE_GOOD) {
+ qWarning() << "Could not add variable:" << result;
+ return UA_NODEID_NULL;
+ }
+ return resultId;
+}
+
+UA_NodeId TestServer::addAddNamespaceMethod(const UA_NodeId &folder, const QString &variableNode, const QString &description)
+{
+ UA_NodeId methodNodeId = Open62541Utils::nodeIdFromQString(variableNode);
+
+ UA_Argument inputArguments[1];
+ UA_Argument_init(&inputArguments[0]);
+
+ inputArguments[0].description = UA_LOCALIZEDTEXT_ALLOC("en", "Namespace name to be added");
+ inputArguments[0].name = UA_STRING_ALLOC("Namespace name");
+ inputArguments[0].dataType = UA_TYPES[UA_TYPES_STRING].typeId;
+ inputArguments[0].valueRank = -1;
+
+ UA_Argument outputArgument;
+ UA_Argument_init(&outputArgument);
+
+ outputArgument.description = UA_LOCALIZEDTEXT_ALLOC("en", "Index of the added namespace");
+ outputArgument.name = UA_STRING_ALLOC("Namespace index");
+ outputArgument.dataType = UA_TYPES[UA_TYPES_UINT16].typeId;
+ outputArgument.valueRank = -1;
+
+ UA_MethodAttributes attr = UA_MethodAttributes_default;
+
+ attr.description = UA_LOCALIZEDTEXT_ALLOC("en-US", description.toUtf8().constData());
+ attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", variableNode.toUtf8().constData());
+ attr.executable = true;
+
+ UA_QualifiedName nodeBrowseName = UA_QUALIFIEDNAME_ALLOC(methodNodeId.namespaceIndex, "addNamespace");
+
+ UA_NodeId resultId;
+ UA_StatusCode result = UA_Server_addMethodNode(m_server, methodNodeId, folder,
+ UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
+ nodeBrowseName,
+ attr, &addNamespaceMethod,
+ 1, inputArguments,
+ 1, &outputArgument,
+ nullptr, &resultId);
+
+ UA_QualifiedName_deleteMembers(&nodeBrowseName);
+ UA_NodeId_deleteMembers(&methodNodeId);
+ UA_MethodAttributes_deleteMembers(&attr);
+ UA_Argument_deleteMembers(&inputArguments[0]);
+ UA_Argument_deleteMembers(&outputArgument);
+
+ if (result != UA_STATUSCODE_GOOD) {
+ qWarning() << "Could not add method:" << result;
+ return UA_NODEID_NULL;
+ }
+ return resultId;
+}
+
+UA_StatusCode TestServer::addNamespaceMethod(UA_Server *server, const UA_NodeId *sessionId, void *sessionHandle, const UA_NodeId *methodId, void *methodContext, const UA_NodeId *objectId, void *objectContext, size_t inputSize, const UA_Variant *input, size_t outputSize, UA_Variant *output)
+{
+ Q_UNUSED(sessionId);
+ Q_UNUSED(sessionHandle);
+ Q_UNUSED(methodId);
+ Q_UNUSED(methodContext);
+ Q_UNUSED(objectId);
+ Q_UNUSED(objectContext);
+
+ if (inputSize < 1)
+ return QOpcUa::UaStatusCode::BadArgumentsMissing;
+ if (inputSize > 1)
+ return QOpcUa::UaStatusCode::BadTooManyArguments;
+ if (outputSize != 1)
+ return QOpcUa::UaStatusCode::BadInvalidArgument;
+
+ if (input[0].type != &UA_TYPES[UA_TYPES_STRING])
+ return UA_STATUSCODE_BADTYPEMISMATCH;
+
+ QString uri = QOpen62541ValueConverter::scalarToQt<QString>(static_cast<UA_String *>(input[0].data));
+ UA_UInt16 namespaceIndex = UA_Server_addNamespace(server, uri.toUtf8().constData());
+ UA_Variant_setScalarCopy(output, &namespaceIndex, &UA_TYPES[UA_TYPES_UINT16]);
+ return UA_STATUSCODE_GOOD;
+}
+
+UA_NodeId TestServer::addNodeWithFixedTimestamp(const UA_NodeId &folder, const QString &nodeId, const QString &displayName)
+{
+ UA_NodeId variableNodeId = Open62541Utils::nodeIdFromQString(nodeId);
+
+ UA_VariableAttributes attr = UA_VariableAttributes_default;
+ attr.value = QOpen62541ValueConverter::toOpen62541Variant(QDateTime(QDate(2012, 12, 19), QTime(13, 37)), QOpcUa::DateTime);
+ attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en_US", displayName.toUtf8().constData());
+ attr.dataType = attr.value.type->typeId;
+ attr.accessLevel = UA_ACCESSLEVELMASK_READ; // Read Only
+
+ UA_QualifiedName variableName;
+ variableName.namespaceIndex = variableNodeId.namespaceIndex;
+ variableName.name = attr.displayName.text;
+
+ UA_NodeId resultId;
+ UA_StatusCode result = UA_Server_addVariableNode(m_server,
+ variableNodeId,
+ folder,
+ UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
+ variableName,
+ UA_NODEID_NULL,
+ attr,
+ NULL,
+ &resultId);
+
+ if (result != UA_STATUSCODE_GOOD) {
+ qWarning() << "Could not add variable:" << result;
+ return UA_NODEID_NULL;
+ }
+
+ return resultId;
+}
+
QT_END_NAMESPACE
diff --git a/tests/open62541-testserver/testserver.h b/tests/open62541-testserver/testserver.h
index 9f69ab6..2cebfd9 100644
--- a/tests/open62541-testserver/testserver.h
+++ b/tests/open62541-testserver/testserver.h
@@ -37,8 +37,8 @@
#ifndef TESTSERVER_H
#define TESTSERVER_H
-#include <open62541.h>
-#include <private/qopcuabinarydataencoding_p.h>
+#include <qopen62541.h>
+#include <QtOpcUa/qopcuatype.h>
#include <QtCore/QDateTime>
#include <QtCore/QObject>
@@ -59,10 +59,16 @@ public:
UA_NodeId addFolder(const QString &nodeString, const QString &displayName, const QString &description = QString());
UA_NodeId addObject(const UA_NodeId &folderId, int namespaceIndex, const QString &objectName = QString());
- UA_NodeId addVariable(const UA_NodeId &folder, const QString &variableNode, const QString &name, const QVariant &value, QOpcUa::Types type);
+ UA_NodeId addVariable(const UA_NodeId &folder, const QString &variableNode, const QString &name, const QVariant &value,
+ QOpcUa::Types type, QVector<quint32> arrayDimensions = QVector<quint32>());
+ UA_NodeId addVariableWithWriteMask(const UA_NodeId &folder, const QString &variableNode, const QString &name, const QVariant &value,
+ QOpcUa::Types type, quint32 writeMask);
UA_NodeId addEmptyArrayVariable(const UA_NodeId &folder, const QString &variableNode, const QString &name);
- UA_NodeId addMethod(const UA_NodeId &folder, const QString &variableNode, const QString &description);
+ UA_NodeId addMultiplyMethod(const UA_NodeId &folder, const QString &variableNode, const QString &description);
+ UA_NodeId addMultipleOutputArgumentsMethod(const UA_NodeId &folder, const QString &variableNode, const QString &description);
+ UA_NodeId addAddNamespaceMethod(const UA_NodeId &folder, const QString &variableNode, const QString &description);
+ UA_NodeId addNodeWithFixedTimestamp(const UA_NodeId &folder, const QString &nodeId, const QString &displayName);
static UA_StatusCode multiplyMethod(UA_Server *server, const UA_NodeId *sessionId, void *sessionHandle,
const UA_NodeId *methodId, void *methodContext,
@@ -70,6 +76,18 @@ public:
size_t inputSize, const UA_Variant *input,
size_t outputSize, UA_Variant *output);
+ static UA_StatusCode multipleOutputArgumentsMethod(UA_Server *server, const UA_NodeId *sessionId, void *sessionHandle,
+ const UA_NodeId *methodId, void *methodContext,
+ const UA_NodeId *objectId, void *objectContext,
+ size_t inputSize, const UA_Variant *input,
+ size_t outputSize, UA_Variant *output);
+
+ static UA_StatusCode addNamespaceMethod(UA_Server *server, const UA_NodeId *sessionId, void *sessionHandle,
+ const UA_NodeId *methodId, void *methodContext, const UA_NodeId *objectId,
+ void *objectContext, size_t inputSize, const UA_Variant *input, size_t outputSize,
+ UA_Variant *output);
+
+
UA_ServerConfig *m_config{nullptr};
UA_Server *m_server{nullptr};
QAtomicInt m_running{false};
diff --git a/tests/tests.pro b/tests/tests.pro
index 5719b55..e7b0667 100644
--- a/tests/tests.pro
+++ b/tests/tests.pro
@@ -1,5 +1,6 @@
TEMPLATE = subdirs
-SUBDIRS += auto
+SUBDIRS += auto \
+ manual
QT_FOR_CONFIG += opcua-private
diff --git a/tools/defaultnodeidsgenerator/defaultnodeidsgenerator.pro b/tools/defaultnodeidsgenerator/defaultnodeidsgenerator.pro
new file mode 100644
index 0000000..a068880
--- /dev/null
+++ b/tools/defaultnodeidsgenerator/defaultnodeidsgenerator.pro
@@ -0,0 +1,10 @@
+QT -= gui
+
+CONFIG += c++11
+
+SOURCES += \
+ main.cpp
+
+TARGET = qtopcua-defaultnodeidsgenerator
+
+load(qt_tool)
diff --git a/tools/defaultnodeidsgenerator/main.cpp b/tools/defaultnodeidsgenerator/main.cpp
new file mode 100644
index 0000000..1123cfd
--- /dev/null
+++ b/tools/defaultnodeidsgenerator/main.cpp
@@ -0,0 +1,242 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QCommandLineParser>
+#include <QCoreApplication>
+#include <QDebug>
+#include <QFile>
+
+
+/*
+ * This generator should be run if there is a new version of the NodeIds.csv file available in
+ * https://opcfoundation.org/UA/schemas/1.03/
+ *
+ * Building
+ * Qt OPC UA must be configured with -feature-ns0idgenerator to enable building the generator.
+ *
+ * Usage:
+ * qtopcua-defaultnodeidsgenerator -i NodeIds.csv -o /path/to/qtopcua/src/opcua/client/qopcuanodeids
+ *
+ * This generates qopcuanodeids.h and qopcuanodeids.cpp from the content of NodeIds.csv.
+ * The Qt OPC UA module must be rebuilt after running the generator.
+*/
+
+
+void createLicenseHeader(QTextStream &output)
+{
+ output << R"(/****************************************************************************
+**
+** Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtOpcUa module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/)";
+}
+
+void createHeader(QTextStream &output)
+{
+ createLicenseHeader(output);
+ output << "\n\n";
+ output << "#ifndef QOPCUANODEIDS_H" << "\n";
+ output << "#define QOPCUANODEIDS_H" << "\n\n";
+ output << "#include <QtOpcUa/qopcuaglobal.h>" << "\n\n";
+ output << "#include <QtCore/qmetatype.h>" << "\n\n";
+ output << "QT_BEGIN_NAMESPACE" << "\n\n";
+ output << "namespace QOpcUa {" << "\n";
+ output << " " << "namespace NodeIds {" << "\n";
+ output << "#ifndef QT_OPCUA_NO_NS0IDNAMES" << "\n";
+ output << " " << "Q_OPCUA_EXPORT Q_NAMESPACE" << "\n";
+ output << "#endif" << "\n\n";
+ output << " " << "enum class Namespace0 : quint32 {" << "\n";
+ output << " " << "Unknown = 0," << "\n";
+}
+
+void createFooter(QTextStream &output)
+{
+ output << " " << "};" << "\n";
+ output << "#ifndef QT_OPCUA_NO_NS0IDNAMES" << "\n";
+ output << " " << "Q_ENUM_NS(Namespace0)" << "\n";
+ output << "#endif" << "\n";
+ output << " " << "}" << "\n";
+ output << "}" << "\n\n";
+ output << "QT_END_NAMESPACE" << "\n\n";
+ output << "#endif // QOPCUANODEIDS_H\n";
+}
+
+void createSourceHeader(QTextStream &output)
+{
+ createLicenseHeader(output);
+ output << "\n\n";
+ output << "#include \"qopcuanodeids.h\"" << "\n\n";
+ output << "QT_BEGIN_NAMESPACE" << "\n\n";
+ output << R"(/*!
+ \namespace QOpcUa::NodeIds
+ \inmodule QtOpcUa
+ \inheaderfile QtOpcUa/qopcuanodeids.h
+ \brief This namespace contains enums with known node ids.
+*/
+
+/*!
+ \enum QOpcUa::NodeIds::Namespace0
+
+ Contains all numeric node identifiers from namespace 0 defined in the OPC Foundation's
+ \l {https://opcfoundation.org/UA/schemas/1.03/NodeIds.csv} {NodeIds.csv} file.
+
+ The values in this enum follow the naming from the CSV file and can be converted between
+ enum and node id string using \l QOpcUa::namespace0Id() and \l QOpcUa::namespace0IdFromNodeId().
+ \l QOpcUa::namespace0IdName() provides a conversion from enum value to the name string from the CSV file.
+
+ \code
+ QScopedPointer<QOpcUaNode> rootNode(client->node(QOpcUa::namespace0Id(QOpcUa::NodeIds::RootFolder)));
+ \endcode)" << "\n\n";
+ output << " " << "\\value Unknown" << "\n";
+}
+
+void createSourceFooter(QTextStream &output)
+{
+ output << "*/" << "\n\n";
+ output << "QT_END_NAMESPACE" << "\n";
+}
+
+bool nodeIdFromLine(const QString &line, QTextStream &outputHeader, QTextStream &outputSource)
+{
+ QStringList parts = line.trimmed().split(QLatin1String(","));
+
+ if (parts.size() != 3)
+ return false;
+ bool ok = false;
+ int identifier = parts.at(1).toUInt(&ok);
+ if (!ok)
+ return false;
+
+ outputHeader << " " << QStringLiteral("%1 = %2,").arg(parts.at(0)).arg(identifier) << "\n";
+ outputSource << " " << QStringLiteral("\\value %1").arg(parts.at(0)) << "\n";
+ return true;
+}
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication app(argc, argv);
+ QCommandLineParser parser;
+ parser.addHelpOption();
+ parser.setApplicationDescription("\nThis application generates a Qt OPC UA header file from the NodeIds.csv file distributed by the OPC Foundation.");
+ parser.addOption(QCommandLineOption("i", "The NodeIds.csv file", "input file"));
+ parser.addOption(QCommandLineOption("o", "The output prefix for the generated .h and c++ file, defaults to qopcuanodeids.h", "output file", "qopcuanodeids"));
+ parser.process(app);
+
+ if (!parser.isSet("i")) {
+ qDebug() << "Error: No input file specified";
+ return EXIT_FAILURE;
+ }
+
+ QFile inputFile(parser.value("i"));
+
+ if (!inputFile.open(QFile::ReadOnly | QFile::Text)) {
+ qDebug() << "Failed to open file" << inputFile.fileName();
+ return EXIT_FAILURE;
+ }
+
+ QString currentLine = inputFile.readLine();
+
+ if (currentLine.trimmed() != QLatin1String("Boolean,1,DataType")) {
+ qDebug() << "Invalid content in" << inputFile.fileName();
+ inputFile.close();
+ return EXIT_FAILURE;
+ }
+
+ QFile outHeader(parser.value("o")+QLatin1String(".h"));
+ if (!outHeader.open(QFile::WriteOnly | QFile::Text | QFile::Truncate)) {
+ qDebug() << "Failed to open output file" << outHeader.fileName();
+ inputFile.close();
+ return EXIT_FAILURE;
+ }
+
+ QFile outSource(parser.value("o")+QLatin1String(".cpp"));
+ if (!outSource.open(QFile::WriteOnly | QFile::Text | QFile::Truncate)) {
+ qDebug() << "Failed to open output file" << outSource.fileName();
+ inputFile.close();
+ outHeader.close();
+ return EXIT_FAILURE;
+ }
+
+ QTextStream outHeaderStream(&outHeader);
+ QTextStream outSourceStream(&outSource);
+ createHeader(outHeaderStream);
+ createSourceHeader(outSourceStream);
+ nodeIdFromLine(currentLine, outHeaderStream, outSourceStream);
+
+ while (!inputFile.atEnd()) {
+ currentLine = inputFile.readLine();
+ nodeIdFromLine(currentLine, outHeaderStream, outSourceStream);
+ }
+
+ createFooter(outHeaderStream);
+ createSourceFooter(outSourceStream);
+
+ inputFile.close();
+ outHeader.close();
+ outSource.close();
+
+ return EXIT_SUCCESS;
+}
diff --git a/tools/tools.pro b/tools/tools.pro
new file mode 100644
index 0000000..3b62a29
--- /dev/null
+++ b/tools/tools.pro
@@ -0,0 +1,7 @@
+TEMPLATE = subdirs
+
+QT_FOR_CONFIG += opcua-private
+
+qtConfig(ns0idgenerator): {
+ SUBDIRS += defaultnodeidsgenerator
+}