Category Archives: Programming


FMI4cpp is a brand new FMI 2.0 implementation for C++.  It has been written from the ground up in modern C++. The API is very similar to FMI4j.

All dependencies are available through vcpkg.

#include <iostream>
#include <fmi4cpp/fmi2/fmi4cpp.hpp>

using namespace fmi4cpp::fmi2;

const double stop = 10.0; 
const double stepSize = 1.0/100;

int main() {

    import::Fmu fmu("path/to/fmu.fmu");
    auto slave = fmu.asCoSimulationFmu().newInstance();

    auto md = slave->getModelDescription();    
    auto var = md.getVariableByName("myVar").asReal();

    double t;
    double value;
    while ( (t = slave->getSimulationTime()) <= stop) {
        if (slave->doStep(stepSize)!= fmi2OK) {

        if (var->read(*slave, value) != fmi2OK) {
        std::cout << << "=" << value << std::endl;

Gradle plugin for FMI

I have published an Grade plugin for simplifying programmatic interaction with FMUs. The plugin is powered by FMI4j, which is compatible with FMI 2.0 for Co-simulation and Model Exchange.

Among other things, the plugin generates type safe getter and setters for all FMU variables – grouped by causality.
It also generates javadoc based on the information found in the modelDescription.xml.

FmiSimulation instance = ControlledTemperature.newInstance();

instance.init(); //throws on error

//Variables are grouped by causality and have types!
RealVariable tempRef = instance.getOutputs().temperature_Reference();

double stop = 10.0;
double stepSize = 1E-2;
while (instance.getSimulationTime() <= stop) {

  if (!instance.doStep(stepSize)) {

  FmuRead<Double> read =;
  System.out.println( + "=" + read.getValue());



To add it to your project, simply add the following code to your build.gradle

plugins {
  id "no.mechatronics.sfi.fmi4j.FmuPlugin" version "0.4.1"

The plugin will automatically add the required FMI4j dependency to your project.