Aplikasi PLC – Solusi ON-OFF Satu Tombol
Perhatikan diagram ladder berikut ini.Ketika Tombol START ditekan, maka MOTOR akan ON. MOTOR akan tetap ON meskipun Tombol START dilepas. Untuk mematikan MOTOR, maka ditekan Tombol STOP. Rangkaian tersebut disebut Rangkaian ON-OFF dengan Self-Maintaining Output.
Selanjutnya, perhatikan diagram ladder berikut.
Ketika Tombol ON-OFF ditekan, maka instruksi DIFU(13) akan membangkitkan pulsa HIGH sesaat (1 siklus) pada alamat IR200.00. Jika MOTOR dalam kondisi OFF, maka pulsa PULSE akan mengeset instruksi KEEP(11) dan menghidupkan MOTOR pada Output 010.00. Sebaliknya, jika MOTOR dalam kondisi ON, maka pulsa PULSE akan mereset instruksi KEEP(11) dan mematikan MOTOR.
Dengan mengkombinasikan instruksi DIFU(13) dan KEEP(11) dapat disusun diagram untuk Solusi ON-OFF Satu Tombol.
Selamat belajar!
Aplikasi PLC – Mesin Pengering Sederhana
Anggap saja ini mesin pengering cucian yang punya pilihan untuk mengeringkan cucian selama 1 menit, 2 menit, dan 3 menit yang dapat dipilih menggunakan tombol kuning, merah, dan biru. Teknik pengeringan adalah dengan cara memutar cucian dalam tabung berlubang-lubang dengan kecepatan tinggi selama 1, 2, atau 3 menit.Skenario
- Jika Tombol 1_Menit ditekan, maka Motor akan berputar selama 1 menit, dan kemudian OFF.
- Jika Tombol 2_Menit ditekan, maka Motor akan berputar selama 2 menit, dan kemudian OFF.
- Jika Tombol 3_Menit ditekan, maka Motor akan berputar selama 3 menit, dan kemudian OFF.
Rung 1. Jika Tombol 1_Menit ditekan, maka SV (Setting Value) Timer TIM001 akan diisi dengan nilai 600 hex (60 detik). Kenapa gak pake MOV(21) aja? Karena tidak bisa, instruksi MOV(21) tidak dapat mengakses memori area TC. Oleh karena itu digunakan instruksi BSET(71). Lihat Instruksi BSET(71).
Rung 2. Jika Tombol 2_Menit yang ditekan, maka SV TIM001 akan diisi dengan 1200 hex (120 detik).
Rung 3. Jika Tombol 3_Menit yang ditekan, maka SV TIM001 akan diisi dengan 1800 hex (180 detik).
Rung 4. Jika Tombol 1_Menit ditekan ATAU Tombol 2_Menit ditekan ATAU Tombol 3_Menit ditekan, maka bit flag RUN yang ada di alamat IR200.00 akan diset oleh instruksi KEEP(11). Bit flag RUN akan direset oleh Completion-Flag dari TIM001.
Rung 5. Selama bit flag RUN berada dalam kondisi ON, maka TIM001 akan menghitung dan MOTOR akan berputar. Sementara itu, LAMPU indikator akan berkedip-kedip dengan frekuensi 1 detik. Setelah SV samadengan nol, maka Completion-Flag TIM001 akan ON. Pada siklus berikutnya, bit flag RUN akan direset sehingga MOTOR dan LAMPU akan OFF.
Dan jangan lupa memberi END(01) di akhir program.
Selamat belajar!
Free-Running Timer
Selama START berada dalam kondisi ON, maka Timer TIM001 akan aktif dan menghitung selama ±5 detik. Setelah 5 detik, Completion Flag-nya akan aktif. Berubahnya kondisi Completion Flag dari OFF ke ON akan mengaktifkan INT_TO_MCU (Output 010.00) dan mematikan TIM001. Pada siklus berikutnya, TIM001 akan kembali aktif dan menghitung selama ±5 detik. Sementara itu INT_TO_MCU kembali menjadi OFF. Proses tersebut akan terjadi berulang-ulang sampai kondisi START menjadi OFF.
Timer pada rangkaian di atas sebagai Free-Running Timer karena Timer aktif kembali setelah hitungan selesai secara berulang-ulang dengan memanfaatkan Completion Flag-nya. Rangkaian ini disebut juga Flicker karena berfungsi memberi efek flickering (berkedip-kedip) pada Output 010.00.
Pada contoh di atas, PLC akan mengirimkan sinyal interupsi ke MCU setiap 5 detik. Sinyal interupsi tersebut berfungsi sebagai penanda bahwa MCU (Microcontroller Unit) harus membaca data masukan dari 8 buah sensor suhu dan meng-update tampilan pada layar LCD.
Selamat belajar!
Instruksi TIMER – TIM
Instruksi TIM berfungsi sebagai ON-Delay dengan penghitungan waktu mundur. Ketika kondisi eksekusinya terpenuhi, maka TIMER akan melakukan penghitungan waktu dari nilai SV (Setting Value) menuju nol dengan resolusi waktu 0,1 detik. Jika kondisi eksekusinya ON dalam waktu yang cukup lama sehingga waktunya mencapai 0000, maka Completion Flag-nya akan ON. Kondisi ON ini akan dipertahankan sampai TIMER direset.
Instruksi TIM memiliki 2 operand. Operand pertama adalah TC Number yang pada PLC OMRON CPM2A dapat diisi dengan nilai 0-255 (0-127 untuk CPM1A). Jadi dalam program PLC CPM2A dapat didefinisikan sebanyak 256 Timer.
Perlu diperhatikan!
TC Number berlaku untuk instruksi TIMER dan COUNTER. Dalam sebuah program, masing-masing Timer dan Counter harus didefinisikan dengan TC Number yang berbeda.
Operand kedua adalah Setting Value. Operand ini bertipe word, BCD. Nilainya mulai 0000 hingga 9999. Setting Value dapat berupa konstanta atau salah satu dari register IR, AR, SR, HR, LR, DM.
Contoh Program
Ketika Input 000.01 OFF, maka TIM000 akan ON dan melakukan penghitungan. Kurang-lebih setengah detik kemudian, Completion Flag TIM000 akan ON dan menyalakan Lampu. Lampu akan tetap menyala hingga TIM000 direset (Input 000.01 ON).
Penjelasan singkat ini belum mencakup segala aspek tentang TIMER. Semoga tulisan-tulisan yang lain dapat melengkapinya.
Instruksi COUNTER – CNT
Instruksi CNT berfungsi sebagai penghitung/pencacah mundur. Apa yang dihitung? Yang dihitung adalah perubahan kondisi masukan CP (Count Pulse) dari OFF ke ON.
Ketika kondisi eksekusinya ON, maka setiap kali ada perubahan kondisi masukan CP dari ON ke OFF, maka instruksi CNT akan mengurangi nilai PV-nya (Present Value) dengan satu. Perubahan CP selain dari kondisi OFF ke ON tidak berpengaruh terhadap nilai PV.
Jika PV telah mencapai nol, maka Completion Flag Counter akan ON. Kondisi tersebut akan dipertahankan sampai Counter direset.
Counter direset melalui kaki masukan R. Jika kondisi R berubah dari OFF ke ON, maka nilai PV akan direset menjadi samadengan SV. Pada saat Counter dalam kondisi direset (R=ON), perubahan kondisi pada CP tidak akan berpengaruh pada PV.
Seperti halnya TIMER, instruksi CNT memiliki 2 operand yakni TC Number dan SV (Setting Value). TC Number dapat bernilai 0-255 untuk CPM2A dan 0-127 untuk CPM1A. Sedangkan SV dapat berupa konstanta (BCD) atau salah satu dari register IR, AR, SR, HR, LR, dan DM.
Perlu diperhatikan!
- Jika instruksi CNT berada dalam interlock section, nilai PV-nya tidak direset ketika kondisi eksekusi Interlock tidak terpenuhi.
- Counter tidak direset meskipun PLC dimatikan.
- SV Counter adalah bilangan BCD. Jadi hati-hati jika menggunakan SV selain konstanta.
Rung 1. Pada siklus pertama, DM0100 akan diisi dengan nilai 100 hex.
CNT001 memiliki SV=100 BCD, sedangkan CNT002 memiliki SV=DM0100=100 hex.
CP dan R masing-masing Counter sama-sama terhubung ke Input 000.00 dan Input 000.01, sehingga kedua Counter akan menghitung atau direset bersama-sama.
Pada contoh program di atas, Completion Flag CNT001 akan ON setelah 100 hitungan. Demikian juga halnya dengan CNT002. Lain halnya jika kita memasukkan konstanta #100 D yang berarti 100 desimal pada instruksi MOV(21) di atas. Nilai 100 desimal akan disimpan sebagai 64 hexa. Jika dieksekusi, maka CNT002 akan selesai pada hitungan ke 64 bukannya 100 seperti yang kita harapkan.
Selamat belajar!
Aplikasi PLC – Eskalator Otomatis
Eskalator otomatis adalah eskalator yang secara otomatis akan ON ketika ada orang yang akan menaikinya. Dan akan secara otomatis OFF jika dalam periode waktu tertentu eskalator tidak mendeteksi adanya orang yang akan menaikinya.
Keterangan:
- S1 - Sensor kedatangan penumpang
- S2 - Sensor kepergian penumpang
- MOTOR - Motor penggerak eskalator
Skenario
- Jika S1 ON, maka MOTOR ON dan TIMER1 OFF
- Jika S2 ON, maka TIMER1 ON
- Jika TIMER1 ON, maka MOTOR OFF
Program
Rung 1. Jika S1 ON dan TIMER1 OFF, maka MOTOR ON. Nilai bit Output 010.00 (MOTOR) digunakan sebagai pengunci (bit-locking).
Rung 2. Jika S2 ON, maka selama S1 OFF, kondisi Timer1_ON akan ON. Penggunaan instruksi DIFU(13) berfungsi untuk menyatakan bahwa prioritas S1 lebih tinggi dibandingkan S2. Dan bahwa TIMER1 harus OFF ketika S1 ON. Hal ini untuk mengantisipasi adanya kemungkinan S2 ON lebih lama dibandingkan dengan S1.
Rung 3. Selama nilai Timer1_ON = ON, maka TIMER1 ON. Jika nilai TIMER1 terpenuhi maka TIMER1 akan memutus rangkaian MOTOR sehingga eskalator akan berhenti berjalan.
Aplikasi PLC – Parkir Mobil Sederhana
Belajar PLC tanpa contoh aplikasi pasti tidak afdhol. Berikut adalah sebuah contoh aplikasi PLC pada pengontrolan jumlah mobil dalam area parkir.
Skenario
- Adanya mobil yang masuk ke area parkir dideteksi oleh sensor S1.
- Adanya mobil yang keluar dari area parkir dideteksi oleh sensor S2.
- Kapasitas area parkir adalah 100 mobil.
- Jika area parkir telah penuh, maka portal akan menutup pintu masuk dan tanda ‘Parkir Penuh’ dinyalakan.
- Portal memiliki sensor pembatas untuk menyatakan kondisi portal terbuka (S3) dan portal tertutup (S4). (S3 dan S4 tidak tergambar, maaf).
- Tombol Reset digunakan untuk mereset nilai hitungan mobil dalam area parkir menjadi Nol.
Rung Pertama. Jika Tombol Reset ditekan, maka DM0000 direset menjadi 0000 dengan menggunakan instruksi MOVE – MOV(21). DM0000 adalah alamat data memori yang digunakan untuk menyimpan jumlah mobil yang terdapat dalam area parkir.
Rung Kedua. Jika S1 (Sensor_IN) mendeteksi adanya mobil yang masuk, maka program akan mengecek terlebih dahulu apakah area parkir penuh atau tidak. Hal ini dilakukan dengan membandingkan nilai DM0000 dengan #0010 (seharusnya #0100, yakni jumlah kapasitas area parkir, akan tetapi dalam program digunakan nilai #0010 untuk mempercepat proses simulasi). Komparasi tersebut dilakukan menggunakan fungsi COMPARE – CMP(20).
Jika DM0000 kurang dari #0010, maka program akan memicu bit 200.00 dengan instruksi DIFU(13). Kondisi bit 200.00 ini kemudian digunakan sebagai pemicu fungsi INCREMENT – INC(38) untuk menambah nilai DM0000 dengan satu (DM0000 = DM0000 + 1). Sedangkan Output 010.01 berfungsi sebagai penanda visual adanya mobil masuk.
Rung Ketiga. Jika S2 (Sensor_OUT) mendeteksi adanya mobil yang keluar dari area parkir, maka program akan mengecek apakah nilai counter DM0000 samadengan nol. Jika nilai DM0000 lebih dari nol, maka program akan memicu kondisi bit 200.01 dengan instruksi DIFU(13). Kondisi bit 200.01 ini kemudian digunakan untuk memicu fungsi DECREMENT – DEC(39) untuk mengurangi nilai DM0000 dengan satu (DM0000 = DM0000 – 1). Output 010.02 berfungsi sebagai penanda visual adanya mobil keluar.
Rung Keempat. Jika nilai DM0000 = #0010, maka berarti area parkir telah penuh –> Nyalakan tanda ‘Parkir Penuh’.
Rung Kelima. Jika area parkir penuh, maka tutup portal pintu masuk.
Rung Keenam. Jika area parkir tidak penuh, pastikan portal pintu masuk dalam keadaan terbuka.
Selamat belajar!
Instruksi DIFU dan DIFD
Instruksi Differentiate Up – DIFU(13) dan Differentiate Down – DIFD(14) digunakan untuk mengubah kondisi bit operand menjadi ON selama 1 siklus saja. Ketika dieksekusi, DIFU(13) akan membandingkan kondisi eksekusi sekarang dengan kondisi eksekusi sebelumnya. Jika kondisi eksekusi sebelumnya adalah OFF dan kondisi eksekusi sekarang adalah ON, maka DIFU(13) akan mengaktifkan bit operand menjadi ON selama 1 siklus saja.
Kebalikan dari instruksi DIFU(13) yang mengaktifkan bit operand selama 1 siklus ketika kondisi eksekusi berubah dari OFF ke ON, maka instruksi DIFD(14) akan mengaktifkan bit operand selama 1 siklus ketika kondisi eksekusi berubah dari ON ke OFF. Contoh berikut akan menjelaskan prinsip kerja dari DIFU(13) dan DIFD(14).
Contoh Program
Ketika kondisi eksekusi (Input 000.00) berubah dari OFF ke ON, instruksi DIFU(13) akan mengaktifkan bit Output 010.00 selama 1 siklus. Proses tersebut dapat dilihat pada LED indikator pada badan PLC yang akan terlihat berkedip. Selanjutnya, ketika kondisi eksekusi berubah dari ON ke OFF, maka instruksi DIFD(14) akan mengaktifkan bit Output 010.01 selama 1 siklus.
DIFU(13) dan DIFD(14) dalam INTERLOCK dan JUMP
Jika instruksi DIFU(13) dan DIFD(14) berada dalam interlock section, maka instruksi-instruksi tersebut hanya akan dieksekusi jika kondisi eksekusi instruksi Interlock terpenuhi. Ketika kondisi eksekusi Interlock tidak terpenuhi (OFF), maka DIFU(13) dan DIFD(14) tidak akan dieksekusi, dan kondisi bit operand-nya akan direset.
Jika instruksi DIFU(13) dan DIFD(14) berada dalam jump section, maka DIFU(13) dan DIFD(14) hanya akan dieksekusi jika kondisi eksekusi instruksi JMP(04) terpenuhi. Akan tetapi perlu diperhatikan bahwa ketika kondisi bit operand DIFU(13) atau DIFD(14) sedang dalam kondisi ON, kemudian pada siklus berikutnya, kondisi eksekusi JMP(04) sudah tidak terpenuhi lagi (OFF), maka kondisi bit operand DIFU(13) dan DIFD(14) akan dipertahankan hingga kondisi eksekusi JMP(04) terpenuhi lagi. Jadi mesti hati-hati!
Selamat belajar!
Instruksi KEEP
Instruksi ini digunakan untuk mempertahankan kondisi bit operand berdasarkan dua kondisi eksekusi, yakni Set dan Reset. Oleh sebab itu, instruksi KEEP ini terhubung ke dua baris instruksi pengkondisi eksekusi. Jika kondisi eksekusi instruksi pada baris pertama ON (Set), maka kondisi bit operand instruksi KEEP akan ON. Dan jika kondisi eksekusi instruksi pada baris kedua ON (Reset), maka kondisi bit operand instruksi KEEP akan OFF. Jadi instruksi KEEP ini seperti instruksi SET dan RSET yang dijadikan satu paket.
Kondisi bit operand yang digunakan instruksi KEEP tidak direset dalam instruksi INTERLOCK. Contoh program berikut akan menjelaskan fungsi KEEP dan penggunaannya dalam program.
Contoh Program
KEEP-1
Ketika kondisi eksekusi S ON, maka kondisi Output 010.00 akan ON. Kondisi ini tetap dipertahankan meskipun S berubah menjadi OFF. Untuk mematikan Output 010.00 maka digunakan kondisi eksekusi R. Ketika kondisi eksekusi R ON, maka Output 010.00 akan OFF.
KEEP-2
KEEP-2 berada dalam interlock section. Ketika kondisi eksekusi IL(02) ON dan kondisi eksekusi S ON, maka Output 010.02 akan ON. Kondisi ini akan tetap dipertahankan meskipun kondisi eksekusi IL(02) berubah menjadi OFF, karena IL(02) tidak mereset instruksi KEEP(11). Berbeda dengan kondisi Output 010.01 yang kondisinya akan ON jika kondisi eksekusi IL(02) ON dan kondisi Output 010.00 ON. Kondisi Output 010.01 akan OFF jika kondisi eksekusi IL(02) OFF meskipun kondisi Output 010.00 ON.
Selamat belajar!
Instruksi SET dan RSET
Instruksi
SET dan RESET mirip sekali dengan instruksi OUTPUT dan OUTPUT NOT.
Instruksi SET dan RESET mengubah kondisi bit operand-nya ketika kondisi
eksekusinya ON. Ketika kondisi eksekusinya OFF, kondisi bit operand-nya
tidak akan terpengaruh.
Berbeda dengan instruksi OUTPUT dan OUTPUT NOT yang akan
mempengaruhi kondisi bit operand-nya, baik ketika kondisi eksekusinya
ON maupun OFF. Mari kita memahaminya dengan contoh.
Contoh Program
Instruksi OUTPUT pada Net1 akan mengaktifkan Output 010.00 ketika kondisi Input 000.00 ON, dan akan mematikan Output 010.00 ketika kondisi Input 000.00 OFF. Demikian pula halnya dengan instruksi OUTPUT NOT pada Net2. Ketika kondisi Input 000.01 ON, maka kondisi Output 010.01 akan OFF, dan ketika kondisi Input 000.01 ON, maka kondisi Output 101.01 akan ON.
Instruksi SET pada Net3 akan mengaktifkan bit 200.00 ketika Input 000.02 ON. Kondisi ini akan tetap dipertahankan meskipun Input 000.02 berubah kondisi dari ON menjadi OFF.
Instruksi RSET pada Net4 akan menonaktifkan bit 200.00 ketika Input 000.03 ON. Kondisi ini akan tetap dipertahankan meskipun Input 000.03 berubah kondisi dari ON menjadi OFF.
Selamat belajar!
Instruksi JMP
Instruksi Jump – JMP(04) selalu berpasangan dengan instruksi Jump End – JME(05). JMP digunakan untuk melewati bagian program tertentu dalam program, yakni bagian program yang terletak di antara instruksi JMP(04) dan JME(05). Kita sebut saja bagian program tersebut sebagai jump section.
Jika kondisi eksekusi JMP(04) ON, maka program akan berjalan ‘lurus’ seperti jika tidak ada instruksi JMP(04). Dengan kata lain, instruksi-instruksi dalam jump section akan dieksekusi. Tapi jika kondisi eksekusi JMP(04) OFF, maka eksekusi program akan melompat menuju instruksi tepat di bawah instruksi JME(05), tanpa mengubah nilai status apapun yang ada di dalam jump section.
Terdapat dua tipe Instruksi JMP(04) dan JME(05), yakni instruksi dengan nomor 01-99, dan instruksi dengan nomor 00. Instruksi dengan nomor 01-99 hanya dapat digunakan satu kali dalam program. Pada kondisi eksekusi OFF, instruksi JMP(04) dengan nomor 01 (JMP(04)@01) akan melompatkan eksekusi program ke JME(05) dengan nomor 01 (JME(05)@01), seolah-olah instruksi-instruksi yang ada di antara keduanya tidak ada.
Intsruksi JMP(04)@00 dapat digunakan berulang-ulang dalam program. Bahkan bisa juga instruksi ini digunakan secara berurutan dengan hanya satu instruksi JME(04) saja. Dalam eksekusinya, program akan mencari pasangan JMP(04)@00 terdekat pada instruksi-instruksi selanjutnya meskipun tanpa mengubah nilai status apapun. Akan tetapi hal tersebut menyebabkan proses eksekusi program menjadi sedikit lebih lama dibandingkan ketika menggunakan instruksi JMP(04) dan JME(05) dengan nomor 01-99.
Instruksi JMP(04) dan JME(05) dengan nomor 00 dapat dianggap sebagai instruksi interlock IL(02) dan ILC(03) dengan catatan bahwa instruksi JMP(04) dan JME(05) tidak mengubah nilai status apapun dalam jump section-nya.
Contoh Program
Pada saat Kondisi1 OFF, eksekusi program akan langsung melompat ke instruksi tepat di bawah JME(05) yakni Net5. Perubahan nilai Input 000.01 hanya akan mengubah kondisi Output 010.01 saja, sedangkan kondisi Output 010.00 tetap.
Jika Kondisi1 ON, maka program akan mengeksekusi Net2 hingga Net5. Timer0 akan bekerja, dan perubahan nilai pada Input 000.01 akan mengubah kondisi Output 010.00 dan Output 010.01.
Untuk membuktikan bahwa instruksi JMP(04) tidak mengubah nilai status apapun dalam jump section, lakukan praktek sbb:
1. Aktifkan Kondisi1 (Input 000.00 ON)
2. Aktifkan Input 000.01 untuk menyalakan Output 010.00 dan Output 010.01.
3. Matikan Kondisi1 ketika Input 000.01 masih ON.
4. Matikan Input 000.01
Hasil yang akan didapat adalah kondisi Output 010.00 tetap ON, meskipun nilai Input 000.01 berubah-ubah. Perhatikan juga bahwa Output Timer0 dan Output 010.02 juga tetap. Hal ini membuktikan bahwa instruksi JMP(04) dan JME(05) tidak mengubah nilai status apapun di dalam jump section-nya. Demikian pula halnya dengan nilai Timer0. Ketika Kondisi1 berubah dari ON ke OFF sementara nilai Timer0 belum mencapai nol, maka nilai Timer0 tersebut akan dilanjutkan ketika kondisi eksekusi instruksi JMP(04) atau nilai Kondisi1 kembali ON.
Selamat belajar!
Instruksi INTERLOCK
Instruksi Interlock – IL(02) digunakan bersama dengan instruksi Interlock Clear – ILC(03). Instruksi ini digunakan untuk menjalankan bagian program tertentu, yakni bagian program yang berada di antara IL(02) dan ILC(03), dengan syarat kondisi eksekusi untuk IL(02) terpenuhi (ON). Bagian program yang terletak di antara IL(02) dan ILC(03) disebut sebagai interlock section.
Jika kondisi eksekusi IL(02) OFF, maka interlock section akan diperlakukan sbb:
- Bit-bit untuk instruksi OUT dan OUT NOT akan dimatikan (OFF)
- TIM dan TIMH(15) akan direset
- Nilai Process Value (PV) pada CNT dan CNTR(12) akan dipertahankan
- Bit status untuk instruksi KEEP(11) akan dipertahankan
- Instruksi DIFU(13) dan DIFD(14) tidak akan dieksekusi
- Instruksi lain tidak akan dieksekusi dan nilai-nilai IR, AR, LR, HR dan SR yang digunakan sebagai output akan dimatikan/direset (OFF)
Contoh Program
Ketika Kondisi1 OFF, maka interlock section tidak akan dieksekusi. Timer0 dan Output 010.03 akan direset, dan nilai Counter1 akan dipertahankan. Program akan melompat menuju Net7, dan Output 010.04 akan berkedap-kedip. Nilai Kondisi2 tidak berpengaruh selama nilai Kondisi1 OFF.
Ketika Kondisi1 ON, maka Timer0 akan aktif, dan ketika waktunya terpenuhi Output Timer0 akan menurunkan nilai Counter1. Timer0 akan otomatis direset oleh keluarannya sendiri. Setelah nilai Counter0 tercapai (10 kali hitungan), maka Kondisi2 akan ON sehingga interlock section kedua (Net5) akan dieksekusi sampai Counter0 direset menggunakan CNT1RST.
Instruksi Interlock tidak cocok digunakan untuk mengontrol output yang membutuhkan nilai tetap (sustained output), misalnya aktuator pneumatik dan hidrolik, karena kondisi output akan direset ketika kondisi interlock tidak terpenuhi. Instruksi ini lebih cocok digunakan untuk mengontrol output yang tidak membutuhkan nilai tetap. Untuk aplikasi yang membutuhkan pengontrolan sustained output, maka instruksi Jump lebih cocok digunakan.
Selamat belajar!
Instruksi END dan NOP
Instruksi END – END(01)
Instruksi ini digunakan sebagai penutup program. Instruksi-instruksi yang terletak di bawah instruksi END(01) tidak akan dieksekusi oleh PLC. Instruksi END(01) dapat diletakkan dimana saja di dalam program. Karenanya, instruksi ini dapat digunakan untuk men-debug program. Dengan menyelipkan instruksi END(01) pada baris tertentu di dalam program, maka berarti kita membatasi eksekusi program sampai baris tersebut. Setelah yakin bahwa program berjalan benar hingga baris tersebut, kita dapat menghapus instruksi END(01) tersebut dan memindahkannya ke bagian lain. Perlu diingat bahwa setelah selesai melakukan debugging, maka instruksi END(01) yang digunakan untuk tujuan debugging tersebut harus dihapus agar program berjalan normal secara keseluruhan.
Jika dalam sebuah program PLC belum terdapat instruksi END(01), maka program tidak akan dieksekusi dan pesan kesalahan akan ditampilkan. Instruksi END(01) mereset flag ER, CY, GR, EQ dan LE.
Instruksi NOP(00)
Instruksi ini tidak diperlukan dalam pemrograman dan tidak ada simbol ladder khusus untuk instruksi ini. Ketika instruksi ini ditemukan dalam program, maka PLC tidak melakukan apapun dan program akan melanjutkan eksekusi ke instruksi selanjutnya. Ketika memori PLC dihapus, maka semua alamat akan berisi NOP(00).
Instruksi STEP DEFINE dan STEP START
Instruksi STEP DEFINE – STEP(08) dan STEP START – SNXT(09) digunakan berpasangan untuk membentuk breakpoint antara satu bagian program dengan bagian program yang lain dalam sebuah program yang besar. Masing-masing bagian tersebut dapat dieksekusi sebagai suatu unit program dan akan direset setelah eksekusi selesai dilakukan. Bagian program yang didefinisikan menggunakan STEP(08) disebut section.
Instruksi STEP(08) digunakan untuk mendefinisikan awal dari sebuah section. Instruksi ini menggunakan bit kontrol dalam register IR, LR, atau HR. Eksekusi STEP(08) dikontrol menggunakan bit kontrol, sehingga tidak memerlukan kondisi eksekusi. Untuk mengeksekusi sebuah STEP(08) digunakan instruksi SNXT(09) dengan alamat bit kontrol yang sama dengan STEP(08). Dalam sebuah section tidak boleh ada instruksi-instruksi END(01), IL(02)/ILC(03), JMP(04)/JME(05), dan SBN(92).
Ketika kondisi eksekusi SNXT(09) terpenuhi (ON), maka STEP(08) dengan alamat bit kontrol yang sama akan dieksekusi. Sekali dieksekusi, STEP(08) akan terus dieksekusi hingga kondisi bit kontrol OFF atau terjadi eksekusi SNXT(09) selanjutnya dengan STEP(08) tanpa bit kontrol.
Instruksi SNXT(09) harus diletakkan sebelum instruksi STEP(08), sehingga instruksi SNXT(09) akan dieksekusi terlebih dahulu sebelum eksekusi program mencapai instruksi STEP(08) dengan alamat bit kontrol yang sama. Hal ini disebabkan karena dalam setiap siklusnya PLC mengeksekusi instruksi-instruksi secara berurutan dari atas ke bawah.
Ketika sebuah STEP(08) selesai dijalankan, maka semua bit IR dan HR akan direset. Timer juga akan direset. Sedangkan nilai Counter, Keep, dan Shift Register dipertahankan.
Contoh Program
Ketika kondisi Step-1 ON OFF, maka section dalam Step-1 tidak akan dijalankan. Program akan mengeksekusi instruksi di Net7 dan menghasilkan Output 010.02 berkedip-kedip tiap detik.
Ketika kondisi SNXT(09) Step-1 terpenuhi (Step-1 ON = ON), maka section akan dieksekusi. Eksekusi berlangsung terus-menerus hinga kondisi Step-1 OFF terpenuhi. Eksekusi section dalam Step-1 juga dapat dihentikan dengan mereset nilai bit kontrolnya. Oleh karena itu, eksekusi section dalam contoh program di atas akan dihentikan jika kondisi Stop Reset terpenuhi.
STEP(08) dapat diprogram secara berurutan. Tergantung dari kondisi eksekusi dan penampatan instruksi SNXT(09), maka STEP(08) dan SNXT(09) dapat dieksekusi sebagai sekuensial, pencabangan, atau paralel.
Selamat belajar!
Differentiated Instructions
Sebagian besar instruksi PLC dapat diperlakukan sebagai instruksi yang didiferensiasi (differentiated) dan sebagai instruksi yang tidak didiferensiasi (non-differentiated). Instruksi yang didiferensiasi dibedakan dengan adanya karakter @ di awal nama instruksinya.
Apa bedanya?
- Instruksi yang didiferensiasi hanya dieksekusi satu kali saja ketika kondisi eksekusinya berubah dari OFF ke ON. Jika kondisi eksekusinya tidak berubah, atau berubah dari ON ke OFF, sejak terakhir kalinya ia di-scan, maka instruksi tersebut tidak akan dieksekusi lagi.
- Instruksi yang tidak didiferensiasi akan dieksekusi dalam setiap siklus.
Selamat belajar!
Instruksi MOVE – MOV(21)
Instruksi MOVE - MOV(21) digunakan untuk meng-copy nilai dari Source ke Destination. Source dapat berupa konstanta (#), ataupun data yang ada di alamat tertentu dalam register IR, SR, AR, DM, HR, TC, dan LR. Sedangkan Destination adalah alamat register IR, SR, AR, DM, HR, LR. Jika kondisi eksekusi MOV(21) ON, maka data di Source (Sumber) akan di-copy ke Destination (Tujuan).
Perhatian!
- Instruksi MOV(21) tidak dapat digunakan untuk mengubah nilai PV (Process Value) pada Timer/Counter.
- Instruksi MOV(21) tidak dapat digunakan untuk mengubah nilai DM6144 sampai DM6655.
Ketika kondisi Input 000.00 ON, maka konstanta #0100 akan di-copy ke DM0000, dan selanjutnya nilai dalam DM0000 akan di-copy ke HR05.
Instruksi MOV(21) dapat diperlakukan sebagai instruksi yang didiferensiasi atau tidak. (Lihat Differentiated Instructions).
Selamat belajar!
Instruksi INCREMENT – INC(38)
Instruksi ini berfungsi untuk menambah satu nilai pada operand bertipe word. Operand dalam hal ini bisa salah satu dari register IR, SR, AR, DM, HR, dan LR.
Jika kondisi eksekusi instruksi INC(38) terpenuhi, maka nilai operand akan ditambah satu tanpa mempengaruhi bit flag Carry (CY).
Instruksi ini termasuk salah satu instruksi yang dapat didiferensiasi. Jika INC(38) tidak didiferensiasi, maka selama kondisi eksekusi terpenuhi, nilai operand akan bertambah satu setiap siklusnya. Jika dibutuhkan untuk memicu instruksi INC(38) sekali saja selama kondisi eksekusi terpenuhi, maka gunakan instruksi INC(38) yang didiferensiasi atau dengan menggabungkan instruksi INC(38) dengan instruksi DIFU(13) dan DIFD(14) .
Contoh Program
Ketika PLC di-running, maka DM0100 akan direset nilainya oleh instruksi MOV(21) yang kondisi eksekusinya diaktifkan sekali saja yakni pada siklus pertama. Hal itu dapat dilakukan dengan memanfaatkan bit First Cycle Flag pada alamat SR 253.15.
Selanjutnya, jika Input 000.01 ON, maka nilai DM0100 akan bertambah satu dengan aman dan tenteram. Lain halnya dengan ketika Input 000.00 ON. Ketika hal itu terjadi, maka nilai DM0100 akan bertambah lebih dari satu dengan sangat cepat. Hal ini disebabkan karena meskipun sekejap saja kita mengubah kondisi Input 000.00 dari OFF ke ON dan kemudian ke OFF lagi, PLC telah memprosesnya berulang-ulang karena siklus waktu PLC yang cepat.
Selamat belajar!
Instruksi DECREMENT – DEC(39)
Instruksi ini berfungsi untuk mengurangi satu nilai pada operand bertipe word. Operand dalam hal ini bisa salah satu dari register IR, SR, AR, DM, HR, dan LR.
Jika kondisi eksekusi instruksi DEC(39) terpenuhi, maka nilai operand akan dikurangi satu tanpa mempengaruhi bit flag Carry (CY).
Instruksi ini termasuk salah satu instruksi yang dapat didiferensiasi. Jika DEC(38) tidak didiferensiasi, maka selama kondisi eksekusinya terpenuhi, nilai operand akan bertambah satu setiap siklusnya. Jika dibutuhkan untuk memicu instruksi DEC(39) sekali saja selama kondisi eksekusi terpenuhi, maka gunakan instruksi DEC(38) yang didiferensiasi atau dengan menggabungkan instruksi DEC(38) dengan instruksi DIFU(13) atau DIFD(14).
Contoh Program
Ketika PLC di-running, maka DM0100 akan diisi nilainya 1000 oleh instruksi MOV(21) yang kondisi eksekusinya diaktifkan sekali saja yakni pada siklus pertama. Hal ini dapat dilakukan dengan memanfaatkan First Cycle Flag dengan alamat SR 253.15.
Selanjutnya, jika Input 000.01 ON, maka nilai DM0100 akan berkurang satu dengan aman dan tenteram. Lain halnya dengan ketika Input 000.00 ON. Ketika hal itu terjadi, maka nilai DM0100 akan berkurang dengan sangat cepat. Hal ini disebabkan karena meskipun sekejap saja kita mengubah kondisi Input 000.00 dari OFF ke ON dan kemudian ke OFF lagi, PLC telah memprosesnya berulang-ulang karena siklus waktu PLC yang lebih cepat.
Selamat belajar!
Instruksi BINARY-TO-BCD – BCD(24)
Instruksi BCD(24) berfungsi untuk mengkonversi bilangan binary (hexadecimal) menjadi BCD ekuivalennya. Nilai bilangan yang dikonversi tidak boleh melebihi 270F hexa karena hasil konversinya akan melebihi angka 9999. Jika hal ini terjadi maka instruksi BCD(24) tersebut tidak akan dieksekusi.
Instruksi ini membutuhkan dua operand yakni Source dan Destination. Source adalah alamat memori bilangan binary yang akan dikonversi dan Destination adalah alamat memori bilangan BCD hasil konversi. Source dan Destination bisa saja salah satu dari IR, SR, AR, DM, HR, atau LR. Source dan Destination tidak dapat diisi konstanta.
Bilangan BCD – Binary-Coded-Decimal
BCD adalah teknik pengkodean bilangan desimal, dimana masing-masing digit bilangan desimal tersebut direpresentasikan dengan bilangan biner. Dalam dunia elektronik dan komputer, pengkodean ini bertujuan untuk memudahkan pengkonversian data bilangan desimal ketika akan ditampilkan pada suatu display (seven-segment misalnya). Selain itu, BCD juga digunakan untuk mempercepat suatu proses kalkulasi. Dengan teknik pengkodean BCD ini, maka akan dapat dihindari kerumitan baik dari sisi hardware maupun software.
Dalam sistem bilangan BCD, sebuah digit bilangan desimal diwakili oleh 4 bit bilangan binernya. Dasar pengkodean bilangan desimal menjadi bilangan BCD adalah dengan mengganti setiap digit bilangan desimal dengan bilangan biner 4 bit sebagai berikut:
Desimal: 0 1 2 3 4 5 6 7 8 9
Biner : 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
Jadi bilangan 236 desimal akan dikodekan menjadi 0010 0011 0110 = BCD 236.Agar lebih mudah memahami, mari kita simak hasil simulasi pada program SYSWIN 3.4 dan PLC CPM2A berikut ini:
Pada baris pertama, instruksi MOV(21) mengisi memori DM0100 dengan angka 00EC hex atau 0236 desimal. Pada baris berikutnya, instruksi BCD mengkonversi bilangan 00EC hex menjadi 0236 bcd. Sekarang mari kita lihat tampilan data memorinya.
Tampilan di atas menunjukkan isi memori DM0100 dan DM0101 dalam bilangan hexa. Nilai dalam DM0100 adalah 0236 desimal yang ditampilkan sebagai 00EC hexa. Hasil konversi bilangan 0236 desimal menjadi BCD adalah 0236 bcd, yang tersimpan dalam bentuk hexa sebagai 0236 hexa.
Jika ditampilkan dalam bentuk bilangan desimal, maka DM0100 = 00236, dan hasil konversi BCD DM0101 = 00566.
Jadi dapat dikatakan bahwa 0236 hexa adalah versi BCD dari bilangan 0236 desimal. Pengertian ini untuk memudahkan kita dalam proses pembuatan program yang melibatkan bilangan BCD.
Selamat belajar!
Instruksi COMPARE – CMP(20)
Instruksi CMP(20) berfungsi membandingkan dua buah operand bertipe word. Ketika kondisi eksekusi instruksi ini terpenuhi, maka CMP(20) akan membandingkan nilai operand1 dengan nilai operand2. Hasil perbandingan tersebut disimpan dalam bit flag EQ (EQuals), LE (LEss-than), dan GR (GReater-than) yang menyatakan operand1 = operand2, operand1 < operand2, dan operand1 > operand2.
Perlu diperhatikan!
- Jika membandingkan nilai PV (Process Value) pada Timer atau Counter, maka perlu diingat bahwa nilai PV pada Timer dan Counter adalah bilangan BCD. Jadi nilai pembandingnya sebaiknya juga BCD agar tidak bingung.
- Sebaiknya langsung memproses hasil perbandingan instruksi CMP(20) sebelum instruksi lain dijalankan karena mungkin saja bit flag EQ, LE, dan GR mengalami perubahan nilai.
Rung 1. Ketika pertama kali dihidupkan, nilai DM0100 akan direset menjadi 0000 dengan menggunakan instruksi MOV(21) yang dieksekusi oleh bit flag First_Scan (SR253.15).
Rung 2. Jika Input 000.00 ON, maka instruksi @INC(38) akan menaikkan nilai DM0100 sebesar 1. Adanya tambahan karakter ‘@’ di depan menunjukkan bahwa instruksi ini didiferensiasi.
Rung 3. Secara kontinyu, program membandingkan nilai DM0100 dengan 5. Jika nilainya kurang dari 5, maka Output 010.01 akan ON. Jika nilainya samadengan 5, maka Output 010.00 akan ON. Dan jika nilainya lebih dari 5, maka Output 010.02 akan ON.
Selamat belajar!
One-Shot Timer
Ketika Tombol START (Input 000.00) ON, maka LAMPU (Output 1000) akan ON. LAMPU akan tetap ON meskipun START berubah menjadi OFF. Bersamaan dengan LAMPU, Timer TIM001 juga ikut ON, dan menghitung selama ±5 detik. Setelah 5 detik, Completion Flag TIM000 akan ON sehingga 5sec_ON akan terbuka dan mematikan LAMPU.
Rangkaian Timer di atas disebut juga One-Shot Timer. Fungsinya adalah mengaktifkan keluaran selama periode waktu tertentu sesaat setelah kondisi eksekusinya terpenuhi (ON). Misal: Keran air panas pada mesin pembuat kopi otomatis membuka selama 3 detik ketika operator menekan Tombol START. Selanjutnya, mesin akan memasukkan campuran gula+kopi dan mengaduknya. Lho? Apa gak kopi+gula dulu baru air panas? Ya, namanya juga misal, hahaha…
Selamat belajar!
Aplikasi PLC – Timer Berbasis Menit
Dengan memanfaatkan bit 1-Minute Clock Pulse yang berada di alamat SR254.00, dapat dibuat rangkaian Timer berbasis menit sebagai berikut.
Rung 1. Jika Tombol START ditekan, maka alamat IR200 akan diisi dengan nilai 45 hex. Kenapa hexa dan bukannya desimal akan terjawab di rung berikutnya. Selain mengisi alamat IR200 dengan 45 hex, bit TimeIsRunning pada alamat 201.00 akan diset dan bit TimeIsUp pada alamat 201.01 akan direset. Alamat IR200 digunakan untuk menyimpan sebagai SV (Setting Value).
Rung 2. Apabila TimeIsRunning ON, maka setiap 1 menit sekali, nilai pada IR200 akan dikurangi 1. Perhatikan bahwa di sini digunakan instruksi DEC(39) dengan tipe operand BCD. Inilah sebabnya pada Rung 1 di atas, SV pada alamat IR200 diisi menggunakan instruksi MOV(21) dengan nilai hexa sebagaimana diketahui bahwa nilai hexa merupakan representasi nilai desimal dalam format BCD. Jadi dalam contoh aplikasi ini timer akan menghitung selama 45 menit.
Setiap 1 menit juga, nilai SV pada alamat IR200 akan dibandingkan dengan nol. Jika sama atau lebih besar, maka bit TimeIsUp yang merupakan Completion-Flag dari timer berbasis menit ini akan diset dan bit TimeIsRunning akan direset untuk menghentikan timer ini.
Rung 3. Selama Completion-Flag (TimeIsUp) OFF, maka POMPA1 akan ON. Jika TimeIsUp, maka POMPA1 akan OFF dan POMPA2 akan ON.
Catatan
Dalam contoh ini SV disimpan dalam area memori IR (Internal Relay) yang tidak mempertahankan nilainya ketika PLC dimatikan. Jika diinginkan nilai SV yang bertahan nilainya ketika PLC dimatikan, maka dapat digunakan area lain seperti HR atau DM.
Demikian juga halnya dengan bit TimeIsRunning dan bit TimeIsUp, dapat digunakan area HR.
Selamat belajar!
Selamat belajar dan selamat berkarya! :D
BalasHapusmohon pencerahannya pak ! untuk program thermo control seperti apa ? 6terim kasih sebelumnya!!
BalasHapus