KUKA Ausgangssignal wenn Roboter Stoppt

  • Hallo Zusammen,


    Ich benutze einen KUKA KR 180 R2500 extra zum Schweißen. Ich habe aber keine richtige Schnittstelle um auf das Schweißgerät zuzugreifen, sondern steze einfach nur ein Digitales Ausgangssignal, welches das Drücken der Taste am Schweißbrenner simuliert.


    Jetzt passiert es mir manchmal, dasss der Roboter beim abfahren meiner Programme stehen bleibt (Ich fahre im T1 Modus, und die Tasten am Smart-Pad sind ziemlich alt).


    Kann man den Roboter so Programmieren, dass entweder das Ausgangssignal angesteuert wird, sobald eine Systemvariable wie $ROB_STOPPED einen Wert ausgibt? Oder wahrscheinlich als bessere Lösung, dass der Programmaufruf einer STOPP Reaktion (STOPP 1 oder 2 oder Sicherheitshalt 1 oder 2) diesen Ausgang ansteuert?


    Vielen Dank für jede Hilfe!!

  • Schritt für Schritt zum Roboterprofi!
  • Ich habe mal ChatGPT gefragt, und die Antworten klingen recht Logisch, ich kann aber selbst nicht überprüfen. Kann jemand, der sich hiermit besser auskennt mal ein Auge drauf werfen?



    To set up a background task on a KUKA robot, you generally follow these steps:

    1. Define the Background Task: Create a new KRL file for your background task. This is where you'll implement the logic to monitor $ROB_STOPPED and execute any signaling or actions when the robot is not moving.
    2. Configure the Task: You need to configure this new file to run as a background task. This is done in the robot's configuration files, specifically within the KRC\R1\System\config\UserCommon.cfg file for KRC4 controllers. You'll add an entry under the &BEGINEXT section to start your task.
    3. Implement Safe Signaling: Ensure that any actions taken by the background task, especially those that could affect the robot operation or safety, are implemented carefully to avoid unintended interactions with the main program.

    Step 1: Define Background task

    The $ROB_STOPPED system variable indicates whether the robot is currently stopped. This can be used as a straightforward method to determine if the robot is not moving.

    Here’s how you can incorporate it into your KRL (KUKA Robot Language) program to trigger a signal or action when the robot is not moving:


    &ACCESS RVP

    &REL 1


    DEF BackgroundMonitor( )

    WHILE TRUE DO

    IF $ROB_STOPPED THEN

    ; Signal that the robot is stopped

    SEND_SIGNAL_ROBOT_STOPPED( )

    ENDIF

    WaitSec 1 ; Adjust based on how often you want to check

    ENDWHILE


    PROC SEND_SIGNAL_ROBOT_STOPPED()

    ; Example for setting a digital output

    $OUT[1] = FALSE

    ; Add additional logic here if needed, such as logging or sending a network message

    ENDPROC

    ENDDEF


    Step 2: Configure the Task to Run in Background

    Edit the UserCommon.cfg file to include your background task. This step may vary based on your controller and software version, but generally, you add a line similar to:


    EXTFCT "BackgroundMonitor" "BackgroundMonitor.src"


    Macht das sinn? Ich kenne leider den Syntax nicht 100% und ich finde es gefährlich ChatGPT generierte Programme auf so einem Industrieroboter zu testen...


    EDIT: $ROB_STOPPED ist eine Automatic Extern Variable, das geht für meinen Anwendungsfall nicht... Deswegen würde ich als Bedingung if $VEL_C == 0 nehmen.


    Einmal editiert, zuletzt von Dagles () aus folgendem Grund: neue Information

  • Servus,


    wichtiger als der Robotertyp wäre welche Steuerung du hast, aber ich gehe mal von einer KRC 4 aus.


    Es sollte einen Standardmäßig aktivierten Submit-Interpreter (Hintergrundtask) geben (SPS.sub). In diesem gibt es eine Dauerschleife für Benuteranweisungen (steht irgendwo ein Kommentar dabei).

    Da kannst du deinen Code beispielsweise einfügen.


  • Und ganz wichtig: Niemals nie nicht ChatGPT um ein Programm für einen Kuka Roboter befragen, da kommt nur Stuß raus. Obwohl, das Programm selber sieht gar nicht mal so verkehrt aus. Aber die Sache mit der Hintergrundtask stimmt halt hinten und vorne nicht.


    Das $Rob_Stopped kann man schon nehmen, auch wenn das ein Auto Ext Signal ist. Das sollte auch im Handbetrieb gesetzt werden. Kannst auch $Pro_act nehmen, auch ein Ext Signal, wird aber auch im T1 / T2 gesetzt.

  • Und ganz wichtig: Niemals nie nicht ChatGPT um ein Programm für einen Kuka Roboter befragen, da kommt nur Stuß raus. Obwohl, das Programm selber sieht gar nicht mal so verkehrt aus. Aber die Sache mit der Hintergrundtask stimmt halt hinten und vorne nicht.


    Das $Rob_Stopped kann man schon nehmen, auch wenn das ein Auto Ext Signal ist. Das sollte auch im Handbetrieb gesetzt werden. Kannst auch $Pro_act nehmen, auch ein Ext Signal, wird aber auch im T1 / T2 gesetzt.

    Ja, deswegen frage ich hier ja nochmal nach ;)


    Danke schonmal für die Tipps! Das hilft sehr!


    Würdet ihr die Routine in das SPS.SUB einfügen, oder lieber eine zweite .SUB datei schreiben?

    Ich brauche diese Routine nur bei bestimmten Anwendungsfällen und ich will die Resourcen vom Roboter in allen anderen Fällen nicht überstrapazieren.


    SCMI Ja genau, es ist KRC4 auf dem Roboter installiert.

  • Ich brauche diese Routine nur bei bestimmten Anwendungsfällen und ich will die Resourcen vom Roboter in allen anderen Fällen nicht überstrapazieren.

    Beim KUKA kannst Du damit nichts überstrapazieren, die Ressourcen werden vom System vernünftig verteilt. Man kann elend riesige Programme im Submit-Interpreter unterbringen, das Schlimmste, was passieren kann, ist, dass sie dann pro Durchlauf länger brauchen. Die Zeit ist aber ohnehin nie Null.

    Man braucht schon 'ne ganze Menge Zeugs um die sps.sub dazu zu bringen, mehr als einen IPO-Takt zu brauchen, und selbst wenn - who cares.

  • Danke für die Klasse Antworten!


    Hier noch ein kleines Addendum, da ich in der KUKA Dokumentation und im Internet keine guten Erklärungen finde.


    Mein Programm aktiviert das Schweißgerät, wartet an der Position für 0.2-1s und fährt dann einen Pfad zum Schweißen ab. Wegen der Wartezeit kann ich also doch nicht $VEL_C verwenden (Oder $ROB_STOPPED/$PRO_MOVE).

    Ich berauche also eine Systemvariable (oder einen Automatic Extern Output) der mir sagt ob es einen irregulären Stop des Roboters gab.

    Hierzu habe ich folgende Variablen gefunden:


    $PRO_ACT: Gibt aus, ob ein Roboterprogramm läuft. in der Doku gibt es dazu aber noch Cases die ich nicht verstehe.


    $ALARM_STOP oder $ALARM_STOP_Intern: Die beiden geben mir aber nur die Not-Halte aus, also nicht wenn ich z.B. im Handfahrmodus den Totmannschalter loslasse oder im Automatikmodus auf die rote Stop-Taste drücke


    $STOPMESS: Hier bin ich fast am zuversichtlichen, dass mir das das richtige Signal gibt, aber in der Doku sind nicht alle Cases diesr variable aufgeführt. An sich sendet dass ein signal, sobald der Roboter irgendeine Fehlermeldung hat, wegen der er stoppen soll. Hier zwei fragen: Ist das eine Boolean Ausgabe? Wird damit auch z.B. die rote Stop-Taste abgedeckt? Das ist ja eigentlich kein Fehler, wenn der Roboter dann anhält.


    $MOVE_ENABLE: Wäre an sich auch eine Möglichkeit, da hier das Signal gesetzt wir, ob der Roboter sich bewegen darf. Ergo, wenn er unplanmäßg stoppen sollte, sollte dieses Signal ja auch auf FALSE sein. Frage hier ist nur ob das auch auf TRUE ist, wenn der Roboter sich nicht bewegt, aber fahren dürfte?


    $Brake_SIG: Werden die Bremsen bei einem Interrupt überhaupt ausgelöst? Immer? außerdem gibt mir das ein Array zurück, man bräuchte also mehrere Vergleiche...


    Mehr Variablen habe ich erstmal nicht gefunden, welche würde eurer Meinung nach am besten Funktionieren?

  • Da das weder mein Roboter oder mein Steuergerät ist, und ich auch nicht die Euronen dafür habe, wird das schwierig 8o


    Aber danke für die Infos, das mit $Move_enable wusste ich nicht, danke!

  • Hallo Dagles,


    also, wenn du tatsächlich nur den einen Ausgang "Start schweißen" hast und sonst nix, würde ich das auch mit $pro_act versuchen.


    Im Submit:


    if "Start schweißen" == true and $pro_act == false then


    "Start schweißen = false


    endif

    Die Abnahme von GOTO Anweisungen verhält sich reziprok zur Qualität einer Programmierung

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