3.1. Pendahuluan
Sistem yang dibuat merupakan software interface dari PLC OMRON yang berbasiskan web. Blok diagram dari sistem keseluruhan dapat dilihat pada gambar 3.1.
Gambar 3.1. Blok Diagram Sistem
PLC memiliki input dan output dalam bentuk digital dan analog. Oleh karena itu, plant yang dirancang harus mewakili I/O PLC tersebut. Plant yang dikontrol meliputi lampu LED, fan, dan lampu dimmer. Kesemuanya bisa dikontrol menggunakan switch, push button, maupun potensiometer. Selain itu, plant juga bisa dikontrol dari PC, menggunakan web. Switch dan push button mewakili input digital, potensiometer mewakili input analog, LED dan fan mewakili ouput digital, dan lampu dimmer mewakili output analog. Plant menggunakan tegangan supply 12 volt DC.
Untuk lebih jelasnya, denah dari plant (miniatur rumah sederhana) dapat dilihat pada gambar 3.2., foto dari plant dapat dilihat pada gambar 3.3.
WEB BROWSER
PLANT
SERVER PLC
LAN / INTERNET
DATA BASE
Gambar 3.2. Denah dari plant (miniatur rumah sederhana)
Gambar 3.3. Foto dari plant (miniatur rumah sederhana)
Gambar 3.4. menunjukkan blok diagram dari plant dan PLC. Input dari PLC dihubungkan pada switch dan push button sebagai input digital, dan potensiometer (yang terlebih dahulu melalui ADC dan RPS) sebagai input analog.
lampu dimmer
Sedangkan output dari PLC, dihubungkan dengan LED dan fan sebagai output digital, dan lampu dimmer (yang terlebih dahulu melalui RPS dan DAC) sebagai output analog.
Gambar 3.4. Blok Diagram Plant dan PLC
3.2. Konfigurasi Wiring PLC
PLC OMRON CPM1 memiliki input sebanyak 12 buah dan output sebanyak 8 buah. Bagian common pada pin output dihubungkan dengan tegangan 12 V DC, sebaliknya bagian common pada pin input dihubungkan pada ground.
Pin input dari PLC OMRON CPM1 sebanyak 10 pin digunakan seluruhnya untuk:
• 4 pin sebagai switch
• 4 pin sebagai input dari ADC
• 2 pin sebagai pusb button
Sedangkan pin output dari PLC OMRON CPM1 sebanyak 8 pin digunakan untuk:
• 3 pin untuk LED
• 1 pin untuk fan
• 4 pin untuk output ke DAC, yang disambungkan ke lampu dimmer.
3.3. Perencanaan Hardware
Semua hardware yang digunakan dalam Tugas Akhir ini merupakan hardware yang dibuat dan didesain oleh Rudi Tjahyono. Input pada CPM1 hanya mampu membaca input digital, karena itu dibutuhkan suatu rangkaian khusus untuk membantu CPM1 agar dapat membaca sinyal analog. Agar dapat membaca sinyal analog, perlu ada ADC (Analog-Digital Converter). Output dari ADC 0804
I N P U T
PLC O
U T P U T
Switch dan push button
Potensio- meter
A D C
RPS (LM 324)
LED dan fan
RPS (relay)
D A C
Lampu dimmer
yang digunakan penulis adalah output dengan sinyal bertegangan TTL (0 dan 5 volt). Sedangkan untuk dapat membaca sinyal, PLC OMROM CPM1 membutuhkan sinyal berlevel PLC (0 dan 12 volt). Oleh karena itu, diperlukan juga rangkaian tambahan, yaitu RPS (Rangkaian Pengkondisi Sinyal), yang berfungsi mengubah tegangan TTL (0 dan 5 volt) menjadi PLC (0 dan 12 volt).
Di samping input, output dari CPM1 juga hanya mampu mengeluarkan sinyal digital. Oleh karena itu, diperlukan juga DAC (Digital-Analog Converter).
3.3.1. Rangkaian ADC (Analog-Digital Converter)
Rangkaian ini dibuat dengan menggunakan sebuah IC ADC 0804.
Rangkaian ini dibuat karena PLC tidak mampu membaca sinyal analog.
Rangkaian ini berfungsi untuk merubah sinyal analog menjadi sinyal digital, sehingga sinyal digital yang merupakan perwakilan dari sinyal analog tersebut dapat dibaca oleh PLC. ADC 0804 merupakan ADC yang berkapasitas 8 bit.
Sedangkan pada perencanaan sistem, yang dipakai hanyalah 4 bit saja. Karena itu, yang dipakai pada ADC 0804 adalah 4 bit terakhir saja atau 4 bit dari LSB (Least Significant Bit). Hanya dipakai 4 bit saja, karena pin output yang tersedia pada PLC OMRON CPM1 hanyalah 8 pin saja. Sedangkan 4 pin lainnya sudah digunakan untuk 3 buah lampu LED dan 1 buah fan (Tjahyono, 30).
3.3.2. Rangkaian Komparator
Output biner logika ‘1’ dari ADC 0804 bernilai 5 volt, sedangkan PLC hanya dapat membaca input yang berlogika ‘1’ bernilai 12 volt. Oleh karena itulah, dibuat RPS (Rangkaian Pengkondisi Sinyal), yaitu rangkaian komparator.
Rangkaian komparator membandingkan input dengan Vref (2,5 volt). Jika input lebih kecil dari Vref, maka tegangan output adalah 0 volt. Sedangkan jika input lebih besar dari Vref, maka tegangan output adalah 12 volt (Tjahyono, 30).
3.3.3. Rangkaian Relay
Rangkaian relay digunakan karena PLC tidak mampu mengeluarkan logika ‘0’ karena pin output dari PLC sebenarnya merupakan internal relay dimana NC (Normally Close)-nya tidak dikoneksikan dengan apa-apa (floating).
Sehingga output dari PLC dihubungkan dulu dengan coil dari relay luar.
Kemudian NC dari relay luar dihubungkan dengan ground, NO dihubungkan dengan tegangan 12 volt dan common dihubungkan dengan input DAC. Jadi pada saat output PLC pada kondisi logika ‘1’, maka DAC memperoleh tegangan 12 volt. Sedangkan pada saat output PLC pada kondisi logika ‘0’, maka DAC akan terhubung dengan ground (Tjahyono, 30).
3.3.4. Rangkaian DAC (Digital-Analog Converter)
Rangkaian DAC menggunakan rangkaian R2R Ladder DAC 4 bit.
Rangkaian ini hanya menggunakan 2 jenis resistor (2 macam nilai) saja. Pada rangkaian ini dipilih resistor yang bernilai 10 k agar impedansi output rangkaian menjadi cukup tinggi (Tjahyono, 31). Tegangan output dapat dicari dengan:
Vout = Vref (D0/16 + D1/8 + D2/4 + D3/2)
3.4. Perencanaan Software
Program utama yang dipakai untuk menjalankan PLC adalah pemrograman Ladder Diagram pada PLC. Tugas Akhir ini juga menggunakan Microsoft Visual Basic 6.0 untuk mengontrol dan berkomunikasi dengan PLC, dan PHP sebagai program untuk tampilan dalam bentuk web.
Gambar 3.5. Arsitektur Software
3.4.1. Ladder Diagram
Alokasi pin-pin yang dipakai:
1. Input
Ladder PLC Aplikasi
Visual Basic MySQL
DB
Web Server PHP Apache Web
Browser
• Pin 00 – 03 (IR00000 – IR00003): RPS ADC
• Pin 04 – 06 (IR00004 – IR00006): switch untuk lampu LED
• Pin 07 (IR00007): push button untuk on fan
• Pin 08 (IR00008): push button untuk off fan
• Pin 09 (IR00009): switch emergency 2. Output
• Pin 00 – 03 (IR01000 – IR01003): output sinyal digital untuk dimmer
• Pin 04 – 06 (IR01004 – IR01006): lampu LED
• Pin 07 (IR00007): fan
Pada gambar 3.6. ditunjukkan ladder diagram untuk menyalakan dan mematikan lampu LED.
Gambar 3.6. Ladder Diagram untuk menyalakan dan mematikan LED Dari gambar 3.6. dapat dilihat bahwa lampu LED yang disambungkan pada IR 010.04 akan menyala jika HR 01.00 aktif atau IR 000.04 aktif, namun jika keduanya aktif, LED akan mati. Demikian pula pada kedua lampu LED lainnya.
Kemudian, untuk memantau kondisi LED sedang dalam keadaan menyala atau mati, menggunakan HR 04.00, HR 04.01, dan HR 04.02
Gambar 3.7. Ladder Diagram untuk menyalakan dan mematikan fan Untuk menyalakan dan mematikan fan dengan menggunakan push button, perlu adanya KEEP. KEEP berfungsi untuk menahan input yang ada, sampai di- reset. Pada gambar 3.7. KEEP 005.00 di-trigger oleh IR 000.07, dan di-reset oleh IR 000.08. Sehingga pada saat push button yang disambungkan pada IR 000.07 dipencet, maka alamat KEEP 005.00 akan aktif, sampai IR 000.08 dipencet.
KEEP 005.00 akan mengaktifkan IR 010.07, sehingga fan akan menyala.
Kondisi nyala atau matinya fan dideteksi oleh PC dengan menggunakan alamat HR 04.03. Sedangkan untuk mengontrol nyala atau matinya fan oleh PC, menggunakan alamat HR 01.03.
Gambar 3.8. Ladder diagram untuk mengecek input ADC
Nilai tegangan yang dihasilkan potensiometer, yang kemudian dimasukkan sebagai input ADC, dapat dideteksi oleh PC menggunakan alamat HR 05.00 – HR 05.03. Output dari ADC yang sudah berbentuk digital, namun masih dalam TTL (0 dan 5 volt) dilewatkan RPS (Rangkaian Pengkondisi Sinyal) agar dapat menghasilkan tegangan PLC (0 dan 12 volt). Setelah itu disambungkan dengan IR 000.00 – IR 000.03. Sehingga pada gambar 3.8. dapat dilihat bahwa dengan membaca alamat HR 05.00 – HR 05.03, PC dapat mengetahui kondisi potensiometer.
3.4.2. MySQL
Pada program MySQL ini, menggunakan database TA, yang terdiri dari 4 table, yaitu:
1. User 2. History 3. Realtime1 4. Realtime2
3.4.2.1. Table User
Table User berfungsi untuk menyimpan data para user, seperti administrator, operator, atau guest, yang difungsikan untuk fungsi security.
Untuk lebih jelasnya dapat dilihat pada tabel 3.1.
Tabel 3.1. Table User Nama Field Tipe Keterangan
Username Varchar(15) Username untuk login Password Varchar(15) Password untuk login
Power Int(1) Kekuatan yang dimiliki user, apakah bisa mengontrol atau hanya melihat saja
3.4.2.2. Table History
Table History berfungsi untuk menyimpan data history yang digunakan untuk historical trend pada sistem SCADA. Untuk lebih jelasnya dapat melihat tabel 3.2.
Tabel 3.2. Table History Nama Field Tipe Keterangan
Tanggal Date Tanggal penyimpanan data
Waktu Time Waktu penyimpanan data
lampu1 Binary(1) Data lampu1 nyala atau tidak lampu2 Binary(1) Data lampu2 nyala atau tidak lampu3 Binary(1) Data lampu3 nyala atau tidak Fan Binary(1) Data fan nyala atau tidak Dimmer Char(1) Data nilai dimmer
3.4.2.3. Table Realtime1
Table Realtime1 berfungsi sebagai perantara data yang dikirim dari PHP untuk dibaca pada Microsoft Visual Basic 6.0. Untuk lebih jelasnya dapat melihat tabel 3.3.
Tabel 3.3. Table Realtime1 Nama Field Tipe Keterangan
Data Char(2) Data yang berisi penjumlahan data LED dan fan dari PHP
Tabel 3.3. Table Realtime1 (lanjutan) Dimmer Char(1) Data nilai dimmer
Tulis Binary(1) Berfungsi sebagai flag, yang menyatakan PHP sedang menulis ke Microsoft Visual Basic 6.0 atau tidak.
3.4.2.4. Table Realtime2
Table Realtime2 berfungsi sebagai perantara data yang dikirim dari Microsoft Visual Basic 6.0 untuk dibaca pada PHP. Untuk lebih jelasnya dapat melihat tabel 3.4.
Tabel 3.4. Table Realtime2 Nama Field Tipe Keterangan
L1 Binary(1) Data lampu1 nyala atau tidak L2 Binary(1) Data lampu2 nyala atau tidak L3 Binary(1) Data lampu3 nyala atau tidak Fan Binary(1) Data fan nyala atau tidak Dimmer Char(1) Data nilai dimmer
3.4.3. Microsoft Visual Basic 6.0
Program utama pada Microsoft Visual Basic 6.0 terdiri dari 4 bagian, yaitu:
1. Program pada saat form load
2. Program untuk menghasilkan 2 digit ASCII untuk FCS 3. Program pada timer1
4. Program pada timer2
START
Read PLC
Tulis data Read PLC ke database
PHP menulis ?
Write PLC (LED dan fan)
Ambil data PHP dari database
END Potensiometer
berubah?
Write PLC (dimmer)
N
Y
Y
N
Nilai dimmer pada web berubah?
Write PLC (dimmer) Y
Write PHP flag di database = “0”
N
Gambar 3.9. Flowchart Program pada Microsoft Visual Basic 6.0
3.4.3.1. Program pada saat form load
Ada beberapa parameter pada Microsoft Visual Basic 6.0 yang harus disesuaikan dengan parameter pada PLC. Parameter-parameter tersebut dapat di- setting pada property komponen MSComm. Untuk merubah property tesebut dapat menggunakan kode program seperti pada gambar 3.10. Kode program tersebut perlu dijalankan setiap terjadi form load.
Private Sub Form_Load() MSComm1.CommPort = 4
MSComm1.Settings = "9600,e,7,2"
MSComm1.PortOpen = True Data$ = "@00SC02"
Call baca hasil6$ = "0"
dimmertulis1$ = "0"
End Sub
Gambar 3.10. Kode Program pada saat form load
Perintah “MSComm1.CommPort” berguna untuk menentukan COM port mana yang akan dipakai. Dalam hal ini, penulis menggunakan COM2.
“MSComm1.Settings” berfungsi untuk mengatur parameter komunikasi, yaitu baud rate 9600, parity even, panjang data 7 bit, dan stop bit sebanyak 2 bit.
“MSComm1.PortOpen” untuk membuka atau menutup port. True berarti membuka, dan False berarti menutup.
Kemudian setelah men-setting parameter tersebut, perlu juga untuk mengubah status PLC, supaya PLC dalam keadaan monitor. Agar PLC dalam keadaan monitor, perlu dikirimkan data “@00SC02”. Cara mengirimnya adalah dengan memasukkan data ke sebuah variabel, yaitu variabel Data$. Data tersebut dimasukkan dalam sebuah variabel, agar lebih mudah untuk dimanipulasi.
Kemudian panggil prosedur baca. Variabel hasil6$ dan dimmertulis$ merupakan variabel bantuan yang digunakan untuk mengetahui kondisi potensiometer dan nilai dimmer pada web satu putaran waktu timer1 sebelumnya. Kedua variabel tersebut selanjutnya akan dibandingkan dengan kondisi potensiometer dan nilai dimmer pada web sekarang. Jika berbeda, maka akan dilakukan pengiriman data ke PLC.
3.4.3.2. Program untuk menghasilkan 2 digit ASCII untuk FCS
Program untuk menghasilkan ASCII untuk FCS ini disebut dengan prosedur baca. Kode program untuk prosedur baca dapat dilihat pada gambar 3.11.
Sub baca()
L = Len(Data$) a = 0
For i = 1 To L
opo$ = Mid$(Data$, i, 1) a = Asc(opo$) Xor a Next i
FCS$ = Hex$(a)
If Len(FCS$) = 1 Then FCS$ = "0" + FCS$
End If
dattx$ = Data$ + FCS$ + "*" + Chr$(13) MSComm1.Output = dattx$
End Sub
Gambar 3.11. Kode Program pada prosedur baca
Perlu diadakan XOR pada setiap data, secara berurutan, sehingga akhirnya menghasilkan ASCII yang diinginkan sebagai FCS. Jika ternyata ASCII yang dihasilkan adalah 1 digit, maka perlu ditambahkan ASCII “0” di depan ASCII yang kedua. Lalu, kemudian data setelah digabung dengan FCS dan ASCII lainnya dimasukkan ke dalam variabel dattx$. Setelah itu, variabel dattx$
dikirimkan ke port menggunakan perintah “MSComm1.Output”.
3.4.3.3. Program pada timer1
Program pada timer1 akan membaca kondisi output dan input pada PLC setiap 400 ms menggunakan komponen timer.
Data$ = "@00RH00040002" 'cek HR04 dan HR05 Call baca
hasilbaca$ = MSComm1.Input
Gambar 3.12. Kode Program untuk Membaca Kondisi Plant
Pada gambar 3.12. ditunjukkan kode program untuk untuk melakukan pengecekan pada alamat PLC HR04 dan HR05. Pengecekan dilakukan setiap 400 ms. Perintah
“hasilbaca$ = MSComm1.Input” berguna agar variabel hasilbaca$ berisi data yang telah diambil per 400 ms dari PLC.
Gambar 3.13. menunjukkan kode program untuk melakukan pengecekan FCS terhadap data yang telah diambil dari PLC ($hasilbaca$). Jika pengecekan secara FCS sesuai, maka hasil4$ diisi dengan data yang diambil dari alamat HR04. Agar lebih jelas, dapat melihat gambar 3.16.
L = Len(hasilbaca$) a = 0
For i = 1 To L
opo$ = Mid$(Data$, i, 1) a = Asc(opo$) Xor a Next i
FCS$ = Hex$(a)
If Len(FCS$) = 1 Then FCS$ = "0" + FCS$
End If
If FCS$ = Mid(hasilbaca$, 16, 2) Then hasil4$ = Mid(hasilbaca$, 11, 1) End If
Gambar 3.13. Kode Program untuk FCS PC
Perlu diketahui, data yang telah berhasil dibaca dari PLC, berbentuk hexadecimal. Perlu adanya sebuah decoder, yang berfungsi untuk merubah data dari PLC yang berbentuk hexadecimal tadi (hasil4$) menjadi 4 buah data binary.
Gambar 3.14. menunjukkan kode program yang berfungsi sebagai decoder untuk mengubah hasil4$ menjadi 4 buah data binary.
If hasil4$ >= "A" Then
hasil4int = Asc(hasil4$) - 55 Else
hasil4int = Asc(hasil4$) - 48 End If
hasil4 = hasil4int \ 8 'MSB hasil3 = (hasil4int Mod 8) \ 4
hasil2 = ((hasil4int Mod 8) Mod 4) \ 2
hasil1 = ((hasil4int Mod 8) Mod 4) Mod 2 'LSB hasila$ = Mid(Str(hasil1), 2, 1) 'LSB hasilb$ = Mid(Str(hasil2), 2, 1)
hasilc$ = Mid(Str(hasil3), 2, 1)
hasild$ = Mid(Str(hasil4), 2, 1) 'MSB
Gambar 3.14. Kode Program Decoder Hexadecimal-Binary
Jika nilai dari hasil4$ berbentuk huruf (A, B, C, dst), maka ASCII dari hasil4$ tadi dikurangkan dengan 55. Sehingga akan didapatkan nilai yang sesuai untuk dijadikan bilangan biner. Contoh, nilai “A” memiliki ASCII 65. Nilai 65 tadi akan dikurangkan dengan 55, sehingga hasil4int$ berisi data integer sebesar 10. Sedangkan untuk nilai hasil4$ yang berbentuk angka (1, 2, 3, dst), maka nilai ASCII dari hasil4$ akan dikurangkan dengan 48. Contoh, nilai “1” memiliki ASCII 49. Nilai 49 tadi akan dikurangkan dengan 48, sehingga hasil4int$ berisi data integer sebesar 1.
Setelah didapatkan data dalam bentuk integer dalam variabel hasil4int$, perlu diadakan pembagian dengan bilangan 2n, dalam hal ini adalah 8. Hasilnya dimasukkan pada variabel hasil4, sebagai MSB (Most Significant Bit). Sedangkan sisanya, digunakan untuk dibagi dengan bilangan 2n-1, dalam hal ini adalah 4.
Hasilnya dimasukkan pada variabel hasil3, sebagai MSB-1. Sedangkan sisanya, digunakan untuk dibagi dengan bilang 2n-2, dan seterusnya, sampai sisa terkecil dibagi dengan 20.
Hasil yang didapatkan tadi, berbentuk integer. Perlu diadakan perubahan hasil-hasil tadi menjadi bentuk string, yaitu dengan perintah “hasild$ = Mid(Str(hasil4), 2, 1)”. Perintah ini menjadikan variabel hasil4 sebagai string, kemudian mengambil karakter ke-2 sebanyak 1 karakter.
Setelah berhasil mengambil data dalam bentuk binary dan string dari kondisi lampu LED dan fan, selanjutnya yang perlu dilakukan adalah mengambil data kondisi lampu dimmer.
hasil5$ = Mid(hasilbaca$, 15, 1)
Gambar 3.15. Kode Program untuk Mengambil Data Kondisi Potensiometer Kode program pada gambar 3.15. menunjukkan bahwa sebenarnya data kondisi potensiometer sudah ada pada variabel hasilbaca$. Untuk lebih spesifik, data yang diambil tadi (hasilbaca$) dipilah lagi menjadi sebuah karakter saja. Karakter yang dipilah adalah karakter ke-15. Karakter ke-15 ini merupakan data kondisi potensiometer.
@ Header
Node No. Code End Code HR04 HR05 FCS Terminator
11 15
Gambar 3.16. Karakter ke-11 dan ke-15
Selanjutnya, yang perlu dilakukan adalah memasukkan data-data yang tadi telah ada pada variabel hasila$, hasilb$, hasilc$, hasild$, dan hasil5$. Untuk
pengontrolan dari web, maka variabel web$ akan bernilai “1”. Jika variabel web$
bernilai “1”, maka data untuk kondisi dimmer yang dimasukkan adalah variabel dimmertulis$. Data-data tadi dimasukkan pada table realtime2, yang selanjutnya akan dibaca dan ditampilkan oleh PHP. Kode program untuk memasukkan data- data tersebut ke dalam table realtime2, dapat dilihat pada gambar 3.17.
Adodc1.RecordSource = "select * from realtime2"
Adodc1.Refresh
Adodc1.Recordset.Delete Adodc1.Recordset.AddNew
Adodc1.Recordset("L1") = hasila$
Adodc1.Recordset("L2") = hasilb$
Adodc1.Recordset("L3") = hasilc$
Adodc1.Recordset("fan") = hasild$
If web$ = "1" Then
Adodc1.Recordset("dimmer") = dimmertulis$
Else
Adodc1.Recordset("dimmer") = hasil5$
End If
Adodc1.Recordset.MoveLast
Gambar 3.17. Kode Program Memasukkan Kondisi ke Table realtime2 Gambar 3.18. menunjukkan kode program untuk melakukan pengecekan perubahan pada potensiometer. Jadi, ketika potensiometer digerakkan, akan terjadi perbedaan antara nilai pada variabel hasil6$ (sebelumnya) dan hasil5$ (sekarang).
Jika terjadi perubahan, maka data akan dikirimkan ke PLC sesuai dengan nilai yang ditunjukkan oleh potensiometer.
If hasil6$ <> hasil5$ Then web$ = "0"
Data$ = "@00WR0010000" + hasil5$
Call baca End If
Gambar 3.18. Kode Program Mengecek Perubahan pada Potensiometer Langkah selanjutnya adalah melakukan pengambilan data dari PHP yang telah tersimpan di database, pada table realtime1. Kode programnya dapat dilihat pada gambar 3.19.
Adodc1.RecordSource = "select * from realtime1"
Adodc1.Refresh
realtime$ = Adodc1.Recordset.GetString
Gambar 3.19. Kode Program untuk Mengambil Data dari Table realtime1
Data yang diambil, disimpan pada variabel realtime$. Kemudian dilakukan pengecekan jumlah karakter pada variabel realtime$. Perlu dilakukan pengecekan, karena kemungkinan dapat terjadi field data pada table realtime1 berjumlah 2 digit. Kode program untuk melakukan pengecekan terhadap panjang karakter variabel realtime$ dapat dilihat pada gambar 3.20. Gambar 3.20. juga berisi program pemindahan data dari field data ke variabel datatulis$, dari field dimmer ke variabel dimmertulis$, dari field tulis ke variabel cektulis$.
If Len(realtime$) = 7 Then
datatulis$ = Mid(realtime$, 1, 2) dimmertulis$ = Mid(realtime$, 4, 1) cektulis$ = Mid(realtime$, 6, 1) Else
datatulis$ = Mid(realtime$, 1, 1) dimmertulis$ = Mid(realtime$, 3, 1) cektulis$ = Mid(realtime$, 5, 1) End If
Gambar 3.20. Kode Program untuk Pengecekan Panjang Data dari PHP Kemudian, mengacu pada flowchart (gambar 3.9.), langkah selanjutnya adalah melakukan pengecekan, apakah PHP dalam kondisi menulis atau tidak.
Maksudnya, apakah pengguna web melakukan pengiriman data (controlling) ataukah hanya melakukan monitoring saja. Jika controlling dilakukan, maka field tulis pada table realtime1, akan bernilai “1”. Jika hanya monitoring saja yang dilakukan, maka field tulis pada table realtime1 akan bernilai “0”. Hal itu berarti, variabel yang harus dicek adalah variabel cektulis$. Gambar 3.21. menunjukkan kode program pengecekan variabel cektulis$.
Gambar 3.21. juga berisi program untuk mengubah atau mengkonversikan data yang diambil dari PHP (datatulis$) menjadi bentuk hexadecimal. Perlu diketahui, data yang dikirimkan oleh PHP atau data yang diambil dari PHP, merupakan hasil penjumlahan dari kondisi-kondisi yang diinginkan oleh pengguna web, dan berbentuk decimal. Setelah melakukan konversi data dari decimal ke hexadecimal, data kemudian dikirimkan ke PLC.
Kemudian, dilakukan pengecekan, apakah nilai dimmer pada web dikontrol atau dirubah oleh pengguna. Pengecekan ini dilakukan dengan membandingkan nilai pada variabel dimmertulis$ (sekarang) dan dimmertulis1$
(sebelumnya). Jika terjadi perubahan nilai dimmer pada web, maka variabel web$
diisi dengan “1”, menandakan bahwa terjadi perubahan nilai dimmer pada web.
Variabel web$ ini penting, untuk mengetahui, apakah nilai potensiometer ataukah nilai dimmer pada web yang akan ditampilkan di web, dan dimasukkan ke dalam history. Selain mengisi variabel web$ dengan nilai “1”, dilakukan juga pengiriman data dimmer ke PLC, sehingga kondisi dimmer berubah sesuai keinginan pengguna web.
Setelah selesai dengan pengiriman data digital (LED dan fan) dan data analog (dimmer) ke PLC, program akan mengganti nilai field tulis dengan “0”.
If cektulis$ = "1" Then
Select Case datatulis$
Case "10"
datatulis$ = "A"
Case "11"
datatulis$ = "B"
Case "12"
datatulis$ = "C"
Case "13"
datatulis$ = "D"
Case "14"
datatulis$ = "E"
Case "15"
datatulis$ = "F"
End Select
Data$ = "@00WH0001000" + datatulis$
Call baca
If dimmertulis$ <> dimmertulis1$ Then web$ = "1"
Data$ = "@00WR0010000" + dimmertulis$
Call baca End If
Adodc1.RecordSource = "select * from realtime1"
Adodc1.Refresh
Adodc1.Recordset.Delete Adodc1.Recordset.AddNew
Adodc1.Recordset("data") = datatulis$
If web$ = "1" Then
Adodc1.Recordset("dimmer") = dimmertulis$
Else
Adodc1.Recordset("dimmer") = hasil5$
End If
Adodc1.Recordset("tulis") = "0"
Adodc1.Recordset.MoveLast End If
Gambar 3.21. Kode Program Pengecekan pada cektulis$
Gambar 3.22. menunjukkan bahwa variabel hasil6$ memiliki nilai sama dengan variabel hasil5$ dan variabel dimmertulis1$ memiliki nilai sama dengan variabel dimmertulis$. Hal ini digunakan untuk menyimpan secara sementara kondisi satu putaran timer1 sebelumnya.
hasil6$ = hasil5$
dimmertulis1$ = dimmertulis$
Gambar 3.22. Kode Program untuk Mengetahui Kondisi Sebelumnya
3.4.3.4. Program pada timer2
Timer2 digunakan untuk memasukkan data kondisi pada PLC ke database (table history). Timer2 dijalankan setiap interval 1 detik. Jadi data disimpan ke database setiap 1 detik. Kode programnya ditunjukkan pada gambar 3.23.
Private Sub Timer2_Timer() Adodc1.Enabled = True
Adodc1.RecordSource = "select * from history"
Adodc1.Refresh
Adodc1.Recordset.AddNew
Adodc1.Recordset("tanggal") = Date Adodc1.Recordset("waktu") = Time Adodc1.Recordset("lampu1") = hasilc$
Adodc1.Recordset("lampu2") = hasilb$
Adodc1.Recordset("lampu3") = hasila$
Adodc1.Recordset("fan") = hasild$
If web$ = "1" Then
Adodc1.Recordset("dimmer") = dimmertulis$
Else
Adodc1.Recordset("dimmer") = hasil5$
End If
Adodc1.Recordset.MoveLast End Sub
Gambar 3.23. Kode Program untuk Memasukkan Kondisi pada Database
3.4.3.5. Menghubungkan Microsoft Visual Basic 6.0 dengan MySQL
Data yang diambil per 400 ms dari PLC seperti di atas tadi, kemudian dimasukkan dan disimpan dalam database, yang menggunakan program MySQL.
Agar data dari Microsoft Visual Basic 6.0 dapat ditransfer ke MySQL, perlu adanya hubungan antara 2 program tersebut. Untuk menghubungkan Microsoft
Visual Basic 6.0 dengan MySQL, perlu ditambahkan komponen Microsoft ADO Data Control 6.0 (OLEDB), seperti yang telah dijelaskan pada bab 2.
Untuk memasukkan data pada MySQL, gunakan perintah seperti pada gambar 3.24.
Adodc1.Enabled = True
Adodc1.RecordSource = "select * from history"
Adodc1.Refresh
Adodc1.Recordset.AddNew
Adodc1.Recordset("tanggal") = Date Adodc1.Recordset("waktu") = Time Adodc1.Recordset("lampu1") = hasilc$
Adodc1.Recordset("lampu2") = hasilb$
Adodc1.Recordset("lampu3") = hasila$
Adodc1.Recordset("fan") = hasild$
If web$ = "1" Then
Adodc1.Recordset("dimmer") = dimmertulis$
Else
Adodc1.Recordset("dimmer") = hasil5$
End If
Adodc1.Recordset.MoveLast
Gambar 3.24. Program Untuk Memasukkan Data Ke MySQL
3.4.3.6. Menghubungkan Microsoft Visual Basic 6.0 dengan PHP
Tugas Akhir ini menggunakan database MySQL untuk menghubungkan Microsoft Visual Basic 6.0 dengan PHP. Seperti yang telah dijelaskan di atas, Microsoft Visual Basic 6.0 dapat dikoneksikan dengan MySQL. PHP sendiri juga dapat dikoneksikan dengan MySQL. Jadi, untuk menghubungkan Microsoft Visual Basic 6.0 dengan PHP, perlu adanya hubungan antara Microsoft Visual Basic 6.0 – MySQL, kemudian MySQL – PHP. Kode programnya dapat dilihat pada gambar 3.16. dan gambar 3.18.
Gambar 3.25. Microsoft Visual Basic 6.0 – PHP
3.4.4. PHP
Pemrograman PHP digunakan untuk membuat web internet, yang berfungsi sebagai Human-Machine Interface. Halaman-halaman dari web yang dibuat dalam Tugas Akhir ini dapat dilihat blok diagramnya pada gambar 3.26.
Halaman Login
Menu Awal User
“administrator ”
Controlling Monitoring
History
History Dimmer Logout
Menu Awal User
“operator”
Monitoring
History
History Dimmer Logout
Gambar 3.26. Blok Diagram Halaman pada Web
Selain blok diagram pada gambar 3.26., kode program untuk menghubungkan PHP-MySQL dan mengecek sekuriti juga perlu untuk diperhatikan.
Microsoft Visual Basic
6.0
MySQL PHP
realtime2 realtime1
3.4.4.1. Menghubungkan PHP-MySQL
Program untuk menghubungkan PHP-MySQL dapat dilihat pada gambar 3.27. Kode program ‘$connection=mysql_connect(“localhost”,”root”,”root”) or die(“couldnt”);’ berarti mengkoneksikan PHP dengan database MySQL.
Dimana, database MySQL memiliki host “localhost”, user “root”, dan password
“root”. Jika proses mengkoneksikan PHP dengan MySQL tersebut gagal dilakukan, maka akan tampil tulisan “couldnt” pada web.
Kode program ‘$db=mysql_select_db(“ta”,$connection);’ berarti memilih database “ta”, dengan menggunakan koneksi “$connection”.
<body>
<?
$connection=mysql_connect("localhost","root","root") or die("couldnt");
$db=mysql_select_db("tafinal",$connection);
?>
</body>
Gambar 3.27. Kode Program pada “connect.php”
3.4.4.2. Melakukan Pengecekan Sekuriti
Program untuk melakukan pengecekan sekuriti dapat dilihat pada gambar 3.28.
<body>
<?
session_start();
$user=$_SESSION['user'];
$password=$_SESSION['password'];
include("connect.php");
$query="select * from user where username='$user' and password='$password'";
$result=mysql_query($query) or die("couldnt query");
$row=mysql_fetch_array($result);
$_SESSION['power']=$row['power'];
if ($row=="") {
echo "Salah Password atau User";
include("index.html");
exit();
}
?>
</body>
Gambar 3.28. Kode Program Sekuriti
Kode program “session_start()” berarti memulai session. Salah satu penggunaan session adalah untuk menyimpan suatu variabel, dimana variabel itu masih dapat diakses jika pengguna mengakses web dalam 1 sesi. Dalam hal ini, yang digunakan adalah variabel “$_SESSION[‘user’]” dan “$_SESSION[‘password’]”.
“$query” berisi kode query MySQL yang berfungsi untuk mencocokkan variabel
“$_SESSION[‘user’]” dan “$_SESSION[‘password’]” dengan data yang ada pada database. Jika keduanya cocok, maka pengguna dapat mengakses web. Jika tidak cocok, maka akan muncul tulisan di web “Salah Password atau User”, dan akan muncul halaman login.
3.4.4.3. Halaman Login
Halaman Login terdiri dari 2 file, yaitu “index.html” dan
“sessionstart.php”.
Gambar 3.29. Halaman “index.html”
Tampilan halaman web dari “index.html” dapat dilihat pada gambar 3.29.
Sedangkan kode programnya dapat dilihat pada gambar 3.30.
Program pada gambar 3.30. menggunakan aplikasi form. Pengguna yang mengakses web tersebut dapat mengisi sebuah form, dalam hal ini form untuk melakukan login.
<body background="3D-Picture1038.jpg" style="background- attachment: fixed">
<form name="form1" method="post" action="sessionstart.php">
<p> </p>
<p class="style2">Please Login To Enter The House </p>
<p><b><font color="#FFFFFF"><font face="Arial Black">Username</font>:
</font></b>
<input name="user" type="text" id="user">
</p>
<p><font face="Arial Black" color="#FFFFFF">Password
:</font>
<input name="password" type="password" id="password">
</p>
<p>
<input type="submit" name="submit" value="Submit"></p>
</form>
<p> </p>
</body>
Gambar 3.30. Kode Program pada “index.html”
File “sessionstart.php” tidak memiliki tampilan halaman apa-apa. File ini hanya berisi kode program untuk memasukkan isi dari form pada halaman
“index.html” ke variabel session, sehingga nantinya dapat diakses atau digunakan lagi. Penggunaan session ini dimaksudkan agar pengguna tidak harus selalu memasukkan login dan password setiap mengakses halaman.
<body>
<?
session_start();
$_SESSION['user']=$_POST['user'];
$_SESSION['password']=$_POST['password'];
include("menuawal.php");
?>
</body>
Gambar 3.31. Kode Program pada “sessionstart.php”
3.4.4.4. Halaman Menu Awal
Pada gambar 3.32 dan gambar 3.33. dapat dilihat tampilan halaman menu awal, untuk login “administrator” dan “operator”.
Gambar 3.32. Tampilan Halaman “menuawal.php” (“administrator”)
Gambar 3.33. Tampilan Halaman “menuawal.php” (“operator”)
<?
include("authentication.php");
session_start();
$power=$_SESSION['power'];
if ($power>5) {
Gambar 3.34. Sebagian Kode Program pada “menuawal.php”
Gambar 3.34. menunjukkan sebagian dari kode program pada
“menuawal.php”. Kode program tersebut berarti melakukan pengecekan terhadap variabel “$_SESSION[‘power’]” yang menunjukkan kekuatan yang dimiliki oleh pengguna yang saat itu sedang mengakses web. Jika variabel tersebut lebih besar dari 5, maka menu “Controlling” akan muncul. Jika tidak, menu “Controlling”
tidak akan muncul.
3.4.4.5. Halaman Controlling
Halaman controlling terdiri atas “writeplc2a.php” dan “tulis.php”.
Halaman “writeplc2a.php” berisi form untuk mengendalikan plant. Sedangkan halaman “tulis.php” berfungsi untuk melakukan pengiriman data ke database, sehingga data tersebut dapat diambil oleh Microsoft Visual Basic 6.0. Gambar 3.35. menunjukkan tampilan halaman “writeplc2a.php”.
Gambar 3.35. Tampilan Halaman “writeplc2a.php”
<?
session_start();
include("authentication.php");
$power=$_SESSION['power'];
if ($power>5) {
?>
<?
include("connect.php");
$query="select * from realtime2;";
$row=mysql_query($query);
$result=mysql_fetch_array($row);
$lampu3=$result["L1"];
$lampu2=$result["L2"];
$lampu1=$result["L3"];
$fan=$result["fan"];
$dimmer=$result["dimmer"];
?>
Gambar 3.36. Sebagian Kode Program pada “writeplc2a.php”
Gambar 3.36. menunjukkan sebagian kode program pada
“writeplc2a.php”. Kondisi pada lampu LED 1, LED 2, LED 3, fan, dan lampu dimmer disimpan pada variabel $lampu1, $lampu2, $lampu3, $fan, dan $dimmer.
Kondisi tersebut dapat diketahui karena adanya data yang diambil dari database
“TA” table “realtime2”. Untuk pengiriman data, menggunakan form. Lampu- lampu LED dan fan menggunakan push button. Ketika diklik kondisi lampu akan berubah, dari on menjadi off, atau sebaliknya. Sedangkan untuk lampu dimmer, menggunakan menu pada form. Pengguna dapat memilih kondisi lampu dimmer yang diinginkan dengan menekan tombol drop-down.
Gambar 3.37. Tampilan Halaman “tulis.php”
Gambar 3.37. menunjukkan tampilan halaman pada “tulis.php”. Halaman tersebut berguna untuk mengirimkan data yang diinginkan ke database. Kode programnya dapat dilihat pada gambar 3.38.
Data yang dikirim adalah data hasil penjumlahan nilai kondisi yang diinginkan pengguna dari lampu LED 1, LED 2, LED 3, fan, dan lampu dimmer.
Nilai tiap-tiap lampu, dan fan ketika menyala atau tidak menyala dapat dilihat pada tabel 3.5.
Tabel 3.5. Nilai ON/OFF Lampu LED dan Fan
Variabel ON OFF
$fan 8 0
$lampu1 4 0
$lampu2 2 0
$lampu3 1 0
if ($fan=="off")
$fan=8;
if ($lampu1=="off")
$lampu1=4;
if ($lampu2=="off")
$lampu2=2;
if ($lampu3=="off")
$lampu3=1;
$data=$fan+$lampu1+$lampu2+$lampu3;
$query="delete from realtime1;";
mysql_query($query);
$query="insert into realtime1 values ('$data','$dimmer','1');";
mysql_query($query);
echo "Write ke PLC SUKSES dilakukan";
Gambar 3.38. Sebagian Kode Program pada “tulis.php”
3.4.4.6. Halaman Monitoring
Halaman monitoring merupakan halaman yang berguna untuk memantau kondisi pada plant saat ini. Tampilan dari halaman monitoring yang diwakili oleh halaman “readplc.php” ini dapat dilihat pada gambar 3.39.
Gambar 3.39. Tampilan Halaman “readplc.php”
Kode program untuk halaman “readplc.php” dapat dilihat pada gambar 3.40. Kode program untuk halaman ini hampir sama dengan kode program pada
“writeplc2a.php”. Hal itu dikarenakan prosedur untuk mengambil data dari database yang juga dilakukan ketika pengguna mengakses halaman monitoring.
Hanya saja, pada halaman monitoring ini, pengguna tidak dapat melakukan perubahan data, atau controlling.
<?
include("authentication.php");
include("connect.php");
$query="select * from realtime2;";
$row=mysql_query($query);
$result=mysql_fetch_array($row);
$lampu3=$result["L1"];
$lampu2=$result["L2"];
$lampu1=$result["L3"];
$fan=$result["fan"];
$dimmer=$result["dimmer"];
Gambar 3.40. Sebagian Kode Program pada “readplc.php”
3.4.4.7. Halaman History Table
Halaman history table terdiri dari 2 halaman, yaitu “history.php” dan
“his.php”. “history.php” berfungsi sebagai form yang harus diisi oleh pengguna yang akan melihat history table. Sedangkan “his.php” berfungsi menampilkan data-data yang ada pada database. Gambar 3.41. menunjukkan tampilan halaman
“history.php”.
Gambar 3.41. Tampilan Halaman “history.php”
Query yang harus dilakukan untuk menampilkan tabel history adalah
"select * from history where tanggal= '$tahun-$bulan-$tanggal' and waktu>='$jam1:$menit1:$detik1' and waktu<='$jam2:$menit2:$detik2'". Artinya, program akan mengambil data dari database “TA” table “history”, sesuai dengan kondisi waktu yang diinginkan oleh pengguna. Tampilan dari halaman “his.php”
dapat dilihat pada gambar 3.42.
Gambar 3.42. Tampilan Halaman “his.php”
3.4.4.8. Halaman History Dimmer
Halaman history dimmer adalah halaman yang hanya menampilkan history dari lampu dimmer, dalam bentuk grafik. Halaman history dimmer terdiri dari 2 halaman, yaitu halaman “history2.php” dan “test.php”. Untuk mengeluarkan gambar sebagai grafik historical trend dari dimmer, menggunakan fitur dari PHP, yaitu GD Library. Untuk tampilan dari “history2.php” sama dengan
“history.php”.
$result=mysql_query($query);
$numrow=mysql_num_rows($result);
$height = 300;
$width = ($numrow+1)*20;
$im = ImageCreate($width, 500);
$bck = ImageColorAllocate($im, 10,110,100);
$white = ImageColorAllocate($im, 255, 255, 255);
$pink= ImageColorAllocate($im,249,162,232);
ImageFill($im, 0, 0, $white);
for($i=0;$i<=12;$i++) {
ImageString ($im, 3, 1, (12-$i)*24, $i, $bck);
ImageLine($im, 0, (12-$i)*24, $numrow*20, (12-$i)*24, $pink);
}
for($i=0;$i<=$numrow;$i++)
ImageLine($im, $i*20, 0, $i*20, 288, $pink);
ImageLine($im, 0, 0, 0, 288, $bck);
ImageLine($im, 0, 288, $width, 288, $bck);
Gambar 3.43. Penggunaan GD Library
Pada gambar 3.43. dapat dilihat penggunaan GD Library untuk menampilkan grafik historical trend dari dimmer. “ImageCreate($width, $height)” berfungsi untuk membuat image sebesar $width x $height. “ImageColorAllocate($im, $x,
$y, $z)” berfungsi untuk membuat warna sesuai dengan RGB pada variabel $x, $y,
$z. “ImageFill($im, 0, 0, $white)” berfungsi untuk memasukkan warna $white ke image. “ImageLine($im, $x1, $y1, $x2, $y2, $warna)” berfungsi untuk membuat garis berwarna $warna, dari koordinat ($x1, $y1) sampai dengan ($x2, $y2).
Hasil tampilan dari grafik history dimmer dapat dilihat pada gambar 3.44.
Gambar tersebut menunjukkan kondisi lampu dimmer bernilai “0” pada waktu 01:29:15 sampai dengan 01:29:43. Lalu dimmer bernilai “4,46” pada waktu
01:29:44 sampai dengan 01:29:49. Kemudian kembali menjadi “0” sampai dengan 01:29:51.
Gambar 3.44. Tampilan dari “test.php”