Category Archives: Dasar-2

Contoh Code modbus client VB net Membaca dan Menulis Modbus TCP device Server

Pendahuluan

Berikut ini contoh mudah membaca dan menulis dgn vb net ke device yg menggunakan protokol Modbus

Imports EasyModbus
Public Class Form1
    Dim ComError
    Dim ModbusClient
    Dim modClient As New EasyModbus.ModbusClient

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim dataku As Integer()
        Try
            dataku = modClient.ReadHoldingRegisters(Convert.ToInt16(TextBox7.Text), Convert.ToInt16(TextBox8.Text))
            ListBox1.Items.Clear()
            If dataku.Length > 0 Then
                For Each value As Integer In dataku
                    ListBox1.Items.Add(value)
                Next
            End If
            TextBox4.Text = "read berhasil"
        Catch ex As Exception
            ' MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            TextBox4.Text = ex.Message
        End Try


    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'Modbus_Client = New EasyModbus.ModbusClient(TextBox1.Text, 502)
        modClient.IPAddress = TextBox1.Text
        modClient.Port = TextBox2.Text

        ComError = 0
        Try

            modClient.Connect()
            TextBox4.Text = "Communication OK!"
        Catch ex As Exception
            ' MessageBox.Show("An error occurred: " & ex.Message, "Error Occurred", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning)
            TextBox4.Text = ex.Message
            ComError = 1
        End Try
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Try
            modClient.Disconnect()
            TextBox4.Text = "diskonek berhasil"
        Catch ex As Exception
            TextBox4.Text = ex.Message
        End Try


    End Sub

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Try

            modClient.WriteSingleRegister(Convert.ToInt16(TextBox6.Text), Convert.ToInt16(TextBox3.Text))
            TextBox4.Text = "writw berhasil"
        Catch ex As Exception
            TextBox4.Text = ex.Message
        End Try
    End Sub

    Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
        '  TextBox5.Text = EasyModbus.ModbusClient.ConvertRegistersToLong(modClient.ReadHoldingRegisters(4, 2))
        '  UShort[] holdingRegisters = modbusClient.ReadHoldingRegisters(100, 2)
        Dim holdingRegisters As Integer() = modClient.ReadHoldingRegisters(4, 2)

        ' Convert the registers to a long integer
        Dim value As Long = ModbusClient.ConvertRegistersToLong(holdingRegisters)
        TextBox5.Text = value.ToString()
    End Sub
End Class

Doownload Source Code disini

Untuk Modbus TCP Servernya Kita gunakan aplikasi Simulator counter produksi sbb:

Target akan increment 1 setiap sekian detik sesuai waktu cycleTime yg diset . misal cycle time = 5 , maka setiap 5 detik target akan bertambah 1.

Download aplikasi counter simulator disini

Referensi :

  1. http://easymodbustcp.net
  2. http://counterproduksi.com

contoh code C# menulis-write type data long ke modbus register

buat project baru

buat form sbb

code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using www.counterproduksi.com;

namespace ConvertInt32ToMSBandLSB
{
    public partial class Form1 : Form
    {

     //   private www.counterproduksi.com.CounterEthernet  MBCounter1;
        private www.counterproduksi.com.CounterEthernet MBCounter1; 

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            int PLAN = Convert.ToInt32(textBox1.Text);
        
             

            int HighINT = (PLAN   >> 16) & 0x0000ffff;
            int LowINT = PLAN & 0x0000ffff;
            int LSBUnsigned = (Int16)LowINT; // y = -1


