BAB 2 LANDASAN TEORI
2.1
Teori Umum Pada sub bab ini akan dijelaskan teori-teori umum yang secara mendasar
berhubungan dengan kontrol dan pengawasan multi genset berbasis protokol Modbus via jaringan lokal (LAN).
2.1.1
Model OSI Model OSI merupakan model arsitektur jaringan yang mendeskripsikan
bagaimana data dan informasi network dikomunikasikan dari sebuah aplikasi pada komputer ke sebuah aplikasi pada komputer lain melalui media, seperti kabel. Model OSI mendeskripsikan ini semua dengan menggunakan pendekatan layer. OSI bukanlah suatu model yang berbentuk fisik melainkan sebuah panduan bagi pembuat aplikasi agar bisa membuat dan mengimplementasikan aplikasi yang bisa berjalan di jaringan. OSI terdiri atas tujuh layer yang terbagi menjadi dua group, yaitu empat layer teratas ( disebut sebagai host layer ) mendefinisikan aplikasi berkomunikasi dengan user dan tiga layer dibawahnya ( disebut sebagai media layer ) mendefinisikan bagaimana data dipindahkan antar media.
6
7
Gambar 2.1 Gambar Model OSI
2.1.1.1 Layer Application Layer Applicaton pada model OSI merupakan tempat dimana user berinteraksi dengan komputer ( user interface ). Layanan-layanan yang terdapat pada layer ini adalah World Wide Web (WWW), email gateway, electronic data interchange, layanan transaksi financial, dan lain sebagainya.
2.1.1.2 Layer Presentation Layer presentation berfungsi untuk menyajikan data ke layer application dan bertanggung jawab pada penerjemahan data dan format kode (program).
8 2.1.1.3 Layer Session Layer session bertanggung jawab untuk membentuk, mengelola, dan kemudian memutuskan session-session antar layer-layer presentation. Layer session juga melakukan koordinasi komunikasi antar sistem-sistem dan mengorganisasi komunikasinya dengan mode simplex, half duplex, dan full duplex. Layer session pada dasarnya menjaga terpisahnya data dari aplikasi yang satu dengan data dari aplikasi yang lain.
2.1.1.4 Layer Transport Layer transport melakukan segmentasi dan menyatukan kembali data yang tersegmentasi tersebut menjadi sebuah data. Pada layer transport, terdapat layanan-layanan transportasi data dari ujung ke ujung (end to end) dan dapat membuat sebuah koneksi logikal antara host pengirim dan host tujuan pada sebuah internetwork. Protokol TCP (layanan yang reliable ) dan UDP terdapat pada layer ini.
2.1.1.5 Layer Network Layer network bertugas untuk mengelola pengalamatan peralatan, melacak lokasi peralatan di jaringan, dan menentukan cara terbaik untuk memindahkan data, artinya layer ini harus mengangkut lalu lintas antar peralatan (routing). Router berada pada layer Network.
9 2.1.1.6 Layer Data Link Layer data link berfungsi untuk menyediakan transmisi fisik dari data dan menangani notifikasi error, topologi jaringan, dan flow control. Layer data link membuat data menjadi pecahan-pecahan data (disebut sebagai data frame) dan menambahkan sebuah header yang terdiri dari alamat perangkat keras tujuan dan asal.
2.1.1.7 Layer Physical Layer physical berfungsi untuk melakukan komunikasi langsung dengan berbagai jenis media komunikasi. Layer ini juga tempat mengidentifikasikan interface antara DTE (data terminal equipment) dan DCE (data communication equipment).
2.1.2 TCP dan UDP TCP (Transmission Control Protocol) dan UDP (User Datagram Protocol) merupakan protokol yang juga berada pada layer 4 dari OSI layer. TCP bersifat connection oriented, sedangkan UDP yang bersifat connectionless. Connection oriented adalah koneksi virtual circuit dihubungkan diantara kedua belah pihak sebelum transfer data dimulai dan diterminasi setelah transfer data selesai. UDP tidak menggunakan acknowledgement dan metode windowing sehingga pengiriman data dengan protokol ini menjadi tidak terjamin.
10 2.1.3
Standar Komunikasi Serial RS-232 merupakan standar komunikasi data serial yang paling populer di dunia
komputer dan industri, karena pada komputer pasti terdapat RS-232. Namun, RS-232 memiliki keterbatasan dalam hal kecepatan (maksimum 20 Kbps) dan jarak transmisi (maksimum 50 feet). Untuk mengatasi kelemahan-kelemahan ini, kemudian ditemukan standar baru dengan kemampuan melebihi RS-232, salah satunya adalah metode differensial data transmision.
2.1.3.1 Standar RS-232 RS-232 merupakan standar komunikasi serial yang dikeluarkan oleh EIA (Electronic Industries Association) sekitar tahun 1962. RS-232 merupakan komunikasi data serial dengan mode operasi single end. Single end merupakan standar komunikasi data dari satu transmiter ke satu receiver. RS-232 juga merupakan komunikasi serial dengan mode asinkron. Mode asinkron merupakan mode komunikasi yang pengiriman tiap bit data dilakukan tanpa menggunakan sinkronisasi clock. Sinyal RS-232 memiliki karakteristik, yaitu tegangan diatas +3 volt, maka dianggap logic ’O’ (Low), sedangkan untuk tegangan dibawah -3 volt, maka akan dianggap logic ’1’ (High). Tegangan serial pada PC adalah tegangan +12 volt dan dianggap sebagai logic ’0’ (Low) dan tegangan -12 dianggap sebagai logic ’1’ (High). RS-232 memiliki kecepatan transfer maksimum 20 Kbps dan jarak transmisi maksimum 15 meter.
11 2.1.3.2 Standar RS-485 RS-485 merupakan standar komunikasi serial yang dapat menutupi kelemahan dari standar-standar komunikasi sebelumnya. RS-485 menggunakan metode differensial data transmision. RS-485 merupakan perkembangan dari RS-422, dimana RS-422 juga merupakan pengembangan dari RS-232. Namun, RS-422 memiliki kelemahan tidak dapat mendukung jaringan multidrop yang sesungguhnya karena hanya mempunyai satu driver dan sisanya receiver, sedangkan pada RS-485 sudah mampu mendukung hingga lebih dari 32 transceiver. RS-485 memiliki kemampuan kecepatan transmisi data 100 Kbps pada jarak 1200 meter sampai dengan 35 Mbps pada jarak 12 meter.
2.1.3.3 Mode RS-485 RS-485 dapat digunakan dalam 2 mode, yaitu bi-directional half-duplex (Two Wire Multidrop Network) dan full-duplex (Four Wire Multidrop Netwrok). Mode bi-directional half-duplex biasanya digunakan pada aplikasi sederhana dimana data hanya dapat mengalir ke satu arah pada suatu saat. Sedangkan fullduplex digunakan untuk aplikasi yang membutuhkan komunikasi data yang banyak, membutuhkan Multidrop Network, dan mendukung aliran data secara terus-menerus dalam dua arah sekaligus. Mode bi-directional half-duplex menggunakan satu pasang kabel dan full-duplex menggunakan dua pasang kabel.
12 2.1.3.4 Terminasi Pada RS-485 Pada kondisi tertentu RS-485 membutuhkan terminasi akibat dari transisi yang cepat, data rate yang tinggi, atau kabel yang panjang. Reflection dapat terjadi ketika suatu sinyal memasuki medium yang berbeda, maka menimbulkan sinyal yang dipantulkan dan ada yang diteruskan. Pada RS-485 terdapat beberapa jenis terminasi dimana bergantung pada jarak antar perangkat dan data rate. Jenis-jenis terminasi adalah sebagai berikut : •
Jenis pertama adalah tidak ada terminasi (no termination). Digunakan jika jarak antar perangkat sangat dekat dan data rate rendah.
•
Jenis kedua adalah menghubungkan sebuah resistor secara paralel diantara pasangan konduktor pada bagian paling ujung dari jaringan multidrop. Nilai resistor harus sesuai dengan karakteristik impedansi dari media transmisi ( umumnya sekitar antara 100 Ω sampai 120 Ω ).
•
Jenis ketiga adalah menghubungkan resistor dan kapasitor secara seri kemudian rangkaian RC dihubungkan secara paralel diantara pasangan konduktor pada bagian paling ujung dari jaringan multidrop. Jenis ini digunakan bila ingin meminimalisasikan disipasi daya, tetapi sebagai akibatnya efek lowpass akan menyebabkan data rate menurun.
•
Jenis keempat adalah terminasi fail safe bias. Jenis ini merupakan terminasi yang paling terkenal dan terbaik karena terminasi ini menjaga kondisi tegangan antara A dan B tetap pada tegangan 200mV.
13 2.1.3.5 Kelebihan RS-485 Dari RS-232 Pada dunia industri, RS-485 memiliki kelebihan dibandingkan dengan RS-232. Kelebihan RS-485 dibandingkan RS-232 adalah sebagai berikut : •
RS-485 dapat menghubungkan antar DTE (data terminal equipment) secara langsung tanpa membutuhkan modem.
•
RS-485 dapat menghubungkan beberapa DTE sampai dengan 256 DTE dalam sebuah struktur jaringan.
•
RS-485 dapat berkomunikasi pada jarak jauh (1200 meter).
•
RS-485 memiliki kemampuan bit rate yang cepat. Bit rate pada RS-485 dapat mencapai 35 Mbps. Namun, bit rate ini bergantung pada panjang kabel yang digunakan. Semakin panjang kabelnya, maka bit rate yang dapat digunakan akan semakin lambat.
•
RS-485 memiliki ketahanan terhadap noise yang lebih baik bila dibandingkan dengan RS-232.
Tabel 2.1 Karakteristik RS-232, RS-422, dan RS-485
14 2.2
Teori Khusus Pada sub bab ini akan dijelaskan mengenai teori-teori khusus yang berkaitan
dengan kontrol dan pengawasan multi genset berbasis protokol Modbus via jaringan lokal (LAN).
2.2.1
Protocol Modbus Modbus merupakan sebuah protokol yang telah distandarisasi bagi interkoneksi
mesin industri dimana Modbus menyediakan komunikasi client-server antara berbagai perangkat yang dihubungkan pada tipe network yang berbeda. Modbus melakukan komunikasi melalui sebuah protokol request and reply dan memberikan service berupa function code. Protokol Modbus digunakan dalam berbagai media komunikasi antara lain : •
Komunikasi TCP/IP lewat ethernet
•
Komunikasi Serial Asynkronous lewat EIA/TIA-232, EIA/TIA- 485
•
Komunikasi Token Passing Network
Gambar 2.2 Gambar Komunikasi Modbus
15 2.2.1.1 Konteks Protokol Modbus Protokol Modbus menyediakan komunikasi dalam semua jenis arsitektur jaringan. Setiap jenis device (PLC, HMI, Control panel, Driver, I/O Device) dapat menggunakan protokol Modbus untuk mengirim suatu data.
Gambar 2.3 Gambar Modbus dalam arsitektur jaringan
2.2.1.2 Deskripsi Protokol Modbus secara umum Protokol Modbus menterjemahkan sebuah Protocol Data Unit (PDU) yang secara independent pada layer komunikasi. Namun, dalam suatu jaringan tertentu frame dari Modbus bertambah 2 field, tambahan 2 field dari PDU sehingga disebut sebagai Application Data Unit (ADU).
16
Gambar 2.4 Gambar Frame data Modbus Application Data Unit (ADU) ini dihasilkan oleh client yang mengirim sebuah Modbus transaction ke server, kemudian server akan menerima Modbus transaction dan membaca data tersebut sehingga server mengetahui perintah apa yang harus dijalankan. Field Function code merupakan data sebesar 1 byte yang berisi sebuah kode dalam kisaran 1 sampai 255 dalam bentuk desimal. Pada saat paket data dikirim dari Client ke Server, Function code akan memberitahu isi dari kode desimal tersebut pada server perintah apa yang akan dijalankan. Bila Function code bernilai “0”, maka nilai tersebut tidak Valid. Jika Function code menterjemahkan lebih dari satu perintah, maka Sub-Function code yang akan membantu Function code dalam menterjemahkan perintah - perintah tersebut. Field Data berisi informasi tambahan untuk server dalam mengartikan Function code. Data ini dapat berisi alamat register, berapa banyak device yang harus di kontrol, dan besarnya data tersebut. Field data dapat tidak ada isinya atau kosong, dalam kasus ini berarti server tidak memperlukan informasi tambahan dalam mengartikan Function code tersebut. Apabila tidak ada error pada saat mengartikan function code, maka Server akan mengirim kembali paket data yang berisikan Function code dan respon data ke Client sebagai indikator bahwa paket tersebut sudah diartikan
17 oleh server. Apabila terjadi error pada saat mengartikan function code, maka Server akan mengirim paket data yang berisikan Field Exception Function code dan Field Exception Code ke Client untuk memberitahukan bahwa error terjadi dan server akan menentukan sendiri langkah apa yang akan diambil berikutnya dalam Exception Code.
Gambar 2.5 Gambar Modbus Transaction Error Free
Gambar 2.6 Gambar Modbus Transaction Exception response
18 2.2.1.3 Data Encoding Modbus menggunakan ordering “Big-Endian” pada alamat dan data. Data sebesar 2 byte pada ordering “Big-Endian”, maka byte yang paling kiri / MSB (Most Significant Byte) akan dikirim terlebih dahulu baru byte berikutnya dikirim. Sebagai contoh : Register size
Value
16-bits
0x1234
Byte yang dikirim pertama adalah 0x12, lalu 0x34
2.2.1.4 Modbus Data Model Modbus Data Model memiliki 4 tabel utama yang memiliki karakteristik sebagai berikut :
Tabel 2.2 Tabel Utama Modbus Data Model
Pada setiap tabel utama, protokol menyediakan 65536 data seleksi, dan perintah dari read / write didesain untuk merentangkan deretan data kesimpulan yang dilihat dari function code.
19 2.2.1.5 Implementasi Modbus Data Model Contoh 1 : Device yang memiliki 4 block yang tersebar dalam memory
Gambar 2.7 Gambar Device yang memiliki 4 Blok dalam Memory Contoh diatas memperlihatkan tabel utama disebarkan dalam memory yang berlainan tempat dan tidak berhubungan antara 1 blok dengan blok yang lain.
Contoh 2 : Device yang memiliki 1 block dalam memory
Gambar 2.8 Gambar Device yang memiliki 1 Blok dalam Memory Pada contoh kedua, tabel utama ditempatkan pada satu tempat pada memory.
20 2.2.1.6 Struktur Message Modbus Cara Modbus untuk berkomunikasi adalah dengan menggunakan Message. Message pada Modbus ini dapat dikirim pada beberapa jenis interface fisik ( Physical Layer pada OSI Layer ) yang digunakan, seperti interface RS232 dan interface RS-485. Oleh karena itu, protokol Modbus memberikan kemudahan untuk meng-upgrade struktur hardware dari jaringan industri tanpa membutuhkan perubahan besar pada software yang digunakan. Pada interface RS-232 dan interface RS-485 Message Modbus dikirim dalam bentuk yang sederhana lewat jaringan. Modbus dapat juga menggunakan jaringan yang lebih kompleks, seperti TCP/IP. Melalui jaringan TCP/IP Message Modbus tertanam dalam paket-paket dengan format yang sesuai untuk interface fisik. Walaupun struktur utama dari pengiriman Message Modbus itu peer-to-peer, Modbus dapat juga berjalan baik itu point-to-point maupun jaringan multidrop. Message pada Modbus mempunyai struktur yang sama dimana dibagi menjadi 4 buah elemen, yaitu Device address ( Additional Address ), Function code, Data, dan Error check. Urutan dari keempat elemen ini sama untuk semua Message pada Modbus. Sebuah komunikasi selalu dimulai dari sebuah Master di dalam jaringan Modbus. Sebuah Master mengirim sebuah Message dan sebuah Slave melakukan suatu tindakan / merespon. Biasanya tergantung dari isi dari Message tersebut. Pengalamatan pada header dari Message sangat penting dimana digunakan untuk menentukan device/slave (dalam hal ini
21 genset) yang seharusnya merespon Message tersebut dan device/slave lain mengabaikan Message tersebut jika tidak sesuai dengan alamatnya sendiri. Field
Description
Device address
Address of the receiver
Function code
Code defining Message type
Data
Data block with additional information
Error check
Numeric check value to test for communication errors Tabel 2.3 Struktur Message pada Modbus
2.2.1.7 Pengalamatan Modbus Informasi pertama dari setiap Message pada Modbus adalah alamat dari penerima Message tersebut. Parameter ini mengandung 2 byte informasi dimana pada Modbus/ASCII dikodekan dengan dua karakter hexadesimal, tetapi pada Modbus/RTU digunakan satu byte. Alamat yang digunakan mempunyai jangkauan dari 0 sampai dengan 247. Nilai dari 1 sampai dengan 247 digunakan untuk menunjuk device-device Modbus secara individu, sedangkan 0 digunakan sebagai alamat broadcast dimana Message yang dikirim akan diterima semua device /slave. Sebuah device/slave selalu merespon Message dari master dengan cara mengirim balik menggunakan alamat seperti alamat yang digunakan untuk permintaan dari master sehingga master dapat melihat device/slave tersebut langsung merespon.
22 2.2.1.8 Function code dari Modbus Function code berguna untuk mendefinisikan jenis Message dan jenis respon yang harus dilakukan oleh slave, contohnya untuk membaca isi data dari sebuah kumpulan register, untuk mendiagnosa status dari slave, dan lain sebagainya.
Parameter
ini
mengandung
satu
byte
informasi.
Pada
Modbus/ASCII parameter ini menjadi dua karakter hexadesimal, tetapi pada Modbus/RTU hanya digunakan satu byte. Function code yang digunakan secara umum pada device Modbus mempunyai jangkauan antara 1 sampai dengan 255, tetapi tidak semua code akan digunakan pada modul dan beberapa code disiapkan untuk kebutuhan yang akan datang.. Ketika slave dari Modbus merespon, slave ini pasti akan menggunakan Function code yang sama seperti yang diminta dari master dimana untuk menunjukkan sebuah respon normal atau telah terjadi kesalahan (error). Akantetapi, ketika terjadi kesalahan (error), maka bit paling tinggi (MSB-most significant bit) dari Function code akan menyala (bernilai logik 1), sedangkan jika slave/device merespon tanpa error, maka slave tersebut akan mengembalikan sama seperti code yang dikirim. Hal ini sangat berguna dimana master dapat melihat perbedaan antara respon yang sukses dan yang gagal. Perintah Report Slave ID dan Reset Slave tidak dioperasikan pada peta register.
23 CODE
FUNCTION
REFERENCE
01 (01H)
Read Coil (Output) Status
0xxxx
02 (02H)
Read Discrete Input
0xxxx
03 (03H)
Read Holding Registers
4xxxx
04 (04H)
Read Input Registers
3xxxx
05 (05H)
Write Single Coil (Output)
0xxxx
06 (06H)
Write Single Register
4xxxx
08 (08H)
Reset Slave
Hidden
15 (0FH)
Write Multiple Coils (Outputs)
0xxxx
16 (10H)
Write Multiple Registers
4xxxx
17 (11H)
Report Slave ID
Hidden
Tabel 2.4 Tabel Standar Modbus Function code
Beberapa penjelasan dari Function code yang umum digunakan : Function code 01 : Read Coil Status Perintah ini berguna untuk membaca status ON/OFF output diskrit atau coil (kumparan) pada slave. Mode pangalamatan broadcast tidak dapat digunakan, hanya dapat menggunakan struktur query untuk satu device/slave dalam suatu waktu. Function code digunakan untuk membaca dari 1 sampai dengan 2000 status coil pada slave. Permintaan PDU menetapkan alamat awal, contohnya alamat pada coil pertama ditetapkan. Pada PDU, coil mulai dialamatkan dari 0 (nol). Oleh karena itu, coil dengan nomor 1-16 dialamatkan pada 0-15. Coil-coil pada Message respon dipaketkan sebagai satu coil tiap bit
24 data. Status ditandai dengan 1 untuk ON dan 0 untuk OFF. LSB pada byte data pertama berisi alamat output pada query. Coil-coil yang lain mengikuti secara berurutan menuju ke urutan akhir yang paling tinggi dan dari urutan bawah ke urutan tinggi pada byte-byte yang berurutan. Jika output yang dikembalikan bukan merupakan kelipatan 8, maka sisa bit pada byte data akhir akan diisi dengan nilai 0 (nol).
Tabel 2.5 Tabel Function code 01
Ketika menerima sebuah Message dengan fungsi 01, maka slave akan mengumpulkan semua nilai output yang dibutuhkan dan menyusun sebuah Message jawaban. Panjang dari Message ini tergantung dari besar nilai yang
25 hars dikembalikan. Pada umumnya, ketika N diminta, maka sejumlah ((N+7) mod 8) byte harus disimpan.
Function code 02 : Read Discrete Input Pembacaan nilai input dengan Modbus sama saja dengan pembacaan status coil. Perbedaannya hanya terletak pada fungsi 02 yang digunakan. Mode pangalamatan broadcast tidak dapat digunakan, hanya dapat menggunakan struktur query untuk satu device/slave dalam suatu waktu. Jumlah dari inputinput harus diletakkan dalam data-field dari pertanyaan Message.
Tabel 2.6 Tabel Function code 02
26 Setelah menerima Message dengan fungsi 02, slave meletakkan input yang diminta pada struktur Message dan mengirim kembali ke master Modbus. Panjang dari Message bergantung pada jumlah nilai input yang dikembalikan.
Function code 03 : Read Holding Register Function code ini digunakan untuk membaca isi dari blok register pada device. Permintaan PDU menetapkan alamat awal, contohnya alamat pada coil pertama ditetapkan. Pada PDU, coil mulai dialamatkan dari 0 (nol). Oleh karena itu, coil dengan nomor 1-16 dialamatkan pada 0-15. Data register pada Message respon dipaketkan sebagai dua byte tiap register dengan isi biner rata kanan pada setiap byte. Untuk setiap register, byte pertama mengandung urutan byte yang tinggi dan byte kedua mengandung urutan byte yang rendah.
Tabel 2.7 Tabel Function code 03
27 Isi register 108 ditunjukkan sebagai nilai 2 byte dari 02 2B dalam hexadesimal atau 555 dalam desimal. Sedangkan, isi register 109-110 adalah 00 00 dan 00 64 dalam hexadesimal atau 0 dan 100 dalam desimal
Function code 01 - 03 memiliki struktur query dan struktur jawaban yang sama. Byte
Value
Description
1
1...247
Slave device address
2
3
Function code
3
0...255
Starting address, high byte
4
0...255
Starting address, low byte
5
0...255
Number of registers, high byte
6
0...255
Number of registers, low byte
7(...8)
LRC/CRC
Error check value
Tabel 2.8 Tabel Function 03 Struktur query
Byte
Value
Description
1
1...247
Slave device address
2
1
Function code
3
0...255
Number of data bytes N
4...N+3
0...255
Bit pattern of coil values
N+4(...N+5)
LRC/CRC
Error check value
Tabel 2.9 Tabel Function 01 Struktur Jawaban
28 Function code 04 : Read Input Registers Function code ini digunakan untuk membaca dari 1 sampai mendekati 125 register input pada sebuah device. PDU yang diminta menetapkan alamat coil untuk ditekan. Coil-Coil tersebut dimulai dari nol. Oleh karena itu, register input mempunyai nomor 1-16 dialamatkan 0-15. Data register pada Response Message dipaketkan menjadi dua byte tiap register dengan isi biner rata kanan pada setiap byte. Untuk setiap register, byte pertama mengandung urutan bit yang tinggi dan byte kedua mengandung urutan bit yang rendah.
Tabel 2.10 Tabel Function code 04
29 Function code 05 : Write Single Coil Function code ini digunakan untuk menulis output tunggal ke ON/OFF pada device. Keadaan ON/OFF yang diminta ditetapkan oleh permintaan data yang tetap. Nilai FF00 hexadesimal meminta output pada posisi ON. Nilai 0000 Hexadesimal meminta pada posisi OFF. Semua nilai yang lain tidak akan mempengaruhi output. PDU yang diminta menetapkan alamat coil untuk ditekan. Coil-Coil tersebut dimulai dari nol. Oleh karena itu, coil nomor 1 dialamatkan sebagai 0. Keadaan ON/OFF yang diminta ditetapkan oleh permintaan nilai coil yang tetap. Nilai 0xFF00 meminta coil untuk ON. Nilai 0x0000 meminta coil OFF. Semua nilai yang lain tidak akan mempengaruhi coil.
Tabel 2.11 Tabel Function code 05
30 Function code 06 : Write Single Register Function code ini digunakan untuk sebuah single holding register pada device. PDU yang diminta menetapkan alamat coil untuk ditekan. Coil-Coil tersebut dimulai dari nol. Oleh karena itu, coil nomor 1 dialamatkan sebagai 0.
Tabel 2.12 Tabel Function code 06
Function code 15 : Write Multiple Coils Function code ini digunakan untuk memaksa setiap coil pada sebuah urutan coil ke posisi ON atau OFF pada device. PDU yang diminta menetapkan alamat coil untuk ditekan. Coil-Coil tersebut dimulai dari nol. Oleh karena itu, coil nomor 1 dialamatkan sebagai 0. Keadaan ON/OFF yang diminta ditetapkan oleh permintaan nilai coil yang tetap. Sebuah logik 1 pada posisi bit
31 berhubungan dengan output untuk menjadi ON. Sebuah logik 0 meminta output untuk menjadi OFF.
Tabel 2.13 Tabel Function code 15
Function code 16 : Write Multiple Registers Function code ini digunakan untuk menuliskan sebuah blok register kontinu ( 1 sampai sekitar 120 register ) pada device. Nilai permintaan yang ditulis, dikhususkan pada permintaan data. Data dipaketkan menjadi 2 byte tiap register.
32
Tabel 2.14 Tabel Function code 16
Function code 17 : Report Slave ID Function code ini digunakan untuk membaca penjelasan dari tipe, status arus, dan informasi spesifik lainnya ke master device.
33
Tabel 2.15 Tabel Function code 17
2.2.1.9 Cara Baca Perintah dari Program dan Respon Device Berikut ini merupakan contoh perintah dan respon device (genset) serta cara baca baik perintah dari program maupun respon device : •
Perintah dari program : 0a 03 03 06 00 01 65 34 0a
: slave address
03
: function code 03 ( Read Holding Register )
03
: first register address ( High Byte )
Æ page number
06
: first register address ( Low Byte )
Æ register offset
00
: number of register ( High Byte )
01
: number of register ( Low Byte )
65 34 : error check (CRC)
34 Respon dari device : 0a 03 02 00 00 1d 85 0a
: slave address
03
: function code 03
02
: byte count
00
: first register address ( High Byte )
00
: first register address ( Low Byte )
1d 85 : error check (CRC)
•
Perintah dari program : 0a 03 08 00 00 21 86 C9 0a
: slave address
03
: function code 03 ( Read Holding Register )
08
: first register address ( High Byte )
Æ page number
00
: first register address ( Low Byte )
Æ register offset
00
: number of register ( High Byte )
21
: number of register ( Low Byte )
65 34 : error check (CRC)
Respon dari device : 0a 03 42 00 56 10 0f 00 11 01 11 11 11 10 ff f0 f1 11 0f 10 10 00 00 00 f0 00 11 11 01 18 80 f1 11 00 10 00 00 00 00 00 ff ff ff 11 10 11 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff c1 db 0a
: slave address
03
: function code 03
42
: byte count
00
: first register address ( High Byte )
35 56
: first register address ( Low Byte )
10
: second register address ( High Byte )
0f
: second register address ( Low Byte )
… ff
: last register address ( High Byte )
ff
: last register address ( Low Byte )
c1 db : error check (CRC)
•
Perintah dari program : 0a 10 10 08 00 02 04 8b 74 74 8b 16 74 0a
: slave address
10
: function code 10 ( write mutiple register )
10 08 : starting address 00 02 : quantity of register 04
: byte count
8b 74 : value of register 10 08 74 8b : value of register 10 09 16 74 : error check ( CRC )
36 Respon dari device : 0a 10 10 08 00 02 c5 b1 0a
: slave address
10
: function code 10
10 08 : starting address 00 02 : quantity of register c5 b1 : error check (CRC)
2.2.2
Windows Sockets Network Programing (Winsock) Pada saat ini, telah diketemukan sebuah metode programming yang dapat
menyederhanakan proses pembuatan aplikasi client-server, salah satu metode itulah yang disebut dengan socket programming. Salah satu socket programming yang sering dikenal adalah Winsock. Winsock bertugas untuk menjembatani antara layer 7 OSI model dengan layer di bawahnya, sehingga saat pengiriman data, developer tidak perlu merepotkan dirinya untuk memikirkan bagaimana mengenkapsulasi data agar data tersebut dapat dikirim oleh network. (MSDN Library)
37
Gambar 2.9 Gambar Hubungan antara Aplikasi, Winsock, dan Layer Network
Gambar di atas menggambarkan bagaimana hubungan antara aplikasi, Winsock, dan Network Layer. Winsock yang dikenal sekarang ini terdapat 2 versi, yaitu versi 1 (versi lama) dan versi 2 (versi baru). Winsock v.2 memiliki full backwards
38 compatibility dengan Winsock v.1 ditambah dengan berbagai kemampuan baru di berbagai area seperti : ∗
Akses ke dalam protokol selain TCP/IP : Winsock 2 memperbolehkan sebuah aplikasi untuk menggunakan socket interface yang telah akrab digunakan untuk memperoleh akses tak terbatas ke berbagai transport protocol.
∗
Protocol independent name resolution facilities : Winsock 2 memiliki berbagai set standar API untuk mengirim data dan bekerja dengan berbagai name resolution domain seperti DNS, SAP, X.500 , dll.
∗
Quality of service : Winsock 2 mengadakan sebuah konvensi untuk aplikasi yang bertujuan untuk menegosiasikan tingkat service yang dibutuhkan seperti bandwith, dan latency.
∗
Protocol independent multicast and multipoint : aplikasi dapat menemukan apa tipe dari multicast yang dimiliki oleh transport layer dan menggunakannya dalam pemograman.
Winsock sudah terdapat dalam sebuah file DLL (dynamic link library), yaitu Winsock.dll dan bisa digunakan dengan berbagai macam bahasa pemograman. Dalam penelitian ini, Winsock.dll ini tidak akan digunakan secara langsung. Penelitian ini akan menggunakan microsoft visual basic 6 dan fungsi Winsock API akan dibantu dengan microsoft Winsock control 6.0 (mswinsck.ocx). Microsoft Winsock control (selanjutnya kita sebut dengan Winsock saja) merupakan sebuah komponen yang terdapat dalam microsoft visual basic yang mampu
39 untuk menyederhanakan fungsi dari Winsock API, sehingga penulisan socket programming menjadi makin mudah.
2.2.2.1 Menggunakan Winsock Control dalam Client/server application Winsock control dapat membantu programmer untuk mendesain sebuah aplikasi client-server. Microsoft telah menggabungkan Winsock dan NETAPI API menjadi sebuah komponen Winsock control yang dapat dengan mudah diimplementasikan ke dalam aplikasi visual basic sehingga menggunakan TCP/IP menjadi amat mudah.
2.2.2.2 Mode Operasi Winsock Transport layer bertanggung jawab untuk menyediakan session dan komunikasi data. Protokol utama pada transport layer sendiri terdiri dari TCP dan UDP (User Datagram Protocol). TCP merupakan sebuah koneksi yang connection oriented sementara UDP merupakan sebuah koneksi yang connectionless. TCP mampu memberikan keamanan dan kepastian dalam pengiriman data, karena selalu terdapat error checking dalam TCP, tetapi setiap client harus membentuk sesi yang lebih memakan bandwith. UDP memiliki keunggulan dimana sesi hanya dilakukan pada saat pengiriman data terjadi, kelemahannya adalah dari segi keamanan, tidak ada reply yang diberikan oleh penerima sehingga rentan terhadap error. Akantetapi, kelemahan UDP ini sebenarnya
bisa
ditutup
dengan
algoritma
pemrograman
yang
baik.
Winsock control memiliki mode operasi yang mencakup kedua protokol transport tersebut, yaitu :
40 o sckTCPprotocol o sckUDPprotocol
2.2.2.3 Winsock properties Winsock memiliki beberapa property yang penting untuk diingat bila seorang developer ingin melakukan socket programing dengan Winsock. Property itu antara lain : o Bytes Received Property Property yang mengembalikan jumlah byte yang sedang berada di dalam buffer penerima. Merupakan property yang bersifat read-only dan hanya tersedia dalam fase design. Nilai yang dikembalikan adalah long-integer. o Local Host Name Property Property yang mengembalikan nama dari local host (Komputer lokal) . Merupakan property yang bersifat read-only dan hanya tersedia dalam fase design. Nilai yang dikembalikan adalah string. o
Local IP Property Property yang mengembalikan alamat IP dari local host (Komputer lokal) seperti 11.0.0.127. Property ini bersifat read only dan hanya tersedia dalam fase design. Nilai yang dikembalikan adalah string.
o Local Port Property Property ini mengembalikan atau mengeset nomor port lokal. Merupakan property bersifat read and write dan tersedia dalam fase design maupun fase run. Nilai yang dikembalikan adalah long-integer.
41 o Protocol Property Mengembalikan atau mengeset protokol yang digunakan oleh winsock control, seperti TCP atau UDP. o Remote Host Property Property yang mengembalikan atau mengeset remote host. Merupakan property yang bersifat Read and write dan tersedia dalam fase design maupun fase run. Nilai yang dikembalikan adalah sring dan dapat diisi dengan nilai IP address atau DNS name. o
Remote Port Property Property ini mengembalikan atau mengeset nilai remote port.
o State Property Property ini mengembalikan status dari winsock control. Merupakan property read-only dan tidak tersedia pada fase design. .
2.2.2.4 Winsock Methods Selain property, Winsock juga memiliki metode tertentu untuk melakukan berbagai kegiatan, metode ini seringkali dianggap sebagai event dalam VB. Metode-metode Winsock yang sering digunakan, antara lain : o Accept Method Metode yang digunakan untuk menerima permintaan koneksi dari client. Agar event ini bisa digunakan, control harus berada dalam listening state. o Close Method Metode yang digunakan untuk mengakhiri sebuah koneksi TCP baik dari aplikasi client ataupun server.
42 o Get Data Method Metode yang digunakan untuk menarik paket data yang sedang berada dalam buffer dan menyimpannya ke dalam variabel yang bertipe variant. o
Peek Data Method Metode yang berfungsi sama dengan event GetData hanya saja metode ini tidak menghapus data dari buffer.
o Listen Method Digunakan oleh aplikasi server untuk membuat aplikasi menunggu permintaan koneksi TCP dari client. o Send Data Method Metode yang berfungsi untuk mengirim data ke remote computer (dari client ke server dan sebaliknya). Digunakan baik oleh client dan server. o Connect Method Metode yang digunakan untuk melakukan permintaan koneksi ke remote computer.
Berikut ini merupakan contoh coding client server application dengan menggunakan Winsock control dalam VB. Terdapat 2 aplikasi yang akan dihasilkan, yaitu server application dan client application.
Server application Dim strData As String ' string for received data
Private Sub Form_Load()
43 sock(0).Protocol = sckTCPProtocol ' choose the TCP protocol sock(0).LocalPort = Txtport1.Text
' an example port number
sock(0).Listen
' tell Winsock to start listening
sock(1).Protocol = sckTCPProtocol ' choose the TCP protocol sock(1).LocalPort = Txtport2.Text ' an example port number sock(1).Listen ' tell Winsock to start listening End Sub “inisialisasi program, program akan menggunakan 2 buah Winsock control. Saat protokol TCP dipilih maka Winsock harus dibuat selalu listen ke port apakah ada permintaan request.
Private Sub sock_ConnectionRequest(index As Integer, ByVal requestID As Long) If index = 0 Then If sock(0).State = sckListening Then ' if the socket is listening sock(0).Close
' reset its state to sckClosed
sock(0).Accept requestID
' accept the client
End If End If “Bila ada permintaan koneksi maka function ini akan berjalan. Cek apakah Winsock sedang dalam keadaan listen, bila ya maka tutup Winsock dan terima koneksi. Bila saat ada permintaan, tetapi Winsock dalam keadaan tertutup maka koneksi tidak akan terjadi sampai Winsock berada dalam keadaan listen lagi.
44
If index = 1 Then If sock(1).State = sckListening Then ' if the socket is listening sock(1).Close ' reset its state to sckClosed sock(1).Accept requestID ' accept the client End If End If End Sub
Private Sub txtMe_Change() For n = 0 To 1 If sock(n).State = sckConnected Then ' if there is a connection sock(n).SendData txtme.Text ' send data to the other side End If Next End Sub “Jika Winsock berada dalam keadaan Connected maka kirim data dalam txtbox “txtme”. Untuk mengirim data kita hanya perlu untuk menggunakan perintah sock.senddata.
' insert this line into (General)
Private Sub sock_DataArrival(index As Integer, ByVal bytesTotal As Long)
45 If index = 0 Then sock(0).GetData strData ' load received data into strData Txtother(0).Text = strData ' show new string End If “Function ini akan berjalan bila Winsock mendeteksi adanya kedatangan data ke dalam buffer. Selanjutnya data dapat diambil melalui perintah Winsock.getdata ke variabel strdata. If index = 1 Then sock(1).GetData strData ' load received data into strData Txtother(1).Text = strData ' show new string End If End Sub
Private Sub sock_Close(index As Integer) If index = 0 Then sock(0).Close ' has to be called sock(0).Listen ' listen again End If
If index = 1 Then sock(0).Close ' has to be called sock(0).Listen ' listen again End If End Sub
46 “Function ini akan dijalankan bila Winsock mendeteksi perintah tutup koneksi dari client. Winsock akan menutup koneksi (state berubah dari connected menjadi closed) kemudian dibuat agar Winsock kembali mendengar permintaan koneksi.
Private Sub sock_Error(index As Integer, ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) MsgBox "Socket Error & Number & : & Description" ' show some "debug" info If index = 0 Then sock(0).Close ' close the erraneous connection sock(0).Listen ' listen again End If “Fungsi ini akan berjalan apabila terdapat error dalam pengoperasian Winsock If index = 1 Then sock(0).Close ' close the erraneous connection sock(0).Listen ' listen again End If End Sub
47 Client application Dim strdata As String
Private Sub cmdCon_Click() If sock.State = sckClosed Then ' if the socket is closed sock.RemoteHost = Txtip.Text ' set server adress sock.RemotePort = Txtport.Text ' set server port sock.Connect ' start connection attempt Else ' if the socket is open sock.Close ' close it (user disconnected) End If End Sub “Client akan mengecek kondisi dahulu apakah dia sudah connected atau belum, bila belum ia akan melakukan koneksi bila sudah maka ia akan memutuskan koneksi. Untuk mengadakan koneksi maka kita perlu untuk memasukkan ip host server / hostname server ke dalam property sock.remotehost, kemudian tentukan port yang didengarkan oleh server. Sock.connect untuk mengambil inisiatif koneksi.
Private Sub sock_Close() sock.Close ' has to be called End Sub “Function ini akan dijalankan bila Winsock mendeteksi pemutusan koneksi.
48 Private Sub sock_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) MsgBox "Socket Error & Number & : & Description" ' show some "debug" info sock.Close ' close the erraneous connection End Sub “Error handling yang serupa dengan error handling server.
Private Sub sock_DataArrival(ByVal bytesTotal As Long) sock.GetData strdata ' load received data into strData Txtother.Text = strdata ' show new string End Sub
Private Sub txtMe_Change() If sock.State = sckConnected Then ' if there is a connection sock.SendData Txtme.Text ' send data to the other side End If End Sub
49
Gambar 2.10 Gambar GUI Coding Client-Server
Program di atas membutuhkan komponen mswinsck.ocx dalam folder system32 windows agar dapat dirun dengan benar. Program ini juga menggunakan protokol TCP, bila program ingin dijalankan dalam protokol UDP maka sebenarnya pemograman menjadi makin mudah, karena Winsock tidak memiliki kewajiban untuk berada dalam kondisi listen lagi. Data bisa langsung dikirimkan tanpa menginitiate connect / disconnect.
Berikut ini merupakan contoh pemograman VB Winsock control dengan protokol UDP.
Private Sub Form_Load() ' The control's name is TCPPeerA With udpPeerA ' IMPORTANT: be sure to change the RemoteHost ' value to the name of your computer. .RemoteHost= "PeerB" .RemotePort = 1001
' Port to connect to.
50 .Bind 1002
' Bind to the local port.
End With frmPeerB.Show
' Show the second form.
End Sub
Private Sub txtSend_Change() ' Send text as soon as it's typed. udpPeerA.SendData txtSend.Text End Sub
Private Sub udpPeerA_DataArrival _ (ByVal bytesTotal As Long) Dim strData As String udpPeerA.GetData strData txtOutput.Text = strData End Sub
Dalam program di atas, tidak perlu memiliki sesion untuk melakukan koneksi data. Namun, port yang digunakan untuk komunikasi lebih baik dikunci untuk mencegah terjadinya error karena port digunakan program lainnya. Perintah untuk mengunci port dalam VB adalah bind( ).
2.2.3
Sejarah Deep Sea Electronics Plc Deep Sea Electronics Plc didirikan pertama kali di Inggris pada awal tahun
1970. Deep Sea Electronic Plc merupakan perusahaan electronic yang khusus dalam mendisain dan membuat sistem kontrol untuk daya/listrik pada industri serta sistem pengawasan. Pada tahun 2001, Deep Sea Electronic Plc membuka cabang di negara
51 Amerika dimana sekarang ini menjadi pusat dari penjualan dan pembuatan produk Deep Sea Electronic di Amerika dan Kanada. Perusahaan ini juga mempunyai distributor utama yang tersebar di 51 negara di dunia, termasuk di Indonesia.
2.2.3.1 Modul 5510 Deep Sea Electronics Plc
Gambar 2.11 Gambar Modul 5510
Modul 5510 (controler genset) berfungsi untuk mengatur dan membaca status dari genset. Modul 5510 juga dapat mengirim status dari genset tersebut ke komputer melewati komunikasi serial RS-232 dan RS-485. Namun, pada penelitian, digunakan RS-485 untuk mengirim status genset ke komputer. Modul 5510 ini merupakan kontroler genset dengan memiliki kemampuan sebagai berikut : o Memiliki kemampuan remote start controller. o Comprehensive instrumentation and monitoring of the engine and genset. o Dapat dikonfigur dengan menggunakan program komputer pada OSWindows.
52 o Dapat melakukan komunikasi serial ( RS-232 dan RS-485 ) dan P810 serta dapat dihubungkan dengan modem untuk dikontrol melewati internet. o Kompatibel dengan banyak tipe mesin elektronik ( seperti Volvo, Scania, Perkins, dan lain sebagainya ). o Kapasitas load sharing sampai 16 set dan tidak diperlukan modul interface tambahan 5510 dan AVR. o Integral Loss of mains detection ketika diparallel dengan utility supply o Integral Loss of Excitation detection.