LabVIEWForum.de - Synchronisation zwischen zwei Schleifen geht verloren

LabVIEWForum.de

Normale Version: Synchronisation zwischen zwei Schleifen geht verloren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,
ich habe zwei while-Schleifen, die eine (im pdf-file oben) ließt eine digitizer-Karte über eine cPCI Schnittstelle ein (das ist angepaßter Code vom Hersteller der digitizer-Karte), die andere (im pdf-file unten) einen Controller über eine RS232-Schnittstelle. Beide Schleifen werden über einen Melder synchronisiert, d.h. wenn es ein spezielles Event gibt, erhalten sowohl die digitizer-Karte als auch kurz danach (30-200 ms) der Controller aktuelle Werte, die von LabVIEW eingelesen werden. Der Controller-Wert kommt etwas später und wird über den Melder in die digitizer-Schleife geschickt. Dort werden die beiden Daten zusammen in eine Datei abgespeichert. Das Programm funktioniert nach dem Start eine Weile so wie es soll, doch dann wird der Controller-Wert zu spät eingelesen (obwohl er wie vorher immer noch 30 bis 200 ms nach dem digitizer-Wert geschickt wird). Somit erhält auch der Melder in der digitzer-Schleife keinen Wert mehr und ein timeoput wird erzeugt. Ich habe den Melder auch schon durch eine Ereignisstruktur mit lokaler Variable ersetzt, aber auch dies hat das Problem nicht gelöst. Kann mir irgend jemand weiterhelfen. Ich bin für jeden noch so kleinen Tipp dankbar.
Ich benutze LV 7.0 und winXP
Hallo asdkamps,

ich habe gesehen du benutzt das VISA-Event "Serielles Endzeichen" mit einem Timeout von 10 Sekunden. Kann es was damit zu tun haben? Was passiert wenn dieser Event nicht kommt?

Leider sind solche zeitabhängige Programme schwer zu debuggen, aber versuch es mal mit Breakpoints oder Probe-Tool und nicht mit dem Highlight zu debuggen.

Gruss, Eugen
Hallo Eugen,

vom Controller wird alle 6 s ein anderer String geschickt, so dass der timeout im visa-event nicht vorkommen kann. Sobald dieses spezielle event kommt, schiebt der controller diese Information zwischen die im regelmäßigen Abstand von 6 s geschickten strings.
Das hatte ich vorher vergessen zu schreiben: Wenn der Fehler auftritt, also die Daten von der RS232-Schnittstelle zu spät eingelesen werden, muß ich das vi nur stoppen und wieder starten (ohne LV zu schließen) und das Programm funktioniert wieder eine Weile. Ich habe bisher noch nicht mit der highlight-Funktion versucht zu debuggen. Stattdessen habe ich an verschiedenen Stellen timer-Werte eingelesen und über Differenzbildung Zeiten gemessen, die das Programm für verschiedene Dinge braucht, z.B. ca. 50 ms zum Speichern der Datei. Das hat aber bisher noch nicht weitergeholfen. Im Moment lasse ich die Controller-Schleife reduziert auf das Wesentliche für sich alleine laufen, um den Fehler weiter einzugrenzen.
Erst einmal vielen Dank
Referenz-URLs