Thursday, 16 April 2015

VB.NET :: CARA MENGAKSES PORT PARALEL DAN SERIAL MENGGUNAKAN VISUAL BASIC.NET



       Karena Microsoft .NET Framework kelas tidak ada untuk mengakses sumber daya komunikasi yang tersambung ke komputer Anda, Anda dapat menggunakan kontrol MSComm di Microsoft Visual Basic 6.0. Kontrol MSComm menyediakan komunikasi serial untuk aplikasi Anda dengan mengaktifkan transmisi dan penerimaan data melalui serial port. Untuk menerapkan dasar komunikasi serial menggunakan modem, ikuti langkah-langkah berikut:
1.Mulai Microsoft Visual Studio .NET.
2.Pada File menu, arahkan ke baru, dan kemudian klik Project.
3.Pada Jenis proyek, klik Proyek Visual Basic.
4.Pada pola dasar, klik Aplikasi konsol.
5.Di kotak nama , ketik MyConsoleApplication, dan kemudian klik OK.

Secara default, Module1.vb dibuat.
6.Klik kanan MyConsoleApplication proyek, dan kemudian klik Menambahkan referensi.
7.Klik COM tab, klik Microsoft Comm kontrol 6.0 Komponennama, klik pilih, dan kemudian klik OK.

Catatan Untuk menggunakan kontrol MSComm , Anda harus menginstal komponen COM terkait Microsoft Visual Basic 6.0 pada komputer yang sama yang memiliki Microsoft Visual Studio .NET diinstal.

Untuk informasi selengkapnya tentang lisensi masalah ketika Anda menggunakan kontrol Visual Basic 6.0 di Visual Studio .NET, klik nomor artikel berikut ini untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
318597 Galat saat Anda menggunakan kontrol Visual Basic 6.0 di Visual Studio .NET
8.Ganti kode di Module1.vb dengan contoh kode berikut.

  1. Imports MSCommLib

    Module Module1

    Sub Main()
    'New a MSComm control
    Dim MSComm1 As MSComm
    MSComm1 = New MSComm
    ' Buffer to hold input string.
    Dim Buffer As String
    ' Use the COM1 serial port.
    MSComm1.CommPort = 1
    ' 9600 baud, no parity, 8 data, and 1 stop bit.
    MSComm1.Settings = "9600,N,8,1"
    ' Tell the control to read the whole buffer when Input is used.
    MSComm1.InputLen = 0
    ' Open the serial port.
    MSComm1.PortOpen = True
    Console.WriteLine("Open the serial port.")
    ' Tell the control to make the Input property return text data.
    MSComm1.InputMode() = InputModeConstants.comInputModeText
    'Clear the receive buffer.
    MSComm1.InBufferCount() = 0
    ' Send the attention command to the modem.
    MSComm1.Output = "ATV1Q0" & Chr(13)
    Console.WriteLine("Send the attention command to the modem.")
    Console.WriteLine("Wait for the data to come back to the serial port...")
    ' Make sure that the modem responds with "OK".
    ' Wait for the data to come back to the serial port.
    Do
    Buffer = Buffer & MSComm1.Input
    Loop Until InStr(Buffer, "OK" & vbCrLf)
    ' Read the "OK" response data in the serial port.
    ' Close the serial port.
    Console.WriteLine("Read the OK response data in the serial port.")
    MSComm1.PortOpen = False
    Console.WriteLine("Close the serial port.")
    End Sub

    End Module
  2. 9.Tekan CRTL + F5 untuk membuat dan menjalankan proyek ini. Anda akan menerima pesan output berikut ini:

    Buka serial port.
    Mengirim perintah perhatian ke modem.
    Menunggu untuk data untuk kembali ke serial port...
    Membaca data OK respons di serial port.
    Tutup serial port.

Menggunakan kontrol MSComm dalam Visual Basic .NET untuk mengakses Porta serial


Untuk melakukannya, ikuti langkah-langkah berikut:
1.Mulai Microsoft Visual Studio .NET.
2.Pada File menu, arahkan ke baru, dan kemudian klik Project.
3.Pada Jenis proyek, klik Proyek Visual Basic.
4.Pada pola dasar, klik Aplikasi konsol.
5.Di kotak teks nama , ketik MyConsoleApplication, dan kemudian klik OK.

