Anda di halaman 1dari 19

Pengetahuan Dasar Protokol Modbus

JUN 3
Posted by pccontrol

Jaringan Protokol Modbus


Sebelum membaca artikel ini sebaiknya anda membaca ttg Protokol komunikasi .
Pengetahuan dasar Prototokol Modbus
Protocol modbus dibuat oleh perusahaan PLC bernama Modicon tahun 1979 dan sampai sekarang
menjadi salah satu prtotocol komunikasi standar yg dipakai dalam Automatisasi pengelolaan
Gedung, Proses Industri dll.
Beberapa Jenis Type Modbus

Modbus Serial (RTU & ASCII)


Modbus TCP/IP
Modbus +

Pada Artikel ini kita hanya akan membahas Modbus Serial RTU disebabkan mudah implementasinya
.
Protokol komunikasi Modbus Serial mengatur cara-cara dan format komunikasi serial (rs232 atau
rs485) antara master dengan Slave ( master atau slave dpt berupa PLC ,microcontroller, smart
device dll) .Jaringan Modbus terdiri dari Master dan beberapa Slave, Master yang berinisiatif
memulai komunikasi antara lain menulis data,membaca data,dan mengetahui status SLave .
Permintaan master disebut juga sebagai request atau query. Slave hanya bersifat
pasif/menunggu atau dgn kata lain Slave hanya me respon jika ada permintaan/query dari
Master.

Jumlah Slave dalam protokol Modbus bisa sebanyak 247 slave. Slave dapat berupa PLC,
peralatan elektronik, controller, sensor dll.

Penyimpanan data pada modbus


Pada protokol modbus terdapat 4 buah jenis penyimpanan data dengan panjang masing2 16 bit.

1. Coil
Pada mulanya jenis data ini digunakan untuk mengaktifkan coil relay . nilai jenis data ini ON
atau OFF . Coil mempunyai panjang 16 bit, sehingga untuk mengaktifkan/ON dgn cara memberi
nilai FF00H dan 0000H untuk OFF. data FF00 dan 00 disimpan di register 00000 sampai 09999
2. Input Relay / input biner / input digital/input diskrit
kebalikan dengan coil, input relay digunakan untuk mengetahui status relay apakah sedang ON
atau OFF. Input relay bersifat read only bagi master dan hanya bisa dirubah oleh slave saja.
data tsb disimpan di register 10001 sampai 19999
3. Input Register
Input Regsiter digunakan untuk menyimpan data analog dgn range nilai 0 ~ 65535 . Input
register bersifat read only bagi master.

data ini disimpan di register ber nomor 30001 sampai 39999


4. Holding Register
Holding register digunakan untuk menyimpan nilai dgn range 0~65535 .register ini mempunyai
alamat register 40001 sampai 49999
Alamat register pd modbus dan function code yg digunakan untuk mengaksesnya

tabel 1 . alamat register dan function code


Pengorganisasian data modbus
Gambar dibawah ini memperlihatkan pengorganisasian data pada sebuah slave modbus yang
masing masing mempunyai blok ter pisah antara coil dan register.

Gambar dibawah ini memperlihatkan pengorganisasian data pada sebuah slave modbus yang
hanya mempunayi satu blok untuk coil dan register.

Frame Data Modbus:


Master atau slave berkomunikasi dgn cara mengirim frame permintaan dan frame respon . secara
umum format frame modbus sbb:

Frame modbus terdiri dari


1. Alamat slave
Byte pertama sebagai Alamat slave terdiri dari 1 byte . alamat slave ditentukan hanya 1 ~ 247.
alamat 0 digunakan master untuk ditujukan kepada semua slave.
2. Function Code
Byte kedua berupa Function Code , perintah dari master yang harus dilakukan oleh slave berikut
ini daftar kode perintah perintah tsb (function code):

membac
a

menulis 1
data

menulis banyak
data

no awal
reg

Coil

FC01

FC05

FC15

00001

input
diskrit/digital

FC02

10001

Input register

FC04

30001

Holding Register

FC03

Data

FC06

FC16

40001

*keterangan: FC15 maksudnya adalah function code 15 desimal atau 0F dlm hexa.

