Das inoffizielle Forum zu Eisenbahn.exe Professional 7+

Onlinejuergen18
Benutzeravatar
Team
Beiträge: 990
Registriert: 04.10.2013, 22:43
EEP-Version: 7-13

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Dann kann ich ja auch meine Lösung hier reinstellen, wenn es René geschafft hat, denn man sollte es auch schon selbst gebaut haben,
der Lerneffekt ist wesentlich höher.
Dateianhänge
attachment Teil9_4_Block.zip
(22.47 KiB) 159-mal heruntergeladen
Grüße aus Wattenscheid von Jürgen

Ich habe EEP 7-13
Laptop: Medion i7-6500U CPU 2.5 - 3.1 GHz, 8 GB DDR3-Speicher, NV Geforce GTX 950M, 2 GB DDR3 Speicher, Win 10 64-Bit

Mein aktuelles Projekt: Erweiterung des Tauschmanagers bis EEP 13 (aktuelle Vesion 3.1.2.4) und ein bisschen Lua
Anleitung für den TM zum Download

Postkartenzähler für den TM: 354
Onlinejuergen18
Benutzeravatar
Team
Beiträge: 990
Registriert: 04.10.2013, 22:43
EEP-Version: 7-13

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Wie ich anhand der spärlichen Rückmeldung sehe, eigentlich nur von RA1, scheint Lua doch
zu schwierig zu sein oder ich habe es nicht richtig erklärt. *SCRATCH*  Ich werde deswegen nach diesem
Teil vorerst den Thread beenden. Ich wollte zwar in Teil 11 mit Tabellen anfangen, aber das
ist noch eine Stufe schwieriger.
Sollten von Euch noch Vorschläge kommen, was wir noch schalten könnten, würde ich dies
natürlich mit Euch durchführen.

Teil 10
Ein weiteres Problem tritt bei unserer Einfahrtsfahrstraße links auf, wenn dort kein Zug steht,
es aber vom ausfahrenden Zug rechts trotzdem auf Fahrt geschaltet wird. Dies könnt Ihr ausprobieren,
in dem Ihr die virtuellen Verbindungen auf beiden Seiten auflöst und dafür tatsächlich Gleise verlegt.
Die Strecke wird erheblich länger und dadurch auch sichtbar, dass das Einfahrtssignal 0011 bereits
geschaltet ist, obwohl weit und breit noch kein Zug zu sehen ist, was natürlich nicht der Realität entspricht.

Bild

Das werden wir jetzt ändern.
Ohne Lua haben wir dafür Zusatzsignale/Weichen oder Besetztmelder/Schalter benutzt, die wir über
die Bedingung „Wenn … ist“ im KP abfragen konnten. Nichts anderes machen wir jetzt in Lua.
Wir legen in unserem Skript eine neue Variable an. Diese Variable bezeichnen wir mit Signal11_besetzt
und müssen der Variablen noch einen Wert zuweisen. Zum besseren Verständnis (man kann es auch anders machen)
weisen wir ihr zu Anfang den Wert „nein“ zu, da kein Zug vor dem Signal 0011 wartet.
Denkt an die Anführungszeichen, die bei Text erforderlich sind:
Code: Alles auswählen
Signal11_besetzt=“nein“

Fährt jetzt ein Zug in den Bereich vor Signal 0011 oder Fahrstraße S0010 ein,
weisen wir unserer Variablen Signal11_besetzt den Wert „ja“ zu, auch hier bitte
an die Anführungszeichen denken, da das Signal 0011 bzw. die Fahrstraße S0010
jetzt geschaltet werden darf. Aber wie machen wir das? Wieder kommt Benny´s
Codeschnipsel uns dabei zu Hilfe, denn man kann damit auch unserer Variablen
Signal11_besetzt im Kontaktpunkt einen Wert zuweisen, der dann an Lua
übergeben wird.
WICHTIG !! Wir setzen einen neuen Soundkontakt vor den Soundkontakt, der die
Fahrstraße S0010 aufruft.
Warum er davor gesetzt werden muss, werden wir
gleich sehen.

Bild

Wie Ihr an dem Bild sehen könnt, tragen wir in diesen Soundkontakt  n i c h t
die Bezeichnung einer function ein, sondern weisen hier unserer Variablen
Signal11_besetzt den Wert „ja“ zu, in dem wir im Soundkontakt schreiben:
Signal11_besetzt=“ja“
Was jetzt auch stimmt, da ein Zug das Signal „besetzt“ und Einfahrt haben möchte.
Als nächstes müssen wir unserer function Schalte_Fahrstrassensignal_S0010()
sagen, dass sie nur schalten darf, wenn sich auch ein Zug vor Signal 0011
befindet. Wir ergänzen also unsere function Schalte_Fahrstrassensignal_S0010()
um eine weitere Bedingung. So sieht sie z. Zt. aus:
Code: Alles auswählen
function Schalte_Fahrstrassensignal_S0010()
    if EEPGetSwitch(3)==1 then
        EEPSetSignal(10,3)
    else
        EEPSetSignal(10,2)
    end
end

Wie Ihr seht, habe ich auch die Bezeichnung unserer function geändert, weil nur noch das
Fahrstraßensignal S0010 und nicht mehr die Ausfahrtfahrstraßensignale S0005 oder S0006
damit geschaltet werden. Dies erledigen jetzt zwei gesonderte Signalkontaktpunkte.
Diese Änderung der Bezeichnung müsst Ihr auch in den Soundkontakten rechts und links vornehmen,
in denen noch die alte Bezeichnung steht.

Zurück zu den Bedingungen. Eine haben wir schon kennen und anwenden gelernt:
if EEPGetSwitch(3)==1 then
EEPSetSignal(10,3) , auf deutsch, wenn die Weiche 0003 auf Fahrt gestellt  
ist, dann schalte das Fahrstraßensignal S0010 auf Fahrstrasse #02.
Wir wollen aber, dass das Fahrstraßensignal S0010 nur geschaltet wird, wenn
ein Zug sich vor Signal 0011 befindet. Dies erreichen wir dadurch, dass wir
eine zweite Bedingung unserem Ausdruck if EEPGetSwitch(3)==1 then hinzufügen.
Dies geht in Lua mit dem englischen Wort and (in deutsch und).
Unsere zweite Bedingung ist, dass sich ein Zug vor Signal 0011 befindet, was
wir durch unsere Variable Signal11_besetzt feststellen können.
Ist der Wert der Variablen Signal11_besetzt==“nein“, steht dort kein Zug,
ist der Wert Signal11==“ja“, steht ein Zug dort und es soll geschaltet werden.
Unsere obige Bedingung lautet dann:

Bild

Beachtet auch, dass wir Lua noch mitteilen müssen, dass wir die Variable
Signal11_besetzt im Skript verwenden werden. Wir müssen ihr auch gleich
einen Wert zuweisen. Die Variable fügen wir wie im Bild weiter oben ein.

Bis jetzt haben wir nur die Bedingung, dass Weiche 3 auf Fahrt gestellt ist
und ein Zug sich vor Signal 0011 befindet ergänzt, aber noch nicht, wenn die Weiche 3 auf Abzweig
steht und ein Zug sich vor Signal 0011 befindet.
Wir müssen auch noch unseren else-Zweig ergänzen, der bis jetzt so aussieht:
Code: Alles auswählen
else
        EEPSetSignal(10,2)

