Сгенерируйте код для нечеткой системы Используя Simulink Coder

Можно сгенерировать код для блока Fuzzy Logic Controller с помощью Simulink® Coder™. Для получения дополнительной информации о генерации кода смотрите, Генерируют Код Используя Simulink® Coder™ (Simulink Coder).

В то время как этот пример генерирует код для типа 1 Sugeno нечеткая система вывода, рабочий процесс также применяется к Mamdani и типу 2 нечеткие системы.

Сгенерируйте код для нечеткой системы вывода

По умолчанию блок Fuzzy Logic Controller использует данные с двойной точностью для симуляции и генерации кода. fuzzyPID модель сконфигурирована, чтобы использовать данные с двойной точностью. Для получения дополнительной информации о конфигурировании вашей нечеткой системы вывода для генерации кода смотрите Контроллер Нечеткой логики.

mdl = 'fuzzyPID';
open_system(mdl)

Это - хорошая практика, чтобы подтвердить эффективность системы в Simulink. Запустите симуляцию. Модель сохраняет выходной ответ u к рабочей области MATLAB®.

sim(mdl)

Чтобы сгенерировать код для модели, используйте slbuild (Simulink) функция. В данном примере подавите окно Command Window для процесса сборки.

set_param(mdl,'RTWVerbose','off')
slbuild(mdl)
### Starting build procedure for: fuzzyPID
### Successful completion of build procedure for: fuzzyPID

Build Summary

Top model targets built:

Model     Action                       Rebuild Reason                                    
=========================================================================================
fuzzyPID  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 26.552s

По умолчанию Simulink Coder генерирует код С для типовой цели в реальном времени. Чтобы выбрать различный конечный файл и язык, в диалоговом окне Configuration Parameters, изменяют Системный конечный файл и параметры Языка, соответственно.

Сгенерированный код хранится в новом fuzzyPID_grt_rtw папка в вашей текущей рабочей папке. Имя этой папки зависит от выбранного конечного файла.

В системе Windows®, по умолчанию, исполняемом файле под названием fuzzyPID.exe также добавляется к текущей рабочей папке. Чтобы сгенерировать код без компиляции, в диалоговом окне Параметров конфигурации, выбирают код Generate только параметр прежде, чем сгенерировать код.

Запустите исполняемый файл.

if ispc
    status = system(mdl);
else
    disp('The example only runs the executable on Windows system.');
end
The example only runs the executable on Windows system.

После того, как исполняемый файл завершается успешно (status = 0), программное обеспечение создает fuzzyPID.mat файл данных, который содержит результаты симуляции.

Можно сравнить выходной ответ от сгенерированного кода, rtw_y, с выходом от симуляции Simulink, y, использование следующего кода.

load fuzzyPID.mat
plot(tout,y,'b-',rt_tout,rt_y,'ro')
legend('Simulink','Executable','Location','Southeast')

Результат сгенерированного кода совпадает с симуляцией Simulink.

Можно также сгенерировать код для только подсистемы контроллера в этой модели. Для этого задайте подсистему при вызове slbuild функция.

slbuild([mdl '/Fuzzy PID'])
### Starting build procedure for: Fuzzy0
### Successful completion of build procedure for: Fuzzy0

Build Summary

Top model targets built:

Model   Action                       Rebuild Reason                                    
=======================================================================================
Fuzzy0  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 16.549s

Можно развернуть сгенерированный код согласно потребностям приложения. Например, можно сконфигурировать свойства исполняемых файлов и создать статические или динамические библиотеки. Для получения дополнительной информации смотрите Рабочий процесс Процесса сборки для Систем реального времени (Simulink Coder).

Сгенерируйте код для других типов данных

Блок Fuzzy Logic Controller также поддерживает данные и фиксированной точки с одинарной точностью для симуляции и генерации кода. В обоих случаях ваша получившаяся нечеткая система уменьшила точность по сравнению с эквивалентной нечеткой системой с двойной точностью. Использование:

  • Данные с одинарной точностью, чтобы уменьшать объем потребляемой памяти вашей системы.

  • Данные фиксированной точки, если ваша целевая платформа только поддерживает вычисления с фиксированной точкой.

Чтобы использовать один из этих типов данных, установите свойство Типа данных блока и сконфигурируйте другие компоненты в модели, чтобы использовать совпадающий тип данных.

fuzzyPID_single модель сконфигурирована для данных с одинарной точностью. Откройте модель.

mdl2 = 'fuzzyPID_single';
open_system(mdl2)

В этой модели параметр Типа данных блока Fuzzy Logic Controller устанавливается на single. Блок Fuzzy Logic Controller автоматически преобразует входные сигналы в заданный тип данных. Кроме того, Симулировать параметр использования устанавливается на Code Generation. Симулировать опция использования не влияет на процесс генерации кода. Вместо этого установка этой опции симулирует вашу нечеткую систему с помощью того же пути выполнения кода, используемого сгенерированным кодом.

Сгенерируйте код для этой модели.

set_param(mdl2,'RTWVerbose','off')
slbuild(mdl2)
### Starting build procedure for: fuzzyPID_single
### Successful completion of build procedure for: fuzzyPID_single

Build Summary

Top model targets built:

Model            Action                       Rebuild Reason                                    
================================================================================================
fuzzyPID_single  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 19.956s

Установка параметра Типа данных блока Fuzzy Logic Controller гарантирует, что все шаги вывода используют заданный тип данных. Однако в зависимости от настройки других блоков в модели, часть сгенерированного кода может все еще использовать данные с двойной точностью.

Смотрите также

Похожие темы