View Issue Details

IDProjectCategoryView StatusLast Update
000987910000-004: ServicesSpecpublic2025-03-12 19:44
ReporterMarcel Patzlaff Assigned ToMatthias Damm  
PrioritynormalSeveritymajorReproducibilityalways
Status closedResolutionfixed 
Product Version1.05.03 
Fixed in Version1.05.06 RC1 
Summary0009879: Clarification needed for the method resolution process in "Call" service
Description

There is some confusion in Part 4 and Part 3 regarding which "objectId" - "methodId" combinations are allowed to be provided to the "Call" service. I will point this out in detail using the following imaginary information model:

  • 2 ObjectTypes ("SuperFooType", "FooType") and 1 Object ("Foo") with the following references "SuperFooType" <-isSubTypeOf- "FooType" <-hasTypeDefinition- "Foo"
  • 3 Methods ("DoSomething") belonging to each of the nodes above:
    • "SuperFooType" -hasComponent-> "DoSomething" (i=111)
    • "FooType" -hasComponent-> "DoSomething" (i=222)
    • "Foo" -hasComponent-> "DoSomething" (i=333)

Now, according to description of parameter "objectId" of the "Call" service (see https://reference.opcfoundation.org/Core/Part4/v105/docs/5.11.2) the following situation is given:

  • Calling i=111 on "Foo" object -> shall work
  • Calling i=222 on "Foo" object -> shall work
  • Calling i=333 on "Foo" object -> shall work

Looking at the description of parameter "methodId" the following situation is given:

  • Calling i=111 on "Foo" object -> shall it work or not?
  • Calling i=222 on "Foo" object -> shall work
  • Calling i=333 on "Foo" object -> shall work

Now switching to Part 3 (see https://reference.opcfoundation.org/Core/Part3/v105/docs/5.7) there is this passage:

"A Method shall always be the TargetNode of at least one HasComponent Reference. The SourceNode of these HasComponent References shall be an Object or an ObjectType. If a Method is called, then the NodeId of one of those Nodes shall be put into the Call Service defined in OPC 10000-4 as parameter to detect the context of the Method operation."

This basically translates to the following situation:

  • Calling i=111 on "Foo" object -> shall not work
  • Calling i=222 on "Foo" object -> shall not work
  • Calling i=333 on "Foo" object -> shall work

Given the intention of Methods in Part 3 (https://reference.opcfoundation.org/Core/Part3/v105/docs/4.8) the wording should be adjusted properly.

My suggestion would be to take the "objectId" description of the "Call" service as truth because it fits best to the desire to have method calls behave like they do in any object-oriented programming language. This shall than be reflected on all the locations above.

TagsNo tags attached.
Commit Version1.05.06 RC1
Fix Due Date2025-04-15

Relationships

related to 0009880 closedMatthias Damm Clarification needed which RolePermissions to apply when using the "Call" service 

Activities

Marcel Patzlaff

2025-01-21 07:40

reporter   ~0022317

Is there anything new to this issue? It would be great if someone at least can point to a direction.

Jim Luth

2025-01-28 18:25

administrator   ~0022346

Last edited: 2025-01-28 18:27

Agreed to clarify the description of methodId in the Call service change "the ObjectType of the Object" to "the ObjectType of the Object or a super type of that ObjectType". And any other text that needs to be updated to be consistent.

So for all cases in the example:

Calling i=111 on "Foo" object -> shall work
Calling i=222 on "Foo" object -> shall work
Calling i=333 on "Foo" object -> shall work

Matthias Damm

2025-03-10 19:56

developer   ~0022500

Only the method on the object instance or the method on the object type that first defined the method can be used. Subtypes are not allowed to change the Method. They can only make a method mandatory that is optional on a base type. But this is not relevant for the Call service.
Calling i=111 on "Foo" object -> shall work
Calling i=222 on "Foo" object -> shall NOT work
Calling i=333 on "Foo" object -> shall work

Table 65 – Call Service Parameters
methodId
Changed
If the objectId is the NodeId of an Object, it is allowed to use the NodeId of a Method that is the target of a HasComponent Reference from the ObjectType of the Object.
To
If the objectId is the NodeId of an Object, it is allowed to use the NodeId of a Method that is the target of a HasComponent Reference from the ObjectType of the Object that defines the Method the first time.

Independent of this the ObjectId parameter description is wrong for the case ObjectType. Only the ObjectType that defines the Method can be used to call the Method.
Changed
In case of an ObjectType the ObjectType or a super type of the ObjectType shall be the source of a HasComponent Reference (or subtype of HasComponent Reference) to the Method specified in methodId.
To
In case of an ObjectType the ObjectType shall be the source of a HasComponent Reference (or subtype of HasComponent Reference) to the Method specified in methodId.

Jim Luth

2025-03-12 19:44

administrator   ~0022523

Agreed to changes edited in F2F meeting.

Issue History

Date Modified Username Field Change
2024-10-10 09:20 Marcel Patzlaff New Issue
2025-01-21 07:40 Marcel Patzlaff Note Added: 0022317
2025-01-28 18:25 Jim Luth Note Added: 0022346
2025-01-28 18:26 Jim Luth Note Edited: 0022346
2025-01-28 18:27 Jim Luth Note Edited: 0022346
2025-01-28 18:27 Jim Luth Assigned To => Matthias Damm
2025-01-28 18:27 Jim Luth Status new => assigned
2025-01-28 18:28 Jim Luth Commit Version => 1.05.06 RC1
2025-01-28 18:28 Jim Luth Fix Due Date => 2025-04-15
2025-02-18 17:20 Jim Luth Relationship added related to 0009880
2025-03-10 19:56 Matthias Damm Status assigned => resolved
2025-03-10 19:56 Matthias Damm Resolution open => fixed
2025-03-10 19:56 Matthias Damm Fixed in Version => 1.05.06 RC1
2025-03-10 19:56 Matthias Damm Note Added: 0022500
2025-03-12 19:44 Jim Luth Status resolved => closed
2025-03-12 19:44 Jim Luth Note Added: 0022523