You are on page 1of 6

clear all

clc
% ########## USER-DEFINED COUPLED-TANK CONFIGURATION
##########
% Chọn cấu hình 1, 2, or 3
TANK_CONFIGURATION = 1;
% TANK_CONFIGURATION = 2;
% TANK_CONFIGURATION = 3;
% Amplifier Gain used:
% Người sử dụng đặt nút ấn trên bộ khuếch đại thành 3
K_AMP = 3;
% Điện áp tối đa Digital-to-Analog (V); đối với thẻ MultiQ
được đặt thành 10
VMAX_DAC = 10;
% ########## USER-DEFINED COUPLED-TANK CONFIGURATION
##########

% ########## USER-DEFINED CONTROLLER DESIGN ##########


% Chọn chế độ tự động hoặc bằng tay: 'AUTO', 'MANUAL'
CONTROLLER_TYPE = 'AUTO'; % controller design: automatic
mode
% CONTROLLER_TYPE = 'MANUAL'; % controller design: manual
mode
% Cấu hình hệ thống bình thông nhau
if ( TANK_CONFIGURATION == 1 )
% Mức nước hoạt động tĩnh (cm)
L10 = 15;
% Thông số kỹ thuật bộ điều khiển
PO_1 = 11; % Độ quá điều chỉnh (%)
ts_1 = 5; % Thời gian quá độ với sai lệch tĩnh (s)
% Chống bão hòa tích phân cho giới hạn tích phân vòng
lặp mức bể 1
MAX_L1_WDUP = 3;
% Thời gian ổn định của vòng điều khiển khi đạt đến L10
(s)
TS = 15;
elseif ( TANK_CONFIGURATION == 2 )
% Mức nước hoạt động tĩnh (cm)
L20 = 15;
% Thông số kỹ thuật bộ điều khiển
PO_1 = 11; % Độ quá điều chỉnh bể 1 (%)
ts_1 = 5; % Thời gian quá độ với sai lệch tĩnh bể 1 (s)
% Thông số kỹ thuật bộ điều khiển
PO_2 = 10; % Độ quá điều chỉnh bể 2 (%)
ts_2 = 20; % Thời gian quá độ với sai lệch tĩnh bể 2 (s)
% Chống bão hòa tích phân cho giới hạn tích phân
% Vòng lặp mức bể 1 (V)
MAX_L1_WDUP = 3;
% Vòng lặp mức bể 2 (V)
MAX_L2_WDUP = 3;
% Giới hạn an toàn điểm đặt bể 1, Lr_1, (cm)
LR_1_MAX = 25;
% Thời gian ổn định của vòng điều khiển khi đạt đến L20
(s)
TS = 35;
elseif TANK_CONFIGURATION == 3
% Mức nước hoạt động tĩnh (cm)
L20 = 15;
% Chống bão hòa tích phân cho giới hạn tích phân
% Vòng lặp mức bể 1 (V)
MAX_L1_WDUP = 3;
% Vòng lặp mức bể 2 (V)
MAX_L2_WDUP = 3;
% Safety Limit on tank #1 setpoint, Lr_1, (cm)
LR_1_MAX = 25;
% Thời gian ổn định của vòng điều khiển khi đạt đến L20
(s)
TS = 35;
elseif TANK_CONFIGURATION == 4 %Không dùng
% Quiescent operating level (cm)
L20 = 10;
L40 = 14;
% Integral anti-windup maximum for the limiter
integrator
% Tank #1 level loop (V)
MAX_L1_WDUP = 3;
MAX_L3_WDUP = 3;
% Tank #2 level loop (cm)
MAX_L2_WDUP = 3;
MAX_L4_WDUP = 3;
% Safety Limit on tank #1 setpoint, Lr_1, (cm)
LR_1_MAX = 25;
LR_3_MAX = 25;
% Control loop initial Settling Time in reaching L20 (s)
TS = 35;
else
error( 'Error: Please set the tank configuration that
you wish to implement.' )
end
% Thông số bộ lọc thông thấp bậc nhất
% Hằng số thời gian của bộ lọc thông thấp cho tín hiệu cảm
biến áp suất của Bể số 1
tau_t1 = 1 / ( 2 * pi * 1.0 );
% Hằng số thời gian của bộ lọc thông thấp cho tín hiệu cảm
biến áp suất của Bể số 2
tau_t2 = 1 / ( 2 * pi * 0.33 );
% Bật / tắt giám sát an toàn ở mức bể 1: đặt thành 1 hoặc 0
L1_WD_EN = 1; % enable: watchdog on
%L1_WD_EN = 0; % disable: watchdog off
% Đặt giới hạn an toàn bể 1 cho giám sát (cm)
L1_MAX = 30;
% Bật / tắt giám sát an toàn ở mức bể 1: đặt thành 1 hoặc
0L2_WD_EN = 1; % enable: watchdog on
%L2_WD_EN = 0; % disable: watchdog off
% Đặt giới hạn an toàn bể 1 cho giám sát (cm)
L2_MAX = 25;
% ########## KẾT THÚC THIẾT KẾ BỘ ĐIỀU KHIỂN DO NGƯỜI DÙNG
ĐỊNH NGHĨA ##########

% Biến bắt buộc trong sơ đồ Simulink


global VMAX_AMP IMAX_AMP
% Độ nhạy cảm biến áp suất (cm/V)
global K_L1 K_L2

% Đặt các thông số mô hình phù hợp với cấu hình do người
dùng xác định của hệ thống Coupled-Tank.
% Các tham số này được sử dụng để biểu diễn mô hình và thiết
kế bộ điều khiển.
[ Kp, At1, Ao1, At2, Ao2, Ai1, Ai2, g ] =
setup_tanks_parameters( TANK_CONFIGURATION );

if strcmp ( CONTROLLER_TYPE, 'AUTO' )


% Tự động tính toán độ lợi của bộ điều khiển mức
if ( TANK_CONFIGURATION == 1 )
[ Kp_1, Ki_1, Kff_1 ] = d_tanks_1( Kp, At1, Ao1,
At2, Ao2, g, L10, PO_1, ts_1 );
% Hiển thị độ lợi được tính toán
disp( ' ' )
disp( [ 'Coupled-Tank System in Configuration #1.' ]
)
disp( 'Tank 1 level loop - Calculated PI controller
gains: ' )
disp( [ 'Kp_1 = ' num2str( Kp_1 ) ' V/cm' ] )
disp( [ 'Ki_1 = ' num2str( Ki_1 ) ' V/s/cm' ] )
disp( [ 'Kff_1 = ' num2str( Kff_1 ) ' V/cm^0.5' ] )
elseif ( TANK_CONFIGURATION == 2 )
[ Kp_1, Ki_1, Kff_1, Kp_2, Ki_2, Kff_2 ] =
d_tanks_2( Kp, At1, Ao1, At2, Ao2, g, L20, PO_1, ts_1, PO_2,
ts_2 );
% Display the calculated gains
disp( ' ' )
disp( [ 'Coupled-Tank System in Configuration #2.' ]
)
disp( 'Tank 1 level loop - Calculated PI controller
gains: ' )
disp( [ 'Kp_1 = ' num2str( Kp_1 ) ' V/cm' ] )
disp( [ 'Ki_1 = ' num2str( Ki_1 ) ' V/s/cm' ] )
disp( [ 'Kff_1 = ' num2str( Kff_1 ) ' V/cm^0.5' ] )
disp( 'Tank 2 level loop - Calculated PI controller
gains: ' )
disp( [ 'Kp_2 = ' num2str( Kp_2 ) ' cm/cm' ] )
disp( [ 'Ki_2 = ' num2str( Ki_2 ) ' 1/s' ] )
disp( [ 'Kff_2 = ' num2str( Kff_2 ) ' cm/cm' ] )
elseif ( TANK_CONFIGURATION == 3 )

Q = diag( [ 50 10 1000 ] );
R = 1;
[ Kp_1, Kp_2, Ki_2, gamma, Kff_2 ] = d_tanks_3( Kp,
At1, Ai1, Ao1, At2, Ai2, Ao2, g, L20, Q, R );
% [ Kp_1, Kp_2, Ki_2, gamma ] = d_tanks_3_pp( Kp,
At1, Ai1, Ao1, At2, Ai2, Ao2, g, L20, PO_1, ts_1, PO_2, ts_2
);

% Display the calculated gains


disp( ' ' )
disp( [ 'Coupled-Tank System in Configuration #3.' ]
)
disp( 'Tank 1 level loop - Calculated P controller
gain: ' )
disp( [ 'Kp_1 = ' num2str( Kp_1 ) ' V/cm' ] )
disp( 'Tank 2 level loop - Calculated PI controller
gains: ' )
disp( [ 'Kp_2 = ' num2str( Kp_2 ) ' cm/cm' ] )
disp( [ 'Ki_2 = ' num2str( Ki_2 ) ' 1/s' ] )
elseif ( TANK_CONFIGURATION == 4 )

At3=At1;
Ai3=Ai1;
Ao3=Ao1;
At4=At2;
Ai4=Ai2;
Ao4=Ao2;

Q = diag( [ 50 10 10000 50 10 10000] );


R = eye(2);
[ Kp_1_Vp1, Kp_2_Vp1, Ki_2_Vp1, Kp_3_Vp1, Kp_4_Vp1,
Ki_4_Vp1,Kp_1_Vp2, Kp_2_Vp2, Ki_2_Vp2, Kp_3_Vp2, Kp_4_Vp2,
Ki_4_Vp2, gamma1, gamma2, Kff_2 , Kff_4 ] = d_tanks_4( Kp,
At1, Ai1, Ao1, At2, Ai2, Ao2, At3, Ai3, Ao3, At4, Ai4, Ao4,
g, L20, L40, Q, R );
% [ Kp_1, Kp_2, Ki_2, gamma ] = d_tanks_3_pp( Kp,
At1, Ai1, Ao1, At2, Ai2, Ao2, g, L20, PO_1, ts_1, PO_2, ts_2
);

% Display the calculated gains


disp( ' ' )
disp( [ 'Coupled-Tank System in Configuration #4.' ]
)
disp( 'Tank 1 level loop - Calculated P controller
gain for control input of pump 1: ' )
disp( [ 'Kp_1_Vp1 = ' num2str( Kp_1_Vp1 ) '
V/cm' ] )
disp( 'Tank 2 level loop - Calculated PI controller
gains for control input of pump 1: ' )
disp( [ 'Kp_2_Vp1 = ' num2str( Kp_2_Vp1 ) ' cm/cm' ]
)
disp( [ 'Ki_2_Vp1 = ' num2str( Ki_2_Vp1 ) ' 1/s' ] )
disp( 'Tank 3 level loop - Calculated P controller
gain for control input of pump 1: ' )
disp( [ 'Kp_3_Vp1 = ' num2str( Kp_3_Vp1 ) '
V/cm' ] )
disp( 'Tank 2 level loop - Calculated PI controller
gains for control input of pump 1: ' )
disp( [ 'Kp_4_Vp1 = ' num2str( Kp_4_Vp1 ) ' cm/cm' ]
)
disp( [ 'Ki_4_Vp1 = ' num2str( Ki_4_Vp1 ) ' 1/s' ] )
disp( 'Tank 1 level loop - Calculated P controller
gain for control input of pump 2: ' )
disp( [ 'Kp_1_Vp2 = ' num2str( Kp_1_Vp2 ) '
V/cm' ] )
disp( 'Tank 2 level loop - Calculated PI controller
gains for control input of pump 2: ' )
disp( [ 'Kp_2_Vp2 = ' num2str( Kp_2_Vp2 ) ' cm/cm' ]
)
disp( [ 'Ki_2_Vp2 = ' num2str( Ki_2_Vp2 ) ' 1/s' ] )
disp( 'Tank 3 level loop - Calculated P controller
gain for control input of pump 2: ' )
disp( [ 'Kp_3_Vp2 = ' num2str( Kp_3_Vp2 ) '
V/cm' ] )
disp( 'Tank 2 level loop - Calculated PI controller
gains for control input of pump 2: ' )
disp( [ 'Kp_4_Vp2 = ' num2str( Kp_4_Vp2 ) ' cm/cm' ]
)
disp( [ 'Ki_4_Vp2 = ' num2str( Ki_4_Vp2 ) ' 1/s' ] )
else
error( 'Error: Please set the tank configuration
that you wish to implement.' )
end
elseif strcmp ( CONTROLLER_TYPE, 'MANUAL' )
Kp_1 = 0; Ki_1 = 0;
Kp_2 = 0; Ki_2 = 0;
disp( ' ' )
disp( 'STATUS: manual mode' )
disp( 'The model parameters of your Coupled-Tank system
have been set.' )
disp( 'You can now design a controller for your system.'
)
disp( ' ' )
else
error( 'Error: Please set the type of controller that
you wish to implement.' )
end

You might also like