Project under active development
Process Dynamics Engine (PDE) is an online, real-time simulator for process control models described by transfer functions or state space representations. PDE is implemented in Python and uses the Python Control Systems Library. Users can interact with the simulation by using an API to send control actions (e.g. increasing a reflux rate or shutting off a valve) and query process variables like temperature and pressure. PDE is intended to be an educational tool in chemical engineering process control courses.
Real world processes can be organized by the hierarchy of process controls as shown in the pyramid below. The plant is at the base layer, followed by the measurements layer with sensors and transmitters and a controls layer using consoles or panels with either manual operator control or automated loops.
Source: https://en.wikipedia.org/wiki/Process_control
TODO: update diagram
The design of PDE mimics real world processes with an Engine component that runs the simulation (Plant) and a Graphics component (Panel) for visualizing and manipulating process variables. Users can also interact with the simulation through the Graphics component or directly with the Engine's API.
PDE design notes:
- Supports concurrent simulations by offloading computations to background workers
- Supports simple SISO models or complex MIMO models
- Graphics are decoupled from Models
- Containerized and scalable
The development of PDE is funded by a University of British Columbia Teaching and Learning Enhancement Fund (TLEF) 2018/2019 grant.
Project under active development, please wait for stable version.
- Clone repository
git clone https://github.com/OpenChemE/Process-Dynamics-Engine.git
- Install package
pip install .
- Navigate to the repository in your folder and try importing the Wood-Berry distillation model (See the Toy Model notebook)
import pde
from models.distillation_models import WoodBerry
- Create a simulation from the model
distillation = pde.Simulation(WoodBerry(), uid='0')
distillation.activate()
- Step through the simulation
distillation.step()