Submitinterpreter starten, Programm bei Neustart rücksetzten

  • Hallo zusammen,


    ich habe zwei Fragen:


    1. Gibt es eine Möglichkeit in meinem Anwenderprogramm zu prüfen ob der Submitinterpreter läuft? Und kann ich den Submitinterpreter dann auch über das Anwenderprogramm starten?


    2. Ich möchte bei jedem Einschalten (Hauptschalter) des Roboters (KRC2) mein Anwenderprogramm zurücksetzten. Wie unter "Menü/Bearbeiten/Programm zurücksetzen". (Im Thema "Not-Aus" begonnen von "BIM" hat "notime" ja schon eine Möglichkeit aufgezeigt wie man in der SPS.SUB das Programm zurücksetzen kann.) Jetzt fehlt mir nur noch ein "Ereignis" was mir sagt, das die Steuerung neu hochgefahren wurde.


    Gruß Harry

  • Schritt für Schritt zum Roboterprofi!
  • Hallo HarryH


    zu 1.


    der Status des Submit-Interpreters kannst du mit der System-Variablen $PRO_STATE0 abfragen.
    #P_FREE = abgewählt
    #P_ACTIVE = aktiv
    #P_STOP = gestopped
    (#P_RESET = zurückgesetzt)
    (#P_END = ENDE erreicht)


    Den Submit-Interpreter kannst du mit

    Code
    DECL STATE_T STAT
    DECL MODUS_T MODE
    ...
    CWRITE($CMD,STAT,MODE,"RUN 0")


    starten wenn der Submit-Interpreter gestoppt.
    bzw. mit

    Code
    CWRITE($CMD,STAT,MODE,"RUN /R1/SPS()")


    das Programm SPS.SUB


    oder


    Code
    CWRITE($CMD,STAT,MODE,"RUN %S", $PRO_I_O[])


    um das global definierte Submit-Programm in den Submit-Interpreter laden und starten.


    zu 2.


    ich würde es gleich beim aufschalten des Hauptschalters zurücksetzen ($POWER_FAIL).

    Kontrolle ist eine Illusion, denn niemand weiss was als nächstes passiert.

    Einmal editiert, zuletzt von notime ()

  • Hallo,


    mein Vorschlag zu diesem Thema wäre: Den Roboter nach dem Ausschalten im Kaltstart wieder hochfahren lassen (Parametrierung s. KRC 2 läuft nicht mehr hoch). Dann wird das Programm automatisch neu gestartet (wenn in der SPS.SUB aufgerufen). Ich setze im Programm-Anfang der SPS.SUB eine Variable, die mein Anwender-Programm zurücksetzt, nachdem diese Variable geprüft wurde und mein Anwender-Programm erkannt hat, ob der Roboter ausgeschaltet wurde oder nur das Anwender-Programm zurückgesetzt wurde.


    MFG


    PA

  • Hallole


    Kaltstart hat einen Pferdefuss - die Hochlaufzeit erhoeht sich und es kann eventuell eine Windows Anmeldung noetig sein.


    Ich wuerde etwas in der Art versuchen:


    Ersetzen von "wait for not($power_fail)" im sps.sub gleich nach dem loop
    durch:
    while $power_fail
    ausgeschaltet=true
    endwhile
    ; die ganze Sache vergessen, wenn Programm von Hand zurückgesetzt wurde
    ; oder kein Programm angewaehlt ist
    IF (($Pro_state_1==#free) or ($Pro_state_1==#reset)) then
    ausgeschaltet=false
    endif
    if ausgeschaltet then
    ausgeschaltet_trigger=not(ausgeschaltet_trigger)
    endif



    im Hauptprogramm dann:
    def haupt()
    interupt decl 11 when ausgeschaltet_trigger do reset_prg() prio=-1
    interrupt on 11
    mainloop()
    end
    def mainloop()
    loop
    ; hauptprogramm
    endloop
    end
    def reset_prg()
    interrupt off 11
    ausgeschaltet=false ; das Getoogel im sps.sub stoppen
    wait sec 2 ; vorlauftstop
    interrupt on 11
    resume ; reset
    end


    Nachteil: alles , was mann nicht unter userdfined modifications in sps.sub aendert,
    ueberlebt ein betreibssytemupdate nicht - ich wuerde es aber trotzdem so veruchen


    Denkbar waere auch was aehnliches in IR_stopm.src.


    Gruss Stefan

  • Hallo StefanM,


    du verwendest bei der Interrupt Declarierung den Zusatz prio=-1.
    Ich kenn diesen Zusatz nur bei Trigger Anweisungen. Kann mir jemand Erklären wofür dieser Zusatz überhaupt benötigt wird ?


    Außerdem hab ich in einem Programm folgende Zeilen gefunden


    INTERRUPT DECL 10 WHEN $CYCFLAG[30]==FALSE DO VW(#FB_STOP,TRUE)
    INTERRUPT ON 10
    INT10=TRUE


    und kann mit INT10=TRUE nichts anfangen.



    mfg
    Saerdna

  • Hallo Serdna,


    Das mit der Prio ist nicht noetig - gibt es aber. Im Prinzip ist ein Trigger ein Interrupt.

    Bei Triggern ist es so, dass damit die Priorität festgelegt wird. Mit Prio = -1 wird die Prioritaetenvergabe vom Kernsystem vorgenommen.
    Ein bestimmter Bereich der Prioritäten ist frei verfuegbar - damit kann mann zum Beispiel bei gleichzeitigen Ereignissen steuern, welche interruptroutine durchlaufen wird.
    Fuer genaueres muesste ich jetzt in der Doku nachlesen.


    Gruss Stefan

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