Da oben bereits abgefragt wurde, ob die Weiche 3 auf Fahrt steht, dies aber
nicht zutrifft, geht die Abfrage zu dem else-Zweig und wir brauchen es
nicht erneut abfragen.
Folglich müssen wir nur noch abfragen, ob sich auch ein Zug vor Signal 0011
befindet, damit geschaltet werden kann.
Wir fügen also in den else-Zweig noch die Abfrage auf Signal11_besetzt ein.
Damit sieht jetzt unser komplettes Skript so aus, mal wieder in Farbe:

Bild

Nachdem die Schaltung der Fahrstrasse S0010 erfolgte, müssen wir noch
unsere Variable Signal11_besetzt auf „nein“ stellen. Dazu könnten wir nach
dem Signal 0011 einen weiteren Soundkontakt einsetzen, wir können aber auch,
oh Wunder, den schon vorhandenen Soundkontakt „missbrauchen“ und dort einen
weiteren Befehl eingeben, in dem wir ein Leerzeichen setzen und dann
Signal11_besetzt=“nein“ eintragen. Dies geht auch alles durch Benny´s Codeschnipsel.
Die Eingabe in den Kontaktpunkten ist jedoch auf 62 Zeichen begrenzt, wozu auch Leerzeichen gehören.

Bild

Damit haben wir unsere Variable wieder zurückgesetzt und das Signal 0011 wird nicht vorzeitig auf Fahrt gestellt.
Die Realität ist hergestellt und ENDE.
Bild
Grüße aus Wattenscheid von Jürgen

Ich habe EEP 7-13
Laptop: Medion i7-6500U CPU 2.5 - 3.1 GHz, 8 GB DDR3-Speicher, NV Geforce GTX 950M, 2 GB DDR3 Speicher, Win 10 64-Bit

Mein aktuelles Projekt: Erweiterung des Tauschmanagers bis EEP 13 (aktuelle Vesion 3.1.2.4) und ein bisschen Lua
Anleitung für den TM zum Download

Postkartenzähler für den TM: 354
OnlineRA1
Benutzeravatar
Team
Beiträge: 452
Registriert: 04.01.2014, 22:50
EEP-Version: 11/12

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo Jürgen,

ich werde es heute nicht mehr schaffen die Übung zu machen.
Danke aber schon mal hierfür.

Leider ist es schade das du erstmal nicht weiter machen möchtest was ich
allerding auch verstehe bei der Resonanz im Vergleich zu den Aufrufen von
deinem Tread. :(
Mit freundlichen EEP-Grüßen
aus dem wunderschönen Thüringen
René Adam (RA1)

Bild

[Intel(R) Core(TM) i7-2670QM CPU @2,60GHz; 16GB RAM Arbeitsspeicher; Windows 10 (64Bit); NVIDIA GeForce GT 560M 4GB Grafikspeicher]
[EEP 11, EEP 12; Tauschmangager]
Diesel_Fan
Benutzeravatar
Team
Beiträge: 1846
Registriert: 08.06.2013, 21:11
EEP-Version: 6; 9.1; 11.3; 12 Exp

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hi Jürgen,

vielen herzlichen Dank für das bisher Geschriebene in diesem Thread. Tut auch mir leid, dass die "geschriebene" Resonanz so gering ist.
Dennoch finde ich es Klasse, dass Du einen Anfängerkurs gestartet hast.
Auch wenn es bestimmt ein schwacher Trost für dich ist, auch bei Dieter seinen Schaltungslehrkursen war die geschriebene Resonanz teilweise gleich Null.
Wollen wir sehen, wie es sich entwickelt.
Mit freundlichen Grüßen Matthias, der Ostberliner, der zum Lipper wurde.

Laptop: Acer Aspire 7250G,
500GB Festplatte, 6GB RAM,
Prozessor: AMD E-450 APU, 1,65 GHz

EEP6.1 Classic

EEP9.1 Expert Patch 1

EEP 11.3

EEP 12.1
manutention57
Kein Avatar
Beiträge: 14
Registriert: 17.03.2013, 18:10
Wohnort: frankreich in der nahe saarbrucken
EEP-Version: 7,10,11

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo Jurgen,

Ich kann dir nur ein grosses Dank sagen, ich habe viel gelernt.

Gruss aus frankreich
Onlinejuergen18
Benutzeravatar
Team
Beiträge: 990
Registriert: 04.10.2013, 22:43
EEP-Version: 7-13

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Ich danke Euch für die aufmunternden Worte. Eigentlich will ich nur mal die anderen User etwas aufrütteln, damit diese auch mal Vorschläge machen.
Ich ziter mich mal selbst: "Sollten von Euch noch Vorschläge kommen, was wir noch schalten könnten, würde ich dies
natürlich mit Euch durchführen."

Ich kann mir nicht alles aus den Fingern saugen und nicht wissen, wo bei Euch der Schuh drückt, da für mich viele Sachen klar sind.
Wenn ich aber Beispiele von Euch erhalte, kann ich eher erkennen, was wo im Argen liegt.

In diesem Sinne, denkt mal drüber nach. ;)
Grüße aus Wattenscheid von Jürgen

Ich habe EEP 7-13
Laptop: Medion i7-6500U CPU 2.5 - 3.1 GHz, 8 GB DDR3-Speicher, NV Geforce GTX 950M, 2 GB DDR3 Speicher, Win 10 64-Bit

Mein aktuelles Projekt: Erweiterung des Tauschmanagers bis EEP 13 (aktuelle Vesion 3.1.2.4) und ein bisschen Lua
Anleitung für den TM zum Download

Postkartenzähler für den TM: 354
OnlineRA1
Benutzeravatar
Team
Beiträge: 452
Registriert: 04.01.2014, 22:50
EEP-Version: 11/12

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo Jürgen,

ich hätte noch was und zwar mein leider
leidiges Thema mit der Ausfahrt aus den Depots also die Zufallausfahrt den
mit den Grundeinstellungen der Depots geht es nicht wie ich mir das vorgestellt
hatte.

Allerdings habe ich dies nicht geschrieben da mir der Sprung vom jetzigen Stand
zu dieser Aufgabe etwas groß vorkommt. Aber das kannst du ja besser einschätzen.
Mit freundlichen EEP-Grüßen
aus dem wunderschönen Thüringen
René Adam (RA1)

Bild

[Intel(R) Core(TM) i7-2670QM CPU @2,60GHz; 16GB RAM Arbeitsspeicher; Windows 10 (64Bit); NVIDIA GeForce GT 560M 4GB Grafikspeicher]
[EEP 11, EEP 12; Tauschmangager]
DispoSaar
Kein Avatar
Beiträge: 17
Registriert: 15.10.2015, 14:12
EEP-Version: EEP 11

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo Jürgen

erstmal vielen dank für die vielen tollen erklärungen. Ich habe deine beschreibung über Google gefunden da ich nicht der riesen Programmierrer bin und auch nicht wirklich Lua verstanden habe. ich habe aber dank dir es geschafft meine Bahnhöfe über Fahrstrassen zum laufen zu bringen. Bzw ich habe ja nur eine Anlage ein bissel erstmal erweitert um dann später Landschaftlich noch aktiver zu werden.

Nun habe ich aber genau dein zuletzt beschriebenes Problem eine Fahrstrasse blockiert die andere wie bekomme ich es hin das sie neu schaltet ?


Vielen Dank

Andy
Onlinejuergen18
Benutzeravatar
Team
Beiträge: 990
Registriert: 04.10.2013, 22:43
EEP-Version: 7-13

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

@René,

würde ich auch zeigen, nur habe ich das entsprechende Plugin nicht. Ich kann es zwar in Lua erstellen, nur nicht testen und
von mir ungetestete Skripte veröffentliche ich hier nicht. Können wir aber heute Abend noch mal im Chat bequasseln.

