exponenta event banner

Создание кода для нечеткой системы с помощью Simulink Coder

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

См. также

Связанные темы