There are many new and cool open source projects going on right now. These are good opportunities for those of you who program to get involved. Or…you could take a hint and turn your passion into an open source project.
Sten Gruener wrote about yet another OPC UA open source project. This one seems to be centered in Europe (but everything on the Web is global, right?). This is an open source and free C (C99) implementation of OPC UA communication stack licensed under LGPL + static linking exception. A brief description:
• stack design based solely on IEC 62541
• licensed under open source (LGPL & static linking exception)
• royalty free, available on GitHub
• single or multi-threaded architecture
• one thread per connection/session
• 85% of code generated from XML specification files
• written in C99 with POSIX support
• compiled server is smaller than 100kb
• runs on Windows (x86, x64), Linux (x86, x64, ARM e.g. Raspberry Pi, SPARCstation), QNX and Android
dynamically loadable and reconfigurable user models
OPC UA (short for OPC Universal Architecture) is a communication protocol originally developed in the context of industrial automation.
OPC UA has been released as an “open” standard (meaning everybody can buy the document) in the IEC 62541 series. As of late, it is marketed as the one standard for non-realtime industrial communication.
Remote clients can interact with a Server by calling remote Services. (The services are different from a remote procedure call that is provided via the “Call” service.) The server contains a rich information model that defines an object system on top of an ontology-like set of nodes and references between nodes. The data and its “meta model” can be inspected to discover variables, objects, object types, methods, data types, and so on. Roughly, the Services provide access to:
- Session management
- CRUD operations on the node level
- Remote procedure calls to methods defined in the address space
- Subscriptions to events and variable changes where clients are notified via push messages.
The data structures the services process as in- and output can be encoded either as a binary stream or in XML. They are transported via a TCP-based custom protocol or via Webservices. Currently, open62541 supports only the binary encoding and TCP-based transport.