Anda di halaman 1dari 49

Modul Praktek SCADA

Create by :
Muhammad Hidayat ST.,MT.
Bayu Ramadhan

KONSENTRASI MEKATRONIK
PROGRAM STUDI TEKNIK PRODUKSI DAN PROSES
MANUFAKTUR

Politeknik Manufaktur Astra


2016
DAFTAR ISI
DAFTAR ISI..............................................................................................................................1
PENGANTAR............................................................................................................................3
Apa itu SCADA?....................................................................................................................3
Tools For SCADA...................................................................................................................3
A. SCADA Hardware...................................................................................................3
B. SCADA Software.....................................................................................................4
HOW TO COMMUNICATE...................................................................................................5
Modbus Protocol................................................................................................................5
Jenis Modbus..........................................................................................................................7
Modbus TCP/IP......................................................................................................................7
Function Code......................................................................................................................10
MODUL 1................................................................................................................................11
PENGENALAN APB SOFTWARE (PLC).............................................................................11
MODUL 2................................................................................................................................14
PROGRAM VISUAL STUDIO (APBSCADA) : CONNECT TO PLC.................................14
MODUL 3................................................................................................................................20
APBSCADA : READ INPUT PLC..........................................................................................20
MODUL 4................................................................................................................................30
APBSCADA : READ OUTPUT PLC......................................................................................30
MODUL 5................................................................................................................................32
APBSCADA : READ MEMORY PLC....................................................................................32
MODUL 6................................................................................................................................34
APBSCADA : READ REGISTER PLC..................................................................................34
MODUL 7................................................................................................................................37
APBSCADA : WRITE MEMORY PLC..................................................................................37
MODUL 8................................................................................................................................42
APBSCADA : WRITE REGISTER PLC.................................................................................42
Tugas !......................................................................................................................................47

2
PENGANTAR

Apa itu SCADA?

SCADA (kependekan dari Supervisory Control And Data Acquisition) adalah sistem
kendali industri berbasiskomputer yang dipakai untuk pengontrolan suatu proses, seperti:
proses industri: manufaktur, pabrik, produksi, generator tenaga listrik.
proses infrastruktur: penjernihan air minum dan distribusinya, pengolahan limbah,
pipa gas dan minyak, distribusi tenaga listrik, sistem komunikasi yang kompleks,
sistem peringatan dini dan sirine
proses fasilitas: gedung, bandara, pelabuhan, stasiun ruang angkasa.
Beberapa contoh lain dari sistem SCADA ini banyak dijumpai di lapangan produksi
minyak dan gas (Upstream),Jaringan Listrik Tegangan Tinggi dan Tegangan Menengah
(Power Transmission and Distribution) dan beberapa aplikasi yang dipakai untuk memonitor
dan mengontrol areal produksi yang cukup luas.
Suatu sistem SCADA biasanya terdiri dari:
antarmuka manusia mesin (Human-Machine Interface)
unit terminal jarak jauh yang menghubungkan beberapa sensor pengukuran dalam
proses-proses di atas
sistem pengawasan berbasis komputer untuk pengumpul data
infrastruktur komunikasi yang menghuhungkan unit terminal jarak jauh dengan sistem
pengawasan, dan
PLC atau Programmable Logic Controller

Tools For SCADA

Tools untuk sebuah sistem SCADA harus terdiri dari hardware dan software.

A. SCADA Hardware
Sebuah sistem SCADA tediri dari beberapa buah RTU (Remote Terminal Unit)
yang digunakan sebagai tempat pengumpulan data dan pengiriman data kembali ke
master station via sistem komunikasi.

3
Hardware pada SCADA biasanya terdiri dari:

1. Perangkat kendali dan instrumentasi level pada lapangan


2. Terminal terminal yang telah tersusun dan beberapa RTU
3. Sistem komunikasi
4. Master station
5. Sistem komputer bagian pengolahan data komersil

Pada Modul Praktikum SCADA menggunakan APB PLC sebagai controller,


APB EX-Net digunakan sebagai gateway, input menggunakan push button dan output
menggunakan lampu sebagai indicator.

B. SCADA Software
Perangkat lunak yang digunakan oleh SCADA dibagi menjadi dua tipe yaitu
proprietary dan terbuka. Perusahaan mengembangkan perangkat lunak proprietary
untuk berkomunikasi dengan perangkat kerasnya. Masalah utama dengan sistem ini
adalah kepercayaan berlebihan terhadap penyedia sistem.

Sistem perangkat lunak terbuka memiliki kepopuleran yang meningkat karena


interopability yang mereka bawa ke dalam sistem. Interopability adalah kemampuan
untuk mencampurkan peralatan / perangkat fabrikasi yang berbeda ke dalam suatu
sistem yang sama. Karena itu diperlukan sebuah sistem protokol yang sama.

Pembelajaran SCADA yang akan kita pelajari adalah sistem perangkat lunak
terbuka, dimana kita bisa menggunakan hardware manapun yang kita inginkan untuk
dapat membuat sebuah sistem SCADA.

Fitur utama dari perangkat lunak SCADA adalah:

1. User Interface
2. Tampilan grafis
3. Alarm
4. Trend
5. Interface RTU (dan PLC)
6. Akses ke data
7. Database
8. Jaringan
9. Redundansi toleransi kesalahan (apabila tidak menggunakan TCP/IP)

4
HOW TO COMMUNICATE

Hal yang paling penting dalam SCADA adalah networking. Bagaimana hardware dan
software dapat saling berkomunikasi dan terintegrasi. Sebelum membuat aplikasi SCADA hal
yang harus sangat diperhatikan adalah komunikasi dari sistem SCADA itu sendiri.

Modul Praktikum SCADA menggunakan sistem komunikasi modbus dalam jaringan


TCP/IP (Transmission Control Protocol / Internet Protocol) sehingga sering disebut
MODBUS TCP/IP. Penggunaan MODBUS TCP/IP yang sudah banyak di industri membuat
kami menggunakan komunikasi ini sebagai acuan pembelajaran.

Modbus Protocol
Modbus adalah protokol komuniksi serial yang dipublikasikan oleh Modicon pada
tahun 1979 untuk dipublikasikan ke dalam Programmable Logic Controller (PLC). Modbus
sudah menjadi standar protokol yang umum digunakan untuk berkomunikasi dengan
peralatan elektronik industri. Beberapa alasan mengapa protokol ini banyak digunakan, antara
lain :

Modbus dipublikasikan secara terbuka (Modbus IDA org)


Mudah digunakan dan dipelihara

Modbus TCP/IP di dalam aplikasinya sudah mengambl alih error checking, ini
merupakan sifat dari TCP/IP yang dibentuk dalam blok yang ungu seperti terlihat pada
figure1. Dengan kata lain aplikasi Modbus TCP/IP jauh lebih mudah.

Figure 1Tingkatan Komunikasi Modbus