3. Byte Data
Jumlah Byte Data bervariasi tergantung jumlah data yg akan di tuliskan ke slave. Byte data berisi
alamat register, jumlah data, dan data yg akan ditulis. alamat register akan di jelaskan
kemudian.

4. eror check, CRC


Dua byte terakhir adalah byte CRC , byte ini digunakan untuk mendeteksi jika ada kesalahan pada
frame modbus .
Respon MODBUS Exception
Respon exeception adalah respon dari slave ketika terjadi keadaan tidak normal/error. Slave
menerima query , tetapi Slave tidak dapat menangani perintah tersebut, Slave akan mengirimkan
sebuah respon exception. frame respon jika terjadi kesalahan berbeda dgn frame dlm keadaan
normal.

Perbedaan frame modbus normal dan saat terjadi exception

Tabel Exception Code

Exception
Code

Nama exception

arti

01

ILLEGAL FUNCTION

function code salah

02

ILLEGAL DATA
ADDRESS

alamat register salah, misal slave


punya 100 register maka alamat
maximum adalah 99.

03

ILLEGAL DATA
VALUE

mengandung nilai data yg tdk


diizinkan untuk slave

04

SLAVE DEVICE
FAILURE

Slave gagal melaksanakan perintah


master

05

ACKNOWLEDGMENT

pemberitahuan ke master bahwa


pelaksanaan perintah akan memakan
waktu yg lama , sehingga bisa time out

06

SLAVE DEVICE
BUSSY

slave sidang sibuk, silahken kirim


perintah lain waktu
Specialized use in conjunction with function
codes
20 and 21 and reference type 6, to indicate
that
the extended file area failed to pass a
consistency

08

MEMORY PARITY
ERROR

check.

frame Respon exception yang akan di kirim oleh slave adalah :


alamat_slave- fuction code OR 80 exception code- CRC
contoh respon exception:

Untuk lebih memahami protokol modbus kita bisa perhatikan contoh contoh berikut ini:
contoh 1 : membaca isi input register 30001

sebuah Master meminta data isi 1 buah register input dari Slave dgn alamat 1. Fuction code 04
digunakan untuk membaca data register slave.
maka master akan mengirim query :
01 04 0000 0001 31CA
01 = Alamat Slave
04 = Function Code 04 (Perintah Membaca register input)
0000 = Alamat awal Data di register yg diminta (30001-30001=0)
0001 = Jumlah register yg datanya diminta
31CA = Nilai CRC
Slave dgn alamat 1 akan merespon dengan mengirim data ke master sbb:
01 04 02 0032 E4D2
artinya:
01 = Alamat dirinya / Slave 1
04 = Function Code 04
02 = jumlah byte data yg akan diberikan .
00 = data pertama
32 = data kedua
E4= CRC byte 2
D2 =CRC byte 1
Contoh 2 : membaca 2 buah holding register 40108 & 40109
alamat awal data di register 40108 -40001= 107 atau dlm bilangan hexa 006B
Master mengirim : 11 03 00 6B 00 02 47 B7,
artinya meminta data isi 2 buah register mulai dari alamat 006B , alamat slave 11H. nilai crc
47B7
(misal isi register di slave : 022b 0064)
Slave mengirim respon : 11 03 04 02 2b 00 64 A9 9B

Contoh 3. master menset coil


Untuk men set sebuah coil nomor 173 pada slave dgn alamat 17 (11H)
11 05 00AC FF00 4E8B
11: alamat slave(17 = 11 hex)
05: Function Code
00AC: alamat koil coil. (coil 173 1 = 172 = AC hex)
FF00: ( FF00 = ON, 0000 = OFF )
4E8B: CRC
Respon dari slave
11 05 00AC FF00 4E8B
11: alamat Slave (17 = 11 hex)
05: Function Code
00AC: alamat/nomor coil (coil 173 1 = 172 = AC hex)
FF00: status( FF00 = ON, 0000 = OFF )
4E8B: CRC

Contoh aplikasi penggunaan 4 jenis data modbus pada AVR microntroller sebagai slave:

Penjelasan gambar contoh di atas:


