Override durch SPS sicher anpassen

  • Hallo zusammen.


    Ich bin auf der suche nach einer einfachen Möglichkeit, den Geschwindigkeits-Override von einer SPS vorgeben zu lassen.
    Die SPS übergibt über ein Gruppensignal einen Wert zwischen 0 und 100 an den Roboter und dementsprechend soll der Override angepasst werden.


    Ich habe es z. Z. so gelößt:
    Ich habe einen zweiten Task angelegt. Dieser vergleicht den Ist-Override mit dem Soll-Override. Gibt es eine Abweichung, so wird gewartet, bis das Hauptprogramm läuft. Ob das Hauptprogramm läuft frage ich über den Systemausgang ab. Sobald das Program läuft wird ein Interrupt im Bewegungstask über eine persistente boolsche variable ausgelöst.


    Konnte dies bisher noch nicht ausprobieren. Denke zwar, dass es funktioniert, jedoch finde ich meinen Ansatz sehr kompliziert. Was mir wichtig ist, dass die Geschwindigkeit von der SPS auch angepasst werden kann, wenn das Hauptprogramm nicht läuft.
    Von anderen Systemen kenne ich die Möglichkeit den Soll-Override direkt in eine Variable zu schreiben.
    Hat jemand von euch einen Tipp, das ganze einfacher zu gestalten?


    Merci :)

  • ANZEIGE
  • hu..
    Du solltest das mit den sicherheitssignalen verknüpft halten, damit nur im sicheren zustand von aussen was geändert werden kann.
    also nur, wenn automatik läuft und das main-program, dann den gruppeneingang auswerten.
    ich denke, dass auch der abb ein zyklisch laufendes programm hat, wo das in drei oder vier zeilen erledigt werden kann.

    Wolfram (Cat) Henkel

    never forget Asimov's Laws at the programming of robots...

    "Safety is an integral part of function. No safety, no production. I don't buy a car without brakes."


    Messages und Mails mit Anfragen wie "Wie geht das..." werden nicht beantwortet.

    Diese Fragen und die Antworten interessieren jeden hier im Forum.


    Messages and Mails with questions like "how to do..." will not be answered.

    These questions and the answers are interesting for everyone here in the forum.

  • Hallo,
    du kannst das Gruppeneingangssignal mit einem Interrupt verbinden. Bei einer änderung des Signals wird ein Interrupt ausgelöst.


    PROC EventRobiSpeed()
    !
    !interrupt für die override
    IDelete intRobiSpeed;
    CONNECT intRobiSpeed WITH TrapRobiSpeed;
    ISignalGI giSpeedFromPLC,0,intRobiSpeed ;
    IWatch intRobiSpeed;
    RETURN;
    ENDPROC


    TRAP TrapRobiSpeed


    !hier overridewert anpassen


    ENDTRAP


    Im Mainprogramm kannst du den Interrupt starten. Oder du kannst das mit dem Ereignis Motoren Ein verknüpfen und dort noch abfragen ob der Robi in Automatik ist. Wenn Robi in Automatik ist dann den Interrupt starten.
    Dabei musst du die Interruptwarteschalnge beachten. Nicht das diese Überläuft! Man bekommt dann einige Meldungen angezeigt was ein wenig ägerlich ist.
    Am besten noch ein Programm mit dem Ereignis Motoren Aus verküpfen. In diesem Programm stoppst du den Interrupt. Mit ISleep!
    Also wenn beim Robi die Motoren ein sind und Automatik eingestellt ist, dann den Interrupt starten.
    Und beim Ereignis Motoren aus den Interrupt stoppen.
    So könnte man das machen. Ist vielleicht eine Lösung von vielen :denk:
    Gruß Paulaner

    Für seine Arbeit muß man Zustimmung suchen, aber niemals Beifall.<br />Zitat: Charles-Louis Baron de Montesquieu

  • Hey,


    meine ursprüngliche Lösung hat prinzipiell auch funktioniert, jedoch empfand ich das als doch zu tricky und umständlich.


    WolfHenk:
    An deinen Vorschlag hatte ich zunächst auch gedacht, da der verwendete Roboter über eine Multitasking-Option verfügt. Jedoch kann ich von dem Logiktask nicht direkt über SpeedRefresh oder Velset auf den Override zugreifen. Beim ABB ist das nur in den Bewegungstask selbst zulässig. Das macht der Kuka einfacher, da ich dort ja direkt in eine Systemvariable den gewünschten wert setzten kann.


    @Paulaner:
    Ich habe grad in einem Offline System folgendes probiert:
    Für den Fall, dass das Programm läuft mache ich das über den GI-interrupt.
    Für den Fall, dass das Programm nicht läuft habe ich eine Event-Routine für START und RESTART angegeben. Hier setze ich dann über Velset den Override.
    Dabei frage ich noch die Betriebsart ab und ob der Wert x: 0<=x<=100 ist.
    Ich glaube dies ist auf für später am einfachsten nach zu vollziehen.


    Mir fällt nur grad auf, dass SpeedRefresh die günstigere Wahl währe. Da diese sich im Gegensatz zum Velset sich auch auf die aktuelle Bewegung auswirken soll.


    Ich danke euch beiden!


    Gruß Mechatron :)

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