Tutorial:Erstellen neuer Relaisgruppen - Skripte erstellen: Unterschied zwischen den Versionen

Aus StellSi-Hilfewiki
Zur Navigation springen Zur Suche springen
(Auslagerung nach Tutorial:Namen von Klassen)
 
(35 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Der Programmablauf von StellSi wird über Scripte gesteuert. Das Scriptsystem von StellSi basiert dabei auf dem C(++)-Ähnlichen Angelscript (http://www.angelcode.com/angelscript/).
Der Programmablauf von StellSi wird über Scripte gesteuert. Das Scriptsystem von StellSi basiert dabei auf dem C(++)-ähnlichen Angelscript (http://www.angelcode.com/angelscript/).


== Hintergrund ==
== Hintergrund ==
Die Logik von StellSi-Stellwerken wird mithilfe von Scripten gesteuert. Das heißt hinter jedem Stellwerk steht ein kleines Programm das die Funktionen von StellSi steuert und das man auch bearbeiten kann.
Die Logik von StellSi-Stellwerken wird mithilfe von Scripten gesteuert. Das heißt, hinter jedem Stellwerk steht ein kleines Programm, das die Funktionen von StellSi steuert und das man auch bearbeiten kann.


Die Scripte selbst befinden sich in seperaten Dateien, den *.stws-Dateien. Sie liegen zusammen mit den Biblitotheken im Verzeichnis der Bauform. Sie können im Prinzip mit jedem beliebigen Texteditor geöffnet werden, unter Windows zum Beispiel mit Editor/Notepad. Es ist jedoch zu beachten, dass bei Dateien von Fremden Betriebssystem möglicherweise eine andere Normierung für den Zeilenumbruch verwendet wurde. ([http://de.wikipedia.org/wiki/Zeilenumbruch Details siehe Wikipedia.]) Ist es offensichtlich, dass das Programm die Zeilenumbrüche nicht Richtig erkannt hat, hilft es meist einen anderen Editor zu verwenden (unter Windows zum Beispiel WordPad). Für den eigentlichen Code sind die Zeilenumbrüche jedoch nicht relevant.
Die Scripte selbst befinden sich in seperaten Dateien, den *.stws-Dateien. Sie liegen zusammen mit den Biblitotheken im Verzeichnis der Bauform. Sie können im Prinzip mit jedem beliebigen Texteditor geöffnet werden, unter Windows zum Beispiel mit Editor/Notepad. Es ist jedoch zu beachten, dass bei Dateien von fremden Betriebssystem möglicherweise eine andere Normierung für den Zeilenumbruch verwendet wurde ([http://de.wikipedia.org/wiki/Zeilenumbruch Details siehe Wikipedia.]). Ist es offensichtlich, dass das Programm die Zeilenumbrüche nicht richtig erkannt hat, hilft es meist einen anderen Editor zu verwenden (unter Windows zum Beispiel WordPad). Für den eigentlichen Code sind die Zeilenumbrüche jedoch nicht relevant.


Im Script stellt Relais- oder Anschlatgruppe eine Klasse dar. Die Schnittstellen werden über Varriablen eingefügt und rufen automatisch bestimmte Methoden auf.
Im Script stellt Relais- oder Anschaltgruppe eine Klasse dar. Die Schnittstellen werden über Variablen eingefügt und rufen automatisch bestimmte Methoden auf.


== Grundlagen ==
== Grundlagen ==
Die Scripte sind im Prinzip wie eine normale Programmiersprache aufgebaut.
Die Scripte sind im Prinzip wie eine normale Programmiersprache aufgebaut. Daher soll im folgenden eine kurze Einleitung über die Scriptprogrammierung gegeben werden.


Grundlage der Programmierung sind einzelne Klassen: Eine Klasse beginnt mit dem Schlüsselwort class, es folgt der Name der Klasse, dann eine Geschweifte Klammer, innerhalb der sich der Ihnhalt der Klasse befindet. Die Klasse endet mit einer weiteren geschweiften Klammer.
Grundlage der Programmierung sind einzelne Klassen: Eine Klasse beginnt mit dem Schlüsselwort class, es folgt der Name der Klasse, dann eine Geschweifte Klammer, innerhalb der sich der Inhalt der Klasse befindet. Die Klasse endet mit einer weiteren geschweiften Klammer.
  class Weiche
  class Weiche
  {
  {
     //Inhalt der Klasse
     //Inhalt der Klasse
  }
  }
Innerhalb einer Klasse werden allgemeine Varriablen deklariert. Varriablen speichern Daten oder stellen Verbindungen zu der Programmlogik von StellSi her. Sie beginnt mit dem Datentyp der Variable (z.B. int für eine Zahl) gefolgt von einem Namen der Varriable, mit dem man sie Später identifizieren kann, und gleich danach einem ; .
Innerhalb einer Klasse werden allgemeine Variablen deklariert. Variablen speichern Daten oder stellen Verbindungen zu der Programmlogik von StellSi her. Sie beginnt mit dem Datentyp der Variable (z.B. int für eine Zahl) gefolgt von einem Namen der Variable, mit dem man sie später identifizieren kann, und gleich danach einem ; .
  class Weiche
  class Weiche
  {
  {
Zeile 23: Zeile 23:
     bool tasteGedrueckt;
     bool tasteGedrueckt;
  }
  }
Neben den Varriablen gibt es innerhalb von Programmen noch Funktionen. Eine Funktion beginnt mit void (oder einem Datentyp) gefolgt von dem Namen der Funktion. Danach folgt eine runde geöffnete Klammer, in der angegeben wird, welche Daten der Funktion mitgegeben werden. Diese Daten werden Kommagetrennt in der Form Datentyp Name angegeben. Es folgt eine Geschweifte Klammer für den Methodenanfang, der Methodeninhalt und eine Geschweifte Klammer für das Methodenende.
Neben den Variablen gibt es innerhalb von Programmen noch Funktionen. Eine Funktion beginnt mit void (oder einem Datentyp) gefolgt von dem Namen der Funktion. Danach folgt eine runde geöffnete Klammer, in der angegeben wird, welche Daten der Funktion mitgegeben werden. Diese Daten werden kommagetrennt in der Form Datentyp Name angegeben. Es folgt eine geschweifte Klammer für den Methodenanfang, der Methodeninhalt und eine geschweifte Klammer für das Methodenende.
  class Weiche
  class Weiche
  {
  {
Zeile 43: Zeile 43:
     }
     }
  }
  }
Innerhalb der Methoden kann man mit den Varriablen Rechnen und ihnen Werte zuweisen. + addiert zwei Zahlen, - subtrahiert sie, * multipliziert, / dividiert Sie. Mit == wird überprüft ob Zahlen oder Warheitswerte gleich sind, das Ergebnis ist ein Warheitswert. Mit = werden Zahlen oder Warheitswerte zugewiesen. Mit ! wird aus einem Warheitswert sein Gegenteil. Mit & oder && wird Zurückgegeben, ob der eine und der andere Warheitswert Wahr ist, mit | oder || wird zurückgegeben, ob der eine oder der andere Warheitswert Wahr ist. Mit <, <=, > und >= wird überprüft, welche Zahl größer ist. Mit Klammer werden wie in der Mathematik die Reinfolgen der Rechnereien festgelegt. Alles was zwischen // und dem Zeilenende oder zwischen /* und */ folgt ist ein Kommentar und wird (im gesammten Programm) ignoriert. Ein Befehl endet mit ; . Das Programm arbeitet die Befehle Schritt für Schritt ab.
Innerhalb der Methoden kann man mit den Variablen rechnen und ihnen Werte zuweisen. + addiert zwei Zahlen, - subtrahiert sie, * multipliziert, / dividiert Sie. Mit == wird überprüft ob Zahlen oder Warheitswerte gleich sind; das Ergebnis ist ein Warheitswert. Mit = werden rechts stehende Zahlen oder Warheitswerte einer links stehenden Variable zugewiesen. Mit ! wird aus einem Warheitswert sein Gegenteil. Mit & oder && wird zurückgegeben, ob der eine und der andere Warheitswert wahr ist, mit | oder || wird zurückgegeben, ob der eine oder der andere Warheitswert wahr ist. Mit <, <=, > und >= wird überprüft, welche Zahl größer ist. Mit Klammern werden, wie in der Mathematik, die Reihenfolgen der Rechnereien festgelegt. Alles was zwischen // und dem Zeilenende oder zwischen /* und */ folgt ist ein Kommentar und wird (im gesamten Programm) ignoriert. Ein Befehl endet mit ; . Das Programm arbeitet die Befehle Schritt für Schritt ab.
  class Weiche
  class Weiche
  {
  {
Zeile 66: Zeile 66:
     }
     }
  }
  }
In den Methoden können andere Methoden aufgerufen werden. Eigene Methoden werden aufgerufen, indem man Sie mit ihrem Namen nennt, in einer Klammer kommagetrennt die Parameter übergibt und den Befehl dann wieder mit ; abschließt. Die Kommunikation mit StellSi findet statt indem man den Namen einer (Schnitstellen-)Varriablen gefolgt von einem . und dann dem Namen einer StellSi-Methode wie eine lokale Methode aufruft. Einige Methoden benötigen dafür Zeichenfolgen. Eine Zeichenfolge ist ein Text zwischen zwei Anführungszeichen.
In den Methoden können andere Methoden aufgerufen werden. Eigene Methoden werden aufgerufen, indem man Sie mit ihrem Namen nennt, in einer Klammer kommagetrennt die Parameter übergibt und den Befehl dann wieder mit ; abschließt. Die Kommunikation mit StellSi findet statt, indem man den Namen einer (Schnitstellen-)Variablen gefolgt von einem . und dann dem Namen einer StellSi-Methode wie eine lokale Methode aufruft. Einige Methoden benötigen dafür Zeichenfolgen. Eine Zeichenfolge ist ein Text zwischen zwei Anführungszeichen.
  class Weiche
  class Weiche
  {
  {
Zeile 92: Zeile 92:
     }
     }
  }
  }
Der Programmablauf kann mit Bedingungen bedingt Fortgesetzt werden. Bedingungen beginnen mit if gefolgt von einem in eine Klammer eingeschlossenen Wahrheitsausdruck. Folgt ein Befehl kann dieser Direkt danach folgen, wenn nicht müssen die Werte in geschweifte Klammern. Nach dem else-Schlüsselwort können Befehle folgen, die ausgeführt werden sollen, wenn der Warheitswert false ist.
Der Programmablauf kann mit Bedingungen bedingt fortgesetzt werden. Bedingungen beginnen mit if gefolgt von einem in eine Klammer eingeschlossenen Wahrheitsausdruck. Folgt nur '''ein''' Befehl, kann dieser direkt danach folgen; wenn mehrere Befehle bedingt abgearbeitet werden sollen, müssen diese in geschweifte Klammern zusammengefasst werden. Nach dem else-Schlüsselwort können auf die gleiche Art und Weise Befehle folgen, die ausgeführt werden sollen, wenn der Warheitswert false ist.
  class Weiche
  class Weiche
  {
  {
Zeile 124: Zeile 124:
     }
     }
  }
  }
