INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Das verstehe ich nicht ganz



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!

14.02.2012, 08:53
Beitrag #1

Kernphysik_Jürgen Offline
LVF-Grünschnabel
*


Beiträge: 38
Registriert seit: Nov 2009

8.20
2009
de

55116
Deutschland
Das verstehe ich nicht ganz
Hallo Leute,

ich hab mal wieder eine Frage die mich beschäftigt.

Und zwar hab ich ein Programm geschrieben welches mir diverse Daten sammelt & speichert(Tages&Monatsweise) die Tagesdatei ausließt und über einen XY-Graph ausgibt. Die Daten werden über Globale Variablen und eine Masskarte(PCI-6221) gesammelt.

Jetzt hab ich festgestellt, dass die CPU-auslastung bei ca. 40% liegt. Leider steigt die Auslastung kontinuierlich an. Sogar soweit, dass die Auslastung scheinbar bei dauerhaft 100% liegt. Was dann irgendwann dazu führt, dass die CPU zu heiß wird und der Computer stoppt. Ich denke eine ausreichende Kühlung ist in der Halle gegeben da dort Luftkühlung vorhanden ist.

Ich hab mal geschaut und habe mir mal die VI Properties->Memory Usage angeschaut und da wird unter dem Punkt Data ca. 53MB angezeigt. Allerdings sind die Messfiles(Tages&Monatsfiles) zusammen nur ca.4.5MB groß.

Nun zu meiner Frage wieso ist das so ?Smile Ich kann mir das so gar nicht erklären. Mir ist bewusst, dass man das Programm wahrscheinlich besser hätte Programmieren können aber ich denke es ist mir unter Zuhilfenahme der Kompetenz dieses Forum ganz gut gelungen.

Es währe super wenn mir jemand helfen könnte. Die CPU&SpeicherLast ein klein wenig zu senken. Oder ist die Auslastung für ein solches Programm normal? Bzw. generell mal erklärt wo ich da eventuelle Fehlprogrammierungen habe.

Ach ja ich hänge das Programm und einen Screenshot mal an.

Ich möchte die Herren über dieses Forum bitten sollte ich das Thema an die falsche stelle geschrieben zu haben verschiebt das Thema doch an die richtige Stelle.

Vielen Dank schon mal.

Grüße aus Mainz
Jürgen


Angehängte Datei(en) Thumbnail(s)
   

8.2 .vi  Heliumdatenerfassung Stand 14-02-2012.vi (Größe: 1,05 MB / Downloads: 185)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
14.02.2012, 09:25 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2012 09:30 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.399
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Das verstehe ich nicht ganz
Hallo Jürgen,

erstmal bitte das VI aufräumen und die ganzen RubeGoldbergs entfernen:
- man muss nicht gleichzeitig ins Terminal und in eine lokale Variable eines Indicators schreiben
- es gibt Funktionen zum Zusammensetzen von Pfaden, man muss das nicht mit Strings erledigen
- es gibt effizientere Stringformatierungsfunktionen, man muss keine ConcatStrings mit +20 Eingängen verwenden (bzw. kann selbst mal ein paar Leerzeichen schreiben, statt extra Konstanten zu verdrahten)

Dann:
Wenn ich ein VI sehe, dass schon über ein 1MB groß ist, weiß ich schon vorher, dass da mit sehr großer Wahrscheinlichkeit ExpressVIs drin sind. ExpressVIs sind zwar "nett", aber nicht immer für lang laufende VIs geeignet! Vor allen Dingen, wie du sie einsetzt:
- zum Aufsplitten von "Signalen", die als Array of Waveforms vorliegen, kann man auch ein einfaches IndexArray verwenden
- zum Berechnen eines gleitenden Mittelwerts gibt es auch Funktionen in der Signalverarbeitungspalette (hier könnte sich ein Speichergrab verstecken, dass du auch gleich noch mehrfach aufrufst/aufmachst)
- zum Zusammensetzen von Plots schaut man in die Kontexthilfe und verwendet BuildArray

Mach bitte alle diese Änderungen und teste dein VI dann noch mal.
Außerdem überlege dir, ob du wirklich dauernd Dateien schreiben und lesen willst, oder ob es nicht vielleicht doch effizienter ist, ein paar Daten im RAM zu halten...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.02.2012, 16:00
Beitrag #3

Kernphysik_Jürgen Offline
LVF-Grünschnabel
*


Beiträge: 38
Registriert seit: Nov 2009

8.20
2009
de

55116
Deutschland
RE: Das verstehe ich nicht ganz
Hallo Gerd,

erstmal vielen Dank für deine schnelle Antwort.

Ich hab versucht die Punkte die du bemängelt hast umzusetzen. Nur sind mir ein paar dinge nicht klar.
Bei dem verändern des Programmes ist keinerlei Funktionalität verloren gegangen nur die größe ist von 1.05MB auf ca 300KB geschrumpft was ich ziemlich krass finde und ich auch nicht gedacht hätte.

