#model #ode #fmu #fmi #modelica #api-bindings

fmu-runner

A high level Rust wrapper for executing FMU's that follow the FMI 2.0 standard

7 unstable releases (3 breaking)

0.4.2 Jul 15, 2024
0.4.1 Mar 6, 2024
0.4.0 Oct 18, 2023
0.3.0 Oct 17, 2023
0.1.1 Oct 10, 2023

#69 in Simulation

Download history 105/week @ 2024-04-03 247/week @ 2024-04-10 99/week @ 2024-04-17 219/week @ 2024-04-24 94/week @ 2024-05-01 34/week @ 2024-05-08 129/week @ 2024-05-15 225/week @ 2024-05-22 372/week @ 2024-05-29 449/week @ 2024-06-05 524/week @ 2024-06-12 199/week @ 2024-06-19 308/week @ 2024-06-26 214/week @ 2024-07-03 225/week @ 2024-07-10 147/week @ 2024-07-17

904 downloads per month

MIT/Apache

93KB
2.5K SLoC

Rust FMU Runner library

Crates.io Documentation Crates.io

A high level Rust wrapper for executing FMU's that follow the FMI 2.0 standard.

This library contains bindings to the fmi-standard and offers a high-level, safe API for unpacking, parsing, loading and executing FMU's.

Example

use std::{collections::HashMap, path::Path};
use fmu_runner::{Fmu, FmuInstance, fmi2Type};

let fmu = Fmu::unpack(Path::new("./tests/fmu/bouncing_ball.fmu"))?
    .load(fmi2Type::fmi2CoSimulation)?;

let fmu_cs = FmuInstance::instantiate(&fmu, true)?;
let signals = fmu_cs.lib.variables();

fmu_cs.setup_experiment(0.0, None, None)?;

// Set initial height to 10m.
fmu_cs.set_reals(&HashMap::from([(&signals["h_start"], 10.0)]))?;

// Initialize model.
fmu_cs.enter_initialization_mode()?;
fmu_cs.exit_initialization_mode()?;

// Step model 1 second.
fmu_cs.do_step(0.0, 1.0, true)?;

// Get the current height.
let outputs = fmu_cs.get_reals(&[&signals["h_m"]])?;
println!("{}", fmu_runner::outputs_to_string(&outputs));

Dependencies

~8–18MB
~247K SLoC