2008-12-01 15 views
6

Próbuję utworzyć port szeregowy w VB.net tylko za pomocą kodu. Ponieważ tworzę bibliotekę klas, nie mogę korzystać z wbudowanego komponentu. Próbowałem utworzyć nowy obiekt SeialPort(), ale to nie wystarcza. Jestem pewien, że jest coś prostego, czego mi brakuje i jakakolwiek pomoc byłaby ogromnie doceniona! Dzięki!Tworzenie portu szeregowego w kodzie w VB.net

P.S. Powinienem dodać, że problem, który mam w tym momencie, polega na uzyskaniu kodu do obsługi zdarzenia związanego z datami. Poza tym może działać, ale nie mogę powiedzieć z powodu tego problemu.

Odpowiedz

7

Jeśli chcesz korzystać z wydarzeń, upewnij się, że zadeklarowałeś swój obiekt serialPort używając "withevents". Poniższy przykład pozwoli ci połączyć się z portem szeregowym i podnieść wydarzenie z otrzymanym łańcuchem.

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 
0

Użyłem klasy SerialPort .Net w poprzednim projekcie i pracowałem dobrze. Naprawdę nie potrzebujesz niczego więcej. Sprawdź ustawienia sprzętowe w panelu sterowania i upewnij się, że tworzysz klasę z tymi samymi parametrami.

2

Znalazłem this article za całkiem niezłe.

kod I napisał z niej jest:

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 
} 

Niestety jest to C#, ale ...

Jedyny problem mam z nim jest, czy port jest odrzucany, gdy jest otwarty, aplikacja wydaje nieudane przy wyjściu.

1

Dziękuję wszystkim za pomoc, zwłaszcza odpowiedź na temat tworzenia klasy za pomocą słowa kluczowego WithEvents.

Znalazłem naprawdę świetny artykuł wyjaśniający, jak utworzyć klasę menedżera dla portu szeregowego. Omówiono również wysyłanie danych binarnych oraz danych szesnastkowych do portu szeregowego. To było bardzo pomocne.

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

Powiązane problemy