Protokol industri

Modbus adalah: RTU vs TCP, register, dan function code

Modbus adalah protokol terbuka untuk perangkat industri. Panduan ini membandingkan Modbus RTU dan TCP serta menjelaskan register, function code, frame, dan gateway.

Topik
Protokol industri
Diperbarui
13 November 2026
Waktu baca
9 menit
Bagian
8
Kabel serial abu-abu dengan dua konektor sembilan pin.
Ringkasan

Modbus adalah protokol komunikasi terbuka untuk perangkat industri; Modbus RTU berjalan di jalur serial seperti RS-485 dengan pemeriksaan CRC, sedangkan Modbus TCP berjalan di Ethernet TCP/IP pada port 502. Modbus Organization menyebutnya standar de facto komunikasi serial di industri sejak 1979, dalam Modbus Application Protocol Specification V1.1b3.

Di terminal BBM, Modbus membawa pembacaan dari automatic tank gauge (ATG), flow meter, motor-operated valve (MOV), dan power meter ke PLC, SCADA, dan perangkat lunak manajemen tangki. Modbus hanya memindahkan angka, bukan arti. Register map dari pembuat perangkat yang menjelaskan arti setiap angka, satuannya, dan formatnya.

Modbus tetap banyak dipakai karena mudah diterapkan, dokumen spesifikasinya bisa diunduh gratis, dan hampir semua PLC, gateway, serta paket SCADA mendukungnya. Konsekuensi dari kesederhanaan itu: Modbus tidak mengenal satuan, status kualitas data, maupun keamanan. Kekurangan tersebut harus ditutup dengan dokumentasi yang rapi, desain jaringan yang benar, dan bila perlu protokol yang lebih baru seperti OPC UA atau MQTT di lapisan atasnya.

Bagi tim terminal, memahami Modbus berarti bisa membaca sendiri dokumen vendor, memeriksa pengaturan gateway, dan membedakan gangguan kabel dari kesalahan konfigurasi. Kemampuan dasar ini mempersingkat waktu pencarian gangguan ketika data tangki atau status valve tiba-tiba berhenti di layar operator.

Cara kerja Modbus: satu perangkat bertanya, satu menjawab

Dasar

Cara kerja Modbus: satu perangkat bertanya, satu menjawab

Modbus bekerja seperti absensi: satu perangkat bertanya, dan hanya perangkat yang dipanggil yang menjawab.

Spesifikasinya menempatkan Modbus di lapisan aplikasi (lapisan 7 model OSI) sebagai protokol tanya-jawab (request/reply). Perangkat yang bertanya disebut client, atau master pada jalur serial. Perangkat yang menjawab disebut server, atau slave pada jalur serial. Server tidak pernah mengirim data atas inisiatif sendiri, sehingga protokolnya ringkas dan siklus polling mudah diperkirakan.

Setiap permintaan membawa function code yang menyatakan perintahnya, misalnya membaca register atau menulis coil, ditambah data yang menyatakan alamat dan jumlahnya. Server mengirim balik datanya, atau mengirim exception response. Balasan itu memakai function code yang sama ditambah 0x80, diikuti satu byte exception code yang menjelaskan alasan penolakan.

Di terminal pada umumnya, server SCADA atau gateway industri berperan sebagai client. Ia membaca setiap perangkat bergantian: tank gauge, flow computer, aktuator valve, power meter. Waktu satu putaran polling bertambah seiring jumlah perangkat dan register, jadi daftar polling perlu dirancang sama seriusnya dengan pengkabelan.

Pada jalur serial, client juga bisa mengirim broadcast ke alamat 0. Semua server menjalankan perintahnya tetapi tidak ada yang membalas, sehingga broadcast hanya cocok untuk perintah tulis. Setelah broadcast, client menunggu jeda turnaround sebelum mengirim permintaan berikutnya. Spesifikasi serial menyebut 100 sampai 200 ms sebagai nilai jeda yang umum, dan response timeout satu sampai beberapa detik pada 9600 baud untuk permintaan biasa.

Jalur Modbus yang umum di terminal
Lapangan
Kontrol
Aplikasi
Server SCADA atau TMS

Client Modbus. Membaca tiap perangkat dan menyimpan nilainya sebagai tag.

