Namespaces in Companion specifications|OPC UA Companion Standards|Forum|OPC Foundation

Avatar
Search
Forum Scope


Match



Forum Options



Minimum search word length is 3 characters - maximum search word length is 84 characters
Lost password?
sp_Feed sp_PrintTopic sp_TopicIcon
Namespaces in Companion specifications
Avatar
FeLe
New Member
Members
Forum Posts: 1
Member Since:
09/09/2015
sp_UserOfflineSmall Offline
1
07/01/2016 - 04:30
sp_Permalink sp_Print

Hello,

I wondered about the correct namespace using in OPC UA Servers. Well I know that ns 0 and ns 1 are reserved specifically for the standard OPC UA Specifications. When I now want to use the OPC UA for Devices Specification it hat its own namespace-uri, but the xml-schema says it is ns 1. Should I now integrate the Companion Spec into ns 1 and change the uri or should I change it to a new namespace? But also the spec says that the ns index is dependend on the position of the ns in the ns-table. That's ok and the way I implemented it till now. But regarding the newest AutoID-Spec, at p. 51 it says "namespaces used in this specification" and suddenly the Devices-Spec is at ns 1.

Another question goes to the generated nodes out of an spec. Which ns should they have? It tells in the AutoID-Spec that they should not have the same ns used in the specification (but no word about it in the devices spec). I am using a server without ModellingRules so I need to implement the nodes by hand. And when I looked how ModellingRules and InstanceDeclarations are working, I couldn't see how they will handle the ns. I'm sure that an instance of a node created by a vendor should have the vendor-ns but I can't find anything about that in the spec.

so for my example here there are in the NamespaceArray:

ns0: https://opcfoundation.org/UA/
ns1: urn:unconfigured:application
ns2: https://opcfoundation.org/UA/DI/
ns3: vendor specific

is this correct or what do I need to change?

 

best regards

Felix

Avatar
Paul Hunkar
Cleveland, Ohio, USA
Moderator
Members

Moderators-Specifications

Moderators-Companion

Moderators-Implementation

Moderators-Certification

Moderators-COM
Forum Posts: 112
Member Since:
02/24/2014
sp_UserOfflineSmall Offline
2
07/01/2016 - 11:57
sp_Permalink sp_Print

Felix,

Specification define an NamespaceURI.  This NamespaceURI defines who is responsible for the namespace.  It is always unique for each namespace.  If you are defining you own instance of a type that was defined by another organization you always want to define the instance in your own namespace (i.e. you are the person that is responsible for that namespace, even if they are instance of a node from a namespace defined by someone else). 

The namespace index is just an index into the server's namespace table (or the namespace table associated with a file).  So every node uses this table instead of storing the long namespace uri.  The purpose of a Namespace-URI is ensure that there is no naming conflicts - I can use the same browse name or nodeid  as one that is issued by another group, but since I defined the namespace- it has my namespace URI associated with it and it will not conflict.

Depending on what toolkit or how the server is implemented, the functionality on how to load an address space changes, but many times a file is used. Pretty much all of the files will contain some part of an address space (i.e. not an entire address space). The file includes a table with the NamespaceURIs that are included in the file (numbered in order). If there is only 1 namespace in a file it will be index 1 in the table in the file.  When the file is loaded by the server - it will add the specified namespace from the file to the namespace table in the server - tracking what index it was loaded into (i.e. index 3 for DI in your sample) and it will translate all of the indexes in the file (1) to be the index that was actually used in the servers table (3).

  By definition every time a server loads, the order of the namespace in the namespace table might change, i.e. the index might change.  In reality, since a server typically load the same namespaces in the same order each time it does not change - at least not often, but the server still have to be able to handle a different order for loading. 

In some embedded servers the namespace table is hard coded, which means the namespace index will always be the same and the indeex in a node can be hard coded, but even in these system the namespace index is controlled by some tool that is used to generate the configuration/firmware.

Paul

Paul Hunkar - DSInteroperability

Forum Timezone: America/Phoenix
Most Users Ever Online: 510
Currently Online:
Guest(s) 20
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Forum Stats:
Groups: 2
Forums: 10
Topics: 1435
Posts: 4855