Modbus Data Frame: Memahami Struktur Modbus RTU dan Modbus TCP

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:

  1. Modbus RTU
  2. 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 CodeFungsi
01Read Coils
02Read Discrete Inputs
03Read Holding Registers
04Read Input Registers
05Write Single Coil
06Write Single Register
15 atau 0FWrite Multiple Coils
16 atau 10Write 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:

DataKeterangan
01Slave Address = 1
03Function Code = Read Holding Registers
00 00Starting Address
00 0AQuantity = 10 register
C5 CDCRC

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:

DataKeterangan
00 01Transaction ID
00 00Protocol ID
00 06Length
01Unit ID
03Function Code
00 00Starting Address
00 0AQuantity = 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:

ParameterModbus RTUModbus TCP
MediaRS-485 / RS-232Ethernet
Protokol transportSerialTCP/IP
AddressingSlave AddressUnit ID
HeaderTidak adaMBAP Header
Function CodeAdaAda
DataAdaAda
CRCAdaTidak ada
PortTidak menggunakan TCP portTCP 502
Topologi umumBusEthernet Network
Terminologi umumMaster/SlaveClient/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:

  1. Apakah Slave ID atau Unit ID benar?
  2. Apakah Function Code sudah sesuai?
  3. Apakah alamat register benar?
  4. Apakah jumlah register benar?
  5. Apakah format data sesuai?
  6. Pada Modbus RTU, apakah CRC benar?
  7. Pada Modbus TCP, apakah Transaction ID dan Length sesuai?
  8. 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.

Scroll to Top