<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ZellRobi</id>
		<title>RN-Wissen.de - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=ZellRobi"/>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Spezial:Beitr%C3%A4ge/ZellRobi"/>
		<updated>2026-04-12T06:12:46Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=14046</id>
		<title>Roboterzellen: Syntax</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=14046"/>
				<updated>2008-10-04T14:32:31Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Steuerbefehle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Elemente zur Beschreibung =&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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…&lt;br /&gt;
== Ganze_Zahl ==&lt;br /&gt;
Eine ganze Zahl ist eine positive (1, 2, …) oder negative (-1, -2, …) ganze Zahl oder der Wert 0.&lt;br /&gt;
== Positive ganze Zahl ==&lt;br /&gt;
Eine positive ganze Zahl ist eine ganze Zahl größer oder gleich 0.&lt;br /&gt;
&lt;br /&gt;
== Kommazahl ==&lt;br /&gt;
Eine Kommazahl ist eine Zahl mit einem Komma oder in exponentieller Schreibweise (Zahlentyp Float).&lt;br /&gt;
&lt;br /&gt;
== Zahl ==&lt;br /&gt;
&lt;br /&gt;
Eine Zahl ist eine ganze Zahl oder eine Kommazahl. &lt;br /&gt;
&lt;br /&gt;
== Wort ==&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
== „Zeichenfolge“ ==&lt;br /&gt;
&lt;br /&gt;
Die in Klammern gesetzte Zeichenfolge muss vorkommen.  Dann natürlich ohne die Anführungszeichen („“).&lt;br /&gt;
&lt;br /&gt;
== Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Ein Bezeichner ist ein Wort und kennzeichnet das jeweilige syntaktische Element.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Diese Schreibweise bedeutet: Ein Ausdruck kann ein Bezeichner sein.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck kann eine Folge von Ausdrücken sein. Mit A B wird beschrieben, dass nach dem Ausdruck A der Ausdruck B zutreffen muss.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „|“ Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Mit A | B wird beschrieben, dass der Ausdruck entweder A oder B ist. Eine der Alternativen muss jedoch zutreffen.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „(“ Ausdruck „)“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „[“ Ausdruck „]“ ==&lt;br /&gt;
&lt;br /&gt;
Beschreibt optionale Elemente. A [B] beschreibt, dass entweder A alleine, oder A gefolgt von B auftreten darf.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „…“ ==&lt;br /&gt;
Der Ausdruck darf beliebig oft wiederholt werden. So beschreibt (0 | 1)… die binären Ziffern: 0 oder 1 oder 10 oder 11 oder …&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Die Definitionen einer Zelle =&lt;br /&gt;
&lt;br /&gt;
== Name ::= Wort … ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zelldefinition ::= [Wertebereich | Speicherstelle | Zusammenhang ] … ==&lt;br /&gt;
&lt;br /&gt;
Eine Zelle enthält beliebig viele (d.h. solange der Speicherplatz ausreicht) Definitionen von Wertebereichen, Speicherstellen oder Zusammenhängen.&lt;br /&gt;
&lt;br /&gt;
== Wertebereich ::= „Wertebereich“ WName „=“ ( Aufzählung | Zahlenbereich ) ==&lt;br /&gt;
&lt;br /&gt;
Ein Wertebereich besteht aus einem Namen, dem eine Aufzählung oder ein Zahlenbereich zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
== WName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner eines Wertebereichs. Wertebereiche sind über alle Zellen eines Roboters (Zellverbundes) hinweg gültig. &lt;br /&gt;
&lt;br /&gt;
== Aufzählung  ::= „{“ AName [ „,“ AName ] … „}“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== AName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Ein Name aus der Aufzählung eines Wertebereichs. &lt;br /&gt;
&lt;br /&gt;
== Zahlenbereich ::= ( Ganze_Zahl  „..“ Ganze_Zahl  ) | ( Kommazahl „..“ Kommazahl ) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Speicherstelle ::= 	(„Element“ EName  „:“ WName ) | („Gemeinsam“ EName  „:“ Slave „,“ EName) ==&lt;br /&gt;
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.)&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== EName::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner einer Speicherstelle. Die Namen „und“ bzw. „Ende“ sind nicht zulässig.&lt;br /&gt;
&lt;br /&gt;
== Zusammenhang  ::= „Zusammenhang“ Elementbeschreibung  [ „und“ Elementbeschreibung  ] … „Ende“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Elementbeschreibung  ::= EName „=“ Gewicht „=“ (Zahlenbereich | AName | Term) ==&lt;br /&gt;
Der Wert einer Elementbeschreibung ist das Gewicht, sofern die benannte Speicherstelle einen Wert innerhalb des angegebenen Zahlenbereichs besitzt, dem angegebenen Namen der Aufzählung, oder dem Ergebnis der Berechnung des Terms entspricht. Andernfalls ist der Wert gleich 0.&lt;br /&gt;
Die Anwendung einer Elementbeschreibung setzt die Speicherstelle auf die angegebene Zahl oder den Namen der Aufzählung bzw. die Mitte vom Zahlenbereich. Der Term wird nur einmal berechnet, so dass es zu keiner Verfälschung vom Ergebnis kommen kann.&lt;br /&gt;
&lt;br /&gt;
== Term ::= VzZahl | &amp;quot;(&amp;quot; Term &amp;quot;)&amp;quot; | PlusMinus | MalDiv ==&lt;br /&gt;
Dert Term ist eine vorzeichenbehaftete Zahl oder ein geklammerter Term, eine Addition bzw. Subtraktion bzw. Miltiplikation oder Division.&lt;br /&gt;
&lt;br /&gt;
== VzZahl ::= Zahl | [&amp;quot;-&amp;quot;] EName ==&lt;br /&gt;
Eine vorzeichenbehaftete Zahl ist eine Zahl (die ja auch ein vorangesteltes &amp;quot;-&amp;quot; haben kann), oder der Name einer Speicherstelle mit ggf. einem vorangestellten Minuszeichen.&lt;br /&gt;
&lt;br /&gt;
== PlusMinus ::= ( Term &amp;quot;+&amp;quot; Term ) | ( Term &amp;quot;-&amp;quot; Term ) ==&lt;br /&gt;
Hier können Additionen bzw. Subtraktionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== MalDiv ::= ( Term &amp;quot;*&amp;quot; Term ) | ( Term &amp;quot;/&amp;quot; Term ) ==&lt;br /&gt;
Hier können Multiplikationen bzw. Divisionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Gewicht ::= Ganze_Zahl ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
= Steuerbefehle =&lt;br /&gt;
Nachfolgend sind die für die Ein-/Ausgabeeinheit zur Programmierung der Zellen erforderlichen Befehle zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Ring ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Der aktuelle Ring ist ein Ring, der gerade betrachtet wird.&lt;br /&gt;
&lt;br /&gt;
== Zellenname_vergeben ::= „neu“ Slave ==&lt;br /&gt;
 &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
== Slave ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Name einer Zelle innerhalb eines Rings. Der Name ist in dem Ring eindeutig zu wählen.&lt;br /&gt;
&lt;br /&gt;
== Ring_wechseln ::= „zu“ Slave ==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Die Ein-/Ausgabeeinheit hat einen eigenen Namen.&lt;br /&gt;
&lt;br /&gt;
== Name_der_EA ::= „EA“ Name ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zurückgehen ::= „weg“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== umbenennen ::= „bezeichne“ Name  „als“ Name  ==&lt;br /&gt;
 &lt;br /&gt;
Name bezeichnet eine Speicherstelle, einen Wertebereich oder einen Aufzählungsnamen. Dieser wird in den neuen Namen umbenannt.&lt;br /&gt;
&lt;br /&gt;
== löschen ::= „lösche“ Name ==&lt;br /&gt;
 &lt;br /&gt;
Name bezeichnet eine Speicherstelle, einen Wertebereich oder einen Aufzählungsnamen. Dieser wird gelöscht.&lt;br /&gt;
&lt;br /&gt;
== auflisten  ::= „Elemente“ | „Zusammenhänge“ ==&lt;br /&gt;
	&lt;br /&gt;
Die Speicherstellen bzw. Zusammenhänge des Masters im aktuellen Ring werden aufgelistet.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
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.&lt;br /&gt;
Hierzu werden nachfolgende Zellen benötigt:&lt;br /&gt;
&lt;br /&gt;
- '''Stromversorgung''':&lt;br /&gt;
Sie versorgt den Roboter mit Energie. Über einen Ein-/Ausschalter kann der Roboter gestartet werden.&lt;br /&gt;
&lt;br /&gt;
- '''Radzelle''' (2 fach):&lt;br /&gt;
Ein mit Motor angetriebenes Rad.&lt;br /&gt;
&lt;br /&gt;
- '''Logikzelle''':&lt;br /&gt;
Die Steuerzentrale des Roboters.&lt;br /&gt;
&lt;br /&gt;
- '''Stützrad''':&lt;br /&gt;
Wie bei kleinen Modellen üblich, wird zur Abstützung ein rein passives Stützrad eingesetzt.&lt;br /&gt;
&lt;br /&gt;
- '''Sensorzelle''':&lt;br /&gt;
Mit der Sensorzelle sind zwei bewegliche Photozellen verbunden, über die die Steuerlinie detektiert werden kann.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Der Aufbau ==&lt;br /&gt;
Die Ein-/Ausgabeeinheit wird eingeschaltet und mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
'''''EA   Linienbot'''''&lt;br /&gt;
&lt;br /&gt;
mit einem Namen versehen. &lt;br /&gt;
 &lt;br /&gt;
Dann wird die Stromversorgung angeschlossen. Über&lt;br /&gt;
&lt;br /&gt;
'''''neu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
erhält die Stromversorgung ihren Namen. Mit&lt;br /&gt;
&lt;br /&gt;
'''''zu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
wird diese als Master angegeben.&lt;br /&gt;
&lt;br /&gt;
Nun kann die linke Radzelle befestigt werden und über&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
ihren Namen erhalten. Gleichzeitig wird damit festgelegt, dass sich das Rad als Slave mit der Stromversorgung als Master in einem Ring befindet. &lt;br /&gt;
&lt;br /&gt;
Dem rechten Rad wird der Name vergeben:&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad rechts'''''&lt;br /&gt;
&lt;br /&gt;
Mittig an der Stromversorgung wird nun die Logikzelle gegenüber der Ein-/Ausgabeeinheit angefügt. Auch hier ein Name:&lt;br /&gt;
&lt;br /&gt;
'''''neu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Das Stützrad wird angebracht:&lt;br /&gt;
&lt;br /&gt;
'''''neu Stützrad'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Die Sensorzelle wird nach dem Stützrad in Linie mit der Logikzelle verbunden.&lt;br /&gt;
&lt;br /&gt;
'''''neu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Nun ist der Roboter aufgebaut und kann programmiert werden.&lt;br /&gt;
== Einrichtung der Speicherzellen ==&lt;br /&gt;
Gemäß obiger Sequenz ist die Denkstation aktueller Master.&lt;br /&gt;
&lt;br /&gt;
'''''zu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns in den Sensor, so dass dieser programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
'''''bezeichne Sensor 1 als Sensor links&lt;br /&gt;
&lt;br /&gt;
bezeichne Sensor 2 als Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert nun die umbenannten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Da hier jetzt nichts mehr zu tun ist, wird auf den vorherigen Master, die Logikzelle positioniert:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Denkstation&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Links : Sensor, Sensor links&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Rechts : Sensor, Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
werden die Sensorinformationen der Denkstation zur Verfügung gestellt.&lt;br /&gt;
&lt;br /&gt;
Fürs erste nun weiter zu den Motoren:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
'''''zu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns zum einen Motor.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sollbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Istbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich Motorstärke ist dabei definiert als -100 .. 100. Die Namen sollen hier unverändert beibehalten werden.&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor links : Rad links, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Kann das linke Rad von der Strombasis angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Da es sich bei den Radzellen um den gleichen Zelltyp handelt, sind auch die gleichen Namen für die Speicherstellen vorprogrammiert:&lt;br /&gt;
'''''Gemeinsam Motor rechts : Rad rechts, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber ist die Steuerung vom rechten Rad der Strombasis bekannt gegeben worden.&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber wird in die Logikzelle gewechselt.&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor rechts : Strombasis, Motor rechts&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Motor links: Strombasis, Motor links'''''&lt;br /&gt;
&lt;br /&gt;
Diese Befehle machen die Motoren der Logikzelle verfügbar. Jede Änderung bei diesen Speicherstellen wird in die betreffende Speicherstelle der Radzelle automatisch übertragen.&lt;br /&gt;
&lt;br /&gt;
== Die Programmierung ==&lt;br /&gt;
&lt;br /&gt;
Nun müssen in der Logikzelle noch die Zusammenhänge aufgezeigt werden. Wir befinden uns in der Denkstation.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Motor links : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Motor rechts : Motorstärke&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nun zu den Zusammenhängen:&lt;br /&gt;
&lt;br /&gt;
Wenn beide Sensoren ansprechen, fahre ich richtig:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = detektiert und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wenn der linke Sensor anspricht, der rechte jedoch nicht, sollte nach links gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 11000 = detektiert und Rechts = -6000 = detektiert und Motor links = 0 =50 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Die Linkskurve wird durch die unterschiedlichen Geschwindigkeiten erreicht.&lt;br /&gt;
&lt;br /&gt;
Wenn der rechte Sensor anspricht, der linke jedoch nicht, sollte nach rechts gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 50 Ende'''''&lt;br /&gt;
&lt;br /&gt;
Einfach eine andere Art der Berechnung.&lt;br /&gt;
&lt;br /&gt;
Wenn kein Sensor anspricht, fahre ich einen Kreis:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = frei und Motor links = 0 =60 und Motor rechts = 0 = 30 Ende'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Programmierung wird die Ein-/Ausgabeeinheit ausgeschaltet und vom Roboter gelöst. Mit Einschalten der Stromversorgung kann die Fahrt beginnen.&lt;br /&gt;
&lt;br /&gt;
= Verweise  =&lt;br /&gt;
Ein Prototyp für die Programmierung auf Basis einer C-Control Pro ist unter [[Roboterzellen: Programmierung C-Control Pro]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
= Quellen  =&lt;br /&gt;
&lt;br /&gt;
= Autor  =&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 11:19, 2. Aug 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=14045</id>
		<title>Roboterzellen: Syntax</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=14045"/>
				<updated>2008-10-04T14:31:08Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* umbenennen ::= „bezeichne“ EName  „als“ EName */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Elemente zur Beschreibung =&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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…&lt;br /&gt;
== Ganze_Zahl ==&lt;br /&gt;
Eine ganze Zahl ist eine positive (1, 2, …) oder negative (-1, -2, …) ganze Zahl oder der Wert 0.&lt;br /&gt;
== Positive ganze Zahl ==&lt;br /&gt;
Eine positive ganze Zahl ist eine ganze Zahl größer oder gleich 0.&lt;br /&gt;
&lt;br /&gt;
== Kommazahl ==&lt;br /&gt;
Eine Kommazahl ist eine Zahl mit einem Komma oder in exponentieller Schreibweise (Zahlentyp Float).&lt;br /&gt;
&lt;br /&gt;
== Zahl ==&lt;br /&gt;
&lt;br /&gt;
Eine Zahl ist eine ganze Zahl oder eine Kommazahl. &lt;br /&gt;
&lt;br /&gt;
== Wort ==&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
== „Zeichenfolge“ ==&lt;br /&gt;
&lt;br /&gt;
Die in Klammern gesetzte Zeichenfolge muss vorkommen.  Dann natürlich ohne die Anführungszeichen („“).&lt;br /&gt;
&lt;br /&gt;
== Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Ein Bezeichner ist ein Wort und kennzeichnet das jeweilige syntaktische Element.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Diese Schreibweise bedeutet: Ein Ausdruck kann ein Bezeichner sein.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck kann eine Folge von Ausdrücken sein. Mit A B wird beschrieben, dass nach dem Ausdruck A der Ausdruck B zutreffen muss.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „|“ Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Mit A | B wird beschrieben, dass der Ausdruck entweder A oder B ist. Eine der Alternativen muss jedoch zutreffen.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „(“ Ausdruck „)“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „[“ Ausdruck „]“ ==&lt;br /&gt;
&lt;br /&gt;
Beschreibt optionale Elemente. A [B] beschreibt, dass entweder A alleine, oder A gefolgt von B auftreten darf.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „…“ ==&lt;br /&gt;
Der Ausdruck darf beliebig oft wiederholt werden. So beschreibt (0 | 1)… die binären Ziffern: 0 oder 1 oder 10 oder 11 oder …&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Die Definitionen einer Zelle =&lt;br /&gt;
&lt;br /&gt;
== Name ::= Wort … ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zelldefinition ::= [Wertebereich | Speicherstelle | Zusammenhang ] … ==&lt;br /&gt;
&lt;br /&gt;
Eine Zelle enthält beliebig viele (d.h. solange der Speicherplatz ausreicht) Definitionen von Wertebereichen, Speicherstellen oder Zusammenhängen.&lt;br /&gt;
&lt;br /&gt;
== Wertebereich ::= „Wertebereich“ WName „=“ ( Aufzählung | Zahlenbereich ) ==&lt;br /&gt;
&lt;br /&gt;
Ein Wertebereich besteht aus einem Namen, dem eine Aufzählung oder ein Zahlenbereich zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
== WName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner eines Wertebereichs. Wertebereiche sind über alle Zellen eines Roboters (Zellverbundes) hinweg gültig. &lt;br /&gt;
&lt;br /&gt;
== Aufzählung  ::= „{“ AName [ „,“ AName ] … „}“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== AName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Ein Name aus der Aufzählung eines Wertebereichs. &lt;br /&gt;
&lt;br /&gt;
== Zahlenbereich ::= ( Ganze_Zahl  „..“ Ganze_Zahl  ) | ( Kommazahl „..“ Kommazahl ) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Speicherstelle ::= 	(„Element“ EName  „:“ WName ) | („Gemeinsam“ EName  „:“ Slave „,“ EName) ==&lt;br /&gt;
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.)&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== EName::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner einer Speicherstelle. Die Namen „und“ bzw. „Ende“ sind nicht zulässig.&lt;br /&gt;
&lt;br /&gt;
== Zusammenhang  ::= „Zusammenhang“ Elementbeschreibung  [ „und“ Elementbeschreibung  ] … „Ende“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Elementbeschreibung  ::= EName „=“ Gewicht „=“ (Zahlenbereich | AName | Term) ==&lt;br /&gt;
Der Wert einer Elementbeschreibung ist das Gewicht, sofern die benannte Speicherstelle einen Wert innerhalb des angegebenen Zahlenbereichs besitzt, dem angegebenen Namen der Aufzählung, oder dem Ergebnis der Berechnung des Terms entspricht. Andernfalls ist der Wert gleich 0.&lt;br /&gt;
Die Anwendung einer Elementbeschreibung setzt die Speicherstelle auf die angegebene Zahl oder den Namen der Aufzählung bzw. die Mitte vom Zahlenbereich. Der Term wird nur einmal berechnet, so dass es zu keiner Verfälschung vom Ergebnis kommen kann.&lt;br /&gt;
&lt;br /&gt;
== Term ::= VzZahl | &amp;quot;(&amp;quot; Term &amp;quot;)&amp;quot; | PlusMinus | MalDiv ==&lt;br /&gt;
Dert Term ist eine vorzeichenbehaftete Zahl oder ein geklammerter Term, eine Addition bzw. Subtraktion bzw. Miltiplikation oder Division.&lt;br /&gt;
&lt;br /&gt;
== VzZahl ::= Zahl | [&amp;quot;-&amp;quot;] EName ==&lt;br /&gt;
Eine vorzeichenbehaftete Zahl ist eine Zahl (die ja auch ein vorangesteltes &amp;quot;-&amp;quot; haben kann), oder der Name einer Speicherstelle mit ggf. einem vorangestellten Minuszeichen.&lt;br /&gt;
&lt;br /&gt;
== PlusMinus ::= ( Term &amp;quot;+&amp;quot; Term ) | ( Term &amp;quot;-&amp;quot; Term ) ==&lt;br /&gt;
Hier können Additionen bzw. Subtraktionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== MalDiv ::= ( Term &amp;quot;*&amp;quot; Term ) | ( Term &amp;quot;/&amp;quot; Term ) ==&lt;br /&gt;
Hier können Multiplikationen bzw. Divisionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Gewicht ::= Ganze_Zahl ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
= Steuerbefehle =&lt;br /&gt;
Nachfolgend sind die für die Ein-/Ausgabeeinheit zur Programmierung der Zellen erforderlichen Befehle zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Ring ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Der aktuelle Ring ist ein Ring, der gerade betrachtet wird.&lt;br /&gt;
&lt;br /&gt;
== Zellenname_vergeben ::= „neu“ Slave ==&lt;br /&gt;
 &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
== Slave ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Name einer Zelle innerhalb eines Rings. Der Name ist in dem Ring eindeutig zu wählen.&lt;br /&gt;
&lt;br /&gt;
== Ring_wechseln ::= „zu“ Slave ==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Die Ein-/Ausgabeeinheit hat einen eigenen Namen.&lt;br /&gt;
&lt;br /&gt;
== Name_der_EA ::= „EA“ Name ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zurückgehen ::= „weg“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== umbenennen ::= „bezeichne“ Name  „als“ Name  ==&lt;br /&gt;
 &lt;br /&gt;
Name bezeichnet eine Speicherstelle, einen Wertebereich oder einen Aufzählungsnamen. Dieser wird in den neuen Namen umbenannt.&lt;br /&gt;
&lt;br /&gt;
== auflisten  ::= „Elemente“ | „Zusammenhänge“ ==&lt;br /&gt;
	&lt;br /&gt;
Die Speicherstellen bzw. Zusammenhänge des Masters im aktuellen Ring werden aufgelistet.&lt;br /&gt;
= Beispiel =&lt;br /&gt;
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.&lt;br /&gt;
Hierzu werden nachfolgende Zellen benötigt:&lt;br /&gt;
&lt;br /&gt;
- '''Stromversorgung''':&lt;br /&gt;
Sie versorgt den Roboter mit Energie. Über einen Ein-/Ausschalter kann der Roboter gestartet werden.&lt;br /&gt;
&lt;br /&gt;
- '''Radzelle''' (2 fach):&lt;br /&gt;
Ein mit Motor angetriebenes Rad.&lt;br /&gt;
&lt;br /&gt;
- '''Logikzelle''':&lt;br /&gt;
Die Steuerzentrale des Roboters.&lt;br /&gt;
&lt;br /&gt;
- '''Stützrad''':&lt;br /&gt;
Wie bei kleinen Modellen üblich, wird zur Abstützung ein rein passives Stützrad eingesetzt.&lt;br /&gt;
&lt;br /&gt;
- '''Sensorzelle''':&lt;br /&gt;
Mit der Sensorzelle sind zwei bewegliche Photozellen verbunden, über die die Steuerlinie detektiert werden kann.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Der Aufbau ==&lt;br /&gt;
Die Ein-/Ausgabeeinheit wird eingeschaltet und mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
'''''EA   Linienbot'''''&lt;br /&gt;
&lt;br /&gt;
mit einem Namen versehen. &lt;br /&gt;
 &lt;br /&gt;
