Verarbeitung

Logik

Bedingte Anweisungen

Bedingte Anweisungen sind zentral für die Programmierung. Sie machen es möglich, Fallunterscheidungen zu formulieren wie:

"wenn"-Block

Die einfachste Bedingung ist ein "wenn"-Block:

Bild1_d.PNG

Wenn dieser ausgeführt wird, wird der Wert der Variable x mit 100 verglichen. Wenn er größer ist, wird "Was für eine große Zahl!" ausgegeben. Andernfalls passiert nichts.

"wenn-sonst"-Block

Es ist auch möglich, anzugeben, dass etwas passieren soll, wenn die Bedingung nicht wahr ist, wie in diesem Beispiel:

Bild2_d.PNG

Wie beim vorherigen Block wird "Was für eine große Zahl!" ausgegeben, wenn x > 100 ist. Andernfalls wird "Das ist nicht sehr groß." angegeben.

Ein "wenn"-Block kann einen "sonst"-Abschnitt haben, aber nicht mehr als einen.

"wenn-sonst-wenn"-Block

Es ist auch möglich, mehrere Bedingungen mit einem einzigen "wenn"-Block zu testen, indem "sonst-wenn"-Klauseln hinzugefügt werden:

Bild3_d.PNG

Der Block prüft zuerst, ob x > 100 ist, und gibt "Was für eine große Zahl!" aus, wenn das der Fall ist. Ist dies nicht der Fall, prüft er weiter, ob x = 42 ist. Wenn ja, gibt er "Das ist meine Glückszahl!" aus. Andernfalls passiert nichts.

Ein "wenn"-Block kann eine beliebige Anzahl von "sonst-wenn"-Abschnitten haben. Die Bedingungen werden von oben nach unten ausgewertet, bis eine erfüllt ist oder bis keine Bedingung mehr übrig sind.

"wenn-sonst-wenn-sonst"-Block

"wenn"-Blöcke können sowohl "sonst-wenn" als auch "sonst"-Abschnitte haben:

Bild4_d.PNG

Der "sonst"-Abschnitt garantiert, dass eine Aktion ausgeführt wird, auch wenn keine der vorherigen Bedingungen wahr ist.

Ein "sonst"-Abschnitt kann nach einer beliebigen Anzahl von "sonst-wenn"-Abschnitten auftreten, einschließlich Null, dann erhält man einen ganz normalen "wenn-sonst"-Block.

Blockmodifikation

In der Werkzeugleiste erscheint nur der einfache "wenn"-Block und der "wenn-sonst"-Block:

image-1638372839221.png

Um "sonst-wenn" - und "sonst"-Klauseln hinzuzufügen, kann man auf das (+) Symbol klicken. Mit (-) Symbol lassen sich "sonst-wenn" -Klauseln wieder entfernen:

image-1638373059561.png

Beachte, dass die Formen der Blöcke das Hinzufügen einer beliebigen Anzahl von "sonst-wenn"-Unterblöcken erlauben, aber nur bis zu einem "wenn"-Block.

Boolesche Logik

Boolesche Logik bildet die Grundlage für die Implementierung bedingter Anweisungen. Sie basiert auf einem einfachen mathematischen System mit zwei Zuständen:

Logikblöcke in ROBO Pro Coding sind in der Regel dafür da, Bedingungen und Schleifen zu kontrollieren.

Hier ein Beispiel:

Bild1_d.PNG

Wenn der Wert der Variable x größer als 100 ist, gilt die Bedingung als wahr und "Was für eine große Zahl!" wird ausgegeben. Ist der Wert nicht größer als 100, ist die Bedingung falsch und es wird "Das ist nicht sehr groß." ausgegeben. Boolesche Werte können in Variablen gespeichert und an Funktionen übergeben werden, ähnlich wie Zahlen, Texte und Listenwerte.

Wenn ein Block einen Booleschen Wert als Eingabe erwartet und keine Eingabe erfolgt, wird dies als falsch interpretiert. Es ist technisch möglich, jedoch nicht empfohlen, nicht boolesche Werte in Bedingungseingaben zu verwenden. Diese Methode wird nicht empfohlen, und ihr Verhalten kann sich in zukünftigen Versionen von ROBO Pro Coding ändern.

Werte

Ein einzelner Block mit einer Dropdown-Liste, die entweder wahr oder falsch angibt, kann verwendet werden, um einen Booleschen Wert abzurufen:

Vergleichsoperatoren

Es gibt sechs Vergleichsoperatoren. Jedem werden zwei Eingaben (normalerweise zwei Zahlen) übergeben und der Vergleichsoperator gibt wahr oder falsch zurück, je nachdem, wie die Eingaben miteinander verglichen werden.

image-1623518116706.pngimage-1623518117182.png

image-1623518116894.pngimage-1623518116802.png

image-1623518116985.pngimage-1623518166030.png

Die sechs Operatoren sind: gleich, nicht gleich, kleiner als, größer als, kleiner als oder gleich, größer als oder gleich.

image.png

Logische Operatoren

Der "und"-Block gibt dann und nur dann wahr zurück, wenn seine beiden Eingangswerte wahr sind.

image-1623518251877.png

Der "oder"-Block gibt wahr zurück, wenn mindestens einer seiner beiden Eingangswerte wahr ist.

image-1623518258449.png

"nicht"-Block

Der "nicht"-Block wandelt eine boolesche Eingabe in ihr Gegenteil um. Zum Beispiel ist das Ergebnis von:

image-1623518278596.png

falsch. 

Wenn keine Eingabe erfolgt, wird der Wert wahr angenommen, sodass der folgende Block den Wert falsch erzeugt:

image-1623518270686.png

Es wird jedoch nicht empfohlen, eine Eingabe leer zu lassen.

"dreier Operator"-Block

Der dreier Operator verhält sich wie ein Miniatur-"wenn-sonst"-Block. Er nimmt drei Eingangswerte entgegen, der erste Eingangswert ist die zu testende boolesche Bedingung, der zweite Eingangswert ist der Wert, der zurückgegeben werden soll, wenn der Test wahr ergibt, der dritte Eingangswert ist der Wert, der zurückgegeben werden soll, wenn der Test falsch ergibt. Im folgenden Beispiel wird die Variable Farbe auf Rot gesetzt, wenn die Variable x kleiner als 10 ist, andernfalls wird die Variable Farbe auf Grün gesetzt.

image-1623518297713.png

Ein dreier Block kann immer durch einen "wenn-sonst"-Block ersetzt werden. Die folgenden zwei Beispiele sind genau gleich.   

image-1638450294773.png   

    Bild14_d.PNG

Schleifen

