Short answer - yes they can interoperate.
The OPC UA standard does not specify an API - it specifies the wire protocol.
The language of a stack implementation is therefore irrelevant - every stack has to provide an encoder/decoder for the wire protocol. The Client/Server API is language-specific.
06/10/2014
Service implementation is so different in different stacks, and I don't see any code doing type conversion before/after wire transportation. How can the same service (beginBrowse) be interoperable?
ANSI C stack:
OpcUa_StatusCode OpcUa_Server_BeginBrowse(
OpcUa_Endpoint a_hEndpoint,
OpcUa_Handle a_hContext,
OpcUa_Void** a_ppRequest,
OpcUa_EncodeableType* a_pRequestType);
.NET stack:
public virtual IAsyncResult BeginBrowse(BrowseMessage message, AsyncCallback callback, object callbackData)
Back to OPC Classic, there is an equivalent RCW for .NET stack so there is no issue a COM and .NET server implementation can be interoperable. Confused with UA stacks.
Moderators-Specifications
Moderators-Companion
Moderators-Implementation
Moderators-Certification
Moderators-COM
02/24/2014
They are 100% compatible for all datatypes supported on a platform. OPC Foundation provides certification and compliance test that verifies clients and servers. the lab has Java, C++, .NET based products that are used to check interoperability.
For many items no conversion is needed (integers for example) since all of the platforms have the same representation. If you look deep enough you can follow how each stack encodes the data on the wire, this encoded form is the same in all cases. It makes use of standard data types. The api's are different mostly do to what information in provided on the call verse obtained from built in structures/class/objects. the other big difference is how the API deals with what is sent back. For some API's the data is returned, in others a function is provided that is call with the return data. In all cases what is on the wire is identical.
For the examples you listed: ANSI C does not have objects or exceptions - so the call returns a status and a pointer to the returned values, while the .net API does not return a status (it will throw an exception is an error occurs), and it returns objects which encapsulate the data. the Object are much easier to work with, but also make for larger applications. it is up to the developer to decide which platform is best for them, but the wire protocol is the same in all cases and is tested to ensure that it is.
Paul
Paul Hunkar
Director of Compliance and Certification
OPC Foundation
Paul Hunkar - DSInteroperability
1 Guest(s)