Разработайте и управление Cosimulate высокочастотной башни дистилляции с Аспеном плюс динамика

Этот пример показывает, как разработать образцовый прогнозирующий контроллер в MATLAB для высокочастотной модели башни дистилляции, созданной в Аспене Плюс Dynamics®. Производительность контроллера затем проверяется через cosimulation между Simulink и Аспеном Плюс Динамика.

Башня дистилляции

Башня дистилляции использует 29 идеальных этапов, чтобы разделить смесь бензола, толуола и ксилолов (представленный p-ксилолом). Процесс дистилляции непрерывен. Оборудование включает ребойлер и общий конденсатор как показано ниже:

Башня дистилляции действует при номинальном установившемся условии:

  • Поток канала содержит 30% бензола, 40% толуола и 30% ксилолов.

  • Скорость потока жидкости канала является 500 kmol/hour.

  • Чтобы удовлетворить требование чистоты продукта перегонки, продукт перегонки содержит 95% бензола.

  • Чтобы удовлетворить требование восстановления 95% бензола в канале, примесь бензола в нижних частях составляет 1,7%.

Цели управления описаны ниже, отсортированы по их важности:

  1. Содержите постоянное давление башни.

  2. Поддержите 5% толуола в продукте перегонки (это эквивалентно, чтобы поддержать 95% бензола в продукте перегонки, потому что продукт перегонки только содержит бензол и толуол).

  3. Поддержите 1,7% бензола в нижних частях.

  4. Сохраните уровни жидкости в сборнике и емкости орошения в заданных пределах.

Создайте высокочастотную модель объекта управления в Аспене плюс динамика

Используйте блок Aspen Plus RADFRAC, чтобы задать установившиеся характеристики башни. В дополнение к обычной информации, необходимой для установившейся симуляции, необходимо задать гидравлику лотка, геометрию сборника башни и размер емкости орошения. Лотки являются проектом решета, расположенным с интервалами на расстоянии в 18 дюймов. Все лотки имеют 1,95 м в диаметре с высотой плотины на 5 см. Номинальные жидкие глубины составляют 0,67 м и 1,4875 м в горизонтальной емкости орошения и сборнике соответственно.

Установившаяся модель портирована к Аспену плюс динамике (APD) для управляемой потоком симуляции. Это пропускает динамику привода и принимает точное регулирование скоростей потока жидкости, которыми управляют. По умолчанию APD добавляет контроллеры PI, чтобы отрегулировать давление башни и эти два уровня жидкости. В этом примере намеренно удалены контроллеры PI по умолчанию.

Модель APD высокочастотной башни дистилляции показывают ниже:

Линеаризуйте объект Используя Аспен плюс интерфейс системы управления

Образцовый Прогнозирующий Контроллер требует модели LTI объекта. В этом примере входные параметры объекта:

  1. Конденсаторная обязанность (W)

  2. Обязанность ребойлера (W)

  3. Скорость потока жидкости массы отлива (kg/h)

  4. Скорость потока жидкости массы продукта перегонки (kg/h поток № 2)

  5. Нижняя скорость потока жидкости массы (kg/h поток № 3)

  6. Питайте молярную скорость потока жидкости (kmol/h поток № 1)

Объект выходные параметры:

  1. Давление башни (в конденсаторе: этап 1, панель)

  2. Уровень жидкости (m) емкости орошения

  3. Уровень жидкости (m) сборника

  4. Массовый дробный толуол в продукте перегонки

  5. Массовый дробный бензол в нижних частях

Аспен Плюс Динамика обеспечивает инструмент Control Design Interface (CDI), который линеаризует динамическую модель при заданном условии.

Следующие шаги взяты, чтобы получить линейную модель объекта управления в Аспене Плюс Динамика.

Шаг 1: Добавьте "скрипт" в модель APD под папкой "Flowsheet". В этом примере именем скрипта является CDI_Calcs (как показано выше), и это содержит следующие команды APD:

