aplikasi simulator laboratorium...

205
SIMULATOR APLIKASI DENGAN DELPHI KENDALI LABORATORIUM Muhammad Rif’an

Upload: others

Post on 27-Jan-2021

53 views

Category:

Documents


4 download

TRANSCRIPT

  • 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