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 |
Zykluszeit passt nicht - win98 - 20.07.2011 12:48 Hallo zusammen, ich verusch euch mal mein Problem zu erklären: Ich habe auf einen Controller ein Rechtecksignal geladen. Diese ist 500ms lang EIN und wieder 500ms lang aus. Ich habe jetzt das Rechecksignal aktiviert (DI1.2=1), habe 500ms lang gewartet und habe das Signal ausgelesen. Jetzt müsste ich ja in jedem Schleifenschritt abwechselnd 0 und 1 bekommen (meine Erwartung) das kontolliere ich mit einem Vergleich. Leider läuft das irgendwas mit den Zeiten schief, aber ich komm nich drauf. Ich habe 112 Schleifenschritte ausgeführt und der Vergleich gab folgendes Ergebnis: Schritt:Ergebnis 1:True 2-32:False 33-64:True 65-96:False 97-112:True Eigentlich müsste ich ja da immer True haben. In den Fällen wo ich False bekomme, ist das Ist-Signal und Soll-Signal immer umgekehrt. Hab da auch mit der Verzögerung bischen gespielt, weil ich dachte er braucht vllt Zeit zum lesen/schreiben, gab zwar eine Änderung aber ich hatte trotzdem nicht konstant "True" als Ergebnis. Ich hoffe jemand weiß Rat. [attachment=34760] Achso, vllt noch was. Ich habe es auch mal so versucht: [attachment=34762] Wenn ich oben, bei der Verzögerung +0 Eintrage, funktioniert das mit den Rechtecksignale wunderbar und ich habe überall "True". So, jetzt habe ich auf dem Controller nich nur ein Rechtecksignal, sondern auch eine Einschaltverzögerung von 2s. Wenn ich nur ein Bit setze, 2s warte und abfrage ob es da ist, dann krieg ich beim Vergleichen ein "False" und erst im nächsten Schleifendurhclauf ein"True" . Deswegen habe ich zu Verzögerung 30ms dazuaddiert. Denn wenn ich 2s und 30ms auf die Einschaltverzögerung warte, dann krieg ich beim Vergleichen ein "True" Nur wie mach ich das, dass ich sowohl Rechtecksignal, als auch Einschalverzögerung korrekt ausgewertet bekomme? RE: Zykluszeit passt nicht - GerdW - 20.07.2011 13:19 Hallo win, Zitat:Nur wie mach ich das, dass ich sowohl Rechtecksignal, als auch Einschalverzögerung korrekt ausgewertet bekomme?Auf Sequenzstrukturen und ExpressVIs verzichten - beide können dir dein Timing versauen... Dafür mal lieber anschauen, wie Statemachines und Producer-Consumer-Strukturen funktionieren! Vorschlag: Parallel arbeitende Ausgabe- und Eingaberoutinen. Eingaberoutine läuft dauernd mit und du holst dir (aus einem Datenpuffer) immer nur den gerade aktuellen Wert deiner Eingangssignale ab... RE: Zykluszeit passt nicht - Lucki - 20.07.2011 13:30 Zu welchem Zusatzmodul gehört denn das [attachment=34763]? Noch nie gesehen.. RE: Zykluszeit passt nicht - win98 - 20.07.2011 13:32 Meinste mit ExpressVI den DAQ-Assistenten? Logisch gedacht wollte ich das eigentlich auch so haben, dass ich immer Lese, und Schreibe und dann grad dann einen Wert rausfische, wenn ich ihn brauche. Es hapert halt bei mir an der LabView Programmierung, weil ich da noch wenig Erfahrung habe. Ist diese Producer-Consumer-Strukturen so eine prallele Routine? Ich musste schon bei der Event-Struktur feststellen, dass in die in der Basic Version nicht vorhanden ist und unter Strukturen kann ich dein genanntes auch nicht finden RE: Zykluszeit passt nicht - GerdW - 20.07.2011 13:34 Hallo win, den Link meiner Signatur beachten. Außerdem mal einfach VI-Menü->Datei->"Neu..." und dann "Aus Vorlage"->"Frameworks"->"Entwurfsmuster" durcharbeiten... Ist auch bei der Base-Version dabei! RE: Zykluszeit passt nicht - win98 - 20.07.2011 13:36 (20.07.2011 13:30 )Lucki schrieb: Zu welchem Zusatzmodul gehört denn das ? das hab ich mir gebastelt Ich hab 3 Ports als Array von 0-7 das din macht aus 3x 0-7 Arrays ein einmal 0-23 Array. Dabei füllt es die Arrays immer bis 8 Elemente voll (bzw begrenzt die auch), also wenn es jetzt 3x 0-5 Arrays sind, dann fügt er an jedem Array nochmal 2 Elemente dran und fügts dann zu einem 0-23 Array. Ein Bild sagt mehr als tausend Worte: [attachment=34765] (20.07.2011 13:34 )GerdW schrieb: Hallo win, Das erste mal das ich das Menü verwende Dein Link ist mir schon aufgefallen, der hat mir bereits einiges an Arbeit gespart. Ich werd mal das mit den Vorlagen ausprobieren. Ich denke das "Erzeuger/Verbraucher-Entwurfsmuster" triffts ganz gut RE: Zykluszeit passt nicht - win98 - 20.07.2011 14:40 Sooo... ich hab mal jetzt mich etwas schlauer gemacht und ich hoffe es ist so richtig zusammengesetzt: [attachment=34770] Wenn das Grundprinzip so richtig ist, werd ich mich morgen mal dran setzen und den Rest noch da einbauen. Vllt noch ne Frage: Zählt der DAQ-Assistent zu den ExpressVIs? Bzw was genau sind ExpressVIs? RE: Zykluszeit passt nicht - GerdW - 20.07.2011 14:46 Hallo win, wozu die Queue, wenn du deren Daten überhaupt nicht benutzt? Dann reichen auch zwei parallel arbeitende Schleifen... Ja, der DAQAssi ist auch ein ExpressVI. Das sind diese Klickibunti-Funktionen, die man "nur noch" konfigurieren muss - und die einen in ein festes Korsett zwängen. Und die außerdem (wie beim DAQAssi) auch verhindern, effizienten Code zu schreiben. Der DAQAssi z.B. öffnet/initialisiert und deinitialisiert bei jedem Aufruf dein DAQ-Gerät, obwohl dies nur je einmal nötig wäre... Soviel zum Thema "möglichst genaues Timing"! RE: Zykluszeit passt nicht - win98 - 21.07.2011 07:13 hm, ok das mit dem DAQ Assisten schien mir halt einfacher Von NI gabs noch n Tutorial wie man das mit dem MAX und nem Task machs ("Programmcode erzeugen"). Wegen dem dauernden öffnen und schließen hab ich mal das "Write Device3" aus der Schleife geholt ist das so besser wie beim write? Ich benutze die Que nicht? Tu ich das jetzt für den Read Fall? D.h. ich brauche dann zwei Ques, eine fürs Lesen eine fürs Schreiben, oder? Ansonsten wüsste ich nich wo ich meine Read und Write Bausteine hintun soll... [attachment=34778] [attachment=34779] RE: Zykluszeit passt nicht - GerdW - 21.07.2011 07:58 Hallo win, momentan ist die Queue in deinem VI unnütz - du schiebst die Daten nur woanders hin, um sie dann in den selben Anzeigen darzustellen. Dafür braucht man keine Queue... (Nur weil ich schrieb "Schau dir das P/C-Pattern an", heißt das nicht, du musst auf Teufel komm raus eine Queue benutzen!) Zitat:hab ich mal das "Write Device3" aus der Schleife geholt ist das so besser wie beim write?Dieses "Write Device3" hat das gleiche Icon wie die CreateTask-Funktion. Macht das VI auch das gleiche? Falls ja: so ist das schon besser (aber nicht gut )! Jetzt fehlt noch die Funktion zu Beenden des Tasks - immer alle Referenzen schließen, die man so öffnet! |