Thema Startampel


Einleitung

Die Startampel wird grundsätzlich über zwei Dateien "gesteuert".

Es gibt das File "Startampel.xml" für Bahnen mit der Blackbox oder reine analoge Bahnen und das File "Startampel.xml.ccu" speziell für die CU von Carrera. CXP schaut immer zuerst in den RBS-Ordner und verwendet dann das dort abgelegte Startampel-File. Ist kein File vorhanden, wird die entsprechende Datei aus dem cpDefault-Ordner verwendet.

Aus dem Grund sollte eine individuelle Startampel immer im RBS-Ordner liegen, da bei jedem Update der Ordner cpdefault überschrieben wird.

Das Verhalten und Aussehen einer Startampel wird in diesem zwei Files definiert. Grundsätzlich kann man hier also nicht nur das Aussehen der Ampel sondern auch den Startablauf und noch ein paar andere knuffige Sachen programmieren.

Struktur des Startampel-Files

Das File lässt sich entweder über den RBS-Editor im XML-Modus "öffnen" und editieren oder aber auch über einen externen Editor.

Die Struktur des Files ist wie folgt:

  • init
  • training
  • quali
  • rennen

Innerhalb vom training, quali oder rennen gibt es dann noch:

  • start
  • abbruch
  • pause
  • weiter
  • yellowphase
  • ende 

Soviel zur groben Struktur.

Somit lässt sich individuell für Training, quali und\oder rennen ein eigener Ablauf der Ampel realisieren. 


init

hier definiert und lädt man sich einmalig die "Ampelbilder", welche dann im Laufe des Startampel-Files verwendet werden sollen über folgende Befehlszeile:

<loadpic red="Ampel-an-rot_146x600.jpg" yellow="Ampel-an-gelb_146x600.jpg" green="Ampel-an-gruen_146x600.jpg" off="Ampel-aus_146x600.jpg"></loadpic>
 

Eine Angabe der Größe der einzelnen Bilder (in Pixel) erleichtert die folgende Programmierung, ist aber nicht zwingend notwendig. Man darf auf keinen Fall die Bezeichnungen red, yellow, green und off ändern. Den darauffolgenden Name schon. Warum? Kommen wir später noch drauf....


Die eigentliche Position auf dem RBS wird immer über folgenden Befehlszeilen definiert:

<one>
   <!-- Dieser Teil wird bei jeder Anwahl von diesem Modus einmal aufgerufen -->
   <!-- Position des Frames und der einzelnen Ampel festlegen -->
   <framepos x="auto" y="40" w="1040" h="960" bcolor="" bimage="Hintergrund-Ampel-Transparent-Groß.png"  tc="FFFFFF"></framepos>
   <ampelpos nr="1" x="90" y="230" w="146" h="600"></ampelpos>
   <ampelpos nr="2" x="268" y="230" w="146" h="600"></ampelpos>
   <ampelpos nr="3" x="446" y="230" w="146" h="600"></ampelpos>
   <ampelpos nr="4" x="624" y="230" w="146" h="600"></ampelpos>
   <ampelpos nr="5" x="802" y="230" w="146" h="600"></ampelpos>
</one>

Dabei muss man verstehen, dass ein "Frame" um die Ampelbilder gezogen und dann die einzelnen Positionen der Ampelbilder innerhalb vom Frame definiert werden. Das hat den Vorteil, dass man zur Feinjustage dann nur die Frame-Position ändern muss und nicht jedes Ampelbild einzeln.

In unserem Beispiel wird in X-Richtung automatisch (auto) zentriert und in Y-Richtung der Frame um 40 Pixel nach unten gesetzt. Der Frame hat eine Breite w = 1040 Pixel und eine Höhe h = 960 Pixel. Als Hintergrundbild wird in dieses Frame das Bild Hintergrund-Ampel-Transparent-Groß.png geladen. Auf diesem Hintergrundbild werden dann anschließend die Positionen der Ampel gesetzt. Ein Hintergrundbild ist nicht zwingend notwendig.


