en to de translation catalogue (28 entries)

note: type: Title-text
en: Remote control #3
de: Fernsteuerung 3

note: type: Resume-text
en: Remote control a bot without using an information exchange post by using a string.
de: Steuern Sie einen Roboter ohne Infoserver fern.

note: type: ScriptName-text
en: Remote3
de: Steuerung3

note: type: \b; header
en: Exercice
de: Übung

note: type: Plain text
en: Remote control a slave robot without using an <a object|exchange>information exchange post</a>. The robot should pass over the 6 blue crosses. You must use a <a cbot|string>string</a> to pass the orders to the slave bot. This string contains the order the slave shoud execute, for exemple <code>"move(20)"</code>. You can see that this is the same syntax as used in the CBOT language but we could have chosen any other syntax for exemple something like <code>"advance=20"</code>. The string will be a <code><a cbot|static>static</a></code> class member that will be used to communicate from the master to the slave.
de: Steuern Sie einen Roboter fern, diesmal jedoch ohne Benutzung eines <a object|exchange>Infoservers</a>. Der Roboter soll die 6 blauen Kreuze passieren. Benutzen Sie einen <a cbot|string>String</a>, um Befehle zum Slave-Roboter zu übermitteln. Dieser String enthält den Befehl, den der Slave ausführen soll, zum Beispiel <code>"move(20)"</code>. Sie sehen, dass das die gleiche Syntax ist, die auch in der CBOT-Sprache Verwendung findet, aber wir hätten auch jede beliebige andere Syntax wählen können. Etwas wie <code>"advance=20"</code> wäre ebenfalls möglich. Der String wird als <code><a cbot|static>statische</a></code> Klassenvariable deklariert und so für die Kommunikation zwischen Master und Slave benutzt.

note: type: Plain text
en: The two main actors of this exercise are:
de: Die Hauptakteure dieser Übung sind:

note: type: Bullet: '1)'
en: The <a object|botgr>wheeled grabber</a> without an energy pack and therefore immobile. This is the master you should program so it will transmit orders to the slave.
de: Der <a object|botgr>Radtransporter</a>, der keine Batterie hat und dadurch unbeweglich ist. Dies ist der Master den Sie so programmieren sollen, dass er Befehle zum Slave sendet.

note: type: Bullet: '2)'
en: The slave <a object|bottr>practice bot</a> which is already programmed and just waits for orders from the master.
de: Der Slave-<a object|bottr>Übungsroboter</a> ist schon mit einer Programmierung versehen und wartet auf Befehle vom Master.

note: type: \b; header
en: The slave
de: Der Slave

note: type: Plain text
en: First of all we must understand how the program of the slave works. The <a cbot|class>class</a> <code>exchange</code> contains the mechanism for exchaning the orders. We declare a <code><a cbot|static>static</a></code> class member <code>m_order</code> which will contain the order to be executed. The word <code>static</code> insures that the member <code>m_order</code> is shared between all instances of the <a cbot|class>class</a> exchange.
de: Zu allererst müssen wir klären, wie der Slave funktioniert. Die <a cbot|class>Klasse</a> <code>exchange</code> enthält Mechanismen zum Austausch von Befehlen. Wir deklarieren eine <code><a cbot|static>statische</a></code> Klassenvariable <code>m_order</code>, die den auszuführenden Befehl enthalten wird. Das Wort <code>static</code> stellt sicher, dass auf die Variable <code>m_order</code> von allen Instanzen der <a cbot|class>Klasse</a> <code>exchange</code> zugegriffen werden kann.

note: type: Plain text
en: <n/>The <code>put</code> method will be used by the master robot for transmitting an order. As long as the string <code>m_order</code> is not empty, the slave has not finished the order and the <code>put</code> method will return <code>false</code> and will do nothing.
de: <n/>Die Methode <code>put</code> wird vom Master dazu verwendet, um einen Befehl zu übermitteln. Solange der String <code>m_order</code> nicht leer ist, hat der Slave seinen Befehl noch nicht ausgeführt und die Methode <code>put</code> liefert <code><a cbot|false>false</a></code> zurück und tut sonst nichts.

note: type: Plain text
en: <c/><s/>	<a cbot|synchro>synchronized</a> <a cbot|bool>bool</a> put(string order)
de: <c/><s/>	<a cbot|synchro>synchronized</a> <a cbot|bool>bool</a> put(<a cbot|string>string</a> order)