5
Untuk mengaplikasikan Modbus TCP/IP di dalam jaringan yang berbeda beda (RS-
485, RS-232) dibutuhkan gateway sehingga arsitektur jaringan bisa terlihat seperti pada
figure2.

Figure 2 Contoh Arsitektur Jaringan dari Modbus

Setiap Modbus memiliki frame. Figure 3 menunjukkan frame untuk Modbus (Modbus
RTU), frame pada setiap Modbus dapat disebut ADU (Application Data Unit).

Figure 3 Frame Modbus pada umumnya

Sedangkan untuk Frame Modbus TCP/IP ada pada figure 4, dimana pada aplikasi kita
sudah tidak memerlukan error checking, sehingga kita hanya berkonsentrasi kepada Function
Code dan data.

6
Figure 4 Frame Modbus TCP/IP

Jenis Modbus

Beberapa variasi Modbus antara lain :

1. Modbus RTU merupakan varian Modbus yang ringkas dan digunakan pada
komunikasi serial. Format RTU dilengkapi dengan Cyclic Redundancy Error (CRC)
untuk memastikan kebenaran data. Modbus RTU merupakan implementasi protokol
Modbus yang paling umum digunakan.
2. Modus ASCII digunakan pada komunikasi serial dengan memanfaatkan karakter
ASCII. Format ASCII menggunakan mekanisme Longtudinal Redundancy Check
(LRC). Setiap frame data pada Modbus ASCII diawali dengan titik dua (:) dan
ditutup dengan (CR/LF).
3. Modbus TCP/IP merupakan varian Modbus yang digunakan pada jaringan ethernet.
Format Modbus TCP/IP menggunakan MBAP Header yang akan dibahas pada
halaman selanjutnya.

Modbus TCP/IP

Sistem komunikasi dengan Modbus TCP/IP terdiri dari beberapa tipe device yang
berbeda : Device Modbus TCP/IP Client dan Server terhubung dengan jaringan Ethernet.

Device Interkoneksi seperti Bridge, Router, atau gateway untuk interkoneksi antara
jaringan TCP/IP dan sub-jaringan jalur serial yang memungkinkan koneksi dari jalur
serial Modbus Client and Server.

7
Figure 5 adalah arsitektur dan komunikasi Modbus TCP/I

Figure 5 Arsitektur Komunikasi Modbus TCP/IP

Sementara pada Figure 6, yang membedakan Modbus TCP/IP dengan Modbus RTU
adalah pada frame-nya. Tidak ada lagi error check, yang sudah diatasi oleh TCP/IP. MBAP
(Modbus Application Protocol) Header terdiri dari 7 bytes :

Frame pengiriman data dengan Modbus TCP/IP adalah seperti pada Figure 5. Modul
Praktikum SCADAmembantu mahasiswa untuk dapat mengetahui data apa saja yang dikirim
selama proses monitoring, berikut gambarnya :

8
Terdapat 3 baris informasi, baris pertama BYTES#, adalah baris yang berisi nomor
bytes. Baris kedua SEND, adalah data yang dikirim berdasarkan protokol Modbus TCP/IP.
Baris ketiga REC (RECEIVE), adalah data yang diterima dari AA-SLS.

Pada baris SEND terdapat MBAP Header yang ditandai dengan kotak warna merah
dan PDU (Function Code + Data) yang ditandai dengan kotak warna biru. Pada kotak merah
terdapat 7 bytes number, 2 bytes pertama adalah Transaction ID dengan bytes number 00 dan
01. 2 bytes berikutnya adalah Protocol ID dengan bytes number 02 dan 03, akan bernilai 0
jika menggunakan Modbus Protocol. 2 bytes berikutnya adalah Length yang menunjukkan
jumlah bytes di belakangnya dengan bytes number 04 dan 05. 1 bytes berikutnya adalah Unit
Id, yang menunjukkan PLC Address yang dituju, pada bytes number 06.

Kotak merah berisikan PDU (Function Code + data) yang dikirim, berikut adalah
detailnya :

Dimana 1 byte pertama menunjukkan Function Code. Function Code untuk membaca
input dan output PLC adalah 01 di dalam Modbus, Function Code 01 adalah Read Coil
dengan bytes number 07.

Kemudian 2 bytes berikutnya menunjukkan starting address dari parameter yang


diinginkan, karena starting address terdiri dari 2 bytes maka high byte address terdapat pada
byte number 08 dan low byte address terdapat pada byte number 09.

Selanjutnya 2 bytes berikutnya menunjukkan jumlah coil yang ingin dimonitoring.


Seperti biasanya high byte address terdapat pada byte number 10 (x0A) dan low byte address
pada byte number 11 (x0B).

9
Pada baris REC yang berarti RECEIVE atau data yang diterima terdapat Response
dari Slave, terdiri dari MBAP Header (ditandai dengan kotak merah) dan PDU (ditandai
dengan kotak warna biru).

Dimana 2 bytes pertama menunjukkan response dari transaction Identifier, dalam


sistem ini kita mendapatkan response 00-0F, karena penggunaan response untuk transaction
Identifier ini adalah untuk sistem yang sangat kompleks dengan multi akses (banyak klien).

Kemudian 2 bytes berikutnya menunjukkan feedback dari Protocol Identifier dan di-response
dengan 0 sesuai dengan yang kita kirim, karena memang menggunakan Modbus Protocol.

Selanjutnya 2 bytes berikutnya menunjukkan Length yaitu jumlah byte dibelakangnya,


dan 1 byte berikutnya menunjukkan unit ID yang sesuai dengan yang kita kirim. Pada kotak
warna merah terdapat detail sebagai berikut :

Dimana 1 byte pertama menunjukkan Function Code yang sesuai dengan yang kita
kirim. Kemudian 1 byte selanjutnya menunjukkan byte count. Selanjutnya 1 byte terakhir
menunjukkan status coil.

Function Code
Dalam Modbus TCP/IP, Function Code digunakan untuk menentukan tindakan apa
yang akan dilakukan oleh Modbus TCP/IP, apakah itu read coil, write coil, dsb. Rincian
keterangan function code sbb :

Untuk detail penggunaannya, baca di \help\Modbus_Application_Protocol_V1_1b.pdf

10
MODUL 1

PENGENALAN APB SOFTWARE (PLC)

1.1.Durasi : 6 jam

1.2.Tujuan (TIU+TIK) :
1. Mampu menghubungkan APB Software dengan APBPLC
2. Mampu membuat program menggunakan Function Block
Diagram
3. Mampu melakukan Upload / Download program APBPLC.
4. Mampu mengendalika I/O pada APBPLC

1.3.Peralatan :
1. Personal Komputer / Laptop yang terinstall APB Software
2. Modul Praktikum SCADA
3. Kabel jaringan

