opcfoundation / ua-nodeset Goto Github PK
View Code? Open in Web Editor NEWUA Nodeset
UA Nodeset
For example the node
IVendorNameplateType
ns=1;i=15036
ns=1;i=15037
ns=1;i=15038
ns=1;i=15039
ns=1;i=15040
ns=1;i=15041
ns=1;i=15042
ns=1;i=15043
ns=1;i=15044
ns=1;i=15045
ns=1;i=15046
ns=1;i=15047
i=17602
has no parent node id. Therefore the importer cannot dynamically recreate the nodeset. What is the default parent node id used in this nodeset?
The schema definition of StructuredType
does not define the BaseType
attribute and the schema for Field
does not define a SourceType
attribute, yet these are both used in the official binary type definitions: https://opcfoundation.org/UA/schemas/Opc.Ua.Types.bsd
UA-Nodeset/Schema/Opc.Ua.Types.bsd
Lines 137 to 142 in 676f54d
Furthermore CharArray, could be replaced by String.
We would expect
<opc:Field Name="NamespaceIndex" TypeName="opc:UInt16" />
<opc:Field Name="Name" TypeName="opc:String" />
Hi nauful,
Thank's for your great work! I just try out your library.
I try out the latest Reference Client (OPCFoundation/UA-.NETStandard ) to connect with your TestServer (NET Core).
But there is an NullReferenceException in the Reference client (trying read the IsAbstract attribute for Node Id 29).
v1.04 Part 12: 7.5.14 UserCredentialCertificateType is missing from the nodeset files
Hi,
The following types are not in the specification and are related to other similar Purpose="CodeGenerator" UADataType definitions, so I'm assuming these are just missing the definition in the XML.
<UADataType NodeId="i=11879" BrowseName="InstanceNode">
<DisplayName>InstanceNode</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=258</Reference>
</References>
</UADataType>
<UADataType NodeId="i=11880" BrowseName="TypeNode">
<DisplayName>TypeNode</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=258</Reference>
</References>
</UADataType>
This error is in both 1.04 and master branches.
(Basically I just need the Purpose="ServicesOnly" types, the "CodeGenerator" ones I'm excluding as they would make confusing API in my case.)
In the commit cc39b5e of the Schema/Opc.Ua.NodeSet2.xml, there is an inclusion of a new Object "Aliases". Why is it included or is it a bug ?
<UAObject NodeId="i=23470" BrowseName="Aliases" ReleaseStatus="Draft">
<DisplayName>Aliases</DisplayName>
<References>
<Reference ReferenceType="HasComponent">i=23476</Reference>
<Reference ReferenceType="Organizes" IsForward="false">i=85</Reference>
<Reference ReferenceType="HasTypeDefinition">i=23456</Reference>
</References>
</UAObject>
<UAMethod NodeId="i=23476" BrowseName="FindAlias" ReleaseStatus="Draft" ParentNodeId="i=23470" MethodDeclarationId="i=23462">
<DisplayName>FindAlias</DisplayName>
<References>
<Reference ReferenceType="HasProperty">i=23477</Reference>
<Reference ReferenceType="HasProperty">i=23478</Reference>
<Reference ReferenceType="HasComponent" IsForward="false">i=23470</Reference>
</References>
</UAMethod>
<UAVariable NodeId="i=23477" BrowseName="InputArguments" ReleaseStatus="Draft" ParentNodeId="i=23476" DataType="i=296" ValueRank="1" ArrayDimensions="0">
<DisplayName>InputArguments</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasProperty" IsForward="false">i=23476</Reference>
</References>
<Value>
<ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>AliasNameSearchPattern</Name>
<DataType>
<Identifier>i=12</Identifier>
</DataType>
<ValueRank>-1</ValueRank>
<ArrayDimensions />
</Argument>
</Body>
</ExtensionObject>
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>ReferenceTypeFilter</Name>
<DataType>
<Identifier>i=17</Identifier>
</DataType>
<ValueRank>-1</ValueRank>
<ArrayDimensions />
</Argument>
</Body>
</ExtensionObject>
</ListOfExtensionObject>
</Value>
</UAVariable>
<UAVariable NodeId="i=23478" BrowseName="OutputArguments" ReleaseStatus="Draft" ParentNodeId="i=23476" DataType="i=296" ValueRank="1" ArrayDimensions="0">
<DisplayName>OutputArguments</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasProperty" IsForward="false">i=23476</Reference>
</References>
<Value>
<ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>AliasNodeList</Name>
<DataType>
<Identifier>i=23468</Identifier>
</DataType>
<ValueRank>1</ValueRank>
<ArrayDimensions>
<UInt32>0</UInt32>
</ArrayDimensions>
</Argument>
</Body>
</ExtensionObject>
</ListOfExtensionObject>
</Value>
</UAVariable>
<UAObject NodeId="i=23479" BrowseName="Tags" ReleaseStatus="Draft">
<DisplayName>Tags</DisplayName>
<References>
<Reference ReferenceType="HasComponent">i=23485</Reference>
<Reference ReferenceType="Organizes" IsForward="false">i=23470</Reference>
<Reference ReferenceType="HasTypeDefinition">i=23456</Reference>
</References>
</UAObject>
<UAMethod NodeId="i=23485" BrowseName="FindAlias" ReleaseStatus="Draft" ParentNodeId="i=23479" MethodDeclarationId="i=23462">
<DisplayName>FindAlias</DisplayName>
<References>
<Reference ReferenceType="HasProperty">i=23486</Reference>
<Reference ReferenceType="HasProperty">i=23487</Reference>
<Reference ReferenceType="HasComponent" IsForward="false">i=23479</Reference>
</References>
</UAMethod>
<UAVariable NodeId="i=23486" BrowseName="InputArguments" ReleaseStatus="Draft" ParentNodeId="i=23485" DataType="i=296" ValueRank="1" ArrayDimensions="0">
<DisplayName>InputArguments</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasProperty" IsForward="false">i=23485</Reference>
</References>
<Value>
<ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>AliasNameSearchPattern</Name>
<DataType>
<Identifier>i=12</Identifier>
</DataType>
<ValueRank>-1</ValueRank>
<ArrayDimensions />
</Argument>
</Body>
</ExtensionObject>
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>ReferenceTypeFilter</Name>
<DataType>
<Identifier>i=17</Identifier>
</DataType>
<ValueRank>-1</ValueRank>
<ArrayDimensions />
</Argument>
</Body>
</ExtensionObject>
</ListOfExtensionObject>
</Value>
</UAVariable>
<UAVariable NodeId="i=23487" BrowseName="OutputArguments" ReleaseStatus="Draft" ParentNodeId="i=23485" DataType="i=296" ValueRank="1" ArrayDimensions="0">
<DisplayName>OutputArguments</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasProperty" IsForward="false">i=23485</Reference>
</References>
<Value>
<ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>AliasNodeList</Name>
<DataType>
<Identifier>i=23468</Identifier>
</DataType>
<ValueRank>1</ValueRank>
<ArrayDimensions>
<UInt32>0</UInt32>
</ArrayDimensions>
</Argument>
</Body>
</ExtensionObject>
</ListOfExtensionObject>
</Value>
</UAVariable>
<UAObject NodeId="i=23488" BrowseName="Topics" ReleaseStatus="Draft">
<DisplayName>Topics</DisplayName>
<References>
<Reference ReferenceType="HasComponent">i=23494</Reference>
<Reference ReferenceType="Organizes" IsForward="false">i=23470</Reference>
<Reference ReferenceType="HasTypeDefinition">i=23456</Reference>
</References>
</UAObject>
<UAMethod NodeId="i=23494" BrowseName="FindAlias" ReleaseStatus="Draft" ParentNodeId="i=23488" MethodDeclarationId="i=23462">
<DisplayName>FindAlias</DisplayName>
<References>
<Reference ReferenceType="HasProperty">i=23495</Reference>
<Reference ReferenceType="HasProperty">i=23496</Reference>
<Reference ReferenceType="HasComponent" IsForward="false">i=23488</Reference>
</References>
</UAMethod>
<UAVariable NodeId="i=23495" BrowseName="InputArguments" ReleaseStatus="Draft" ParentNodeId="i=23494" DataType="i=296" ValueRank="1" ArrayDimensions="0">
<DisplayName>InputArguments</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasProperty" IsForward="false">i=23494</Reference>
</References>
<Value>
<ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>AliasNameSearchPattern</Name>
<DataType>
<Identifier>i=12</Identifier>
</DataType>
<ValueRank>-1</ValueRank>
<ArrayDimensions />
</Argument>
</Body>
</ExtensionObject>
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>ReferenceTypeFilter</Name>
<DataType>
<Identifier>i=17</Identifier>
</DataType>
<ValueRank>-1</ValueRank>
<ArrayDimensions />
</Argument>
</Body>
</ExtensionObject>
</ListOfExtensionObject>
</Value>
</UAVariable>
<UAVariable NodeId="i=23496" BrowseName="OutputArguments" ReleaseStatus="Draft" ParentNodeId="i=23494" DataType="i=296" ValueRank="1" ArrayDimensions="0">
<DisplayName>OutputArguments</DisplayName>
<References>
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
<Reference ReferenceType="HasProperty" IsForward="false">i=23494</Reference>
</References>
<Value>
<ListOfExtensionObject xmlns="http://opcfoundation.org/UA/2008/02/Types.xsd">
<ExtensionObject>
<TypeId>
<Identifier>i=297</Identifier>
</TypeId>
<Body>
<Argument>
<Name>AliasNodeList</Name>
<DataType>
<Identifier>i=23468</Identifier>
</DataType>
<ValueRank>1</ValueRank>
<ArrayDimensions>
<UInt32>0</UInt32>
</ArrayDimensions>
</Argument>
</Body>
</ExtensionObject>
</ListOfExtensionObject>
</Value>
</UAVariable>
File: https://github.com/OPCFoundation/UA-Nodeset/blob/master/DI/OpcUaDiModel.xml
Method: InitLockMethodType
ArgumentName: Context
The model compiler generates following C# method:
public delegate ServiceResult InitLockMethodStateMethodCallHandler( ISystemContext context, MethodState method, NodeId objectId, string context, ref int initLockStatus);
The parameter name 'context' is a duplicate.
What's the deal with Decimal128
DataType in Opc.Ua.NodeSet2.Part3.xml?
Seems it's a subtype of Number, it's not a simple/alias type, but it's not specified as a built-in type? Is this something leftover that should be removed?
The uploaded AutoID NodeSet2.xml is based on an new 1.01 release whereas the NodeSet2.csv is still based on AutoID 1.0. Since there where new types added in 1.0.1 the csv file must also be updated.
The OPC UA Companion Spec for Robotics defines new Enumeration DataTypes
However, no official bsd file was released as part of the OPC UA Robotics Schema. Any reason why?
I think there are 2 missing aliases in Opc.Ua.CSPPlusForMachine.NodeSet2.xml :
<Alias Alias="IdType">i=256</Alias>
<Alias Alias="NumericRange">i=291</Alias>
Could it be possible to add the Robotics information model if it is available. It it is not available, is there any roadmap for availability?
Thank you
The UADataType.Definition
of the DataTypeDefinition
type has the wrong value. For example, in the ADI model, there is Definition
<Definition Name="ExecutionCycleEnumeration">
According to the Table F.12 – DataTypeDefinition
it should be QualifiedName
- a String with the form: <namespace index>:<name>
but it isn't as it is stated in the Table F.2 – UANode
.
NOTE:
- it affects all models
- it is breaking bug for the project OPC UA NodeSet Validation
Element | Type | Description |
---|---|---|
Name | QualifiedName | A unique name for the data type. This field is only specified for nested DataTypeDefinitions. The BrowseName of the DataType Node is used otherwise. |
Element | Type | Description |
---|---|---|
BrowseName | QualifiedName | A QualifiedName serialized as a String with the form: <namespace index>:<name> Where the NamespaceIndex refers to the NamespaceUris table. |
<UADataType NodeId="ns=1;i=9378" BrowseName="1:ExecutionCycleEnumeration">
<DisplayName>ExecutionCycleEnumeration</DisplayName>
<References>
<Reference ReferenceType="HasProperty">ns=1;i=13026</Reference>
<Reference ReferenceType="HasSubtype" IsForward="false">i=29</Reference>
</References>
<Definition Name="ExecutionCycleEnumeration">
<Field Name="IDLE" Value="0">
<Description>Idle, no cleaning or acquisition cycle in progress</Description>
</Field>
<Field Name="DIAGNOSTIC" Value="1">
<Description>Scquisition cycle collecting data for diagnostic purpose</Description>
</Field>
<Field Name="CLEANING" Value="2">
<Description>Cleaning cycle</Description>
</Field>
<Field Name="CALIBRATION" Value="4">
<Description>Calibration acquisition cycle</Description>
</Field>
<Field Name="VALIDATION" Value="8">
<Description>Validation acquisition cycle</Description>
</Field>
<Field Name="SAMPLING" Value="16">
<Description>Sample acquisition cycle</Description>
</Field>
<Field Name="DIAGNOSTIC_WITH_GRAB_SAMPLE" Value="32769">
<Description>Scquisition cycle collecting data for diagnostic purpose and sample is extracted from the process to be sent in control lab</Description>
</Field>
<Field Name="CLEANING_WITH_GRAB_SAMPLE" Value="32770">
<Description>Cleaning cycle with or without acquisition and sample is extracted from the process to be sent in control lab</Description>
</Field>
<Field Name="CALIBRATION_WITH_GRAB_SAMPLE" Value="32772">
<Description>Calibration acquisition cycle and sample is extracted from the process to be sent in control lab</Description>
</Field>
<Field Name="VALIDATION_WITH_GRAB_SAMPLE" Value="32776">
<Description>Validation acquisition cycle and sample is extracted from the process to be sent in control lab</Description>
</Field>
<Field Name="SAMPLING_WITH_GRAB_SAMPLE" Value="32784">
<Description>Sample acquisition cycle and sample is extracted from the process to be sent in control lab</Description>
</Field>
</Definition>
</UADataType>
This Built-in DataType contains a qualified name. It is, for example, used as BrowseName. Its elements are defined in Table 25. The name part of the QualifiedName is restricted to 512 characters.
Table 25 – QualifiedName Definition
Element | Type | Description |
---|---|---|
QualifiedName | structure | |
namespaceIndex | UInt16 | Index that identifies the namespace that defines the name. This index is the index of that namespace in the local Server’s NamespaceArray. The Client may read the NamespaceArray Variable to access the string value of the namespace. |
name | String | The text portion of the QualifiedName. |
I've checked the whole repository, and found some nodes with ParentNodeId
don't have any kind of Reference
to their parent nodes, while some of their parent nodes also don't have Reference
to them.
This caused FreeOpcUa to raise BadParentNodeIdInvalid
Exception.
All the nodes that don't have Reference to their ParentNodeId can be found here.
Most of them are UAVariable
from AML directory but two of them are UAObject
from ISA-95 directory.
AML/Opc.Ua.AMLBaseTypes.NodeSet2.xml
['ns=1;i=1010', 'ns=1;i=1011']
AML/Opc.Ua.AMLLibraries.NodeSet2.xml
['ns=2;i=2', 'ns=2;i=3', 'ns=2;i=5', 'ns=2;i=6', 'ns=2;i=8', 'ns=2;i=9', 'ns=2;i=11', 'ns=2;i=12', 'ns=2;i=14', 'ns=2;i=15', 'ns=2;i=17', 'ns=2;i=18', 'ns=2;i=20', 'ns=2;i=21', 'ns=2;i=23', 'ns=2;i=24', 'ns=2;i=26', 'ns=2;i=27', 'ns=2;i=29', 'ns=2;i=30', 'ns=2;i=32', 'ns=2;i=33', 'ns=2;i=35', 'ns=2;i=36', 'ns=2;i=38', 'ns=2;i=39', 'ns=2;i=41', 'ns=2;i=42', 'ns=2;i=44', 'ns=2;i=45', 'ns=2;i=47', 'ns=2;i=48', 'ns=2;i=50', 'ns=2;i=51', 'ns=2;i=53', 'ns=2;i=54', 'ns=2;i=56', 'ns=2;i=57', 'ns=2;i=59', 'ns=2;i=60', 'ns=2;i=62', 'ns=2;i=63', 'ns=2;i=65', 'ns=2;i=66', 'ns=2;i=68', 'ns=2;i=69', 'ns=2;i=70', 'ns=2;i=72', 'ns=2;i=73', 'ns=2;i=75', 'ns=2;i=76', 'ns=2;i=78', 'ns=2;i=79',
'ns=2;i=81', 'ns=2;i=82', 'ns=2;i=84', 'ns=2;i=85', 'ns=2;i=87', 'ns=2;i=88', 'ns=2;i=90', 'ns=2;i=91', 'ns=2;i=93', 'ns=2;i=94', 'ns=2;i=96', 'ns=2;i=97', 'ns=2;i=99', 'ns=2;i=100', 'ns=2;i=102', 'ns=2;i=103', 'ns=2;i=105', 'ns=2;i=106', 'ns=2;i=108', 'ns=2;i=109', 'ns=2;i=111', 'ns=2;i=112', 'ns=2;i=114', 'ns=2;i=115', 'ns=2;i=117', 'ns=2;i=118', 'ns=2;i=120', 'ns=2;i=121', 'ns=2;i=123', 'ns=2;i=124', 'ns=2;i=126', 'ns=2;i=127', 'ns=2;i=129', 'ns=2;i=130', 'ns=2;i=132', 'ns=2;i=133', 'ns=2;i=135', 'ns=2;i=136', 'ns=2;i=138', 'ns=2;i=139', 'ns=2;i=141', 'ns=2;i=142', 'ns=2;i=144', 'ns=2;i=145', 'ns=2;i=147', 'ns=2;i=148', 'ns=2;i=150', 'ns=2;i=151', 'ns=2;i=153', 'ns=2;i=154', 'ns=2;i=156', 'ns=2;i=157', 'ns=2;i=159', 'ns=2;i=160', 'ns=2;i=162', 'ns=2;i=163', 'ns=2;i=165', 'ns=2;i=166', 'ns=2;i=168', 'ns=2;i=169', 'ns=2;i=171', 'ns=2;i=172', 'ns=2;i=174', 'ns=2;i=175', 'ns=2;i=177', 'ns=2;i=178', 'ns=2;i=180', 'ns=2;i=181', 'ns=2;i=183', 'ns=2;i=184', 'ns=2;i=186', 'ns=2;i=187', 'ns=2;i=189', 'ns=2;i=190', 'ns=2;i=192', 'ns=2;i=193', 'ns=2;i=195', 'ns=2;i=196', 'ns=2;i=198', 'ns=2;i=199', 'ns=2;i=201', 'ns=2;i=202', 'ns=2;i=204', 'ns=2;i=205', 'ns=2;i=207', 'ns=2;i=208', 'ns=2;i=210', 'ns=2;i=211', 'ns=2;i=213', 'ns=2;i=214', 'ns=2;i=216', 'ns=2;i=217', 'ns=2;i=219', 'ns=2;i=220', 'ns=2;i=222', 'ns=2;i=223', 'ns=2;i=225', 'ns=2;i=226', 'ns=2;i=228', 'ns=2;i=229', 'ns=2;i=231', 'ns=2;i=232', 'ns=2;i=234', 'ns=2;i=235', 'ns=2;i=237', 'ns=2;i=238', 'ns=2;i=240', 'ns=2;i=241', 'ns=2;i=243', 'ns=2;i=244', 'ns=2;i=246', 'ns=2;i=247', 'ns=2;i=249', 'ns=2;i=250', 'ns=2;i=252', 'ns=2;i=253', 'ns=2;i=255', 'ns=2;i=256', 'ns=2;i=258', 'ns=2;i=259', 'ns=2;i=261', 'ns=2;i=262', 'ns=2;i=264', 'ns=2;i=265', 'ns=2;i=267', 'ns=2;i=268', 'ns=2;i=270', 'ns=2;i=271', 'ns=2;i=273', 'ns=2;i=274', 'ns=2;i=276', 'ns=2;i=277', 'ns=2;i=279', 'ns=2;i=280', 'ns=2;i=282', 'ns=2;i=283', 'ns=2;i=285', 'ns=2;i=286', 'ns=2;i=288', 'ns=2;i=289', 'ns=2;i=291', 'ns=2;i=292', 'ns=2;i=294', 'ns=2;i=295', 'ns=2;i=297', 'ns=2;i=298', 'ns=2;i=300', 'ns=2;i=301', 'ns=2;i=303', 'ns=2;i=304', 'ns=2;i=306', 'ns=2;i=307', 'ns=2;i=309', 'ns=2;i=310', 'ns=2;i=312', 'ns=2;i=313', 'ns=2;i=315', 'ns=2;i=316', 'ns=2;i=318', 'ns=2;i=319', 'ns=2;i=321', 'ns=2;i=322', 'ns=2;i=324', 'ns=2;i=325', 'ns=2;i=327', 'ns=2;i=328', 'ns=2;i=330', 'ns=2;i=331', 'ns=2;i=333', 'ns=2;i=334', 'ns=2;i=336', 'ns=2;i=337', 'ns=2;i=339', 'ns=2;i=340', 'ns=2;i=341']
AML/Topology.xml
['ns=2;i=3', 'ns=2;i=5', 'ns=2;i=7', 'ns=2;i=9', 'ns=2;i=11', 'ns=2;i=14', 'ns=2;i=16', 'ns=2;i=21', 'ns=2;i=23', 'ns=2;i=24']
ISA-95/Opc.ISA95.NodeSet2.xml
['ns=1;i=5224', 'ns=1;i=5295']
Hello @randy-armstrong,
I found this repository as a better place for this question as OPCFoundation/UA-ModelCompiler #37.
You mentioned that the file Opc.ISA95.Model.xml should be provided by work group... I am open for contributing in this action if it could accelerate the process.
Thank you
Best regards Rudo
The NodeSet 2 XML lists EventNotifierType as:
<UADataType NodeId="i=15033" BrowseName="EventNotifierType">
<DisplayName>EventNotifierType</DisplayName>
<References>
<Reference ReferenceType="HasProperty">i=15034</Reference>
<Reference ReferenceType="HasSubtype" IsForward="false">i=7</Reference>
</References>
<Definition Name="EventNotifierType" IsOptionSet="true">
<Field Name="None" Value="0" />
<Field Name="SubscribeToEvents" Value="1" />
<Field Name="HistoryRead" Value="4" />
<Field Name="HistoryWrite" Value="8" />
</Definition>
</UADataType>
Specification version 1.04, Part 3 section 8.59 lists the EventNotifierType as subtype of Byte DataType, however the NodeSet2 uses i=7 which is UInt32. The NodeSet2 should be fixed.
It should be noted that this is quite important and critical in my opinion, as the EventNotifierType is listed as the DataType of the EventNotifier Attribute for Objects in version 1.04 Part 3, section 5.5.1 Table 11. In 1.03 that was Byte, so if clients/servers are made using the current NodeSet2 for 1.04 they will not use the correct DataType (they would use incorrectly the UInt32 instead of Byte, as the encoded binary form) and are incompatible with all existing applications.
The method "TransferToDevice" in objecttype "TransferServiceType" has typedefinition "TransferFromDeviceMethodType". Should be fixed to "TransferToDeviceMethodType".
BR.
In OPC Unified Architecture for Devices Companion Specification Release 1.01 specifies that model Schema can be found on link /https://opcfoundation.org/UA/schemas/DI/1.1/.
Here we have DI model with publication date "2018-06-07T00:00:00Z" and it requires UA model version 1.03 with publication date "2013-12-02T00:00:00Z". When i try combine UA model with publication date "2013-12-02T00:00:00Z" (https://opcfoundation.org/UA/schemas/1.03/Opc.Ua.NodeSet2.xml) and DI model specified in companion specification (https://opcfoundation.org/UA/schemas/DI/1.1/) i get errors.
This is because DI model is requesting some datatypes which are not available in UA model. E.g. line from https://opcfoundation.org/UA/schemas/DI/1.1/Opc.Ua.Di.NodeSet2.xml:
UAVariable NodeId="ns=1;i=15031" BrowseName="DefaultRolePermissions" ParentNodeId="ns=1;i=15001" DataType="i=96" ValueRank="1" ArrayDimensions="0"
DataType="i=96" is looked for in UA model, but doesn't exist there and because of this i am having problems with these models.
Should maybe required version in DI Opc.Ua.Di.NodeSet2.xml file be UA version 1.04 or maybe i have misunderstood something?
OPC Foundation MIT License 1.00
, e.g. ..../Schema/Opc.Ua.Classes.cs
so the repository as one whole should say the same.Anway, the license and applicability context should be clearly described - I mean licenses dependency chain and code dependency chain should be clear and consistent.
For example the code dependency chain inluse the following identyfiers (to name only a few):
BaseObjectState
NodeState
NodeId
NamespaceTable
GetDefaultTypeDefinitionId
PropertyState
TimeZoneDataType
Is it in general recommended to update (all) the e.g. the underlaying DI information model in a NodeSet-XML?
In file Opc.Ua.IOLink.NodeSet2.xml all Nodes from the IODD part are merged.
In file Opc.Ua.IOLinkIODD.NodeSet2.xml only the namespace metadata are left.
Could be same relation to issue #36 .
Is there a reason that there aren't PredefinedNodes.uanodes files for all the different nodesets? Specifically for the "IA", "Machinery" and "MachineTool" Folder. Also there are no xml files so I could compile these files myself with the ModelCompiler.
Traceback (most recent call last):
File "generic.py", line 17, in <module>
File "site-packages\opcua\server\server.py", line 510, in import_xml
File "site-packages\opcua\common\xmlimporter.py", line 67, in import_xml
File "site-packages\opcua\common\xmlimporter.py", line 84, in _add_node_data
File "site-packages\opcua\common\xmlimporter.py", line 196, in add_object_type
File "site-packages\opcua\ua\uatypes.py", line 218, in check
opcua.ua.uaerrors._auto.BadParentNodeIdInvalid: "The parent node id does not to refer to a valid node."(BadParentNodeIdInvalid)
[18060] Failed to execute script generic
are these models runnable with OpcUa Servers?
In order to use ModelCompiler to auto-generate code, is it possible to add the "...Model.xml" (defined by “ModelDesign.xsd”)?
In other "Companion-Folder" (see PlcOpen for instance) the file is present (OpcUaPLCopenModel.xml for instance).
OPCFoundation/UA-.NETStandard#410
https://opcfoundation-onlineapplications.org/mantis/view.php?id=4216
<Field Name="NonatomicRead" Value="65536" />
<Field Name="NonatomicWrite" Value="131072" />
<Field Name="WriteFullArrayOnly" Value="262144" />
NonAtomicRead to 65536 which is bit 16 (should be 8)
NonAtomicWrite to 131072 which is bit 17 (should be 9)
etc..
Is it intended to change several NodeIds for the IODDManagement Nodes below the "Object"-Node?
Defined was the numerical NodeId 5022, 5024, 7002 and so on.
The current version in the master has changed these NodeIds starting from 10000.
Is it intended that the property Locked is now missing in LockingServicesType definition (Namespace OpcUaDi)?
In commit https://github.com/OPCFoundation/UA-Nodeset/blob/2e2c39ab2041ba0eecfa811aca2844d65fa3db01 the DiagnosticsInfo(i=25)
DataType was removed from the NodeSet2.xml
In the current version, this DataType is still referenced by StatusResult
<UADataType NodeId="i=299" BrowseName="StatusResult">
<DisplayName>StatusResult</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
</References>
<Definition Name="StatusResult">
<Field Name="StatusCode" DataType="i=19" />
<Field Name="DiagnosticInfo" DataType="i=25" />
</Definition>
</UADataType>
Is this an error in the nodeset?
Is that intended?
Is statuscode "Good" implicit 0x00000000?
br
@randy-armstrong can you please elaborate in more detail why the OPCF decided to remove the master branch and only make it available to OPC Foundation members?
In the OPC Day event today Stefan Hoppe mentioned multiple times that the O in OPC stands for openness.
Removing (hiding) the master branch behind a paywall is not really a sign for openness. This will also slow down the development of open source stacks, it almost seems as if commercial stack vendors are threatened by the good progress of the open source community and therefore asked to hide this content.
Can you please also clarify, preferably in the README:
Will releases of the ua-nodeset still be available open source, or will the OPCF decide in the future to also remove these?
MultiplierKind
has field name that is just empty string:
<UADataType NodeId="ns=1;i=81" BrowseName="1:MultiplierKind">
<DisplayName>MultiplierKind</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">Enumeration</Reference>
<Reference ReferenceType="HasProperty">ns=1;i=82</Reference>
</References>
<Definition Name="MultiplierKind">
<Field Name="y" Value="-24" />
<Field Name="z" Value="-21" />
<Field Name="a" Value="-18" />
<Field Name="f" Value="-15" />
<Field Name="p" Value="-12" />
<Field Name="n" Value="-9" />
<Field Name="µ" Value="-6" />
<Field Name="m" Value="-3" />
<Field Name="c" Value="-2" />
<Field Name="d" Value="-1" />
<Field Name="" Value="0" />
<Field Name="da" Value="1" />
<Field Name="h" Value="2" />
<Field Name="k" Value="3" />
<Field Name="M" Value="6" />
<Field Name="G" Value="9" />
<Field Name="T" Value="12" />
<Field Name="P" Value="15" />
<Field Name="E" Value="18" />
<Field Name="Z" Value="21" />
<Field Name="Y" Value="24" />
</Definition>
</UADataType>
UAVariableType with NodeId="ns=1;i=5186" and BrowseName="1:MaterialLotPropertyType" has a child variable with NodeId="ns=1;i=5193" BrowseName="1:<TestResult>" whose type is again Node id "ns=1;i=5186".
This creates a circular reference while parsing the variable type.
Please find the variable type definition for your reference.
MaterialLotPropertyType ns=1;i=5193 ns=1;i=5200 ns=1;i=5207 ns=1;i=5165 <TestResult> ns=1;i=5194 ns=1;i=5195 ns=1;i=5196 ns=1;i=5197 ns=1;i=5198 ns=1;i=5199 ns=1;i=5186 i=11508 ns=1;i=5186The NodeSet2 xml lists PermissionType as:
<UADataType NodeId="i=94" BrowseName="PermissionType">
<DisplayName>PermissionType</DisplayName>
<References>
<Reference ReferenceType="HasProperty">i=15030</Reference>
<Reference ReferenceType="HasSubtype" IsForward="false">i=5</Reference>
</References>
<Definition Name="PermissionType" IsOptionSet="true">
<Field Name="None" Value="0" />
<Field Name="Browse" Value="1" />
<Field Name="ReadRolePermissions" Value="2" />
<Field Name="WriteAttribute" Value="4" />
<Field Name="WriteRolePermissions" Value="8" />
<Field Name="WriteHistorizing" Value="16" />
<Field Name="Read" Value="32" />
<Field Name="Write" Value="64" />
<Field Name="ReadHistory" Value="128" />
<Field Name="InsertHistory" Value="256" />
<Field Name="ModifyHistory" Value="512" />
<Field Name="DeleteHistory" Value="1024" />
<Field Name="ReceiveEvents" Value="2048" />
<Field Name="Call" Value="4096" />
<Field Name="AddReference" Value="8192" />
<Field Name="RemoveReference" Value="16384" />
<Field Name="DeleteNode" Value="32768" />
<Field Name="AddNode" Value="65536" />
<Field Name="All" Value="131071" />
</Definition>
</UADataType>
Specification version 1.04 Part 3 section 8.55 lists PermissionType as subtype of UInt32, but the NodeSet lists i=5, which is UInt16. The NodeSet2 should be fixed. There is at least one other similar issue, will post a separate GH issue per problem.
The commit 6f8c38d (Update DI to 1.02 Release Candidate) causes the generated Opc.Ua.Di.Classes.cs file to fail during build with the following errors:
Severity | Code | Description | File | Line |
---|---|---|---|---|
Error | CS0100 | The parameter name 'context' is a duplicate | Opc.Ua.Di.Classes.cs | 5915 |
Error | CS0841 | Cannot use local variable 'context' before it is declared | Opc.Ua.Di.Classes.cs | 5878 |
Error | CS0136 | A local or parameter named 'context' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter | Opc.Ua.Di.Classes.cs | 5883 |
Error | CS1503 | Argument 1: cannot convert from 'string' to 'Opc.Ua.ISystemContext' | Opc.Ua.Di.Classes.cs | 5890 |
The reason for these build errors are fairly obvious, but in short:
The Call
funtion in line 5870 has a parameter ISystemContext context
.
In line 5883 a variable is declared with the same name:
protected override ServiceResult Call(
ISystemContext context,
NodeId objectId,
IList<object> inputArguments,
IList<object> outputArguments)
{
...
string context = (string)inputArguments[0];
...
}
Furthermore, the InitLockMethodStateMethodCallHandler
function in line 5911 has two parameters named context
:
public delegate ServiceResult InitLockMethodStateMethodCallHandler(
ISystemContext context,
MethodState method,
NodeId objectId,
string context,
ref int initLockStatus);
The node with the id i=17292 has the "String" DataType and a HasTypeDefinition reference to i=16309.
<UAVariable NodeId="i=17292" BrowseName="TransportProfileUri" ParentNodeId="i=14417" DataType="String">
<DisplayName>TransportProfileUri</DisplayName>
<References>
<Reference ReferenceType="HasProperty">i=17706</Reference>
<Reference ReferenceType="HasTypeDefinition">i=16309</Reference>
<Reference ReferenceType="HasModellingRule">i=78</Reference>
<Reference ReferenceType="HasComponent" IsForward="false">i=14417</Reference>
</References>
</UAVariable>
The DataType of i=16309 is i=862
<UAVariableType NodeId="i=16309" BrowseName="SelectionListType" DataType="i=862" ValueRank="-2">
<DisplayName>SelectionListType</DisplayName>
<References>
<Reference ReferenceType="HasProperty">i=17632</Reference>
<Reference ReferenceType="HasProperty">i=17633</Reference>
<Reference ReferenceType="HasProperty">i=16312</Reference>
<Reference ReferenceType="HasSubtype" IsForward="false">i=63</Reference>
</References>
</UAVariableType>
Which is a structured type.
<UADataType NodeId="i=862" BrowseName="ServerStatusDataType">
<DisplayName>ServerStatusDataType</DisplayName>
<References>
<Reference ReferenceType="HasSubtype" IsForward="false">i=22</Reference>
</References>
<Definition Name="ServerStatusDataType">
<Field Name="StartTime" DataType="i=294" />
<Field Name="CurrentTime" DataType="i=294" />
<Field Name="State" DataType="i=852" />
<Field Name="BuildInfo" DataType="i=338" />
<Field Name="SecondsTillShutdown" DataType="i=7" />
<Field Name="ShutdownReason" DataType="i=21" />
</Definition>
</UADataType>
Is this an error in the schema file or is an instance permitted to override the DataType attribute of its type definition node?
Hello,
I am experiencing some problems when trying to import the "Opc.Ua.Robotics.NodeSet2.xml" and "Opc.Ua.Di.NodeSet2.xml" to UA Modeler software from Unified Automation.
With "modeling only" purpose, when importing the two .xml files I get this kind of errors "TypeDefinition not found ()".
Is there anyone with the same kind of problem?
Best Regards,
André Martins
In most cases the ArrayDimension is know for instance for InputArguments. Is there a reason why the ArrayDimensions is 0 all time?
Checked NodeSet file are BaseNodeSet and DI.
https://github.com/OPCFoundation/UA-Nodeset/blob/v1.04/Scales/Opc.Ua.Scales.NodeSet2.xml
on all GiveAway nodes mandatory EURange is missing. Example:
<UAVariable NodeId="ns=1;i=511" BrowseName="1:GiveAway" ParentNodeId="ns=1;i=48" DataType="Number"> <DisplayName>GiveAway</DisplayName> <Description>Defines the totalized value of volume above TargetWeight.</Description> <References> <Reference ReferenceType="HasTypeDefinition">i=2368</Reference> <Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=48</Reference> <Reference ReferenceType="HasModellingRule">i=80</Reference> </References> </UAVariable>
Missing:
<Reference ReferenceType="HasProperty">ns=1;i=xxxx</Reference>
<UAVariable DataType="Range" ParentNodeId="ns=1;i=511" NodeId="ns=1;i=xxxx" BrowseName="EURange" AccessLevel="3"> <DisplayName>EURange</DisplayName> <Description Locale="en"> Maximum range of values for GiveAway</Description> <References> <Reference ReferenceType="HasProperty" IsForward="false">ns=1;i=511</Reference> <Reference ReferenceType="HasTypeDefinition">i=68</Reference> <Reference ReferenceType="HasModellingRule">i=78</Reference> </References> </UAVariable>
see here:
https://reference.opcfoundation.org/v104/Scales/v100/docs/8.19.1/
https://reference.opcfoundation.org/v104/Core/docs/Part8/5.3.2/#5.3.2.3
Hi guys,
In MachineVisionn, the description of the model does not contain the XML representation compatible with ModelDesign.xsd which is mandatory for using the ModelCompiler.
Or perhaps someone has already a tool to convert NodeSet2 to ModelDesign format?
Regards
Attribute „FieldFlags“ in class Opc.Ua.FieldMetaData is implemented as enumeration DataSetFieldFlags. WriteEnumerated and ReadEnumerated are used for this attribute in Encode and Decode implementation of Opc.Ua.FieldMetaData. Enumeration data types are encoded/decoded as Int32, however DataSetFieldFlags type should be UInt16 (OPC UA Specification, Part 14, Release 1.04, 6.2.2.1.4). WriteEnumerated/ReadEnumerated calls should be replaced with WriteUInt16/ReadUInt16, so binary data size for “FieldFlags” becomes 2 Bytes instead of 4 Bytes.
File: \Stack\Opc.Ua.Core\Stack\Generated\Opc.Ua.DataTypes.cs
Methods: Encode / Decode
The UserRolePermissions entry is missing from AttributeWriteMask enumeration.
/// <summary>
/// Define bits used to indicate which attributes are writable.
/// </summary>
/// <exclude />
[System.CodeDom.Compiler.GeneratedCodeAttribute("Opc.Ua.ModelCompiler", "1.0.0.0")]
[DataContract(Namespace = Opc.Ua.Namespaces.OpcUaXsd)][Flags]
public enum AttributeWriteMask
{
/// <summary>
/// No value specified.
/// </summary>
[EnumMember(Value = "None_0")]
None = 0,
/// <summary>
/// The access level attribute is writable.
/// </summary>
[EnumMember(Value = "AccessLevel_1")]
AccessLevel = 1,
......
/// <summary>
/// The RolePermissions attribute is writable.
/// </summary>
[EnumMember(Value = "RolePermissions_8388608")]
RolePermissions = 8388608,
/// <summary>
/// The AccessRestrictions attribute is writable.
/// </summary>
[EnumMember(Value = "AccessRestrictions_16777216")]
AccessRestrictions = 16777216,
/// <summary>
/// The AccessLevelEx attribute is writable.
/// </summary>
[EnumMember(Value = "AccessLevelEx_33554432")]
AccessLevelEx = 33554432,
I see that it is also missing from the specs. in Part 3. Table 43, but some other user related masks (like UserAccessLevel, UserExecutable, UserWriteMask) are present.
Is this intentional for some reason?
There are many <Value>
content missing the correct namespaces for the type of value.
See file Opc.Ua.IOLink.NodeSet2.xml lines 110 and 121 for a small example.
The same problem is found in file Opc.Ua.IOLinkIODD.NodeSet2.xml
ObjectId output argument in CreateCredentialMethodType causes compile errors in generated code becasue of duplicate "objectId" parameters.
<opc:Method SymbolicName="CreateCredentialMethodType">
<opc:InputArguments>
<opc:Argument Name="ResourceUri" DataType="ua:String" />
<opc:Argument Name="ProfileUri" DataType="ua:String" />
<opc:Argument Name="EndpointUrls" DataType="ua:String" ValueRank="Array"></opc:Argument>
</opc:InputArguments>
<opc:OutputArguments>
<opc:Argument Name="ObjectId" DataType="ua:NodeId"></opc:Argument>
</opc:OutputArguments>
</opc:Method>
protected override ServiceResult Call(
ISystemContext context,
NodeId objectId,
IList<object> inputArguments,
IList<object> outputArguments)
{
if (OnCall == null)
{
return base.Call(context, objectId, inputArguments, outputArguments);
}
ServiceResult result = null;
string resourceUri = (string)inputArguments[0];
string profileUri = (string)inputArguments[1];
string[] endpointUrls = (string[])inputArguments[2];
NodeId objectId = (NodeId)outputArguments[0];
if (OnCall != null)
{
result = OnCall(
context,
this,
objectId,
resourceUri,
profileUri,
endpointUrls,
ref objectId);
}
outputArguments[0] = objectId;
return result;
}
/// <summary>
/// Used to receive notifications when the method is called.
/// </summary>
/// <exclude />
public delegate ServiceResult CreateCredentialMethodStateMethodCallHandler(
ISystemContext context,
MethodState method,
NodeId objectId,
string resourceUri,
string profileUri,
string[] endpointUrls,
ref NodeId objectId);
Hallo,
https://reference.opcfoundation.org/v104/Core/docs/Part10/5.2.3/
I am implementing a FiniteStateMachineType in a projekt and i am a little confused about two references i cant find in NodeIds.csv
did they miss on purpose, because they are somehow in the v1.04 docs !?
I'm working on generating code for the 61850 companion specs I've run into one enumeration member (so far) that needs to have a symbolic name defined: AddCauseKind
has a field named 1-of-n-control
.
AFAIK most programming languages do not allow a field name to begin with a number.
Further, most programming languages also don't allow dashes or spaces in variable names.
So it seems to me a lot of these enum definition fields should have symbolic name attributes defined.
This issue (#41) still happening when cloning latest ModelCompiler - master branch c75b5bfe and submodule Stack d7baeb9 and then compiling and the issue is still present in here
UA-Nodeset/DI/Opc.Ua.Di.Classes.cs
Lines 6033 to 6038 in 40221c0
I am not sure which one I should use as the current 1.04 release.
The file UANodeSet in the repo 1.04 starts
<UANodeSet xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" LastModified="2019-05-01T00:00:00Z" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd">
<Models>
<Model ModelUri="http://opcfoundation.org/UA/" Version="1.04" PublicationDate="2019-05-01T00:00:00Z" />
on the website pointed out by the readme.md https://opcfoundation.org/UA/schemas/1.04/
it looks like this
<UANodeSet xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" LastModified="2019-04-15T00:00:00Z" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd">
<Models>
<Model ModelUri="http://opcfoundation.org/UA/" Version="1.04" PublicationDate="2019-04-15T00:00:00Z" />
**Unfortunately, I cannot compare both because of the huge number of differences. **
Which one has been released? Both are markedVersion="1.04
.
Usually, the GitHub repositories contain source files. This repository contains compiler results. It could be the cause of the tracking problem. New compilation could produce different results. Additionally XML files make the diff process more challenging or even impossible to manage because two different XML files don't mean different information they represent. Anyway, special care must be taken to keep all the staff in sync and precise text description of releases to avoid any confusion.
Why *.xml files are in the schema folder?
Hi,
in DI NodeSet2 XML:
i=17602
The i=17602 Reference is just a HasSubType, but is unknown on importing XML as a type self from the XML. With that modeler will not import that file.
kind regards,
Klaus
from Opc.Ua.Types.bsd, the Reserved1 field is calculated incorrectly, Length should be 1
BinaryValidator fails otherwise.
<opc:StructuredType Name="DiagnosticInfo">
<opc:Documentation>A recursive structure containing diagnostic information associated with a status code.</opc:Documentation>
<opc:Field Name="SymbolicIdSpecified" TypeName="opc:Bit" />
<opc:Field Name="NamespaceURISpecified" TypeName="opc:Bit" />
<opc:Field Name="LocalizedTextSpecified" TypeName="opc:Bit" />
<opc:Field Name="LocaleSpecified" TypeName="opc:Bit" />
<opc:Field Name="AdditionalInfoSpecified" TypeName="opc:Bit" />
<opc:Field Name="InnerStatusCodeSpecified" TypeName="opc:Bit" />
<opc:Field Name="InnerDiagnosticInfoSpecified" TypeName="opc:Bit" />
<opc:Field Name="Reserved1" TypeName="opc:Bit" Length="2" />
<opc:Field Name="SymbolicId" TypeName="opc:Int32" SwitchField="SymbolicIdSpecified" />
<opc:Field Name="NamespaceURI" TypeName="opc:Int32" SwitchField="NamespaceURISpecified" />
<opc:Field Name="Locale" TypeName="opc:Int32" SwitchField="LocaleSpecified" />
<opc:Field Name="LocalizedText" TypeName="opc:Int32" SwitchField="LocalizedTextSpecified" />
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.