Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WaterTankFI, WaterTankSwap examples #193

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 157 additions & 4 deletions docs/user/examples/examples.drawio
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
<mxfile host="Electron" modified="2023-10-18T15:37:26.172Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/15.8.7 Chrome/91.0.4472.164 Electron/13.6.2 Safari/537.36" etag="wfgJs0YuYlC6-XLanwKg" compressed="false" version="15.8.7" type="device">
<mxfile host="app.diagrams.net" modified="2023-10-20T11:15:35.293Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" etag="usfBLtlsV81qYosFCOUp" compressed="false" version="22.0.5" type="device">
<diagram id="jLFWp5vPmYcwOU4BX7Fm" name="examples">
<mxGraphModel dx="-1292" dy="636" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0">
<mxGraphModel dx="73" dy="478" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0">
<root>
<mxCell id="VsSiiwDWSvhPQYji7nPq-0" />
<mxCell id="VsSiiwDWSvhPQYji7nPq-1" parent="VsSiiwDWSvhPQYji7nPq-0" />
<mxCell id="VsSiiwDWSvhPQYji7nPq-2" value="&lt;font color=&quot;#ff0000&quot; style=&quot;font-size: 14px&quot;&gt;&lt;b&gt;Mass Spring Damper&lt;/b&gt;&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="VsSiiwDWSvhPQYji7nPq-1" vertex="1">
<mxGeometry x="2349.305263157895" y="80" width="187.78947368421055" height="30" as="geometry" />
</mxCell>
<mxCell id="YsSumCsWpL5JwZorpIQ9-1" value="" style="group" vertex="1" connectable="0" parent="VsSiiwDWSvhPQYji7nPq-1">
<mxCell id="YsSumCsWpL5JwZorpIQ9-1" value="" style="group" parent="VsSiiwDWSvhPQYji7nPq-1" vertex="1" connectable="0">
<mxGeometry x="2400" y="150" width="386.1199999999999" height="120" as="geometry" />
</mxCell>
<mxCell id="VsSiiwDWSvhPQYji7nPq-3" value="Maestro" style="rounded=1;whiteSpace=wrap;html=1;" parent="YsSumCsWpL5JwZorpIQ9-1" vertex="1">
Expand Down Expand Up @@ -43,9 +43,162 @@
<mxPoint x="295.0588235294117" y="60" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="YsSumCsWpL5JwZorpIQ9-0" value="MassSpringDamper2.fmu&lt;br&gt;(FMU&lt;sub&gt;2&lt;/sub&gt;)" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="YsSumCsWpL5JwZorpIQ9-1">
<mxCell id="YsSumCsWpL5JwZorpIQ9-0" value="MassSpringDamper2.fmu&lt;br&gt;(FMU&lt;sub&gt;2&lt;/sub&gt;)" style="rounded=1;whiteSpace=wrap;html=1;" parent="YsSumCsWpL5JwZorpIQ9-1" vertex="1">
<mxGeometry x="210" width="176.12" height="40" as="geometry" />
</mxCell>
<mxCell id="-_rG3soVA4n7p6XDSwA1-18" value="&lt;font color=&quot;#ff0000&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;Water Tank Fault Injection&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="VsSiiwDWSvhPQYji7nPq-1" vertex="1">
<mxGeometry x="2799.995263157895" y="80" width="187.78947368421055" height="30" as="geometry" />
</mxCell>
<mxCell id="-_rG3soVA4n7p6XDSwA1-19" value="" style="group" parent="VsSiiwDWSvhPQYji7nPq-1" vertex="1" connectable="0">
<mxGeometry x="2850.69" y="150" width="386.1199999999999" height="120" as="geometry" />
</mxCell>
<mxCell id="-_rG3soVA4n7p6XDSwA1-20" value="Maestro" style="rounded=1;whiteSpace=wrap;html=1;" parent="-_rG3soVA4n7p6XDSwA1-19" vertex="1">
<mxGeometry x="130.41176470588243" y="80" width="104.94117647058825" height="40" as="geometry" />
</mxCell>
<mxCell id="-_rG3soVA4n7p6XDSwA1-21" value="WaterTankController-c.fmu&lt;br&gt;(FMU&lt;sub&gt;1&lt;/sub&gt;)" style="rounded=1;whiteSpace=wrap;html=1;" parent="-_rG3soVA4n7p6XDSwA1-19" vertex="1">
<mxGeometry width="176.12" height="40" as="geometry" />
</mxCell>
<mxCell id="-_rG3soVA4n7p6XDSwA1-22" value="" style="endArrow=none;html=1;rounded=0;" parent="-_rG3soVA4n7p6XDSwA1-19" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="90" y="60" as="sourcePoint" />
<mxPoint x="295.0588235294117" y="60" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="-_rG3soVA4n7p6XDSwA1-23" value="" style="endArrow=none;html=1;rounded=0;" parent="-_rG3soVA4n7p6XDSwA1-19" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="90" y="40" as="sourcePoint" />
<mxPoint x="90" y="60" as="targetPoint" />
<Array as="points">
<mxPoint x="90" y="40" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="-_rG3soVA4n7p6XDSwA1-24" value="" style="endArrow=none;html=1;rounded=0;exitX=0.375;exitY=1.057;exitDx=0;exitDy=0;exitPerimeter=0;" parent="-_rG3soVA4n7p6XDSwA1-19" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="182.55441176470595" y="60.27999999999997" as="sourcePoint" />
<mxPoint x="182.88235294117658" y="80" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="-_rG3soVA4n7p6XDSwA1-25" value="" style="endArrow=none;html=1;rounded=0;exitX=0.375;exitY=1.057;exitDx=0;exitDy=0;exitPerimeter=0;" parent="-_rG3soVA4n7p6XDSwA1-19" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="294.7308823529411" y="40.27999999999997" as="sourcePoint" />
<mxPoint x="295.0588235294117" y="60" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="-_rG3soVA4n7p6XDSwA1-26" value="SingleWaterTank-20sim.fmu&lt;br&gt;(FMU&lt;sub&gt;2&lt;/sub&gt;)" style="rounded=1;whiteSpace=wrap;html=1;" parent="-_rG3soVA4n7p6XDSwA1-19" vertex="1">
<mxGeometry x="210" width="176.12" height="40" as="geometry" />
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-0" value="&lt;font color=&quot;#ff0000&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;Water Tank Swap&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="VsSiiwDWSvhPQYji7nPq-1">
<mxGeometry x="2189.995263157895" y="320" width="187.78947368421055" height="30" as="geometry" />
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-1" value="" style="group" vertex="1" connectable="0" parent="VsSiiwDWSvhPQYji7nPq-1">
<mxGeometry x="2220" y="360" width="350" height="120" as="geometry" />
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-2" value="Maestro" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="qCe7d7aQyTPKSx8LoRMt-1">
<mxGeometry x="118.2122595230987" y="80" width="95.12434415390526" height="40" as="geometry" />
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-3" value="WaterTankController-c.fmu&lt;br&gt;(FMU&lt;sub&gt;1&lt;/sub&gt;)" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="qCe7d7aQyTPKSx8LoRMt-1">
<mxGeometry width="159.64467005076148" height="40" as="geometry" />
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-4" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="qCe7d7aQyTPKSx8LoRMt-1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="81.58085569253085" y="60" as="sourcePoint" />
<mxPoint x="267.45723670178734" y="60" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-5" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="qCe7d7aQyTPKSx8LoRMt-1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="81.58085569253085" y="40" as="sourcePoint" />
<mxPoint x="81.58085569253085" y="60" as="targetPoint" />
<Array as="points">
<mxPoint x="81.58085569253085" y="40" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-6" value="" style="endArrow=none;html=1;rounded=0;exitX=0.375;exitY=1.057;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="qCe7d7aQyTPKSx8LoRMt-1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="165.47716802457035" y="60.27999999999997" as="sourcePoint" />
<mxPoint x="165.77443160005134" y="80" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-7" value="" style="endArrow=none;html=1;rounded=0;exitX=0.375;exitY=1.057;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="qCe7d7aQyTPKSx8LoRMt-1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="267.15997312630634" y="40.27999999999997" as="sourcePoint" />
<mxPoint x="267.45723670178734" y="60" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-8" value="SingleWaterTank-20sim.fmu&lt;br&gt;(FMU&lt;sub&gt;2&lt;/sub&gt;)" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="qCe7d7aQyTPKSx8LoRMt-1">
<mxGeometry x="190.35532994923864" width="159.64467005076148" height="40" as="geometry" />
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-9" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="VsSiiwDWSvhPQYji7nPq-1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="2570" y="419.5" as="sourcePoint" />
<mxPoint x="2640" y="419.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-10" value="" style="group" vertex="1" connectable="0" parent="VsSiiwDWSvhPQYji7nPq-1">
<mxGeometry x="2640" y="360" width="350" height="120" as="geometry" />
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-11" value="Maestro" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="qCe7d7aQyTPKSx8LoRMt-10">
<mxGeometry x="118.21225952309868" y="80" width="95.12434415390526" height="40" as="geometry" />
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-12" value="WaterTankController-c.fmu&lt;br&gt;(FMU&lt;sub&gt;1&lt;/sub&gt;)" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="qCe7d7aQyTPKSx8LoRMt-10">
<mxGeometry width="159.64467005076145" height="40" as="geometry" />
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-13" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="qCe7d7aQyTPKSx8LoRMt-10">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="81.58085569253083" y="60" as="sourcePoint" />
<mxPoint x="590" y="60" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-14" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="qCe7d7aQyTPKSx8LoRMt-10">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="81.58085569253083" y="40" as="sourcePoint" />
<mxPoint x="81.58085569253083" y="60" as="targetPoint" />
<Array as="points">
<mxPoint x="81.58085569253083" y="40" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-15" value="" style="endArrow=none;html=1;rounded=0;exitX=0.375;exitY=1.057;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="qCe7d7aQyTPKSx8LoRMt-10">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="165.47716802457035" y="60.27999999999997" as="sourcePoint" />
<mxPoint x="165.77443160005132" y="80" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-16" value="" style="endArrow=none;html=1;rounded=0;exitX=0.375;exitY=1.057;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="qCe7d7aQyTPKSx8LoRMt-10">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="267.15997312630634" y="40.27999999999997" as="sourcePoint" />
<mxPoint x="267.4572367017873" y="60" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-17" value="SingleWaterTank-20sim.fmu&lt;br&gt;(FMU&lt;sub&gt;2&lt;/sub&gt;)" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="qCe7d7aQyTPKSx8LoRMt-10">
<mxGeometry x="169.99532994923862" width="159.64467005076145" height="40" as="geometry" />
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-24" value="LeakDetector.fmu&lt;br&gt;(FMU&lt;sub&gt;3&lt;/sub&gt;)" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="VsSiiwDWSvhPQYji7nPq-1">
<mxGeometry x="2980" y="360" width="152.83" height="40" as="geometry" />
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-25" value="LeakController.fmu&lt;br&gt;(FMU&lt;sub&gt;4&lt;/sub&gt;)" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="VsSiiwDWSvhPQYji7nPq-1">
<mxGeometry x="3147" y="360" width="152.83" height="40" as="geometry" />
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-26" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="VsSiiwDWSvhPQYji7nPq-1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="3060" y="420" as="sourcePoint" />
<mxPoint x="3060" y="400" as="targetPoint" />
<Array as="points">
<mxPoint x="3060" y="420" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="qCe7d7aQyTPKSx8LoRMt-28" value="" style="endArrow=none;html=1;rounded=0;entryX=0.544;entryY=0.981;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="VsSiiwDWSvhPQYji7nPq-1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="3230" y="421" as="sourcePoint" />
<mxPoint x="3230.13952" y="400" as="targetPoint" />
<Array as="points">
<mxPoint x="3230" y="420.76" />
</Array>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
Expand Down
80 changes: 80 additions & 0 deletions docs/user/examples/water_tank_FI/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# Water Tank Fault Injection