1.4.Pelaksanaan :
1. Hubungkan kabel jaringan ke Router yang terpasang di
Modul Praktikum SCADA
2. hubungkan Input Modul Praktikum SCADA ke Push Button
dan Output ke LED
3. Jalankan APB Software sesuai intruksi berikut

Modul ini dimulai dengan menjalankan APB Software. Pada APB Software
mahasiswa diperbolehkan membuat program sesuai yang dibutuhkan. Penjelasan mengenai
penggunaan APB Software terdapat dalam Manual APB Soft.

11
Gambar diatas adalah contoh program dari PLC ini dengan fungsi menyalakan output
secara bergantian dengan 8 input yang di OR kan.

Hal penting yang harus dilakukan agar PLC APB dan Modul Praktikum SCADA bisa
berkomunikasi adalah settting IP Address-nya.

1. Setting IP pada PC / laprop sesuai dengan segment yang ada di APB PLC saat ini,
yaitu salah satunya 192.168.1.251. maka kita harus mengupah IP Address dari PC atau
laptop kita menjadi sesuai dengan segment tersebut seperti gambar :

2. Hubungkan APB seperti pada gambar :

12
Isikan IP address sesuai tujuan alamat PLC yang kita gunakan, lalu OK. Kemudian
download program yang sudah dibuat ke PLC, lalu Disconnect.

Note : Disconnect itu penting, dikarenakan Modbus TCP/IP tidak dapat digunakan
bersamaan, dengan kata lain untuk menggunakan program APBSCADA tidak dapat
dilakukan jika program APB Software masih dalam keadaan Connect.

13
MODUL 2

PROGRAM VISUAL STUDIO (APBSCADA) : CONNECT TO


PLC

1.1. Durasi : 8 jam

1.2.Tujuan (TIU+TIK) :
1. Mampu menghubungkan APBSCADA dengan APBPLC
2. Mampu membuat program untuk menghubungkan
APBSCADA dengan APBPLC

1.3.Peralatan :
1. Personal Komputer / Laptop yang terinstall Visual Studio
2. Modul Praktikum SCADA
3. Kabel jaringan

1.4.Pelaksanaan :
1. Hubungkan kabel jaringan ke Router yang terpasang di
Modul Praktikum SCADA
2. Jalankan Microsoft Visual Studio dengan dengan intruksi
sebagai berikut

14
Setelah semua setting untuk APB PLC telah selesai maka selanjutnya kita masuk ke
aplikasi Visual Studio : APBSCADA.

Pada Help Menu terdapat 4 manual yang dapat dibaca oleh mahasiswa yaitu :

1. APB PLC Manual, yang berguna untuk mengembangkan program di PLC.


2. APB Programming Help, untuk mengenal lebih jauh tentang APB PLC.
3. Modbus Applicarion Protocol Specification Guide.
4. Modbus TCP/IP Implementation Guide.

Manual kedua dan ketiga tersebut berguna bagi mahasiswa untuk mengetahui lebih
lanjut tentang Modbus TCP/IP, mengenai bagaimana menggunakan sistem SCADA lebih
detail, bagaimana sistem ini dapat berkomunikasi, data apa saja yang dikirim, dsb.

Untuk memulai membuat program APBSCADA, dapat dilakukan dengan :

1. Membuka program Visual Studio


2. Klik File-New-Project
3. Masukkan nama projek kemudian OK

15
4. Kemudian buatlah sebuah projek VBclass dengan klik Project-Add New Item-Class,
ubah namanya dengan APBPLC
5. Masukkan codingan berikut :

Imports System.Net
Imports System.Net.Sockets

'Last Update: 25 March 2015'MODBUS TCP master driver


'1st stage using only synchronus mode
'this driver is using thread for communication

Public Class APBPLC


'Constant for function Code
Private Const fctReadCoil As Byte = 1
Private Const fctReadDiscreteInputs As Byte = 2
Private Const fctReadHoldingRegister As Byte = 3
Private Const fctReadInputRegister As Byte = 4
Private Const fctWriteSingleCoil As Byte = 5
Private Const fctWriteSingleRegister As Byte = 6
Private Const fctWriteMultipleCoils As Byte = 15
Private Const fctWriteMultipleRegister As Byte = 16
Private Const fctReadWriteMultipleRegister As Byte = 23
Protected _Endpoint As New IPEndPoint(IPAddress.Any, 0)
Protected _Connected As Boolean = False
Protected _timeout As UShort = 500 'Ushort is 2 byte unsign register
Protected _buffersize As UShort = 256
Protected _refresh As UShort = 10

Property PLCEndpoint() As IPEndPoint


Get
Return _Endpoint
End Get
Set(ByVal value As IPEndPoint)
_Endpoint = value
End Set
End Property
ReadOnly Property connected()
Get
Return _Connected
End Get
End Property

16
Property timeout() As UShort
Get
Return _timeout
End Get
Set(ByVal value As UShort)
_timeout = value
End Set
End Property
Public Function TestConnection() As Boolean
Dim _ConnectionOK As Boolean = True
'in Framework 3.5 no reusable disconnection of TCPClient
'every time have to make new instance, after closing the socket
'by the end of this sub
Dim _APBSocket As New TcpClient
_APBSocket.SendTimeout = _timeout
_APBSocket.ReceiveTimeout = _timeout
_APBSocket.ReceiveBufferSize = 128 'number of data from APB only 256
Try
_APBSocket.Connect(_Endpoint)
MsgBox("Connection OK")
Catch ex As Exception
_ConnectionOK = False
MsgBox("Can't connect to" & _Endpoint.Address.ToString & ":" &
_Endpoint.Port.ToString)
End Try
If _APBSocket.Connected Then _APBSocket.Close()
Return _ConnectionOK
End Function
End Class

17
6. Pada form1 yang sebelumnya telah ada, masukkan item item seperti berikut :

7. Mahasiswa dapat merubah nama form1 (misal di program ini diberi nama Home)
Codingan pada Home seperti berikut :

Imports System.Collections
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Imports System.Threading.Thread

Public Class Home


Public APB As New APBPLC 'dideklarasi sebagai PLC
Private Sub ConnectToolStripMenuItem_Click(sender As Object, e As EventArgs) _

18
Handles ConnectToolStripMenuItem.Click 'menghubungkan Visual Studio dengan PLC
APB.PLCEndpoint = New IPEndPoint(IPAddress.Parse(Setting.tbIP.Text),
Val(Setting.tbPort.Text)) 'setting IP dan Port PLC
If APB.TestConnection() Then
statustoolstrip.Text = "Connected"
TmrConnected.Enabled = True
End If
End Sub
Private Sub SettingToolStripMenuItem_Click(sender As Object, e As EventArgs) _
Handles SettingToolStripMenuItem.Click
Setting.Show()
End Sub
Private Sub HelpToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) _
Handles APBManualToolStripMenuItem.Click,
MODBUSApplicationProtocolSpecificationToolStripMenuItem.Click,
MODBUSTCPIPImplementetationGuideToolStripMenuItem.Click,
APBProgrammingHelpToolStripMenuItem.Click 'memasukkan hyperlink ke
dokumen dokumen help yang terdapat di folder help