Set Doc = ActiveDocument
set CDI = Doc.CDI
CDI.Reset
CDI.AddInputVariable "blocks(""B1"").condenser(1).QR"
CDI.AddInputVariable "blocks(""B1"").QrebR"
CDI.AddInputVariable "blocks(""B1"").Reflux.FmR"
CDI.AddInputVariable "streams(""2"").FmR"
CDI.AddInputVariable "streams(""3"").FmR"
CDI.AddInputVariable "streams(""1"").FR"
CDI.AddOutputVariable "blocks(""B1"").Stage(1).P"
CDI.AddOutputVariable "blocks(""B1"").Stage(1).Level"
CDI.AddOutputVariable "blocks(""B1"").SumpLevel"
CDI.AddOutputVariable "streams(""2"").Zmn(""TOLUENE"")"
CDI.AddOutputVariable "streams(""3"").Zmn(""BENZENE"")"
CDI.Calculate

Шаг 2: Инициализируйте модель APD к номинальному установившемуся условию.

Шаг 3: Вызовите скрипт, который генерирует следующие текстовые файлы:

  • cdi_A.dat, cdi_B.dat, cdi_C.dat задает A, B, и матрицы C стандартной непрерывно-разовой модели в пространстве состояний LTI. D матрица нуль. A, B, C матрицы являются разреженными матрицами.

  • cdi_list.lis перечисляет образцовые переменные и их номинальную стоимость.

  • cdi_G.dat задает ввод/вывод статическая матрица усиления при номинальном условии. Матрица усиления является также разреженной матрицей.

В этом примере cdi_list.lis включает следующую информацию:

A matrix computed, number of non-zero elements = 1408
B matrix computed, number of non-zero elements = 26
C matrix computed, number of non-zero elements = 20
G matrix computed, number of non-zero elements = 30
Number of state variables:    120
Number of input variables:      6
Number of output variables:     5
Input variables:
   1        -3690034.247458334  BLOCKS("B1").Condenser(1).QR
   2            3819023.193875  BLOCKS("B1").QRebR
   3            22135.96620144  BLOCKS("B1").Reflux.FmR
   4            11717.39655353  STREAMS("2").FmR
   5            34352.86345834  STREAMS("3").FmR
   6                       500  STREAMS("1").FR
Output variables:
   1         1.100022977953499  BLOCKS("B1").Stage(1).P
   2        0.6700005140605662  BLOCKS("B1").Stage(1).Level
   3                    1.4875  BLOCKS("B1").SumpLevel
   4       0.05002582161855798  STREAMS("2").Zmn("TOLUENE")
   5       0.01705308738356429  STREAMS("3").Zmn("BENZENE")

Номинальная стоимость переменных состояния, перечисленных в файле, проигнорирована, потому что они не нужны в проекте MPC.

Создайте масштабированную и уменьшаемую модель в пространстве состояний LTI

Шаг 1: Преобразуйте сгенерированные CDI разреженные матрицы в модель в пространстве состояний.

Загрузите матрицы пространства состояний от файлов данных CDI до рабочего пространства MATLAB и преобразуйте разреженные матрицы в полные матрицы.

load mpcdistillation_cdi_A.dat
load mpcdistillation_cdi_B.dat
load mpcdistillation_cdi_C.dat
A = full(spconvert(mpcdistillation_cdi_A));
B = full(spconvert(mpcdistillation_cdi_B));
C = full(spconvert(mpcdistillation_cdi_C));
D = zeros(5,6);

Возможно, что целая строка разреженной матрицы или столбец являются нулем, в этом случае вышеупомянутые команды недостаточны. Используйте следующие дополнительные проверки, чтобы убедиться A, B, и C имеют правильные размерности:

[nxAr,nxAc] = size(A);
[nxB,nu] = size(B);
[ny,nxC] = size(C);
nx = max([nxAr, nxAc, nxB, nxC]);
if nx > nxC
    C = [C, zeros(ny,nx-nxC)];
end
if nx > nxAc
    A = [A zeros(nxAr,nx-nxAc)];
end
if nx > nxAr
    nxAc = size(A,2);
    A = [A; zeros(nx-nxAr, nxAc)];
end
if nxB < nx
    B = [B; zeros(nx-nxB,nu)];
end

Шаг 2: Масштабируйте сигналы объекта.

Это - хорошая практика, если не важный, чтобы преобразовать сигналы объекта от технических модулей до универсальной безразмерной шкалы (например, 0-1 или 0-100%). Одна альтернатива должна задать масштабные коэффициенты как часть Образцового Прогнозирующего Проектирования контроллера. Это может упростить контроллер, настраивающийся значительно. Смотрите, например, демонстрация "mpcscalefactor".

