Delay bei dem Ein/Ausschalten von Ausgängen verhinder

  • Hallo,

    ich bin ziemlich neu im Thema Robotik.

    Ich habe einen KR 60-3 mit der Steuerung KR C2 und nutze RoboDK um die Bewegungen usw. zu Steuern. Die Steuerung hat keine DI/DO´s verbaut, weswegen diese per Profibus an eine Siemens ET200B geleitet werden, diese Steuert meine Peripherie.

    Das Ziel ist es Klebstoffraupen aufzutragen, diese sollen so gleichmäßig wie irgendwie möglich sein (für wissenschaftliche Anwendung).

    Nun habe ich folgendes Problem.

    Ich habe in RoboDK eine Bahnverfolgungsprojekt angelegt, welches meine Punkte abfährt. Ich möchte das der Roboter die Klebstoff-Spritze x cm vor erreichen von dem Ende der Bahn ausschaltet um einen Tropfen am ende zu vermeiden. In der RoboDK Simulation sieht das auch gut aus und es geschieht was ich möchte, jedoch bleibt der Kuka im Programmablauf in der Realität immer an dem Punkt, an dem die Spritze ausgeschaltet wird für den Bruchteil einer Sekunde stehen, was natürlich immer einen dicken Tropfen verursacht.

    Ich habe schon die Zyklus Taktzeit gefunden, diese scheint mir aber nicht zu helfen. Ich wäre für Hilfe sehr Dankbar.

    Vielen Dank im Voraus ,

    David


    Hier kommt noch eines der Unterprogramme.

    &ACCESS RVP

    &REL 1

    &PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe

    &PARAM EDITMASK = *

    DEF Path10 ( )


    EXT BAS (BAS_COMMAND :IN,REAL :IN )


    GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )

    INTERRUPT ON 3


    ;FOLD Initialise and set default speed

    BAS (#INITMOV,0)

    BAS (#VEL_PTP,100)

    BAS (#ACC_PTP,20)

    $VEL.CP=0.2

    BAS (#TOOL,0)

    BAS (#BASE,0)

    ;ENDFOLD


    ;;FOLD STARTPOS

    ;$BWDSTART = FALSE

    ;PDAT_ACT = PDEFAULT

    ;BAS(#PTP_DAT)

    ;FDAT_ACT = {TOOL_NO 0,BASE_NO 0,IPO_FRAME #BASE}

    ;BAS(#FRAMES)

    ;;ENDFOLD


    $ADVANCE = 5


    ;FOLD ---- Quickly skip BCO ----

    ; PTP $AXIS_ACT

    ;ENDFOLD


    ;FOLD ---- GO HOME ----

    ; PTP {A1 0.000, A2 -90.000, A3 90.000, A4 0.000, A5 0.000, A6 0.000, E1 0, E2 0, E3 0, E4 0, E5 0, E6 0}

    ;ENDFOLD



    ; Program generated by RoboDK v4.0.1 for KUKA KR 60 L45 HA on 16/12/2019 14:30:54

    ; Using nominal kinematics.

    $APO.CPTP = 1.000

    $APO.CDIS = 1.000

    $VEL.CP = 0.25000

    $BASE = {FRAME: X 1711.354,Y 691.928,Z 423.102,A 90.000,B 0.000,C 0.000}

    ; BASE_DATA[3] = {FRAME: X 1711.354,Y 691.928,Z 423.102,A 90.000,B 0.000,C 0.000}

    ; $BASE = BASE_DATA[3]

    $TOOL = {FRAME: X 91.520,Y 488.790,Z 105.000,A 90.000,B 90.000,C 0.000}

    ; Anzeigen Spritzenkopf 20ml Links

    PTP {A1 -31.20253,A2 -60.03840,A3 99.70798,A4 136.50466,A5 48.82286,A6 -58.00754} C_PTP

    $OUT[6]=FALSE

    LIN {X 72.500,Y 23.157,Z -0.000,A 90.000,B -0.000,C 180.000} C_DIS

    LIN {X 72.500,Y 226.843,Z 0.000,A 90.000,B -0.000,C 180.000} C_DIS

    $OUT[6]=true

    LIN {X 72.500,Y 276.843,Z -0.000,A 90.000,B -0.000,C 180.000} C_DIS

    LIN {X 72.500,Y 376.843,Z 100.000,A 90.000,B -0.000,C 180.000} C_DIS

    END

  • Schritt für Schritt zum Roboterprofi!
  • Ausgänge wie Du sie verwendest lösen Vorlaufstop aus.


    Trigger ist Deine Lösung. Kannst Sie weggesteuert wie Zeitversetzt benutzen.

    Findest gute Beispiele in der Standarddoku für Systemintegratoren.


    Gruss SJX

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

  • Ausgänge wie Du sie verwendest lösen Vorlaufstop aus.


    Trigger ist Deine Lösung. Kannst Sie weggesteuert wie Zeitversetzt benutzen.

    Findest gute Beispiele in der Standarddoku für Systemintegratoren.

    Hey, vielen Dank!

    Das hat schon sehr geholfen, ich habe jetzt folgendes in das Programm Geschrieben.

    Ich habe hier mal eben mit #... Kommentare eingefügt (Stehen nicht im echten Programm).


    LIN {X 37.500,Y 23.157,Z 0.000,A 90.000,B -0.000,C 180.000} C_DIS #Start der Bahn

    LIN {X 37.500,Y 226.843,Z 0.000,A 90.000,B -0.000,C 180.000} C_DIS #Ab hier soll die Spritze aus sein

    TRIGGER WHEN DISTANCE=1 DELAY=0 DO $OUT[6]=TRUE

    LIN {X 37.500,Y 276.843,Z -0.000,A 90.000,B 0.000,C -180.000} C_DIS #Ende der Bahn


    Das hat schon einen deutlichen erfolg gezeigt, jedoch wird der Robo an dem Punkt immer noch minimal langsamer. Kann man das noch verhindern?

    Das mit DISTANCE=1 habe ich noch nicht Verstanden.

    Liest die Steuerung den Befehl jetzt sozusagen soviel früher, damit der Befehl auf dem Punkt dann auch ausgeführt werden kann?

    Macht es Sinn DISTANCE=1 und DELAY=(z.B.-50) zu nutzen?

  • fliegender start und fliegendes ende. Beginne die bewegung etwas vor kleberaupenbeginn und fahre nach kleberaupenende auch einfach erstmal in ungefähr gleicher richtung weiter... hast ja sicher platz

    und grosszügig überschleifen...


    ggf auch eine spezielle klebeapplikationssoftware wie SealingTool / GlueTech (weiß jetzt grad nicht, welche KUKA und welche FANUC ist) nutzen


    kleben kann eine höhere kunst sein....

    Wolfram (Cat) Henkel

    never forget Asimov's Laws at the programming of robots...

    "Safety is an integral part of function. No safety, no production. I don't buy a car without brakes."


    Messages und Mails mit Anfragen wie "Wie geht das..." werden nicht beantwortet.

    Diese Fragen und die Antworten interessieren jeden hier im Forum.


    Messages and Mails with questions like "how to do..." will not be answered.

    These questions and the answers are interesting for everyone here in the forum.

  • schau mal ob du was zur Funktion "Syn OUT" in deinen Unterlagen findest, damit kannst du Ausgänge wärend der Bahnbewegung schalten

    Vielen Danke für den Tipp!

    Ich bin mir hier nicht mit der Syntax sicher, wie ich dann meinen Augang $OUT[6]=TRUE da einfügen kann.

    Ich habe es eben in zwei Varianten probiert, bei beiden schimpft die Steuerung, dass "(" erwartet wird. Ich weiß aber nicht wo

    Variante 1.

    LIN {X 72.500,Y 23.157,Z -0.000,A 90.000,B -0.000,C 180.000} C_DIS

    LIN {X 72.500,Y 226.843,Z 0.000,A 90.000,B -0.000,C 180.000} C_DIS

    SYN OUT [6] '' State= TRUE at START Delay=20ms

    LIN {X 72.500,Y 276.843,Z -0.000,A 90.000,B -0.000,C 180.000} C_DIS

    LIN {X 72.500,Y 376.843,Z 100.000,A 90.000,B -0.000,C 180.000} C_DIS


    Variante 2.

    LIN {X 72.500,Y 23.157,Z -0.000,A 90.000,B -0.000,C 180.000} C_DIS

    LIN {X 72.500,Y 226.843,Z 0.000,A 90.000,B -0.000,C 180.000} C_DIS

    SYN OUT $OUT[6]=TRUE '' State= TRUE at START Delay=20ms

    LIN {X 72.500,Y 276.843,Z -0.000,A 90.000,B -0.000,C 180.000} C_DIS

    LIN {X 72.500,Y 376.843,Z 100.000,A 90.000,B -0.000,C 180.000} C_DIS



  • LIN {X 37.500,Y 23.157,Z 0.000,A 90.000,B -0.000,C 180.000} C_DIS #Start der Bahn

    TRIGGER WHEN DISTANCE=1 DELAY=0 DO $OUT[6]=FALSE ...Am Ende der Bahn Schaltet der Ausgang 6 auf False

    LIN {X 37.500,Y 226.843,Z 0.000,A 90.000,B -0.000,C 180.000} C_DIS #Ab hier soll die Spritze aus sein....Hier ist $OUT[6]=FALSE

    LIN {X 72.500,Y 276.843,Z -0.000,A 90.000,B -0.000,C 180.000} C_DIS...Weiter gehts

    LIN {X 72.500,Y 376.843,Z 100.000,A 90.000,B -0.000,C 180.000} C_DIS...Weiter gehts




    Einmal editiert, zuletzt von woodys ()


  • SYN OUT wird als "Überbegriff / Bezeichnung" bei Inline-Formularen verwendet für das Setzen von Ausgängen bahngesteuert.

    Dahinter steckt schlussendlich auch die Trigger-Instruktion.

    Sieht man gut, wenn man Falte des Formulars öffnet. Fold-Zeilen generieren dir nur das Inline-Formular.


    ;FOLD SYN OUT 25 '' State= TRUE at PATH = -40 mm Delay= -10 ms;%{PE}%R 8.3.22,%MKUKATPBASIS,%COUT,%VSYNOUT,%P 2:25, 3:, 5:TRUE, 7:2, 9:-40, 12:-10

    TRIGGER WHEN PATH=-40 DELAY=-10 DO $OUT[25]=TRUE

    ;ENDFOLD


    LIN {X 37.500,Y 23.157,Z 0.000,A 90.000,B -0.000,C 180.000} C_DIS #Start der Bahn

    LIN {X 37.500,Y 226.843,Z 0.000,A 90.000,B -0.000,C 180.000} C_DIS #Ab hier soll die Spritze aus sein

    TRIGGER WHEN DISTANCE=1 DELAY=0 DO $OUT[6]=TRUE

    LIN {X 37.500,Y 276.843,Z -0.000,A 90.000,B 0.000,C -180.000} C_DIS #Ende der Bahn

    LIN {X 37.500,Y 23.157,Z 0.000,A 90.000,B -0.000,C 180.000} C_DIS #Start der Bahn

    TRIGGER WHEN PATH= -50 DELAY=0 DO $OUT[6]=TRUE

    LIN {X 37.500,Y 276.843,Z -0.000,A 90.000,B 0.000,C -180.000} C_DIS #Ende der Bahn


    Bei LIN Bewegungen machts man eigentlich über den Pfad Trigger.

    Bei dieser kannst Du Weg wie Zeit bestimmen, wann das Signal geschaltet wird.

    Instruktion bezieht sich immer auf den nachfolgenden Satz.

    Darum bei der Wegangabe -50.

    So kannst Dir also auch den ZwischenPunkt sparen, wenn Du willst.


    Sonst Grundsätze einhalten wie schon WolfHenk geschrieben hat.

    $APO.CPTP = 1.000

    $APO.CDIS = 1.000

    Bei solch kleinen Überschleifzonen wird Dir jeder Roboter leicht "stocken/abbremsen".



    Gruss SJX

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

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