I dabble a bit in C++ as a hobby, and I recently thought it would be a fun idea to make my own OPC client/server environment with a small SQLite historian and an SDL frontend. I figure there’s potential here to make a lightweight, useful troubleshooting tool. For example, a user could specify a list of tags, poll high frequency data for a short period of time, and filter the list by which tags changed (and how) within short timespans, without going through all the hassle of adding tags to their actual historian environment. They just plug in their laptop, establish a connection to the PLC, and start getting data. I’m aware of Softing and Unified Automation, but I don’t want to pay for their stuff. I want to use the free OPCUA library available here.
I’m experienced with the other tools mentioned above (SQLite and SDL), I understand common network protocols, and I’ve programmed small local messaging applications for networks before (for fun)… but I know very little about OPC UA, and I don’t know where to start, so I was hoping to fire off some really general questions to you guys at Ignition to help me get over this initial hurdle. Here’s what I want to know:
What defines a client-server relationship in OPC-UA (generally speaking. For example, I want to know if clients can read and write to servers, or read only. Are servers broadcasting their own existence, or their data, or do clients broadcast requests foravailable OPC servers. That kind of thing)?
What defines the OPC-UA client/server/PLC relationship (generally speaking again. For example, are the PLCs usually just volunteering information onto the network, or do OPC-UA servers query that information and then rehost it, or can clients also query the PLC)?
Do any PLCs act as OPC-UA servers?
Can I expect to just write an OPC-UA Client/Server and start reading data from PLCs, or do I really need to make specialized drivers for each type of PLC?
If I need to write specialized drivers, is there documentation out there on the protocols expected by Rockwell PLCs for tag queries by OPC clients/servers?
Answers to any or all of the above questions will be much appreciated.
ETA: Also links to whitepapers and informative websites are acceptable, but I would really be grateful if you guys also summarized useful information for me here…