If sender.Equals(APBProgrammingHelpToolStripMenuItem) Then
Help.ShowHelp(Me, Application.StartupPath & "\help\Help000.chm")
End If
If sender.Equals(APBManualToolStripMenuItem) Then
System.Diagnostics.Process.Start(Application.StartupPath + "\help\APBmanual.pdf")
End If
If sender.Equals(MODBUSApplicationProtocolSpecificationToolStripMenuItem) Then
System.Diagnostics.Process.Start(Application.StartupPath +
"\help\Modbus_Application_Protocol_V1_1b.pdf")
End If
If sender.Equals(MODBUSTCPIPImplementetationGuideToolStripMenuItem) Then
System.Diagnostics.Process.Start(Application.StartupPath +
"\help\Modbus_Messaging_Implementation_Guide_V1_0b.pdf")
End If
End Sub

Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles


ExitToolStripMenuItem.Click
Me.Close()
End Sub

Private Sub TmrConnected_Tick(sender As Object, e As EventArgs) Handles


TmrConnected.Tick
statustoolstrip.Text = ""
End Sub
End Class
8. Agar file di menu help bisa di-execute maka buatlah folder baru bernama help di
D:\2016\SCADA\Terbaru 11 oktober\MODUL 2\bin\Debug, dan masukkan file file
yang di-execute ke dalam folder tersebut.
9. Buatlah project baru untuk settingan IP address dan Port, kemudian ganti IP Address
sesuai alamat PLC yang dituju.

19
Public Class Setting
Dim ip, port, scanning As String
Private Sub Done_Click(sender As Object, e As EventArgs) Handles Done.Click
Me.Hide()
ip = tbIP.Text
port = tbPort.Text
scanning = tbScanningTime.Text 'melakukan pembacaan tiap satuan waktu
End Sub

Private Sub Cancel_Click(sender As Object, e As EventArgs) Handles Cancel.Click


Me.Hide()
tbIP.Text = ip
tbPort.Text = port
tbScanningTime.Text = scanning
End Sub

Private Sub Setting_shown(sender As Object, e As EventArgs) Handles MyBase.Shown


ip = tbIP.Text
port = tbPort.Text
scanning = tbScanningTime.Text
End Sub
End Class

Mahasiswa dapat mencoba untuk connect ke IP Endpoint dari PLC yang tadi sudah di
setting (Connect endpoint terdapat pada toolstripmenu_connect atau connectbutton). IP
Endpoint terdiri dari IP dan Port Address. Untuk Modbus TCP/IP harus menggunakan
port=502. Kemudian jika sudah terhubung maka akan muncul messagebox Connection OK.

MODUL 3

APBSCADA : READ INPUT PLC

1.1. Durasi : 8 jam


20
1.2.Tujuan (TIU+TIK) :
1. Mampu membaca status coil input pada PLC
2. Mampu membuat indikator dari pembacaan input / output
PLC

1.3.Peralatan :
1. Personal Komputer / Laptop yang terinstall Visual Studio
2. Modul Praktikum SCADA
3. Kabel jaringan

1.4.Pelaksanaan :
1. Hubungkan kabel jaringan ke Router yang terpasang di
Modul Praktikum SCADA
2. Jalankan Microsoft Visual Studio dengan dengan intruksi
sebagai berikut

Sistem SCADA merupakan salah satu contoh aplikasi real time programming, dimana
input dan output harus dapat dimonitoring dan dikontrol secara real time. Entry Address Start
untuk starting address dari input yang akan dibaca. Contoh : jika input harusnya mulai dari I0
namun bisa di setting untuk membaca mulai dari I1, I2, dsb. Entry length digunakan untuk
setting jumlah input yang ingin dibaca. Contoh : jika nilai Length 4 maka yang bisa terbaca
adalah 4 input terhitung dari settingan Address Start.

1. Tambah Windows Form baru seperti berikut :

21
Public Class Read
Public maxinput As Integer = 8 'nilai maksimum / length
Public start_address As Integer = 0
Public length_convert As Integer
Public staInput(40000) As Boolean
Dim send_data(511) As Byte
Dim received_data(511) As Byte
Dim RegisterValue(40000) As Integer
Dim address_write As Integer
Dim input(39) As Button
Dim alamat(39) As TextBox
Dim detik_OK, detik_Error As Integer

Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load


initInput()
End Sub

Private Sub initInput()


input(0) = Button1 'deklarasi button untuk di looping
input(1) = Button2
input(2) = Button3
input(3) = Button4
input(4) = Button5
input(5) = Button6
input(6) = Button7

22
input(7) = Button8
input(8) = Button9
input(9) = Button10
input(10) = Button11
input(11) = Button12
input(12) = Button13
input(13) = Button14
input(14) = Button15
input(15) = Button16
input(16) = Button17
input(17) = Button18
input(18) = Button19
input(19) = Button20
input(20) = Button21
input(21) = Button22
input(22) = Button23
input(23) = Button24
input(24) = Button25
input(25) = Button26
input(26) = Button27
input(27) = Button28
input(28) = Button29
input(29) = Button30
input(30) = Button31
input(31) = Button32
input(32) = Button33
input(33) = Button34
input(34) = Button35
input(35) = Button36
input(36) = Button37
input(37) = Button38
input(38) = Button39
input(39) = Button40

alamat(0) = TextBox1
alamat(1) = TextBox2
alamat(2) = TextBox3
alamat(3) = TextBox4
alamat(4) = TextBox5
alamat(5) = TextBox6
alamat(6) = TextBox7
alamat(7) = TextBox8
alamat(8) = TextBox9
alamat(9) = TextBox10
alamat(10) = TextBox11
alamat(11) = TextBox12
alamat(12) = TextBox13
alamat(13) = TextBox14
alamat(14) = TextBox15
alamat(15) = TextBox16
alamat(16) = TextBox17
alamat(17) = TextBox18
alamat(18) = TextBox19
alamat(19) = TextBox20
alamat(20) = TextBox21
alamat(21) = TextBox22
alamat(22) = TextBox23
alamat(23) = TextBox24
alamat(24) = TextBox25

