Koordinaten auslesen -> in Array schreiben --> RAM Voll
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!
Koordinaten auslesen -> in Array schreiben --> RAM Voll
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 ).
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.
RE: Koordinaten auslesen -> in Array schreiben --> RAM Voll
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
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
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
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
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
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!
RE: Koordinaten auslesen -> in Array schreiben --> RAM Voll
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
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
Hilfe! 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:
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!
RE: Koordinaten auslesen -> in Array schreiben --> RAM Voll
Tut mir Leid das ich durch Unwissenheit/Dummheit glänze 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 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)
07.11.2012, 12:55 (Dieser Beitrag wurde zuletzt bearbeitet: 07.11.2012 12:57 von jg.)
RE: Koordinaten auslesen -> in Array schreiben --> RAM Voll
(07.11.2012 12:39 )man1acc schrieb: Tut mir Leid das ich durch Unwissenheit/Dummheit glänze 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.
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!
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
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
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..