Pengertian Modbus Data Frame
Modbus data frame adalah struktur data yang digunakan dalam komunikasi protokol Modbus untuk mengirimkan perintah dan data antara perangkat yang berkomunikasi.
Modbus banyak digunakan pada sistem otomasi industri untuk menghubungkan berbagai perangkat seperti PLC, HMI, SCADA, VFD, sensor, flow meter, energy meter, remote I/O, dan perangkat instrumentasi lainnya.
Meskipun Modbus RTU dan Modbus TCP menggunakan konsep Function Code dan Data yang sama, keduanya memiliki struktur frame yang berbeda.
Modbus RTU menggunakan komunikasi serial seperti RS-485, sedangkan Modbus TCP menggunakan jaringan Ethernet dan TCP/IP.
Memahami struktur data frame sangat penting ketika melakukan troubleshooting komunikasi Modbus, karena kita dapat melihat secara langsung bagaimana sebuah perintah dikirim dan bagaimana perangkat memberikan respons.
Modbus RTU dan Modbus TCP
Secara umum, komunikasi Modbus dapat dibedakan menjadi beberapa implementasi. Dua jenis yang paling banyak ditemukan di industri adalah:
- Modbus RTU
- Modbus TCP
Modbus RTU biasanya digunakan pada jaringan komunikasi serial, sedangkan Modbus TCP digunakan pada jaringan Ethernet.
Perbedaan media komunikasi tersebut menyebabkan struktur frame yang digunakan juga berbeda.
Modbus RTU
Modbus RTU menggunakan komunikasi serial dan umumnya menggunakan RS-485.
Konsep komunikasinya:
Master → RS-485 → Slave
Dalam implementasi modern, istilah Client dan Server juga dapat digunakan, tetapi istilah Master dan Slave masih sangat umum ditemukan pada dokumentasi Modbus RTU.
Modbus TCP
Modbus TCP menggunakan Ethernet dengan protokol TCP/IP.
Konsep komunikasinya:
Client → Ethernet → Server
Modbus TCP menggunakan TCP port 502 sebagai port standar komunikasi Modbus TCP.
Struktur Data Frame Modbus RTU
Struktur dasar Modbus RTU dapat digambarkan sebagai berikut:
┌─────────────┬──────────────┬──────────────┬───────────┐
│ Slave │ Function │ Data │ CRC │
│ Address │ Code │ │ │
│ 1 Byte │ 1 Byte │ N Bytes │ 2 Bytes │
└─────────────┴──────────────┴──────────────┴───────────┘
Secara sederhana:
Modbus RTU = Slave Address + Function Code + Data + CRC
Setiap bagian memiliki fungsi yang berbeda.
1. Slave Address
Slave Address adalah alamat perangkat yang menjadi tujuan komunikasi.
Ukuran field ini adalah:
1 byte
Contoh:
01
Angka tersebut menunjukkan perangkat dengan alamat atau Slave ID tertentu.
Misalnya terdapat beberapa perangkat pada jaringan RS-485:
PLC Master
│
├── Slave ID 1
├── Slave ID 2
├── Slave ID 3
└── Slave ID 4
Master dapat menentukan perangkat mana yang ingin dikomunikasikan berdasarkan Slave Address.
2. Function Code
Function Code digunakan untuk menentukan jenis operasi yang ingin dilakukan.
Beberapa Function Code yang umum digunakan adalah:
| Function Code | Fungsi |
|---|---|
| 01 | Read Coils |
| 02 | Read Discrete Inputs |
| 03 | Read Holding Registers |
| 04 | Read Input Registers |
| 05 | Write Single Coil |
| 06 | Write Single Register |
| 15 atau 0F | Write Multiple Coils |
| 16 atau 10 | Write Multiple Registers |
Contohnya:
03
berarti perangkat meminta operasi Read Holding Registers.
3. Data
Field Data berisi parameter yang berkaitan dengan Function Code.
Sebagai contoh, ketika menggunakan Function Code 03 untuk membaca Holding Register, data dapat berisi:
- Starting Address
- Quantity of Registers
Contoh:
00 00 00 0A
Dapat diinterpretasikan sebagai:
00 00 → Starting Address
00 0A → Quantity = 10 register
Artinya master meminta data sebanyak 10 Holding Register mulai dari alamat tertentu.
4. CRC
CRC (Cyclic Redundancy Check) digunakan untuk mendeteksi kesalahan data selama proses transmisi.
Pada Modbus RTU, CRC memiliki ukuran:
2 byte
Contoh frame:
01 03 00 00 00 0A C5 CD
Bagian:
C5 CD
merupakan CRC.
Perangkat penerima akan menghitung kembali nilai CRC berdasarkan data yang diterima. Jika hasil perhitungan tidak sesuai dengan CRC yang diterima, frame dianggap mengalami kesalahan.
Contoh Modbus RTU Request
Misalnya PLC ingin membaca 10 Holding Register dari perangkat dengan Slave ID 1.
Contoh frame:
01 03 00 00 00 0A C5 CD
Penjelasannya:
| Data | Keterangan |
|---|---|
| 01 | Slave Address = 1 |
| 03 | Function Code = Read Holding Registers |
| 00 00 | Starting Address |
| 00 0A | Quantity = 10 register |
| C5 CD | CRC |
Sehingga alur pembacaannya menjadi:
01
↓
Slave ID = 1
03
↓
Read Holding Registers
00 00
↓
Starting Address
00 0A
↓
10 Registers
C5 CD
↓
CRC
Contoh Modbus RTU Response
Setelah menerima request, slave akan mengirimkan response.
Contoh sederhana:
01 03 14 00 64 00 C8 01 2C ... 00 0A XX XX
Strukturnya:
01 → Slave Address
03 → Function Code
14 → Byte Count
Data → Nilai register
XX XX → CRC
Jika terdapat 10 register:
10 register × 2 byte
= 20 byte
Dalam hexadecimal:
20 decimal = 14 hex
Karena itu Byte Count pada response adalah:
14
Struktur Data Frame Modbus TCP
Berbeda dengan Modbus RTU, Modbus TCP menggunakan MBAP Header.
Struktur sederhananya:
┌───────────────────────────────┬─────────────────────┐
│ MBAP Header │ PDU │
│ 7 Bytes │ Function + Data │
└───────────────────────────────┴─────────────────────┘
Secara umum:
Modbus TCP = MBAP Header + Function Code + Data
MBAP merupakan singkatan dari Modbus Application Protocol Header.
Struktur MBAP Header
MBAP Header terdiri dari:
┌───────────────┬──────────────┬──────────┬──────────┐
│ Transaction │ Protocol ID │ Length │ Unit ID │
│ ID │ │ │ │
│ 2 Bytes │ 2 Bytes │ 2 Bytes │ 1 Byte │
└───────────────┴──────────────┴──────────┴──────────┘
Total ukuran:
7 byte
Mari kita lihat masing-masing bagian.
1. Transaction ID
Transaction ID berukuran 2 byte.
Field ini digunakan untuk menghubungkan request dengan response.
Contohnya:
Request:
Transaction ID = 0001
Response:
Transaction ID = 0001
Dengan demikian, client dapat mengetahui bahwa response tersebut berkaitan dengan request tertentu.
2. Protocol ID
Protocol ID berukuran 2 byte.
Untuk Modbus TCP, nilainya umumnya:
00 00
Field ini menunjukkan bahwa data tersebut menggunakan protokol Modbus.
3. Length
Field Length berukuran 2 byte.
Field ini menunjukkan jumlah byte setelah bagian Length, yaitu:
Unit ID + PDU
Contohnya:
00 06
berarti terdapat 6 byte setelah field Length.
4. Unit ID
Unit ID memiliki ukuran 1 byte.
Pada komunikasi Modbus TCP murni, Unit ID memiliki fungsi yang berbeda dibandingkan Slave Address pada Modbus RTU.
Unit ID sangat berguna ketika Modbus TCP digunakan bersama gateway Modbus TCP-to-RTU.
Contohnya:
PLC / SCADA
│
Ethernet
│
Gateway
│
RS-485
┌───┼────┬────┐
│ │ │ │
ID1 ID2 ID3 ID4
Gateway dapat menggunakan Unit ID untuk menentukan perangkat RTU yang menjadi tujuan komunikasi.
PDU pada Modbus TCP
Setelah MBAP Header terdapat PDU (Protocol Data Unit).
Strukturnya:
┌──────────────────┬──────────────────┐
│ Function Code │ Data │
│ 1 Byte │ N Bytes │
└──────────────────┴──────────────────┘
PDU pada Modbus TCP memiliki konsep yang sama dengan bagian Function Code dan Data pada Modbus RTU.
Perbedaan pentingnya adalah Modbus TCP tidak menggunakan CRC pada frame Modbus.
Contoh Modbus TCP Request
Misalnya client ingin membaca 10 Holding Register dari Unit ID 1.
Contoh frame:
00 01 00 00 00 06 01 03 00 00 00 0A
Kita dapat memecahnya menjadi:
| Data | Keterangan |
|---|---|
| 00 01 | Transaction ID |
| 00 00 | Protocol ID |
| 00 06 | Length |
| 01 | Unit ID |
| 03 | Function Code |
| 00 00 | Starting Address |
| 00 0A | Quantity = 10 register |
Berbeda dengan Modbus RTU, pada contoh ini tidak terdapat CRC di bagian akhir frame.
Mengapa Modbus TCP Tidak Menggunakan CRC?
Modbus RTU memiliki CRC karena komunikasi serial membutuhkan mekanisme error checking pada frame Modbus.
Pada Modbus TCP, data dikirim melalui TCP/IP. Mekanisme komunikasi TCP sudah memiliki mekanisme pemeriksaan integritas dan pengiriman ulang data pada level transport.
Karena itu, Modbus TCP tidak menambahkan CRC seperti yang dilakukan Modbus RTU.
Namun perlu dipahami bahwa tidak adanya CRC bukan berarti komunikasi Modbus TCP tidak memiliki mekanisme error handling. Pemeriksaan dan penanganan error dilakukan oleh lapisan jaringan dan transport yang digunakan.
Perbandingan Modbus RTU dan Modbus TCP
Perbedaan frame dapat dirangkum sebagai berikut:
| Parameter | Modbus RTU | Modbus TCP |
|---|---|---|
| Media | RS-485 / RS-232 | Ethernet |
| Protokol transport | Serial | TCP/IP |
| Addressing | Slave Address | Unit ID |
| Header | Tidak ada | MBAP Header |
| Function Code | Ada | Ada |
| Data | Ada | Ada |
| CRC | Ada | Tidak ada |
| Port | Tidak menggunakan TCP port | TCP 502 |
| Topologi umum | Bus | Ethernet Network |
| Terminologi umum | Master/Slave | Client/Server |
Perbedaan Frame RTU dan TCP Secara Visual
Cara paling mudah untuk mengingatnya adalah:
Modbus RTU
┌──────────┬──────────┬──────────┬─────────┐
│ Address │ Function │ Data │ CRC │
└──────────┴──────────┴──────────┴─────────┘
Modbus TCP
┌──────────────────────────┬──────────────────┐
│ MBAP Header │ PDU │
│ 7 Bytes │ Function + Data │
└──────────────────────────┴──────────────────┘
Dengan demikian, perbedaan utama yang perlu diingat adalah:
Modbus RTU memiliki CRC, sedangkan Modbus TCP menggunakan MBAP Header dan tidak memiliki CRC Modbus.
Modbus RTU vs Modbus TCP dalam Sistem Industri
Dalam aplikasi industri, pemilihan Modbus RTU atau Modbus TCP biasanya bergantung pada perangkat, jarak komunikasi, infrastruktur jaringan, dan kebutuhan sistem.
Modbus RTU
Modbus RTU banyak digunakan untuk menghubungkan:
- PLC
- VFD
- Energy Meter
- Flow Meter
- Temperature Controller
- Remote I/O
- Sensor dan transmitter tertentu
Contoh:
RS-485
PLC ───────────┬───────────┬───────────┐
│ │ │
VFD Energy Remote
Meter I/O
Keunggulan utamanya adalah sederhana dan cocok untuk komunikasi serial dengan banyak perangkat.
Modbus TCP
Modbus TCP banyak digunakan pada jaringan Ethernet industri.
Contoh:
Ethernet
PLC ───────── Switch ─────── HMI
│
├────────── SCADA
│
├────────── VFD
│
└────────── Remote I/O
Modbus TCP juga lebih mudah diintegrasikan dengan infrastruktur Ethernet yang sudah tersedia di banyak sistem otomasi industri.
Pentingnya Memahami Modbus Data Frame
Pemahaman terhadap data frame sangat membantu ketika melakukan troubleshooting.
Misalnya ketika PLC gagal membaca data dari sebuah energy meter, kita dapat memeriksa:
- Apakah Slave ID atau Unit ID benar?
- Apakah Function Code sudah sesuai?
- Apakah alamat register benar?
- Apakah jumlah register benar?
- Apakah format data sesuai?
- Pada Modbus RTU, apakah CRC benar?
- Pada Modbus TCP, apakah Transaction ID dan Length sesuai?
- Apakah komunikasi RS-485 atau Ethernet berjalan dengan baik?
Dengan membaca frame secara langsung, teknisi dapat mengetahui apakah masalah berada pada wiring, konfigurasi komunikasi, addressing, register mapping, atau perangkat.
Kesimpulan
Modbus data frame merupakan bagian penting yang perlu dipahami ketika bekerja dengan komunikasi industri.
Pada Modbus RTU, struktur frame secara umum adalah:
Slave Address
+
Function Code
+
Data
+
CRC
Sedangkan pada Modbus TCP:
MBAP Header
+
Function Code
+
Data
Perbedaan utama terletak pada media komunikasi, struktur header, addressing, dan mekanisme error checking.
Dengan memahami struktur frame tersebut, teknisi dan engineer akan lebih mudah melakukan troubleshooting komunikasi PLC, HMI, SCADA, VFD, meter, remote I/O, dan perangkat industri lainnya.
Pemahaman ini juga menjadi dasar sebelum mempelajari Modbus register addressing, Function Code 03/06/16, konversi hexadecimal ke decimal, serta analisis komunikasi menggunakan Modbus Poll, Modscan, atau Wireshark.