Lazy List

  • hallo zusammen,


    Weiß zufällig jemand ob es für die KRL auch so etwas gibt wie eine Lazy List. Zur erklärung: z.B. in der Sprache Python gibt es eine Liste deren Elemente nur in den Speicher geholt werden wenn sie benötigt werden. Ich habe bei der KRC das Problem dass, a) die Anzahl der Elemente in der Liste auf 680 beschränkt ist, und b) ist sowieso nicht wüsste was er mit der Liste anstellt. Denn unter Umständen lade müsse ich mehrer 10.000 Werte in die Liste speichern.


    Gruß
    Lambert

  • Schritt für Schritt zum Roboterprofi!
  • Ähem.


    Von was für Werten redest Du?


    Es gibt eine Möglichkeit, Variablenwerte von dem einen in das andere Modul zu importieren. Aber 10.000 Einträge - das klingt mir sehr unaufgeräumt. Was soll mit den Werten denn passieren? Vielleicht fällt ja jemandem was ein.


    Gruß Robodoc

    Weniger als 100% wird nicht akzeptiert :)

  • Naja. Das Problem ist das ich so viele Stützstellen brauche um die genauigkeit hinzubekommen. Ich bekomme dabei die Werte aus einer Catia Schnittstelle. Reduzieren der Werte geht nicht. Und mein Problem ist das wenn ich das Programm über das OfficeLite erzeuge, ich ein *.dat file mit 10.000 und ein *.src file mit genauso vielen Aufrufen bekomme. Das große dat-file macht mir nichts. Aber das große src ist natürlich nicht so toll. Aber falls jemand ne bessere Idee hat, als die Punkte mit einer Liste aufzurufen, nur zu.

  • Meinst Du mit Liste ein Array? So hätte ich das versucht, nen array aus E6POS (oder was auch immer Du benutzt) und dann im SRC nur ne Schleife. Dafür müsstest Du allerdings auch das DAT-file ändern.
    Ich nehme allerdings an, daß der das Array auch vollständig in den Speicher läd.
    Wenn die Orientierung immer gleich bleiben sollte, könnte ja auch ein Array mit XYZ-Werten reichen, zum Platz sparen.

    If you and DEAD people can read Hex, how many people can read Hex?

  • Oder meinst du eine Liste mit 10.000 Punkten? Wenn es Punkte sind wüßte ich vielleicht was. Aber erzähl erst mal was du überhaupt für Daten Handelst, dann wissen wir auch schon mehr.

  • Es geht um 10.000 6D-Koordinaten, also x,y,z,a,b und c, und dazu kommen noch Status und Turn. Ich weiß nicht genau ob man bei der KRC von Listen oder Arrays spricht. Ich habe daran gedacht im *.dat file z.B. folgendes zu schreiben:


    DECL E6POS LIST[10000]
    LIST[1] = {x...
    LIST[2] = {x...
    usw.


    Und im *.src hätte ich in einer Schleife iterativ die Listen-Elemente aufgerufen:
    FOR I=1 TO 10000 STEP 1
    LIN LIST[I]
    ENDFOR
    Oder so änlich. Ich bin in der Syntax noch nicht ganz so fit.


    Was das ändern der *.dat angeht, das ist vollkommen egal. Ich erzeuge das *.dat und die *.src per Python Skript. Also sind meiner Fantasie keinen(wenig) Grenzen gesetzt.


    Zu der Lösung, die ich oben hingeschrieben habe, habe ich allerdings noch das Speicherproblem von dem ich schon geschrieben habe. Außerdem habe ich keine Listen erzeugen können mit mehr als 680 Elementen.
    Ich hoffe ich habe mich diesmal besser ausgedrückt. Die Daten sind fürs Fräsen. Ich weiß da gibt es schon Tools für. Aber bei uns kommen leider ein paar Sachen dazu die die Tools nicht schafen.


    Gruß
    Lambert

  • Ich hab im Hinterkopf irgendwo gespeichert, dass es bei KRL eine maximale Speicherbereichsgrösse pro Variable gibt. Sprich: Wenn Du nicht XYZABC brauchen würdest, bekämst Du mehr unter. Du kannst die Variablen auch dierekt im SRC speichern, auch einzeln:


    Code
    LIN {x=......}


    Ist Vielleicht nicht ganz so elegant, ermöglicht aber direkt neben die Bewegung im Kommentar etwas über den Punkt abzulegen. Ausserdem entfällt die Speicherplatzbegrenzung.
    Und ASCII-Art in Folds, wie im Thread "Programme die die Welt nicht braucht" beschrieben, werden möglich...

    If you and DEAD people can read Hex, how many people can read Hex?

  • Hallo Lambert,
    es ist unmöglich eine Datenliste (Array) mit 10000 E6POS-Punkten anzulegen!
    Die einzige Möglichkeit besteht die Punkte direkt in SRC-Files (Anzahl abhängig von der Softwareversion, V4, V5) anzulegen.
    ...
    lin {x 1, y 2,...


    In dem KUKA TechPaket CAMROB V1.1 ist ein Tool das die SRC's dann in der richtigen Reihenfolge aufruft.
    Vielleicht hilft Dir die Doku weiter

    Wer nach allen Seiten offen ist kann nicht ganz dicht sein

  • Vielen dank für die Hilfe und die guten Ideen. Ich muss jetzt leider einen anderen Weg gehen. Das gefällt mir als Programmierer nicht so gut. Aber:
    - die String Operationen die ich gebraucht hätte um durch eine For schleife einzelne Variablen aufzurufen scheint es nicht zu geben
    - das dat file sowie das src file haben laut Kuka eine Begrenzung von 13.000 Zeilen


    Das alles bringt mich zu der Lösung, dass ich im main Programm nur Unterprogrammaufrufe mache und in jedem dieser Unterprogramme sind jeweils ein Array mit 500 Punkten(nur um sicher zu gehen).


    LindePaul: Ich hab versucht mehr als 680 Punkte in ein Array zu packen. Aber das geht bei mir nicht. Ich nehme stark an das hängt von der größe der restlichen Datei ab. Oder irgendwelcher anderen Variablen. Auf jedenfall bestärkt es mich darin eine wesentlich kleiner Punkte Menge pro Array zu wählen, damit das Programm auch sicher überall läuft.

  • Hallo!


    Was hältst Du von der Importfunktion?


    Du kannst in jedem beliebigen SRC Punkte von woanders importieren:


    Beispiel:


    DEF blablabla()
    IMPORT POS PABLAGE[] IS .../r1/speicher/ablagepunkte


    Dadurch hast Du ein dynamisches Array, welches sich der Dimensionierung der ablagepunkte in der speicher.dat anpaßt. Möchte heißen, daß Du in der speicher.dat ablagepunkte 1- 60 hast und Dein Array PABLAGE in der blablabla.src hat dann auch 60.


    Ich hoffe, das hilft Dir ein kleines bisserl weiter

    Weniger als 100% wird nicht akzeptiert :)

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden