Beiträge von Muses

    Guten Morgen Pitl,
    also wenn ich an das Ende meines err.reacti ein HALT eintrage und das Roboterprogramm mit EXECUTE 1 rob.main(), -1 aufrufe, dann geht das System direkt in HALT und steht dann da. Irgendwie steh ich da grad etwas auf dem Schlauch.


    Gruß
    Björn

    Also zu Punkt 1. habe ich das Problem mit dem Aufhängen in err.reacte hinbekommen. Jedoch habe ich weiter das Problem, dass der Neustart des Roboters nicht den gewünschten Effekt bringt.
    Hier der Programmablauf von err.reacti():


    .PROGRAM err.reacti()
    ; ABSTRACT:
    ;
    ; SIDE EFFECTS:
    ;
    ;* Copyright (c) by
    ;---------------------------------------------------------
    LOCAL REAL disk.lun ; wird erst im Programm "err.txt()" initialisiert
    LOCAL LOC error.loc[]
    BREAK ; Warten bis der Roboter angehalten ist
    HERE error.loc[prio]
    SIGNAL -bs.reacti
    WAIT
    ; Fehlerinformationen aufbereiten und in Datei und Monitor Terminal Fenster schreiben
    CALL err.txt(disk.lun)
    prio = prio+1
    REACTI bs.reacti, err.reacti, prio
    ; ------ Start individuelles Errorhandling --------------------------------------------
    CASE err[prio-1] OF
    VALUE -910, -909, -908: ; E-STOP von MCP oder Frontpanel NOT-AUS Knopf
    WHILE (STATE(4) BAND ^B100 == 4) DO
    WAIT
    TYPE "Bitte ALLE NOT-AUS Kreise pruefen", /U1
    $error = "Bitte ALLE NOT-AUS Kreise pruefen"
    END
    END ; CASE err[prio-1]
    ; ------ Ende individuelles Errorhandling --------------------------------------------
    FCLOSE (disk.lun)
    DETACH (disk.lun)
    ; High Power zuschalten
    WHILE SWITCH(POWER) == FALSE DO
    TYPE "Bitte blinkenden High-Power Knopf auf CIP druecken", /U1
    $error = "Bitte blinkenden High-Power Knopf auf CIP druecken"
    ENABLE POWER
    $error = " "
    WAIT
    END ; Roboter wieder ankoppeln, Fehler wie z.B. *Joint 3 out of range* werden ausgegeben
    ; damit der Bediener den Fehler abstellen kann.
    DO
    WAIT
    ATTACH (0, 1)
    IF IOSTAT(0,0) < 0 THEN
    TYPE "Der Fehler : ", $ERROR(IOSTAT(0,0)), " ist aufgetreten!"
    END
    UNTIL IOSTAT(0,0) == 1
    DEPART 370-DZ(HERE) ; 380 bedeutet fuer Adept Cobra Greifer oben
    BREAK ; bei anderem Roboter anpassen
    SIGNAL a.vakuum.aus
    MOVE grund
    BREAK
    SIGNAL abbruch
    prio = prio-1
    REACTI bs.reacti, err.reacti, prio
    .END


    Nach dem Neustart des Roboters soller er hoch fahren, damit er sich frei bewegen kann und zur Grundstellung fahren und neu das Hauptprogramm starten. Er fährt auch hoch und in die Grudnstellung, aber will dann nochmal die abgebrochene Bewegung durchführen. das bekomme ich irgendwie nicht raus.

    Hallo liebe Leute,


    ich habe zwei folgende Probleme.


    1. Ich möchte bei auftretendem Not-Aus eine Fehlerroutine erstellen bei der ich nach Beseitung des Not-Aus wieder automatisch den Power Button freigebe und dann das Programm, in dem der Fehler auftrat wieder von vorne starte. Ich habe es mit der err.main(), err.reacte(), err.reacti() Methode aus dem Schulungsskript versucht. Habe mir das err.reacti Programm umgeschrieben, dass der Roboter nur hochfährt und dann in die Grundposition fährt. Das funktioniert aber komischerweise nicht korrekt oder hängt sich in err.reacte auf. Hat jemand einen Tipp für eine "elegante" Lösung?


    2. Ich muss eine "Ampel" einbinden. Sprich....wenn der Roboter läuft soll die Ampel grün zeigen und wenn er steht und nicht arbeiten kann soll rot angezeigt werden. Soweit ich weiß, gibt es kein Signal, dass der Roboter in Bewegung ist. Gibt es eine gute Lösung dies auszuwerten?


    Vielen Dank schon mal im Voraus.
    Björn

    Hallo alle zusammen,


    ich habe eine Vision-Anwendung (Adept Sight) zusammen mit einem Cobra600.


    Ich möchte die ermittelten Positionen des Arc Finders, den ich zusammen mit dem Locator in einer Sequenz verarbeite, nutzen um mit meinem Greifer aus der Gripper Offset Table ein Teil genau zu positionieren. Das ganze wird in einer For-Schleife abgearbeitet. Aber nur ein mal. Beim zweiten mal bekomme ich immer den Fehler "Invalid Vision Argument". Versuche ich das ganze aber mit den Locatorpositionen zu machen, dann Fuktioniert das. Kann der Arc-Finder das für nur eine gefundene Position? Oder woran kann das liegen?


    Programmtechnisch habe ich das folgend angegangen:


    SET place[i] = VLOCATION($ip, seq, 3, i, 1401)


    3 ist der Index des Arc-Finders in der Sequenz
    1401 der Offset des entsprechenden Greifers


    Vielen Dank schon mal im Voraus.

    Hallo,
    ich habe eine ähnliche Aufgabenstellung mit einem anderen Problem. Deswegen habe ich das Ganze mal hier mit angehängt. Ich hoffe, dass mir da jemand weiterhelfen kann.
    Einleitend geht es darum die Positionen für die X-Richtung, Y-Richtung und den Winkel von einem Kamerasystem zu meinem Roboter zu übertragen. Das klappt auch soweit. Jetzt möchte diese Positionen an eine geteachte Position übergeben. Dafür habe ich folgendes kleines Programm geschrieben.


    1 P100 = P1
    2 Close
    3 Open "COM2:" As #1
    4 Input #1, MX,MY,WINKEL
    5 P100.X = MX
    6 P100.Y = MY
    7 P100.C = WINKEL
    8 PIntern = P100
    9 Close
    10 End


    Die X udn Y-Koordinaten werden korrekt übernommen. Nur der Winkel tanzt komplett aus der Reihe. Obwohl der Wert richtig am Roboter ankommt, habe ich eine sehr große Zahl an der Position des Winkels (siehe unten).


    P100=(+349.94,-39.84,+299.79,-179.53,+0.28,+172.96)(7,0)
    P1=(+349.94,-39.84,+299.79,-179.53,+0.28,+172.96)(7,0)
    PIntern=(+324.16,-57.25,+299.79,-179.53,+0.28,+10026.19)(7,0)


    Wär klasse, wenn jemand nen Tipp hat, wie ich auf den richtigen Winkel in PIntern komme.

    Manmanman, wenn man die Sache mal nach ner pause wieder anders betrachtet werden einem schon mal Sachen klar, die man vorher nicht gesehen hat. Also es funktioniert. Auch so wie ich es gepostet habe. Bei mir war die Differenz von Wert1 und Wert2 einfach zu hoch. Deswegen wurde mir immer 0.000 angeziegt. Zumindest weiß ich schon mal warum es nicht geht. Wird dann wohl eher ein Encoder-Problem sein.

    Bei der weiteren Bearbeitung bin ich auf ein weiteres Problem gestoßen.
    Und zwar kann ich mir den errechneten Punkt nicht anzeigen lassen. Es geht also wesentlich um Programmzeile 80. Weiß da jemand Rat? Ist sicher ne völlig simple Sache.


    10 def pos punkt, P0, P200
    20 def double wert1, wert2, wertd
    25 def char bew
    30 open "COM4:" as#4
    40 wert1#=+999995632
    50 wert2#=+9620
    60 wertd#= wert2#-wert1#
    62 P200=(+201.133,-175.216,+6.574,+0.000,+0.000,-0.005)(0,0)
    64 P0=(+201.118,+170.267,+6.572,+0.000,+0.000,-0.007)(0,0)
    70 p_encdlt=(P200-P0)/wertd#
    80 punkt=p_encdlt
    90 end

    Hallo,
    ich bin neu hier und wollte gleich mal mit ein paar Fragen starten. Zuvor aber ein wenig zum Projekt und zur Hardware.


    Projekt:
    Ein RP-3AH Roboter soll Teile von einem laufenden Förderband aufnehmen. Die Teile werden von einer Kamera und der dazugehörigen Steuerung (P400MA von Panasonic) erkannt. Diese Steuerung gibt über eine Ethernetverbindung die Positionsdaten an die Robotersteuerung. Zusammen mit den Daten des Encoders soll dann die zu verfolgende Position errechnet werden. Es handelt sich also um eine Trackingfunktion.


    Mein Problem bei der Sache ist momentan das Auslesen der Positionsdaten von der Kamerasteuerung. Ich bekomme zwar immer eine Positionsvariable angezeigt, aber das war es dann auch. Wie bekomme ich es hin über die Ethernetverbindung alle zu übertragenden Positionsdaten in meiner Robotersteuerung einzulesen und zu verarbeiten?


    Das Programm schreibe ich in MELFA Basic IV. Folgend ein Programmteil wie ich es zur Zeit versuche umzusetzen.


    1 DEF CHAR ZEICHEN
    10 OPEN "COM3:" AS #1
    20 *SCHLEIFE
    30 INPUT #1,ZEICHEN$
    40 IF ZEICHEN$="" THEN *SCHLEIFE


    Wenn jemand noch weiter reichende Tipps oder ähnliches zum Thema Vision Tracking hat….nehme ich natürlich auch gerne.


    Vielen Dank schon mal im Voraus.