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

Можно сгенерировать код для блока 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 гарантирует, что все шаги вывода используют указанный тип данных. Однако, в зависимости от строения других блоков в модели, некоторые из сгенерированного кода все еще могут использовать данные двойной точности.

См. также

Похожие темы