EIA-485 Daten abrufen und in Datei schreiben

  • Hallo,


    ich beschäftige mich gerade mit dem Thema serielle Schnittstelle, in meinem Fall EIA-485. Dabei möchte ich von einer Sportanzeigenkonsole die Daten auf einen Windows-PC übertragen.

    Es soll für jeden Wert den ich brauche eine eigene .txt-Datei erstellt und ständig mit den aktuellen Daten überschrieben werden (zwischen alle <100ms und alle 1000ms).

    Im Moment warte ich noch auf einen USB-Konverter.

    Leider hab ich in dem Gebiet keine Erfahrungen und wollte da mal nach fragen, wie ich da am besten heran gehe. Tante Google ist ja oft immer sehr großzügig, was Suchergebnisse angeht, hier allerdings bin ich noch nicht zufriedenstellend fündig geworden, da ja wohl auch eine aussterbende Schnittstelle.


    Ich hoffe, einer von euch Profis kann mir da einige Tipps geben.


    LG

  • Hay,


    ziemlich sicher stellt Dir der USB-Konverter einen emulierten (Windows/DOS)-COM-Port zur Verfügung. Den "einfach" lesen, wobei ich sagen muss, das habe ich zum letzten Mal vor 30 Jahren gemacht und unter DOS jedenfalls war das easy. Müsste eigentlich heutzutage mit Visual Basic/Visual Studio ähnlich einfach gehen.


    CU, Peter

  • Hay,


    hat mich selbst grad interessiert... ist tatsächlich recht einfach, eine serielle Schnitte zu lesen. Siehe komplettes Code-Beispiel für VB:


    https://docs.microsoft.com/de-…strings-from-serial-ports


    Habe sogar auf die Schnelle Beispiele in PHP gefunden, aber die waren nicht besonders gut - eine intensivere Recherche könnte sich aber lohnen.


    CU, Peter

  • Visual Basic (- Studio) gibt es in der Grundversion soweit ich weiß kostenlos, wäre also eine gute Wahl.


    Das genannte Beispiel basiert meines Wissens darauf, das die eingehenden Daten mit CR/LF abschließen. Liegt auf den Daten vom RS485-Bus ein Protokoll, dann wird die Sache schon interessanter. Habe so etwas mal im Dienst für einen CAN-Bus zu USB Wandler in Visual Basic geschrieben. Das Ganze gepaart mit einer Mehrfenster-Anwendung bringt ein paar Haken und Ösen mit sich.

    9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die letzte summt ständig die Melodie von Tetris.

  • Visual Basic (- Studio) gibt es in der Grundversion soweit ich weiß kostenlos, wäre also eine gute Wahl.


    Das genannte Beispiel basiert meines Wissens darauf, das die eingehenden Daten mit CR/LF abschließen. Liegt auf den Daten vom RS485-Bus ein Protokoll, dann wird die Sache schon interessanter. Habe so etwas mal im Dienst für einen CAN-Bus zu USB Wandler in Visual Basic geschrieben. Das Ganze gepaart mit einer Mehrfenster-Anwendung bringt ein paar Haken und Ösen mit sich.

    So sieht die Schnittstellenbeschreibung des Herstellers aus.

  • Hay,


    ist ja alles fein beschrieben - was ich mich nur frage... woher bekommt das Anzeigeboard die Daten? Für mich sieht es eher so aus, als ob die Schnittstelle dafür gedacht ist, Daten auf das Board zu schreiben?


    CU, Peter

    Von besagter Konsole. Entweder per Funk oder eben die serielle Schnittstelle.

  • Hay,


    ich frage deswegen, weil solche Tafeln eigentlich nur geschrieben werden, aber nichts rausrücken, nicht dass Du nachher viel Arbeit hattest und enttäuscht bist :) Die Datensatz-Beschreibung liest sich nämlich in einigen Parts so, z.B. "that the packet is intended for".


    CU, Peter

  • Ich muss CmdrXay da Recht geben .... die Beschreibung lässt eher vermuten das auf die Anzeige geschrieben werden kann. Lässt sich ja aber leicht feststellen wenn der USB-Adapter vorhanden ist. Dieser wird eine COM-Schnittstelle zur Verfügung stellen, welche man ja mit einem Terminal-Programm auf dem PC auslesen und zur Anzeige bringen kann. Genauso kann man mit dem Programm auch Daten zur Anzeigetafel senden. Das wäre mal ein erster Versuch. Ich würde hierfür erst einmal das Programm hterm empfehlen. Dies unterstützt unterschiedliche Formate der Zeichendarstellung (ASCII, HEY, BIN, ...), und man kann einstellen wann der Zeilenumbruch stattfinden soll (nach bestimmten Zeichen, CR/LF, nach Anzahl Zeichen, ...).

    9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die letzte summt ständig die Melodie von Tetris.

  • Hay,


    ich frage deswegen, weil solche Tafeln eigentlich nur geschrieben werden, aber nichts rausrücken, nicht dass Du nachher viel Arbeit hattest und enttäuscht bist :) Die Datensatz-Beschreibung liest sich nämlich in einigen Parts so, z.B. "that the packet is intended for".


    CU, Peter

    Ich glaube, du verwechselst da etwas. :)

    Konsole-> sendet Signal per RS485 (RJ45 Buchse) aus -> dieses würde dann von einer Anzahl X Anzeigetafeln empfangen und umgewandelt werden.

    Ich rede aber ausschließlich vom Ausgangssignal, welches an der Konsole an besagtem seriellen Port ausgegeben wird. Das will ich abfangen. Das sollte ja einfach sein, da ich ja die Parameter kenne.

    Ich muss CmdrXay da Recht geben .... die Beschreibung lässt eher vermuten das auf die Anzeige geschrieben werden kann. Lässt sich ja aber leicht feststellen wenn der USB-Adapter vorhanden ist. Dieser wird eine COM-Schnittstelle zur Verfügung stellen, welche man ja mit einem Terminal-Programm auf dem PC auslesen und zur Anzeige bringen kann. Genauso kann man mit dem Programm auch Daten zur Anzeigetafel senden. Das wäre mal ein erster Versuch. Ich würde hierfür erst einmal das Programm hterm empfehlen. Dies unterstützt unterschiedliche Formate der Zeichendarstellung (ASCII, HEY, BIN, ...), und man kann einstellen wann der Zeilenumbruch stattfinden soll (nach bestimmten Zeichen, CR/LF, nach Anzahl Zeichen, ...).

    Danke. Werde ich mal ausprobieren. Habe mittlerweile eine kleine Sammlung an Ausleseprogrammen. :)

  • Hay,

    Konsole

    ah, ok, das Bedienpult. Klar.


    Dann viel Erfolg, ausreichend Infos solltest Du ja haben.


    Das Einzige, was Dir jetzt noch reinhauen kann, dass die Konsole von den Tafeln eine Art ACK erwartet (als dediziertes Signal https://de.wikipedia.org/wiki/ACK_(Signal) oder durch ein anderes Signal oder String) als Bestätigung, dass die Daten angekommen sind um dann die nächsten Daten zu senden. Analoge Modems senden z.B. auf ein Kommando den String "OK"+<CR>, wenn sie einen Befehl korrekt verarbeitet haben.


    Also achte einfach im Terminalprogramm darauf, ob die Anzeigetafel etwas zurückschickt, falls die Konsole nach dem ersten Signal nichts mehr sendet. M.a.W. würde ich Dir in dem Fall eigentlich empfehlen, Bedienpult und Anzeige funktionsfähig aufzubauen und zu testen, dann einen PC mit ZWEI Schnittstellen bzw. Konvertern dazwischen schalten, den Traffic bidirektional durchzuleiten und gleichzeitig mitzuschreiben, um das Protokoll näher kennen zu lernen. Für USB-Schnittstellen kann man dafür sogar Wireshark verwenden... aber diese Form des harten, reverse Engineering wäre vermutlich mit Kanonen auf Spatzen geschossen.


    CU, Peter

  • Das Einzige, was Dir jetzt noch reinhauen kann, dass die Konsole von den Tafeln eine Art ACK erwartet

    Das ACK ist keine Antwort per Protokoll, sondern wird Hardwareseitig auf der RS485-Schnittstelle gelöst. Dies muss dann halt in allen Schnittstellen entsprechend konfiguriert sein. Hierbei wird dann am Ende der Sendung vom Empfänger über ein Pegelwechsel auf der Datenleitung der Empfang quittiert, was allerdings nicht zu weiteren Daten führt.


    Die Konfiguration eines RS485 ist (bei der Entwicklung eines Systems) manchmal ein wenig Tricky, wenn man sich nicht umfangreich auskennt. Wenn es aber erst einmal läuft, dann ist es OK.

    9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die letzte summt ständig die Melodie von Tetris.

  • Hay,

    Das ACK ist keine Antwort per Protokoll, sondern wird Hardwareseitig auf der RS485-Schnittstelle gelöst.

    Wenn es ähnlich gemacht ist wie auf der RS232, dann signalisiert das (vergleichbar RTS/CTS) das Byte-Ende und nicht das Ende des Datensatzes. Glaube ich jetzt aber nicht :D, denn weil EIA 485 Multipoint ist, könntest Du mit nur jeweils einer RX & TX-Leitung (bzw. bei maximal zwei Paaren) gar nicht erkennen, welche Gegenstelle gerade auf ACK gezogen hat. Selbst wenn: Wir sind hier auf verschiedenen Layern unterwegs. Wenn man es vergleichen mag bist Du gerade auf OSI-Schicht 1-2, ich bin auf 5-7.


    Ich zitiere mal Wikipedia zur EIA-486:


    Quote

    Im Gegensatz zu anderen Bussen sind bei EIA-485 nur die elektrischen Schnittstellenbedingungen definiert. Das Protokoll kann anwendungsspezifisch gewählt werden. Deshalb werden sich EIA-485-Geräte unterschiedlicher Applikationen oder Hersteller i. Allg. nicht verstehen.


    Aber ich möchte mich da nicht weiter einmischen, dafür ist das Ganze für mich einfach 30 Jahre zu weit weg und vielleicht glaube ich auch nur, hier noch viel zu wissen 8o...


    CU, Peter

  • Programmcode um Seriell mit Python zu lesen:


    Günstige Hardware um Bytes mitschneiden zu können während zwei Stellen miteinander Daten austauschen:

    https://www.amazon.de/AZDelivery-⭐⭐⭐⭐⭐-Logic-Analyzer-Gratis/dp/B01MUFRHQ2


    Dein Vorhaben klingt problemlos machbar.

  • SCWfan06

    Na dann hab ich eine ganz einfache Lösung für dich: Such dir das nächste Fablab/Hackerspace/Maker irgendwas, bring deine Anzeige mit und lass ein paar Nerds drauf los. Die freuen sich über die (kleine) Herausforderung!

    Das wäre aber langweilig. Ich möchte es schon selbst schaffen.

    Im Grunde weiß ich ja, WAS ich machen muss. Nur das WIE ist halt die Frage. ;)

  • Na dann nimmste einen Pi, einen USB2Serial Konverter und dann liest du halt mal was das Ding so sendet und postest es hier :-)