В существующем примере, однако, мы будем использовать процедуру снижения сложности модели до проектирования контроллера, и мы поэтому масштабируем модель объекта управления, с помощью масштабированной модели и в снижении сложности модели и в проектировании контроллера. Мы задаем промежуток для каждого ввода и вывода, т.е. различие между ожидаемыми максимальными и минимальными значениями в технических модулях. Также запишите номинальную стоимость и нулевые значения в технических модулях, чтобы упростить последующие преобразования.

U_span = [2*(-3690034), 2*3819023, 2*22136, 2*11717, 2*34353, 2*500];
U_nom = 0.5*U_span;
U_zero = zeros(1,6);
Y_nom = [1.1, 0.67, 1.4875, 0.050026, 0.017053];
Y_span = [0.4, 2*Y_nom(2:5)];
Y_zero = [0.9, 0, 0, 0, 0];

Масштабируйте B и матрицы C, таким образом, что все переменные ввода/вывода выражаются как проценты.

B = B.*(ones(nx,1)*U_span);
C = C./(ones(nx,1)*Y_span)';

Шаг 3: Задайте модель объекта управления пространства состояний.

G = ss(A,B,C,D);
G.TimeUnit = 'hours';
G.u = {'Qc','Qr','R','D','B','F'};
G.y = {'P','RLev','Slev','xD','xB'};

Шаг 4: Уменьшайте порядок модели.

Снижение сложности модели ускоряет вычисления с незначительным эффектом на точность прогноза. Используйте "hsvd" команду, чтобы определить, какие состояния могут быть безопасно отброшены. Используйте функцию "balred", чтобы удалить эти состояния и уменьшать порядок модели.

[hsv, baldata] = hsvd(G);
order = find(hsv>0.01,1,'last');
Options = balredOptions('StateElimMethod','Truncate');
G = balred(G,order,baldata,Options);

Исходная модель имеет 120 состояний, и упрощенная модель имеет только 16 состояний. Обратите внимание на то, что "Усеченная" опция используется в функции "balred", чтобы сохранить нулевую D матрицу. Модель имеет два полюса в нуле, которые соответствуют этим двум уровням жидкости.

Протестируйте точность линейной модели объекта управления

Прежде, чем продолжить проект MPC, это - хорошая практика, чтобы проверить, что масштабированная модель LTI точна для небольших изменений во входных параметрах объекта. Для этого необходимо сравнить ответ нелинейного объекта в APD и ответ линейной модели G.

Шаг 1: Чтобы получить ответ нелинейного объекта, создайте модель Simulink и добавьте блок интерфейса Aspen Modeler в него.

Блок обеспечивается Аспеном Плюс Динамика в их библиотеке AMSimulink, показанной ниже:

Шаг 2: Дважды кликните блок и обеспечьте местоположение модели APD.

Информация о модели APD затем импортируется в Simulink. Для больших моделей APD может занять время процесс импорта.

Шаг 3: Задайте сигналы ввода и вывода в диалоговом окне блока "AMSimulation".

Используйте те же имена переменных и последовательность как в скрипте CDI.

Блок теперь показывает импорт и выходные порты для каждого сигнала, что вы задали.

Шаг 4: Расширьте модель Simulink с входным сигналом, прибывающим из переменной Umat и выходного сигнала, сохраненного в переменную Ypct_NL. Обе переменные создаются на Шаге 5.

Поскольку Umat находится в модулях процента, блок "Pct2Engr" реализован, чтобы преобразовать от модулей процента до технических модулей.

Поскольку Ypct_NL находится в модулях процента, блок "Engr2Pct" реализован, чтобы преобразовать от технических модулей до модулей процента.

Со всем соединенным и сконфигурированным, модель появляется можно следующим образом:

Шаг 5: Проверьте линейную модель с cosimulation.

В этом примере 1-процентное увеличение масштабированного уровня отлива (вход № 3) используется в качестве сигнала возбуждения к объекту.

U_nom_pct = (U_nom - U_zero)*100./U_span;   % Convert nominal condition from engineering units to percentages
Y_nom_pct = (Y_nom - Y_zero)*100./Y_span;
Tend = 1;                                   % Simulation duration (1 hour)
t = (0:1/60:Tend)';                         % Sample period is 1 minute
nT = length(t);
Upct = ones(nT,1)*U_nom_pct;
DUpct = zeros(nT,6);
DUpct(:,3) = ones(nT,1);                    % Input signal where step occurs in channel #3

