Beiträge von soma

    Zitat von [wEm

    link=topic=13770.msg66066#msg66066 date=1466436776]
    Das Problem an der Stelle wird sein, dass RSI lediglich Einfluss auf den TCP nimmt und nicht auf die Base.


    Man kann mit RSI weitaus mehr machen als nur den TCP zu beinflussen!!!


    Zitat von [wEm

    link=topic=13770.msg66066#msg66066 date=1466436776]
    Du müsstest also per RSI über KRL immer dein Base-Kooordinatensystem neu beschreiben. Das könntest Du dann aber auch ohne RSI über Interrupts realisieren.


    Über Interrupts ist das nicht möglich!
    Du kannst zwar deine base jeden Zyklus(wenn Du schnell bist :) ) neu beschreiben. Doch greifen diese Änderungen nicht mehr in die aktive Bahnplanung ein.




    Zitat von [wEm

    link=topic=13770.msg66066#msg66066 date=1466436776]
    Am effektivsten wäre es wahrscheinlich, wenn das Ding eine vom Roboter gesteuerte Achse wäre. Dann könntest du dir die ganzen Hacks sparen.


    Das habe ich den Jungs vor 2 Jahren auch gesagt aber sie wollten nicht auf mich hören... ;)

    INTERRUPT DECL 81 WHEN $IN[1]== TRUE DO abbruchSchweissen()
    INTERRUPT ON 81
    WAIT sec 0.012



    Der interrupt on ist an Der stelle falsche. Wenn der interrupt im hauptprogramm aktiv wird kommt es zum Fehler.
    Interrupt on hier immer im unterprogramm oder unmittelbar vor dessen Aufruf.
    Wozu das wait gut sein soll,weiß ich nicht.


    def abbruchSchweissen()
    brake
    resume
    end
    For dem brake,bitte den interrupt ausschalten.


    Schön wäre eine Variable mit der Justagewert der Achse E2 ein temoräreres Offset zugewiesen werden könnte, bevor die eigentliche Bearbeitung gestartet wird.


    Code
    $ASYNC_EX_AX_DECOUPLE=7;
    $AXIS_ACT.E1=$AXIS_ACT.E1+25;
    $ASYNC_EX_AX_DECOUPLE=0;


    Gehts nicht auch so?
    Ist abba nur KRC2 bewährt

    Noch mal kurz zum Überschleifen:
    3 Verschiedene Art gibt es, soweit ich weiß...


    1. Überschleifen nach Distanz
    2. Überschleifen nach Orientierung
    3. Überschleifen nach Geschwindigkeit


    jede Überschleifart hat eine Parameter
    1.$APO.CDIS
    2.$APO.CORI
    3.$APO.CVEL


    es könnte sein, dass deine Überschleifart schon passt und du nur $Apo.Cvel hochschieben musst.
    Überschleifen nach Geschwindigkeit besagt, dass der Roboter Roboter bis .$APO.CVEL Prozent seiner Geschwindigkeit abbremst und dann den nächsten Punkt anfährt.
    Der Roboter fährt also einen Punkt an und leitet zum Ende hin den Bremsvorgang ein, wie bei einem Genauhalt ohne überschleifen.
    Wenn sein aktuelle Geschwindigkeit bis auf $VEL.CP/100*$APO.CVEL abgesunken ist fährt er den nächsten Punkt an.


    So und da dein lieber Robi den Kram schon vorher berechnet merkt der Kleine, dass er mit deinem $APO.CVEL und den Restparametern zur Dynamik des gesamten Systems, $VEL.CP nicht erreichen kann, z.B. weil er mit den vorgegebenen Beschleunigungswerten gar nicht auf Maximalgeschwindigkeit gehen kann, bevor er schon wieder abbremsen muss(Er muss ja von Punkt A zu B auf $VEL.CP beschleunigen und wieder runter auf $VEL.CP/100*$APO.CVEL ).


    BTW ist Überschleifen nach Geschwindigkeit, wo konstante Geschwindigkeit gefordert ist, selten die richtige Wahl, weil ich dem Roboter von Anfang an sage brems ab bis zu $VEL.CP/100*$APO.CVEL.
    Spannend ist noch, was wohl wäre wenn $APO.CVEL=100 ist.

    Also das system ist immer so schnell wie die langsamste achse. Soll heißen freund robi prüft für jede achse ob sie die erforderlichen Geschwindigkeiten und Beschleunigungen für vel. Cp umd co fahren kann. Wenn nicht, werden alle achsen an die langsamste angepasst. So nun zu deinem robi. Ich gehe ganz schwer davon aus, dass du ein überschleifproblem hast. Du überschleifst mit typ c_vel. Probier mal c_dis oder c_ori und spiele mit den überschleifparametern.

    Grundsätzlich gibst du doch die Geschwindigkeit beim Bahnverfahren in m/s an.
    Die Geschwindigkeit $Vel.Cp in hinreichend durch Nachkommastellen skalierbar.
    Wenn du die geschwindigkeit deines Drehtisches ändern willst, so klingt das für mich so, dass du deine externe Achse asynchron verfährst, also drehst und über eine Berechnung den Roboter zuführst?


    Wenn ich das programmieren würde, würde ich in einem mathematisch gekoppeltem Base auf dem Tisch verfahren und dem Roboter eine Geschwindigkeit vorgeben. Somit passt der Roboter die Ext Achsgeschwindigkeiten an die Bahngeschwindigkeit an.

    Aaaalso,
    der Synchronisationsschalter geht über die schnellen Messeingänge.
    Meine Mutmaßung-->
    Du hast externe Achsen und ne 2. RDW!?!
    Wenn dem so ist dann ist die Beschaltung des schnellen Messeinganges eine andere,
    dann musst du deinen Sensor auf RDW 1 und RDW 2 parallel auflegen.
    Wenn nicht dann lass ConveyorTech ConveyorTech sein und suche nach Hilfen in Bezug des Schnellen Messens
    "MeasureTech" und der Schnellen Messeingänge...

    Ich verstehe das Problem hier eigentlich nicht wirklich.
    Wozu der Trigger gut sein soll, noch weniger.
    Machs mit einem Interrupt



    DEF Mein_Hauptaufgabe()
    INTERRUPT DECL 20 WHEN FREIGABE==FALSE DO WAIT_FOR_FREIGABE( )
    INTERRUPT ON 20
    LOOP
    LIN HIN C_DIS
    LIN HER C_DIS
    ENDLOOP
    END
    DEF WAIT_FOR_FREIGABE()
    INTERRUPT OFF 20
    BRAKE
    WAIT FOR FREIGABE
    INTERRUPT ON 20
    END

    Ich habe eben noch mal schnell dein Machine.dats verglichen.


    Spiel die neue nicht einfach ein, sondern ändere in deiner alten die 7.Achsrelevanten Dinge ab.
    In den Madas gibt es etliche Unterschiede, die nicht die 7.Achse bedingen sondern z.b Workspaces Homepositionen
    Kinematiken etc etc.
    Schnapp dir ein Tool zum vergleichen von 2 Dateien(z.B Notepad++ mit plugin Compare/noch besser ist Winmerge) und vergleiche die Dateien miteinander. Gehe schritt für schritt, zeile für zeile durch.

    also meiner meinung beeinflussen :
    -mameswert der Achse $mames[7]=-120
    -Übersetzungsverhältnis der Achse -> $RAT_MOT_AX[7]={N 10,D 1}
    -Encoderauflösung -> $RAT_MOT_ENC[7]={N 1,D 1}
    die Positionierung der Achse.


    Wenn ihr alle Positionen mit falschen Werten für die 7. Achse geteacht habt, dann fährt die Achse
    z.b. auf 1200mm steht jedoch garnicht 1200mm vom Justagepunkt entfernt. was für euch ersteinmal nicht schlimm ist/war, weil die Achswerte beim teachen quasi nicht von Interesse sind.


    Wenn der Achsistwert zur Entfernung zum Justagepunkt stimmt ist alles gut weil er mit neuen und richtigen Maschinendaten, den Punkt wieder anfahren wird.


    Ansonsten musst Du du wohl Nachtschicht oder Wochenendarbeit einplanen.



    1. mach ne Sicherung vom alten System
    2. Spiel die neuen Daten ein
    3. Fahre ein Programm ab auf einen Punkt.
    Wenn du nicht am Zielpunkt bist, handverfahre die 7. Achse bist du auf deinem Zielpunkt stehst.
    Merke dir den 7.AchsIstwert und berechne dir den Faktor zwischen Istwert und Sollwert.
    4. Spiele die Sicherung wieder ein.(die Kiste kann weiterarbeite und es gab nur ne Pause von 15min ;) )
    5. Such dir ein rühiges Plätzchen an dem du von hand oder mittels
    Programm jeden E1 Wert in deinen Dat Dateien(dein Archiv) mit dem Faktor multiplizierst.
    6. Spiele dein neues geändertes Archiv wieder auf den Roboter ein und hoffe das alles passt


    BTW wenn du alles auf Bases programmiert/geteacht hast, hast du bei eventuellen Unstimmigkeit einen kleinen
    Vorteil.
    Denn dann kannst du das Base neu vermessen und die ungenauigkeiten spielen sich nur in der Stellung der E1 Achse wieder, nicht jedoch in der Stellung deines TCPs.
    Bei kleinen Versatzen ist das dann kein Problem,schwieriger wird es, wenn die E1 Abweichung so groß ist, das die Roboterkinematik die Stellung nicht mehr hergibt(unerreichbare Punkt)

    soso
    anstatt
    tool_corr_on=true; einschalten der toolkorrektur
    tool_corr.x=Schleifanzahl*Verschleiss_pro_bahn
    kannst du von mir aus auch
    base_corr_on=true; einschalten der basekorrektur
    base_corr.x=Schleifanzahl*Verschleiss_pro_bahn


    ich bin zwar immer noch der meinung, dass das erste richtig ist, aber es geht ja auch mit basebezug


    was ich überhaupt nicht verstehe sind deine 150/1500 ifs?


    meine 2 Zeilen reichen aus oder verstehe ich das problem nicht

    mein Senf:



    Warum Baseverschiebung?
    Dein Base ändert sich ja garnicht sondern dein tool.
    Es wird quasi kürzer.
    Mit Baseverschiebung geht es jetzt gerade in deinem speziellen Fall, doch was ist wenn dein chef kommt und sagt:
    "Schleif mal noch die gegenüberliegende oder irgendeine andere Seite".


    Warum Versatz alle 10 Bauteile?
    Dein Werkzeug verschleißt ja nicht genau nach dem 10. Bauteil.


    Ich würde es über Tool_CORR machen also


    tool_corr_on=true; einschalten der toolkorrektur
    tool_corr.x=Schleifanzahl*Verschleiss_pro_bahn

    Probier es damit:

    Also ich würd das so machen das ich mit maximaler Geschwindigkeit über eine Taste fahre und am
    ZeitPunkt X Ein Lin_REL Z-20 oder so machen würde
    Die Zeit bis zum erreichen der Taste also die Lin_rel fahrt kannst du ausmessen wenn Du auch noch zu einem
    Externen Takt spielen willst, ansonsten ist es egal wie lange er braucht weil er quasi immer gleich lang braucht für den Anschlag.