CWrite Run cell - Programm startet ohne ExtStart?

  • Hallo,


    ich richte gerade mal wieder einen KUKA (KRC 4) ein und um das Hin- und Herschalten zwischen T1 und EXT etwas komfortabler zu gestalten habe ich folgende Routine in sps.sub eingefügt:


    Der Plan war, dass ein von mir in T1 angewähltes Unterprogramm automatisch beendet und dann cell angewählt wird wenn ich in Extern umschalte. Das funktioniert auch soweit. Nur: Wenn ich in den externen Modus umschalte und zuvor ein Programm angewählt hatte startet cell automatisch, obwohl von der SPS definitiv kein Startsignal kommt. Das passiert, unabhängig ob das Programm noch am Anfang stand, pausiert ist oder durchgelaufen ist. Das kann doch nicht so gewollt sein?


    Wenn cell mit cwrite aktiviert wird ohne dass vorher ein Programm angewählt war passiert das nicht, d.h. der Roboter wartet brav auf sein Startsignal; ich habe die Routine erst mal wieder auf den Fall ($PRO_STATE1 == #P_FREE) beschränkt.


    Gibt es eine Möglichkeit, das automatische Abwählen von Programmen 'sicher' zu machen, also zu verhindern dass der Roboter direkt loslegen will?

  • Schritt für Schritt zum Roboterprofi!
  • Frage nach Deinen CWRITE Befehlen auf jeden Fall den Programmstatus ab.


    Pseudocode, keine Gewähr für Korrektheit


    ...STOP
    WAIT FOR ($PRO_STATE1 == #P_STOP)


    ...CANCEL
    WAIT FOR ($PRO_STATE1 == #P_FREE)


    Ansonsten wenn beim Anwählen des CELL noch alle Signale so passen dass der Robi loslegen kann, dann fährt das Cell halt einfach brav los

  • kein WAIT FOR in Submit-Code!


    Pauschal mit Wahlschalter-Umwahl ein Programm abwählen kann recht hinderlich sein beim Debugging, aber das ist deine Entscheidung.


    So geht's jedenfalls ohnehin nicht zuverlässig, da Ab- und Anwahl im Roboter-Interpreter nicht synchron zur Anforderung im Submit-Interpreter erfolgt, von daher ist die Aussage meines Vorredners, dass jeweils der Status geprüft werden muss korrekt, nur die Aufforderung einfach WAIT FOR's einzufügen ist nicht ganz richtig. Du musst im Submit-Interpreter eine ordentliche Schrittkette realisieren. Such mal nach meinen alten Posts, da findest du ein gebrauchsfertiges Beispiel.


    Grundsätzlich:
    Eine Betriebsart-Umwahl, oder das Schliessen & Quittieren von Schutzeinrichtungen darf schon per MRL-Definitionen keinen Start auslösen. Dafür gibt's ja ein schönes Automatik-Extern Signal zum Programm-Start. Prinzipiell kannst du's natürlich auch über das RUN-Kommando machen, aber nicht automatisch sobald der Sicherheitskreis OK ist!

    APT Techniques GmbH<br />Software-Entwicklung für Roboter &amp; SPS.

  • Ich bin ja durchaus immer für Eigeninitiative, aber von meinen Robotern dann doch lieber nicht :genau:


    Jedenfalls hat [wEm]s Tip mich auf den richtigen Weg gebracht; ich habe es jetzt im Prinzip so gelöst:


    Code
    IF ($MODE_OP == #EX) AND ($PRO_STATE==#P_STOP) AND (B_AUTOEX == FALSE) AND (B_SWITCH == FALSE) THEN
    B_SWITCH = TRUE
    CWRITE($CMD,STAT,MODE,"CANCEL 1")
    ENDIF
    
    
    IF ($MODE_OP == #EX) AND ($PRO_STATE==#P_FREE) AND (B_AUTOEX == FALSE) THEN
    CWRITE($CMD,STAT,MODE,"RUN /R1/CELL()")
    B_AUTOEX = TRUE
    ENDIF


    Danke für die Hilfe :)

  • @Apt: Hast ja recht - das mit dem WAIT FOR war recht voreilig reingehackt. Natürlich müsste es so programmiert werden die Ducky es schon gemacht hat.


    Sorry für die Schlampigkeit :mrgreen:

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