1. coil
disini digunakan untuk mengaktifkan relay dengan cara menulis FF00H register 00001 dan register
00008 . Untuk mematikan relay dgn cara menuliskan 0000H ke kedua register tsb.
Untuk mengetahui status apakah relay sedang menyala atau sedang mati kita bisa membaca
register 00001 dan register 00008.
2. Input digital /input diskrit (read only bagi master)
untuk input digital master hanya bisa mengetahui statusnya dan tdk bisa menulis ke input digital.
artinya pada contoh ini master tdk bisa memerintahkan slave untuk mengaktifkan switch. untuk
mengetahui status swtich sedang on atau off dengan cara membaca register 20001 dan 20002.
3. Input register (read only bagi master)
Pada contoh ini input register digunakan untuk menyimpan data hasil konversi ADC . Hasil konversi
bisa dibaca oleh master dan master tdk bisa merubah data register ini.
hasil konversi ADC chanel 0 (portA.0) disimpan di input register 30001

hasil konversi ADC chanel 2 (PortA.1) disimpan di input register 30002


dan seterusnya.
4. Holding Register
Pada contoh ini holsing register di gunakan untuk menyimpan input dari port B ketika port B sbg
input.
Holding register juga bisa digunakan untuk mengeluarkan data ke portB saat portB sebagai output.
Contoh master berupa PC dan slave microcontroller

master-slave-modbus

Modbus Protokol dan Serial Standard


December 6th, 2010Leave a commentGo to comments
Download article as PDF

Setelah saya mempelajari sistem SCADA secara umum


maka kemudian saya mempelajari dari masing-masing subsistemnya. dimulai dari bagaimana cara
kerjanya, bagaimana cara berkomunikasinya, bagaimana cara mengambil data dan lainnya. Sampai
akhirnya saya mempelajari Komunikasi Serial pada PLC dan bertemu dengan jenis-jenis standard
industri komunikasi serial dan juga standar industri protokol untuk komunikasi data.

Untuk komunikasi serial ada beberapa yang sering digunakan di


Industri, yaitu RS232, RS485, dan RS422. RS adalah singkatan dari Recommended Standard (klo di
kaskus Recommended Seller kali ya :p). Ketiga jenis RS tersebut merupakan physical layer
(Hardware) dari Layer pertama di OSI Model (Wikipedia: OSI Model) yang pada intinya pada phisycal
layer bagaimana hardware tersebut mengubah data menjadi sinyal elektrik dan juga sebaliknya
mengubah sinyal elektrik menjadi data. Setiap standard komunikasi serial masing masing memiliki
spesifikasi yang berbeda pada RS232 sinyal electric diayunkan pada tegangan +/- 12 Volt, +/- 5Volt,
dan +/- 3 Volt. pengkabelan memiliki minimal 3 kabel yaitu RX, TX, dan ground. dan panjang
maksimum kabel adalah 15 meter. Sedangkan pada RS485 tegangan yang digunakan adalah +/5Volt dimana sinyal di konversikan pada dua kabel + (A) dan kabel (B). Pada RS485 tidak
menggunakan ground maka dari itu RS485 dapat digunakan dengan kabel hingga 1200meter (1,2Km)
karena loss daya yang terjadi lebih kecil dan tidak terlalu berpengaruh karena tetap dapat terkonversi
sinyalnya. kemudian pada RS485 dapat multidrop atau dapat dicabangkan dengan beberapa
hardware.
untuk
melihat
perbedaan
RS232
dengan
RS485
dapat
dilihat
dihttp://en.wikipedia.org/wiki/RS-485 dan http://en.wikipedia.org/wiki/RS-232
Pada komunikasi serial yang digunakan pada PLC terdapat cara berkomunikasi / bahasa komunikasi
yang disebut protokol. protokol merupakan bahasa untuk saling berkomunikasi antar hardware pada
kasus ini PLC. Protokol standard yang sering digunakan pada PLC dalam berkomunikasi adalah
Modbus. sebuah protokol yang berada di layer ke 7 (Application Layer) dalam OSI model. Modbus
merupakan standar komunikasi bus yang dibuat oleh modicon yang memiliki open license yaitu boleh
digunakan oleh siapa saja. untuk penjelasan lebih lengkap mengenai modbus dapat dilihat
di www.Modbus.org.
nah
sekarang
bagaimana
modbus
itu
bekerja?
Kita bahas untuk modbus serial dulu. jadi modbus serial adalah komunikasi serial yang menggunakan

