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!
ich hab folgendes Problem. Im Moment hab ich jeweils zwischen visa write und visa read und den darauf folgenden visa write und visa read Zeitverzögerungen eingebaut (siehe vi. Case 12). Allerdings arbeitet LabVIEW diese Zeitverzögerungen nicht ordnungsgemäß ab. Konnte mir auch niemand sagen warum. Allerdings ist für eine richtige Antwort diese Verzögerung notwendig. Es ist auch schon mal der Fall aufgetreten, das LabVIEW mir zwei Befehle auf einmal geschickt hat und ich dann eine falsche Antwort bekommen habe. gibt es eine Möglichkeit diese nicht richtig arbeitende Zeitverzögerung zu ersetzten? Das ich mit dem Senden immer warte bis ich eine Antwort bekommen habe. Sprich Frage 1 senden, wenn Antwort da, Antwort eins empfangen, nach dem Empfangsvorgang Frage 2 senden, wenn Antwort da, Antwort zwei empfangen usw.
ich hab am Serial Port Monitor gelauscht! Den ersten Case macht er sauber. Den zweiten und den dritten zusammen, und danach den vierten, fünften, sechsten und siebten zusammen.
19.11.2008, 14:07 (Dieser Beitrag wurde zuletzt bearbeitet: 19.11.2008 14:09 von jg.)
Das die Cases zusammen ausgeführt werden, kann gar nicht sein, da wird dein Serial Port Monitor zu langsam sein, denn du hast in den Cases 0-6 schließlich eine Wartezeit von Null drinstehen:
Was ist eigentlich jeweils die Antwort, die du erwartest? Du testest dies momentan nur in einem Case, ansonsten langt es die offenbar, wenn du schon ein beliebiges Zeichen bzw. sogar gar kein Zeichen als Antwort erhältst.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Case 0-6 bekommt er jeweils die gleiche Antwort. Deshalb kann ich die ohne Wartezeit ausführen! Danach kommt der Einwahlvorgang auf den eine ganz bestimmte Antwort kommt. Falls das Modem correct verbunden ist, folgen die restlichen Cases für das aktivieren der Steuerung. Und falls diese nicht genau nacheinander abgearbeitet werden, bekomme ich keine Daten. Und das ist leider ab und zu der Fall. Wie gesagt, ab und zu funktioniert´s und ab und zu eben nicht. Jeweils mit dem selben vi.
' schrieb:Case 0-6 bekommt er jeweils die gleiche Antwort. Deshalb kann ich die ohne Wartezeit ausführen!
So funktioniert das nicht.
Das "Senden" funktioniert so, daß die Bytes in den Sendepuffer geschoben werden, von wo aus dann mit irgendeinen windowseigenen Slave-Prozess die Serielle Leitung bedient wird. Das VI "Senden" hat keine Wartezeit.
Wenn Du danach sofort abfragst, wieviele Bytes im Empfangsbuffer sind, ist die Antwort immer Null, denn die Gegensstelle hat zu diesem Zeitpunkt noch nicht einmal die Nachricht bekommen, daß sie etwas senden soll.
Das machst Du sieben Mal hintereinader so.
Wenn dann einmmal eine Wartezeit kommt und sich Gelgenheit bietet, daß sich im Empfangspuffer etwas ansammeln kann, dann sind es garantiert nicht die gewünschten Bytes auf Grund er Anfrage beim letzten Senden, sondern irgendetwas ganz anderes. Was es ist ist, laßt sich schwer sagen, denn was weiß ich wie die Gegenstelle reagiert, wenn Du sieben Mal umittelber hintereinander etwas sendest ohne die Antworten abzuwarten. Vermutlich hat sie davon einen Hustenanfall bekommen.
Ganz und gar abwegig ist Deine Vermutung, daß das Warte-VI nicht richtig funktioniert.
Du solltest als Diagnose an alle Leitungen "Bytes im Buffer" Anzeigen oder Sonden anschließen, und nachschauen, ob überall die richtigen Bytes empfangen wurden, auch wenn Dich diese Bytes letztlich nicht interessieren.
Lucki, genau diese Zeit brauche ich als Verzögerung!!! Senden, Empfangen und dann, erst wenn die gewünschten Bytes empfangen wurden die nächsten wieder senden!!! Wie funktioniert denn die Diagnose? Genau so eine Möglcihkeit suche ich, welche visa read abwartet und erst anschl. das nächste visa write betätigt.
Nachdem mir gerade langweilig ist, habe ich dir mal eine Event-basierte Leseroutine gebastelt. Diese kannst du als SubVI einsetzen, dann wird dein VI auch wesentlich übersichtlicher. Was hierbei voraussetzt wird ist, dass du bei jedem Befehl wissen musst, wieviele Zeichen deine Antwort enthält.
Wenn jede Antwort mit einem bestimmten Zeichen (z.B. Carriage Return) abgeschlossen wird, könnte man die Leseschleife natürlich auch darauf hin umbauen.
Was du allerdings nicht vergessen darfst, nach dem Öffnen der Schnittstelle folgendes VI einfügen:
P.S.: Sag mal, so ganz hast du das Konzept der StateMachine noch nicht verstanden, oder wieso baust du in "State 12" nochmal die komplette State-Machine ein?
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!