Upload
others
View
58
Download
4
Embed Size (px)
Citation preview
SIMULATORAPLIKASI
DENGAN DELPHIKENDALI LABORATORIUM
Muhammad Rif’an
i
Muhammad Rif’an
APLIKASI SIMULATOR
LABORATORIUM KENDALI
DENGAN DELPHI
ii
Perpustakaan Nasional: Katalog Dalam Terbitan (KDT) Muhammad Rif’an
Aplikasi Simulator Laboratorium Kendali dengan Delphi oleh Muhammad Rif’an, –– Jakarta : Ricardo Publishing and Printing, 2007. v + 197 hlm. ;
ISBN 978-979-3644-40-0 Cetakan kedua, Agustus 2019 Penerbit Ricardo Publishing and Printing, anggota Ikapi Jl. Raya Pasar Minggu KM 18 No 8B, Jakarta Selatan 12510. Telp. (021) 790 1467, 798 2057, 798 2058 Fax: (021) 798 2055. E-mail: [email protected], [email protected] Hak Cipta © Muhammad Rif’an, 2019
iii
KATA PENGANTAR
Puji syukur kehadirat Allah SWT, atas rahmat dan karunia-Nya sehingga buku ini dapat terselesaikan. Saya juga mengucapkan terima kasih kepada seluruh pihak yang telah membantu, khususnya keluarga yang telah memberikan dukungan penuh, baik spirit dan moral kepada saya untuk segera menyelesaikan buku ini.
Buku ini saya tulis sebagai pemikiran awal bagi para pemprogram Delphi di Indonesia yang berkecimpung menangani masalah sistem kendali. Selain itu buku ini juga saya tujukan kepada dunia pendidikan khususnya kejuruan dalam hal pemanfaatan komputer/ICT sebagai media pembelajaran yang saat ini sedang gencar-gencarnya dikembangkan.
Buku ini terdiri dari 9 bagian, pada bagian pertama mengulas alasan perlunya membuat sebuah simulator, bagian kedua hingga ketiga mengulas bagaimana menterjemahkan fungsi-fungsi matematik menjadi sebuah algoritma. Bagian keempat mengulas tentang ADC/DAC sebagai sarana penterjemah input/output sinyal analog menjadi digital atau sebaliknya. Bagian kelima mengulas singkat tentang pemprograman delphi. Bagian keenam mengulas mengenai rancangan perangkat ADC/DAC dan bagaimana menghubungkannya dengan bahasa pemprograman. Bagian ketujuh dan kedelapan mengulas pembuatan simulator sistem kendali dan pengendali berdasarkan algoritma yang telah dibahas dan bagian sembilan merupakan penutup buku ini.
Akhirnya, sebagai karya manusia, saya menyadari mungkin terdapat kekurangan pada buku ini. untuk itu saya sangat senang menerima kritik atau saran sebagai bahan masukan untuk menyempurnakan buku ini. Kritik dan saran dapat langsung disampaikan ke [email protected].
Wassalam
Muhammad Rif'an
iv
v
DAFTAR ISI
KATA PENGANTAR ......................................................................................... iii
DAFTAR ISI ........................................................................................................ v
BAGIAN 1 PENDAHULUAN ............................................................................ 1
BAGIAN 2 REPRESENTASI SISTEM KENDALI ........................................... 3
BAGIAN 3 REPRESENTASI PENGENDALI ................................................. 11
BAGIAN 4 ANALOG DIGITAL CONVETER – DIGITAL ANALOG
CONVETER ....................................................................................................... 33
BAGIAN 5 BAHASA PEMPROGRAMAN DELPHI ...................................... 39
BAGIAN 6 ANTARMUKA ADC/DAC ........................................................... 49
BAGIAN 7 IMPLEMENTASI SISTEM KENDALI ......................................... 55
BAGIAN 8 IMPLEMENTASI PENGENDALI ................................................ 87
BAGIAN 9 KESIMPULAN ............................................................................. 193
DAFTAR PUSTAKA ...................................................................................... 196
vi
1
BAGIAN 1 PENDAHULUAN
Sistem pengendalian telah memasuki berbagai aspek kehidupan, dari peralatan industri seperti heat changer, kolom distilasi, dan robotika hingga peralatan rumah tangga seperti televisi, mesin cuci, dan pendingin ruangan. Pengaplikasian sistem pengendalian ini, menurut D’Azzo (2003) merupakan kebutuhan, karena bertambahnya populasi dunia menyebabkan bertambah pula keperluan pendukung kehidupan, dan dengan sistem pengendalian suatu produk dapat ditingkatkan jumlah produksinya namun dengan kualitas produk yang tetap terjaga. Sedangkan Ogata (2001) berpendapat bahwa sistem pengendalian mempertinggi kualitas, menurunkan biaya produksi, mempertinggi laju produksi dan meniadakan pekerjaan rutin. Jadi sistem pengendalian merupakan
Berdasarkan penggunaan dan manfaat sistem pengendalian tersebut, dunia pendidikan diharuskan mampu menyediakan lulusan yang memahami sistem pengendalian khususnya penerapannya di dunia industri. Salah satu sarana yang efektif untuk memahami sistem pengendalian atau bahkan kemungkinan pengembangan sistem pengendalian adalah praktikum. Namun sarana praktikum untuk sistem pengendali dirasa sangat mahal sehingga ditempuh penggunaan sarana sistem pengendali menggunakan simulasi berbantuan komputer.
Memang telah banyak simulasi dalam bentuk perangkat lunak yang digunakan untuk praktikum sistem pengendali namun kendala hak cipta menyebabkan harga perangkat lunak tersebut menjadi relatif mahal. Sebagai contoh Labview produksi National Intruments ditawarkan dengan harga hampir 20 juta rupiah, MatLab produksi MathWorks, suatu program dengan kemampuan yang besar terhadap sistem kendali, ditawarkan secara lisensi dengan harga hampir 1,5 juta per tahun per komputer, dan Symbols 2000 produksi HighTech Consultans, Indian Institute of Technology ditawarkan dengan harga lebih dari 120 juta rupiah.
Rumusan Masalah
Sebagai sumbangsih pada dunia pendidikan, buku ini akan membahas bagaimana membuat suatu program simulasi pengendalian, selanjutnya disebut simulator, yang memfokuskan pada pengendali
2
PID (Proportional Integrator Derivative), pole assigment self tuning dan fuzzy. Simulator ini akan terdiri dari dua bagian yaitu simulator proses yang diusahakan sebagai representasi proses, dan simulator pengendali yang diusahakan dapat mewakili pengendali fisis PID, Self Tuning dan Fuzzy. Pembagian simulator ini memiliki tujuan agar proses pengendalian dapat dilakukan serupa mungkin dengan proses pengendalian yang sesungguhnya yaitu dengan menerapkan sinyal kendali dan akuisisi sinyal keluaran mengunakan standar industri yaitu sinyal elektrik 4-20 mA (1-5VDC) dan untuk mencapai tujuan tersebut simulator ini mempergunakan antarmuka berupa ADC-DAC (Analog Digital Converter – Digital Analog Converter). Selain itu dengan mempergunakan antarmuka ini simulator ini akan dapat diterapkan secara langsung baik untuk mengendalikan suatu proses industri yang sesungguhnya ataupun sebagai suatu proses untuk pengujian atau penalaan parameter pengendali fisis.
Metodologi
Simulator dibuat menggunakan bahasa pemrograman Delphi Client/Server versi 4.0 dan antarmuka yang digunakan adalah ADC-DAC yang berkemampuan 8 bit.
Pada simulator proses, proses industri yang dibahas terbatas pada proses dengan satu masukan satu keluaran yang direpresentasikan secara matematik dengan model state variable dengan orde sistem maksimal yaitu orde sepuluh, menggunakan algoritma runge-kutta orde empat, dan memiliki fasilitas waktu tunda dan fasilitas non-linier yang berupa dead time dan saturasi.
Pada Simulator pengendali sistem kendali PID yang diimplementasikan merupakan Digital PID, sedangkan pada self tuning, teknik yang dipergunakan adalah teknik pole assignment dengan estimator rekursif kuadrat terkecil yang menggunakan faktor pelupa. Untuk pengendali fuzzy, fungsi keanggotaan yang dipergunakan adalah fungsi segitiga, dengan proses inferensi minimum-maksimum dan teknik defuzzifikasi yang diimplementasikan adalah teknik titik berat.
3
BAGIAN 2 REPRESENTASI SISTEM KENDALI
Terdapat beberapa metode untuk merepresentasikan suatu proses dengan persamaan matematis, diantaranya linear differential equation, transfer function dan state variable. Kedua metode pertama, mendasarkan pada transformasi Laplace untuk mendapatkan persamaan aljabar hubungan masukan-keluaran. Sedangkan metode terakhir, mendasarkan pada persamaan differensial orde satu dalam bentuk matrik. Sehingga dengan menggunakan state variable akan lebih mudah mempresentasikan sistem berorde-n ke dalam sistem komputer dengan menggunakan persamaan aljabar hubungan masukan-keluaran, karena sistem orde-n akan direpresentasikan dengan n persamaan differential orde satu. Sedangkan untuk kedua sistem pertama terdapat kendala numerik dalam implementasinya menggunakan sistem komputer.
Selain itu sistem state variable lebih umum digunakan untuk simulasi. Algoritma penyelesaiannyapun yang menggunakan sistem komputer telah berkembang diantaranya metode Runge Kutta yang berbasis pada algorima integral secara numerik. Metode Runge Kutta memiliki tingkat kepresisian yang tinggi jika dibanding metode lainnya, Euler ataupun Hund, dan lebih effisien sehingga lebih cepat perhitungannya.
2.1. State Variable
Bentuk umum persamaan state variable linear time-invariant sistem yang analog satu masukan satu keluaran adalah
�̇�(𝑡) = 𝐴𝑥(𝑡) + 𝐵𝑢(𝑡) 𝑝𝑒𝑟𝑠𝑎𝑚𝑎𝑎𝑛 𝑘𝑒𝑎𝑑𝑎𝑎𝑛
𝑦(𝑡) = 𝐶𝑥(𝑡) + 𝐷𝑢(𝑡) 𝑝𝑒𝑟𝑠𝑎𝑚𝑎𝑎𝑛 𝑘𝑒𝑙𝑢𝑎𝑟𝑎𝑛 (2.1)
dengan vektor �̇�(𝑡) adalah turunan terhadap waktu dari vektor x(t) dan dalam persamaan ini,
x(t) = vektor keadaan = vektor (nx1) dari sebuah sistem orde-n
A= matrik sistem (n x n)
B= matrik input (n x 1)
u(t)= vektor input = vektor masukan (1 x 1)
4
y(t)= vektor output = vektor keluaran (1 x 1)
C= matrik output (1 x n)
D= matrik kopling antara masukan dan keluaran (1 x 1)
dan
�̇�(𝑡) = [
�̇�1(𝑡)�̇�2(𝑡)
⋮�̇�𝑛(𝑡)
]
=
)(
)(
)(
)(2
1
tx
tx
tx
tx
n
Dengan state variable, perilaku dari suatu proses dapat ditentukan
secara lengkap untuk setiap waktu t to berdasarkan informasi variabel-variabel persamaan keadaan pada waktu t=to dan masukan
selama t to. Dengan kata lain keadaan suatu proses pada saat t secara unik ditentukan oleh keadaan tersebut pada t=to dan masukan untuk t
to, dan tidak bergantung pada keadaan dan masukan sebelum to.
Karena bentuk linear differential equation dan transfer function lebih sering digunakan, dibawah ini akan dibahas transformasi dari kedua bentuk tersebut menjadi state variable.
Misalkan suatu proses sistem diberikan pada gambar 2.1. Dengan masukannya adalah gaya f(t) dan keluarannya adalah perubahan kedudukan , massa M, y(t).
Gambar 2.1. Sistem translasi mekanik
5
Dengan menggunakan hukum dinamika newton didapat persamaan gaya sistem adalah
)()(
)()(
2
2
tKydt
tdyBtf
dt
tydM −−= (2.2)
dan fungsi transfernya diberikan
KBsMssF
sYsG
++==
2
1
)(
)()( (2.3)
Tahap pertama memodelkan state variable adalah menentukan variabel-variabel keadaannya, pada umumnya jumlah variabel keadaan berdasarkan pada orde sistem, jika sistem berorde-n maka jumlah variabelnya adalah n, sehingga untuk kasus ini karena ordenya dua maka variabel keadaannya dua yaitu x1(t) dan x2(t). Setelah variable ditentukan tahap selanjutnya adalah menentukan persamaan keadaan dari variabel keadaan, yaitu
)()(1 tytx = (2.4)
dan
)()()(
)( 11
2 txdt
tdx
dt
tdytx === (2.5)
Karena x1(t) adalah posisi dari massa M dan x2(t) adalah turunan posisi, kecepatan, maka berdasarkan persamaan (2.2), (2.4) dan (2.5) didapat persamaan
)(1
)()()()()(
1222
2
2
tfM
txM
Ktx
M
Btx
dt
tdx
dt
tyd
+
−
−=== (2.6)
Dengan lengkapnya persamaan keadaan maka dapat dibentuk matrik state variabel dan ini merupakan langkah terakhir, dan berdasarkan persamaan-persamaan keadaan didapat bentuk matriknya adalah
[�̇�1(𝑡)�̇�2(𝑡)
] = [0 1
−𝐾
𝑀−
𝐵
𝑀
] [𝑥1(𝑡)𝑥2(𝑡)
] + [01
𝑀
]𝑓(𝑡)
𝑦(𝑡) = [1 0] [𝑥1(𝑡)𝑥2(𝑡)
] (2.7)
6
dengan �̇�𝑖(𝑡) =𝑑𝑥𝑖(𝑡)
𝑑𝑡 dan i= 1, 2.
Sehingga secara umum jika terdapat persamaan liniear differential equation berbentuk
)(011
1
1 tuyadt
dya
dt
yda
dt
ydn
n
nn
n
=++++−
−
− (2.8)
maka persamaan keadaannya adalah
[
�̇�1�̇�2⋮
�̇�𝑛−1�̇�𝑛 ]
=
[
0 1 0 ⋯ 00 0 1 ⋯ 0⋮0 0 0 ⋯ 1
−𝑎0 −𝑎1 ⋯ 𝑎𝑛−1]
[
𝑥1𝑥2⋮
𝑥𝑛−1𝑥𝑛 ]
+
[ 00⋮01]
𝑢(𝑡)
(2.9)
sedangkan persamaan keluarannya
=
−
n
n
x
x
x
x
y
1
2
1
0001 (2.10)
dan untuk persamaan transfer function dengan bentuk
01
1
1
01
2
2
1
1 )(
)(
)()(
asasas
bsbsbsbK
sR
sCsG
n
n
n
n
n
n
n
++++
++++==
−
−
−
−
−
−
(2.11)
memiliki persamaan keadaan
[
�̇�1�̇�2⋮
�̇�𝑛−1�̇�𝑛 ]
=
[
0 1 0 ⋯ 00 0 1 ⋯ 0⋮0 0 0 ⋯ 1
−𝑎0 −𝑎1 ⋯ 𝑎𝑛−1]
[
𝑥1𝑥2⋮
𝑥𝑛−1𝑥𝑛 ]
+
[ 00⋮0𝐾]
𝑢(𝑡) (2.12)
dan persamaan keluaran
7
=
−
−−
n
n
nn
x
x
x
x
bbbby
1
2
1
1210 (2.13)
2.2. Metode Runge Kutta
Untuk mendapatkan perilaku proses untuk t to, State variable tidak bergantung pada keadaan dan masukan sebelum to namun ditentukan
dari keadaan t = to dan masukan tto. Karena itu pada subbab ini akan
dibahas perhitungan selama t to menggunakan metode Runge Kutta .
Jika terdapat persamaan
),( ytfdt
dy= (2.14)
maka dalam bentuk lain dan turunan selanjutnya adalah
dan berdasarkan definisi turunan, yaitu
t
tytty
tdt
dyay
dt
dy
−+
→==
)()(
0
lim (2.15)
dengan a adalah konstanta jika diambil t sekecil mungkin maka didapat
t
tytty
dt
dy
−+
)()( (2.16)
dan persamaan aproksimasinya menjadi
8
ttaytytty +=+ )()()( (2.17)
dan ini diilustrasikan pada gambar 2.2. Jika pada inisialisasi t=to maka
ttaytytty +=+ )()()( 000 (2.18)
dan jika t1=t0+t maka
ttaytytty +=+ )()()( 111 (2.19)
sehingga dengan tk+1=tk+t didapat bentuk umum
ttaytyty kkk +=+ )()()( 1 (2.20)
Gambar 2.2. Integral secara numerik
Berdasarkan persamaan (2.20) pada runge kutta, jika y=f(t,y) yang berorde n maka didapat
(2.21)
dengan memilih n=4 maka didapat
(2.22)
atau dalam bentuk lain, dengan t = h dan �̇�𝑘 = 𝑓𝑘
kkkkkkdt
fdh
dt
fdh
dt
dfhhfyy )()(
24
1)()(
6
1)(
2
13
34
2
232
1 ++++=+ (2.23)
9
karena
fy
f
t
f
dt
dy
y
f
t
f
dt
df
+
=
+
=
sehingga
fffdt
dfyt +=
dan didapat persamaan runge kutta orde 4 adalah
hkkkkyy kk
++++=+ )43211 22(
6
1 (2.24)
dengan
),(
)2
1,
2
1(
)2
1,
2
1(
),(
34
23
12
1
hkyhtfk
hkyhtfk
hkyhtfk
ytfk
kk
kk
kk
kk
++=
++=
++=
=
(2.25)
Dengan didapatkannya persamaan (2.24) dapat disusun algoritma perhitungan dengan menggunakan metode Runge Kutta orde ke empat untuk menghitung keadaan proses industri dengan model state variable, yaitu:
1. Definiskan parameter sistem Matrik Sistem [A], Matrik input [B], Matrik output [C]
2. Definisikan h (interval)
3. Definisikan nilai awal x0 untuk t=to
4. Dapatkan nilai x untuk t.
5. Hitung k1 , k2 , k3 dan k4 menggunakan pers 2.25
6. Hitung keseluruhan keluaran menggunakan pers. 2.24
10
11
BAGIAN 3 REPRESENTASI PENGENDALI
Pada bab ini akan dibahas pengendali PID yang sangat banyak digunakan di dunia industri, pengendali self tuning dengan kemampuan beradaptasi dan penalaan sendiri serta pengendali fuzzy. Seluruh pengendali di atas merupakan pengendali digital yang akan diimplementasikan pada komputer.
3.1. Pengendali PID
Pengendali PID memiliki tiga komponen penyusun yaitu Proportional yang dinyatakan dengan Proportional Band (PB), Integrator yang dinyatakan dengan Time Integrator (Ti) dan Derivatif dinyatakan dengan Time Derrivative (Td). Proportional Band merupakan invers dalam persen dari Proportional Gain (Kp) yang pada pengunaannya memiliki efek mempercepat respon sistem seiring kenaikan Kp karena keluaran dari proportional merupakan nilai perkalian dengan nilai Kp. Pada Integrator berfungsi sebagai penghilang error steady state karena nilai masukan akan diintegrasi yang pada prinsipnya merupakan jumlahan yang terus menerus dari perubahan nilai masukan sehingga nilai keluaran dari integrator akan selalu sama jika tidak terjadi perubahan pada sinyal masukan atau berharga nol, sedangkan pada Derivatif berfungsi sebagai stabilisasi karena sinyal keluaran merupakan derivatif nilai masukan dan bersifat ketika terjadi perubahan mendadak pada nilai masukan maka derivatif akan merespon dengan perubahan yang sangat besar dan cepat, dan jika tidak terjadi perubahan maka sinyal keluaran derivatif juga tidak mengalami perubahan.
Berdasarkan tiga komponen tersebut, pengendali PID memiliki tiga struktur yaitu paralel, seri dan mix. Blok diagram ketiga struktur digambarkan pada gambar 3.1. Berdasarkan struktur masing-masing PID jika e(t) merupakan masukan ke pengendali dan m(t) adalah keluaran pengendali maka masing-masing pengendali akan memiliki persamaan masukan keluaran dalam bentuk kontinyu sebagai berikut:
• Stuktur paralel
dt
tdeTdtte
TtKetm d
t
i
)()(
1)()(
0++= (3.1)
12
• Struktur seri
+++=t
i
dd
i
teT
KT
dt
tdeKTdtte
T
KtKetm
0)(
)()()()( (3.2)
• Struktur mix
dt
tdeKTdtte
T
KtKetm d
t
i
)()()()(
0++= (3.3)
dengan K adalah proportional gain, Ti adalah integral time dan Td adalah derivative time.
Berdasarkan persamaan masukan-keluaran persamaan (3.1, 3.2, 3.3) akan didapat persamaan keluaran-masukan pengendali PID digital dengan penurunannya secara numerik pada komputer digital yang akan mempengaruhi unjuk kerja pengendali PID digital. Menurut Philips (1991) jika perhitungan numerik untuk itegrasi dan diferensi akurat, maka pengendali PID digital memiliki sedikit perbedaan dengan pengendali PID analog.
P I
D
e(t) m(t)
P
I
e(t)
m(t)
D
P
I
D
e(t) m(t)
PARAREL
MIX
SERI
Gambar 3.1. Struktur pengendali PID
13
Pada integrasi akan dicari luas daerah dibawah kurva, ilustrasi perhitungan numerik untuk integrasi digambarkan pada gambar 3.2. Luas area dari setiap segmen dibawah kurva diaprokmasikan sebagai luas segiempat yang diarsir. Jika m(t) adalah integral dari e(t) dan T adalah waktu sampling dengan k=0,1,2,…, maka nilai integral t=(k+1)T sama dengan nilai m pada t=kT ditambah luas dibawah kurva e(t) antara kT dan (k+1)T, dituliskan dalam bentuk persamaan sebagai berikut:
TkTekTmTkm )1()()1( ++=+ (3.4)
Gambar 3.2. Ilustrasi integrasi kurva e(t)
Transformasi z dari persamaan 3.4 adalah
)0()()()0()( ezETzzMmzMz −+=− (3.5)
dengan membuat nilai awal sama dengan nol fungsi masukan-keluaran dari integrasi adalah
)(1
)(1
zEz
TzM
−−= (3.6)
Untuk derivative akan dicari slope (kemiringan) dari suatu kurva, ilustrasi dari proses ini digambarkan pada gambar 3.3. Dengan proses ini diasumsikan slope e(t) pada saat t=(k+1)T sama dengan gradient garis lurus yang menghubungkan e(kT) dan e[(k+1)T], dan dalam bentuk persamaan adalah:
T
kTeTkeTkm
)()1()1(
−+=+ (3.7)
14
Transformasi z dari persamaan 3.7 adalah
)(1
)(1
zET
zzM
−−= (3.8)
Gambar 3.3. Ilustrasi derivatif kurva e(t)
Dengan mendefinisikan KP=K , KI=1/Ti dan KD=Td maka persamaan 3.1, 3.2 dan 3.3 menjadi
dt
tdeKdtteKteKtm D
t
Ip
)()()()(
0++= (3.9)
+++=t
DIPdPIPp teKKKdt
tdeKKdtteKKteKtm
0)(
)()()()( (3.10)
dt
tdeKKdtteKKteKtm DP
t
IPP
)()()()(
0++= (3.11)
sehingga dengan menggunakan persamaan 3.6 dan 3.7 didapat persamaan keluaran-masukan pengendali PID secara numerik dalam z adalah
)()1(
1)(
1
1zE
T
zK
z
TKKzM DIP
−+
−+=
−
− (3.12)
)()1(
1)(
1
1zE
T
zKK
z
TKKKKKKzM DPIPDIPP
−+
−++=
−
− (3.13)
)()1(
1)(
1
1zE
T
zKK
z
TKKKzM DPIPP
−+
−+=
−
− (3.14)
15
dan secara numerik persamaan 3.12, 3.13, dan 3.14 memiliki bentuk
Struktur paralel
T
kekeKkwKkeKkm DIIP
)()1()1()1()1(
−+++++=+ (3.15)
Struktur seri
T
kekeKK
kwKKkeKKKkeKkm
DP
IIPDIPP
)()1(
)1()1()1()1(
−+
++++++=+
(3.16)
Struktur mix
T
kekeKKkwKKkeKkm DPIIPP
)()1()1()1()1(
−+++++=+ (3.17)
dengan )1()()1( ++=+ kTekwkw II
Sehingga algoritma untuk pengendali PID adalah sebagai berikut
1. Definisikan KP, KI, KD, waktu sampling T dan struktur PID.
Kp=K, KI=1/Ti dan KD=Td.
2. Cuplik masukan e(k)
3. Hitung m(k+1) menggunakan persamaan 3.15, 3.16 atau 3.17 berdasarkan struktur pengendali PID yang ditentukan.
4. Kembali ke langkah 2 untuk pencuplikan selanjutnya.
3.2. Pengendali self tuning pole assigment
Teknik pengendali self tuning pole assigment bertujuan memenuhi persamaan karakteristik kutub-kutub lingkar tertutup suatu sistem sama dengan suatu bentuk persamaan yang diinginkan. Bentuk persamaan yang diinginkan tersebut dapat merupakan representasi unjuk kerja sistem yang diinginkan, misalnya tanggapan waktu, seperti pada desain pengontrolan secara klasik.
16
Secara struktur pengendalian self tuning pole assigment digambarkan sebagai berikut
Gambar 3.4. Struktur self tuning pole assigment
Berdasarkan pada gambar 3.4, struktur self tuning terdiri dari tiga bagian yaitu:
1. Blok Recursive estimator kuadrat terkecil, mengestimasi model sistem dari data masukan dan data keluaran.
2. Blok Pole assigment, menentukan estimasi aturan pengendalian berdasarkan model hasil estimasi.
3. Blok Pengontrol, mengimplementasikan aturan pengontrol hasil blok pole placement dan menghasilkan sinyal pengontrol yang akan diterapkan pada sistem.
Sedangkan prinsip kerja self tuning pole assigment adalah data dari sinyal kontrol u(t) dan sinyal keluaran y(t) diberikan kepada recursive estimator kuadarat terkecil, pada estimator ini akan diestimasi parameter-parameter sistem. Pada estimator inilah self tuning berperan yaitu beradaptasi terhadap perubahan parameter sistem. Selanjutnya estimasi parameter sistem diterapkan pada pole assigment untuk mendapatkan aturan pengendalian yang memenuhi kriteria desain yang diinginkan. Dengan aturan inilah dihasilkan sinyal kontrol yang diterapkan pada sistem. Sinyal kontrol yang baru dihasilkan dan selanjutnya menghasilkan sinyal keluaran baru diberikan kembali ke estimator demikian seterusnya.
Selanjutnya akan dibahas mengenai recursive estimator dan pole assigment self tuning.
17
3.2.1. Recursive Estimator
Recursive Estimator berperan untuk mengestimasi parameter-parameter sistem dan kuadrat terkecil dipilih dalam mengestimasi koefisien parameter sistem dikarenakan hasilnya yang memuaskan dalam mengindentifikasi sistem selain itu digunakan pula faktor pelupa yang akan membuang (melupakan) data-data yang tidak signifikan lagi sehingga estimasi tetap mampu merespon dan peka terhadap perubahan pada sistem. Rekursive ditekankan karena proses estimasi berjalan secara on-line. Pada estimasi ini dimisalkan model fungsi alih adalah sebagai berikut:
).(
)1()()()1()( 11
bn
oan
ntub
tubtubntyatyaty
b
a
−+
+−+=−++−+
(3.18)
atau dalam bentuk lain
)()( tuA
Bty
= (3.19)
Dengan
+++=
+++=
−−−
−−−
b
b
a
a
n
no
n
n
zbzbbzB
zazazA
1
1
1
1
1
1
)(
1)( (3.20)
Dimana u(t) adalah harga masukan bagi sistem dan y(t) merupakan harga keluaran dari sistem. Fungsi alih ini sebenarnya tidak diketahui dengan pasti atau dianggap berubah-ubah, dan koefisien-koefisien dari polinomial A dan B merupakan parameter yang harus diestimasi.
Dalam praktek, sebagian besar proses memiliki waktu tunda, baik untuk perhitungan maupun pengiriman data yang besarnya dapat
dinyatakan dengan sd k = , dengan d (waktu tunda), k (banyaknya
waktu tunda), dan s (waktu pencuplikan), dan dengan operator z waktu tunda dinyatakan sebagai z-k, sehingga persamaan (3.18) menjadi
)()( tuA
Bzty
k−
= (3.21)
dengan A dan B seperti didefinisikan pada persamaan (3.20).
18
Persamaan (3.21) ditulis dalam bentuk lain, yaitu
)()( txty = (3.22)
dengan merupakan vektor koefisien parameter sistem yang tidak diketahui yang didefinisikan sebagai berikut:
ba non
bbaa ,,,,,1 −−= (3.23)
dan x(t) merupakan vektor regression yang sebagian anggotanya merupakan variabel masukan dan keluaran hasil pengukuran secara langsung dan didefinisikan sebagai
)1(,),1(),(,),1()( −−−−−= ba ntutuntytytx (3.24)
dalam melakukan estimasi pasti akan terjadi kesalahan. Perkiraan besarnya kesalahan ini dinyatakan sebagai e(t) yang menyatakan besarnya kesalahan (error) yang terjadi pada saat estimasi.
Sehingga persamaan 3.22 menjadi
)()()( tetxty += (3.25)
Karena sistem telah berjalan selama suatu selang waktu, maka pada saat t terkumpul sebanyak N buah pasangan data. Berdasarkan data tersebut dapat disusun vektor dan matriks sebagai berikut :
+
=
)(
)2(
)1(
)(
)2(
)1(
)(
)2(
)1(
te
e
e
tx
x
x
ty
y
y
(3.26)
atau dalam bentuk lain
)()()( ttXt += (3.27)
dengan
19
)()2()1(
)()2()1(
)()2()1(
teee
txxxX
tyyy
=
=
=
Dalam bentuk lain persamaan 3.27 menjadi
)()()()( ttXtYtE −= (3.28)
Kuadrat terkecil bertujuan untuk meminimalkan kuadrat dari error, dan didefinisikan
==
=
t
n
neJ1
2 )( (3.29)
dengan mensubtitusikan persamaan (3.28) ke persamaan (3.29) didapat
( ) ( )
XXXX
XXJ
+−−=
−−=
Nilai minimum didapat dengan menurunkan (derivative) J terhadap dan dengan asumsi nilai awalnya nol, sehingga didapat
XXX
XXXJ
=
=+−=
022
ˆ
pemecahan ini memiliki nilai minimum yang unik karena turunan
keduanya nol.
Berdasarkan pemecahan diatas maka estimasi untuk koefisien-koefisien parameter sistem adalah
)()()()()( 1 ttXtXtXt = − (3.30)
Jika data ditambah dengan data yang diperoleh pada saat t+1, maka persamaan 3.26 menjadi :
20
+
=
+
=+
+=
+
=+
)1(
)(
)1(
)(
)2(
)1(
)1(
)1(
)(
)1(
)(
)2(
)1(
)1(
ty
t
ty
ty
y
y
t
tx
tX
tx
tx
x
x
tX
(3.31)
untuk estimasi pada waktu t+1 adalah
)1()1()1()1()1( 1 ++++=+ − ttXtXtXt (3.32)
Berdasarkan persamaan 3.31 dan 3.32 didapat
)1()1()()(
)1(
)()1()()1()1(
+++=
++=++
txtxtXtX
tx
tXtxtXtXtX
(3.33)
dan
)1()1()()(
)1(
)()1()()1()1(
+++=
+
+=++
tytxttX
ty
ttxtXttX
(3.34)
selanjutnya dengan mendefinisikan
=
=
−
)()()(
)()()(1
ttXtR
tXtXtP (3.35)
dan didapat persamaan (3.30) dan (3.32) berdasarkan persamaan 3.35
21
=
++=+
)()()(
)1()1()1(
tRtPt
tRtPt
(3.36)
sehingga persamaan (3.33) menjadi
)1()1()()1( 11 +++=+ −− txtxtPtP (3.37)
dan persamaan (3.34) menjadi
)1()1()()1( +++=+ tytxtRtR (3.38)
Persamaan (3.37) berbentuk invers, untuk menyelesaikannya digunakan matrix inversion lemma yang didefinisikan sebagai berikut
(A+BCD)-1=A-1-A-1B(C-1+DA-1B)-1DA-1
Dengan mensubtitusikan A = P(t)-1, C = 1, B = x(t+1), D = xT(t+1) maka persamaan (3.37) sekarang menjadi :
+++
++−=+
)1()()1(1
)()1()1()()1(
txtPtx
tPtxtxItPtP m (3.39)
P(t) merupakan matriks yang disebut Matriks Covariance, dan nilai P(t+1) dapat langsung diperoleh dari nilai P(t) dan data pada saat t+1.
Selanjutnya dengan mensubtitusikan persamaan (3.25) pada saat t+1 ke persamaan (3.38) didapat
)1()1()()1()1()()1( ++++++=+ tetxttxtxtRtR (3.40)
Dengan mensubtitusikan persamaan (3.40) ke (3.36) didapat
)1()1()1()()1( ++++=+ tetxtPtt (3.41)
Harga P(t) akan mengecil setelah sistem berjalan lama atau keadaan mantap, hal terjadi karena rumusan P(t+1) sebanding dengan P(t) jika P(t) terus mengecil karena sistem telah mantap maka P(t+1) pun akan mengecil dan ini menyebabkan estimasi tidak dapat mendeteksi dan bereaksi dengan cepat ketika terjadi perubahan pada sistem baik yang cepat atau yang lambat karena matriks covariance perlu waktu yang
22
lama untuk membuat harga elemen-elemennya menjadi besar kembali. Kecepatan adaptasi ini dinyatakan dengan persamaan :
−=
1
1N
dan adalah faktor pelupa yang harganya berkisar antara 0 hingga 1.
Dengan digunakannya faktor pelupa, persamaan (2.39) akan menjadi
)1()1()()1( ++−=+ txtkItPtP Tm
(3.42)
dengan k adalah
)1()()1(
)1()()1(
+++
+=+
txtPtx
txtPtk
T (3.43)
Perumusan untuk (t+1) dan E(t+1) tetap tidak berubah
Algoritma estimasi parameter dengan recursive least square adalah sebagai berikut :
1. Tentukan model na, nb, nilai faktor pelupa dan nilai awal P(0)
dan (0).
2. Susun vektor x(t) dari data masukan dan keluaran yang baru
3. Hitung error berdasarkan persamaan 3.28
4. Hitung k(t) dengan memakai persamaan 3.43
5. Hitung vektor (t) dari (0) menurut persamaan )()()1()( tetktt +−=
6. Hitung matriks covariance P(t) dari persamaan 3.42
7. Kembali ke langkah 2 untuk pencuplikan selanjutnya.
23
3.2.2. Pole Assigment
Setelah parameter sistem diestimasi selanjutnya dilakukan langkah penentuan parameter kendali berdasarkan
)()()( tGytHrtFu −= (3.44)
secara blok diagram digambarkan pada gambar 3.5.
Gambar 3.5. Blok diagram pengontrol pole assigment
Dengan mengkombinasikan persamaan (3.18) dan (3.44) didapat deskripsi loop tertutup sistem adalah sebagai berikut
( ) )()( tBHrtyBGFA =+ (3.45)
dan persamaan karakteristik sistem loop tertutupnya adalah
( )BGFA += (3.46)
Jika diingikan pole-pole loop tertutupnya berada pada T maka harus dipenuhi
TBGFA =+ (3.47)
dengan polinomial-polinomial F, G , H diberikan sebagai berikut
h
h
g
g
f
f
n
no
n
no
n
n
zhzhhH
zgzggG
zfzfF
−−
−−
−−
+++=
+++=
+++=
1
1
1
1
1
11
dan
24
t
t
n
n ztztT−− +++= 111
Pemecahan persamaan (3.47) akan unik jika derajat nf dan ng dipilih sebagai berikut
( )01 −=
=
aag
bf
nnn
nn
dan sebagai tambahan cbat nnnn −+ .
Dalam bentuk matrik persamaan 3.47 dapat dituliskan sebagai berikut
−
−
−
=
0
0
00000
0
0
1
0
1
00001 11
1
0
2
1
2
11
22
1212
121
1
na
ntnt
ng
nf
na
nbna
nbna
nb a
at
at
g
g
g
f
f
f
a
baa
baa
bba
bbaa
bba
b
dengan sinyal kendali
)()1(
)()()1()(.)(
1
01
ngtygtyg
tygnftuftuftrHtu
ng
nf
−−−−
−−−−−−−=
(3.48)
Sebagai contoh pemecahan adalah misalkan na=3, nb=2 dan nt=1 maka nf=2 dan ng=2. Persamaan (3.46) ditulis secara lengkap
)1())((
)1)(1(
1
1
2
2
1
1
2
2
1
1
3
3
2
2
1
1
2
2
1
1
−−−−−
−−−−−
+=+++++
+++++
ztzgzggzbzbb
zazazazfzf
oo
jika ditulis dalam bentuk matrik
25
−
−
−
=
0
0
000
0
01
0001
3
2
11
2
1
2
1
23
1223
01212
011
a
a
at
g
g
g
f
f
ba
bbaa
bbbaa
bba
b
o
o
dengan
bAx
bAx
1−=
=
dan (a30b2) didapat polinomial F dan G.
Sedangkan untuk polinomial H subtitusi persamaan (3.47) ke persamaan (3.45) maka akan didapat
)1()( −= trT
HBty (3.49)
dan pemecahan H yang termudah
1=
=
zB
TH (3.50)
Setelah didapatkan polinomial F, G dan H maka sinyal kendali yang diumpankan ke sistem adalah:
)2()1()()2()1()(.)( 21021 −−−−−−−−−= tygtygtygtuftuftrHtu
dengan
bAx
bAx
1−=
=
dan (a30b2).
Algoritma pengendali self tuning pole assigment adalah
1. Definisikan Polinomial T yang diinginkan.
26
2. Gunakan koefisien hasil estimasi parameter (koefisien polinomial A dan B).
3. Tentukan ‘rank’ dari F dan G yang diperbolehkan berdasarkan ‘rank’ dari A dan B.
4. Susun suatu matriks koefisien A dan B.
5. Susun vektor T kurang A, dimana T merupakan pole yang ingin dicapai melalui pengendalian ini.
6. Kemudian cari penyelesaian persamaan matriks Ax=b sehingga diperoleh koefisien [ f1, . . . . ., fnf, go, . . . . . , gng ].
7. Hitung H menurut persamaan 3.52.
8. Hitung sinyal kendali u(t) yang harus dikirimkan ke sistem dengan menggunakan persamaan 3.48.
9. Kembali ke langkah 2 untuk pencuplikan selanjutnya.
3.3 Pengendali Fuzzy
Pengendali fuzzy digunakan ketika, salah satunya, terdapatnya kesulitan dalam memodelkan secara matematis suatu sistem yang akan dikendalikan karena kompleksitasnya dan keinginan tingkat akurasi yang tinggi. Karena dalam pengendali fuzzy tidak diperlukan persamaan model matematis ataupun fungsi alih karena pengendali fuzzy mendasarkan pada pengalaman yang terangkum pada basis data dan basis aturan serta menggunakan variabel-variabel linguistik yang mendukung adanya unsur ketidakpastian.
Sistem Pengendali Fuzzy ini memiliki tiga bagian utama, yaitu:
1. Fuzzifikasi (fuzzyfication), bagian ini merupakan proses pengubahan masukan menjadi fungsi keanggotaan (membership fuzzy)
2. Inferensi (Inference), bagian ini merupakan proses pemetaan masukan yang telah di fuzzifikasi kedalam bentuk keluaran logika fuzzy.
27
3. Defuzzifikasi (Defuzzyfication), bagian ini merupakan proses pengubahan keluaran logika fuzzy menjadi bentuk keluaran yang sebenarnya.
Pada implementasinya dalam pengendalian, pengendali fuzzy mempergunakan sistem dengan lingkar tertutup dan digambarkan pada gambar 3.7.
Fuzzifikasi
Basis Pengetahuan
Inferensi
Basis Aturan
Defuzzifikasi Plant
Pengendali Fuzzy
InputOutput
-+
Basis Pengetahuan
Gambar 3.6. Blok Diagram Sistem kendali logika fuzzy
3.3.1. Fuzzifikasi
Fuzzifikasi merupakan langkah merubah masukan pengendali fuzzy yang merupakan fuzzy set menjadi nilai keanggotaan (membership dan
dilambangkan dengan ) dari suatu fuzzy subset. Pengubahan ini dapat dilakukan dengan menggunakan fungsi keanggotaan ataupun secara numerik. Pada tesis ini digunakan fungsi keanggotaan karena sifat kekontinyuannya dan tidak tergantung pada banyaknya elemen dari masukan dan ini lebih fleksibel dalam merubah fungsi keanggotaan.
Terdapat beberapa fungsi keanggotaan yaitu fungsi-S, fungsi-, fungsi-segitiga, fungsi-trapezoid dan fungsi-eksponensial. Fungsi-segitiga adalah yang paling umum digunakan karena keanggotaannya tidak nol pada interval yang sempit dan menjadi nol untuk diluar interval.
Fungsi-segitiga didefinisikan sebagai
28
−
−
−
−
=
cu
cubbc
uc
buacb
auau
cbauT
0)(
)()(
)(0
),,;( (3.51)
a b c
u
1.0
0.5
0
Gambar 3.7. Fungsi Segitiga
Sehingga jika terdapat nilai u=50 dan a=-100, b=0 dan c=100 didapat
nilai keanggotaan (50)=(100-50)/(100-0)=0.5. atau digambarkan seperi gambar 3.8.
-100 0 100
u
1.0
0.5
0
50
Gambar 3.8
Nilai keanggotaan (50)
3.3.2. Inferensi
Pada inferensi akan ditentukan keputusan keluaran domain fuzzy berdasarkan basis keputusan. Basis data dan aturan yang berbentuk IF…THEN….. yang berarti jika suatu kondisi terpenuhi maka laksanakan suatu kondisi berikut. Sebagai contoh If A=1 and B=1 then
29
C=2, arti dari pernyataan tersebut adalah jika A sama dengan 1 dan B juga sama dengan 1 maka C adalah 2.
Terdapat beberapa teknik inferensi, namun yang utama dan paling umum adalah MAX-MIN dan MAX-DOT karena waktu perhitungannya yang cepat.
Misalkan terdapat dua aturan yaitu
Aturan 1: IF x adalah A1 AND y adalah B1 THEN z adalah C1
Aturan 2: IF x adalah A2 AND y adalah B2 THEN z adalah C2
Untuk nilai masukan x0 dan y0 maka hasil operasi AND yang
dinyatakan dengan adalah:
)()(
)()(
02022
01011
yx
yx
BA
BA
=
= (3.52)
Sedangankan operasi logika pada fuzzy memiliki definisi sebagai berikut
Operasi AND
)(),(min)()()( xxxxx BABABA ==
Operasi OR
)(),(max)()()( xxxxx BABABA ==
Sehingga hasil operasi AND pada persamaan 3.52 akan menghasilkan nilai minimum dari nilai keanggotaan A1 dan B1.
Untuk operasi inferensi MAX-MIN didefinisikan pada semua nilai w di C adalah sebagai berikut:
))(())(()( 2211 www cCC = (3.53)
dan digambarkan pada gambar 3.9
30
A 1
X0
1
B 1
Y0
1
C 1
W0
1
A 2
X0
1
B 2
Y0
1
C 2
W0
1
x 0y 0
W0
1
Gambar 3.9 Inferensi MAX-MIN
Sedangkan untuk operasi MAX-DOT yang didefinisikan pada semua nilai w di C adalah
))(())(()( 2211 www cCC = (3.54)
seperti terlihat pada gambar 3.10
A 1
X0
1
B 1
Y0
1
C 1
W0
1
A 2
X0
1
B 2
Y0
1
C 2
W0
1
x 0y 0
W0
1
Gambar 3.10 Inferensi MAX-DOT
3.3.3. Deffuzifikasi
Setelah didapat hasil inferensi, maka langkah selanjutnya pada fuzzy adalah defuzzifikasi yang akan mengkonversi nilai fuzzy menjadi nilai yang sebenarnya. Pada real time, menurut Yan Jun, terdapat dua metode yang umum digunakan pada proses deffuzifikasi yaitu metode titik berat dan metode rata-rata maksimum. Pada tesis ini digunakan
31
metode titik berat karena metode rata-rata maksimum memerlukan fungsi keanggotaan yang simetris dan ini belum sepenuhnya didukung oleh fungsi segitiga.
Metode Titik Berat (Centroid) disebut juga sebagai metode pusat gravitasi. Persamaan Metode Titik Berat (Centroid) adalah
=
=
=n
i
C
n
i
iC
i
wi
w
1
1
)(
)(
(3.55)
Sehingga pada pengendali fuzzy, algoritmanya adalah sebagi berikut:
1. Tentukan batas-batas nilai fungsi keanggotaan masukan dan keluaran, serta aturan-aturan yang akan diimplementasikan.
2. Konversi nilai masukan ke domain fuzzy menggunakan persamaan 3.51.
3. Lakukan inferensi berdasarkan aturan-aturan yang diberikan.
4. Berdasarkan hasil inferensi, tentukan nilai keluaran menggunakan persamaan 3.55.
5. Kembali ke langkah dua jika terdapat masukan selanjutnya atau selesai.
32
33
BAGIAN 4 ANALOG DIGITAL CONVETER –
DIGITAL ANALOG CONVETER
Analog Digital Conveter (ADC) berfungsi untuk mengubah sinyal analog menjadi sinyal digital. Terdapat beberapa jenis teknik pengkonversian diantaranya Parallel Comparator, Dual Slope dan Successive Approximation. Pada tesis ini dipilih ADC yang menggunakan teknik Successive Approximation karena relatif murah dan cukup cepat waktu konversinya. Blok diagram dari ADC yang menggunakan teknik Successive Approximation digambarkan pada gambar 4.1. Teknik ini merupakan teknik membandingkan tegangan input dengan tegangan yang dibangkitkan ADC yang telah dikonversikan Digital Analog Conveter (DAC) yang terdapat pada ADC. Jika tegangan yang dibangkitkan lebih kecil maka ADC akan menambah tegangan yng dibangkitkannya dan bila lebih besar maka tegangan yang dibangkitkan akan diturunkan. Tegangan yang dibangkitkan tersebut dihasilkan oleh control logic dengan menggeser-geser bit-bit yang diaplikasikan kepada DAC.
Gambar 4.1 Blok diagram ADC Succesive Approximation
Sebagai ilustrasi, diasumsikan rangkaian ADC memiliki kemampuan 8 bit dengan tegangan referensi 5 Volt dan input tegangan yang akan dikonversi adalah 2 Volt. Setelah ada perintah untuk memulai konversi, maka logika pengontrol akan mereset register sehingga berada dalam keadaan nol. Setelah itu bit MSB diset menjadi 1. Data dalam register dengan MSB yang telah diubah menjadi 1 tersebut selanjutnya diubah menjadi sinyal analog oleh DAC yang ada. Bila output DAC ternyata masih lebih kecil dari level tegangan input, maka harga 1 dalam MSB
34
terus dipertahankan. Sebaliknya bila output DAC ternyata lebih besar dari tegangan input, maka harga 1 pada MSB dikembalikan ke 0.
Selanjutnya diperiksa untuk bit-bit selanjutnya, bila semua bit telah dievaluasi maka rangkaian ADC akan menyatakan bahwa proses konversi telah selesai dilakukan dan bila belum maka logika pengontrol dari rangkaian ADC akan mengeset bit disebelah kanan MSB menjadi 1 dan proses ini berulang hingga seluru hbit diperiksa.
Untuk ilustrasi di atas maka prosesnya adala hsebagai berikut:
1. MSB (bit ke 8) di set menjadi 1, sehingga output DAC sama dengan 2,56 V. Output ini ternyata masih lebih besar dari tegangan input, sehingga bit MSB tersebut dikembalikan ke 0.
2. Selanjutnya, bit disebelah kanan MSB (bit ke 7) dievaluasi, diset menjadi 1 dan keluaran DAC menjadi 1,28 V, karena output DAC lebih kecil dari tegangan input maka bit ke 7 dipertahankan tetap 1.
3. Demikian selanjutnya sehingga seluruh bit terevaluasi dan hasil konversinya adalah sebagai berikut:
MSB bit 8
7 6 5 4 3 2 LSB bit1
0 1 1 0 0 1 0 0
Pengkonversian oleh ADC/DAC memerlukan waktu yang tergantung dari clock yang diterapkan ke ADC, dan ADC yang dipergunakan
adalah ADC0804 yang memiliki waktu konversi 100 s. ADC 0804 dikemas dalam DIP 20 dan memiliki hubungan pin-pinnya seperti gambar 4.2, berikut ini:
35
Gambar 4.2. Pin ADC 0804
Dan implementasinya secara tipikal digambarkan pada gambar 4.3 berikut:
Gambar 4.3. Tipikal aplikasi ADC 0804
Tegangan yang akan dikonversi diberikan ke pin Vin(+), untuk perintah pengkonversian dilakukan dengan memberikan sinyal ke START CONVERT (pin 3) dan ADC akan memulai pengkonversian sinyal analog ke digital. Untuk mendapatkan hasil konversi diberikan sinyal ke READ (pin 2).
Untuk DAC, prinsip kerjanya berdasarkan cara kerja op-amp dengan persamaan tegangan keluaran jika dirangkai seperti gambar 4.2 adalah sebagai berikut :
in
in
f
out VR
RV = (4.1)
36
Rf
Vout
Rin
Vin
Gambar 4.4 Rangkaian Op-amp
Pada DAC yang akan diatur agar keluaran analog sesuai dengan masukan data biner adalah resistor masuk (Rin) dengan susunan rangkaian seperti pada gambar 4.4. Jika terdapat data 1 pada masukan gerbang AND maka resistor pada data 1 tersebut akan aktif karena gerbang AND telah aktif. Dengan demikian Rin secara keseluruhan berubah dan sesuai dengan persamaan 4.1 akan didapat tegangan keluaran.
Vout
bit 1
bit 2
bit 3
bit 4
bit 5
bit 6
bit 7
bit 8
Vcc
Rf
R
R/2
R/4
R/8
R/16
R/32
R/64
R/128
Gambar 4.5. Rangkaian DAC 8 bit
Sebagai ilustrasi misalkan akan dikonversi data 00101100, dengan nilai
R=255k , Rf=1k dan tegangan masuk adalah 5 V. Berdasarkan data masukan maka gerbang AND yang aktif adalah untuk bit-3, bit-4 dan bit-6 sehingga didapat
37
44
441
32841
32/
1
8/
1
4/
11
RR
RR
RRRR
RRRR
in
in
in
in
=
=
++=
++=
dan dengan menggunakan persamaan 4.1 didapat
VV
VV
VR
RV
VR
RV
VR
RV
out
out
in
f
out
in
f
out
in
in
f
out
8627.0
5*255000
1000*44
*44
44/
=
=
=
=
=
Pada tesis ini digunakan DAC 0808 dengan prinsip kerja seperti dijelaskan di atas, dan DAC ini dikemas dalam DIP 16 dan memiliki pin seperti gambar 4.6 dibawah ini.
Gambar 4.6. Pin DAC 0808
Dalam pengunaannya pada rangakain elektronik secara tipikal seperti gambar 4.7 berikut ini:
38
Gambar 4.7. Rangkaian Tipikal DAC 0808
Kerja dari rangkaian diatas adalah ketika terdapat data pada masukannya maka akan dikonfersikan langsung ke nilai analognya, periode ini hanya membutuhkan waktu 150 ns. Karena hal ini, agar implementasinya pada komputer yang menggunakan bus data tidak terjadi kerancuan konversi data maka ditambahkan buffer sebagai penyimpan data yang seharusnya dikonversi oleh DAC ini. Buffer ini adalah merupakan register penyimpan data 8 bit yang akan menampung data dan akan dikeluarkan ke DAC setelah terdapat perintah pengeluaran data. Buffer yang digunakan bertipe 74374 dengan pin konektor digambarkan pada gambar 4.8 berikut ini:
Gambar 4.8. Diagram Pin 74374
Dengan menserikan buffer dan DAC maka perintah konversinya dapat dikendalikan dengan memberikan signal OUTPUT CONTROL pada buffer sehingga memudahkan pada sisi pemprograman.
39
BAGIAN 5 BAHASA PEMPROGRAMAN DELPHI
Delphi adalah bahasa pemrograman yang dikhususkan untuk membuat aplikasi berbasis windows. Delphi dibangun dengan berorientasi objek (object oriented), artinya semua komponen yang ada merupakan objek-objek. Ciri sebuah objek adalah memiliki nama, properti dan method/procedure. Delphi sering juga disebut juga sebagai visual programming karena komponen-komponennya muncul dalam bentuk gambar-gambar. Selain itu Delphi juga disebut bahasa pemprograman event driven atau dengan kata lain semua perintah didasarkan pada kejadian-kejadian.
Lingkungan Delphi
Pertama kali menjalankan Delphi akan tampil 3 jendela utama yaitu Form, Object Inspector, dan Menu Delphi.
1. Form
Sebuah form kosong secara otomatis dibuat oleh Delphi. Form tersebut biasanya memiliki nama Form1. Pada Form inilah akan ditempatkan komponen-komponen yang berfungsi sebagai antarmuka aplikasi yang dibangun. Untuk mengubah ukuran form dilakukan dengan menarik bingkai form menggunakan mouse (drag=klik tombol kiri mouse, tahan tombol tersebut lalu geser ke kiri/kanan atau atas/bawah). Sedangkan untuk memindahkan form dilakukan dengan meletakkan kursor pada form kemudian menggesernya (drag).
40
2. Object Inspector
Pada Object Inspector terdapat dua buah halaman (tab) yaitu Properties dan Events. Properties digunakan untuk mengganti properti (kepemilikan) sebuah objek/komponen. Sedangkan Events digunakan untuk membuat procedure yang diaktifkan (trigered) lewat sebuah event. Event-event yang didefiniskan pada sebuah komponen akan termuat pada sebuah lembar kerja dengan nama ekstensi pas dan ini terkait langsung dengan form. Pada Delphi terdapat ada 3 buah file utama (*.dpr, *.pas dan *.dfm).
1) *.dpr adalah file proyek yang dibuat berisi program kecil untuk :
• mendefinisikan Unit yang ada dalam file proyek
• menginisialisasi data
• membangun form
• menjalankan aplikasi
2) *.pas adalah unit-unit (pascal code file), bisa terdiri satu atau banyak file
3) *.dfm adalah file definisi Form (special pseudo code file), bisa terdiri satu atau banyak file
masing-masing file jika dibuka menggunakan notepad akan tampil sebagai berikut:
File *.dpr
uses
Forms,
Unit1 in ‘Unit1.pas’ {Form1};
begin
Application.Initialize;
Application.CreateForm(Tform1, Form1);
Application.Run;
end.
41
File *.pas
object Form1: Tform1
Left = 200
Top = 108
Width = 696
Height = 480
Caption = ‘Form1’
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = ‘MS Sans Serif’
Font.Style = []
PixelsPerInch = 96
TextHeight = 13
object Button1: Tbutton
Left = 176
Top = 116
Width = 75
Height = 25
Caption = ‘Button1’
TabOrder = 0
end
end
File *.dfm
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Implementation
{$R *.nfm}
42
Setiap Form (.dfm) harus memiliki sebuah Unit (.pas), tetapi sebuah Unit dapat tidak memiliki Form dan hanya kode saja. Jika ingin melihat kode sebuah form pilih VIEW AS TEXT atau tekan tombol Alt- F12. Untuk kembali ke bentuk form, pilih VIEW AS FORM atau tekan tombol Alt- F12 kembali.
Semua properti diurutkan berdasarkan alpabetik, dan dapat juga diurutkan berdasarkan kategori. Untuk merubah judul sebuah form dengan Hello dilakukan melalui perubahan properti Caption, sedangkan nama form dengan nama frmHello melalui properti Name. Caption digunakan untuk menyimpan keterangan yang dimunculkan pada form, sedangkan Name digunakan sebagai Nama dari objek tersebut. Properti name adalah properti internal dan digunakan untuk memberi nama pada sebuah komponen/objek. Nama ini adalah sebuah variabel yang mengacu pada komponen tersebut.
Beberapa aturan penamaan komponen atau variabel atau identifer sebagai berikut:
• Diawali alpabet, berikutnya boleh angka, garis bawah.
• Tidak memakai spasi atau tanda-tanda baca atau operator
• Boleh huruf kapital atau kecil, tidak ada perbedaan
• Tidak menggunakan kata kunci (reserve word) yang digunakan Delphi
• Biasakan nama komponen diawali kelompok komponennya, misal btnHello, frmHello, rgrKelas.
3. Menu
Jendela menu terdapat 3 bagian yaitu, Menu, speedbar, dan components palette. Menu berisi menu-menu pada Delphi, speedbar berisi tombol-tombol fungsi menu, dan components palette berisi komponen-komponen yang dapat digunakan pada aplikasi. Terdapat empat cara untuk menempatkan komponen yang diinginkan pada form. Sebagai contoh jika ingin menempatkan komponen Button prosedur yang dilakukan
43
adalah pada Components Palette bagian Standard Page. pilih salah satu langkah berikut:
1) Klik pada kompenen tersebut, pindahkan kursor ke form, sambil menekan tombol kiri mouse (drag komponen dan geser pada form) atau
2) Pilih komponen (klik komponen yang diinginkan) pada Components Palette kemudian klik pada form dimana komponen itu akan diletakkan.
3) Klik ganda pada komponen yang diinginkan, maka komponen tersebut akan ditambahkan pada form.
4) Dapat juga digunakan Copy dan Paste bila ingin membuat komponen yang sama yang sudah ada pada form. Caranya Shift-Klik kiri pada komponen yang ada di form, lalu pilih menu Copy (Ctrl-C) kemudian pilih menu Paste (Ctrl-V).
Membuat Method/Procedure lewat Event
Pada Windows jika sebuah tombol pada sebuah form atau komponen ditekan, maka aplikasi akan mengirim pesan yang dibangkitkan oleh event tertentu. Delphi akan menanggapi dengan menerima event atau panggilan tersebut. Hal ini yang dinamakan penanganan event (event-handler method). Delphi mendefinisikan sejumlah event pada setiap komponennya. Daftar event ini berbeda untuk setiap komponen. Event yang paling umum pada komponen Button adalah OnClick. Artinya jika komponen Button tersebut di Klik maka akan melakukan procedure apa.
Ada beberapa teknik yang dapat dilakukan untuk menangani event misal OnClick pada komponen button :
• Klik ganda pada button tersebut, maka sebuah method/procedure btnHelloClick
• Pilih button, kemudian pilih Object Inspector’s combo box (called the Object Selector), pilih Tab Events, dan klik ganda pada area putih disebelah kanan event OnClick
44
• Pilih button, pilih Tab Events, dan masukkan nama method yang dikehendaki, missal btnHelloClick pada area putih di sebelah kanan event OnClick
Adapun perintah untuk menampilkan pesan pada procedure tersebut adalah sebagai berikut:
procedure Tform1.BtnHelloClick(Sender: Tobject);
begin
MessageDlg (‘Hello, guys’, mtInformation, [mbOK], 0);
end;
Perintah di atas sangat sederhana, yaitu untuk menampilkan pesan. Fungsi ini mempunyai empat parameter. Untuk rincinya dapat melihat Bantuan (F1).
• Parameter pertama : kalimat yang akan dimunculkan (pesannya)
• Parameter kedua : tipe message box seperti mtWarning, mtError, mtInformation, atau mtConfirmation.
• Parameter ketiga : kumpulan tombol yang akan digunakan seperti mbYes, mbNo, mbOK, mbCancel, atau mbHelp.
• Parameter keempat : untuk help context atau nomor halaman pada Help, beri angka nol jika tidak mempunyai file help.
Kompilasi dan Jalankan Program
Untuk menjalankan program tekan tombol Run pada speedbar atau pilih menu Run | Run, Delphi akan mengerjakan langkah-langkah berikut:
1. Kompilasi Pascal source code file yang mendefinisikan form-form yang ada (.pas, .dfm)
2. Kompilasi project file (.dpr)
3. Membuat executable (.EXE) file
4. Menjalankan executable file, biasanya pada mode pencarian kesalahan (debug mode).
45
Jika tidak ada kesalahan maka akan tampil aplikasi sebagai berikut:
Menyimpan File
Untuk menyimpan file pilih submenu Save Project atau Save Project As pada menu File, dan Delphi akan menanyakan nama file source code untuk unit (*.pas) dan nama file proyeknya (*.dpr).
Beberapa Komponen pada Delphi
Untuk mendesain sebuah perangkat lunak yang berhubungan dengan sistem pengendali komponen-komponen yang sering digunakan adalah timer dan Chart
1. Timer
Timer berguna untuk mentriger sebuah event dan dapat hanya sekali atau berulang-ulang dengan selang waktu (interval) tertentu. Komponen ini memliki properti sebagai berikut:
Enable Boolean Untuk mengaktifkan atau menonaktifkan Timer
Interval Integer Jeda hingga timer aktif kembali
Name String Nama Timer
Tag Byte Urutan pada Form
Event yang sangat populer pada timer adalah event OnTimer yang memiliki fungsi mengaktifkan procedure-procedure yang didefinisikan pada event tersebut.
Sebagai contoh listing berikut akan menyebabkan ActiveControl bergerak 1 pixel ke kanan setiap 100ms.
46
procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Interval := 100; if ActiveControl nil then ActiveControl.Left := ActiveControl.Left + 1; end;
2. Chart
Untuk menampilkan grafik-grafik pada program simulasi digunakan komponen Tchart pada Delphi. Jika diletakkan pada Form, tampilan chart adalah sebagai berikut:
Chart memiliki properti seperti pada object inspector
47
Selain itu jika diklik ganda pada chart yang bersangkutan pada form maka akan tampil jendela berikut
Untuk membentuk tipe grafik seperti apa yang akan ditampilkan, tekan Add pada jendela editing chart dan akan tampil jendela berikut
Pilih salah satu sesuai dengan keinginan. Pada kesempatan ini dipilih tipe Point dan tanpa 3D, sehingga pada form akan tampil seperti berikut
48
garis pada chart diberi nama secara otomatis series1, dan kita dapat merubah sesuai keinginan kita. Pada sisi kanan terlihat tampil Legend dari data yang digambarkan dan untuk menambah data dilakukan dengan listing berikut:
with chart1.SeriesList.Series[0] do begin AddXY(100,80,'',clTeeColor); AddXY(50,40,'',clTeeColor); AddXY(25,25,'',clTeeColor); AddXY(1,10,'',clTeeColor); end;
AddXY(x,y,label,warna) berfungsi untuk menambah data sebanyak 1 data dengan koordinat (x,y). Semua data yang ditampilkan pada chart akan ditampung dalam sebuah array berurut dari awal hingga akhir, sehingga data diatas akan terurut menjadi
Indeks 0 1 2 3
Nilai X 100 50 25 1
Nilai Y 80 40 25 10
Sedangkan untuk mengurangi data dilakukan dengan listing berikut:
with chart1.SeriesList.Series[0] do begin Delete(1) end;
Delete(indeks) berfungsi untuk menghapus data sebanyak 1 data dengan urutan pada indeks. Sehingga jika listing di atas dijalankan maka data akan berubah menjadi
Indeks 0 1 2
Nilai X 100 25 1
Nilai Y 80 25 10
49
BAGIAN 6 ANTARMUKA ADC/DAC
Simulator pengendalian yang akan dirancang memiliki dua bagian program, yaitu program simulator proses dan program simulator pengendali. Pemisahan kedua program dimaksudkan untuk mencerminkan proses pengendalian secara nyata walaupun ini hanya dilakukan pada sebuah laboratorium kendali. Pada proses industri yang sesungguhnya sistem/proses yang dikendalikan beraneka ragam bentuknya, misalnya saja tangki reaktor dan pengendali dapat berupa sebuah PID yang bertugas untuk mengendalikan temperatur tangki reaktor tersebut pada suhu tertentu dengan memperbesar (membuka katup), memperkecil (menutup katup), atau mempertahankan laju air panas yang dialirkan ke jaket reaktor. Tindakan yang diambil oleh pengendali tersebut di atas berdasar pada sensor temperatur yang terdapat pada reaktor dengan mengirimkan sinyal keadaan temperatur saat ini. Sinyal ini pada sistem kendali yang menggunakan sinyal elektrik memiliki standar pada industri yaitu sebesar 4-20 mA atau tegangan 1-5 VDC. Adapun ilustrasi simulator tersebut digambarkan pada gambar 6.1.
Gambar 6.1 Ilustrasi Simulator
Diagram blok program simulator adalah seperti gambar 6.2. berikut:
Gambar 6.2. Blok Diagram Simulator
50
Untuk menghubungkan kedua simulator yang dikembangkan, digunakanlah ADC/DAC. ADC/DAC dipakai untuk merepresentasikan sinyal tegangan 1-5VDC sehingga simulator yang dikembangkan dapat mendekati proses industri sesungguhnya atau pengendali yang dirancang dapat digunakan secara langsung untuk mengendalikan sebuah proses. ADC digunakan untuk menghasilkan keluaran tegangan analog dari hasil perhitungan program secara digital dan DAC digunakan untuk menghasilkan masukan digital dari sinyal analognya. ADC/DAC yang digunakan dibangun dalam sebuah antarmuka dengan menggunakan alamat yang dicadangkan pada PC yaitu alamat 300H hingga 308H. Rangkaian lengkap dari kartu ini dapat dilihat pada gambar 6.3 berikut:
Gambar 6.3. Rangkaian antarmuka ADC-DAC
51
Antarmuka ADC-DAC diimplementasikan dengan ADC tipe 0804 dan DAC tipe 0808 yang memiliki resolusi 8 bit. ADC 0804 memiliki harga
yang relatif murah US$ 3, menggunakan teknik konversi Successive
Approximation dengan waktu konversi 100ms dan kesalahan konversi
1 bit. Sedangkan DAC 0808 memiliki harga US$ 1.5 dengan waktu
konversi 150ns dan tingkat kesalahan 0.19%. Penggunaan kedua komponen juga mempertimbangkan kemudah mendapatkannya dipasar.
Karena keterbatasan alamat perintah Input-Output pada PC maka pada DAC ditambahkan buffer tipe 74374 yang berfungsi menampung data yang akan dikonversi oleh DAC sehingga tidak terjadi kerancuan konversi data.
I/O Delphi
Delphi memiliki keterbatasan dalam mengakses port I/O secara langsung, dan ini disebabkan karena alasan keamanan sistem operasi windows. Untuk mengakses port I/O, delphi menggunakan intruksi in dan out yang berbahasa assembler dan tidak semua versi delphi mendukungnya. Untuk memudahkan pengaksesan, John Pappas (1999) telah membuat komponen DLPortIO yang berfungsi sebagai antarmuka pengaksesan port-port I/O dengan perintah yang lebih mudah dan tanpa menggunakan perintah assembler.
DLPortIO dapat diperoleh, diunduh atau didownload dialamat http://www.sstnet.com/ftp/unsupported/port95nt.exe dan memiliki ukuran file sebesar 1.5Mbyte. Pada delphi DLPortIO terdiri dari dua file yaitu file DLPortIO.dll dan DLPortIO.bpl. DLPortIO.dll merupakan driver yang mengakses port-port I/O dan diletakkan pada direktori system dari sistem operasi yang digunakan misalnya C:\WINDOWS\SYSTEM32. Sedangkan DLPortIO.bpl merupakan package yang harus dipasang pada delphi agar komponen ini dapat langsung digunakan dan muncul pada Component Pallete. Sedangkan langkah-langkah instalasi komponen DLPortIO adalah sebagai berikut:
Pada menu Delphi :
52
i. Pilih Component|Install Packages...
ii. Pilih tombol "Add"
iii. Pilih file DLPortIO.bpl (dimanapun anda meletakkannya)
iv. Pilih tombol "Open"
v. Pilh tombol "OK"
53
Sekarang komponen DLPortIO telah ada pada Component Pallete pada tab Diskdude.
Diskdude memiliki dua komponen yaitu DLPortIO untuk serial
dan DLPrinterPortIO untuk paralel. DLPortIO memiliki properti :
DLLPath Cantumkan direktori lokasi dlportio.sys jika berada pada Windows NT dan mode administrator.
DriverPath Cantumkan direktori lokasi dlportio.dll. Jika dikosongkan maka akan dicari pada direktori dimana anda membangun file aplikasi.
HardAccess Untuk keperluan kompabilitas dengan TvicPort
Name Nama Objek pada Form
Tag Urutan Objek pada Form
Dan memiliki Metoda
OpenDriver() Menjalankan/membuka DriverLINX DLL.
CloseDriver() Menutup DriverLINX DLL.
54
PortControl(TPortRec, NumberOfPorts) Membuat array dengan tipe TPortRec dan jumlah yang didefinisikan NumPorts
PortCommand(TPortCommand, NumberOfPorts)
Membuat array dengan tipe TPortCommand dan jumlah yang didefinisikan NumberOfPorts
ReadPortFIFO(Address, NumberOfPorts, Buffer) WritePortFIFO(Address, NumberOfPorts, Buffer) ReadWPortFIFO(Address, NumberOfPorts, Buffer) WriteWPortFIFO(Address, NumberOfPorts, Buffer) ReadLPortFIFO(Address, NumberOfPorts, Buffer) WriteLPortFIFO(Address, NumberOfPorts, Buffer)
Membaca/menulis data pada sebuah port. Jumlah item data yang ditulis/dibaca terletak pada NumPorts, dan datanya pada Buffer array.
Port[Address] PortW[Address] PortL[Address]
Membaca dan menulis pada port yang didifinisikan.
Pelaksanaan kirim data pada DLPortIO dilakukan dengan perintah:
DLPortIO1.PortW[$308]:=Word($FFFF);
Perintah diatas bertujuan mengirimkan data $FFFF ke Port yang beralamat $308.
Sedangkan pelaksanaan baca data dilakukan dengan perintah:
data:=DLPortIO1.PortW[$300];
Perintah ini bertujuan mendapatkan data dari Port dengan alamat $300 dan disimpan ke variabel data.
55
BAGIAN 7 IMPLEMENTASI SISTEM KENDALI
Algoritma perhitungan dengan menggunakan metode Runge Kutta orde ke empat untuk menghitung keadaan proses industri dengan model state variable seperti yang dibahas pada Bagian 2 adalah sebagai berikut:
1. Definiskan parameter sistem Matrik Sistem [A], Matrik input [B], Matrik output [C]
2. Definisikan h (interval)
3. Definisikan nilai awal x0 untuk t=to
4. Dapatkan nilai x untuk t.
5. Hitung k1 , k2 , k3 dan k4 menggunakan pers 2.25
6. Hitung keseluruhan keluaran menggunakan pers. 2.24
Pada algoritma tersebut, dapat dikelompokkan menjadi dua bagian besar yaitu Definisi parameter dan perhitungan keluaran berdasarkan perhitungan runge kutta. Sehingga bagian simulator akan memiliki dua bagian utama yaitu
• Bagian Definisi Paramater
Pada bagian ini parameter-parameter yang didefinisikan adalah Matrik A atau matrik sistem, Matrik B atau matrik input, Matrik C atau matrik output dan Matrik X0 atau keadaan awal.
Parameter-parameter awal atau inisialisasi seperti langkah satu hingga tiga pada algoritma, yaitu: Matrik A, Matrik B, Matrik C, nilai X(0) awal, dan interval H harus didefinisikan terlebih dahulu. Langkah awal pada pemprograman delphi adalah mendefinisikan variabel untuk kebutuhan tersebut sehingga adan terdefinisi
MatA : array[1..10,1..10] of real;
MatB, MatC, MatX0 : array[1..10] of real;
Sedangkan interval H adalah interval waktu pada komponen Timer yang dipergunakan untuk mengulang (event handler on Timer) secara
56
terus-menerus menghitung keluaran sistem berdasarkan masukannya.
• Bagian Perhitungan Runge Kutta
Setelah didefinisikan parameter awal, maka perhitungan keluaran berdasarkan sinyal masukan siap dieksekusi, yaitu menghitung langkah 4 hingga langkah 6 berulang-ulang hingga program dihentikan.
Masukan sistem berasal dari sinyal masukan DC yang diberikan pada komputer melalui antarmuka yang telah dirancang. Masukan ini bernilai antara 1 hingga 5 VDC dan dapat dibuat dengan menggunakan sebuah catu daya dan potensiometer.
Secara diagram aliran kedua bagian tersebut direpresetasikan seperti gambar 7.1 berikut ini:
Mulai
Baca Matrik A, Matrik B, Matrik
C dan inisialisasi awal
PortIn:=300H, PortOut:=301H
Interval:=100
Apakah Event
Handler on Timer
Baca Masukan
Masukan:=ReadPort(PortIn)
Hitung Output proses dengan:
h:=interval;
x:= inisialisasi awal;
y=C*x+D*u;{mengitung output yt}
xdot:=A*x+B*u;{menghitung f(x,xdot)}
k1:=xdot;{menghitung k1}
sx=x;{simpan x dalam sx}
x:=sx+0.5*h*xdot;{menghitung x+0.5h}
xdot:=A*x+B*u;{menghitung f(x+0.5h,xdot+0.5hk1)}
ki2:=2*xdot;{menghitung k2}
x:=sx+0.5*h*xdot;{menghitung x+0.5h}
xdot:=A*x+B*u;{menghitung f(x+0.5h,xdot+0.5hk2)}
k3:=2*xdot;{menghitung k3}
x:=sx+h*xdot;{menghitung x+h}
k4:=A*x+B*u;{menghitung k4, f(x+h,x+hk3)}
x:=sx+h/6*(k1+k2+k3+k4);{menghitung keseluruhan}
y:=C*x+D*u;{mengitung output yt+h}
Perbaharui Tampilan dan
keluarkan keluaran
ProgressBar1.Position:=y;
Label1.Captuion:=y/100;
WritePort(PortOut):=y;
Apakah Selesai
Selesai
Ya
Ya
Tidak
Tunggu Event
HandlerTidak
Gambar 7.1. Flow Chart Simulator Proses Algoritma Runge Kutta orde 4
57
Untuk keperluan inisialisasi dibuat form yang dapat menampung seluruh parameter inisialisasi seperti ditunjukkan pada gambar 7.2
Gambar 7.2. Form Isian Sistem
Dengan program sebagai berikut:
unit Unit2ut;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
Buttons, passoverbtn, Grids, StdCtrls, ExtCtrls, OverButton, Menus;
type
TSysForm = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
GroupBox5: TGroupBox;
GroupBox6: TGroupBox;
GroupBox7: TGroupBox;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
StringGrid3: TStringGrid;
StringGrid4: TStringGrid;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
58
Bevel1: TBevel;
ComboBox1: TComboBox;
Edit1: TEdit;
Edit2: TEdit;
ComboBox2: TComboBox;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
ComboBox3: TComboBox;
Edit3: TEdit;
Edit4: TEdit;
ComboBox4: TComboBox;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label9: TLabel;
Label8: TLabel;
ComboBox5: TComboBox;
passoverbtn1: Tpassoverbtn;
passoverbtn2: Tpassoverbtn;
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
Save1: TMenuItem;
SaveAs1: TMenuItem;
N1: TMenuItem;
Close1: TMenuItem;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure FormShow(Sender: TObject);
procedure passoverbtn2Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure CheckBox2Click(Sender: TObject);
procedure passoverbtn1Click(Sender: TObject);
procedure Close1Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure SaveAs1Click(Sender: TObject);
procedure Open1Click(Sender: TObject);
procedure Save1Click(Sender: TObject);
private
procedure Parsing;
procedure TampilMatrik;
procedure CekMatrik(var Matrik: TStringGrid; Isian ,SizeX, SizeY :
Integer);
procedure CekMatrik2(var Matrik: TStringGrid; Isian ,SizeX, SizeY
: Integer);
{ Private declarations }
public
{ Public declarations }
end;
var
SysForm: TSysForm;
TempOS: integer;
NamaSPFile : String;
tanda : integer;
implementation
uses Unit1ut, Unit3ut, Unit3aut;
59
{$R *.DFM}
procedure TSysForm.Parsing;
var temp1,temp2 : real;
begin
tanda:=0;
try
StrToInt(Edit1.Text);
StrToInt(Edit2.Text);
temp1:=StrToFloat(Edit3.Text);
temp2:=StrToFloat(Edit4.Text);
if (temp1>=temp2) and (CheckBox1.Checked) then tanda:=2;
CekMatrik(StringGrid1,1,TempOS,TempOS);
CekMatrik(StringGrid2,2,1,TempOS);
CekMatrik(StringGrid3,3,1,TempOS);
CekMatrik(StringGrid4,4,TempOS,1);
except
on E: EConvertError do
begin
ShowMessage(E.Message + ' Try again.');
Tanda:=1;
end;
end;
if Tanda=2 then
messageDlg('Parameter Non Linier: Batas Bawah harus lebih kecil dari
Batas Atas',mtInformation,[mbOK],0);
end;
procedure TSysForm.CekMatrik(var Matrik: TStringGrid; Isian ,SizeX,
SizeY : Integer);
var i, j : integer;
Begin
for i:=1 to SizeX do
for j:=1 to SizeY do
StrToFloat(Matrik.Cells[i,j]);
end;
procedure TSysForm.CekMatrik2(var Matrik: TStringGrid; Isian ,SizeX,
SizeY : Integer);
var i, j : integer;
Begin
for i:=1 to SizeX do begin
for j:=1 to SizeY do begin
case isian of
1: MatA[i,j]:=StrToFloat(Matrik.Cells[j,i]);
2: MatB[j]:=StrToFloat(Matrik.Cells[i,j]);
3: MatX0[j]:=StrToFloat(Matrik.Cells[i,j]);
4: MatC[i]:=StrToFloat(Matrik.Cells[i,j]);
end;
end;
end;
end;
procedure TSysForm.TampilMatrik;
var i, j : integer;
begin
StringGrid1.DefaultColWidth:=(StringGrid1.Width-20) div (TempOS+1);
StringGrid1.DefaultRowHeight:=(StringGrid1.Height-20) div (TempOS+1);
StringGrid2.DefaultColWidth:=(StringGrid2.Width-20) div 2;
60
StringGrid2.DefaultRowHeight:=(StringGrid2.Height-20) div (TempOS+1);
StringGrid3.DefaultColWidth:=(StringGrid3.Width-20) div 2;
StringGrid3.DefaultRowHeight:=(StringGrid3.Height-20) div (TempOS+1);
StringGrid4.DefaultColWidth:=(StringGrid4.Width-20) div (TempOS+1);
StringGrid4.DefaultRowHeight:=(StringGrid4.Height-20) div 2;
StringGrid1.RowCount:=TempOS+1;
StringGrid1.ColCount:=TempOS+1;
StringGrid2.RowCount:=TempOS+1;
StringGrid2.ColCount:=2;
StringGrid3.RowCount:=TempOS+1;
StringGrid3.ColCount:=2;
StringGrid4.RowCount:=2;
StringGrid4.ColCount:=TempOS+1;
for i:=0 to TempOS do
for j:=0 to TempOS do
begin
if i = 0 then
StringGrid1.Cells[j,i]:=IntToStr(j)
else
if j = 0 then
StringGrid1.Cells[j,i]:=IntToStr(i)
else
StringGrid1.Cells[j,i]:=FloatToStr(MatA[i,j]);
end;
StringGrid1.Refresh;
for i:=0 to 1 do
for j:=0 to TempOS do
begin
if i = 0 then
begin
StringGrid2.Cells[i,j]:=IntToStr(j);
StringGrid3.Cells[i,j]:=IntToStr(j);
StringGrid4.Cells[j,i]:=IntToStr(j);
end
else
if j = 0 then
begin
StringGrid2.Cells[i,j]:=IntToStr(i);
StringGrid3.Cells[i,j]:=IntToStr(i);
StringGrid4.Cells[j,i]:=IntToStr(i);
end
else
begin
StringGrid2.Cells[i,j]:=FloatToStr(MatB[j]);
StringGrid3.Cells[i,j]:=FloatToStr(MatX0[j]);
StringGrid4.Cells[j,i]:=FloatToStr(MatC[j]);
end;
end;
StringGrid2.Refresh;
StringGrid3.Refresh;
StringGrid4.Refresh;
end;
procedure TSysForm.FormShow(Sender: TObject);
begin
SetWindowPos(SysForm.Handle, HWND_TOPMOST,
10, simulatorMain.Height+10, SysForm.Width, SysForm.Height, 0);
{Inisialisasi parameter}
ComboBox1.ItemIndex:=OrdeSistem-2;
Edit1.Text:=IntToStr(WaktuHitung);
61
Edit2.Text:=IntToStr(WaktuSampling);
ComboBox2.ItemIndex:=AlamatPort;
ComboBox5.ItemIndex:=Resolusi;
CheckBox1.Checked:=NonLinier;
ComboBox3.ItemIndex:=TipeNL;
Edit3.Text:=FloatToStr(BatasBawah);
Edit4.Text:=FloatToStr(BatasAtas);
CheckBox2.Checked:=WaktuTunda;
ComboBox4.ItemIndex:=Lamanya-1;
TempOS:=OrdeSistem;
TampilMatrik;
tanda:=0;
GrafikForm.StatusBar1.Panels[1].Text :=IntToStr(WaktuSampling);
GrafikForm.StatusBar1.Panels[4].Text:=ComboBox5.Text;
GrafikForm.StatusBar1.Panels[6].Text:=ComboBox2.Text;
end;
procedure TSysForm.passoverbtn2Click(Sender: TObject);
begin
Parsing;
if tanda=0 then
begin
OrdeSistem:=ComboBox1.ItemIndex+2;
WaktuHitung:=StrToInt(Edit1.Text);
WaktuSampling:=StrToInt(Edit2.Text);
AlamatPort:=ComboBox2.ItemIndex;
Resolusi:=ComboBox5.ItemIndex;
NonLinier:=CheckBox1.Checked;
TipeNL:=ComboBox3.ItemIndex;
BatasBawah:=StrToFloat(Edit3.Text);
BatasAtas:=StrToFloat(Edit4.Text);
WaktuTunda:=CheckBox2.Checked;
Lamanya:=ComboBox4.ItemIndex+1;
CekMatrik2(StringGrid1,1,OrdeSistem,OrdeSistem);
CekMatrik2(StringGrid2,2,1,OrdeSistem);
CekMatrik2(StringGrid3,3,1,OrdeSistem);
CekMatrik2(StringGrid4,4,OrdeSistem,1);
case AlamatPort of
0: begin
portin:=$300;
portout:=$302;
GrafikForm.StatusBar1.Panels[6].Text:='300 302 H';
AnimForm.StatusBar1.Panels[6].Text:='300 302 H';
end;
1: begin
portin:=$301;
portout:=$303;
GrafikForm.StatusBar1.Panels[6].Text:='301 303 H';
AnimForm.StatusBar1.Panels[6].Text:='301 303 H';
end;
2: begin
portin:=$304;
portout:=$306;
GrafikForm.StatusBar1.Panels[6].Text:='304 306 H';
AnimForm.StatusBar1.Panels[6].Text:='304 306 H';
end;
3: begin
portin:=$305;
portout:=$307;
GrafikForm.StatusBar1.Panels[6].Text:='305 307 H';
62
AnimForm.StatusBar1.Panels[6].Text:='305 307 H';
end;
4: begin
portin:=$308;
portout:=$30A;
GrafikForm.StatusBar1.Panels[6].Text:='308 30A H';
AnimForm.StatusBar1.Panels[6].Text:='308 30A H';
end;
5: begin
portin:=$309;
portout:=$30B;
GrafikForm.StatusBar1.Panels[6].Text:='309 30B H';
AnimForm.StatusBar1.Panels[6].Text:='309 30B H';
end;
6: begin
portin:=$30C;
portout:=$30E;
GrafikForm.StatusBar1.Panels[6].Text:='30C 30E H';
AnimForm.StatusBar1.Panels[6].Text:='30C 30E H';
end;
7: begin
portin:=$30D;
portout:=$30F;
GrafikForm.StatusBar1.Panels[6].Text:='30D 30F H';
AnimForm.StatusBar1.Panels[6].Text:='30D 30F H';
end;
end;
Case Resolusi of
0:
begin
BatasResolusi:=200;
GrafikForm.StatusBar1.Panels[4].Text:='8 bit';
AnimForm.StatusBar1.Panels[4].Text:='8 bit';
end;
1:
begin
BatasResolusi:=816;
GrafikForm.StatusBar1.Panels[4].Text:='10 bit';
AnimForm.StatusBar1.Panels[4].Text:='10 bit';
end;
2:
begin
BatasResolusi:=3274;
GrafikForm.StatusBar1.Panels[4].Text:='12 bit';
AnimForm.StatusBar1.Panels[4].Text:='12 bit';
end;
end;
{ if SimulatorMain.Timer1.Enabled then
begin
SimulatorMain.Timer1.Enabled:=false;
SimulatorMain.Timer2.Enabled:=false;
SimulatorMain.Timer3.Enabled:=false;
SimulatorMain.Timer4.Enabled:=false;
end;}
SimulatorMain.Timer1.Interval:=WaktuSampling;
SimulatorMain.Timer2.Interval:=WaktuHitung;
SimulatorMain.Timer3.Interval:=WaktuHitung;
SimulatorMain.Timer4.Interval:=WaktuHitung;
{ GrafikForm.passoverbtn6.OnClick(Sender);
GrafikForm.passoverbtn7.OnClick(Sender);
63
GrafikForm.OnShow(Sender);
AnimForm.OnShow(Sender);}
GrafikForm.StatusBar1.Panels[1].Text:=IntToStr(WaktuSampling);
AnimForm.StatusBar1.Panels[1].Text:=IntToStr(WaktuSampling);
Close;
end;
end;
procedure TSysForm.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
begin
ComboBox3.Enabled:=true;
Edit3.Enabled:=true;
Edit4.Enabled:=true;
end
else
begin
ComboBox3.Enabled:=false;
Edit3.Enabled:=false;
Edit4.Enabled:=false;
end;
end;
procedure TSysForm.CheckBox2Click(Sender: TObject);
begin
if CheckBox2.Checked then
ComboBox4.Enabled:=true
else
ComboBox4.Enabled:=false;
end;
procedure TSysForm.passoverbtn1Click(Sender: TObject);
begin
Close;
end;
procedure TSysForm.Close1Click(Sender: TObject);
begin
Close;
end;
procedure TSysForm.ComboBox1Change(Sender: TObject);
begin
TempOS:=ComBoBox1.ItemIndex+2;
TampilMatrik;
end;
procedure TSysForm.SaveAs1Click(Sender: TObject);
var i,j : integer;
SPFile : TextFile;
S: String;
begin
if SaveDialog1.Execute then
begin
Parsing;
if tanda=0 then begin
AssignFile(SPFile, SaveDialog1.FileName);
ReWrite(SPFile);
try
64
Writeln(SPFile,'[Parameter]');
S:=IntToStr(OrdeSistem);Writeln(SPFile,S);
S:=IntToStr(WaktuHitung);Writeln(SPFile,S);
S:=IntToStr(WaktuSampling);Writeln(SPFile,S);
S:=IntToStr(AlamatPort);Writeln(SPFile,S);
if NonLinier then Writeln(SPFile,'1') else
Writeln(SPFile,'0');
S:=IntToStr(TipeNL);Writeln(SPFile,S);
S:=FloatToStr(BatasBawah);Writeln(SPFile,S);
S:=FloatToStr(BatasAtas);Writeln(SPFile,S);
if waktuTunda then Writeln(SPFile,'1') else
Writeln(SPFile,'0');
S:=IntToStr(Lamanya);Writeln(SPFile,S);
Writeln(SPFile,'[Matrik A]');
for i:=1 to OrdeSistem do
for j:=1 to OrdeSistem do
begin
S:=FloatToStr(MatA[i,j]);
Writeln(SPFile,S);
end;
Writeln(SPFile,'[Matrik B]');
for j:=1 to OrdeSistem do
begin
S:=FloatToStr(MatB[j]);Writeln(SPFile,S);
end;
Writeln(SPFile,'[Matrik C]');
for j:=1 to OrdeSistem do
begin
S:=FloatToStr(MatC[j]);Writeln(SPFile,S);
end;
Writeln(SPFile,'[Matrik X0]');
for j:=1 to OrdeSistem do
begin
S:=FloatToStr(MatX0[j]);Writeln(SPFile,S);
end;
finally
CloseFile(SPFile);
end;
SysForm.Caption:='Parameter Sistem
('+SaveDialog1.FileName+')';
NamaSPFile:=SaveDialog1.FileName;
Save1.Enabled:=true;
end;
end;
end;
procedure TSysForm.Open1Click(Sender: TObject);
var i,j : integer;
SPFile : TextFile;
S: String;
begin
if OpenDialog1.Execute then
begin
AssignFile(SPFile, OpenDialog1.FileName);
Reset(SPFile);
try
Readln(SPFile,S);
Readln(SPFile,S);OrdeSistem:=StrToInt(S);
Readln(SPFile,S);WaktuHitung:=StrToInt(S);
Readln(SPFile,S);WaktuSampling:=StrToInt(S);
65
Readln(SPFile,S);AlamatPort:=StrToInt(S);
Readln(SPFile,S);
if S='1' then NonLinier:=true else NonLinier:=false;
Readln(SPFile,S);TipeNL:=StrToInt(S);
Readln(SPFile,S);BatasBawah:=StrToFloat(S);
Readln(SPFile,S);BatasAtas:=StrToFloat(S);
Readln(SPFile,S);
if S='1' then WaktuTunda:=true else WaktuTunda:=false;
Readln(SPFile,S);Lamanya:=StrToInt(S);
Readln(SPFile,S);
for i:=1 to OrdeSistem do
for j:=1 to OrdeSistem do
begin
Readln(SPFile,S);
Ma