Aeon HACS
General Description
Aeon's Hardware Automation Control System (HACS) is an open source (GPL3) software framework specifically designed for automating vacuum-based gas-sample processing systems. The host software is written in C# using Microsoft Visual Studio. Embedded firmware on related micro-controller-based devices is written in Zilog C, and is also open source (GPL3).
Architecture
A HACS application comprises four key architectural elements:
- Settings File
System configuration and state, component interconnections, constants, device parameters are all stored in a human-readable text file, settings.xml. In operation, this file is dynamically updated with the current system state every half-second. (See example settings.xml)
- Process Manager
Defines and implements a dictionary of process steps, each of which can monitor system conditions and control devices to achieve its objectives. The Process Manager can also execute "ProcessSequences", which are saved lists of process steps, typically used to run a sample. (example process code)
- User Interface
Provides interactive, manual operator control of the individual system devices, and the ability to execute automated processes and run sample process sequences. (example User Interface display)
- HACS Components
This rich selection of "canned" classes provides an intuitive, relatively natural-language interface to the hardware, allowing process code to be easy to construct and follow. Most system developers never need to write or edit these classes.
What is the development process?
Ideally, the hardware should be designed (and preferably, assembled, or mostly so) before beginning the software effort. Software development of a new system generally follows a "cut-n-paste, edit" paradigm:
- Edit an example Settings File. Identify your devices, fill in their properties and interconnections, and describe the physical configuration of the Chambers, Sections, GasSupplies, and so on, according to your design. Guidance for modeling your system in HACS is available on this page.
- Create a new ProcessManager-based class, starting from a copy of a class that derives from CEGS.cs or some other top-level ProcessManager. Follow the pattern from the copied class to create and connect your named devices. Make some entries in the BuildProcessDictionary() method and start writing some simple processes.
- Prepare a bitmap image of the system layout and insert it into an example UserInterface class. Arrange copies of the various user interface control and indicator objects (valves, temperature displays, etc.) to overlay your system diagram. Edit the properties of the added controls and indicators to reflect their function or purpose. In the UserInterface code, connect your named ProcessManager devices to the displayed control and indicator objects.
- Build and run the application, test each device's functionality, and ensure that the process control system works properly. Develop additional processes as needed. Construct ProcessSequences for each desired sample type or run profile.