@Andy
Herzlich Willkommen hier im Forum, ich hoffe, es gefällt Dir.

Zu Deinem Problem: Wenn sich Fahrstraßen gegenseitig blockieren, ist dies ja gewollt, damit kein Zusammenstoß erfolgt.
Um die Schaltung der Fahrstraße erneut auszuführen, musst Du einen KP nach der Ausfahrt setzen, wenn ein Zug die
komplette Fahrstraße verlassen hat. Dieser KP löst dann erneut die Abfrage aus und startet einen weiteren Zug, da mittlerweile
durch den ausfahrenden Zug eine Fahrstraße freigeworden sein muss. Ich weiß jetzt nicht, ob dies Dein Problem ist.
Besser wäre es, wenn Du einen Screenshot von der 2D-Ansicht hier reinstellst, die die Situation zeigt, die Du meinst,
dann kann ich Dir noch besser helfen.
Wie Du Bilder hochladen kannst, findest Du hier: http://www.das-eep-depot.de/index.php?p ... hfaq_id_32
Ansonsten hier noch mal nachfragen.
Grüße aus Wattenscheid von Jürgen

Ich habe EEP 7-13
Laptop: Medion i7-6500U CPU 2.5 - 3.1 GHz, 8 GB DDR3-Speicher, NV Geforce GTX 950M, 2 GB DDR3 Speicher, Win 10 64-Bit

Mein aktuelles Projekt: Erweiterung des Tauschmanagers bis EEP 13 (aktuelle Vesion 3.1.2.4) und ein bisschen Lua
Anleitung für den TM zum Download

Postkartenzähler für den TM: 354
tt-bahner
Benutzeravatar
Beiträge: 35
Registriert: 03.03.2011, 11:28
Wohnort: Quedlinburg
EEP-Version: 4-11

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo Jürgen
Ich habe mal mit" Besetzt"gebaut,nach Deinem Vorschlag.Ich stelle die Anlage mal rein.
Maql sehen ob es richtig ist.Gruss Eberhard 
Dateianhänge
attachment Versuch Besetzt.7z
(37.09 KiB) 94-mal heruntergeladen
Intel(R) Core(TM) i5 - 4460,12 GB - Ram, NVIDIA Gforce GTX 745 4GB
Win.10 64 Bit
EEP4-12
Onlinejuergen18
Benutzeravatar
Team
Beiträge: 990
Registriert: 04.10.2013, 22:43
EEP-Version: 7-13

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo Eberhard,

die rar-Datei beinhaltet wieder keine bmp-Dateien, da kann man schlecht schauen, dafür hast Du die dds-Dateien dabeigepackt,
obwohl die nicht erforderlich sind.

Folgende 7 Dateien müssen bei einer Anlage dabei sein:
...anl3
...lua
..B.bmp
..F.bmp
..H.bmp
..S.bmp
..T.bmp

Dann kann ich sie mir auch anschauen.
Grüße aus Wattenscheid von Jürgen

Ich habe EEP 7-13
Laptop: Medion i7-6500U CPU 2.5 - 3.1 GHz, 8 GB DDR3-Speicher, NV Geforce GTX 950M, 2 GB DDR3 Speicher, Win 10 64-Bit

Mein aktuelles Projekt: Erweiterung des Tauschmanagers bis EEP 13 (aktuelle Vesion 3.1.2.4) und ein bisschen Lua
Anleitung für den TM zum Download

Postkartenzähler für den TM: 354
tt-bahner
Benutzeravatar
Beiträge: 35
Registriert: 03.03.2011, 11:28
Wohnort: Quedlinburg
EEP-Version: 4-11

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Entschuldigt bitte, aber ich lerne es noch. Gruß Eberhard.

Edit:

Hallo Jürgen
Jetzt noch mal die Anlage,und die Frage dazu,ob man in der Art einen 6-8 Gleisigen Durchgangsbahnhof steuern kann?
Gruss Eberhard
Dateianhänge
attachment Versuch x.zip
(22.6 KiB) 111-mal heruntergeladen
Intel(R) Core(TM) i5 - 4460,12 GB - Ram, NVIDIA Gforce GTX 745 4GB
Win.10 64 Bit
EEP4-12
Zuletzt geändert von Diesel_Fan am 17.10.2015, 07:10, insgesamt 1-mal geändert.
Bitte nach Möglichkeit nicht 2 mal hintereinander Posten. Aus 2 mach 1.
Onlinejuergen18
Benutzeravatar
Team
Beiträge: 990
Registriert: 04.10.2013, 22:43
EEP-Version: 7-13

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo Eberhard,

hast Du Deine Demo mal bei Dir laufen lassen, denn bei mir schalten die HP02-Blocksignale nicht. Warum weiß ich nicht.

Das Lua-Skript ist in Ordnung, aber einen 6-8-glsg. Bahnhof kannst Du damit nicht schalten, da dann mehrere Weichen
vorhanden sind, die eventuell auf ihre Stellung abgefragt werden müssen, in diesem Beispiel ist es nur eine Weiche,
deswegen klappt es auch.

Noch eine Bitte von mir. Wenn Du eine Demoanlage baust, dann halte diese möglichst klein, was das Oval betrifft,
ansonsten muss man "ewig" warten, bis die Loks wieder den Bahnhof erreichen.
Grüße aus Wattenscheid von Jürgen

Ich habe EEP 7-13
Laptop: Medion i7-6500U CPU 2.5 - 3.1 GHz, 8 GB DDR3-Speicher, NV Geforce GTX 950M, 2 GB DDR3 Speicher, Win 10 64-Bit

Mein aktuelles Projekt: Erweiterung des Tauschmanagers bis EEP 13 (aktuelle Vesion 3.1.2.4) und ein bisschen Lua
Anleitung für den TM zum Download

Postkartenzähler für den TM: 354
tt-bahner
Benutzeravatar
Beiträge: 35
Registriert: 03.03.2011, 11:28
Wohnort: Quedlinburg
EEP-Version: 4-11

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Danke für die Tipps
Anlage läuft bei mir,musste aber die Einträge in den KP neu schreiben.Gleicher Eintrag,aber wollte auch nicht.Hängt vielleicht damit zusammen,das ich die Anlage immer erst auf den Desktop kopiere.Ansonsten aus meinen Anlagen und EEP11 starten haut Alles hin.Gruss Eberhard
Intel(R) Core(TM) i5 - 4460,12 GB - Ram, NVIDIA Gforce GTX 745 4GB
Win.10 64 Bit
EEP4-12
Onlinejuergen18
Benutzeravatar
Team
Beiträge: 990
Registriert: 04.10.2013, 22:43
EEP-Version: 7-13

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Teil 11
Hallo, ich bin es nur. Hat alles etwas länger gedauert, da ich privat einiges um die Ohren
habe. Dafür habe ich diesmal eine Demoanlage beigefügt, damit wir alle auf dem gleichen Stand sind.
Ladet mal die Anlage und Ihr werdet sehen, dass nichts neues vorhanden ist.
Ich habe die Blockstrecken auch wieder mit normalen Kontaktpunkten (KPs) geschaltet.
Jetzt öffnet mal das Skript und schaut Euch die
function Einfahrt_Schalte_Fahrstrassensignal_S0011() an.
Huch, da fehlt ja was. Genau, die Abfrage der Weichenstellung bei der Einfahrt,
da es spätestens ab einem 4-gleisgen Bahnhof schwierig wird, die Abfrage durchzuführen,
weil wir es nicht mehr mit nur einer Weiche zu tun haben. Über die neue, einfachere function suchen sich die Züge jetzt
selbst ein freies Gleis im Bahnhof. Wir schalten die vier Fahrstrassen des Fahrstraßensignals S0011
der Reihe nach durch und wenn ein Gleis frei ist, wird dieses für die Einfahrt benutzt. Sollten
mehrere Gleise frei sein, wird das letzte, freie Gleis ausgewählt.
Dann haben wir im Skript eine neue function Ausfahrt_Schalte_Fahrstrassensignale().
Dies ist nur das Grundgerüst, wir werden es in diesem Teil noch weiter ausbauen.
Wer die alte Methode, die ich in Variante 3 bei der damaligen Aufgabe gezeigt habe, benutzen
will, kann jetzt hier aufhören und muss nur die damalige Variante, dass der einfahrende Zug
den ausfahrenden Zug mit normalen KPs freigibt einbauen.
Neu ist auch der Soundkontaktpunkt für die Ausfahrt im Bahnhof im oberen Gleis,
direkt nach der 1. Blockstrecke rechts, der diese neue function auslöst.
Die Anlage ist so lauffähig, aber Ihr werdet sehen, dass nur immer
die gleichen 2 Züge fahren und die anderen sich nur das Treiben anschauen.
Warum, weil immer die Ausfahrt aus Gleis 1 freigegeben wird, obwohl sich dort kein Zug befindet.
Wie können wir dies lösen? Schaut Euch mal die Einfahrt an, da hatten wir bereits das gleiche
Problem. Genau, wir brauchen Besetztmelder, damit nur die Ausfahrfahrstraße geschaltet wird,
bei der sich auch vor dem Haltesignal ein Zug befindet. Wir könnten jetzt in unser Skript am
Anfang 4 weitere Variablen einfügen:
Code: Alles auswählen
Signal15_besetzt="nein"

