Hey, ich steuer mit meinem NEC V850/FJ3 verschiedene Messgeräte über die serielle Schnittstelle an. Die Daten werden alle gesendet (laut Terminal Programm auf dem PC) dennoch meldet mein Messgerät Fehler wenn alle Daten gesendet werden. Setze ich Breakpoints und sende die Daten schrittweise funktioniert es. Daher denke ich das meine Daten zu schnell gesendet werden. Wollte erst ein paar Delays einbauen, was aber zu teilweise unnötigen Verzögerungen führt. Schicke ich die selben Daten vom PC aus funktionierts, allerdings nutze ich da zwischen jedem Kommando den Befehl "fflush(com)". Was genau macht "fflush()"? bzw. wäre es sinnvoll eine ähnliche Funktion für den Controller zu schreiben? Danke für eure Hilfe Grüße Sebastian
flush leert den buffer
> bzw. wäre es sinnvoll eine ähnliche Funktion > für den Controller zu schreiben? Das wird dein Problem nicht lösen. Deine Analyse dürfte korrekt sein: Du überfährst deine Messgeräte mit den Daten. Normalerweise kann sich die Gegenstelle mit einem Verfahren das sich 'Handshake' nennt, dagegen wehren. Im Prinzip sagt die Gegenstelle deinem Programm dabei: 'Einen Moment, bitte jetzt nichts senden, ich bin beschäftigt'. Wenn sich jetzt dein Programm nicht um diese Warte-Mal-Nachricht kümmert, dann ist klar, dass du die Gegenstelle überfährst. Handshake gibt es in 2 Varianten: * Softwarehandshake * Hardwarehandshake Jetzt musst du als allererstes mal rausfinden welche Variante deine Messgeräte unterstützen (wenn überhaupt), und dann eine entsprechende Behandlung in dein Programm einbauen.
Jo das mit den Handshakes ist klar, dachte aber ich komm evtl. ohne aus, da es übern PC auch ohne Handshake funktioniert hat. Für nen Hardware-Handshake würde ich dann noch zusätzliche 2 Pins meines Controllers benötigen, was auch ein kleines Problemchen darstellen wird^^ Naja ich schau mal weiter ob ich ne andere Lösung find. Evtl. fahr ich einfach mit der Geschwindigkeit oder so bissl runter, mal schaun ob das schon genügt. Danke für eure Antworten.
Sebastian Ulmer wrote: > Naja ich schau mal weiter ob ich ne andere Lösung find. Evtl. fahr ich > einfach mit der Geschwindigkeit oder so bissl runter, mal schaun ob das > schon genügt. Schlechte Lösung. Eine professionelle Lösung zur Behandlung einer seriellen Schnittstelle beinhaltet immer eine Handshakebehandlung. Denn: Du weißt nie, ob deine Gegenstelle zur Aufnahme von Daten bereit ist. Erst durch ein Handshake kannst du dir einigermassen sicher sein, daß es keine Probleme geben wird.
Funktioniert alles super, hab aber nun nur einen Handshake mittels der RTS und CTS Leitung eingebaut. Da meine Pins am Controller knapp werden. Funktioniert bei dem Agilent 33120A top. Jetzt wird das Gerät allerdings von einem Kollegen benötigt und ich muss nun mit einem Hewlett Packard 33120A arbeiten, was leider nur einen DTR/DTS Handshake unterstützt. DTR/DTS und RTS/CTS funktioniert doch in etwa gleich oder? Kann ich die DTR/DTS Leitungen einfach auf die RTS/CTS umleiten? oder hab ich bei der Beschreibung der Handshakes was überlesen? Für jede UART 4 Pins fürn Handshake zu opfern ist mir leider nicht möglich. Danek schoneinmal im V. Sebastian Ulmer
Erst mal, es heisst D*SR* nicht DTS. Dann, DSR/DTR ist leicht unterschiedlich zu RTS/CTS, allerdings sind die Unterschiede nicht besonders schlimm. Theoretisch zeigen Geräte mit DTR an, dass sie grundsätzlich bereit sind, nicht, dass sie gerade Daten empfangen können. In der Praxis wird das oft anders gehandhabt, nämlich wirklich zum Flow-Controll. Das muss allerdings nicht so sein. Daher: Erst mal genau das Handbuch des 33120A lesen. Macht der wirklich Flow-Controll über DTR? Wenn dem so ist, dann kann man RTS durch DTR und CTS durch DSR ersetzen. Also den DTR Ausgang vom 33120A mit dem CTS Eingang am Controller und den DSR Eingang am 33120A mit dem RTC Ausgang vom Controller verbinden. Alles unter der Annahme das der Mikrocontroller als DTE und der 33120A als DCE verkabelt ist.
Ups stimmt DSR bin bissl durcheinander gekommen^^ Hat sich aber nun doch erledigt, muss doch das Agilent Gerät verwenden, da die Programmierung auch kleine Unterschiede aufweist im Gegensatz zum HP. Hab das mit dem DSR/DTR trotzdem mal genau nachgeschaut und probiert. Funktioniert ohne Probleme. Dann verstehe ich aber nicht wieso die Geräte nicht die CTS und RTS Leitungen zum FlowControl benutzen. Wäre doch eigentlich logischer. Naja auch egal.
> Hat sich aber nun doch erledigt,
Dankeschön dass ich meine Zeit mit einer Antwort verschwenden durfte.
Hab das auch erst gerade erfahren. Und umsonst war es ja trotzdem nicht. Probiert hab ich es und verwende jetzt bei dem Agilent Gerät auch den DSR/DTR Handshake und nicht mehr den RTS/CTS. Damits bissl einheitlicher bleibt
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.