PEMBUATAN REMOTE I/O 16 KANAL DIGITAL OUTPUT MENGGUNAKAN PROTOKOL MODBUS RTU BERBASIS MIKROKONTROLER AT89S51 Moh. Imam Afandi Puslit KIM-LIPI, Kawasan Puspiptek Serpong, Tangerang 15314
INTISARI Telah dilakukan pembuatan remote I/O 16 kanal digital output menggunakan protokol modbus RTU berbasis mikrokontroler AT89S51. Remote I/O yang dibuat ini selanjutnya dapat digunakan sebagai ekspansi I/O digital output pada PLC (Programmable Logic Controller) dan/atau sistem OPC (Ole for Process Control) Server SCADA (Supervisory Control and Data Acquisition) yang mendukung protokol standard industri modbus RTU. Dari hasil pengujian komunikasi alat dengan OPC Server Modbus didapatkan bahwa komunikasi modbus RTU untuk membaca dan menulis bit secara satu-satu maupun bersamaan pada 16 kanal digital output telah berhasil dengan kualitas OPC good/baik tanpa ada sedikitpun kualitas bad/buruk pada setiap output yang diakses.
Kata kunci : Remote I/O, 16 kanal digital output, protokol modbus RTU, mikrokontroler AT89S51, ekspansi I/O digital output pada PLC dan/atau OPC Server SCADA.
ABSTRACT The remote I/O has been built with 16 channels of digital output using modbus RTU protocol based on AT89S51. The remote I/O can be used as I/O ekspansion of digital output for PLC (Programmable Logic Controller) and/or OPC (Ole for Process Control) SCADA (Supervisory Control and Data Acquisition) system that supported with industrial standard protocol modbus RTU. The testing result of the remote I/O has been succeed to communicate with Modbus OPC Server in order to read, single write and multiple write 16 channels of digital output with good quality OPC for each accessed of digital output.
Keywords : Remote I/O, 16 channels of digital output, modbus RTU protocol, AT89S51 microcontroller, expansion I/O of digital output for PLC and/or OPC Server SCADA.
PENDAHULUAN Dalam dunia proses industri dan/atau otomasi industri yang berkembang saat ini membutuhkan banyak sekali sinyal elektrik I/O yang harus diakses dan dikendalikan untuk menjaga sistem dapat berjalan dengan baik. PLC (Programmable Logic Controller) yang sering dipakai sebagai kontrol proses dan/atau otomasi industri seringkali kekurangan slot dalam rack untuk mencukupi I/O yang dibutuhkan. Sehingga salah satu solusinya adalah mengekspansi I/O tersebut dalam rack yang lain dengan 1
menggunakan penghubung komunikasi standard industri. I/O dalam rack lain tersebut dalam dunia industri seringkali dikenal dengan nama remote I/O. Remote I/O juga mempunyai fungsi juga sebagai I/O yang dapat diletakkan berjauhan dari sisi master. Remote I/O yang ada di pasaran ternyata juga masih tergolong mahal jika digunakan untuk industri menengah ke bawah sehingga dibutuhkan solusi murah dalam pengadaan remote I/O yang menunjang proses industri dan/atau otomasi industri. Sebagai salah satu solusi murah dari permasalahan di atas, telah dilakukan pembuatan remote I/O 16 kanal digital output menggunakan protokol modbus RTU berbasis mikrokontroler AT89S51. Dalam tulisan makalah ini akan dijelaskan mengenai pembuatan remote I/O 16 digital output menggunakan protokol modbus RTU berbasis mikrokontroler AT89S51. Penggunaan protokol modbus RTU disamping protokol tersebut merupakan protokol industri yang open document, protokol tersebut juga banyak didukung oleh banyak merk PLC. Jumlah digital output sebanyak 16 kanal juga didasarkan pada 1 word / 16 bit pengiriman data pada protokol modbus RTU.
DASAR TEORI PROTOKOL MODBUS RTU Modbus adalah suatu protokol komunikasi yang pertama kali dikembangkan oleh Modicon Systems pada tahun 1979 (yang sekarang Modicon berganti menjadi Schneider Telemecanique) [1]. Protokol modbus sendiri banyak variasinya, antara lain protokol modbus ASCII, modbus RTU, modbus plus dan modbus TCP. Pada kesempatan kali ini hanya dijelaskan dasar teori protokol modbus RTU. Protokol komunikasi modbus RTU menggunakan sistem polling yaitu sisi master memanggil (request) dan sisi slave menjawab (response). Dimana bentuk memanggil-menjawab pada protokol modbus RTU dapat digambarkan sebagai berikut [1,2] :
Query/Request from Master
Station Number
Station Number
Function Code
Function Code
Data Bytes (Flexible)
Data Bytes (Flexible)
Error Check
Error Check Response from Slave
Gambar 1. Skema Memanggil-Menjawab pada Protokol Modbus RTU
2
Pada gambar 1 dapat dijelaskan bahwa skema memanggil-menjawab pada protokol modbus RTU selalu berurutan dengan bingkai prosedur yang sama. Station Number memiliki range antara 1-255 yang merupakan alamat slave yang akan diambil datanya. Function Code merupakan kode fungsi data yang akan diambil dimana kode fungsi tersebut dipetakan dalam nilai desimal sebagai berikut [1,2] : •
1 : read DO (Digital Output)
•
2 : read DI (Digital Input)
•
3 : read AO (Analog Output)
•
4 : read AI (Analog Input)
•
5 : write single DO (Digital Output)
•
6 : write single AO (Analog Output)
•
15 : write multiple DO (Digital Output)
•
16 : write multiple AO (Analog Output)
Data bytes merupakan blok data informasi dan Error Check merupakan cek data dari kesalahan komunikasi. Selanjutnya khusus untuk protokol modbus RTU, bingkai prosedur data secara detail dapat digambarkan sebagai berikut [1,2] : Start
Station Number
Function Code
Data
Error Check
End
3.5 Chars
1 Char
1 Char
n Chars
2 Chars
3.5 Chars
CRC
Silence
Silence
Gambar 2. Bingkai Prosedur Data pada Protokol Modbus RTU
Pada gambar 2 dapat dijelaskan bahwa untuk memulai skema memanggilmenjawab pada protokol modbus RTU harus dimulai dan diakhiri dengan waktu tunda selama 3.5 karakter dalam baud rate komunikasi yang sudah ditentukan sebelumnya. Nilai dalam Station Number, Function Code, dan Data yang sudah dijelaskan sebelumnya harus dideklarasikan dalam nilai biner atau hexadesimal-nya. Untuk Error Check disini menggunakan algoritma Cyclic Redundancy Check (CRC) tipe 16 bit / 2 Char. Untuk penjelasan yang lebih detailnya, dapat diberikan contoh memanggilmenjawab untuk membaca digital output pada protokol modbus RTU sebagai berikut : -
Contoh fungsi membaca status digital output [3],
3
Misalkan suatu contoh protokol modbus RTU untuk mendapatkan status digital output coil dari alamat 20 sampai 56 dengan alamat slave 17. Memanggil (dari sisi master) 11 01 0013 0025 0E84 11: alamat slave (17 = 11 hex) 01: function code (kode sandi membaca status digital output) 0013: alamat digital output pertama yang dibaca (alamat 20 - 1 = 19 = 13 hex) 0025: jumlah alamat digital output yang dibaca (alamat 20 sampai 56 = 37 = 25 hex) 0E84: algoritma CRC-16 (cyclic redundancy check) untuk cek error data yang dikirim. Menjawab (dari sisi slave) 11 01 05 CD6BB20E1B 45E6 11: alamat slave (17 = 11 hex) 01: function code (kode sandi membaca status digital output) 05: jumlah byte data yang diberikan (37 DI / 8 bits per byte = 5 bytes) CD: DI 20 - 27 (1100 1101) 6B: DI 28 - 35 (0110 1011) B2: DI 36 - 43 (1011 0010) 0E: DI 44 - 51 (0000 1110) 1B: DI 52 - 56 (0001 1011) 45E6: algoritma CRC-16 (cyclic redundancy check) untuk cek error data yang dikirim. -
Contoh fungsi menulis nilai satu bit digital output [4], Misalkan suatu contoh protokol modbus RTU untuk menulis bit digital output coil pada alamat 173 menjadi ON dengan alamat slave 17.
Memanggil (dari sisi master) 11 05 00AC FF00 4E8B 11: alamat slave (17 = 11 hex) 4
05: function code (kode sandi menulis bit pada satu kanal digital output) 00AC: alamat digital output yang mau ditulis (alamat 173 - 1 = 19 = 172 hex) FF00: status bit yang mau ditulis (FF00 = ON, 0000 = OFF) 4E8B: algoritma CRC-16 (cyclic redundancy check) untuk cek error data yang dikirim.
Menjawab (dari sisi slave) (secara normal merupakan echo dari panggilan master 11 05 00AC FF00 4E8B 11: alamat slave (17 = 11 hex) 05: function code (kode sandi menulis bit pada satu digital output) 00AC: alamat digital output yang mau ditulis (alamat 173 - 1 = 19 = 172 hex) FF00: status bit yang mau ditulis (FF00 = ON, 0000 = OFF) 4E8B: algoritma CRC-16 (cyclic redundancy check) untuk cek error data yang dikirim. Untuk contoh fungsi menulis nilai beberapa bit digital output dapat dilihat pada referensi [5]. Data MSB (Most Significant Byte) dari suatu byte data menandakan alamat yang lebih tinggi dan data yang dikirim di luar jangkauan dianggap 0.
DESKRIPSI ALAT Pembuatan remote I/O ini menggunakan mikrokontroler AT89S51 [6] sebagai inti prosesor-nya karena disamping harganya murah juga kapasitas memori sebesar 4 kb dan jumlah I/O sebanyak 32 pin sudah mencukupi untuk realisasi 16 kanal digital output dengan komunikasi serial RS-485 menggunakan protokol modbus RTU. Untuk lebih detail mengenai skema alat yang dibuat dapat digambarkan dalam bentuk blok diagram sebagai berikut :
5
Port 1
Port 0
Digital Output Nomor 1 - 8
Dip Switch 4 kanal untuk pemilihan baud rate komunikasi serial Komunikasi Serial RS-485
Digital Output Nomor 9 - 16
Pin 3.4 – 3.7
AT89S51 Port 2
MAX 485
Enable (P3.2) Tx Rx
Dip Switch 8 kanal untuk alamat slave modbus RTU
Gambar 3. Skema Blok Diagram Alat Remote I/O 16 kanal DO Modbus RTU
Ddari skema blok diagram pada gambar 3, selanjutnya direalisasikan menjadi suatu rangkaian elektronik PCB seperti yang diberikan pada gambar sebagai berikut :
Gambar 4. Rangkaian Elektronik PCB Remote I/O 16 kanal DO Modbus RTU
Pada gambar 3 dan 4 dapat dijelaskan bahwa untuk port 1 dan port 0 yang masing-masing mempunyai 8 pin data digunakan sebagai digital output yang berjumlah 16 kanal pin dimana untuk setiap kanal pin dari digital output mempunyai rangkaian interface output tipe source sehingga dapat mengeluarkan nilai output tegangan maksimal sebesar 24 Vdc 1A. Tegangan power alat mempunyai range antara 9 – 24 Vdc untuk memenuhi standard industri. Port 2 digunakan sebagai pemilihan alamat
6
slave modbus RTU menggunakan komponen dip switch 8 kanal dan pada port 3 dari pin 3.4 sampai pin 3.7 dipakai sebagai pemilihan baud rate komunikasi serial menggunakan komponen dip switch 4 kanal, dimana logika pemilihan baud rate dapat dijelaskan sebagai berikut. Jika pin 3.4 bernilai 1 berarti menggunakan 9600 baud, jika pin 3.5 bernilai 1 berarti menggunakan 19200 baud, jika pin 3.6 bernilai 1 berarti menggunakan 57600 baud, dan jika pin 3.7 bernilai 1 berarti menggunakan 115200 baud. Setiap kanal digital output juga dapat menerima masukan tegangan hingga 24 Vdc. Dimensi dari rangkaian elektronik PCB ini berukuran 7 x 11 cm dimana nantinya akan dimasukkan dalam box aluminium din rail yang sudah ada di pasaran. Kemudian selanjutnya yang tak kalah penting dari alat ini adalah komunikasi serial menggunakan RS485 dimana dipakai IC MAX485 yang merupakan IC yang mendukung RS485 tipe Half Duplex. Sehingga spesifikasi alat remote I/O 16 kanal digital output ini dapat dijabarkan sebagai berikut : - Digital output
: 16 channels
- Output logic level 0
: 0 Vdc
- Output logic level 1
: 5 – 24 Vdc (source type)
- Led output indicator
: Yes (Yellow)
- Overvoltage protection
: 100 Vdc
- Connector type
: scew plug-in (ptr 500)
- Power consumption
: 1 W @ 9 – 24 Vdc
- Supported protocol
: Modbus RTU
- Led comm. status
: Yes
- Selectable baud rate
: 9600, 19200, 57600, 115200
- Modbus address
: up to 255 multi-drop address
Selanjutnya alat tersebut belum dapat digunakan sebagai remote I/O jika belum dimasukkan program ke dalam mikrokontroler tersebut. Untuk memrogram alat tersebut digunakan compiler SDCC [7] yang mendukung bahasa C dengan editor MIDE-51 [8]. Diagram alir dari program C yang dibuat tersebut dapat diberikan sebagai berikut :
7
Mulai Inisialisasi port
Baca alamat dip switch slave & dip switch baud rate
T
> 3.5 char waktu diam ? Y Deteksi alamat slave, FC, byte data 16 DO & CRC
T
Alamat slave, FC=1 or 5 or 15, byte data 16 DO & CRC benar ? Y FC = 1 ? Y Deteksi kondisi bit DO yang diminta Tunda sisa 3.5 char waktu diam Jawab char data alamat slave, FC=1, byte data DO yg dipanggil & CRC
T
FC = 5 ?
T
FC = 15 ? Y
Y Ubah nilai bit dari satu kanal DO yang diminta
Ubah nilai bit dari beberapa kanal DO yang diminta
Tunda sisa 3.5 char waktu diam
Tunda sisa 3.5 char waktu diam
Jawab echo panggilan dari master
Jawab char data alamat slave, FC=15, jumlah byte data DO yg ditulis & CRC
Looping terus ?
T
Y
T Selesai
Gambar 5. Diagram Alir Program Remote I/O 16 kanal DO Modbus RTU
HASIL DAN PEMBAHASAN Pengujian alat remote I/O dilakukan dengan menggunakan OPC Server Modbus dimana alat remote I/O diset pada alamat dip switch slave 2 dan baud rate 9600 melalui komunikasi serial RS-485. Untuk OPC Server Modbus dipilih setting modbus serial
8
dengan konfigurasi komunikasi COM1, 9600, 8, N, 1 seperti yang diberikan pada gambar sebagai berikut :
Gambar 6. Setting protokol dan konfigurasi serial pada OPC Server Modbus
Selanjutnya dideklarasikan nama tag digital output dari alamat 00001 sampai 00016 seperti yang diberikan pada gambar berikut :
Gambar 7. Deklarasi Nama Tag Digital Output pada OPC Server Modbus
Setelah semuanya sudah selesai dideklarasikan, maka dapat dilakukan pengujian komunikasi modbus RTU antara OPC Server Modbus dengan alat remote I/O yang sudah dibuat. Caranya dengan menjalankan perangkat lunak OPC Quick Client untuk
9
memonitor kualitas data OPC yang sudah dideklarasikan seperti yang diberikan pada gambar berikut ini.
Gambar 8. Hasil Pengujian Data Modbus RTU Menggunakan OPC Quick Client
Dari gambar 8 dapat dijelaskan bahwa komunikasi modbus RTU antara OPC Server Modbus dengan alat remote I/O 16 kanal digital output berbasis mikrokontroler AT89S51 telah berhasil dengan baik dimana ditampilkan dalam kolom quality untuk masing-masing Item ID digital output memberikan hasil good / baik. Sehingga setiap perubahan bit secara sinyal elektrik pada digital output maka secara otomatis akan mengubah nilai bit yang ada pada OPC Quick Client. Untuk melihat bingkai protokol komunikasi yang terjadi antara master dengan slave remote I/O dapat dilihat dengan menggunakan perangkat lunak Free Serial Port Monitor yang dapat diberikan pada gambar sebagai berikut :
10
Gambar 9. Bingkai Protokol Komunikasi Untuk Membaca 16 Kanal Digital Output
Kemudian pengujian untuk memberi nilai biner pada salah satu kanal digital output seperti yang diberikan pada gambar sebagai berikut :
Gambar 10. Pemberian Nilai Bit Pada Salah Satu Kanal Digital Output
11
Dari pemberian nilai bit pada gambar 10 menjadikan perubahan nilai bit pada tag OPC Quick Client seperti yang diberikan pada gambar sebagai berikut :
Gambar 11. Perubahan Nilai pada Tag
Bingkai protokol komunikasi yang terjadi antara master dengan slave remote I/O jika memberikan nilai pada salah satu bit dapat diberikan pada gambar sebagai berikut :
Gambar 12. Bingkai Protokol Komunikasi Untuk Memberi Nilai Satu Pada Digital Output
Selanjutnya dilakukan pengujian yang lain dengan memberikan variasi pengujian pada baud rate 19200, 57600 dan 115200. Kemudian variasi pengujian pada alamat slave yang lain dan dengan mengurangi nama tag digital output yang
12
dideklarasikan atau deklarasi nama tag hanya diisi sebagian kanal dari jumlah 16 digital output. Kemudian dilakukan juga variasi pengujian dengan memberikan nilai bit secara satu-satu dan secara bersamaan Hal ini diperlukan untuk meyakinkan apakah algoritma komunikasi modbus RTU sudah handal dalam memberikan respon dengan benar untuk semua kemungkinan pemanggilan yang dilakukan dari sisi master. Hasil dari variasi tersebut semuanya didapatkan juga kualitas good untuk setiap Item ID digital output yang dideklarasikan sehingga remote I/O ini sudah siap digunakan sebagai ekspansi I/O digital output pada PLC dan/atau OPC pada sistem SCADA yang mendukung protokol komunikasi modbus RTU.
KESIMPULAN Dari hasil pengujian komunikasi modbus RTU antara alat remote I/O 16 kanal digital output berbasis mikrokontroler AT89S51 dengan OPC Server Modbus didapatkan bahwa setiap data tag digital output komunikasi modbus mendapatkan kualitas good / baik untuk membaca, menulis bit secara satu-satu maupun bersamaan sehingga alat remote I/O 16 kanal digital output berbasis mikrokontroler AT89S51 sudah siap digunakan sebagai ekspansi I/O digital output pada PLC dan/atau OPC pada sistem SCADA yang mendukung protokol komunikasi modbus RTU. UCAPAN TERIMAKASIH Penulis mengucapkan terimakasih kepada saudara Agung Nugroho yang berprofesi sebagai system integrator PLC / SCADA dimana telah memberikan saran dan membagi pengalaman mengenai spesifikasi remote I/O yang dibutuhkan dan yang dapat diterima dalam dunia industri.
DAFTAR PUSTAKA [1] ..... , 1996. Modicon Modbus Protocol Reference Guide Rev. J, Modicon Inc. Industrial Automation Systems. [2] ..... , 2006. Modbus Over Serial Line : Specification and Implementation Guide V1.02, Modbus Organization.. [3] ..... , 2008. Read Coil Status (FC=01), Simply Modbus Inc. URL: http://www.simplymodbus.ca/FC01.htm [4] ..... , 2008. Force Single Coil (FC=05), Simply Modbus Inc. URL: http://www.simplymodbus.ca/FC05.htm
13
[5] ..... , 2008. Force Multiple Coils (FC=15), Simply Modbus Inc. URL: http://www.simplymodbus.ca/FC15.htm [6] ..... , 2001. ATMEL AT89S51 Datasheet, Atmel Corporation. [7] Sandeep Dutta, 2008. SDCC Compiler User Guide, General Public License. URL: http://sdcc.sourceforge.net/doc/sdccman.pdf [8] Worapoht Kornkaewwattanakul, 2009. M-IDE Studio for MCS 51, Standard Edition. URL: http://www.opcube.com/home.html
14