OPC Protocol and PLC Interworking - opc

Hi I am studying IoT with PLC.
I was looking for a way to poll data from PLC modules, and found OPC Protocol that seems to be the standard.
If I adopt this protocol and make a server that polls data via OPC and mediate that protocol, will I be able to connect to any kinds of PLC?
I saw some solutions and they highlight specific vendor-drivers.
Does this mean OPC is not a standard and I need to see each vendor's protocols?
I need some grasp on this, so please advice on how I should communicate with PLCs with JAVA Server

OPC has multiple different versions.
The major ones you might consider are:
OPC DA ("Data Access"), which is based on Microsoft OLE, COM and uses DCOM as a wire protocol.
OPC UA ("Unified Architecture"), which has a more complex data model and has a distinct protocol specification. There are multiple wire protocols, including an XML based protocol and a compact binary encoded protocol. There are different types of security choices; interoperability means matching everything up.
For PLC access it may be that you are using a gateway between a wire protocol (for example Modbus or a vendor protocol) and an OPC programming environment. In this case you do not need to be aware of the protocol implementation; the driver/gateway is responsible for the conversion into the OPC programming environment.
In a Java environment you could find an OPC UA supplier that provides a Java API and has driver support for the devices you need to use.

Right, so only relatively recently did PLCs start to communicate via OPC-UA natively. Typically, each vendor has their own sometimes open, sometimes proprietary protocol that you need to use to talk to the PLC.
The traditional role of a OPC servers has been to let the vendor of the server worry about all the protocol details for each kind of device while clients just need to know OPC-DA or OPC-UA, which is an open standard.

Related

Is SOAP the only Service related Implementation of OPC UA and how does it compare to Rest?

I have Problems understanding best practice around OPC UA.
OPC UA is often called Protocol of future IOT and other positive stuff.
In my understanding, if you want to Provide Information over OPC UA as a Service you Implement SOAP Web services. As far as my Knowledge goes, RESTful services are just better in most Use cases.
I know SOAP REST comparisons that call Rest the better choice and then there are some Industrial Adverts calling OPC UA better then REST …
Pro Rest:
https://spf13.com/post/soap-vs-rest/
Pro OPC UA:
https://www.maintworld.com/Partner-Articles/Why-use-OPC-UA-instead-of-a-RESTful-interface
In my Conclusion, unless there are other Implementations of OPC UA then SOAP. REST seems without hesitation better.
Am I wrong in the Understanding that SOAP is the common Implementation of OPC UA?
Are not most Features of this “Amazing” Protocol behind RESTful standards?
How Comes most Production Related Software Products focus on OPC UA instead of REST?
Thanks for any Advice or Source of Information!
In my understanding, if you want to Provide Information over OPC UA as a Service you Implement SOAP Web services.
Not even close.
Am I wrong in the Understanding that SOAP is the common Implementation of OPC UA?
Yes, very.
The term “SOAP” literally isn’t used in the OPC UA article you linked to. I think you need to go back to step zero and start reading some introductory OPC UA material.
Here’s an overview article that even touches on the fact that there used to be an optional SOAP/HTTP transport defined by the spec, which may be the source of some of your confusion: https://www.rtautomation.com/technologies/opcua/
Newer versions of the spec have deprecated this transport because almost nobody used it. The UA TCP binary transport remains the only transport required to be implemented and the overwhelmingly most commonly used.

Communication of two application in same device