Der Bereich "Schleifen" enthält Blöcke, die steuern, ob andere Blöcke, die in ihrem Inneren platziert sind, ausgeführt werden. Es gibt zwei Arten von Steuerungsblöcken: "wenn-sonst"-Blöcke (die auf einer eigenen Seite beschrieben werden) und Blöcke, die steuern, wie oft ihr Inneres ausgeführt wird. Letztere werden Schleifen genannt, da ihr Inneres, auch als Schleifenkörper oder Körper bezeichnet, (möglicherweise) mehrfach wiederholt wird. Jeder Durchlauf einer Schleife wird als Iteration bezeichnet.

Blöcke zur Erstellung von Schleifen

"dauerhaft wiederholen"-Schleife

Der "dauerhaft wiederholen"-Block führt den Code in seinem Körper so lange aus, bis das Programm endet.

"wiederhole"-Schleife

Der "wiederhole"-Block führt den Code in seinem Körper, so häufig wie angegeben aus. Der folgende Block gibt zum Beispiel zehnmal "Hallo!" aus:

image-1623518566418.png

"wiederhole-solange"-Schleife

Stelle dir ein Spiel vor, bei dem ein Spieler einen Würfel wirft und alle geworfenen Werte addiert, solange die Summe kleiner als 30 ist. Die folgenden Blöcke implementieren dieses Spiel:

  1. Eine Variable namens insgesamt erhält einen Anfangswert von 0.
  2. Die Schleife beginnt mit einer Überprüfung, ob insgesamt kleiner als 30 ist. Wenn ja, werden die Blöcke im Körper durchlaufen.
  3. Eine Zufallszahl im Bereich von 1 bis 6 wird erzeugt (um einen Würfelwurf zu simulieren) und in einer Variablen namens gewürfelt gespeichert.
  4. Die gewürfelte Zahl wird ausgegeben.
  5. Die Variable insgesamt wird um gewürfelt erhöht.
  6. Wenn das Ende der Schleife erreicht ist, geht die Steuerung zurück zu Schritt 2.

image-1623518580740.png


Nach Beendigung der Schleife werden alle nachfolgenden Blöcke (nicht dargestellt) durchlaufen. Im Beispiel endet der Schleifendurchlauf, nachdem eine gewisse Anzahl von Zufallszahlen im Bereich von 1 bis 6 ausgegeben wurde, und die Variable insgesamt hat dann als Wert die Summe dieser Zahlen, die mindestens 30 beträgt.

"wiederhole-bis"-Schleife

"wiederhole solange"-Schleifen wiederholen ihren Körper, "solange" eine Bedingung erfüllt ist. "wiederhole bis"-Schleifen sind ähnlich, mit dem Unterschied, dass sie ihren Körper so lange wiederholen, "bis" eine bestimmte Bedingung erfüllt ist. Die folgenden Blöcke sind äquivalent zum vorherigen Beispiel, weil die Schleife läuft, bis insgesamt größer oder gleich 30 ist.

image-1623518591524.png

"zählen-von-bis"-Schleife

Die "zählen-von-bis"-Schleife erhöht einer Variable den Wert, beginnend mit einem ersten Wert, endend mit einem zweiten Wert und in Schritten von einem dritten Wert, wobei der Körper für jeden Wert der Variable einmal ausgeführt wird. Das folgende Programm gibt zum Beispiel die Zahlen 1, 3 und 5 aus.

image-1623518609859.png

Wie die beiden folgenden Schleifen zeigen, die jeweils die Zahlen 5, 3 und 1 ausgeben, kann dieser erste Wert größer sein als der zweite. Das Verhalten ist das gleiche, egal ob der Inkrementbetrag (dritter Wert) positiv oder negativ ist.

image-1623518616934.png

image-1623518630361.png

"für jeden"-Schleife

Der "für jeden"-Block ist ähnlich wie die "zählen-von-bis"-Schleife, nur dass er statt der Schleifenvariable in einer numerischen Reihenfolge die Werte aus einer Liste der Reihe nach verwendet. Das folgende Programm gibt jedes Element der Liste "alpha", "beta", "gamma" aus:

Bild7_d.PNG

Schleifenabbruchblöcke

Die meisten Schleifen werden so lange durchlaufen, bis die Abbruchbedingung (bei "wiederhole"-Blöcken) erfüllt ist oder bis alle Werte der Schleifenvariable angenommen wurden (bei "zählen mit"- und "für jeden"-Schleifen). Zwei selten benötigte, aber gelegentlich nützliche Blöcke bieten zusätzliche Möglichkeiten zur Steuerung des Schleifenverhaltens. Sie können bei jeder Art von Schleife verwendet werden, auch wenn die folgenden Beispiele ihre Verwendung bei der "für jeden"-Schleife zeigen.

"sofort mit nächstem Schleifendurchlauf fortfahren"-Block

Der "sofort mit nächstem Schleifendurchlauf fortfahren"-Block bewirkt, dass die restlichen Blöcke im Schleifenkörper übersprungen werden und die nächste Iteration der Schleife beginnt.

Das folgende Programm gibt bei der ersten Iteration der Schleife "alpha" aus. Bei der zweiten Iteration wird der Block "fahre mit nächster Integration fort" ausgeführt, wodurch die Ausgabe von "beta" übersprungen wird. Bei der letzten Iteration wird "gamma" gedruckt.

Bild8_d.PNG

"die Schleife abbrechen"-Block

Der "die Schleife abbrechen"-Block ermöglicht einen vorzeitigen Ausstieg aus einer Schleife. Das folgende Programm gibt bei der ersten Iteration "alpha" und bricht bei der zweiten Iteration aus die Schleife ab, wenn die Schleifenvariable gleich "beta" ist. Der dritte Punkt in der Liste wird nie erreicht.

Bild9_d.PNG

Mathematik

Die Blöcke der Kategorie Mathematik werden genutzt, um Berechnungen anzustellen. Die Ergebnisse der Berechnungen können zum Beispiel als Werte für Variablen verwendet werden. Die meisten Mathematik-Blöcke beziehen sich auf allgemeine mathematische Berechnungen und sollten selbsterklärend sein.

Blöcke

Zahlen

Nutze den "Zahl"-Block, um eine beliebige Zahl in dein Programm hinzuzufügen oder einer Variable diese Zahl als Wert zuzuweisen. Dieses Programm weist der Variablen Alter die Zahl 12 zu:

image-1623519243602.png

Einfache Rechnungen

Dieser Block hat die Struktur Wert-Operator-Wert. Als Operatoren stehen die Rechenarten +, -, ÷, × und ^ zur Verfügung. Der Operator kann über das Dropdown-Menü ausgewählt werden. Er kann unmittelbar auf Zahlen oder auch auf Werte von Variablen angewendet werden. Beispiel:

image-1623519253344.png

Dieser Block gibt Ergebnis 144 (12^2) aus.

Bitoperationen

