Positions Offset wieder aufheben

  • Hallo,


    bin gerade dabei ein neues Programm für Palettierung zu erstellen. Habe dazu mehrere Fragen... Zum einen habe ich die Entnahme- bzw. Ablageposition jeweils mit einem Offset programmiert (zum stapeln) das funktioniert auch ganz gut, jedoch meinte mein Kollege dies sei nicht die beste Methode und meinte was von „Stapelfunktion“, ich konnte in der Dokumentation die wir von der KRC4 haben nichts dazu finden. Jetzt lautet meine Frage gibt es diese Funktion, wenn ja wie programmiere ich sie und spricht überhaupt etwas gegen meine Offset Methode?! Desweiteren wollte ich noch wissen ob ich am Ende des Hauptprogramms die ganzen Offset‘s wieder aufheben (Rückgängig) machen kann oder ob ich dies im jeweiligen Unterprogramm tun muß? Zur besseren Verständlichkeit: Kann ich meinem Punkt „Entnahmepos“ aus Programm A im Programm B ein Offset geben oder muss dies in Programm A erfolgen?

  • Schritt für Schritt zum Roboterprofi!
  • Meine zwei Cent dazu:

    - Wenn es funktioniert, dann ist schon mal nicht ganz schlecht.

    - "Stapelfunktion" gibt es so nicht.

    - Über Programmierstil und Lösungen lässt sich vortrefflich diskutieren oder gar streiten.

    - Die Frage zum Offset verstehe ich nicht. Da müsste ich wohl Programm sehen, um die Frage überhaupt mal zu verstehen.

    - Man kann Daten eines Programms aus einem anderen Programm heraus manipulieren, wenn die Daten als global deklariert (und in einer als Public makrierten .DAT), oder in der $config.dat deklariert sind.

  • Dann lasse ich es so wie es ist :)

    Wegen dem Offset ist es so das ich das Hauptprogramm habe von dort aus wird das Unterprogramm „Entnahme“ aufgerufen, in diesem Unterprogramm wird das Bauteil aus einem Fach entnommen. Die Entnahmeposition wird mit einem Offset belegt, nun läuft das Programm in Schleife bis das Fach leer ist. Das Fach muss dann von Hand neu bestückt werden. Ist das Fach neu bestückt brauche ich ja wieder die ursprüngliche Entnahmeposition. Also muss ich die Summe aller Offset‘s retour rechnen. Die Frage ist nun kann ich das irgendwie im Hauptprogramm machen oder muss das im Unterprogramm „Entnahme“ geschehen?

  • ....

    Wegen dem Offset ist es so das ich das Hauptprogramm habe von dort aus wird das Unterprogramm „Entnahme“ aufgerufen, in diesem Unterprogramm wird das Bauteil aus einem Fach entnommen. Die Entnahmeposition wird mit einem Offset belegt, nun läuft das Programm in Schleife bis das Fach leer ist. Das Fach muss dann von Hand neu bestückt werden. Ist das Fach neu bestückt brauche ich ja wieder die ursprüngliche Entnahmeposition. Also muss ich die Summe aller Offset‘s retour rechnen. Die Frage ist nun kann ich das irgendwie im Hauptprogramm machen oder muss das im Unterprogramm „Entnahme“ geschehen?

    Wie schon mal gesagt. Zeig das Programm, dann kann man da mehr sagen.

    Andernfalls lautet die Antwort:

    Du kannst das "irgendwie" im Hauptprogramm machen, oder auch "irgendwie" im Unterprogramm. Hauptsache es funktioniert.:)

    • Hilfreich

    geht zb. so: du deklarierst dir in deinem .dat File einen "Zwischenspeicher" als E6POS:


    DECL E6POS XPos_backup


    Und schreibst dann im Programm (natürlich bevor du die Position verschiebst!) die XPos drauf


    XPos_backup = XPos


    Gegen Ende deines Entnahmevorgangs (also wenn deine Fächer all neu befüllt werden müssen (bzw. bereits befüllt wurden) schreibst du das backup wieder auf die XPos.


    XPos = XPos_backup


    Hinweis:

    du kannst dein Entnahmefach als Basis vermessen und dann einmal den Weg für Hin und Rückfahrt teachen. Um ins nächste Fach zu fahren verschiebst du dann einfach die Basis (geht 1:1 gleich wie bei den Punkten, nur eben im Base Koordinatensystem das du vermessen hast). So musst du nicht jedes mal mehrere Punkte verschieben, sondern einfach nur die eine Basis.


    Grüße,

    Domi

  • nein nein nein...

    gespeicherte punkte manipulieren ist nie empfelenswert

    besser Finger weg von Referenzen - und spielen nur mit Kopien

  • Danke! Genau danach habe ich gesucht :thumbup: Jetzt habe ich dazu nur noch eine Frage und zwar gibt es eine Möglichkeit dieses Backup der Position auch im Hauptprogramm aufzurufen? Oder muss das Lokal im Unterprogramm geschehen in der die Position abgelegt ist?

  • Grundsätzlich würde ich mir eine pCalcPos deklarieren, schon alleine der Nachvollziehbarkeit von Berechnungen etc.

    Natürlich werden Quellpositionen nicht verändert, Weg zurück ist ja dann schwerlich möglich.


    Gruß

    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!

  • Ich habe mir das jetzt alles nochmal überlegt und will es ganz anders machen... ich hab mir gedacht ich mache eine Suchfahrt, also Punkt über Stapel und unterster Punkt vom Stapel und mit einem Interrupt das Vakuum an wenn der Eingang kommt. Wenn er kein Bauteil mehr findet ist das Programm abgearbeitet. So würde ich keinen Punkt verändern und der Bediener könnte nach dem Bestücken einfach wieder neu starten. Spricht da irgendwas dagegen?:/

  • Dagegen spricht meistens die Taktzeit. Den Suchlauf darfst du nicht so schnell fahren, da der Roboter ja anhalten muss. Auch das Vakuum als Abbruch ist ungeschickt. Dafür lieber Sensoren nehmen. Dann kannst du auch eine Suchfahrt mit Schnell-Langsam-Fahrt programmieren.

  • Danke! Genau danach habe ich gesucht :thumbup: Jetzt habe ich dazu nur noch eine Frage und zwar gibt es eine Möglichkeit dieses Backup der Position auch im Hauptprogramm aufzurufen? Oder muss das Lokal im Unterprogramm geschehen in der die Position abgelegt ist?

    Es kommt darauf an wo wie Variable abgespeichert ist, die du ändern willst.

    Wenn du die E6Pos die du im DAT. File des Hauptprogramms deklariert hast beschreiben willst, dann kannst du das im HP und in lokalen UP machen (lokales UP: nach der END Zeile des HP, im selben SRC File!)

    Hast du ein Unterprogramm in einem eigenen, getrennten SRC File erstellt, dann musst du die Variablen die du in beiden Programmen manipulieren willst global deklarieren (z.B. in der config.dat, da gibt es ein eigenes Plätzchen dafür -> User Globals).


    Die Variable und deren Inhalt liegen nicht in einem Programm, sondern im .Dat File (-> Datenliste).

    Ein Dat File ist einem SRC File zugeordnet und alles was im SRC File kreucht und fleucht kann auf dieses dazugehörige Dat File zugreifen.


    ich hoffe das stimmt alles so...alle Angaben ohne Gewähr :)


    lg


    PS: gönn dir doch mal den Programmieren 2 Kurs bei Kuka, der ist wirklich sehr hilfreich!

    PPS: hör auf die Kollegen hier, manipuliere nur Kopien der "Originalpunkte". Denn sobald du dein Programm abbrichst bevor du das Pos_backup wieder zurückgeschrieben hast, fährt der Robi beim nächsten Start woanders hin. Ich mach mir für solche Positionen meist ein eigenes Unterprogramm wo die Punkte der Reiche nach liegen, schön kommentiert. Das UP rufe ich nur auf, wenn ich die Positionen wirklich prüfen oder nachteachen will.

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