Wegvermessung / Alle x mm einen Impuls setzen

  • Hallo,


    ich habe einen IRB140 mit IRC5 Steuerung. Dieser soll ein Werkstück in x bzw. y Richtung abfahren und alle z.B. 10 mm einen Impuls am Ausgang ausgeben.


    Hat jemand eine Idee wie ich das machen kann ? Für ein Beispiel wäre ich sehr dankbar !


    Grüße,
    Bryan

  • ANZEIGE
  • Hi,


    je nach dem wieviele solche Impulse du brauchst und wie genau die Schaltung erfolgen sollte und wie variabel es geschaltet werden sollte, würde ich mit rechteckigen Zonen probieren.
    Vorteil dabei ist, dass der Roboter in keinster weise seine Bewegung ändert, er würde dann fahren so als ob da nichts wäre.


    Zweite Lösung könnte ich mir vorstellen, dass du deine Bahn in 10mm Schritte aufteilst und und dann immer einen Impuls programmierst.
    Vorteil ist dabei, dass du die Impulsschteuerung in deinem Verfahrprogramm hast, kanns aus 10mm jede Zeit 15 oder 20mm machen. Zu testen währe da noch ob das Fahrverhalten des Roboters für dich nicht nachteilig ist, ich meine ob der Roboter die Bewegung an den Übergängen verlangsammt.


    denn Kollegen fällt bestimmt noch was anderes ein


    MfG heini

  • Hallo heini,


    vielen Dank für deine Antwort.


    Ich habe mal die zweite Variante ausprobiert. Das Problem dabei ist allerdings, dass der Roboter nach jedem Punkt kurz anhält, da ich ja den Impuls erzeugen muss. ich weiß nicht ob das für meine Anwendung ausreichen wird.


    Hier mal mein Beispiel:
    MODULE MainModule
    !Offsetwerte
    PERS num aaaOffsY;
    PERS num aaaSchrittweiteY := 100;
    VAR num Anzahl := 10;


    CONST robtarget p10 := [[530,-450,300],[0.115774,-0.0214957,-0.990553,-0.0702791],[-1,0,-5,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];


    PROC main()
    aaaOffsY := 0;
    WHILE Anzahl > 0 DO
    MoveJ Offs (p10,0,aaaOffsY,0),v50,fine,tool0\WObj:=wobj0;
    Set do1;
    WaitTime 0.1;
    Reset do1;
    Anzahl := Anzahl - 1;
    aaaOffsY := aaaOffsY + aaaSchrittweiteY;
    ENDWHILE
    ENDPROC
    ENDMODULE


    Die erste Variante mit den Zonen hört sich erstmal interessanter an. Allerdings weiß ich nicht ganz wie das gemeint ist !? Wie soll ich die Zonen während der Fahrt ändern ?
    Wie hoch wäre denn dabei die Genauigkeit bzw. Reproduzierbarkeit ?


    Grüße,
    Bryan

  • Hi,


    wenn du schon die zweite Variante ausprobiert hast, dann würde ich sagen mach da erst weiter:
    Den Ausgang würde ich an deiner Stelle nicht so ansprechen sonder mit Pulse, z.B.


    PulseDO \High \PLength:=0.5 do1;
    !Fuer halbe Sekunde wir der Ausgang do1 auf ON geschaltet und geht dann von selbst aus;


    mit WaiteTime hast du dem Roboter befohlen zu stehen, er hat es auch fleißig ausgeführt.
    Das Fine würde ich auch ersetzen mit z5, da der Roboter an dem programmierten Punkt kurz anhält, das Problem ist dabei dass der Ausgang einwenig früher kommt, bevor der Punkt erreicht wurde, sollst einfach testen.



    Die erste Variante hat einen Nachteil, soviel ich weiss (bin mir nicht sicher) muss der Roboter mach der Änderung der Zonen neu gestartet werden, daswegen ist es nicht so flexiebel, wie die Zweite Lösung.


    MfG heini

  • Hallo,


    ich habe die zweite Variante jetzt mit dem Impuls abgeändert. Ich denke das ist genau das, was ich gesucht habe. Mit der Zone muss ich dann noch mal etwas probieren, ich habe sie jetzt einfach mal auf z0 gesetzt und in der Simulation sieht das schon recht flüssig aus.


    Vielen Dank für die schnelle Hilfe.


    Der Vollständigkeit halber hier noch das geänderte Programm:
    MODULE MainModule
    PERS num aaaOffsX;
    PERS num aaaOffsY;
    PERS num aaaSchrittweiteX := 0;
    PERS num aaaSchrittweiteY := 100;
    VAR num aaaAnzahl := 10; !Anzahl Impulse


    CONST robtarget p10 := [[530,-450,300],[0.115774,-0.0214957,-0.990553,-0.0702791],[-1,0,-5,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];


    PROC main()
    aaaOffsX := 0;
    aaaOffsY := 0;
    WHILE aaaAnzahl > 0 DO
    MoveJ Offs (p10,aaaOffsX,aaaOffsY,0),v50,z0,tool0\WObj:=wobj0;
    PulseDO \High \PLength:=0.5, do1; !Impuls erzeugen
    aaaAnzahl := aaaAnzahl - 1;
    aaaOffsX := aaaOffsX + aaaSchrittweiteX;
    aaaOffsY := aaaOffsY + aaaSchrittweiteY;
    ENDWHILE
    ENDPROC
    ENDMODULE


    Grüße,
    Bryan

  • Hallo RyanB,


    Du solltest bei Deiner Lösung besser die Bewegungsinstruktion "MoveLSync" verwenden, mit der Du eine separate Routine aufrufst, die die Instruktion PulseDO ausführt. Dadurch hast Du das Problem mit der Zone bzw. mit der Rechnervoreilung behoben.


    Grüße
    Micky

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind. (Albert Einstein)

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

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