Dieser Block ermöglicht es, Bitoperationen zwischen zwei Werten durchzuführen. Der Operator für die Operation kann über ein Dropdown-Menü ausgewählt werden, das eine Reihe von Bitoperationen wie Links-Shift (<<), Rechts-Shift (>>), AND, OR, XOR und NOT anbietet. Diese Operatoren können auf Zahlen sowie auf Variablenwerte angewendet werden. Im gezeigten Beispiel wird die Links-Shift-Operation << verwendet, um die Zahl 10 um 2 Stellen nach links zu verschieben. Das Ergebnis ist 40, da die Bits der Zahl 10 (binär 1010) um zwei Stellen verschoben werden, was zu 101000 binär oder 40 dezimal führt.

image.png

Spezielle Rechnungen

Dieser Block wendet die, über das Dropdown-Menü ausgewählte Rechenart auf die dahinter platzierte Zahl oder auf den Wert der dahinter platzierten Variable an. Die zur Verfügung stehenden Rechenoperationen sind:

e ist hierbei die Euler'sche Zahl. Dieser Block zieht die Quadratwurzel aus 16 und setzt die Variable i auf das Ergebnis.

Bild3_d.PNG

Trigonometrische Funktionen

Dieser Block funktioniert ähnlich wie der zuvor beschriebene Block, mit dem Unterschied, dass als Rechenoperationen die trigonometrischen Funktionen Sinus, Cosinus, Tangens und ihre Umkehrfunktionen genutzt werden. Die angegebene Zahl oder der Wert der angegebenen Variable wird also in die im Dropdown-Menü gewählte Funktion eingesetzt und das Ergebnis kann dann im Programm weiterverarbeitet werden. Zusätzlich gibt es noch den Block "arctan2 of X: … Y: ..., der es erlaubt, sich mithilfe von zwei reellen Zahlen (einzusetzen als X und Y) einen Funktionswert des arctan2 im Bereich von 360° ausgeben zu lassen.

Häufig verwendete Konstanten

Dieser Block funktioniert genauso wie der "Zahl"-Block, jedoch gibt man hier den Zahlenwert nicht selbst an. Stattdessen sind häufig verwendete Konstanten (z.B. π) vorgespeichert. Die Konstante kann über das Dropdown-Menü ausgewählt werden.

Prüfen auf Eigenschaften

Der Block "... ist ..." wird verwendet, um mathematische Eigenschaften einer gegebenen Zahl zu überprüfen. Im gezeigten Beispiel wird beispielsweise geprüft, ob die Zahl x eine Primzahl ist.

Eigenschaften, die der Block prüfen kann:

image.png

Konvertierung

Der Block "konvertiere zu ..." ermöglicht die Umwandlung einer Zahl aus dem Dezimalsystem in eine andere numerische Basis, wie Hexadezimal (hex), Binär (bin), Integer (int), Grad und Radiant. Dieser Vorgang ist besonders nützlich, wenn Daten in unterschiedlichen Darstellungsformen benötigt werden.

image.png

Runden

Mit dem "runde ..."-Block lässt sich eine angegebene Dezimalzahl oder der Wert einer angegebenen Variablen auf eine ganze Zahl runden. Dabei kann man im Dropdown-Menü drei Optionen wählen:

Auswertung von Listen

Mit dem "der Liste"-Block kann man sich

ausgeben lassen. Alle diese Optionen können über das Dropdown-Menü des Blocks ausgewählt werden:

image-1623519297555.png

Rest einer Division

Der "Rest von ..."-Block wird genutzt, um den Rest einer Division auszugeben. Dieses Programm weist der Variable "Rest" den Rest der Division von 3:2, also 1, zu:

image-1623519275420.png

Eingabewerte einschränken

Der "beschränke ... von ... bis ..." Block erlaubt es, Eingabewerte auf ein bestimmtes Intervall zu beschränken. Bevor ein Eingabewert weiterverarbeitet wird, wird getestet, ob er im festgelegten Intervall liegt. Es gibt drei Optionen, wie mit einem eingegebenen Wert verfahren wird:

In diesem Beispiel wird der Block genutzt, um den Wert der Variable "Geschwindigkeit" auf die vom Motor unterstützten Drehzahlen einzuschränken:

image-1623519284259.png

Zufällige Werte generieren

Die beiden Blöcke "zufällige Zahl von ... bis …" und "zufälliger Bruch" geben einen zufälligen Wert aus. Dabei gibt der "zufällige Zahl von ... bis …"-Block eine Zahl aus dem definierten Intervall aus. Der Block "zufälliger Bruch" gibt hingegen einen Wert zwischen 0,0 (eingeschlossen) und 1,0 (ausgeschlossen) aus.

Wertebereiche mappen

Der Block "verteile ... von niedrig ... von hoch ... zu niedrig ... zu hoch" nimmt den ersten Wert und transformiert ihn von einem durch die Parameter 2 und 3 definierten Ursprungsbereich auf einen durch die Parameter 4 und 5 festgelegten Zielbereich ab. Dies ermöglicht es, den Eingabewert entsprechend einer linearen Skalierung in den neuen Wertebereich zu überführen.

In dem gezeigten Beispiel des Programmblocks wird der Wert 5 verwendet. Dieser Wert 5 wird von einem definierten Ursprungsbereich von 0 bis 8 in einen Zielbereich von 0 bis 512 transformiert. Die Transformation erfolgt nach einer linearen Skalierungsregel, sodass der ursprüngliche Wert proportional in den neuen Wertebereich übertragen wird. Konkret bedeutet dies, dass der Wert 5 – der etwas über der Mitte des Ursprungsbereichs liegt – in einen entsprechenden Wert im Zielbereich umgerechnet wird. Da 5 genau 62.5 % des Weges von 0 bis 8 darstellt, wird dieser Prozentsatz auf den neuen Bereich von 0 bis 512 angewendet, was zu einem umgerechneten Wert von 320 führt (62.5 % von 512).

image.png

Text

Text kann Buchstaben (klein oder großgeschrieben), Zahlen, Satzzeichen, andere Symbole und Leerzeichen enthalten.

Beispiele für Texte sind:

Blöcke

Erstellung von Text

Der folgende Block erzeugt den Text "Hallo" und speichert ihn in der Variablen namens "Gruß":

image-1622457260803.png

Der Block "erstelle Text aus" kombiniert den Wert der Variable "Gruß" und den neuen Text "Welt" zu dem Text "HalloWelt". Beachte, dass zwischen beiden Texten kein Leerzeichen steht, da in den beiden ursprünglichen Texten keines vorhanden war.

Bild2_d.PNG

Um die Anzahl der Texteingaben zu erhöhen, klicke auf das (+) Symbol. Um die letzte Ausgabe zu entfernen, klicke auf das (-) Symbol.

Text ausgeben

Der "gib aus"-Block bewirkt, dass der Eingabewert im Konsole-Fenster ausgegeben wird:

image-1622457983310.png