Arahkan kursor, fokus, atau ketuk sebuah titik untuk melihat catatannya.
Modbus RTU vs Modbus TCP: apa bedanya

Perbandingan

Modbus RTU vs Modbus TCP: apa bedanya

Modbus RTU dan Modbus TCP membawa permintaan yang sama; yang berbeda adalah kabel di bawahnya dan cara setiap frame dibungkus.

Modbus RTU mengirim frame biner lewat jalur serial, biasanya RS-485 dua kawat. Frame diawali alamat server, lalu function code, data, dan CRC 16-bit. Modbus over Serial Line specification V1.02 menetapkan alamat 1 sampai 247 untuk server dan menyisakan 0 untuk broadcast. Antar-frame dipisahkan jeda diam minimal 3,5 karakter, dan format bawaannya 8 bit data dengan parity even.

Modbus TCP memasukkan protocol data unit (PDU) yang sama ke dalam paket TCP/IP. Alamat serial dan CRC hilang. Penggantinya header MBAP 7 byte yang berisi transaction identifier, protocol identifier, panjang data, dan unit identifier. Messaging on TCP/IP Implementation Guide mencadangkan port 502, dan IANA mencatat port itu dengan nama mbap.

Pilih berdasarkan topologi, bukan kebiasaan. RS-485 cocok untuk deretan perangkat lapangan yang tersebar ratusan meter dengan satu pasang kabel. Ethernet cocok untuk panel dan server yang sudah berada di satu jaringan, dan memungkinkan beberapa client membaca perangkat yang sama jika perangkat itu menerima lebih dari satu koneksi.

Semua perangkat dalam satu jalur RTU wajib memakai baud rate, parity, dan stop bit yang sama. Spesifikasi serial mewajibkan dukungan 9600 dan 19200 baud, dengan 19200 sebagai nilai bawaan, dan mensyaratkan 2 stop bit jika parity tidak dipakai. Ada juga bentuk serial ketiga, Modbus ASCII, yang mengirim karakter terbaca dengan pemeriksaan LRC; bentuk ini masih ditemui di peralatan lama tetapi jarang di terminal baru.

KriteriaModbus RTUModbus TCP
Lapisan fisikJalur serial, umumnya RS-485 dua kawat; RS-232 untuk titik ke titikEthernet dengan TCP/IP
PeranSatu master dan hingga 247 slave per jalurClient dan server; beberapa client bisa membaca satu server
PengalamatanAlamat slave di setiap frameAlamat IP ditambah unit identifier di header MBAP
Pemeriksaan galatCRC-16 di akhir setiap frameDitangani TCP; tanpa CRC Modbus
Batas frameJeda diam minimal 3,5 karakterKolom panjang di header MBAP
JangkauanHingga 1000 m pada 9600 baud dengan kabel AWG26 atau lebih besar (spesifikasi serial V1.02)Ditentukan segmen Ethernet; diperpanjang dengan switch atau fiber optik
Coil, discrete input, dan register

Model data

Coil, discrete input, dan register

Modbus menyimpan data di empat tabel, dan setiap nilai yang dibaca pasti berada di salah satunya.

Application Protocol Specification mendefinisikan dua tabel bit tunggal dan dua tabel 16-bit. Coil adalah bit baca-tulis untuk perintah seperti buka atau stop. Discrete input adalah bit baca saja, misalnya limit switch atau kontak alarm. Input register adalah word baca saja, biasanya hasil ukur. Holding register adalah word baca-tulis untuk setpoint dan konfigurasi, dan banyak perangkat juga menaruh hasil ukur di sana.

Setiap tabel dapat memuat hingga 65.536 item, dengan alamat 0 sampai 65535 di dalam frame. Nilai dikirim big-endian, byte tinggi lebih dulu. Nilai yang lebih lebar dari 16 bit, misalnya float 32-bit untuk level tangki, menempati dua register, dan urutan word-nya ditentukan pembuat perangkat.

Keempat tabel itu bisa berupa area memori terpisah atau saling tumpang tindih di dalam perangkat; spesifikasi membolehkan keduanya. Dalam praktik, banyak tank gauge dan meter menaruh semua datanya sebagai holding register, sehingga client sering cukup memakai function code 03 untuk membaca dan 06 atau 16 untuk menulis.