Die Ausführung von (void-)Methoden kann mithilfe von return; abgebrochen werden. Methoden, die nicht void sind, können wie Varriablen verwednet werden. Sie müssen ein return gefolgt von dem Rückgabewert enthalten.
Die Ausführung von (void-)Methoden kann mithilfe von return; abgebrochen werden. Methoden, die nicht void sind, haben einen Rückgabewert und können daher wie Variablen verwendet werden, um etwas zu berechnen. Sie müssen ein return beinhalten, dem der Wert, der zurückgegeben werden soll folgt.
  class Weiche
  class Weiche
  {
  {
Zeile 157: Zeile 157:
     }
     }
  }
  }
Bestimmte Methoden (im obigen Fall init und die on-Methode) werden automatisch von StellSi aufgerufen. Werden Varriablen innerhalb einer Methode deklariert, gelten Sie nur bis zum Ende des aktuellen Bereiches (schließende }, wenn zwischen der } noch ein paar { aufgemacht wurden zählen die zugehörigen } natürlich nicht dazu).
Bestimmte Methoden (im obigen Fall init und die on-Methode) werden automatisch von StellSi aufgerufen. Werden Variablen innerhalb einer Methode deklariert, gelten Sie nur bis zum Ende des aktuellen Bereiches (schließende }, wenn zwischen der } noch ein paar { aufgemacht wurden zählen die zugehörigen } natürlich nicht dazu).


