An open API service indexing awesome lists of open source software.

https://github.com/gave92/matsim

Matlab/Simulink interface. Easily create Simulink models from a Matlab script.
https://github.com/gave92/matsim

matlab-script matlab-simulink

Last synced: 25 days ago
JSON representation

Matlab/Simulink interface. Easily create Simulink models from a Matlab script.

Awesome Lists containing this project

README

          




Matsim


A sleek, intuitive interface for building Simulink models from a Matlab script.


Explore Matsim docs »




Report bug
·
Request feature

Matsim is a high level interface to create Simulink models from a [Matlab](https://www.mathworks.com/) script. Matsim is a wrapper around the standard [simulink API](https://it.mathworks.com/help/simulink/ug/approach-modeling-programmatically.html) that makes building a simulink model programmatically much faster.

[![View Matsim on File Exchange](https://www.mathworks.com/matlabcentral/images/matlab-file-exchange.svg)](https://it.mathworks.com/matlabcentral/fileexchange/68436-matsim) ![logo](https://img.shields.io/badge/license-MIT-blue.svg) [![donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/gave92)

## Key features
* **Automatic layout** (no need to specify block positions!)
* **Intuitive interface** (you can "add", "subtract", "multiply", ... simulink blocks)
* **Extensible library** (easily add new blocks from your custom libraries)

|        Source script (.m)        | Resulting model | Notes |
:-------------------------:|:-------------------------:|:-------------------------:
`c = Constant(1)` | | Create a Constant block with value 1
`res = a+b` | | Create an Add block and connect its inputs to blocks `a` and `b`
`res = [a,b]` | | Create an Mux block and connect its inputs to blocks `a` and `b`
`res = Max(a,b)` | | Create an MinMax block and connect its inputs to blocks `a` and `b`
`res = 1 - u1./(u2.*u3)` | | Create a group of simulink blocks that computes a complex expression
`Scope(Gain(FromWorkspace('var'),'Gain',0.5))` | | Easily combine blocks

## Installation

The automatic layout feature relies on [GraphViz](https://www.graphviz.org/), which you need to install separately.

1. Install [GraphViz](https://www.graphviz.org/download/) and add it to the system PATH
2. Download and extract the Matsim package (from [File Exhange](https://it.mathworks.com/matlabcentral/fileexchange/68436-matsim) or from here)
3. Add Matsim folder (and subfolders) to the Matlab path

## Quick guide

Quick example to get started. For more check the [tests](https://github.com/gave92/Matsim/tree/master/tests) folder.

#### 1. Create or load a simulink model

```matlab
import matsim.library.* % Import Matsim package

sys = simulation.load('my_model'); % Create or load a model named 'my_model'
sys.setSolver('Ts',0.01,'DiscreteOnly',true) % Set solver for the model
sys.clear() % Delete all blocks
sys.show() % Show the model
```

#### 2. Create blocks

```matlab
Vx = FromWorkspace('V_x'); % Add FromWorkspace and Constant blocks
Wr = FromWorkspace('W_r');
Rr = Constant(0.32);

slip = 1 - Vx./(Wr.*Rr); % Evaluate complex mathematical expression
sys.log(slip,'name','slip') % Log the output of the "slip" block

s = Scope(slip); % Create and open scope block
s.open()
```

#### 3. Connect and layout the model

```matlab
sys.layout() % Connect and layout the model
```

#### 4. Simulate the system

```matlab
V_x = [0:0.1:10;linspace(5,20,101)]'; % Define input variables
W_r = [0:0.1:10;linspace(5,23,101)/0.32]';
simOut = sys.run('StopTime',10).Logs; % Simulate the system
```

© Copyright 2017 - 2019 by Marco Gavelli