Zykluszeit passt nicht - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ) +---- Thema: Zykluszeit passt nicht (/Thread-Zykluszeit-passt-nicht) Seiten: 1 2 |
RE: Zykluszeit passt nicht - win98 - 21.07.2011 08:29 Naja gut, das Anzeigeelement ist eigentlich egal wo es steht (ob's jetzt immer aktuell ist, oder nur dann wenn ich's brauch angezeigt wird). Ich bin ja mit den LV Programm noch nicht fertig, deswegen ist das noch "unbenutzt". Hab da mal zwei Textboxen hingeschrieben, wo dann meine Operationrn kommen würden. Es ging mir jetzt in erster Linie darum das mit dieser blöden Laufzeitfehler und Verzögerungen zu umgehen. Ich denke schon, dass das ein Create Task Icon ist Ich habe: Einen Task hinzugefügt, den Task aus dem MAX gewählt und dann Programmcode erzeugen --> Beispiel und Konfiguration. Dann hab ich das Icon bekommen. Ich habs nur anders genannt, weil der Name vorher "Unbenannt 3" war und so weiß ich für was das gut ist Gibt es eine besser Methode, weil du meinst das ist besser aber nicht gut? Ich hab jetzt nochmal eine Que entsprechend umgekehrt für den Write Task erstellt, ich hoffe es ist richtig, weil ich jetzt keine reine Erzeuger und keine reine Verbaucherschleife hab. Die Task hab ich jetzt auch zu gemacht. [attachment=34780] RE: Zykluszeit passt nicht - GerdW - 21.07.2011 08:33 Hallo Win, Zitat:ich hoffe es ist richtig, weil ich jetzt keine reine Erzeuger und keine reine Verbaucherschleife hab.Nö - jetzt hast du eine potentielle Deadlock-Situation: Du wartest in beiden Schleifen auf neue Daten in einer Queue, die in der jeweils anderen Schleife erzeugt werden. Worst case: beide Schleifen warten auf Daten und keine produziert welche - DEADLOCK! RE: Zykluszeit passt nicht - win98 - 21.07.2011 08:44 Ich weiß zwar was ne Deadlock ist, sehe die aber gerade nicht. Ich mein der Schreib- und Lese Task wartet ja nicht auf ein Event oder so, sondern werden doch alle 25ms ausgeführt, oder? Habs aber trotzdem nochmal getauscht. [attachment=34783] RE: Zykluszeit passt nicht - GerdW - 21.07.2011 08:47 Hallo Win, Zitat:Ich mein der Schreib- und Lese Task wartet ja nicht auf ein Event oder so, sondern werden doch alle 25ms ausgeführt, oder?Die Tasks warten nicht, aber deine QueueRead-Funktionen! Da hilft dir auch nicht, die Schleife mit 25ms zu takten... RE: Zykluszeit passt nicht - win98 - 21.07.2011 08:50 Oh, ok Da hätte mir jetzt mein Prof n Vortrag drüber gehalten Aber so ist es jetzt richtig, oder? Vielen Dank für deine Hilfe RE: Zykluszeit passt nicht - win98 - 22.07.2011 10:46 so langsam aber sicher werde ich verrückt also: Ich spiele in main Import Array Daten rein, die meine Eingänge setzen (mit SetTestArray.vi) und die Ausgänge vergleichen sollen (mit GetCheckArray) ich habe z.B. solche Daten in meinem Import Array aus Excel eingelesen: DI1.1 Tmax(ms) DO1.1 DO1.2 DO1.3 DO1.4 DO1.5 DO1.6 0 3333 0 0 0 0 0 0 1 2000 1 0 0 0 0 0 1 2000 1 1 0 0 0 0 1 1000 1 1 1 0 0 0 1 1000 1 1 1 1 0 0 1 500 1 1 1 1 1 0 1 500 1 1 1 1 1 1 das sind 6 einschaltverzögerungen hintereinander mit 2x2s, 2x1s und 2x0,5s Verzögerung. Dann vergleiche ich die Erwartungswerte (DO Array aus der Excel Liste) und dem wirklichen Prozesswerten. Natürlich muss ich noch eine Zeile angeben, in der ich gerade bin. Vorher hatte ich das so, das ich die Zeit Tmax als Verzögerung in die Verbraucherschleife eingestellt hatte. Das Problem, ich musste bei einer Einschaltverzögerung die Zeile um 2 dekrementieren (einmal klar, weil ich erst nach dem Setzen den Ausgang lesen kann und einmal weil nach Punkt 2000ms der Ausgang noch nicht da war, sondern nach ca 2050ms). Ich könnte jetzt die 50ms konstant immer zur Verzögerung dazuaddieren, aber dann krieg ich Probleme wenn ich einen Taktgenerator habe wegen der Abtastung. Jetzt will ich das so machen, dass ich Permanent (alle 25ms oder so) Lese und Schreibe, und nur die Zeile nach 2000ms erhöhe. Weil dann kann ich nochmal eine Abfrage machen ob der Zustand stimmt und ggf nochmal kruz warten und Abfragen. Dafür muss ich aber die Erhöhung der Zeile anhalten und trotzdem das Lesen und Schreiben aktiv halten. Also quasi parallel. Leider kann ich keine Ereignisse einsetzen, sonst wäre das kein Problem. Ich habs bis jetzt so: [attachment=34802] und das klappt noch nich ganz. Ich bin miserabel im erklären. Ich suche sowas wie ein "Backgroundworker" wo ich ständig meine Daten abfrage (aus dem Controller) und schreibe (von meine Schalter Array). Im Hauptprozess mache ich dann meine Auswertung (Schalter Array setzen, Controllerwerte vergleichen). Das Problem mit beim Erzeuger-Verbraucher-System ist, dass wenn ich das "Element aus Queue entfernen" verzöger, bzw. nich benutzen möchte, auch das "Element einfügen" anhält. |