You are here: Home / RTLWS 1999-2017 / RTLWS Submitted Papers / 
2023-01-30 - 13:12

Real Time Linux Workshops

1999 - 2000 - 2001 - 2002 - 2003 - 2004 - 2005 - 2006 - 2007 - 2008 - 2009 - 2010 - 2011 - 2012 - 2013 - 2014 - 2015

13th Real-Time Linux Workshop from October 20 to 22 at the Faculty of Electrical Engineering, Czech Technical University in Prague

Announcement - Hotels - Directions - Agenda - Paper Abstracts - Presentations - Registration - Abstract Submission - Sponsoring - Gallery

A Status Report on REACT, a Control Engine that runs on top of GNU Linux for Creating SCADA and DCS Systems

Don Carr, Zapopan, Mexico

REACT is written in C/C++, and is a project that was started in about 2002 for Masters students at the University of Guadalajara, Mexico. The design was based on the experience of the author on large SCADA systems for natural gas pipelines, natural gas distribution systems, and water distribution systems, software for testing military, industrial, and light vehicle transmissions, and research on control systems in general. REACT was designed as a general purpose control engine to scale similar to how GNU Linux scales: from tiny embedded devices in the field, all the way up to large computers. Thus, REACT can run as the central software on a server as a SCADA system, and can also run on small hardened devices as the software for an RTU, or DCS controller. It can be installed on a PC with data acquisition card to control an instrument or small machine. The first project it was used for, by chance, was to control and analyze data for an instrument for liquid chromatography with robotic system for changing samples.

Recent work has been to improve scalability,  moving the configuration to SQLite from delimited text files, and adding various data logging types. We are in the process developing a code generator to generate code / configuration for REACT running on a remote device, the web interface on a server that receives field the field data, and the. We are in the process of moving all control points (objects) to be loaded as shared objects using the dynamic linking loader API: dlopen(), dlclose(), dlsym(), dlerror(). This will keep the size down on tiny embedded systems as we will only need to load the point types required. We have previously moved the data acquisition / protocol drivers to load as shared objects.