Ответ линейной модели объекта управления вычисляется с помощью команды lsim и хранится в переменной Ypct_L.

Ypct_L = lsim(G,DUpct,t);
Ypct_L = Ypct_L + ones(nT,1)*Y_nom_pct;

Ответ нелинейного объекта получен через cosimulation между Simulink и Аспеном Плюс Динамика. Сигнал возбуждения Umat создается как ниже. Результат хранится в переменной Ypct_NL.

Umat = [t, Upct+DUpct];

Сравните линейные и нелинейные образцовые ответы.

Прогнозы модели LTI отслеживают нелинейные ответы хорошо. Количество ошибки прогноза приемлемо. В любом случае Образцовый Прогнозирующий Контроллер должен быть настроен, чтобы разместить ошибки прогноза, которые неизбежны в приложениях.

Можно повторить перечисленные выше шаги, чтобы проверить подобное соглашение для других пяти входных параметров.

Модель проекта прогнозирующий контроллер

Учитывая модель прогноза LTI, вы готовы разработать Образцовый Прогнозирующий Контроллер. В этом примере переменные, которыми управляют, являются первыми пятью входными параметрами объекта. Шестой вход объекта (скорость потока жидкости канала) является измеренным воздействием для прямой каналом компенсации. Весь объект выходные параметры измеряется.

Шаг 1: Увеличьте объект, чтобы смоделировать неизмеренные воздействия загрузки.

Испытывая недостаток больше в определенных деталях относительно воздействий загрузки, это - установившаяся практика, чтобы принять неизмеренное воздействие загрузки, происходящее в каждых из пяти входных параметров. Это позволяет средству оценки состояния MPC устранять смещение в каждом управляемом выводе, когда воздействие загрузки происходит.

В этом примере 5 неизмеренных воздействий загрузки добавляются к модели объекта управления G. Всего, существует теперь 11 входных параметров к модели Gmpc прогноза: 5 переменных, которыми управляют, 1 измеренное воздействие и 5 неизмеренных воздействий.

Gmpc = ss(G.A,G.B(:,[1:6,1:5]),G.C,zeros(5,11),'TimeUnit','hours');
InputName = cell(1,11);
for i = 1:5
    InputName{i} = G.InputName{i};
    InputName{i+6} = [G.InputName{i}, '-UD'];
end
InputName{6} = G.InputName{6};
Gmpc.InputName = InputName;
Gmpc.InputGroup = struct('MV',1:5,'MD',6,'UD',7:11);
Gmpc.OutputName = G.OutputName;

Шаг 2: Создайте начальный образцовый прогнозирующий контроллер и задайте шаг расчета и горизонты.

В этом примере демонстрационный период контроллера составляет 30 секунд. Горизонт прогноза является 60 интервалами (30 минут), который является достаточно большим, чтобы сделать производительность контроллера нечувствительной к дальнейшим увеличениям горизонта прогноза. Горизонт управления является 4 интервалами (2 минуты), который является относительно маленьким, чтобы уменьшать вычислительное усилие.

Ts = 30/3600;       % sample time
PH = 60;            % prediction horizon
CH = 4;             % control horizon 
MPCobj = mpc(Gmpc,Ts,PH,CH);  % MPC object
-->The "Weights.ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000.
-->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000.
-->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.

Шаг 3: Задайте веса для переменных, которыми управляют, и управлял выходными параметрами.

Веса являются ключевыми настраивающими корректировками в проекте MPC, и они должны быть выбраны на основе ваших целей управления.

Нет никакой причины содержать конкретный мВ в заданном значении, таким образом, обнуляет свойство Weights.ManipulatedVariables:

MPCobj.Weights.ManipulatedVariables = [0, 0, 0, 0, 0];

Продукт продукта перегонки (мВ № 4) переходит к устройству хранения данных. Единственный мВ, влияющий на нисходящие модульные операции, является нижним уровнем (мВ № 5). Чтобы препятствовать быстрым изменениям в нижнем уровне, сохраните вес по умолчанию 0,1 для его скорости изменения. Уменьшайте другие веса скорости изменения фактором 10:

MPCobj.Weights.ManipulatedVariablesRate = [0.01, 0.01, 0.01, 0.01, 0.1];