## Overview

The co-simulation is composed of a water-tank,
and a controller, which aims to maintain the level
in the water-tank between ```1``` and ```2```.
More details on this case-study can be found
[here](https://github.com/INTO-CPS-Association/example-single_watertank).

To run an experiment with fault-injection,
we inject a fault in the input of the tank
(control signal from controller to open or close),
such that between time 12 and 20, this signal is
always closed, irrespective of the actual level
in the tank.

## Example Diagram

![Water Tank System](watertank.png)

## Example Structure

![Water Tank Structure](dt_structure.png)

## Configuration of assets

This example uses two models and one tool.
The specific assets used are:

| Asset Type | Names of Assets | Visibility | Reuse in Other Examples |
|:---|:---|:---|:---|
| Models | watertankcontroller-c.fmu | Private | Yes |
| | singlewatertank-20sim.fmu | Private | Yes |
| Tool | maestro-2.3.0-jar-with-dependencies.jar | Common | Yes |

## Lifecycle Phases

| Lifecycle Phase | Completed Tasks |
| -------- | ------- |
| Create | Installs Java Development Kit for Maestro tool |
| Execute | Produces and stores output in data/water_tank_FI/output directory|
| Clean | Clears run logs and outputs |

## Run the example

To run the example, change your present directory.

```bash
cd workspace/examples/digital_twins/water_tank_FI
```

If required, change the permission of files you
need to execute, for example:

```bash
chmod +x lifecycle/create
```

Now, run the following scripts:

### Create

```bash
lifecycle/create
```

### Execute

```bash
lifecycle/execute
```

## Examine the results

The results can be found in the
_workspace/examples/data/water_tank_FI/output directory_.

You can also view run logs in the
_workspace/examples/digital_twins/water_tank_FI_.
Binary file added docs/user/examples/water_tank_FI/dt_structure.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/user/examples/water_tank_FI/watertank.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
84 changes: 84 additions & 0 deletions docs/user/examples/water_tank_swap/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Water Tank Swap

## Overview

This example is a water-tank model swap experiment for DTaaS.
The experiment uses the Maestro co-orchestration engine for
FMI-based co-simulation with the Model Swap feature including
a FaultInject extension. This demonstrates a Docker-less
version of the experiment at
<http:>https://github.com/lausdahl/fmiSwap</http:>
for use on the DTaaS platform.

The model swap mechanism demonstrated by
the experiment is detailed in the paper "Dynamic Runtime
Integration of New Models in Digital Twins"
[H. Ejersbo, K. Lausdahl, M. Frasheri, L. Esterle]
presented at the
[SEAMS 2023 conference](https://conf.researchr.org/home/seams-2023).
The water-tank experiment is further detailed here:
[Ejersbo, H., Lausdahl, K., Frasheri, M., & Esterle, L. (2023). fmiSwap: Run-time Swapping of Models for Co-simulation and Digital Twins. arXiv preprint arXiv:2304.07328.](https://arxiv.org/abs/2304.07328).
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Line length


## Example Diagram

![FMI Swap Diagram](fmi_swap.png)

## Example Structure

![FMI Swap Structure](dt-structure.png)

## Configuration of assets

This example uses four models and one tool. The specific assets used are:

| Asset Type | Names of Assets | Visibility | Reuse in Other Examples |
|:---|:---|:---|:---|
| Models | watertankcontroller-c.fmu | Private | Yes |
| | singlewatertank-20sim.fmu | Private | Yes |
| | leak_detector.fmu | Private | Yes |
| | leak_controller.fmu | Private | Yes |
| Tool | maestro-2.3.0-jar-with-dependencies.jar | Common | Yes |

## Lifecycle Phases

| Lifecycle Phase | Completed Tasks |
| -------- | ------- |
| Create | Installs Java Development Kit for Maestro tool |
| Execute | Produces and stores output in data/water_tank_swap/output directory|
| Clean | Clears run logs and outputs |

## Run the example

To run the example, change your present directory.

```bash
cd workspace/examples/digital_twins/water_tank_swap
```

If required, change the permission of files you need to execute, for example:

```bash
chmod +x lifecycle/create
```

Now, run the following scripts:

### Create

```bash
lifecycle/create
```

### Execute

```bash
lifecycle/execute
```

## Examine the results

The results can be found in the
_workspace/examples/data/water_tank_swap/output directory_.

You can also view run logs in the
_workspace/examples/digital_twins/water_tank_swap_.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/user/examples/water_tank_swap/fmi_swap.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions mkdocs-github.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ nav:
- Examples:
- Overview: user/examples/index.md
- Mass Spring Damper: user/examples/mass-spring-damper/README.md
- Water Tank Fault Injection: user/examples/water_tank_FI/README.md
- Water Tank Swap: user/examples/water_tank_swap/README.md
- Codebase: https://github.com/INTO-CPS-Association/DTaaS-examples
- FAQ: FAQ.md
- Developer:
Expand Down
2 changes: 2 additions & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ nav:
- Examples:
- Overview: user/examples/index.md
- Mass Spring Damper: user/examples/mass-spring-damper/README.md
- Water Tank Fault Injection: user/examples/water_tank_FI/README.md
astitva1905 marked this conversation as resolved.
Show resolved Hide resolved
- Water Tank Swap: user/examples/water_tank_swap/README.md
- Codebase: https://github.com/INTO-CPS-Association/DTaaS-examples
- FAQ: FAQ.md
- Developer:
Expand Down