Secara default, Module1.vb dibuat.
6.Menambahkan kode berikut ke Module1.vb sebelum pernyataan Module1 modul :

  1. Option Strict On

    ' Define a CommException class that inherits from the ApplicationException class,
    ' and then throw an object of type CommException when you receive an error message.
    Class CommException
    Inherits ApplicationException
    Sub New(ByVal Reason As String)
    MyBase.New(Reason)
    End Sub
    End Class
7.Menyatakan struktur, konstanta dan referensi eksternal fungsi yang ada di Kernel32.dll

Untuk memanggil unmanaged fungsi dari Visual Basic .NET aplikasi Anda berhasil, Anda harus menyatakan referensi struktur yang Anda lulus sebagai parameter ke fungsi tidak dikelola, dan Anda harus menyatakan konstanta yang Anda lulus sebagai parameter ke fungsi unmanaged. Untuk melakukannya, tambahkan kode berikut untuk Module1.vb setelah pernyataan Module1 modul :

'Declare structures.
Public Structure DCB
Public DCBlength As Int32
Public BaudRate As Int32
Public fBitFields As Int32 'See Comments in Win32API.Txt
Public wReserved As Int16
Public XonLim As Int16
Public XoffLim As Int16
Public ByteSize As Byte
Public Parity As Byte
Public StopBits As Byte
Public XonChar As Byte
Public XoffChar As Byte
Public ErrorChar As Byte
Public EofChar As Byte
Public EvtChar As Byte
Public wReserved1 As Int16 'Reserved; Do Not Use
End Structure

Public Structure COMMTIMEOUTS
Public ReadIntervalTimeout As Int32
Public ReadTotalTimeoutMultiplier As Int32
Public ReadTotalTimeoutConstant As Int32
Public WriteTotalTimeoutMultiplier As Int32
Public WriteTotalTimeoutConstant As Int32
End Structure

'Declare constants.
Public Const GENERIC_READ As Int32 = &H80000000
Public Const GENERIC_WRITE As Int32 = &H40000000
Public Const OPEN_EXISTING As Int32 = 3
Public Const FILE_ATTRIBUTE_NORMAL As Int32 = &H80
Public Const NOPARITY As Int32 = 0
Public Const ONESTOPBIT As Int32 = 0

'Declare references to external functions.
Public Declare Auto Function CreateFile Lib "kernel32.dll" _
(ByVal lpFileName As String, ByVal dwDesiredAccess As Int32, _
ByVal dwShareMode As Int32, ByVal lpSecurityAttributes As IntPtr, _
ByVal dwCreationDisposition As Int32, ByVal dwFlagsAndAttributes As Int32, _
ByVal hTemplateFile As IntPtr) As IntPtr

Public Declare Auto Function GetCommState Lib "kernel32.dll" (ByVal nCid As IntPtr, _
ByRef lpDCB As DCB) As Boolean

Public Declare Auto Function SetCommState Lib "kernel32.dll" (ByVal nCid As IntPtr, _
ByRef lpDCB As DCB) As Boolean

Public Declare Auto Function GetCommTimeouts Lib "kernel32.dll" (ByVal hFile As IntPtr, _
ByRef lpCommTimeouts As COMMTIMEOUTS) As Boolean

Public Declare Auto Function SetCommTimeouts Lib "kernel32.dll" (ByVal hFile As IntPtr, _
ByRef lpCommTimeouts As COMMTIMEOUTS) As Boolean

Public Declare Auto Function WriteFile Lib "kernel32.dll" (ByVal hFile As IntPtr, _
ByVal lpBuffer As Byte(), ByVal nNumberOfBytesToWrite As Int32, _
ByRef lpNumberOfBytesWritten As Int32, ByVal lpOverlapped As IntPtr) As Boolean