            txtMSB.Text =  HighINT.ToString();  
            txtLSB.Text  = LSBUnsigned.ToString(); 

        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show(" di disable");
            /*
            byte[] data1 = new Byte[2];
            int[] word = new int[1];


            word[0] = Convert.ToInt16(txtLSB.Text);
            byte[] dat = BitConverter.GetBytes((short)IPAddress.HostToNetworkOrder((short)word[0]));
            data1[0] = dat[0];
            data1[1] = dat[1];
            try
            {
          
                   //   MBCounter1.WriteSingleRegister(4, 0, 30, data1);
                MBCounter1.WriteDataCounter(4, 0, 5, data1);
        

            }
            catch (SystemException error)
            {
                MessageBox.Show(error.Message);
            }
        
        */
        }

        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                MBCounter1 = new CounterEthernet("127.0.0.1", 502);
                txtVersiLibrary.Text = MBCounter1.versi;
              //  MBCounter1.OnResponseData += new ModbusTCP.Master.ResponseData(MBCounter1_OnResponseData);
               // MBCounter1.timeout = 6000;
                button3.Enabled = false;
                button4.Enabled = true;
                button5.Enabled = true;
                button6.Enabled = true;
                button2.Enabled = true;
            }//end try
            catch (SystemException ex)
            {
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
           
            try
            {
                MBCounter1.disconnect();
                MBCounter1.Dispose();
                button3.Enabled = true;
                button4.Enabled = false;
                button5.Enabled = false;
                button6.Enabled = false;
                button2.Enabled = false;

            }//end try
            catch (SystemException ex)
            {
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            button4.Enabled = false;
            button5.Enabled = false;
            button6.Enabled = false;
            button2.Enabled = false;

           
        }

        private void button5_Click(object sender, EventArgs e)
        {
            MessageBox.Show(" di disable");
            /*
            byte[] data1 = new Byte[2];
            int[] word = new int[1];


            word[0] = Convert.ToInt16(txtMSB.Text);
            byte[] dat = BitConverter.GetBytes((short)IPAddress.HostToNetworkOrder(( short)word[0]));
            data1[0] = dat[0];
            data1[1] = dat[1];
            try
            {

                //   MBCounter1.WriteSingleRegister(4, 0, 30, data1);
                MBCounter1.WriteDataCounter(4, 0, 4, data1);


            }
            catch (SystemException error)
            {
                MessageBox.Show(error.Message);
            }

         */
        }

        private void button6_Click(object sender, EventArgs e)
        {
            byte[] data1 = new Byte[4];
            int[] word = new int[2];


            word[0] = Convert.ToInt16(txtMSB.Text);
            byte[] dat = BitConverter.GetBytes((short)IPAddress.HostToNetworkOrder((short)word[0]));
            data1[0] = dat[0];
            data1[1] = dat[1];

            word[1] = Convert.ToInt16(txtLSB.Text);
            byte[] dat1 = BitConverter.GetBytes((short)IPAddress.HostToNetworkOrder((short)word[1]));
            data1[2] = dat1[0];
            data1[3] = dat1[1];

            try
            {


               // MBCounter1.WriteDataCounter(4, 0, 5, data1);
                MBCounter1.WriteMultipleRegister(4, 0, 4, data1);


            }
            catch (SystemException error)
            {
                MessageBox.Show(error.Message);
            }

            //======================
        }
    }
}

Contoh Code VB Net Kirim Terima Data String

Form VB KIrim Terima Data String   komunikasi serial

Imports System.IO.Ports
Public Class Form1
Dim SpaceCount As Byte = 0

Dim RXArray(2047) As Char ‘ Text buffer. Must be global to be accessible from more threads.
Dim RXCnt As Integer ‘ Length of text buffer. Must be global too.

Dim responseText As String

‘Dim Tampung(100) As Char
Dim RXCount As Integer
Dim ReceiveByte As Byte

‘ End Sub
Private Sub receiver() Handles SerialPort1.DataReceived

End Sub
Private Sub enableChoice(ByRef state As Boolean)
portChoice.Enabled = state
baudChoice.Enabled = state
dataBitChoice.Enabled = state
stopBitChoice.Enabled = state
parityChoice.Enabled = state
timeOutBox.Enabled = state
End Sub

Public Sub serialCommInit()

baudChoice.SelectedIndex = 3
dataBitChoice.SelectedIndex = 1
stopBitChoice.SelectedIndex = 0
parityChoice.SelectedIndex = 0

If SerialPort1.IsOpen Then
closePort.Enabled = True
openPort.Enabled = False
Else
closePort.Enabled = False
openPort.Enabled = True
End If

End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call serialCommInit()

For Each COMString In SerialPort1.GetPortNames ‘SerialPort1.GetPortNames ‘ Load all available COM ports.
portChoice.Items.Add(COMString)
Next
End Sub

Private Sub clearButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles clearButton.Click
responseBox.Text = “”
SpaceCount = 0
responseText = “”
End Sub

Private Sub closePort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles closePort.Click
If SerialPort1.IsOpen Then
SerialPort1.Close()
closePort.Enabled = False
openPort.Enabled = True
enableChoice((True))
End If
End Sub

Private Sub ExitButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitButton.Click
Call closePort_Click(closePort, New System.EventArgs())
End
End Sub

Private Sub openPort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles openPort.Click
Dim sformat As String

If SerialPort1.IsOpen Then Exit Sub

‘isi baud rate yg dipilih user
SerialPort1.BaudRate = baudChoice.SelectedItem
‘ isi property parity dari combobox yg dipilih user
If parityChoice.SelectedIndex = 0 Then
SerialPort1.Parity = IO.Ports.Parity.None
ElseIf parityChoice.SelectedIndex = 1 Then
SerialPort1.Parity = IO.Ports.Parity.Even
Else
SerialPort1.Parity = IO.Ports.Parity.Odd
End If

SerialPort1.PortName = portChoice.SelectedItem
SerialPort1.DataBits = dataBitChoice.SelectedItem
SerialPort1.ReadTimeout = timeOutBox.Text
On Error GoTo ErrHandler
SerialPort1.Open()
appendlnResponse(portChoice.SelectedItem & “: Open at ” & baudChoice.SelectedItem)
SerialPort1.DtrEnable = True

openPort.Enabled = False
closePort.Enabled = True
enableChoice((False))

Exit Sub
ErrHandler:
MsgBox(SerialPort1.PortName + ” is Unavailable”)
End Sub
Private Sub appendlnResponse(ByRef s As String)
responseBox.Text = responseBox.Text & s
End Sub

Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click

