A live demo OPC UA server based on the O‑PAS standard

Eight simulated process units, modeled as DCNs based on the O-PAS standard with live values, operator setpoints, control methods, and working alarms & conditions. Point any OPC UA client at it.

OPC UA endpoint opc.tcp://opas.digitalpetri.com:4840
  • Anonymous authentication
  • None and Basic256Sha256 / SignAndEncrypt endpoints
  • Built on Eclipse Milo

Connecting

Connect anonymously with any OPC UA client — UaExpert, the Prosys browser, or your own code — and browse to the OPAS folder:

Objects → OPAS → BR_100 · CMP_100 · DC_100 · FH_100 · HX_100 · LS_100 · MG_100 · SEP_100

Things to try

  • Subscribe to live values — every unit simulates on a 250 ms tick.
  • Write a setpoint and watch the control response.
  • Call control methods: StartBatch(), EmergencyTrip(), Blowdown()
  • Subscribe to events on Server; acknowledge, confirm, and shelve alarms.
  • Look up tags with FindAlias on Objects → Aliases.

Good to know

  • Client certificates are trusted automatically, so secure connections work on the first try.
  • The server is public and shared — others may be driving the same units. Everything is reversible and the simulations self-right.
  • It's a demo, not infrastructure: no uptime guarantees, state may reset.

The eight simulated units

From the Open Group's process unit example projects. The nodesets define each unit's structure; this server adds the live behavior — deterministic simulations, working methods, firing alarms.

BR-100

Batch Mixing Reactor

Chemical / pharma

Charges, heats, reacts, cools, and discharges on a repeating batch cycle.

2 methods StartBatch()Abort() 3 alarms HighTemp> 110 °C HighPressure> 5 bar Overflow> 98 %
CMP-100

Compressor Anti-Surge Loop

Rotating equipment

Variable-speed compressor with an anti-surge recycle loop and machinery-protection trips.

4 methods Start()Stop()EmergencyTrip()ResetTrip() 4 alarms SurgeImminent< 8 % HighVibration> 12 mm/s HighDischargeTemp> 160 °C LowSealGasPressure< 5 bar
FH-100

Fired Heater

Refining

Firing holds the coil-outlet temperature, air trim targets excess O2, and safety interlocks cut fuel.

4 methods Start()Shutdown()EmergencyTrip()ResetTrip() 6 alarms HighOutletTemp> 520 °C HighBridgewallTemp> 900 °C LowProcessFlow< 40 t/h LowExcessO2< 1.5 % LowFuelGasPressure< 0.4 bar PositiveDraft> 0 Pa
DC-100

Distillation Column

Refining / petrochemical

Reflux and reboiler duty hold a sensitive-tray temperature; condenser duty holds pressure.

3 methods Start()TotalReflux()Shutdown() 4 alarms HighColumnDP> 35 kPa HighColumnPressure> 3.0 bar LowSumpLevel< 10 % HighRefluxDrumLevel> 90 %
HX-100

Heat Exchanger

Heat transfer

Cooling water holds the process outlet temperature while fouling slowly builds.

3 methods Start()Stop()Bypass() 3 alarms HighTubeOutletTemp> 130 °C HighTubeDP> 80 kPa HighFouling> 60 %
LS-100

Duplex Pump Lift Station

Water / wastewater

Duty/standby pumps drain a wet well, alternating the lead pump each cycle.

2 methods AlternateLeadPump()ResetPumpFault() 3 alarms HighHighFlood> 4.5 m PumpFailToStarton fault SealLeakintermittent
MG-100

Solar PV + Battery Microgrid

Energy / renewables

PV, battery, and grid tie dispatched around a compressed two-minute solar day.

2 methods SetMode()ResetEnergy() 3 alarms BatteryOverTemp> 55 °C LowSOC< 15 % InverterFaultintermittent
SEP-100

Three-Phase Separator

Upstream oil & gas

Pressure, oil level, and the oil/water interface held by three interacting valve loops.

3 methods Start()Shutdown()Blowdown() 3 alarms HighVesselPressure> 60 bar HighHighOilLevel> 90 % LowInterfaceLevel< 10 %

The information model

Each unit is a DCN based on the O-PAS standard: it subtypes DCNBaseType under the Part 4 OPAS folder, carries IOServiceEngine and AlarmEngine, types every signal per the O-PAS Base model, registers a tag alias per signal, and wires each alarm as an ExclusiveLimitAlarm. The DI, IRDI, PADIM, O-PAS Base, and O-PAS Connectivity Framework models are loaded alongside.

Namespace table
IndexNamespace URIModel
0http://opcfoundation.org/UA/OPC UA base
1urn:digitalpetri:opas-demo-serverServer application
2http://opcfoundation.org/UA/DI/Device Integration (DI)
3http://opcfoundation.org/UA/Dictionary/IRDIIRDI dictionary
4http://opcfoundation.org/UA/PADIM/PADIM
5https://www.opengroup.org/open-process-automation/O-PAS/BaseO-PAS Base (Part 6.2)
6https://www.opengroup.org/open-process-automation/O-PAS/CFO-PAS Connectivity Framework (Part 4)
7http://example.org/opcua/BR-100Batch reactor
8http://example.org/opcua/CMP-100Compressor anti-surge loop
9http://example.org/opcua/FH-100Fired heater
10http://example.org/opcua/DC-100Distillation column
11http://example.org/opcua/HX-100Heat exchanger
12http://example.org/opcua/LS-100Lift station
13http://example.org/opcua/MG-100Solar microgrid
14http://example.org/opcua/SEP-100Three-phase separator

Alarms & conditions

Every alarm fires event notifications through the Server object with the standard OPC UA Part 9 condition fields and live condition-state nodes.

Supported

  • Acknowledge, Confirm, AddComment
  • Enable / Disable
  • TimedShelve, OneShotShelve, Unshelve
  • ConditionRefresh / ConditionRefresh2 replay of retained conditions

Provoking an alarm

  • Start a BR-100 batch with TempSP at maximum and wait for HighTemp.
  • Lower CMP-100's SurgeMarginSP — or just call EmergencyTrip().
  • Let HX-100 foul in service until HighFouling, then Bypass() to clean it.

About

A demonstration by digitalpetri, built on Eclipse Milo. The unit address spaces come from the Open Group's process unit example projects; the O-PAS™ nodesets ship with the O-PAS Standard, Version 2.1. This is an independent educational demo, not produced or endorsed by The Open Group.