Цели управления предоставляют инструкции, чтобы выбрать веса на управляемых выходных параметрах:

  1. Давление башни должно быть отрегулировано плотно из соображений безопасности и из минимизации нарушений в температурах лотка и гидравлике. (объективный № 1)

  2. Состав продукта перегонки должен также быть отрегулирован плотно. (объективный № 2)

  3. Нижний состав может быть отрегулирован менее плотно. (объективный № 3)

  4. Уровни жидкости еще менее важны. (объективный № 4)

С этими приоритетами в памяти, веса на управляемых выходных параметрах выбраны можно следующим образом::

MPCobj.Weights.OutputVariables = [10, 0.1, 0.1, 1, 0.5];

Масштабирование модели упрощает выбор весов оптимизации. В противном случае, в дополнение к относительному приоритету каждой переменной, необходимо было бы также рассмотреть относительные значения переменных и выбрать веса соответственно.

Шаг 4: Задайте номинальные значения ввода/вывода объекта.

В этом примере номинальная стоимость масштабируется как проценты. Контроллер MPC требует, чтобы номинальная стоимость для неизмеренных воздействий была нулем.

MPCobj.Model.Nominal.U = [U_nom_pct'; zeros(5,1)];
MPCobj.Model.Nominal.Y = Y_nom_pct';

Шаг 5: Настройте усиление средства оценки состояния.

Корректировка усиления средства оценки состояния влияет на производительность подавления помех. Увеличение усиления средства оценки состояния (например, путем увеличения усиления возмущения ввода/вывода) заставляет контроллер отвечать более настойчиво к выходным изменениям (потому что контроллер принимает, что основной источник выходных изменений является воздействием вместо шума измерения). С другой стороны, уменьшение усиления средства оценки состояния делает систему с обратной связью более устойчивой.

Во-первых, проверяйте, обеспечивает ли использование средства оценки состояния по умолчанию достойную производительность подавления помех.

Моделируйте ответ с обратной связью на 1%-й модульный шаг в отливе (мВ № 3) в MATLAB. Симуляция использует G в качестве объекта, который не подразумевает образцового несоответствия.

T = 30;                                 % Simulation time
r = Y_nom_pct;                          % Nominal setpoints
v = U_nom_pct(6);                       % No measured disturbance
SimOptions = mpcsimopt(MPCobj);
SimOptions.InputNoise = [0 0 1 0 0];    % 1% unit step in reflux
[y_L,t_L,u_L] = sim(MPCobj, T, r, v, SimOptions); % Closed-loop simulation
-->Converting model to discrete time.
-->The "Model.Disturbance" property of "mpc" object is empty:
   Assuming unmeasured input disturbance #7 is integrated white noise.
   Assuming unmeasured input disturbance #8 is integrated white noise.
   Assuming unmeasured input disturbance #9 is integrated white noise.
   Assuming unmeasured input disturbance #10 is integrated white noise.
   Assuming unmeasured input disturbance #11 is integrated white noise.
   Assuming no disturbance added to measured output channel #1.
   Assuming no disturbance added to measured output channel #4.
   Assuming no disturbance added to measured output channel #5.
   Assuming no disturbance added to measured output channel #2.
   Assuming no disturbance added to measured output channel #3.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
% plot responses
f1 = figure();
subplot(2,1,1);
plot(t_L,y_L,[0 t_L(end)],[50 50],'k--')
title('Controlled Outputs, %')
legend(Gmpc.OutputName,'Location','NorthEastOutside')
subplot(2,1,2);
plot(t_L,u_L(:,1:5),[0 t_L(end)],[50 50],'k--')
title('Manipulated Variables, %')
legend(Gmpc.InputName(1:5),'Location','NorthEastOutside')
xlabel('Time, h')

Средство оценки по умолчанию обеспечивает вялое отклонение загрузки. В частности, критические xD выводят спады до 49%, и только что начал возвращаться к заданному значению после 0,25 часов.

Во-вторых, увеличьте усиление средства оценки путем умножения входного усиления возмущения по умолчанию на фактор 25.

EstGain = 25;                       % factor of 25
Gd = getindist(MPCobj);             % get default input disturbance model
Gd_new = EstGain*Gd;                % create new input disturbance model
setindist(MPCobj,'Model',Gd_new); % set input disturbance model
[y_L,t_L,u_L] = sim(MPCobj,T,r,v,SimOptions); % Closed-loop simulation
-->Converting model to discrete time.
   Assuming no disturbance added to measured output channel #1.
   Assuming no disturbance added to measured output channel #4.
   Assuming no disturbance added to measured output channel #5.
   Assuming no disturbance added to measured output channel #2.
   Assuming no disturbance added to measured output channel #3.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
% plot responses
f2 = figure();
subplot(2,1,1);
plot(t_L,y_L,[0 t_L(end)],[50 50],'k--')
title('Controlled Outputs, %')
legend(Gmpc.OutputName,'Location','NorthEastOutside')
subplot(2,1,2)
plot(t_L,u_L(:,1:5),[0 t_L(end)],[50 50],'k--')
title('Manipulated Variables, %')
legend(Gmpc.InputName(1:5),'Location','NorthEastOutside')
xlabel('Time, h')

Теперь, пиковое отклонение в xD является на 50% меньше, чем случай по умолчанию и xD возвращаются к своему заданному значению намного быстрее. Другие переменные также отвечают более быстро.

В-третьих, посмотрите на ответ отлива (#3 в "Переменных, которыми Управляют", график). Поскольку воздействие является 1%-м модульным шагом, ответ начинается в 51%, и его окончательное значение составляет 50% в устойчивом состоянии. Ответ отлива промахивается на 20% (достижение 49,8%) перед урегулированием. Эта сумма перерегулирования приемлема.

Если бы усиление средства оценки было увеличено далее (например, фактором 50), перерегулирование контроллера увеличилось бы также. Однако такое агрессивное поведение вряд ли будет устойчиво, когда применено нелинейная модель объекта управления.

Можно ввести другие воздействия загрузки, чтобы проверить, что подавление помех теперь быстро во всех случаях.

Масштабирование модели также упрощает настройку возмущения. В противном случае необходимо было бы настроить усиление каждого канала в возмущении, чтобы достигнуть хорошего подавления помех для всех загрузок.

Обычно вы затем проверяете ответ на изменения заданного значения. Если ответ слишком агрессивен, можно использовать фильтр заданного значения, чтобы сглаживать его. Фильтр заданного значения не имеет никакого эффекта на подавление помех загрузки и таким образом может быть настроен независимо.

Cosimulate контроллер MPC и нелинейный объект

Используйте cosimulation, чтобы определить, достаточно ли проект MPC устойчив, чтобы управлять нелинейной моделью объекта управления.

Шаг 1: Добавьте ограничения в контроллер MPC

Поскольку нелинейная модель объекта управления имеет ограничения ввода и вывода во время операции, мВ и ограничения OV заданы в контроллере MPC можно следующим образом:

MV = MPCobj.MV;
OV = MPCobj.OV;
% Physical bounds on MVs at 0 and 100 
for i = 1:5
    MV(i).Min = 0;
    MV(i).Max = 100;
end
MPCobj.MV = MV;
% Keep liquid levels greater than 25% and less than 75% of capacity.
for i = 2:3
    OV(i).Min = 25;
    OV(i).Max = 75;
end
MPCobj.OV = OV;

Шаг 2: Создайте модель Simulink для cosimulation.

Модель может моделировать 1%-й модульный шаг в отливе (мВ № 3). Это может также моделировать изменение в составе канала, который является общим воздействием и отличается от воздействий загрузки, рассмотренных явным образом в проекте.

Шаг 3: Моделируйте 1%-й модульный шаг в отливе (мВ № 3). Сравните ответы с обратной связью между использованием линейной модели объекта управления и использованием нелинейной модели объекта управления.

Постройте состав продукта продукта перегонки (xD) и уровень отлива (R):

В cosimulation образцовый прогнозирующий контроллер отклоняет маленькое воздействие загрузки способом, почти идентичным линейной симуляции.

Шаг 4: Моделируйте значительное сокращение части бензола (от 0,3 до 0,22) в потоке канала. Сравните ответы с обратной связью между использованием линейных и нелинейных моделей объекта управления.

Понижение части бензола требует длительного уменьшения в уровне продукта перегонки и соответствующего увеличения нижнего уровня. Там также поддержаны, заглядывает обязанностям тепла и незначительному увеличению отлива. Все корректировки мВ сглаженны, и все управляли выходными параметрами, почти вернулись к их заданным значениям в течение 0,5 часов.

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