Probleme beim Ansteuern verschiedener Messgeräte über serielle Schnittstelle

OP #905948
Lesenswert?

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
#905996
Lesenswert?

> 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.
OP #906040
Lesenswert?

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.
#906111
Lesenswert?

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.
OP #912679
Lesenswert?

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
Gast #912714
Lesenswert?

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.
OP #912766
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren