Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Rasenmaehroboter Test

 
(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
 
  
 +
- '''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

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.


LiFePO4 Speicher Test