Skip to content

DHALSIM Prototype with enhanced features and experimental Epynet support

Compare
Choose a tag to compare
@afmurillo afmurillo released this 25 Jun 08:34
· 1143 commits to master since this release

This new version of the Digital Twin for Water Distribution Systems provides more example topologies and adds additional information handled by the SCADA nodes in the topologies. In addition, DHALSIM-epynet is used for one example topology instead of WNTR.

This software is developed by the Singaporean National Satellite of Excellence Project "Learning from Network and Process data to secure Water Distribution Systems" from the SUTD Resilient Water Systems Group and iTrust. In addition, Davide Salaorni, Master's student from Politecnico de Milano has developed DHALSIM-epynet as an experimental hydraulics simulator. DHALSIM-epynet is a wrapper around EPANET 2.2 fully supported in Python.

This version introduces some changes from the August version:

  • DHALSIM uses now .yaml files to describe network and device attacks. Some basic attacks are supported.
  • The beginning and ending of attacks is controlled by the physical process module, that contains the "master clock" of a DHALSIM experiment
  • SCADA nodes now receive not only the tank levels, but also pump/valves flows, and some junctions pressure
  • The enhanced_ctown_topology uses epynet instead of WNTR to simulate the hydraulic process. Epynet follows more closely a step-by-step simulation in EPANET 2.2

This is the last release before DHALSIM1.0 is released. DHALSIM 1.0 is a major change for DHALSIM and will fully support an automatic parser for epanet INP file, better documentation, and an installation script that automatically deploys the digital twin.

DISCLAIMER: This version requires an upgraded version of MiniCPS that still is pending merging with the main MiniCPS repository, this version can be found here: https://github.com/afmurillo/minicps This version extends the devices class to provide to new methods for the ENIP protocol: send_multiple and receive_multiple. These methods enable a PLC to send/receive multiple tags at the same time