1.Das mit den Terminals und den lokalen variablen hab ich jetzt mit Refenzen und Typumwandlung umgesetzt da kann man bestimmt auch noch was ändern oder ?

2./3. Das mit den Pfaden und der Stringformatierung ist mir nicht ganz klar wie Du das genau meinst. Um Ehrlich zu sein.

4./5. Das mit den Express VI's war mir bewusst nur ist mir keine andere aus meiner Sicht sinnvolle Lösung eingefallen. Aber in dem neuen Programm habe ich die Vi's ersetzt. Das mit den gleitenden Mittelwerten hat sich auch erledigt da wir Hardwarefilter in unseren Aufbau einbauen werden.

6. Das mit dem Build array ist mir nicht ganz klar was dabei der vorteil ist. Denn ob ich die Strings zu einem String zusammenführe oder zu einem Array mach aus meinem Wissenstand keinen unterschied. Aus diesem Grund bitte um Aufklärung.

7. Änderungen so gut es ging durchgeführt Smile

8. Ich habe mich für eine sofortige Speicherung entschieden wg der ausfallsicherheit. Denn sollte der Rechner wie am Wochenende geschehen einfach abstürzen können jede menge Messdaten verloren gehen. Das ist zugegeben im "Idle" Modus kein Problem, aber wenn unser Heliumverflüssiger läuft sind die Messdaten schon sehr wichtig.

Ich habe das Programm nun noch mal mit den durchgeführten veränderungen laufen gelassen und habe festgestellt das ist ich ein massives Problem bei der auslese der Täglichen Messdatei habe. Wenn ich das rausnehme braucht das Programm so gut wie keine CPU-Zeit mehr.

Könntest du mir vielleicht noch einen kleinen Denkanstoß geben wie ich das mit der auslese umsetzte und das auch automatisch täglich die neue Messdatei öffnet?

Ich danke Dir schon und nochmal.

Grüße Jürgen


(14.02.2012 09:25 )GerdW schrieb:  Hallo Jürgen,

erstmal bitte das VI aufräumen und die ganzen RubeGoldbergs entfernen:

- man muss nicht gleichzeitig ins Terminal und in eine lokale Variable eines Indicators schreiben
- es gibt Funktionen zum Zusammensetzen von Pfaden, man muss das nicht mit Strings erledigen
- es gibt effizientere Stringformatierungsfunktionen, man muss keine ConcatStrings mit +20 Eingängen verwenden (bzw. kann selbst mal ein >paar Leerzeichen schreiben, statt extra Konstanten zu verdrahten)

Dann:
Wenn ich ein VI sehe, dass schon über ein 1MB groß ist, weiß ich schon vorher, dass da mit sehr großer Wahrscheinlichkeit ExpressVIs drin >sind. ExpressVIs sind zwar "nett", aber nicht immer für lang laufende VIs geeignet! Vor allen Dingen, wie du sie einsetzt:
- zum Aufsplitten von "Signalen", die als Array of Waveforms vorliegen, kann man auch ein einfaches IndexArray verwenden
- zum Berechnen eines gleitenden Mittelwerts gibt es auch Funktionen in der Signalverarbeitungspalette (hier könnte sich ein Speichergrab verstecken, dass du auch gleich noch mehrfach aufrufst/aufmachst)
- zum Zusammensetzen von Plots schaut man in die Kontexthilfe und verwendet BuildArray

Mach bitte alle diese Änderungen und teste dein VI dann noch mal.
Außerdem überlege dir, ob du wirklich dauernd Dateien schreiben und lesen willst, oder ob es nicht vielleicht doch effizienter ist, ein >paar Daten im RAM zu halten...


Angehängte Datei(en)
8.2 .vi  Heliumdatenerfassung Stand 14-02-12 15-19.vi (Größe: 312,56 KB / Downloads: 151)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.02.2012, 16:34 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2012 16:37 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.399
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Das verstehe ich nicht ganz
Hallo Jürgen,

Zitat:größe ist von 1.05MB auf ca 300KB geschrumpft was ich ziemlich krass finde
Ja, so ist das...
Es ginge aber noch immer mit weniger ExpressVI:
   
Auch das "Von DDT nach xxx umwandeln" ist ein ExpressVI, ebenso wie das "Signale bündeln"...
Außerdem: wieso liest du ganze Waveforms vom DAQ, wenn du nur Einzelwerte weiterverwenden willst? Lass dir doch gleich Einzelwerte (pro Kanal) liefern, dann ersparst du dir das Umwandeln der Waveforms!

