LabVIEWForum.de
Koordinaten auslesen -> in Array schreiben --> RAM Voll - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Koordinaten auslesen -> in Array schreiben --> RAM Voll (/Thread-Koordinaten-auslesen-in-Array-schreiben-RAM-Voll)

Seiten: 1 2


Koordinaten auslesen -> in Array schreiben --> RAM Voll - man1acc - 07.11.2012 11:58

Hallo zusammen,

im Rahmen eines kleinen Projektes soll ich ein Labviewprogramm schreiben das folgendes tut (es tut auch was es soll, aber!)

Ich habe ein NC Programm einer 5 Achs Fräsmaschine, der Code sieht prinzipiell so aus:
"N299 ;FFO
N300 X3 Y5 Z6 A4 C5
N301 X3 Y5 Z6 A4 C5
N302 X3 Y5 Z6 A4 C5
N303 X3 Y5 Z6 A4 C5
N304 ;FF1"

Ich habe die FF0/FF1 als eine Art Trigger Funktion eingefürt. Über eine While Schleife wird zunächst jede Zeile des NC Programms (=String) eingelesen und auf meine Triggerwerte (FF0 = Start) untersucht (FFO ist hexadezimal für 4080, durch einen Vergleich sucht er die Zahl). Findet er den Wert wird die Zeilennummer gespeichert. Analog für die Stop Funktion FF1.
Das ganze ist notwendig da die 5Achs Fräse im NC Programm ca. 120.000 Zeilen hat und ich nur Sätzeweise die Koordinaten brauche (Satzlänge bis zu 20k Werten).
Hat er Start/Stop Zeile gefunden, wird der String entsprechend gekürzt. Aus diesem Suche ich mir dann die Koordinaten raus und speichere diese in einem Array (1 Array für X, 1 Array für Y). Anschließend kommen die Arrays dann in einen 3D graph und dann sieht man die Bahnen der 5-Achs Bearbeitung (wofür ich die brauche ist egal Smile ).

Bis ca. 5000 Zeilen NC Programm liest er alles brav aus und zeigt mir alles an. Leider können halt auch 20.000 Zeilen (also 3 Arrays mit jeweils 20k Zeilen) kommen, da jeder NC Satz in der Länge variabel ist. Daher krieg ich bei zu langen Sätzen irgendwann die Meldung das mein RAM voll ist und das Programm bricht ab.

Gibt es eine Möglichkeit das Problem zu umgehen? Leider kann/darf ich das Programm nicht hier hochladen da die hier in der Firma wo das ein Studi-Projekt ist sehr hohe Sicherheitsanforderungen gelten.
Bei Unklarheiten versuch ich das ganze schnellstmöglich zu klären.

Besten Dank & Gruß
Bastian


RE: Koordinaten auslesen -> in Array schreiben --> RAM Voll - GerdW - 07.11.2012 12:04

Hallo Bastian,

das Problem umgeht man, indem man nicht zu viele Datenkopien anlegt...
Schon mal nach "labview memory handling" gegoogelt?

Da du dein VI nicht zeigen darfst (was auch immer high-security sein soll bei einer Routine zum Einlesen und Auswerten von Daten) musst du selbst weiterschauen...


RE: Koordinaten auslesen -> in Array schreiben --> RAM Voll - man1acc - 07.11.2012 12:11

Danke schonmal dafür, ich kann halt leider nichtmal Screenshots auf den Rechnern erzeugen, geschweige denn was hochladen. Faktisch geht es nur darum das mir der Rechner "beim befüllen der Arrays" sogesehen überläuft.
Ich schau mal ob ich zumindest irgendwie einen Screenshot hier reingeschleust krieg, weil so komm ich nicht weiter Sad

So mein Arbeitskollege hatte dann doch mehr Internetrechte als ich, sodass er zumindest einen Screenshot machen konnte, siehe Anhang. Ich hoffe das Programm ist jetzt nicht zu fehlerhaft, seid bitte gnädig Smile

