Можно сгенерировать код для блока Fuzzy Logic Controller с помощью Coder™ Simulink ®. Для получения дополнительной информации о генерации кода смотрите Сгенерируйте код используя Simulink ® Coder™ (Simulink Coder).
Хотя этот пример генерирует код для системы нечеткого вывода Sugeno 1 типа 1, рабочий процесс также применяется к нечетким системам Mamdani и type-2.
По умолчанию блок Fuzzy Logic Controller использует данные двойной точности для симуляции и генерации кода. The fuzzyPID
модель сконфигурирована так, чтобы использовать данные двойной точности. Для получения дополнительной информации о настройке системы нечеткого вывода для генерации кода, смотрите Fuzzy Logic Controller.
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 генерирует код С для типового целевого устройства в реальном времени. Чтобы выбрать другой целевой файл и язык, в диалоговом окне Параметров конфигурации измените параметры System target file и Language, соответственно.
Сгенерированный код хранится в новом fuzzyPID_grt_rtw
папка в текущей рабочей папке. Имя этой папки зависит от выбранного целевого файла.
В системе Windows ® по умолчанию исполняемый файл с именем fuzzyPID.exe
также добавляется в текущую рабочую папку. Чтобы сгенерировать код без компиляции, в диалоговом окне Параметров конфигурации выберите параметр Generate code only перед генерацией кода.
Запустите исполняемый файл.
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 также поддерживает данные с одной точностью и фиксированной точкой для симуляции и генерации кода. В обоих случаях ваша полученная нечеткая система имеет пониженную точность по сравнению с эквивалентной нечеткой системой двойной точности. Использование:
Данные с одной точностью для уменьшения объема памяти вашей системы.
Данные с фиксированной точкой, если ваша целевая платформа поддерживает только арифметику с фиксированной точкой.
Чтобы использовать один из этих типов данных, задайте свойство Data type блока и сконфигурируйте другие компоненты модели, чтобы использовать совпадающий тип данных.
The fuzzyPID_single
модель сконфигурирована для данных с одной точностью. Откройте модель.
mdl2 = 'fuzzyPID_single';
open_system(mdl2)
В этой модели параметр Data type блока Fuzzy Logic Controller устанавливается в single
. Блок Fuzzy Logic Controller автоматически преобразует входные сигналы в заданный тип данных. Кроме того, параметр Simulate using установлен в Code Generation
. Simulate using опции не влияет на процесс генерации кода. Вместо этого установка этой опции моделирует вашу нечеткую систему с помощью того же пути кода, используемого сгенерированным кодом.
Сгенерируйте код для этой модели.
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
Установка параметра Data type блока Fuzzy Logic Controller гарантирует, что все шаги вывода используют указанный тип данных. Однако, в зависимости от строения других блоков в модели, некоторые из сгенерированного кода все еще могут использовать данные двойной точности.