Можно сгенерировать код для блока 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)
Чтобы сгенерировать код для модели, используйте rtwbuild
(Simulink Coder) функция. В данном примере подавите окно 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 19.874s
По умолчанию 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 12.642s
Можно развернуть сгенерированный код согласно потребностям приложения. Например, можно сконфигурировать свойства исполняемых файлов и создать статические или динамические библиотеки. Для получения дополнительной информации смотрите Рабочий процесс Процесса сборки для Систем реального времени (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 17.355s
Установка параметра Типа данных блока Fuzzy Logic Controller гарантирует, что все шаги вывода используют заданный тип данных. Однако в зависимости от настройки других блоков в модели, часть сгенерированного кода может все еще использовать данные с двойной точностью.