23
alamat(25) = TextBox26
alamat(26) = TextBox27
alamat(27) = TextBox28
alamat(28) = TextBox29
alamat(29) = TextBox30
alamat(30) = TextBox31
alamat(31) = TextBox32
alamat(32) = TextBox33
alamat(33) = TextBox34
alamat(34) = TextBox35
alamat(35) = TextBox36
alamat(36) = TextBox37
alamat(37) = TextBox38
alamat(38) = TextBox39
alamat(39) = TextBox40
For i = 0 To maxinput 1 'program looping untuk me-arrange button, kondisi awal
semua button dan textbox visible = false
With input(i)
.Location = New Point(60 + (i \ 10) * 130, 25 + (i Mod 10) * 30)
.Visible = True
.Text = "0"
.FlatAppearance.MouseDownBackColor = Color.White
.FlatAppearance.MouseOverBackColor = Color.White
End With
With alamat(i)
.Location = New Point(10 + (i \ 10) * 130, 25 + (i Mod 10) * 30)
.Visible = True
.Text = "+" & start_address + i
End With
Next
For i = maxinput To 39
input(i).Visible = False
alamat(i).Visible = False
Next

End Sub

Private Sub TmrStandby_Tick(sender As Object, e As EventArgs) Handles


TmrStandby.Tick 'mempertahankan kondisi standby saat form read dibuka
addressstatus.Text = start_address
lengthstatus.Text = maxinput
If tblength.Text = "" Then
Else
length_convert = tblength.Text
If length_convert > 40 Then
tblength.Text = "40"
length_convert = 40
MsgBox("Limit Reached")
Else
maxinput = length_convert
End If
End If
If tbaddress.Text = "" Then
Else
start_address = tbaddress.Text
End If
End Sub
Private Sub addressstatus_textchanged(sender As Object, e As EventArgs) Handles
addressstatus.TextChanged

24
initInput()
tmrRead.Enabled = False
TmrDelay.Enabled = True
End Sub
Private Sub lengthstatus_TextChanged(sender As Object, e As EventArgs) Handles
lengthstatus.TextChanged
initInput()
tmrRead.Enabled = False
TmrDelay.Enabled = True
End Sub

Public Sub ShowMessage(ByRef message() As Byte, ByRef otb As TextBox) 'menampilkan


teks di GBTCPIP
Dim mlength As UShort = 6 + message(4) * 256 + message(5)
otb.Text = ""
For i = 0 To mlength - 1
'olabel.Text += i.ToString("00") & ": " & Convert.ToString(message(i), 16).PadLeft(2,
"0"c).ToUpper & " | "
otb.Text += Convert.ToString(message(i), 16).PadLeft(2, "0"c).ToUpper & " : "
Next
End Sub

Private Sub ReadInput(ByVal TransID As UShort, _


ByVal UnitID As Byte, _
ByVal InputNumber As UShort, _
ByVal numInput As UShort)
send_data = Home.APB.CreateReadRequest(TransID, UnitID, InputNumber + 0,
numInput, 1) 'angka 1 paling akhir merupakan Function Code, function membaca coil
Dim nbytes As Integer = numInput \ 8
If numInput Mod 8 > 0 Then nbytes += 1
ShowMessage(send_data, TBsend)
ShowMessage(received_data, TBrec)
Home.APB.GetData(send_data, received_data)
'Get the Output Status
For i = 0 To nbytes 1 'mendapatkan data pembacaan
Dim mask As Byte = 1
For index = 0 To 7
staInput(InputNumber + index + i * 8) = received_data(i + 9) And mask
mask = mask << 1
Next
Next
For i = InputNumber To InputNumber + numInput - 1 'menampilkan data pembacaan
If (i = InputNumber + numInput) Then Exit For
input(i - InputNumber).Text = IIf(staInput(i), "1", "0")
Next
End Sub

Private Sub tmrRead_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles tmrRead.Tick 'standby kondisi aktif membaca
TmrDelay.Enabled = False
ReadInput(Convert.ToUInt16(Setting.mtbTransID.Text), _
Convert.ToUInt16(Setting.mtbUnitNumber.Text), _
Convert.ToUInt16(addressstatus.Text), _
Convert.ToByte(lengthstatus.Text))
GroupBox1.Text = "Coil"
If Label1.Text = "Modbus Message Timeout" Then
TmrOK.Enabled = False
TmrError.Enabled = True
For i = 0 To maxinput - 1

25
input(i).Text = ""
tmrRead.Enabled = False
Next
Else
If tmrRead.Enabled = True Then
TmrOK.Enabled = True
TmrError.Enabled = False
End If
End If
End Sub

Private Sub TmrDelay_Tick(sender As Object, e As EventArgs) Handles TmrDelay.Tick


'kondisi delay / tidak membaca
If Home.TmrConnected.Enabled = True Then
tmrRead.Enabled = True
Else
TmrDelay.Enabled = False
MsgBox("Please Connect First!")
End If
End Sub

Private Sub ReadRegister(ByVal TransID As UShort, _


ByVal UnitID As Byte, _
ByVal RegisterNumber As UShort, _
ByVal numRegister As UShort)
Dim nbytes As Integer = numRegister
send_data = Home.APB.CreateReadRequest(TransID, UnitID, RegisterNumber + 0,
nbytes, 3)
ShowMessage(send_data, TBsend)
ShowMessage(received_data, TBrec)
Home.APB.GetData(send_data, received_data)
'Get the Register Value
For i = 0 To nbytes - 1
'Register Value started with "register number"
RegisterValue(i + RegisterNumber) = _
received_data(i * 2 + 9) * 256 + _
received_data(i * 2 + 10)
Next
For i = RegisterNumber To RegisterNumber + numRegister - 1
If i = maxinput + start_address Then Exit For
input(i - RegisterNumber).Text = RegisterValue(i).ToString
Next
End Sub

Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles


CheckBox1.CheckedChanged
If CheckBox1.Checked = False Then
GBTCP.Visible = False
Else
GBTCP.Visible = True
End If
End Sub

Private Sub TmrOK_Tick(sender As Object, e As EventArgs) Handles TmrOK.Tick 'visual


hitungan waktu membaca
detik_OK = detik_OK + 1
waktu_OK.Text = detik_OK
End Sub

26
Private Sub TmrError_Tick(sender As Object, e As EventArgs) Handles TmrError.Tick
detik_Error = detik_Error + 1
waktu_Error.Text = detik_Error
End Sub

End Class

Karena kita akan membaca Status Input, maka kita menggunakan Function Code 01
(terdapat pada data Private Sub ReadInput)

2. Pada Class APBPLC masukkan codingan berikut di paling bawah sebelum End
Class :
Public Function CreateReadRequest( _
ByVal TransID As UShort, _
ByVal unit As Byte, _
ByVal startaddress As UShort, _
ByVal length As Ushort, _
ByVal FunctionCode As Byte) As Byte()
Dim data As Byte() = New Byte(11) {} 'Buffer for telegram
'MBAP Header:
' 2 bytes Data(0,1) Transaction ID
' 2 bytes Data(2,3) Protocol ID not used at the moment
' 2 bytes Data(4,5) Message length (number of follwing ID) mostly 6 bytes
' 1 byte Data(6) Unit ID, slave address
'PDU:
' 1 byte Data(7) Function Code
' 2 bytes Data(8,9) Start(address)
' 2 bytes Data(10,11) Quantity of Register

