Friday, March 4, 2011

Creating a Serial Port in code in VB.net

Hi,

I am trying to create a serial port in VB.net using code only. Because I am creating a class library I cannot use the built-in component. I have tried instantiating a new SeialPort() object, but that does not seem to be enough. I'm sure there is something simple I am missing and any help would be greatly appreciated! Thanks!

P.S. I should add that the problem I am having at this time is getting the code to handle the datareceived event. Other than that it might be working, but I can't tell because of that problem.

From stackoverflow
  • I have used the SerialPort .Net class in a past project and I worked fine. You really don't need anything else. Check the hardware setting in the control panel and make sure you instantiate the class with the same parameters.

  • I found this article to be quite good.

    The code i wrote from it is:

    port = new System.IO.Ports.SerialPort(name, 4800, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
    port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived);
    port.Open();
    
    void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        buffer = port.ReadLine();
        // process line
    }
    

    Sorry it's C# but...

    The only issue I have with it is if the port is dropped while it's open, the app seems to fail on exit.

  • If you want to use the events make sure you declare your serialPort object using the 'withevents'. The below example will allow you to connect to a serial port, and will raise an event with the received string.

    Imports System.Threading
    
    Imports System.IO
    
    Imports System.Text
    
    Imports System.IO.Ports
    
    
    Public Class clsBarcodeScanner
    
    Public Event ScanDataRecieved(ByVal data As String)
    WithEvents comPort As SerialPort
    
    Public Sub Connect()
        Try
            comPort = My.Computer.Ports.OpenSerialPort("COM5", 9600)
        Catch
        End Try
    End Sub
    
    Public Sub Disconnect()
    
        If comPort IsNot Nothing AndAlso comPort.IsOpen Then
            comPort.Close()
        End If
    
    End Sub
    
    Private Sub comPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles comPort.DataReceived
        Dim str As String = ""
        If e.EventType = SerialData.Chars Then
            Do
                Dim bytecount As Integer = comPort.BytesToRead
    
                If bytecount = 0 Then
                    Exit Do
                End If
                Dim byteBuffer(bytecount) As Byte
    
    
                comPort.Read(byteBuffer, 0, bytecount)
                str = str & System.Text.Encoding.ASCII.GetString(byteBuffer, 0, 1)
    
            Loop
        End If
    
        RaiseEvent ScanDataRecieved(str)
    
    End Sub
    End Class
    
  • Thank you all for your help, especially the answer about instantiating a class using the WithEvents keyword.

    I found a really great article that explains how to create a manager class for the serial port. It also discusses sending Binary as well as Hex data to the serial port. It was quite helpful.

    http://www.dreamincode.net/forums/showtopic37361.htm

0 comments:

Post a Comment