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

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

Задайте контроллер 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

Подсистема вызова функций вызывается непосредственно другим блоком в процессе моделирования. Чтобы гарантировать, что контроллер MPC работает правильно в Подсистеме вызова функций, необходимо сконфигурировать блок MPC Controller, чтобы использовать наследованный шаг расчета и периодически вызывать Подсистему вызова функций с тем же шагом расчета, заданным в контроллере MPC объект.

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

mdl1 = 'mpc_rtwdemo_functioncall';
open_system(mdl1)

Блок MPC Controller в MPC в Инициированном блоке Subsystem.

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

Сконфигурируйте контроллер, чтобы использовать наследованный шаг расчета. Для этого выберите свойство шага расчета Inherit блока MPC Controller.

Вызывайте Подсистему вызова функций периодически с правильным шагом расчета.

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

В данном примере используйте Блок Function-Call Generator, чтобы выполнить Подсистему вызова функций на уровне частоты дискретизации как 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 Controller, чтобы использовать наследованный шаг расчета и периодически вызывать Инициированную подсистему с тем же шагом расчета, заданным в контроллере MPC объект.

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

mdl2 = 'mpc_rtwdemo_triggered';
open_system(mdl2)

Блок MPC Controller находится в MPC в Инициированном блоке Subsystem.

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

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

Выполняйте Инициированную подсистему периодически с правильным шагом расчета.

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

В данном примере используйте блок Pulse Generator, чтобы обеспечить периодический сигнал инициирования на уровне частоты дискретизации как 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)

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

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

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)

Смотрите также

|

Похожие темы