Coil
1 bit, baca-tulis (FC 01, 05, 15)
Discrete input
1 bit, baca saja (FC 02)
Input register
Word 16-bit, baca saja (FC 04)
Holding register
Word 16-bit, baca-tulis (FC 03, 06, 16)
Item per tabel
Hingga 65.536 (alamat 0-65535)
Urutan byte
Big-endian di dalam setiap register
Isi register map Modbus

Register map

Isi register map Modbus

Register map adalah kamus sebuah perangkat: daftar alamat, nilai yang disimpan di alamat itu, format, dan satuannya.

Dua kebiasaan penulisan paling sering membingungkan di hari pertama. Banyak manual menulis holding register sebagai 40001, 40002, dan seterusnya, penomoran warisan kontroler Modicon. Frame sendiri membawa alamat yang dimulai dari nol, jadi 40001 dikirim sebagai 0. Contoh di Application Protocol Specification membaca register 108 sampai 110 dengan alamat awal 107 (0x006B).

Jebakan kedua adalah tipe data. Level yang dikirim sebagai FLOAT32 harus dibaca dua register sekaligus dalam satu permintaan dan diurai dengan urutan word yang benar. Jika dibaca dalam dua permintaan, kedua bagiannya bisa berasal dari scan yang berbeda. Register integer sering punya faktor skala yang harus diterapkan client sebelum nilainya tampil di layar operator.

Minta register map yang sesuai dengan firmware terpasang, bukan brosur merek. INTEGRA TMS membaca ATG buatan Honeywell, Endress+Hauser, dan Tokyo Keiso, dan dua gauge dari pabrikan yang sama pun bisa punya register map berbeda.

Register map yang layak pakai sudah menjelaskan empat hal berikut sebelum ada yang membuka laptop di lokasi:

  • Pengalamatan: dimulai dari nol atau dari satu, dan setiap alamat masuk ke tabel yang mana. Tanpa informasi ini, semua tag berisiko bergeser satu register.
  • Tipe data: INT16, UINT16, INT32, atau FLOAT32, beserta urutan word untuk setiap nilai 32-bit. Urutan yang terbalik menghasilkan angka yang tampak acak.
  • Satuan dan skala: satuan teknik, faktor skala, dan nilai khusus yang berarti "tidak ada pembacaan" atau "gauge rusak".
  • Hak tulis: register mana yang boleh ditulis, dan apa yang dilakukan perangkat ketika register itu ditulis.
Text
Example register map: tank gauge on RS-485 (illustrative, not a real device)
Server address: 1   Baud: 9600   Format: 8 data bits, even parity, 1 stop bit

Manual ref  PDU addr  Words  Type     Unit    Value
40001       0         2      FLOAT32  mm      Product level
40003       2         2      FLOAT32  mm      Free water level
40005       4         2      FLOAT32  degC    Average product temperature
40007       6         1      UINT16   -       Status bits (0 = level OK, 1 = gauge fault)
40008       7         1      UINT16   -       Alarm bits (0 = H, 1 = HH, 2 = L, 3 = LL)

Notes
- FLOAT32 spans two registers. Word order: high word first (check the manual).
- Read 40001 to 40008 in one request: FC 03, start 0, quantity 8.
Contoh register map untuk tank gauge. Hanya ilustrasi; pakai register map dari manual perangkat Anda.
Function code Modbus yang paling sering dipakai

Function code

Function code Modbus yang paling sering dipakai

Function code adalah kata kerja dalam permintaan Modbus: satu byte yang memberi tahu server apakah harus membaca atau menulis, dan tabel mana yang dipakai.

Delapan kode publik sudah mencakup hampir semua pekerjaan integrasi lapangan. Kode lain di luar delapan ini, misalnya untuk diagnostik serial atau akses file record, jarang dibutuhkan untuk integrasi tangki, meter, dan valve. Application Protocol Specification membatasi setiap pembacaan: hingga 2000 coil atau discrete input, dan hingga 125 register untuk function code 03 dan 04. Function code 16 menulis hingga 123 register dalam satu frame.

