exponenta event banner

Использование блока контроллера MPC внутри функциональных подсистем вызова и инициированных подсистем

В этом примере показано, как конфигурировать и моделировать блоки контроллера MPC, размещенные в подсистемах Function-Call и Triggered.

Определение модели установки и контроллера MPC

Определите завод SISO.

plant = ss(tf([3 1],[1 0.6 1]));

Определите контроллер MPC для завода.

Ts = 0.1;   %Sampling time
p = 10;     %Prediction horizon
m = 2;      %Control horizon
Weights = struct('MV',0,'MVRate',0.01,'OV',1); % Weights
MV = struct('Min',-Inf,'Max',Inf,'RateMin',-100,'RateMax',100); % Input constraints
OV = struct('Min',-2,'Max',2); % Output constraints
mpcobj = mpc(plant,Ts,p,m,Weights,MV,OV);

Конфигурирование и моделирование блока контроллера MPC внутри подсистемы вызова функций

Для выполнения этого примера необходимо приложение Simulink ®.

if ~mpcchecktoolboxinstalled('simulink')
    disp('Simulink(R) is required to run this example.')
    return
end

Подсистема Function-Call вызывается непосредственно другим блоком во время моделирования. Для обеспечения правильной работы контроллера MPC в подсистеме Function-Call необходимо сконфигурировать блок контроллера MPC для использования наследуемого времени выборки и периодически вызывать подсистему Function-Call с тем же временем выборки, которое определено в объекте контроллера MPC.

Откройте модель.

mdl1 = 'mpc_rtwdemo_functioncall';
open_system(mdl1)

Блок контроллера MPC находится внутри MPC в блоке триггерной подсистемы.

open_system([mdl1 '/MPC in Function-Call Subsystem'])

Настройте контроллер на использование наследуемого времени выборки. Для этого выберите свойство Inherit sample time блока MPC Controller.

Периодически вызывайте подсистему Function-Call с правильным временем выборки.

Для этого примера, поскольку контроллер имеет время выборки 0,1 секунды, настройте триггерный блок в подсистеме Function-Call для использования того же времени выборки.

В этом примере используйте блок генератора вызовов функций для выполнения подсистемы вызовов функций со скоростью выборки 0,1 секунды.

Моделирование модели.

close_system([mdl1 '/MPC in Function-Call Subsystem/MPC Controller'])
open_system([mdl1 '/Inputs'])
open_system([mdl1 '/Outputs//References'])
sim(mdl1)
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Усилия контроллера и выходные данные завода сохраняются в базовом рабочем пространстве в виде переменных. u_fc и y_fcсоответственно.

Закройте модель Simulink.

bdclose(mdl1)

Конфигурирование и моделирование блока контроллера MPC внутри инициируемой подсистемы

Запускаемая подсистема выполняется каждый раз при возникновении события триггера. Чтобы обеспечить правильную работу контроллера MPC внутри запускаемой подсистемы, необходимо настроить блок контроллера MPC на использование наследуемого времени выборки и периодически вызывать подсистему Triggered с тем же временем выборки, которое определено в объекте контроллера MPC.

Откройте модель.

mdl2 = 'mpc_rtwdemo_triggered';
open_system(mdl2)

Блок контроллера MPC находится в MPC в блоке триггерной подсистемы.

open_system([mdl2 '/MPC in Triggered Subsystem']);

Сконфигурируйте блок MPC для использования наследуемого времени выборки, как в случае модели подсистемы функционального вызова.

Периодически запустите подсистему Triggered с правильным временем выборки.

В этом примере сконфигурируйте блок триггера внутри запускаемой подсистемы для использования falling тип триггера.

В этом примере блок генератора импульсов используется для обеспечения периодического сигнала запуска с частотой выборки 0,1 секунды.

Моделирование модели.

close_system([mdl2 '/MPC in Triggered Subsystem/MPC Controller'])
open_system([mdl2 '/Inputs'])
open_system([mdl2 '/Outputs//References'])
sim(mdl2)

Усилия контроллера и выходные данные завода сохраняются в базовом рабочем пространстве в виде переменных. u_tr и y_trсоответственно.

Закройте модель Simulink.

bdclose(mdl2)

Сравнить ответы

Сравните результаты моделирования из подсистемы Function-Call и подсистемы Triggered с результатом, сгенерированным блоком контроллера MPC, который не помещается в подсистему и не наследует время выборки.

mdl = 'mpc_rtwdemo';
open_system(mdl)
sim(mdl)

Сравните отклики управляемой переменной.

figure
plot(t,u,'b-',t,u_fc,'ro',t(1:end-1),u_tr,'k.')
title('Manipulated Variable')
legend('No Subsystem','Function-Call','Triggered')

Сравните ответы на выходные данные завода.

figure
plot(t,y,'b-',t,y_fc,'ro',t(1:end-1),y_tr,'k.')
title('Plant Output')
legend('No Subsystem','Function-Call','Triggered')

Результаты всех трех моделей численно равны.

Закройте модель Simulink.

bdclose(mdl)

См. также

(Simulink) | (Simulink)

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