Gleis1_besetzt=“ja“
Gleis2_besetzt=“ja“
Gleis3_besetzt=“ja“
Gleis4_besetzt=“ja“

Warum jetzt „ja“, weil in allen 4 Gleisen die Züge bereits vor den Ausfahrsignalen stehen.
Dann die entsprechenden KPs setzen, in die bei der Ausfahrt die Gleise1-4_besetzt=“nein“
eingetragen werden und bei der Einfahrt der Züge wieder mit KPs die Gleise1-4_besetzt=
„ja“ stellen.
Im Skript müssten wir jetzt die function Ausfahrt_Schalte_Fahrstrassensignale() noch ändern.
Würde dann so aussehen:
Code: Alles auswählen
function Ausfahrt_Schalte_Fahrstrassensignale()
    if Gleis1_besetzt==“ja“ then –- Wenn ein Zug vor Signal 0007 steht   
        EEPSetSignal(19,2)       –- dann schalte FS S0019 auf FS #01
    end
    if Gleis2_besetzt==“ja“ then –- sonst, wenn ein Zug vor Signal 0008 steht
        EEPSetSignal(20,2)           -- dann schalte FS 0020 auf FS #01
    end
    if Gleis3_besetzt==“ja“ then –- wie oben
        EEPSetSignal(21,2)
    end
    if Gleis4_besetzt==“ja“ then –- wie oben
        EEPSetSignal(22,2)
    end
end

Was haben wir dadurch erreicht, dass jetzt auch der Zug aus Gleis 2 ausfährt und im günstigsten
Fall auch der Zug aus Gleis 3 mal raus fährt. Der Zug in Gleis 4 wird nie raus fahren.
Also hätte es auch nicht viel gebracht, da wir keine Reihenfolge der Ausfahrt der Züge haben.

Das werden wir jetzt durch den Einsatz einer Tabelle ändern. Der Vorteil dabei ist, egal wie viele
Bahnhofsgleise wir später in der Anlage haben, sie werden alle durch diese Tabelle gesteuert,
ohne weiteren Aufwand, ohne Besetztmelder, wir können sogar bestimmen, in welcher
Reihenfolge die Züge den Bahnhof wieder verlassen sollen.
Hört sich doch gut an, ist es auch. Aber vorher wieder etwas Theorie.

Was ist eine Tabelle. Diese können wir uns wie eine Kommode vorstellen, in der sich mehrere
Schubladen befinden. In jede Schublade werden wir aber nur ein Teil rein packen. Mehr ist es nicht.
Für die Bezeichnung der Tabelle können wir uns einen deutschen, aussagekräftigen Namen
ausdenken, wie bei den functions oder Variablen auch. Wie lege ich sie an?
Code: Alles auswählen
Getraenke_Kommode={„Wein“,“Bier“,“Mineralwasser“}

Ihr seht, kennen wir fast alles schon. Aussagekräftige Bezeichnung für die Tabelle:
Getraenke_Kommode
Schublade 1 = „Wein“
Schublade 2 = „Bier“
Schublade 3 =“Mineralwasser“
Der einzige Unterschied zu einer Variablen ist, dass wir mehrere Zuweisungen vornehmen
können, deswegen auch Tabelle und dass diese Zuweisungen immer in geschweiften Klammern {}
stehen müssen. Auf unsere Demo umgewandelt, legen wir eine leere Tabelle mit folgendem
Namen an: Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen={}
Jetzt schauen wir in der Demo nach, vor welchen Ausfahrfahrstrassen sich Züge befinden.
Beim Start der Demo vor allen 4 Fahrstrassen, also tragen wir die IDs in unsere Tabelle ein, ohne
führende Nullen und ohne S.
Dann sieht unsere Tabelle so aus:
Code: Alles auswählen
--Kommas und geschweifte Klammern nicht vergessen und Zahlen werden nicht in
-- Anführungszeichen eingeschlossen
Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen={19,20,21,22}

Mehr brauchen wir nicht. Jetzt müssen wir noch drei functions anlegen. Zuerst die function,
die die Ausfahrfahrstrassen in die Tabelle einträgt. Dazu schauen wir uns an, wie man dies
in Lua machen kann. Der Befehl dazu lautet: table.insert (Tabellenname,An_welcher_Position, Was_einfuegen)
Den Befehl table.insert = in Tabelle einfügen muss man in einer Lua-Dokumentation raus suchen,
was ich hiermit für Euch getan habe. Was der Befehl leistet, könnt Ihr an den Werten in der
Klammer erkennen, habe ich bereits für Euch übersetzt.
Auf unser Skript umgeschrieben, muss der Befehl so lauten:
Code: Alles auswählen
table.insert( Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen,ID_Fahrstrassensignal)

Heißt: Füge in die Tabelle  Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen die ID der
Fahrstrasse für die Ausfahrt ein.
Unsere function bezeichnen wir mit in_Bahnhofsliste_eintragen() und übergeben dann in
EEP im Soundkontaktpunkt die ID der Ausfahrfahrstrasse, die wir auch in unserer function
in Klammern noch eintragen. Die komplette function sieht dann so aus:

Bild

Ey, hömma Jürgen, da haste abba einen Fehler drinne, da fehlt doch der Wert An_welcher_Position.
Oben tuste von 3 Werten schreiben und dann haste nur noch 2 Werte inne table-Befehl drinne.
Stimmt, Ährwin, muss ich noch erklären.
Mit dem Wert  An_welcher_Position kann ich festlegen, an welcher Stelle in der Tabelle die
Fahrstrassen-ID eingetragen wird. Wenn der Zug immer als erster raus fahren soll trage ich ein:
table.insert( Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen, 1, ID_Fahrstrassensignal)
Lasse ich die 1 in der Mitte weg, wird die ID immer als letzte in die Tabelle eingetragen,
was wir in unserer Demo auch so haben wollen.
Ey, hömma Jürgen, gezz tu ich dat sogar begreifen, warum nich gleich so.
Entschuldigung, Ährwin.
Kommen wir zu den Soundkontaktpunkten. In jedes Gleis wird kurz
vor dem Ausfahrsignal einer gesetzt und dort bei Lua Funktion folgendes eingetragen:
in_Bahnhofsliste_eintragen(19), in_Bahnhofsliste_eintragen(20) usw., siehe Bild.

