Hallo Zusammen,
folgender (vereinfachter) Aufbau:
DEF mainjob(Strecke1:IN,Strecke2:IN,Strecke3:IN)
REAL Strecke1,Strecke2,Strecke3
REAL Strecke[3]
INT I
INTERRUPT DECL 10 WHEN $IN[1]==TRUE DO react(TempStrecke)
Strecke[1]=Strecke1
Strecke[2]=Strecke2
Strecke[3]=Strecke3
FOR I=1 TO 3
WAIT SEC 0
TempStrecke=Strecke[I]
search(TempStrecke)
ENDFOR
END
DEF search(TempStrecke:IN)
REAL TempStrecke
LIN
LIN
LIN ;INTERRUPT löst aus
LIN
END
DEF react(TempStrecke:IN)
REAL TempStrecke
FRAME Temp
BRAKE
Temp.Y=TempStrecke
LIN_REL Temp
RESUME
END
Alles anzeigen
Info: TempStrecke ist in der .dat deklariert, da eine Laufzeitvariable nicht erlaubt ist. Die Unterprogramme und der Interrupt sind lokal.
Ziel: Roboter soll einen Pfad abfahren und abhängig vom Durchlauf I bei Signal eine vorgegebene Strecke fahren und dann ins Hauptprogramm zurückspringen. Die Strecke wird von einer übergeordneten Steuerung übergeben.
Problem: TempStrecke wird anscheinend nicht an das Interruptprogramm weitergegeben.
Ich hoffe es ist verständlich.
Meine Gedanken:
Durch TempStrecke=Strecke nutze ich ja quasi trotzdem eine Laufzeitvariable obwohl es nicht erlaubt ist?!?
Muss ich eventuell irgendwo OUTs statt INs verwenden?
Nutzt der Interrupt den Wert der Variable, den dieser bei der Deklaration des Interrupts besitzt?
Was könnte noch die Ursache sein? Über Hilfe würde ich mich freuen.
Gruß