Modbus Sample VB
Ini adalah sebuah
projek VB.Net untuk membaca dan menulis register Modbus TCP.
Awalnya saya mencari contoh program VB.Net untuk komunikasi Modbus TCP. Kemudian saya menemukan contoh projek di situs CodeProject.com tepatnya disini :
sebuah projek VB.Net
untuk komunikasi Modbus TCP dengan bahasa C#, karya Stephan Stricker.
Yang jadi masalah adalah saya terbiasa dengan bahasa VB, sehingga saat melihat source code dari projek tersebut saya jadi bingung. Ini sangat penting karena dari projek sample ini akan saya kembangkan lebih lanjut untuk projek yang lain, dan saya terbiasa dengan bahasa VB.
Maka dengan alasan itulah saya ingin melakukan konversi projek ini dari bahasa C# ke VB.
Saya kemudian
mencari translator dari C# ke VB di Google dan mendapatkan tool yang bagus di situs
DeveloperFusion.com tepatnya disini :
Di projek Modbus asli
terdapat 2 projek. Saya buka satu persatu dan ubah source code-nya dengan tool
diatas.
Kemudian saya buat projek baru dengan bahasa VB, framework saya pilih .NET 2.0. Projek baru ini saya kasih nama Modbus Sample VB.
Di projek baru ini saya buat satu projek saja yang terdiri dari satu form dan satu modul. Class ModbusTCP saya pindahkan ke module ModbusTCP, dan semua objek di frmStart saya copy dan paste di form frmStart di projek baru saya.
Source code untuk projek baru ini saya ambil dari hasil translasi tool diatas. Hebat sekali dari banyak baris code hanya beberapa yang error.
Gambar dibawah ini menunjukan baris code yang bermasalah di module ModbusTCP, event OnReceive, pada code ElseIf…. Saya belum tahu karena apa dan harus diapakan. Untuk sementara ini saya ubah menjadi Else saja.
Di form frmStart ada
banyak yang diperbaiki. Imports yang
tidak perlu saya jadikan remark, dan Imports
ModbusTCP saya ganti dengan Imports
Modbus_Sample_VB.ModbusTCP.
Namespace dan End Namespace saya remark dan semua baris code diantara deklarasi variable data dan even frmStart_Load saya remark. Seperti pada gambar dibawah.
Di event button btnConnect juga ada yang diperbaiki.
Ada satu warning, yang menurut saya bisa diabaikan.
Dan jadilah aplikasi Modbus TCP client dengan bahasa VB.
Saya Run dan coba konek ke Modbus Simulator dengan IP local 127.0.0.1. berhasil melakukan Read dan Write.
Ini adalah tampilan software Modbus Simulator
Dan ini adalah tampilan Modbus Sample VB
Siang mas,,,
ReplyDeleteSaya ingin belajar Sistem SCADA mas,ya ingin belajar cara untuk men design system SCADA,
yang harus saya pelajari apa ya mas,?
Kalau saya baca dari artikel2 di internet termasuk Blog mas juga,
banyak sekali istilah2 yang saya belum begitu paham, seperti:
1. Modbus
2. OPC
3. TCP/IP
4. VB & C#
itu masing2 kegunaannya bagaimana mas,?
kalau secara garis besar saya sudah mengerti,
hanya secara khusus masih bingung,
Contoh, ada komunikasi pakai Modbus, Profibus, Ethernet, FO, TCP/IP
itu perbedaannya dimana ya mas,
bisa minta tolong dijelaskan?
Terimaksih,
Mas Deni,
Deletesaya senang dengan keinginan Mas untuk mempelajari sistem SCADA.
ada penjelasan bagus disini :
http://mokoraden.blogdetik.com/2009/09/05/teknik-automasi-apa-sih-sebenarnya/
juga disini :
http://id.wikipedia.org/wiki/Elektronika_dan_instrumentasi
juga ada forum untuk saling bertanya tentang dunia automasi, disini :
http://www.kaskus.co.id/post/000000000000000032741372#post000000000000000032741372
untuk lebih mendalami dunia automation sebaiknya terjun langsung (bekerja) di dunia tersebut, biasanya sebagai Automation Engineer. karena kita akan dihadapkan langsung dengan perangkat-perangkat dan proses automasi.
semoga membantu.. :)
terimakasih link nya mas,,
DeleteBtw, emang sih harus terjun langsung kedalam dunia Autoamsi, sayang nya saya hanya sebagai maintenance di pabrik mas, jadi jarang sekali berhubungan dengan automasi, hanya maintenance nya saja,
skrng sedang cari2 loncatan ke automation or instrumetn sih,
oh iya mas, kalau dalam pemrograman PLC,
itu ada bilangan Bool, int, real, word, double word, dll,
itu fungsi dari setiap masing2 bilangan apa ya mas,???
kapan kita menggunakan bool, kapan menggunakan int, dll,
mohon pencerahannya mas,
terimakasih,
Mas Deni,
Deleteyang ditanyakan itu adalah Tipe Data. Jenis2 tipe data ada banyak berdasarkan jumlah bit dan formatnya.
> BOOL (Boolean atau BIT) : 1 bit. rentang nilai: 1 atau 0.
> BYTE : 8 bit. rentang nilai: 0 - FF hexa ( 0 - 255 decimal).
> WORD : 16 bit atau 2 Byte. nilai: 0 - 65535 dec.
> INT (integer signed) : 16 bit. nilai: -32768 - +32767 dec.
> UINT (unsigned integer) : 16 bit. nilai: 0 - 65535 dec.
> DINT (double integer) : 32 bit.
> DWORD (Double Word) : 32 bit atau 2 Word atau 4 byte.
> REAL (floating, berkoma) : 32 bit.
penggunaannya disesuaikan dengan kebutuhan. Jika kita hanya butuh 1 bit (nilainya 1 dan 0 saja) maka pakailah tipe data BOOL. Jika kita butuh 8 bit pakailah BYTE. Jika butuh angka desimal dengan tanda (negatif posistif) maka gunakan INT. Kalau nilainya lebih dari batas INT maka pakai UINT atau WORD jika tak perlu pakai tanda, jika perlu pakai tanda gunakan tipe DINT. Jika bilangan berkoma (floating), gunakan tipe REAL.
untuk lebih jelas, silahkan baca di sumber ini:
http://faisalaahamad.blogspot.com/2013/06/tipe-data-plc.html
there is a problem when trying to Read and Write address more than Integer limit (32767).
ReplyDeleteOn function CreateReadHeader and CreateWriteHeader There is a problem when convert Start Address to byte, in this line of code :
Dim _adr As Byte() = BitConverter.GetBytes(CShort(IPAddress.HostToNetworkOrder(CShort(startAddress))))
data(8) = _adr(0)
' Start address
data(9) = _adr(1)
' Start address
I solved my problem with this edited code :
'Dim _adr As Byte() = BitConverter.GetBytes(CShort(IPAddress.HostToNetworkOrder(CShort(startAddress))))
data(8) = startAddress \ 256 ' _adr(0)
' Start address
data(9) = startAddress Mod 256 ' _adr(1)
' Start address
Thanks..
i found a bug,
ReplyDeleteeverytime i connect to Modbus Server (in my case is simulator Mod RS Sim), its build double connection.
after i check the code, there is a double connect request. So I remove this one:
Connect synchronous client
other bug is when change data type. in example from Word to Byte. It is not directly change the displayed data in register.
So edit som code and this problem solved.
I convert this project to VS Express.
and the download link has been updated to latest project.
Regards.
Please see here for Modbus TCP with VB6 project :
ReplyDeletehttp://hadiscada.blogspot.com/2013/12/modbus-tcp-dengan-vb6.html
mas, kelihatannya script ini hanya bisa dipakai untuk baca data byte ya, hanya 8 bit saja yg bisa dibaca. sedangkan saya perlu read/write data word (16 bit). Ada solusi?
ReplyDeletepada Modbus, Each register is 1 word = 16 bits = 2 bytes.
Deletemungkin maksud Mas mau Double Word (DWORD) ya?
semoga link berikut bisa berguna:
http://www.freevbcode.com/ShowCode.asp?ID=8271
http://modbus.control.com/thread/1026194580
Mas, gmn kalau modbus rtu, bukan modbus tcp? Thanks
ReplyDeletesilahkan baca disini:
Deletehttp://hadiscada.blogspot.co.id/2016/06/modbus-rtu-client.html
iya Mas, kalau menggunakan protokol Modbus TCP, port 502 harus di-open dulu agar bisa berkomunikasi.
ReplyDeletecaranya bisa lewat Windows Firewall. atau coba saja di-matikan dulu Windows Firewall nya.
siang mas, saya coba download programnya tapi bingung cara pakainya, caranya baca register gmn ya? seperti 400001, apa di data exchange start address itu diisi 400001, atau gmn?
ReplyDeletekalau address yg ingin dibaca adalah 400001 maka cukup isi 1 pada Start Address.
DeleteKalau addressnya 50011 start addressnya brp mas? Cara menentukan start address dimulai dari brp bagaimana mas? terus jumlah size itu maksudnya jml register atau apa yah?
DeleteMisalnya saya mau baca nilai pd address :
50011 dan 50013 yg msg-msg memiliki 2 register caranya bagaimana mas?
maaf koreksi, di aplikasi ini sy pakai index register bukan address register, jadi dimulai dari 0 bukan 1. pada Holding register index 0 berarti/sama dengan 40001.
Deleteaddress 50011 aneh, karena tidak ada alamat dengan awalan 5xxx, Holding register pake awalan 4xxx. coba cek lagi alamat nya.
DeleteSebelumnya terima kasih telah share semua tutorial ini mas, tapi saya punya pertanyaan..
ReplyDeletesaya kalau pakai tcp yang dari situs http://www.windmill.co.uk/serial.html di bagian gambar ada bagian prompt itu saya isi spt ini mas
01 03 00 00 00 4C 44 3F dan akan di respon dengan jawaban >50 textbox, nah software ini biar bisa baca support kayak gitu gimana ya? mengingat di tutor ini hanya support 3 textbox inputan aja..
btw ini project untuk baca modbus tcp kwh meter, kalo software bawaannya ada tapi saya pngn bikin versi saya sendiri dengan beberapa pengembangan.. sebelumnya terima kasih mas. ditunggu :)
textbox2 itu sepertinya untuk menunjukkan byte2 data yang dikirim da diterima. klo di project kami diatas tidak ditampilkan byte2 komunikasinya, langsung ditampilkan saja nilainya.
Deletesebenarnya mau dibuat seperti apapun bisa mas, terserah programmer nya, yg penting cara komunikasinya sdh bisa.
terima kasih.
mas hadi, kalau Slave adress / RTU adress nya = 10 gimana ya ?
ReplyDeleteisi di textbox Unit nya 10
DeleteMas Hadi, ini saya sudah download program dari mas, nah saya mau nyambung kan ke PLC S7 1200 kira" gmna ya
ReplyDeletesetting PLC nya agar menjadi Modbus TCP server. caranya gimana? itu bagian programming PLC, bukan disisi VB nya. coba saja cari di internet, sy pikir banyak.
Deleteklo PLC sudah menjadi Modbus Server, baru bisa diakses oleh aplikasi ini.
Mas, kalau saya ingin modifikasi ketika tombol ditekan dia sudah mengirimkan data ke plc untuk menghidupkan output. kira kira code mana yang harus saya rubah ya?
ReplyDeletecoba lihat script pada tombol Write Single Coil..
DeleteUntuk mengambil angka tertentu dari sebuah PLC konsep dasarnya spt apa Pak? Di manual yang saya miliki structurnya spt ini :
ReplyDeleteAddress(byte) Function Code (Byte) data (n byte) dan CRC (2 bytes). Model komunikasinya modbus TCP/IP. Ketika saya menggunakan aplikasi yang Bapak buat, terus koneksi ke IP addressnya sudah berhasil. Namun di aplikasi tsb kan kita diminta untuk memasukkan unit,start address dan size. Lalu pertanyaannya adalah bagaimana cara saya menentukan unit,start address dan size tsb Pak? Karena saya masih bingung ketika membaca manual dari PLC tsb.
Unit adl slave id dari alatnya, biasanya 0 atau 1 atau 255.
DeleteStart address adl index alamat register yang ingin dibaca. mulai dari 0.
Size itu adl banyaknya register yang ingin dibaca.
Hi, do you a sample using 2 slaves?
ReplyDeleteHi, sorry i dont have.
Deleteyou can modify by yourself.
maybe you can see here:
Deletehttps://hadiscada.blogspot.com/2021/04/sharing-sourcecode-modbus-tcp-multi.html
Maaf mas adakah sampel untuk Modbus TCP yg bisa baca data float , terimakasih bantuanya # huda.swd@gmail.com
ReplyDeletemungkin bisa lihat2 disini pak:
Deletehttps://hadiscada.blogspot.com/2021/08/sharing-sourcecode-modbus-float.html