Bedienung eines Greifers in Automatik

  • Moin,


    ich möchte einen Greifer am Panel mit den programmierbaren Tasten bedienen können, ohne die Automatik ausschalten zu müssen. Momentan hab ich es so eingerichtet:


    5 Ausgangssignale

    doTaste

    doTaste1

    ...

    doTaste4



    Eine Cross Connection für die Tasten

    doTaste = doTaste1 OR doTaste2 OR doTaste3 OR doTaste4



    Unter Systemeinstellungen -> Prog. Tasten hab ich die jeweilige Taste mit dem Signal verknüpft und lasse einen Puls rausgeben.

    Taste X

    Ausgang doTasteX

    Puls

    In Automatik zulassen



    Im Programm wird der Interrupt verbunden

    Code
    IDelete inTastePanel;
    CONNECT inTastePanel WITH trTastenPanel;
    ISignalDO \single, doTaste, high, inTastePanel;


    Durch Drücken einer der Tasten soll eigentlich ein Interrupt ausgelöst werden, der in diese Routine springt:


    Allerdings macht er das nicht. Egal wann ich eine der Tasten drücke, es wird keiner der Texte angezeigt. Fehler bekomme ich auch keine. Jemand eine Idee? :/


    Danke schonmal. :)


    Gruß

    Jörn

    In der Theorie sind Theorie und Praxis identisch. In der Praxis nicht.

  • ANZEIGE
  • Hi,

    hast du bei der Definition der belegbaren Tasten angewählt dass diese auch in Automatik gedrückt werden dürfen?

  • Guten Morgen,


    ja, hab ich. Und die zugehörigen Eingänge sind auf WriteEnable.


    Gerade gesehen. Wenn der DefaultUser angemeldet ist und ich eine Taste drücke, kommt die Meldung:


    Sie dürfen diesen Vorgang nicht

    durchführen. Wenden Sie sich an Ihren

    Systemadministrator, falls Sie Zugriff

    benötigen.


    :/


    Gruß

    Jörn

    In der Theorie sind Theorie und Praxis identisch. In der Praxis nicht.

  • Dann musst du dem User wahrscheinlich noch entsprechende Rechte freigeben.

    Bzw. wenn das nicht jeder machen soll dann einen entsprechenden User anlegen.

  • An welcher Stelle deines Programms wird der Interrupt angelegt? Nicht dass der Interrupt zum entsprechenden Zeitpunkt noch nicht aktiv ist.
    Kommst du bis in den Interrupt (mach dir mal ein Flag zum Debuggen rein)

    Und kommt das Signal doTaste richtig?

  • Der Interrupt wird in der INIT angelegt. Die wird bei jedem Start nach PP Main durchlaufen.

    Bis in den Interrupt kommt er nicht. Ich hab auch schon mit dem Signal rumgespielt, indem ich es von high auf edge gestellt habe. Und einen (eigentlich überflüssigen) IWatch hab ich nach dem Anlegen auch eingefügt.


    doTaste3 ist dauerhaft auf 1?! Und damit doTaste auch. Da ist wohl der Knackfrosch der Taste kaputt. X/

    In der Theorie sind Theorie und Praxis identisch. In der Praxis nicht.

  • Hallo,
    wird das Programm ausgeführt, wenn du den Greifer öffnen bzw. schließen willst oder ist es gestoppt?
    Eventuell solltest Du die manuelle Greifer-Ansteuerung in eine Hintergrundtask verlegen.

    Was passiert, wenn irgendjemand auf die P-Tasten drückt, während der Roboter mit dem Teil mit hoher Geschwindigkeit durch die Gegend fährt?

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

  • wird das Programm ausgeführt, wenn du den Greifer öffnen bzw. schließen willst oder ist es gestoppt?
    Eventuell solltest Du die manuelle Greifer-Ansteuerung in eine Hintergrundtask verlegen.

    Da es die Greiferbedienung im Fehlerfall ermöglichen soll, ist es auch möglich, daß das Programm gerade nicht läuft. Das hab ich wohl nicht so ganz durchdacht. Hintergrundtask ist eine gute Idee. Das guck ich mal nach. :thumbup:


    Zitat von Micky

    Was passiert, wenn irgendjemand auf die P-Tasten drückt, während der Roboter mit dem Teil mit hoher Geschwindigkeit durch die Gegend fährt?

    Das war auch mein erster Gedanke. Ich hab es so gelöst und soll eigentlich dafür sorgen, daß das Programm in dem Fall gleich wieder aus der Routine rausspringt:


    Code
    TRAP trTastenPanel
      ! Interrupt für die Bedienung des Greifers durch die Tasten am Panel
      IF (doMechUnitNotMoving = 0) THEN
        TPWrite "Locked - Robot is moving";
      ELSE
        ...
      ENDIF
    ENDTRAP

    In der Theorie sind Theorie und Praxis identisch. In der Praxis nicht.

  • Das wäre auch über eine CrossConnection möglich. Ich zeige nur gerne irgendeine Art von Meldung an, wie in dem Fall Locked - Robot is moving. Sowas kann ich ggf. auch im meinem Logbuch mitloggen. ;)

    In der Theorie sind Theorie und Praxis identisch. In der Praxis nicht.

  • Hallo,

    ich habe gesehen, dass Du den Interrupt als Single definiert hast.

    Da du den Interrupt am Ende der Routine nicht neu verbindest, wird der Interrupt nur ein einziges Mal ausgeführt.


    Da der Interrupt auch ausgelöst wird, wenn das Programm gestoppt ist, wird die Trap Routine nicht ausgeführt. Du solltest SingleSafe verwenden, so dass die Trap-Routine beim Start des Programm ausgeführt wird und der Interrupt wieder neu verbunden wird.

    Alternativ solltest Du auf das Argument Single verzichten, so dass der Interrupt immer aktiv. Du kannst ihn bei Bedarf mit IWatch und ISleep bei Bedarf aktivieren bzw. deaktivieren.

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

  • Ach guck, ohne \Single funktioniert es einwandfrei. Ich hatte die Beschreibung so verstanden, daß das \Single den Interrupt quasi "entprellt". Offensichtlich wird er aber nur ein einziges mal ausgelöst und muss dann (vermutlich) mit ISleep und IWatch erneut aktiviert werden, damit er wieder einmal ausgelöst werden kann?!


    Der Interrupt läuft jetzt. Aber ohne Multitasking mit (semi)static TASK für die Bedienung des Greifers aus dem Hintergrund ist das für mich leider nicht zu gebrauchen. Zudem hat sich herausgestellt, daß auch Taste 2 defekt zu sein scheint. Taste 3 ist dauerhaft auf 1 und Taste 2 wird nie 1. :|


    Vielen Dank an alle. :) :thumbup:

    In der Theorie sind Theorie und Praxis identisch. In der Praxis nicht.

  • Hallo,
    zum Neuverbinden eines Single-Interrupts musst Du den folgenden Code am Ende der Trap Routine einfügen:

    Code
    TRAP trTastenPanel
      ...
      CONNECT inTastePanel WITH trTastenPanel;
      ISignalDO \single, doTaste, high, inTastePanel;
    ENDTRAP

    IWatch und ISleep helfen hier nicht

    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