Beispiele für framepos

Folgendes Bild soll einen Rennbildschirm zeigen, auf dem eine Startampel plaziert werden soll. Der Bezugs-Nullpunkt für das spätere Startampel-Frame (0\0) ist immer oben links


Folgendes Bild zeigt eine Startampel, ausgerichtet in x und y über auto, also horizontal und vertikal mittig ausgerichtet


Dieses Bild hier zeigt eine Startampel in x über auto mittig ausgerichtet und in y mit 40 Pixel nach unten platziert


Beispiele für ampelpos

mit den Befehlszeilen ampelpos werden jetzt innerhalb vom Frame die "Bilder" positioniert, Bezugspunkt (0\0) ist hier auch immer oben links.

 <ampelpos nr="1" x="90" y="230" w="146" h="600"></ampelpos>
 <ampelpos nr="2" x="268" y="230" w="146" h="600"></ampelpos>
 <ampelpos nr="3" x="446" y="230" w="146" h="600"></ampelpos>
 <ampelpos nr="4" x="624" y="230" w="146" h="600"></ampelpos>
 <ampelpos nr="5" x="802" y="230" w="146" h="600"></ampelpos>

 

Somit ist dann die Startampel an sich erst einmal von der Position her beschrieben.


Ablaufsteuerung

Je nach "Event" (Training, quali oder rennen) läuft dann die Startampel wie programmiert ab. Nehmen wir mal das Beispiel Start vom training:

<start>
  <!-- Training wurde gestartet -->
  <ampel nr="all" value="red" takt="0"></ampel>
  <!-- TankMenge wird gesetzt, CU geht danach wieder auf Mittler LED, deshalb Wartezeit danach notwendig -->
  <setzetankmenge value="0"/>     
  <wait time="20"></wait>
  <!-- Ende TankMenge/Geschw. und Bremswert setzen -->   
  <rennstatus status="freigabe"></rennstatus>   
  <ampel nr="all" value="green" takt="0"></ampel>
  <showampel value="on"></showampel>
  <wait time="1"></wait>
  <showampel value="off"></showampel>
</start>

Was passiert im Detail?

  • alle Ampel welche mit red=... geladen wurden werden jetzt angezeigt: <ampel nr="all" value="red" takt="0"></Ampel>

  • als nächstes wird die Tankmenge NICHT gesetzt: <setzetankmenge value="0"/>    
  • und dann wird mal ca. 2 sek. gewartet:  <wait time="20"></wait>
  • Die nächste Befehlszeile gibt das Training frei, sprich ab jetzt werden Runden gezählt bzw. die Rennzeit gestartet: <rennstatus status="freigabe"></rennstatus>  
  • dann schaltet die Ampel auf die Bilder um, welche unter green=... vorher geladen wurden: <ampel nr="all" value="green" takt="0"></Ampel>

  • Dann wieder ca. 1 sek. Wartezeit: <wait time="1"></wait>
  • Alle Ampeln ausblenden: <showampel value="off"></showampel>

und fertig...

Dieses Vorgehen gilt gleichermaßen für training, quali und rennen


abbruch bzw. pause

<abbruch>
   <!-- Training wurde abgebrochen -->
   <ampel nr="all" value="red" takt="10"></ampel>
   <showampel value="on"></showampel>
  </abbruch>
  <pause>
   <!-- Training Pause -->
   <ampel nr="all" value="yellow" takt="10"></ampel>
   <showampel value="on"></showampel>
  </pause>

wird ein Abbruch bzw. Pause erkannt so wird die rote (gelbe) Ampel eingeblendet und mit einem Takt von ca. 1 sek. angezeigt. Das läuft bzw. blinkt dann solange bis ein neuer "Befehl" kommt.


weiter