Zitat:Das mit den Terminals und den lokalen variablen hab ich jetzt mit Refenzen und Typumwandlung umgesetzt
Wo? Ich sehe da keine Referenzen und Typumwandlungen... Ahh, jetzt hab ich's gesehen. Was du da machst, ist totaler Blödsinn: du holst dir die Referenz auf ein Objekt und wandelst diese in eine DBL-Zahl um... Du bekommst du alles mögliche heraus, aber garantiert nicht den aktuellen Wert. An dieser Stelle darfst du (vorerst) weiter mit lokalen Variablen arbeiten. Was ich bemängelt hatte, war das parallele Schreiben von Werten ins Terminal und in eine lokale Variable des gleichen Indicators in der mittleren Schleife...

Zitat:Denn ob ich die Strings zu einem String zusammenführe oder zu einem Array
Bei den Strings hatte ich eher an FormatIntoString gedacht. Das BuildArray kann man anstelle des "Signale bündeln" verwenden...

Noch mehr Vorschläge:
- Plot kann man auch in einer Schleife sichtbar schalten (wenn man die Bits vorher mittels BuildArray zusammenfasst):
   
- Bei IndexArray muss nicht unbedingt die ganzen Indices mit Konstanten verdrahten, das zählt selbständig von 0 an aufwärts...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.02.2012, 19:11
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Das verstehe ich nicht ganz
Ein hervorragendes Tool bei Problemen mit Speicherverbrauch ist der Sysinternals Process Explorer.
Besonders liebe ich hierbei die Möglichkeit, zu sehen, ob Handles hochlaufen, was immer auf nicht geschlossene Referenzen deutet.

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!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.02.2012, 22:42
Beitrag #6

schrotti Offline
LVF-Freak
****


Beiträge: 842
Registriert seit: Feb 2008

2009 - 2011
2006
kA

70180
Deutschland
RE: Das verstehe ich nicht ganz
Die Skalierung könntest du auch vom DAQmx erledigen lassen.


Angehängte Datei(en) Thumbnail(s)
       

Gruß Julius
Empfehlungen: expressionflow, LavaG , mooregoodideas, OpenG, JKI Blog
Tipp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
15.02.2012, 10:01
Beitrag #7

Kernphysik_Jürgen Offline
LVF-Grünschnabel
*


Beiträge: 38
Registriert seit: Nov 2009

8.20
2009
de

55116
Deutschland
RE: Das verstehe ich nicht ganz
Hallo Jens Hallo schrotti,

@Jens danke für den hinweis werde ich mal versuchen und schauen was bei raus kommt.
Meine private Erfahrung mit dem Prozess Explorer von Sysinternals ist eher bescheiden, denn ich hatte ihn installiert und dieses Tool hat es geschafft ein Programm komplett lahm zu legen sprich es konnte nicht mehr gestartet werden. Leider kann ich mich gerade nicht mehr daran erinnern welches Programm das war. Allerdings muss ich sagen der AHA-Effekt war gewaltig Smile

Aber nichtsdestotrotz werde ich mal damit schauen.

@Schrotti auch dir ein dank für den hinweis hab die Skalierungen auch schon erstellt und werde Sie wenn ich die "neue" Version meines Programmes online bringe auch gerade umstellen.

Grüße Jürgen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.02.2012, 10:30
Beitrag #8

Kernphysik_Jürgen Offline
LVF-Grünschnabel
*


Beiträge: 38
Registriert seit: Nov 2009

8.20
2009
de

55116
Deutschland
RE: Das verstehe ich nicht ganz
Hallo Gerd,

ich danke dir immer und immer wieder für deine schnelle Hilfe. Mittlerweile ist ist das Programm noch weiter geschrumpft und zwar auf ca. 190KB. Finde ich einfach klasse und ein wenig erschreckend wie groß diese VI's doch sind.

Ich hab auch die anderen ExpressVI's ausgetauscht und die Funktion ist natürlich noch gegeben. Und das Programm läuft nun mit ca. 10%CPULast bei ca 4.5MB Messdaten.

Außerdem hab ich das einlesen der Tagesmessdatei umgestellt. Und zwar so, dass die Datei am anfang des Programmstarts geladen wird, wenn sie vorhanden ist. Und nach 5 schleifendurchläufen/sec wird auf die interne Datenquelle umgestellt. Dazu habe ich mir ein Array mit Zeitstempel und Messsignalen als dbl's mit bundel und build array erstellt. Das umschalten klappt einwandfrei. Und es kommen auch die Datensätze(Zeit/Signal) an nur scheint es ein Problem mit der Interpretation des Zeitstempels vom XY-Graph zu geben. Irgend wie macht der Graph aus dem richtigen Zeitstempel (über eine Probe abgeglichen) einen zeitraum von 1999 - 2033 oder so ähnlich. Ich hab schon versucht diverse Kombinationen versucht, nur offensichtlich nicht die richtige Sad.

