File Exchange

image thumbnail

EnergyPlus Co-simulation Toolbox

version (73.6 MB) by Jiri Dostal
Co-simulation of EnergyPlus models in Matlab/Simulink.


Updated 20 Feb 2020

GitHub view license on GitHub

The toolbox facilitates simultaneous simulation of EnergyPlus and Matlab (co-simulation). The main component is the mlep class containing all the necessary tools to configure and run EnergyPlus co-simulation within the Matlab environment.

System Requirements
* Windows. The toolbox has only been tested for Windows, but considerable preparations for other OS has already been done.
* EnergyPlus installed. You can obtain the software here If you install the EnergyPlus to the default location ('C:\EnergyPlusVx-x-x') then it might be detected automatically by the toolbox.

Obtain a copy of the toolbox from
* Matlab Add-on Manager
* or Mathworks File Exchange
* or a GitHub repository
and install.

The toolbox contains:

* Parsing of the IDF file to determine co-simulation inputs/outputs.
* Automatic socket communication configuration (on localhost).
* Background start of the EnergyPlus process with an output to the Matlab command line.
* System Object implementation usable in Matlab & Simulink.
* Bus input/output integration for easy Simulink model setup.

See the GettingStarted.mlx guide delivered with the Matlab toolbox or the documentation residing under Help -> Supplemental Software -> EnergyPlus co-simulation toolbox

* Always be sure that EnergyPlus itself is working. To check run "EP-Launch.exe" from the EnergyPlus installation folder and try running one of its examples (located at <EP folder>/ExampleFiles/).
* If you have issues with "EnergyPlus not found." run "setupMlep.m".
* If you have an issue with a "Vector to Bus" block not having its bus types correctly specified, run the model again. Bus objects should now be in the workspace and it should work.

Copyright (C) 2019, Jiri Dostal (
All rights reserved.

This software builds on the free software by Truong Nghiem(, Willy Bernal ( and several other third-party open-source tools.

Cite As

Dostal, Jiri, and Tomas Baumelt. “Model Predictive Control for Buildings with Active One-Pipe Hydronic Heating.” E3S Web of Conferences, edited by S.I Tanabe et al., vol. 111, EDP Sciences, 2019, p. 04050, doi:10.1051/e3sconf/201911104050.

View more styles

Comments and Ratings (15)

Reza Mokhtari

Thanks so much, it so very useful.
I'm really grateful for implementing this simple bridge between EnergyPlus and MATLAB in order to create vast oportunities to work on.

Zahra Rahimpour

Lu Yiqing


Timotius Kelvin

Sun Ho Kim


Hi, I have not been able to run the MATLAB example file, mlepMatlab_example.m, without having Simulink installed.

When I installed a free trial of Simulink on 2019b, the MATLAB example file worked fine. However, my 2018b license that does not have Simulink will not run mlepMatlab_example.m.

It looks like the toolbox makes several function calls that require Simulink to be installed. Examples that I have seen are get_param and bdroot.

Is it possible to use this toolbox without Simulink installed? How might I get it working on my 2018b license?

Thank you

ZHENG Zhuang

By the way, I am still confused with communication part, especially the usage of Socket.cfg... I would be grateful if you explain it a bit for me. Thanks!

ZHENG Zhuang

Rui Guo

Chirath Pathiravasam

Jiri Dostal

@PaulaVanDenBrom I haven't found myself in such a need so far. Do you need to co-simulate multiple buildings simultaneously? With my only limited knowledge of parallelization, I don't find an extension for parfor trivial. What about having multiple buildings side-by-side in Simulink? I haven't tested this yet, to be honest, but that is one feature I'd like to work! So, be sure to let me know. EnergyPlus simulation is running in a separate OS process. Simulation of several buildings would result in several EnergyPlus processes. And the OS is responsible for loading multiple computation cores (how it does that? I don't have the slightest idea).

Paula van den Brom

Is it possible to convert this code into a parfor loop?

Paula van den Brom

Jiri Rehor


added short Troubleshooting section in this description.


Updated IDF files to EnergyPlus 9.2 version.
Followed Upgrade advisor to remove "not recommended" Matlab commands.
Fixed some documentation bugs.
Fixed a bug for ExternalInterface:Actuator.


* minor bug in ExternalInterface:Actuator & ExternalInterface:Variable. Working now as intended.


* updated examples to EnergyPlus version 9.1.0
* disabled IDF simulation with mismatching EnergyPlus version.
* updated simulink models to Matlab r18b. It can still be simulated by older Matlab (enable this in Simulink preferences).
* minor fixes

* corrected a bug in the setup routine. Made first time use through Simulink end in a neverending loop.
* extended communication timeouts to accommodate for larger EP simulations


Added better documentation


### Added
* Load and Save routines.

### Changed
* Bus objects are now loading in the Init function callback. It should solve
the '_Missing Bus objects_' issues.
* Optimized IDF file parsing speed.
* Initialization no longer triggered fro

* compatibility issues in r18b

forgot to add the update binary


* using Matlab's internal JRE instead of searching for external one.


* Bus objects now support signal names longer than 63 characters.
* Simulation and initialization are now considerably faster.
* A Vector to Bus block added.
* Browse buttons in the Simulink block mask.


Adding the binary to the repository code. Hopefully, the Matlab Add-on Explorer will detect it now.


Adding further info. Mainly for manual toolbox installation (The binary is obtainable at GitHub)

MATLAB Release Compatibility
Created with R2019b
Compatible with R2017a to any release
Platform Compatibility
Windows macOS Linux