Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/modelica/Reference-FMUs
Functional Mock-up Units for development, testing and debugging
https://github.com/modelica/Reference-FMUs
fmi fmi-standard hacktoberfest
Last synced: 3 months ago
JSON representation
Functional Mock-up Units for development, testing and debugging
- Host: GitHub
- URL: https://github.com/modelica/Reference-FMUs
- Owner: modelica
- License: other
- Created: 2020-01-13T14:56:46.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2024-08-02T13:07:26.000Z (3 months ago)
- Last Synced: 2024-08-02T13:55:54.500Z (3 months ago)
- Topics: fmi, fmi-standard, hacktoberfest
- Language: C
- Homepage:
- Size: 1.37 MB
- Stars: 133
- Watchers: 24
- Forks: 60
- Open Issues: 44
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-fmi - Reference-FMUs - simulation features such as scheduled co-simulation and early return in co-simulation. (FMI 3 / Tools)
README
# Reference FMUs
A set of hand-coded FMUs for development, testing and debugging of the [Functional Mock-up Interface](https://fmi-standard.org/).
- [BouncingBall](BouncingBall) - a bouncing ball model with state events
- [Dahlquist](Dahlquist) - Dahlquist test equation
- [Feedthrough](Feedthrough) - all variable types
- [Resource](Resource) - load data from a file
- [Stair](Stair) - a counter with time events
- [StateSpace](StateSpace) - arrays and structural parameters
- [VanDerPol](VanDerPol) - Van der Pol test equationUse the [fmusim](fmusim) executable to simulate an FMU:
```commandline
> fmusim --help
Usage: fmusim [OPTION]... [FMU]
Simulate a Functional Mock-up Unit and write the output to result.csv.--help display this help and exit
--interface-type [me|cs] the interface type to use
--tolerance [TOLERANCE] relative tolerance
--start-time [VALUE] start time
--stop-time [VALUE] stop time
--output-interval [VALUE] set the output interval
--start-value [name] [value] set a start value
--output-variable [name] record a specific variable
--input-file [FILE] read input from a CSV file
--output-file [FILE] write output to a CSV file
--log-fmi-calls log FMI calls
--fmi-log-file [FILE] set the FMI log file
--solver [euler|cvode] the solver to use
--early-return-allowed allow early return
--event-mode-used use event mode
--record-intermediate-values record outputs in intermediate update
--initial-fmu-state-file [FILE] file to read the serialized FMU state
--final-fmu-state-file [FILE] file to save the serialized FMU stateExample:
fmusim BouncingBall.fmu simulate with the default settings
```You can download the pre-built Reference FMUs and fmusim executables from [releases](https://github.com/modelica/Reference-FMUs/releases).
## CSV file structure
`fmusim` uses CSV (comma separated values) files with the following structure as input and output format.
- The file must be UTF-8 encoded.
- The first line contains the names of the columns.
- Each column name must match a variable name of the respective FMU.
- Names that contain commas (`,`) must be surrounded by double quotes (`"`).
- The first column is the independent variable.
- The values of the first column must be monotonically increasing.
- Every line is terminated by a newline character (`\n`).
- Every column is separated by a comma (`,`).
- Every line must have the same number of columns.
- The values must be stored in the same format as the start values of the respective variables in the `modelDescription.xml`.
- `String` and `Binary` variables can only be scalars or arrays with only one element.
- String values must be surrounded by double quotes (`"`).Example:
```xml
```
```
time,"Float64 array","Boolean array","Binary scalar"
0,1e-2 -1,0 false 1 true,666f6f
0.1,0.02 -2,1 false 0 true,aa6f6f
0.5,0.03 -3,1 true 0 false,66bb6f
```## Repository structure
``
- `config.h` - model specific types and definitions
- `FMI{1CS|1ME|2|3}.xml` - model descriptions
- `model.c` - implementation of the model`include`
- `fmi{|2|3}Functions.h` - FMI header files
- `model.h` - generic model interface
- `cosimulation.h` - generic co-simulation interface`src`
- `fmi{1|2|3}Functions.c` - FMI implementations
- `cosimulation.c` - generic co-simulation`examples`
- `*.c` - various FMI 3.0 import examples
- `Examples.cmake` - CMake configuration for the example projects`fmusim`
- sources of the `fmusim` executable## Build the FMUs
To build the FMUs you need [CMake](https://cmake.org/) and a supported [build tool](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html) e.g. Visual Studio ≥ 2013 , Xcode or make:
- download or clone the repository
- open the [CMakeGUI](https://cmake.org/runningcmake/)
- click `Browse Source...` and select the cloned or downloaded and extracted repository (that contains `CMakeLists.txt`)
- click `Browse Build...` and select the folder where you want build the FMUs
- click `Configure` and select the generator for your IDE / build tool
- select the `FMI_VERSION` you want to build and optionally the `FMI_TYPE` (only for FMI 1.0)
- click `Generate` to generate the project files
- click `Open Project` or open the project in your build tool
- build the project
The FMUs will be in the `dist` folder inside the selected build folder.
## Building fmusim
To build the `fmusim` executable, run the `build/build_*.py ` Python scripts (where `` is the platform to build for, e.g. `x86_64-windows`) and enable `WITH_FMUSIM` before generating the CMake project.
## License and attribution
Copyright © 2023, Modelica Association Project "FMI".
All rights reserved.
The code is released under the [2-Clause BSD License](LICENSE.txt).The [Reference FMUs](https://github.com/modelica/Reference-FMUs) are a fork of the [Test FMUs](https://github.com/CATIA-Systems/Test-FMUs) by Dassault Systèmes, which are a fork of the [FMU SDK](https://github.com/qtronic/fmusdk) by QTronic, both released under the 2-Clause BSD License.