Serial Port Arrays erstellen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Rainman.

    Serial Port Arrays erstellen

    Hallo zusammen
    Ich möchte eine Serial Port Array erstellen.

    Public mySerialPort(2) As SerialPort

    Public Sub Init()
    For i As Byte = 0 To 1
    mySerialPort(i) = New SerialPort


    mySerialPort(i).BaudRate = 38400

    mySerialPort(i).DataBits = 8

    mySerialPort(i).Parity = IO.Ports.Parity.None

    mySerialPort(i).Open()

    AddHandler mySerialPort(i).DataReceived, AddressOf SerComReceiveHandler

    Next
    mySerialPort(0).PortName = "Com1"
    mySerialPort(1).PortName = "Com2"
    End Sub

    Public Sub SerComReceiveHandler(sender As Object, e As SerialDataReceivedEventArgs)
    End Sub

    Wie bekomme ich im Receive Event heraus, welcher Com Port ausgelöst hat (Zeichen hat) ?

    Vielen Dank im voraus für die Hilfe !
    Michel

    Michel schrieb:

    welcher Com Port ausgelöst hat
    So:

    VB.NET-Quellcode

    1. Private Sub SerComReceiveHandler(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs)
    2. If sender Is mySerialPort(0) Then
    3. MessageBox.Show("mySerialPort(0)")
    4. ElseIf sender Is mySerialPort(1) Then
    5. MessageBox.Show("mySerialPort(1)")
    6. ElseIf sender Is mySerialPort(2) Then
    7. MessageBox.Show("mySerialPort(2)")
    8. End If
    9. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Achtung,
    Public mySerialPort(2) As SerialPort
    legt 3 Elemente im Array an.

    For i As Byte = 0 To 1
    ersetzt man besser durch:
    For i As Byte = 0 To mySerialPort.GetUpperBound(0)

    Dann kann man später die Arraygröße ändern und muss dann nicht jeder Schleife einzeln hinterher rennen.
    Oder noch besser mit "for each" arbeiten.
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Rainman“ ()

    Hallo RodFromGermany !
    Gute Idee !!! Danke für die schnelle Hilfe !

    Hallo Rainman !
    Die Zahlen habe ich hier nur für das Beispiel angegeben.
    Im Quellcode ist das eine Konstante (Name) die an einer Stelle verändert wird.
    Auch Dir Danke für die Hilfe !
    Alternativ könnte man an jedes Objekt einen eigenen SerComReceiveHandlerN dranhängen, der sollte dann wissen wer er ist.

    Oder man leitet eine eigene Klasse von SerialPort ab und gibt dem neuen Konstruktor den Index mit.
    Dieser Wert kann dann mit dem Event hochgereicht werden und ist somit im EventHandler direkt als Zahl auswertbar.

    Die Lösung aus #2 reicht aber völlig aus.
    An manchen Tagen gibt es zu allem Überfluss auch noch Ärger!