Skip to main content

Crate fmi_export

Crate fmi_export 

Source
Expand description

§fmi-export

github crates.io docs.rs build status

A Rust interface to FMUs (Functional Mockup Units) that follow the FMI Standard. This crate provides necessary interfaces and utilities to construct FMUs.

This crate is part of rust-fmi.

See http://www.fmi-standard.org

§Quick start: export an FMU

  1. Define a cdylib model crate and derive FmuModel:
use fmi_export::FmuModel;

#[derive(FmuModel, Default, Debug)]
struct MyModel {
    #[variable(causality = Output, start = 1.0)]
    y: f64,
}
  1. Export FMI symbols:
fmi_export::export_fmu!(MyModel);
  1. Bundle the FMU with xtask:
cargo run --package xtask -- --package my-model bundle

§Building FMUs

This repository builds FMI 3.0 FMUs from pure Rust code. The FMI API interfacing boilerplate is generated with the FmuModel derive macro. Automated packaging is handled by an xtask module.

§Minimal FMU setup

Your FMU crate must:

  • Be a cdylib:
[lib]
crate-type = ["cdylib"]
  • Derive FmuModel for your model struct
  • Export FMI symbols via export_fmu!

Example skeleton:

use fmi_export::FmuModel;

#[derive(FmuModel, Default, Debug)]
struct MyModel {
    #[variable(causality = Output, start = 1.0)]
    y: f64,
}

fmi_export::export_fmu!(MyModel);

§Build an FMU (this repo)

From the repository root:

cargo run xtask -- --package can-triggered-output bundle

The FMU zip is written to:

target/fmu/<model_identifier>.fmu

<model_identifier> is the Rust cdylib target name (for can-triggered-output, this is can_triggered_output).

§Common options

  • Build a release FMU:
cargo run --package xtask -- --package can-triggered-output bundle --release
  • Build for a specific target:
cargo run --package xtask -- --package can-triggered-output bundle --target x86_64-unknown-linux-gnu

§License

Licensed under either of

at your option.

§Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

§Feature flags

  • fmi3 (enabled by default) — Enable support for FMI 3.0

Modules§

fmi3
Architecture

Macros§

checked_deref_cs
Safely dereferences an FMI instance pointer for Co-Simulation instances with wrapper context.
checked_deref_me
Safely dereferences an FMI instance pointer for Model Exchange instances.
dispatch_by_instance_type
Dispatches a method call based on the runtime instance_type. This is used for Common trait methods that must work for any instance type (ME/CS/SE).
export_fmu
Main macro for exporting an FMI 3.0 model as a shared library.
generate_getset_functions
Generates getter and setter functions for FMI3 data types.
wrapper_getset_functions

Derive Macros§

FmuModel
FmuModel derive reference