У наших попередніх прикладах, таких як Matlab Level 2 S-Function example: Sine wave (continous output), ми показали, як створити просту S-функцію на C++.
Ось як додати C++ S-функцію до Simulink:
Крок 1: Створення файлу вихідного коду S-функції
У каталозі, який ви відкрили в Matlab/Simulink, створіть новий файл з назвою, наприклад, sine_wave_generator.cpp. Див. Matlab Level 2 S-Function example: Sine wave (continous output) для прикладу коду на C++.
Я рекомендую використовувати Visual Studio Code замість Matlab як редактор C++.
Крок 2: Компіляція S-функції
Відкрийте термінал і виконайте
mex sine_wave_generator.cppЯ не рекомендую виконувати це в Matlab, хоча це і можливо. Я рекомендую завжди використовувати системний термінал.
Процес компіляції працює лише якщо останній рядок виводу є MEX completed successfully.
Якщо ви бачите будь-який інший вивід, вам потрібно налагодити проблему.
Поширені проблеми:
- How to fix Matlab mex error: You can’t use ‘macro parameter character #’ in vertical mode.
- Відсутні додаткові бібліотеки або шляхи до заголовків: How to link additional libraries when compiling Matlab/Simulink S-function via ‘mex’
- Якщо ви використовуєте можливості сучасного C++, вам може знадобитися вибрати правильний стандарт C++: How to specify C++ version when compiling Matlab/Simulink S-function using ‘mex’
Крок 3: Створення нової моделі Simulink
Для тестування я рекомендую створити нову модель Simulink замість повторного використання старої.
Крок 4: Додавання блоку S-функції
Спочатку натисніть на діалогове вікно, щоб додати новий блок:

Тепер натисніть User-defined functions і виберіть блок S-function. Не вибирайте блок Matlab Level-2 S-function, навіть якщо ви використовуєте S-функцію Level 2. S-функції Level 2 чудово працюють зі звичайним блоком S-function.

Перетягніть цей блок у головну область моделі Simulink, тобто у великий білий порожній простір в іншому вікні, який зазвичай знаходиться одразу за діалоговим вікном library browser:

Крок 5: Налаштування блоку S-функції
Двічі натисніть на блок S-функції, щоб відкрити діалогове вікно налаштування:

У діалоговому вікні відредагуйте Name і введіть назву S-функції.
Назва S-функції — це завжди назва файлу .cpp без розширення .cpp.
У нашому випадку файл C++ має назву sine_wave_generator.cpp, отже назва S-функції — sine_wave_generator.
Натисніть Apply, щоб зберегти зміни та закрити діалогове вікно.
Крок 6: Підключення блоку S-функції в Simulink
У нашому прикладі ми можемо підключити блок S-функції до блоку Scope, щоб візуалізувати вивід.
Це не є обов’язковим, але це хороший спосіб перевірити, що S-функція працює належним чином.
Щоб додати блок Scope, знову натисніть на значок Library browser на панелі навігації:

Натисніть на Sinks і виберіть блок Scope:

Перетягніть блок Scope у головну область моделі Simulink:

Закрийте діалогове вікно Library browser.
Тепер підключіть вихід блоку S-функції до входу блоку Scope:

Підключені блоки тепер повинні виглядати так:

Крок 7: Запуск моделі Simulink
Натисніть кнопку Run на панелі інструментів Simulink, щоб запустити симуляцію:

Крок 8: Перевірка осцилографа
Якщо все працює належним чином, тепер ви можете двічі натиснути на блок Scope, щоб побачити вивід S-функції:

Це відкриє нове вікно, яке показує вивід осцилографа S-функції:
