LabVIEWForum.de
Programm wird langsamer - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Programm wird langsamer (/Thread-Programm-wird-langsamer)

Seiten: 1 2


Programm wird langsamer - tzy2001 - 24.09.2007 08:27

Hallo zusammen,

Ich habe ein Problem. Mein Programm wird langsamer (1min entsprechen dann 1min15sec), sobald ich ein Analoges Modul (Temperatur Messung z.B.) im Programm integriere.

Ich arbeite mit einem USB-Chassis cDAQ-9172. In diesem Slot sind 7 Module eingebaut (2xNI9263; 2xNI9477; 2xNI9217; 1xNI9205).

Ich habe in meinem Programm SUBvi's eingebaut, und haber gehofft das das Programm deswegen normal weiterlauft.

Sobald ich das Modul 9205 im Programm integriere, wird das Programm noch langsamer (1min entspricht 1min30sec).

Ich bin ratlos, und hoffe das mir jemand helfen kann.

Ich habe im Anhang das Programm mit eingefügt (Bild und Programm selber).

Mfg

Bin Anfänger. Nicht wundern.

(VI LV 8.2)


Programm wird langsamer - tzy2001 - 24.09.2007 09:35

' schrieb:Hallo zusammen,

Ich habe ein Problem. Mein Programm wird langsamer (1min entsprechen dann 1min15sec), sobald ich ein Analoges Modul (Temperatur Messung z.B.) im Programm integriere.

Ich arbeite mit einem USB-Chassis cDAQ-9172. In diesem Slot sind 7 Module eingebaut (2xNI9263; 2xNI9477; 2xNI9217; 1xNI9205).

Ich habe in meinem Programm SUBvi's eingebaut, und haber gehofft das das Programm deswegen normal weiterlauft.

Sobald ich das Modul 9205 im Programm integriere, wird das Programm noch langsamer (1min entspricht 1min30sec).

Ich bin ratlos, und hoffe das mir jemand helfen kann.

Ich habe im Anhang das Programm mit eingefügt (Bild und Programm selber).

Mfg

Bin Anfänger. Nicht wundern.

Falls Ihr die SubVI's benötigt, bitte melden.


Programm wird langsamer - monoceros84 - 24.09.2007 09:45

Ich weiß nicht, ob das daran liegt, aber ein Anfang wäre mal, die Initialisierung und das Starten der DAQ-Tasks VOR deiner Schleife zu erledigen. Das verbraucht nämlich meist viel Zeit.

Analog das Beenden und Löschen der Tasks NACH der Schleife.

Evtl. funktioniert das dann schon wie gewünscht...


Programm wird langsamer - tzy2001 - 24.09.2007 14:18

' schrieb:Ich weiß nicht, ob das daran liegt, aber ein Anfang wäre mal, die Initialisierung und das Starten der DAQ-Tasks VOR deiner Schleife zu erledigen. Das verbraucht nämlich meist viel Zeit.

Analog das Beenden und Löschen der Tasks NACH der Schleife.

Evtl. funktioniert das dann schon wie gewünscht...


Ich habe das Programm verändert, so wie Du es mir gesagt hast (Ich hoffe das ich Dich richtig verstanden habe). Es ist besser geworden, aber es läuft nicht in 1min. Jetzt verliere ich nur noch 4sec pro Minute.

Wenn ich jetzt mehr hinnein mache, dann wird es besitmmt wieder langsamer??

(VI LV 8.2)


Programm wird langsamer - monoceros84 - 24.09.2007 14:36

Genau so habe ich das gemeintSmile

Als nächsten Schritt kannst du mal die DAQ-Zugriffe in einem Task zusammenfassen. Ich weiß nicht genau, ob digitale und analoge Inputs zusammengefasst weden können (wahrscheinlich nicht), aber zumindest einen Task mit allen DIs und einen mit allen AIs. Die einzelnen Kanäle nach dem "Task erstellen" mit "Kanäle hinzufügen" einfügen. Das VI kann mehrmals nacheinander ausgeführt werden, es hängt immer einen weiteren Kanal an den Task an. Das alles noch VOR der Schleife.

Dann benötigst du nicht mehr zig "DAQ Read", sondern nur noch ein oder zwei (AI und DI). Diese geben dann jeweils Arrays von Werten aus.

