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.
Diagram laddernya adalah sebagai berikut.
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.
Contoh Program
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.
Program Ladder
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)
IL(02) dan ILC(03) tidak harus berpasangan satu-satu. IL(02) dapat
digunakan berkali-kali dengan satu ILC(03) penutup. Setiap IL(02)
membentuk bagian interlock-nya masing-masing hingga bertemu dengan
ILC(03). Akan tetapi tidak memungkinkan untuk membuat interlock
bersarang (
nested interlock).
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.
Instruksi apa saja yang dapat didiferensiasi dapat dilihat dalam
Quick Reference.
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.
Contoh Program
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 di
diferensiasi. 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 a
man 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.
Contoh Program
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!