Anda di halaman 1dari 7

Memprogram S Function di Simulink

Posted by admin on May 19th, 2009

Mengembangkan Program (S-Function) di Simulink


Dalam contoh ini akan dibuat model simulink yang mengolah isyarat sinus. Masukan berupa
isyarat sinus, di dalam block yang kita program isyarat tersebut diolah dengan persamaan
sederhana,

y = 5*x+2;

y adalah keluaran
x adalah masukan (isyarat sinus)

Berikut langkah-langkahnya,

1. Click tombol simulink untuk mengeluarkan block-block diagram Simulink Library


Browser di Matlab

Fig 1.

2. Untuk membuat model dengan Simulink, click File -> New -> Model, dari sini muncul
jendela model
3. Dari Simulink Library Browser, click atau pilih User-Defined functions, kemudian pilih di
system (S-Function). Caranya, click dan pegang block tersebut kemudian pindah dan
letakkan di jendela model anda.
Fig 2.

5. Double click block ini. Akan muncul jendela baru. Isikan S-function name dengan nama
block yang anda inginkan (misal dengan nama : “simulink_conto”). Click Apply dan
kemudian OK. Nama block akan berganti menjadi “simulink_conto”.

Fig. 3

6. Lengkapi model anda. Dalam contoh ini ada masukan berupa input Sinus dan output
Scope. Simpan sebagai: Simulink_model_conto.mdl
Fig. 4

7. Buka jendela editor Matlab. Dari jendela Matlab, File -> New -> M-File. Ketikkan
program m-file untuk “simulink_conto”. Pastikan judul function-nya adalahsimulink_conto.
Berikut contoh programnya. Dapat anda copy paste-kan ke editor Matlab anda.

function [sys,x0,str,ts] = simulink_conto(t,x,u,flag)


switch flag,
case 0
[sys,x0,str,ts] = mdlInitializeSizes; % Initialization
case 3
sys = testsinus(t,x,u); % Calculate outputs
case { 1, 2, 4, 9 }
sys = []; % Unused flags
otherwise
error(['Unhandled flag = ',num2str(flag)]); % Error handling
end;

function [sys,x0,str,ts] = mdlInitializeSizes


sizes = simsizes;
sizes.NumContStates= 0;
sizes.NumDiscStates= 0;
sizes.NumOutputs=    1;
sizes.NumInputs=     1;
sizes.DirFeedthrough=1;
sizes.NumSampleTimes=1;

sys = simsizes(sizes);
x0 = []; % No continuous states
str = []; % No state ordering
ts = [-1 0]; % Inherited sample time
end

function sys = testsinus(t,x,u)


sys = 5*u+2;
end

end

Setelah selesai, simpan sebagai “simulink_conto.m”.


8. Pastikan anda bekerja di folder yang sama, baik di jendela Matlab (Fig. 1), model
(Simulink_model_conto.mdl, Fig. 4),  dan simulink_conto.m

9. Dari jendela model, jalankan model simulink ini. Simulation -> Start. Lihat Hasilnya di
Scope (Double click Scope)

Fig. 4

Memanfaatkan S-Parameter
Masih dalam contoh yang sama, sekarang isyarat sinus diolah dengan menggunakan
parameter-parameter masukan, sebagai berikut,

y = a*x+b;

Sebagai contoh a = 4, dan b = 2. Double click model simulink_conto, kemudian parameter a


dan b dimasukkan dari sini,

Fig 5.

Kedua parameter tersebut dipisahkan dengan koma (” , “).


Dari m-file editor, tambahkan argument masukan, jumlah parameter, tambahkan source
program untuk flag=1. Lengkapnya program  simulink_conto.m menjadi,

function [sys,x0,str,ts] = simulink_conto(t,x,u,flag, a, b)  % ada tambahan masukan yaitu :  a, b


switch flag,
:
case 1     % tambahkan case 1
sys = [0 0];
:
case { 2, 4, 9 } % <– case 1 hilang di sini, pindah ke atas
:
:
end;

function [sys,x0,str,ts] = mdlInitializeSizes(a, b)  % parameter a, b dimasukkan


:
sizes.NumContStates= 2;  % jumlah parameter ada 2
:
:
x0 = [a b];  % initial states-nya berupa vektor dengan panjang vektor 2
:

function sys = testsinus(t,x,u)


sys = a*u+b;   %  <<<———————persamaan-nya di sini
end

end

Jalankan, Simulation -> Start. Lihat Hasilnya di Scope (Double click Scope)

Ada 2 (dua) Keluaran


Sekarang keluaran terdiri atas dua vektor, atau matriks 2×1, yaitu

Dari m-file editor, tambahkan argument masukan, jumlah parameter, tambahkan source
program untuk flag=1. Lengkapnya program  simulink_conto.m menjadi,

function [sys,x0,str,ts] = mdlInitializeSizes(a, b)  % parameter a, b dimasukkan


:
sizes.NumOutputs=    2;  % Jumlah output = 2
:
:

function sys = testsinus(t,x,u)


sys1 = a*u+b;
sys2 = -a*u+b;
sys = [sys1; sys2];
end

end

Hasil keluaran bisa dilihat dengan dua buah Scope dengan menggunakan Demux. Demux
diperoleh dari Simulink Library Browser -> Simulink -> Commonly Used Block -> Demux.
hasilnya,

Jalankan, Simulation -> Start. Lihat Hasilnya di Scope (Double click Scope)

Ada 2 (dua) Input


Jika input ada dua, atau lebih. Misal keluaran adalah fungsi dari dua buah masukan

Dari m-file editor, tambahkan argument masukan, jumlah parameter, tambahkan source
program untuk flag=1. Lengkapnya program  simulink_conto.m menjadi,

function [sys,x0,str,ts] = mdlInitializeSizes(a, b)  % parameter a, b dimasukkan


:
sizes.NumOutputs=    1;
sizes.NumInputs=     2; % Jumlah input = 2
:
:

function sys = testsinus(t,x,u)


sys = a*u(1)-b*u(2);
end

Masukan/input dihubungkan ke block dengan menggunakan Mux. Mux diperoleh


dari Simulink Library Browser -> Simulink -> Commonly Used Block -> Mux. Berikut
gambar diagramnya,
Jalankan, Simulation -> Start. Lihat Hasilnya di Scope (Double click Scope)

Anda mungkin juga menyukai