Builder - Simulation Development Platform

Synopsis

Containerised simulation builder and supporting DSE Language (DSE Lang).

Describe a Simulation

simulation arch=linux-amd64
channel network

uses
dse.fmi https://github.com/boschglobal/dse.fmi v1.1.32

model fmu_CAN dse.fmi.network_model
    channel network network_channel

workflow generate-model
    var NETWORK_SIGNAL can_bus
    var MIME_TYPE "application/x-automotive-bus;interface=stream;type=frame;bus=can;schema=fbs;bus_id=1;node_id=2;interface_id=3"
    var MEASUREMENT measurement.txt
    var OUT_DIR {{.PATH}}/data

workflow generate-fmimodelc
    var FMU_NAME example
    var SIGNAL_GROUPS network

Use the Builder Tool

# Build a simulation.
$ cd examples/runnable
$ builder runnable.dse
$ task -y

Run the Simulation

# Run a simulation.
$ simer out/sim -stepsize 0.0005 -endtime 0.10

DSE Lang

Simulations using the Simulation Development Platform (SDP) are written in a custom DSL language: colloquially called ‘DSE Lang’. This language is used to describe the construction of a simulation and its constituent channels, models and workflows.

Simulation

simulation [arch=ARCH]
[channel CHANNEL_NAME] ...
  • ARCH: the architecture of the overall simulation. Select from supported platforms, including:
    • linux-amd64
    • linux-x86
    • linux-i386
    • windows-x64
    • windows-x86
  • CHANNEL_NAME: the name of a simulation channel. Repeat for each channel of the simulation.

Uses

uses
[USES_NAME URI [VERSION] [path=PATH] [user=USER] [token=TOKEN]] ...
  • USES_NAME: the name of the uses item.
  • URI: a URI for the uses item. May be a URL or file.
  • VERSION: the version of the uses item.
  • PATH: a sub-path of the uses item (incase the item should be extracted from a ZIP archive).
  • USER: authentication user needed for retrieving the _uses_item.
  • TOKEN: authentication token (or password) needed for retrieving the _uses_item.

Stack

stack STACK_NAME [arch=ARCH]
  • STACK_NAME: the name of the stack.
  • ARCH: the architecture of this stack and the models it contains.

Model

model MODEL_INST_NAME MODEL_NAME [arch=ARCH]
[channel CHANNEL_NAME CHANNEL_ALIAS] ...
  • MODEL_INST_NAME: the name of the model (used within the simulation).
  • MODEL_NAME: the name of the model as referenced by a uses item.
  • ARCH: the architecture of this model.
  • CHANNEL_NAME: the name of a simulation channel to be mapped to this model.
  • CHANNEL_ALIAS: the model alias for the channel being mapped.

Workflow

Workflow WORKFLOW_NAME
[var VAR_NAME VAR_VALUE] ...
[var VAR_NAME uses USES_NAME] ...
  • WORKFLOW_NAME: the name of the workflow.
  • VAR_NAME: the name of a variable used by this workflow.
  • VAR_VALUE: the variable value.
  • USES_NAME: sets the variable value to the path of this uses item.

Special Variables

DSE Lang uses a templating mechanism to introduce special variables to a DSE Script. Those variables are used to influence how a simulation is constructed. Additionally, the templating mechanism can be used to introduce environment variables to a DSE Script (useful for authentication).

{{.ENV_VAR}} : Expands to the named ENV_VAR.

{{.MODEL}}
When used within the context of a model expands to the models name (i.e. MODEL_INST_NAME).
{{.OUTDIR}}
The output directory of the SDP toolchains (typically out). Contains the simulation folder.
{{.PATH}}
When used within the context of a model expands to the models path within the simulation filesystem (set to SIMDIR/MODEL_INST_NAME).
{{.SIMDIR}}
The simulation folder (typically sim).

Builder Tool

Info: The Builder Tool is already setup and configured in both GitHub Codespaces and Dev Containers environments.

Setup

The SDP Builder is a containerized tool which can be configured and used in a Linux environment. The following container images are available.

# Latest Builder Container:
$ docker pull ghcr.io/boschglobal/dse-builder:latest

# Specific versions of the Builder Container
$ docker pull ghcr.io/boschglobal/dse-builder:1.0.4
$ docker pull ghcr.io/boschglobal/dse-builder:1.0

Shell Function

TODO: This section needs to be updated.

# Define a shell function (or add to .profile file).
$ export BUILDER_IMAGE=ghcr.io/boschglobal/dse-builder:latest
$ builder() { ( if test -f "$1"; then cd $dirname("$1") && shift; fi && docker run -it --rm -v $(pwd):/workdir $BUILDER_IMAGE "$@"; ) }

# Build the simulation.
$ builder examples/runnable/runnable.dse

Authentication

TODO: This section needs to be updated.