Saat perangkat menolak permintaan, ia membalas dengan function code ditambah 0x80. Exception 01 berarti fungsi tidak didukung, 02 berarti alamat tidak ada, 03 berarti ada nilai yang tidak valid di permintaan, dan 04 berarti perangkat gagal saat menjalankannya. Gateway menambahkan 0A dan 0B jika jalur atau perangkat di belakangnya tidak menjawab.

Hati-hati memakai kode tulis di plant yang sedang beroperasi. Function code 05, 06, 15, dan 16 langsung mengubah output dan setpoint tanpa langkah konfirmasi di dalam protokol. Sepakati sejak desain register mana yang boleh ditulis client, uji penulisan pada jendela kerja yang disetujui, dan tetap tempatkan perintah ke valve dan pompa di belakang interlock sistem kontrol.

KriteriaNamaTabel dataContoh pemakaian
01 (0x01)Read CoilsCoilMembaca perintah jalan pompa
02 (0x02)Read Discrete InputsDiscrete inputMembaca limit switch dan kontak alarm
03 (0x03)Read Holding RegistersHolding registerMembaca level tangki, setpoint, totalisator meter
04 (0x04)Read Input RegistersInput registerMembaca hasil ukur pada banyak meter
05 (0x05)Write Single CoilCoilMengirim perintah buka, tutup, atau stop ke valve
06 (0x06)Write Single RegisterHolding registerMengubah satu setpoint
15 (0x0F)Write Multiple CoilsCoilMengubah sekelompok output sekaligus
16 (0x10)Write Multiple RegistersHolding registerMenulis preset batch atau nilai 32-bit
Membaca frame Modbus byte demi byte

Frame

Membaca frame Modbus byte demi byte

Frame Modbus hanyalah deretan byte pendek, dan membacanya secara manual adalah cara tercepat menyelesaikan perselisihan antara dua sistem.

Contoh di bawah memakai permintaan dari Application Protocol Specification: membaca tiga holding register mulai alamat 107. Di RS-485, client mengirim alamat server (di sini 0x11), PDU, lalu CRC dengan byte rendah lebih dulu. Di Ethernet, PDU yang sama mengikuti header MBAP 7 byte dan tidak membawa CRC.

Spesifikasi membatasi PDU sebesar 253 byte, sehingga frame RTU paling panjang 256 byte dan frame TCP paling panjang 260 byte. Batas ini menjelaskan mengapa client memecah blok register yang panjang menjadi beberapa permintaan.

Untuk melihat frame sebenarnya, pasang serial monitor atau alat uji Modbus di jalur, atau rekam lalu lintas Ethernet di port switch. Bandingkan yang dikirim client dengan yang diharapkan manual. Alamat awal yang salah, balasan yang tidak datang, atau CRC yang gagal terlihat jelas di byte mentah, jauh sebelum muncul sebagai nilai yang membeku di HMI.

Modbus
Read holding registers 108 to 110 (example from the Modbus Application Protocol Specification V1.1b3)

PDU (same on every medium)
  03          function code: read holding registers
  00 6B       starting address 107 (register 108, zero-based)
  00 03       quantity: 3 registers

Modbus RTU on RS-485, server address 0x11
  Request : 11 03 00 6B 00 03 76 87
            addr fc  start  qty   CRC (low byte first)
  Response: 11 03 06 02 2B 00 00 00 64 C8 BA
            addr fc  bytes reg108 reg109 reg110 CRC
            reg108 = 0x022B = 555, reg109 = 0, reg110 = 100

Modbus TCP, port 502, unit identifier 0x11
  Request : 00 01 00 00 00 06 11 03 00 6B 00 03
            trans proto length unit | PDU (no CRC)

Exception example (register does not exist)
  Response: 11 83 02 C1 34
            fc 0x03 + 0x80 = 0x83, exception 02 = illegal data address
Permintaan dan balasan dalam Modbus RTU dan Modbus TCP, beserta balasan exception. Nilai CRC dihitung untuk contoh ini.
  • 253 bytesUkuran PDU maksimumModbus Application Protocol V1.1b3
  • 256 bytesFrame RTU maksimum di RS-485Alamat + PDU + CRC 2 byte
  • 260 bytesFrame Modbus TCP maksimumHeader MBAP 7 byte + PDU
  • 502Port TCP terdaftarPanduan Modbus TCP; IANA "mbap"