Dim _id As Byte() = BitConverter.GetBytes(CShort(TransID))


data(0) = _id(1) 'Transaction ID high byte
data(1) = _id(0) 'Transaction ID low byte
data(5) = 6 'message length for READ request
data(6) = unit
data(7) = FunctionCode 'function code read coil
Dim _adr As Byte() = BitConverter.GetBytes(CShort(startaddress))
data(8) = _adr(1)
data(9) = _adr(0)
Dim _length As Byte() = BitConverter.GetBytes(CShort(length))
data(10) = _length(1)
data(11) = _length(0)
'For i = 0 To 11
' Debug.Print(id.ToString & ": " & data(i).ToString)
'Next
Return data
End Function
Public Sub GetData(ByVal MessageBytes() As Byte, _
ByRef ResponseBytes() As Byte)

Dim _APBSocket As New TcpClient


_APBSocket.SendTimeout = _timeout
_APBSocket.ReceiveTimeout = _timeout
_APBSocket.ReceiveBufferSize = _buffersize
If Not _APBSocket.Connected Then

27
Try
_APBSocket.Connect(_Endpoint)
Catch ex As Exception
MsgBox("Can't connect to" & _Endpoint.Address.ToString & ":" &
_Endpoint.Port.ToString)
_Connected = False
End Try
End If
With _APBSocket
If .Connected Then
.GetStream.Write(MessageBytes, 0, MessageBytes.Length)
.GetStream.Flush()
Try
.GetStream.Read(ResponseBytes, 0, _APBSocket.ReceiveBufferSize)
Read.Label1.Text = ""
Catch ex As Exception
Read.Label1.Text = "Modbus Message Timeout"
End Try
.Close()
End If
End With
End Sub

3. Pada Home tambahkan menu item berikut :

Private Sub NewStripMenuItem1_Click(sender As Object, e As EventArgs) Handles


NewStripMenuItem1.Click
Read.Show()
End Sub

28
4. Ketika program tersebut di-debug, maka hasilnya akan tampak seperti ini :

29
5. Kemudian untuk membaca Input, masukkan angka antara 256 (383 nilai Length)
di kotak Address Start, karena pada Modbus APBPLC, alamat Input terdapat pada
100-17F Hex (256 383 Dec).

Kotak berwarna biru dari +0 s/d +7 adalah alamat dari coil yang sedang dimonitoring,
kemudian kotak warna putih di sebelahnya adalah status dari coil tersebut, dimana akan
bernilai 1 jika aktif dan bernilai 0 jika tidak aktif.

Pada Groupbox MODBUS TCP/IP FRAMES, menunjukkan MBAP Header dan PDU
dari data yang di-request dan di-response ke / dari PLC.

30
MODUL 4

APBSCADA : READ OUTPUT PLC

1.1. Durasi : 8 jam

1.2.Tujuan (TIU+TIK) :
1. Mampu membaca status coil output pada PLC
2. Mampu membuat indikator dari pembacaan input / output
PLC

1.3.Peralatan :
1. Personal Komputer / Laptop yang terinstall Visual Studio
2. Modul Praktikum SCADA
3. Kabel jaringan

1.4.Pelaksanaan :
1. Hubungkan kabel jaringan ke Router yang terpasang di
Modul Praktikum SCADA
2. Jalankan Microsoft Visual Studio dengan dengan intruksi
sebagai berikut

31
Karena untuk membaca Output menggunakan Function Code yang sama seperti
membaca Input pada MODUL 3, maka kita gunakan program yang sama dengan program di
MODUL 2.

Kemudian untuk membaca Output, masukkan angka antara 512 (767 nilai length)
di kotak Address Start, karena pada Modbus APBPLC, alamat Output terdapat pada 200-2FF
Hex (512 767 Dec).

32
MODUL 5

APBSCADA : READ MEMORY PLC

1.1. Durasi : 8 jam

1.2.Tujuan (TIU+TIK) :
1. Mampu membaca status Memori (Middle Relay) pada PLC
2. Mampu membuat indikator dari pembacaan Memori
(Middle Relay) PLC

1.3.Peralatan :
1. Personal Komputer / Laptop yang terinstall Visual Studio
2. Modul Praktikum SCADA
3. Kabel jaringan

1.4.Pelaksanaan :
1. Hubungkan kabel jaringan ke Router yang terpasang di
Modul Praktikum SCADA

33
2. Jalankan Microsoft Visual Studio dengan dengan intruksi
sebagai berikut

Karena untuk membaca Memori menggunakan Function Code yang sama seperti
membaca Input pada MODUL 3, maka kita gunakan program yang sama dengan program di
MODUL 2.

Kemudian untuk membaca Memori, masukkan angka antara 9728 (11729 nilai
length) di kotak Address Start, karena pada Modbus APBPLC, alamat Output terdapat pada
2600-2DCF Hex (9728 11729 Dec).

34
MODUL 6

APBSCADA : READ REGISTER PLC

1.1. Durasi : 8 jam

1.2.Tujuan (TIU+TIK) :
1. Mampu membaca status Holding Register pada PLC
2. Mampu membuat indikator dari pembacaan Holding
Register PLC

1.3.Peralatan :
1. Personal Komputer / Laptop yang terinstall Visual Studio
2. Modul Praktikum SCADA
3. Kabel jaringan

1.4.Pelaksanaan :
1. Hubungkan kabel jaringan ke Router yang terpasang di
Modul Praktikum SCADA

35
2. Jalankan Microsoft Visual Studio dengan dengan intruksi
sebagai berikut

Berbeda dengan status coil, pembacaan register digunakan dengan function code 03,
berbeda dengan function code membaca coil status (01). Maka dari itu, kita ubah Function
Code menjadi 03. Selain itu, karena nilai yang ditampilkan berupa angka register (bukan
antara 0/1), maka kita membutuhkan codingan yang berbeda pada Form Read.

Private Sub ReadRegister(ByVal TransID As UShort, _


ByVal UnitID As Byte, _
ByVal RegisterNumber As UShort, _
ByVal numRegister As UShort)
Dim nbytes As Integer = numRegister
send_data = Home.APB.CreateReadRequest(TransID, UnitID, RegisterNumber + 0,
nbytes, 3)
ShowMessage(send_data, TBsend)
ShowMessage(received_data, TBrec)
Home.APB.GetData(send_data, received_data)
'Get the Register Value
For i = 0 To nbytes - 1
'Register Value started with "register number"
RegisterValue(i + RegisterNumber) = _
received_data(i * 2 + 9) * 256 + _
received_data(i * 2 + 10)
Next
For i = RegisterNumber To RegisterNumber + numRegister - 1
If i = maxinput + start_address Then Exit For
input(i - RegisterNumber).Text = RegisterValue(i).ToString
Next
End Sub

