Anatomy of an HMI

How does the OSHMI (Open Substation HMI) software works?

To answer this question we must take a look at the diagram below.


The heart of the system is a real time data (web)server. It serves only that, real time data received from the field and processed. This data is kept in memory, this is necessary to obtain fast responses to queries that comes from the clients. This program runs in the background, there is no need for the operators to interact with it. During configuration time it’s convenient to interact with it but after that, in production, it’s better to run it with a hidden window or as a service (this can be easily accomplished using the amazing NSSM software).

This real time server also performs predefined point calculations at each 2 seconds, processes alarms and executes LUA scripts that can be used to define automations and calculations not available as standard system formulas.

The real time data is sent to a SQLite database (the use of other databases will require some slight adaptation of the software) in three separate tables for events, historical data and memory dump of the point list state.

The protocol driver connects with field devices acquiring data and sending commands. For now there are the IEC60870-5-104 and the ICCP drivers.

All the viewers are 100% web HTML5 clients and can run from a HMTL5 compatible browser. The Chromium browser is bundled with the OSHMI client. There are viewers for one line diagrams screens, events, alarms, tabular, trending and historical curves. All the web queries pass through the NGINX webserver, it redirects PHP scripts to the PHP processor and real time data queries to the OSHMI real time webserver (webserver.exe).

The Events Viewer is fed by a PHP script that queries events from a SOE (sequence of events) SQLite table. The historical Viewer also receive data from a SQLite table. The Screen and Tabular Viewers are fed by the real time webserver. The Trending Viewer receive the real time data and completes the past in the curve with historical data.

The HMIShell is used to lock a Windows machine to allow access only to HMI functions. A pure client machine can only run the HMIShell and a browser. Mobile devices can act as clients by giving access to their IP address and simply accessing a URL to open a viewer in a HTML5 browser (modern mobile versions of Safari, Chrome and Firefox are compatible).

More details in the next posts. Keep in touch.

OSHMI – Open Substation HMI

Hi there! Here is the link for the HMI software I have promised you in the previous post. It’s a third release candidate, not fully tested, but I think it’s very usable. Some things might change until the official 3.0 release. The source code is available via a Mercurial repository. Simply download, install and follow the instructions present in c:\oshmi\release_notes.txt. Have fun!