Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Hallo, ich hab da mal 'ne Frage. Ich muss ein VI programmieren das Daten aus einem Controller ausliest. Dieser Controller sendet einmal pro Sekunde den aktuellen Wert. Es ist ein Controller für ein Vakuum Messgerät.
Nun muss das VI diesen Wert irgendwie lesen können. Ich hab es schon hinbekommen den Wert zu lesen. Allerdings ist es eher eine Glückssache den Wert als ganzes mitzubekommen. Oft fehlt die Hälfte. Einfach weil nicht in dem Moment gelesen wird, in dem der Wert gesendet wird.
Gibt es eine Möglichkeit auf den Wert zu warten um ihn ganz auslesen zu können ? Es gibt ja irgendwie die Funktion "auf Ereigniss warten". Wie funktioniert das. Kann mir da jemand helfen ?
Ich nehme an, du verwendest die VISA-API. Hier kannst du einen Event konfigurieren und darauf warten. In der Regel hat eine Nachricht ein Terminierungszeichen, welches das Ende der Nachricht anzeigt, in der Nachricht selber aber nicht vorkommt. Oft ist dies ein Linefeed oder Carriage Return. Manche Protokolle markieren sowohl Anfang als auch Ende oft mit den Zeichen STX und ETX (siehe Wikipedia).
Die Schnittstelle ist eine USB-Schnittstelle, allerdings sitzt hinter der USB-Buchse nur ein RS232 to USB Converter. Das Gerät wird auch als serielle Schnittstelle im Gerätemanager angezeigt. Was du mit API meinst weiß ich nich.
Ja das kenne ich, ich habe auch schon so einige andere Geräte über RS232 betrieben. Bei denen musste ich allerdings einen Befehl senden um eine antwort zu bekommen. Bei dem jetztigen Gerät sende ich jedoch keine Befehle. Ich erhalte nur einmal pro Sekunde einen aktuellen Wert. Und jetzt muss ich irgendwie mein VI mit dem Gerät synchronisieren und dachte das einfach über die Funktion "auf ereigniss warten" machen zu können.
Kannst du auch, aber dafür musst du wissen, mit welchem Zeichen die Nachricht abgeschlossen wird. Denn du musst der Schnittstelle sagen, bei welchem Zeichen ein Event ausgelöst werden soll.
was ist an der seriellen Kommunikation so problematisch?
Wenn alle 1,0s ein neuer String gesendet wird, dann einfach ein TimeOut von 1,5s beim VISA-Read verwenden... Diese Kommunikation sollte eh schon in einer parallelen Schleife laufen, also droht auch hier kein Ungemach mit zu langen Delays etc.! Und ob du nun einen neuen Wert explizit anfordern musst oder ihn ungefragt geliefert bekommst, macht auch keinen großen Unterschied!
RS232-Kommunikation läuft fast immer nach SchemaF: entweder man wartet auf eine bestimmte Anzahl Zeichen oder auf eine Zeichenkette mit bekanntem Endezeichen. Beides lässt sich einfach (wie im Example gezeigt) in LabVIEW umsetzen...
Die ganz entscheidende Frage für die Programmierung ist: Werden die Nachrichten mit Terminierungszeichen abgeschlossen oder nicht, und wenn ja, mit welchem? Die Frage wurde Dir schon 2 oder 3 Mal gestellt, und solange Du die Frage übergehst, wirst Du mit den Antworten nicht glücklich werden können. (Terminierungszeichen sind in der Regel x0A oder x0D)