LabVIEWForum.de - RS232 nicht lesbar?

LabVIEWForum.de

Normale Version: RS232 nicht lesbar?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Guten Morgen,

ich beschäftige mich seit gestern verzweifelt damit, ein Luxmeter mit LabVIEW auszulesen. Dieses ist über RS232 angeschlossen und wird auch erkannt, die mitgelieferte Software funktioniert auch. Die Einstellungen des seriellen Ports sind ebenfalls korrekt.
Mit Visa Schreiben scheine ich das Gerät zu erreichen, da hier eine "Remote"-LED aufleuchtet.
Das Problem jetzt: Visa Lesen gibt mir immer einen Timeout-Fehler aus. Die Zeit ist bereits variiert, alles, was ich bisher im Forum und auf der NI-Seite gefunden habe, führt zu keinem Erfolg.
Ich habe mir nun das Beispielprogramm "Continuous Read and Write" angeschaut, welches genau den gleichen Fehler ausgibt, unabhängig von den Einstellungen. Jetzt bin ich wirklich mit meinem Latein am Ende und bitte euch um Hilfe Smile

Ich habe den Verdacht, dass mir das auslesen irgendwie verboten wird oder ich dieses einschalten müsste, ich weiss aber einfach nicht, wo Bahn

Vielen Dank bereits im Voraus!
Hallo und guten Morgen,
um eine Kommunikation über RS 232 und LV zu realisieren, muss man den Befehl erst senden, daß man einen bestimmten Wert abfragen will. Im Kommunikationsprotokoll nachschaun.
Bevor man dann den Wert empfängt, sollte man dem Gerät eine Pause gönnen, damit er den Wert zum Senden bereiten kann. Das ist abhänging von Anzahl der Datenbits und Baudrate.
Also: Senden des Strings zur Wertabfrage;
Pause;
Wert empfangen.
Noch ein Tip, wenn man den Aufbau der Kommunikation, sie funktioniert ja mit dem Programm vom Herstellen, entschlüsseln will, kann man die RS 232 bei der Kommunikation ausspionieren. Dazu gibt es Gratisprogramme im Netz.
Hoffe, Tip hilft.
Was sagt denn das Handbuch dazu? Üblichweise muss man solchen Messgeräten erst eine Frage (Befehl in definiertem Syntax) schicken, bevor die etwas zurück senden, das man dann von der Schnittstelle lesen kann.
Wichtig auch: Korrekte Baudrate und korrekte Einstellung des "Termination Char".

Gruß, Jens
Danke für die regen Tipps! Leider funktioniert es immer noch nicht...
Baudrate, Parität, Datenbits, Stoppbit sind alle laut Handbuch angegeben, daher gehe ich von keinem Fehler diesbezüglich aus.
Der Termination Character und die Befehle sind etwas kryptisch (für mich zumindest) daher gebe ich euch den entsprechenden Absatz aus dem Handbuch einfach mal im Wortlaut an:

Jeder Befehl, der an das Digilux geschickt wird, muss mit einem <CR> (ASCII 13 dez.) abgeschlossen werden. Die Parameter eines Befehls (soweit vorhanden) müssen untereinander und vom Befehlswort durch ein Blank (ASCII 32 dez.) getrennt werden.
Das Digilux beantwortet jeden gültigen Befehl, den es korrekt ausführen kann, mit einem <ACK> (ASCII 6 dez.) und evtl. mit einem Antwortstring. Dieser Antwortstring wird ebenfalls mit <CR> abgeschlossen.
Ungültige oder nicht ausführbare Befehle werden mit <NAK> (ASCII 21 dez.) quittiert.
Ein neuer Befehl darf immer erst gesendet werden, wenn die Antwort auf den vorhergehenden Befehl vollständig empfangen wurde.


Und als Beispielbefehl: "SV" gibt die Gerätekommunikation und allgemeines anderes Gelärch aus.
Wie muss ich das denn jetzt formulieren? Ich finde leider kein Beispiel hierzu, vielleicht ist mein Syntax einfach grundlegend falsch, aber ich gebe als Befehlsstring einfach "SV <CR>" an. Habe auch schon alles in Dezimal, Hexadezimal, mit Leerzeichen, Leerzeilen, Kommata, mit und ohne eckige Klammern probiert. Nichts. Nicht einmal ein <NAK>, was ja scheinbar auch, wenn ich Käse eingebe, einfach kommen sollte, wenn ich nur ein CR reinschreibe.
Du sollst nicht <CR> in deinen String reinschreiben, sondern ein "Carriage Return" Zeichen (HEX 0x0D) hinten dranhängen. Außerdem schließt dein Gerät jede Antwort mit einem <CR> Buchstaben ab, du kannst also bei "VISA Configure Serial Port" mit aktiviertem TermChar arbeiten:
[attachment=53911]
Gruß, Jens
(27.08.2015 10:12 )Vision_Michl schrieb: [ -> ]vielleicht ist mein Syntax einfach grundlegend falsch, aber ich gebe als Befehlsstring einfach "SV <CR>" an.

nur mal so als ganz dumme Frage:
Du schreibst nicht wirklich die Zeichen "SV <CR>" so in den Sendestring, oder?!

Also das CR steht für ein Enterzeichen - ASCII-Code 13, so wie im Handbuch beschrieben. Du musst also an dein SV eineEnterkonstante anhängen, zu finden in der Stringpalette.


Gruß, Marko
Ja, leider keine dumme Frage... ich hab das mit dem Carriage Return noch nie gehört, ich habs halt genau so in den Eingangsstring geschrieben.
Aber rein aus der Bedienungsanleitung wirds halt auch irgendwie nicht klar. Ne kleine Erläuterung wäre meiner Meinung nach da auch schön gewesen...

Es funktioniert jetzt mittlerweile, also vielen Dank an alle Smile
(27.08.2015 14:53 )Vision_Michl schrieb: [ -> ]... ich hab das mit dem Carriage Return noch nie gehört, ich habs halt genau so in den Eingangsstring geschrieben.
Aber rein aus der Bedienungsanleitung wirds halt auch irgendwie nicht klar. Ne kleine Erläuterung wäre meiner Meinung nach da auch schön gewesen...

Also wenn im Handbuch steht Jeder Befehl, der an das Digilux geschickt wird, muss mit einem <CR> (ASCII 13 dez.) abgeschlossen werden., dann sollte das für einen Programmierer Erklärung genug sein.

Die Tatsache, dass du das mit dem Carriage Return noch nie gehört hast, ist wohl mehr eine Bildungslücke deinerseits, als ein Versäumnis der Handbuchschreiber.


Gruß, Marko
Offtopic2
Ball flach halten, Marko.
Laut NI Marketing kann jeder ohne weiteres Vorwissen mit LabVIEW ein Messprogramm erstellen. Big Grin

Gruß, Jens
Seiten: 1 2
Referenz-URLs