#[derive(FmuModel)]
{
// Attributes available to this derive:
#[model]
#[variable]
#[alias]
#[child]
}
Expand description
§FmuModel derive reference
§Struct-level attributes
Use #[model(...)] on the struct to configure the generated FMI interfaces and
metadata.
ⓘ
#[derive(FmuModel, Default)]
#[model(
description = "Example FMU",
model_exchange = true,
co_simulation = false,
scheduled_execution = false,
user_model = true,
)]
struct MyModel {
#[variable(causality = Output, start = 1.0)]
y: f64,
}Supported keys:
description: Optional string. Defaults to the struct docstring if omitted.model_exchange: Optional bool. Defaults totrue.co_simulation: Optional bool. Defaults tofalse.scheduled_execution: Optional bool. Defaults tofalse.user_model: Optional bool. Defaults totrue. Setfalseto provide your ownimpl UserModel.
Notes:
- All boolean flags must be explicit (
co_simulation = true). Shorthandco_simulationis rejected. #[model()]with no arguments is valid and uses the defaults above.
§Field-level attributes
Use #[variable(...)] to include a field as an FMI variable. Use #[alias(...)]
for additional aliases. Both attributes accept the same keys.
ⓘ
#[derive(FmuModel, Default)]
struct MyModel {
/// Height above ground
#[variable(causality = Output, start = 1.0)]
h: f64,
/// Velocity of the ball
#[variable(causality = Output, start = 0.0)]
#[alias(name = "der(h)", causality = Local, derivative = h)]
v: f64,
}Supported keys for #[variable(...)] and #[alias(...)]:
skip: Bool. Whentrue, the field is ignored for FMI variables.name: String. Overrides the variable name (defaults to the field name).description: String. Overrides the field docstring.causality: One ofParameter,CalculatedParameter,Input,Output,Local,Independent,Dependent,StructuralParameter.variability: One ofConstant,Fixed,Tunable,Discrete,Continuous.start: Rust expression used as the start value.initial: One ofExact,Calculated,Approx.derivative: Ident referencing another field. Marks this variable as the derivative of that field.event_indicator: Bool. Whentrue, counts toward the FMI event indicator total.interval_variability: One ofConstant,Fixed,Tunable,Changing,Countdown,Triggered.clocks: List of clock field idents that this variable belongs to.max_size: Integer. Max size for Binary variables.mime_type: String. MIME type for Binary variables.
Notes:
- Continuous state variables are inferred by
derivativerelationships. clocksmust reference clock variables in the same model. The generated FMU resolves these to value references.
§Child components
Use #[child(...)] to reuse another FmuModel as a component and prefix its
variable names.
ⓘ
#[derive(FmuModel, Default)]
struct Parent {
#[child(prefix = "bus")]
bus: CanBus,
}Supported keys:
prefix: Optional string. Defaults to the field name. Child variables are named<parent_prefix><prefix>.<child_variable>.
Notes:
- Child fields should implement the
Modeltrait (typically viaFmuModel). #[child]only affects naming and metadata; it does not change runtime behavior of the child component. Main derive macro for FMU models
§Example
ⓘ
use fmi_export::FmuModel;
/// Simple bouncing ball model
#[derive(FmuModel, Default)]
#[model()]
struct BouncingBall {
/// Height above ground (state output)
#[variable(causality = Output, start = 1.0)]
h: f64,
/// Velocity of the ball
#[variable(causality = Output, start = 0.0)]
#[alias(name="der(h)", causality = Local, derivative = h)]
v: f64,
}