There are 2 applications that need to communicate with each other. They are both running on the same PC.
Main Application (C#)
Helper Application (C#) -> launched from Main Application
Helper Application will modify some data used/contained by the Main Application. Can the helper application be a microservice? (not familiar with microservices, but I've saw this while checking on the net)
I found a helpful tutorial and was able to create a WCF Duplex Binding.
Now the Main Application and Helper Application can communicate.
I'm just wondering if this is a good solution (or a microservice is better??)
Can the helper application be a microservice? (not familiar with microservices...
Sure. "Microservices" is just the latest term that describes distributed component-based network computing. It goes back a long way to the days of (and possibly further) distributed COM (DCOM) and Corba; COM+ and finally service-orientated architecture (SOA). WCF used SOA as a best practice. In practice the only real difference between SOA and microservices is that the latter tend to adopt HTTP-REST-JSON as the transport/API/payload whereas the SOA generation is transport/payload neutral but generally using SOAP.
I found a helpful tutorial and was able to create a WCF Duplex Binding. Now the Main Application and Helper Application can communicate. I'm just wondering if this is a good solution (or a microservice is better??)
Well technically you are already using microservice/SOA.
I'm just wondering if this is a good solution
No. The problem with SOA/microservices on the same machine is that they are very chatty; have a high overhead; and their message payloads quite verbose. Both SOAP and REST utilise text messages (XML and JSON respectively) by default (which is large compared to binary).
If both client and server are on the same machine you are best to just use straight-up named-pipes and avoid WCF/REST. Communcation under named-pipes are binary and so are very compact; named pipes run in Kernal mode meaning it is very fast and as an added bonus when communicating locally, bypasses the network layer (as opposed to say TCP which will even for LOCALHOST).

OPU UA Server Questions

I have been looking at the OPC UA Specification parts, however they do not give you a list of classes and function and tell you how they work. Is there something like that?
Also the server, the 1st thing it does is creates an Object right?
one of Server ?
what are the steps from the Server point of view ?
You should strongly consider using one of the available SDKs if you're looking to build an OPC-UA server.
That being said, UA Part 6 describes the encoding of the built-in datatypes. A schema describing many of the other structured types is available here: http://opcfoundation.org/UA/schemas/1.02/Opc.Ua.Types.xsd, along with some other useful XML files.
As you can read into the Part 1 : Overview and Concepts of the OPC UA Specification :
OPC UA defines a common infrastructure model to facilitate
this information exchange OPC UA specifies the following:
The information model to represent structure, behaviour and semantics.
The message model to interact between applications.
The communication model to transfer the data between end-points.
The conformance model to guarantee interoperability between systems.
You could get the OPC UA Stack from the OPC Foundation if you are member of it, but this is only the communication part of a Server/Client application.
Then you have to implement your own Server/Client (AddressSpace manager, Session Manager, Subscription Manager, Certificate manager,...) or buy a SDK that already contains all the required features of an OPC UA Server or Client and will allow you to launch a Server/Client with few code lines.

What is middleware exactly?

I have heard a lot of people talking recently about middleware, but what is the exact definition of middleware? When I look into middleware, I find a lot of information and some definitions, but while reading these information and definitions, it seems that mostly all 'wares' are in the middle of something. So, are all things middleware?
Or do you have an example of a ware that isn't middleware?
Lets say your company makes 4 different products, your client has another 3 different products from another 3 different companies.
Someday the client thought, why don't we integrate all our systems into one huge system. Ten minutes later their IT department said that will take 2 years.
You (the wise developer) said, why don't we just integrate all the different systems and make them work together? The client manager staring at you... You continued, we will use a Middleware, we will study the Inputs/Outputs of all different systems, the resources they use and then choose an appropriate Middleware framework.
Still explaining to the non tech manager
With Middleware framework in the middle, the first system will produce X stuff, the system Y and Z would consume those outputs and so on.
Middleware is a terribly nebulous term. What is "middleware" in one case won't be in another. In general, you can expect something classed as middleware to have the following characteristics:
Primarily (usually exclusively) software; usually doesn't need any specialized hardware.
If it weren't there, applications that depend on it would have to incorporate it as part of their application and would experience a lot of duplication.
Almost certainly connects two applications and passes data between them.
You'll notice that this is pretty much the same definition as an operating system. So, for instance, a TCP/IP stack or caching could be considered middleware. But your OS could provide the same features, too. Indeed, middleware can be thought of like a special extension to an operating system, specific to a set of applications that depend on it. It just provides a higher-level service.
Some examples of middleware:
distributed cache
message queue
transaction monitor
packet rewriter
automated backup system
Wikipedia has a quite good explanation: http://en.wikipedia.org/wiki/Middleware
It starts with
Middleware is computer software that connects software components or applications. The software consists of a set of services that allows multiple processes running on one or more machines to interact.
What is Middleware gives a few examples.
There are (at least) three different definitions I'm aware of
in business computing, middleware is messaging and integration software between applications and services
in gaming, middleware is pretty well anything that is provided by a third-party
in (some) embedded software systems, middleware provides services that applications use, which are composed out of the functions provided by the hardware abstraction layer - it sits between the application layer and the hardware abstraction layer.
Simply put Middleware is a software component which provides services to integrate disparate systems together.
In an complex enterprise environment, there are a number of challenges when you need to integrate two or more enterprise systems together to talk to each other. Normally these systems do not understand each others language as they are developed on different platforms using different languages (like C++, Java, Cobol, etc.).
So here comes middleware software in picture which provides services like
transformation of messages formats from one app to other,
routing and enriching messages besides taking care of security,
encryption,
validation and
applying different business rules to these messages.
A typical example of middleware is an ESB products like IBM message broker (WMB/IIB), WESB, Datapower XI50, Oracle Fusion, Mule and many others.
Therefore, middleware sits mostly in between the service consuming apps and services provider apps and help these apps to talk to each other.
Middleware is about how our application responds to incoming requests. Middlewares look into the incoming request, and make decisions based on this request. We can build entire applications only using middlewares. For e.g. ASP.NET is a web framework comprising of following chief HTTP middleware components.
Exception/error handling
Static file server
Authentication
MVC
As shown in the above diagram, there are various middleware components in ASP.NET which receive the incoming request, and redirect it to a C# class (in this case a controller class).
Middleware is a general term for software that serves to "glue together" separate, often complex and already existing, programs. Some software components that are frequently connected with middleware include enterprise applications and Web services.
There is a common definition in web application development which is (and I'm making this wording up but it seems to fit): A component which is designed to modify an HTTP request and/or response but does not (usually) serve the response in its entirety, designed to be chained together to form a pipeline of behavioral changes during request processing.
Examples of tasks that are commonly implemented by middleware:
Gzip response compression
HTTP authentication
Request logging
The key point here is that none of these is fully responsible for responding to the client. Instead each changes the behavior in some way as part of the pipeline, leaving the actual response to come from something later in the sequence (pipeline).
Usually, the middlewares are run before some sort of "router", which examines the request (often the path) and calls the appropriate code to generate the response.
Personally, I hate the term "middleware" for its genericity but it is in common use.
Here is an additional explanation specifically applicable to Ruby on Rails.
Middleware stands between web applications and web services that natively can't communicate and often are written in different languages/frameworks.
One such example is OWIN middleware for .NET environment, before owin people were forced to host web apps in a microsoft hosting software called IIS. After owin was developed, it has added capacity to host both in IIS and self host, in IIS was just added support for Owin which acted as an interface. Also it become possible to host .NET web apps on Linux via Mono, which again added support for Owin.
It also added capacity to create Single Page Applications, Owin handling Http request/response context, so on top of owin you can add authentication/authorization logic via OAuth2 for example, you can configure middleware to register a class which contains logic of user authentification (for ex. OAuth2 implementation) or class which contains logic of how to manage http request/response messages, that way you can make one application communicate with other applications/services via different data format (like json, xml, etc if you are targeting web).
Some examples of middleware: CORBA, Remote Method Invocation (RMI),...
The examples mentioned above are all pieces of software allowing you to take care of communication between different processes (either running on the same machine or distributed over e.g. the internet).
From my own experience with webwork, a middleware was stuff between users (the web browser) and the backend database. It was the software that took stuff that users put in (example: orders for iPads, did some magical business logic, i.e. check if there are enough iPads available to fill the order) and updated the backend database to reflect those changes.
It is just a piece of software or a tool on which your application executes and rapplication capabilities with respect to high availability,scalability,integrating with other softwares or systems without you bothering about your application level code changes .
For example : The operating system on which your application runs requires an I.P change , you do not have to worry about it in your code , it is the middleware stack on which you can simple update the configuration.
Example 2 : You experience problems with your runtime memory allocation and feel that the your application usage has increased , you do not have to much about it unless you have a bug or bottleneck in your code , it is easily achievable by tuning middleware software configuration on which your application runs.
Example 3 : You have multiple disparate software and you need them to talk to each other or send data in a common format which is understandable by all the systems then this is where middleware systems comes handy.
Hope the information provided helps.
it is a software layer between the operating system
and applications on each side of a distributed computing system in a network. In fact it connects heterogeneous network and software systems.
If I am not wrong, in software application framework, based on the context, you can consider middleware for the following roles that can be combined in order to perform certain activities in between the user request and the application response.
Adapter
Sanitizer
Validator
I always thought of it as the oldest software I have had to install. The total app used a web server, a database server, and an application server. The web server being the middleware between the data and the app.

What is the role of interfaces IOPCServer, IOPCDataItem, IOPCGroup in OPC ( OLE for process control)

I am currently new in OPC ( OLE for process control). I want to know about the interfaces IOPCServer, IOPCDataItem, IOPCGroup interfaces in the OPC. What are they used for & what is their role in terms of OPC Client & OPC Server & what methods & properties these interfaces conatins ? Can you provide me the answer for the above questions or can you provide me the link through which I can get the knowledge of the above topics ?
You're probably talking about the OPC DA (Data Access) interfaces. You would have to know which version of OPC DA you're targeting (most likely versions are 2.05a and 3.0).
The interface specifications are served by OPC Foundation, and they require a paid membership to download the specifications. See: http://www.opcfoundation.org/Downloads.aspx?CM=1&CN=KEY&CI=274 ; or you might be able to catch a glimpse of the specs for free online, search around, for example see: http://www.doc88.com/p-67617868554.html
Download the OPC DA redistributable package from OPC Foundation (this is free even for non-members). Then you can see the full API definitions in the included IDL files.
Anyway, IOPCServer is the "root" interface through which the client connects and gets the references to all the other objects. Practically it has the semantics of a connection-type object. Its methods provide some basic services (e.g. server state management), as well browsing all the served items and their properties.
IOPCGroup provides a way of grouping data items for collective reads and writes. A group is a collection if items which are read with the same cycle, and have the same deadbands. It contains methods for adding/removing items and reading them synchronously or asynchronously.
IOPCDataItem I have never seen (in DA 2.05 or DA 3.0). Could you be referring to IOPCItemIO, which is the way to read/write items directly without creating groups (in 3.0 only)?