Bild

Die Züge habe ich nur ausgeblendet, damit man besser die Soundkontaktpunkte sehen kann.
Damit werden die IDS der Ausfahrfahrstrassensignale in unsere Tabelle 
Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen eingetragen.
Jetzt müssen wir sie nur wieder löschen, wenn die Züge die Bahnhofsgleise verlassen.
Wir legen eine neue function mit dem Namen in_Bahnhofsliste_loeschen an.
Wir suchen uns den entsprechenden Befehl raus, habe ich natürlich schon für Euch gemacht.
Er lautet: table.remove (Tabellenname,die_Position_die_geloescht_werden_soll)
Erklärt sich von selbst. Auf unser Skript angewandt und in eine neue function eingebaut,
sieht es dann so aus:

Bild

Wir müssen hier keine ID übergeben, da wir immer den 1. Eintrag löschen, also die Schublade 1
der Tabelle leeren. Nun müssten wir auch für das Löschen 4 Soundkontaktpunkte anlegen,
aber wir haben ja schon welche direkt nach dem Ausfahrsignal, also können wir uns die auch
sparen, müssen nur die function dort eintragen. Das sieht dann bei allen 4 KPs so aus:

Bild

Fehlt noch die 3. function, um die Züge aus dem Bahnhof zu starten.
Eine passende Bezeichnung haben wir ja schon, auch die dazu gehörige
function Ausfahrt_Schalte_Fahrstrassensignale(). Diese müssen wir nur noch umschreiben,
damit immer der 1. Zug aus der Tabelle  Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen
gestartet wird. Wir benötigen nur einmal den Befehl EEPSetSignal, da wir immer den 1. Eintrag aus der Tabelle nehmen.
Unsere 1. Schublade der Tabelle wird mit [1] bezeichnet. Entsprechend würden weitere Schubladen mit [2], [3] usw. benannt.
Auf unsere function bezogen, müssen wir dann schreiben:
EEPSetSignal(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[1],2)
Sieht komisch aus, ist aber leicht zu begreifen. In der Klammer steht als erster Wert
normaler weise die Signal-ID, von dem Signal, was wir schalten wollen. Diese ersetzen wir
nur durch die 1. Schublade unserer Tabelle Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[1].
Der zweite Wert für die Ausfahrfahrstrasse bleibt immer 2, da alle Ausfahrfahrstraßen nur eine
Fahrstrasse #01 beinhalten, die wir aber mit 2 ansprechen müssen, da die 1 für
Fahrstrasse auflösen vorbehalten ist.
Die Schubladen in einfachen Tabellen werden immer mit eckigen Klammern und nur mit der Nummer der entsprechenden Schublade aufgerufen. Würde ich also den Inhalt von Schublade 4 in unserer Tabelle benötigen, müsste ich Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[4] eingeben, wäre in unserem Fall das Fahrstraßensignal S0022, wenn wir uns noch mal die Zuweisung am Anfang unseres Skriptes anschauen:
Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen={19,20,21,22}
Damit ist unser Skript fertig:
Code: Alles auswählen
clearlog()

print("Demo zu Teil 11")

setmetatable(_ENV,{__index=function(s,k) local n=k:gsub("%.",","); local p=load(n);if p then local f=function(z) local s=Zugname;Zugname=z;p();Zugname=s end;_ENV[k]=f;_ENV[n]=f;return f end;return nil end})

Signal16_besetzt="nein" -- Besetztmelder für Einfahrtsignal 0016

--[[Hier werden alle Ausfahr-FS der Züge eingetragen,
    die sich im Bahnhof befinden.
    Kommas und geschweifte Klammern nicht vergessen und Zahlen werden nicht in
    Anführungszeichen eingeschlossen]]
Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen={19,20,21,22}

function EEPMain()
    return 1
end

function Einfahrt_Schalte_Fahrstrassensignal_S0011()
    if Signal16_besetzt=="ja" then -- Nur wenn ein Zug vor Signal 0016 steht, wird geschaltet
        EEPSetSignal(11,2) -- Alle Fahrstrassen von Einfahrtsfahrstraße S0011
        EEPSetSignal(11,3) -- durchschalten, es wird das letzte vorgefundene frei Gleis
        EEPSetSignal(11,4) -- im Bahnhof ausgewählt.
        EEPSetSignal(11,5)
    end
end

