# Помощь по запуску Simulink-модели

## Где находится модель

Simulink-модель находится не в каталоге Keil-проекта, а в исходной папке рабочей области:

```text
F:\set\workspace\setcorp\set506\AD\Inu_im_1wnd_3lvl
```

Полный путь к основной модели:

```text
F:\set\workspace\setcorp\set506\AD\Inu_im_1wnd_3lvl\inu_im_1wnd_3lvl.slx
```

Относительный путь от рабочей папки `AD`:

```text
Inu_im_1wnd_3lvl/inu_im_1wnd_3lvl.slx
```

Основные файлы:

| Файл | Назначение |
|---|---|
| `inu_im_1wnd_3lvl.slx` | основная Simulink-модель |
| `inu_im_1wnd_3lvl_r2021b.slx` | версия модели для MATLAB/Simulink R2021b |
| `init.m` | задание параметров модели |
| `wrapper_inu.mexw64` | скомпилированная S-function для Windows 64-bit |
| `allmex.m` | скрипт пересборки S-function |
| `Inu/*.c`, `Inu/*.h` | исходники S-function и C2000-логики |

Короткое описание из `ReadMe.txt`: один трёхуровневый инвертор питает однообмоточный асинхронный двигатель.

## Быстрый запуск

В MATLAB выполнить:

```matlab
cd('F:\set\workspace\setcorp\set506\AD\Inu_im_1wnd_3lvl')
run('init.m')
open_system('inu_im_1wnd_3lvl_r2021b.slx')
```

Если используется более новая версия MATLAB/Simulink, можно открыть:

```matlab
open_system('inu_im_1wnd_3lvl.slx')
```

После открытия модели запустить расчёт кнопкой запуска в Simulink или командой:

```matlab
sim('inu_im_1wnd_3lvl_r2021b')
```

## Что должно быть перед запуском

- Рабочая папка MATLAB должна быть `Inu_im_1wnd_3lvl`.
- Нужно выполнить `init.m`, иначе в workspace не будет параметров двигателя, инвертора и шага моделирования.
- В папке должен быть доступен `wrapper_inu.mexw64`.
- Разрядность MATLAB должна быть 64-bit Windows, потому что готовый файл имеет расширение `.mexw64`.

## Если модель ругается на S-function

Проверьте наличие файла:

```text
F:\set\workspace\setcorp\set506\AD\Inu_im_1wnd_3lvl\wrapper_inu.mexw64
```

Если MATLAB сообщает, что S-function не найдена:

```matlab
cd('F:\set\workspace\setcorp\set506\AD\Inu_im_1wnd_3lvl')
which wrapper_inu
```

Если `which` ничего не показывает, добавьте папку модели в путь:

```matlab
addpath('F:\set\workspace\setcorp\set506\AD\Inu_im_1wnd_3lvl')
```

## Пересборка S-function

Скрипт `allmex.m` есть, но сейчас он содержит старые абсолютные пути вида:

```text
F:\Work\Projects\MATLAB\Drives_lib_new\...
```

Поэтому пересборка через `allmex.m` без правки путей, скорее всего, не сработает. Для обычного запуска пересборка не нужна, потому что готовый `wrapper_inu.mexw64` уже лежит рядом с моделью.

Если понадобится пересобрать S-function, нужно:

1. Исправить include/source пути в `allmex.m` на актуальные.
2. Убедиться, что в MATLAB настроен компилятор:

```matlab
mex -setup C
```

3. Запустить:

```matlab
run('allmex.m')
```

## Связь с Keil-проектом

Keil-проект находится здесь:

```text
F:\set\workspace\setcorp\set506\AD\AD_Keil_Project\MDK-ARM\IHM08M.uvprojx
```

Simulink-модель не является сгенерированным Keil-проектом. Сейчас это отдельная модель/симулятор, а Keil-проект содержит безопасный STM32-каркас и интерфейсные структуры:

- `AD_Measurements_t`;
- `AD_MotorParameters_t`;
- `AD_Command_t`;
- `SimulinkInterface_InputBus_t`;
- `SimulinkInterface_OutputBus_t`.

Для настоящей связки Simulink -> STM32 нужно либо генерировать код из модели, либо вручную связать модельные сигналы с этими структурами.

## Минимальная проверка модели

В MATLAB:

```matlab
cd('F:\set\workspace\setcorp\set506\AD\Inu_im_1wnd_3lvl')
run('init.m')
exist('wrapper_inu', 'file')
open_system('inu_im_1wnd_3lvl_r2021b.slx')
```

Ожидаемо:

- `exist('wrapper_inu', 'file')` возвращает `3` для MEX-файла;
- модель открывается без ошибки отсутствующей S-function;
- параметры `Ts`, `Rs`, `Rr`, `Lls`, `Llr`, `Lm`, `UdcNom`, `Inom` появились в workspace.
