This is an OPC UA server / client API implementation for Rust.
OPC UA is an industry standard for monitoring of data. It's used extensively for embedded devices, industrial control, IoT, etc. - just about anything that has data that something else wants to monitor, control or visualize.
Rust is a systems programming language and is therefore a natural choice for implementing OPC UA. This implementation supports the embedded, micro and nano profiles but may grow to support features in time.
Read the compatibility page for how the implementation conforms with the OPC UA spec.
Read the change log for changes per version as well as aspirational / upcoming work.
The code is licenced under MPL-2.0. Like all open source code, you use this code at your own risk.
Read the setup for instructions on building OPCUA for Rust.
Read cross compilation for hints for cross compiling OPC UA for Rust to other platforms.
Read the design for more in-depth description of implementation.
Tutorials / user guides are still work in progress.
The API documentation is generated from the latest published crates. This may be some way behind current development.
|Client||Client side APIs to connect to an OPC UA server.|
|Server||Server side APIs to host an OPC UA server, address space, create new nodes, subscriptions.|
|Crypto||Security profiles, encryption, hashing, signing / verification, certificate management.|
|Core||Core functionality shared by client and server - Secure channel, TCP encoding, TCP messages, chunking.|
|Types||OPC UA core types and binary encoding implementations.|
If you want to get stuck in, there are a number of samples in the samples/ folder. The
simple-client and the
simple-server projects are
minimal client and server programs respectively.
# In one bash cd opcua/samples/simple-server cargo run # In another bash cd opcua/samples/simple-client cargo run
The full list of samples:
simple-server- an OPC UA server that adds 4 variables v1, v2, v3 and v4 and updates them from a timer via push and pull mechanisms.
simple-client- an OPC UA client that connects to a server and subscribes to the values of v1, v2, v3 and v4.
discovery-client- an OPC UA client that connects to a discovery server and lists the servers registered on it.
chess-server- an OPC UA server that connects to a chess engine as its back end and updates variables representing the state of the game.
demo-server- an OPC UA server that is more complex than the simple server and can be used for compliance testing.
mqtt-client- an OPC UA client that subscribes to some values and publishes them to an MQTT broker.
web-client- an OPC UA client that subscribes to some values and streams them over a websocket.
modbus-server- an OPC UA server that translates variables from MODBUS.