‘Dim TextString As String

If SerialPort1.IsOpen Then
‘ TextString = commandString.Text ‘+ Chr(10)

Try
If SerialPort1.IsOpen = False Then
openCommPort()
End If

SerialPort1.Write(commandString.Text)

Call getResponse() ‘ get a response within timeout.

Catch ex As Exception
MsgBox(“ERORNYA : ” + ex.Message)
End Try

Else
MsgBox(“COM port is closed. Please select a COM port”)
End If
End Sub
Public Function openCommPort() As Boolean
‘ If portChoice.SelectedIndex = -1 Then Call serialCommInit()
Call openPort_Click(openPort, New System.EventArgs())
If openPort.Enabled = True Then
openCommPort = False
openPort.Enabled = True
closePort.Enabled = False
Else
openCommPort = True
openPort.Enabled = False
closePort.Enabled = True
End If
End Function

Private Sub getResponse()

Dim RXByte As Byte
‘beri waktu menunggu sampai data response masuk semua ke buffer dgn do-loop atau fungsi sleep
‘ Do
‘ Loop Until (SerialPort1.BytesToRead >= 10) ‘
System.Threading.Thread.Sleep(1000)
RXCnt = 0
Do
RXByte = SerialPort1.ReadByte
RXArray(RXCnt) = Chr(RXByte) ‘konversi byte ke char/ASCII code sblm disimpan ke array
RXCnt = RXCnt + 1

Loop Until (SerialPort1.BytesToRead = 0)
‘ TextBox1.Text = RXCnt.ToString
responseBox.Text = New String(RXArray, 0, RXCnt)

End Sub

End Class


Untuk  test program diatas anda bisa menggunakan Arduino yg akan mereply apa yg dikirim dari VB net

berikut program/sketch arduinonya :

String readString; //main captured String
String  perintah;

void setup()
{
Serial.begin(9600);

}

void loop() {
while (Serial.available()>0)
{

readString =Serial.readString();
perintah =readString.substring(0,2);
if( perintah ==”CR“) Serial.println(“CC“);
if( perintah ==”ST“) Serial.println(“OK“);
if( perintah ==”RS“) Serial.println(“OK“);
if( perintah ==”RD“) Serial.println(“OK“);
readString=””;
perintah=””;

}
}

Tips Merubah 2 bilangan type int menjadi type long dan sebaliknya dengan vb net

Tips ini antara lain  berguna jika kita ingin membaca data type long  tapi disimpan di 2 buah register  type integer di sebuah alat  modbus. seperti tampak  pd gb berikut

 

berikut contoh code vb  untuk merubah  2 register 16 bit  (integer) menjadi bilangan 32 bit (long)

Dim dataLong as  Long

Dim sgInt As Int16 = ModbusTCPCom2.Read(40002)
Dim unsgInt = Convert.ToUInt32(sgInt.ToString(“X8”), 16)

dataLong = unsgInt + (ModbusTCPCom2.Read(40001) * 65536)


Sedangkan jika kita ingin sebaliknya misal kita ingin membuat modbus  server  menggunakan vb net  dan  kita akan  menyimpan data long (32 bit ) ke dalam 2 buah register 16 bit   bisa  menggunakan kode berikut

Private Sub LongToInt(ValueLong As ULong, index As Short)
Dim HighINT As UInteger
Dim LowINT As UInteger
Dim Val16 As Int16
Dim uVal16 As UInt16

HighINT = Convert.ToUInt16(ValueLong >> 16 And &HFFFF)
LowINT = Convert.ToUInt16(ValueLong And &HFFFF)

Val16 = Convert.ToInt16(LowINT.ToString(“X4”), 16)
ModbusRegister(index) = HighINT
ModbusRegister(index + 1) = Val16
End Sub


adapun misal kita membuat alat modbus server  dengan arduino dan ingin menyimpan data type long  (32bit) ke dalam 2 buah register  integer 16 bit  bsa menggunakan code berikut

void LongToInt(unsigned long ValueLong, int index)
{
int HighINT = (ValueLong >> 16) & 0x0000ffff;
int LowINT = ValueLong & 0x0000ffff;
ModbusRegister[index] = HighINT;
ModbusRegister[index+1] = LowINT;
}

 


reference   www.counterproduksi.com

Mengirim email akun Gmail melalui Visual Basic

  1.  buat form mengirim email contoh:

 

code program

Imports System.Net.Mail
Public Class Form4

Private Sub BtnSend_Click(sender As Object, e As EventArgs) Handles BtnSend.Click
If SendEmail() = True Then MessageBox.Show(“terkirim”)
End Sub

Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
TxtSMTPName.Text = “smtp.gmail.com”
Me.Width = 400
BtnSetting.Visible = True
BtnCloseSetting.Visible = False
End Sub

Private Sub BtnClose_Click(sender As Object, e As EventArgs) Handles BtnClose.Click
Close()

End Sub

Private Function SendEmail() As Boolean
Dim success As Boolean = False