Private Sub tmrRead_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)


Handles tmrRead.Tick
TmrDelay.Enabled = False
ReadRegister(Convert.ToUInt16(Setting.mtbTransID.Text), _
Convert.ToUInt16(Setting.mtbUnitNumber.Text), _
Convert.ToUInt16(addressstatus.Text), _
Convert.ToByte(lengthstatus.Text))
GroupBox1.Text = "Coil"
If Label1.Text = "Modbus Message Timeout" Then

36
TmrOK.Enabled = False
TmrError.Enabled = True
For i = 0 To maxinput - 1
input(i).Text = ""
tmrRead.Enabled = False
Next
Else
If tmrRead.Enabled = True Then
TmrOK.Enabled = True
TmrError.Enabled = False
End If
End If
End Sub

Ubah Private Sub ReadInput dengan Private Sub ReadRegister di atas. Kemudian
pada Private Sub tmrRead_tick ubah teks ReadInput menjadi ReadRegister.

Kemudian untuk membaca Register, masukkan angka antara 18432 (18943 nilai
length) di kotak Address Start, karena pada Modbus APBPLC, alamat Output terdapat pada
4800 49FF Hex (18432 18943 Dec).

37
Pada pembacaan register APB PLC, satu register (DW0) menggunakan 2 alamat
Modbus, karenanya untuk DW0 alamat +18432 akan bernilai 0 dan +18433 akan bernilai
sesuai nilai registernya.

MODUL 7

APBSCADA : WRITE MEMORY PLC

1.1. Durasi : 8 jam

1.2.Tujuan (TIU+TIK) :
1. Mampu menulis / mengubah status memori pada APB PLC
2. Mampu membuat program (VB Solution) yang dapat
menulis (Set) memori

1.3.Peralatan :
1. Personal Komputer / Laptop yang terinstall Visual Studio
2. Modul Praktikum SCADA

38
3. Kabel jaringan

1.4.Pelaksanaan :
1. Hubungkan kabel jaringan ke Router yang terpasang di
Modul Praktikum SCADA
2. Jalankan Microsoft Visual Studio dengan dengan intruksi
sebagai berikut

Untuk dapat melakukan penulisan (Set) coil pada memori, baik set High atau
pun set Low dibutuhkan Function Code untuk write coil (05) serta program yang mendukung
sebagai berikut :

1. Kita mengambil program dari MODUL 5 (Read Memory PLC). Pada Class APBPLC
tambahkan codingan berikut :

Public Function CreateWriteRequest( _


ByVal TransID As UShort, _
ByVal unit As Byte, _
ByVal startaddress As UShort, _
ByVal numBytes As UShort, _
ByVal FunctionCode As Byte) As Byte()
Dim numData As UShort
Dim data As Byte() = New Byte(numBytes + 10) {} 'Buffer for telegram
numData = 255
Dim _id As Byte() = BitConverter.GetBytes(CShort(TransID))
data(0) = _id(1) 'Transaction ID high byte
data(1) = _id(0) 'Transaction ID low byte
' data(4) = 0
data(5) = 6
data(6) = unit
data(7) = fctWriteSingleCoil
Dim _adr As Byte() = BitConverter.GetBytes(CShort(startaddress))
data(8) = _adr(1)

39
data(9) = _adr(0)
Dim _cnt As Byte() = BitConverter.GetBytes(CShort(numData))
data(10) = _cnt(0)
data(11) = _cnt(1)
Return data
End Function
Public Function CreateWriteOffRequest( _
ByVal TransID As UShort, _
ByVal unit As Byte, _
ByVal startaddress As UShort, _
ByVal numBytes As UShort, _
ByVal FunctionCode As Byte) As Byte()
Dim numData As UShort
Dim data As Byte() = New Byte(numBytes + 10) {} 'Buffer for telegram
numData = 0
Dim _id As Byte() = BitConverter.GetBytes(CShort(TransID))
data(0) = _id(1) 'Transaction ID high byte
data(1) = _id(0) 'Transaction ID low byte
' data(4) = 0
data(5) = 6
data(6) = unit
data(7) = fctWriteSingleCoil
Dim _adr As Byte() = BitConverter.GetBytes(CShort(startaddress))
data(8) = _adr(1)
data(9) = _adr(0)
Dim _cnt As Byte() = BitConverter.GetBytes(CShort(numData))
data(10) = _cnt(0)
data(11) = _cnt(1)
Return data
End Function
Pada Public Function CreateWriteRequest, nilai numData = 255 (nilai maksimum 1
byte), sedangkan pada Public Function CreateWriteOffRequest, nilai numData = 0.

2. Tambahkan project baru sbb (misal project name : write_coil) :

40
Public Class Write_Coil
Dim send_data(511) As Byte
Dim received_data(511) As Byte
Dim address_write As Integer
Dim register_address As Integer

Private Sub WriteMemory(ByVal TransID As UShort, _


ByVal UnitID As Byte, _
ByVal MemoryNumber As UShort, _
ByVal numMemory As UShort)
send_data = Home.APB.CreateWriteRequest(TransID, UnitID, MemoryNumber +
address_write, numMemory, 5)
Dim nbytes As Integer = numMemory \ 8
If numMemory Mod 8 > 0 Then nbytes += 1
Read.ShowMessage(send_data, Read.tbSend)
Home.APB.GetData(send_data, received_data)
End Sub
Private Sub WriteOffMemory(ByVal TransID As UShort, _
ByVal UnitID As Byte, _
ByVal MemoryNumber As UShort, _
ByVal numMemory As UShort)
send_data = Home.APB.CreateWriteOffRequest(TransID, UnitID, MemoryNumber +
address_write, numMemory, 5)
Dim nbytes As Integer = numMemory \ 8
If numMemory Mod 8 > 0 Then nbytes += 1
Read.ShowMessage(send_data, Read.tbSend)
Home.APB.GetData(send_data, received_data)
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click


Me.Close()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If Radio_ON.Checked = True Then
WriteMemory(Convert.ToUInt16(Setting.mtbTransID.Text), _
Convert.ToUInt16(Setting.mtbUnitNumber.Text), _
Convert.ToByte(0), _
Convert.ToByte(Read.lengthstatus.Text))
End If
If Radio_OFF.Checked = True Then
WriteOffMemory(Convert.ToUInt16(Setting.mtbTransID.Text), _
Convert.ToUInt16(Setting.mtbUnitNumber.Text), _
Convert.ToByte(0), _
Convert.ToByte(Read.lengthstatus.Text))
End If
Me.Close()
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick


address_write = TextBox1.Text
End Sub
End Class

3. Pada read.vb tambahkan program sbb :

Private Sub Button1_Click(sender As Object, e As EventArgs) _


Handles Button1.Click, _

