MATLAB: Simulasi Sistem Kendali Kontinu di M-File


Biasanya kita mensimulasikan sistem kendali di simulink. Simple, lebih gampang, tinggal memasang blok-blok. Tapi kadang-kadang lebih sulit melakukan simulasi di simulink karena sistem kita terlalu rumit, misalkan kendali time-varying LQR. Sistem ini feedback gainnya berubah sepanjang waktu dan harus dihitung dengan persamaan diferensial ricatti. Bayangkan bagaimana caranya menyelesaikan persamaan ricatti di simulink sambil menjalankan simulasi? Saya sih bingung, lebih baik pakai m-file saja kalau begitu.  

Ini ada satu contoh cara simulasi di m-file, tapi sistemnya bukan time-varying LQR. Sistem yang dipakai di sini proses kimia nonlinear. Pertama-tama, kita buat dulu satu m-file untuk model plant, kita beri nama plant.m

function dx = plant(t,x)
dx = zeros(2,1);
global u;
dx(1) = -x(1) + 0.072*(1-x(1))*exp(x(2)/((x(2)/20)+1));
dx(2) = -x(2) + 8*0.072*(1-x(1))*exp(x(2)/((x(2)/20)+1)) – 0.3*x(2) + 0.3*u;

2 baris terakhir dari file ini adalah persamaan state space plant. State spacenya memiliki control input u, jadi harus dideklarasikan variable global u karena nilai u ini akan berasal dari luar m-file ini.

Lalu, kita buat lagi satu m-file untuk mensimulasikan plant plus controllernya. Kita beri nama simulasi.m

clc; clear; close all;
global u;
dt = 0.1;       % timestep
N = 100;         % final time
t = 0:dt:N;     % time vector
% reference input
x2s = 2.7517;   k2 = 0.1;       r = x2s.*(1 – exp(-k2.*t));
% plant states
X = zeros(N/dt+1,2);
X(1,:) = 0; % initial condition
% simulation
for i=1:N/dt+1
% control input
u = (X(i,2)-8*0.072*(1-X(i,1))*exp(X(i,2)/((X(i,2)/20)+1))+0.3*X(i,2)-1*(X(i,2)-r(i)))/0.3;
% compute states
[T,x] = ode45(@plant, [0 dt], X(i,:));
% saving variables
[j,k] = size(x);
if(i+1<=N/dt+1) X(i+1,1) = x(j,1); end;
if(i+1<=N/dt+1) X(i+1,2) = x(j,2); end;
U(i) = u;
end;

Pertama, kita tentukan sample time (dt), lama simulasi (N), dan time vectornya (t). Di simulasi ini sample time nya 0.1 sec dan lamanya 100 sec. Lalu kita buat sinyal reference nya (r) jika dibutuhkan. Kalau cuma simulasi regulator ya mungkin tidak perlu reference ya.

Kemudian, kita buat vector penampung states-nya (X). Karena sistem orde 2, jadi state X terdiri dari 2 kolom dan N baris. Jadi X menampung nilai states sepanjang simulasi. Jangan lupa juga untuk menetapkan nilai awal states atau initial condition-nya.

Lalu bagian ketiga adalah simulasi. Pertama kita hitung dahulu control input u nya (ohya, jangan lupa deklarasikan u sebagai global variable). Tak usah bingung lihat control input di sini yang ribet persamaannya, ini karena sistem nonlinear jadi persamaannya lebih rumit.

Sehabis itu, kalkulasi states dari plant dengan control input tadi. Cara kalkulasinya adalah dengan menggunakan perintah ode45. ode45 ini adalah fungsi untuk menyelesaikan persamaan diferensial. Ada fungsi-fungsi lainnya yang juga untuk menyelesaikan persamaan diferensial: ode15s, ode113, ode23, dll. Perbedaan fungsi-fungsi ini ada di metode numerik yang digunakan. Untuk menyelesaikan persamaan diferensial yang umum biasanya kita menggunakan ode45.

[T,x] = ode45(@plant, [0 dt], X(i,:))

fungsi ini menghasilkan 2 vector: T dan x. T adalah time vector dari x, dan x adalah nilai state. Argument fungsi ini adalah

  • @plant untuk memanggil fungsi plant.m yang sudah kita buat tadi
  • [0 dt] adalah rentang waktu yang diselesaikan (satu sample)
  • X(i,:) adalah state awal atau initial condition

Terakhir, kita simpan state hasil fungsi ode45 dan control input ke variable X dan U. Perhatikan bahwa state yang disimpan hanya state paling akhir dari hasil kalkulasi ode45. Ini karena kita hanya butuh state pada tiap sample time dt (untuk pengertian lebih lanjut, baca ini). Lalu kita ulangi lagi kalkulasi control input dan states untuk timestep berikut hingga loop mencapai N, atau waktu simulasi.

Hasil simulasinya kalau diplot jadinya seperti ini:

Contoh ini menggunakan sistem nonlinear. Sistem linear juga bisa disimulasikan seperti ini, tinggal merubah  plant dan control inputnya saja. Kalau ingin mencoba bisa download file-file-nya di sini dan sini.

About Junot D. Ojong

Author is a control systems engineer at a private company in Jakarta.
This entry was posted in MATLAB and tagged , , , , , , . Bookmark the permalink.

7 Responses to MATLAB: Simulasi Sistem Kendali Kontinu di M-File

  1. cute says:

    hallo, saya mau nanya bagaimana cara membuat grafik dengan matlab untuk sistem persamaan differensial non linier???

  2. Koak says:

    Met siang Gan, Saya mau tanya kalau mau membuat plot untuk 3 persamaan differensial yang saling terkait caranya gimana?

  3. syahrul says:

    Met siang, saya mau nanya nih, bagaimana kalau yang mau kita plot itu sistem persamaan differensial non linear dengan time varying LQR yang punya feedback gain dan persamaan riccati nya?
    Mohon pencerahaannya ya
    terimakasih

  4. Intan says:

    Malam kak.
    Kak kalau M-file yang kakak berikan ini. Bisa tidak untuk mengecek kestabilan global suatu penyebaran penyakit

Leave a reply to cute Cancel reply