Kleines Problem beim reseten

  • Guten Abend allerseits,


    ich hab ein kleines Problem mit einem automatischen Reset den ich an einem Robi durchführen möchte. KRC2 mit V5.5.4


    Ich warte im Startprogramm bis sich alle Stationen im Automatikablauf befinden und setzte mir dann einen Merker den ich mittels eines Interrupts überwache.


    Code
    ;*** Ueberwachung der Automation ***;
    ;***********************************;
    INTERRUPT OFF 1
    WAIT FOR m_automatikbetrieb
    GLOBAL INTERRUPT DECL 1 WHEN NOT m_automatikbetrieb DO up_reset()
    INTERRUPT ON 1


    Soweit läuft das dann auch. Wenn der Automatikbetrieb weggeht, wird das up_reset auch aufgerufen.


    Und hier kommt das Problem. Durch den Brake-Befehl bleibt der Roboter stehen. Die nächsten Befehle "liest" er, springt in das Startporgramm zurück und fährt weiter.
    Das Programm wird nicht gestoppt, nicht gecancelt und nicht neu gestartet.
    Stimmt da vielleicht etwas an meiner Denkweise nicht?
    Stimmt der Syntax nicht? Wobei ich den immer so verwende!


    Für eine kurze Gedankenstütze wäre ich sehr dankbar.

    Gruß Roland


    Wie poste ich falsch?

    Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.

    Konrad Adenauer

  • Schritt für Schritt zum Roboterprofi!
  • Hallo,
    was genau verwendest Du immer so?


    Irgendwie verstehe ich nicht wie das funktionieren soll:
    Das Unterprogramm UP_reset wird innerhalb von 'startprogramm' aufgerufen?


    Wenn ja, dann würde mit '...cancel .../startprogramm' das startprogramm abgebrochen,
    in diesem Programm soll dann aber nachher die Zeile
    '..run .../startprogramm' aufgerufen werden, das wird aber gar nicht mehr aufgerufen,
    da das Programm in der Zeile vorher abgebrochen wurde ... :kopfkratz:


    Normalerweise programmiere ich sowas mit brake und anschliessendem resume.
    Sollte schon genügend Beispiele hier im Forum dafür geben.


    Hermann

    Einmal editiert, zuletzt von Hermann ()

  • Hallo Hermann,


    den Gedankengang hatte ich auch schon. Aber das Programm up_reset wird ausserhalb des Startprogramms aufgerufen. Sprich es ist ein eigenständiges Programm.
    Ich kenne auch die Beispiele. Nur ist es so, daß der Roboter nach einem Abfallen des" m_automatikbetrieb" keinesfalls weiterarbeiten darf, sondern definitiv das Programm zurücksetzen und von vorne beginnen muss. Alles Andere würde zu einem sicheren Crash führen.
    Ein Versuch das ganze im Sup zu machen brachte auch nicht den gewünschten Erfolg. Das Programm wurde zwar gestoppt und auch gecancelt aber eben nicht zurückgesetzt. Warum auch immer :nocheck:

    Gruß Roland


    Wie poste ich falsch?

    Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.

    Konrad Adenauer

  • Moment mal,
    nur weil das Unterprogramm in einem eigenständigen File steht
    heisst das nicht, dass es völlig unabhängig vom aufrufenden Programm
    ist.


    Ist es schon so, dass ursprünglich vor dem Aufruf von up_reset das Programm
    'startprogramm' angewählt und gestartet wurde?
    Dann ist das up_reset auf jeden Fall ein Unterprogramm von 'startprogramm'
    und beim Stop des 'startprogramm' wird eben auch das 'up_reset' gestoppt,
    sonst müsste der Roboter jetzt schon 3 unabhängige Prozesse am laufen haben.


    Lösungsvorschlag:


    Das war's dann.
    Durch die Deklaration des Interrupts in der obersten Ebene
    wird bei resume genau in diese oberste Ebene zurückgesprungen.
    In dieser ist nur der Aufruf der 'Haupttask', daher startet das
    Programm (zumindest funktional) von vorne.


    Das sollte doch reichen? Mache ich seit Jahren erfolgreich genau
    in dieser Art und Weise.


    Und im SPS.SUB funktioniert die Methode, auch schon erfolgreich praktiziert.
    Allerdings muss man das Programm dann noch per Start-Taste starten,
    durch das '...Run....' wird es nur neu geladen, aber nicht auch gestartet.
    Manchmal zeigt da allerdings die Oberfläche nicht wirklich den aktuellen
    Zustand des Programms an.


    Hermann

    Einmal editiert, zuletzt von Hermann ()

  • Ich mache das immer über die SPS.sub:

    Code
    IF (bRobotReset==TRUE) THEN
            bRobotReset==FALSE
            CWRITE($CMD,STAT,MODE,"STOP 1")   ; Prog stoppen
            WAIT SEC 0.5
            CWRITE($CMD,STAT,MODE,"RESET 1")    ; Prog ruecksetzen
          ENDIF


    Die boolsche Variable "bRobotReset" würde dann über eine Interrupt-Routine gesetzt werden. Ob man das Programm damit auch wieder starten kann, habe ich nie probiert.


    Gruß HarryH

  • Hallo,
    ein ganz gravierendes Problem in dieser speziellen Lösung ist
    die Wartezeit:


    wait sec 0.5


    sowas hat im SPS.SUB nicht das geringste verloren!!!
    Das sollte man mit einem Timer oder einer Schrittkette
    lösen.


    Hermann

  • Das ist richtig, eine Wartezeit gehört normalerweise nicht in die SPS.sub. In diesem Fall schien mir das aber akzeptabel zu sein, da das Roboterprogramm eh durch diese Programmzeilen gestoppt wird und nichts weiteres passieren kann. Aber im Prinzip gebe ich dir recht :zwink: .


    Gruß HarryH

  • Hallo,


    die Variante im SPS.sub gefällt mir ganz gut, wollte das Rücksetzen im Automatikbetrieb ebenfalls über eine Boolsche Variable relisieren.



    Bei mir ist es auf jeden Fall so, das bei umschalten auf Automatik, automatisch das Cell Programm angewählt wird...,


    Macht das System dann Faxen wenn der Hauptschalter auf Automatik stehen bleibt und zusätzlich über der Variable das Programm zurückgesetzt werden soll??

  • HarryH

    Zitat

    eine Wartezeit gehört normalerweise nicht in die SPS.sub.


    Code
    IF (bRobotReset==TRUE) THEN
            bRobotReset==FALSE
            CWRITE($CMD,STAT,MODE,"STOP 1")   ; Prog stoppen
            WAIT SEC 0.5
            CWRITE($CMD,STAT,MODE,"RESET 1")    ; Prog ruecksetzen
    ENDIF


    Starte einen Timer nach ;Prog stoppen mit dem Startwert -500 und bei TimerFlag==True wird dann ;Prog ruecksetzen durchgefuehrt.
    Dann bleibt der Sub nicht stehen!

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