Beiträge von al3x

    Hallo zusammen,


    könnt ihr mir mit folgendem Problem / Verständisproblem helfen:


    Ein Programm hat folgenden Ablauf (ScaraRoboter)

    moveJ(appro(PosX)

    moveJ PosX

    waitEndMove

    Teil ablegen

    nMoveID = moveJ(appro(PosX)

       waitEndMove

    wait(GetMoveId()>=nMoveID + 0.5)

    Danach ist das Programm beendet und falls Teil Abholen ansteht wird das ähnliche Programm zum abholen aufgerufen.

    Zuerst hatte ich nur waitEndMove: Bewegung wird komplett ausführt und Programm beendet -> Problem: Taktzeitverlust da letzte Bewegung nicht überschliffen wird.

    Ohne die beiden Wait-Befehle die letzte Bewegung nicht ausgeführt und Programm beendet -> erst wenn nächstes Programm gestartet wird wird die Bewegung ausgeführt

    (Ich verstehe nicht was den Roboter zum anhalten bringt)

    Mit wait(GetMoveID) bleibt der Roboter in dieser Zeile stehen. Ich würde erwarten nach 50% der Bewegung wird Programm beendet.


    Ziel:
    Roboter soll am Ende vom Programm auf eine bestimmte Vorposition fahren. Falls zu diesem Zeitpunkt schon ein neuer Auftrag ansteht überschleifen.

    Ich hofe ihr versteht mein Problem.

    Wäre es evtl. besser alles in ein Programm zu packen?

    Wie kann ich eigentlich die Achsgrenzen einstellen? Am SP2 gibts Achsgrenzen für Arm und Zelle. (den Unterschied hab ich noch nicht ganz verstanden)


    Wenn ich hier was ändern möchte, kommt immer die Fehlermeldung "the arm would be out of the new joint range", obwohl die aktuelle Position innerhalb der Grenzen ist.

    konnte das Problem gestern noch mit Hilfe des Supports lösen.

    zu Beachten: wenn wann mit SRS 2022 per Safety Exportieren die Safety Konfig auf den Roboter überträgt, funktioniert dies nicht. kA was dort übertragen wird.

    Das ganze funktioniert erst ab der Safety Version 202.xxx


    Weitere Frage: Wie würde die Betriebsartenanwahl über SPS funktionieren?

    ich hab nun Mode_WMS auf Null gesetzt.

    Trotzdem kommt die Meldung "Keine Betriebsart von der CPU (die Sicherheitsapplikation benötigt eine WMS9 es ist aber keine angeschlossen)".

    Hallo zusammen,


    was ist zu beachten wenn ich den Roboter ohne WMS-Box sondern die Betriebsarten über die SPS bzw. direkt am SP2 anwählen möchte?

    ich hab deinen Code auch schon getestet, aber du hast bei StopMove auch RESUME drin. -> UP wird abgebrochen


    Mein Vorhaben ist eigentlich ganz einfach:

    Für jedes UP gibts eine Fahrfreigabe der SPS. Fehlt das Signal bleibt Roboter stehen. Kommt Signal wieder fährt Roboter weiter.

    Außerdem muss von jeder Position aus eine Grundstellungsfahrt möglich sein.

    Nochmal langsam, ich glaub wir haben aneinander "vorbeigeredet".

    Ich möchte mit Interrupt 20 StopMove() das UP ja garnicht abbrechen sondern nur anhalten bis Fahrfreigabe wieder gesetzt ist. Dann fährt Roboter weiter.

    Das Funktioniert auch.


    Der Interrupt 9 GST() funktioniert soweit auch.


    Problem ist nur dass wenn Störung ist und Fahrfreigabe weg geht, steht Roboter in StopMove. Nur möchte ich aber von dort nicht weitermachen sondern über Interrupt 9 das GST() Programm aufrufen.

    Das müsste doch auch irgendwie funktionieren. Oder geht das gar nicht?

    ich denke es liegt am Vorlaufzeiger. Hab es nun so probiert:

    Code
    UP1:
    CONTINUE
    INTERRUPT DECL 20 WHEN NOT $IN[90] DO StopMove()
    WAIT FOR  ( $IN[90] )
    INTERRUPT ON 20
    $ADVANCE=3
    Code
    DEF StopMove()
    INTERRUPT OFF 20
    BRAKE
    WAIT FOR  ( $IN[90] )
    INTERRUPT ON 20
    RESUME
    $ADVANCE=0
    END


    Er springt dann aber immer (obwohl IN 90) da ist in der StopMove und bleibt mit "Unzulässige Programmstruktur für RESUME" stehen.

    VIelen Dank schonmal für die vielen Antworten.

    Das CycleFlag hab ich gebildet um nur einmal pro Unterprogramm den Eingang anpassen zu müssen.
    Hab ich nun aber mal gelöscht und direkt den Eingang verwendet.


    IrrerPolterer: Die Fahrfreigabe soll nicht nur einmal Abgefragt werden, sondern über den ganzen Fahrweg, deshalb DEF Stop()


    Ich teste jetzt mal die Verzögerung vom Eingang 90 zum Eingang 50 ob das Problem dann immer noch besteht...

    Hallo zusammen,


    ich hab mein Programm (KSS8.7.1) bzw. Grundstellungsfahrt/Rückzugstrategie wie folgt aufgebaut:


    Im Main wird über Interrupt 9 das GST() aufgerufen:

    Code
    Main()
        SPTP Home
        INTERRUPT DECL 9 WHEN $IN[50] DO GST()
        INTERRUPT ON 9
    
        .. Aufrufe Unterprogramme
    END
    
    DEF GST()


    Die UP sind wie folgt aufgebaut:


    Das funktioniert soweit auch.

    Nur manchmal bleibt das UP1 aktiv wenn Eingang 50 kommt. :/


    Hängt es evtl. damit zusammen dass er im Programm bei BRAKE steht?


    Wie handhabt ihr sowas?

    Hallo,


    Ich habe drei Programme (Slot1-3) gleichzeitig laufen. Wenn ich jetzt die Priorität von Slot 1 auf 1 Stelle und von Slot 2-3 auf 2, dann heißt das, dass Prg. 1 eine Zeile, dann Prg. 2 zwei Zeilen, dann Prg. 3 zwei Zeilen und danach wieder von vorne Prg.1 eine Zeile ausgeführt wird.


    Was passiert aber wenn jetzt ein DLY 5 oder ein MOV Befehl in Prg. 1 abgearbeitet wird, warten dann die anderen Programme so lange?


    Und gibts ne Möglichkeit die Zykluszeit zu messen, oder kann mir einer nen Anhaltspunkt nennen wie lang der Robi ungefähr für ein paar Zeilen braucht?


    mfg
    Alex