Kapan butuh gateway Modbus

Gateway

Kapan butuh gateway Modbus

Gateway Modbus adalah penerjemah yang memungkinkan client TCP di jaringan membaca perangkat RTU di jalur serial.

Gateway menerima permintaan Modbus TCP, memakai unit identifier untuk memilih perangkat serial, mengirim frame RTU ke RS-485, menunggu balasan, lalu meneruskannya lewat TCP. Alasan umum memasang gateway: server SCADA tidak punya port serial, beberapa sistem membutuhkan data lapangan yang sama, atau ujung jalur serial jauh dari control room. Di terminal BBM, gateway biasanya dipasang di panel dekat perangkat lapangan atau di ruang server, tergantung panjang kabel serial dan jaringan yang tersedia.

Gateway membawa pengaturan sendiri dan titik gagal sendiri. Timeout di sisi TCP harus lebih panjang dari waktu jawab perangkat serial, kalau tidak client menyerah saat gateway masih menunggu. Exception 0A (jalur tidak tersedia) dan 0B (perangkat tujuan tidak menjawab) berasal dari gateway itu sendiri, sehingga membantu memisahkan gangguan jaringan dari perangkat lapangan yang mati.

Tidak semua kotak konverter serial ke Ethernet adalah gateway Modbus. Serial device server dalam mode transparan hanya meneruskan byte, sehingga client tetap berbicara Modbus RTU lengkap dengan CRC melalui virtual COM port atau socket TCP mentah. Gateway Modbus mengubah format frame RTU menjadi TCP dan sebaliknya. Pastikan mode yang dipakai perangkat itu sebelum menyalahkan perangkat lapangan.

  1. Kumpulkan pengaturan serial

    Baud rate, parity, stop bit, dan alamat setiap perangkat di jalur, diambil dari perangkatnya, bukan dari gambar lama.

  2. Petakan unit identifier ke perangkat

    Catat unit identifier yang harus dipakai client untuk menjangkau setiap alamat serial.

  3. Atur timeout berlapis

    Timeout serial di gateway lebih dulu, lalu timeout yang lebih panjang di client TCP.

  4. Uji dari client sebenarnya

    Baca nilai yang sudah diketahui dari SCADA atau TMS, bukan hanya dari halaman web gateway.

  5. Lindungi kedua sisi

    Pasang proteksi surja di jalur RS-485 dan jalur Ethernet jika rawan petir atau lonjakan akibat switching.

Modbus di lapangan: pelajaran dari proyek Citia

Di lapangan

Modbus di lapangan: pelajaran dari proyek Citia

Sebagian besar gangguan Modbus yang ditemukan PT Citia Engineering Indonesia (Citia) di lapangan berada di kabel, konverter, atau konfigurasi, bukan di protokolnya.

Di Fuel Terminal Jambi, perintah dan umpan balik motor-operated valve berjalan dari aktuator Flowserve Limitorque lewat RS-485, melalui surge protection device, ke gateway Advantech ECU-1051, lalu lewat Ethernet ke SCADA InduSoft. Gateway membaca setiap aktuator berdasarkan alamat perangkat, register, function code, baud rate, dan parity yang dikonfigurasi.

Di terminal yang sama, Citia mengganti gateway ATG yang rusak di antara tank gauge dan TMS. Pekerjaan itu sekaligus menambahkan surge protector di jalur RS-485 Modbus dan jalur Ethernet. Hasilnya menegaskan satu aturan: setiap penggantian gateway diakhiri uji ujung ke ujung dari ATG sampai TMS.

Di Cikampek, gateway serial Moxa NPort 5160 untuk pembacaan meter diganti lalu parameter serial dan jaringannya diatur ulang. Di Eltech, data panel busbar baru masuk ke SCADA pusat setelah alamat Modbus, register mapping, dan pengaturan IP divalidasi bertahap.