<weiter>
   <!-- Training Weiter nach Pause -->
   <ampel nr="all" value="green" takt="0"></ampel>
   <showampel value="on"></showampel>
   <rennstatus status="weiter"></rennstatus>
   <wait time="10"></wait>
   <showampel value="off"></showampel>
  </weiter>

hier wird jetzt bei Erkennung von weiter (also Chaos bzw. Pause Ende) die grüne Ampel angezeigt, ca. 1 sek. gewartet und dann die Ampel ausgeblendet.


yellowphase

<yellowphase>
   <!-- Chaos Yellow-Phase -->
   <ampel nr="all" value="yellow" takt="10"></ampel>
   <showampel value="on"></showampel>
  </yellowphase>

hier wird bei Erkennung von Chaos, also Gelbphase alle Ampeln auf yellow geschaltet und takten ca. im 1.sek.-Takt und zwar solange, bis eine andere Aktion stattfindet.

 


ende

<ende>
   <!-- Training Ende -->
   <ampel nr="all" value="red" takt="0"></ampel>
   <showampel value="on"></showampel>
           <wait time="25"></wait>
   <sound sprachtext="Fahren sie jetzt in die Boxengasse"></sound>
   <wait time="50"></wait>                       
   <sound sprachtext="Strecke wird gesperrt"></sound>
   <wait time="50"></wait>
   <showampel value="off"></showampel>
</ende>

hier wird nach Erkennung Ende (also Training ist zu Ende, da Rundenzahl bzw. Rennzeit erreicht wurde) die rote Ampel eingeblendet, dann 2,5 sek. gewartet und dann kommt eine Sprachausgabe "Fahren Sie jetzt in die Boxengasse", wieder 5 sek. gewartet, Sprachausgabe "Strecke wird gesperrt", 5 sek. warten und dann wird die Ampel ausgeblendet.


Rennstart mit Startampel

<start>
   <!-- Rennen wurde gestartet -->
   <!-- TankMenge wird gesetzt, CU geht danach wieder auf Mittler LED, deshalb Wartezeit danach notwendig -->
    <setzetankmenge value="0"/>     
   <wait time="20"></wait>
   <!-- Ende TankMenge/Geschw. und Bremswert setzen -->
   <ampel nr="5" value="off" takt="0"></ampel>
   <ampel nr="4" value="off" takt="0"></ampel>
   <ampel nr="3" value="off" takt="0"></ampel>
   <ampel nr="2" value="off" takt="0"></ampel>
   <ampel nr="1" value="off" takt="0"></ampel>
   <showampel value="on"></showampel>
   <ampel nr="all" value="red" takt="10"></ampel>
   <sound sprachtext="Startknopf an der ZehUh oder einen Chaostaster drücken"></sound>
   <wait time="3000" custartampel="1"></wait>   
   <audio id="Bereit machen zum Start" />
   <ampel nr="all" value="off" takt="0"></ampel>
   <wait time="3000" custartampel="2"></wait>
   <ampel nr="1" value="red" takt="0"></ampel>
   <audio id="Ampel 5" />
   <wait time="20" custartampel="3"></wait>
   <ampel nr="2" value="red" takt="0"></ampel>
   <audio id="Ampel 4" />
   <wait time="20" custartampel="4"></wait>
   <ampel nr="3" value="red" takt="0"></ampel>
   <audio id="Ampel 3" />
   <wait time="20" custartampel="5"></wait>
   <ampel nr="4" value="red" takt="0"></ampel>
   <audio id="Ampel 2" />
   <wait time="20" custartampel="6"></wait>
   <ampel nr="5" value="red" takt="0"></ampel>
   <audio id="Ampel 1" />
   <wait time="20" custartampel="7"></wait>
   <ampel nr="all" value="green" takt="0"></ampel>
   <rennstatus status="freigabe"></rennstatus>
   <wait time="10"></wait>
   <showampel value="off"></showampel>
  </start>

Nach oben