6.1 Instruksi Program Control
Instruksi program control digunakan untuk mengaktifkan atau menonaktifkan sebuah blok program atau memindahkan eksekusi program dari satu tempat ke tempat lainnya. Biasanya, instruksi program control membentuk “pagar” (fence) dalam sebuah program. Pagar ini berisi kumpulan instrusi ladder yang digunakan untuk mengimplementasikan fungsi yang diinginkan. Gambar 6-1 mengilustrasikan sebuah pagar menggunakan instrusi program control.
Gambar 6-1 Sebuah pagar menggunakan instrusi program control
6.1.1 Master Control Reset
Pengkabelan master control relay digunakan dalam sirkuit relay kontrol untuk menyediakan daya ke seluruh sirkuit. Gambar 6-2 menunjukan sirkuit master control relay. Pada sirkuit ini, ketika coil master control relay tidak bekerja, maka tidak ada daya yang mengalir kesisi beban.
Gambar 6-2 Hardwired master control relay
Produsen PLC menawarkan instruksi master control reset (MCR). Fungsi instruksi ini mirip dengan cara kerja dari master control relay, ketika instruksi true, fungsi sirkuit bekerja secara normal dan ketika instruksi false, non-retentive output tidak aktif.
Instruksi MCR adalah sebuah instruksi output coil yang berfungsi seperti master control relay. Instruksi coil MCR digunakan berpasangan dan diprogram untuk mengontrol seluruh sirkuit atau hanya beberapa rung yang dipilih. Pada gambar 6-3, MCR diprogram untuk mengontrol seluruh sirkuit. Operasi program dapat disimpulkan sebagai berikut :
- Ketika instruksi MCR false, semua non-retentive output pada rung dibawah MCR akan dinonaktifkan walaupun jika logika untuk setiap rung true.
- Semua retentive output pada rung akan tetap pada konsisi sebelumnya.
- Instruksi MCR menetapkan zona dalam program dimana semua non-retentive output dapat dimatikan secara bersamaan.
- Instruksi retentive biasanya tidak ditempatkan dalam zona MCR karena zona MCR mempertahankan instruksi retentive dalam kondisi terakhirnya ketika instruksi menjadi false.
Gambar 6-3 Instruksi MCR
6.1.1.1 Instruksi MCR pada AB MicroLogix dan SLC-500
Instruksi MCR digunakan berpasangan untuk menonaktifkan atau mengaktifkan sebuah zona pada ladder diagram dan tidak mempunyai alamat. Gambar 6-4 menunjukan pemrograman zona berpagar MCR dengan status zona true. Operasi program dapat disimpulkan sebagai berikut :
- Zona MCR dipagari oleh start fence dan end fence.
- Jika input A true maka semua output bekerja sesuai dengan logika rung nya seolah-olah zona tidak ada.
Gambar 6-4 Zona dipagari MCR dengan status zona true
Pada gambar 6-5 menunjukan pemrograman zona berpagar MCR dengan status zona false. Operasi program dapat disimpulkan sebagai berikut :
- Ketika MCR false, semua rung dalam zona dianggap false. Input diabaikan dan semua non-retentive output dinonaktifkan.
- Semua output retentive, seperti latches, retentive timer dan counter tetap pada status terakhirnya.
- Jika input A false maka output A dan T4:1 akan false juga dan output B tetap pada status terakhir.
- kondisi input setiap rung akan tidak berpengaruh terhadap kondisi output.
Gambar 6-5 Zona dipagari MCR dengan status zona false
Jika ada instruksi timer atau counter dalam zona MCR, operasi instruksi tersebut akan terhenti ketika zona MCR tidak aktif. Timer TOF akan aktif ketika ditempatkan dalam zona MCR berstatus false.
Zona yang dikontrol oleh MCR harus memiliki 2 instruksi MCR, satu untuk menentukan awal dan satu lagi untuk menentukan akhir.
6.1.1.2 Instruksi MCR Pada Siemens S7
Instruksi MCR hanya terdapat pada processor S7-300/400. Untuk menggunakan property master control relay, tentukan area MCR menggunakan instruksi Activate MCR Area (MCRA) dan Deactive MCR Area (MCRD). Kemudian tentukan zona MCR menggunakan instruksi Open MCR Zone (MCR<) dan Close MCR Zone (MCR>). Jika instruksi Open MCR Zone diproses dengan RLO = 0, zona MCR tidak dieksekusi (dianalogikan mematikan master control relay). Jika instruksi Open MCR Zone diproses dengan RLO = 1, zona MCR dieksekusi dan operasi dalam zona MCR bekerja secara normal.
Gambar 6-6 Instruksi MCR
Sebaiknya tidak memasukan fungsi-fungsi dibawah ini ke zona MCR, karena akan menyebabkan CPU menjadi STOP atau respon runtime yang tidak dinginkan.
- Pemanggilan block dengan block parameter.
- Akses ke block parameter yang merupakan jenis parameter (seperti BLOCK_DB).
- Akses ke block parameter yang merupakan komponen jenis data komplek (STRUCT, ARRAY, STRING) atau jenis data PLC (UDT)
Pada instruksi dibawah ini, tag akan di set 0 jika zona MCR tidak dieksekusi.
Pada instruksi dibawah ini, tag tidak lagi dikendalikan (keadaan sinyal dibekukan) jika zona MCR tidak dieksekusi.
Pada instruksi dibawah ini, nilai 0 akan dipindahkan ke tag output jika zona MCR tidak dieksekusi.
Contoh program untuk MCR ditunjukan pada gambar 6-7. Operasi program dapat disimpulkan sebagai berikut :
- Area MCR diprogram pada Network
- Jika “TagIn_1” aktif, zona MCR dieksekusi, pada keadaan ini, status sinyal “TagIn_2” diteruskan ke “TagOut” (Network 3).
- Jika “TagIn_1” tidak aktif, zone MCR menjadi tidak dieksekusi dan “TagOut” direset ke 0.
- Akhir area MCR di program pada Network
Gambar 6-7 Contoh program MCR Simens
Pada Siemens S7, kita juga bisa membuat zona MCR berada didalam zona MCR lain yang disebut juga nesting. Kita bisa nesting instruksi MCR sampai dengan 8 tingkat. Zona MCR tingkat tertinggi mengendalikan semua tingkat dibawah nya. Gambar 6-8 menunjukan nested MCR.
Gambar 6-8 Nested MCR pada Siemens S7
6.1.1.3 Instruksi MCR pada CompactLogix dan ControlLogix
Instruksi MCR digunakan berpasangan. Instruksi MCR dapat menonaktifkan semua rung antara instruksi MCR.
Ketika zona MCR diaktifkan, rung dalam zona MCR discan secara normal. Ketika instruksi MCR dinonaktifkan, controller tetap men-scan rung dalam zona MCR. Waktu scan berkurang karena output non-retentive dalam zone MCR di matikan. Kondisi rung dalam keadaan false untuk semua instruksi dalam zona MCR.
Ketika anda memprogram zona MCR harap diperhatikan :
- Anda harus mengakhiri zona dengan instruksi MCR unconditional.
- Anda tidak dapat mengumpulkan satu zona MCR dalam zona MCR lainnya.
- Jangan menggunakan instruksi Jump dalam zona MCR.
- Jika zona MCR berlanjut sampai akhir routine, anda tidak perlu memprogram instruksi MCR pada akhir zona.
Program dari instruksi MCR ditunjukan pada gambar 6-9. Operasi program dapat disimpulkan sebagai berikut :
- Ketika instruksi MCR pertama aktif (Input_1, Input_2 dan Input_3 semuanya aktif), controller mengeksekusi rung dalam zona MCR (antara dua instruksi MCR) secara normal. Kondisi output tergantung pada kondisi input.
- Ketika instruksi MCR pertama tidak aktif, controller mengeksekusi zona MCR dan kondisi rung dalam keadaan false untuk semua rung dalam zona MCR.
Gambar 6-9 Program MCR pada ControlLogix
6.1.2 Jump
Dalam pemrograman PLC kadangkala menginginkan untuk melompati instruksi tertentu ketika ada suatu kondisi. Instruksi jump (JMP) adalah instruksi output yang digunakan untuk tujuan tersebut. Ketika instruksi JMP digunakan, PLC tidak akan mengeksekusi instruksi-instruksi yang dilompatinya.
Instruksi ini memaksa scanner untuk melompat ke area yang dipilih pada program ladder. Ketika instruksi menjadi true, output instruksi ini menyebabkan processor untuk menghentikan urutan scan normalnya dan menuju ke area yang ditentukan oleh pengguna.
6.1.2.1 Instruksi Jump pada SLC-500
Pada instruksi JMP, harus memasukan nilai antara 0 – 255 yang berkaitan dengan nilai yang dimasukan pada instruksi LBL pada lokasi dimana scan processor akan dilanjutkan.
Program pada gambar 6-10 mengilustrasikan penggunaan instruksi JMP. Alamat Q2:0 sampai Q2:255 adalah alamat yang digunakan untuk instruksi JMP pada SLC 500. Instruksi label (LBL) adalah target untuk instruksi JMP. Instruksi JMP dengan label yang berhubungan harus mempunyai alamat yang sama. Area yang akan dilompati ditentukan oleh lokasi JMP dan instruksi LBL. Jika coil JMP aktif, semua logika antara JMP dan LBL dilewati dan processor melanjutkan scan setelah instruksi LBL. Operasi program dapat disimpulkan sebagai berikut :
- Ketika saklar terbuka, instruksi JMP tidak aktif.
- Dengan saklar tetap terbuka, jika tombol tertutup akan menyalakan semua lampu.
- Ketika saklar tertutup instruksi JMP akan aktif
- Dengan saklar tetap tertutup, jika tombol ditekan akan menyalakan lampu PL1 dan PL3 saja.
- Rung 3 dilewati sehingga PL2 tidak menyala.
Gambar 6-10 Operasi JMP
Pada gambar 6-11 mengilustrasikan pengaruh terhadap instruksi input dan output yang dilompati. Instruksi LBL digunakan untuk mengindentifikasi rung yang menjadi target tujuan tapi tidak berkontribusi terhadap logic continuity. Operasi program dapat disimpulkan sebagai berikut :
- Ketika rung 4 mempunyai logic continuity, processor diinstruksikan untuk melompat ke rung 8 dan melanjutkan eksekusinya dari rung
- Rung 5, 6 dan 7 dilompati dan tidak di scan oleh processor.
- Kondisi input pada rung yang dilompati tidak diperiksa dan output pada rung tersebut tetap pada kondisi terakhirnya.
Gambar 6-11 Pengaruh terhadap instruksi input dan output pada rung yang dilompati
Anda dapat lompat ke label yang sama dari beberapa lokasi JMP, seperti yang diilustrasikan pada gambar 6-8. Dalam contoh ini, ada dua instruksi JMP yang mempunyai alamat Q2:20. Ada juga satu instruksi LBL yang mempunyai alamat Q2:20. Scan dapat lompat dari instruksi JMP manapun ke label Q2:20, tergantung dari input A atau input D yang bersatatus true.
Gambar 6-12 Lompat ke label dari dua lokasi
Memungkinkan juga untuk lompat mundur dalam program, tapi sebaiknya tidak boleh dilakukan terlalu banyak. Processor mempunyai watchdog timer yang menetapkan waktu maksimum yang diizinkan untuk keseluruhan program scan. Jika waktu nya melebihi, processor akan mengindikasikan fault dan akan stop.
Lompat kedepan sama dengan instruksi MCR karena keduanya memungkinkan kondisi logika input untuk melompati blok pada ladder diagram. Perbedaan utama antara keduanya adalah bagaimana output ditangani ketika instruksi dieksekusi. Pada instruksi MCR semua non-retentive output menjadi false dan tetap mempertahankan retentive output ke kondisi terakhirnya. Pada instruksi JMP membiarkan semua output ke status terakhirnya. Jangan pernah melompat ke zona MCR, karena instruksi yang diprogram di zona MCR mulai dari instruksi LBL dan berakhir pada instruksi MCR akan selalu dievaluasi seolah-olah zona MCR true, tanpa mempertimbangkan kondisi awal instruksi MCR.
6.1.2.2 Instruksi Jump pada Siemens S7
Pada Siemens S7 ada beberapa jenis instruksi jump tergantung pada processornya seperti yang ditunjukan dibawah ini :
Kita dapat menggunakan instruksi jump untuk mengiterupsi eksekusi linier dan melanjutkannya pada network lain. Network tujuan harus ditentukan oleh jump label (LABEL). Nama dari LABEL ini ditentukan dalam placeholder diatas instruksi.
LABEL harus dalam block yang sama dengan instruksi jump yang di eksekusi. Nama LABEL yang telah ditentukan hanya boleh ada satu dalam block. Hanya diperbolehkan satu coil jump dalam network.
Jika result of logic operation (RLO) pada input instruksi JMP bernilai “1” atau true, akan melompat ke network yang ditentukan oleh LABEL. Arah lompatan dapat maju atau mundur. Jika kondisi pada input instruksi JMP tidak terpenuhi (RLO = 0 atau false), eksekusi program berlanjut pada network selanjutnya.
Contoh program JMP ditunjukan pada gambar 6-13. Operasi program dapat disimpulkan sebagai berikut :
- Jika TagIn_1 mempunyai status 1 atau true, JMP di eksekusi. Eksekusi linier program di interupsi dan melanjutkan ke Network 3, yang telah ditentukan oleh jump label CAS1.
- Jika TagIn_3 mempunyai status “1” atau true, TagOut_3 akan aktif.
Gambar 6-13 Contoh program JMP pada Siemens S7
JMPN bekerja berlawanan dengan JMP. Jika RLO = 0 atau false pada input instruksi JMPN, maka akan melompat ke network yang ditentukan oleh LABEL. Gambar 6-14 menunjukan contoh program JMPN. Operasi program dapat disimpulkan sebagai berikut :
- Jika TagIn_1 mempunyai status 0 atau false, JMPN di eksekusi. Eksekusi linier program di interupsi dan melanjutkan ke Network 3, yang telah ditentukan oleh jump label CAS1.
- Jika TagIn_3 mempunyai status “1” atau true, TagOut_3 di reset.
Gambar 6-14 Contoh program JMPN pada Siemens S7
JMP_LST hanya terdapat pada processor S7-1200/1500. Kita dapat menggunakan JMP_LIST untuk menentukan beberapa kondisi lompatan dan melanjutkan eksekusi program pada network yang telah ditentukan tergantung pada nilai parameter K.
Kita dapat menentukan lompatan dengan LABEL yang telah ditentukan pada output instruksi. Jumlah output dapat di perluas dalam box instruksi. Kita dapat mendeklarasikan sampai dengan 32 output ketika menggunakan processor S7-1200 dan maksimum 256 output ketika menggunakan processor S7-1500.
Penomoran output dimulai dari “0” dan terus berurut setiap output baru. Hanya LABEL yang dapat dimasukan pada output instruksi. Nilai parameter K menentukan nomor output dan akan melompat ke LABEL dimana program akan melanjutkan eksekusinya. Jika nilai K lebih besar dari nomor output yang tersedia, program melanjutkan eksekusi pada network selanjutnya. Instruksi JMP_LIST hanya dieksekusi jika input EN aktif.
Gambar 6-15 menunjukan contoh program JMP_LIST. Operasi program dapat disimpulkan sebagai berikut :
- Jika Tag_Input mempunyai status “1” atau true, instruksi JMP_LIST dieksekusi.
- Eksekusi program dilanjutkan tergantung pada nilai “Tag_Value”.
- Jika nilai Tag_Value = 1 akan melompat ke LABEL1.
Gambar 6-15 Contoh program JMP_LIST pada Siemens S7-1200/1500
SWITCH hanya terdapat pada processor S7-1200/1500. Kita dapat menggunakan instruksi SWICTH untuk menentukan beberapa lompatan tergantung pada hasil satu instruksi perbandingan atau lebih. Kita dapat menentukan nilai yang dibandingkan dalam parameter K. nilai ini dibandingkan dengan nilai yang disediakan oleh berbagai input. Kita dapat memilih metode perbandingan untuk setiap input. Ketersediaan instruksi perbandingan tergantung dari jenis data pada instruksi. Tabel berikut ini menunjukan instruksi perbandingan yang tersedia tergantung jenis data yang dipilih :
Kita dapat memilih jenis data instruksi dari drop-down list pada box instruksi. Jika kita telah memilih instruksi perbandingan dan jenis data instruksi belum ditentukan, maka drop down list hanya akan menampilkan jenis data yang dizinkan untuk instruksi perbandingan yang telah dipilih.
Eksekusi instruksi dimulai dengan perbandingan pertama dan bekerja sampai perbandingan terpenuhi. Jika perbandingan terpenuhi, perbandingan selanjutnya tidak dipertimabangkan. Jika tidak ada perbandingan terpenuhi, lompatan dieksekusi pada output ELSE. Jika tidak ada program lompatan pada output ELSE, eksekusi program dilanjutkan pada network selanjutnya.
Jumlah output dapat ditambah. Penomoran output dimulai dengan nilai “0” dan berlanjut secara berurutan pada output baru. Input secara otomatis dimasukan terhadap penambahan output. Tabel dibawah ini menunjukan parameter instruksi SWITCH.
Contoh program untuk SWITCH ditunjukan pada gambar 6-16. Operasi program dapat dsimpulkan sebagai berikut :
- Jika “Tag_Input mempunyai sinyal “1” atau true, instruksi SWITCH dieksekusi.
- Jika nilai “Tag_Value” = 23, “Tag_Value1” = 20, “Tag_Value2” = 21 dan “Tag_Value3” = 19, maka eksekusi program akan dilajutkan ke network yang telah ditentukan oleh LABEL1.
Gambar 6-16 Contoh program SWITCH pada Siemens S7-1200/1500
6.1.2.3 Instruksi Jump pada CompactLogix dan ControlLogix
Instruksi JMP digunakan untuk melompati rung. Instruksi JMP digunakan berpasangan dengan instruksi LBL dengan menentukan nama yang sama untuk setiap instruksi. instruksi JMP diletakan disebelah kanan rung. Ketika rung mempunyai status true, instruksi JMP melompati rung antara instruksi JMP dan instruksi LBL. Eksekusi dilanjutkan ke rung yang mempunyai instruksi JMP.
Instruksi JMP dapat melompat kedepan atau kebelakang. Melompat kedepan kesebuah LBL menghemat waktu scan dengan menghilangkan segmen logika sampai diperlukan. Melompat mundur memungkinkan controller mengulangi pengulangan logika. Berhati-hati untuk tidak melompat kebelakang terlalu banyak. Timer watchdog dapat habis waktunya karena controller tidak pernah mencapai akhir program, yang akan menyebabkan kesalahan controller. Logika yang dilompati tidak discan, letakan logika kritikal diluar zona JMP.
Nama label harus unik dalam sebuah routine. Penamaan LBL sampai dengan 40 karakter, yang dapat memuat huruf, angka dan garis bawah.
Program pada gambar 6-17 adalah contoh penggunaan instruksi JMP dan LBL. Operasi program dapat disimpulkan sebagai berikut :
- Jika “Input_1” mempunyai status true, maka instruksi JMP dieksekusi.
- Karena JMP dieksekusi, maka rung 2 tidak di scan atau dilompati.
- Eksekusi berlanjut ke rung 2 dimana terdapat nama LBL yang sama dengan instruksi JMP.
Gambar 6-17 Contoh program JMP dan LBL pada Studio5000
6.1.2.4 Instruksi Jump pada Modicon
Instruksi Jump dan Label merupakan bagian dari control element pada Unity Pro. Instruksi Jump dan Label ditunjukan pada gambar 6-18. Ketika status pada instruksi Jump menjadi true, lompatan dibuat ke Label (dalam section yang sama). Untuk menghasilkan unconditional jump, instruksi Jump harus diletakan secara langsung pada power rail. Untuk menghasilkan conditional jump, instruksi jump diletakan diujung setelah kontak.
Label (target lompatan) diindikasikan sebagai teks dengan tanda titik dua pada ujungnya. Teks ini dibatasi sampai 32 karakter dan harus unik dalam keseluruhan section. Teks dapat memuat huruf, angka dan garis bawah, yang dimulai dengan huruf atau garis bawah. Label hanya dapat diletakan dalam cell pertama langsung terhadap power rail.
Gambar 6-18 Instruksi jump dan label pada Unity Pro
Aplikasi instruksi jump dan label ditunjukan pada gambar 6-19. Operasi program dapat disimpulkan sebagai berikut :
- Ketika “Input_1” mempunyai status 1 atau true, instruksi jump dieksekusi dan melakukan lompatan ke Network 36.
- Netwok 35 akan dilompat (tidak dieksekusi) ketika instruksi jump dieksekusi.
- Scan program berlanjut dari Network 36 sampai akhir section.
Gambar 6-19 Contoh program Jump dan label pada Unity Pro
6.1.3 Subroutine
Program PLC juga dapat berisi program tambahan yang dikenal sebagai subroutines. Subroutine adalah program pendek untuk melakukan fungsi spesifik. program yang besar terkadang dipecah kedalam subroutine yang dipanggil dan dieksekusi dari program utama.
Saat ini lebih baik untuk membuat program yang berisi beberapa subroutine dari pada satu program yang panjang. Ketika program ditulis dengan subroutine, setiap subroutine dapat di tes secara individual. Subroutine tersebut dapat dipanggil dari program utama seperti yang diilustrasikan pada gambar 6-20.
Ketika subroutine dipanggil dari program utama, program subroutine akan melakukan fungsi tertentu dan kemudian kembali lagi ke program utama. Dalam situasi dimana mesin memeiliki bagian dari siklusnya yang harus diulang beberapa kali selama satu siklus, subroutine dapat menghemat banyak dari duplikasi pemrograman.
Konsep subroutine sama untuk semua PLC, tapi metode untuk memanggil dan kembali dari subroutine menggunakan perintah yang berbeda, tergantung produsen PLC.
Gambar 6-20 Program utama yang memanggil subroutine
6.1.3.1 Instruksi Subroutine pada SLC-500
Instruksi yang berhubungan dengan subroutine pada PLC AB SLC-500 ditunjukan pada gambar 6-21 adalah instruksi jump to subroutine (JSR), instruksi subroutine (SBR) dan instruksi return (RET).
Instruksi subroutine dapat disimpulkan sebagai berikut :
Jump to Subroutine (JSR). instruksi JSR adalah instruksi output yang menyebabkan scan untuk melompati ke program file yang ditunjuk dalam instruksi. Ketika kondisi rung true untuk instruksi output ini, menyebabkan processor untuk melompat ke subroutine tujuan. Setiap subroutine mempunyai nomor file yang berbeda-beda.
Subroutine (SBR). Instruksi SBR adalah instruksi input pertama pada rung pertama dalam subroutine. Instruksi ini berfungsi sebagai pengidentifikasi bahwa file program adalah subroutine. Nomor file ini digunakan dalam instruksi JSR untuk mengidentifikasi target yang harus dilompati oleh program. Instruksi ini selalu true, dan meskipun penggunaannya opsional, tetapi tetap disarankan.
Return (RET). Instruksi RET adalah instruksi output yang menandakan akhir dari subroutine. Instruksi ini menyebabkan scan kembali ke program utama pada instruksi dibawah instruksi JSR dimana dia keluar dari program utama. Scan kembali dari akhir file subroutine jika tidak ada instruksi RET. Rung yang berisi instruksi RET bisa kondisional jika rung ini mendahului akhir dari subroutine.
Gambar 6-21 Instruksi subroutine pada SLC-500
Pada gambar 6-22 menunjukan sistem conveyor material dengan lampu flashing sebagai subroutine. Operasi program dapat disimpulkan sebagai berikut :
- Jika berat pada conveyor melebihi nilai preset, solenoid akan mati dan lampu PL1 akan flashing.
- Ketika sensor berat tertutup, JSR aktif dan processor scan akan lompat ke subroutine U:3.
- Program subroutine discan dan lampu PL1 flashing.
- Ketika sensor berat terbuka, processor tidak akan scan subroutine dan lampu PL1 akan kembali ke kondisi normal.
Gambar 6-22 Subroutine lampu flashing
PLC AB SLC 500 menggunakan program file 2 untuk program utama dan untuk subroutine menggunakan program file 3 sampai 255. Gambar 6-23 mengilustrasikan prosedur untuk setting subroutine dan dapat disimpulkan sebagai berikut :
- Subroutine harus dipanggil dalam ladder diagram.
- Buat subroutine untuk setiap lokasi. Setiap subroutine sebaiknya dimulai dengan instruksi SBR.
- Pada lokasi ladder dimana subroutine dipanggil, buat instruksi JSR yang spesifik terhadap nomor file subroutine.
- Instruksi RET opsional.
- Pada akhir subroutine akan menyebabkan kembali ke program utama.
- Jika ingin mengakhiri subroutine sebelum dieksekusi sampai selesai, instruksi RET besifat kondisional bisa digunakan sebelum akhir program.
Gambar 6-23 Setting subroutine
Instruksi SBR pada awal subroutine dapat menyimpan parameter yang datang. Fitur ini memungkinkan untuk memberikan nilai ke subroutine sebelum dieksekusi sehingga subroutine dapat melakukan operasi matematika atau logika berdasarkan data yang diterima dan mengembalikan hasilnya ke program utama. Sebagai contoh, program pada gambar 6-24 akan menyebabkan scan lompat dari program utama ke program file 4 ketika input A true. Ketika scan lompat ke program file 4, data juga diberikan dari N7:30 sampai N7:40. Ketika scan kembali ke program utama dari program file 4, data akan diberikan dari N7:50 sampai N7:60.
Gambar 6-24 memberikan parameter ke subroutine
Nesting subroutine memungkinkan anda untuk mengarahkan aliran program dari program utama ke subroutine dan kemudian ke subroutine lain, seperti yang diilustrasikan pada gambar 6-25. Memprogram nested subroutine dapat membuat masalah pada scan time karena ketika subroutine sedang di scan, program utama tidak di scan. Penundaan yang berlebihan dalam scan program utama dapat menyebabkan output bekerja lebih lambat dari yang dibutuhkan. Situasi ini bisa dihindarkan dengan memperbaharui I/O yang kritikal menggunakan instruksi immediate input dan/atau immediate output.
Gambar 6-25 Nested subroutine
6.1.3.2 Instruksi Subroutine pada Siemens S7
Pada Siemens, istilah subroutine dikenal juga sebagai Function (FC) atau Function Block (FB). FC digunakan untuk memprogram fungsi otomatisasi yang sering berulang. Panggilan dapat di parameterisasi. FC tidak menyimpan informasi dan tidak mempunyai data block yang ditetapkan padanya, oleh karena itu data dalam FC hilang ketika FC tidak dieksekusi.
FB adalah bagian dari program yang pemanggilannya dapat di program menggunakan blok parameter. FB memiliki memori tag yang terletak di data block (instance data block). Parameter yang ditransfer ke FB dan variabel statis disimpan dalam instance DB. Variabel sementara disimpan dalam local data stack. Data yang disimpan dalam instance DB tidak hilang ketika FB selesai dieksekusi. Data yang disimpan dalam local data stack hilang ketika FB selesai dieksekusi.
Agar FC atau FB dapat dieksekusi dalam program, FB atau FC harus dipanggil dari blok lain. Ketika sebuah blok memanggil blok lain, instruksi pamanggilan blok dieksekusi. Gambar 6-26 menunjukan urutan pemangilan blok dalam program.
Gambar 6-26 Pemanggilan blok dalam program
Anda dapat memenggil FC atau FB menggunakan operasi drag-and-drop dari project tree. Jika anda memanggil FB dari FB lain, anda dapat memanggil FB tersebut sebagai single instance, multi-instance atau parameter instance. Single instace artinya FB yang dipanggil menyimpan datanya dalam instance DB miliknya. Multi-instance artinya FB yang dipanggil tidak menyimpan data dalam instance DB miliknya, tetapi dalam instance DB yang memanggil FB tersebut. Parameter instance artinya kita mentransfer instance blok yang dipanggil sebagai parameter in/out ke block yang dipanggil. Gambar 6-27 menunjukan perbedaan single instance, multi-instance dan parameter instance.
(a)
(b)
(c)
Gambar 6-27 Jenis pemanggilan blok (a) single instance (b) multi-instance (c) parameter instance
Anda dapat menggunakan instruksi return (RET) untuk mengakhiri eksekusi blok program. Jika hasil RLO pada input instruksi RET mempunyai status “1” atau true, ekesekusi program diakhiri pada blok program tersebut dan dilanjutkan setelah pemanggilan blok pada blok progam yang memanggil. Jika hasil RLO pada input instruksi RET mempunyai status “0” atau false, maka instruksi tidak dieksekusi. Eksekusi program dilanjutkan pada network selanjutnya pada blok yang dipanggil.
Status sinyal pada nilai RET di petakan dalam ENO pada blok yang dipanggil. Untuk mengatur nilai RET pada instruksi, klik segitiga kuning kecil pada instruksi dan pilih nilai yang diinginkan pada drop down list. Tabel dibawah ini menunjukan status pada blok program yang dipanggil ketika instruksi digunakan dalam network pada blok program yang dipanggil.
Gambar 6-28 adalah contoh penggunaan instruksi RET. Operasi program dapat disimpulkan sebagai berikut :
- Jika “TagIn” mempunyai status “1” atau true, instruksi RET dieksekusi.
- Eksekusi program diakhiri pada program block yang dipanggil.
- Eksekusi program dilanjutkan pada blok yang memanggil.
Gambar 6-28 Contoh penggunaan instruksi RET
Urutan dan nesting pemanggilan blok disebut sebagai hirarki panggilan. Gambar 6-29 dibawah ini menunjukan contoh urutan dan nesting pemanggilan blok.
Gambar 6-29 urutan dan nesting pemanggilan blok pada Siemens S7
Kedalaman nesting untuk blok tergantung pada processor yang digunakan. Tabel dibawah ini menunjukan maksimum kedalaman nesting.
6.1.3.3 Instruksi Subroutine pada AB CompactLogix dan ControlLogix
Subroutine adalah routine yang dipanggil oleh routine lain. Subroutine digunakan untuk tugas programming yang besar atau tugas yang membutuhkan lebih dari satu bahasa pemrograman. Instruksi subroutine pada AB compactLogix dan ControlLogix mirip dengan instruksi subroutine AB SLC-500 yaitu JSR, SBR dan RET. Penggunaan SBR dan RET adalah opsional.
JSR – Instruksi JSR eksekusi dilompat ke routine yang berbeda. Instruksi JSR memulai eksekusi pada routine yang telah ditentukan, yang disebut juga subroutine. Subroutine dieksekusi satu kali. Setelah subroutine dieksekusi, eksekusi logika kembali ke routine yang memuat instruksi JSR.
SBR – Instruksi SBR memberikan data ke routine dan mengeksekusinya. Parameter pada instruksi SBR menggunakan jenis data yang sama pada parameter dalam instruksi JSR. Menggunakan jenis data yang berbeda dapat menghasilkan hasil yang berbeda. Instruksi SBR harus diletakan pada instruksi pertama dalam routine.
RET – instruksi RET mengembalikan hasilnya. Jika instruksi JSR mempunyai parameter return, masukan instruksi RET. Letakan instruksi RET pada akhir instruksi, masukan parameter return yang akan dikirim ke instruksi JSR. Dalam routine menggunakan ladder, masukan instruksi RET tambahan untuk keluar dari subroutine berdasarkan kondisi input yang berbeda, jika dibutuhkan.
Instruksi subroutine dan ilustrasi bagaimana instruksi bekerja ditunjukan pada gambar 6-30.
Gambar 6-30 instruksi soubroutine pada Studio5000
Contoh program untuk instruksi JSR, SBR dan RET diilustrasikan pada gambar 6-31. Operasi program dapat disimpulkan sebagai berikut :
- Main routine memanggil subroutine Calc menggunakan instruksi JSR dan mengirimkan parameter input dan return ke subroutine Calc.
- Subroutine Calc dieksekusi untuk melakukan perhitungan, parameter yang diberikan oleh instruksi JSR di terima oleh instruksi SBR.
- Hasil perhitungan pada subroutine Calc dikembalikan ke parameter returns instruksi JSR menggunakan instruksi RET dan mengakhir eksekusi subroutine untuk kembali ke main routine.
Gambar 6-31 contoh program instruksi JSR, SBR dan RET
6.1.3.4 Instruksi Subroutine pada Modicon
Pada Unity Pro, istilah subroutine dikenal juga sebagai SR Section. Subroutine diprogram sebagai entity yang terpisah, dapat di program menggunakan LD, FBD, IL dan ST. Pemanggilan Subroutine dilakukan dalam section atau subroutine lainnya. Subroutine berbeda dengan DFB, DFB adalah user function block yang telah disesuaikan untuk memenuhi kebutuhan khusus pada aplikasi anda. DFB dapat disimpan dalam user-defined library. DFB mirip dengan Siemens FB, mempunyai instance data tersendiri dan parameter. Dibandingkan dengan subroutine, menggunakan DFB memungkinkan untuk :
- Mengatur parameter proses lebih mudah
- Menggunakan variabel internal yang khusus pada DFB dan juga bersifat independent dari aplikasi.
- Pengujian operasinya bersifat independent dari aplikasi.
Jika menggunakan bahasa pemrograman LL984, pemanggilan subroutine dikelola oleh 3 instruksi yaitu L9_JSR, L9_LAB dan L9_RET. Disini kita hanya mendiskusikan instruksi pemanggilan subroutine dengan memakai bahasa pemrograman LD, instruksi untuk memanggil subroutine pada bahasa LD menggunakan call coil. Gambar dibawah ini menunjukan instruksi call coil.
Gambar 6-32 Instruksi call coil pada Unity Pro yang memanggil subroutine Calculation
Instruksi call coil mirip dengan instruksi output coil, perbedaannya terdapat huruf “C” didalam bracket coil dan nama subroutine yang dipanggil diatas instruksi call coil. Jika call coil mempunyai status “1” atau true, maka subroutine dengan nama yang terdapat diatas instruksi call coil akan dieksekusi. Subroutine yang dipanggil harus berlokasi di task yang sama dengan section pemanggil.
Controh program pemanggilan subroutine ditunjukan pada gambar 6-33. Operasi program dapat disimpulkan sebagai berikut :
- Ketika instruksi call coil mempunyai status “1” atau true, subroutine dengan nama “calculation” dieksekusi.
- Setelah eksekusi subroutine selesai, program scan akan kembali ke section untuk melanjutkan scan setelah instruksi call coil.
Gambar 6-33 Contoh program call coil pada Unity Pro (a) Pemanggilan subroutine Calculation pada Section (b) Program subroutine calculation pada SR Section
Untuk memanggil DFB, menggunakan metode drag-and-drop. Sebelum memanggil DFB, pastikan DFB yang kita kehendaki sudah dibuat serta instance data-nya.
Referensi :
- Programmable Logic Controller – Fifth Edition, Frank D Petruzella
- Programmable Logic Controllers : An Emphasis on Design and Application – Third Edition, Kevin T Erickson
- SLC Instruction Set Reference Manual – Rockwell Automation
- Logix 5000 Controllers General Instruction Reference manual – Rockwell Automation
- Unity Pro Program Language and Structure Reference Manual – Schneider Electric
- Unity Pro Standard Block Library – Schneider Electric
- Ladder Logic (LAD) for S7-300 and S7-400 Programming reference Manual – Siemens
- System Software for S7-300/400 System and Standard Function Vol 1 – Siemens
- Step 7 Proffesional V15: Reference Manual – Siemens AG
Leave a Comment