Menurut Wikipedia, Modbus RTU (Remote Terminal Unit) merupakan varian Modbus yang ringkas dan digunakan pada komunikasi serial. Format RTU dilengkapi dengan mekanisme cyclic redundancy error (CRC) untuk memastikan keandalan data. Modbus RTU merupakan implementasi protokol Modbus yang paling umum digunakan. Setiap frame data dipisahkan dengan periode idle (silent).
Kami cukup banyak pengalaman dengan protokol Modbus RTU. Aplikasi yang kami buat dulu (dengan VB6) diantaranya komunikasi ke Power Meter, Power Supply, Alat Ukur dan Sensor.
Pada kesempatan kali ini, kami akan bagikan sample projek VB6 untuk aplikasi komunikasi Modbus RTU. Projek ini sangat sederhana. Fungsinya hanya membaca dan menulis ke satu register Modbus RTU via port serial.
Berikut adalah tampilan Form dari projek Modbus RTU:
Perhatikan properties dari objek MSComm1. Ubahlah CommPort dengan port serial yang Anda hubungkan ke device Modbus. Sesuaikan juga Settings.
Pada properties objek timer TimerAuto, ubah Interval dengan nilai yang diinginkan (dalam milisecond).
Jalankan projek. Isilah alamat register yang akan dibaca kemudian klik tombol Read, maka nilainya akan ditampilkan pada textbox. Untuk menulis nilai ke register, isilah alamat register yang akan ditulis lalu isi nilai (value) yang diinginkan kemudian tekan tombol Write. Tombol Auto berfungsi untuk menjalankan timer, dimana nilai register akan
ditulis dengan nilai yang bertambah satu (1) setiap siklus waktu tertentu.
Demikianlah projek Modbus RTU Sample VB6, sangat sederhana kan? Namanya juga sample, hehe.. Tapi kami harap bisa bermanfaat untuk Anda.
Silahkan download source projeknya disini.
ada sample projek lain yang lebih canggih, silahkan download disini:
ReplyDeletehttp://www.modbus.pl/download/zxy66/v19/mbus.zip
Bagi yang mau versi VB.net nya, kami buat projek Modbus RTU dengan VS 2010 express. Silahkan unduh disini:
ReplyDeletehttp://goo.gl/NvAOhu
Semoga bermanfaat.
mas hadi, kalau protokol modbus pakai kabel serial rs232 atau pun modbus tcp untuk jenis dikomunikasikan misal ke PLC Omron kira-kira ribet ga ya? Kemudia untuk analog bisa ga?
ReplyDeleteSaya pengen belajar buat HMI dari VB kira2 mulai dari mana ya?
Thx
maaf, kami belum berpengalaman untuk PLC Omron. Kalau Omron sudah punya modul komunikasi yang support protokol Modbus, saya pikir tidak akan ribet.
Deletekami senang dengan keinginan mas Aan, silahkan mulai dari perangkat yang ada. misal ada PLC Omron ya mulai buat aplikasi VB yang bisa komunikasi dg PLC tersebut.
Semangat ya.. :)
mas hadi, saya menggunakan temperature controller autonics tzn4m, apakah komunikasi nya sama dengan program vb yg anda buat?
ReplyDeletesaya mencoba menggunakan program di atas untuk membaca temperature controller tetapi error di bagian
Index = CRC_High Xor Asc(Mid(DataCRC, i, 1))
bagian mana kah yg salah mas? saya menginputkan nilai desimal pada textbox txtReg.. terima kasih atas perhatiannya ^^
kami belum pernah mencoba/menggunakan Temperature controller Autonics tzn4m tersebut jadi kami belum tahu secara pasti apakah alat tersebut bisa berkomunikasi via Modbus RS232 atau tidak.
DeleteNamun, kami mencari manualnya di internet. Dari manual yg kami dapat, tidak ada informasi bahwa alat tersebut support Modbus. Jadi tidak bisa dikomunikasikan dengan aplikasi Modbus RTU ini.
Demikian dan terima kasih.
This comment has been removed by the author.
Deleteterima kasih atas balasannya..
ReplyDeletesaya melihat dari datasheet temperature controller Autonics tzn4m ini dilengkapi komunikasi sub-output dengan rs485.. bukannya rs485 support dengan modbus?
terima kasih atas perhatiannya.. ^^
maaf, mungkin manual yg kami baca tidak lengkap informasinya. Kalau memang support RS485 seharusnya bisa pakai aplikasi ini (Modbus RTU).
Deleteapakah pada datasheet tersebut disebutkan address mana saja yang bisa dibaca? karena (IMHO) biasanya untuk device seperti ini tidak semua address bisa dibaca. ada link ke file dtasheet tersebut?
maaf mas baru balas..
ReplyDeleteini mas link datasheetnya untuk autonics temperature controller tzn4m http://www.2shared.com/document/lGOBDlG2/TZN_datasheet.html
kalau menurut saya, ini autonics punya communication protocol sendiri..
mohon bantuannya.. thx
terima kasih. kami sudah download dan baca datasheet nya. tapi kami mohon maaf, kami belum punya pengalaman dengan device tersebut, dan setelah kami baca, memang interface komunikasi nya RS485, tapi protokol nya bukan Modbus. kami setuju dengan anda, device ini punya protokol sendiri. sepertinya anda harus pelajari lebih lanjut protokolnya dulu.
Deletedemikian.
This comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteSemua device Autonics menggunakan protokol komunikasi Modbus RTU, kecuali Temperatur control type Tz/TZN dan Pulse meteter type MP5W. Anda bisa mengunakan temperatur control typeTK4 series yg sudah menggunakan rotokol Modbus RTU. Bila anda perlu bantuan bisa hub saya via email : sbycs-ind@autonics.com. Anda juga bisa download Communication Manual nya di link berikut : http://www.autonics.com/products/products_detail_down.php?catecode=&db_uid=205
ReplyDeleteApabila menggunakan Protokol Modbus RTU dan memerlukan Fungsi Checksum Error -CRC16 , Function ini bisa anda gunakan, functin ini biasa saya masukan dalam Modul Class (VB6) , Semoga bermanfaat :
ReplyDeleteFunction CekCRC(Data) As String
Dim CRC, Poly As Long
Dim terima As String
terima = ""
For i = 1 To Len(Data) Step 2
terima = terima & Chr(Val("&h" & Mid(Data, i, 2) & "&"))
Next i
CRC = &HFFFF& '0
Poly = &HA001&
For i = 1 To Len(terima)
CRC = CRC Xor Asc(Mid(terima, i, 1))
For j = 1 To 8
Cek = CRC And 1
CRC = (CRC \ 2) 'And &H7FFF
If Cek = 1 Then
CRC = CRC Xor Poly
End If
Next
Next
CekCRC = Right("0000" & Hex(CRC), 4)
End Function
terimakasih atas masukkannya..
Deletesaya mau tanya.. apakah komunikasi tersebut menggunakan komponen MSComm saja? atau menggunakan komponen yang lain?
mohon bantuannya..
Ya....saya hanya menggunakan MsComm saja.
DeleteBerikut Contoh Metode Poling yg biasa saya pakai dengan Interval 250 milisecond.
ReplyDeletePrivate Sub Timer1_Timer()
' "Proses pengambilan Data sedang berlangsung, Tekan Tombol 'Change/Read Data untuk merubah Id,Function,Address, Number/Data"
On Error GoTo errhand
Dim yh(1000), j, i, k, l As Integer
Dim dataterima, datahex, ceker, ncrc, requestdata, datarequestdata As String
dataterima = MSComm1.Input
If dataterima <> "" Then
datahex = ""
For j = 1 To Len(dataterima)
datahex = datahex & IIf(Len(Hex(Asc(Mid(dataterima, j, 1)))) = 1, "0" & Hex(Asc(Mid(dataterima, j, 1))), Hex(Asc(Mid(dataterima, j, 1))))
Next
Text2.Text = CStr(datahex)
ceker = Mid(datahex, Len(datahex) - 3, 4)
ncrc = CekCRC(Mid(datahex, 1, Len(datahex) - 4))
If Right(ncrc, 2) & Left(ncrc, 2) = ceker Then
For k = 1 To Len(datahex)
yh(k) = Val("&h" & Mid(datahex, 7 + (k - 1) * 4, 4))
Text1(k - 1).Text = yh(k)
Next
For l = 1 To 96
uw(k - 1).Caption = "UW" & Val(alamat.Text)
Next
End If
End If
requestdata = Right("00" & Hex(slave.Text), 2) 'id
requestdata = requestdata & Right("00" & Hex(fungsi.Text), 2) 'function 4
requestdata = requestdata & Right("0000" & (Hex(alamat.Text)), 4) 'alamat
requestdata = requestdata & Right("0000" & Hex(jumlah.Text), 4) 'jumlah data
ncrc = CekCRC(requestdata)
requestdata = requestdata & Right(ncrc, 2) & Left(ncrc, 2)
For i = 1 To Len(requestdata) Step 2
datarequestdata = datarequestdata & Chr(Val("&h" & Mid(requestdata, i, 2) & "&"))
Next i
StatusBar1.Panels("Value").Text = "UW:" & alamat.Text & "-UW:" & (Val(alamat.Text) + Val(jumlah.Text - 1))
MSComm1.Output = datarequestdata
Terimakasih atas source codenya.. saya sudah jalankan untuk mengambil data digital counter type CT6Y, dan berhasil.. sekali lagi terimakasih mas.
DeleteNamun ada yang ingin saya tanyakan, bagaimana kita mengirimkan perintah melalui program kita ke digital counter tersebut untuk me-reset nilainya menjadi 0? Mohon bantuannya mas..
Salam,
Endang
Kami belum tahu spesifikasi device tersebut, tapi kami mengira, mungkin ada address di register tertentu yang difungsikan untuk mereset counter. Atau cara lain yaitu, jika register nilai count nya adalah tipe Read-write, bisa dicoba dg menulis register tsb dg nilai nol.
DeleteTapi itu hanya perkiraan kami, silahkan anda pastikan dg membaca datasheet dr device tersebut. Terima kasih.
Terimakasih atas respon-nya pak Hadi, spesifikasi device yang saya gunakan adalah DIGITAL COUNTER AUTONICS tipe CT6Y, saya ingin mereset nilai pada DIGITAL COUNTER tersebut menjadi 0.
Deletenamun cara mengirimkan nilainya, saya belum bisa,
RALAT..
DeleteBarusan udah bisa reset, dengan mengirim ke address = 1, function = 5, poin = -256
Terimakasih atas bantuannya..
Ok, sip. Terima kasih juga sudah berbagi. Sukses selalu.
Deletebs share contoh program buat baca modbus temperature control TK Series autonics. cz untuk tugas kuliah.
ReplyDeletetolong kirim ke fun_joe89@yahoo.co.id
trima kasih mas....
@ Autonics Surabaya , terima kasih banyak Pak atas komentar dan penjelasannya serta bantuan Source Code-nya. Kami sangat senang.
ReplyDeletepak, sy coba komunikasi power meter ION 6200 pake software bapak via Konverter RS485 to USB di windows 8.1 ga bisa ya pak..?
ReplyDeleteMas Hery,
Deletesaya belum pernah nyoba di Windows 8.1, juga belum nyoba power meter ION 6200, tapi ada beberapa hal yang saya sarankan untuk dicek/ditest:
- apakah instalasi driver RS485 ke USB sudah berhasil, ditandai dengan adanya port COM baru.
- apakah komunikasi ke Power meter sudah OK, coba cek di datasheet nya.
- apakah address yang dibaca sudah benar, cek juga di datasheet nya.
- apakah dicoba baca dengan software lain bisa.
Terima kasih.
COM port terbaca dan sy pakai modbus poll bisa connect tapi time out, jadi address yang dibaca "0" (nol) semua
ReplyDeleteMas Hery,
Deletejika memakai software lain juga bermasalah, berarti ada yang salah dengan Modbus server nya atau dengan Address nya..
Apakah address nya sudah benar? karena biasanya kalau salah address memang suka Time out.
Sepengalaman saya, addresnya harus ditambah 1. misal dari datasheet, KWH di addres 400000, maka dari software bacanya ke address 400001. coba saja Mas..
Salam.
I try to understand the Modbus & master-slave rs-485 & VB.net. But friends my head blown when I go for it. Can you give me some simple knowledge so I can carry ...
ReplyDeletePlease read this article, i think it is very helpful to understand Modbus, here:
Deletehttp://www.simplymodbus.ca/FAQ.htm
gan, apakah ada file sample yg sudah exe nya seperti gabar diatas?
ReplyDeleteada, silahkan unduh disini:
Deletehttps://www.4shared.com/file/pqAnQC_Qca/vb6_modRtu.html
Gan kalo kita mau menghitung jumlah pulse dari sensor proximity dalam setiap detik bisa dijelaskan caranya?
ReplyDeletedari proximity sensor kalo didekatkan logam nilainya 12, kalo dijauhkan nilainya 382. Misal kita mau menghitung/counting pulse berdasarkan perbedaan nilai tersebut dalam setiap detik bagaimana yah? apakah bisa langsung di modbus poll nya atau memang di programming VB nya? Terima kasih banyak :D
enaknya sih di VB nya, mas, bisa kita custom sesuai kebutuhan kita. kalau pake Modbus Poll kayaknya gak bisa.
DeletePermisi Gan, saya mau baca value di power meter Shihlin SPM-8 pake VB.net ini. Commportnya sudah benar setting sudah benar, cuma saat saya masukin adressnya (register(modicon format = 34107 Hex format 100A), begitu saya read tidak keluar valuenya?..problemnya dimana ya gan?
ReplyDeleteterimakasih
sepertinya alamat registernya yg kurang tepat.. cek lagi address itu masuk tipe Holding Register atau Analog Input register.. coba juga projek2 Modbus RTU lain di blog ini.
Deleteterima kasih.
Maaf , Saya maau baca data tegangan METSEPM5330 dengan VB6 # dari tabel Register
ReplyDeleteVoltage A-N 3028
Voltage B-N 3030
Voltage C-N 3032
Voltage N-G 3034
data yg keluar 37569 padahal fasa R sudah saya isi tegangan 220 Volt , mohon pencerahan
tipe datanya mungkin salah, harusnya Float
Deleteiya pak setelah saya coba di projeck bapak yang lain , bisa berjalan lancar # terimakasih pak tutorialnya sangat membantu # sukses untuk bapak
ReplyDeletealhamduliLLAAH.. aamiin.. semoga sukses juga. terima kasih.
DeleteTerimakasih sharing ilmunya, sangat bermanfaat
ReplyDeleteterima kasih postingannya sangat bermanfaat mas.
ReplyDeletemas hadi punten apakah punya contoh program modbus rs485 vb6 yg berkomunikasi dengan mikrokontroler atmega 16 pakai program BASCOM AVR?
klo program VB nya ya sama saja dg program Modbus RTU yg lain, tinggal program di sisi mikro nya saja
Deletemas mau tanya saya mau membaca input registers tapi saat dijalankan aplikasi modbus rtu diatas tidak bisa ada error nya, itu kenapa ya mas?
ReplyDelete