Damit solltest du das ganze auch nochmal beschleunigen können.

Du musst aber wissen, dass du dich nicht 100%ig darauf verlassen kannst, dass die Minute immer eingehalten wird. Wenn dein PC-Prozessor ausgelastet ist (z.B. indem jemand Excel startetWink), dann kann der Rechner das VI nicht mehr so schnell ausführen und es kommt zu Verzögerungen. Wenn du das ganze wirklich genau getimet benötigst, kommst du wohl um eine Realtime-Anwendung nicht herum...


Programm wird langsamer - tzy2001 - 24.09.2007 15:55

' schrieb:Genau so habe ich das gemeintSmile

Als nächsten Schritt kannst du mal die DAQ-Zugriffe in einem Task zusammenfassen. Ich weiß nicht genau, ob digitale und analoge Inputs zusammengefasst weden können (wahrscheinlich nicht), aber zumindest einen Task mit allen DIs und einen mit allen AIs. Die einzelnen Kanäle nach dem "Task erstellen" mit "Kanäle hinzufügen" einfügen. Das VI kann mehrmals nacheinander ausgeführt werden, es hängt immer einen weiteren Kanal an den Task an. Das alles noch VOR der Schleife.

Dann benötigst du nicht mehr zig "DAQ Read", sondern nur noch ein oder zwei (AI und DI). Diese geben dann jeweils Arrays von Werten aus.

Damit solltest du das ganze auch nochmal beschleunigen können.

Du musst aber wissen, dass du dich nicht 100%ig darauf verlassen kannst, dass die Minute immer eingehalten wird. Wenn dein PC-Prozessor ausgelastet ist (z.B. indem jemand Excel startetWink), dann kann der Rechner das VI nicht mehr so schnell ausführen und es kommt zu Verzögerungen. Wenn du das ganze wirklich genau getimet benötigst, kommst du wohl um eine Realtime-Anwendung nicht herum...


Tut mir leid, aber das verstehe ich nicht .

Es ist so, das jeder DAQ-Read ein Signal, auf eine Boole-LED geben müssen, damit der Zustand, der extern ist auch auf dem Bildschirm erkennbar ist. D.h. leuchtet extern die Rote LED dann soll auf dem Desktop ebenfalls die Rote Boole-LED leuchten. Wie kann man hier die Tasks verbinden, wenn ich diese Funktion haben möchte??

Ich sage nicht das es nicht geht, ich habe es einfach nur nicht kapiert :-).

Aber ehrlich gesagt, hätte ich es auch so nicht verstanden :-).

Es ist schwierig da mitzukommen, wenn man in Sachen programmieren erst vor 2 Wochen entjungfert wurde :-).

Mfg


Programm wird langsamer - monoceros84 - 25.09.2007 08:02

Hi

Sorry, ich hätte das wahrscheinlich etwas genauer erklären sollen. Hatte nur so kurz vor Feierabend gehofft, du verstehst, was ich meineSmile

Ein wirklich minimales Beispiel siehst du im Anhang. Ich habe allerdings keine Namen für physikalische Kanäle vergeben können, weil ich hier kein DAQ-System habe. Also bei den leeren Felder noch deine Kanelnnamen zufügen. Außerdem empfiehlt es sich, z.B. Min und Max der messung anzugeben. Aber das war ja jetzt nicht Gegenstand der Frage.
Wichtig ist, wenn du mehrere Kanäle hinzufügst, dass du bei DAQmx-Read auch "Multiple Channels" auswählst.

Das ist hier also ein Beispiel für AI. Für DI machst du das im Prinzip genauso. Mit der Funktion "Index Array" spaltest du das Feld mit den Messwerten auf, dann hast du genauso wieder den Zugriff auf die einzelnen "LEDs".

Ich hoffe, jetzt wird deutlicher, was ich meine...

[attachment=8821]


Programm wird langsamer - rolfk - 26.09.2007 08:35

' schrieb:Ich habe das Programm verändert, so wie Du es mir gesagt hast (Ich hoffe das ich Dich richtig verstanden habe). Es ist besser geworden, aber es läuft nicht in 1min. Jetzt verliere ich nur noch 4sec pro Minute.

Wenn ich jetzt mehr hinnein mache, dann wird es besitmmt wieder langsamer??

Nein das ist nicht gesagt!

