Wolfram Computation Meets Knowledge

Industrial Manufacturing

Model new manufacturing processes prior to implementation or existing ones in order to diagnose problems. Use Mathematica for analyses including pre- and post-processing of models, simulations, and results.

OPC UA Tank System

This example will demonstrate the usage of OPC UA communication in a System Modeler model over a simple tank system. OPC UA is a secure, robust and scalable communications protocol used in many different industries over the world. See the OPC Foundation website for more information.

To run this example, you'll need

The latest versions of System Modeler and Mathematica.

Please make a selection:

Get a
free trial
with download

Why Is OPC UA Useful Together with System Modeler?

To be able to integrate System Modeler’s modeling capabilities with real-world objects in real time is very powerful. Using OPC UA, safe communication between hardware, such as a Raspberry Pi or a PLC, and simulation models becomes possible.

Communication Using the OPC UA Library

The example model consists of a simple tank system that can communicate through the OPC UA protocol. The measurement of the liquid level of the first tank is written to a real-valued node on the OPC UA server. This value is then read by another component, to be used as a reference for the liquid level of the second tank.

The diagram view of the tank system using OPC UA communication.

Integrating OPC UA communication in System Modeler models lets industries using OPC UA connect signals directly into a model with live data. That opens up many possibilities when it comes to control theory, signal processing and much more.

How Does It Work?

The System Modeler components defined in the OPC UA Modelica library are using external C code to call functions to an implementation of the OPC UA Library in C code. Through the OPC UA components in System Modeler, values can be both written and read to nodes on an OPC UA server. Since OPC UA is multiplatform, compared to OPC Classic, the OPC UA server can also run on small chips or on a Raspberry Pi, for example.

External C Code

By calling external C code, System Modeler can communicate live to any compatible external hardware, using OPC UA.

Plot over both tank levels over time. The first tank starts full (1 m) and then gets drained. The measurement of the liquid level in the first tank is being written to the server at a sample rate of 0.2 s. The bottom tank uses the measurement of the first tank as the reference value for its liquid level, which can be seen in the bottom plot.

Connecting System Modeler to Hardware

It is of course also possible to replace the models of the tanks with values coming from sensors of real liquid tanks, or to just connect some hardware to control the reference signals to the tanks in the model. We are going to show you how to do the latter. To get these signals into the model, you could either use Model Plug, as in this example, or use Mathematica to connect hardware with a running simulation. To be able to run a model like this, you would of course have to have access to an Arduino or something similar.

This is how the model diagram view looks if you are using Model Plug to connect to external hardware to control the reference signal of the first tank and the inflow of liquid to the second tank. This model serves well as operator training.
Image of the Arduino with knobs that control the reference values for the tanks. It is connected to the simulation in System Modeler through the Model Plug Library.
Plot of the inputs from the knobs (top) and both tank levels over time (bottom). The first signal sets the desired liquid level in the first tank. The second signal sets the inflow of liquid to the second tank. However, the second tank will still try to keep the same liquid level as the first tank and will follow faster or slower depending on the inflow.

If you actually had real tanks with liquid and sensors, you could replace the tank models in the model above with only sensor data. In that case, inputs and outputs from the tanks using Arduinos to connect to System Modeler could be used, as well as OPC UA to transfer the sensor data between the tanks. For more use cases, see also how OPC Classic can be used.


Use industrial communication protocol OPC UA in System Modeler to communicate with systems in the real world.