Auf keinen Fall wird er an den Drucker geschickt, wie der Name vielleicht vermuten lässt.

Änderung von Text

Der Block "an ... anhängen" fügt den angegebenen Text an die angegebene Variable an. In diesem Beispiel ändert er den Wert der Variable "Gruß" von "Hallo" in "Hallo, da!":

image-1622457625975.png

Textlänge

Der "Länge von"-Block zählt die Anzahl der Zeichen (Buchstaben, Zahlen usw.), die in einem Text enthalten sind. Die Länge von "Wir sind #1!" ist 12, und die Länge des leeren Textes ist 0.

image-1622457652114.png

image-1622457663982.png

Prüfen auf leeren Text

Der Baustein "ist leer" prüft, ob der angegebene Text leer ist (die Länge 0 hat). Das Ergebnis ist im ersten Beispiel "wahr" und im zweiten Beispiel "falsch".

image-1622457716467.png

image-1622457723214.png

Suchen von Text

Diese Blöcke können verwendet werden, um zu prüfen, ob ein Text in einem anderen Text vorkommt und wenn ja, wo er vorkommt. Zum Beispiel wird hier nach dem ersten Vorkommen von "a" in "Hallo" gefragt, das Ergebnis ist 2:

image-1622457756718.png

Dies fragt nach dem letzten Vorkommen von "a" in "Hallo", was ebenfalls 2 ergibt:

image-1622457776109.png

Unabhängig davon, ob das erste oder letzte Vorkommen ausgewählt wird, liefert dieser Block das Ergebnis 0, da "Hallo" kein "z" enthält.

image-1622457784026.png

Extrahieren von Text

Extrahieren eines einzelnen Zeichens

Dies ergibt "b", den zweiten Buchstaben in "abcde":

image-1622457803297.png

Dies liefert "d", den vorletzten Buchstaben in "abcde":

image-1622457812143.png

Dies liefert "a", den ersten Buchstaben in "abcde":

image-1622457821692.png

Dies erhält "e", den letzten Buchstaben in "abcde":

image-1622457838180.png

Dies erhält jeden der 5 Buchstaben in "abcde" mit gleicher Wahrscheinlichkeit:

image-1622457860335.png

Keiner von ihnen verändert den Text, aus dem extrahiert wird.

Extrahieren eines Textbereichs

Mit dem "im Text ... liefer Zeichenkette"-Block kann ein Textbereich extrahiert werden, der entweder mit:

startet und mit:

endet.

Im folgenden Beispiel wird "abc" extrahiert:

image-1622457902845.png

Anpassen der Groß-/Kleinschreibung des Textes

Dieser Block erzeugt eine Version des Eingabetextes, die entweder in

Das Ergebnis des folgenden Blocks ist "HALLO":

image-1622457924068.png

Nicht-alphabetische Zeichen sind davon nicht betroffen. Beachte, dass dieser Block auf Text in Sprachen ohne Groß- und Kleinschreibung, wie z. B. Chinesisch, nicht wirkt.

Trimmen (Entfernen) von Leerzeichen

Der folgende Block entfernt, je nachdem, was im Dropdown-Menü (kleines Dreieck) eingestellt wird, Leerzeichen:

Das Ergebnis des folgenden Blocks ist "Hi du".

image-1622457939507.png

Leerzeichen in der Mitte des Textes sind nicht betroffen.

Text mit Formatierung ausgeben

Mit dem "formatiere text"-Block können Textausgaben mit Variableninhalt formatiert ausgegeben werden. Dabei werden alle Platzhalter "{}" im Text durch den Inhalt der nach dem Text angehängten Variablen ersetzt. In den geschweiften Klammern kann eine Formatierung angegeben werden. Die Formatierung "{:.1f}" gibt z.B. nur die erste Nachkommastelle der Kommazahl in der Variablen "t" aus.

image-1638517232662.png

Datei

In ROBO Pro Coding werden Ordner als spezielle Arten von Dateien betrachtet, die zur Organisation und Strukturierung von Projektdaten dienen. Daher werden in diesem Abschnitt sowohl Dateien als auch Ordner behandelt.

Dateien

Datei öffnen

Der Block "Datei ... mit Modus ... öffnen" ermöglicht das Öffnen einer Datei in einem ausgewählten Modus. Dieser Block ist in zwei Varianten verfügbar:

Mögliche Modi zum Öffnen sind:

Bei Ausführung gibt der Block einen Dateideskriptor zurück, der in nachfolgenden Befehlen genutzt werden kann, um die Datei zu lesen, zu schreiben oder Daten anzuhängen.

Das folgende Beispiel illustriert die Verwendung des Blocks, um die Datei meineDatei.json im Lesemodus zu öffnen, die sich im data-Verzeichnis befindet. Der Dateideskriptor wird in der Variable datei gespeichert:

image.png

Überprüfung der Existenz einer Datei

Der Block "existiert" ermöglicht es zu prüfen, ob eine spezifische Datei bereits existiert. Auf Basis dieser Prüfung können unterschiedliche Aktionen ausgeführt werden.

In dem Beispiel wird der "existiert"-Block genutzt, um zu prüfen, ob die Datei bereits vorhanden ist:

image.png

Datei als Text einlesen

Der Block "Datei ... als Text lesen" ermöglicht es, den Inhalt einer Datei einzulesen. Dieser Prozess ist besonders nützlich, um Daten aus einer Datei zu extrahieren und sie weiterzuverarbeiten.

Im Beispiel wird die Datei zunächst im Lesemodus geöffnet, dann wird der Inhalt der Datei in eine Variable namens inhalt geladen. Anschließend wird dieser Inhalt ausgegeben. Schließlich wird die Datei wieder geschlossen, um die Ressourcen ordnungsgemäß freizugeben.

image.png

Datei zeilenweise als Liste einlesen

Der Block "Datei ... zeilenweise als Liste lesen" ermöglicht es, den Inhalt einer Datei zeilenweise in Form einer Liste einzulesen, wobei jedes Listenelement eine Zeile repräsentiert. Dieser Prozess ist besonders nützlich, um die Zeilen aus einer Datei zu extrahieren und sie weiterzuverarbeiten.

Im dargestellten Beispiel wird der Prozess zur Verwendung dieses Blocks demonstriert. Zunächst wird die Datei meineDatei.json im Lesemodus (read) geöffnet. Der Inhalt der Datei wird dann zeilenweise gelesen und in einer Liste gespeichert. Jede Zeile der Datei wird als ein separates Element in der Liste liste gespeichert. Es folgt eine Schleife, in der jedes Element der Liste (jede Zeile) durchlaufen und mittels "gib aus" ausgegeben wird. Nachdem alle Zeilen verarbeitet wurden, wird die Datei geschlossen, um die Ressourcen freizugeben.

image.png

Schreiben in einer Datei

