A third-party Simulink tool to generate FMUs from models using the C-API
Switch branches/tags
Clone or download
Kvixen Merge pull request #22 from Kvixen/license_clarification
Clarifying license of FMU generated by Simulix
Latest commit 137694b Oct 15, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github/ISSUE_TEMPLATE Pushing for public repo Jul 10, 2018
compile-tools New features and bug fixes (cross compile still being worked on) Aug 10, 2018
includes
libraryincludes Add license to Dllmain.c and include license in FMU docs Oct 15, 2018
licenses Add license to Dllmain.c and include license in FMU docs Oct 15, 2018
resources Updated Read Me Jul 11, 2018
templates
.gitignore Gitignore changes Jul 12, 2018
LICENSE More progress on cross compile and freatures Aug 9, 2018
README.md Fix typo: python --> pip Sep 19, 2018
Simulix.py Added flag for building binaries in debug vs release Sep 10, 2018
build.py
content-builder.py Add license to Dllmain.c and include license in FMU docs Oct 15, 2018
crosscompile.py New features and bug fixes (cross compile still being worked on) Aug 10, 2018
pack.py Fix model name detection Sep 12, 2018
requirements.txt
unpack.py Add license to Dllmain.c and include license in FMU docs Oct 15, 2018

README.md

Simulix

FMU builder for Simulink models using the C-API.

Content

License

GNU GPL V.3

Simulix generates an FMU from a simulink model source code.

Copyright (C) 2018 Scania CV AB and Simulix contributors

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Usage

Download and Installation

Windows

Dependencies

To use Simulix, you will need the following

Windows Installation

In order to use Simulix you can either

  1. Clone the GitHub repository via git:

    git clone https://github.com/Kvixen/Simulix.git
    cd Simulix
    pip install -r requirements.txt

Linux

Linux Dependencies

To use Simulix, you need the following

  • Python 3
    • Lxml - Python package
  • CMake

Optional for cross compiling to Windows

  • mingw-w64

Linux Installation

  1. Install the dependencies:

    sudo apt-get --assume-yes python
    sudo apt-get --assume-yes cmake
  2. (OPTIONAL) If you want to be able to cross compile:

    sudo apt-get --assume-yes mingw-w64
  3. Clone the github repository:

    git clone https://github.com/Kvixen/Simulix.git
    cd Simulix
    pip install -r requirements.txt

Exporting your model from Simulink

In order for Simulix to function correctly, the correct code generation options need to be selected in Simulink.

Options

In Simulink, the code generation options are located under Code, C/C++ Code, Code Generation Options.

CodeG_list CodeG

In Code Generation, under Target selection, make sure that System target file is set to grt.tlc and that Language is set to C.

Under Build process, select Package code and artifacts. You can also fill in the name of the zip file that will be generated. If the field is left empty, the zip file will have the name of the Simulink model.

Interface_list Interface

In the submenu Interface to Code Generation, make sure all boxes for C API generation are ticked.

To build your model, simply press Ctrl+B on your keyboard.

Running Simulix

Simulix comes with certain flags

Requires Arguments:

  • ZN: Positional argument for name of zipfile
  • -p : Path for generating files and build folder
  • -t : Path to templates and includes folders (if not Simulix installation folder)
  • -zp: Path to zipfile
  • -m : Makefile program
  • -f : Build folder name
  • -e : Path to extension
  • -tf: Name of temp folder

Just specify flag, not arguments:

  • --DEBUG_BUILD: Do not build release configuration, but build debug configuration
  • --ONLY_BUILD : Do not regenerate files, only build existing
  • --NO-TEMP : Do not delete the temp folder
  • --NO-CMAKE : Do not execute CMAKE
  • --NO-MAKE : Do not execute MAKE program

Here are some examples of executing Simulix

The model zip file is called example.zip and exists in the current directory

Simulix.py example

The model zip file exists in a subfolder called zip and I want to build in a subfolder called generated

mkdir generated
Simulix.py example -p generated -zp zip

Extensions

With Simulink, there's a lot of toolboxes. Instead of waiting around for support of a special toolbox you can temporary do your own.

With our program, you can supply a path to your extension with the model when building. This extension can provide additional information and replace our template files.

In order to use it, make a new folder containing a extension.py file. This is the only required step. If this file exists, even if it's empty, the extension will be recognized.

With an extension, you can use certain functions inside extension.py that will be called.

get_template_info(replace_dict):
    return replace_dict

If this function exist, the dict Simulix uses to generate template files will be passed so you either can log the variables, change them or remove them.
In order for this to take effect, you have to return the replace_dict after your changes.

With an extension, you can also modify Simulix template files. If a template file is found inside the extension in a templates folder, Simulix will default to that template file. An example of an extension can look something like this

extension.py

get_template_info(replace_dict):
    replace_dict['TEXT_STRING'] = "Hello World"
    return replace_dict

templates/CMakeLists_template.txt

message(STATUS {TEXT_STRING})

Because we are using pythons format function on the entire file, to use brackets without replacing anything and without raising a KeyError error, use double brackets. An example can look like this

templates/CMakeLists_template.txt

set(STRING_VARIABLE {TEXT_STRING})
message(STATUS ${{STRING_VARIABLE}})

This will produce the CMakeLists file like so

ModelDir/CMakeLists.txt

set(STRING_VARIABLE "Hello World")
message(STATUS ${STRING_VARIABLE})

WIKI

Wiki pages are coming soon, so we can have less clutter in the read-me. This is not top-priority, but I promise, soon™.

Currently Work In Progress

Almost everything in this project is currently work in progress, even the project name. Feel free to contribute all you want.

Support

While we are in Alpha, we will list what we are currently supporting.

✓: We currently support this software/OS

✕: We currently do not support this software/OS

?: We are currently not able to test Simulix on this software and are unable to determine if we support it or not.

  • Windows
    • 32-bit: ✕
    • 64-bit: ✓
  • Linux: ✓
  • macOS: ?