Beiträge von LarsH

    Hallo,


    Zitat

    Was würde denn passieren, wenn man die Achse als Linearachse vorgibt und dann koppelt?


    gute Frage?
    man müsste in den Maschinendaten den Kinematiktyp zuweisen?
    Entweder BASE - Kinematik oder ROBROOT - Kinematik.
    Wie sich eine BASE-Kinematik mit Linearachse verträgt weiss ich leider nicht.



    Zitat

    Woher weiss denn die Steuerung, wie schnell sie das Rohr drehen muss, damit eine bestimmte Umfangsgeschwindigkeit erreicht wird?


    1. mit math. Kopplung:
    Deine programmierte Bewegung wäre eine Kreisbewegung. Der Robi würde um das Bauteil fahren. Damit sich dieser nicht um das Bauteil wickelt, drehst du die externe Achse entgegen. Die Geschwindigkeit ist dann einfach dein vel.cp.


    2. ohne math. Kopplung:
    siehe oben


    Beim verstellen musst du diese neu einmessen.


    Wie machst du das mit der "Geschwindigkeitsvorgabe über die beiden Overrides?" Softkeys?


    Gruß

    Hallo,


    wie man sieht, hat beides Vor- bzw. Nachteile.


    Interresant wäre zu wissen, wie die zu fahrende Bahn aussehen soll ?!?


    soma:


    Wie würdest du diese besagte Funktion realisieren?


    z.B.:


    Robi steht an p0


    p1=p0
    p1.z = p0.z+500
    p1.E1 = p0.E1+winkel


    LIN p1



    diese eine LIN bewegung müsste man ja dann in x Punkte zerlegen. ???
    wie soll man das flexiebel umsetzen?


    Gruß

    Hallo,


    1.a) Die externe Achse ist eine rotatorische Achse (also die Materiell vorhandene). Um aber eine absolute Winkeleingabe zu bekommen muss diese als linear deklariert werden. (360° <-> 360mm). Denke nicht, dass dann eine math. kopplung möglich ist. Der Roboter geht von einer Linearachse aus.... die transformation wäre also linear. Du braucht aber eine rotatorische Transformation.


    1.b.) Wenn du diese als endlos deklarierst, musst du die Drehbewegung in <120° Schritte aufteilen. Die Achse dreht in richtung des kürzeren weges. Jetzt ist eine math. Kopplung möglich. Programmierfehler der externen Achse sind verbunden mit schnellen Roboterbewegungen!!!


    2.) Welche Bahn willst du abfahren?
    Bei "Wickelbewegungen" müsstest du mit math. Kopplung eine Spirale abfahren. -> geht nicht (oder?)
    Ohne Kopplung einfach Linear + Drehe um n Umdrehungen.


    3.a.) mit math. Kopplung gibst du die Geschwindigkeit mit vel.cp an.
    3.b.) ohne math kopplung muss die externe Achse die langsamste sein. Sonst bremst die CP bewegung die Linearachse aus.


    Und diese % Angabe finde ich auch etwas ungeeignet.
    Habe die externe Achse mit unterschiedlichen Geschwindigkeiten dehen lassen und mir mit dem Oszi die Drehzahl angezeigt. Wahscheinlich kommt so etwas heraus. 0% = 0 1/min ; 100% = 2700-3000 1/min.
    Die Motorderhzahl kannst du dann mit der Getriebeübersetzung auf dein Futter umrechen. -> Faktor
    Dann kannst in Umdrehungen/min programmieren und rechnest mit dem Faktor in % um.


    4.) wenn du die Punkte überschleifen willst, wirst du feststellen, dass nicht math. gekoppelte Achsen nicht mit einbezogen werden. Falls du damit probleme bekommst, kann ich dazu noch etwas schreiben.


    Gruß Lars

    Hallo,


    angenommen, dein Bauteil hat immer die gleiche Geometrie. Das Bauteil liegt aber immer an einer andern Stelle. Dann musst du deine Base jedes mal neu vermessen. Dann fährt der Robi die gleiche Position am Bauteil an.


    Base = Koordinatensystem, in dem der Robi verfährt!


    Beim verwenden von Inline-Formularen werden deine Positionsdaten in der *.*dat Datei gespeichert. Gibst du die Punkte im Expertenmodus selber ein, ist es egal wo diese abgelegt sind.


    Gruß

    Hallo,


    kommt man nicht mit einfacher beschleunigter Bewegung weiter?


    I. s= (a*t^2)/2 +v1*t


    II. t = (V2 - V1) / a


    II. in I ergibt: a = (1/s) *((V2-V1)^2/2 + V1 * (V2-V1))


    Im Programm acc_cp (oder so) = a
    mit etwas Überschleifen sollte das dann klappen.
    Bitte die Rechnung kontrollieren!!!


    Gruß Lars

    Hallo,


    den weg könntest du z.B. über die serielle Schnittstelle an Labview senden. Da gibt es bestimmt RS232 Karten.


    was hälst du davon einen digitalen Ausgang vom Roboter alle z.B. 0,5mm hin und her zu schalten und diese Flanken mit Labview zu zählen.
    ; 0 ; 1 ; 0 ; 1 ; 0 ; 1 etc
    0 0,5 1 1,5 2 2,5 mmm


    weiss nicht, ob diese Genauigkeit aussreicht bzw. welchen Weg du zurücklegen musst.



    Gruß Lars

    Hallo,


    ich versteh den ganzen Aufbau auch noch nicht ganz.


    - Muss dieser Draht immer "horizontal" gezogen werden?
    - Wird der Draht noch irgenwie direkt an der Kiste (Andruckpunkt?) geführt.
    - Willst du Achse6 endlos drehen lassen?


    Gruß Lars

    Hallo,


    ist zwar schon etwas älter aber.... so setze ich E1 wieder auf 0°.



    Somit dreht sich die Achse bei der SAK fahrt maximal um 360°. Wenn das Bauteil rotationsymetrisch ist kann auch driekt auf 0° gesetzt werden.


    Gruss Lars

    Hallo,


    ... ich habe das DO auch nur hier im Forum vergessen. Im Robi stimmts.


    Also das mit dem Trigger-Befehl klappt bei mir nicht. Habe das mal mit verschiedenen Variablen durchprobiert. Immer kommt die Fehlermeldung:


    Laufzeitdaten bei Trigger in UP unzulässig


    - In einem Unterprogramm wird ein Trigger definiert, der evtl. erst im Hauptprogramm schaltet.
    - Werden bei der Zuweisung des Triggers Laufzeitdaten verwendet, sind diese zum Schaltzeitpunkt ungültig.


    Hier mal der Programmauszug:



    ....
    FOR Lage=1 TO nLagen
    p04.y=p04.y+dBand
    p04.E1=p04.E1-360


    LIN p04 C_DIS
    TRIGGER WHEN DISTANCE=1 DELAY=0 DO dspl_Lage=Lage


    ENDFOR
    ....


    dspl_Lage ist in der config.dat deklariert.


    selbst bei

    a=2
    .....
    LIN p04 C_DIS
    TRIGGER WHEN DISTANCE=1 DELAY=0 DO b=a
    ....


    gibt es diese Fehlermeldung.


    Gruss Lars

    Hallo,


    habe zwichendurch mal etwas rumprobiert und bin immer noch nicht auf eine gute Lösung gekommen.


    Ich kann keine Lauzeitvariablen an ein Unterprogramm übergeben. d.h.


    trigger when distance=1 delay=0 dspl_lage=lage
    trigger when distance=1 delay=0 dspl(lage) prio=-1


    gehen leider nicht.
    Fehlermeldung: Verwendung von Laufzeitvariablen nicht zulässig


    Somit kann ich wohl auch diese Variablen nicht an das SPS.Sub übergeben. (Mit SPS.Sub habe ich bisher keine Erfahrungen)


    Gruss Lars

    Guten morgen,


    1. habe jatzt mal die Variaben in der config.dat deklariert. Siehe da... es klappt. Aber... die Variable wird vom Vorlaufzeiger aktualisiert. Somit sehe ich immer 2-5 Werte im vorraus. Kann auch den Vorlaufzeiger nicht auf 1 setzen -> kein Überschleifen.
    "Variable - Vorlaufzeiger" ist auch keine schöne Lösung. Am Ende des Programms wird 3 Zyklen der selbe Wert angezeigt.
    Gibt es da noch eine "schöne" Lösung?



    2. Wie soll ich den SWrite Befehl in einem SUB benutzen, ohne einen Vorlaufstop auszulösen? Bahnbezogener Unterprogrammaufruf? Im Submit?


    Vielen Dank, Gruß Lars

    Hallo,


    vielen Dank für die Infos.


    Habe das mit der $LOOP_MSG[] mal ausprobiert. Das klappt auch mit einer Zeichenfolge super. Nur würde ich gerne eine INT Variable ausgeben.
    Habe es geschafft mit SWRITE die Variable zu wandeln, doch leider fürt dieser Befehl zu einem Vorlaufstop.-> kein Überschleifen möglich.... :(
    Gibt es dazu weitere Lösungsmöglichkeiten?


    Weiter habe ich versucht die Variable über Ansicht ->Variable -> Übersicht anzuzeigen. Dieser Wert wird leider auch nicht ständig aktualisiert.
    (auch durch änderung der configmon.ini -> 1=>an ; 0=>aus)
    Ideen?


    Mit diesem MSG_T habe ich erstmal nichts weiter versucht....



    Gruss Lars

    Guten Tag,


    ersteinmal vielen Dank für die vielen hilfreichen Einträge, die mir schon oft weitergeholfen haben.
    Jetzt eine Frage zur Ausgabe von Hinweismeldungen.


    Habe versucht die ganze Meldungsaugabe in ein Unterprogramm zu packen. Dieses möchte ich aus verschiedenen Hauptprogrammen aufrufen und nur 2 Variablen (Text + Zahl) übergeben.


    Hier mal mein Code, der leider nicht ganz funktioniert:


    &ACCESS RVO1
    &REL 54
    &PARAM TEMPLATE = C:\KRC\Roboter\Template\ExpertVorgabe
    &PARAM EDITMASK = *
    DEF msg_hinweis(TEXT[],ANSWER)


    DECL INT ANSWER
    DECL INT OFFSET
    DECL CHAR TEXT[]


    DECL STATE_T STATE
    DECL MSG_T EMPTY_MSG


    OFFSET=0
    EMPTY_MSG={MSG_T: VALID FALSE,RELEASE FALSE,TYP #NOTIFY,MODUL[] " ",KEY[] " ",PARAM_TYP #VALUE,PARAM[] " ",DLG_FORMAT[] " ",ANSWER 0}


    ;------------------HINWEISMELDUNG------------------


    $MSG_T=EMPTY_MSG
    $MSG_T.MODUL[]="Info"


    ;$MSG_T.KEY[]=TEXT[]
    ;$MSG_T.KEY[]="Zahl = %1"
    $MSG_T.KEY[]=StrAdd(TEXT[], " %1")



    SWRITE($MSG_T.PARAM[],STATE,OFFSET,"%1d",ANSWER)
    $MSG_T.PARAM_TYP=#VALUE
    $MSG_T.VALID=TRUE


    END


    Probleme sind:
    - die Textvariable mit dem Platzhalter (%1) zu verknüpfen
    $MSG_T.KEY[]=" Textvariable %1"
    - Der Robi fährt in einer For-Next-Schleife verschiedene Punkte an. In der Schleife soll die aktuelle Punktnummer ausgegeben werden. Doch dann werden die Punkte nicht mehr überschliffen. bzw. die Meldung nicht angezeigt.


    ...
    FOR Lage=1 TO nLagen
    p04.Y=p04.Y+1
    p04.E1=p04.E1-360
    LIN p04 C_DIS
    msg_hinweis(TEXT[],Lage)
    ENDFOR



    Bin sehr dankbar für eure Hilfe.


    Gruss Lars