Komunikasi hanya separuh jawaban. Pada investigasi gangguan ATG di Redeco, pemulihan jalur data membuat pembacaan muncul kembali, tetapi hasil assessment mencatat bahwa langkah itu tidak memulihkan akurasi sensor yang sudah menurun. Modbus hanya bisa mengantarkan angka yang diukur perangkat.

  • Proteksi surja di kedua jalur

    Sisi RS-485 dan sisi Ethernet.

  • Catatan alamat dan register

    Disimpan bersama dokumen as-built.

  • Uji ujung ke ujung

    Dari perangkat lapangan sampai aplikasi.

  • Commissioning bertahap

    Perangkat, jaringan, data, lalu SCADA.

Istilah yang perlu diketahui

Modbus RTU
Bentuk biner Modbus di jalur serial seperti RS-485, dengan alamat slave dan CRC di setiap frame.
Modbus TCP
Modbus yang dibawa di dalam TCP/IP lewat Ethernet, memakai port 502 dan header MBAP sebagai pengganti CRC.
RS-485
Standar listrik dua kawat seimbang yang memungkinkan banyak perangkat berbagi satu pasang kabel untuk jarak jauh.
Holding register
Nilai 16-bit baca-tulis di perangkat Modbus, dipakai untuk setpoint, konfigurasi, dan sering juga hasil ukur.
Coil
Satu bit baca-tulis, biasanya perintah seperti start, stop, buka, atau tutup.
Function code
Byte pertama permintaan Modbus yang menyatakan tindakan yang harus dilakukan server.
Register map
Tabel dari vendor yang berisi setiap alamat, tipe data, satuan, dan artinya.
CRC
Cyclic redundancy check: checksum 16-bit di akhir frame RTU untuk mendeteksi byte yang rusak.
Unit identifier
Byte di header MBAP yang memberi tahu gateway perangkat serial mana yang dituju permintaan TCP.

Pertanyaan yang sering diajukan

Apa beda Modbus RTU dan Modbus TCP?

Modbus RTU berjalan di jalur serial seperti RS-485 dan memeriksa setiap frame dengan CRC, sedangkan Modbus TCP berjalan di Ethernet pada port 502. Function code dan register-nya sama. TCP mengganti alamat slave dan CRC dengan header MBAP 7 byte.

Apa itu register map Modbus?

Register map Modbus adalah tabel dari vendor yang menyebutkan nilai di setiap register beserta tipe data, satuan, dan skalanya. Tanpa register map, client bisa membaca angka tetapi tidak tahu artinya. Pakai register map yang sesuai dengan firmware terpasang.

Berapa perangkat maksimum di satu jalur RS-485 Modbus?

Spesifikasi Modbus over Serial Line selalu mengizinkan 32 perangkat di satu jalur RS-485 tanpa repeater. Jumlahnya bisa lebih banyak jika setiap perangkat memakai beban unit pecahan dan vendor mendokumentasikannya. Jika tidak, tambahkan repeater atau bagi jalurnya.

Kapan perlu gateway Modbus?

Gateway Modbus diperlukan saat client TCP harus membaca perangkat RTU serial, atau saat beberapa sistem harus berbagi satu jalur serial. Gateway mengubah setiap permintaan TCP menjadi frame RTU lalu mengembalikan balasannya. Gateway juga perlu rancangan timeout dan proteksi surja sendiri.

Kenapa alamat Modbus saya bergeser satu?

Alamat Modbus bergeser satu karena banyak manual menghitung register mulai dari 1, sedangkan frame menghitung mulai dari 0. Register 40001 di manual dikirim sebagai alamat 0. Baca satu nilai yang bisa dicek untuk mengetahui kebiasaan yang dipakai software Anda.

Apakah Modbus aman?

Modbus RTU dan Modbus TCP klasik tidak punya autentikasi maupun enkripsi. Lindungi dengan segmentasi jaringan, firewall, dan kontrol akses fisik. Modbus Organization juga menerbitkan spesifikasi Modbus/TCP Security yang membungkus Modbus dengan TLS dan sertifikat x.509.

Langkah berikutnya

Siapkan pembahasan teknis untuk fasilitas Anda.

Bawa daftar perangkat, diagram, dan gejala yang Anda miliki. Tim Citia membantu memetakan langkah berikutnya.

Produk dan solusi terkait

Baca juga