‘Set the HostName
Dim host As String = Me.TxtSMTPName.Text
‘Set the email information
Dim [From] As String = Me.TxtSender.Text
Dim [To] As String = Me.TxtTo.Text
Dim Subject As String = TxtSubject.Text
Dim Body As String = TxtBody.Text

‘Create a new MailMessage, specifying who it is From and who it is going To
‘ and set the Subject and Body
Dim Email As New System.Net.Mail.MailMessage()
Email.From = New MailAddress(From)
Email.To.Add([To])
Email.Subject = Subject
Email.Body = Body

‘================================================================================

‘Create a new SmtpClient
Dim mailClient As New System.Net.Mail.SmtpClient()
mailClient.Host = host

‘Set the port number, if it was provided
Dim port As Int32 = 0
Int32.TryParse(Me.txtPort.Text, port)

If port <> 0 Then mailClient.Port = port

Dim authenticationInfo As New System.Net.NetworkCredential(Me.txtUserName.Text.Trim(), Me.txtPassword.Text.Trim())
‘***** Authentication (If checked)
If chkAuthenticate.Checked = True Then
‘Create a new NetworkCredential,
‘ and set the User Name and Password
mailClient.UseDefaultCredentials = True
mailClient.Credentials = authenticationInfo
mailClient.EnableSsl = chkSSL.Checked
Else
mailClient.UseDefaultCredentials = False
mailClient.Credentials = authenticationInfo
mailClient.EnableSsl = chkSSL.Checked
End If
‘***** End Authentication

Try
‘Attempt to send the email, show any exceptions below
mailClient.Send(Email)
success = True
Catch ex As Exception

MessageBox.Show(ex.ToString, “ada error”)

success = False
End Try

Email.Dispose()
mailClient = Nothing
GC.Collect()

Return success

End Function

Private Sub BtnSetting_Click(sender As Object, e As EventArgs) Handles BtnSetting.Click
Me.Width = 821
BtnSetting.Visible = False
BtnCloseSetting.Visible = True
End Sub

Private Sub BtnCloseSetting_Click(sender As Object, e As EventArgs) Handles BtnCloseSetting.Click
Me.Width = 400
BtnSetting.Visible = True
BtnCloseSetting.Visible = False
End Sub
End Class

=============================================

2.   Buat pasword akun Gmail untuk login melalui Aplikasi

Gmail menyediakan fasilitas login melalui aplikasi dengan cara membuat password khusus buat dipakai login melalui aplikasi .

langkah langkahnya ikuti link berikut

https://support.google.com/accounts/answer/185833

setelah anda mengikuti langkah2  yg ada di link diatas hasilnya anda akan mendapatkan password  baru yg khusus buat aplikasi.

 

Pengetahuan Dasar Arduino : simpan data Arduino ke database mysql melalui ethernet

untuk  percobaan yg harus disiapkan

-software : xampp   (   webserver  dan mysql  server)

-hardware : arduino + ethernet shield  + kabel data utp   + komputer

-sedikit pengetahuan dasar  script    php.

Kita akan menyimpan data arduino  melalui webserver  (script php). disini  arduino  berlaku sebagai web client spt  chrome atau ie

arduinosbgwebclient

Langkah langkah

  1.  upload sketch arduino sbb

Arduino -webserver (script php)  -> mysql
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

IPAddress server(192,168,1,10); //   alamat IP  komputer yg terinstall webserver  + mysql
//char server[] = “www.websiteku.com”; // name address for websiteku.com (using DNS)

// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 1, 177);

// Initialize the Ethernet client library
EthernetClient client;

void setup() {
// Open serial communications
Serial.begin(115200);

// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
Ethernet.begin(mac, ip);
}
// give the Ethernet shield a second to initialize:
delay(1000);
Serial.println(“connecting…”);

// if you get a connection, report back via serial:
if (client.connect(server, 80))
{
Serial.println(“connected”);
// Make a HTTP request:
client.println(“GET /latihan1/update_data.php?temperature=99 HTTP/1.1”);
client.println(“Host: http://www.google.com&#8221;);
client.println(“Connection: close”);
client.println();
} else
{
// if you didn’t get a connection to the server:
Serial.println(“connection failed”);
}

}

void loop()
{
// if there are incoming bytes available
// from the server, read them and print them:
if (client.available())
{
char c = client.read();
Serial.print(c);
}

// if the server’s disconnected, stop the client:
if (!client.connected())
{
Serial.println();
Serial.println(“disconnecting.”);
client.stop();

// do nothing forevermore:
while (true);
}
}

2.  tulis script PHP  berikut dan simpan dgn nama :  update_data.php  , tempat menyimpan di  folder latihan1 di dldm folder httdoc

<?php
$servername = “localhost”;
$username = “root”;
$password = “pasword”;
$dbname = “test”;

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die(“Connection failed: ” . mysqli_connect_error());
}

$sql = “UPDATE temperature SET celsius = ‘”.$_GET[“temperature”].”‘ WHERE censor = ’12′”;

if (mysqli_query($conn, $sql)) {
echo “update ok”;
} else {
echo “Error: ” ;
}

