Можно создать код для блока контроллера нечеткой логики с помощью Simulink ® Coder™. Дополнительные сведения о создании кода см. в разделе Создание кода с помощью Simulink ® Coder™ (Simulink Coder).
Хотя в этом примере генерируется код для системы нечеткого вывода Sugeno типа 1, рабочий процесс также применяется к системам нечеткого вывода Mamdani и типа 2.
По умолчанию блок контроллера нечеткой логики использует данные двойной точности для моделирования и генерации кода. fuzzyPID модель сконфигурирована для использования данных двойной точности. Дополнительные сведения о настройке системы нечеткого вывода для генерации кода см. в разделе Контроллер нечеткой логики.
mdl = 'fuzzyPID';
open_system(mdl)

Рекомендуется проверять производительность системы в Simulink. Запустите моделирование. Модель сохраняет выходной отклик u в рабочую область MATLAB ®.
sim(mdl)
Чтобы создать код для модели, используйте rtwbuild (Simulink Coder) функция. В этом примере подавление вывода окна команд для процесса построения.
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 генерирует код C для общего целевого объекта в реальном времени. Чтобы выбрать другой целевой файл и язык, в диалоговом окне Параметры конфигурации (Configuration Parameters) измените параметры Системный целевой файл (System target file) и Язык (Language) соответственно.
Созданный код сохраняется в новом fuzzyPID_grt_rtw в текущей рабочей папке. Имя этой папки зависит от выбранного целевого файла.
В системе Windows ® по умолчанию используется исполняемый файл с именемfuzzyPID.exe также добавляется в текущую рабочую папку. Чтобы создать код без компиляции, в диалоговом окне Параметры конфигурации (Configuration parameters) перед созданием кода выберите параметр Только генерировать код (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
Созданный код можно развернуть в соответствии с требованиями приложения. Например, можно настроить свойства исполняемых файлов и создать статические или динамические библиотеки. Дополнительные сведения см. в разделе Workflow-процесс построения процессов для систем реального времени (Simulink Coder).
Блок контроллера нечеткой логики также поддерживает данные с одной точностью и фиксированной точкой для моделирования и генерации кода. В обоих случаях полученная нечеткая система снижает точность по сравнению с эквивалентной нечеткой системой с двойной точностью. Использовать:
Данные с одной точностью уменьшают объем памяти системы.
Данные с фиксированной точкой, если целевая платформа поддерживает только арифметику с фиксированной точкой.
Чтобы использовать один из этих типов данных, задайте свойство «Тип данных» блока и настройте другие компоненты модели на использование того же типа данных.
fuzzyPID_single модель сконфигурирована для данных с одной точностью. Откройте модель.
mdl2 = 'fuzzyPID_single';
open_system(mdl2)

В этой модели параметр Data type блока Fuzzy Logic Controller имеет значение single. Блок контроллера нечеткой логики автоматически преобразует входные сигналы в указанный тип данных. Кроме того, параметр 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 гарантирует, что все шаги вывода будут использовать указанный тип данных. Однако, в зависимости от конфигурации других блоков в модели, некоторые сгенерированные коды могут по-прежнему использовать данные с двойной точностью.