'''Hinweis:''' Gibt es zwei Weichen, die beide auf der Klasse Weiche aufbauen, so sind diese Unhabhängig voneinander. Die beiden Weichen arbeiten mit verschiedenen ''Instanzen'' der Klasse.
'''Hinweis:''' Gibt es zum Beispiel zwei Weichen, die beide auf der Klasse Weiche aufbauen, so sind diese unhabhängig voneinander. Die beiden Weichen arbeiten mit verschiedenen ''Instanzen'' der Klasse.


Für eine ausführlichere Anleitung sei auf die entsprechende Fachliteratur verwiesen.
Für eine ausführlichere Anleitung sei auf die entsprechende Fachliteratur verwiesen.


== Hilfsfunktionen ==
== Datentypen ==
* void print(int value); Gibt den Wert je nach config.xml auf die Standardausgabe und/oder eine Log-Datei aus.
Siehe [[Tutorial:Namen von Klassen]]
* void print(string value); Gibt den Wert je nach config.xml auf die Standardausgabe und/oder eine Log-Datei aus.
* int min(int a, int b); Gibt den kleineren der Werte zurück.
* int max(int a, int b); Gibt den größeren der Werte zurück.


== Konstanten ==
[[Kategorie:Neue Bauform]]
* const int VERSCHLUSSLEVEL_MAX; Maximal mögliches Verschlusslevel (= keine Einschränkungen)
 
