Avatar

Please consider registering
guest

sp_LogInOut Log In sp_Registration Register

Register | Lost password?
Advanced Search

— Forum Scope —




— Match —





— Forum Options —





Minimum search word length is 3 characters - maximum search word length is 84 characters

sp_Feed Topic RSS sp_TopicIcon
Issue with overriding TopologyElementType's MethodSet (DI specs)
July 25, 2018
11:14, EEST
Avatar
ashwin.fernandes
Member
Members
Forum Posts: 7
Member Since:
May 24, 2018
sp_UserOfflineSmall Offline

Hi,

There is a issue I’m facing at the moment. The description is as follows…
“MethodSet” is an optional Node from the TopologyElementType. In my “SubType”d DeviceType node I have overridden this “MethodSet” object and added my methods as mandatory nodes because these methods are expected for my devicetypes.
While creating the device, in the nodebuilderconfiguration, I added the optional components namely the “ParameterSet”(which is also overridden to hold the respective device parameters) and “MethodSet”.
After the device is created, I do see all the expected parameters under the ParameterSet and the methods under MethodSet, except that the nodeIds of the methods under the MethodSet are the same as that of the methods under the type definition. I prefer not to add these method nodes manually and hence have made them mandatory nodes under the overridden MethodSet.
Is this the expected behavior or am I doing something wrong? Because the same procedure for ParameterSet works and that is confusing me.

this is how I’m creating the device..


NodeBuilderConfiguration nodeBuilderConfiguration = new NodeBuilderConfiguration();
nodeBuilderConfiguration.addOptional(UaQualifiedName.from(DiIds.TopologyElementType_ParameterSet.getNamespaceUri(), TopologyElementType.PARAMETER_SET).toQualifiedName(getNamespaceTable()));
nodeBuilderConfiguration.addOptional(UaQualifiedName.from(DiIds.TopologyElementType_MethodSet.getNamespaceUri(), TopologyElementType.METHOD_SET).toQualifiedName(getNamespaceTable()));
UaQualifiedName.from(DiIds.TopologyElementType_ParameterSet.getNamespaceUri(), TopologyElementType.PARAMETER_SET)));
UaQualifiedName.from(DiIds.TopologyElementType_MethodSet.getNamespaceUri(), TopologyElementType.METHOD_SET)));
setNodeBuilderConfiguration(nodeBuilderConfiguration);
ProfibusInterfaceBoxDeviceTypeNode pibDeviceTypeNode = createInstance(ProfibusInterfaceBoxDeviceTypeNode.class, “PBI ” + pib.getDeviceName());

Thanks,
Ashwin

July 26, 2018
13:32, EEST
Avatar
Heikki Tahvanainen
Moderator
Members

Moderators
Forum Posts: 402
Member Since:
April 17, 2013
sp_UserOfflineSmall Offline

Hello,

Based on the above description, the actual issue seems to be that “the nodeIds of the methods under the MethodSet are the same as that of the methods under the type definition”. This is a feature called instantiation strategy and different strategies can be selected when creating the instances.

To create the methods as their own instances, you’ll need to use the PlainMethodInstantiationStrategy. In short, what you need to do is to call nodeBuilderConfiguration.setInstantiationStrategy and provide correct parameters.

Please see the following example which shows how to modify the instantiation logic of the methods under a FileType. Without the call to nodeBuilderConfiguration.setInstantiationStrategy, the “Close” method nodeid will be the standard i=11583. When this instantiation strategy is set, the nodeid will show up as “ns=index;s=MyFile/0:Close”. This is totally unrelated to your use case, but this example is very easy to reproduce as the FileType is a standard type. Hopefully this example answers your question, if not please ask for more details.

final UaObject objectsFolder = getServer().getNodeManagerRoot().getObjectsFolder();
NodeBuilderConfiguration nodeBuilderConfiguration = new NodeBuilderConfiguration();
nodeBuilderConfiguration.setInstantiationStrategy(Identifiers.FileType_Close, new PlainMethodInstantiationStrategy());
this.setNodeBuilderConfiguration(nodeBuilderConfiguration);
FileTypeNodeBase myFile = (FileTypeNodeBase) this.createInstance(Identifiers.FileType, "MyFile");
objectsFolder.addComponent(myFile);
July 27, 2018
10:24, EEST
Avatar
ashwin.fernandes
Member
Members
Forum Posts: 7
Member Since:
May 24, 2018
sp_UserOfflineSmall Offline

Hi Heikki,

Thanks for the example. It was exactly what I was looking for.
Would it be possible also to get some more information regarding the different instantiation strategies?

Thanks,
Ashwin

July 27, 2018
13:55, EEST
Avatar
Heikki Tahvanainen
Moderator
Members

Moderators
Forum Posts: 402
Member Since:
April 17, 2013
sp_UserOfflineSmall Offline

Hi Ashwin,

Currently the best, and also only, documentation is to look at the Javadoc documentation regarding UaNodeBuilderConfigurations and InstantiationStrategies.

August 6, 2018
13:45, EEST
Avatar
Bjarne Boström
Moderator
Moderators
Forum Posts: 983
Member Since:
April 3, 2012
sp_UserOfflineSmall Offline

Hi,

I have 4 additional remarks.

1. In your subtype you should be able to override the Optional ‘ParameterSet’ and ‘MethodSet’ nodes as Mandatory in the model to avoid the need to mark them.

2. In your original post for your question, “Is this the expected behavior or am I doing something wrong?”, it should be noted that it is allowed by the specification for instances to refer Method nodes that are defined in the types and therefore the behaviour is expected, since the SDK by default makes all Method nodes as “shared” (as there is usually no reason for them to have own nodes, unless you would need for some reason to have different Attribute value in some instances).

3. In SDK 3.x there is another way in addition, you can use the TypeDefinitionBasedNodeBuilderConfiguration.builder(MethodInstantiationLogic.UNIQUE) to create new method nodes instead of the SHARED default, see MyNodeManager.createAlarmNode method in the SampleConsoleServer

4. As additional note, since it is the DI model, remember that (DI spec 1.01 section 5.2): “Since Methods are components of the MethodSet Object, Clients have to specify the NodeId of the MethodSet instance in the objectId argument of the Call Service.”

And yes the documentation for this feature unfortunately is quite lacking and we hope to improve that in the future. I can answer to specific questions here in the forum if needed.

Forum Timezone: Europe/Helsinki

Most Users Ever Online: 518

Currently Online:
14 Guest(s)

Currently Browsing this Page:
1 Guest(s)

Top Posters:

hbrackel: 135

pramanj: 86

Francesco Zambon: 81

rocket science: 77

Ibrahim: 76

Sabari: 62

kapsl: 57

gjevremovic: 49

Xavier: 43

TimK: 41

Member Stats:

Guest Posters: 0

Members: 681

Moderators: 16

Admins: 1

Forum Stats:

Groups: 3

Forums: 15

Topics: 1467

Posts: 6261

Newest Members:

graciela2073, sagarchau, elviralangwell4, Donnavek, Eddiefauth, DonaldPooma, fidelduke938316, Jan-Pfizer, DavidROunc, fen.pang@woodside.com

Moderators: Jouni Aro: 1010, Otso Palonen: 32, Tuomas Hiltunen: 5, Pyry: 1, Petri: 0, Bjarne Boström: 983, Heikki Tahvanainen: 402, Jukka Asikainen: 1, moldzh08: 0, Jimmy Ni: 26, Teppo Uimonen: 21, Markus Johansson: 42, Niklas Nurminen: 0, Matti Siponen: 321, Lusetti: 0, Ari-Pekka Soikkeli: 5

Administrators: admin: 1