-- Hier wird der Reihe nach immer das erste Ausfahrfahrstrassensignal gestartet
-- Wird so aufgerufen: EEPSetSignal(Tabellenname[Schublade1], Fahrstrasse #01)
-- Bis auf den Tabellennamen werden die anderen Werte nur durch Zahlen aufgerufen
function Ausfahrt_Schalte_Fahrstrassensignale()
    EEPSetSignal(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[1],2)
end

-- Hier wird bei der Einfahrt eines Zuges in das Bahnhofsgleis immer die ID der
-- Ausfahrfahrstrasse ohne Nullen und ohne S eingetragen.
-- Die Übergabe der ID erfolgt in EEP im Soundkontakt
function in_Bahnhofsliste_eintragen(ID_Fahrstrassensignal)
    table.insert(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen,ID_Fahrstrassensignal)
end

-- Hier wird die ID des Ausfahrfahrstrassensignals wieder gelöscht, wenn der Zug den
-- Bahnhof verlässt
function in_Bahnhofsliste_loeschen()
    -- Es wird immer der 1. Eintrag gelöscht, alle anderen rücken automatisch nach
    table.remove (Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen,1)
end

Wenn Ihr mal schaut, was man nur an reinem Lua-Code benötigt, ist dieses nicht viel
und wir können ihn auch für mehr als 4 Bahnhofsgleise verwenden.

Bild

Setzen wir jetzt noch einen zusätzlichen Soundkontakt nach Blockstrecke 3 oben links in unsere
Demoanlage ein, damit mehr Züge im Umlauf sind und wir können testen, ob alles läuft.
Bild
Dateianhänge
attachment Teil11_1_5Zuege.zip
(24.72 KiB) 143-mal heruntergeladen
Grüße aus Wattenscheid von Jürgen

Ich habe EEP 7-13
Laptop: Medion i7-6500U CPU 2.5 - 3.1 GHz, 8 GB DDR3-Speicher, NV Geforce GTX 950M, 2 GB DDR3 Speicher, Win 10 64-Bit

Mein aktuelles Projekt: Erweiterung des Tauschmanagers bis EEP 13 (aktuelle Vesion 3.1.2.4) und ein bisschen Lua
Anleitung für den TM zum Download

Postkartenzähler für den TM: 354
OnlineRA1
Benutzeravatar
Team
Beiträge: 452
Registriert: 04.01.2014, 22:50
EEP-Version: 11/12

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo Jürgen,

schön das es weiter geht.
Das es etwas gedauert hat macht doch nix den Privates geht nun
mal vor und wird auch so bleiben.

So dann will ich mal meine Anlage erweitern und weiter lernen.
Mit freundlichen EEP-Grüßen
aus dem wunderschönen Thüringen
René Adam (RA1)

Bild

[Intel(R) Core(TM) i7-2670QM CPU @2,60GHz; 16GB RAM Arbeitsspeicher; Windows 10 (64Bit); NVIDIA GeForce GT 560M 4GB Grafikspeicher]
[EEP 11, EEP 12; Tauschmangager]
tt-bahner
Benutzeravatar
Beiträge: 35
Registriert: 03.03.2011, 11:28
Wohnort: Quedlinburg
EEP-Version: 4-11

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo
Ich freue mich ebenfalls das es weitergeht.Gruss Eberhard
Intel(R) Core(TM) i5 - 4460,12 GB - Ram, NVIDIA Gforce GTX 745 4GB
Win.10 64 Bit
EEP4-12
Onlinejuergen18
Benutzeravatar
Team
Beiträge: 990
Registriert: 04.10.2013, 22:43
EEP-Version: 7-13

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hat mich gerade René drauf aufmerksam gemacht, in der Demo ist ein Schreibfehler.
Statt Signal15_besetzt muss es heißen: Signal16_besetzt
Danke, René. (HANDSHAKE)
Grüße aus Wattenscheid von Jürgen

Ich habe EEP 7-13
Laptop: Medion i7-6500U CPU 2.5 - 3.1 GHz, 8 GB DDR3-Speicher, NV Geforce GTX 950M, 2 GB DDR3 Speicher, Win 10 64-Bit

Mein aktuelles Projekt: Erweiterung des Tauschmanagers bis EEP 13 (aktuelle Vesion 3.1.2.4) und ein bisschen Lua
Anleitung für den TM zum Download

Postkartenzähler für den TM: 354
OnlineRA1
Benutzeravatar
Team
Beiträge: 452
Registriert: 04.01.2014, 22:50
EEP-Version: 11/12

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo Jürgen,

immer gerne. Gar nicht so einfach diesmal mal sehen wann ich es fertig bekomme
und meine Lösung hochladen kann,

Hoffe ja heute noch.
Mit freundlichen EEP-Grüßen
aus dem wunderschönen Thüringen
René Adam (RA1)

Bild

[Intel(R) Core(TM) i7-2670QM CPU @2,60GHz; 16GB RAM Arbeitsspeicher; Windows 10 (64Bit); NVIDIA GeForce GT 560M 4GB Grafikspeicher]
[EEP 11, EEP 12; Tauschmangager]
OnlineRA1
Benutzeravatar
Team
Beiträge: 452
Registriert: 04.01.2014, 22:50
EEP-Version: 11/12

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo Jürgen,

ich versuche gerade die Hausaufgaben fertig zu machen allerdings gibt es ein Problem.

Wenn ich die Soundkontakte lege und die functionen für in liste eintragen und löschen eingebe
bekomme ich immer die Meldung das die function nicht gefunden wurde.

Das problem tritt auf wenn ich meine Namen nutze und auch wenn ich den Listenname und functionsname
von dir nutze.

Hier mal meinen Code vielleicht siehst du ja so den Fehler.

Code: Alles auswählen
clearlog()

setmetatable(_ENV,{__index=function(s,k) local n=k:gsub("%.",","); local p=load(n);if p then local f=function(z) local s=Zugname;Zugname=z;p();Zugname=s end;_ENV[k]=f;_ENV[n]=f;return f end;return nil end})

--Besetztmelder Einfahsignal Signal0016
Signal16_besetzt="nein"

Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen={19,20,21,22}

print("Hey let's start, EEP Version is: ", EEPVer)

function EEPMain()
    return 1
end


--[[***Test Einfahrt und Ausfahrt nur schalten wenn Zug am Signal steht.]]

--[[***Einfahrt suchen bis freies Gleis gefunden wurde***]]
--Einfahrt am Signal16
function Einfahrt_Signal16()
    if Signal16_besetzt=="ja" then
        EEPSetSignal(11,2)
        EEPSetSignal(11,3)
        EEPSetSignal(11,4)
        EEPSetSignal(11,5)
    end
end

-- in Liste eintragen
function in_Bahnhofsliste_eintragen(ID_Fahrstrassensignal)
    table.insert(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen,ID_Fahrstrassensignal)
end

--Einfahrt_Signal16_besetzt
function Signal16_besetzt()
    Signal16_besetzt="ja"
end


--[[***Ausfahrt***]]
--Ausfahrtsignale schalten
function Ausfahrtsignale_schalten()
    EEPSetSignal(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[1],2)
end

-- aus Liste streichen
function aus_Besetzte_Ausfahrtsignale_streichen(ID_Fahrstrassensignal)
    table.remove(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen,1)
end

Mit freundlichen EEP-Grüßen
aus dem wunderschönen Thüringen
René Adam (RA1)

Bild

[Intel(R) Core(TM) i7-2670QM CPU @2,60GHz; 16GB RAM Arbeitsspeicher; Windows 10 (64Bit); NVIDIA GeForce GT 560M 4GB Grafikspeicher]
[EEP 11, EEP 12; Tauschmangager]
Onlinejuergen18
Benutzeravatar
Team
Beiträge: 990
Registriert: 04.10.2013, 22:43
EEP-Version: 7-13

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo René,

Du hast Benny´s Codeschnipsel verwandt, dann muss man einmal in den 3D-Bildschirm schalten,
bevor man in die KPs eine function einträgt, dann klappt es. Hatte ich damals zwar geschrieben,
vergisst man aber schnell wieder.

Dann würde mich noch interessieren, warum Du diese function eingefügt hast:
Code: Alles auswählen
function Signal16_besetzt()
    Signal16_besetzt="ja"
end

Wenn Du den Codeschnipsel benutzt, brauchst Du nur im KP eintragen: Signal16_besetzt="ja".
Die function benötigst Du nicht.
Grüße aus Wattenscheid von Jürgen

Ich habe EEP 7-13
Laptop: Medion i7-6500U CPU 2.5 - 3.1 GHz, 8 GB DDR3-Speicher, NV Geforce GTX 950M, 2 GB DDR3 Speicher, Win 10 64-Bit

Mein aktuelles Projekt: Erweiterung des Tauschmanagers bis EEP 13 (aktuelle Vesion 3.1.2.4) und ein bisschen Lua
Anleitung für den TM zum Download

Postkartenzähler für den TM: 354
OnlineRA1
Benutzeravatar
Team
Beiträge: 452
Registriert: 04.01.2014, 22:50
EEP-Version: 11/12

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo Jürgen,

genau das war es mit dem 3D.
Da habe ich nicht mehr dran gedacht.

Die function ist drin da es ja nicht geklappt hatte aber nun geht es ja.
So kann ich die wieder löschen.
Mit freundlichen EEP-Grüßen
aus dem wunderschönen Thüringen
René Adam (RA1)

Bild

[Intel(R) Core(TM) i7-2670QM CPU @2,60GHz; 16GB RAM Arbeitsspeicher; Windows 10 (64Bit); NVIDIA GeForce GT 560M 4GB Grafikspeicher]
[EEP 11, EEP 12; Tauschmangager]
Onlinejuergen18
Benutzeravatar
Team
Beiträge: 990
Registriert: 04.10.2013, 22:43
EEP-Version: 7-13

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Ok. Aber was mir jetzt noch aufgefallen ist. Du benutzt eine function mit der Bezeichnung:
aus_Besetzte_Ausfahrtsignale_streichen. Dort ist das B von Besetzt groß geschrieben, also
musst Du es immer groß schreiben, da Lua da strikt zwischen Groß- und Kleinschreibung
unterscheidet. Die function aus_besetzte_Ausfahrtsignale_streichen (also mit kleinem b) wäre z. B. eine andere
function für Lua. Hatte ich auch mal was zu geschrieben, wollte ich nur noch mal drauf hinweisen.
Grüße aus Wattenscheid von Jürgen

Ich habe EEP 7-13
Laptop: Medion i7-6500U CPU 2.5 - 3.1 GHz, 8 GB DDR3-Speicher, NV Geforce GTX 950M, 2 GB DDR3 Speicher, Win 10 64-Bit

Mein aktuelles Projekt: Erweiterung des Tauschmanagers bis EEP 13 (aktuelle Vesion 3.1.2.4) und ein bisschen Lua
Anleitung für den TM zum Download

Postkartenzähler für den TM: 354
Onlinejuergen18
Benutzeravatar
Team
Beiträge: 990
Registriert: 04.10.2013, 22:43
EEP-Version: 7-13

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Teil 12
Ab diesem Beitrag wollen wir uns mit Lua unterhalten.
Ey, hömma Jürgen, brauch ich dafür ein Mikro?
Nein, Ährwin, denn eigentlich erzählt Lua uns nur was in schriftlicher Form über das
Ereignisfenster. Habt Ihr bestimmt schon mal gesehen, wenn Ihr eine neue Anlage
angelegt habt und das Ereignisfenster von Lua einschaltet, dass, wenn Ihr in den 3D-Modus
wechselt, plötzlich im Ereignisfenster angezeigt wird:
"Hey let's start, EEP Version is: 11.3"
Danach werden sofort Zahlen angezeigt, die nie aufhören und man kann kaum die obige Zeile noch lesen.
Lustig finde ich auch, dass die Meldung in Englisch erscheint, obwohl wir ja eine
deutsche Version haben. Aber egal. Zuerst löschen wir mal die Anzeige der unendlichen Zahlen,
in dem wir im Lua-Skript die Zeile print("Counter: ",I) in der EEPMain entfernen, da diese
für die Anzeige verantwortlich ist.

Ey, hömma Jürgen, da haste mal zu geschrieben, in die EEPMain gehört nichts rein,
aber da steht jetzt noch „I=I+1“.
Genau, Ährwin, hau wech die Sch...
Ey, hömma Jürgen, gezz benimm dich abba hier.
Mach ich und weil wir gerade dabei sind, löschen wir auch noch die 1. Zeile in unserem
Skript „I=0“, die brauchen wir auch nicht.
Ey, hömma Jürgen und wat is mit dat englische im Skript?
Das lassen wir erst mal stehen, ändern es aber gleich mal ab. Dazu muss man wissen, dass der
Befehl „print“, (zu deutsch drucken, in Lua besser verständlich als ausgeben), alles im Ereignisfenster ausgibt,
was wir dahinter in runde Klammern setzen.
Wir drucken praktisch direkt in das Ereignisfenster von Lua.
Es ist eine sehr gute Möglichkeit, um z. B. Fehler besser aufzuspüren.
Wir ändern jetzt die Zeile
print("Hey let's start, EEP Version is: ", EEPVer) um in
print("Ährwin hat die  EEP Version ", EEPVer), speichern nicht vergessen (Skript neu laden)
und erhalten dann beim Umschalten in den 3D-Modus folgende Ausgabe im Ereignisfenster:

Bild

Ey, hömma Jürgen, dat hasse aber fein gemacht mit meinem Namen.
Ich kann auch nett sein, Ährwin.
Was bedeutet nun der Begriff „EEPVer“. Ein Auszug aus der Dokumentation:

Bild

Diese wurde bei EEP in Lua eingefügt und liest die EEP-Version aus.
Halten wir also fest. Mit print können wir selbst eingegebenen Text, den Inhalt von Variablen und Tabellen
ausgeben, wobei der Text in „Anführungszeichen“ stehen muss, die Variable, wie hier
EEPVer nicht. Die einzelnen Werte in der runden Klammer nach print werden immer durch
Kommas getrennt, wie z. B.: print(„Dies ist Text“, Variable1, „noch mehr Text“, Variable2)

Wichtig!!! Befehle, die nicht in der EEPMain oder in einer function stehen, werden beim
Start der Anlage, wenn wir in das 3D-Fenster schalten, nur einmal im Ereignisfenster ausgegeben, dann nicht mehr.


Starten wir die Anlage erneut, werden sie wieder nur einmal ausgegeben.
Man könnte damit beim Anlagenstart Rollis starten, Signale/Weichen stellen, im Lokschuppen den
Rauch von Dampfloks abstellen usw... Aber alles nur einmal. Wir können es auch nicht mehr
mit KPs aufrufen.

Was machen wir jetzt damit. Wir können Informationen für den User der Anlage damit im
laufenden Betrieb einblenden oder, für mich das Wichtigste, Fehler im Lua-Skript ausfindig
machen.
Speichert mal die Demoanlage unter einem neuen Namen wenn 2 Züge den Bahnhof
verlassen haben. Ladet dann die abgespeicherte Anlage neu und schaut Euch an, was passiert.
Ey, hömma Jürgen, die Züge werden nich mehr in der Reihenfolge gestartet, sondern die
Ausfahrt der Züge fängt wieder bei Gleis 1 an.
Richtig, Ährwin, aber warum ist das so?
Jetzt nutzen wir mal unseren neu gelernten print-Befehl. Setzt mal folgenden Skript-Code
Code: Alles auswählen
clearlog() -- Komplette Anzeige im Ereignisfenster löschen
print("Besetzte FS der Züge im Bahnhof:")
    -- Schleife für die Anzeige der Fahrstrassen im Bhf,
    -- die auch mit Zügen besetzt sind
    for Zaehler=1,#Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen do
        print(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[Zaehler])
    end

in die beiden functions in_Bahnhofsliste_eintragen(ID_Fahrstrassensignal) und
in_Bahnhofsliste_loeschen() jeweils am Ende vor dem jeweiligen end ein.

Erklären werde ich ihn gleich, jetzt sollt Ihr erst mal unseren Fehler erkennen.
Skript speichern, Anlage speichern und neu laden, in das 3D-Fenster umschalten und das
Ereignisfenster anschauen, ich hoffe, Ihr habt es über die Eigenschaften von EEP eingeschaltet.

Bild

Es kann bei Euch auch anders aussehen, kommt drauf an, wann Ihr die Anlage abgespeichert habt.
Ich habe dieses Bild gewählt, da man den Fehler dort sofort erkennt.
Im Bahnhof befinden sich 3 Züge, also dürften auch nur die Fahrstraßen-IDs von diesen
3 Zügen in unserer Tabelle auftauchen (19, 21, 22), tatsächlich sind es aber 5, wobei sogar noch die ID 19
doppelt eingetragen ist. Lua übermittelt beim Neustart einer zwischendurch gespeicherten
Anlage nicht die Werte, die beim Speichern der Anlage vorhanden waren, sondern nimmt die
Grundwerte aus unserem Skript. Damit sind für Lua wieder alle 4 Gleise besetzt und der gerade
eingefahrene Zug auf Gleis 1 wird erneut eingetragen, damit sind es 5 Schubladen in unserer
Kommode. Der Fehler liegt also beim Speichern bzw. Laden der Anlage. Vor Lua haben wir
dafür zusätzliche Signale/Besetztmelder auf der Anlage postiert, die automatisch in der Anlage
mitgespeichert wurden. Jetzt müssen wir es Lua sagen.
Ey, hömma Lua, speicher mal ab.
Hi, hi, so einfach geht es nicht, Ährwin, ein paar Skriptzeilen sind dafür schon erforderlich.

Aber jetzt bin ich Euch noch die Erklärung zu dem Skript-Code, den ich Euch diesmal vorab
gegeben habe schuldig. Teilweise habe ich ihn schon kommentiert. Entscheidend ist hier die
neue Schleife für die Anzeige aller Ausfahrfahrstraßen-IDs der Züge, die sich noch im Bahnhof
befinden.
Wir könnten auch schreiben:
Code: Alles auswählen
-- print(Tabellenname[Schublade1])
print(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[1])
print(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[2])
print(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[3])
print(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[4])

Wir wissen ja, für jedes Gleis wird die Fahrstraßen-ID eingetragen, also haben wir maximal 4 Einträge,
deswegen die Zahlen nach dem Tabellennamen[1] ...
Wenn wir uns dann das Ereignisfenster in 3D ansehen, wenn ein Zug aus- oder einfährt,
erhalten wir eine Fehlermeldung:

Bild

Klar, in meinem Beispiel befinden sich nur noch 2 Züge im Bahnhof, deswegen werden die
beiden letzten Werte mit der Fehlermeldung nil: .... dargestellt. Dies können wir aber umgehen,
in dem wir in Lua mit einer Schleife arbeiten.
Schleifen verwendet man immer dann, wenn man eine oder mehrere Anweisungen mehr als einmal direkt
hintereinander ausführen möchte. In unserem Fall ideal, da ja 4 mal das gleiche ausgeführt
werden soll. Der Befehl für die Schleife lautet:
for Zaehler=Anfangswert,Endwert do
-- hier steht das, was mehrmals ausgeführt werden soll
end – end nicht vergessen, damit Lua weiß, dass hier die Schleife zu Ende ist.

Der Anfangswert ist eine Zahl, womit der Zaehler beginnen soll, meistens 1.
Der Endwert ist eine Zahl, bei dem die Schleife beendet werden soll.
do bedeutet: mach was, nämlich das, was in den nächsten Zeilen bis zum end folgt.
Am Besten testet man das an Hand einer neuen, leeren Anlage. Setzt im Lua-Editor vor den
Befehl --print("Counter: ",I) in der EEPMain zwei Bindestriche, dadurch wird die
unendliche Anzeige der Zahlen im Lua-Ereignisfenster unterdrückt.
Schreibt unter der EEPMain folgendes:
Code: Alles auswählen
for Zaehler=1,5 do
    print(Zaehler)
end

Schaltet dann in den 3D-Modus um und Ihr erhaltet im Ereignisfenster diese Anzeige:

Bild

Ihr seht sehr gut, dass die Schleife 5 mal durchlaufen wird, wobei der Zaehler bei jedem
Durchlauf automatisch um 1 erhöht wird, bis der 5. Durchlauf erreicht ist.
Angezeigt wird der Wert des Zaehlers durch den Ausdruck: print(Zaehler)
Wir können auch folgenden Code in der Schleife angeben:
Code: Alles auswählen
for Zaehler=5,9 do
    print(Zaehler)
end


Bild

Auch hier wird der Zaehler bei jedem Durchlauf um 1 erhöht, fängt aber erst bei 5 an und
endet bei neun.
Dies können wir jetzt auf unser Beispiel anwenden.
Wir hatten ja zuvor geschrieben:
print(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[1])
print(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[2])
print(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[3])
print(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[4])

Also wird 4 mal fast das Gleiche ausgegeben. Es ändert sich nur die Zahl der Schublade.
Ändern wir dies jetzt mal wie folgt um:
Code: Alles auswählen
for Zaehler=1,4 do
    print(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[Zaehler])
end

Ey, hömma Jürgen, du has uns mal verklickert, dass inne eckige Klammer immer ne Zahl
reinkommt.
Stimmt, Ährwin, ist auch in gewisser Weise so, denn Lua ersetzt für uns [Zaehler] durch die Zahl,
die [Zaehler] in jedem Durchlauf hat.
1. Durchlauf: Zaehler = 1, also heißt unser print-Ausdruck
    print(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[1])
2. Durchlauf: Zaehler = 2, also heißt unser print-Ausdruck
print(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[2])
      usw...
Sieht also intern nicht anders aus, als wir es vorher 4 mal von Hand eingegeben haben.
Testen wir dies jetzt einmal, erhalten wir aber immer noch bei der Ausgabe unsere Fehlermeldung:

Bild

Klar, weil wir noch immer 4 Schubladen anzeigen lassen, obwohl nur zwei belegt sind, heißt,
nur 2 Züge sind im Bahnhof und unsere Liste enthält auch nur 2 Fahrstraßen-IDs.
Auch dafür hat Lua eine Lösung parat, oh wie fein.
Das Zeichen # (nennt man Raute) bei unserer Bahnhofsliste voran gestellt, ergibt immer die
Anzahl der sich im Moment in unserer Liste befindenden Einträge, in meinem Beispiel also 2.
Setzen wir jetzt für den Endwert unsere Listenbezeichnung mit der vorangestellten # Raute
ein, weiß Lua, dass es jetzt nur zwei Einträge anzeigen muss und wir erhalten auch keine
Fehlermeldung mehr.
Unsere Schleife lautet dann, wie ich es Euch schon weiter oben vorgegeben hatte:
Code: Alles auswählen
for Zaehler=1,#Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen do
        print(Bahnhofsliste_der_besetzten_Ausfahrfahrstrassen[Zaehler])
end

Getestet hatten wir sie ja auch schon, nur die Erklärung dazu fehlte noch.

Kommen wir jetzt zum Speichern und Laden der Variablen und Tabellen, damit wir keine
Fehlfunktionen beim Start einer gespeicherten Anlage mehr haben, wie wir es oben
bereits gemerkt hatten.
Ey, hömma Jürgen, dat reicht gezz, dat muss ich erstma verdauen.
Hast Recht, Ährwin, machen wir für heute Schluß. Aber macht Euch mal Gedanken darüber,
wo wir diese neu gelernte Schleife in unserem bereits vorhandenem Skript noch einsetzen
können bzw. welche Lua-Zeilen wir noch durch diese Schleife ersetzen können.
Ein Tipp von mir: Einfahrfahrstraße
Bild
Grüße aus Wattenscheid von Jürgen

Ich habe EEP 7-13
Laptop: Medion i7-6500U CPU 2.5 - 3.1 GHz, 8 GB DDR3-Speicher, NV Geforce GTX 950M, 2 GB DDR3 Speicher, Win 10 64-Bit

Mein aktuelles Projekt: Erweiterung des Tauschmanagers bis EEP 13 (aktuelle Vesion 3.1.2.4) und ein bisschen Lua
Anleitung für den TM zum Download

Postkartenzähler für den TM: 354
Diesel_Fan
Benutzeravatar
Team
Beiträge: 1846
Registriert: 08.06.2013, 21:11
EEP-Version: 6; 9.1; 11.3; 12 Exp

AW: Ey, hömma, wie geht dat mit Fahrstraße und Lua

Hallo Jürgen,

jetzt muß ich doch mal wieder was Schreiben: Hut ab und mache bitte weiter so.
Mit freundlichen Grüßen Matthias, der Ostberliner, der zum Lipper wurde.

Laptop: Acer Aspire 7250G,
500GB Festplatte, 6GB RAM,
Prozessor: AMD E-450 APU, 1,65 GHz

EEP6.1 Classic

EEP9.1 Expert Patch 1

EEP 11.3

EEP 12.1

Ähnliche Themen

Was geht da am Besten für Fahrplan bei s-bahn
in Allgemeines von KingAgli mit 1 Antworten
EEP12 geht nimmer
in Allgemeines von Tonio1044 mit 2 Antworten
Zurück nach 7 geht wohl
in Allgemeines von Gast mit 3 Antworten