mysqli_close($conn);
?>

 

3.  jalankan xampp  ,  start   webserver apache dan mysql server.

xampp.jpg

4. buat tabel temperature   di database test    .  buat menggunakan phpMyadmin

5. restart arduino

6. buka localhost/phpmyadmin lihat database test dan tabel temperatur apakah data sdh tersimpan/terupdate.

Pengetahuan Dasar VB.Net : Membuat laporan dengan Report Viewer dan Report Builder

[Draft]    test

Software yang digunakan pada artikel:  Visual Studio express 2013, database Sql Server express 2014 dan Report Builder 2014.

reportBuilder

Gambar 1. Aplikasi Report Builder untuk membuat dokument lamporan ( *.rdl )

 

Tahapan membuat Report dengan Report Viewer

  1. Buat dokumen Report  (*.rdl) dengan  Report Builder 2014
  2. Buat project baru dan drag and drop report viewer dari toolbox ke form
  3. tambahkan textbox dan button
  4. import namespace  untuk provider database yg dipakai dan report viwer
  5. Isi kode di artikel di bawah

report1

Gambar 2.  Tampilan Report viewer pada Form

kode program

Imports Microsoft.Reporting.WinForms
Imports System.Data.SqlClient

Public Class Form1

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

Me.ReportViewer1.RefreshReport()
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim CONN As New SqlConnection
CONN.ConnectionString = “Data Source=neng-pc\sqlexpress;Initial Catalog=dbPOS;Integrated Security=True ”
CONN.Open()

Dim DA As New SqlDataAdapter
Dim sql As New SqlCommand(“select * from TBLBARANG WHERE STOK >” + TextBox1.Text + “”, CONN)
Dim tabelDataku As New DataTable

DA.SelectCommand = sql
DA.Fill(tabelDataku)

Dim BS As New BindingSource
BS.DataSource = tabelDataku

Try
Dim RDS As New ReportDataSource(“DataSet1”, tabelDataku)

Me.ReportViewer1.LocalReport.ReportPath = “D:\reportku.rdl”
Me.ReportViewer1.LocalReport.DataSources.Clear()
Me.ReportViewer1.LocalReport.DataSources.Add(RDS)
Me.ReportViewer1.RefreshReport()
Catch ex As Exception
MsgBox(ex.Message)
End Try

CONN.Close()

End Sub

End Class


sumber : modul training VB.NET   MITRAFAY.COM

Pengetahuan Dasar pemrograman Database POSTGRESQL dengan VB.Net

[DRAFT]

Import Npgsql

Dim CONN As NpgsqlCONNection
Dim CMD As NpgsqlCMDand
Dim DA As NpgsqlDataAdapter

Dim DS As DataSet
DS = New DataSet
CONN = New NpgsqlCONNection(“Server=127.0.0.1;Port=5432;Userid=Test;password=test;SslMode=Disable”)
CMD = New NpgsqlCMDand
CMD.CONNection = CONN
CONN.Open()
CMD.CMDandType = CMDandType.Text
CMD.CMDandText = “SELECT * FROM “”Customers””;”
DA = New NpgsqlDataAdapter(CMD)
DA.Fill(DS)
dgCustomers.DataSource = DS
dgCustomers.DataBind()

CMD.Close()
CONN.Close()

Pengetahuan Dasar pemrograman Database dengan VB.Net

  • Apa itu ADO.net ?
  • Koneksi Database SQL Server dengan Sql Server data provider
  • Koneksi DataBase  dengan OLEDB Data Provider
  • Koneksi database dengan ODBC  data Provider

Mengenal ADO.NET

Pada pemrograman sebelum .NET (VB6), pengembang menggunakan teknologi akses data seperti ODBC, OLEDB, dan ActiveX Objek Data (ADO).  Untuk pemrograman VB.NET, Microsoft membuat teknologi baru menciptakan cara baru untuk bekerja  dengan database, yang disebut ADO.NET.  dan ADO.NET bukan kelanjutan ADO teknologi sebelum NET.

ADO.NET adalah sekumpulan Class  yang menyediakan  layanan akses data untuk programer .NET,  menyediakan seperangkat komponen  untuk membuat aplikasi  data yang didistribusikan.
ADO.NET adalah bagian integral dari .NET Framework yang menyediakan akses ke database .Class ADO.NET  ada di namespace  System.Data.dll

Didalam ADO.NET tersedia berrbagai  data provider spt OLEDB, ODBC dan data provider khusus untuk database tertentu spt untuk SQL server  dan oracle. Selain untuk database  juga tersedia data provider untuk XML.

XML digunakan untuk pertukaran data antar  system yg berbeda contoh sebuah system di linux dgn aplikasi  java dan mysql  akan bertukar data dgn system lain yg mengunakan  os windows dgn aplikasi  VB.NET dan MsAccess . Cara mudah pertukaran data antara dua system tsb  adalah data yg dipertukarkan  mempunyai format yang sama yaitu dlm  bentuk XML. Pada artikel ini sy tdk membahas tentang XML.