Die Wait Until Multiple Milliseconds Funktion basiert die interne Zeitmessung auf dem Timertick. Dieser wird intern im Computer von der Taktfrequenz abgeleitet und ist nur ungefähr korrekt im Hinblick auf unsere normale Zeitmessung. Auch kann die Taktfrequenz leicht schwanken abhängig von der Temperatur. Der PC Timertick ist übrigens notorisch dafür dass er nicht ganz so genau ist wie das manche Leute gerne haben möchten und Schwankungen von +-1% zwischen mehreren PCs sind absolut keine Seltenheit.

Wenn Du eine wirklich korrekte Timed Datenerfassung machen willst wirst Du neben dem Zusammenfassen der Kanäle in einen Task auch noch die Verwendung von Timed Buffered Data Acquisition lernen müssen. Dann wird der Takt auf der Datenerfassungskarte generiert die einen wesentlich genaueren Taktgeber besitzt der voll in Hardware implementiert ist und nicht durch CPU Interrupts aufgehalten werden kann.

Rolf Kalbermatter


Programm wird langsamer - tzy2001 - 27.09.2007 12:34

' schrieb:Hi

Sorry, ich hätte das wahrscheinlich etwas genauer erklären sollen. Hatte nur so kurz vor Feierabend gehofft, du verstehst, was ich meineSmile

Ein wirklich minimales Beispiel siehst du im Anhang. Ich habe allerdings keine Namen für physikalische Kanäle vergeben können, weil ich hier kein DAQ-System habe. Also bei den leeren Felder noch deine Kanelnnamen zufügen. Außerdem empfiehlt es sich, z.B. Min und Max der messung anzugeben. Aber das war ja jetzt nicht Gegenstand der Frage.
Wichtig ist, wenn du mehrere Kanäle hinzufügst, dass du bei DAQmx-Read auch "Multiple Channels" auswählst.

Das ist hier also ein Beispiel für AI. Für DI machst du das im Prinzip genauso. Mit der Funktion "Index Array" spaltest du das Feld mit den Messwerten auf, dann hast du genauso wieder den Zugriff auf die einzelnen "LEDs".

Ich hoffe, jetzt wird deutlicher, was ich meine...

[attachment=35682:DAQ.png]

Vielen Dank für Deine freundliche Hilfe. Ich habe die DAQvi zusammengefügt (siehe Bild).

Leider läuft das Programm immer noch langsam. Wenn man die Konstante an der "Wait Until Next ms Multiple"vi auf 100 stellt, dann zählt es genau gleich langsam weiter, als wenn die Konstante auf 1000 gestellt ist.

Es ist aber trotzdem besser geworden. Ich hatte damals das Problem, als ich noch alles in der Schleife hatte, das die Laufzeit in wirklichkeit 1min und 30 sec und in LabVIEW 1min betrug. Jetzt ist es in wirklichkeit nur noch 1min und 5sec.

Es hat sich was verbessert. Ich versuche es jetzt mit dem ElapsedVI. Vielleicht wird es damit besser.

Aber trotzdem, Deine Lösungen/Hilfen waren super.

Mfg


Programm wird langsamer - tzy2001 - 27.09.2007 12:36

' schrieb:Nein das ist nicht gesagt!

Die Wait Until Multiple Milliseconds Funktion basiert die interne Zeitmessung auf dem Timertick. Dieser wird intern im Computer von der Taktfrequenz abgeleitet und ist nur ungefähr korrekt im Hinblick auf unsere normale Zeitmessung. Auch kann die Taktfrequenz leicht schwanken abhängig von der Temperatur. Der PC Timertick ist übrigens notorisch dafür dass er nicht ganz so genau ist wie das manche Leute gerne haben möchten und Schwankungen von +-1% zwischen mehreren PCs sind absolut keine Seltenheit.

Wenn Du eine wirklich korrekte Timed Datenerfassung machen willst wirst Du neben dem Zusammenfassen der Kanäle in einen Task auch noch die Verwendung von Timed Buffered Data Acquisition lernen müssen. Dann wird der Takt auf der Datenerfassungskarte generiert die einen wesentlich genaueren Taktgeber besitzt der voll in Hardware implementiert ist und nicht durch CPU Interrupts aufgehalten werden kann.

Rolf Kalbermatter

Vielen Dank für Deine Hilfe

Mfg