Ich wäre für einen kleinen Hinweis wie ich das Problem gelöst bekomme sehr dankbar.

Ab und an hab ich das Gefühl, dass ich das Programm verstanden hab und dann kommt wieder so was dazu und ich sage zu mir zum Glück kann ich Labview starten Smile

Vielen Dank schon mal.

Weitere Grüße aus Mainz
Jürgen


Angehängte Datei(en)
8.2 .vi  Heliumdatenerfassung Stand 15-02-12 10-27.vi (Größe: 188,83 KB / Downloads: 154)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.02.2012, 21:24
Beitrag #9

schrotti Offline
LVF-Freak
****


Beiträge: 842
Registriert seit: Feb 2008

2009 - 2011
2006
kA

70180
Deutschland
RE: Das verstehe ich nicht ganz
Die Skalierung hat nicht gepasst. Ansonsten habe ich noch ein paar optische Verschönerungen vorgenommen, die du auch auf den XY-Graph übertragen kannst. Einfach Plotlegende und Zahlenanzeige sichtbar machen. Da ersparst du dir ein paar extra Anzeigen.


Angehängte Datei(en) Thumbnail(s)
   

8.2 .vi  Heliumdatenerfassung Stand 15-02-12 10-27_schrotti.vi (Größe: 147,54 KB / Downloads: 147)

Gruß Julius
Empfehlungen: expressionflow, LavaG , mooregoodideas, OpenG, JKI Blog
Tipp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.02.2012, 08:00
Beitrag #10

Kernphysik_Jürgen Offline
LVF-Grünschnabel
*


Beiträge: 38
Registriert seit: Nov 2009

8.20
2009
de

55116
Deutschland
RE: Das verstehe ich nicht ganz
Hallo Julius,

vielen Dank für deine Antwort und Hilfe.

Das mit der Skalierung müsstest du mir bitte mal erklären das hab ich nicht verstanden. Meinst du die Skalierung des XY-Graphen, des Tagesfiles oder der Internen Datenquelle? Ich hab das Programm gerade mal laufen lassen und habe festgestellt, dass es so leider nicht Funktioniert. Also es passiert das gleiche wie mit der hoch geladenen Version. Tagesfile wird geladen und korrekt angezeigt, dann nach 5Schleifendurchgängen/sec wird die Anzeige geleert und die Zeitachse wird auf den Bereich 8.12.1999 bis 02.12.2023 gestellt und es ist dann auch nichts weiter zu sehen im Graph Sad. Oder verstehe ich deinen ersten Satz mit "Die Skalierung hat nicht gepasst." falsch und du hast mir damit einen Hinweis gegeben, wenn ja musst du mir den kompletten sprichwörtlichen Gartenzaun über den Kopf ziehen Smile*hahaha. Denn was ich dagegen machen kann ist mir nicht klar.

Wieso du für die Casestruktur ein Schieberegister eingebaut hast ist mir dank deines Hinweises "es langt doch, die Ploteigenschaft einmal zu setzen." klar. Macht natürlich Sinn dem Programm einmal zusagen "Jetzt bitte die Aktiv-Ploteigenschaften aktivieren" und das nicht in jedem Schleifendurchlauf auf neue mitzuteilen.

Jetzt wird mir auch klar was Gerd gemeint hat mit Werte in Terminals und lokale Variablen(denke ich) nur leider kann ich die Zahlenwerte für den Graph nicht aktivieren. Ich dachte, dass ich zu "blöd" bin aber mit deinem angehängten Bild kann das gar nicht schief gehen. Deswegen hab ich mal schnell geschaut und gefunden, dass es die Zahlenanzeige nur ein Signalverlaufsdiagramm gibt. Das hier "Zahlenanzeige—Dient zur Anzeige des Zahlenwerts des Diagramms. Diese Option gilt nur für Signalverlaufsdiagramme." stammt direkt von NI. Also muss ich das leider doch so machen wie ich es mache. Oder gibt es einen Trick wie man LV überlisten kann?

Ich danke Dir nochmals. Wenn du mir noch einen kleinen Hinweis geben könntest wie ich das mit dem Einlesen des Messfiles und der Umschaltung auf interne Daten bewerkstelligen kann wäre ich dir sehr dankbar.

Dann wünsche ich noch einen schönen Tag.

Grüße aus Mainz
Jürgen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Cluster "strict type def" - funktioniert nicht ganz gottfried 3 4.216 06.06.2011 12:33
Letzter Beitrag: gottfried
  Ganz simpler Linearregler als Sub-VI will nicht :-( Cruzaderz 10 7.974 26.06.2009 11:55
Letzter Beitrag: Cruzaderz
  ich verstehe eventstrukturen nicht.... sr.herms 5 4.238 18.02.2008 22:23
Letzter Beitrag: sr.herms

Gehe zu: