RS232 Baudraten Autotest

  • VB.NET
  • .NET (FX) 4.0

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von OlafSt.

    RS232 Baudraten Autotest

    Hallo :)

    Ich will herausfinden welche Baudraten an verschieden "COM" Schnittstellen möglich sind.

    VB.NET-Quellcode

    1. Try
    2. With SerialPort
    3. .PortName = "COM1"
    4. .BaudRate = X
    5. .DataBits = 8
    6. .Parity = IO.Ports.Parity.None
    7. .StopBits = IO.Ports.StopBits.One
    8. .Open()
    9. End With
    10. Catch ex As Exception
    11. MsgBox(ex.Message)
    12. End Try


    Habe vor es in eine schleife zu packen und alle Baudraten 9600, 14400, 19200, 28800 .... nach einander in "x" zu setzten. Bei Fehlermeldung ist die Baudrate nicht möglich.
    Ist es so richtig oder hat jemand eine andere Idee ....

    Danke :)


    so richtig :/

    VB.NET-Quellcode

    1. Private Function RS232_Test(ComPortName As String)
    2. Dim j As Integer
    3. Dim Baud() As String = {"256000", "128000", "115200", "76800", "57600", "56000", "38400", "28800", "19200", "14400", "9600"}
    4. For j = 10 To 0 Step -1
    5. Try
    6. With SerialPort
    7. .Close()
    8. .PortName = ComPortName
    9. .ReceivedBytesThreshold = 1
    10. .RtsEnable = True
    11. .BaudRate = Baud(j)
    12. .DataBits = 8
    13. .Parity = IO.Ports.Parity.None
    14. .StopBits = IO.Ports.StopBits.One
    15. .Open()
    16. End With
    17. Catch ex As Exception
    18. MsgBox(ex)
    19. End Try
    20. MsgBox("Max ist: " & Baud(j).ToString)
    21. Next j
    22. End Function

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

    zoranmaric schrieb:

    so richtig
    Nö, da bewkommst Du keine Aussage.
    Zunächst musst Du ein Empfangs-Timeout vorgeben.
    Dann musst Du nach .Open() eine Statusabfrage machen, etwa so (Pseudocode, ungetestet):

    VB.NET-Quellcode

    1. .Write("xxx")
    2. Try
    3. answer = .Read() ' hier wird ggf. eine Exception ausgelöst
    4. flag = True
    5. Catch ex As Exception
    6. flag = False
    7. End Try
    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!
    @zoranmaric Üblicherweise haben Gräte eine Standard-Boudrate.
    Ich kenne Geräte, die man per Befehl umschalten kann, das geht dann so:
    Standard-Initialisierung mit 9600 Boud (der übliche Standard),
    Befehl: Umschaltung auf 115200 Boud
    SerialPort schließen
    SerialPort neu mit 115200 Boud initialisieren
    SerialPort öffnen
    feddich.
    Die Gegenstelle macht das dann genau so.
    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!
    Nix von alledem ist wirklich zielführend ;)

    Zunächst einmal ist es dem seriellen Port (ich kürz das immer mit SIO ab) völlig egal, was für ein Gerät da dran hängt. Die Baurate kann völlig frei eingestellt werden und alle im Eröffnungspost angegebenen Baudraten sind heutzutage gültig. Damit wird sich also nicht wirklich was herausfinden lassen.

    Es ist weiterhin ein Trugschluß, das man nichts empfängt, wenn die Baudraten von SIO und Gerät nicht identisch sind. Oft genug empfängt man nichts, aber ebenso oft empfängt man auch nur "Schrott". Somit wird auch der zweite Vorschlag nicht sicher funktionieren.

    Einzige Möglichkeit: Man muß ein bekanntes Kommando an das Gerät senden und auf Antwort warten (die man auch kennen muß). Bei einem Modem ist dieses Kommando z.B: "AT"+vbCrLf, das Modem antwortet darauf mit "OK"+vbCrLf oder "ERROR"+vbCrLf. Je nach angeschlossenem Gerät gibt es so ein Kommando, das nichts weiter macht als zu Antworten.

    Ergo:
    - Baudrate einstellen
    - Kommando hinsenden
    - Auf Antwort warten
    - Bei Timeout nächste Baudrate wählen und zum Anfang zurück
    - Bei Antwort: Ist es die erwartete Antwort ? Bei nein nächste Baudrate wählen und zum Anfang
    - Bei Ja: Baudrate gefunden !

    OlafSt schrieb:

    Ergo:
    Du hast Post #2 zitiert.
    Üblicherweise ist die Initial-Boudrate 9600 Boud.
    Die Kommunikation mit wievielen Geräten über SerialPort hast Du programmiert?
    Übrigens:
    SIO war mal ein Baustein der Z80-Familie: Serial In Out.
    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!
    Post #2 reagiert nur darauf, das irgendwas (!) zurückkommt. Spricht man z.B. ein GSM-Modem, das 38k4 erwartet, mit 9k6 an, dann kommt möglicherweise irgendein ASCII-Zeichen-Schrott zurück. Aber es kommt was zurück und das würde dann als korrekte Baudrate erkannt. Anschließend wundert man sich, warum ATZ nicht mit "OK" beantwortet wird ;) BTW: Mein erster Rechner beinhaltete einen Z80, daher wohl "SIO" :D

    OlafSt schrieb:

    (!)
    Sorry, abeer hier werden 1. keine fertigen Lösungen gepostet, 2. kenne ich die Hardware nicht und 3. muss der TE seine Hausaufgaben selber machen und verstehen, ich weise nur den Weg in die richrtige Richtung.
    Und Fehlerbehandlung ist hier kein Thema.
    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!
    Zu 1.: Habe ich nicht getan
    Zu 2.: Ich auch nicht, aber ich habe da so eine Ahnung ;)
    Zu 3.: Nix anderes als den Weg zu weisen habe ich auch getan.

    Mir scheint, das es hier als guter Ton gilt, sich auf ein "Das geht so nicht, mach es anders" zu beschränken hat. Ist es wirklich so, das man hier nur mit Scheuklappen herumzurennen hat, die einen nur auf das Problem starren lassen ? Die sich ergebenden Fallstricke - ob nun offensichtlich oder durch eigene Erfahrung erkannt - dürfen hier nicht mal im Ansatz erwähnt werden ?

    Kann ich mir nicht vorstellen.