Sebagian besar masalah Modbus jatuh ke salah satu dari empat kategori: master sama sekali tidak menerima respons, menerima frame yang rusak (error CRC), menerima frame valid yang terlambat (timeout), atau menerima balasan bersih yang berbunyi “saya menolak” (respons exception). Setiap kategori menunjuk ke lapisan stack yang berbeda, sehingga cara tercepat memperbaiki sebuah link adalah dengan terlebih dahulu mengklasifikasikan kategori mana yang sedang Anda hadapi, lalu menelusuri daftar penyebab untuk kategori tersebut. Panduan ini membahas proses klasifikasi itu dan menguraikan setiap kode exception Modbus standar beserta kemungkinan penyebab dan perbaikan lapangannya.

Langkah Satu: Klasifikasikan Gangguan Sebelum Menyentuh Apa Pun

Sebelum mengubah pengkabelan atau register, perhatikan apa yang sebenarnya dilaporkan oleh master. Empat gejala utama memetakan ke akar penyebab yang sangat berbeda, dan mengejar yang salah akan membuang waktu berjam-jam.

Sebuah protocol analyzer atau bahkan line sniff sederhana akan memberi tahu Anda kategori mana yang Anda hadapi dalam hitungan detik. Pada link multidrop RS-485, kategori lapisan fisik mendominasi, jadi pastikan bus dalam kondisi sehat sebelum mencurigai firmware.

Kode Exception Modbus, Diuraikan

Ketika sebuah slave dapat mem-parsing permintaan Anda tetapi tidak dapat memenuhinya, spesifikasi Modbus Application Protocol mengharuskannya mengembalikan respons exception. Function code dipantulkan kembali dengan bit 7 yang diaktifkan, dan satu byte exception menjelaskan alasannya. Kode-kode ini didefinisikan dalam spesifikasi resmi Modbus Application Protocol dan identik di RTU, ASCII, maupun TCP. Tabel di bawah ini mencantumkan setiap kode standar beserta artinya dan perbaikan paling umum di dunia nyata.

Kode (hex) Nama Artinya Kemungkinan penyebab dan perbaikan
01 Illegal Function Function code tidak didukung oleh slave ini. Anda mengirim, misalnya, FC06 ke perangkat read-only, atau perangkat yang hanya mendukung FC03/FC04. Periksa register map perangkat dan gunakan function code yang didukung.
02 Illegal Data Address Alamat awal ditambah kuantitas berada di luar rentang valid perangkat. Selisih satu (off-by-one) antara dokumentasi berbasis 1 dan pengalamatan wire berbasis 0, atau membaca melewati akhir blok. Kurangi 1 dari register yang terdokumentasi dan verifikasi jumlahnya.
03 Illegal Data Value Sebuah nilai pada field data permintaan berada di luar rentang yang diizinkan. Kuantitas melebihi batas per-permintaan (125 register untuk FC03/04, 2000 coil untuk FC01/02), atau nilai yang ditulis ditolak. Pecah permintaan atau batasi (clamp) nilainya.
04 Slave Device Failure Terjadi error yang tidak dapat dipulihkan saat slave memproses permintaan. Kerusakan hardware internal, kegagalan sensor, atau fault firmware. Power-cycle, periksa diagnostik perangkat, dan pastikan titik yang dialamatkan benar-benar ada secara fisik.
05 Acknowledge Permintaan diterima tetapi membutuhkan waktu lama untuk diproses. Digunakan dengan perintah pemrograman. Master sebaiknya melakukan polling dengan Read Exception Status atau mengulang permintaan alih-alih memperlakukannya sebagai error.
06 Slave Device Busy Slave sedang menjalankan perintah berdurasi panjang dan tidak dapat merespons sekarang. Tunggu (back off) dan coba lagi setelah jeda. Sering muncul selama operasi firmware atau saat melakukan polling perangkat lebih cepat daripada kemampuannya melayani.
08 Memory Parity Error Terdeteksi parity error pada extended memory perangkat saat pembacaan. Spesifik untuk akses file-record FC20/FC21. Record yang tersimpan rusak; perangkat mungkin memerlukan pemeriksaan memori atau reload.
0A Gateway Path Unavailable Sebuah gateway tidak dapat mengalokasikan jalur internal untuk merutekan permintaan. Gateway salah konfigurasi atau kelebihan beban. Periksa tabel routing/mapping gateway dan batas koneksinya.
0B Gateway Target Failed to Respond Tidak ada respons yang diterima dari perangkat target di belakang gateway. Perangkat di sisi hilir offline, memiliki unit ID yang salah, atau jalur serialnya gagal. Verifikasi alamat slave target dan pengaturan serial gateway.

Kode 0A dan 0B adalah yang paling sering Anda temui pada instalasi nyata, karena hampir setiap sistem modern menjembatani serial Modbus ke TCP atau MQTT melalui sebuah gateway. Khususnya 0B, ini adalah sinyal “gateway baik-baik saja, perangkat di belakangnya tidak”, yang mempersempit pencarian secara dramatis. Mengatur akses register dengan benar sejak awal menghindari sebagian besar error 01, 02, dan 03, dan panduan kami tentang pemetaan register Modbus dan model 4x/3x/0x/1x membahas aturan pengalamatan yang sering menjebak integrator baru.