protokol
modbus.
pada komunikasi serial pengiriman data besarnya adalah 8 byte data atau istilah kasarnya adalah 8
frame data dalam 1x pengiriman.
[byte0] [byte1] [byte2] [byte3] [byte4] [byte5] [byte6] [byte7]
besarnya nilai data dalam 1 framenya adalah 2^8 = 256 (0-255). maka nilai terbesarnya adalah 256.
jika kita mengirimkan ASCII misalkan huruf A maka nilai yang digunakan sesuai ASCII table adalah
65.
pada modbus frame-frame tersebut diisi dengan kesepakatan tertentu. modbus Frame untuk request
dari master ke slave adalah:
[address RTU] [Function Code] [Reg] [Reg] [Lenght][Lenght] [CRC1] [CRC2]
keterangan:
Address RTU: merupakan address dari setiap RTU, jika alamat RTU yang direquest masuk ke RTU
sesuai maka RTU tersebut akan meresponnya dengan memberikan pesan balasan.
Function Code: merupakan jenis-jenis fungsi yang dapat digunakan yaitu,

01 Read Coil Status


02 Read Input Status
03 Read Holding Registers
04 Read Input Registers
05 Force Single Coil
06 Preset Single Register
07 Read Exception Status
08 Diagnostics
09 Program 484
10 Poll 484
11 Fetch Communication Event Counter
12 Fetch Communication Event Log
13 Program Controller
14 Poll Controller
15 Force Multiple Coils
16 Preset Multiple Registers
17 Report Slave ID
18 Program 884/M84
19 Reset Comm. Link
20 Read General Reference
21 Write General Reference
22 Mask Write 4X Register
23 Read/Write 4X Registers
24 Read FIFO Queue
Namun yang paling sering digunakan hanya yang saya tebalkan tulisannya diatas.

Reg: merupakan register yang ingin diambil nilainya..frame ini menggunakan 2 byte data. maka dari
itu nilai register bisa sampai 256*256 namun dibatasi dengan jumlah register yang tersedia.
Lenght: Merupakan jumlah register yang ingin direquest. ini juga menggunaka 2 byte frame seperti
register.
CRC1 dan CRC2: CRC adalah Cyclic Redundancy Check yaitu sebuah metode untuk pengecekan error.
CRC ini menggunakan 2 byte frame juga. untuk menghitung dan mengetahui lebih jelas CRC dapat
dilihat di CRC
view source print?

01.contoh fungsi untuk menghitung CRC


02.public static void GetCRC(byte[] message, ref byte[] CRC)
03.{
04.//Function expects a modbus message of any length as well as a 2 byte CRC array in which to
05.//return the CRC values:
06.ushort CRCFull = 0xFFFF;
07.byte CRCHigh = 0xFF, CRCLow = 0xFF;
08.char CRCLSB;</p>
09.for (int i = 0; i < (message.Length) - 2; i++)
10.{
11.CRCFull = (ushort)(CRCFull ^ message[i]);</p>
12.for (int j = 0; j < 8; j++)
13.{
14.CRCLSB = (char)(CRCFull &amp;amp;amp; 0x0001);
15.CRCFull = (ushort)((CRCFull >> 1) &amp;amp;amp; 0x7FFF);</p>
16.if (CRCLSB == 1)
17.CRCFull = (ushort)(CRCFull ^ 0xA001);
18.}
19.}
20.CRC[1] = CRCHigh = (byte)((CRCFull >> 8 ) &amp;amp;amp; 0xFF);
21.CRC[0] = CRCLow = (byte)(CRCFull &amp;amp;amp; 0xFF);
22.}
Modbus Message Respon

