Question

J'essaie de créer un port série dans VB.net en utilisant uniquement du code. Comme je crée une bibliothèque de classes, je ne peux pas utiliser le composant intégré. J'ai essayé d'instancier un nouvel objet SeialPort (), mais cela ne semble pas être suffisant. Je suis sûr qu'il me manque quelque chose de simple et toute aide serait grandement appréciée! Merci!

P.S. Je devrais ajouter que le problème que je rencontre actuellement est d'obtenir le code pour gérer l'événement reçu par datar. Sinon, cela fonctionne peut-être, mais je ne peux pas le dire à cause de ce problème.

Était-ce utile?

La solution

Si vous souhaitez utiliser les événements, assurez-vous de déclarer votre objet serialPort à l'aide de 'withevents'. L'exemple ci-dessous vous permettra de vous connecter à un port série et déclenchera un événement avec la chaîne reçue.

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

Autres conseils

J'ai trouvé cet article est plutôt bon.

Le code que j'ai écrit à partir de celui-ci est:

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
}

Désolé, c'est C # mais ...

Le seul problème que j'ai avec elle est que si le port est abandonné alors qu'il est ouvert, l'application semble échouer à la sortie.

Merci à tous pour votre aide, en particulier pour votre réponse concernant l'instanciation d'une classe à l'aide du mot clé WithEvents.

J'ai trouvé un très bon article qui explique comment créer une classe de gestionnaire pour le port série. Il traite également de l'envoi de données binaires et hexadécimales au port série. C'était très utile.

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

J'ai utilisé la classe SerialPort .Net dans un projet précédent et j'ai bien travaillé. Vous n'avez vraiment besoin de rien d'autre. Vérifiez les paramètres matériels dans le panneau de configuration et assurez-vous d’instancier la classe avec les mêmes paramètres.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top