Interrupt tut nicht am KRC32

  • Moin !


    Langsam kriege ich die Krise mit diesem sch****-Roboter.
    Was mache ich falsch? Der Roboter soll Suchläufe durchführen, stoppen, dann die Palette aufnehmen, oder den Deckel ablegen. Das tut aber nicht. Anbei das Programm.


    Ersma


    Programm:
    ____________________________________________________
    INTERRUPT DECL 10 WHEN NOT E_0B1 DO GEFUNDEN ( )
    INTERRUPT DECL 11 WHEN NOT E_0B2 DO GEFUNDEN ( )
    INTERRUPT DECL 12 WHEN E_0B1 DO VERLOREN ( )



    PTP HOME ; Homeposition anfahren



    LOOP
    ;----------------------
    ;- Hauptprogramm- -
    ;- schleife -
    ;----------------------



    ;----------------------
    ;- Abfrage ob Leer- -
    ;- palette auf Deckel--
    ;- stapelposition und -
    ;- nicht voll beladen -
    ;----------------------
    IF E_2B1 AND (STAPEL<40) THEN
    ;---------------------------
    ;- Deckelabholprogramm -
    ;---------------------------


    WAIT FOR E_0B1 AND E_0B2
    WAIT FOR E_SIG_DECKEL


    PTP P001 C_PTP ;Vorposition nach Home
    PTP P002 C_PTP ;Vorposition vor Deckel holen
    LIN P_DECKEL_HOL C_DIS ;Deckelabholposition


    WAIT FOR NOT E_0B2
    SAUG_AN ( ) ;Deckel aufnehmen
    STAPEL=STAPEL+1


    LIN P003 C_DIS ;Vorposition nach Deckel holen
    PTP P004 C_PTP ;Vorposition vor Deckelablage
    PTP P_START_ABL C_PTP ;Startposition Suchlauf Deckelstapel
    SUCHE_DECKEL ( )
    SAUG_AUS ( ) ;Deckel ablegen


    PTP HOME ; Homeposition anfahren


    ENDIF


    ;----------------------
    ;- Abfrage ob Leer- -
    ;- palette auf Deckel--
    ;- stapelposition und -
    ;- nicht voll beladen -
    ;----------------------
    IF NOT E_2B1 AND E_1B1 AND (STAPEL>=40) THEN
    ;---------------------------
    ;- Leerpalettenholprogramm
    ;---------------------------


    WAIT FOR E_0B1 AND E_0B2


    PTP P101 C_PTP
    PTP P102 C_PTP
    PTP P103 C_PTP
    SUCHE_PALETT ( )
    SAUG_AN ( ) ;Leerpal. aufnehmen


    PTP P104 C_PTP
    SAUG_AUS ( ) ;Leerpal. abgeben


    PTP HOME ; Homeposition anfahren


    ENDIF


    ENDLOOP
    END


    ;---------------------------
    ;- Allgemeine Unterprogr -
    ;---------------------------


    ;----------------------------
    ;- Suchen Deckelstapel -
    ;----------------------------
    DEF SUCHE_DECKEL ( )
    INTERRUPT ON 11 ;Suchinterrupt EIN
    LIN P_END_ABLAGE C_DIS ;Endposition Suchlauf Deckelstapel
    $ADVANCE=0
    INTERRUPT OFF 11 ;SUCHINTERRUPT AUS


    PTP HOME ; Homeposition anfahren
    $ADVANCE=3
    END


    ;----------------------------
    ;- Suchen Leerpalette -
    ;----------------------------
    DEF SUCHE_PALETT ( )
    INTERRUPT ON 10 ;Suchinterrupt EIN
    LIN P_AUFNAHME C_DIS ;Endposition Suchlauf Leerpaletten
    $ADVANCE=0
    INTERRUPT OFF 10 ;SUCHINTERRUPT AUS


    PTP HOME ; Homeposition anfahren
    $ADVANCE=3
    END


    ;----------------------------
    ;- Suchen Deckel/Leer- -
    ;- palette beenden -
    ;----------------------------
    DEF GEFUNDEN ( )
    INTERRUPT OFF 10 ;SUCHINTERRUPT DECKEL AUS
    INTERRUPT OFF 11 ;SUCHINTERRUPT LEERPAL AUS
    $ADVANCE=0
    BRAKE
    RESUME
    END


    ;-------------------------------
    ;- Stoerung Stueck verloren -
    ;-------------------------------
    DEF VERLOREN ( )
    INTERRUPT OFF 12 ;Teil-verloren-INTERRUPT AUS
    $ADVANCE=0
    BRAKE
    HALT
    RESUME
    END



    ;-------------------------------
    ;- Palettensauger einschalten -
    ;-------------------------------
    DEF SAUG_AN ( )
    ;Ventil 1 und 2 ansteuern
    A_SAUG1_EIN=TRUE
    A_SAUG2_EIN=TRUE
    WAIT SEC 0.8
    INTERRUPT ON 12 ;Teil-verloren-INTERRUPT EIN
    END


    ;-------------------------------
    ;- Palettensauger ausschalten -
    ;-------------------------------
    DEF SAUG_AUS ( )
    INTERRUPT OFF 12 ;Teil verloren INTERRUPT AUS
    ;Ventil 1 und 2 ansteuern
    A_SAUG1_EIN=FALSE
    A_SAUG2_EIN=FALSE
    WAIT SEC 0.5
    END

  • Schritt für Schritt zum Roboterprofi!
  • Hmmm, sieht auf den ersten Blick funktionstüchtig aus.
    Setze doch mal vor dem einschalten des Interrupts $ADVANCE=0. Hat bei mir manchmal Wunder bewirkt. Desweiteren solltest du dir in der DEF GEFUNDEN() mal Flags setzen, die du auswerten kannst, ob das Programm überhaupt da rein gelaufen ist.


    Also bei 'ner KRC1 oder 2 müsste es so laufen.

    Greetings, Irrer Polterer!

    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.


    Life is a beta version. Full of bugs and no Manual.

  • Hallo Westermann,


    Wie reagiert der Robbi denn überhaupt??? Ist mir nicht so recht klar geworden. :huh:


    Daher zunächst ein paar allgemeine Verbesserungsvorschläge:


    1. $Advance=0 vor die Such-LIN-Bewegung setzen (nötig!)
    2. die Such-LIN Bewegung braucht kein C_DIS, also weg damit ;)
    3. vor dem INTERRUPT ON xx solltest Du die Interrupt-Bedingung negiert abprüfen, da ein Interrupt durch Flankentriggerung ausgelöst wird.


    Beispiel:
    ...WAIT FOR E_0B1 ; vorher Bedingung negiert abprüfen!INTERRUPT ON 10 ; und dann erst Interrupt einschalten$ADVANCE=0 ; Vorlaufzeiger ausschaltenLIN P_xyz ; und jetzt suchen......


    Hoffe das hilft Dir weiter...


    Hartmut

  • javascript:replaceText(' :danke:', document.postmodify.message);
    Dieses Bild wird in 2 Sekunden mit originaler Qualitaet neu geladen


    Moin !


    Herzlichen Dank für den Tip Hartmut. Jetzt klappts.


    Ersma

  • javascript:replaceText(' :meld:', document.postmodify.message);
    meld


    By the way: Also der Roboter reagierte gar nicht. Der Suchlauf wurde begonnen und am LIN-Punkt beendet. Würde da ein Palettenstapel gelegen haben, täte der Rob versuchen diesen zu zerdrücken. Der Interrupt wurde schlicht nicht ausgelöst. Jetzt findet er die oberste Palette.


    Ersma

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