Arsitektur ADO.NET

Terdapat 2 kelompok  class utama dlm ADO.Net:
Pertama data provider :    digunakan  untuk koneksi  ke database .
Kedua adalah data set :  digunankan untuk menyimpan  sementara (catching) dan mengelola data . Dataset berupa tabel2 .  Lebih jelasnya bisa dilihat dlm arsitektur ADO.Net berikut ini:

adonet

gambar 1.  Arsitektur ADO.NET

Conected dan Disconected

ADO.NET  menyediakan mode conected dan disconected dlm mengelola database.  Pada Mode conected  client memodifikasi data dlm keadaan online  sedangkan mode disconected adalah fitur baru ADO.NET  gambaran mekanismenya antara lain  sbb: client membuka  koneksi ke server database kemudian   data disimpan di  buffer(dataset) client  lalu koneksi server diputus setelah  data diolah baru dibuat  lagi koneksi ke server untuk transfer data. model disconected  spt ini  sangat membantu karena bisa mengurangi trafik data dlm jaringan  terutama jika jumlah client sangat banyak

ARSITEKTUR

Gambar 2.   arsitektur ADO.NET
Object2 Dataprovider digunakan untuk menghubungkan aplikasi dgn database, mengeksekusi perintah dan mengambil data, menyimpannya dalam dataset, membaca data yang diambil dan memperbarui database.  object data provider  yang akan kita bahas adalah  bagian yg spt tampak berikut ini:

dataprovider

Melalui gambar  arsitektur diatas saya ingin memperjelas perbedaan cara mengases database dgn conected ( client dan server database tergubung terus selama  manipulasi data) dgn data reader. dan  disconected , pemilihan kedua  cara tsb tergantung  kebutuhan aplikasi yg kita buat. misalnya untuk mengisi datagridview maka kita gunakan data adafter dan data set sedangkan jika kita ingin mengambil satu baris atau beberapa baris data maka kita gunakan data reader.

berikut penjelasan singkat  bagian/object  yang ada di  ADO.NET

  1. Connection       :  Untuk koneksi ke database
  2. Command         :   melaksanakan perintah query sql
  3. DataReader      :   membaca data read only , data sedikit
  4. DataAdafter     :    membaca data dgn  membuat buffer/catch localy
  5. DataSet             :    tempat tampungan data output dataadafter

Connection
Komponen ini digunakan untuk mengatur koneksi dengan sebuah data source..

Command
command adalah pernyataan SQL atau prosedur yang tersimpan digunakan untuk mengambil, insert, delete atau update data dalam  sebuah data source. Method yang sering dipakai antara lain

  • ExcuteNonQuery : tdk menhasilkan output data (delete,insert,update)
  • ExcuteScalar : menghasilkan 1 data scalar (select count(*)  )
  • ExcuteReader : menghasilkan output 0 baris atau lebih (select )

DataReader
Datareader digunakan untuk mengambil data dari database dalam mode read-only dan mode forward.

DataSet
DataSet adalah representasi data di memori . dataset terputus dari database, ia menyimpan cached sejumlah record yang diambil dari database. Ketika sambungan dibuat dengan database, data adapter membuat dataset dan menyimpan data di dalamnya. Setelah data diambil dan disimpan dalam dataset, koneksi dengan database ditutup. Hal ini yg disebut  sebagai ‘arsitektur terputus/disconected’. dataset  bekerja sebagai database virtual yg berada di memori  yang berisi tabel.

DataAdapter
DataAdapter merupakan bagian integral dari kerja ADO.Net karena data ditransfer ke dan dari database melalui data adafter. Data adafter mengambil data dari database dan menyimpanya ke dalam dataset selain itu data adafter juga mengupdate database.
Ketika perubahan  terjadi di dataset, perubahan juga terjadi di dalam database yg  dilakukan oleh data adapter. berikut pilihan untuk membuat object dataadafter

Dim DA As SqlDataAdapter=New SqlAdapter
Dim DA As SqlDataAdapter=New SqlAdapter(cmd)
Dim DA As SqlDataAdapter=New SqlAdapter(sql,conn)
Dim DA As SqlDataAdapter=New SqlAdapter(sql,connstring)

dataprovider

Gambar 3.  blok diagram data provider

Tiap  data provider  mempunyai namespace masing2 yg ada di NET Framework antara lain :

  • data provider  untuk  SQL Server  namespacenya  : System.Data.SqlClient
  • data provider untuk  Oracle namespacenya              : System.Data.OracleClient
  • data provider untuk  ODBC namespacenya                : System.Data.Odbc
  • data provider  untuk  OLEDB namespacenya             : System.Data.OleDb

1. Data Provider  untuk  database SQL SERVER

Data Provider untuk database  SQL Server ada di namespace System.Data.SqlClient. Berikut ini  beberapa class class   yg sering digunakan   dlm namespace tsb :

  • SqlConnection: class yg digunakan untuk koneksi  ke database SQL Server
  •  SqlCommand   : class yg digunakan untuk mengeksekusi SQL query  atau  store procedures
  • SqlDataAdapter: class yg menghubungkan  dataset  dan  database SQL Server
  • SqlDataReader :  class yg digunakan untuk membaca database secara read only.