Public Declare Auto Function ReadFile Lib "kernel32.dll" (ByVal hFile As IntPtr, _
ByVal lpBuffer As Byte(), ByVal nNumberOfBytesToRead As Int32, _
ByRef lpNumberOfBytesRead As Int32, ByVal lpOverlapped As IntPtr) As Boolean

Public Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal hObject As IntPtr) As Boolean

8.Sebelum Anda dapat mengakses port serial atau paralel port, Anda harus mendapatkan pegangan untuk pelabuhan yang tepat dan kemudian mengkonfigurasi port komunikasi. Untuk melakukannya, tambahkan kode inisialisasi berikut untuk Module1.vb Setelah pernyataan Sub utama .
Catatan Untuk membangun komunikasi dengan pelabuhanx LPT, Anda harus menghentikan layanan Print Spooler. Untuk melakukannya, gunakan Layanan alat dalam alat administratif.

' Declare the local variables that you will use in the code.
Dim hSerialPort, hParallelPort As IntPtr
Dim Success As Boolean
Dim MyDCB As DCB
Dim MyCommTimeouts As COMMTIMEOUTS
Dim BytesWritten, BytesRead As Int32
Dim Buffer() As Byte

' Declare the variables to use for encoding.
Dim oEncoder As New System.Text.ASCIIEncoding
Dim oEnc As System.Text.Encoding = oEncoder.GetEncoding(1252)

' Convert String to Byte().
Buffer = oEnc.GetBytes("Test")
Try
' Access the serial port.
Console.WriteLine("Accessing the COM1 serial port")
' Obtain a handle to the COM1 serial port.
hSerialPort = CreateFile("COM1", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, _
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero)
' Verify that the obtained handle is valid.
If hSerialPort.ToInt32 = -1 Then
Throw New CommException("Unable to obtain a handle to the COM1 port")
End If
' Retrieve the current control settings.
Success = GetCommState(hSerialPort, MyDCB)
If Success = False Then
Throw New CommException("Unable to retrieve the current control settings")
End If
' Modify the properties of the retrieved DCB structure as appropriate.
' WARNING: Make sure to modify the properties according to their supported values.
MyDCB.BaudRate = 9600
MyDCB.ByteSize = 8
MyDCB.Parity = NOPARITY
MyDCB.StopBits = ONESTOPBIT
' Reconfigure COM1 based on the properties of the modified DCB structure.
Success = SetCommState(hSerialPort, MyDCB)
If Success = False Then
Throw New CommException("Unable to reconfigure COM1")
End If
' Retrieve the current time-out settings.
Success = GetCommTimeouts(hSerialPort, MyCommTimeouts)
If Success = False Then
Throw New CommException("Unable to retrieve current time-out settings")
End If
' Modify the properties of the retrieved COMMTIMEOUTS structure as appropriate.
' WARNING: Make sure to modify the properties according to their supported values.
MyCommTimeouts.ReadIntervalTimeout = 0
MyCommTimeouts.ReadTotalTimeoutConstant = 0
MyCommTimeouts.ReadTotalTimeoutMultiplier = 0
MyCommTimeouts.WriteTotalTimeoutConstant = 0
MyCommTimeouts.WriteTotalTimeoutMultiplier = 0
' Reconfigure the time-out settings, based on the properties of the modified COMMTIMEOUTS structure.
Success = SetCommTimeouts(hSerialPort, MyCommTimeouts)
If Success = False Then
Throw New CommException("Unable to reconfigure the time-out settings")
End If
' Write data to COM1.
Console.WriteLine("Writing the following data to COM1: Test")
Success = WriteFile(hSerialPort, Buffer, Buffer.Length, BytesWritten, IntPtr.Zero)
If Success = False Then
Throw New CommException("Unable to write to COM1")
End If
' Read data from COM1.
Success = ReadFile(hSerialPort, Buffer, BytesWritten, BytesRead, IntPtr.Zero)
If Success = False Then
Throw New CommException("Unable to read from COM1")
End If
Catch ex As Exception
Console.WriteLine(Ex.Message)
Finally
' Release the handle to COM1.
Success = CloseHandle(hSerialPort)
If Success = False Then
Console.WriteLine("Unable to release handle to COM1")
End If
End Try

