TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
DU LERNST HIER... |
einige weitere Befehle kennen, um den Roboter zu bewegen und was blockierende und nicht-blockierende Funktionen sind. |
MUSTERBEISPIEL |
from raspisim import * #from raspibrick import * robot = Robot() gear = Gear() gear.setSpeed(40) gear.forward(2000) gear.leftArc(0.3, 5000) gear.rightArc(0.3, 5000) robot.exit() Der Aufruf gear.forward(2000) setzt den Roboter während 2 Sekunden in den Vorwärtszustand. Am Ende dieser Zeit stoppt der Roboter und erst jetzt fährt das Programm mit der nächsten Anweisung weiter. Das Programm blockiert also während 2 Sekunden.
|
In vielen Anwendungen muss der Roboter auch während seinen Bewegungen in der Lage sein, Programmanweisungen auszuführen. Dazu sind die blockierenden Funktionen wie forward(2000) nicht geeignet. Mit nicht-blockierenden Funktionen schreibst du das Musterprogramm wie folgt:
Das Musterbeispiel mit nicht-blockierenden Funktionen sieht dann so aus: from raspisim import * #from raspibrick import * robot = Robot() gear = Gear() gear.setSpeed(40) gear.forward() Tools.delay(2000) gear.leftArc(0.3) Tools.delay(5000) gear.rightArc(0.3) Tools.delay(2000) robot.exit() |
MERKE DIR... |
Du kannst ein Programm mit blockierenden oder nicht-blockierenden Funktionen schreiben. Wenn dein Programm aber während der Bewegung andere Aufgaben erledigen muss, so musst du nicht-blockierende Funktionen verwenden. |
ZUM SELBST LÖSEN |
|
Für Echtzeitsysteme sind blockierende Funktionen gefährlich, da sie leicht ein Programm vollständig blockieren können (man sagt auch, das Programm "hängt"). Dies kann vermieden werden, wenn die Funktion nach einer bestimmten Zeit (timeout genannt) zurückkehrt, auch wenn sie ihre Aufgabe noch nicht erledigt hat. Dieser Ausnahmefall muss dann speziell behandelt werden.
Die Unterscheidung zwischen blockierenden und nicht-blockierenden Funktionen ist von grosser Wichtigkeit weit über die Robotik hinaus. Sie ist aber für Programmieranfänger keineswegs evident und führt sogar für Fortgeschrittene immer wieder zu Schwierigkeiten. Im Zusammenhang mit Echtzeitanwendungen, zu denen auch die Robotikprogramme gehören, werden nicht-blockierende Funktionen oft für einen Zustandswechsel bzw. das Setzen eines neuen Zustands verwendet. Es sind typische Funktionen mit einem Seiteneffekt, denn nach der Rückkehr hat sich ja der Zustand verändert.
Das Programmieren mit Zuständen muss besonders gepflegt werden, denn es ist ein wichtiges Grundkonzept der Informatik. Die Robotik ist ein hervorragend geeignetes Betätigungsfeld für "das Denken in Zuständen".