Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
ich habe ein VI erstellt, mit dem eine halbautomatische Montageanlage 24/7 überwacht werden soll. Dazu werden die Taktzeiten der einzelnen Stationen aufgenommen und zusammen mit einem Zeitstempel in jeweils eine Textdatei pro Station geschrieben. Eingelesen werden die Signale über eine PCI-6511 mit 64 DI's.
Insgesamt werden gleichzeitig 16 Messungen durchgeführt, die über 24 digitale Eingänge gesteuert werden.
Mein Problem ist nun: Wenn ich das Haupt-VI (Messung_Anlagenzeit) ausführe und die Messung starte, steigt die Prozessorauslastung auf 100%.
Führe ich eines der beiden Sub-VI's aus, liegt die Auslastung nur bei 0%.
Wäre nett wenn sich jemand meiner Erbarmen könnte, und sich die VI's mal anschauen würde.
Ich kann mir nämlich nicht vorstellen, dass der PC (Pentium 4 mit 2,6GHz) damit nicht fertig wird.
Ich muss noch dazu sagen, dass ich erst vor ca. einem Monat mit LabVIEW angefangen habe. Aus diesem Grund sind die VI's mit Sicherheit auch noch nicht wirklich ausgereift.
Deshalb bin ich auch für Verbesserungsvorschläge abseits meines eigentlichen Problems offen.
Liebe Grüße
Andreas
Anzeige
30.11.2011, 09:23 (Dieser Beitrag wurde zuletzt bearbeitet: 30.11.2011 09:23 von Y-P.)
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
RE: Zu hohe Prozessorauslastung (100%)
Ich habe leider nur einen 24''-Monitor.
Durch das ganze Scrollen habe ich den Überblick verloren.
Außerdem bin ich durch das Programmierkonzept nicht wirklich durchgestiegen.
Was möchtest Du denn genau machen, dass Du so viele Tasks gleichzeitig aufrufst (das geht doch mit einem Task)?
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Wenn ich das auf die Schnelle richtig sehe, öffnest du in deinem Hauptvi alle 100ms 16 Dateien, schreibst dort die Messwerte rein und schließt die Datei wieder. Das könntest du anders machen, in dem du die Dateien einmal öffnest (vor der Schleife), kontinuierlich Daten reinschreibst (in der Schleife) und die Datei (nach der Schleife) wieder schließt. Oder du sammelst erst alle Dateien und machst den kompletten Speichervorgang nach der Schleife.
Grüßle
S.
30.11.2011, 09:57 (Dieser Beitrag wurde zuletzt bearbeitet: 30.11.2011 10:10 von Lucki.)
Also was ich sehe: die 16 Dateien werden sogar alle 10 ms geöffnet und geschlossen. Mich wundert daß das überhaupt geht.
Etwas anderes: Labview ist so konzipiert, daß sich solche flächenfressenden Strickmuster wie du so hast immer vermeiden lassen.
Hier Beispiel, wie man den Inhalt der While-Schleife mit den 16 Tasks, die schon für sich allein den Flächenverbrauch von 3 Bildschirmen hat, auf Größe einer Briefmarke (naja, Sondermarke) bringt. (Auf echte Standard-Briefmarkengröße kommt man, wenn man noch die 6 Eingänge des SubVIs durch einen Cluster ersetzt)
Ebenfalls nicht gut: Dauernd per Obtain-Notifier eine Referenz zu einem Notifier zu holen, vor allem, ohne diese angelegten neuen Refnums zu schließen.
Besser: Die einmal angelegte Notifier-Referenz an die SubVIs verteilen, z.B. per Übergabe oder FGV oder sonst wie.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Zitat:Oder du sammelst erst alle Dateien und machst den kompletten Speichervorgang nach der Schleife.
fällt mir noch ein: Das Sammeln aller Daten könnte man auch in einer Binärdatei - statt im Memory des PC - machen. Wenn dann die zeitkritische Online- Datenerfassung abgeschlossen ist, nimmt man sich die Datei vor und verteilt die angefallenen Daten auf die 16 Textdateien.
@Y-P: Ja, ist leider ziemlich unübersichtlich geworden.
Was gemacht werden soll: An 16 Stationen sollen parallel die Taktzeiten aufgezeichnet werden. Für jede Station gibt es einen Start- und einen Stoptask, falls die Messung mit einem anderen Signal als dem Startsignal wieder gestoppt werden soll.
Wie könnte ich das mit einem einzigen Task realisieren?
@Schwand: Beim Start der Messung wird ein neuer Ordner erstellt, indem die Textdatei gespeichert wird. Nachdem die Messung eines Taktes abgeschlossen ist, wird die ermittelte Taktzeit inkl. des Zeitstempels in die Textdatei geschrieben. Erst wenn die Messnug beendet wird, wird auch die Textdatei geschlossen. ("in Textdatei schreiben.vi")
@Lucki: Wow, danke für den Tip, das mach das ganze doch schon bedeutend übersichtlicher!
@jg: OK, werde ich mal versuchen, auch wenn ich momentan noch keine Ahnung habe wie ich das machen könnte. Das dürfte aber nichts an dem Auslastungsproblem ändern?
So, hab den Vorschlag von Lucki nun umgesetzt, allerdings bearbeitet er mir so nur den ersten Task, und schreibt somit auch nur eine Textdatei (die aus dem ersten Task), statt 16.