Error CRC: Hampir Selalu di Lapisan Fisik

Sebuah error CRC berarti byte yang tiba tidak cocok dengan checksum dua-byte yang ditambahkan oleh pengirim. Dalam mode RTU, CRC-16 dihitung atas keseluruhan frame, sehingga satu bit yang terbalik membuat seluruh pesan gagal. Ketika error CRC bersifat intermiten, tersangka yang biasa adalah:

Jika error CRC seiring dengan start motor di dekatnya atau switching VFD, perlakukan sebagai masalah EMC. Isolasi galvanik memutus ground loop dan menjepit noise common-mode; sebuah isolator seperti isolator sinyal RS-485 ISO-M485 adalah langkah pertama standar di lantai pabrik yang bising. Untuk energi transien dan petir, surge protection juga harus dipasang pada jalur, dan ulasan mendalam kami tentang surge protection untuk jaringan RS-485 dan Modbus menjelaskan di mana SPD T485-105 dari SURIOTA cocok ditempatkan. Disiplin pengkabelan lengkap, termasuk penempatan grounding dan terminasi, dibahas dalam pengkabelan RS-485, terminasi, dan gangguan umum.

Timeout dan Gangguan Tanpa Respons: Alur Diagnostik

Ketika master melaporkan tidak ada balasan, telusuri checklist berurutan ini. Berhenti pada item pertama yang menyelesaikan gangguan, karena item berikutnya mengasumsikan item sebelumnya sudah baik.

  1. Alamat slave. Pastikan unit ID cocok dengan alamat terkonfigurasi perangkat dan unik di bus. Dua perangkat pada alamat yang sama akan bertabrakan dan menghasilkan noise CRC atau keheningan.
  2. Parameter serial. Baud rate, data bits, parity, dan stop bits harus cocok persis. Baud rate standar adalah 9600 dan 19200 (default yang diwajibkan spesifikasi), hingga 115200. Ketidakcocokan parity adalah penyebab klasik error CRC yang konsisten tanpa frame valid.
  3. Polaritas pengkabelan. A/B (terkadang dilabeli D+/D-) yang tertukar adalah penyebab tanpa respons yang paling umum. Tukar dan uji ulang.
  4. Terminasi dan bias. Verifikasi terminasi 120-ohm di kedua ujung dan bahwa bias hadir.
  5. Penyetelan response timeout. Perangkat dan gateway yang lambat menambah latensi. Naikkan timeout master (200 hingga 1000 ms tipikal untuk serial multidrop) dan jeda antar-frame sebelum menyatakan kegagalan.
  6. Timing turnaround / DE. Pada RS-485 half-duplex, jalur driver-enable harus dilepas tepat waktu agar slave dapat membalas. Turnaround yang terlambat memotong respons.

Logika yang sama berlaku ketika Anda menjembatani serial ke network edge. Perangkat seperti gateway Modbus-to-MQTT SRT-MGATE-1210 dari SURIOTA mengekspos pengaturan timeout, retry, dan polling-interval per-slave, sehingga ketika Anda melihat exception 0B di sisi TCP/MQTT, Anda dapat mengisolasi apakah gangguannya ada pada jalur gateway atau pada jalur serial di belakangnya.

Pertanyaan yang Sering Diajukan

Apa perbedaan antara timeout Modbus dan kode exception?

Timeout berarti tidak ada balasan valid yang tiba dalam jendela tunggu master, yang menunjuk ke masalah pengalamatan, pengkabelan, atau parameter serial. Kode exception berarti balasan lengkap dan valid memang tiba, tetapi slave melaporkan bahwa permintaan Anda ilegal atau tidak dapat dilayani, sehingga masalahnya ada pada logika permintaan, bukan pada link fisik.

Mengapa saya mendapat kode exception 02 (Illegal Data Address) padahal register ada di manual?

Ini hampir selalu merupakan ketidakcocokan pengalamatan berbasis 1 versus berbasis 0. Dokumentasi sering mencantumkan register 40001, tetapi nilai yang ditempatkan pada wire adalah 0. Kurangi 1 dari nomor register yang terdokumentasi, dan pastikan alamat awal ditambah kuantitas tidak melewati akhir blok yang didefinisikan perangkat.

Bagaimana cara menghentikan error CRC intermiten pada jalur RS-485 yang panjang?

Pastikan tepat dua terminator 120-ohm (satu di tiap ujung fisik), tambahkan fail-safe bias, jaga topologi tetap daisy chain dengan stub pendek, dan tangani grounding. Jika error berkorelasi dengan noise listrik, tambahkan isolator galvanik dan surge protector RS-485 di titik masuk panel.

Apa arti kode exception 0B pada gateway Modbus TCP?

Kode 0B, Gateway Target Failed to Respond, berarti gateway menerima permintaan Anda dan mencoba merutekannya, tetapi perangkat serial target tidak pernah menjawab. Periksa bahwa unit ID cocok dengan perangkat nyata, bahwa pengaturan serial pada gateway cocok dengan perangkat, dan bahwa jalur hilir terpasang serta diberi daya.