Pesan respon dari slave ke RTU memiliki sedikit perbedaan dengan request. untuk pesan Modbus dari
slave memiliki frame yang menyesuaikan jumlah data yang dikirimkan dimana setiap 1 data
menggunaka 2 byte frame. susunan nya adalah:
[RTU Address] [Function Code] [2*panjang data] [data] [data][data] [data] [CRC1]
[CRC2]
Contoh:
[MASTER] dimisalkan kita akan me-request ke slave dengan id 5, mengambil holding register di slave
dengan register 40001 sampai dengan 40004. maka bentuk pesannya:
dalam HEX
[05] [03] [00] [00] [00][04] [CRC1] [CRC2]
Penjelasan:
[05] : karena slave ID nya adalah 5
[03] : Karena me-request holding register (lihat di table function)
[00] [00] : karena 40001 adalah register pertama maka dimulai dari 0.
[00] [04] : karena ada 4 data yang akan di request 40001 40004
[CRC1] [CRC2] : Hasil CRC
dan kemudian Slave akan membalasnya dimisalkan register 40001 bernilai 7, 40002 bernilai 6, 40003
bernilai 5, dan 40004 bernilai 4. maka respon slave adalah:
[05] [03] [08] [00] [07][00] [06][00] [05] [00] [04] [CRC1] [CRC2]
Penjelasan:
[05]: Slave ID
[03] : Function (Read Holding Register)
[08] : 2 x jumlah data (2 x 4)
[00] [07]: nilai data di register pertama yang di request
[00] [06]:nilai data di register kedua yang di request
[00] [05]:nilai data di register ketiga yang di request
[00] [04]:nilai data di register keempat yang di request

[CRC1] [CRC2]: Hasil CRC nya

Sepintas Tentang Modbus


Modbus adalah salah satu protokol untuk komunikasi serial yang di
publikasikan oleh Modicon pada tahun 1979 untuk di gunakan pada
PLC Modicon (PLC pertama di dunia yang di kembangkan oleh
Schneider). Protokol ini menjadi standard komunikasi dalam industri
dan menjadi yang paling banyak dipakai untuk komunikasi antar
peralatan elektronik pada industri. Alasan utama mengapa Modbus
Protokol banyak di gunakan adalah:
1. DI publikasikan secara terbuka tanpa royalty fee untuk
penggunaannya.
2. Relatif mudah untuk di aplikasikan pada industrial network.
3. Modbus mempunyai struktur bit tanpa memiliki banyak larangan
bagi vendor lain untuk mengaksesnya.
Modbus digunakan untuk komunikasi antara devices yang terkoneksi
pada jaringan yang sama, misalnya untuk sebuah system yang
mengukur temperature, tekanan dsb kemudian mengkomunikasikan
hasilnya pada komputer. Modbus biasanya digunakan untuk
supervisory pada RTU (remote terminal unit( pada System SCADA.

2 Media Protokol
Media Modbus Protokol terbagi atas tiga yaitu Serial port dan
Ethernet port dan versi tambahan.
Kebanyakan Modbus devices berkomunikasi dengan serial RS485
Port.
Pada koneksi serial, ada dua varian yaitu Modbus RTU dan Modbus
ASCII, Modbus RTU menggunakan representasi bit pada pengiriman
datanya sedan Modbus ASCII menggunakan format data ASCII dalam
pengiriman datanya. Dode dengan varian ASCII tidak bisa
berkomunikasi dengan varian RTU dan sebaliknya.
Pada versi tambahan, ada jenis Modbus + (MB+). Modbus ini
memiliki kecepatan transfer data 1MBps tetapi merupakan
proprietary dari Modicon . Tidak seperti Modbus, MB+ harus
menggunakan media transfer spesial untuk komunikasinya.
3 Cara Komunikasi
Pada tiap modbus devices memiliki address yang unik dari 0 s/d
247. Pada komunikasi serial, hanya node yang di set master yang
bisa menginisiasi command kepada slave dengan address
tertentu( Slave ID). Tiap command mengandung data address dari
slave yang dituju, hanya slave dengan address yang dituju yang
akan merespond command tersebut.
4 Function Code
Function Code adalah bit dalam word yang dikirim ke node slave
untuk menyatakan slave akan di tulis atau dibaca pada tabel data
yang mana.
Function Code Action Table Name
01 (01 hex) Read Discrete Output Coils
05 (05 hex) Write single Discrete Output Coil
15 (0F hex) Write multiple Discrete Output Coils

02 (02 hex) Read Discrete Input Contacts


04 (04 hex) Read Analog Input Registers
03 (03 hex) Read Analog Output Holding Registers
06 (06 hex) Write single Analog Output Holding Register
16 (10 hex) Write multiple Analog Output Holding Registers