== Datentypen ==
* '''bool''' Warheitswert, true oder false
* '''int''' Ganzzahl, vorzeichenbehaftet, 32 Bit. Weitere Ganzzahltypen sind int8, int16, int64, uint8, uint16, uint, uint64
* '''float''' Gleitkommazahl vorzeichenbehaftet. Weitere Gleitkommazahl ist double.
* '''string''' Zeichenfolge.
* '''Schnittstelle''' Passt zu dem StellSi-Typ Schnittstelle.
** Methoden:
*** void sendSignal(string signalname, string wert); Einmaliges Ereignis (z.B. Zählwerk)
*** void sendSignal(string signalname, int wert);
*** void setWert(string signalname, string wert); Dauerhafteter Zustand (z.B. Lampe an/aus)
*** void setWert(string signalname, int wert);
*** int sendSignalSyncron(string signalname, string wert); Geht an '''eine''' Schnitstelle und gibt den Wert zurück, den diese Schnittstelle zurückgibt.
*** int sendSignalSyncron(string signalname, int wert);
** Ruft auf:
*** void on_%Name der Schnittstellenvarriable%_%Name des Signals%(string wert); Wird aufgerufen, wenn ein Signal oder ein Wert gesendet wurde, und der Name der Variablen der Schnittstelle kein _ enthielt.
*** void on_%Name der Schnittstellenvarriable%_%Name des Signals%(int wert);
*** int on_%Name der Schnittstellenvarriable%_%Name des Signals%(string wert);
*** int on_%Name der Schnittstellenvarriable%_%Name des Signals%(int wert);
** Besonderheiten:
*** Schnittstelle freie; Übernimmt Ein- und Ausgangssignale der Freien Eingangslogiken. (Ausgangssignale noch nicht getestet.)
* '''Timer'''
** Methoden:
*** void start(int wert, int dauer, optional bool autorepeat=false); (Neu-)Start eines Timers. Dauer ist in Millisekunden anzugeben.
*** void stop();
** Ruft auf:
*** void _%Name der Timervarriable%(int wert);
* '''VerschlussFahrstrasse''' ([[Tutorial:Erstellen neuer Relaisgruppen - Verschlussregister#Klasse VerschlussFahrstrasse|Details]])
** Methoden:
*** int verschliesse(const string typ_fahrstrasse, const int level, optional out string fehlernachricht); ([[Tutorial:Erstellen neuer Relaisgruppen - Verschlussregister#verschliesse|Details]])
*** int pruefe(string typ_fahrstrasse, int level, optional out string fehlernachricht); ([[Tutorial:Erstellen neuer Relaisgruppen - Verschlussregister#pruefe|Details]])
*** void stelle(string typ_fahrstrasse, int level); ([[Tutorial:Erstellen neuer Relaisgruppen - Verschlussregister#stelle|Details]])
** Ruft auf: ([[Tutorial:Erstellen neuer Relaisgruppen - Verschlussregister#Ereignisse|Details]])
*** on_%Name der Verschlussfahrstrassenvarriable%_%Name der Schubstange%_verschlussstangechanged(int level);
*** on_%Name der Verschlussfahrstrassenvarriable%_%Name der Schubstange%_%Nummer des Zielzustandes%_festlegungchanged(int level);
* '''VerschlussElement''' ([[Tutorial:Erstellen neuer Relaisgruppen - Verschlussregister#Klasse VerschlussElement|Details]])
** Methoden:
*** void setLevelgrenzen(string typ_fahrstrasse, string stellung, int minlevel, int maxlevel, optional string msgMinlevel, optional string msgMaxlevel); ([[Tutorial:Erstellen neuer Relaisgruppen - Verschlussregister#setLevelgrenzen|Details]])
*** int verschliesse(string typ_fahrstrasse, int level, optional out string fehlernachricht); ([[Tutorial:Erstellen neuer Relaisgruppen - Verschlussregister#verschliesse|Details]])
*** int pruefe(string typ_fahrstrasse, int level, optional out string fehlernachricht); ([[Tutorial:Erstellen neuer Relaisgruppen - Verschlussregister#pruefe|Details]])
*** void stelle(string typ_fahrstrasse, int level); ([[Tutorial:Erstellen neuer Relaisgruppen - Verschlussregister#stelle|Details]])
** Ruft auf: ([[Tutorial:Erstellen neuer Relaisgruppen - Verschlussregister#Ereignisse|Details]])
*** on_%Name der Verschlusselementvarriable%_%Name der Schubstange%_verschlussstangechanged(int level);
*** on_%Name der Verschlusselementvarriable%_%Name der Schubstange%_%Nummer des Zielzustandes%_festlegungchanged(int level);
* Sonnstiges
** Aufgerufene Methoden:
*** void parameterUpdate(string typ,int wert); Wenn eine Option im Parametereditor verstellt wird.

Aktuelle Version vom 11. April 2018, 15:20 Uhr

Der Programmablauf von StellSi wird über Scripte gesteuert. Das Scriptsystem von StellSi basiert dabei auf dem C(++)-ähnlichen Angelscript (http://www.angelcode.com/angelscript/).

Hintergrund

Die Logik von StellSi-Stellwerken wird mithilfe von Scripten gesteuert. Das heißt, hinter jedem Stellwerk steht ein kleines Programm, das die Funktionen von StellSi steuert und das man auch bearbeiten kann.

Die Scripte selbst befinden sich in seperaten Dateien, den *.stws-Dateien. Sie liegen zusammen mit den Biblitotheken im Verzeichnis der Bauform. Sie können im Prinzip mit jedem beliebigen Texteditor geöffnet werden, unter Windows zum Beispiel mit Editor/Notepad. Es ist jedoch zu beachten, dass bei Dateien von fremden Betriebssystem möglicherweise eine andere Normierung für den Zeilenumbruch verwendet wurde (Details siehe Wikipedia.). Ist es offensichtlich, dass das Programm die Zeilenumbrüche nicht richtig erkannt hat, hilft es meist einen anderen Editor zu verwenden (unter Windows zum Beispiel WordPad). Für den eigentlichen Code sind die Zeilenumbrüche jedoch nicht relevant.

Im Script stellt Relais- oder Anschaltgruppe eine Klasse dar. Die Schnittstellen werden über Variablen eingefügt und rufen automatisch bestimmte Methoden auf.

Grundlagen

Die Scripte sind im Prinzip wie eine normale Programmiersprache aufgebaut. Daher soll im folgenden eine kurze Einleitung über die Scriptprogrammierung gegeben werden.

Grundlage der Programmierung sind einzelne Klassen: Eine Klasse beginnt mit dem Schlüsselwort class, es folgt der Name der Klasse, dann eine Geschweifte Klammer, innerhalb der sich der Inhalt der Klasse befindet. Die Klasse endet mit einer weiteren geschweiften Klammer.

class Weiche
{
    //Inhalt der Klasse
}

Innerhalb einer Klasse werden allgemeine Variablen deklariert. Variablen speichern Daten oder stellen Verbindungen zu der Programmlogik von StellSi her. Sie beginnt mit dem Datentyp der Variable (z.B. int für eine Zahl) gefolgt von einem Namen der Variable, mit dem man sie später identifizieren kann, und gleich danach einem ; .

class Weiche
{
    Schnittstelle tischfeld;
    int anzahlIrgendetwas;
    bool tasteGedrueckt;
}

Neben den Variablen gibt es innerhalb von Programmen noch Funktionen. Eine Funktion beginnt mit void (oder einem Datentyp) gefolgt von dem Namen der Funktion. Danach folgt eine runde geöffnete Klammer, in der angegeben wird, welche Daten der Funktion mitgegeben werden. Diese Daten werden kommagetrennt in der Form Datentyp Name angegeben. Es folgt eine geschweifte Klammer für den Methodenanfang, der Methodeninhalt und eine geschweifte Klammer für das Methodenende.

class Weiche
{
    Schnittstelle tischfeld;
    int anzahlIrgendetwas;
    bool tasteGedrueckt;
    
    void init()
    {
         //Methodeninhalt
    }
    void on_tischfeld_wht(int wert)
    {
         //Methodeninhalt
    }
    void beliebigeMethode(int wert, bool andererWert)
    {
         //Methodeninhalt
    }
}

Innerhalb der Methoden kann man mit den Variablen rechnen und ihnen Werte zuweisen. + addiert zwei Zahlen, - subtrahiert sie, * multipliziert, / dividiert Sie. Mit == wird überprüft ob Zahlen oder Warheitswerte gleich sind; das Ergebnis ist ein Warheitswert. Mit = werden rechts stehende Zahlen oder Warheitswerte einer links stehenden Variable zugewiesen. Mit ! wird aus einem Warheitswert sein Gegenteil. Mit & oder && wird zurückgegeben, ob der eine und der andere Warheitswert wahr ist, mit | oder || wird zurückgegeben, ob der eine oder der andere Warheitswert wahr ist. Mit <, <=, > und >= wird überprüft, welche Zahl größer ist. Mit Klammern werden, wie in der Mathematik, die Reihenfolgen der Rechnereien festgelegt. Alles was zwischen // und dem Zeilenende oder zwischen /* und */ folgt ist ein Kommentar und wird (im gesamten Programm) ignoriert. Ein Befehl endet mit ; . Das Programm arbeitet die Befehle Schritt für Schritt ab.

class Weiche
{
    Schnittstelle tischfeld;
    int anzahlIrgendetwas;
    bool tasteGedrueckt;
    
    void init()
    {
         anzahlIrgendetwas=0;
         tasteGedrueckt=false;
    }
    void on_tischfeld_wht(int wert)
    {
         tasteGedrueckt=true;
         anzahlIrgendetwas=wert;
    }
    int beliebigeMethode(int wert, bool andererWert)
    {
         tasteGedrueckt = ((wert == 1)||(wert > 15))&&(!andererWert);
         //Rest der Methode.
    }
}

In den Methoden können andere Methoden aufgerufen werden. Eigene Methoden werden aufgerufen, indem man Sie mit ihrem Namen nennt, in einer Klammer kommagetrennt die Parameter übergibt und den Befehl dann wieder mit ; abschließt. Die Kommunikation mit StellSi findet statt, indem man den Namen einer (Schnitstellen-)Variablen gefolgt von einem . und dann dem Namen einer StellSi-Methode wie eine lokale Methode aufruft. Einige Methoden benötigen dafür Zeichenfolgen. Eine Zeichenfolge ist ein Text zwischen zwei Anführungszeichen.

class Weiche
{
    Schnittstelle tischfeld;
    int anzahlIrgendetwas;
    bool tasteGedrueckt;
    
    void init()
    {
         anzahlIrgendetwas=0;
         tasteGedrueckt=false;
         tischfeld.setWert("besetzt",1);
    }
    void on_tischfeld_wht(int wert)
    {
         tasteGedrueckt=true;
         anzahlIrgendetwas=wert;
         beliebigeMethode(27,false);
    }
    int beliebigeMethode(int wert, bool andererWert)
    {
         tasteGedrueckt = ((wert == 1)||(wert > 15))&&(!andererWert);
         tischfeld.setWert("irgendwas",41);
         //Rest der Methode.
    }
}

Der Programmablauf kann mit Bedingungen bedingt fortgesetzt werden. Bedingungen beginnen mit if gefolgt von einem in eine Klammer eingeschlossenen Wahrheitsausdruck. Folgt nur ein Befehl, kann dieser direkt danach folgen; wenn mehrere Befehle bedingt abgearbeitet werden sollen, müssen diese in geschweifte Klammern zusammengefasst werden. Nach dem else-Schlüsselwort können auf die gleiche Art und Weise Befehle folgen, die ausgeführt werden sollen, wenn der Warheitswert false ist.

class Weiche
{
    Schnittstelle tischfeld;
    int anzahlIrgendetwas;
    bool tasteGedrueckt;
    
    void init()
    {
         anzahlIrgendetwas=0;
         tasteGedrueckt=false;
         tischfeld.setWert("besetzt",1);
    }
    void on_tischfeld_wht(int wert)
    {
         tasteGedrueckt=true;
         anzahlIrgendetwas=wert;
         if (wert > 26)
           beliebigeMethode(27,false);
         else
         {
           beliebigeMethode(wert,true);
           tischfeld.setWert("nochetwas",1);
         }
    }
    int beliebigeMethode(int wert, bool andererWert)
    {
         tasteGedrueckt = ((wert == 1)||(wert > 15))&&(!andererWert);
         tischfeld.setWert("irgendwas",41);
         //Rest der Methode.
    }
}

Die Ausführung von (void-)Methoden kann mithilfe von return; abgebrochen werden. Methoden, die nicht void sind, haben einen Rückgabewert und können daher wie Variablen verwendet werden, um etwas zu berechnen. Sie müssen ein return beinhalten, dem der Wert, der zurückgegeben werden soll folgt.

class Weiche
{
    Schnittstelle tischfeld;
    int anzahlIrgendetwas;
    bool tasteGedrueckt;
    
    void init()
    {
         anzahlIrgendetwas=0;
         tasteGedrueckt=false;
         tischfeld.setWert("besetzt",1);
    }
    void on_tischfeld_wht(int wert)
    {
         tasteGedrueckt=true;
         anzahlIrgendetwas=wert;
         if (wert > 26)
           beliebigeMethode(27,false);
         else
         {
           beliebigeMethode(wert,true); //Kommentar
           tischfeld.setWert("nochetwas" /*Kommentar*/,beliebigeMethode(0,false));
           return;
         }
    }
    int beliebigeMethode(int wert, bool andererWert)
    {
         tasteGedrueckt = ((wert == 1)||(wert > 15))&&(!andererWert);
         tischfeld.setWert("irgendwas",41);
         return 32;
    }
}

Bestimmte Methoden (im obigen Fall init und die on-Methode) werden automatisch von StellSi aufgerufen. Werden Variablen innerhalb einer Methode deklariert, gelten Sie nur bis zum Ende des aktuellen Bereiches (schließende }, wenn zwischen der } noch ein paar { aufgemacht wurden zählen die zugehörigen } natürlich nicht dazu).

Hinweis: Gibt es zum Beispiel zwei Weichen, die beide auf der Klasse Weiche aufbauen, so sind diese unhabhängig voneinander. Die beiden Weichen arbeiten mit verschiedenen Instanzen der Klasse.

Für eine ausführlichere Anleitung sei auf die entsprechende Fachliteratur verwiesen.

Datentypen

Siehe Tutorial:Namen von Klassen