Teachen von Positionen in Arrays

  • Hallo Forum,


    Mal interessehalber eine allgemeine Frage: Wie geht ihr beim (Nach-)Teachen vor, wenn ihr keine Inline-Formulare verwendet?


    In unseren Programmen sind Positionen in Arrays organisiert, um im Programmablauf flexibel darauf zugreifen zu können. Bei festen Variablennamen für jede einzelne Position ist das in meinen Augen unmöglich.


    Nur: Das Teachen ist dann ein wirklicher Krampf. Habe schon ein Hilfsprogramm geschrieben, dem man Array-Name und Index als Parameter übergibt und das dann die $POS_ACT an der richtigen Stelle im richtigen Array speichert. Aber komfortabel ist was anderes.


    Für mich sieht es so aus: Entweder man nimmt ILF, dann ist das Teachen komfortabel. Die sind aber so unflexibel, dass sie für unseren Bedarf nicht geeignet sind. Oder man bastelt sich wirklich alles von Grund auf selbst. (Mittlerweile überlegen wir sogar, mit Zenon eine eigene Oberfläche zu bauen.)


    Gibt es noch etwas dazwischen, was mir bisher entgangen ist?

  • Schritt für Schritt zum Roboterprofi!
  • Würde mal auf ExpertTech tippen. Habe selber noch nie damit gearbeitet, aber damit ist es (glaube ich) möglich, auch außerhalb von Inlineformularen Positionen zu teachen.

  • um positionen zu teachen sind allgemein keine inlineformulare nötig. wir verwenden diese zum beispiel so gut wie garnicht.


    positionen in arrays verwenden wir eigentlich nur bei berechnungen wie zum beispiel für palettierungen. es gibt eine teachbare grundposition und von der aus wird der rest berechnet. sind davon mehrere vorhanden, gibt es eben ein extra teachprogramm, in dem alle dieser grundpositionen angefahren und geteacht werden können.

    „Welten, regiert von künstlichen Intelligenzen,<br />mußten oftmals ihre schmerzlichen Erfahrungen machen.<br />Logik kennt keine Gefühle.“

  • Hi,
    wir machen es immer folgendermaßen:


    ;Punktezuweisung aus einem Array
    XPOS_Greifen= XTPOS_Greifen[nProduktnummer]


    ;FOLD LIN POS_Greifen Vel= 2 m/s POS_Greifen Tool[2]:Stempel Base[3]:Rundschalttisch rechts;%{PE}%R 4.1.16,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:POS_Greifen, 3:, 5:2, 7:POS_Greifen
    $BWDSTART = FALSE
    LDAT_ACT=LPOS_Greifen
    BAS(#CP_DAT)
    FDAT_ACT=FPOS_Greifen
    BAS(#FRAMES)
    BAS(#VEL_CP,2)
    LIN XPOS_Greifen
    ;ENDFOLD


    ;Wenn man die "XPOS_Greifen" nachgeteacht hat, wird diese dann ins Array geschrieben
    XTPOS_Greifen[nProduktnummer]=XPOS_Greifen


    Gruß
    Loelik

  • Mit EpertTech überteacht man alles, was ein Roboterziel definiert.
    LIN {x 0.0, y 0.0}
    PTP {A1 13.9} ;Achsen
    PTP {E1 0.0} ; Zusatzachsen
    LIN {x 100.0, y 100.0, z 100.0, a 0.0, b 0.0, c 0.0, s 1, t 2} ;Frame, Pos und E6Pos
    LIN {x 100.0, y 100.0, z 100.0, a 0.0, b 0.0, c 0.0} : {x -100.0, y -100.0, z 100.0, a 0.0, b 0.0, c 0.0} ;Komponenten von Frameverknüpfungen
    PTP ! ;Platzhalter
    LIN position ; Variablen (Axis, e6axis, Frame, Pos, E6pos)
    LIN zz[2] ; Felder eines Arrays von Variablen
    LIN position:{x 100.0, y 100.0, z 100.0, a 0.0, b 0.0, c 0.0} ;Frameverknüpfungen aus Variablen und festen Werten
    ....


    Grüße,
    Michael


  • Würde mal auf ExpertTech tippen. Habe selber noch nie damit gearbeitet, aber damit ist es (glaube ich) möglich, auch außerhalb von Inlineformularen Positionen zu teachen.


    ExpertTech haben wir auch noch nicht eingesetzt. Positionen teachen geht damit wohl auch nur, wenn diese explizit im Programmablauf drinstehen?



    um positionen zu teachen sind allgemein keine inlineformulare nötig. wir verwenden diese zum beispiel so gut wie garnicht.


    Ihr verwendet dann ExpertTech?



    positionen in arrays verwenden wir eigentlich nur bei berechnungen wie zum beispiel für palettierungen.


    Bei uns müssen praktisch alle Positionen geteacht werden. Welche Positionen in welcher Reihenfolge abgefahren werden ist aber dynamisch und wird erst zur Laufzeit berechnet. Daher die Sache mit den Arrays. Die geteachten Positionen stehen nirgends explizit im src, sondern nur in großen Arrays im dat. Die Programme berechnen dann Array-Indizes und lesen die Positionsdaten an der entsprechenden Stelle aus den Arrays.



    sind davon mehrere vorhanden, gibt es eben ein extra teachprogramm, in dem alle dieser grundpositionen angefahren und geteacht werden können.


    Ein extra Teachprogramm, in dem alle Positionen explizit drinstehen wäre eine Idee. Bei mehreren hundert Positionen wird das aber vielleicht unübersichtlich. Ein Teachprogramm, dem man die gewünschte Position als Parameter übergibt haben wir wie gesagt schon, aber das ist einfach unkomfortabel. Nicht alle "Teacher" sind auch Programmierer... Daher soll der Programmablauf explizit vom Teachen getrennt bleiben.



    ;Wenn man die "XPOS_Greifen" nachgeteacht hat, wird diese dann ins Array geschrieben
    XTPOS_Greifen[nProduktnummer]=XPOS_Greifen


    Interessant. Ist das dann fester Programmbestandteil, d. h. du überschreibst in jedem Durchlauf einfach alle angefahrenen Positionen im Array? Und zum Teachen hält man dann vor dem Schreiben ins Array an und korrigiert die Position?



    Mit EpertTech überteacht man alles, was ein Roboterziel definiert.


    Hm, das löst aber nicht das Problem mit den Arrays, oder? Sehr stark vereinfacht passieren bei uns solche Dinge:



    Im regulären Programmablauf teachen ist daher eher keine Option.


  • Im regulären Programmablauf teachen ist daher eher keine Option.


    Ne beliebig komplizierte Teachroutine muss man sich dann schon schreiben, in welcher man die Elemente des Arrays überteacht. Im einfachsten Fall halt alle Positionen hintereinander weg.


    Die Programmierung ist in dieser vereinfachten Darstellung auch ein wenig um die Ecke, man bräuchte sich ja nicht die Bewegungsfolge noch einmal in einem eigenen Array zwischenspeichern, sondern es würde reichen, einfach eine Tabelle der Indizes zu speichern und sozusagen mit Pointern zu arbeiten. Dann würde die Bewegungsanweisung auch wieder auf die Originaldaten zugreifen, und man könnte im laufenden Programm teachen.
    Also ungefähr:



    Man kann sich ja auch durchaus einen Merker anlegen, der im Programmablauf anhält, wenn bestimmte Bedingungen gegeben sind, damit der Bediener überteachen kann. Vielleicht ein Schalter "Teachmodus" am Bedienpult und dann vor der Bewegungsanweisung

    Code
    ;FOLD Hier drunter teachen 
    if teachmodus then 
     halt 
    endif
    ;ENDFOLD


    Grüße,
    Michael

  • Zitat von BastelNerd


    Interessant. Ist das dann fester Programmbestandteil, d. h. du überschreibst in jedem Durchlauf einfach alle angefahrenen Positionen im Array? Und zum Teachen hält man dann vor dem Schreiben ins Array an und korrigiert die Position?



    Genau, bei jedem Durchlauf wird die Position ins Array geschieben.


    Wenn man es nicht möchte kann man auch wie Programmiersklave geschrieben hat, mit eine Teachmerker arbeiten.


    IF Teachmodus THEN
    XTPOS_Greifen[nProduktnummer]=XPOS_Greifen
    ENDIF



    Gruß
    Loelik

    Einmal editiert, zuletzt von Loelik ()


  • Ne beliebig komplizierte Teachroutine muss man sich dann schon schreiben, in welcher man die Elemente des Arrays überteacht.


    Ein Teachprogramm haben wir wie gesagt schon, ist aber unkomfortabel in der Handhabung.



    Die Programmierung ist in dieser vereinfachten Darstellung auch ein wenig um die Ecke, man bräuchte sich ja nicht die Bewegungsfolge noch einmal in einem eigenen Array zwischenspeichern, sondern es würde reichen, einfach eine Tabelle der Indizes zu speichern und sozusagen mit Pointern zu arbeiten.


    Das ginge so ohne Weiteres nur, wenn es so einfach wäre wie ich es dargestellt habe. :mrgreen: Tatsächlich passiert da noch einiges mehr. Bewegungsart und Überschleifen werden auch erst zur Laufzeit festgelegt, auf manche Positionen kommt noch ein Offset usw...
    Direktzugriff auf das Original-Array bei der Bewegung wäre schon irgendwie machbar, geht aber am eigentlichen Problem vorbei:



    Dann würde die Bewegungsanweisung auch wieder auf die Originaldaten zugreifen, und man könnte im laufenden Programm teachen.


    Genau das ist der Punkt, da war ich vielleicht nicht klar genug: Man soll gar nicht im laufenden Programm teachen. Ich stelle mir das z. B. ähnlich vor wie die Anzeige der Digital-E/A. Da gibt's eine Liste aller Ein- / Ausgänge und einen Button zum setzen. Auf Positionen übertragen also eine Liste aller Positionen, einen Button "Anfahren" und einen Button "Teachen". Ohne, dass sich der Teacher mit KRL-Programmen beschäftigen muss.



    für krc4 gibts n zusatzprogramm, heisst objectbrowser. hat uns in nem ähnlichen fall au geholfen.


    Hey super, das geht genau in die richtige Richtung! Werde ich direkt mal im OfficeLite testen.


    Was OrangeApps da macht finde ich sehr interessant (Erweiterung der Kuka-Oberfläche); dazu mache ich mal einen neuen Thread auf.

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