Der Block "Schreibe ... in Datei ... neue Zeile am Ende" ermöglicht das Schreiben von Text in eine Datei. Optional kann ein Zeilenumbruch (\n) am Ende des Textes eingefügt werden, um die Lesbarkeit bei mehreren Schreibvorgängen zu verbessern.

Im Beispiel wird die Datei meineDatei.json im Anhäng-Modus (append) geöffnet. Anschließend wird der Text „Hallo Welt“ in die Datei geschrieben. Dies führt dazu, dass der Inhalt an das Ende der bestehenden Daten in der Datei angehängt wird, ohne die vorhandenen Inhalte zu überschreiben. Nach dem Schreiben werden die Änderungen gespeichert und die Datei geschlossen.

image.png

Liste zeilenweise in die Datei schreiben

Der Block "Liste ... zeilenweise in die Datei ... schreiben" ermöglicht das Schreiben einer Liste in eine Datei, wobei jedes Element der Liste in eine eigene Zeile geschrieben wird. Dies ist besonders nützlich für ein strukturiertes Speichern von Daten, bei denen jedes Listenelement klar von den anderen getrennt ist.

Im dargestellten Beispiel wird die Datei meineDatei.json zunächst im Schreibmodus geöffnet. Dies bedeutet, dass, falls die Datei bereits vorhanden ist, alle existierenden Inhalte überschrieben werden. Anschließend wird eine Liste mit den Elementen "Erste Zeile!" und "Zweite Zeile!" erstellt. Diese Elemente werden dann zeilenweise in die Datei geschrieben, sodass jede Zeile der Datei einem Element der Liste entspricht. Nachdem die Liste in die Datei geschrieben wurde, werden die Änderungen übernommen, um die neu geschriebenen Daten zu sichern. Zum Abschluss des Prozesses wird die Datei geschlossen, um den Zugriff ordnungsgemäß zu beenden.

image.png

Änderungen in die Datei schreiben

Dieser Block "Änderungen in Datei ... übernehmen" stellt sicher, dass alle Änderungen, die an der geöffneten Datei vorgenommen wurden, auch tatsächlich gespeichert werden. Er führt im Wesentlichen einen Flush-Vorgang aus, bei dem alle bislang gepufferten Daten in den permanenten Speicher der Datei geschrieben werden. Nachdem Inhalte in die Datei geschrieben oder modifiziert wurden, sollte dieser Block verwendet werden, um die Änderungen festzuschreiben.

image.png

Datei schließen

Der Block "Datei ... schließen" wird verwendet, um eine geöffnete Datei ordnungsgemäß zu schließen.

image.png

Ordner

Ordner erstellen

Der Block "Verzeichnis ... erstellen" ermöglicht es, ein neues Verzeichnis zu erstellen, falls es bisher nicht existiert.

image.png

Überprüfung der Existenz eines Ordners

Der Block "existiert" ermöglicht es zu prüfen, ob ein spezifischer Ordner bereits existiert. Auf Basis dieser Prüfung können unterschiedliche Aktionen ausgeführt werden.

In dem Beispiel wird der "existiert"-Block genutzt, um zu prüfen, ob der Ordner bereits vorhanden ist:

image.png

Datenstrukturen

Listen

Wie in der Alltagssprache ist auch in ROBO Pro Coding eine Liste eine geordnete Sammlung von Elementen, wie z. B. eine "To-do"-Liste oder eine Einkaufsliste. Elemente in einer Liste können von beliebigem Typ sein, und derselbe Wert kann mehrmals in einer Liste erscheinen.

Erstellen einer Liste

erzeuge Liste mit

Mit dem Block "erzeuge Liste mit" kann man die Anfangswerte in einer neuen Liste angeben. In diesem Beispiel wird eine Liste von Wörtern erstellt und in einer Variablen namens "Buchstaben" abgelegt:

Bild1_d.PNG

Wir bezeichnen diese Liste als ["alpha", "beta", "gamma"].

Dies zeigt die Erstellung einer Liste von "Zahlen":

Bild2_d.PNG

So wird eine Liste von "Farben" erstellt:

Bild3_d.PNG

Es ist weniger üblich, aber möglich, eine Liste mit Werten unterschiedlichen Typs zu erstellen:

Bild4_d.PNG

Anzahl der Eingänge ändern

Um die Anzahl der Eingänge zu ändern, klicke beziehungsweise tippe auf das (+) oder (-) Symbol. Dadurch werden neue Eingänge hinzugefügt oder wieder entfernt. 

Liste mit Element erstellen

Mit dem Block "erstelle Liste mit Element" kannst du eine Liste erstellen, die die angegebene Anzahl von Kopien eines Elements enthält. Die folgenden Blöcke setzen zum Beispiel die Variable "Wörter" auf die Liste ["sehr", "sehr", "sehr"].

image-1623519726714.png

Prüfen der Länge einer Liste

ist leer

Der Wert eines "ist leer"-Blocks ist "wahr", wenn seine Eingabe die leere Liste ist, und "falsch", wenn es irgendetwas anderes ist. Ist diese Eingabe "wahr"? Der Wert des folgenden Blocks wäre "falsch", weil die Variable Farben nicht leer ist: Sie hat drei Elemente.

image-1623519765930.png

Beachte die Ähnlichkeit mit dem "ist leer"-Block für Text.

Länge von

Der Wert des "Länge von"-Blocks ist die Anzahl der Elemente, die sich in der als Eingabe verwendeten Liste, befinden. Der Wert des folgenden Blocks wäre z. B. 3, da "Farbe" drei Elemente hat:

image-1623519787676.png

Beachte, dass der "Länge von"-Block angibt, wie viele Elemente in der Liste enthalten sind, und nicht, wie viele verschiedene Elemente in ihr enthalten sind. Zum Beispiel hat das Folgende den Wert 3, obwohl "Wörter" aus drei Kopien desselben Textes besteht:

image-1623519794441.png

Beachte die Ähnlichkeit mit dem Block "Länge von" für Text.

Suchen von Elementen in einer Liste

Diese Blöcke finden die Position eines Elements in einer Liste. Das folgende Beispiel hat den Wert 1, weil das erste Auftreten von "sehr" am Anfang der Wortliste steht (["sehr", "sehr", "sehr"]).

image-1623519818057.png

Das Ergebnis des Folgenden ist 3, weil das letzte Auftreten von "sehr" in "Wörter" an Position 3 ist.

image-1623519828317.png

Wenn das Element nirgendwo in der Liste vorkommt, ist das Ergebnis der Wert 0, wie in diesem Beispiel:

image-1623519839311.png

Diese Blöcke verhalten sich analog zu den Blöcken für das Finden von Buchstaben im Text.

Abrufen von Elementen aus einer Liste

Abrufen eines einzelnen Elements

Erinnere dich an die Definition der Liste "Farben":

Bild3_d.PNG

