Array kopieren

  • Hallo zusammen,


    gibt es eigentlich keine Möglichkeit, einen Array (kukanisch: ein Feld) in einen anderen "in einem Rutsch" zu kopieren?


    Hintergrund: Ich habe eine Systemvariable (Array, 10 Werte), auf die jeder Zugriff lange dauert und den submit ausbremst. Wenn ich da jetzt 10 Zyklen hintereinander drauf zugreife um die 10 Werte rauszulesen, ist mir in diesen 10 Zyklen der submit zu langsam.
    Die Vermutung ist, dass da irgendwas erst beim Zugriff berechnet wird. Die Hoffnung dabei ist, dass bei jedem Zugriff gleich der komplette Array berechnet wird und nicht nur der abgefragte Index.
    Wenn ich die Variable jetzt in einem Zyklus in einen anderen Array kopieren könnte wäre nur dieser eine Zyklus langsam, die anderen 9 wieder schneller. Damit könnten wir evtl. leben.


    Ein einfaches "=" mag der Roboter jedenfalls nicht. Die Felder einzeln weiterzukopieren bringt mir in dem Fall auch nix - dann hab ich wieder 10 Zugriffe :(


    Gruß,


    Robotermann

  • Schritt für Schritt zum Roboterprofi!
  • Was hat den Deine sub für eine Zykluszeit?
    Kannste mal Dein programmiertes Auslesen posten bitte?


    Gruß


    Sven

    Wer nichts macht, macht keine Fehler!

    Wer keine Fehler macht, kann nichts daraus lernen!

    Wer nichts lernen kann, kann sich nicht weiterentwickeln!

    Wer sich nicht entwickelt, geht unter!

  • Guten Morgen,


    vorher waren es max. 24ms. Hinterher >60ms (ein Feld auslesen) oder >350ms (alle Felder auslesen)


    Das Array ist $drive_load (Auslastung der Achsen)


    Ich weiß, klingt komisch. Ist aber so.


    Gruß,
    Robotermann

  • Was ist denn "$drive_load" ?


    Habe mal die Doku durchsucht, in Work visual gesucht, aber nirgendwo was gefunden.


    Wenn es aber wirklich eine Systemvariable ist, könnte es aber sein, dass die bei jedem Zugriff aktualisiert wird um immer die aktuellen Daten zur Verfügung zu stellen. Vielleicht geht dann intern bei der Abfrage der Ist-Motordaten die Zeit verloren.


  • Wenn es aber wirklich eine Systemvariable ist, könnte es aber sein, dass die bei jedem Zugriff aktualisiert wird um immer die aktuellen Daten zur Verfügung zu stellen. Vielleicht geht dann intern bei der Abfrage der Ist-Motordaten die Zeit verloren.


    Guten Morgen,


    genau das war ja meine Behauptung oben :zwink: Und deshalb will ich ja möglichst nur einmal zugreifen um alles abzuziehen, und nicht für jede Achse einen Zugriff ($drive_load[1], $drive_load[2]...) der jedesmal wieder die Berechnung auslöst.


    $drive_load ist die Achsauslastung.


    Gruß,


    Robotermann

  • Auch wenn ich noch immer nicht weiß, wo $drive_load herkommt :denk::


    Wenns wirklich so ist, dass beim Zugriff erst Achsdaten ausgelesen werden müssen, geht die Zeit dann doch beim internen Zugriff auf die Achsregler etc. verloren und nicht beim Umkopiervorgang auf Steuerungsebene.


    Vielleicht mal versuchen, alles auf einmal mit SWRITE umzukopieren ?


    Was sagt denn KUKA dazu?

  • Hallo,


    $drive_load abzufragen passiert asynchron, d.h. der Wert dahinter wird nicht zyklisch aktualisiert, sondern nur auf Anfrage, also bei Abfragen der Variable. Somit gibt hier also keine garantierte Antwortzeit, sondern das System aktualisiert wenn es Zeit hat.


    Fubini

  • Idee:


    Paralleles Programm laufen lassen,
    wo regelmäßig es ausgelesen wird
    und in eine eigene Variable gespeichert wird.


    und dann in sps.sub ganz normal mit eigener Variablen arbeiten.


    Doch wie ein zusätzliches paralleles Programm im Hintergrund laufen lassen?

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