Dann wird die Stromversorgung angeschlossen. Über&lt;br /&gt;
&lt;br /&gt;
'''''neu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
erhält die Stromversorgung ihren Namen. Mit&lt;br /&gt;
&lt;br /&gt;
'''''zu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
wird diese als Master angegeben.&lt;br /&gt;
&lt;br /&gt;
Nun kann die linke Radzelle befestigt werden und über&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
ihren Namen erhalten. Gleichzeitig wird damit festgelegt, dass sich das Rad als Slave mit der Stromversorgung als Master in einem Ring befindet. &lt;br /&gt;
&lt;br /&gt;
Dem rechten Rad wird der Name vergeben:&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad rechts'''''&lt;br /&gt;
&lt;br /&gt;
Mittig an der Stromversorgung wird nun die Logikzelle gegenüber der Ein-/Ausgabeeinheit angefügt. Auch hier ein Name:&lt;br /&gt;
&lt;br /&gt;
'''''neu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Das Stützrad wird angebracht:&lt;br /&gt;
&lt;br /&gt;
'''''neu Stützrad'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Die Sensorzelle wird nach dem Stützrad in Linie mit der Logikzelle verbunden.&lt;br /&gt;
&lt;br /&gt;
'''''neu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Nun ist der Roboter aufgebaut und kann programmiert werden.&lt;br /&gt;
== Einrichtung der Speicherzellen ==&lt;br /&gt;
Gemäß obiger Sequenz ist die Denkstation aktueller Master.&lt;br /&gt;
&lt;br /&gt;
'''''zu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns in den Sensor, so dass dieser programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
'''''bezeichne Sensor 1 als Sensor links&lt;br /&gt;
&lt;br /&gt;
bezeichne Sensor 2 als Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert nun die umbenannten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Da hier jetzt nichts mehr zu tun ist, wird auf den vorherigen Master, die Logikzelle positioniert:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Denkstation&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Links : Sensor, Sensor links&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Rechts : Sensor, Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
werden die Sensorinformationen der Denkstation zur Verfügung gestellt.&lt;br /&gt;
&lt;br /&gt;
Fürs erste nun weiter zu den Motoren:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
'''''zu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns zum einen Motor.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sollbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Istbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich Motorstärke ist dabei definiert als -100 .. 100. Die Namen sollen hier unverändert beibehalten werden.&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor links : Rad links, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Kann das linke Rad von der Strombasis angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Da es sich bei den Radzellen um den gleichen Zelltyp handelt, sind auch die gleichen Namen für die Speicherstellen vorprogrammiert:&lt;br /&gt;
'''''Gemeinsam Motor rechts : Rad rechts, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber ist die Steuerung vom rechten Rad der Strombasis bekannt gegeben worden.&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber wird in die Logikzelle gewechselt.&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor rechts : Strombasis, Motor rechts&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Motor links: Strombasis, Motor links'''''&lt;br /&gt;
&lt;br /&gt;
Diese Befehle machen die Motoren der Logikzelle verfügbar. Jede Änderung bei diesen Speicherstellen wird in die betreffende Speicherstelle der Radzelle automatisch übertragen.&lt;br /&gt;
&lt;br /&gt;
== Die Programmierung ==&lt;br /&gt;
&lt;br /&gt;
Nun müssen in der Logikzelle noch die Zusammenhänge aufgezeigt werden. Wir befinden uns in der Denkstation.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Motor links : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Motor rechts : Motorstärke&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nun zu den Zusammenhängen:&lt;br /&gt;
&lt;br /&gt;
Wenn beide Sensoren ansprechen, fahre ich richtig:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = detektiert und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wenn der linke Sensor anspricht, der rechte jedoch nicht, sollte nach links gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 11000 = detektiert und Rechts = -6000 = detektiert und Motor links = 0 =50 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Die Linkskurve wird durch die unterschiedlichen Geschwindigkeiten erreicht.&lt;br /&gt;
&lt;br /&gt;
Wenn der rechte Sensor anspricht, der linke jedoch nicht, sollte nach rechts gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 50 Ende'''''&lt;br /&gt;
&lt;br /&gt;
Einfach eine andere Art der Berechnung.&lt;br /&gt;
&lt;br /&gt;
Wenn kein Sensor anspricht, fahre ich einen Kreis:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = frei und Motor links = 0 =60 und Motor rechts = 0 = 30 Ende'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Programmierung wird die Ein-/Ausgabeeinheit ausgeschaltet und vom Roboter gelöst. Mit Einschalten der Stromversorgung kann die Fahrt beginnen.&lt;br /&gt;
&lt;br /&gt;
= Verweise  =&lt;br /&gt;
Ein Prototyp für die Programmierung auf Basis einer C-Control Pro ist unter [[Roboterzellen: Programmierung C-Control Pro]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
= Quellen  =&lt;br /&gt;
&lt;br /&gt;
= Autor  =&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 11:19, 2. Aug 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13875</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13875"/>
				<updated>2008-08-16T15:01:58Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Die Schnittstelle zwischen den Zellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Eine Zelle kann somit als die Einheit aufgefasst werden, die die mechanische, elektrische und logische Schnittstelle einhält. Dabei wird es als wichtig erachtet, dass jede Zelle alle drei Schnittstellen bedient. Vor diesem Hintergrund kann man eine Zelle auch als ein bischen Mechanik, ein bischen Energieversorgung und ein bischen Logik auffassen. Viele Zellen zusammen ergeben dann die für einen Roboter gewünschte Mechanik, Energieversorgung und Logik.&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition. Durch die richtige Auswahl der Zellen wird die für den Roboter gewünschte Funktionalität zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
Die Software muss die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
&lt;br /&gt;
==== Steckverbindungen ====&lt;br /&gt;
Es werden zwei Steckverbindungen entsprechend der [[RN-Definitionen]] verwendet:&lt;br /&gt;
Zur Kommunikation und bei geringem Stromverbrauch der I2C-Bus Stecker als 10-poliger Wannenstecker:&lt;br /&gt;
[[Bild:rndefinition_wannenstecker.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Stromversorgung für Leistungsverbraucher erfolgt über die universellen Wannenstecker AKL230 mit 4 Polen.&lt;br /&gt;
&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* die Informationsübertragung und&lt;br /&gt;
* die Stromversorgung &lt;br /&gt;
&lt;br /&gt;
==== Informationsübertragung ====&lt;br /&gt;
Die Informationsübertragung erfolgt über den I2C-Bus Stecker gemäß [[RN-Definitionen]]:&lt;br /&gt;
[[Bild:stecker_10pol_i2c.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Pin 1        SCL (Taktleitung)&lt;br /&gt;
 Pin 3        SDA (Datenleitung)&lt;br /&gt;
 Pin 5        +5V&lt;br /&gt;
 Pin 7        +5V&lt;br /&gt;
 Pin 9        Batteriespannung +12V&lt;br /&gt;
 Pin 8        GND Batterie&lt;br /&gt;
 Pin 2,4,6    GND &lt;br /&gt;
 Pin 10       INT   &lt;br /&gt;
&lt;br /&gt;
Es sind Maximal 3 A je Pin zulässig.&lt;br /&gt;
Pin 5 und 7 besitzen eine geregelte +5V Spannung.&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Bei Bedarf, kann über einen zusätzlichen Stecker die Stromversorgung bis zu 10 A sichergestellt werden.&lt;br /&gt;
 Pin 1        Batteriespannung +12V&lt;br /&gt;
 Pin 2        GND Batterie&lt;br /&gt;
 Pin 3        Ladungsspannung &amp;lt;= ???V&lt;br /&gt;
 Pin 4        GND Ladung&lt;br /&gt;
&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
Die Ladespannung dient zum Aufladen der Batterien. Es ist nicht sichergestellt, dass hier auch eine Spannung anliegt bzw. wie groß die Spannung tatsächlich ist. Hier können Stromerzeuger, wie z.B. ein Netzteil oder aber auch Solarzellen, ihren Strom anbieten.&lt;br /&gt;
&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
Der Informationsaustausch zwischen Zellen erfolgt über die Definition gemeinsamer Speicherzellen (Siehe [[Roboterzellen#Logik]]). Der Nutzer benennt lediglich die Speicherstellen, die einen gemeinsamen Wert beinhalten sollen. Das Betriebssystem regelt das Zusammenwirken beim Lesen oder Schreiben.&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
Die Implementierung von Funktionen einer Zelle ist frei. Die Kommunikation zu anderen Zellen erfolgt jedoch ausschließlich über das Betriebssystem im Rahmen von gemeinsamen Speicherstellen. Da diese Kommunikation auf der Basis von I2C erfolgt, müssen bei der zusätzlichen Einbindung von I2C-Modulen gewisse Rahmenbedingungen eingehalten werden und es sind bestimmte Betriebssystemfunktionen zu verwenden.&lt;br /&gt;
&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
Die Informationsverarbeitung erfolgt bei allen Roboterzellen nach dem gleichen Prinzip. Deswegen enthält jede Zelle auch einen Logik-Anteil, so dass die Zusammenarbeit sichergestellt ist.&lt;br /&gt;
===== Definition von Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle besitzt einen Namen und einen Wertebereich. Der Name ist innerhalb einer Zelle eindeutig. Der Wertebereich ist über alle Zellen eindeutig definiert.&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich kann eine Auflistung von Bezeichnern sein (z.B. Boolean: {False, True}) oder ein Zahlenbereich (z.B. Byte: 0 .. 255). Vordefiniert sind die Wertebereiche von Boolean, Byte, Integer und Float.&lt;br /&gt;
===== Definition gemeinsamer Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle kann auch derart definiert werden, dass man sich auf die Speicherstelle einer anderen Zelle bezieht. Dann stellt das Betriebssystem sicher, dass der Zugriff (Lesen oder Schreiben) von jeder betroffenen Zelle aus so erfolgt, als wenn es sich um eine lokale Definition handeln würde. Veränderungen werden transparent durchgereicht. Die [[Roboterzellen#Logische Schnittstelle|logische Schnittstelle]] besteht also eigentlich in diesen gemeinsamen Speicherstellen.&lt;br /&gt;
&lt;br /&gt;
===== Programmierung =====&lt;br /&gt;
Die Programmierung erfolgt, indem die Zusammenhänge zwischen den Speicherstellen einer Zelle beschrieben werden. Jeder ''Zusammenhang'' ist eine Liste von ''Speicherstellenbeschreibungen''. &lt;br /&gt;
&lt;br /&gt;
Eine  ''Speicherstellenbeschreibung'' benennt eine Speicherstelle, den vorgesehenen Wert (oder einen Bereich von Werten) und ein ''angegebenes Gewicht''.&lt;br /&gt;
&lt;br /&gt;
Die Zelle sucht nun permanent nach ''gültigen Zusammenhängen'' und führt diese aus. Ein Zusammenhang ist gültig, wenn die Summe der Gewichte der Speicherstellenbeschreibungen über einem gewissen Schwellwert liegt. &lt;br /&gt;
&lt;br /&gt;
Das ''Gewicht einer Speicherstellenbeschreibung'' berechnet sich wie folgt: Entspricht der momentane Wert einer Speicherstelle einem der vorgesehenen Werte, so ist das ''Gewicht der Speicherstellenbeschreibung'' gleich dem ''angegebenen Gewicht''. Andernfalls ist es 0.&lt;br /&gt;
&lt;br /&gt;
Liegt die Summe der Gewichte (Gesamtgewicht) nun über einem gewissen Schwellwert, so wird der Zusammenhang ausgeführt: Die Werte aller im Zusammenhang aufgeführten Speicherstellen werden so verändert, dass ein möglichst hohes Gesamtgewicht erreicht wird.&lt;br /&gt;
&lt;br /&gt;
Am Ende der Beschreibung der Syntax für die Befehle und zur Programmierung ist in [[Roboterzellen: Syntax]] ein Beispiel aufgefürt.&lt;br /&gt;
&lt;br /&gt;
'''Anmerkung''': Klingt komplizierte als es ist. Im Kern ist es ein Gemisch aus neuronalen Netzen und Regeln von Expertensystemen. Mal abwarten, wie es sich implementieren lässt. Wenn es funktioniert, kann eine Robotersteuerung ganz einfach aufgebaut werden und man konzentriert sich auf die Problemstellung. Ballast, wie das Erlernen einer Programmiersprache, ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
Die Syntax der Befehle und Programmierung ist in [[Roboterzellen: Syntax]] beschrieben. Dort ist am Ende auch ein Beispiel zur Erstellung und Programmierung ausgeführt.&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13874</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13874"/>
				<updated>2008-08-16T15:00:21Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Die Schnittstelle zwischen den Zellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Eine Zelle kann somit als die Einheit aufgefasst werden, die die mechanische, elektrische und logische Schnittstelle einhält. Dabei wird es als wichtig erachtet, dass jede Zelle alle drei Schnittstellen bedient. Vor diesem Hintergrund kann man eine Zelle auch als ein bischen Mechanik, ein bischen Energieversorgung und ein bischen Logik auffassen. Viele Zellen zusammen ergeben dann die für einen Roboter gewünschte Mechanik, Energieversorgung und Logik.&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition. Durch die richtige Auswahl der Zellen wird die für den Roboter gewünschte Funktionalität zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
&lt;br /&gt;
==== Steckverbindungen ====&lt;br /&gt;
Es werden zwei Steckverbindungen entsprechend der [[RN-Definitionen]] verwendet:&lt;br /&gt;
Zur Kommunikation und bei geringem Stromverbrauch der I2C-Bus Stecker als 10-poliger Wannenstecker:&lt;br /&gt;
[[Bild:rndefinition_wannenstecker.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Stromversorgung für Leistungsverbraucher erfolgt über die universellen Wannenstecker AKL230 mit 4 Polen.&lt;br /&gt;
&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* die Informationsübertragung und&lt;br /&gt;
* die Stromversorgung &lt;br /&gt;
&lt;br /&gt;
==== Informationsübertragung ====&lt;br /&gt;
Die Informationsübertragung erfolgt über den I2C-Bus Stecker gemäß [[RN-Definitionen]]:&lt;br /&gt;
[[Bild:stecker_10pol_i2c.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Pin 1        SCL (Taktleitung)&lt;br /&gt;
 Pin 3        SDA (Datenleitung)&lt;br /&gt;
 Pin 5        +5V&lt;br /&gt;
 Pin 7        +5V&lt;br /&gt;
 Pin 9        Batteriespannung +12V&lt;br /&gt;
 Pin 8        GND Batterie&lt;br /&gt;
 Pin 2,4,6    GND &lt;br /&gt;
 Pin 10       INT   &lt;br /&gt;
&lt;br /&gt;
Es sind Maximal 3 A je Pin zulässig.&lt;br /&gt;
Pin 5 und 7 besitzen eine geregelte +5V Spannung.&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Bei Bedarf, kann über einen zusätzlichen Stecker die Stromversorgung bis zu 10 A sichergestellt werden.&lt;br /&gt;
 Pin 1        Batteriespannung +12V&lt;br /&gt;
 Pin 2        GND Batterie&lt;br /&gt;
 Pin 3        Ladungsspannung &amp;lt;= ???V&lt;br /&gt;
 Pin 4        GND Ladung&lt;br /&gt;
&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
Die Ladespannung dient zum Aufladen der Batterien. Es ist nicht sichergestellt, dass hier auch eine Spannung anliegt bzw. wie groß die Spannung tatsächlich ist. Hier können Stromerzeuger, wie z.B. ein Netzteil oder aber auch Solarzellen, ihren Strom anbieten.&lt;br /&gt;
&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
Der Informationsaustausch zwischen Zellen erfolgt über die Definition gemeinsamer Speicherzellen (Siehe [[Roboterzellen#Logik]]). Der Nutzer benennt lediglich die Speicherstellen, die einen gemeinsamen Wert beinhalten sollen. Das Betriebssystem regelt das Zusammenwirken beim Lesen oder Schreiben.&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
Die Implementierung von Funktionen einer Zelle ist frei. Die Kommunikation zu anderen Zellen erfolgt jedoch ausschließlich über das Betriebssystem im Rahmen von gemeinsamen Speicherstellen. Da diese Kommunikation auf der Basis von I2C erfolgt, müssen bei der zusätzlichen Einbindung von I2C-Modulen gewisse Rahmenbedingungen eingehalten werden und es sind bestimmte Betriebssystemfunktionen zu verwenden.&lt;br /&gt;
&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
Die Informationsverarbeitung erfolgt bei allen Roboterzellen nach dem gleichen Prinzip. Deswegen enthält jede Zelle auch einen Logik-Anteil, so dass die Zusammenarbeit sichergestellt ist.&lt;br /&gt;
===== Definition von Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle besitzt einen Namen und einen Wertebereich. Der Name ist innerhalb einer Zelle eindeutig. Der Wertebereich ist über alle Zellen eindeutig definiert.&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich kann eine Auflistung von Bezeichnern sein (z.B. Boolean: {False, True}) oder ein Zahlenbereich (z.B. Byte: 0 .. 255). Vordefiniert sind die Wertebereiche von Boolean, Byte, Integer und Float.&lt;br /&gt;
===== Definition gemeinsamer Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle kann auch derart definiert werden, dass man sich auf die Speicherstelle einer anderen Zelle bezieht. Dann stellt das Betriebssystem sicher, dass der Zugriff (Lesen oder Schreiben) von jeder betroffenen Zelle aus so erfolgt, als wenn es sich um eine lokale Definition handeln würde. Veränderungen werden transparent durchgereicht. Die [[Roboterzellen#Logische Schnittstelle|logische Schnittstelle]] besteht also eigentlich in diesen gemeinsamen Speicherstellen.&lt;br /&gt;
&lt;br /&gt;
===== Programmierung =====&lt;br /&gt;
Die Programmierung erfolgt, indem die Zusammenhänge zwischen den Speicherstellen einer Zelle beschrieben werden. Jeder ''Zusammenhang'' ist eine Liste von ''Speicherstellenbeschreibungen''. &lt;br /&gt;
&lt;br /&gt;
Eine  ''Speicherstellenbeschreibung'' benennt eine Speicherstelle, den vorgesehenen Wert (oder einen Bereich von Werten) und ein ''angegebenes Gewicht''.&lt;br /&gt;
&lt;br /&gt;
Die Zelle sucht nun permanent nach ''gültigen Zusammenhängen'' und führt diese aus. Ein Zusammenhang ist gültig, wenn die Summe der Gewichte der Speicherstellenbeschreibungen über einem gewissen Schwellwert liegt. &lt;br /&gt;
&lt;br /&gt;
Das ''Gewicht einer Speicherstellenbeschreibung'' berechnet sich wie folgt: Entspricht der momentane Wert einer Speicherstelle einem der vorgesehenen Werte, so ist das ''Gewicht der Speicherstellenbeschreibung'' gleich dem ''angegebenen Gewicht''. Andernfalls ist es 0.&lt;br /&gt;
&lt;br /&gt;
Liegt die Summe der Gewichte (Gesamtgewicht) nun über einem gewissen Schwellwert, so wird der Zusammenhang ausgeführt: Die Werte aller im Zusammenhang aufgeführten Speicherstellen werden so verändert, dass ein möglichst hohes Gesamtgewicht erreicht wird.&lt;br /&gt;
&lt;br /&gt;
Am Ende der Beschreibung der Syntax für die Befehle und zur Programmierung ist in [[Roboterzellen: Syntax]] ein Beispiel aufgefürt.&lt;br /&gt;
&lt;br /&gt;
'''Anmerkung''': Klingt komplizierte als es ist. Im Kern ist es ein Gemisch aus neuronalen Netzen und Regeln von Expertensystemen. Mal abwarten, wie es sich implementieren lässt. Wenn es funktioniert, kann eine Robotersteuerung ganz einfach aufgebaut werden und man konzentriert sich auf die Problemstellung. Ballast, wie das Erlernen einer Programmiersprache, ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
Die Syntax der Befehle und Programmierung ist in [[Roboterzellen: Syntax]] beschrieben. Dort ist am Ende auch ein Beispiel zur Erstellung und Programmierung ausgeführt.&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Programmierung_C-Control_Pro&amp;diff=13873</id>
		<title>Roboterzellen: Programmierung C-Control Pro</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Programmierung_C-Control_Pro&amp;diff=13873"/>
				<updated>2008-08-16T14:45:23Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Vorwort =&lt;br /&gt;
'''Hinweis: Dieser Artikel ist erst im Entstehen. Das Programm ist noch nicht fertiggestellt.'''&lt;br /&gt;
&lt;br /&gt;
In diesem Artikel sollen die erforderlichen Grundlagen für die Programmierung einer C-Control Pro von CONRAD auf Basis der [[Roboterzellen: Syntax]] beschrieben werden. Hardwareseitig wird das C-Control Pro Einsteigerset MEGA 32 (CONRAD 198206) verwendet.&lt;br /&gt;
&lt;br /&gt;
Die Entwicklung der erforderlichen Software erfolgt über die mitgelieferte Entwicklungsumgebung. Da ich Temperatur-Sensoren anschließen möchte, wird die neue (derzeit noch Beta-Version) 1-Wire Schnittstelle eingesetzt.&lt;br /&gt;
&lt;br /&gt;
Weshalb wird die C-Control Pro eingesetzt?&lt;br /&gt;
Für den Aufbau einer Temperatursteuerung mit Temperaturmessungen, Anzeige und Schaltausgängen hatte ich mir das Einsteigerset bereits zugelegt, bevor ich auf das Roboternetz gestoßen bin. Jetzt möchte ich zum Einen die Temperatursteuerung verwirklichen, zum Anderen einen ersten Prototyp für die Programmierung der Roboterzellen entwerfen. Ob der MEGA 32 den erhöhten Ansprüchen gerecht werden kann, wird sich zeigen müssen.&lt;br /&gt;
&lt;br /&gt;
= Grundstruktur =&lt;br /&gt;
Die C-Control Pro kann I²C nur als Master ausführen. Die Logik der [[Roboterzellen]] erfordert jedoch einen Master- und Slave-Betrieb. Somit wird nur ein eingeschränkter Funktionsumfang realisiert. Das kommt mir jedoch gelegen, da ich so erste Erfahrungen mit der Implementierung der Programmiersprache gewinnen kann, ohne das schwierige Problem der Synchronisation der gemeinsamen Speicherstellen bereits jetzt angehen zu müssen.&lt;br /&gt;
&lt;br /&gt;
Als Konsequenz ergibt sich jedoch, dass auch die Ein-Ausgabeeinheit auf der C-Control Pro realisiert werden muss.&lt;br /&gt;
&lt;br /&gt;
== Threads ==&lt;br /&gt;
Die C-Control Pro kann mit mehreren Threads arbeiten. Hier werden verwendet:&lt;br /&gt;
&lt;br /&gt;
* Thread 1 für die Abfrage der Sensoren und das Hinterlegen der Daten in vordefinierte Speicherstellen. Zusätzlich werden Speicherstellen als Grundlage zur Ansteuerung von Pins verwendet: Hierüber können Effektoren gesteuert werden. Die im Einsteigerset beigefügte Tastatur und Anzeige sollen verwendet werden können. Dieser Thread kann entsprechend erweitert und verändert werden, um ggf. eigene Sensoren und Effektoren einzubinden.&lt;br /&gt;
&lt;br /&gt;
* Thread 2 zur Abarbeitung der Zusammenhänge, d.h. der Regeln, mit denen der Anwender seine Logik für das Zusammenwirken der Speicherstellen hinterlegt.&lt;br /&gt;
&lt;br /&gt;
* Thread 3 als Ein-/Ausgabeeinheit zur Festlegung neuer Speicherstellen und der Zusammenhänge.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
Es ist die vollständige Syntax auf Basis von ''Zelldefinition ::= [Wertebereich | Speicherstelle | Zusammenhang ] …'' implementiert, bis auf die gemeinsamen Speicherstellen. Somit entfällt ''Speicherstelle ::= („Gemeinsam“ EName „:“ Slave „,“ EName)''.&lt;br /&gt;
&lt;br /&gt;
== Steuerbefehle ==&lt;br /&gt;
Es werden lediglich die Befehle ''umbenennen ::= „bezeichne“ EName „als“ EName''  und ''auflisten  ::= „Elemente“ | „Zusammenhänge“'' benötigt.&lt;br /&gt;
Ein Umschalten zwischen der Ein-/Ausgabeeinheit zur Festlegung der Speicherstellen und Zusammenhänge und der Eingabe bzw. Ausgabe von Daten als Ergebnis des Programmes wird ermöglicht.&lt;br /&gt;
&lt;br /&gt;
= Verweise =&lt;br /&gt;
Die Artikel [[Roboterzellen]] und [[Roboterzellen: Syntax]] werden als bekannt vorausgesetzt.&lt;br /&gt;
= Quellen =&lt;br /&gt;
= Autor =&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 16:45, 16. Aug 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13872</id>
		<title>Roboterzellen: Syntax</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13872"/>
				<updated>2008-08-16T13:40:39Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Verweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Elemente zur Beschreibung =&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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…&lt;br /&gt;
== Ganze_Zahl ==&lt;br /&gt;
Eine ganze Zahl ist eine positive (1, 2, …) oder negative (-1, -2, …) ganze Zahl oder der Wert 0.&lt;br /&gt;
== Positive ganze Zahl ==&lt;br /&gt;
Eine positive ganze Zahl ist eine ganze Zahl größer oder gleich 0.&lt;br /&gt;
&lt;br /&gt;
== Kommazahl ==&lt;br /&gt;
Eine Kommazahl ist eine Zahl mit einem Komma oder in exponentieller Schreibweise (Zahlentyp Float).&lt;br /&gt;
&lt;br /&gt;
== Zahl ==&lt;br /&gt;
&lt;br /&gt;
Eine Zahl ist eine ganze Zahl oder eine Kommazahl. &lt;br /&gt;
&lt;br /&gt;
== Wort ==&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
== „Zeichenfolge“ ==&lt;br /&gt;
&lt;br /&gt;
Die in Klammern gesetzte Zeichenfolge muss vorkommen.  Dann natürlich ohne die Anführungszeichen („“).&lt;br /&gt;
&lt;br /&gt;
== Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Ein Bezeichner ist ein Wort und kennzeichnet das jeweilige syntaktische Element.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Diese Schreibweise bedeutet: Ein Ausdruck kann ein Bezeichner sein.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck kann eine Folge von Ausdrücken sein. Mit A B wird beschrieben, dass nach dem Ausdruck A der Ausdruck B zutreffen muss.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „|“ Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Mit A | B wird beschrieben, dass der Ausdruck entweder A oder B ist. Eine der Alternativen muss jedoch zutreffen.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „(“ Ausdruck „)“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „[“ Ausdruck „]“ ==&lt;br /&gt;
&lt;br /&gt;
Beschreibt optionale Elemente. A [B] beschreibt, dass entweder A alleine, oder A gefolgt von B auftreten darf.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „…“ ==&lt;br /&gt;
Der Ausdruck darf beliebig oft wiederholt werden. So beschreibt (0 | 1)… die binären Ziffern: 0 oder 1 oder 10 oder 11 oder …&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Die Definitionen einer Zelle =&lt;br /&gt;
&lt;br /&gt;
== Name ::= Wort … ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zelldefinition ::= [Wertebereich | Speicherstelle | Zusammenhang ] … ==&lt;br /&gt;
&lt;br /&gt;
Eine Zelle enthält beliebig viele (d.h. solange der Speicherplatz ausreicht) Definitionen von Wertebereichen, Speicherstellen oder Zusammenhängen.&lt;br /&gt;
&lt;br /&gt;
== Wertebereich ::= „Wertebereich“ WName „=“ ( Aufzählung | Zahlenbereich ) ==&lt;br /&gt;
&lt;br /&gt;
Ein Wertebereich besteht aus einem Namen, dem eine Aufzählung oder ein Zahlenbereich zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
== WName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner eines Wertebereichs. Wertebereiche sind über alle Zellen eines Roboters (Zellverbundes) hinweg gültig. &lt;br /&gt;
&lt;br /&gt;
== Aufzählung  ::= „{“ AName [ „,“ AName ] … „}“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== AName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Ein Name aus der Aufzählung eines Wertebereichs. &lt;br /&gt;
&lt;br /&gt;
== Zahlenbereich ::= ( Ganze_Zahl  „..“ Ganze_Zahl  ) | ( Kommazahl „..“ Kommazahl ) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Speicherstelle ::= 	(„Element“ EName  „:“ WName ) | („Gemeinsam“ EName  „:“ Slave „,“ EName) ==&lt;br /&gt;
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.)&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== EName::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner einer Speicherstelle. Die Namen „und“ bzw. „Ende“ sind nicht zulässig.&lt;br /&gt;
&lt;br /&gt;
== Zusammenhang  ::= „Zusammenhang“ Elementbeschreibung  [ „und“ Elementbeschreibung  ] … „Ende“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Elementbeschreibung  ::= EName „=“ Gewicht „=“ (Zahlenbereich | AName | Term) ==&lt;br /&gt;
Der Wert einer Elementbeschreibung ist das Gewicht, sofern die benannte Speicherstelle einen Wert innerhalb des angegebenen Zahlenbereichs besitzt, dem angegebenen Namen der Aufzählung, oder dem Ergebnis der Berechnung des Terms entspricht. Andernfalls ist der Wert gleich 0.&lt;br /&gt;
Die Anwendung einer Elementbeschreibung setzt die Speicherstelle auf die angegebene Zahl oder den Namen der Aufzählung bzw. die Mitte vom Zahlenbereich. Der Term wird nur einmal berechnet, so dass es zu keiner Verfälschung vom Ergebnis kommen kann.&lt;br /&gt;
&lt;br /&gt;
== Term ::= VzZahl | &amp;quot;(&amp;quot; Term &amp;quot;)&amp;quot; | PlusMinus | MalDiv ==&lt;br /&gt;
Dert Term ist eine vorzeichenbehaftete Zahl oder ein geklammerter Term, eine Addition bzw. Subtraktion bzw. Miltiplikation oder Division.&lt;br /&gt;
&lt;br /&gt;
== VzZahl ::= Zahl | [&amp;quot;-&amp;quot;] EName ==&lt;br /&gt;
Eine vorzeichenbehaftete Zahl ist eine Zahl (die ja auch ein vorangesteltes &amp;quot;-&amp;quot; haben kann), oder der Name einer Speicherstelle mit ggf. einem vorangestellten Minuszeichen.&lt;br /&gt;
&lt;br /&gt;
== PlusMinus ::= ( Term &amp;quot;+&amp;quot; Term ) | ( Term &amp;quot;-&amp;quot; Term ) ==&lt;br /&gt;
Hier können Additionen bzw. Subtraktionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== MalDiv ::= ( Term &amp;quot;*&amp;quot; Term ) | ( Term &amp;quot;/&amp;quot; Term ) ==&lt;br /&gt;
Hier können Multiplikationen bzw. Divisionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Gewicht ::= Ganze_Zahl ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
= Steuerbefehle =&lt;br /&gt;
Nachfolgend sind die für die Ein-/Ausgabeeinheit zur Programmierung der Zellen erforderlichen Befehle zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Ring ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Der aktuelle Ring ist ein Ring, der gerade betrachtet wird.&lt;br /&gt;
&lt;br /&gt;
== Zellenname_vergeben ::= „neu“ Slave ==&lt;br /&gt;
 &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
== Slave ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Name einer Zelle innerhalb eines Rings. Der Name ist in dem Ring eindeutig zu wählen.&lt;br /&gt;
&lt;br /&gt;
== Ring_wechseln ::= „zu“ Slave ==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Die Ein-/Ausgabeeinheit hat einen eigenen Namen.&lt;br /&gt;
&lt;br /&gt;
== Name_der_EA ::= „EA“ Name ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zurückgehen ::= „weg“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== umbenennen ::= „bezeichne“ EName  „als“ EName  ==&lt;br /&gt;
 &lt;br /&gt;
Die Speicherstelle EName erhält die neue Bezeichnung nach dem Schlüsselwort „als“.&lt;br /&gt;
&lt;br /&gt;
== auflisten  ::= „Elemente“ | „Zusammenhänge“ ==&lt;br /&gt;
	&lt;br /&gt;
Die Speicherstellen bzw. Zusammenhänge des Masters im aktuellen Ring werden aufgelistet.&lt;br /&gt;
= Beispiel =&lt;br /&gt;
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.&lt;br /&gt;
Hierzu werden nachfolgende Zellen benötigt:&lt;br /&gt;
&lt;br /&gt;
- '''Stromversorgung''':&lt;br /&gt;
Sie versorgt den Roboter mit Energie. Über einen Ein-/Ausschalter kann der Roboter gestartet werden.&lt;br /&gt;
&lt;br /&gt;
- '''Radzelle''' (2 fach):&lt;br /&gt;
Ein mit Motor angetriebenes Rad.&lt;br /&gt;
&lt;br /&gt;
- '''Logikzelle''':&lt;br /&gt;
Die Steuerzentrale des Roboters.&lt;br /&gt;
&lt;br /&gt;
- '''Stützrad''':&lt;br /&gt;
Wie bei kleinen Modellen üblich, wird zur Abstützung ein rein passives Stützrad eingesetzt.&lt;br /&gt;
&lt;br /&gt;
- '''Sensorzelle''':&lt;br /&gt;
Mit der Sensorzelle sind zwei bewegliche Photozellen verbunden, über die die Steuerlinie detektiert werden kann.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Der Aufbau ==&lt;br /&gt;
Die Ein-/Ausgabeeinheit wird eingeschaltet und mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
'''''EA   Linienbot'''''&lt;br /&gt;
&lt;br /&gt;
mit einem Namen versehen. &lt;br /&gt;
 &lt;br /&gt;
Dann wird die Stromversorgung angeschlossen. Über&lt;br /&gt;
&lt;br /&gt;
'''''neu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
erhält die Stromversorgung ihren Namen. Mit&lt;br /&gt;
&lt;br /&gt;
'''''zu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
wird diese als Master angegeben.&lt;br /&gt;
&lt;br /&gt;
Nun kann die linke Radzelle befestigt werden und über&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
ihren Namen erhalten. Gleichzeitig wird damit festgelegt, dass sich das Rad als Slave mit der Stromversorgung als Master in einem Ring befindet. &lt;br /&gt;
&lt;br /&gt;
Dem rechten Rad wird der Name vergeben:&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad rechts'''''&lt;br /&gt;
&lt;br /&gt;
Mittig an der Stromversorgung wird nun die Logikzelle gegenüber der Ein-/Ausgabeeinheit angefügt. Auch hier ein Name:&lt;br /&gt;
&lt;br /&gt;
'''''neu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Das Stützrad wird angebracht:&lt;br /&gt;
&lt;br /&gt;
'''''neu Stützrad'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Die Sensorzelle wird nach dem Stützrad in Linie mit der Logikzelle verbunden.&lt;br /&gt;
&lt;br /&gt;
'''''neu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Nun ist der Roboter aufgebaut und kann programmiert werden.&lt;br /&gt;
== Einrichtung der Speicherzellen ==&lt;br /&gt;
Gemäß obiger Sequenz ist die Denkstation aktueller Master.&lt;br /&gt;
&lt;br /&gt;
'''''zu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns in den Sensor, so dass dieser programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
'''''bezeichne Sensor 1 als Sensor links&lt;br /&gt;
&lt;br /&gt;
bezeichne Sensor 2 als Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert nun die umbenannten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Da hier jetzt nichts mehr zu tun ist, wird auf den vorherigen Master, die Logikzelle positioniert:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Denkstation&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Links : Sensor, Sensor links&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Rechts : Sensor, Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
werden die Sensorinformationen der Denkstation zur Verfügung gestellt.&lt;br /&gt;
&lt;br /&gt;
Fürs erste nun weiter zu den Motoren:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
'''''zu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns zum einen Motor.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sollbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Istbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich Motorstärke ist dabei definiert als -100 .. 100. Die Namen sollen hier unverändert beibehalten werden.&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor links : Rad links, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Kann das linke Rad von der Strombasis angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Da es sich bei den Radzellen um den gleichen Zelltyp handelt, sind auch die gleichen Namen für die Speicherstellen vorprogrammiert:&lt;br /&gt;
'''''Gemeinsam Motor rechts : Rad rechts, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber ist die Steuerung vom rechten Rad der Strombasis bekannt gegeben worden.&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber wird in die Logikzelle gewechselt.&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor rechts : Strombasis, Motor rechts&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Motor links: Strombasis, Motor links'''''&lt;br /&gt;
&lt;br /&gt;
Diese Befehle machen die Motoren der Logikzelle verfügbar. Jede Änderung bei diesen Speicherstellen wird in die betreffende Speicherstelle der Radzelle automatisch übertragen.&lt;br /&gt;
&lt;br /&gt;
== Die Programmierung ==&lt;br /&gt;
&lt;br /&gt;
Nun müssen in der Logikzelle noch die Zusammenhänge aufgezeigt werden. Wir befinden uns in der Denkstation.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Motor links : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Motor rechts : Motorstärke&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nun zu den Zusammenhängen:&lt;br /&gt;
&lt;br /&gt;
Wenn beide Sensoren ansprechen, fahre ich richtig:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = detektiert und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wenn der linke Sensor anspricht, der rechte jedoch nicht, sollte nach links gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 11000 = detektiert und Rechts = -6000 = detektiert und Motor links = 0 =50 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Die Linkskurve wird durch die unterschiedlichen Geschwindigkeiten erreicht.&lt;br /&gt;
&lt;br /&gt;
Wenn der rechte Sensor anspricht, der linke jedoch nicht, sollte nach rechts gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 50 Ende'''''&lt;br /&gt;
&lt;br /&gt;
Einfach eine andere Art der Berechnung.&lt;br /&gt;
&lt;br /&gt;
Wenn kein Sensor anspricht, fahre ich einen Kreis:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = frei und Motor links = 0 =60 und Motor rechts = 0 = 30 Ende'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Programmierung wird die Ein-/Ausgabeeinheit ausgeschaltet und vom Roboter gelöst. Mit Einschalten der Stromversorgung kann die Fahrt beginnen.&lt;br /&gt;
&lt;br /&gt;
= Verweise  =&lt;br /&gt;
Ein Prototyp für die Programmierung auf Basis einer C-Control Pro ist unter [[Roboterzellen: Programmierung C-Control Pro]] beschrieben.&lt;br /&gt;
&lt;br /&gt;
= Quellen  =&lt;br /&gt;
&lt;br /&gt;
= Autor  =&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 11:19, 2. Aug 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13789</id>
		<title>Roboterzellen: Syntax</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13789"/>
				<updated>2008-08-02T09:20:39Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Autor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Elemente zur Beschreibung =&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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…&lt;br /&gt;
== Ganze_Zahl ==&lt;br /&gt;
Eine ganze Zahl ist eine positive (1, 2, …) oder negative (-1, -2, …) ganze Zahl oder der Wert 0.&lt;br /&gt;
== Positive ganze Zahl ==&lt;br /&gt;
Eine positive ganze Zahl ist eine ganze Zahl größer oder gleich 0.&lt;br /&gt;
&lt;br /&gt;
== Kommazahl ==&lt;br /&gt;
Eine Kommazahl ist eine Zahl mit einem Komma oder in exponentieller Schreibweise (Zahlentyp Float).&lt;br /&gt;
&lt;br /&gt;
== Zahl ==&lt;br /&gt;
&lt;br /&gt;
Eine Zahl ist eine ganze Zahl oder eine Kommazahl. &lt;br /&gt;
&lt;br /&gt;
== Wort ==&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
== „Zeichenfolge“ ==&lt;br /&gt;
&lt;br /&gt;
Die in Klammern gesetzte Zeichenfolge muss vorkommen.  Dann natürlich ohne die Anführungszeichen („“).&lt;br /&gt;
&lt;br /&gt;
== Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Ein Bezeichner ist ein Wort und kennzeichnet das jeweilige syntaktische Element.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Diese Schreibweise bedeutet: Ein Ausdruck kann ein Bezeichner sein.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck kann eine Folge von Ausdrücken sein. Mit A B wird beschrieben, dass nach dem Ausdruck A der Ausdruck B zutreffen muss.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „|“ Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Mit A | B wird beschrieben, dass der Ausdruck entweder A oder B ist. Eine der Alternativen muss jedoch zutreffen.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „(“ Ausdruck „)“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „[“ Ausdruck „]“ ==&lt;br /&gt;
&lt;br /&gt;
Beschreibt optionale Elemente. A [B] beschreibt, dass entweder A alleine, oder A gefolgt von B auftreten darf.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „…“ ==&lt;br /&gt;
Der Ausdruck darf beliebig oft wiederholt werden. So beschreibt (0 | 1)… die binären Ziffern: 0 oder 1 oder 10 oder 11 oder …&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Die Definitionen einer Zelle =&lt;br /&gt;
&lt;br /&gt;
== Name ::= Wort … ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zelldefinition ::= [Wertebereich | Speicherstelle | Zusammenhang ] … ==&lt;br /&gt;
&lt;br /&gt;
Eine Zelle enthält beliebig viele (d.h. solange der Speicherplatz ausreicht) Definitionen von Wertebereichen, Speicherstellen oder Zusammenhängen.&lt;br /&gt;
&lt;br /&gt;
== Wertebereich ::= „Wertebereich“ WName „=“ ( Aufzählung | Zahlenbereich ) ==&lt;br /&gt;
&lt;br /&gt;
Ein Wertebereich besteht aus einem Namen, dem eine Aufzählung oder ein Zahlenbereich zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
== WName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner eines Wertebereichs. Wertebereiche sind über alle Zellen eines Roboters (Zellverbundes) hinweg gültig. &lt;br /&gt;
&lt;br /&gt;
== Aufzählung  ::= „{“ AName [ „,“ AName ] … „}“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== AName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Ein Name aus der Aufzählung eines Wertebereichs. &lt;br /&gt;
&lt;br /&gt;
== Zahlenbereich ::= ( Ganze_Zahl  „..“ Ganze_Zahl  ) | ( Kommazahl „..“ Kommazahl ) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Speicherstelle ::= 	(„Element“ EName  „:“ WName ) | („Gemeinsam“ EName  „:“ Slave „,“ EName) ==&lt;br /&gt;
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.)&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== EName::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner einer Speicherstelle. Die Namen „und“ bzw. „Ende“ sind nicht zulässig.&lt;br /&gt;
&lt;br /&gt;
== Zusammenhang  ::= „Zusammenhang“ Elementbeschreibung  [ „und“ Elementbeschreibung  ] … „Ende“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Elementbeschreibung  ::= EName „=“ Gewicht „=“ (Zahlenbereich | AName | Term) ==&lt;br /&gt;
Der Wert einer Elementbeschreibung ist das Gewicht, sofern die benannte Speicherstelle einen Wert innerhalb des angegebenen Zahlenbereichs besitzt, dem angegebenen Namen der Aufzählung, oder dem Ergebnis der Berechnung des Terms entspricht. Andernfalls ist der Wert gleich 0.&lt;br /&gt;
Die Anwendung einer Elementbeschreibung setzt die Speicherstelle auf die angegebene Zahl oder den Namen der Aufzählung bzw. die Mitte vom Zahlenbereich. Der Term wird nur einmal berechnet, so dass es zu keiner Verfälschung vom Ergebnis kommen kann.&lt;br /&gt;
&lt;br /&gt;
== Term ::= VzZahl | &amp;quot;(&amp;quot; Term &amp;quot;)&amp;quot; | PlusMinus | MalDiv ==&lt;br /&gt;
Dert Term ist eine vorzeichenbehaftete Zahl oder ein geklammerter Term, eine Addition bzw. Subtraktion bzw. Miltiplikation oder Division.&lt;br /&gt;
&lt;br /&gt;
== VzZahl ::= Zahl | [&amp;quot;-&amp;quot;] EName ==&lt;br /&gt;
Eine vorzeichenbehaftete Zahl ist eine Zahl (die ja auch ein vorangesteltes &amp;quot;-&amp;quot; haben kann), oder der Name einer Speicherstelle mit ggf. einem vorangestellten Minuszeichen.&lt;br /&gt;
&lt;br /&gt;
== PlusMinus ::= ( Term &amp;quot;+&amp;quot; Term ) | ( Term &amp;quot;-&amp;quot; Term ) ==&lt;br /&gt;
Hier können Additionen bzw. Subtraktionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== MalDiv ::= ( Term &amp;quot;*&amp;quot; Term ) | ( Term &amp;quot;/&amp;quot; Term ) ==&lt;br /&gt;
Hier können Multiplikationen bzw. Divisionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Gewicht ::= Ganze_Zahl ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
= Steuerbefehle =&lt;br /&gt;
Nachfolgend sind die für die Ein-/Ausgabeeinheit zur Programmierung der Zellen erforderlichen Befehle zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Ring ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Der aktuelle Ring ist ein Ring, der gerade betrachtet wird.&lt;br /&gt;
&lt;br /&gt;
== Zellenname_vergeben ::= „neu“ Slave ==&lt;br /&gt;
 &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
== Slave ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Name einer Zelle innerhalb eines Rings. Der Name ist in dem Ring eindeutig zu wählen.&lt;br /&gt;
&lt;br /&gt;
== Ring_wechseln ::= „zu“ Slave ==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Die Ein-/Ausgabeeinheit hat einen eigenen Namen.&lt;br /&gt;
&lt;br /&gt;
== Name_der_EA ::= „EA“ Name ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zurückgehen ::= „weg“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== umbenennen ::= „bezeichne“ EName  „als“ EName  ==&lt;br /&gt;
 &lt;br /&gt;
Die Speicherstelle EName erhält die neue Bezeichnung nach dem Schlüsselwort „als“.&lt;br /&gt;
&lt;br /&gt;
== auflisten  ::= „Elemente“ | „Zusammenhänge“ ==&lt;br /&gt;
	&lt;br /&gt;
Die Speicherstellen bzw. Zusammenhänge des Masters im aktuellen Ring werden aufgelistet.&lt;br /&gt;
= Beispiel =&lt;br /&gt;
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.&lt;br /&gt;
Hierzu werden nachfolgende Zellen benötigt:&lt;br /&gt;
&lt;br /&gt;
- '''Stromversorgung''':&lt;br /&gt;
Sie versorgt den Roboter mit Energie. Über einen Ein-/Ausschalter kann der Roboter gestartet werden.&lt;br /&gt;
&lt;br /&gt;
- '''Radzelle''' (2 fach):&lt;br /&gt;
Ein mit Motor angetriebenes Rad.&lt;br /&gt;
&lt;br /&gt;
- '''Logikzelle''':&lt;br /&gt;
Die Steuerzentrale des Roboters.&lt;br /&gt;
&lt;br /&gt;
- '''Stützrad''':&lt;br /&gt;
Wie bei kleinen Modellen üblich, wird zur Abstützung ein rein passives Stützrad eingesetzt.&lt;br /&gt;
&lt;br /&gt;
- '''Sensorzelle''':&lt;br /&gt;
Mit der Sensorzelle sind zwei bewegliche Photozellen verbunden, über die die Steuerlinie detektiert werden kann.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Der Aufbau ==&lt;br /&gt;
Die Ein-/Ausgabeeinheit wird eingeschaltet und mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
'''''EA   Linienbot'''''&lt;br /&gt;
&lt;br /&gt;
mit einem Namen versehen. &lt;br /&gt;
 &lt;br /&gt;
Dann wird die Stromversorgung angeschlossen. Über&lt;br /&gt;
&lt;br /&gt;
'''''neu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
erhält die Stromversorgung ihren Namen. Mit&lt;br /&gt;
&lt;br /&gt;
'''''zu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
wird diese als Master angegeben.&lt;br /&gt;
&lt;br /&gt;
Nun kann die linke Radzelle befestigt werden und über&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
ihren Namen erhalten. Gleichzeitig wird damit festgelegt, dass sich das Rad als Slave mit der Stromversorgung als Master in einem Ring befindet. &lt;br /&gt;
&lt;br /&gt;
Dem rechten Rad wird der Name vergeben:&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad rechts'''''&lt;br /&gt;
&lt;br /&gt;
Mittig an der Stromversorgung wird nun die Logikzelle gegenüber der Ein-/Ausgabeeinheit angefügt. Auch hier ein Name:&lt;br /&gt;
&lt;br /&gt;
'''''neu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Das Stützrad wird angebracht:&lt;br /&gt;
&lt;br /&gt;
'''''neu Stützrad'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Die Sensorzelle wird nach dem Stützrad in Linie mit der Logikzelle verbunden.&lt;br /&gt;
&lt;br /&gt;
'''''neu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Nun ist der Roboter aufgebaut und kann programmiert werden.&lt;br /&gt;
== Einrichtung der Speicherzellen ==&lt;br /&gt;
Gemäß obiger Sequenz ist die Denkstation aktueller Master.&lt;br /&gt;
&lt;br /&gt;
'''''zu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns in den Sensor, so dass dieser programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
'''''bezeichne Sensor 1 als Sensor links&lt;br /&gt;
&lt;br /&gt;
bezeichne Sensor 2 als Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert nun die umbenannten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Da hier jetzt nichts mehr zu tun ist, wird auf den vorherigen Master, die Logikzelle positioniert:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Denkstation&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Links : Sensor, Sensor links&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Rechts : Sensor, Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
werden die Sensorinformationen der Denkstation zur Verfügung gestellt.&lt;br /&gt;
&lt;br /&gt;
Fürs erste nun weiter zu den Motoren:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
'''''zu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns zum einen Motor.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sollbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Istbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich Motorstärke ist dabei definiert als -100 .. 100. Die Namen sollen hier unverändert beibehalten werden.&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor links : Rad links, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Kann das linke Rad von der Strombasis angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Da es sich bei den Radzellen um den gleichen Zelltyp handelt, sind auch die gleichen Namen für die Speicherstellen vorprogrammiert:&lt;br /&gt;
'''''Gemeinsam Motor rechts : Rad rechts, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber ist die Steuerung vom rechten Rad der Strombasis bekannt gegeben worden.&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber wird in die Logikzelle gewechselt.&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor rechts : Strombasis, Motor rechts&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Motor links: Strombasis, Motor links'''''&lt;br /&gt;
&lt;br /&gt;
Diese Befehle machen die Motoren der Logikzelle verfügbar. Jede Änderung bei diesen Speicherstellen wird in die betreffende Speicherstelle der Radzelle automatisch übertragen.&lt;br /&gt;
&lt;br /&gt;
== Die Programmierung ==&lt;br /&gt;
&lt;br /&gt;
Nun müssen in der Logikzelle noch die Zusammenhänge aufgezeigt werden. Wir befinden uns in der Denkstation.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Motor links : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Motor rechts : Motorstärke&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nun zu den Zusammenhängen:&lt;br /&gt;
&lt;br /&gt;
Wenn beide Sensoren ansprechen, fahre ich richtig:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = detektiert und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wenn der linke Sensor anspricht, der rechte jedoch nicht, sollte nach links gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 11000 = detektiert und Rechts = -6000 = detektiert und Motor links = 0 =50 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Die Linkskurve wird durch die unterschiedlichen Geschwindigkeiten erreicht.&lt;br /&gt;
&lt;br /&gt;
Wenn der rechte Sensor anspricht, der linke jedoch nicht, sollte nach rechts gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 50 Ende'''''&lt;br /&gt;
&lt;br /&gt;
Einfach eine andere Art der Berechnung.&lt;br /&gt;
&lt;br /&gt;
Wenn kein Sensor anspricht, fahre ich einen Kreis:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = frei und Motor links = 0 =60 und Motor rechts = 0 = 30 Ende'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Programmierung wird die Ein-/Ausgabeeinheit ausgeschaltet und vom Roboter gelöst. Mit Einschalten der Stromversorgung kann die Fahrt beginnen.&lt;br /&gt;
&lt;br /&gt;
= Verweise  =&lt;br /&gt;
&lt;br /&gt;
= Quellen  =&lt;br /&gt;
&lt;br /&gt;
= Autor  =&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 11:19, 2. Aug 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13788</id>
		<title>Roboterzellen: Syntax</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13788"/>
				<updated>2008-08-02T09:20:23Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Quellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Elemente zur Beschreibung =&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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…&lt;br /&gt;
== Ganze_Zahl ==&lt;br /&gt;
Eine ganze Zahl ist eine positive (1, 2, …) oder negative (-1, -2, …) ganze Zahl oder der Wert 0.&lt;br /&gt;
== Positive ganze Zahl ==&lt;br /&gt;
Eine positive ganze Zahl ist eine ganze Zahl größer oder gleich 0.&lt;br /&gt;
&lt;br /&gt;
== Kommazahl ==&lt;br /&gt;
Eine Kommazahl ist eine Zahl mit einem Komma oder in exponentieller Schreibweise (Zahlentyp Float).&lt;br /&gt;
&lt;br /&gt;
== Zahl ==&lt;br /&gt;
&lt;br /&gt;
Eine Zahl ist eine ganze Zahl oder eine Kommazahl. &lt;br /&gt;
&lt;br /&gt;
== Wort ==&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
== „Zeichenfolge“ ==&lt;br /&gt;
&lt;br /&gt;
Die in Klammern gesetzte Zeichenfolge muss vorkommen.  Dann natürlich ohne die Anführungszeichen („“).&lt;br /&gt;
&lt;br /&gt;
== Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Ein Bezeichner ist ein Wort und kennzeichnet das jeweilige syntaktische Element.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Diese Schreibweise bedeutet: Ein Ausdruck kann ein Bezeichner sein.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck kann eine Folge von Ausdrücken sein. Mit A B wird beschrieben, dass nach dem Ausdruck A der Ausdruck B zutreffen muss.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „|“ Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Mit A | B wird beschrieben, dass der Ausdruck entweder A oder B ist. Eine der Alternativen muss jedoch zutreffen.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „(“ Ausdruck „)“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „[“ Ausdruck „]“ ==&lt;br /&gt;
&lt;br /&gt;
Beschreibt optionale Elemente. A [B] beschreibt, dass entweder A alleine, oder A gefolgt von B auftreten darf.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „…“ ==&lt;br /&gt;
Der Ausdruck darf beliebig oft wiederholt werden. So beschreibt (0 | 1)… die binären Ziffern: 0 oder 1 oder 10 oder 11 oder …&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Die Definitionen einer Zelle =&lt;br /&gt;
&lt;br /&gt;
== Name ::= Wort … ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zelldefinition ::= [Wertebereich | Speicherstelle | Zusammenhang ] … ==&lt;br /&gt;
&lt;br /&gt;
Eine Zelle enthält beliebig viele (d.h. solange der Speicherplatz ausreicht) Definitionen von Wertebereichen, Speicherstellen oder Zusammenhängen.&lt;br /&gt;
&lt;br /&gt;
== Wertebereich ::= „Wertebereich“ WName „=“ ( Aufzählung | Zahlenbereich ) ==&lt;br /&gt;
&lt;br /&gt;
Ein Wertebereich besteht aus einem Namen, dem eine Aufzählung oder ein Zahlenbereich zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
== WName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner eines Wertebereichs. Wertebereiche sind über alle Zellen eines Roboters (Zellverbundes) hinweg gültig. &lt;br /&gt;
&lt;br /&gt;
== Aufzählung  ::= „{“ AName [ „,“ AName ] … „}“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== AName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Ein Name aus der Aufzählung eines Wertebereichs. &lt;br /&gt;
&lt;br /&gt;
== Zahlenbereich ::= ( Ganze_Zahl  „..“ Ganze_Zahl  ) | ( Kommazahl „..“ Kommazahl ) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Speicherstelle ::= 	(„Element“ EName  „:“ WName ) | („Gemeinsam“ EName  „:“ Slave „,“ EName) ==&lt;br /&gt;
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.)&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== EName::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner einer Speicherstelle. Die Namen „und“ bzw. „Ende“ sind nicht zulässig.&lt;br /&gt;
&lt;br /&gt;
== Zusammenhang  ::= „Zusammenhang“ Elementbeschreibung  [ „und“ Elementbeschreibung  ] … „Ende“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Elementbeschreibung  ::= EName „=“ Gewicht „=“ (Zahlenbereich | AName | Term) ==&lt;br /&gt;
Der Wert einer Elementbeschreibung ist das Gewicht, sofern die benannte Speicherstelle einen Wert innerhalb des angegebenen Zahlenbereichs besitzt, dem angegebenen Namen der Aufzählung, oder dem Ergebnis der Berechnung des Terms entspricht. Andernfalls ist der Wert gleich 0.&lt;br /&gt;
Die Anwendung einer Elementbeschreibung setzt die Speicherstelle auf die angegebene Zahl oder den Namen der Aufzählung bzw. die Mitte vom Zahlenbereich. Der Term wird nur einmal berechnet, so dass es zu keiner Verfälschung vom Ergebnis kommen kann.&lt;br /&gt;
&lt;br /&gt;
== Term ::= VzZahl | &amp;quot;(&amp;quot; Term &amp;quot;)&amp;quot; | PlusMinus | MalDiv ==&lt;br /&gt;
Dert Term ist eine vorzeichenbehaftete Zahl oder ein geklammerter Term, eine Addition bzw. Subtraktion bzw. Miltiplikation oder Division.&lt;br /&gt;
&lt;br /&gt;
== VzZahl ::= Zahl | [&amp;quot;-&amp;quot;] EName ==&lt;br /&gt;
Eine vorzeichenbehaftete Zahl ist eine Zahl (die ja auch ein vorangesteltes &amp;quot;-&amp;quot; haben kann), oder der Name einer Speicherstelle mit ggf. einem vorangestellten Minuszeichen.&lt;br /&gt;
&lt;br /&gt;
== PlusMinus ::= ( Term &amp;quot;+&amp;quot; Term ) | ( Term &amp;quot;-&amp;quot; Term ) ==&lt;br /&gt;
Hier können Additionen bzw. Subtraktionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== MalDiv ::= ( Term &amp;quot;*&amp;quot; Term ) | ( Term &amp;quot;/&amp;quot; Term ) ==&lt;br /&gt;
Hier können Multiplikationen bzw. Divisionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Gewicht ::= Ganze_Zahl ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
= Steuerbefehle =&lt;br /&gt;
Nachfolgend sind die für die Ein-/Ausgabeeinheit zur Programmierung der Zellen erforderlichen Befehle zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Ring ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Der aktuelle Ring ist ein Ring, der gerade betrachtet wird.&lt;br /&gt;
&lt;br /&gt;
== Zellenname_vergeben ::= „neu“ Slave ==&lt;br /&gt;
 &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
== Slave ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Name einer Zelle innerhalb eines Rings. Der Name ist in dem Ring eindeutig zu wählen.&lt;br /&gt;
&lt;br /&gt;
== Ring_wechseln ::= „zu“ Slave ==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Die Ein-/Ausgabeeinheit hat einen eigenen Namen.&lt;br /&gt;
&lt;br /&gt;
== Name_der_EA ::= „EA“ Name ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zurückgehen ::= „weg“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== umbenennen ::= „bezeichne“ EName  „als“ EName  ==&lt;br /&gt;
 &lt;br /&gt;
Die Speicherstelle EName erhält die neue Bezeichnung nach dem Schlüsselwort „als“.&lt;br /&gt;
&lt;br /&gt;
== auflisten  ::= „Elemente“ | „Zusammenhänge“ ==&lt;br /&gt;
	&lt;br /&gt;
Die Speicherstellen bzw. Zusammenhänge des Masters im aktuellen Ring werden aufgelistet.&lt;br /&gt;
= Beispiel =&lt;br /&gt;
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.&lt;br /&gt;
Hierzu werden nachfolgende Zellen benötigt:&lt;br /&gt;
&lt;br /&gt;
- '''Stromversorgung''':&lt;br /&gt;
Sie versorgt den Roboter mit Energie. Über einen Ein-/Ausschalter kann der Roboter gestartet werden.&lt;br /&gt;
&lt;br /&gt;
- '''Radzelle''' (2 fach):&lt;br /&gt;
Ein mit Motor angetriebenes Rad.&lt;br /&gt;
&lt;br /&gt;
- '''Logikzelle''':&lt;br /&gt;
Die Steuerzentrale des Roboters.&lt;br /&gt;
&lt;br /&gt;
- '''Stützrad''':&lt;br /&gt;
Wie bei kleinen Modellen üblich, wird zur Abstützung ein rein passives Stützrad eingesetzt.&lt;br /&gt;
&lt;br /&gt;
- '''Sensorzelle''':&lt;br /&gt;
Mit der Sensorzelle sind zwei bewegliche Photozellen verbunden, über die die Steuerlinie detektiert werden kann.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Der Aufbau ==&lt;br /&gt;
Die Ein-/Ausgabeeinheit wird eingeschaltet und mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
'''''EA   Linienbot'''''&lt;br /&gt;
&lt;br /&gt;
mit einem Namen versehen. &lt;br /&gt;
 &lt;br /&gt;
Dann wird die Stromversorgung angeschlossen. Über&lt;br /&gt;
&lt;br /&gt;
'''''neu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
erhält die Stromversorgung ihren Namen. Mit&lt;br /&gt;
&lt;br /&gt;
'''''zu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
wird diese als Master angegeben.&lt;br /&gt;
&lt;br /&gt;
Nun kann die linke Radzelle befestigt werden und über&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
ihren Namen erhalten. Gleichzeitig wird damit festgelegt, dass sich das Rad als Slave mit der Stromversorgung als Master in einem Ring befindet. &lt;br /&gt;
&lt;br /&gt;
Dem rechten Rad wird der Name vergeben:&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad rechts'''''&lt;br /&gt;
&lt;br /&gt;
Mittig an der Stromversorgung wird nun die Logikzelle gegenüber der Ein-/Ausgabeeinheit angefügt. Auch hier ein Name:&lt;br /&gt;
&lt;br /&gt;
'''''neu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Das Stützrad wird angebracht:&lt;br /&gt;
&lt;br /&gt;
'''''neu Stützrad'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Die Sensorzelle wird nach dem Stützrad in Linie mit der Logikzelle verbunden.&lt;br /&gt;
&lt;br /&gt;
'''''neu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Nun ist der Roboter aufgebaut und kann programmiert werden.&lt;br /&gt;
== Einrichtung der Speicherzellen ==&lt;br /&gt;
Gemäß obiger Sequenz ist die Denkstation aktueller Master.&lt;br /&gt;
&lt;br /&gt;
'''''zu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns in den Sensor, so dass dieser programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
'''''bezeichne Sensor 1 als Sensor links&lt;br /&gt;
&lt;br /&gt;
bezeichne Sensor 2 als Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert nun die umbenannten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Da hier jetzt nichts mehr zu tun ist, wird auf den vorherigen Master, die Logikzelle positioniert:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Denkstation&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Links : Sensor, Sensor links&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Rechts : Sensor, Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
werden die Sensorinformationen der Denkstation zur Verfügung gestellt.&lt;br /&gt;
&lt;br /&gt;
Fürs erste nun weiter zu den Motoren:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
'''''zu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns zum einen Motor.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sollbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Istbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich Motorstärke ist dabei definiert als -100 .. 100. Die Namen sollen hier unverändert beibehalten werden.&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor links : Rad links, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Kann das linke Rad von der Strombasis angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Da es sich bei den Radzellen um den gleichen Zelltyp handelt, sind auch die gleichen Namen für die Speicherstellen vorprogrammiert:&lt;br /&gt;
'''''Gemeinsam Motor rechts : Rad rechts, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber ist die Steuerung vom rechten Rad der Strombasis bekannt gegeben worden.&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber wird in die Logikzelle gewechselt.&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor rechts : Strombasis, Motor rechts&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Motor links: Strombasis, Motor links'''''&lt;br /&gt;
&lt;br /&gt;
Diese Befehle machen die Motoren der Logikzelle verfügbar. Jede Änderung bei diesen Speicherstellen wird in die betreffende Speicherstelle der Radzelle automatisch übertragen.&lt;br /&gt;
&lt;br /&gt;
== Die Programmierung ==&lt;br /&gt;
&lt;br /&gt;
Nun müssen in der Logikzelle noch die Zusammenhänge aufgezeigt werden. Wir befinden uns in der Denkstation.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Motor links : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Motor rechts : Motorstärke&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nun zu den Zusammenhängen:&lt;br /&gt;
&lt;br /&gt;
Wenn beide Sensoren ansprechen, fahre ich richtig:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = detektiert und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wenn der linke Sensor anspricht, der rechte jedoch nicht, sollte nach links gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 11000 = detektiert und Rechts = -6000 = detektiert und Motor links = 0 =50 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Die Linkskurve wird durch die unterschiedlichen Geschwindigkeiten erreicht.&lt;br /&gt;
&lt;br /&gt;
Wenn der rechte Sensor anspricht, der linke jedoch nicht, sollte nach rechts gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 50 Ende'''''&lt;br /&gt;
&lt;br /&gt;
Einfach eine andere Art der Berechnung.&lt;br /&gt;
&lt;br /&gt;
Wenn kein Sensor anspricht, fahre ich einen Kreis:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = frei und Motor links = 0 =60 und Motor rechts = 0 = 30 Ende'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Programmierung wird die Ein-/Ausgabeeinheit ausgeschaltet und vom Roboter gelöst. Mit Einschalten der Stromversorgung kann die Fahrt beginnen.&lt;br /&gt;
&lt;br /&gt;
= Verweise  =&lt;br /&gt;
&lt;br /&gt;
= Quellen  =&lt;br /&gt;
&lt;br /&gt;
== Autor  ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 11:19, 2. Aug 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13787</id>
		<title>Roboterzellen: Syntax</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13787"/>
				<updated>2008-08-02T09:20:06Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Verweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Elemente zur Beschreibung =&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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…&lt;br /&gt;
== Ganze_Zahl ==&lt;br /&gt;
Eine ganze Zahl ist eine positive (1, 2, …) oder negative (-1, -2, …) ganze Zahl oder der Wert 0.&lt;br /&gt;
== Positive ganze Zahl ==&lt;br /&gt;
Eine positive ganze Zahl ist eine ganze Zahl größer oder gleich 0.&lt;br /&gt;
&lt;br /&gt;
== Kommazahl ==&lt;br /&gt;
Eine Kommazahl ist eine Zahl mit einem Komma oder in exponentieller Schreibweise (Zahlentyp Float).&lt;br /&gt;
&lt;br /&gt;
== Zahl ==&lt;br /&gt;
&lt;br /&gt;
Eine Zahl ist eine ganze Zahl oder eine Kommazahl. &lt;br /&gt;
&lt;br /&gt;
== Wort ==&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
== „Zeichenfolge“ ==&lt;br /&gt;
&lt;br /&gt;
Die in Klammern gesetzte Zeichenfolge muss vorkommen.  Dann natürlich ohne die Anführungszeichen („“).&lt;br /&gt;
&lt;br /&gt;
== Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Ein Bezeichner ist ein Wort und kennzeichnet das jeweilige syntaktische Element.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Diese Schreibweise bedeutet: Ein Ausdruck kann ein Bezeichner sein.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck kann eine Folge von Ausdrücken sein. Mit A B wird beschrieben, dass nach dem Ausdruck A der Ausdruck B zutreffen muss.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „|“ Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Mit A | B wird beschrieben, dass der Ausdruck entweder A oder B ist. Eine der Alternativen muss jedoch zutreffen.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „(“ Ausdruck „)“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „[“ Ausdruck „]“ ==&lt;br /&gt;
&lt;br /&gt;
Beschreibt optionale Elemente. A [B] beschreibt, dass entweder A alleine, oder A gefolgt von B auftreten darf.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „…“ ==&lt;br /&gt;
Der Ausdruck darf beliebig oft wiederholt werden. So beschreibt (0 | 1)… die binären Ziffern: 0 oder 1 oder 10 oder 11 oder …&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Die Definitionen einer Zelle =&lt;br /&gt;
&lt;br /&gt;
== Name ::= Wort … ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zelldefinition ::= [Wertebereich | Speicherstelle | Zusammenhang ] … ==&lt;br /&gt;
&lt;br /&gt;
Eine Zelle enthält beliebig viele (d.h. solange der Speicherplatz ausreicht) Definitionen von Wertebereichen, Speicherstellen oder Zusammenhängen.&lt;br /&gt;
&lt;br /&gt;
== Wertebereich ::= „Wertebereich“ WName „=“ ( Aufzählung | Zahlenbereich ) ==&lt;br /&gt;
&lt;br /&gt;
Ein Wertebereich besteht aus einem Namen, dem eine Aufzählung oder ein Zahlenbereich zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
== WName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner eines Wertebereichs. Wertebereiche sind über alle Zellen eines Roboters (Zellverbundes) hinweg gültig. &lt;br /&gt;
&lt;br /&gt;
== Aufzählung  ::= „{“ AName [ „,“ AName ] … „}“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== AName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Ein Name aus der Aufzählung eines Wertebereichs. &lt;br /&gt;
&lt;br /&gt;
== Zahlenbereich ::= ( Ganze_Zahl  „..“ Ganze_Zahl  ) | ( Kommazahl „..“ Kommazahl ) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Speicherstelle ::= 	(„Element“ EName  „:“ WName ) | („Gemeinsam“ EName  „:“ Slave „,“ EName) ==&lt;br /&gt;
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.)&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== EName::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner einer Speicherstelle. Die Namen „und“ bzw. „Ende“ sind nicht zulässig.&lt;br /&gt;
&lt;br /&gt;
== Zusammenhang  ::= „Zusammenhang“ Elementbeschreibung  [ „und“ Elementbeschreibung  ] … „Ende“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Elementbeschreibung  ::= EName „=“ Gewicht „=“ (Zahlenbereich | AName | Term) ==&lt;br /&gt;
Der Wert einer Elementbeschreibung ist das Gewicht, sofern die benannte Speicherstelle einen Wert innerhalb des angegebenen Zahlenbereichs besitzt, dem angegebenen Namen der Aufzählung, oder dem Ergebnis der Berechnung des Terms entspricht. Andernfalls ist der Wert gleich 0.&lt;br /&gt;
Die Anwendung einer Elementbeschreibung setzt die Speicherstelle auf die angegebene Zahl oder den Namen der Aufzählung bzw. die Mitte vom Zahlenbereich. Der Term wird nur einmal berechnet, so dass es zu keiner Verfälschung vom Ergebnis kommen kann.&lt;br /&gt;
&lt;br /&gt;
== Term ::= VzZahl | &amp;quot;(&amp;quot; Term &amp;quot;)&amp;quot; | PlusMinus | MalDiv ==&lt;br /&gt;
Dert Term ist eine vorzeichenbehaftete Zahl oder ein geklammerter Term, eine Addition bzw. Subtraktion bzw. Miltiplikation oder Division.&lt;br /&gt;
&lt;br /&gt;
== VzZahl ::= Zahl | [&amp;quot;-&amp;quot;] EName ==&lt;br /&gt;
Eine vorzeichenbehaftete Zahl ist eine Zahl (die ja auch ein vorangesteltes &amp;quot;-&amp;quot; haben kann), oder der Name einer Speicherstelle mit ggf. einem vorangestellten Minuszeichen.&lt;br /&gt;
&lt;br /&gt;
== PlusMinus ::= ( Term &amp;quot;+&amp;quot; Term ) | ( Term &amp;quot;-&amp;quot; Term ) ==&lt;br /&gt;
Hier können Additionen bzw. Subtraktionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== MalDiv ::= ( Term &amp;quot;*&amp;quot; Term ) | ( Term &amp;quot;/&amp;quot; Term ) ==&lt;br /&gt;
Hier können Multiplikationen bzw. Divisionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Gewicht ::= Ganze_Zahl ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
= Steuerbefehle =&lt;br /&gt;
Nachfolgend sind die für die Ein-/Ausgabeeinheit zur Programmierung der Zellen erforderlichen Befehle zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Ring ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Der aktuelle Ring ist ein Ring, der gerade betrachtet wird.&lt;br /&gt;
&lt;br /&gt;
== Zellenname_vergeben ::= „neu“ Slave ==&lt;br /&gt;
 &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
== Slave ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Name einer Zelle innerhalb eines Rings. Der Name ist in dem Ring eindeutig zu wählen.&lt;br /&gt;
&lt;br /&gt;
== Ring_wechseln ::= „zu“ Slave ==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Die Ein-/Ausgabeeinheit hat einen eigenen Namen.&lt;br /&gt;
&lt;br /&gt;
== Name_der_EA ::= „EA“ Name ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zurückgehen ::= „weg“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== umbenennen ::= „bezeichne“ EName  „als“ EName  ==&lt;br /&gt;
 &lt;br /&gt;
Die Speicherstelle EName erhält die neue Bezeichnung nach dem Schlüsselwort „als“.&lt;br /&gt;
&lt;br /&gt;
== auflisten  ::= „Elemente“ | „Zusammenhänge“ ==&lt;br /&gt;
	&lt;br /&gt;
Die Speicherstellen bzw. Zusammenhänge des Masters im aktuellen Ring werden aufgelistet.&lt;br /&gt;
= Beispiel =&lt;br /&gt;
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.&lt;br /&gt;
Hierzu werden nachfolgende Zellen benötigt:&lt;br /&gt;
&lt;br /&gt;
- '''Stromversorgung''':&lt;br /&gt;
Sie versorgt den Roboter mit Energie. Über einen Ein-/Ausschalter kann der Roboter gestartet werden.&lt;br /&gt;
&lt;br /&gt;
- '''Radzelle''' (2 fach):&lt;br /&gt;
Ein mit Motor angetriebenes Rad.&lt;br /&gt;
&lt;br /&gt;
- '''Logikzelle''':&lt;br /&gt;
Die Steuerzentrale des Roboters.&lt;br /&gt;
&lt;br /&gt;
- '''Stützrad''':&lt;br /&gt;
Wie bei kleinen Modellen üblich, wird zur Abstützung ein rein passives Stützrad eingesetzt.&lt;br /&gt;
&lt;br /&gt;
- '''Sensorzelle''':&lt;br /&gt;
Mit der Sensorzelle sind zwei bewegliche Photozellen verbunden, über die die Steuerlinie detektiert werden kann.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Der Aufbau ==&lt;br /&gt;
Die Ein-/Ausgabeeinheit wird eingeschaltet und mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
'''''EA   Linienbot'''''&lt;br /&gt;
&lt;br /&gt;
mit einem Namen versehen. &lt;br /&gt;
 &lt;br /&gt;
Dann wird die Stromversorgung angeschlossen. Über&lt;br /&gt;
&lt;br /&gt;
'''''neu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
erhält die Stromversorgung ihren Namen. Mit&lt;br /&gt;
&lt;br /&gt;
'''''zu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
wird diese als Master angegeben.&lt;br /&gt;
&lt;br /&gt;
Nun kann die linke Radzelle befestigt werden und über&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
ihren Namen erhalten. Gleichzeitig wird damit festgelegt, dass sich das Rad als Slave mit der Stromversorgung als Master in einem Ring befindet. &lt;br /&gt;
&lt;br /&gt;
Dem rechten Rad wird der Name vergeben:&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad rechts'''''&lt;br /&gt;
&lt;br /&gt;
Mittig an der Stromversorgung wird nun die Logikzelle gegenüber der Ein-/Ausgabeeinheit angefügt. Auch hier ein Name:&lt;br /&gt;
&lt;br /&gt;
'''''neu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Das Stützrad wird angebracht:&lt;br /&gt;
&lt;br /&gt;
'''''neu Stützrad'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Die Sensorzelle wird nach dem Stützrad in Linie mit der Logikzelle verbunden.&lt;br /&gt;
&lt;br /&gt;
'''''neu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Nun ist der Roboter aufgebaut und kann programmiert werden.&lt;br /&gt;
== Einrichtung der Speicherzellen ==&lt;br /&gt;
Gemäß obiger Sequenz ist die Denkstation aktueller Master.&lt;br /&gt;
&lt;br /&gt;
'''''zu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns in den Sensor, so dass dieser programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
'''''bezeichne Sensor 1 als Sensor links&lt;br /&gt;
&lt;br /&gt;
bezeichne Sensor 2 als Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert nun die umbenannten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Da hier jetzt nichts mehr zu tun ist, wird auf den vorherigen Master, die Logikzelle positioniert:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Denkstation&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Links : Sensor, Sensor links&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Rechts : Sensor, Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
werden die Sensorinformationen der Denkstation zur Verfügung gestellt.&lt;br /&gt;
&lt;br /&gt;
Fürs erste nun weiter zu den Motoren:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
'''''zu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns zum einen Motor.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sollbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Istbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich Motorstärke ist dabei definiert als -100 .. 100. Die Namen sollen hier unverändert beibehalten werden.&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor links : Rad links, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Kann das linke Rad von der Strombasis angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Da es sich bei den Radzellen um den gleichen Zelltyp handelt, sind auch die gleichen Namen für die Speicherstellen vorprogrammiert:&lt;br /&gt;
'''''Gemeinsam Motor rechts : Rad rechts, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber ist die Steuerung vom rechten Rad der Strombasis bekannt gegeben worden.&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber wird in die Logikzelle gewechselt.&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor rechts : Strombasis, Motor rechts&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Motor links: Strombasis, Motor links'''''&lt;br /&gt;
&lt;br /&gt;
Diese Befehle machen die Motoren der Logikzelle verfügbar. Jede Änderung bei diesen Speicherstellen wird in die betreffende Speicherstelle der Radzelle automatisch übertragen.&lt;br /&gt;
&lt;br /&gt;
== Die Programmierung ==&lt;br /&gt;
&lt;br /&gt;
Nun müssen in der Logikzelle noch die Zusammenhänge aufgezeigt werden. Wir befinden uns in der Denkstation.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Motor links : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Motor rechts : Motorstärke&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nun zu den Zusammenhängen:&lt;br /&gt;
&lt;br /&gt;
Wenn beide Sensoren ansprechen, fahre ich richtig:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = detektiert und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wenn der linke Sensor anspricht, der rechte jedoch nicht, sollte nach links gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 11000 = detektiert und Rechts = -6000 = detektiert und Motor links = 0 =50 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Die Linkskurve wird durch die unterschiedlichen Geschwindigkeiten erreicht.&lt;br /&gt;
&lt;br /&gt;
Wenn der rechte Sensor anspricht, der linke jedoch nicht, sollte nach rechts gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 50 Ende'''''&lt;br /&gt;
&lt;br /&gt;
Einfach eine andere Art der Berechnung.&lt;br /&gt;
&lt;br /&gt;
Wenn kein Sensor anspricht, fahre ich einen Kreis:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = frei und Motor links = 0 =60 und Motor rechts = 0 = 30 Ende'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Programmierung wird die Ein-/Ausgabeeinheit ausgeschaltet und vom Roboter gelöst. Mit Einschalten der Stromversorgung kann die Fahrt beginnen.&lt;br /&gt;
&lt;br /&gt;
= Verweise  =&lt;br /&gt;
&lt;br /&gt;
== Quellen  ==&lt;br /&gt;
== Autor  ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 11:19, 2. Aug 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13786</id>
		<title>Roboterzellen: Syntax</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13786"/>
				<updated>2008-08-02T09:19:22Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Die Programmierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Elemente zur Beschreibung =&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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…&lt;br /&gt;
== Ganze_Zahl ==&lt;br /&gt;
Eine ganze Zahl ist eine positive (1, 2, …) oder negative (-1, -2, …) ganze Zahl oder der Wert 0.&lt;br /&gt;
== Positive ganze Zahl ==&lt;br /&gt;
Eine positive ganze Zahl ist eine ganze Zahl größer oder gleich 0.&lt;br /&gt;
&lt;br /&gt;
== Kommazahl ==&lt;br /&gt;
Eine Kommazahl ist eine Zahl mit einem Komma oder in exponentieller Schreibweise (Zahlentyp Float).&lt;br /&gt;
&lt;br /&gt;
== Zahl ==&lt;br /&gt;
&lt;br /&gt;
Eine Zahl ist eine ganze Zahl oder eine Kommazahl. &lt;br /&gt;
&lt;br /&gt;
== Wort ==&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
== „Zeichenfolge“ ==&lt;br /&gt;
&lt;br /&gt;
Die in Klammern gesetzte Zeichenfolge muss vorkommen.  Dann natürlich ohne die Anführungszeichen („“).&lt;br /&gt;
&lt;br /&gt;
== Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Ein Bezeichner ist ein Wort und kennzeichnet das jeweilige syntaktische Element.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Diese Schreibweise bedeutet: Ein Ausdruck kann ein Bezeichner sein.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck kann eine Folge von Ausdrücken sein. Mit A B wird beschrieben, dass nach dem Ausdruck A der Ausdruck B zutreffen muss.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „|“ Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Mit A | B wird beschrieben, dass der Ausdruck entweder A oder B ist. Eine der Alternativen muss jedoch zutreffen.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „(“ Ausdruck „)“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „[“ Ausdruck „]“ ==&lt;br /&gt;
&lt;br /&gt;
Beschreibt optionale Elemente. A [B] beschreibt, dass entweder A alleine, oder A gefolgt von B auftreten darf.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „…“ ==&lt;br /&gt;
Der Ausdruck darf beliebig oft wiederholt werden. So beschreibt (0 | 1)… die binären Ziffern: 0 oder 1 oder 10 oder 11 oder …&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Die Definitionen einer Zelle =&lt;br /&gt;
&lt;br /&gt;
== Name ::= Wort … ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zelldefinition ::= [Wertebereich | Speicherstelle | Zusammenhang ] … ==&lt;br /&gt;
&lt;br /&gt;
Eine Zelle enthält beliebig viele (d.h. solange der Speicherplatz ausreicht) Definitionen von Wertebereichen, Speicherstellen oder Zusammenhängen.&lt;br /&gt;
&lt;br /&gt;
== Wertebereich ::= „Wertebereich“ WName „=“ ( Aufzählung | Zahlenbereich ) ==&lt;br /&gt;
&lt;br /&gt;
Ein Wertebereich besteht aus einem Namen, dem eine Aufzählung oder ein Zahlenbereich zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
== WName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner eines Wertebereichs. Wertebereiche sind über alle Zellen eines Roboters (Zellverbundes) hinweg gültig. &lt;br /&gt;
&lt;br /&gt;
== Aufzählung  ::= „{“ AName [ „,“ AName ] … „}“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== AName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Ein Name aus der Aufzählung eines Wertebereichs. &lt;br /&gt;
&lt;br /&gt;
== Zahlenbereich ::= ( Ganze_Zahl  „..“ Ganze_Zahl  ) | ( Kommazahl „..“ Kommazahl ) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Speicherstelle ::= 	(„Element“ EName  „:“ WName ) | („Gemeinsam“ EName  „:“ Slave „,“ EName) ==&lt;br /&gt;
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.)&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== EName::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner einer Speicherstelle. Die Namen „und“ bzw. „Ende“ sind nicht zulässig.&lt;br /&gt;
&lt;br /&gt;
== Zusammenhang  ::= „Zusammenhang“ Elementbeschreibung  [ „und“ Elementbeschreibung  ] … „Ende“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Elementbeschreibung  ::= EName „=“ Gewicht „=“ (Zahlenbereich | AName | Term) ==&lt;br /&gt;
Der Wert einer Elementbeschreibung ist das Gewicht, sofern die benannte Speicherstelle einen Wert innerhalb des angegebenen Zahlenbereichs besitzt, dem angegebenen Namen der Aufzählung, oder dem Ergebnis der Berechnung des Terms entspricht. Andernfalls ist der Wert gleich 0.&lt;br /&gt;
Die Anwendung einer Elementbeschreibung setzt die Speicherstelle auf die angegebene Zahl oder den Namen der Aufzählung bzw. die Mitte vom Zahlenbereich. Der Term wird nur einmal berechnet, so dass es zu keiner Verfälschung vom Ergebnis kommen kann.&lt;br /&gt;
&lt;br /&gt;
== Term ::= VzZahl | &amp;quot;(&amp;quot; Term &amp;quot;)&amp;quot; | PlusMinus | MalDiv ==&lt;br /&gt;
Dert Term ist eine vorzeichenbehaftete Zahl oder ein geklammerter Term, eine Addition bzw. Subtraktion bzw. Miltiplikation oder Division.&lt;br /&gt;
&lt;br /&gt;
== VzZahl ::= Zahl | [&amp;quot;-&amp;quot;] EName ==&lt;br /&gt;
Eine vorzeichenbehaftete Zahl ist eine Zahl (die ja auch ein vorangesteltes &amp;quot;-&amp;quot; haben kann), oder der Name einer Speicherstelle mit ggf. einem vorangestellten Minuszeichen.&lt;br /&gt;
&lt;br /&gt;
== PlusMinus ::= ( Term &amp;quot;+&amp;quot; Term ) | ( Term &amp;quot;-&amp;quot; Term ) ==&lt;br /&gt;
Hier können Additionen bzw. Subtraktionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== MalDiv ::= ( Term &amp;quot;*&amp;quot; Term ) | ( Term &amp;quot;/&amp;quot; Term ) ==&lt;br /&gt;
Hier können Multiplikationen bzw. Divisionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Gewicht ::= Ganze_Zahl ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
= Steuerbefehle =&lt;br /&gt;
Nachfolgend sind die für die Ein-/Ausgabeeinheit zur Programmierung der Zellen erforderlichen Befehle zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Ring ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Der aktuelle Ring ist ein Ring, der gerade betrachtet wird.&lt;br /&gt;
&lt;br /&gt;
== Zellenname_vergeben ::= „neu“ Slave ==&lt;br /&gt;
 &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
== Slave ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Name einer Zelle innerhalb eines Rings. Der Name ist in dem Ring eindeutig zu wählen.&lt;br /&gt;
&lt;br /&gt;
== Ring_wechseln ::= „zu“ Slave ==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Die Ein-/Ausgabeeinheit hat einen eigenen Namen.&lt;br /&gt;
&lt;br /&gt;
== Name_der_EA ::= „EA“ Name ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zurückgehen ::= „weg“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== umbenennen ::= „bezeichne“ EName  „als“ EName  ==&lt;br /&gt;
 &lt;br /&gt;
Die Speicherstelle EName erhält die neue Bezeichnung nach dem Schlüsselwort „als“.&lt;br /&gt;
&lt;br /&gt;
== auflisten  ::= „Elemente“ | „Zusammenhänge“ ==&lt;br /&gt;
	&lt;br /&gt;
Die Speicherstellen bzw. Zusammenhänge des Masters im aktuellen Ring werden aufgelistet.&lt;br /&gt;
= Beispiel =&lt;br /&gt;
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.&lt;br /&gt;
Hierzu werden nachfolgende Zellen benötigt:&lt;br /&gt;
&lt;br /&gt;
- '''Stromversorgung''':&lt;br /&gt;
Sie versorgt den Roboter mit Energie. Über einen Ein-/Ausschalter kann der Roboter gestartet werden.&lt;br /&gt;
&lt;br /&gt;
- '''Radzelle''' (2 fach):&lt;br /&gt;
Ein mit Motor angetriebenes Rad.&lt;br /&gt;
&lt;br /&gt;
- '''Logikzelle''':&lt;br /&gt;
Die Steuerzentrale des Roboters.&lt;br /&gt;
&lt;br /&gt;
- '''Stützrad''':&lt;br /&gt;
Wie bei kleinen Modellen üblich, wird zur Abstützung ein rein passives Stützrad eingesetzt.&lt;br /&gt;
&lt;br /&gt;
- '''Sensorzelle''':&lt;br /&gt;
Mit der Sensorzelle sind zwei bewegliche Photozellen verbunden, über die die Steuerlinie detektiert werden kann.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Der Aufbau ==&lt;br /&gt;
Die Ein-/Ausgabeeinheit wird eingeschaltet und mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
'''''EA   Linienbot'''''&lt;br /&gt;
&lt;br /&gt;
mit einem Namen versehen. &lt;br /&gt;
 &lt;br /&gt;
Dann wird die Stromversorgung angeschlossen. Über&lt;br /&gt;
&lt;br /&gt;
'''''neu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
erhält die Stromversorgung ihren Namen. Mit&lt;br /&gt;
&lt;br /&gt;
'''''zu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
wird diese als Master angegeben.&lt;br /&gt;
&lt;br /&gt;
Nun kann die linke Radzelle befestigt werden und über&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
ihren Namen erhalten. Gleichzeitig wird damit festgelegt, dass sich das Rad als Slave mit der Stromversorgung als Master in einem Ring befindet. &lt;br /&gt;
&lt;br /&gt;
Dem rechten Rad wird der Name vergeben:&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad rechts'''''&lt;br /&gt;
&lt;br /&gt;
Mittig an der Stromversorgung wird nun die Logikzelle gegenüber der Ein-/Ausgabeeinheit angefügt. Auch hier ein Name:&lt;br /&gt;
&lt;br /&gt;
'''''neu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Das Stützrad wird angebracht:&lt;br /&gt;
&lt;br /&gt;
'''''neu Stützrad'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Die Sensorzelle wird nach dem Stützrad in Linie mit der Logikzelle verbunden.&lt;br /&gt;
&lt;br /&gt;
'''''neu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Nun ist der Roboter aufgebaut und kann programmiert werden.&lt;br /&gt;
== Einrichtung der Speicherzellen ==&lt;br /&gt;
Gemäß obiger Sequenz ist die Denkstation aktueller Master.&lt;br /&gt;
&lt;br /&gt;
'''''zu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns in den Sensor, so dass dieser programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
'''''bezeichne Sensor 1 als Sensor links&lt;br /&gt;
&lt;br /&gt;
bezeichne Sensor 2 als Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert nun die umbenannten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Da hier jetzt nichts mehr zu tun ist, wird auf den vorherigen Master, die Logikzelle positioniert:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Denkstation&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Links : Sensor, Sensor links&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Rechts : Sensor, Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
werden die Sensorinformationen der Denkstation zur Verfügung gestellt.&lt;br /&gt;
&lt;br /&gt;
Fürs erste nun weiter zu den Motoren:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
'''''zu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns zum einen Motor.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sollbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Istbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich Motorstärke ist dabei definiert als -100 .. 100. Die Namen sollen hier unverändert beibehalten werden.&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor links : Rad links, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Kann das linke Rad von der Strombasis angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Da es sich bei den Radzellen um den gleichen Zelltyp handelt, sind auch die gleichen Namen für die Speicherstellen vorprogrammiert:&lt;br /&gt;
'''''Gemeinsam Motor rechts : Rad rechts, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber ist die Steuerung vom rechten Rad der Strombasis bekannt gegeben worden.&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber wird in die Logikzelle gewechselt.&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor rechts : Strombasis, Motor rechts&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Motor links: Strombasis, Motor links'''''&lt;br /&gt;
&lt;br /&gt;
Diese Befehle machen die Motoren der Logikzelle verfügbar. Jede Änderung bei diesen Speicherstellen wird in die betreffende Speicherstelle der Radzelle automatisch übertragen.&lt;br /&gt;
&lt;br /&gt;
== Die Programmierung ==&lt;br /&gt;
&lt;br /&gt;
Nun müssen in der Logikzelle noch die Zusammenhänge aufgezeigt werden. Wir befinden uns in der Denkstation.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Motor links : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Motor rechts : Motorstärke&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nun zu den Zusammenhängen:&lt;br /&gt;
&lt;br /&gt;
Wenn beide Sensoren ansprechen, fahre ich richtig:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = detektiert und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wenn der linke Sensor anspricht, der rechte jedoch nicht, sollte nach links gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 11000 = detektiert und Rechts = -6000 = detektiert und Motor links = 0 =50 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Die Linkskurve wird durch die unterschiedlichen Geschwindigkeiten erreicht.&lt;br /&gt;
&lt;br /&gt;
Wenn der rechte Sensor anspricht, der linke jedoch nicht, sollte nach rechts gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 50 Ende'''''&lt;br /&gt;
&lt;br /&gt;
Einfach eine andere Art der Berechnung.&lt;br /&gt;
&lt;br /&gt;
Wenn kein Sensor anspricht, fahre ich einen Kreis:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = frei und Motor links = 0 =60 und Motor rechts = 0 = 30 Ende'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Programmierung wird die Ein-/Ausgabeeinheit ausgeschaltet und vom Roboter gelöst. Mit Einschalten der Stromversorgung kann die Fahrt beginnen.&lt;br /&gt;
&lt;br /&gt;
== Verweise  ==&lt;br /&gt;
== Quellen  ==&lt;br /&gt;
== Autor  ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 11:19, 2. Aug 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13785</id>
		<title>Roboterzellen: Syntax</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13785"/>
				<updated>2008-08-02T09:12:18Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Elementbeschreibung  ::= EName „=“ Gewicht „=“ (Zahlenbereich | Zahl | AName) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Elemente zur Beschreibung =&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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…&lt;br /&gt;
== Ganze_Zahl ==&lt;br /&gt;
Eine ganze Zahl ist eine positive (1, 2, …) oder negative (-1, -2, …) ganze Zahl oder der Wert 0.&lt;br /&gt;
== Positive ganze Zahl ==&lt;br /&gt;
Eine positive ganze Zahl ist eine ganze Zahl größer oder gleich 0.&lt;br /&gt;
&lt;br /&gt;
== Kommazahl ==&lt;br /&gt;
Eine Kommazahl ist eine Zahl mit einem Komma oder in exponentieller Schreibweise (Zahlentyp Float).&lt;br /&gt;
&lt;br /&gt;
== Zahl ==&lt;br /&gt;
&lt;br /&gt;
Eine Zahl ist eine ganze Zahl oder eine Kommazahl. &lt;br /&gt;
&lt;br /&gt;
== Wort ==&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
== „Zeichenfolge“ ==&lt;br /&gt;
&lt;br /&gt;
Die in Klammern gesetzte Zeichenfolge muss vorkommen.  Dann natürlich ohne die Anführungszeichen („“).&lt;br /&gt;
&lt;br /&gt;
== Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Ein Bezeichner ist ein Wort und kennzeichnet das jeweilige syntaktische Element.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Diese Schreibweise bedeutet: Ein Ausdruck kann ein Bezeichner sein.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck kann eine Folge von Ausdrücken sein. Mit A B wird beschrieben, dass nach dem Ausdruck A der Ausdruck B zutreffen muss.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „|“ Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Mit A | B wird beschrieben, dass der Ausdruck entweder A oder B ist. Eine der Alternativen muss jedoch zutreffen.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „(“ Ausdruck „)“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „[“ Ausdruck „]“ ==&lt;br /&gt;
&lt;br /&gt;
Beschreibt optionale Elemente. A [B] beschreibt, dass entweder A alleine, oder A gefolgt von B auftreten darf.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „…“ ==&lt;br /&gt;
Der Ausdruck darf beliebig oft wiederholt werden. So beschreibt (0 | 1)… die binären Ziffern: 0 oder 1 oder 10 oder 11 oder …&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Die Definitionen einer Zelle =&lt;br /&gt;
&lt;br /&gt;
== Name ::= Wort … ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zelldefinition ::= [Wertebereich | Speicherstelle | Zusammenhang ] … ==&lt;br /&gt;
&lt;br /&gt;
Eine Zelle enthält beliebig viele (d.h. solange der Speicherplatz ausreicht) Definitionen von Wertebereichen, Speicherstellen oder Zusammenhängen.&lt;br /&gt;
&lt;br /&gt;
== Wertebereich ::= „Wertebereich“ WName „=“ ( Aufzählung | Zahlenbereich ) ==&lt;br /&gt;
&lt;br /&gt;
Ein Wertebereich besteht aus einem Namen, dem eine Aufzählung oder ein Zahlenbereich zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
== WName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner eines Wertebereichs. Wertebereiche sind über alle Zellen eines Roboters (Zellverbundes) hinweg gültig. &lt;br /&gt;
&lt;br /&gt;
== Aufzählung  ::= „{“ AName [ „,“ AName ] … „}“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== AName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Ein Name aus der Aufzählung eines Wertebereichs. &lt;br /&gt;
&lt;br /&gt;
== Zahlenbereich ::= ( Ganze_Zahl  „..“ Ganze_Zahl  ) | ( Kommazahl „..“ Kommazahl ) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Speicherstelle ::= 	(„Element“ EName  „:“ WName ) | („Gemeinsam“ EName  „:“ Slave „,“ EName) ==&lt;br /&gt;
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.)&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== EName::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner einer Speicherstelle. Die Namen „und“ bzw. „Ende“ sind nicht zulässig.&lt;br /&gt;
&lt;br /&gt;
== Zusammenhang  ::= „Zusammenhang“ Elementbeschreibung  [ „und“ Elementbeschreibung  ] … „Ende“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Elementbeschreibung  ::= EName „=“ Gewicht „=“ (Zahlenbereich | AName | Term) ==&lt;br /&gt;
Der Wert einer Elementbeschreibung ist das Gewicht, sofern die benannte Speicherstelle einen Wert innerhalb des angegebenen Zahlenbereichs besitzt, dem angegebenen Namen der Aufzählung, oder dem Ergebnis der Berechnung des Terms entspricht. Andernfalls ist der Wert gleich 0.&lt;br /&gt;
Die Anwendung einer Elementbeschreibung setzt die Speicherstelle auf die angegebene Zahl oder den Namen der Aufzählung bzw. die Mitte vom Zahlenbereich. Der Term wird nur einmal berechnet, so dass es zu keiner Verfälschung vom Ergebnis kommen kann.&lt;br /&gt;
&lt;br /&gt;
== Term ::= VzZahl | &amp;quot;(&amp;quot; Term &amp;quot;)&amp;quot; | PlusMinus | MalDiv ==&lt;br /&gt;
Dert Term ist eine vorzeichenbehaftete Zahl oder ein geklammerter Term, eine Addition bzw. Subtraktion bzw. Miltiplikation oder Division.&lt;br /&gt;
&lt;br /&gt;
== VzZahl ::= Zahl | [&amp;quot;-&amp;quot;] EName ==&lt;br /&gt;
Eine vorzeichenbehaftete Zahl ist eine Zahl (die ja auch ein vorangesteltes &amp;quot;-&amp;quot; haben kann), oder der Name einer Speicherstelle mit ggf. einem vorangestellten Minuszeichen.&lt;br /&gt;
&lt;br /&gt;
== PlusMinus ::= ( Term &amp;quot;+&amp;quot; Term ) | ( Term &amp;quot;-&amp;quot; Term ) ==&lt;br /&gt;
Hier können Additionen bzw. Subtraktionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== MalDiv ::= ( Term &amp;quot;*&amp;quot; Term ) | ( Term &amp;quot;/&amp;quot; Term ) ==&lt;br /&gt;
Hier können Multiplikationen bzw. Divisionen durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
== Gewicht ::= Ganze_Zahl ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
= Steuerbefehle =&lt;br /&gt;
Nachfolgend sind die für die Ein-/Ausgabeeinheit zur Programmierung der Zellen erforderlichen Befehle zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Ring ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Der aktuelle Ring ist ein Ring, der gerade betrachtet wird.&lt;br /&gt;
&lt;br /&gt;
== Zellenname_vergeben ::= „neu“ Slave ==&lt;br /&gt;
 &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
== Slave ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Name einer Zelle innerhalb eines Rings. Der Name ist in dem Ring eindeutig zu wählen.&lt;br /&gt;
&lt;br /&gt;
== Ring_wechseln ::= „zu“ Slave ==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Die Ein-/Ausgabeeinheit hat einen eigenen Namen.&lt;br /&gt;
&lt;br /&gt;
== Name_der_EA ::= „EA“ Name ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zurückgehen ::= „weg“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== umbenennen ::= „bezeichne“ EName  „als“ EName  ==&lt;br /&gt;
 &lt;br /&gt;
Die Speicherstelle EName erhält die neue Bezeichnung nach dem Schlüsselwort „als“.&lt;br /&gt;
&lt;br /&gt;
== auflisten  ::= „Elemente“ | „Zusammenhänge“ ==&lt;br /&gt;
	&lt;br /&gt;
Die Speicherstellen bzw. Zusammenhänge des Masters im aktuellen Ring werden aufgelistet.&lt;br /&gt;
= Beispiel =&lt;br /&gt;
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.&lt;br /&gt;
Hierzu werden nachfolgende Zellen benötigt:&lt;br /&gt;
&lt;br /&gt;
- '''Stromversorgung''':&lt;br /&gt;
Sie versorgt den Roboter mit Energie. Über einen Ein-/Ausschalter kann der Roboter gestartet werden.&lt;br /&gt;
&lt;br /&gt;
- '''Radzelle''' (2 fach):&lt;br /&gt;
Ein mit Motor angetriebenes Rad.&lt;br /&gt;
&lt;br /&gt;
- '''Logikzelle''':&lt;br /&gt;
Die Steuerzentrale des Roboters.&lt;br /&gt;
&lt;br /&gt;
- '''Stützrad''':&lt;br /&gt;
Wie bei kleinen Modellen üblich, wird zur Abstützung ein rein passives Stützrad eingesetzt.&lt;br /&gt;
&lt;br /&gt;
- '''Sensorzelle''':&lt;br /&gt;
Mit der Sensorzelle sind zwei bewegliche Photozellen verbunden, über die die Steuerlinie detektiert werden kann.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Der Aufbau ==&lt;br /&gt;
Die Ein-/Ausgabeeinheit wird eingeschaltet und mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
'''''EA   Linienbot'''''&lt;br /&gt;
&lt;br /&gt;
mit einem Namen versehen. &lt;br /&gt;
 &lt;br /&gt;
Dann wird die Stromversorgung angeschlossen. Über&lt;br /&gt;
&lt;br /&gt;
'''''neu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
erhält die Stromversorgung ihren Namen. Mit&lt;br /&gt;
&lt;br /&gt;
'''''zu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
wird diese als Master angegeben.&lt;br /&gt;
&lt;br /&gt;
Nun kann die linke Radzelle befestigt werden und über&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
ihren Namen erhalten. Gleichzeitig wird damit festgelegt, dass sich das Rad als Slave mit der Stromversorgung als Master in einem Ring befindet. &lt;br /&gt;
&lt;br /&gt;
Dem rechten Rad wird der Name vergeben:&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad rechts'''''&lt;br /&gt;
&lt;br /&gt;
Mittig an der Stromversorgung wird nun die Logikzelle gegenüber der Ein-/Ausgabeeinheit angefügt. Auch hier ein Name:&lt;br /&gt;
&lt;br /&gt;
'''''neu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Das Stützrad wird angebracht:&lt;br /&gt;
&lt;br /&gt;
'''''neu Stützrad'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Die Sensorzelle wird nach dem Stützrad in Linie mit der Logikzelle verbunden.&lt;br /&gt;
&lt;br /&gt;
'''''neu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Nun ist der Roboter aufgebaut und kann programmiert werden.&lt;br /&gt;
== Einrichtung der Speicherzellen ==&lt;br /&gt;
Gemäß obiger Sequenz ist die Denkstation aktueller Master.&lt;br /&gt;
&lt;br /&gt;
'''''zu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns in den Sensor, so dass dieser programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
'''''bezeichne Sensor 1 als Sensor links&lt;br /&gt;
&lt;br /&gt;
bezeichne Sensor 2 als Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert nun die umbenannten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Da hier jetzt nichts mehr zu tun ist, wird auf den vorherigen Master, die Logikzelle positioniert:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Denkstation&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Links : Sensor, Sensor links&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Rechts : Sensor, Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
werden die Sensorinformationen der Denkstation zur Verfügung gestellt.&lt;br /&gt;
&lt;br /&gt;
Fürs erste nun weiter zu den Motoren:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
'''''zu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns zum einen Motor.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sollbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Istbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich Motorstärke ist dabei definiert als -100 .. 100. Die Namen sollen hier unverändert beibehalten werden.&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor links : Rad links, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Kann das linke Rad von der Strombasis angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Da es sich bei den Radzellen um den gleichen Zelltyp handelt, sind auch die gleichen Namen für die Speicherstellen vorprogrammiert:&lt;br /&gt;
'''''Gemeinsam Motor rechts : Rad rechts, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber ist die Steuerung vom rechten Rad der Strombasis bekannt gegeben worden.&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber wird in die Logikzelle gewechselt.&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor rechts : Strombasis, Motor rechts&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Motor links: Strombasis, Motor links'''''&lt;br /&gt;
&lt;br /&gt;
Diese Befehle machen die Motoren der Logikzelle verfügbar. Jede Änderung bei diesen Speicherstellen wird in die betreffende Speicherstelle der Radzelle automatisch übertragen.&lt;br /&gt;
&lt;br /&gt;
== Die Programmierung ==&lt;br /&gt;
&lt;br /&gt;
Nun müssen in der Logikzelle noch die Zusammenhänge aufgezeigt werden. Wir befinden uns in der Denkstation.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Motor links : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Motor rechts : Motorstärke&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nun zu den Zusammenhängen:&lt;br /&gt;
&lt;br /&gt;
Wenn beide Sensoren ansprechen, fahre ich richtig:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = detektiert und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wenn der linke Sensor anspricht, der rechte jedoch nicht, sollte nach links gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 11000 = detektiert und Rechts = -6000 = detektiert und Motor links = 0 =50 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Die Linkskurve wird durch die unterschiedlichen Geschwindigkeiten erreicht.&lt;br /&gt;
&lt;br /&gt;
Wenn der rechte Sensor anspricht, der linke jedoch nicht, sollte nach rechts gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 50 Ende'''''&lt;br /&gt;
&lt;br /&gt;
Einfach eine andere Art der Berechnung.&lt;br /&gt;
&lt;br /&gt;
Wenn kein Sensor anspricht, fahre ich einen Kreis:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = frei und Motor links = 0 =60 und Motor rechts = 0 = 30 Ende'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Programmierung wird die Ein-/Ausgabeeinheit ausgeschaltet und vom Roboter gelöst. Mit Einschalten der Stromversorgung kann die Fahrt beginnen.&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13784</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13784"/>
				<updated>2008-08-02T09:00:04Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Verweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
&lt;br /&gt;
==== Steckverbindungen ====&lt;br /&gt;
Es werden zwei Steckverbindungen entsprechend der [[RN-Definitionen]] verwendet:&lt;br /&gt;
Zur Kommunikation und bei geringem Stromverbrauch der I2C-Bus Stecker als 10-poliger Wannenstecker:&lt;br /&gt;
[[Bild:rndefinition_wannenstecker.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Stromversorgung für Leistungsverbraucher erfolgt über die universellen Wannenstecker AKL230 mit 4 Polen.&lt;br /&gt;
&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* die Informationsübertragung und&lt;br /&gt;
* die Stromversorgung &lt;br /&gt;
&lt;br /&gt;
==== Informationsübertragung ====&lt;br /&gt;
Die Informationsübertragung erfolgt über den I2C-Bus Stecker gemäß [[RN-Definitionen]]:&lt;br /&gt;
[[Bild:stecker_10pol_i2c.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Pin 1        SCL (Taktleitung)&lt;br /&gt;
 Pin 3        SDA (Datenleitung)&lt;br /&gt;
 Pin 5        +5V&lt;br /&gt;
 Pin 7        +5V&lt;br /&gt;
 Pin 9        Batteriespannung +12V&lt;br /&gt;
 Pin 8        GND Batterie&lt;br /&gt;
 Pin 2,4,6    GND &lt;br /&gt;
 Pin 10       INT   &lt;br /&gt;
&lt;br /&gt;
Es sind Maximal 3 A je Pin zulässig.&lt;br /&gt;
Pin 5 und 7 besitzen eine geregelte +5V Spannung.&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Bei Bedarf, kann über einen zusätzlichen Stecker die Stromversorgung bis zu 10 A sichergestellt werden.&lt;br /&gt;
 Pin 1        Batteriespannung +12V&lt;br /&gt;
 Pin 2        GND Batterie&lt;br /&gt;
 Pin 3        Ladungsspannung &amp;lt;= ???V&lt;br /&gt;
 Pin 4        GND Ladung&lt;br /&gt;
&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
Die Ladespannung dient zum Aufladen der Batterien. Es ist nicht sichergestellt, dass hier auch eine Spannung anliegt bzw. wie groß die Spannung tatsächlich ist. Hier können Stromerzeuger, wie z.B. ein Netzteil oder aber auch Solarzellen, ihren Strom anbieten.&lt;br /&gt;
&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
Der Informationsaustausch zwischen Zellen erfolgt über die Definition gemeinsamer Speicherzellen (Siehe [[Roboterzellen#Logik]]). Der Nutzer benennt lediglich die Speicherstellen, die einen gemeinsamen Wert beinhalten sollen. Das Betriebssystem regelt das Zusammenwirken beim Lesen oder Schreiben.&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
Die Implementierung von Funktionen einer Zelle ist frei. Die Kommunikation zu anderen Zellen erfolgt jedoch ausschließlich über das Betriebssystem im Rahmen von gemeinsamen Speicherstellen. Da diese Kommunikation auf der Basis von I2C erfolgt, müssen bei der zusätzlichen Einbindung von I2C-Modulen gewisse Rahmenbedingungen eingehalten werden und es sind bestimmte Betriebssystemfunktionen zu verwenden.&lt;br /&gt;
&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
Die Informationsverarbeitung erfolgt bei allen Roboterzellen nach dem gleichen Prinzip. Deswegen enthält jede Zelle auch einen Logik-Anteil, so dass die Zusammenarbeit sichergestellt ist.&lt;br /&gt;
===== Definition von Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle besitzt einen Namen und einen Wertebereich. Der Name ist innerhalb einer Zelle eindeutig. Der Wertebereich ist über alle Zellen eindeutig definiert.&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich kann eine Auflistung von Bezeichnern sein (z.B. Boolean: {False, True}) oder ein Zahlenbereich (z.B. Byte: 0 .. 255). Vordefiniert sind die Wertebereiche von Boolean, Byte, Integer und Float.&lt;br /&gt;
===== Definition gemeinsamer Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle kann auch derart definiert werden, dass man sich auf die Speicherstelle einer anderen Zelle bezieht. Dann stellt das Betriebssystem sicher, dass der Zugriff (Lesen oder Schreiben) von jeder betroffenen Zelle aus so erfolgt, als wenn es sich um eine lokale Definition handeln würde. Veränderungen werden transparent durchgereicht. Die [[Roboterzellen#Logische Schnittstelle|logische Schnittstelle]] besteht also eigentlich in diesen gemeinsamen Speicherstellen.&lt;br /&gt;
&lt;br /&gt;
===== Programmierung =====&lt;br /&gt;
Die Programmierung erfolgt, indem die Zusammenhänge zwischen den Speicherstellen einer Zelle beschrieben werden. Jeder ''Zusammenhang'' ist eine Liste von ''Speicherstellenbeschreibungen''. &lt;br /&gt;
&lt;br /&gt;
Eine  ''Speicherstellenbeschreibung'' benennt eine Speicherstelle, den vorgesehenen Wert (oder einen Bereich von Werten) und ein ''angegebenes Gewicht''.&lt;br /&gt;
&lt;br /&gt;
Die Zelle sucht nun permanent nach ''gültigen Zusammenhängen'' und führt diese aus. Ein Zusammenhang ist gültig, wenn die Summe der Gewichte der Speicherstellenbeschreibungen über einem gewissen Schwellwert liegt. &lt;br /&gt;
&lt;br /&gt;
Das ''Gewicht einer Speicherstellenbeschreibung'' berechnet sich wie folgt: Entspricht der momentane Wert einer Speicherstelle einem der vorgesehenen Werte, so ist das ''Gewicht der Speicherstellenbeschreibung'' gleich dem ''angegebenen Gewicht''. Andernfalls ist es 0.&lt;br /&gt;
&lt;br /&gt;
Liegt die Summe der Gewichte (Gesamtgewicht) nun über einem gewissen Schwellwert, so wird der Zusammenhang ausgeführt: Die Werte aller im Zusammenhang aufgeführten Speicherstellen werden so verändert, dass ein möglichst hohes Gesamtgewicht erreicht wird.&lt;br /&gt;
&lt;br /&gt;
Am Ende der Beschreibung der Syntax für die Befehle und zur Programmierung ist in [[Roboterzellen: Syntax]] ein Beispiel aufgefürt.&lt;br /&gt;
&lt;br /&gt;
'''Anmerkung''': Klingt komplizierte als es ist. Im Kern ist es ein Gemisch aus neuronalen Netzen und Regeln von Expertensystemen. Mal abwarten, wie es sich implementieren lässt. Wenn es funktioniert, kann eine Robotersteuerung ganz einfach aufgebaut werden und man konzentriert sich auf die Problemstellung. Ballast, wie das Erlernen einer Programmiersprache, ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
Die Syntax der Befehle und Programmierung ist in [[Roboterzellen: Syntax]] beschrieben. Dort ist am Ende auch ein Beispiel zur Erstellung und Programmierung ausgeführt.&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13783</id>
		<title>Roboterzellen: Syntax</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13783"/>
				<updated>2008-08-01T19:40:32Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Beispiel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Elemente zur Beschreibung =&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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…&lt;br /&gt;
== Ganze_Zahl ==&lt;br /&gt;
Eine ganze Zahl ist eine positive (1, 2, …) oder negative (-1, -2, …) ganze Zahl oder der Wert 0.&lt;br /&gt;
== Positive ganze Zahl ==&lt;br /&gt;
Eine positive ganze Zahl ist eine ganze Zahl größer oder gleich 0.&lt;br /&gt;
&lt;br /&gt;
== Kommazahl ==&lt;br /&gt;
Eine Kommazahl ist eine Zahl mit einem Komma oder in exponentieller Schreibweise (Zahlentyp Float).&lt;br /&gt;
&lt;br /&gt;
== Zahl ==&lt;br /&gt;
&lt;br /&gt;
Eine Zahl ist eine ganze Zahl oder eine Kommazahl. &lt;br /&gt;
&lt;br /&gt;
== Wort ==&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
== „Zeichenfolge“ ==&lt;br /&gt;
&lt;br /&gt;
Die in Klammern gesetzte Zeichenfolge muss vorkommen.  Dann natürlich ohne die Anführungszeichen („“).&lt;br /&gt;
&lt;br /&gt;
== Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Ein Bezeichner ist ein Wort und kennzeichnet das jeweilige syntaktische Element.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Diese Schreibweise bedeutet: Ein Ausdruck kann ein Bezeichner sein.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck kann eine Folge von Ausdrücken sein. Mit A B wird beschrieben, dass nach dem Ausdruck A der Ausdruck B zutreffen muss.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „|“ Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Mit A | B wird beschrieben, dass der Ausdruck entweder A oder B ist. Eine der Alternativen muss jedoch zutreffen.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „(“ Ausdruck „)“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „[“ Ausdruck „]“ ==&lt;br /&gt;
&lt;br /&gt;
Beschreibt optionale Elemente. A [B] beschreibt, dass entweder A alleine, oder A gefolgt von B auftreten darf.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „…“ ==&lt;br /&gt;
Der Ausdruck darf beliebig oft wiederholt werden. So beschreibt (0 | 1)… die binären Ziffern: 0 oder 1 oder 10 oder 11 oder …&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Die Definitionen einer Zelle =&lt;br /&gt;
&lt;br /&gt;
== Name ::= Wort … ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zelldefinition ::= [Wertebereich | Speicherstelle | Zusammenhang ] … ==&lt;br /&gt;
&lt;br /&gt;
Eine Zelle enthält beliebig viele (d.h. solange der Speicherplatz ausreicht) Definitionen von Wertebereichen, Speicherstellen oder Zusammenhängen.&lt;br /&gt;
&lt;br /&gt;
== Wertebereich ::= „Wertebereich“ WName „=“ ( Aufzählung | Zahlenbereich ) ==&lt;br /&gt;
&lt;br /&gt;
Ein Wertebereich besteht aus einem Namen, dem eine Aufzählung oder ein Zahlenbereich zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
== WName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner eines Wertebereichs. Wertebereiche sind über alle Zellen eines Roboters (Zellverbundes) hinweg gültig. &lt;br /&gt;
&lt;br /&gt;
== Aufzählung  ::= „{“ AName [ „,“ AName ] … „}“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== AName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Ein Name aus der Aufzählung eines Wertebereichs. &lt;br /&gt;
&lt;br /&gt;
== Zahlenbereich ::= ( Ganze_Zahl  „..“ Ganze_Zahl  ) | ( Kommazahl „..“ Kommazahl ) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Speicherstelle ::= 	(„Element“ EName  „:“ WName ) | („Gemeinsam“ EName  „:“ Slave „,“ EName) ==&lt;br /&gt;
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.)&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== EName::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner einer Speicherstelle. Die Namen „und“ bzw. „Ende“ sind nicht zulässig.&lt;br /&gt;
&lt;br /&gt;
== Zusammenhang  ::= „Zusammenhang“ Elementbeschreibung  [ „und“ Elementbeschreibung  ] … „Ende“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Elementbeschreibung  ::= EName „=“ Gewicht „=“ (Zahlenbereich | Zahl | AName) ==&lt;br /&gt;
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.&lt;br /&gt;
Die Anwendung einer Elementbeschreibung setzt die Speicherstelle auf die angegebene Zahl oder den Namen der Aufzählung bzw. die Mitte vom Zahlenbereich.&lt;br /&gt;
&lt;br /&gt;
== Gewicht ::= Ganze_Zahl ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
= Steuerbefehle =&lt;br /&gt;
Nachfolgend sind die für die Ein-/Ausgabeeinheit zur Programmierung der Zellen erforderlichen Befehle zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Ring ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Der aktuelle Ring ist ein Ring, der gerade betrachtet wird.&lt;br /&gt;
&lt;br /&gt;
== Zellenname_vergeben ::= „neu“ Slave ==&lt;br /&gt;
 &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
== Slave ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Name einer Zelle innerhalb eines Rings. Der Name ist in dem Ring eindeutig zu wählen.&lt;br /&gt;
&lt;br /&gt;
== Ring_wechseln ::= „zu“ Slave ==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Die Ein-/Ausgabeeinheit hat einen eigenen Namen.&lt;br /&gt;
&lt;br /&gt;
== Name_der_EA ::= „EA“ Name ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zurückgehen ::= „weg“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== umbenennen ::= „bezeichne“ EName  „als“ EName  ==&lt;br /&gt;
 &lt;br /&gt;
Die Speicherstelle EName erhält die neue Bezeichnung nach dem Schlüsselwort „als“.&lt;br /&gt;
&lt;br /&gt;
== auflisten  ::= „Elemente“ | „Zusammenhänge“ ==&lt;br /&gt;
	&lt;br /&gt;
Die Speicherstellen bzw. Zusammenhänge des Masters im aktuellen Ring werden aufgelistet.&lt;br /&gt;
= Beispiel =&lt;br /&gt;
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.&lt;br /&gt;
Hierzu werden nachfolgende Zellen benötigt:&lt;br /&gt;
&lt;br /&gt;
- '''Stromversorgung''':&lt;br /&gt;
Sie versorgt den Roboter mit Energie. Über einen Ein-/Ausschalter kann der Roboter gestartet werden.&lt;br /&gt;
&lt;br /&gt;
- '''Radzelle''' (2 fach):&lt;br /&gt;
Ein mit Motor angetriebenes Rad.&lt;br /&gt;
&lt;br /&gt;
- '''Logikzelle''':&lt;br /&gt;
Die Steuerzentrale des Roboters.&lt;br /&gt;
&lt;br /&gt;
- '''Stützrad''':&lt;br /&gt;
Wie bei kleinen Modellen üblich, wird zur Abstützung ein rein passives Stützrad eingesetzt.&lt;br /&gt;
&lt;br /&gt;
- '''Sensorzelle''':&lt;br /&gt;
Mit der Sensorzelle sind zwei bewegliche Photozellen verbunden, über die die Steuerlinie detektiert werden kann.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Der Aufbau ==&lt;br /&gt;
Die Ein-/Ausgabeeinheit wird eingeschaltet und mit dem Befehl&lt;br /&gt;
&lt;br /&gt;
'''''EA   Linienbot'''''&lt;br /&gt;
&lt;br /&gt;
mit einem Namen versehen. &lt;br /&gt;
 &lt;br /&gt;
Dann wird die Stromversorgung angeschlossen. Über&lt;br /&gt;
&lt;br /&gt;
'''''neu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
erhält die Stromversorgung ihren Namen. Mit&lt;br /&gt;
&lt;br /&gt;
'''''zu Strombasis'''''&lt;br /&gt;
&lt;br /&gt;
wird diese als Master angegeben.&lt;br /&gt;
&lt;br /&gt;
Nun kann die linke Radzelle befestigt werden und über&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
ihren Namen erhalten. Gleichzeitig wird damit festgelegt, dass sich das Rad als Slave mit der Stromversorgung als Master in einem Ring befindet. &lt;br /&gt;
&lt;br /&gt;
Dem rechten Rad wird der Name vergeben:&lt;br /&gt;
&lt;br /&gt;
'''''neu Rad rechts'''''&lt;br /&gt;
&lt;br /&gt;
Mittig an der Stromversorgung wird nun die Logikzelle gegenüber der Ein-/Ausgabeeinheit angefügt. Auch hier ein Name:&lt;br /&gt;
&lt;br /&gt;
'''''neu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Das Stützrad wird angebracht:&lt;br /&gt;
&lt;br /&gt;
'''''neu Stützrad'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Die Sensorzelle wird nach dem Stützrad in Linie mit der Logikzelle verbunden.&lt;br /&gt;
&lt;br /&gt;
'''''neu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Nun ist der Roboter aufgebaut und kann programmiert werden.&lt;br /&gt;
== Einrichtung der Speicherzellen ==&lt;br /&gt;
Gemäß obiger Sequenz ist die Denkstation aktueller Master.&lt;br /&gt;
&lt;br /&gt;
'''''zu Sensor'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns in den Sensor, so dass dieser programmiert werden kann.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
&lt;br /&gt;
'''''bezeichne Sensor 1 als Sensor links&lt;br /&gt;
&lt;br /&gt;
bezeichne Sensor 2 als Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert nun die umbenannten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sensor links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Sensor rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Da hier jetzt nichts mehr zu tun ist, wird auf den vorherigen Master, die Logikzelle positioniert:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Denkstation&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Links : Sensor, Sensor links&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Rechts : Sensor, Sensor rechts'''''&lt;br /&gt;
&lt;br /&gt;
werden die Sensorinformationen der Denkstation zur Verfügung gestellt.&lt;br /&gt;
&lt;br /&gt;
Fürs erste nun weiter zu den Motoren:&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
'''''zu Rad links'''''&lt;br /&gt;
&lt;br /&gt;
bringt uns zum einen Motor.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Sollbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Istbewegung : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich Motorstärke ist dabei definiert als -100 .. 100. Die Namen sollen hier unverändert beibehalten werden.&lt;br /&gt;
&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor links : Rad links, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Kann das linke Rad von der Strombasis angesteuert werden.&lt;br /&gt;
&lt;br /&gt;
Da es sich bei den Radzellen um den gleichen Zelltyp handelt, sind auch die gleichen Namen für die Speicherstellen vorprogrammiert:&lt;br /&gt;
'''''Gemeinsam Motor rechts : Rad rechts, Sollbewegung'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber ist die Steuerung vom rechten Rad der Strombasis bekannt gegeben worden.&lt;br /&gt;
&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
&lt;br /&gt;
Hierüber wird in die Logikzelle gewechselt.&lt;br /&gt;
&lt;br /&gt;
'''''Gemeinsam Motor rechts : Strombasis, Motor rechts&lt;br /&gt;
&lt;br /&gt;
Gemeinsam Motor links: Strombasis, Motor links'''''&lt;br /&gt;
&lt;br /&gt;
Diese Befehle machen die Motoren der Logikzelle verfügbar. Jede Änderung bei diesen Speicherstellen wird in die betreffende Speicherstelle der Radzelle automatisch übertragen.&lt;br /&gt;
&lt;br /&gt;
== Die Programmierung ==&lt;br /&gt;
&lt;br /&gt;
Nun müssen in der Logikzelle noch die Zusammenhänge aufgezeigt werden. Wir befinden uns in der Denkstation.&lt;br /&gt;
&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
&lt;br /&gt;
Links : Photosensor&lt;br /&gt;
&lt;br /&gt;
Rechts : Photosensor&lt;br /&gt;
&lt;br /&gt;
Motor links : Motorstärke&lt;br /&gt;
&lt;br /&gt;
Motor rechts : Motorstärke&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nun zu den Zusammenhängen:&lt;br /&gt;
&lt;br /&gt;
Wenn beide Sensoren ansprechen, fahre ich richtig:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = detektiert und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wenn der linke Sensor anspricht, der rechte jedoch nicht, sollte nach links gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 11000 = detektiert und Rechts = -6000 = detektiert und Motor links = 0 =50 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Die Linkskurve wird durch die unterschiedlichen Geschwindigkeiten erreicht.&lt;br /&gt;
&lt;br /&gt;
Wenn der rechte Sensor anspricht, der linke jedoch nicht, sollte nach rechts gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 50 Ende'''''&lt;br /&gt;
&lt;br /&gt;
Einfach eine andere Art der Berechnung.&lt;br /&gt;
&lt;br /&gt;
Wenn kein Sensor anspricht, fahre ich einen Kreis:&lt;br /&gt;
&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = frei und Motor links = 0 =60 und Motor rechts = 0 = 30 Ende'''''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Programmierung wird die Ein-/Ausgabeeinheit ausgeschaltet und vom Roboter gelöst. Mit Einschalten der Stromversorgung kann die Fahrt beginnen.&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13782</id>
		<title>Roboterzellen: Syntax</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen:_Syntax&amp;diff=13782"/>
				<updated>2008-08-01T19:31:09Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Elemente zur Beschreibung =&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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…&lt;br /&gt;
== Ganze_Zahl ==&lt;br /&gt;
Eine ganze Zahl ist eine positive (1, 2, …) oder negative (-1, -2, …) ganze Zahl oder der Wert 0.&lt;br /&gt;
== Positive ganze Zahl ==&lt;br /&gt;
Eine positive ganze Zahl ist eine ganze Zahl größer oder gleich 0.&lt;br /&gt;
&lt;br /&gt;
== Kommazahl ==&lt;br /&gt;
Eine Kommazahl ist eine Zahl mit einem Komma oder in exponentieller Schreibweise (Zahlentyp Float).&lt;br /&gt;
&lt;br /&gt;
== Zahl ==&lt;br /&gt;
&lt;br /&gt;
Eine Zahl ist eine ganze Zahl oder eine Kommazahl. &lt;br /&gt;
&lt;br /&gt;
== Wort ==&lt;br /&gt;
&lt;br /&gt;
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.)&lt;br /&gt;
&lt;br /&gt;
== „Zeichenfolge“ ==&lt;br /&gt;
&lt;br /&gt;
Die in Klammern gesetzte Zeichenfolge muss vorkommen.  Dann natürlich ohne die Anführungszeichen („“).&lt;br /&gt;
&lt;br /&gt;
== Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Ein Bezeichner ist ein Wort und kennzeichnet das jeweilige syntaktische Element.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Bezeichner ==&lt;br /&gt;
&lt;br /&gt;
Diese Schreibweise bedeutet: Ein Ausdruck kann ein Bezeichner sein.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Ein Ausdruck kann eine Folge von Ausdrücken sein. Mit A B wird beschrieben, dass nach dem Ausdruck A der Ausdruck B zutreffen muss.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „|“ Ausdruck ==&lt;br /&gt;
&lt;br /&gt;
Mit A | B wird beschrieben, dass der Ausdruck entweder A oder B ist. Eine der Alternativen muss jedoch zutreffen.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „(“ Ausdruck „)“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= „[“ Ausdruck „]“ ==&lt;br /&gt;
&lt;br /&gt;
Beschreibt optionale Elemente. A [B] beschreibt, dass entweder A alleine, oder A gefolgt von B auftreten darf.&lt;br /&gt;
&lt;br /&gt;
== Ausdruck ::= Ausdruck „…“ ==&lt;br /&gt;
Der Ausdruck darf beliebig oft wiederholt werden. So beschreibt (0 | 1)… die binären Ziffern: 0 oder 1 oder 10 oder 11 oder …&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
= Die Definitionen einer Zelle =&lt;br /&gt;
&lt;br /&gt;
== Name ::= Wort … ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zelldefinition ::= [Wertebereich | Speicherstelle | Zusammenhang ] … ==&lt;br /&gt;
&lt;br /&gt;
Eine Zelle enthält beliebig viele (d.h. solange der Speicherplatz ausreicht) Definitionen von Wertebereichen, Speicherstellen oder Zusammenhängen.&lt;br /&gt;
&lt;br /&gt;
== Wertebereich ::= „Wertebereich“ WName „=“ ( Aufzählung | Zahlenbereich ) ==&lt;br /&gt;
&lt;br /&gt;
Ein Wertebereich besteht aus einem Namen, dem eine Aufzählung oder ein Zahlenbereich zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
== WName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner eines Wertebereichs. Wertebereiche sind über alle Zellen eines Roboters (Zellverbundes) hinweg gültig. &lt;br /&gt;
&lt;br /&gt;
== Aufzählung  ::= „{“ AName [ „,“ AName ] … „}“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== AName ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Ein Name aus der Aufzählung eines Wertebereichs. &lt;br /&gt;
&lt;br /&gt;
== Zahlenbereich ::= ( Ganze_Zahl  „..“ Ganze_Zahl  ) | ( Kommazahl „..“ Kommazahl ) ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Speicherstelle ::= 	(„Element“ EName  „:“ WName ) | („Gemeinsam“ EName  „:“ Slave „,“ EName) ==&lt;br /&gt;
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.)&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== EName::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Bezeichner einer Speicherstelle. Die Namen „und“ bzw. „Ende“ sind nicht zulässig.&lt;br /&gt;
&lt;br /&gt;
== Zusammenhang  ::= „Zusammenhang“ Elementbeschreibung  [ „und“ Elementbeschreibung  ] … „Ende“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Elementbeschreibung  ::= EName „=“ Gewicht „=“ (Zahlenbereich | Zahl | AName) ==&lt;br /&gt;
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.&lt;br /&gt;
Die Anwendung einer Elementbeschreibung setzt die Speicherstelle auf die angegebene Zahl oder den Namen der Aufzählung bzw. die Mitte vom Zahlenbereich.&lt;br /&gt;
&lt;br /&gt;
== Gewicht ::= Ganze_Zahl ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
= Steuerbefehle =&lt;br /&gt;
Nachfolgend sind die für die Ein-/Ausgabeeinheit zur Programmierung der Zellen erforderlichen Befehle zusammengestellt.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Ring ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
Der aktuelle Ring ist ein Ring, der gerade betrachtet wird.&lt;br /&gt;
&lt;br /&gt;
== Zellenname_vergeben ::= „neu“ Slave ==&lt;br /&gt;
 &lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
== Slave ::= Name ==&lt;br /&gt;
&lt;br /&gt;
Der Name einer Zelle innerhalb eines Rings. Der Name ist in dem Ring eindeutig zu wählen.&lt;br /&gt;
&lt;br /&gt;
== Ring_wechseln ::= „zu“ Slave ==&lt;br /&gt;
&lt;br /&gt;
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. &lt;br /&gt;
Die Ein-/Ausgabeeinheit hat einen eigenen Namen.&lt;br /&gt;
&lt;br /&gt;
== Name_der_EA ::= „EA“ Name ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Zurückgehen ::= „weg“ ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== umbenennen ::= „bezeichne“ EName  „als“ EName  ==&lt;br /&gt;
 &lt;br /&gt;
Die Speicherstelle EName erhält die neue Bezeichnung nach dem Schlüsselwort „als“.&lt;br /&gt;
&lt;br /&gt;
== auflisten  ::= „Elemente“ | „Zusammenhänge“ ==&lt;br /&gt;
	&lt;br /&gt;
Die Speicherstellen bzw. Zusammenhänge des Masters im aktuellen Ring werden aufgelistet.&lt;br /&gt;
= Beispiel =&lt;br /&gt;
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.&lt;br /&gt;
Hierzu werden nachfolgende Zellen benötigt&lt;br /&gt;
- Stromversorgung&lt;br /&gt;
Sie versorgt den Roboter mit Energie. Über einen Ein-/Ausschalter kann der Roboter gestartet werden.&lt;br /&gt;
- Radzelle (2 fach)&lt;br /&gt;
Ein mit Motor angetriebenes Rad.&lt;br /&gt;
- Logikzelle&lt;br /&gt;
Die Steuerzentrale des Roboters.&lt;br /&gt;
- Stützrad&lt;br /&gt;
Wie bei kleinen Modellen üblich, wird zur Abstützung ein rein passives Stützrad eingesetzt.&lt;br /&gt;
- Sensorzelle&lt;br /&gt;
&lt;br /&gt;
Mit der Sensorzelle sind zwei bewegliche Photozellen verbunden, über die die Steuerlinie detektiert werden kann.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Der Aufbau ==&lt;br /&gt;
Die Ein-/Ausgabeeinheit wird eingeschaltet und mit dem Befehl&lt;br /&gt;
'''''EA   Linienbot'''''&lt;br /&gt;
mit einem Namen versehen.  &lt;br /&gt;
Dann wird die Stromversorgung angeschlossen. Über&lt;br /&gt;
'''''neu Strombasis'''''&lt;br /&gt;
erhält die Stromversorgung ihren Namen. Mit&lt;br /&gt;
'''''zu Strombasis'''''&lt;br /&gt;
wird diese als Master angegeben.&lt;br /&gt;
Nun kann die linke Radzelle befestigt werden und über&lt;br /&gt;
'''''neu Rad links'''''&lt;br /&gt;
ihren Namen erhalten. Gleichzeitig wird damit festgelegt, dass sich das Rad als Slave mit der Stromversorgung als Master in einem Ring befindet. &lt;br /&gt;
Dem rechten Rad wird der Name vergeben:&lt;br /&gt;
'''''neu Rad rechts'''''&lt;br /&gt;
Mittig an der Stromversorgung wird nun die Logikzelle gegenüber der Ein-/Ausgabeeinheit angefügt. Auch hier ein Name:&lt;br /&gt;
'''''neu Denkstation'''''&lt;br /&gt;
'''''zu Denkstation'''''&lt;br /&gt;
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.&lt;br /&gt;
Das Stützrad wird angebracht:&lt;br /&gt;
'''''neu Stützrad'''''&lt;br /&gt;
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.&lt;br /&gt;
Die Sensorzelle wird nach dem Stützrad in Linie mit der Logikzelle verbunden.&lt;br /&gt;
'''''neu Sensor'''''&lt;br /&gt;
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. &lt;br /&gt;
&lt;br /&gt;
Nun ist der Roboter aufgebaut und kann programmiert werden.&lt;br /&gt;
== Einrichtung der Speicherzellen ==&lt;br /&gt;
Gemäß obiger Sequenz ist die Denkstation aktueller Master.&lt;br /&gt;
'''''zu Sensor'''''&lt;br /&gt;
bringt uns in den Sensor, so dass dieser programmiert werden kann.&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
Sensor 1 : Photosensor&lt;br /&gt;
'''''bezeichne Sensor 1 als Sensor links&lt;br /&gt;
bezeichne Sensor 2 als Sensor rechts'''''&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
liefert nun die umbenannten Speicherstellen:&lt;br /&gt;
Sensor links : Photosensor&lt;br /&gt;
Sensor rechts : Photosensor&lt;br /&gt;
Da hier jetzt nichts mehr zu tun ist, wird auf den vorherigen Master, die Logikzelle positioniert:&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
Es folgt die Antwort: Denkstation&lt;br /&gt;
Mit&lt;br /&gt;
'''''Gemeinsam Links : Sensor, Sensor links&lt;br /&gt;
Gemeinsam Rechts : Sensor, Sensor rechts'''''&lt;br /&gt;
werden die Sensorinformationen der Denkstation zur Verfügung gestellt.&lt;br /&gt;
Fürs erste nun weiter zu den Motoren:&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
'''''zu Rad links'''''&lt;br /&gt;
bringt uns zum einen Motor.&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
Sollbewegung : Motorstärke&lt;br /&gt;
Istbewegung : Motorstärke&lt;br /&gt;
Der Wertebereich Motorstärke ist dabei definiert als -100 .. 100. Die Namen sollen hier unverändert beibehalten werden.&lt;br /&gt;
'''''weg'''''&lt;br /&gt;
Es folgt die Antwort: Strombasis&lt;br /&gt;
Mit&lt;br /&gt;
'''''Gemeinsam Motor links : Rad links, Sollbewegung'''''&lt;br /&gt;
Kann das linke Rad von der Strombasis angesteuert werden.&lt;br /&gt;
Da es sich bei den Radzellen um den gleichen Zelltyp handelt, sind auch die gleichen Namen für die Speicherstellen vorprogrammiert&lt;br /&gt;
'''''Gemeinsam Motor rechts : Rad rechts, Sollbewegung'''''&lt;br /&gt;
Hierüber ist die Steuerung vom rechten Rad der Strombasis bekannt gegeben worden.&lt;br /&gt;
zu Denkstation&lt;br /&gt;
Hierüber wird in die Logikzelle gewechselt.&lt;br /&gt;
'''''Gemeinsam Motor rechts : Strombasis, Motor rechts&lt;br /&gt;
Gemeinsam Motor links: Strombasis, Motor links'''''&lt;br /&gt;
Diese Befehle machen die Motoren der Logikzelle verfügbar. Jede Änderung bei diesen Speicherstellen wird in die betreffende Speicherstelle der Radzelle automatisch übertragen.&lt;br /&gt;
&lt;br /&gt;
== Die Programmierung ==&lt;br /&gt;
&lt;br /&gt;
Nun müssen in der Logikzelle noch die Zusammenhänge aufgezeigt werden. Wir befinden uns in der Denkstation.&lt;br /&gt;
'''''Elemente'''''&lt;br /&gt;
liefert eine Übersicht, über die dort vordefinierten Speicherstellen:&lt;br /&gt;
Links : Photosensor&lt;br /&gt;
Rechts : Photosensor&lt;br /&gt;
Motor links : Motorstärke&lt;br /&gt;
Motor rechts : Motorstärke&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Nun zu den Zusammenhängen:&lt;br /&gt;
Wenn beide Sensoren ansprechen, fahre ich richtig:&lt;br /&gt;
'''''Zusammenhang Links = 6000 = detektiert und Rechts = 6000 = detektiert und Motor links = 0 =100 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Wenn der linke Sensor anspricht, der rechte jedoch nicht, sollte nach links gesteuert werden:&lt;br /&gt;
'''''Zusammenhang Links = 11000 = detektiert und Rechts = -6000 = detektiert und Motor links = 0 =50 und Motor rechts = 0 = 100 Ende'''''&lt;br /&gt;
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.&lt;br /&gt;
Die Linkskurve wird durch die unterschiedlichen Geschwindigkeiten erreicht.&lt;br /&gt;
&lt;br /&gt;
Wenn der rechte Sensor anspricht, der linke jedoch nicht, sollte nach rechts gesteuert werden:&lt;br /&gt;
'''''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.&lt;br /&gt;
&lt;br /&gt;
Wenn kein Sensor anspricht, fahre ich einen Kreis:&lt;br /&gt;
'''''Zusammenhang Links = 6000 = frei und Rechts = 6000 = frei und Motor links = 0 =60 und Motor rechts = 0 = 30 Ende'''''&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Programmierung wird die Ein-/Ausgabeeinheit ausgeschaltet und vom Roboter gelöst. Mit Einschalten der Stromversorgung kann die Fahrt beginnen.&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13781</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13781"/>
				<updated>2008-08-01T19:17:58Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Programmierung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
&lt;br /&gt;
==== Steckverbindungen ====&lt;br /&gt;
Es werden zwei Steckverbindungen entsprechend der [[RN-Definitionen]] verwendet:&lt;br /&gt;
Zur Kommunikation und bei geringem Stromverbrauch der I2C-Bus Stecker als 10-poliger Wannenstecker:&lt;br /&gt;
[[Bild:rndefinition_wannenstecker.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Stromversorgung für Leistungsverbraucher erfolgt über die universellen Wannenstecker AKL230 mit 4 Polen.&lt;br /&gt;
&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* die Informationsübertragung und&lt;br /&gt;
* die Stromversorgung &lt;br /&gt;
&lt;br /&gt;
==== Informationsübertragung ====&lt;br /&gt;
Die Informationsübertragung erfolgt über den I2C-Bus Stecker gemäß [[RN-Definitionen]]:&lt;br /&gt;
[[Bild:stecker_10pol_i2c.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Pin 1        SCL (Taktleitung)&lt;br /&gt;
 Pin 3        SDA (Datenleitung)&lt;br /&gt;
 Pin 5        +5V&lt;br /&gt;
 Pin 7        +5V&lt;br /&gt;
 Pin 9        Batteriespannung +12V&lt;br /&gt;
 Pin 8        GND Batterie&lt;br /&gt;
 Pin 2,4,6    GND &lt;br /&gt;
 Pin 10       INT   &lt;br /&gt;
&lt;br /&gt;
Es sind Maximal 3 A je Pin zulässig.&lt;br /&gt;
Pin 5 und 7 besitzen eine geregelte +5V Spannung.&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Bei Bedarf, kann über einen zusätzlichen Stecker die Stromversorgung bis zu 10 A sichergestellt werden.&lt;br /&gt;
 Pin 1        Batteriespannung +12V&lt;br /&gt;
 Pin 2        GND Batterie&lt;br /&gt;
 Pin 3        Ladungsspannung &amp;lt;= ???V&lt;br /&gt;
 Pin 4        GND Ladung&lt;br /&gt;
&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
Die Ladespannung dient zum Aufladen der Batterien. Es ist nicht sichergestellt, dass hier auch eine Spannung anliegt bzw. wie groß die Spannung tatsächlich ist. Hier können Stromerzeuger, wie z.B. ein Netzteil oder aber auch Solarzellen, ihren Strom anbieten.&lt;br /&gt;
&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
Der Informationsaustausch zwischen Zellen erfolgt über die Definition gemeinsamer Speicherzellen (Siehe [[Roboterzellen#Logik]]). Der Nutzer benennt lediglich die Speicherstellen, die einen gemeinsamen Wert beinhalten sollen. Das Betriebssystem regelt das Zusammenwirken beim Lesen oder Schreiben.&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
Die Implementierung von Funktionen einer Zelle ist frei. Die Kommunikation zu anderen Zellen erfolgt jedoch ausschließlich über das Betriebssystem im Rahmen von gemeinsamen Speicherstellen. Da diese Kommunikation auf der Basis von I2C erfolgt, müssen bei der zusätzlichen Einbindung von I2C-Modulen gewisse Rahmenbedingungen eingehalten werden und es sind bestimmte Betriebssystemfunktionen zu verwenden.&lt;br /&gt;
&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
Die Informationsverarbeitung erfolgt bei allen Roboterzellen nach dem gleichen Prinzip. Deswegen enthält jede Zelle auch einen Logik-Anteil, so dass die Zusammenarbeit sichergestellt ist.&lt;br /&gt;
===== Definition von Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle besitzt einen Namen und einen Wertebereich. Der Name ist innerhalb einer Zelle eindeutig. Der Wertebereich ist über alle Zellen eindeutig definiert.&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich kann eine Auflistung von Bezeichnern sein (z.B. Boolean: {False, True}) oder ein Zahlenbereich (z.B. Byte: 0 .. 255). Vordefiniert sind die Wertebereiche von Boolean, Byte, Integer und Float.&lt;br /&gt;
===== Definition gemeinsamer Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle kann auch derart definiert werden, dass man sich auf die Speicherstelle einer anderen Zelle bezieht. Dann stellt das Betriebssystem sicher, dass der Zugriff (Lesen oder Schreiben) von jeder betroffenen Zelle aus so erfolgt, als wenn es sich um eine lokale Definition handeln würde. Veränderungen werden transparent durchgereicht. Die [[Roboterzellen#Logische Schnittstelle|logische Schnittstelle]] besteht also eigentlich in diesen gemeinsamen Speicherstellen.&lt;br /&gt;
&lt;br /&gt;
===== Programmierung =====&lt;br /&gt;
Die Programmierung erfolgt, indem die Zusammenhänge zwischen den Speicherstellen einer Zelle beschrieben werden. Jeder ''Zusammenhang'' ist eine Liste von ''Speicherstellenbeschreibungen''. &lt;br /&gt;
&lt;br /&gt;
Eine  ''Speicherstellenbeschreibung'' benennt eine Speicherstelle, den vorgesehenen Wert (oder einen Bereich von Werten) und ein ''angegebenes Gewicht''.&lt;br /&gt;
&lt;br /&gt;
Die Zelle sucht nun permanent nach ''gültigen Zusammenhängen'' und führt diese aus. Ein Zusammenhang ist gültig, wenn die Summe der Gewichte der Speicherstellenbeschreibungen über einem gewissen Schwellwert liegt. &lt;br /&gt;
&lt;br /&gt;
Das ''Gewicht einer Speicherstellenbeschreibung'' berechnet sich wie folgt: Entspricht der momentane Wert einer Speicherstelle einem der vorgesehenen Werte, so ist das ''Gewicht der Speicherstellenbeschreibung'' gleich dem ''angegebenen Gewicht''. Andernfalls ist es 0.&lt;br /&gt;
&lt;br /&gt;
Liegt die Summe der Gewichte (Gesamtgewicht) nun über einem gewissen Schwellwert, so wird der Zusammenhang ausgeführt: Die Werte aller im Zusammenhang aufgeführten Speicherstellen werden so verändert, dass ein möglichst hohes Gesamtgewicht erreicht wird.&lt;br /&gt;
&lt;br /&gt;
Am Ende der Beschreibung der Syntax für die Befehle und zur Programmierung ist in [[Roboterzellen: Syntax]] ein Beispiel aufgefürt.&lt;br /&gt;
&lt;br /&gt;
'''Anmerkung''': Klingt komplizierte als es ist. Im Kern ist es ein Gemisch aus neuronalen Netzen und Regeln von Expertensystemen. Mal abwarten, wie es sich implementieren lässt. Wenn es funktioniert, kann eine Robotersteuerung ganz einfach aufgebaut werden und man konzentriert sich auf die Problemstellung. Ballast, wie das Erlernen einer Programmiersprache, ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Roboterzellen&amp;diff=13743</id>
		<title>Diskussion:Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Roboterzellen&amp;diff=13743"/>
				<updated>2008-07-26T15:32:19Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine tolle Vision. Bei der praktischen Umsetzung würde ich gerne mitmachen...&lt;br /&gt;
&lt;br /&gt;
Aber: Viel von dem bisher Beschriebenen sind nach meinem Verständnis keine Zellen mehr, sondern bereits zusammengesetzte Module!&lt;br /&gt;
Um zellulare Bots zu bauen, muß daher meiner Meinung nach zwingend die Betrachtung/Entwicklung der Roboterelektronik von der Mechanik getrennt werden. &lt;br /&gt;
&lt;br /&gt;
Beispiel: Eine Bewegungszelle (der Teil logischer Funktionalität, der für Bewegung zuständig ist) bekommt von der Gehirnzelle (der Teil logischer Funktionalität, der für die Erfüllung der gestellten Aufgabe zuständig ist) nur mitgeteilt &amp;quot;...bewege dich um 100 Einheiten vorwärts...&amp;quot;.&amp;lt;br/&amp;gt;Die Bewegungszelle führt nun diese Bewegung aus, und dabei muß es egal sein, ob ein Schrittmotor, ein Linearmotor, ein Winkelservo, ein Hydraulikzylinder oder was auch immer angesteuert wird... und hier liegt die größte Schwierigkeit: Die Bewegungszelle muß alle vorhandenen Antriebselemente steuern können, da ihr vorher nicht bekannt ist, was verwendet wird (ob sie Rad, Bein oder Kranarm ist...)!&amp;lt;br/&amp;gt;Die Bewegungszelle weiß, wieviel Zeit ihr für die Ausführung dieser Bewegung bleibt. Ihre Rückmeldung an die Gehirnzelle besteht nur aus &amp;quot;OK&amp;quot; (Aufgabe in vorgegebener Zeit erledigt), &amp;quot;ERR&amp;quot; (Störung der gesamten Bewegungszelle) oder &amp;quot;NOxx&amp;quot; (Aufgabe aus verschiedenen Gründen nur teilweise erledigt, xx ist der Erfüllungsgrad in Prozent).&lt;br /&gt;
&lt;br /&gt;
Auf diese Art bleiben nur wenige Roboterzellen übrig:&amp;lt;br/&amp;gt;- Bewegungszelle (s.o.)&amp;lt;br/&amp;gt;- Gehirnzelle (s.o.)&amp;lt;br/&amp;gt;- Sensorzelle (zuständig für die Ansteuerung beliebiger (!) Sensoren sowie die Auswertung deren Ergebnisse)&amp;lt;br/&amp;gt;- Stromversorgungszelle (zuständig für Batterien, Solarversorgung, externe Ladeströme etc.)&amp;lt;br/&amp;gt;- Kommunikationszelle (Ermitteln und Erkennen der eigenen Position sowie Mensch-Roboter-Schnittstelle)&lt;br /&gt;
&lt;br /&gt;
Der Rest ist (wenn auch mit viel Elektrik) für mich aber Mechanik. Muß zwar sein, ist aber nicht unbedingt zellularer Roboter... Auf diesem Weg kannst Du (sofern die Mechanik stimmt) mit&amp;lt;br/&amp;gt;- zwei Bewegungszellen sowie je einer der anderen Zellen einen kettengetriebene Planierraupe,&amp;lt;br/&amp;gt;daraus aber auch&amp;lt;br/&amp;gt;- mit vier zusätzlichen Bewegungszellen einen Hexabot zur kameragestützten Geländeerkundung&amp;lt;br/&amp;gt;bauen.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Williwilli|Williwilli]] 13:27, 25. Jul 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
(Hier komme ich leider mit dem Editor nicht so zurecht. Vielleicht sollten wir die Diskussion in das Forum verlegen)&lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''Eine tolle Vision. Bei der praktischen Umsetzung würde ich gerne mitmachen...'' &lt;br /&gt;
&lt;br /&gt;
Ich fände es toll, wenn Du mithelfen würdest.&lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''Aber: Viel von dem bisher Beschriebenen sind nach meinem Verständnis keine Zellen mehr, sondern bereits zusammengesetzte Module!''&lt;br /&gt;
 &lt;br /&gt;
Ja und nein: Jede Zelle hält die Schnittstellendefinition ein, hat aber ihre eigenen Stärken und Schwächen. So gibt es für die Stromversorgung eigene Zellen, für die Logil ebenfalls, für die Beweglichkeit, für ...&lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''Um zellulare Bots zu bauen, muß daher meiner Meinung nach zwingend die Betrachtung/Entwicklung der Roboterelektronik von der Mechanik getrennt werden.'' &lt;br /&gt;
&lt;br /&gt;
Das hatte ich in dem anderen Forum (Roboterschwarm) ebenfalls noch nicht verstanden ...&lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''Beispiel: Eine Bewegungszelle (der Teil logischer Funktionalität, der für Bewegung zuständig ist) bekommt von der Gehirnzelle (der Teil logischer Funktionalität, der für die Erfüllung der gestellten Aufgabe zuständig ist) nur mitgeteilt &amp;quot;...bewege dich um 100 Einheiten vorwärts...&amp;quot;. Die Bewegungszelle führt nun diese Bewegung aus, und dabei muß es egal sein, ob ein Schrittmotor, ein Linearmotor, ein Winkelservo, ein Hydraulikzylinder oder was auch immer angesteuert wird...'' &lt;br /&gt;
&lt;br /&gt;
Aber warum denn? Der logische Teil (Controller) ist mittlerweile so kostengünstig, dass ich ihn einfach zur Mechanik dazunehme. Dann kann man Mechanik, Motorik u.s.w. optimal aufeinander abstimmen und eine möglichst kostengünstige Zelle erstellen. Die hält jedoch ebenfalls die Schnittstellendefinition ein: die Gehirnzelle meldet der Bewegungszelle immer nur &amp;quot;...bewege dich um 100 Einheiten vorwärts...&amp;quot;, egal ob die Bewegungszelle die Zelle für Schrittmotor, Linearmotor, Winkelservo, Hydraulikzylinder oder was auch immer ist. Es gibt einfach für jeden Typ eine andere Zelle, die auf Schnittstelleneben aber gleich aussehen ...&lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''und hier liegt die größte Schwierigkeit: Die Bewegungszelle muß alle vorhandenen Antriebselemente steuern können, da ihr vorher nicht bekannt ist, was verwendet wird (ob sie Rad, Bein oder Kranarm ist...)!''&lt;br /&gt;
&lt;br /&gt;
Die Bewegungszelle '''ist''' das Antriebselemente und kennt sich mit diesem bestends aus ... Andere Antriebselemente kennt sie jedoch nicht.&lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''Auf diese Art bleiben nur wenige Roboterzellen übrig''&lt;br /&gt;
&lt;br /&gt;
Ja, ja und nochmals ja! &lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''Der Rest ist (wenn auch mit viel Elektrik) für mich aber Mechanik. Muß zwar sein, ist aber nicht unbedingt zellularer Roboter...'' &lt;br /&gt;
&lt;br /&gt;
Das kapiere ich mal wieder nicht.&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 17:32, 26. Jul 2008 (CEST)&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:Roboterzellen&amp;diff=13742</id>
		<title>Diskussion:Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:Roboterzellen&amp;diff=13742"/>
				<updated>2008-07-26T15:31:36Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Eine tolle Vision. Bei der praktischen Umsetzung würde ich gerne mitmachen...&lt;br /&gt;
&lt;br /&gt;
Aber: Viel von dem bisher Beschriebenen sind nach meinem Verständnis keine Zellen mehr, sondern bereits zusammengesetzte Module!&lt;br /&gt;
Um zellulare Bots zu bauen, muß daher meiner Meinung nach zwingend die Betrachtung/Entwicklung der Roboterelektronik von der Mechanik getrennt werden. &lt;br /&gt;
&lt;br /&gt;
Beispiel: Eine Bewegungszelle (der Teil logischer Funktionalität, der für Bewegung zuständig ist) bekommt von der Gehirnzelle (der Teil logischer Funktionalität, der für die Erfüllung der gestellten Aufgabe zuständig ist) nur mitgeteilt &amp;quot;...bewege dich um 100 Einheiten vorwärts...&amp;quot;.&amp;lt;br/&amp;gt;Die Bewegungszelle führt nun diese Bewegung aus, und dabei muß es egal sein, ob ein Schrittmotor, ein Linearmotor, ein Winkelservo, ein Hydraulikzylinder oder was auch immer angesteuert wird... und hier liegt die größte Schwierigkeit: Die Bewegungszelle muß alle vorhandenen Antriebselemente steuern können, da ihr vorher nicht bekannt ist, was verwendet wird (ob sie Rad, Bein oder Kranarm ist...)!&amp;lt;br/&amp;gt;Die Bewegungszelle weiß, wieviel Zeit ihr für die Ausführung dieser Bewegung bleibt. Ihre Rückmeldung an die Gehirnzelle besteht nur aus &amp;quot;OK&amp;quot; (Aufgabe in vorgegebener Zeit erledigt), &amp;quot;ERR&amp;quot; (Störung der gesamten Bewegungszelle) oder &amp;quot;NOxx&amp;quot; (Aufgabe aus verschiedenen Gründen nur teilweise erledigt, xx ist der Erfüllungsgrad in Prozent).&lt;br /&gt;
&lt;br /&gt;
Auf diese Art bleiben nur wenige Roboterzellen übrig:&amp;lt;br/&amp;gt;- Bewegungszelle (s.o.)&amp;lt;br/&amp;gt;- Gehirnzelle (s.o.)&amp;lt;br/&amp;gt;- Sensorzelle (zuständig für die Ansteuerung beliebiger (!) Sensoren sowie die Auswertung deren Ergebnisse)&amp;lt;br/&amp;gt;- Stromversorgungszelle (zuständig für Batterien, Solarversorgung, externe Ladeströme etc.)&amp;lt;br/&amp;gt;- Kommunikationszelle (Ermitteln und Erkennen der eigenen Position sowie Mensch-Roboter-Schnittstelle)&lt;br /&gt;
&lt;br /&gt;
Der Rest ist (wenn auch mit viel Elektrik) für mich aber Mechanik. Muß zwar sein, ist aber nicht unbedingt zellularer Roboter... Auf diesem Weg kannst Du (sofern die Mechanik stimmt) mit&amp;lt;br/&amp;gt;- zwei Bewegungszellen sowie je einer der anderen Zellen einen kettengetriebene Planierraupe,&amp;lt;br/&amp;gt;daraus aber auch&amp;lt;br/&amp;gt;- mit vier zusätzlichen Bewegungszellen einen Hexabot zur kameragestützten Geländeerkundung&amp;lt;br/&amp;gt;bauen.&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Williwilli|Williwilli]] 13:27, 25. Jul 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
(Hier komme ich leider mit dem Editor nicht so zurecht. Vielleicht sollten wir die Diskussion in das Forum verlegen)&lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''Eine tolle Vision. Bei der praktischen Umsetzung würde ich gerne mitmachen...'' &lt;br /&gt;
&lt;br /&gt;
Ich fände es toll, wenn Du mithelfen würdest.&lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''Aber: Viel von dem bisher Beschriebenen sind nach meinem Verständnis keine Zellen mehr, sondern bereits zusammengesetzte Module!''&lt;br /&gt;
 &lt;br /&gt;
Ja und nein: Jede Zelle hält die Schnittstellendefinition ein, hat aber ihre eigenen Stärken und Schwächen. So gibt es für die Stromversorgung eigene Zellen, für die Logil ebenfalls, für die Beweglichkeit, für ...&lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''Um zellulare Bots zu bauen, muß daher meiner Meinung nach zwingend die Betrachtung/Entwicklung der Roboterelektronik von der Mechanik getrennt werden.'' &lt;br /&gt;
&lt;br /&gt;
Das hatte ich in dem anderen Forum (Roboterschwarm) ebenfalls noch nicht verstanden ...&lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''Beispiel: Eine Bewegungszelle (der Teil logischer Funktionalität, der für Bewegung zuständig ist) bekommt von der Gehirnzelle (der Teil logischer Funktionalität, der für die Erfüllung der gestellten Aufgabe zuständig ist) nur mitgeteilt &amp;quot;...bewege dich um 100 Einheiten vorwärts...&amp;quot;. Die Bewegungszelle führt nun diese Bewegung aus, und dabei muß es egal sein, ob ein Schrittmotor, ein Linearmotor, ein Winkelservo, ein Hydraulikzylinder oder was auch immer angesteuert wird...'' &lt;br /&gt;
&lt;br /&gt;
Aber warum denn? Der logische Teil (Controller) ist mittlerweile so kostengünstig, dass ich ihn einfach zur Mechanik dazunehme. Dann kann man Mechanik, Motorik u.s.w. optimal aufeinander abstimmen und eine möglichst kostengünstige Zelle erstellen. Die hält jedoch ebenfalls die Schnittstellendefinition ein: die Gehirnzelle meldet der Bewegungszelle immer nur &amp;quot;...bewege dich um 100 Einheiten vorwärts...&amp;quot;, egal ob die Bewegungszelle die Zelle für Schrittmotor, Linearmotor, Winkelservo, Hydraulikzylinder oder was auch immer ist. Es gibt einfach für jeden Typ eine andere Zelle, die auf Schnittstelleneben aber gleich aussehen ...&lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''und hier liegt die größte Schwierigkeit: Die Bewegungszelle muß alle vorhandenen Antriebselemente steuern können, da ihr vorher nicht bekannt ist, was verwendet wird (ob sie Rad, Bein oder Kranarm ist...)!''&lt;br /&gt;
&lt;br /&gt;
Die Bewegungszelle '''ist''' das Antriebselemente und kennt sich mit diesem bestends aus ... Andere Antriebselemente kennt sie jedoch nicht.&lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''Auf diese Art bleiben nur wenige Roboterzellen übrig''&lt;br /&gt;
&lt;br /&gt;
Ja, ja und nochmals ja! &lt;br /&gt;
&lt;br /&gt;
Du schreibst:&lt;br /&gt;
''Der Rest ist (wenn auch mit viel Elektrik) für mich aber Mechanik. Muß zwar sein, ist aber nicht unbedingt zellularer Roboter...'' &lt;br /&gt;
&lt;br /&gt;
Das kapiere ich mal wieder nicht.&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13701</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13701"/>
				<updated>2008-07-19T14:24:33Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Definition gemeinsamer Speicherstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
&lt;br /&gt;
==== Steckverbindungen ====&lt;br /&gt;
Es werden zwei Steckverbindungen entsprechend der [[RN-Definitionen]] verwendet:&lt;br /&gt;
Zur Kommunikation und bei geringem Stromverbrauch der I2C-Bus Stecker als 10-poliger Wannenstecker:&lt;br /&gt;
[[Bild:rndefinition_wannenstecker.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Stromversorgung für Leistungsverbraucher erfolgt über die universellen Wannenstecker AKL230 mit 4 Polen.&lt;br /&gt;
&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* die Informationsübertragung und&lt;br /&gt;
* die Stromversorgung &lt;br /&gt;
&lt;br /&gt;
==== Informationsübertragung ====&lt;br /&gt;
Die Informationsübertragung erfolgt über den I2C-Bus Stecker gemäß [[RN-Definitionen]]:&lt;br /&gt;
[[Bild:stecker_10pol_i2c.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Pin 1        SCL (Taktleitung)&lt;br /&gt;
 Pin 3        SDA (Datenleitung)&lt;br /&gt;
 Pin 5        +5V&lt;br /&gt;
 Pin 7        +5V&lt;br /&gt;
 Pin 9        Batteriespannung +12V&lt;br /&gt;
 Pin 8        GND Batterie&lt;br /&gt;
 Pin 2,4,6    GND &lt;br /&gt;
 Pin 10       INT   &lt;br /&gt;
&lt;br /&gt;
Es sind Maximal 3 A je Pin zulässig.&lt;br /&gt;
Pin 5 und 7 besitzen eine geregelte +5V Spannung.&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Bei Bedarf, kann über einen zusätzlichen Stecker die Stromversorgung bis zu 10 A sichergestellt werden.&lt;br /&gt;
 Pin 1        Batteriespannung +12V&lt;br /&gt;
 Pin 2        GND Batterie&lt;br /&gt;
 Pin 3        Ladungsspannung &amp;lt;= ???V&lt;br /&gt;
 Pin 4        GND Ladung&lt;br /&gt;
&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
Die Ladespannung dient zum Aufladen der Batterien. Es ist nicht sichergestellt, dass hier auch eine Spannung anliegt bzw. wie groß die Spannung tatsächlich ist. Hier können Stromerzeuger, wie z.B. ein Netzteil oder aber auch Solarzellen, ihren Strom anbieten.&lt;br /&gt;
&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
Der Informationsaustausch zwischen Zellen erfolgt über die Definition gemeinsamer Speicherzellen (Siehe [[Roboterzellen#Logik]]). Der Nutzer benennt lediglich die Speicherstellen, die einen gemeinsamen Wert beinhalten sollen. Das Betriebssystem regelt das Zusammenwirken beim Lesen oder Schreiben.&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
Die Implementierung von Funktionen einer Zelle ist frei. Die Kommunikation zu anderen Zellen erfolgt jedoch ausschließlich über das Betriebssystem im Rahmen von gemeinsamen Speicherstellen. Da diese Kommunikation auf der Basis von I2C erfolgt, müssen bei der zusätzlichen Einbindung von I2C-Modulen gewisse Rahmenbedingungen eingehalten werden und es sind bestimmte Betriebssystemfunktionen zu verwenden.&lt;br /&gt;
&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
Die Informationsverarbeitung erfolgt bei allen Roboterzellen nach dem gleichen Prinzip. Deswegen enthält jede Zelle auch einen Logik-Anteil, so dass die Zusammenarbeit sichergestellt ist.&lt;br /&gt;
===== Definition von Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle besitzt einen Namen und einen Wertebereich. Der Name ist innerhalb einer Zelle eindeutig. Der Wertebereich ist über alle Zellen eindeutig definiert.&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich kann eine Auflistung von Bezeichnern sein (z.B. Boolean: {False, True}) oder ein Zahlenbereich (z.B. Byte: 0 .. 255). Vordefiniert sind die Wertebereiche von Boolean, Byte, Integer und Float.&lt;br /&gt;
===== Definition gemeinsamer Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle kann auch derart definiert werden, dass man sich auf die Speicherstelle einer anderen Zelle bezieht. Dann stellt das Betriebssystem sicher, dass der Zugriff (Lesen oder Schreiben) von jeder betroffenen Zelle aus so erfolgt, als wenn es sich um eine lokale Definition handeln würde. Veränderungen werden transparent durchgereicht. Die [[Roboterzellen#Logische Schnittstelle|logische Schnittstelle]] besteht also eigentlich in diesen gemeinsamen Speicherstellen.&lt;br /&gt;
&lt;br /&gt;
===== Programmierung =====&lt;br /&gt;
Die Programmierung erfolgt, indem die Zusammenhänge zwischen den Speicherstellen einer Zelle beschrieben werden. Jeder ''Zusammenhang'' ist eine Liste von ''Speicherstellenbeschreibungen''. &lt;br /&gt;
&lt;br /&gt;
Eine  ''Speicherstellenbeschreibung'' benennt eine Speicherstelle, den vorgesehenen Wert (oder einen Bereich von Werten) und ein ''angegebenes Gewicht''.&lt;br /&gt;
&lt;br /&gt;
Die Zelle sucht nun permanent nach ''gültigen Zusammenhängen'' und führt diese aus. Ein Zusammenhang ist gültig, wenn die Summe der Gewichte der Speicherstellenbeschreibungen über einem gewissen Schwellwert liegt. &lt;br /&gt;
&lt;br /&gt;
Das ''Gewicht einer Speicherstellenbeschreibung'' berechnet sich wie folgt: Entspricht der momentane Wert einer Speicherstelle einem der vorgesehenen Werte, so ist das ''Gewicht der Speicherstellenbeschreibung'' gleich dem ''angegebenen Gewicht''. Andernfalls ist es 0.&lt;br /&gt;
&lt;br /&gt;
Liegt die Summe der Gewichte (Gesamtgewicht) nun über einem gewissen Schwellwert, so wird der Zusammenhang ausgeführt: Die Werte aller im Zusammenhang aufgeführten Speicherstellen werden so verändert, dass ein möglichst hohes Gesamtgewicht erreicht wird.&lt;br /&gt;
&lt;br /&gt;
'''Anmerkung''': Klingt komplizierte als es ist. Ein Beispiel kommt demnächst und wird das Zusammenwirken verdeutlichen. Im Kern ist es ein Gemisch aus neuronalen Netzen und Regeln von Expertensystemen. Mal abwarten, wie es sich implementieren lässt. Wenn es funktioniert, kann eine Robotersteuerung ganz einfach aufgebaut werden und man konzentriert sich auf die Problemstellung. Ballast, wie das Erlernen einer Programmiersprache, ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13700</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13700"/>
				<updated>2008-07-19T14:22:22Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Informationsaustausch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
&lt;br /&gt;
==== Steckverbindungen ====&lt;br /&gt;
Es werden zwei Steckverbindungen entsprechend der [[RN-Definitionen]] verwendet:&lt;br /&gt;
Zur Kommunikation und bei geringem Stromverbrauch der I2C-Bus Stecker als 10-poliger Wannenstecker:&lt;br /&gt;
[[Bild:rndefinition_wannenstecker.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Stromversorgung für Leistungsverbraucher erfolgt über die universellen Wannenstecker AKL230 mit 4 Polen.&lt;br /&gt;
&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* die Informationsübertragung und&lt;br /&gt;
* die Stromversorgung &lt;br /&gt;
&lt;br /&gt;
==== Informationsübertragung ====&lt;br /&gt;
Die Informationsübertragung erfolgt über den I2C-Bus Stecker gemäß [[RN-Definitionen]]:&lt;br /&gt;
[[Bild:stecker_10pol_i2c.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Pin 1        SCL (Taktleitung)&lt;br /&gt;
 Pin 3        SDA (Datenleitung)&lt;br /&gt;
 Pin 5        +5V&lt;br /&gt;
 Pin 7        +5V&lt;br /&gt;
 Pin 9        Batteriespannung +12V&lt;br /&gt;
 Pin 8        GND Batterie&lt;br /&gt;
 Pin 2,4,6    GND &lt;br /&gt;
 Pin 10       INT   &lt;br /&gt;
&lt;br /&gt;
Es sind Maximal 3 A je Pin zulässig.&lt;br /&gt;
Pin 5 und 7 besitzen eine geregelte +5V Spannung.&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Bei Bedarf, kann über einen zusätzlichen Stecker die Stromversorgung bis zu 10 A sichergestellt werden.&lt;br /&gt;
 Pin 1        Batteriespannung +12V&lt;br /&gt;
 Pin 2        GND Batterie&lt;br /&gt;
 Pin 3        Ladungsspannung &amp;lt;= ???V&lt;br /&gt;
 Pin 4        GND Ladung&lt;br /&gt;
&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
Die Ladespannung dient zum Aufladen der Batterien. Es ist nicht sichergestellt, dass hier auch eine Spannung anliegt bzw. wie groß die Spannung tatsächlich ist. Hier können Stromerzeuger, wie z.B. ein Netzteil oder aber auch Solarzellen, ihren Strom anbieten.&lt;br /&gt;
&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
Der Informationsaustausch zwischen Zellen erfolgt über die Definition gemeinsamer Speicherzellen (Siehe [[Roboterzellen#Logik]]). Der Nutzer benennt lediglich die Speicherstellen, die einen gemeinsamen Wert beinhalten sollen. Das Betriebssystem regelt das Zusammenwirken beim Lesen oder Schreiben.&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
Die Implementierung von Funktionen einer Zelle ist frei. Die Kommunikation zu anderen Zellen erfolgt jedoch ausschließlich über das Betriebssystem im Rahmen von gemeinsamen Speicherstellen. Da diese Kommunikation auf der Basis von I2C erfolgt, müssen bei der zusätzlichen Einbindung von I2C-Modulen gewisse Rahmenbedingungen eingehalten werden und es sind bestimmte Betriebssystemfunktionen zu verwenden.&lt;br /&gt;
&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
Die Informationsverarbeitung erfolgt bei allen Roboterzellen nach dem gleichen Prinzip. Deswegen enthält jede Zelle auch einen Logik-Anteil, so dass die Zusammenarbeit sichergestellt ist.&lt;br /&gt;
===== Definition von Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle besitzt einen Namen und einen Wertebereich. Der Name ist innerhalb einer Zelle eindeutig. Der Wertebereich ist über alle Zellen eindeutig definiert.&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich kann eine Auflistung von Bezeichnern sein (z.B. Boolean: {False, True}) oder ein Zahlenbereich (z.B. Byte: 0 .. 255). Vordefiniert sind die Wertebereiche von Boolean, Byte, Integer und Float.&lt;br /&gt;
===== Definition gemeinsamer Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle kann auch derart definiert werden, dass man sich auf die Speicherstelle einer anderen Zelle bezieht. Dann stellt das Betriebssystem sicher, dass der Zugriff (Lesen oder Schreiben) von jeder betroffenen Zelle aus so erfolgt, als wenn es sich um eine lokale Definition handeln würde. Veränderungen werden transparent durchgereicht. Die logische Schnittstelle besteht also eigentlich in diesen gemeinsamen Speicherstellen.&lt;br /&gt;
===== Programmierung =====&lt;br /&gt;
Die Programmierung erfolgt, indem die Zusammenhänge zwischen den Speicherstellen einer Zelle beschrieben werden. Jeder ''Zusammenhang'' ist eine Liste von ''Speicherstellenbeschreibungen''. &lt;br /&gt;
&lt;br /&gt;
Eine  ''Speicherstellenbeschreibung'' benennt eine Speicherstelle, den vorgesehenen Wert (oder einen Bereich von Werten) und ein ''angegebenes Gewicht''.&lt;br /&gt;
&lt;br /&gt;
Die Zelle sucht nun permanent nach ''gültigen Zusammenhängen'' und führt diese aus. Ein Zusammenhang ist gültig, wenn die Summe der Gewichte der Speicherstellenbeschreibungen über einem gewissen Schwellwert liegt. &lt;br /&gt;
&lt;br /&gt;
Das ''Gewicht einer Speicherstellenbeschreibung'' berechnet sich wie folgt: Entspricht der momentane Wert einer Speicherstelle einem der vorgesehenen Werte, so ist das ''Gewicht der Speicherstellenbeschreibung'' gleich dem ''angegebenen Gewicht''. Andernfalls ist es 0.&lt;br /&gt;
&lt;br /&gt;
Liegt die Summe der Gewichte (Gesamtgewicht) nun über einem gewissen Schwellwert, so wird der Zusammenhang ausgeführt: Die Werte aller im Zusammenhang aufgeführten Speicherstellen werden so verändert, dass ein möglichst hohes Gesamtgewicht erreicht wird.&lt;br /&gt;
&lt;br /&gt;
'''Anmerkung''': Klingt komplizierte als es ist. Ein Beispiel kommt demnächst und wird das Zusammenwirken verdeutlichen. Im Kern ist es ein Gemisch aus neuronalen Netzen und Regeln von Expertensystemen. Mal abwarten, wie es sich implementieren lässt. Wenn es funktioniert, kann eine Robotersteuerung ganz einfach aufgebaut werden und man konzentriert sich auf die Problemstellung. Ballast, wie das Erlernen einer Programmiersprache, ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13699</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13699"/>
				<updated>2008-07-19T14:21:44Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Informationsaustausch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
&lt;br /&gt;
==== Steckverbindungen ====&lt;br /&gt;
Es werden zwei Steckverbindungen entsprechend der [[RN-Definitionen]] verwendet:&lt;br /&gt;
Zur Kommunikation und bei geringem Stromverbrauch der I2C-Bus Stecker als 10-poliger Wannenstecker:&lt;br /&gt;
[[Bild:rndefinition_wannenstecker.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Stromversorgung für Leistungsverbraucher erfolgt über die universellen Wannenstecker AKL230 mit 4 Polen.&lt;br /&gt;
&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* die Informationsübertragung und&lt;br /&gt;
* die Stromversorgung &lt;br /&gt;
&lt;br /&gt;
==== Informationsübertragung ====&lt;br /&gt;
Die Informationsübertragung erfolgt über den I2C-Bus Stecker gemäß [[RN-Definitionen]]:&lt;br /&gt;
[[Bild:stecker_10pol_i2c.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Pin 1        SCL (Taktleitung)&lt;br /&gt;
 Pin 3        SDA (Datenleitung)&lt;br /&gt;
 Pin 5        +5V&lt;br /&gt;
 Pin 7        +5V&lt;br /&gt;
 Pin 9        Batteriespannung +12V&lt;br /&gt;
 Pin 8        GND Batterie&lt;br /&gt;
 Pin 2,4,6    GND &lt;br /&gt;
 Pin 10       INT   &lt;br /&gt;
&lt;br /&gt;
Es sind Maximal 3 A je Pin zulässig.&lt;br /&gt;
Pin 5 und 7 besitzen eine geregelte +5V Spannung.&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Bei Bedarf, kann über einen zusätzlichen Stecker die Stromversorgung bis zu 10 A sichergestellt werden.&lt;br /&gt;
 Pin 1        Batteriespannung +12V&lt;br /&gt;
 Pin 2        GND Batterie&lt;br /&gt;
 Pin 3        Ladungsspannung &amp;lt;= ???V&lt;br /&gt;
 Pin 4        GND Ladung&lt;br /&gt;
&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
Die Ladespannung dient zum Aufladen der Batterien. Es ist nicht sichergestellt, dass hier auch eine Spannung anliegt bzw. wie groß die Spannung tatsächlich ist. Hier können Stromerzeuger, wie z.B. ein Netzteil oder aber auch Solarzellen, ihren Strom anbieten.&lt;br /&gt;
&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
Der Informationsaustausch zwischen Zellen erfolgt über die Definition gemeinsamer Speicherzellen (Siehe [[Roboterzellen#Zelltypen]]). Der Nutzer benennt lediglich die Speicherstellen, die einen gemeinsamen Wert beinhalten sollen. Das Betriebssystem regelt das Zusammenwirken beim Lesen oder Schreiben.&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
Die Implementierung von Funktionen einer Zelle ist frei. Die Kommunikation zu anderen Zellen erfolgt jedoch ausschließlich über das Betriebssystem im Rahmen von gemeinsamen Speicherstellen. Da diese Kommunikation auf der Basis von I2C erfolgt, müssen bei der zusätzlichen Einbindung von I2C-Modulen gewisse Rahmenbedingungen eingehalten werden und es sind bestimmte Betriebssystemfunktionen zu verwenden.&lt;br /&gt;
&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
Die Informationsverarbeitung erfolgt bei allen Roboterzellen nach dem gleichen Prinzip. Deswegen enthält jede Zelle auch einen Logik-Anteil, so dass die Zusammenarbeit sichergestellt ist.&lt;br /&gt;
===== Definition von Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle besitzt einen Namen und einen Wertebereich. Der Name ist innerhalb einer Zelle eindeutig. Der Wertebereich ist über alle Zellen eindeutig definiert.&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich kann eine Auflistung von Bezeichnern sein (z.B. Boolean: {False, True}) oder ein Zahlenbereich (z.B. Byte: 0 .. 255). Vordefiniert sind die Wertebereiche von Boolean, Byte, Integer und Float.&lt;br /&gt;
===== Definition gemeinsamer Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle kann auch derart definiert werden, dass man sich auf die Speicherstelle einer anderen Zelle bezieht. Dann stellt das Betriebssystem sicher, dass der Zugriff (Lesen oder Schreiben) von jeder betroffenen Zelle aus so erfolgt, als wenn es sich um eine lokale Definition handeln würde. Veränderungen werden transparent durchgereicht. Die logische Schnittstelle besteht also eigentlich in diesen gemeinsamen Speicherstellen.&lt;br /&gt;
===== Programmierung =====&lt;br /&gt;
Die Programmierung erfolgt, indem die Zusammenhänge zwischen den Speicherstellen einer Zelle beschrieben werden. Jeder ''Zusammenhang'' ist eine Liste von ''Speicherstellenbeschreibungen''. &lt;br /&gt;
&lt;br /&gt;
Eine  ''Speicherstellenbeschreibung'' benennt eine Speicherstelle, den vorgesehenen Wert (oder einen Bereich von Werten) und ein ''angegebenes Gewicht''.&lt;br /&gt;
&lt;br /&gt;
Die Zelle sucht nun permanent nach ''gültigen Zusammenhängen'' und führt diese aus. Ein Zusammenhang ist gültig, wenn die Summe der Gewichte der Speicherstellenbeschreibungen über einem gewissen Schwellwert liegt. &lt;br /&gt;
&lt;br /&gt;
Das ''Gewicht einer Speicherstellenbeschreibung'' berechnet sich wie folgt: Entspricht der momentane Wert einer Speicherstelle einem der vorgesehenen Werte, so ist das ''Gewicht der Speicherstellenbeschreibung'' gleich dem ''angegebenen Gewicht''. Andernfalls ist es 0.&lt;br /&gt;
&lt;br /&gt;
Liegt die Summe der Gewichte (Gesamtgewicht) nun über einem gewissen Schwellwert, so wird der Zusammenhang ausgeführt: Die Werte aller im Zusammenhang aufgeführten Speicherstellen werden so verändert, dass ein möglichst hohes Gesamtgewicht erreicht wird.&lt;br /&gt;
&lt;br /&gt;
'''Anmerkung''': Klingt komplizierte als es ist. Ein Beispiel kommt demnächst und wird das Zusammenwirken verdeutlichen. Im Kern ist es ein Gemisch aus neuronalen Netzen und Regeln von Expertensystemen. Mal abwarten, wie es sich implementieren lässt. Wenn es funktioniert, kann eine Robotersteuerung ganz einfach aufgebaut werden und man konzentriert sich auf die Problemstellung. Ballast, wie das Erlernen einer Programmiersprache, ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13698</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13698"/>
				<updated>2008-07-19T14:21:15Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Informationsaustausch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
&lt;br /&gt;
==== Steckverbindungen ====&lt;br /&gt;
Es werden zwei Steckverbindungen entsprechend der [[RN-Definitionen]] verwendet:&lt;br /&gt;
Zur Kommunikation und bei geringem Stromverbrauch der I2C-Bus Stecker als 10-poliger Wannenstecker:&lt;br /&gt;
[[Bild:rndefinition_wannenstecker.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Stromversorgung für Leistungsverbraucher erfolgt über die universellen Wannenstecker AKL230 mit 4 Polen.&lt;br /&gt;
&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* die Informationsübertragung und&lt;br /&gt;
* die Stromversorgung &lt;br /&gt;
&lt;br /&gt;
==== Informationsübertragung ====&lt;br /&gt;
Die Informationsübertragung erfolgt über den I2C-Bus Stecker gemäß [[RN-Definitionen]]:&lt;br /&gt;
[[Bild:stecker_10pol_i2c.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Pin 1        SCL (Taktleitung)&lt;br /&gt;
 Pin 3        SDA (Datenleitung)&lt;br /&gt;
 Pin 5        +5V&lt;br /&gt;
 Pin 7        +5V&lt;br /&gt;
 Pin 9        Batteriespannung +12V&lt;br /&gt;
 Pin 8        GND Batterie&lt;br /&gt;
 Pin 2,4,6    GND &lt;br /&gt;
 Pin 10       INT   &lt;br /&gt;
&lt;br /&gt;
Es sind Maximal 3 A je Pin zulässig.&lt;br /&gt;
Pin 5 und 7 besitzen eine geregelte +5V Spannung.&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Bei Bedarf, kann über einen zusätzlichen Stecker die Stromversorgung bis zu 10 A sichergestellt werden.&lt;br /&gt;
 Pin 1        Batteriespannung +12V&lt;br /&gt;
 Pin 2        GND Batterie&lt;br /&gt;
 Pin 3        Ladungsspannung &amp;lt;= ???V&lt;br /&gt;
 Pin 4        GND Ladung&lt;br /&gt;
&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
Die Ladespannung dient zum Aufladen der Batterien. Es ist nicht sichergestellt, dass hier auch eine Spannung anliegt bzw. wie groß die Spannung tatsächlich ist. Hier können Stromerzeuger, wie z.B. ein Netzteil oder aber auch Solarzellen, ihren Strom anbieten.&lt;br /&gt;
&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
Der Informationsaustausch zwischen Zellen erfolgt über die Definition gemeinsamer Speicherzellen (Siehe [[Roboterzellen#Zelltypen#Logik]]). Der Nutzer benennt lediglich die Speicherstellen, die einen gemeinsamen Wert beinhalten sollen. Das Betriebssystem regelt das Zusammenwirken beim Lesen oder Schreiben.&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
Die Implementierung von Funktionen einer Zelle ist frei. Die Kommunikation zu anderen Zellen erfolgt jedoch ausschließlich über das Betriebssystem im Rahmen von gemeinsamen Speicherstellen. Da diese Kommunikation auf der Basis von I2C erfolgt, müssen bei der zusätzlichen Einbindung von I2C-Modulen gewisse Rahmenbedingungen eingehalten werden und es sind bestimmte Betriebssystemfunktionen zu verwenden.&lt;br /&gt;
&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
Die Informationsverarbeitung erfolgt bei allen Roboterzellen nach dem gleichen Prinzip. Deswegen enthält jede Zelle auch einen Logik-Anteil, so dass die Zusammenarbeit sichergestellt ist.&lt;br /&gt;
===== Definition von Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle besitzt einen Namen und einen Wertebereich. Der Name ist innerhalb einer Zelle eindeutig. Der Wertebereich ist über alle Zellen eindeutig definiert.&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich kann eine Auflistung von Bezeichnern sein (z.B. Boolean: {False, True}) oder ein Zahlenbereich (z.B. Byte: 0 .. 255). Vordefiniert sind die Wertebereiche von Boolean, Byte, Integer und Float.&lt;br /&gt;
===== Definition gemeinsamer Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle kann auch derart definiert werden, dass man sich auf die Speicherstelle einer anderen Zelle bezieht. Dann stellt das Betriebssystem sicher, dass der Zugriff (Lesen oder Schreiben) von jeder betroffenen Zelle aus so erfolgt, als wenn es sich um eine lokale Definition handeln würde. Veränderungen werden transparent durchgereicht. Die logische Schnittstelle besteht also eigentlich in diesen gemeinsamen Speicherstellen.&lt;br /&gt;
===== Programmierung =====&lt;br /&gt;
Die Programmierung erfolgt, indem die Zusammenhänge zwischen den Speicherstellen einer Zelle beschrieben werden. Jeder ''Zusammenhang'' ist eine Liste von ''Speicherstellenbeschreibungen''. &lt;br /&gt;
&lt;br /&gt;
Eine  ''Speicherstellenbeschreibung'' benennt eine Speicherstelle, den vorgesehenen Wert (oder einen Bereich von Werten) und ein ''angegebenes Gewicht''.&lt;br /&gt;
&lt;br /&gt;
Die Zelle sucht nun permanent nach ''gültigen Zusammenhängen'' und führt diese aus. Ein Zusammenhang ist gültig, wenn die Summe der Gewichte der Speicherstellenbeschreibungen über einem gewissen Schwellwert liegt. &lt;br /&gt;
&lt;br /&gt;
Das ''Gewicht einer Speicherstellenbeschreibung'' berechnet sich wie folgt: Entspricht der momentane Wert einer Speicherstelle einem der vorgesehenen Werte, so ist das ''Gewicht der Speicherstellenbeschreibung'' gleich dem ''angegebenen Gewicht''. Andernfalls ist es 0.&lt;br /&gt;
&lt;br /&gt;
Liegt die Summe der Gewichte (Gesamtgewicht) nun über einem gewissen Schwellwert, so wird der Zusammenhang ausgeführt: Die Werte aller im Zusammenhang aufgeführten Speicherstellen werden so verändert, dass ein möglichst hohes Gesamtgewicht erreicht wird.&lt;br /&gt;
&lt;br /&gt;
'''Anmerkung''': Klingt komplizierte als es ist. Ein Beispiel kommt demnächst und wird das Zusammenwirken verdeutlichen. Im Kern ist es ein Gemisch aus neuronalen Netzen und Regeln von Expertensystemen. Mal abwarten, wie es sich implementieren lässt. Wenn es funktioniert, kann eine Robotersteuerung ganz einfach aufgebaut werden und man konzentriert sich auf die Problemstellung. Ballast, wie das Erlernen einer Programmiersprache, ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13697</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13697"/>
				<updated>2008-07-19T14:03:38Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Informationsaustausch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
&lt;br /&gt;
==== Steckverbindungen ====&lt;br /&gt;
Es werden zwei Steckverbindungen entsprechend der [[RN-Definitionen]] verwendet:&lt;br /&gt;
Zur Kommunikation und bei geringem Stromverbrauch der I2C-Bus Stecker als 10-poliger Wannenstecker:&lt;br /&gt;
[[Bild:rndefinition_wannenstecker.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Stromversorgung für Leistungsverbraucher erfolgt über die universellen Wannenstecker AKL230 mit 4 Polen.&lt;br /&gt;
&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* die Informationsübertragung und&lt;br /&gt;
* die Stromversorgung &lt;br /&gt;
&lt;br /&gt;
==== Informationsübertragung ====&lt;br /&gt;
Die Informationsübertragung erfolgt über den I2C-Bus Stecker gemäß [[RN-Definitionen]]:&lt;br /&gt;
[[Bild:stecker_10pol_i2c.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Pin 1        SCL (Taktleitung)&lt;br /&gt;
 Pin 3        SDA (Datenleitung)&lt;br /&gt;
 Pin 5        +5V&lt;br /&gt;
 Pin 7        +5V&lt;br /&gt;
 Pin 9        Batteriespannung +12V&lt;br /&gt;
 Pin 8        GND Batterie&lt;br /&gt;
 Pin 2,4,6    GND &lt;br /&gt;
 Pin 10       INT   &lt;br /&gt;
&lt;br /&gt;
Es sind Maximal 3 A je Pin zulässig.&lt;br /&gt;
Pin 5 und 7 besitzen eine geregelte +5V Spannung.&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Bei Bedarf, kann über einen zusätzlichen Stecker die Stromversorgung bis zu 10 A sichergestellt werden.&lt;br /&gt;
 Pin 1        Batteriespannung +12V&lt;br /&gt;
 Pin 2        GND Batterie&lt;br /&gt;
 Pin 3        Ladungsspannung &amp;lt;= ???V&lt;br /&gt;
 Pin 4        GND Ladung&lt;br /&gt;
&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
Die Ladespannung dient zum Aufladen der Batterien. Es ist nicht sichergestellt, dass hier auch eine Spannung anliegt bzw. wie groß die Spannung tatsächlich ist. Hier können Stromerzeuger, wie z.B. ein Netzteil oder aber auch Solarzellen, ihren Strom anbieten.&lt;br /&gt;
&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
Der Informationsaustausch zwischen Zellen erfolgt über die Definition gemeinsamer Speicherzellen (Siehe: Zelltypen, Logik). Der Nutzer benennt lediglich die Speicherstellen, die einen gemeinsamen Wert beinhalten sollen. Das Betriebssystem regelt das Zusammenwirken beim Lesen oder Schreiben.&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
Die Implementierung von Funktionen einer Zelle ist frei. Die Kommunikation zu anderen Zellen erfolgt jedoch ausschließlich über das Betriebssystem im Rahmen von gemeinsamen Speicherstellen. Da diese Kommunikation auf der Basis von I2C erfolgt, müssen bei der zusätzlichen Einbindung von I2C-Modulen gewisse Rahmenbedingungen eingehalten werden und es sind bestimmte Betriebssystemfunktionen zu verwenden.&lt;br /&gt;
&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
Die Informationsverarbeitung erfolgt bei allen Roboterzellen nach dem gleichen Prinzip. Deswegen enthält jede Zelle auch einen Logik-Anteil, so dass die Zusammenarbeit sichergestellt ist.&lt;br /&gt;
===== Definition von Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle besitzt einen Namen und einen Wertebereich. Der Name ist innerhalb einer Zelle eindeutig. Der Wertebereich ist über alle Zellen eindeutig definiert.&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich kann eine Auflistung von Bezeichnern sein (z.B. Boolean: {False, True}) oder ein Zahlenbereich (z.B. Byte: 0 .. 255). Vordefiniert sind die Wertebereiche von Boolean, Byte, Integer und Float.&lt;br /&gt;
===== Definition gemeinsamer Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle kann auch derart definiert werden, dass man sich auf die Speicherstelle einer anderen Zelle bezieht. Dann stellt das Betriebssystem sicher, dass der Zugriff (Lesen oder Schreiben) von jeder betroffenen Zelle aus so erfolgt, als wenn es sich um eine lokale Definition handeln würde. Veränderungen werden transparent durchgereicht. Die logische Schnittstelle besteht also eigentlich in diesen gemeinsamen Speicherstellen.&lt;br /&gt;
===== Programmierung =====&lt;br /&gt;
Die Programmierung erfolgt, indem die Zusammenhänge zwischen den Speicherstellen einer Zelle beschrieben werden. Jeder ''Zusammenhang'' ist eine Liste von ''Speicherstellenbeschreibungen''. &lt;br /&gt;
&lt;br /&gt;
Eine  ''Speicherstellenbeschreibung'' benennt eine Speicherstelle, den vorgesehenen Wert (oder einen Bereich von Werten) und ein ''angegebenes Gewicht''.&lt;br /&gt;
&lt;br /&gt;
Die Zelle sucht nun permanent nach ''gültigen Zusammenhängen'' und führt diese aus. Ein Zusammenhang ist gültig, wenn die Summe der Gewichte der Speicherstellenbeschreibungen über einem gewissen Schwellwert liegt. &lt;br /&gt;
&lt;br /&gt;
Das ''Gewicht einer Speicherstellenbeschreibung'' berechnet sich wie folgt: Entspricht der momentane Wert einer Speicherstelle einem der vorgesehenen Werte, so ist das ''Gewicht der Speicherstellenbeschreibung'' gleich dem ''angegebenen Gewicht''. Andernfalls ist es 0.&lt;br /&gt;
&lt;br /&gt;
Liegt die Summe der Gewichte (Gesamtgewicht) nun über einem gewissen Schwellwert, so wird der Zusammenhang ausgeführt: Die Werte aller im Zusammenhang aufgeführten Speicherstellen werden so verändert, dass ein möglichst hohes Gesamtgewicht erreicht wird.&lt;br /&gt;
&lt;br /&gt;
'''Anmerkung''': Klingt komplizierte als es ist. Ein Beispiel kommt demnächst und wird das Zusammenwirken verdeutlichen. Im Kern ist es ein Gemisch aus neuronalen Netzen und Regeln von Expertensystemen. Mal abwarten, wie es sich implementieren lässt. Wenn es funktioniert, kann eine Robotersteuerung ganz einfach aufgebaut werden und man konzentriert sich auf die Problemstellung. Ballast, wie das Erlernen einer Programmiersprache, ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13696</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13696"/>
				<updated>2008-07-19T14:02:35Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Logische Schnittstelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
&lt;br /&gt;
==== Steckverbindungen ====&lt;br /&gt;
Es werden zwei Steckverbindungen entsprechend der [[RN-Definitionen]] verwendet:&lt;br /&gt;
Zur Kommunikation und bei geringem Stromverbrauch der I2C-Bus Stecker als 10-poliger Wannenstecker:&lt;br /&gt;
[[Bild:rndefinition_wannenstecker.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Stromversorgung für Leistungsverbraucher erfolgt über die universellen Wannenstecker AKL230 mit 4 Polen.&lt;br /&gt;
&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* die Informationsübertragung und&lt;br /&gt;
* die Stromversorgung &lt;br /&gt;
&lt;br /&gt;
==== Informationsübertragung ====&lt;br /&gt;
Die Informationsübertragung erfolgt über den I2C-Bus Stecker gemäß [[RN-Definitionen]]:&lt;br /&gt;
[[Bild:stecker_10pol_i2c.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Pin 1        SCL (Taktleitung)&lt;br /&gt;
 Pin 3        SDA (Datenleitung)&lt;br /&gt;
 Pin 5        +5V&lt;br /&gt;
 Pin 7        +5V&lt;br /&gt;
 Pin 9        Batteriespannung +12V&lt;br /&gt;
 Pin 8        GND Batterie&lt;br /&gt;
 Pin 2,4,6    GND &lt;br /&gt;
 Pin 10       INT   &lt;br /&gt;
&lt;br /&gt;
Es sind Maximal 3 A je Pin zulässig.&lt;br /&gt;
Pin 5 und 7 besitzen eine geregelte +5V Spannung.&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Bei Bedarf, kann über einen zusätzlichen Stecker die Stromversorgung bis zu 10 A sichergestellt werden.&lt;br /&gt;
 Pin 1        Batteriespannung +12V&lt;br /&gt;
 Pin 2        GND Batterie&lt;br /&gt;
 Pin 3        Ladungsspannung &amp;lt;= ???V&lt;br /&gt;
 Pin 4        GND Ladung&lt;br /&gt;
&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
Die Ladespannung dient zum Aufladen der Batterien. Es ist nicht sichergestellt, dass hier auch eine Spannung anliegt bzw. wie groß die Spannung tatsächlich ist. Hier können Stromerzeuger, wie z.B. ein Netzteil oder aber auch Solarzellen, ihren Strom anbieten.&lt;br /&gt;
&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
Der Informationsaustausch zwischen Zellen erfolgt über die Definition gemeinsamer Speicherzellen (Siehe [[Logik]]). Der Nutzer benennt lediglich die Speicherstellen, die einen gemeinsamen Wert beinhalten sollen. Das Betriebssystem regelt das Zusammenwirken beim Lesen oder Schreiben.&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
Die Implementierung von Funktionen einer Zelle ist frei. Die Kommunikation zu anderen Zellen erfolgt jedoch ausschließlich über das Betriebssystem im Rahmen von gemeinsamen Speicherstellen. Da diese Kommunikation auf der Basis von I2C erfolgt, müssen bei der zusätzlichen Einbindung von I2C-Modulen gewisse Rahmenbedingungen eingehalten werden und es sind bestimmte Betriebssystemfunktionen zu verwenden.&lt;br /&gt;
&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
Die Informationsverarbeitung erfolgt bei allen Roboterzellen nach dem gleichen Prinzip. Deswegen enthält jede Zelle auch einen Logik-Anteil, so dass die Zusammenarbeit sichergestellt ist.&lt;br /&gt;
===== Definition von Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle besitzt einen Namen und einen Wertebereich. Der Name ist innerhalb einer Zelle eindeutig. Der Wertebereich ist über alle Zellen eindeutig definiert.&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich kann eine Auflistung von Bezeichnern sein (z.B. Boolean: {False, True}) oder ein Zahlenbereich (z.B. Byte: 0 .. 255). Vordefiniert sind die Wertebereiche von Boolean, Byte, Integer und Float.&lt;br /&gt;
===== Definition gemeinsamer Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle kann auch derart definiert werden, dass man sich auf die Speicherstelle einer anderen Zelle bezieht. Dann stellt das Betriebssystem sicher, dass der Zugriff (Lesen oder Schreiben) von jeder betroffenen Zelle aus so erfolgt, als wenn es sich um eine lokale Definition handeln würde. Veränderungen werden transparent durchgereicht. Die logische Schnittstelle besteht also eigentlich in diesen gemeinsamen Speicherstellen.&lt;br /&gt;
===== Programmierung =====&lt;br /&gt;
Die Programmierung erfolgt, indem die Zusammenhänge zwischen den Speicherstellen einer Zelle beschrieben werden. Jeder ''Zusammenhang'' ist eine Liste von ''Speicherstellenbeschreibungen''. &lt;br /&gt;
&lt;br /&gt;
Eine  ''Speicherstellenbeschreibung'' benennt eine Speicherstelle, den vorgesehenen Wert (oder einen Bereich von Werten) und ein ''angegebenes Gewicht''.&lt;br /&gt;
&lt;br /&gt;
Die Zelle sucht nun permanent nach ''gültigen Zusammenhängen'' und führt diese aus. Ein Zusammenhang ist gültig, wenn die Summe der Gewichte der Speicherstellenbeschreibungen über einem gewissen Schwellwert liegt. &lt;br /&gt;
&lt;br /&gt;
Das ''Gewicht einer Speicherstellenbeschreibung'' berechnet sich wie folgt: Entspricht der momentane Wert einer Speicherstelle einem der vorgesehenen Werte, so ist das ''Gewicht der Speicherstellenbeschreibung'' gleich dem ''angegebenen Gewicht''. Andernfalls ist es 0.&lt;br /&gt;
&lt;br /&gt;
Liegt die Summe der Gewichte (Gesamtgewicht) nun über einem gewissen Schwellwert, so wird der Zusammenhang ausgeführt: Die Werte aller im Zusammenhang aufgeführten Speicherstellen werden so verändert, dass ein möglichst hohes Gesamtgewicht erreicht wird.&lt;br /&gt;
&lt;br /&gt;
'''Anmerkung''': Klingt komplizierte als es ist. Ein Beispiel kommt demnächst und wird das Zusammenwirken verdeutlichen. Im Kern ist es ein Gemisch aus neuronalen Netzen und Regeln von Expertensystemen. Mal abwarten, wie es sich implementieren lässt. Wenn es funktioniert, kann eine Robotersteuerung ganz einfach aufgebaut werden und man konzentriert sich auf die Problemstellung. Ballast, wie das Erlernen einer Programmiersprache, ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13695</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13695"/>
				<updated>2008-07-19T13:46:04Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Logik */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
&lt;br /&gt;
==== Steckverbindungen ====&lt;br /&gt;
Es werden zwei Steckverbindungen entsprechend der [[RN-Definitionen]] verwendet:&lt;br /&gt;
Zur Kommunikation und bei geringem Stromverbrauch der I2C-Bus Stecker als 10-poliger Wannenstecker:&lt;br /&gt;
[[Bild:rndefinition_wannenstecker.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Stromversorgung für Leistungsverbraucher erfolgt über die universellen Wannenstecker AKL230 mit 4 Polen.&lt;br /&gt;
&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* die Informationsübertragung und&lt;br /&gt;
* die Stromversorgung &lt;br /&gt;
&lt;br /&gt;
==== Informationsübertragung ====&lt;br /&gt;
Die Informationsübertragung erfolgt über den I2C-Bus Stecker gemäß [[RN-Definitionen]]:&lt;br /&gt;
[[Bild:stecker_10pol_i2c.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Pin 1        SCL (Taktleitung)&lt;br /&gt;
 Pin 3        SDA (Datenleitung)&lt;br /&gt;
 Pin 5        +5V&lt;br /&gt;
 Pin 7        +5V&lt;br /&gt;
 Pin 9        Batteriespannung +12V&lt;br /&gt;
 Pin 8        GND Batterie&lt;br /&gt;
 Pin 2,4,6    GND &lt;br /&gt;
 Pin 10       INT   &lt;br /&gt;
&lt;br /&gt;
Es sind Maximal 3 A je Pin zulässig.&lt;br /&gt;
Pin 5 und 7 besitzen eine geregelte +5V Spannung.&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Bei Bedarf, kann über einen zusätzlichen Stecker die Stromversorgung bis zu 10 A sichergestellt werden.&lt;br /&gt;
 Pin 1        Batteriespannung +12V&lt;br /&gt;
 Pin 2        GND Batterie&lt;br /&gt;
 Pin 3        Ladungsspannung &amp;lt;= ???V&lt;br /&gt;
 Pin 4        GND Ladung&lt;br /&gt;
&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
Die Ladespannung dient zum Aufladen der Batterien. Es ist nicht sichergestellt, dass hier auch eine Spannung anliegt bzw. wie groß die Spannung tatsächlich ist. Hier können Stromerzeuger, wie z.B. ein Netzteil oder aber auch Solarzellen, ihren Strom anbieten.&lt;br /&gt;
&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
Die Informationsverarbeitung erfolgt bei allen Roboterzellen nach dem gleichen Prinzip. Deswegen enthält jede Zelle auch einen Logik-Anteil, so dass die Zusammenarbeit sichergestellt ist.&lt;br /&gt;
===== Definition von Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle besitzt einen Namen und einen Wertebereich. Der Name ist innerhalb einer Zelle eindeutig. Der Wertebereich ist über alle Zellen eindeutig definiert.&lt;br /&gt;
&lt;br /&gt;
Der Wertebereich kann eine Auflistung von Bezeichnern sein (z.B. Boolean: {False, True}) oder ein Zahlenbereich (z.B. Byte: 0 .. 255). Vordefiniert sind die Wertebereiche von Boolean, Byte, Integer und Float.&lt;br /&gt;
===== Definition gemeinsamer Speicherstellen =====&lt;br /&gt;
Eine Speicherstelle kann auch derart definiert werden, dass man sich auf die Speicherstelle einer anderen Zelle bezieht. Dann stellt das Betriebssystem sicher, dass der Zugriff (Lesen oder Schreiben) von jeder betroffenen Zelle aus so erfolgt, als wenn es sich um eine lokale Definition handeln würde. Veränderungen werden transparent durchgereicht. Die logische Schnittstelle besteht also eigentlich in diesen gemeinsamen Speicherstellen.&lt;br /&gt;
===== Programmierung =====&lt;br /&gt;
Die Programmierung erfolgt, indem die Zusammenhänge zwischen den Speicherstellen einer Zelle beschrieben werden. Jeder ''Zusammenhang'' ist eine Liste von ''Speicherstellenbeschreibungen''. &lt;br /&gt;
&lt;br /&gt;
Eine  ''Speicherstellenbeschreibung'' benennt eine Speicherstelle, den vorgesehenen Wert (oder einen Bereich von Werten) und ein ''angegebenes Gewicht''.&lt;br /&gt;
&lt;br /&gt;
Die Zelle sucht nun permanent nach ''gültigen Zusammenhängen'' und führt diese aus. Ein Zusammenhang ist gültig, wenn die Summe der Gewichte der Speicherstellenbeschreibungen über einem gewissen Schwellwert liegt. &lt;br /&gt;
&lt;br /&gt;
Das ''Gewicht einer Speicherstellenbeschreibung'' berechnet sich wie folgt: Entspricht der momentane Wert einer Speicherstelle einem der vorgesehenen Werte, so ist das ''Gewicht der Speicherstellenbeschreibung'' gleich dem ''angegebenen Gewicht''. Andernfalls ist es 0.&lt;br /&gt;
&lt;br /&gt;
Liegt die Summe der Gewichte (Gesamtgewicht) nun über einem gewissen Schwellwert, so wird der Zusammenhang ausgeführt: Die Werte aller im Zusammenhang aufgeführten Speicherstellen werden so verändert, dass ein möglichst hohes Gesamtgewicht erreicht wird.&lt;br /&gt;
&lt;br /&gt;
'''Anmerkung''': Klingt komplizierte als es ist. Ein Beispiel kommt demnächst und wird das Zusammenwirken verdeutlichen. Im Kern ist es ein Gemisch aus neuronalen Netzen und Regeln von Expertensystemen. Mal abwarten, wie es sich implementieren lässt. Wenn es funktioniert, kann eine Robotersteuerung ganz einfach aufgebaut werden und man konzentriert sich auf die Problemstellung. Ballast, wie das Erlernen einer Programmiersprache, ist nicht erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13632</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13632"/>
				<updated>2008-06-25T06:07:01Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
&lt;br /&gt;
==== Steckverbindungen ====&lt;br /&gt;
Es werden zwei Steckverbindungen entsprechend der [[RN-Definitionen]] verwendet:&lt;br /&gt;
Zur Kommunikation und bei geringem Stromverbrauch der I2C-Bus Stecker als 10-poliger Wannenstecker:&lt;br /&gt;
[[Bild:rndefinition_wannenstecker.gif|center]]&lt;br /&gt;
&lt;br /&gt;
Die Stromversorgung für Leistungsverbraucher erfolgt über die universellen Wannenstecker AKL230 mit 4 Polen.&lt;br /&gt;
&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* die Informationsübertragung und&lt;br /&gt;
* die Stromversorgung &lt;br /&gt;
&lt;br /&gt;
==== Informationsübertragung ====&lt;br /&gt;
Die Informationsübertragung erfolgt über den I2C-Bus Stecker gemäß [[RN-Definitionen]]:&lt;br /&gt;
[[Bild:stecker_10pol_i2c.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Pin 1        SCL (Taktleitung)&lt;br /&gt;
 Pin 3        SDA (Datenleitung)&lt;br /&gt;
 Pin 5        +5V&lt;br /&gt;
 Pin 7        +5V&lt;br /&gt;
 Pin 9        Batteriespannung +12V&lt;br /&gt;
 Pin 8        GND Batterie&lt;br /&gt;
 Pin 2,4,6    GND &lt;br /&gt;
 Pin 10       INT   &lt;br /&gt;
&lt;br /&gt;
Es sind Maximal 3 A je Pin zulässig.&lt;br /&gt;
Pin 5 und 7 besitzen eine geregelte +5V Spannung.&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Bei Bedarf, kann über einen zusätzlichen Stecker die Stromversorgung bis zu 10 A sichergestellt werden.&lt;br /&gt;
 Pin 1        Batteriespannung +12V&lt;br /&gt;
 Pin 2        GND Batterie&lt;br /&gt;
 Pin 3        Ladungsspannung &amp;lt;= ???V&lt;br /&gt;
 Pin 4        GND Ladung&lt;br /&gt;
&lt;br /&gt;
Die Batteriespannung ist auf +12V ausgelegt, kann aber je nach Ladezustand auch kleiner/größer ausfallen.&lt;br /&gt;
&lt;br /&gt;
Die Ladespannung dient zum Aufladen der Batterien. Es ist nicht sichergestellt, dass hier auch eine Spannung anliegt bzw. wie groß die Spannung tatsächlich ist. Hier können Stromerzeuger, wie z.B. ein Netzteil oder aber auch Solarzellen, ihren Strom anbieten.&lt;br /&gt;
&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13631</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13631"/>
				<updated>2008-06-25T05:23:59Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
&lt;br /&gt;
==== Steckverbindungen ====&lt;br /&gt;
Es werden zwei Steckverbindungen entsprechend der [[RN-Definitionen]] verwendet:&lt;br /&gt;
Zur Kommunikation und bei geringem Stromverbrauch der I2C-Bus Stecker&lt;br /&gt;
&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* Logische Bus&lt;br /&gt;
: Wie tauschen die Zellen physikalisch Informationen aus?&lt;br /&gt;
* Stromversorgung&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13630</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13630"/>
				<updated>2008-06-25T05:19:51Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du möchtest}}&lt;br /&gt;
&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Grundregeln ==&lt;br /&gt;
Um die Entscheidungen leichter zu machen, hier ein paar Grundregeln:&lt;br /&gt;
* Auf geringen Energiverbrauch achten&lt;br /&gt;
* Auf geringes Gewicht achten&lt;br /&gt;
* Möglichst kostengünstige Hardware verwenden&lt;br /&gt;
* Einsparung von Hardware durch Softwarelösungen auf dem Controller&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Natürlich können bei der Anwendung der Grundregeln widersprüchliche Lösungen entstehen. Dann ist halt abzuwägen.&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* Logische Bus&lt;br /&gt;
: Wie tauschen die Zellen physikalisch Informationen aus?&lt;br /&gt;
* Stromversorgung&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13626</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13626"/>
				<updated>2008-06-22T10:05:15Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
{{Ausbauwunsch|Erweitern und verbessern, da wo Du Dich auskennst}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* Logische Bus&lt;br /&gt;
: Wie tauschen die Zellen physikalisch Informationen aus?&lt;br /&gt;
* Stromversorgung&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13625</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13625"/>
				<updated>2008-06-22T10:02:08Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* Logische Bus&lt;br /&gt;
: Wie tauschen die Zellen physikalisch Informationen aus?&lt;br /&gt;
* Stromversorgung&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Jeder Zelltyp definiert seine Anforderungen an die Schnittstellen. Insbesondere der Bedarf an Strom und die bereitgestellten Funktionen der logischen Schnittstelle sind aufzuzeigen.&lt;br /&gt;
&lt;br /&gt;
Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die eine Stange verlängern oder verkürzen können. Hierüber können Arme und Beine Beweglichkeit erhalten.&lt;br /&gt;
===== Räder =====&lt;br /&gt;
Viele Roboter bewegen sich auf Reifen. &lt;br /&gt;
==== Verstrebung ====&lt;br /&gt;
Nicht immer werden überall Funktionen benötigt. Es müssen auch leichte Elemente ohne Funktionalität bereitgestellt werden.&lt;br /&gt;
==== Schaniere ====&lt;br /&gt;
Die Kopplungen sind alle starr. Um Beweglichkeit zu ermöglichen, müssen bewegbare Zellen vorhanden sein.&lt;br /&gt;
==== Stromversorgung ====&lt;br /&gt;
Ein oder mehrere dieser Zellen sind für die Energieversorgung zuständig. Neben Akkus können Netzgeräte und auch Solarpannels zum Einsatz kommen.&lt;br /&gt;
==== Logik ====&lt;br /&gt;
Ein Standardtyp zur Verarbeitung der Informationen.&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
In den vorangehenden Kapiteln wurden Zellen bereitgestellt. Wie können diese Zellen zu dem gewollten Zusammenarbeiten bewegt werden?&lt;br /&gt;
=== Erstellung eines Zellverbundes ===&lt;br /&gt;
Was muß getan werden, damit aus einzelnen Zellen ein funktionsfähiger Zellverbund entsteht? Wie unterstützen die Zellen den Aufbau?&lt;br /&gt;
=== Programmierung ===&lt;br /&gt;
Wie können die Logikzellen in einem Zellverbund programmiert werden?&lt;br /&gt;
== Verweise ==&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13624</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13624"/>
				<updated>2008-06-22T09:29:55Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
{{Baustelle|ZellRobi}}&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
Steckerbelegungen und Spannungspegel, Belastbarkeit etc. sind festzulegen. Gebraucht werden elektrische Schnittstellen für:&lt;br /&gt;
* Logische Bus&lt;br /&gt;
: Wie tauschen die Zellen physikalisch Informationen aus?&lt;br /&gt;
* Stromversorgung&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
Hier werden die Fragen rund um den Aufbau der Informationen, die zwischen Zellen ausgetauscht werden können, gelöst. Aber auch die Einbindung der Standardsoftware für die Programmierung der Zellen muß geregelt sein.&lt;br /&gt;
==== Informationsaustausch ====&lt;br /&gt;
&lt;br /&gt;
==== Softwareschnittstelle ====&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
Die Schnittstellendefinitionen normieren, wie Zellen miteinander arbeiten können. Hier wird aufgezeigt, welche Funktionen die Zellen benötigen. Zellen mit gleicher Funktion, werden zu einem Zelltyp zusammengefasst. Die Liste der Zelltypen ist (noch) unsortiert und sollte je nach Bedarf verlängert werden.&lt;br /&gt;
==== Ein-/Ausgabe ====&lt;br /&gt;
Kernstück für den Aufbau zellularer Roboter ist ein Ein-/Ausgabemodul, mit dem der Benutzer die erforderlichen Parameter festlegt. Ist der Roboter erstellt, sollte das Modul nicht mehr unbedingt erforderlich sein.&lt;br /&gt;
==== Sensoren ====&lt;br /&gt;
Dieser Zelltyp ist sicherlich noch weiter zu untergliedern. Was sind die wichtigsten Sensoren, die unterstützt werden sollten? Wie viele Sensoren werden in einer Zelle zusammengefasst?&lt;br /&gt;
==== Effektoren ====&lt;br /&gt;
===== Lineare Antriebe =====&lt;br /&gt;
Ähnlich den Schubzylindern eines Baggerarmes werden elektrische Antriebe benötigt, die &lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13623</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13623"/>
				<updated>2008-06-22T09:03:52Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
Wenn Du mitmachen möchtest: Suche Dir die passende Stelle aus und erweitere sie. Problematische Fragestellungen kann man / sollte man erst im Forum diskutieren. Ergebnisse aus diesen Diskussionen gehören aber dann als Festlegungen in dieses Dokument. So kann der Stand der Entwicklung immer hier nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihre eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll. Die übrigen Fragestellungen wurden bereits gelöst und stehen als fertige Zellen zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
{{Baustelle|ZellRobi}}&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
Damit die Zellen miteinander arbeiten können, müssen alle Verbindungen genormt sein. Hierzu zählen:&lt;br /&gt;
* Mechanik&lt;br /&gt;
* Energieversorgung&lt;br /&gt;
* Logik&lt;br /&gt;
&lt;br /&gt;
Und was ist mit den Sensoren, den Motoren und der Software?&lt;br /&gt;
Sensoren und Effektoren sind Funktionalitäten einer Zelle. Die Informationen oder Steuerimpulse werden über die logische Schnittstelle an andere Zellen weitergegeben. Also benötigt man hierfür keine Schnittstellendefinition.&lt;br /&gt;
&lt;br /&gt;
Die Software muß die Regeln des Miteinanders einhalten. Diese werden in der logischen Schnittstelle ausgeführt.&lt;br /&gt;
=== Mechanische Schnittstelle ===&lt;br /&gt;
Hier müssen genormt werden:&lt;br /&gt;
* Wie koppeln zwei Zellen aneinander?&lt;br /&gt;
: Sie sollten einfach aber stabiel miteinander verbunden und wieder gelöst werden können.&lt;br /&gt;
* Welche Stecker und Buchsen werden verwendet?&lt;br /&gt;
* Welche Maße hat die Schnittstelle?&lt;br /&gt;
* Welche räumlichen Dimensionen sind zu beachten?&lt;br /&gt;
: Schnittstellen haben ein festes Rastermaß im Raum. Wo kann angedockt werden? Welche Regeln sind bzgl der Zellgröße zu beachten?&lt;br /&gt;
* Was ist bei der äussern Hülle, der Haut der Zellen bzw. des Roboters zu beachten?&lt;br /&gt;
=== Elektrische Schnittstelle ===&lt;br /&gt;
&lt;br /&gt;
=== Logische Schnittstelle ===&lt;br /&gt;
&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13622</id>
		<title>Roboterzellen</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Roboterzellen&amp;diff=13622"/>
				<updated>2008-06-22T04:37:10Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: Festlegungen zum Aufbau von Robotern aus einzelnen Zellen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
Mit diesem Eintrag sollen die Entscheidungen und Diskussionsergebnisse festgehalten werden, die zur Verwirklichung der Vision erforderlich sind. Insofern bleibt die Seite unvollständig und viele Einträge sind lediglich ein Hinweis: hier ist noch etwas zu tun.&lt;br /&gt;
&lt;br /&gt;
== Vision ==&lt;br /&gt;
Die Entwicklung der Microcontroller hat derartige Fortschritte gemacht, dass mittlerweile sehr viele Funktionen zu einem günstigen Preis verfügbar geworden sind. Die Vielseitigkeit erlaubt es aber auch, Funktionen, die bislang in Hardware realisiert wurden, über Software bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
Es ist möglich geworden, Hardware und Microcontroller zu einer Zelle zu verbinden und die erforderliche Kommunikation zwischen den Zellen über ein Bussystem abzuwickeln. Die Verbindungen zwischen den Zellen können standardisiert werden, das &amp;quot;Miteinander&amp;quot; findet im Rahmen der Software statt. &lt;br /&gt;
&lt;br /&gt;
Jede Zelle leistet einen Beitrag für ihren eigene Funktionalität und einen Beitrag für die Zellgemeinschaft. Ihre eigene Funktionalität ist bereits entwickelt, der Beitrag für die Zellgemeinschaft ist bereits festgelegt. &lt;br /&gt;
&lt;br /&gt;
Roboter aus Roboterzellen bauen heißt also nur noch: Festlegen, welche Zelle was wann tun soll.&lt;br /&gt;
&lt;br /&gt;
Will man beispielsweise ein Fahrzeug erstellen, so nimmt man 4 Radzellen (oder 6, oder ...), Gelenkzellen, Sensorzellen, Logikzellen, ... und steckt sie zusammen. Dann braucht man sich nur noch darauf zu konzentrieren, dass das Fahrzeug auch so fährt, wie es soll ...&lt;br /&gt;
&lt;br /&gt;
{{Baustelle|ZellRobi}}&lt;br /&gt;
&lt;br /&gt;
== Die Schnittstelle zwischen den Zellen ==&lt;br /&gt;
&lt;br /&gt;
== Zelltypen ==&lt;br /&gt;
&lt;br /&gt;
== Das Miteinander ==&lt;br /&gt;
&lt;br /&gt;
== Autor ==&lt;br /&gt;
--[[Benutzer:ZellRobi|ZellRobi]] 06:37, 22. Jun 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Projekte]]&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Testseite&amp;diff=13621</id>
		<title>Testseite</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Testseite&amp;diff=13621"/>
				<updated>2008-06-21T19:53:41Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Überschrift */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Marius Fiegenbaum stinkt ==&lt;br /&gt;
&lt;br /&gt;
== Passive Bauteile ==&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
110^{-6}F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ebene 2 Überschrift ==&lt;br /&gt;
''Kursiver Text''''Kursiver Text''&lt;br /&gt;
== Ebene 2 Überschrift ==&lt;br /&gt;
[http://www.beispiel.de Link-Text]''Kursiver Text''''Kursiver Text''[[Media:Beispiel.mp3]]&lt;br /&gt;
----&lt;br /&gt;
Benutzer:Tocer|Tocer]] 09:12, 10. Jun 2008 (CEST)&lt;br /&gt;
----&lt;br /&gt;
Geil&lt;br /&gt;
&lt;br /&gt;
== da der rest ==&lt;br /&gt;
&lt;br /&gt;
[[:Kategorie:Microcontroller]]&lt;br /&gt;
&lt;br /&gt;
[[:RN-Control Grundfunktionen]]&lt;br /&gt;
&lt;br /&gt;
Hier kann man ein wenig experimentieren wie was geht! Einfach auf bearbeiten klicken und schreiben!&lt;br /&gt;
Wieso ist das jetzt in so einem Kästchen?&lt;br /&gt;
Eine neue Zeile im [[--[[Benutzer:Tocer|Tocer]] 11:43, 9. Jun 2008 (CEST)[[Media:''Marius Fiegenbaum stinktHaupttext'']].]]&lt;br /&gt;
So strukturiert man Seiten: &lt;br /&gt;
 Bla ??? blablabla&lt;br /&gt;
 Test1234&lt;br /&gt;
 Das geht ja gut!!!&lt;br /&gt;
&lt;br /&gt;
==Formeln==&lt;br /&gt;
&amp;lt;math&amp;gt; f(x)=x \cdot b^x &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \sum_{k=0}^\infty \frac {(-1)^k \cdot x^{2k}}{(2k)!} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \sum_{k=0}^3 \frac {(-1)^k \cdot x^{2k}}{(2k)!} = 1-\frac{1}{2}\cdot x^2 +\frac{1}{24}\cdot x^4-\frac{1}{720}\cdot x^4&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 U_\mathrm{m} = U_\mathrm{ein} \cdot  \frac{t_\mathrm{ein}}{t_\mathrm{ein} + t_\mathrm{aus}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Überschrift =&lt;br /&gt;
und nun der Text &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Neuer Abschnitt ==&lt;br /&gt;
bla bla bla ...&lt;br /&gt;
&lt;br /&gt;
=== Unterabschnitt ===&lt;br /&gt;
bla bla bla ...&lt;br /&gt;
==== Unter-Unterabschnitt ====&lt;br /&gt;
[[Bild:AtmelController.jpg|thumb|Bildunterzeile für Beschreibung]]&lt;br /&gt;
bla bla bla ...&lt;br /&gt;
* Aufzählung&lt;br /&gt;
* Aufzählung&lt;br /&gt;
* Aufzählung&lt;br /&gt;
* Aufzählung&lt;br /&gt;
&lt;br /&gt;
# Aufzählung &amp;lt;ref name=&amp;quot;rrr&amp;quot;&amp;gt; aaa [xxxx yyy] &amp;lt;/ref&amp;gt;&lt;br /&gt;
# Aufzählung&lt;br /&gt;
# noch einmal&lt;br /&gt;
# Aufzählung&lt;br /&gt;
&lt;br /&gt;
== Ab hier Testbereich zum ausprobieren - kann ruhig verschandelt werden!!!==&lt;br /&gt;
&lt;br /&gt;
===Formatierprobleme===&lt;br /&gt;
&lt;br /&gt;
;Quellcode I:&lt;br /&gt;
:&amp;lt;pre&amp;gt;Zeile 1&lt;br /&gt;
Zeile2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
|+ ohne center&lt;br /&gt;
|-&lt;br /&gt;
| a || b&lt;br /&gt;
|-&lt;br /&gt;
| aaaaaa || bbbbb&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{| {{Blauetabelle}} style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|+ mit center&lt;br /&gt;
|-&lt;br /&gt;
| a || b&lt;br /&gt;
|-&lt;br /&gt;
| aaaaaa || bbbbb&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{| style=&amp;quot;text-align:center;&amp;quot; {{Blauetabelle}} &lt;br /&gt;
|+ mit center&lt;br /&gt;
|-&lt;br /&gt;
| a || b&lt;br /&gt;
|-&lt;br /&gt;
| aaaaaa || bbbbb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Formel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;E=mc^2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://images.allposters.com/images/GDF/Z1735D.jpg&lt;br /&gt;
&lt;br /&gt;
==Vorlage==&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
U(t) \,=\, U_0 \cdot e^{-\frac{t}{RC}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Test|aaa|bbb}}&lt;br /&gt;
&lt;br /&gt;
== Teste hier auch mal :-) ==&lt;br /&gt;
&amp;lt;math&amp;gt;\Downarrow\Uparrow&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hat du kopp wie Sieb mutdu aufschreiben ==&lt;br /&gt;
---------------------------&lt;br /&gt;
&lt;br /&gt;
Interrupts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Struktur:&lt;br /&gt;
&lt;br /&gt;
 Config InterruptXXX  		‘Konfiguriere Interrupt&lt;br /&gt;
 Enable Interrupts		‘generell Interrupts zulassen&lt;br /&gt;
 Enable  InterruptXXX		‘schalte speziell den InterruptXXX ein&lt;br /&gt;
 On  InterruptXXX   SprungXXX	‘verzweige bei InterruptXXX zu SprungXXX&lt;br /&gt;
 &lt;br /&gt;
 Do&lt;br /&gt;
 ....Hauptprogramm		‘Hauptprogramm&lt;br /&gt;
 Loop&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 SprungXXX:			‘Unterprogramm von InterruptXXX&lt;br /&gt;
 ....Ausführung			‘arbeitet hier etwas ab und springt mit Return &lt;br /&gt;
 Return				‚ wieder zurück, zum Hauptprogramm&lt;br /&gt;
=== xxx ===&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\overline{u} \vee \overline{v} = \overline{u \wedge v}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\bar{u}_1 \wedge \bar{u}_2 \wedge \cdots \wedge \bar{u}_n  &lt;br /&gt;
= \overline{u_1 \vee u_2 \vee \cdots \vee u_n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\neg u_1 \wedge \neg u_2 \wedge \cdots \wedge \neg u_n  &lt;br /&gt;
= \neg (u_1 \vee u_2 \vee \cdots \vee u_n)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\bar{u} \vee u = 1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\bar{u} \wedge u = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\bar{A_1} = \overline{A}_1 = \overline{A_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\uparrow a&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Downarrow \Uparrow&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jetzt will ich das ganze auch mal testen! ==&lt;br /&gt;
Test '''Test''' ''Test'' '''''Test'''''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a² = b² + c²&amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;    &amp;lt;!-- warum geht das mit den ² dingern nich!?! --&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a=b+c&amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;           &amp;lt;!-- ahh so gehts --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a^2=b^2+c^2&amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt; &lt;br /&gt;
*Dies könnte eine Aufzählung sein&lt;br /&gt;
**und dies einer der Inhalte&lt;br /&gt;
**dies auch&lt;br /&gt;
***und noch ein inhalt von &amp;quot;dies auch&amp;quot;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 nun will ich&lt;br /&gt;
 auch einmal versuchen&lt;br /&gt;
 ein quelltextfenster&lt;br /&gt;
 darzustellen!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
{{FarbigerRahmen|&lt;br /&gt;
Wichtiger Text wird in der Mitte geschrieben&amp;lt;br/&amp;gt;&lt;br /&gt;
und zusätzlich ROT umrahmt!&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NAND GATTER ===&lt;br /&gt;
&amp;lt;math&amp;gt; x=a \overline { acb } b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NOR GATTER ===&lt;br /&gt;
&amp;lt;math&amp;gt; x=a \overline { v } b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Elayne|Elayne]] 16:20, 27. Dez 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getiebe ==&lt;br /&gt;
&lt;br /&gt;
=== Achsabstände ===&lt;br /&gt;
Das größte Problem bei selbstgebauten Getrieben ist die Bestimmung&lt;br /&gt;
der Achsabstände. &amp;lt;br&amp;gt;&lt;br /&gt;
Zu weite Abstände verursachen zum einen Schäden an den Zahnrädern &amp;lt;br&amp;gt;&lt;br /&gt;
und zu kurze Abstände sorgen dafür, dass sich das Getriebe,&amp;lt;br&amp;gt; &lt;br /&gt;
wenn überhaupt, nicht drehen lässt und auch schneller verschleißen kann.&lt;br /&gt;
&lt;br /&gt;
Ein wichtiger Parameter, welcher zur Berechnung der Achsabstände benötigt wird,&amp;lt;br&amp;gt;&lt;br /&gt;
ist die Modulgröße oder auch Modulzahl genannt.&lt;br /&gt;
&lt;br /&gt;
Für Zahnräder mit unbekannter Modulgröße gibt es Zahnradlehren,&lt;br /&gt;
welche das ermitteln des Modul's erleichtert ohne raten zu müssen&lt;br /&gt;
&lt;br /&gt;
Der Abstand der Zahnradachsen lässt sich wie folgend ermitteln:&lt;br /&gt;
&lt;br /&gt;
   Anzahl der beiden Zahnradzähne (welche ineiandergreifen) zusammenzählen,&lt;br /&gt;
   davon dann die Hälfte mit der Modulzahl multiplizieren.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&lt;br /&gt;
;Quelle1: blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah &lt;br /&gt;
:{|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ghdjs gdjs dgjs &lt;br /&gt;
   dgsjdghsj&lt;br /&gt;
   dgsdhgjs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Quelle2 und Quelle3: blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah &lt;br /&gt;
:{|&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;| '''Quelle2'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ghdjs gdjs dgjs &lt;br /&gt;
   dgsjdghsj&lt;br /&gt;
   dgsdhgjs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;!-- space --&amp;gt;&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;| '''Quelle3'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ghdjs gdjs dgjs &lt;br /&gt;
   dgsjdghsj&lt;br /&gt;
   dgsdhgjs&lt;br /&gt;
ghdjs gdjs dgjs &lt;br /&gt;
   dgsjdghsjjavascript:insertTags('\'\'\'','\'\'\'','Fetter Text');&lt;br /&gt;
Fetter Text&lt;br /&gt;
   dgsdhgjs&lt;br /&gt;
ghdjs gdjs dgjs &lt;br /&gt;
   dgsjdghsj&lt;br /&gt;
   dgsdhgjs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Sudoku==&lt;br /&gt;
&lt;br /&gt;
[[Bild:sodoku.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bildergallery ganz einfach anlegen==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:kaercherrobot.jpg&lt;br /&gt;
Image:siemensvsr8000unten.jpg|Siemens von unten&lt;br /&gt;
Image:siemensvsr8000buerste.jpg&lt;br /&gt;
Image:siemensvsr8000basis.jpg|Die Basisstation&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Test]]&lt;br /&gt;
&lt;br /&gt;
[[Media:Beispiel.mp3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
darf ich auch mal, ja? Gut:&lt;br /&gt;
L'''o'''r''e''m ipsum dolor sit amet.......&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Testseite&amp;diff=13620</id>
		<title>Testseite</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Testseite&amp;diff=13620"/>
				<updated>2008-06-21T19:53:04Z</updated>
		
		<summary type="html">&lt;p&gt;ZellRobi: /* Marius Fiegenbaum stinkt = */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Marius Fiegenbaum stinkt ==&lt;br /&gt;
&lt;br /&gt;
== Passive Bauteile ==&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
110^{-6}F&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ebene 2 Überschrift ==&lt;br /&gt;
''Kursiver Text''''Kursiver Text''&lt;br /&gt;
== Ebene 2 Überschrift ==&lt;br /&gt;
[http://www.beispiel.de Link-Text]''Kursiver Text''''Kursiver Text''[[Media:Beispiel.mp3]]&lt;br /&gt;
----&lt;br /&gt;
Benutzer:Tocer|Tocer]] 09:12, 10. Jun 2008 (CEST)&lt;br /&gt;
----&lt;br /&gt;
Geil&lt;br /&gt;
&lt;br /&gt;
== da der rest ==&lt;br /&gt;
&lt;br /&gt;
[[:Kategorie:Microcontroller]]&lt;br /&gt;
&lt;br /&gt;
[[:RN-Control Grundfunktionen]]&lt;br /&gt;
&lt;br /&gt;
Hier kann man ein wenig experimentieren wie was geht! Einfach auf bearbeiten klicken und schreiben!&lt;br /&gt;
Wieso ist das jetzt in so einem Kästchen?&lt;br /&gt;
Eine neue Zeile im [[--[[Benutzer:Tocer|Tocer]] 11:43, 9. Jun 2008 (CEST)[[Media:''Marius Fiegenbaum stinktHaupttext'']].]]&lt;br /&gt;
So strukturiert man Seiten: &lt;br /&gt;
 Bla ??? blablabla&lt;br /&gt;
 Test1234&lt;br /&gt;
 Das geht ja gut!!!&lt;br /&gt;
&lt;br /&gt;
==Formeln==&lt;br /&gt;
&amp;lt;math&amp;gt; f(x)=x \cdot b^x &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \sum_{k=0}^\infty \frac {(-1)^k \cdot x^{2k}}{(2k)!} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \sum_{k=0}^3 \frac {(-1)^k \cdot x^{2k}}{(2k)!} = 1-\frac{1}{2}\cdot x^2 +\frac{1}{24}\cdot x^4-\frac{1}{720}\cdot x^4&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 U_\mathrm{m} = U_\mathrm{ein} \cdot  \frac{t_\mathrm{ein}}{t_\mathrm{ein} + t_\mathrm{aus}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Überschrift =&lt;br /&gt;
und nun der Text --[[Benutzer:ZellRobi|ZellRobi]] 21:53, 21. Jun 2008 (CEST)&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Neuer Abschnitt ==&lt;br /&gt;
bla bla bla ...&lt;br /&gt;
&lt;br /&gt;
=== Unterabschnitt ===&lt;br /&gt;
bla bla bla ...&lt;br /&gt;
==== Unter-Unterabschnitt ====&lt;br /&gt;
[[Bild:AtmelController.jpg|thumb|Bildunterzeile für Beschreibung]]&lt;br /&gt;
bla bla bla ...&lt;br /&gt;
* Aufzählung&lt;br /&gt;
* Aufzählung&lt;br /&gt;
* Aufzählung&lt;br /&gt;
* Aufzählung&lt;br /&gt;
&lt;br /&gt;
# Aufzählung &amp;lt;ref name=&amp;quot;rrr&amp;quot;&amp;gt; aaa [xxxx yyy] &amp;lt;/ref&amp;gt;&lt;br /&gt;
# Aufzählung&lt;br /&gt;
# noch einmal&lt;br /&gt;
# Aufzählung&lt;br /&gt;
&lt;br /&gt;
== Ab hier Testbereich zum ausprobieren - kann ruhig verschandelt werden!!!==&lt;br /&gt;
&lt;br /&gt;
===Formatierprobleme===&lt;br /&gt;
&lt;br /&gt;
;Quellcode I:&lt;br /&gt;
:&amp;lt;pre&amp;gt;Zeile 1&lt;br /&gt;
Zeile2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{| {{Blauetabelle}}&lt;br /&gt;
|+ ohne center&lt;br /&gt;
|-&lt;br /&gt;
| a || b&lt;br /&gt;
|-&lt;br /&gt;
| aaaaaa || bbbbb&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{| {{Blauetabelle}} style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|+ mit center&lt;br /&gt;
|-&lt;br /&gt;
| a || b&lt;br /&gt;
|-&lt;br /&gt;
| aaaaaa || bbbbb&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{| style=&amp;quot;text-align:center;&amp;quot; {{Blauetabelle}} &lt;br /&gt;
|+ mit center&lt;br /&gt;
|-&lt;br /&gt;
| a || b&lt;br /&gt;
|-&lt;br /&gt;
| aaaaaa || bbbbb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Formel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;E=mc^2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://images.allposters.com/images/GDF/Z1735D.jpg&lt;br /&gt;
&lt;br /&gt;
==Vorlage==&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
U(t) \,=\, U_0 \cdot e^{-\frac{t}{RC}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Test|aaa|bbb}}&lt;br /&gt;
&lt;br /&gt;
== Teste hier auch mal :-) ==&lt;br /&gt;
&amp;lt;math&amp;gt;\Downarrow\Uparrow&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hat du kopp wie Sieb mutdu aufschreiben ==&lt;br /&gt;
---------------------------&lt;br /&gt;
&lt;br /&gt;
Interrupts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Struktur:&lt;br /&gt;
&lt;br /&gt;
 Config InterruptXXX  		‘Konfiguriere Interrupt&lt;br /&gt;
 Enable Interrupts		‘generell Interrupts zulassen&lt;br /&gt;
 Enable  InterruptXXX		‘schalte speziell den InterruptXXX ein&lt;br /&gt;
 On  InterruptXXX   SprungXXX	‘verzweige bei InterruptXXX zu SprungXXX&lt;br /&gt;
 &lt;br /&gt;
 Do&lt;br /&gt;
 ....Hauptprogramm		‘Hauptprogramm&lt;br /&gt;
 Loop&lt;br /&gt;
 End&lt;br /&gt;
 &lt;br /&gt;
 SprungXXX:			‘Unterprogramm von InterruptXXX&lt;br /&gt;
 ....Ausführung			‘arbeitet hier etwas ab und springt mit Return &lt;br /&gt;
 Return				‚ wieder zurück, zum Hauptprogramm&lt;br /&gt;
=== xxx ===&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\overline{u} \vee \overline{v} = \overline{u \wedge v}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\bar{u}_1 \wedge \bar{u}_2 \wedge \cdots \wedge \bar{u}_n  &lt;br /&gt;
= \overline{u_1 \vee u_2 \vee \cdots \vee u_n}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\neg u_1 \wedge \neg u_2 \wedge \cdots \wedge \neg u_n  &lt;br /&gt;
= \neg (u_1 \vee u_2 \vee \cdots \vee u_n)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\bar{u} \vee u = 1&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\bar{u} \wedge u = 0&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\bar{A_1} = \overline{A}_1 = \overline{A_1}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\uparrow a&amp;lt;/math&amp;gt;&lt;br /&gt;
|&amp;lt;math&amp;gt;\Downarrow \Uparrow&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Jetzt will ich das ganze auch mal testen! ==&lt;br /&gt;
Test '''Test''' ''Test'' '''''Test'''''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a² = b² + c²&amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;    &amp;lt;!-- warum geht das mit den ² dingern nich!?! --&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;a=b+c&amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt;           &amp;lt;!-- ahh so gehts --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;a^2=b^2+c^2&amp;lt;/math&amp;gt;&amp;lt;br/&amp;gt; &lt;br /&gt;
*Dies könnte eine Aufzählung sein&lt;br /&gt;
**und dies einer der Inhalte&lt;br /&gt;
**dies auch&lt;br /&gt;
***und noch ein inhalt von &amp;quot;dies auch&amp;quot;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 nun will ich&lt;br /&gt;
 auch einmal versuchen&lt;br /&gt;
 ein quelltextfenster&lt;br /&gt;
 darzustellen!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
{{FarbigerRahmen|&lt;br /&gt;
Wichtiger Text wird in der Mitte geschrieben&amp;lt;br/&amp;gt;&lt;br /&gt;
und zusätzlich ROT umrahmt!&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NAND GATTER ===&lt;br /&gt;
&amp;lt;math&amp;gt; x=a \overline { acb } b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NOR GATTER ===&lt;br /&gt;
&amp;lt;math&amp;gt; x=a \overline { v } b&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Elayne|Elayne]] 16:20, 27. Dez 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getiebe ==&lt;br /&gt;
&lt;br /&gt;
=== Achsabstände ===&lt;br /&gt;
Das größte Problem bei selbstgebauten Getrieben ist die Bestimmung&lt;br /&gt;
der Achsabstände. &amp;lt;br&amp;gt;&lt;br /&gt;
Zu weite Abstände verursachen zum einen Schäden an den Zahnrädern &amp;lt;br&amp;gt;&lt;br /&gt;
und zu kurze Abstände sorgen dafür, dass sich das Getriebe,&amp;lt;br&amp;gt; &lt;br /&gt;
wenn überhaupt, nicht drehen lässt und auch schneller verschleißen kann.&lt;br /&gt;
&lt;br /&gt;
Ein wichtiger Parameter, welcher zur Berechnung der Achsabstände benötigt wird,&amp;lt;br&amp;gt;&lt;br /&gt;
ist die Modulgröße oder auch Modulzahl genannt.&lt;br /&gt;
&lt;br /&gt;
Für Zahnräder mit unbekannter Modulgröße gibt es Zahnradlehren,&lt;br /&gt;
welche das ermitteln des Modul's erleichtert ohne raten zu müssen&lt;br /&gt;
&lt;br /&gt;
Der Abstand der Zahnradachsen lässt sich wie folgend ermitteln:&lt;br /&gt;
&lt;br /&gt;
   Anzahl der beiden Zahnradzähne (welche ineiandergreifen) zusammenzählen,&lt;br /&gt;
   davon dann die Hälfte mit der Modulzahl multiplizieren.&lt;br /&gt;
&lt;br /&gt;
=Quellen=&lt;br /&gt;
&lt;br /&gt;
;Quelle1: blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah &lt;br /&gt;
:{|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ghdjs gdjs dgjs &lt;br /&gt;
   dgsjdghsj&lt;br /&gt;
   dgsdhgjs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Quelle2 und Quelle3: blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah &lt;br /&gt;
:{|&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;| '''Quelle2'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ghdjs gdjs dgjs &lt;br /&gt;
   dgsjdghsj&lt;br /&gt;
   dgsdhgjs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
| &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;!-- space --&amp;gt;&lt;br /&gt;
|valign=&amp;quot;top&amp;quot;| '''Quelle3'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ghdjs gdjs dgjs &lt;br /&gt;
   dgsjdghsj&lt;br /&gt;
   dgsdhgjs&lt;br /&gt;
ghdjs gdjs dgjs &lt;br /&gt;
   dgsjdghsjjavascript:insertTags('\'\'\'','\'\'\'','Fetter Text');&lt;br /&gt;
Fetter Text&lt;br /&gt;
   dgsdhgjs&lt;br /&gt;
ghdjs gdjs dgjs &lt;br /&gt;
   dgsjdghsj&lt;br /&gt;
   dgsdhgjs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Sudoku==&lt;br /&gt;
&lt;br /&gt;
[[Bild:sodoku.gif|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Quellen==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bildergallery ganz einfach anlegen==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:kaercherrobot.jpg&lt;br /&gt;
Image:siemensvsr8000unten.jpg|Siemens von unten&lt;br /&gt;
Image:siemensvsr8000buerste.jpg&lt;br /&gt;
Image:siemensvsr8000basis.jpg|Die Basisstation&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Test]]&lt;br /&gt;
&lt;br /&gt;
[[Media:Beispiel.mp3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
darf ich auch mal, ja? Gut:&lt;br /&gt;
L'''o'''r''e''m ipsum dolor sit amet.......&lt;/div&gt;</summary>
		<author><name>ZellRobi</name></author>	</entry>

	</feed>