Vorteile: Blockverkehr einfacher aufzubauen und sicherer, da man einfach den Zugende-Kontakt kurz hinter das Signal setzt um den Block davor wieder freizugeben. Außerdem würden soviele meiner Schaltanlagen einfacher und vor allem sicherer werden.
Außerdem Verhältniskontakte: nur bei jedem x. überfahren eines Kontaktes diesen auslösen. So könnte z.B. bei einer Nebenbahnabzweigung nur jeder x. Zug abzweigen.
Timer-Kontakte: lösen erst ihre Aufgabe nach einer einstellbaren Zeit aus - gut für Bahnhofshalte und mehr.
Counter-Kontakt oder Signal: sooft, wie grün gesetzt wird, muß dann rot gesetzt werden, damit es wirklich rot wird - z.B. für Schranke an Bahnübergang, nur daß hier rot und grün vertausch sind.
Alles also wie bisher nur einen Schalter "Zugende-Kontakt" mehr im Fenster, eine Zahlfeld für den Counter, per Default auf 1 und ein Zahlfeld für den Timer in Sekunden, per Default 0.
Die Krönung wäre natürlich eine Script-Sprache in der Form:
Kontakt Richtung 1 startet Prozedur fahrstrasse1(), die dann ähnlich JavaScript aufgebaut sein könnte, wo man Variablen hat, Schleifen und all das Zeugs einer funktionalen Sprache und wo man die Weichen, Signale und Züge (sowie deren Wagen) über Objekte ansprechen kann, also die Form
signale[10].stand=rot; sound[2].play();oder auch
zug[1].richtung=-1; zug[1].vmax=80; // das wären dann Prozent
Statt einem numerischen Index auch Namen, aber gerade bei Zügen mach ich mir da eher Sorgen, denn deren Namen ändern sich zu leicht (Kuppeln, Kollisionen, Tippfehler).
Eine Einmündungsschaltung könnte dann so aussehen:
globals.efrei1=1; // eine globale Variable, der Code wird
// einmalig ausgeführt
function einm1(k) // k ist dann das Objekt des Kontakts
{
if (k==kontakte[2])
{ // Einfahrwunsch aus Achse 1
if (globals.efrei1==1)
{
globals.efrei1=0;
signale[2].stand=gruen;
}
}
else if (k==kontakte[3])
{ // Einfahrwunsch aus Achse 2
if (globals.efrei1==1)
{
globals.efrei1=0;
signale[3].stand=gruen;
}
}
}
function einm1frei(k)
{
globals.efrei1=1;
}
Ausgehend von meiner Schaltungsgrafik würde nun einm1() von Kontakt K6:abzweig und K7:abzweig aufgerufen und einm1frei() von K9:grün.
So ganz gefällt mir das zwar noch nicht, denn die Wiederverwendbarkeit ist noch schlecht so, aber wenn man statt efrei1 ein Array hätte und die Kontakt-Zuordnung in einem Behälter ablegen könnte (z.B. Zuordnung Kontakt-ID zu Wert), wäre das schon möglich.
Im einfachsten Fall würde ein Kontakt auch nur sowas auslösen können:
zug[3].wagen[0].achse[0]=2;
Das würde dann z.B. einen Zugzielanzeiger auf den 2. Eintrag stellen - oder man nimmt auch hier Prozente, was dem jetzigen Schieber der GUI näher kommt.

