LabVIEWForum.de - Optimierung der Rechenleistung eines SubVi

LabVIEWForum.de

Normale Version: Optimierung der Rechenleistung eines SubVi
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo liebe Community,

ich bin Student und arbeite gerade mit LV 2011. Dieses Forum hat mir schon viel weitergeholfen, nur komme ich jetzt nur durch eure Foreneinträge nicht mehr weiter.

Im Zuge meiner Bachelorarbeit, baue ich eine Testanlage um. Diese Testanlage ist für ein Fördersystem. Auf diesem Fördersystem fahren Shuttle. Sie besteht aus verschiedenen Messeinrichtung und sammelt Werte über Zeitverhalten, Positioniergenauigkeit und Geschwindigkeitsdaten, der Shuttles, ein. Diese Messdaten werden von der Software SPS der Firma Beckhoff erkannt (bzw. vom den Buskopplerklemmen für die die es ganz genau nehmen) und an Labview übergeben. Nun schreibt Labview über das main.vi die Messwerte in ein Datenarray. Wenn der Shuttle nun eine gewisse Rundenzahl erreicht hat werden diese Messwerte (auf grundlage der Report Generation Toolkit for Office) in eine Excel- Tabelle geschrieben. In der Excel- Tabelle werden dann die Durchschnittswerte berechnet. Wie oft ein Fehler aufgetreten ist usw. (Sry muss es so beschreiben da meine Arbeit erst nach einreichtung veröffentlicht wird)

Jetzt zu meiner eigendlichen Frage:
Da mein Programm jetzt mittlerweile Mörder groß ist, bin ich gerade dabei die Laufzeitoptimierung und somit die Rechenleistung zu optimieren dass ich noch mehr Funktionen verarbeiten kann bzw. um die Tests (bzw. deren Verarbeitung möglichst schnell durchzuführen). Eine der Aufgabenstellungen ist nun die Auswertung die in Excel gemacht werden in LabView umzusetzen. Problem dabei ist nun nicht die Umsetzung, sondern die Laufzeit des Sub.vi. Da hier die Anlage eben auf die Verabeitung der Werte wartet und somit für die Zeit der Abarbeitung zum Stillstand kommt. Des is net so guat. Sprich die Abarbeitung soll so schnell wie möglich sein.

Parameter:
Input:
Datenarray maximal 500 Messwerten

Output:
Berechnung von verschiedenen Parametern und Ausgabe dessen

Momentan funktioniert die Berechnung nur wenn die Schleifenbedingung >=1000ms ist. Sonst geht er ein und berechnet die letzten Werte gar nicht mehr.

Ich bitte um eure Hilfe.

Mfg DuffiDuck

P.S.: 1) Ich habe es mal als Version 9 gespeichert andere Formate können auch hochgeladen werden
2) Ich hoffe das ist nicht das falsche unterforum und wenn ja > ich hab kein anderes Gefunden
3) JAJA flat sequenz
Hi,
für was sind die ganzen Schieberegister in den FOR-Schleifen, wenn du doch nie den Inhalt änderst?

Für die ganzen Variablen innerhalb der Schleifen könntest du allerdings SR verwenden, und keine lok. Variablen!

Wartezeiten in FOR-Schleifen...wozu?

Die ständigen > / < Verlgeiche...warum hast du da kein SubVI daraus gemacht?

> als X UND < als Y....warum nimmst du da nicht "In range"

Nicht laufzeitrelevant:
Warum verballerst du so unendlich viel Platz? Warum ziehst du nicht mal gerade Linien? Räume mal die versteckten Drähte auf...

Gruß
Achim
hallo achim,

schieberegister stimmt (ich bin schon ganz Irre vom Programmieren),

SR ist nehm ich an Schieberegister das ich die Werte beim nächsten Durchlauf einfach wieder bereitstelle.

Das mit der Wartezeit im For muss ich ausprobieren morgen (hätte mir gedacht das er den ganzen Speicher vollsaut und dann nix mehr geht??)

Sub.vi ähhmm ja keine Ahnung, Extra Unterprogrammaufruf jedes mal wird wahrscheinlich auch nicht das gelbe von Ei sein (aber ich probiers aus danke)