Der folgende Block erhält die Farbe Blau, weil es das zweite Element in der Liste ist (von links beginnend gezählt):

image-1623519900407.png

Dieser erhält Grün, weil es das zweite Element ist (vom rechten Ende aus gezählt):

image-1623519907684.png

Dieser erhält das erste Element, Rot:

image-1623519914276.png

Dies erhält das letzte Element, Gelb:

image-1623519919954.png

Dies wählt zufällig ein Element aus der Liste aus, wobei mit gleicher Wahrscheinlichkeit eines der Elemente Rot, Blau, Grün oder Gelb zurückgegeben wird.

Abrufen und Entfernen eines Elements

Mit dem Dropdown-Menü wird der Block "aus Liste ... abrufen" in den Block "aus Liste ... abrufen und entfernen" geändert, der die gleiche Ausgabe liefert, aber auch die Liste verändert:

image-1623519937988.png

Dieses Beispiel setzt die Variable "erster Buchstabe" auf "alpha" und lässt die restlichen Buchstaben (["beta", "gamma"]) in der Liste.

Bild19_d.PNG

Entfernen eines Eintrags

Wenn du im Dropdown-Menü "entfernen" wählst, verschwindet die Nase links vom Block:

image-1623519978282.png

Damit wird das erste Element aus "Buchstaben" entfernt.

Eine Subliste abrufen

Der Block "aus Liste ... Subliste abrufen" ähnelt dem Block in "aus Liste ... abrufen" mit dem Unterschied, dass er eine Subliste extrahiert und nicht ein einzelnes Element. Es gibt mehrere Optionen, den Anfang und das Ende der Subliste anzugeben:

image-1623520006699.png

image-1623520012453.png

In diesem Beispiel wird eine neue Liste "erster Buchstabe" erstellt. Diese neue Liste hat zwei Elemente: ["alpha", "beta"].

Bild23_d.PNG

Beachte, dass dieser Block die ursprüngliche Liste nicht verändert.

Hinzufügen von Elementen an eine Liste

Elemente in einer Liste ersetzen

Der Block "in Liste ... ersetze" ersetzt das Element an einer bestimmten Stelle einer Liste durch ein anderes Element.

image-1623520033391.png

Die Bedeutung der einzelnen Dropdown-Optionen findest du im vorherigen Abschnitt.

Das folgende Beispiel bewirkt zwei Dinge:

  1. Die Liste "Wörter" wird mit 3 Elementen erstellt: ["sehr", "sehr", "sehr"].
  2. Das dritte Element in der Liste wird durch "gut" ersetzt. Der neue Wert von "Wörter" ist ["sehr", "sehr", "gut"]

image-1623520051581.png

Elemente an einer bestimmten Stelle in eine Liste einfügen

Der "in Liste ... einfügen bei"-Block wird über das Dropdown-Menü des "in Liste ... ersetze"-Blocks aufgerufen:

image-1623520061020.png

Er fügt ein neues Element an der angegebenen Stelle in die Liste ein, und zwar vor dem Element, das sich zuvor an dieser Stelle befand. Das folgende Beispiel (das auf einem früheren Beispiel aufbaut) tut drei Dinge:

  1. Die Liste "Wörter" wird mit 3 Elementen erstellt: ["sehr", "sehr", "sehr"].
  2. Das dritte Element in der Liste wird durch "gut" ersetzt. Der neue Wert von "Wörter" ist somit ["sehr", "sehr", "gut"].
  3. Das Wort "Sei" wird am Anfang der Liste eingefügt. Der endgültige Wert von "Wörter" ist somit ["Sei", "sehr", "sehr", "gut"].

image-1623520068498.png

Zeichenketten aufteilen und Listen zusammenfügen

Eine Liste aus einem Text erstellen

Der Baustein "erstelle Liste aus Text" zerlegt den angegebenen Text mithilfe eines Begrenzungszeichens in Teile:

image-1623520094323.png

Im obigen Beispiel wird eine neue Liste zurückgegeben, die drei Textstücke enthält: "311", "555" und "2368".

Ein Text aus einer Liste erstellen

Der Baustein "erstelle Text aus Liste" fügt eine Liste mithilfe eines Trennzeichens zu einem einzigen Text zusammen:

Bild29_d.PNG

Im obigen Beispiel wird ein neuer Text mit dem Wert zurückgegeben: "311-555-2368".

Eine Liste sortieren

Der "Sortieren"-Block ist ein flexibles Werkzeug, das es ermöglicht, Listen anhand verschiedener Kriterien zu ordnen, die basierend auf dem Typ der Elemente in der Liste ausgewählt werden.

Im gezeigten Beispiel wird eine Liste mit den numerischen Werten 20, 10 und 100 erstellt und einer Variablen namens "liste" zugewiesen. Anschließend wird der "Sortieren"-Block verwendet, um die Daten numerisch in aufsteigender Reihenfolge zu ordnen. Die sortierten Daten werden dann einer neuen Variablen namens "sortiereListe" zugewiesen. Nach der Sortierung enthält "sortiereListe" die Werte in folgender Reihenfolge: 10, 20, 100. Die Reihenfolge der Liste "liste" ist unverändert.

image.png

Verwandte Blöcke

Drucken einer Liste

Der "drucken"-Baustein in der Kategorie Text kann Listen ausgeben. Das Ergebnis des folgenden Programms ist die abgebildete Konsolenausgabe:

Bild30_d.PNG

image-1623679163053.png

Etwas für jedes Element in einer Liste durchführen

Der "für-jeden"-Block in der Kategorie Steuerung führt eine Operation für jedes Element in einer Liste aus. Dieser Block druckt zum Beispiel jedes Element in der Liste einzeln aus:

Bild31_d.PNG

Dadurch werden die Elemente nicht aus der ursprünglichen Liste entfernt.

Map

Eine Map, auch bekannt als Dictionary oder Assoziatives Array, ist eine Sammlung von Schlüssel-Wert-Paaren, bei der jeder eindeutige Schlüssel direkt auf einen Wert verweist.

Alle Schlüssel einer Map zurückgeben

Der Block "in der Map ... gib alle Schlüssel" kann dazu verwendet werden, alle Schlüssel aus einer Map zurückzugeben.

In dem Beispiel holt der Block aus der Map "map" alle Schlüssel und gibt jeden in einer Schleife aus. Dies könnte genutzt werden, um zu sehen, welche Schlüssel überhaupt in der Map gespeichert sind:

image.png

Elements zurückgeben

Der Block "in der Map ... gib Element des Schlüssel ..." kann dazu verwendet werden, um den Wert eines bestimmten Schlüssels aus der Map zurückzugeben.

In dem Beispiel holt der Block, nachdem alle Schlüssel der Map "map" abgerufen wurden, für jeden Schlüssel den entsprechenden Wert. Dieser wird anschließend mit dem "gib aus"-Block ausgegeben. Dies demonstriert, wie man sequenziell durch eine Map iteriert und sowohl Schlüssel als auch Werte verarbeitet.