2. Data provider untuk  database ORACLE

Data provider  khusus  untuk database Oracle tersedia di namespace System.Data.OracleClient. Berikut ini  beberapa class class   yg disediakan  dlm namespace tsb  yg sering digunakan antara lain:

  • OracleConnection
  • OracleCommand
  • OracleDataAdafter
  • OracledataReader

3. Data provider  OLEDB  untuk database dg teknoogi yg lama ( ms access,  sql server versi < 7 )

OLEDB digunakan untuk database lama antara lain : Pradox, Dbase, MsAccess ,Mysql ,DB2 dan  sql server versi lama. selain itu  OLEDB juga digunakan ketika kita menggunakan 2 database yg berbeda   misal kita menggunakan MsAccess dan SQL server dlm satu aplikasi secara simultan.

Data provider OLEDB harus melalui beberapa layer untuk mengakses database. sehingga lebih efisien anda menggunakan data provider yg spesifik untuk tiap database. mial untuk Oracle gunakanlah data provider  yg ada di System.Data.OracleClient  bgitupun untuk SQL Server lebih efisien menggunakan data provider yg tersedia di System.Data.SqlClient dari pada anda menggunakan data provider OLEDB (System.Data.OleDb).

Class class yg digunakan oleh data provider OLEDB  (class class tsb ada di  namespace System.Data.OleDb)  antar lain:

  • OleDbConnection,  class untuk mengkoneksi  database
  • OleDbCommand,   class untuk  menjalankan  SQL query
  • OleDbDataAdapter, class untuk menghubungkan  dataset  dg database
  • OleDbDataReader,   membaca hasil output dari database

4. Data provider  ODBC  untuk berbagai database dg teknoogi yg lama

ODBC adalah teknologi akses data  “general purpose” asli Microsoft. ODBC masih banyak digunakan untuk sumber data yang tidak memiliki provider OLE DB atau data provider .NET Framework.
provider data ODBC ada di namespace System.Data.Odbc. Arsitektur ODBC pada dasarnya adalah proses tiga-tier. data provider ODBC kurang efisien daripada komunikasi langsung  dgn data provider  spesifik database  (sqlClient, mysqlClient, oracleClient ),  jadi  untuk kinerja lebih baik  hindari   provider data ODBC.
berikut ini beberapa class class  penting dalam namespace Odbc.

  • OdbcCommand
  • OdbcConnection
  • OdbcDataAdapter
  • OdbcDataReader
  • OdbcError
  • OdbcParameter
  • OdbcTransaction

Berikut tabel ringkasan class yang sering dipakai untuk tiap data provider

classdataprofider

Contoh  Kode Program

Sekarang waktunya kita akan lihat contoh konkrit  bagaimana aplikasi  VB.Net mengakses database secara “conected” dgn objek DataReader .


Contoh  aplikasi  mengakases database sql server dgn  data provider  SQL Server

Imports  System.Data.sqlClient

Dim CONN As New SqlConnection
conn.ConnectionString = “Data Source=.\sqlexpress;

Dim sql As String = “select * from tblKaryawan”
Dim DR As SqlDataReader = Nothing
CONN.Open()
Dim  CMD As New SqlCommand(sql, CONN)
DR = CMD.ExecuteReader()

While DR.Read()
Console.WriteLine(“{0} | {1}”,  DR(“FirstName”).ToString(),  DR(1).ToString())
End While

DR.Close()
CONN.Close()


Untuk menghubungkan aplikasi  vb.net  dg  database sql server selain dengan data provider  khusus untuk sql server spt diatas ( import System.Data.SqlClient) juga bisa dengan OLEDB ataupun dgn ODBC adapun  dimana letak perbedaan utamanya  bisa dilihat di table berikut ini:

perbedaan1

akan tetapi usahakan menggunakan provider spesifik untuk database   sebelum menetukan pilihan  kpd  data provider  OLEDB atau ODBC


Contoh Kode Program mengakses database SQL Server menggunakan data provider OLEDB

Import  System.Data.OLEDB

Dim CONN As New OleDbConnection
conn.ConnectionString = “Provider=sqloledb;Data Source=.\sqlexpress;”
Dim sql As String = “select * from tblKaryawan”
Dim DR As OleDbDataReader = Nothing
conn.Open()
Dim CMD As New OleDbCommand(sql, CONN)
DR = CMD.ExecuteReader()

While DR.Read()
Console.WriteLine(“{0} | {1}”,  DR(“FirstName”).ToString(),  DR(1).ToString())

End While

DR.Close()
CONN.Close()


Contoh Kode Program mengakses database SQL Server menggunakan data provider ODBC 

sebelumnya buat dsn ODBC melalui control panel

odbc

gambar  4.  Menu Membuat ODBC di control panel

Adapun step step selanjut  adalah sebagai berikut pd gambar dibawah ini:

odbcStep