Anmerkung: Die Koordinaten dort sind in einem anderen Format (ohne Werkzeugkompensation, daher ist nicht die Form: X4Y5 sondern X4+(Verrückte Formel)Y5+(...).


RE: Koordinaten auslesen -> in Array schreiben --> RAM Voll - jg - 07.11.2012 12:16

Was du falsch machst, ist auf Grund deiner Beschreibung schwer zu sagen. Die pure Datenmenge alleine kann es nicht sein. 120.000 Zeilen a ca. 20 Zeichen, da reden wir über 2 MegaByte Daten. Dann schreibst du noch was von 3 Zahlen-Arrays (ich hoffe, die sind alle 1-dimensional) a 20.000 Element. Da sind wir selbst bei Double gerade bei 0,5 MB Speicherbedarf.

Das kann es nicht sein.

Gruß, Jens


RE: Koordinaten auslesen -> in Array schreiben --> RAM Voll - man1acc - 07.11.2012 12:21

Das ist schonmal gut zu wissen, ich hoffe der Screenshot hilft. Das ich einen Fehler drin hab, hab ich mir gedacht. Die Zahlen sind jeweils z.B. 123,048375 (also glaub 5 oder 6 Kommastellen), aber bei 4GB RAM muss der Fehler woanders liegen Sad

Was mir auch sauer aufschlägt, die Arrays sind ja 1D in der Schleife und dann 2D beim rausziehen. Wenn ich die Indizierung dann rausnehme ist meine 3D Darstellung für die Katz, sieht eher nach einem riesen Durcheinander aus...


RE: Koordinaten auslesen -> in Array schreiben --> RAM Voll - jg - 07.11.2012 12:32

Hilfe! Wink Was machst du denn da?

Du schneidest doch immer nur 1 Zahl (X,Y,Z) aus dem String aus, wieso wandelst du das in ein 1D-Array?
Die Feedback-Node sind uninitialisert, merken sich also alles aus dem vorherigen Durchlauf des VIs.

Wenn ich es auf die Schnelle richtig interpretiere, erreichst du (vereinfacht dargestellt) hiermit dasselbe:
[attachment=42140]

Gruß, Jens


RE: Koordinaten auslesen -> in Array schreiben --> RAM Voll - man1acc - 07.11.2012 12:39

Tut mir Leid das ich durch Unwissenheit/Dummheit glänze Smile Prinzipiell funktioniert das ja.
Das Problem: Bei mir kommt aus der Funktion "Dezimal-String nach Zahl" (das meinst du doch in deinem Screenshot, oder?) eine Zahl und kein Array raus (wie bei dir...)

Edit: Du meinst bestimmt "Bruch/Exponentioal-String nach Zahl" oder?
Mea Culpa

Edit2: soweit scheint es zu klappen, die Arrays werden korrekt gelesen. ABER: Mein 3D Plot sieht einfach nur grauselig aus (als ob ich wie in meiner alten Lösung die Indizierung am Durchgang der Schleife aus den Arrays entferne Sad Sogesehen passen X,Y,Z Koordinatenpärchen nicht)

Edit3: es liegt glaub ich daran das er die - (Minuszeichen) nicht liest und ich nur pos. Werte in den Arrays hab)


RE: Koordinaten auslesen -> in Array schreiben --> RAM Voll - jg - 07.11.2012 12:55

(07.11.2012 12:39 )man1acc schrieb:  Tut mir Leid das ich durch Unwissenheit/Dummheit glänze Smile Prinzipiell funktioniert das ja.
Das Problem: Bei mir kommt aus der Funktion "Dezimal-String nach Zahl" (das meinst du doch in deinem Screenshot, oder?) eine Zahl und kein Array raus (wie bei dir...)
Genau, und das ist die Lösung deines Problems. Innerhalb der Schleife gehst du zeilenweise durch deinen String und schneidest doch immer nur den X/Y/Z-Zahlenanteil aus. Das ist jeweils 1 Zahl (kein Array). Das wandle ich also in 1 Zahl und erstelle per AutoIndexing am Ausgang der For-Schleife die 3 1D-Arrays.

Deine Arrays am Schleifenausgang sind bis zu 20000x20000 Elemente große 2D-Arrays, mit einem Haufen unnötigen und doppeltem Datenmüll.
(07.11.2012 12:39 )man1acc schrieb:  Edit: Du meinst bestimmt "Bruch/Exponentioal-String nach Zahl" oder?
Genau.

Gruß, Jens

EDIT:
(07.11.2012 12:39 )man1acc schrieb:  Edit3: es liegt glaub ich daran das er die - (Minuszeichen) nicht liest und ich nur pos. Werte in den Arrays hab)
Dann solltest du vielleicht einmal einen "wahren" Ausschnitt aus deiner Datei posten, nicht einen Prinzip-Ausschnitt.


RE: Koordinaten auslesen -> in Array schreiben --> RAM Voll - man1acc - 07.11.2012 13:00

So, mehr Tipp ich von dem Kack aber nicht ab:

N129X=4.63871+(.718005*$TC_DP15[$P_TOOLNO,$P_TOOL])Y=166.98004+(.011404*$TC_DP15[$P_TOOLNO,$P_TOOL])Z=292.58878+(.695944*$TC_DP15[$P_TOOLNO,$P_TOOL])A-87.71432C-4.65516
N130X=4.45164+(.712857*$TC_DP15[$P_TOOLNO,$P_TOOL])Y=166.97765+(.015121*$TC_DP15[$P_TOOLNO,$P_TOOL])Z=292.79355+(.701146*$TC_DP15[$P_TOOLNO,$P_TOOL])A-87.7216C-4.41556

Das ist aber nur ein Test NC Programm, welches noch nicht berechnet wurde, ein fertiges NC Programm hat den Teil von "+(.....)" nicht mehr, sodass die Koordinaten direkt aneinander hängen...


RE: Koordinaten auslesen -> in Array schreiben --> RAM Voll - man1acc - 07.11.2012 13:43

Leider geht Edit nicht mehr:

Ein Problem ist auf jeden Fall, dass mein NC Programm auch teilweise ungeänderte Koordinaten enthält. Also z.b.

N1 X4Y6Z6
N2 X4Z7

Also Y gleich bleibt. Da die Suche im String Funktion dann eben eine Null ausgibt, schreibt er eine Null in den Array und meine Darstellung wird Käse Smile

Ich schreibe mir das jetzt so um, dass Zeile N und und N+1 eingelesen werden und der N+1 mit N abspeichert. Wenn dann in N ungleich 0 und N+1 0 ist soll er dann z.B. das Y aus der Zeile N in N+1 übernehmen...oder so...wie genau ich dsa mache weiß ich noch nicht, aber ich glaub das ist der entscheidende Fehler..