image.png

Element zu einer Map setzen

Der Block "in der Map ... zum Schlüssel ... setze Element ..." fügt einer Map ein neues Schlüssel-Wert-Paar hinzu oder aktualisiert den Wert eines bestehenden Schlüssels. Dies ist grundlegend für das Hinzufügen oder Modifizieren von Daten in einer Map.

Im Beispiel werden zwei Schlüssel-Wert-Paare in die Map "map" eingefügt:

Falls diese Schlüssel bereits in der Map existieren, werden ihre Werte mit den neuen Einträgen überschrieben. Andernfalls werden die Schlüssel und ihre zugehörigen Werte neu hinzugefügt. Es ist wichtig zu beachten, dass die Werte in einer Map nicht auf Zeichenketten beschränkt sind; sie können vielfältige Datentypen umfassen, einschließlich, aber nicht beschränkt auf, Zahlen, Listen oder sogar andere Maps.

image.png

JSON

JSON (JavaScript Object Notation) ist ein textbasiertes Datenformat, das für den Datenaustausch im Web genutzt wird. Es ist leicht lesbar und einfach zu handhaben. JSON strukturiert Daten als Sammlung von Schlüssel-Wert-Paaren, ähnlich wie Dictionaries oder Maps.

Konvertierung JSON zu Map

Der "JSON zu Map"-Block nimmt einen JSON-String als Eingabe und konvertiert diesen in eine Map. Jedes Schlüssel-Wert-Paar im JSON-String wird zu einem Eintrag in der Map.

Im Beispiel wird der JSON-String {"name": "Max", "age": 25} in eine Map umgewandelt. Diese Map enthält dann die Schlüssel "name" mit dem Wert "Max" und "age" mit dem Wert "25".

image.png

Konvertierung Map zu JSON

Der "Map zu JSON"-Block ermöglicht die Umwandlung von Map-Datenstrukturen in einen JSON-String. Dieser Vorgang ist besonders nützlich, wenn die strukturierten Daten einer Map für eine Datenübertragung oder als Konfigurationsdatei in einem standardisierten Format benötigt werden.

image.png

Util

Die Kategorie Util beinhaltet bei ROBO Pro Coding Blöcke folgender Art:

Farbauswahl

Dieser Block dient als Eingabewert, wenn nach einer Farbe gefragt wird (z.B. beim Farbabgleich durch die Kamera). Durch Klicken bzw. Tippen auf die Farbe kann aus einer Farbpalette ausgewählt werden.

image.png

Warten

Warten, bis die Zeit abgelaufen ist

Der Block "warte ... " hindert das Programm für die angegebene Wartezeit daran, weiterzulaufen. Dabei kann im Dropdown-Menü (kleines Dreieck) die Zeiteinheit und im Eingabefeld dahinter die gewünschte Länge der Pause gewählt werden. Im untenstehenden Beispiel wird beispielsweise eine Wartezeit von einer Sekunde festgelegt.

image.png

Warten mit Bedingung

Beim "warte bis"-Block ist die Pause nicht an die Zeit, sondern an die Erfüllung einer Bedingung (z.B. ob ein Taster gedrückt ist) geknüpft. Die Bedingung wird an den "warte bis"-Block angehängt.

Im gezeigten Beispiel lautet die Bedingung "ist Mini-Taster RX_L1 geöffnet". Das führt dazu, dass das Programm anhält und wartet, dass der Mini-Taster RX_L1 in den Zustand "geöffnet" übergeht, bevor das Programm weitermacht.

image.png

Python-Code

Möchte man bestehenden Python-Code in ROBO Pro Coding integrieren, so kann man ihn in den "Python Code"-Block einfügen. Das Programm führt dann alles aus, was in dem Block in Python geschrieben wurde. Der Block "Python-Importe" ermöglicht es, notwendige Bibliotheken zu importieren, die für die Ausführung des Codes erforderlich sind.

In dem Beispiel wird der euklidische Algorithmus zur Bestimmung des größten gemeinsamen Teilers (GGT) zweier Zahlen dargestellt. Innerhalb des Blocks wird Python-Code geschrieben. Eine while-Schleife beginnt, die solange läuft, bis b nicht gleich 0 ist. Dies ist der Kern des euklidischen Algorithmus, bei dem wiederholt der Rest der Division von a durch b berechnet wird, und a und b dann aktualisiert werden. a bekommt den Wert von b, und b den Rest der Division a % b. Sobald b 0 wird (was bedeutet, dass kein Rest mehr vorhanden ist und der Algorithmus sein Ende erreicht hat), ist der Wert in a der GGT der ursprünglich eingegebenen Werte 60 und 48, also 12.

image.png

Funktionsausführung

Mit dem "führe Funktion ... in einem Thread aus"-Block lässt sich die ausgewählte Funktion in einem separaten Thread ausführen. Ein Thread ist im Wesentlichen ein Weg für ein Programm, mehrere Aufgaben gleichzeitig (parallel) auszuführen. Diese Maßnahme kann zum Beispiel ermöglichen, dass ein Programm weiterhin auf Eingaben reagieren kann, während es andere zeitaufwendige Aufgaben ausführt.

Das unten stehende Beispiel zeigt, wie eine Python-Funktion in einem separaten Thread ausgeführt werden kann, um Mehrfachaufgaben innerhalb des Programms zu ermöglichen. Zunächst wird eine Funktion "etwas tun" definiert und diese wird dann in einem Thread gestartet. Die Funktion "etwas tun" beinhaltet Python-Code, der eine zeitaufwendige Aufgabe simuliert. Durch das Verwenden des Threads kann die zeitaufwendige Funktion im Hintergrund ausgeführt werden, während der Hauptthread weiterläuft. Dies verhindert, dass das gesamte Programm während der Ausführung der Funktion für 10 Sekunden blockiert wird. Unmittelbar nach dem Starten des Threads druckt das Hauptprogramm den Text "Der Text wird direkt ausgegeben!". Da der Hauptthread durch den Start des Nebenthreads nicht blockiert wird, erfolgt diese Ausgabe sofort, ohne auf das Ende der Funktion etwas tun zu warten.

image.png

Zeitstempel

Der Block "Zeitstempel" wird verwendet, um den aktuellen Zeitpunkt (in Sekunden oder Millisekunden seit dem Beginn der Programmausführung) zu erfassen. Dies wird typischerweise genutzt, um einen genauen Zeitpunkt zu markieren, an dem etwas im Programm beginnt oder endet. Der Zeitstempel wird in einer Variablen gespeichert und kann verwendet werden, um die Dauer von Ereignissen zu messen, indem man die Differenz zwischen einem Anfangs- und einem Endzeitstempel berechnet.