cool es gibt eine inrange funktion!

Platz was?? Soll ich auf den Cleanup Diagrammbutton klicken? ;-)

Danke muss ich gleich mal ein bisschen Rumprogrammieren!

mfg duffi
Achim hat ja schon einiges erwähnt.
snuz danke,

ich mach mich mal ran! Bis morgen!

mfg duffi
Um mal was aufzugreifen, was du oben gesagt hast:

Warum hälst du das Messprogramm für die Auswertung an?

Ich weis zwar nicht wie Zeitkritisch und am Limit der Rechnerresourcen das Messprogramm schon ist, aber an sich sollte man die Auswertung doch nebenläufig durchführen können (während der nächste Messzyklus läuft). Rein programmatisch ist das kein Problem - käme im Zweifel nur auf deine Hardware an.
So, deine ersten 3 Sequenz-Schritte lassen sich (wenn ich bei den Array-Indices nicht durcheinander gekommen bin), auf das hier eindampfen:
[attachment=36202]
Bist du eigentlich sicher, dass du ab Sequenz 4 den richtigen Index für die Auswahl der Seite aus deinem 3D-Array (Hilfe, ein 3D-Array!!) weitergeführt hast?
Gruß, Jens
Und wenn mir bei der ganzen Indizierung und Umbauerei keine Fehler unterlaufen sind, dann sollte das folgende VI dasselbe Ergebnis liefern:
[attachment=36204]
Gruß, Jens
Hallo,

@ Kiesch - Wenn TwinCat einen Wert erhalten hat setz es mit AdsOcx eine globale Variable um dadurch ein, in einer Schleife befindlichen, CASE zu aktivieren und verarbeitet den Messwert in einen Sub.vi. Es gibt nun 4 verschiedene Test die das so machen. nur beim letzten Test wird entschieden ob die Rundenzahl errreicht wird. Dann wird ein Excel erstellt und die Daten wieder gelöscht. Wenn ich nun statt case das sub.vi mit der globalen (AdsOcx) Variable beaufschlage stürzt das Programm ab (Fehler ist wegen der AdsOcx erzeugung da auf gleiche Ressourcen zugegriffen wird bzw. könnte die Ressource im gleichen Moment gelöscht werden) Ist so zu sagen so aufgebaut das auf keinen Fall Ressourcen verloren gehen

@ Jens- Danke erstmal hab es bereits durchgesehen und du hast recht (zwecks Index). Sehe funktion hier zum ersten mal. Die Schleife is so zu sagen, eine vergewaltigte CASE Funktion? hab nich gewusst das man >< ein Array reinstopfen kann. Erleichtert das ziemlich allgemein.

Danke an alle erstmal. Werde es morgen direkt auf der Testanlage überprüfen und die Ergebnisse natürlich hier Posten.

Mfg duffi
(29.09.2011 06:41 )DuffiDuck schrieb: [ -> ]@ Jens- Danke erstmal hab es bereits durchgesehen und du hast recht (zwecks Index). Sehe funktion hier zum ersten mal.
Wenn die Index-Auswahl nicht stimmte, dann also so:
[attachment=36206]
(29.09.2011 06:41 )DuffiDuck schrieb: [ -> ]Die Schleife is so zu sagen, eine vergewaltigte CASE Funktion?
Meinst du die For-Loop, die ich eingebaut habe, für deine AGT/PGT Auswertung? Naja, eher so: da 2x dieselbe Auswerteroutine gefahren wird, schreit das nach einer Schleife.
Man könnte aus der xGT-Auswertung auch ein SubVI bauen, und dann 2x aufrufen. Danach könnte man auf einfache Weise auch noch den Rest der Sequenzstruktur löschen und alle Ergebnisse per Draht weiterführen.
(29.09.2011 06:41 )DuffiDuck schrieb: [ -> ]hab nich gewusst das man >< ein Array reinstopfen kann. Erleichtert das ziemlich allgemein.
Wie, 4 Jahre LV-Erfahrung, und du weißt nicht, dass viele LV-Funktionen auch auf Arrays und/Cluster anwendbar sind?

Gruß, Jens
Seiten: 1 2
Referenz-URLs