(→Beispiel) |
|||
Zeile 142: | Zeile 142: | ||
= Beispiel = | = Beispiel = | ||
Das Zusammenwirken der Steuerbefehle beim Aufbau und der Programmierung soll anhand eines Beispiels aufgezeigt werden. Dabei wird ein Roboter konstruiert, der einer Linie auf dem Boden folgen kann. | Das Zusammenwirken der Steuerbefehle beim Aufbau und der Programmierung soll anhand eines Beispiels aufgezeigt werden. Dabei wird ein Roboter konstruiert, der einer Linie auf dem Boden folgen kann. | ||
− | Hierzu werden nachfolgende Zellen benötigt | + | Hierzu werden nachfolgende Zellen benötigt: |
− | - Stromversorgung | + | |
+ | - '''Stromversorgung''': | ||
Sie versorgt den Roboter mit Energie. Über einen Ein-/Ausschalter kann der Roboter gestartet werden. | Sie versorgt den Roboter mit Energie. Über einen Ein-/Ausschalter kann der Roboter gestartet werden. | ||
− | - Radzelle (2 fach) | + | |
+ | - '''Radzelle''' (2 fach): | ||
Ein mit Motor angetriebenes Rad. | Ein mit Motor angetriebenes Rad. | ||
− | - Logikzelle | + | |
+ | - '''Logikzelle''': | ||
Die Steuerzentrale des Roboters. | Die Steuerzentrale des Roboters. | ||
− | - Stützrad | + | |
+ | - '''Stützrad''': | ||
Wie bei kleinen Modellen üblich, wird zur Abstützung ein rein passives Stützrad eingesetzt. | Wie bei kleinen Modellen üblich, wird zur Abstützung ein rein passives Stützrad eingesetzt. | ||
− | |||
+ | - '''Sensorzelle''': | ||
Mit der Sensorzelle sind zwei bewegliche Photozellen verbunden, über die die Steuerlinie detektiert werden kann. | Mit der Sensorzelle sind zwei bewegliche Photozellen verbunden, über die die Steuerlinie detektiert werden kann. | ||
Für den Aufbau und die Programmierung wird zusätzlich noch eine Ein-/Ausgabeeinheit benötigt. Sie ist gleichzeitig Stromversorgung beim Aufbau und Besitzt einen Master-Anschluss. | Für den Aufbau und die Programmierung wird zusätzlich noch eine Ein-/Ausgabeeinheit benötigt. Sie ist gleichzeitig Stromversorgung beim Aufbau und Besitzt einen Master-Anschluss. | ||
Zeile 158: | Zeile 162: | ||
== Der Aufbau == | == Der Aufbau == | ||
Die Ein-/Ausgabeeinheit wird eingeschaltet und mit dem Befehl | Die Ein-/Ausgabeeinheit wird eingeschaltet und mit dem Befehl | ||
+ | |||
'''''EA Linienbot''''' | '''''EA Linienbot''''' | ||
− | mit einem Namen versehen. | + | |
+ | mit einem Namen versehen. | ||
+ | |||
Dann wird die Stromversorgung angeschlossen. Über | Dann wird die Stromversorgung angeschlossen. Über | ||
+ | |||
'''''neu Strombasis''''' | '''''neu Strombasis''''' | ||
+ | |||
erhält die Stromversorgung ihren Namen. Mit | erhält die Stromversorgung ihren Namen. Mit | ||
+ | |||
'''''zu Strombasis''''' | '''''zu Strombasis''''' | ||
+ | |||
wird diese als Master angegeben. | wird diese als Master angegeben. | ||
+ | |||
Nun kann die linke Radzelle befestigt werden und über | Nun kann die linke Radzelle befestigt werden und über | ||
+ | |||
'''''neu Rad links''''' | '''''neu Rad links''''' | ||
+ | |||
ihren Namen erhalten. Gleichzeitig wird damit festgelegt, dass sich das Rad als Slave mit der Stromversorgung als Master in einem Ring befindet. | ihren Namen erhalten. Gleichzeitig wird damit festgelegt, dass sich das Rad als Slave mit der Stromversorgung als Master in einem Ring befindet. | ||
+ | |||
Dem rechten Rad wird der Name vergeben: | Dem rechten Rad wird der Name vergeben: | ||
+ | |||
'''''neu Rad rechts''''' | '''''neu Rad rechts''''' | ||
+ | |||
Mittig an der Stromversorgung wird nun die Logikzelle gegenüber der Ein-/Ausgabeeinheit angefügt. Auch hier ein Name: | Mittig an der Stromversorgung wird nun die Logikzelle gegenüber der Ein-/Ausgabeeinheit angefügt. Auch hier ein Name: | ||
+ | |||
'''''neu Denkstation''''' | '''''neu Denkstation''''' | ||
+ | |||
'''''zu Denkstation''''' | '''''zu Denkstation''''' | ||
+ | |||
Der letzte Befehl macht die Logikzelle zu einem Master. Dabei wird von der Vorstellung ausgegangen, dass ein Master nur die unmittelbar angrenzenden Zellen als Slave versorgen kann. | Der letzte Befehl macht die Logikzelle zu einem Master. Dabei wird von der Vorstellung ausgegangen, dass ein Master nur die unmittelbar angrenzenden Zellen als Slave versorgen kann. | ||
+ | |||
Das Stützrad wird angebracht: | Das Stützrad wird angebracht: | ||
+ | |||
'''''neu Stützrad''''' | '''''neu Stützrad''''' | ||
+ | |||
Es hat jedoch keine eigenständige Logikfunktion und leitet die Steuerbefehle einfach weiter. Der Befehl wird ignoriert und hätte auch weggelassen werden können. | Es hat jedoch keine eigenständige Logikfunktion und leitet die Steuerbefehle einfach weiter. Der Befehl wird ignoriert und hätte auch weggelassen werden können. | ||
+ | |||
Die Sensorzelle wird nach dem Stützrad in Linie mit der Logikzelle verbunden. | Die Sensorzelle wird nach dem Stützrad in Linie mit der Logikzelle verbunden. | ||
+ | |||
'''''neu Sensor''''' | '''''neu Sensor''''' | ||
+ | |||
Dies geht, da das Stützrad kein Slave bzw. Master sein kann. An der Unterseite der Sensorzelle werden nun die beiden Photozellen angebracht, Die Photozellen 1 links und die Photozellen 2 rechts daneben parallel zu der Radachse. Der Abstand ist etwas schmäler als die Linienbreite zu wählen. Dadurch kann die exakte Positionierung auf der Linie durch das Ansprechen beider Photozellen detektiert werden. Spricht lediglich eine an, so ist entsprechend gegenzulenken. | Dies geht, da das Stützrad kein Slave bzw. Master sein kann. An der Unterseite der Sensorzelle werden nun die beiden Photozellen angebracht, Die Photozellen 1 links und die Photozellen 2 rechts daneben parallel zu der Radachse. Der Abstand ist etwas schmäler als die Linienbreite zu wählen. Dadurch kann die exakte Positionierung auf der Linie durch das Ansprechen beider Photozellen detektiert werden. Spricht lediglich eine an, so ist entsprechend gegenzulenken. | ||
Zeile 184: | Zeile 210: | ||
== Einrichtung der Speicherzellen == | == Einrichtung der Speicherzellen == | ||
Gemäß obiger Sequenz ist die Denkstation aktueller Master. | Gemäß obiger Sequenz ist die Denkstation aktueller Master. | ||
+ | |||
'''''zu Sensor''''' | '''''zu Sensor''''' | ||
+ | |||
bringt uns in den Sensor, so dass dieser programmiert werden kann. | bringt uns in den Sensor, so dass dieser programmiert werden kann. | ||
+ | |||
'''''Elemente''''' | '''''Elemente''''' | ||
+ | |||
liefert eine Übersicht, über die dort vordefinierten Speicherstellen: | liefert eine Übersicht, über die dort vordefinierten Speicherstellen: | ||
+ | |||
Sensor 1 : Photosensor | Sensor 1 : Photosensor | ||
+ | |||
Sensor 1 : Photosensor | Sensor 1 : Photosensor | ||
+ | |||
'''''bezeichne Sensor 1 als Sensor links | '''''bezeichne Sensor 1 als Sensor links | ||
+ | |||
bezeichne Sensor 2 als Sensor rechts''''' | bezeichne Sensor 2 als Sensor rechts''''' | ||
+ | |||
'''''Elemente''''' | '''''Elemente''''' | ||
+ | |||
liefert nun die umbenannten Speicherstellen: | liefert nun die umbenannten Speicherstellen: | ||
+ | |||
Sensor links : Photosensor | Sensor links : Photosensor | ||
+ | |||
Sensor rechts : Photosensor | Sensor rechts : Photosensor | ||
+ | |||
Da hier jetzt nichts mehr zu tun ist, wird auf den vorherigen Master, die Logikzelle positioniert: | Da hier jetzt nichts mehr zu tun ist, wird auf den vorherigen Master, die Logikzelle positioniert: | ||
+ | |||
'''''weg''''' | '''''weg''''' | ||
+ | |||
Es folgt die Antwort: Denkstation | Es folgt die Antwort: Denkstation | ||
+ | |||
Mit | Mit | ||
+ | |||
'''''Gemeinsam Links : Sensor, Sensor links | '''''Gemeinsam Links : Sensor, Sensor links | ||
+ | |||
Gemeinsam Rechts : Sensor, Sensor rechts''''' | Gemeinsam Rechts : Sensor, Sensor rechts''''' | ||
+ | |||
werden die Sensorinformationen der Denkstation zur Verfügung gestellt. | werden die Sensorinformationen der Denkstation zur Verfügung gestellt. | ||
+ | |||
Fürs erste nun weiter zu den Motoren: | Fürs erste nun weiter zu den Motoren: | ||
+ | |||
'''''weg''''' | '''''weg''''' | ||
+ | |||
Es folgt die Antwort: Strombasis | Es folgt die Antwort: Strombasis | ||
+ | |||
'''''zu Rad links''''' | '''''zu Rad links''''' | ||
+ | |||
bringt uns zum einen Motor. | bringt uns zum einen Motor. | ||
+ | |||
'''''Elemente''''' | '''''Elemente''''' | ||
+ | |||
liefert eine Übersicht, über die dort vordefinierten Speicherstellen: | liefert eine Übersicht, über die dort vordefinierten Speicherstellen: | ||
+ | |||
Sollbewegung : Motorstärke | Sollbewegung : Motorstärke | ||
+ | |||
Istbewegung : Motorstärke | Istbewegung : Motorstärke | ||
+ | |||
Der Wertebereich Motorstärke ist dabei definiert als -100 .. 100. Die Namen sollen hier unverändert beibehalten werden. | Der Wertebereich Motorstärke ist dabei definiert als -100 .. 100. Die Namen sollen hier unverändert beibehalten werden. | ||
+ | |||
'''''weg''''' | '''''weg''''' | ||
+ | |||
Es folgt die Antwort: Strombasis | Es folgt die Antwort: Strombasis | ||
+ | |||
Mit | Mit | ||
+ | |||
'''''Gemeinsam Motor links : Rad links, Sollbewegung''''' | '''''Gemeinsam Motor links : Rad links, Sollbewegung''''' | ||
+ | |||
Kann das linke Rad von der Strombasis angesteuert werden. | Kann das linke Rad von der Strombasis angesteuert werden. | ||
− | Da es sich bei den Radzellen um den gleichen Zelltyp handelt, sind auch die gleichen Namen für die Speicherstellen vorprogrammiert | + | |
+ | Da es sich bei den Radzellen um den gleichen Zelltyp handelt, sind auch die gleichen Namen für die Speicherstellen vorprogrammiert: | ||
'''''Gemeinsam Motor rechts : Rad rechts, Sollbewegung''''' | '''''Gemeinsam Motor rechts : Rad rechts, Sollbewegung''''' | ||
+ | |||
Hierüber ist die Steuerung vom rechten Rad der Strombasis bekannt gegeben worden. | Hierüber ist die Steuerung vom rechten Rad der Strombasis bekannt gegeben worden. | ||
− | zu Denkstation | + | |
+ | '''''zu Denkstation''''' | ||
+ | |||
Hierüber wird in die Logikzelle gewechselt. | Hierüber wird in die Logikzelle gewechselt. | ||
+ | |||
'''''Gemeinsam Motor rechts : Strombasis, Motor rechts | '''''Gemeinsam Motor rechts : Strombasis, Motor rechts | ||
+ | |||
Gemeinsam Motor links: Strombasis, Motor links''''' | Gemeinsam Motor links: Strombasis, Motor links''''' | ||
+ | |||
Diese Befehle machen die Motoren der Logikzelle verfügbar. Jede Änderung bei diesen Speicherstellen wird in die betreffende Speicherstelle der Radzelle automatisch übertragen. | Diese Befehle machen die Motoren der Logikzelle verfügbar. Jede Änderung bei diesen Speicherstellen wird in die betreffende Speicherstelle der Radzelle automatisch übertragen. | ||
Zeile 230: | Zeile 297: | ||
Nun müssen in der Logikzelle noch die Zusammenhänge aufgezeigt werden. Wir befinden uns in der Denkstation. | Nun müssen in der Logikzelle noch die Zusammenhänge aufgezeigt werden. Wir befinden uns in der Denkstation. | ||
+ | |||
'''''Elemente''''' | '''''Elemente''''' | ||
+ | |||
liefert eine Übersicht, über die dort vordefinierten Speicherstellen: | liefert eine Übersicht, über die dort vordefinierten Speicherstellen: | ||
+ | |||
Links : Photosensor | Links : Photosensor | ||
+ | |||
Rechts : Photosensor | Rechts : Photosensor | ||
+ | |||
Motor links : Motorstärke | Motor links : Motorstärke | ||
+ | |||
Motor rechts : Motorstärke | Motor rechts : Motorstärke | ||
+ | |||
Photosensor sei definiert als { frei, detektiert } und Motorstärke (-100 .. 100) stellt gleichmäßig die Geschwindigkeit von Rückwärtsfahren (-100) zu Stillstand (0) bis zu Vorwärtsfahren (100) ein. | Photosensor sei definiert als { frei, detektiert } und Motorstärke (-100 .. 100) stellt gleichmäßig die Geschwindigkeit von Rückwärtsfahren (-100) zu Stillstand (0) bis zu Vorwärtsfahren (100) ein. | ||
Nun zu den Zusammenhängen: | Nun zu den Zusammenhängen: | ||
+ | |||
Wenn beide Sensoren ansprechen, fahre ich richtig: | Wenn beide Sensoren ansprechen, fahre ich richtig: | ||
+ | |||
'''''Zusammenhang Links = 6000 = detektiert und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 100 Ende''''' | '''''Zusammenhang Links = 6000 = detektiert und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 100 Ende''''' | ||
+ | |||
Die Gewichte mit 0 tragen nichts für die Berechnung der Anwendbarkeit bei. Wird nur einer der Sensoren angesprochen, liegt das Gesamtgewicht bei 6.000 und damit unterhalb des Schwellwertes von 10.000. Bei der Anwendung des Zusammenhangs werden zwar die Sensoren auf 6.000 eingestellt, die Sensorzelle überschreibt jedoch den Wert mit den neuen Eingangsdaten. Zum Zeitpunkt der Anwendung ist die Linie bereits detektiert. | Die Gewichte mit 0 tragen nichts für die Berechnung der Anwendbarkeit bei. Wird nur einer der Sensoren angesprochen, liegt das Gesamtgewicht bei 6.000 und damit unterhalb des Schwellwertes von 10.000. Bei der Anwendung des Zusammenhangs werden zwar die Sensoren auf 6.000 eingestellt, die Sensorzelle überschreibt jedoch den Wert mit den neuen Eingangsdaten. Zum Zeitpunkt der Anwendung ist die Linie bereits detektiert. | ||
Wenn der linke Sensor anspricht, der rechte jedoch nicht, sollte nach links gesteuert werden: | Wenn der linke Sensor anspricht, der rechte jedoch nicht, sollte nach links gesteuert werden: | ||
+ | |||
'''''Zusammenhang Links = 11000 = detektiert und Rechts = -6000 = detektiert und Motor links = 0 =50 und Motor rechts = 0 = 100 Ende''''' | '''''Zusammenhang Links = 11000 = detektiert und Rechts = -6000 = detektiert und Motor links = 0 =50 und Motor rechts = 0 = 100 Ende''''' | ||
+ | |||
Der linke Sensor würde alleine den Schwellwert übersteigen, trifft jedoch der rechte Sensor auch zu, so werden wieder 6000 Gewichtespunkte abgezogen. Die Regel kann nicht angewendet werden. | Der linke Sensor würde alleine den Schwellwert übersteigen, trifft jedoch der rechte Sensor auch zu, so werden wieder 6000 Gewichtespunkte abgezogen. Die Regel kann nicht angewendet werden. | ||
Die Linkskurve wird durch die unterschiedlichen Geschwindigkeiten erreicht. | Die Linkskurve wird durch die unterschiedlichen Geschwindigkeiten erreicht. | ||
Wenn der rechte Sensor anspricht, der linke jedoch nicht, sollte nach rechts gesteuert werden: | Wenn der rechte Sensor anspricht, der linke jedoch nicht, sollte nach rechts gesteuert werden: | ||
− | '''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 50 Ende'''''Einfach eine andere Art der Berechnung. | + | |
+ | '''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 50 Ende''''' | ||
+ | |||
+ | Einfach eine andere Art der Berechnung. | ||
Wenn kein Sensor anspricht, fahre ich einen Kreis: | Wenn kein Sensor anspricht, fahre ich einen Kreis: | ||
+ | |||
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = frei und Motor links = 0 =60 und Motor rechts = 0 = 30 Ende''''' | '''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = frei und Motor links = 0 =60 und Motor rechts = 0 = 30 Ende''''' | ||
+ | |||
Nach erfolgter Programmierung wird die Ein-/Ausgabeeinheit ausgeschaltet und vom Roboter gelöst. Mit Einschalten der Stromversorgung kann die Fahrt beginnen. | Nach erfolgter Programmierung wird die Ein-/Ausgabeeinheit ausgeschaltet und vom Roboter gelöst. Mit Einschalten der Stromversorgung kann die Fahrt beginnen. |
Version vom 1. August 2008, 20:40 Uhr
Inhaltsverzeichnis
- 1 Elemente zur Beschreibung
- 1.1 Ganze_Zahl
- 1.2 Positive ganze Zahl
- 1.3 Kommazahl
- 1.4 Zahl
- 1.5 Wort
- 1.6 „Zeichenfolge“
- 1.7 Bezeichner
- 1.8 Ausdruck ::= Bezeichner
- 1.9 Ausdruck ::= Ausdruck Ausdruck
- 1.10 Ausdruck ::= Ausdruck „|“ Ausdruck
- 1.11 Ausdruck ::= „(“ Ausdruck „)“
- 1.12 Ausdruck ::= „[“ Ausdruck „]“
- 1.13 Ausdruck ::= Ausdruck „…“
- 2 Die Definitionen einer Zelle
- 2.1 Name ::= Wort …
- 2.2 Zelldefinition ::= [Wertebereich | Speicherstelle | Zusammenhang ] …
- 2.3 Wertebereich ::= „Wertebereich“ WName „=“ ( Aufzählung | Zahlenbereich )
- 2.4 WName ::= Name
- 2.5 Aufzählung ::= „{“ AName [ „,“ AName ] … „}“
- 2.6 AName ::= Name
- 2.7 Zahlenbereich ::= ( Ganze_Zahl „..“ Ganze_Zahl ) | ( Kommazahl „..“ Kommazahl )
- 2.8 Speicherstelle ::= („Element“ EName „:“ WName ) | („Gemeinsam“ EName „:“ Slave „,“ EName)
- 2.9 EName::= Name
- 2.10 Zusammenhang ::= „Zusammenhang“ Elementbeschreibung [ „und“ Elementbeschreibung ] … „Ende“
- 2.11 Elementbeschreibung ::= EName „=“ Gewicht „=“ (Zahlenbereich | Zahl | AName)
- 2.12 Gewicht ::= Ganze_Zahl
- 3 Steuerbefehle
- 4 Beispiel
Elemente zur Beschreibung
Da ich nicht so genau weiß, wie die formale Definition einer syntaktischen Beschreibung aussieht, werden hier die Beschreibungselemente vorgestellt. Hier wird also die Sprache aufgezeigt, mit der in den nachfolgenden Kapiteln die Definitionen einer Zelle oder die Steuerbefehle beschrieben werden.
Zum Schluss gibt es ein Beispiel, wie die Steuerbefehle für den Aufbau und die Programmierung der Roboterzellen verwendet werden können. Für Eilige also bitte hinten mit dem Lesen anfangen. Das davor ist sehr trocken…
Ganze_Zahl
Eine ganze Zahl ist eine positive (1, 2, …) oder negative (-1, -2, …) ganze Zahl oder der Wert 0.
Positive ganze Zahl
Eine positive ganze Zahl ist eine ganze Zahl größer oder gleich 0.
Kommazahl
Eine Kommazahl ist eine Zahl mit einem Komma oder in exponentieller Schreibweise (Zahlentyp Float).
Zahl
Eine Zahl ist eine ganze Zahl oder eine Kommazahl.
Wort
Ein Wort besteht aus einem Buchstaben, gefolgt von beliebig vielen Buchstaben, Zahlen oder bestimmten Sonderzeichen, wie z.B. das „_“. Die anderen zulässigen Sonderzeichen sollen jetzt noch nicht näher ausgeführt werden und gelten als kein Bestandteil eines Wortes mehr. Insbesondere beendet ein Leerzeichen ein Wort. (Sonderzeichen werden bei Bedarf ergänzt.)
„Zeichenfolge“
Die in Klammern gesetzte Zeichenfolge muss vorkommen. Dann natürlich ohne die Anführungszeichen („“).
Bezeichner
Ein Bezeichner ist ein Wort und kennzeichnet das jeweilige syntaktische Element.
Ausdruck ::= Bezeichner
Diese Schreibweise bedeutet: Ein Ausdruck kann ein Bezeichner sein.
Ausdruck ::= Ausdruck Ausdruck
Ein Ausdruck kann eine Folge von Ausdrücken sein. Mit A B wird beschrieben, dass nach dem Ausdruck A der Ausdruck B zutreffen muss.
Ausdruck ::= Ausdruck „|“ Ausdruck
Mit A | B wird beschrieben, dass der Ausdruck entweder A oder B ist. Eine der Alternativen muss jedoch zutreffen.
Ausdruck ::= „(“ Ausdruck „)“
Man darf Ausdrücke klammern, um eine Rangordnung festzulegen. So beschreibt z.B. (A B) | C, dass entweder A B oder C zutreffen, aber nicht A alleine.
Ausdruck ::= „[“ Ausdruck „]“
Beschreibt optionale Elemente. A [B] beschreibt, dass entweder A alleine, oder A gefolgt von B auftreten darf.
Ausdruck ::= Ausdruck „…“
Der Ausdruck darf beliebig oft wiederholt werden. So beschreibt (0 | 1)… die binären Ziffern: 0 oder 1 oder 10 oder 11 oder … Da es mittels der Klammern [] möglich ist, optionale Elemente zu beschreiben, muss bei beliebig oft („…“) das Element mindestens einmal vorkommen. Sonst kann man ja [Ausdruck …] schreiben.
Die Definitionen einer Zelle
Name ::= Wort …
Ein Name besteht aus einem oder mehreren Wörtern. Hier soll gelten, dass zwischen Wörtern beliebig viele Leerzeichen folgen können, bei der Anzeige aber lediglich ein trennendes Leerzeichen ausgegeben wird.
Zelldefinition ::= [Wertebereich | Speicherstelle | Zusammenhang ] …
Eine Zelle enthält beliebig viele (d.h. solange der Speicherplatz ausreicht) Definitionen von Wertebereichen, Speicherstellen oder Zusammenhängen.
Wertebereich ::= „Wertebereich“ WName „=“ ( Aufzählung | Zahlenbereich )
Ein Wertebereich besteht aus einem Namen, dem eine Aufzählung oder ein Zahlenbereich zugeordnet wird.
WName ::= Name
Der Bezeichner eines Wertebereichs. Wertebereiche sind über alle Zellen eines Roboters (Zellverbundes) hinweg gültig.
Aufzählung ::= „{“ AName [ „,“ AName ] … „}“
Eine Aufzählung ist eine Menge (eigentlich Folge) von Namen, die über Kommas getrennt werden. Dem ersten Namen wird einer 0 zugeordnet, dem zweiten eine 1 usw., so dass eine Reihenfolge definiert ist.
AName ::= Name
Ein Name aus der Aufzählung eines Wertebereichs.
Zahlenbereich ::= ( Ganze_Zahl „..“ Ganze_Zahl ) | ( Kommazahl „..“ Kommazahl )
Ein Zahlenbereich besteht aus einer unteren und einer oberen ganzen Zahl. Er kann jedoch auch über eine untere und eine obere Kommazahl definiert werden. Je nach dem, beinhaltet der Zahlenbereich lediglich ganze Zahlen, oder alle darstellbaren Kommazahlen in dem entsprechenden Intervall.
Speicherstelle ::= („Element“ EName „:“ WName ) | („Gemeinsam“ EName „:“ Slave „,“ EName)
Die Speicherstelle erhält einen in der Zelle eindeutigen Namen. Diesem wird in der ersten Alternative ein Speicherbereich zugeordnet, dessen Größe über den Wertebereich festgelegt ist. (Alles ist natürlich vom verfügbaren Speicherplatz der Zelle abhängig.) Bei der zweiten Alternative wird auf eine andere Zelle im aktuellen Ring verwiesen (Beschreibung s.u.) und eine dort bereits verwendete Definition zugrundegelegt. Nun ist es gleichgültig, welche der Zellen die Speicherstelle beschreibt oder von ihr liest: das Betriebssystem sorgt dafür, dass jede Änderung weitergereicht wird. Es ist so, als ob beide auf die selbe Speicherstelle zugreifen würden.
EName::= Name
Der Bezeichner einer Speicherstelle. Die Namen „und“ bzw. „Ende“ sind nicht zulässig.
Zusammenhang ::= „Zusammenhang“ Elementbeschreibung [ „und“ Elementbeschreibung ] … „Ende“
Ein Zusammenhang besteht aus einer oder mehreren Elementbeschreibungen. Zur Vereinfachung für kleine Eingabegeräte kann eine Elementbeschreibung auch mit Return beendet werden, dann promptet das System mit „und“ und man gibt die nächste Elementbeschreibung oder ein „Ende“ ein.
Alle Zusammenhänge werden permanent nacheinander ausgeführt. Wenn ein Zusammenhang ausgeführt wird, dann erfolgt zuerst die Berechnung der Anwendbarkeit: Hierzu wird für jede Elementbeschreibung ein Wert ermittelt. Alle Werte werden zusammenaddiert. Ist das Ergebnis über dem fest eingestellten Schwellwert von 10.000 (man könnte auch einen anderen festen Wert nehmen), so wird der Zusammenhang angewendet. Dabei wird nacheinander jede Elementbeschreibung angewendet.
Elementbeschreibung ::= EName „=“ Gewicht „=“ (Zahlenbereich | Zahl | AName)
Der Wert einer Elementbeschreibung ist das Gewicht, sofern die benannte Speicherstelle einen Wert innerhalb des angegebenen Zahlenbereichs besitzt, oder gleich der angegebenen Zahl bzw. des angegebenen Namens der Aufzählung ist. Andernfalls ist der Wert gleich 0. Die Anwendung einer Elementbeschreibung setzt die Speicherstelle auf die angegebene Zahl oder den Namen der Aufzählung bzw. die Mitte vom Zahlenbereich.
Gewicht ::= Ganze_Zahl
Eine positive Zahl befürwortet die Anwendung eines Zusammenhangs, bei 0 hat der aktuelle Wert der Speicherstelle keine Bedeutung für die Prüfung der Anwendbarkeit und ein negativer Wert behindert die Anwendung des Zusammenhangs.
Steuerbefehle
Nachfolgend sind die für die Ein-/Ausgabeeinheit zur Programmierung der Zellen erforderlichen Befehle zusammengestellt.
Aktueller Ring
Ein Ring besteht aus mehreren logisch unmittelbar miteinander verbundenen Zellen. Dabei ist eine Zelle ein Master, die anderen Zellen sind Slaves. Ein Slave kann gleichzeitig auch für einen anderen Ring ein Master sein. Der kleinste Ring besteht nur aus dem Master. Eine Zelle kann höchstens einmal Master und einmal Slave sein. Der aktuelle Ring ist ein Ring, der gerade betrachtet wird.
Zellenname_vergeben ::= „neu“ Slave
Im aktuellen Ring wird der zuletzt neu hinzugefügten Zelle ein Name vergeben. Eine Zelle mit einem Namen gilt nicht mehr als neu hinzugefügt. Der Name ist auf den Ring beschränkt.
Slave ::= Name
Der Name einer Zelle innerhalb eines Rings. Der Name ist in dem Ring eindeutig zu wählen.
Ring_wechseln ::= „zu“ Slave
Der Slave im aktuellen Ring wird zum neuen Steuerelement. Der Ring, für den er der Master ist, wird zum aktuellen Ring. Seine Zelldefinitionen können nun erstellt bzw. geändert werden. Das System antwortet mit dem Namen des Masters im aktuellen Ring. Dies ist sein Slave-Name, also der angegebene Name nach „zu“. Kann der Wechsel nicht erfolgen, so antwortet der alte Master mit seinem Namen. Die Ein-/Ausgabeeinheit hat einen eigenen Namen.
Name_der_EA ::= „EA“ Name
Der Name der Ein-/Ausgabeeinheit wird auf den angegebenen Namen gesetzt. Die Ein-/Ausgabeeinheit ist immer ein Master, an dem die neuen Zellen nach und nach zu einem Zellverbund (Roboter) zusammengeschaltet werden.
Zurückgehen ::= „weg“
Der Master im aktuellen Ring ist Slave für einen anderen Ring. Dieser Ring wird zum aktuellen Ring. Das System antwortet mit dem Namen des neuen Masters.
umbenennen ::= „bezeichne“ EName „als“ EName
Die Speicherstelle EName erhält die neue Bezeichnung nach dem Schlüsselwort „als“.
auflisten ::= „Elemente“ | „Zusammenhänge“
Die Speicherstellen bzw. Zusammenhänge des Masters im aktuellen Ring werden aufgelistet.
Beispiel
Das Zusammenwirken der Steuerbefehle beim Aufbau und der Programmierung soll anhand eines Beispiels aufgezeigt werden. Dabei wird ein Roboter konstruiert, der einer Linie auf dem Boden folgen kann. Hierzu werden nachfolgende Zellen benötigt:
- Stromversorgung: Sie versorgt den Roboter mit Energie. Über einen Ein-/Ausschalter kann der Roboter gestartet werden.
- Radzelle (2 fach): Ein mit Motor angetriebenes Rad.
- Logikzelle: Die Steuerzentrale des Roboters.
- Stützrad: Wie bei kleinen Modellen üblich, wird zur Abstützung ein rein passives Stützrad eingesetzt.
- Sensorzelle: Mit der Sensorzelle sind zwei bewegliche Photozellen verbunden, über die die Steuerlinie detektiert werden kann. Für den Aufbau und die Programmierung wird zusätzlich noch eine Ein-/Ausgabeeinheit benötigt. Sie ist gleichzeitig Stromversorgung beim Aufbau und Besitzt einen Master-Anschluss.
Der Aufbau
Die Ein-/Ausgabeeinheit wird eingeschaltet und mit dem Befehl
EA Linienbot
mit einem Namen versehen.
Dann wird die Stromversorgung angeschlossen. Über
neu Strombasis
erhält die Stromversorgung ihren Namen. Mit
zu Strombasis
wird diese als Master angegeben.
Nun kann die linke Radzelle befestigt werden und über
neu Rad links
ihren Namen erhalten. Gleichzeitig wird damit festgelegt, dass sich das Rad als Slave mit der Stromversorgung als Master in einem Ring befindet.
Dem rechten Rad wird der Name vergeben:
neu Rad rechts
Mittig an der Stromversorgung wird nun die Logikzelle gegenüber der Ein-/Ausgabeeinheit angefügt. Auch hier ein Name:
neu Denkstation
zu Denkstation
Der letzte Befehl macht die Logikzelle zu einem Master. Dabei wird von der Vorstellung ausgegangen, dass ein Master nur die unmittelbar angrenzenden Zellen als Slave versorgen kann.
Das Stützrad wird angebracht:
neu Stützrad
Es hat jedoch keine eigenständige Logikfunktion und leitet die Steuerbefehle einfach weiter. Der Befehl wird ignoriert und hätte auch weggelassen werden können.
Die Sensorzelle wird nach dem Stützrad in Linie mit der Logikzelle verbunden.
neu Sensor
Dies geht, da das Stützrad kein Slave bzw. Master sein kann. An der Unterseite der Sensorzelle werden nun die beiden Photozellen angebracht, Die Photozellen 1 links und die Photozellen 2 rechts daneben parallel zu der Radachse. Der Abstand ist etwas schmäler als die Linienbreite zu wählen. Dadurch kann die exakte Positionierung auf der Linie durch das Ansprechen beider Photozellen detektiert werden. Spricht lediglich eine an, so ist entsprechend gegenzulenken.
Nun ist der Roboter aufgebaut und kann programmiert werden.
Einrichtung der Speicherzellen
Gemäß obiger Sequenz ist die Denkstation aktueller Master.
zu Sensor
bringt uns in den Sensor, so dass dieser programmiert werden kann.
Elemente
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:
Sensor 1 : Photosensor
Sensor 1 : Photosensor
bezeichne Sensor 1 als Sensor links
bezeichne Sensor 2 als Sensor rechts
Elemente
liefert nun die umbenannten Speicherstellen:
Sensor links : Photosensor
Sensor rechts : Photosensor
Da hier jetzt nichts mehr zu tun ist, wird auf den vorherigen Master, die Logikzelle positioniert:
weg
Es folgt die Antwort: Denkstation
Mit
Gemeinsam Links : Sensor, Sensor links
Gemeinsam Rechts : Sensor, Sensor rechts
werden die Sensorinformationen der Denkstation zur Verfügung gestellt.
Fürs erste nun weiter zu den Motoren:
weg
Es folgt die Antwort: Strombasis
zu Rad links
bringt uns zum einen Motor.
Elemente
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:
Sollbewegung : Motorstärke
Istbewegung : Motorstärke
Der Wertebereich Motorstärke ist dabei definiert als -100 .. 100. Die Namen sollen hier unverändert beibehalten werden.
weg
Es folgt die Antwort: Strombasis
Mit
Gemeinsam Motor links : Rad links, Sollbewegung
Kann das linke Rad von der Strombasis angesteuert werden.
Da es sich bei den Radzellen um den gleichen Zelltyp handelt, sind auch die gleichen Namen für die Speicherstellen vorprogrammiert: Gemeinsam Motor rechts : Rad rechts, Sollbewegung
Hierüber ist die Steuerung vom rechten Rad der Strombasis bekannt gegeben worden.
zu Denkstation
Hierüber wird in die Logikzelle gewechselt.
Gemeinsam Motor rechts : Strombasis, Motor rechts
Gemeinsam Motor links: Strombasis, Motor links
Diese Befehle machen die Motoren der Logikzelle verfügbar. Jede Änderung bei diesen Speicherstellen wird in die betreffende Speicherstelle der Radzelle automatisch übertragen.
Die Programmierung
Nun müssen in der Logikzelle noch die Zusammenhänge aufgezeigt werden. Wir befinden uns in der Denkstation.
Elemente
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:
Links : Photosensor
Rechts : Photosensor
Motor links : Motorstärke
Motor rechts : Motorstärke
Photosensor sei definiert als { frei, detektiert } und Motorstärke (-100 .. 100) stellt gleichmäßig die Geschwindigkeit von Rückwärtsfahren (-100) zu Stillstand (0) bis zu Vorwärtsfahren (100) ein.
Nun zu den Zusammenhängen:
Wenn beide Sensoren ansprechen, fahre ich richtig:
Zusammenhang Links = 6000 = detektiert und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 100 Ende
Die Gewichte mit 0 tragen nichts für die Berechnung der Anwendbarkeit bei. Wird nur einer der Sensoren angesprochen, liegt das Gesamtgewicht bei 6.000 und damit unterhalb des Schwellwertes von 10.000. Bei der Anwendung des Zusammenhangs werden zwar die Sensoren auf 6.000 eingestellt, die Sensorzelle überschreibt jedoch den Wert mit den neuen Eingangsdaten. Zum Zeitpunkt der Anwendung ist die Linie bereits detektiert.
Wenn der linke Sensor anspricht, der rechte jedoch nicht, sollte nach links gesteuert werden:
Zusammenhang Links = 11000 = detektiert und Rechts = -6000 = detektiert und Motor links = 0 =50 und Motor rechts = 0 = 100 Ende
Der linke Sensor würde alleine den Schwellwert übersteigen, trifft jedoch der rechte Sensor auch zu, so werden wieder 6000 Gewichtespunkte abgezogen. Die Regel kann nicht angewendet werden. Die Linkskurve wird durch die unterschiedlichen Geschwindigkeiten erreicht.
Wenn der rechte Sensor anspricht, der linke jedoch nicht, sollte nach rechts gesteuert werden:
Zusammenhang Links = 6000 = frei und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 50 Ende
Einfach eine andere Art der Berechnung.
Wenn kein Sensor anspricht, fahre ich einen Kreis:
Zusammenhang Links = 6000 = frei und Rechts = 6000 = frei und Motor links = 0 =60 und Motor rechts = 0 = 30 Ende
Nach erfolgter Programmierung wird die Ein-/Ausgabeeinheit ausgeschaltet und vom Roboter gelöst. Mit Einschalten der Stromversorgung kann die Fahrt beginnen.