41
Button2.Click, _
Button3.Click, _
Button4.Click, _
Button5.Click, _
Button6.Click, _
Button7.Click, _
Button8.Click, _
Button9.Click, _
Button10.Click, _
Button11.Click, _
Button12.Click, _
Button13.Click, _
Button14.Click, _
Button15.Click, _
Button16.Click, _
Button17.Click, _
Button18.Click, _
Button19.Click, _
Button20.Click, _
Button21.Click, _
Button22.Click, _
Button23.Click, _
Button24.Click, _
Button25.Click, _
Button26.Click, _
Button27.Click, _
Button28.Click, _
Button29.Click, _
Button30.Click, _
Button31.Click, _
Button32.Click, _
Button33.Click, _
Button34.Click, _
Button35.Click, _
Button36.Click, _
Button37.Click, _
Button38.Click, _
Button39.Click, _
Button40.Click

Write_Coil.Show()
For i = 0 To maxinput - 1
If sender.Equals(input(i)) Then
If input(i).Text = "1" Then
Write_Coil.Radio_OFF.Checked = True
Else
Write_Coil.Radio_ON.Checked = True
End If
Write_Coil.TextBox1.Text = "+" & start_address + i
End If
Next
End Sub

4. Setelah di-debug, hasilnya akan seperti ini :

42
MODUL 8

APBSCADA : WRITE REGISTER PLC

1.1. Durasi : 8 jam

1.2.Tujuan (TIU+TIK) :

43
1. Mampu menulis / mengubah nilai register pada PLC
Schneider
2. Mampu membuat program (VB Solution) yang dapat
menulis (Set) register

1.3.Peralatan :
1. Personal Komputer / Laptop yang terinstall Visual Studio
2. Modul Praktikum SCADA
3. Kabel jaringan

1.4.Pelaksanaan :
1. Hubungkan kabel jaringan ke Router yang terpasang di
Modul Praktikum SCADA
2. Jalankan Microsoft Visual Studio dengan dengan intruksi
sebagai berikut

Setelah dapat melakukan pembacaan register (MODUL 6) serta melakukan penulisan


(set) memori (MODUL 7), kita akan melakukan penulisan nilai (set) pada register. Akan
tetapi pada modul ini kita akan mencoba PLC yang lain, yaitu PLC Schneider, karena PLC
Schneider juga menggunakan komunikasi Modbus.

Untuk dapat melakukan penulisan (Set) nilai pada register,dibutuhkan Function Code
untuk write register (06) serta program yang mendukung sebagai berikut :

1. Kita dapat meneruskan program dari MODUL 6 (Read Register). Pada Class
APBPLC tambahkan codingan berikut :

Public Function CreateRegisterRequest( _


ByVal TransID As UShort, _

44
ByVal unit As Byte, _
ByVal startaddress As UShort, _
ByVal numBytes As UShort, _
ByVal FunctionCode As Byte) As Byte()

Dim numData As UShort


Dim data As Byte() = New Byte(numBytes + 10) {} 'Buffer for telegram
'MBAP Header:
' 2 bytes Data(0,1) Transaction ID
' 2 bytes Data(2,3) Protocol ID not used at the moment
' 2 bytes Data(4,5) Message length (number of follwing ID) depend on ^numBytes^
' 1 byte Data(6) Unit ID, slave address
'PDU:
' 1 byte Data(7) Function Code
' 2 bytes Data(8,9) Start(address)
' 2 bytes Data(10,11) Quantity of Register
numData = Write_Register.TextBox2.Text
Dim _id As Byte() = BitConverter.GetBytes(CShort(TransID))
data(0) = _id(1) 'Transaction ID high byte
data(1) = _id(0) 'Transaction ID low byte
' data(4) = 0
data(5) = 6
data(6) = unit
data(7) = fctWriteSingleRegister
Dim _adr As Byte() = BitConverter.GetBytes(CShort(startaddress))
data(8) = _adr(1)
data(9) = _adr(0)
Dim _cnt As Byte() = BitConverter.GetBytes(CShort(numData))
data(10) = _cnt(1)
data(11) = _cnt(0)
data(12) = CByte(numBytes - 2)
Return data
End Function

Dimana numData adalah nilai angka yang akan kita set ke dalam salah satu alamat
PLC yang kita tentukan.

2. Tambahkan project baru sbb (misal project name : write_register) :

45
Public Class Write_Register
Dim send_data(511) As Byte
Dim received_data(511) As Byte
Dim address_write As Integer
Dim register_address As Integer

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click


Me.Close()
End Sub
Private Sub writeRegister(ByVal TransID As UShort, _
ByVal UnitID As Byte, _
ByVal RegisterNumber As UShort, _
ByVal numRegister As UShort)
Dim nbytes As Integer = numRegister * 2
send_data = Home.APB.CreateRegisterRequest(TransID, UnitID, address_write,
numRegister, 6)
Read.ShowMessage(send_data, Read.tbSend)
Home.APB.GetData(send_data, received_data)
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick


address_write = TextBox1.Text
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click


WriteRegister(Convert.ToUInt16(Setting.mtbTransID.Text), _
Convert.ToUInt16(Setting.mtbUnitNumber.Text), _
Convert.ToByte(0), _
Convert.ToByte(Read.lengthstatus.Text))
Me.Close()
End Sub
End Class
Pada Private Sub writeRegister, angka 6 pada send_data adalaha function code dari
write register (06).

3. Pada read.vb tambahkan program sbb :

46
Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click, _
Button2.Click, _
Button3.Click, _
Button4.Click, _
Button5.Click, _
Button6.Click, _
Button7.Click, _
Button8.Click, _
Button9.Click, _
Button10.Click, _
Button11.Click, _
Button12.Click, _
Button13.Click, _
Button14.Click, _
Button15.Click, _
Button16.Click, _
Button17.Click, _
Button18.Click, _
Button19.Click, _
Button20.Click, _
Button21.Click, _
Button22.Click, _
Button23.Click, _
Button24.Click, _
Button25.Click, _
Button26.Click, _
Button27.Click, _
Button28.Click, _
Button29.Click, _
Button30.Click, _
Button31.Click, _
Button32.Click, _
Button33.Click, _
Button34.Click, _
Button35.Click, _
Button36.Click, _
Button37.Click, _
Button38.Click, _
Button39.Click, _
Button40.Click

Write_Register.Show()
For i = 0 To maxinput - 1
If sender.Equals(input(i)) Then
Write_Register.TextBox1.Text = "+" & start_address + i
End If
Next
End Sub

47
4. Setelah di-debug, hasilnya akan seperti ini :

Alamat PLC
Schneider

Alamat
Modbus
Register
Schneider

48
Tugas !
1. Buat sebuah program (VB Solution) untuk menggabungkan semua program diatas
(tanpilan / animasi bebas). Setelah program tersebut dibuat, gunakan untuk membaca /
menulis APB PLC dan juga Schneider!

49