Schrittkette

Beispiel zum Schrittkettentutorial, aber ohne Plutonium

 

Kein vollständiger Beispielcode. Code wurde von mir nicht getestet. Es fehlen zudem die Unterprogramme die verwendet werden und es sind nicht alle Variablen deklariert. Du könntest das besser schreiben? Dann schicks an webmaster@roboterszene.de und es wird hier mit veröffentlicht.

 

Code im DAT File:

-----------------------------------------------------------------------------------------------------------------------------------------

GLOBAL ENUM ROB_STATES IstInWarten, FahreWarten, FahreAblegen, FahreAufnehmen, OeffneGreifer, SchliesseGreifer
DECL GLOBAL ROB_STATES CURRENT_ROB_STATE=#IstInWarten

-----------------------------------------------------------------------------------------------------------------------------------------

 

Code im SRC File:

-----------------------------------------------------------------------------------------------------------------------------------------

GLOBAL DEF MAIN()
 
  WHILE($IN[100])  ;solange Signal 100 ansteht wird das Programm wiederholt
    SWITCH CURRENT_ROB_STATE


      CASE #IstInWarten

        IF (GripperHasPart) THEN ;Wenn Teil gegriffen

          CURRENT_ROB_STATE = #FahreAblegen ;Naechsten Zustand setzen

        ELSE

          IF(NOT GripperHasPart) ;Wenn kein Teil gegriffen

            CURRENT_ROB_STATE = #FahreAufnehmen ;Naechsten Zustand setzen

          ENDIF

        ENDIF    

 
      CASE #
FahreWarten
       
MoveToWait()
        CURRENT_ROB_STATE = #IstInWarten ;Naechsten Zustand setzen
    
      CASE #
FahreAblegen
        MoveToPlace()
        CURRENT_ROB_STATE = #OeffneGreifer ;Naechsten Zustand setzen
 
      CASE #FahreAufnehmen
        IF(Z1Ready)THEN ;Je nachdem wo etwas liegt, dieses abholen. Prioritaet: 1 dann 2 dann 3

          MoveToZ1()

        ELSE

          IF(Z2Ready)

            MoveToZ2()

          ELSE

            IF(Z3Ready)

              MoveToZ3()

            ENDIF

          ENDIF

        ENDIF
        CURRENT_ROB_STATE = #SchliesseGreifer ;Naechsten Zustand setzen
 
      CASE #
OeffneGreifer
          OpenGripper()
          CURRENT_ROB_STATE = #
FahreWarten ;Naechsten Zustand setzen
        ENDIF

      CASE #
SchliesseGreifer

        CloseGripper()
        CURRENT_ROB_STATE = #
FahreWarten  ;Naechsten Zustand setzen
    ENDSWITCH

 

  ENDWHILE
END

-----------------------------------------------------------------------------------------------------------------------------------------