LabVIEWForum.de - Programm sehr langsam

LabVIEWForum.de

Normale Version: Programm sehr langsam
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo, ich habe ein Programm geschrieben (EGSE Control Center). Es ist sehr umfangreich.
Mein Problem liegt jetzt darin, dass es so langsam ist, dass ich etwa 5 bis 10 Sekunden warten muss bis es durch die Stopp-Taste beendet werden kann, manchmal dauert es noch viel länger. Ich dachte erst es liegt an meinem Rechner, aber auf einem QuadCore lief es auch nicht schneller.

Kann mir da jemand einen Tipp geben ?

Programm ist im Anhang, zu starten ist EGSE Control Center3.

LV - Version 8.6.1
Ohne es anzugucken...
...viele Schleifen die alle erst abgearbeitet werden, bevor das finale Beenden kommt..?

Gruß SeBa
:oDa blicke ich nicht mehr durch.

Ein paar Kritikpunkte:
- Du machst dauernd DAQmx-Tasks auf, schreibstest was und schließt/löschst sie nicht mehr. Ein Task sollte immer wieder geschlossen und gelöscht ("Clear") werden.
- Du verwendest 2 (!) Event-Strukturen auf einmal. Das kann zu Problemen führen.
- Du erzeugst für jede Line einen eigenen Task, obwohl Du sie zusammenfassen kannst: z.B. Dev4/port0ne9:11 Dann kannst Du ein Array mit 3 Booleans anlegen und auf einmal "rausschreiben".

Verbesserungsvorschlag:
Versuch doch eine Eventgesteuerte State-Machine zu verwenden und wenn das nicht reicht eine Eventgesteuerte Producer Consumer Loop.
Bei Deinem jetzigen VI wundert es mich nicht, dass es nicht so läuft wie es soll.

Gruß Markus

PS: Beim nächsten Mal besser "zippen". Ich mach' das jetzt mal für Dich. Die meisten haben nur ZIP bei der Arbeit.

[attachment=22657]
Das mit dem Zusammenfassen klingt gut. Das Probier ich mal aus, ich find es selber etwas ungünstig, aber mir fehlt leider die Erfahrung um so etwas besser zu machen.
Das bedeutet man sollte immer einen
- Task öffnen
- Task lesen/schreiben
- Task beenden und
- Task zurücksetzen??

[attachment=22659]

Ich habe immer nur Task lesen bzw. schreiben genutzt.
Genau, so wie in den Bsp. im LabVIEW Examplefinder.
Vor der Schleife erzeugen und starten, in der Schleife lesen bzw. schreiben und nach der Schleife schließen und löschen ("Clear").

Gruß Markus
Wie sieht das dann aus wenn ich beispielsweise 3 Kanäle auf einen Task gebe ?
So wie hier:
http://www.LabVIEWforum.de/index.php?s=&am...ost&p=85462

Gruß Markus

' schrieb:Wie sieht das dann aus wenn ich beispielsweise 3 Kanäle auf einen Task gebe ?
Referenz-URLs