LabVIEWForum.de
Initialisieren nach abspeichern in Excel - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: Initialisieren nach abspeichern in Excel (/Thread-Initialisieren-nach-abspeichern-in-Excel)

Seiten: 1 2


Initialisieren nach abspeichern in Excel - JackBlack - 12.02.2011 14:35

Hallo zusammen


Da Excel ein sehr prozessorlastiges schreiben mit sich bring, sind wir zu dem Entschluss gekommen entweder in Excel zu schreiben oder
Daten aufzunehmen bzw. auszuwerten (entspricht auch eher dem EVA Prinzip). In dieser Zeit wird die Anlage vermutlich ausgeschalten.

Nun haben wir unser ne begonnenes Programm mal im Anhang hochgeladen. Die Funktionen der einzelnen Programmteile sind kommentiert, so das
ich im Beitrag auf eine große Erklärung verzichte.

Kurz und knapp: Das Programm "befüllt" ein Array. Wenn dieses gefüllt ist kann mittels "Speichern" das Array komplett in Excel
geschrieben werden.

Nachdem alle Werte in Excel geschrieben sind wollen wir das Array wieder neu Initialisiert
ohne aber dabei die While Schleife zu verlassen.

Als Initialisierung haben wir uns einen String (OK) vorgestellt.


Wir haben uns mit der "Array Initialisieren" Funktion auseinander gesetzt, wissen aber nicht wie wir diese für unseren Zweck verwenden
können.

Falles jemand uns einen Tipp geben könnte dies zu realisieren oder uns auf einem Fehler im Code aufmerksam macht wären wir sehr dankbar!


MfG JackBlack


RE: Initialisieren nach abspeichern in Excel - Y-P - 13.02.2011 07:50

Schleift einfach Euer Array durch die Case-Struktur, in der Ihr speichert, mit durch und setzt es da in dem Speicher-Case, nachdem Ihr in Excel gespeichert habt, per leerer Konstante zurück.

Gruß Markus


RE: Initialisieren nach abspeichern in Excel - JackBlack - 15.02.2011 19:56

Hallo zusammen

Wir haben nun mal eine Lösung gefunden die uns zufriedenstellt, ich hoffe es passt so weit alles.

Hab se wieder mit hochgeladen.

Wenn jemand noch was findet was wir verbessern müssen, wir sind für jede Anregung dankbar

MfG JackBlack


RE: Initialisieren nach abspeichern in Excel - GerdW - 15.02.2011 20:17

Hallo Jack,

- die Sequenzstruktur ist unnötig und könnte entfernt werden
- das RS-FF ist unnötig und könnte entfernt werden (der Case gibt nach dem Durchlauf immer den Selektorwert aus, dieser muss also nicht durchgeführt werden!)
- die diversen Zähler verwenden momentan DBL, sollten aber auch mit I32 (vielleicht sogar besser) funktionieren
- ArraySize und nachfolgende IndexArray sind unnötig, da ihr die FOR-Schleife sowieso per AutoIndexing abarbeitet
- von-rechts-nach-links-Verdrahtung äh von-links-nach-rechts natürlich ist wünschenswert... (wozu gibt es die Aufräumfunktion?)

@Forum-Admins: Wo ist das Strike-Flag geblieben?


RE: Initialisieren nach abspeichern in Excel - jg - 15.02.2011 20:26

(15.02.2011 20:17 )GerdW schrieb:  - von-rechts-nach-links-Verdrahtung ist wünschenswert... (wozu gibt es die Aufräumfunktion?)
Also ich versuche ja von links nach rechts zu verdrahten Wink


RE: Initialisieren nach abspeichern in Excel - JackBlack - 22.02.2011 19:55

Hallo zusammen,

Danke für die Tipps für die Array in Excel Abspeicherung.


Zu einem neuen Problem: Bei unserem Programm wird der erste Datensatz im Array
nicht erfasst (siehe Spalte B in Excel kein fortlaufend Zählerstand).

Woran könnte dies liegen?

Sind für jede Hilfe Dankbar!!

MFG JackBlack


RE: Initialisieren nach abspeichern in Excel - JackBlack - 02.03.2011 17:36

Hallo zusammen,

Wärend des Abspeicherungsprozesses arbeitet das Programm die Befehle in der für die Abspeicherung zuständigen For Schleife ab.

Parallel hierzu bleibt die Anlage im Betrieb. Die Schaltspielzahlen werden nun nicht mehr richtig erfasst, da wir in der Schleife sind.