note: type: Source code
en: 	{
    		if ( m_order == "" )
    		{
    			m_order = order;
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
de: 	{
    		<a cbot|if>if</a> ( m_order == "" )
    		{
    			m_order = order;
    			<a cbot|return>return</a> true;
    		}
    		<a cbot|if>else</a>
    		{
    			<a cbot|return>return</a> <a cbot|false>false</a>;
    		}
    	}

note: type: Plain text
en: Another method <code>get</code> will be used by the slave to retrieve the orders. This method returns the string contained in <code>m_order</code> and empties it, so a new order can be accepted:
de: Eine weitere Methode, <code>get</code>, wird vom Slave dazu verwendet, Befehle abzuholen. Die Methode liefert den <a cbot|string>String</a>, der in <code>m_order</code> enthalten ist, zurück und leert ihn. Daraufhin kann ein neuer Befehl entgegengenommen werden:

note: type: Source code
en: 	{
    		string ret = m_order;
    		m_order = "";
    		return ret;
    	}
    }
de: 	{
    		<a cbot|type>string</a> ret = m_order;
    		m_order = "";
    		<a cbot|return>return</a> ret;
    	}
    }

note: type: Plain text
en: The main program of the slave contains an instance of the class <code>exchange</code> called <code>list</code>.
de: Das Hauptprogramm des Slaves enthält eine Instanz der Klasse <code>exchange</code> namens <code>list</code>.

note: type: Plain text
en: The outer <code>while</code> loop lasts for ever. The inner <code>while</code> loop waits for an order by using the <code>get</code> method of the <code>exchange</code> class. As soon as <code>get</code> returns a non empty string, the while loop stops.
de: Die äußere <code><a cbot|while>while</a></code>-Schleife wird nie verlassen. Die innere <code><a cbot|while>while</a></code>-Schleife wartet auf einen Befehl, wobei die Methode <code>get</code> der Klasse <code>exchange</code> verwendet wird. Sobald <code>get</code> einen nicht-leeren String zurückgibt, wird die Schleife verlassen.

note: type: Plain text
en: Now we have received the order in the <code>todo</code> variable. All we have to do is execute it:
de: Nun haben wir einen Befehl empfangen, der in der Variablen <code>todo</code> steht. Wir müssen ihn nur noch ausführen:

note: type: Plain text
en: <c/><s/>		if ( <a cbot|strfind>strfind</a>(todo, "move") == 0 )
de: <c/><s/>		<a cbot|if>if</a> ( <a cbot|strfind>strfind</a>(todo, "move") == 0 )

note: type: Source code
en: 		{
    			move(<a cbot|strval>strval</a>(<a cbot|strmid>strmid</a>(todo,5)));
    		}
    		if ( strfind(todo, "turn") == 0 )
    		{
    			turn(strval(strmid(todo,5)));
    		}
    	}
    }
de: 		{
    			<a cbot|move>move</a>(<a cbot|strval>strval</a>(<a cbot|strmid>strmid</a>(todo,5)));
    		}
    		<a cbot|if>if</a> ( <a cbot|strfind>strfind</a>(todo, "turn") == 0 )
    		{
    			<a cbot|turn>turn</a>(<a cbot|strval>strval</a>(<a cbot|strmid>strmid</a>(todo,5)));
    		}
    	}
    }

note: type: \b; header
en: The master
de: Der Master

note: type: Plain text
en: In the master we write an function called <code>SendOrder</code> which will send an order to the slave:
de: Für den Master schreiben wir eine Funktion namens <code>SendOrder</code>, die einen Befehl zum Slave sendet:

note: type: Source code
en: {
    	exchange list();
    	
    	while ( list.put(order) == false )
    	{
    		wait(1);
    	}
    }
de: {
    	exchange list();
    	
    	<a cbot|while>while</a> ( list.put(order) == <a cbot|false>false</a> )
    	{
    		<a cbot|wait>wait</a>(1);
    	}
    }

note: type: Plain text
en: The <code>while</code> loop waits until a pending order has been terminated, that is the slaved has exited from the <code>get</code> method.
    Now the main program of the master is very simple:
de: Die <code><a cbot|while>while</a></code>-Schleife wartet, bis ein schon gesendeter Befehl bearbeitet wurde, der Slave also die Methode <code>get</code> verlassen hat.
    Das Hauptprogramm für den Master ist nun sehr einfach:

note: type: Plain text
en: <c/><s/>extern void object::Remote3( )
de: <c/><s/>extern void object::Steuerung3( )

note: type: Plain text
en: <format key><key help/></format> show these instruction at any time.
de: Mit <format key><key help/></format> können Sie diese Anweisungen jederzeit einsehen.

note: type: \t; header
en: See also
de: Siehe auch

note: type: Plain text
en: <a command>Controls</a> and <a cbot>programming</a>.
de: Die <a cbot>CBOT-Sprache</a>, die <a cbot|type>Variablentypen</a> und die <a cbot|category>Kategorien</a>.