Gambar 5. Langkah langkah membuat koneksi dsn ODBC

setelah selesai membuat  koneksi dsnODBC dengan bantuan menu di control panel baru kita buat program untuk menggunakan nya yaitu sbb:

import  System.Data.ODBC

Dim connString As String = “dsn=namaDsnODBC”

Dim sql As String = “select * from tblKaryawan”
Dim DR As OdbcDataReader = Nothing
Dim CONN As New OdbcConnection(connString)
CONN.Open()
Dim CMD As New OdbcCommand(sql, CONN)
DR = CMD.ExecuteReader()

While DR.Read()
Console.WriteLine(“{0} | {1}”,  DR(“FirstName”).ToString(),  DR(1).ToString())
End While

DR.Close()


contoh kode program VB.Net mengakses  database MYSQL menggunakan data provider khusus MYSQL 

data provider khusus MYSQL  menggunakan namespace MySql.Data.MySqlClient

https://pccontrol.wordpress.com/2014/12/17/pengetahuan-dasar-koneksi-vb-net-dan-database-mysql/

contoh  source code vb net lainnya bisa di download disini  https://drive.google.com/file/d/1c1wlosm_K5kGsOpsiKJ_8KsdJQ_qMDnU/view?usp=sharing

Kesimpulan  

  • data provider ODBC dan OLEDB bisa digunakan untuk mengakses berbagai macam database
  • tapi prioritaskan penggunaan data provider khusus yg sdh disediakan untuk database tsb .
  • cara akses database menggunakan ODBC dan OLEDB membutuhkan waktu akses lebih lama dibanding data provider khusus untuk database tsb.
  • Contoh perbedaan  data provider Sql Server dgn data provider OLEDB dlm mengakses database SQL server bisa dilihat pada gambar dibawah ini

perbedaanDataprovider

source:

Pengetahuan Dasar Membuat Aplikasi VB.Net untuk Monitoring Counter Produksi via LAN

sumber  :  www.counterproduksi.com

Panduan teknis  untuk membaca/menulis  data  ke  mikro counter dan Andon 7 segment maupun Andon matrik p10.

vbcounter

Untuk  mengakses data counter menggunakan aplikasi VB.Net atau C#  anda akan diberikan class library untuk setiap pembelian counter produksi. Dengan class library ini pemrograman VB.net atau C# untuk mengakses data counter menjadi sangat mudah  dilakukan.

vbcounter

Step by step Cara Mengakses (baca/tulis)  Data Counter dengan VB.Net  via LAN (TCP)

1. Menambahkan library counter*  ke dalam projet VB.net

Melalui menu Project->Add reference
Lalu pada code tambahkan:
Imports CounterTCP
——————————————————————————–
2. Membuat Obect counter

Private CounterLineA As CounterTCP.Client
Private CounterLineB As CounterTCP.Client

——————————————————————————–
3. Membuat koneksi ke Counter

Try
‘ Create new client Counter  and add event functions
CounterLineA = New Client(txtAlamatIPLineA..Text, NoPort)

AddHandler CounterLineA.OnResponseData, New CounterTCP.Client.ResponseData(AddressOf CounterLineA_OnResponseData)

Catch [error] As SystemException
‘MessageBox.Show([error].Message)
End Try
——————————————————————————–
4. Membaca Counter

// Membaca data Counter Line A
Try
CounterLineA.ReadDataCounter( 0, 15)  ‘baca data  0 – 15
Catch [error] As SystemException
MessageBox.Show(“READ EROR”)
End Try

// Membaca data Counter Line B
Try
CounterLineB.ReadDataCounter( 0, 15)  ‘baca data  0 – 15
Catch [error] As SystemException
MessageBox.Show(“READ EROR”)
End Try

——————————————————————————– 
5. Menampilkan Data Counter ke Form

Private Sub CounterLineA_OnResponseData()

Dim data As Byte()

data = values
TextBox1.Text = (data(0) * 256 + data(1)).ToString()   ‘ data  ke-1  plan
TextBox2.Text = (data(2) * 256 + data(3)).ToString()  ‘data ke-2    actual
TextBox3.Text = (data(4) * 256 + data(5)).ToString()   ‘data ke-3   target
TextBox4.Text = (data(6) * 256 + data(7)).ToString()    ‘data ke- 4… dst

End Sub
——————————————————————————–

6. Menulis data ke   Counter

Private Sub Button9_Click()
Dim data(1) As Integer
Dim Address As UShort

Address = Convert.ToUInt16(txtAdress.Text)
data(0) = Convert.ToInt16(txtData.Text)

Try
CounterLineA.WriteDataCounter(Address, data)
Catch [error] As SystemException
MessageBox.Show([error].ToString)
End Try

End Sub

——————————————————————————–
7. Memutus koneksi aplikasi  dgn  Counter

CounterLineA.disconnect()

——————————————————————————–

Contoh Form menampilkan data Counter

form display counter

*Class Library Counter untuk VB.net / C# disertakan pada setiap pembelian counter produksi  . www.counterproduksi.com

iklan