Somit beginnen wir den nächsten Erfassungszyklus zwar mit einen fortlaufenden Zählerstand, dieser ist aber nicht gleich dem realen Schaltspielzahl.

Können wir wärend des Abspeicherprozesses (Ablauf der For-Schleife) einen Zähler parallel zählen lassen??

MFG JackBlack


RE: Initialisieren nach abspeichern in Excel - GerdW - 02.03.2011 20:49

Hi JackBlack,

Zitat:Können wir wärend des Abspeicherprozesses (Ablauf der For-Schleife) einen Zähler parallel zählen lassen??
Ja, natürlich...

Aber nicht mit deiner jetzigen Programmstruktur. Schau dir doch mal in den Examples die Beispiele zu Producer-Consumer-Strukturen an. Damit kann man eben die Producer und Consumer in jeweils eigene Schleifen packen, die dann (nahezu) unabhängig voneinander ablaufen! Dann kann man auch einen Zähler parallel laufen lassen...

P.S.: Dein letztes Attachment ist leider nicht lauffähig, es fehlt mindestens ein subVI (SetCellValue). Von daher kann man deine Fehlerbeschreibung nicht so recht nachvollziehen...


RE: Initialisieren nach abspeichern in Excel - JackBlack - 03.03.2011 21:54

Hallo Zusammen

erst mal sorry dass wir das Sub vi vergessen haben. Hier haben wir nochmals ein funktionierendes Vi hochgeladen.
Das Problem mit dem fehlerhaften Wert besteht leider immer noch.

das von GerdW genannt vi haben wir nicht im Example Finder gefunden. (Wird es anders bezeichnet?)

im zweite vi das wir hochgeladen haben befindet sich nun eine Duplizierung des "1 Taster 2 stufen" auf 8 Taster mit 2 stufen. Da wir einen Testlauf mit unserem Programm starten wollte um zu sehen wie weit wir noch vom Ziel entfernt sind. Dazu muss ich gleich folgendes sagen, die Darstellung des Codes ist nicht sonderlich gut, dies bitte ich zu entschuldigen. würde mich freuen einen tipp zu bekommen dies übersichtlicher zu gestalten.

nun zur eigentlichen frage:

wenn die Array Größe bei allen erstellten Arrays größer wird als 50 dann verlangsamt sich das Programm enorm und wir bekommen keine vernünftigen Messwerte mehr.

das habe wir erst richtig bemerkt als wir das 8 Taster 2 stufen vi mit der Simulation getestet haben.

die CPU Auslastung steigt auch bis auf 80% an. wir gehen davon aus das LabVIEW bei dieser Auslastung quasi versucht durch die Verlangsamung des Programmablaufes, diese Einschränkung zu kompensieren.

wenn uns jemand sagen kann ob wir richtig mit der Vermutung liegen, und wie wir unser Vorhaben trotzdem umsetzten können, dem sind wir zu großem Dank verpflichtet!

MfG JackBlack


RE: Initialisieren nach abspeichern in Excel - GerdW - 03.03.2011 22:26

Hallo JackBlack,

Zitat:das LabVIEW bei dieser Auslastung quasi versucht durch die Verlangsamung des Programmablaufes, diese Einschränkung zu kompensieren. ... wenn uns jemand sagen kann ob wir richtig mit der Vermutung liegen
Wie bitte? Das glaubt ihr doch wohl hoffentlich nicht wirklich? Ihr habt da etwas mit Ursache und Wirkung verwechselt. Vielleicht mal wieder Matrix2 schauen Smile
LabVIEW kompensiert da überhaupt nichts: wenn euer Programm langsam läuft, dann wegen ineffizienter Programmierung!

Producer-Consumer:[attachment=32596]

Zitat:verlangsamt sich das Programm enorm
Was erwartet ihr bei 8 parallel laufenden Prozessen, die man aufgrund der BD-Größe nicht wirklich debuggen kann?
Schon mal gehört, dass man gleiche Abläufe in subVI packen kann und in einer Schleife aufrufen kann?
Etliche eurer "Puffer-Zähler" ließen sich mit einem Q&R wesentlich effizienter erreichen...
Und ständig in 8 verschiedene Excel-Sheets zu schreiben wird auch nicht zu "effizientem" (und "schnellstmöglichen") Programmablauf beitragen! (Noch dazu, wenn man wirklich jedes einzelne Arrayelement einzeln zu Excel überträgt...)