Try
' Parallel port.
Console.WriteLine("Accessing the LPT1 parallel port")
' Obtain a handle to the LPT1 parallel port.
hParallelPort = CreateFile("LPT1", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, _
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero)
' Verify that the obtained handle is valid.
If hParallelPort.ToInt32 = -1 Then
Throw New CommException("Unable to obtain a handle to the LPT1 port")
End If
' Retrieve the current control settings.
Success = GetCommState(hParallelPort, MyDCB)
If Success = False Then
Throw New CommException("Unable to retrieve the current control settings")
End If
' Modify the properties of the retrieved DCB structure as appropriate.
' WARNING: Make sure to modify the properties according to their supported values.
MyDCB.BaudRate = 9600
MyDCB.ByteSize = 8
MyDCB.Parity = NOPARITY
MyDCB.StopBits = ONESTOPBIT
' Reconfigure LPT1 based on the properties of the modified DCB structure.
Success = SetCommState(hParallelPort, MyDCB)
If Success = False Then
Throw New CommException("Unable to reconfigure LPT1")
End If
' Retrieve the current time-out settings.
Success = GetCommTimeouts(hParallelPort, MyCommTimeouts)
If Success = False Then
Throw New CommException("Unable to retrieve current time-out settings")
End If
' Modify the properties of the retrieved COMMTIMEOUTS structure as appropriate.
' WARNING: Make sure to modify the properties according to their supported values.
MyCommTimeouts.ReadIntervalTimeout = 0
MyCommTimeouts.ReadTotalTimeoutConstant = 0
MyCommTimeouts.ReadTotalTimeoutMultiplier = 0
MyCommTimeouts.WriteTotalTimeoutConstant = 0
MyCommTimeouts.WriteTotalTimeoutMultiplier = 0
' Reconfigure the time-out settings, based on the properties of the modified COMMTIMEOUTS structure.
Success = SetCommTimeouts(hParallelPort, MyCommTimeouts)
If Success = False Then
Throw New CommException("Unable to reconfigure the time-out settings")
End If
' Write data to LPT1.
' Note: You cannot read data from a parallel port by calling the ReadFile function.
Console.WriteLine("Writing the following data to LPT1: Test")
Success = WriteFile(hParallelPort, Buffer, Buffer.Length, BytesWritten, IntPtr.Zero)
If Success = False Then
Throw New CommException("Unable to write to LPT1")
End If
Catch ex As Exception
Console.WriteLine(Ex.Message)
Finally
' Release the handle to LPT1.
Success = CloseHandle(hParallelPort)
If Success = False Then
Console.WriteLine("Unable to release handle to LPT1")
End If
End Try

Console.WriteLine("Press ENTER to quit")
Console.ReadLine()
9.Membangun menu, klik Membangun solusi.
10.Pada Debug menu, klik mulai menjalankan aplikasi.

Anda mungkin menerima teks berikut di konsol:
Mengakses COM1 Porta serial
Menulis data berikut untuk COM1: uji

Membaca data berikut dari COM1: Serial Data
Mengakses port paralel LPT1

Menulis data berikut untuk LPT1: uji

Tekan ENTER untuk keluar dari
CatatanSerial Data mewakili data yang Anda membaca dari porta serial. 
10.Untuk menutup aplikasi, tekan tombol ENTER di konsol.



    Sumber: http://support.microsoft.com/kb/823179/id-id

    1 comment:

    1. Getting Started With Arduino And Genuino Uno: Vb.Net :: Cara Mengakses Port Paralel Dan Serial Menggunakan Visual Basic.Net >>>>> Download Now

      >>>>> Download Full

      Getting Started With Arduino And Genuino Uno: Vb.Net :: Cara Mengakses Port Paralel Dan Serial Menggunakan Visual Basic.Net >>>>> Download LINK

      >>>>> Download Now

      Getting Started With Arduino And Genuino Uno: Vb.Net :: Cara Mengakses Port Paralel Dan Serial Menggunakan Visual Basic.Net >>>>> Download Full

      >>>>> Download LINK X7

      ReplyDelete