Im Beispiel wird der Zeitstempel genutzt, um die Dauer der Methode "etwas tun" zu messen. Die Verwendung der Start- und Endzeitstempel ermöglicht es, genau zu bestimmen, wie lange die durch den "etwas tun"-Block repräsentierte Aktion dauert.

image.png

Variablen

Wir verwenden den Begriff Variable so, wie er in der Mathematik und in anderen Programmiersprachen verwendet wird: ein benannter Wert, der verändert (variiert) werden kann. Variablen können auf verschiedene Arten erstellt werden.

Dropdown-Menü

Wenn du auf das Dropdown-Symbol (kleines Dreieck) einer Variable klickst, erscheint das folgende Menü:

image-1623590853546.png

Das Menü bietet die folgenden Optionen.

Blöcke

Festlegen

Der "setze"-Block weist einer Variablen einen Wert zu und legt die Variable an, falls sie bisher nicht existiert. Zum Beispiel wird so der Wert der Variable "Alter" auf 12 gesetzt:

image-1623590862822.png

Abrufen

Der "rufe ab"-Block liefert den in einer Variablen gespeicherten Wert, ohne ihn zu verändern:

image-1623590873177.png

Es ist möglich, aber eine schlechte Idee, ein Programm zu schreiben, in dem ein "rufe ab"-Block ohne einen entsprechenden vorherigen "setze"-Block vorkommt.

Ändern

Der "ändere"-Block fügt eine Zahl zu einer Variablen hinzu.

image-1623590887860.png

Der "ändere"-Block ist eine Abkürzung für das folgende Konstrukt:

image-1623590898726.png

Beispiel

Betrachte den folgenden Beispielcode:

Bild6_d.PNG

Die erste Reihe von Blöcken erzeugt eine Variable namens "Alter" und setzt ihren Anfangswert auf die Zahl 12. Die zweite Reihe von Blöcken ruft den Wert 12 ab, addiert 1 dazu und speichert die Summe 13 in der Variablen. In der letzten Zeile wird die Meldung ausgegeben: "Herzlichen Glückwunsch! Du bist jetzt 13".

Funktionen

Funktionen dienen dazu, Teile des Codes wiederverwendbar zu machen und dadurch den Code insgesamt zu strukturieren. Füllt man einen Funktionsblock, so erscheint im Funktionen-Menü ein neuer Block, der den gleichen Namen trägt wie ebendieser Funktionsblock. Es ist nun möglich, in das Hauptprogramm nur noch den Block mit dem Namen der Funktion einzusetzen. Wenn das Programm durchlaufen wird, leitet dieser Block zum Code in der gleichnamigen Funktion weiter und arbeitet diesen ab.

Einfache Funktion

Mit dem einfachen Funktionsblock lässt sich eine Funktion erstellen, die den im Textfeld eingegebenen Namen trägt. Die Funktion kann beliebig viele Variablen enthalten, die über das (+) Symbol hinzugefügt werden können. Diese Funktion "Altern" addiert 1 zu der Variable "Alter":

Bild1_d.PNG

Die Funktion kann dann im Hauptprogramm genutzt werden:

image-1623591778258.png

Funktion mit Rückgabewert

Dieser Block erlaubt es, eine Funktion mit Rückgabewert zu erstellen. Dieser Rückgabewert kann dann im Hauptprogramm weiterverwendet werden. Hier ein Beispiel:

image.png

Bedingtes Zurückspringen

Der Block "falls" kann verwendet werden, um vorzeitig aus einer Funktion herauszuspringen. Abhängig von der spezifischen Anforderung der Funktion kann dieser Block entweder einen Rückgabewert liefern oder keinen Rückgabewert benötigen. Im Münzwurf-Beispiel prüft der Block die Bedingung, ob die Zufallszahl x, die zwischen 1 und 100 liegt, kleiner oder gleich 50 ist. Wenn wahr (die Zahl ist 50 oder weniger): Die Funktion gibt den Wert 0 zurück. Dies kann als Symbol für Kopf bei einem Münzwurf interpretiert werden. Wenn falsch (die Zahl ist größer als 50): Die Funktion gibt den Wert 1 zurück, was als Zahl interpretiert werden kann.

image.png

Machine Learning

Die Gruppe "Machine Learning" enthält Blöcke zur Verwendung mit dem TensorFlow-Projekt und der USB-Kamera.

Erstellt eine Bildanalyse für ein Model im Pfad path auf dem TXT 4.0 Controller.

Bild1.png

Erstellt eine Objekterkennung mit einem Standardmodell "Sortierstrecke mit KI".

Bild2.png

Erstellt eine Objekterkennung für ein Model im Pfad path auf dem TXT 4.0 Controller.

Bild3.png

Analysiert ein Bild mit einer Objekt- oder Bilderkennung. Ausgegeben werden die erkannten Eigenschaften, deren Wahrscheinlichkeit und bei einer Objekterkennung deren Position. Das Ergebnis dieses Blocks kann in eine Variable geschrieben werden, um dieses später im „get value of result item [item]“ Block auszuwerten.

Bild4.png

Gibt einen einzelnen Wert einer Eigenschaft des x-ten Ergebnisses einer Bild- oder Objektanalyse aus. Item kann dabei entweder direkt der „process image“ Block oder dessen Ergebnisse aus einer Variable sein.

Bild5.png

Importe

Importe enthält alle Funktionen aus selbst definierten Modulen in "lib". Funktionen dienen dazu, Teile des Codes wieder verwendbar zu machen und dadurch den Code insgesamt zu strukturieren (siehe "Funktionen").

Eine kurze Anleitung illustriert Schritt für Schritt, wie man eine neue Datei erstellt, Funktionen definiert, diese in einer Bibliothek organisiert und anschließend in einem Hauptprogramm importiert und verwendet.

Der Prozess beginnt mit dem Klick auf das „+“-Symbol im Projektnavigator, um eine neue Datei zu erstellen.

image.png

Dies öffnet ein Dialogfenster, in dem man zwischen verschiedenen Dateitypen wählen kann.

Nach Auswahl von „Quellcode“ wird man aufgefordert, einen Namen für die Datei einzugeben. In diesem Fall wird die Datei „MeineBibliothek“ genannt.

image.png

In der neu erstellten Quellcodedatei „MeineBibliothek“ wird eine Funktion definiert. Im Beispiel wird eine einfache Funktion namens „halloWelt“ erstellt, die „Hallo Welt!“ ausgibt. Dies zeigt, wie man wiederverwendbare Codeblöcke erstellt, die in verschiedenen Teilen des Projekts oder sogar in verschiedenen Projekten genutzt werden können.

image.png

Nach der Definition der Funktion wird sie im Hauptprogramm verwendet. Dies ermöglicht den Zugriff auf die „halloWelt“-Funktion. 

image.png