Manipulation mehrerer E6POS via Script

  • Hallo zusammen,

    ich suche eine Möglichkeit, mehrere Punkte, per Script zu manipulieren.
    Ähnlich der Funktion "TouchUp" sollen Punkte mit ähnlicher Bezeichnung (Suffix) mit der aktuellen Position überschrieben werden.

    Ich weiß, mehrere Punkte mit gleicher Koordinate klingt komisch, ist aber in diesem Fall nicht zu vermeiden.


    Folgende Probleme kann ich aktuell nicht Lösen:


    - Name / E6POS des aktuell angewählten, oder zuletzt erreichten Punktes auslesen
    - Name / E6POS aller in der *.dat gespeicherten Punkte durchsuchen und vergleichen


    Vielleicht hat jemand eine Idee zu den bestehenden Problemen.


    Danke.

  • Schritt für Schritt zum Roboterprofi!
  • Das Echtzeitsystem, d.h. die eigentliche Robotersteuerung läuft in einem RTOS (VXWorks). Bei Systemhochlauf werden alle Daten auf die das Echtzeitsystem zugreifen muss in eine Ramdisk geschrieben. Das ist notwendig, da Festplattenzugriffe zu inperformant wären. Wenn also die Steuerung ein Programm ausführt liest sie es nicht von Festplatte sondern aus der Ramdisk. Um Ramdisk und Festplatte konsistent zu halten wird "regelmässig" der Inhalt der Ramdisk zurück auf die Festplatte geschrieben. Das kann z.B. ein Shutdown sein aber auch andere Ereignisse wie z.B. wenn ein Archiv erstellt wird.

    Fazit: Wenn du Programme per Skript ändern willst musst du sicherstellen, dass es entweder im VxWorks geändert wird oder dass das modifizierte Program nach VxWorks übernommen wird. Beides theoretisch möglich aber aufwändig. Für letzteres gibt es das Paket DirectoryLoader von KUKA. Für ersteres müsstest du die Zuweisungen direkt innerhalb eines Programms machen.


    https://www.robot-forum.com/ro…hlight=ramdisk#post184363

    Is it possible to run files from a USB stick instead of transferring them first? - KUKA Robot Forum - Robotforum - Support and discussion community for industrial robots and cobots (robot-forum.com)
    Kuka vkrc1 keyfiles - loading floppy - Page 2 - KUKA Robot Forum - Robotforum - Support and discussion community for industrial robots and cobots (robot-forum.com)

    Krc2 executes the old .src files. - KUKA Robot Forum - Robotforum - Support and discussion community for industrial robots and cobots (robot-forum.com)
    Spline Blocks - KUKA Robot Forum - Robotforum - Support and discussion community for industrial robots and cobots (robot-forum.com)

    Fubini

  • Das Script soll per UserTech - Softkey ausgeführt werden.

    Du willst also ein Usertech Projekt erstellen, und bezeichnet das als Skript!?

    Ich würde das nicht wirklich als Skript bezeichnen.

    Kann ich denn Programme auf dem Echtzeitsystem per Skript manipulieren?

    Wenn das Skript eigentlich Usertech ist, dann geht das in bestimmten Grenzen, lies halt mal die Doku zum Usertech. Die Möglichkeiten sind da sehr begrenzt, und die Syntax doch sehr gewöhnungsbedürftig.

  • Also Programme aus Programmen manipulieren wäre mir neu, dass das gehen sollte. Aber Daten kann man schon ändern, alles andere wäre dann auch komisch.

    Allerdings scheint es mir in diesem Fall wieder mal darauf rauszulaufen, dass anhand von Variablennamen, die in Strings gespeichert sind, auf die entsprechenden Daten zugegriffen werden soll

    Das geht so m. W. nicht.

    Da würde ich mir ein Konzept mit einer Textdatei, in der die Daten gespeichert werden überlegen. Textdateien kann man seit der KRC4, per KRL halbwegs komfortabel einlesen und beschreiben. Die landen auch auf der Festplatte, so dass man sie notfalls mit externen Programmen/Skripten bearbeiten kann.

  • Du willst also ein Usertech Projekt erstellen, und bezeichnet das als Skript!?

    Ich würde das nicht wirklich als Skript bezeichnen.

    Naja, in der UserTech Doku wird ja klar von Scripten gesprochen, die ausgeführt werden. Wie nennt man das denn?


    Also Programme aus Programmen manipulieren wäre mir neu, dass das gehen sollte. Aber Daten kann man schon ändern, alles andere wäre dann auch komisch.

    Allerdings scheint es mir in diesem Fall wieder mal darauf rauszulaufen, dass anhand von Variablennamen, die in Strings gespeichert sind, auf die entsprechenden Daten zugegriffen werden soll

    Das geht so m. W. nicht.

    Da würde ich mir ein Konzept mit einer Textdatei, in der die Daten gespeichert werden überlegen. Textdateien kann man seit der KRC4, per KRL halbwegs komfortabel einlesen und beschreiben. Die landen auch auf der Festplatte, so dass man sie notfalls mit externen Programmen/Skripten bearbeiten kann.

    Wenn ich dich richtig verstehe, wäre also der Weg, die Variablen (angewähltes Modul und zuletzt erreichter Punkt) in eine Textdatei zu schreiben und extern (auf der Computerseite) zu verarbeiten, indem ich mir ein Programm schreibe, dass die Änderungen wie gewünscht vornimmt und die Programme entsprechend manipuliert. Gibt es dann einen einfachen weg, die Programme von Computer in das Echtzeitsystem zu bekommen, oder hilft da nur ein Neustart?


    So hätte ich die Anfrage jetzt verstanden. Er will die Koordinaten überschreiben. Oder nicht Tobilo?

    Ja, es sollen konkret die E6POS manipuliert werden. Stellt euch das wie einen "eigenen TouchUp" Knopf vor. Ich möchte meine aktuelle Position im aktuell angewählten Punkt speichern und bei anderen Punkten mit gleichem Suffix eine verrechnete E6POS entsprechend ebenfalls speichern.

  • Wenn ich dich richtig verstehe, wäre also der Weg, die Variablen (angewähltes Modul und zuletzt erreichter Punkt) in eine Textdatei zu schreiben und extern (auf der Computerseite) zu verarbeiten,..

    Wäre eine Möglichkeit, aber auch die umständlichste. Würde eher alle Punkte eh schon in einer externen Datei halten, die im KRL Programm, Z. Bsp. am Programmstart lesen, und bei Bedarf geänderte Daten wieder aus dem KRL Programm heraus schreiben. Das geht über die cwrite (FC....) Befehle.

    Ist aber nur mal so ein Hirnfurz, wir kennen ja den technischen Hintergrund der Anforderung nicht. Vielleicht geht es ja auch mit den Usertech "Skripten". Sorry, hab' die Doku dazu schon ewig nicht mehr angesehen, geschweige denn es benutzt. Vielleicht geht es ja damit auch, da kennen sich andere besser aus.

  • Würde es nicht ausreichen im .dat File ein Array von x einer Struktur mit z.B. STRING suffix, E6Pos e6position anzulegen?
    Die aufgerufene User-"Touchup"-Funktion durch den Softkey beschreibt dann die entsprechende Struktur im Array.

    Einmal editiert, zuletzt von joemannix ()

  • Meine Probleme bleiben dabei ja bestehen. Ob ich ein Array, oder nur die E6POS suche, oder

    Folgende Probleme kann ich aktuell nicht Lösen:


    - Name / E6POS des aktuell angewählten, oder zuletzt erreichten Punktes auslesen
    - Name / E6POS aller in der *.dat gespeicherten Punkte durchsuchen und vergleichen

  • Mal eine Frage bzgl.

    - Name / E6POS des aktuell angewählten, oder zuletzt erreichten Punktes auslesen


    Meinst Du damit, daß Du nicht feststellen kannst, welche E6POS zuletzt angefahren wurde?

    Oder weißt Du den zuletzt angefahrenen Punkt und kommst "nur" an die Positionsdaten nicht heran?


    Im ersten Fall könnte man z.B. mittels Trigger beim Erreichen eines Punktes oder beim Losfahren von einem Punkt eine Variable setzen:

    Code
    LIN Pos_12
    TRIGGER WHEN DISTANCE=0 DELAY=0 DO nPosition=12

    In diesem Beispiel wird beim Losfahren von Pos_12 die Variable nPosition = 12 gesetzt.

    Statt eine Variable zu setzen kann man auch Ausgänge setzen oder sogar Programme aufrufen.


    Details dazu findest Du in den KSS SI-Handbüchern im Kapitel Bahnbezogene Schaltaktionen (=Trigger). Mein Beispiel habe ich aus dem KSS_8.6_SI_V3.pdf (Kap. 11.11, Seite 551ff)

    In der Theorie sind Theorie und Praxis identisch. In der Praxis nicht.

  • Für's Verständnis wäre mal gut zu Wissen, was TobiLo exakt damit machen will in seiner Produktionsanlage und wie seine Programmstruktur hierbei aktuell angedacht ist.

    Beschrieb ist sehr allgemein gehalten.

    Evtl. gäbe es hier noch ganz andere Ansätze, dies zu Lösen.

    Da müssten aber exakte Details her.

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • Ich versuche mal zu erklären:


    Der Roboter fährt eine Kontur ab. Diese Kontur wiederholt sich x mal. Entsprechend sind die Punkte zum Umfahren der Kontur immer gleich und unterscheiden sich relativ zum Base nur um ein delta in X (Abstand der Konturen). Die Punktnamen sind zum Beispiel Kontur01Punkt01 (K01P01).


    Bedeutet K01P01 und K09P01 unterscheiden sich nur in X um entsprechend 8 mal den Abstand der Konturen.


    Alle Punkte stehen einfach in dem Programm. Es ist nicht erwünscht z.B. die Kontur einmal abzufahren und anschließend das Base zu verschieben.


    Jetzt möchte ich beim nachteachen der Programme die Änderungen, welche ich per Touchup an K01P01 mache auch direkt an alle anderen P01 übertragen. Dafür war mein Gedanke, könnte man sich ja vielleicht einen eigenen TouchUp-Knopf basteln, welcher eben diese Aufgabe übernimmt.


    Ich hoffe das Problem ist verständlich :D

  • .. Es ist nicht erwünscht z.B. die Kontur einmal abzufahren und anschließend das Base zu verschieben...

    Da gibt es für eine Aufgabe eine sehr einfache Lösung und irgendwer wünscht sich eine komplizierte, Sachen gibt's, die gibt's gar nicht. Aber es ist ja bald Weihnachten, da kann man sich ja mal was wünschen. ;)

    Im Ernst, könnte mir noch die Lösung mit dem Usertech vorstellen, da müsste man aber im Prinzip erst mal selber diese Bewegungsbefehle im Usertech nachbilden, und das dann um die gewünschte Funktion erweitern. Hab' da aber, wie schon mal erwähnt zu lange nichts mehr damit gemacht, um da definitv zu sagen: ja es geht.


    Was ich mir nicht denken kann (soweit ich mich da noch recht erinnere), wird es nicht möglich sein einen Zusatz im Usertech zu schreiben, der ausschliesslich diese Punktemanipulation auf Punkte, die in den Standardfolds verwendet werden, durchführt.

  • Für sowas brauchst du kein Usertech.

    • Einfach die zu manipulierenden Punkte Global halten - DECL GLOBAL K09P01
    • Im Submit auf ein Ereigniss warten, was dein Usertech auslöst - das könnte ein freier Ausgang sein, der den Zustand ändert If $out[1895] == TRUE THEN ..
    • dort dann die einzelnen Aggregate korrigieren K09P01.x=K09P01.x + 1 ; +1[mm]

    Eventuell besuchst du bei KUKA die Programmieren 2 Schulung - das dürfte dir einige graue Haare ersparen :) .

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