Lua: ZZA zu bestimmten Zeitpunkt schalten

Achte bitte darauf, dass Du mit deinem Thema bzw. mit deiner Frage im richtigen Bereich bist.
Die Bereiche sind: Einstellungen im Forum, EEP aktuell ab EEP7 , Splines, Rollmaterialien, Immobilien, Landschaftselemente, Signale und Schaltung, Anlagenvorstellungen, Schnappschüsse Konstrukteure, EEP Treffen , Laberecke, Online - Handbuch EEP Vielen Dank für die Unterstützung das Forum übersichtlich zu halten.
Bilder/Fotos aus dem Internet sind nur als Link gestattet. Eigene Fotos, also Fotos aus dem realen Leben, sind erstens mit Eigenes Bild als Quellenangabe zu kennzeichnen und zweitens nur als Dateianhang im Beitrag zulässig. Bilder ohne Quellenangaben und Bilder dessen Quelle das Internet wie z. B. Google ist, werden gelöscht.
  • Hallo zusammen,

    ich verzweifle gerade an der Automatisierung meiner Anlage, bei der ich auch etwas Lua brauche.


    Ziel soll es sein, dass zu bestimmten Zeitpunkten die ZZAs entsprechend eingeblendet werden.

    Ich wollte dabei aber etwas anders vorgehen, als das in der Demoanlage von DB2 der Fall ist, weil ich nicht von der Zugausfahrt ausgehen möchte, sondern von der Zeit.

    Ich würde dafür gerne eine ganz simple If-Schaltung nehmen, bin aber bisher immer gescheitert, EEP hat überhaupt nicht reagiert.

    Ich habe mir das so vorgestellt:

    If EEP-Zeit xx:xx:xx then

    veränderlicher Text1: xxxxxx

    veränderlicher Text2: xxxxxx

    usw.

    usw.

    end

    Ich bekomme die EEP-Zeit dabei einfach nicht in den Griff.

    Ich weiß nicht, in welchem Format die Zeit mit EEPTime eingegeben werden muss und eine Kombination von

    Code
    EEPTimeH and EEPTimeM and EEPTimeS 

    war erfolglos, eben weil EEP nix machte.


    Ich hatte das versuchsweise mit Lampen probiert, also dann mit EEPStructureSetLight, aber wie gesagt es funktionierte nicht, sie blieben aus.

    Hat da jemand einen Code der in dieser Situation funktioniert oder weiß, was ich hier verkehrt mache?

    Ich würde mich über Hilfe sehr freuen, um die Anlage endlich fertig zu kriegen. :bb_1::ba_1:

    Nachtrag: Ich habe auch das Beispiel aus dem Lua Handbuch zu EEPTimeS nachgestellt. Funktioniert auch nicht. Die angesprochene Ampel streikt, sie schaltet bei 15s weder auf grün, noch bei 45s auf rot.

    Grüße, Nils


    ACER ASPIRE V17 Nitro Black Edition (VN7-793G-7868), Intel i7-7700HQ, NVIDIA GeForce GTX 1060 6GB, 16 GB RAM, 256 GB SSD + 1 TB HDD (WIN 10)

    EEP 15 & EEP 16 - Meine EEP-Videos bei YouTube


    - Am Rande des Wahnsinns hat man die besten Aussichten. -

    Einmal editiert, zuletzt von der senftenberger (16. September 2019 um 17:59)

  • Lua-Handbuch Seite 68 mal angeguckt?

    fragt Manfred

    Hier geht es zu --> Kjus EEP.

    Meine freien Modelle, Tools und Tutorials gibt es hier.

    Der Autorenerlös meiner Modelle geht zu 100% an ECPAT Deutschland e.V., Arbeitsgemeinschaft zum Schutz der Kinder vor sexueller Ausbeutung.

    Mitglied des Kontinuums, Reisender durch Zeit und Raum, zur Zeit Gast auf dem dritten Planeten eines unbedeutenden Sonnensystems.

  • Hallo Nils der senftenberger

    du hast dich vielleicht nur irgendwie mit der Syntax "vertan":

    :aq_1:

    eep_gogo ( RG3 )

    -------------------------

    Intel i3-540 3,2GHz 8GB, RAID10, HD 6570 1GB, W7/64 Prof., EEP 6-6.1, 10-17.0, HN13+15/16+15/16DEV, TM, "Schiefe Ebene 6 + 8", "Bahn2000", "Faszination der St. Gotthard-Nordrampe"

  • Versuch es mit Gemütlichkeit --->

    if EEPTime == alteZeit + 50 then

    Gruß Dieter

    1.MSI 17,3" Intel® i7-8750H 16GB SSD + HDD GeForce® GTX 1060 »GV72 8RE-013DE (00179E-013)

    2. PC:Win10/64, i7-7700K, 4.2 GHz, GPU GTX 1070/8 GB, 16 GB RAM(DDR4), SSD 960 Evo 500GB, Ilyama PL2490
    EEP 6.1 - EEP 15 E, HomeNos 15

    Ich wünsche mir eine freizügige Script-Sprache und eine leistungsfähige Grafik Engine für EEP.
    Ein Leben ohne EEP ist möglich, aber sinnlos, so ganz sicher bin ich mir nicht mehr.

    "mal was ganz Einfaches" "rundum sorglos Paket"

    Parrys YouTube Videos
    https://www.twitch.tv/parry_36/

  • Hallo Manfred,

    habe ich, habe mich ja auch daran orientiert.

    Ich habe mich nun am Beispiel von eep_gogo (RG3) orientiert und das mit Dieters Beispiel erweitert.

    Jetzt hat es mal funktioniert.

    Ich habe den Code zum ersten Mal in die EEPMain() vor den Counter-Code geschrieben.

    Davor hatte ich es nach dem Counter-Code getippt, da hatte Lua gemeckert, dass wohl ein "end" fehlt.

    Außerdem hatte ich es auch nach der EEPMain() geschrieben, da hatte EEP nicht reagiert.

    Gibt es dort Regelungen oder Festlegungen, dass dieses Beispiel nur in der EEPMain() funktioniert oder wo könnte da schon wieder der Haken sein?

    Vielen Dank, schon mal an Euch! :bb_1:

    Grüße, Nils


    ACER ASPIRE V17 Nitro Black Edition (VN7-793G-7868), Intel i7-7700HQ, NVIDIA GeForce GTX 1060 6GB, 16 GB RAM, 256 GB SSD + 1 TB HDD (WIN 10)

    EEP 15 & EEP 16 - Meine EEP-Videos bei YouTube


    - Am Rande des Wahnsinns hat man die besten Aussichten. -

  • hatte ich es auch nach der EEPMain() geschrieben, da hatte EEP nicht reagiert.

    Wie wir alle wissen, arbeitet EEP das Anlagenscript hübsch der Reihe von oben nach unten ab.

    Erst wenn das gesamte Script gelesen wurde, wird die Arbeit mit Lua begonnen.

    Daher ist es egal wo eine Funktion die in EEPMain() getriggert werden soll, enthalten ist.

    Anders bei Funktionen die aus anderen Adressen Werte benötigen, die müssen immer vorher

    vorhanden sein.

    Gruß Dieter

    1.MSI 17,3" Intel® i7-8750H 16GB SSD + HDD GeForce® GTX 1060 »GV72 8RE-013DE (00179E-013)

    2. PC:Win10/64, i7-7700K, 4.2 GHz, GPU GTX 1070/8 GB, 16 GB RAM(DDR4), SSD 960 Evo 500GB, Ilyama PL2490
    EEP 6.1 - EEP 15 E, HomeNos 15

    Ich wünsche mir eine freizügige Script-Sprache und eine leistungsfähige Grafik Engine für EEP.
    Ein Leben ohne EEP ist möglich, aber sinnlos, so ganz sicher bin ich mir nicht mehr.

    "mal was ganz Einfaches" "rundum sorglos Paket"

    Parrys YouTube Videos
    https://www.twitch.tv/parry_36/

  • Gibt es dort Regelungen oder Festlegungen, dass dieses Beispiel nur in der EEPMain() funktioniert oder wo könnte da schon wieder der Haken sein?

    Das Beispiel funktioniert auch außerhalb der EEPMain. Zumindest dann, wenn du das Skript genau um 10 Uhr 10 und 10 Sekunden neu lädst. Denn der Code außerhalb der EEPMain (oder anderer Funktionen) wird genau dann einmal ausgeführt, wenn das Skript neu geladen wird (oder beim ersten Wechsel in die 3D-Ansicht nach dem Laden der Anlage).

    Überlege dir nochmal genau, was da im Code steht, übersetzt auf Deutsch:

    Falls der Stundenzeiger auf 10 und der Minutenzeiger auf 10 und der Sekundenzeiger auf 10 steht, führe die folgenden Anweisungen aus.

    Beachte das Wort am Anfang: "Falls", nicht "Sobald". Wenn die Bedingung nicht erfüllt ist, werden die Anweisungen auch nicht ausgeführt.

    Um trotzdem ein "Sobald" zu erreichen (das ist ja das, was du willst), kannst du den entsprechenden Code in die EEPMain schreiben. Dann wird laufend (bei jedem EEPMain-Durchlauf) geprüft, ob es gerade 10:10:10 ist. Und wenn es soweit ist, werden die entsprechenden Anweisungen ausgeführt.

    Viele Grüße

    Benny

  • Vielen Dank euch beiden und insbesondere an dich, Benny für die echt klasse anschauliche Erklärung. Das macht das Verstehen doch deutlich leichter! :be_1:

    Ich bin beim Probieren jetzt wieder auf eines meiner Probleme gestoßen und zwar das Lua bzw. EEP behauptet, dass ein 'end' fehlt.

    Das Programm behauptet ein 'end' fehlt, sobald ich mehrere Funktionen in die EEPMain() schreiben möchte. Dabei befindet sich am Ende des Quelltextes todsicher das zugehörige 'end'.

    Ich kann mir hier beim besten Willen nicht weiterhelfen. Wie kann ich das Problemchen beheben, bzw. wo muss da dann noch ein 'end' rein, obwohl ja alle Funktionen ordnungsgemäß geschlossen sind (habe ich mehrfach überprüft)

    Grüße, Nils


    ACER ASPIRE V17 Nitro Black Edition (VN7-793G-7868), Intel i7-7700HQ, NVIDIA GeForce GTX 1060 6GB, 16 GB RAM, 256 GB SSD + 1 TB HDD (WIN 10)

    EEP 15 & EEP 16 - Meine EEP-Videos bei YouTube


    - Am Rande des Wahnsinns hat man die besten Aussichten. -

  • Es ist schlechter Progammierstil, wenn man Funktionen in der EEPMain() deklariert.

    Funktionen() kannst du allerdings in die EEPMain() einfügen wie du willst.

    Dann hast du auch keinen Ärger mit "end"

    Gruß Dieter

    1.MSI 17,3" Intel® i7-8750H 16GB SSD + HDD GeForce® GTX 1060 »GV72 8RE-013DE (00179E-013)

    2. PC:Win10/64, i7-7700K, 4.2 GHz, GPU GTX 1070/8 GB, 16 GB RAM(DDR4), SSD 960 Evo 500GB, Ilyama PL2490
    EEP 6.1 - EEP 15 E, HomeNos 15

    Ich wünsche mir eine freizügige Script-Sprache und eine leistungsfähige Grafik Engine für EEP.
    Ein Leben ohne EEP ist möglich, aber sinnlos, so ganz sicher bin ich mir nicht mehr.

    "mal was ganz Einfaches" "rundum sorglos Paket"

    Parrys YouTube Videos
    https://www.twitch.tv/parry_36/

  • Ohne deinen Code zu sehen, kann ich dir auch nicht sagen, wo ein end fehlt. Ich bin mir aber sicher, dass eins fehlt, sonst würde EEP (bzw. Lua) das nicht behaupten :ae_1:

    Bedenke, dass nicht nur Funktionen mit einem end beendet werden müssen, sondern auch andere "Blöcke" wie if, for und while.

    Viele Grüße

    Benny

  • Ok, danke euch beiden. Dann werde ich mich morgen gleich Mal da ran schmeißen. Habe den Rechner für heute schon runtergefahren, da bekomme ich keinen Code mehr runter.

    Außerdem werde ich mal versuchen die Funktionen außerhalb zu bestimmen und dann nur in die EEPMain() einzufügen. Mal schauen ob das klappt.

    Grüße, Nils


    ACER ASPIRE V17 Nitro Black Edition (VN7-793G-7868), Intel i7-7700HQ, NVIDIA GeForce GTX 1060 6GB, 16 GB RAM, 256 GB SSD + 1 TB HDD (WIN 10)

    EEP 15 & EEP 16 - Meine EEP-Videos bei YouTube


    - Am Rande des Wahnsinns hat man die besten Aussichten. -

  • Außerdem werde ich mal versuchen die Funktionen außerhalb zu bestimmen und dann nur in die EEPMain() einzufügen. Mal schauen ob das klappt.

    Du musst den Unterschied zwischen einer Funktionsdefinition und einem Funktionsaufruf lernen. Erst, wenn du das begriffen hast, verstehst du was davon wohin gehört und warum.

    Es reicht nicht, dass du "mal versuchst" ob was klappt. Weil dir eventuelle Glückstreffer nicht zu einem besseren Verständnis helfen.

    Die Funktionsdefinition ist die Liste der DInge, die zu tun sind:

    Prüf die Uhrzeit, schreib die Texte in die ZZA usw.

    Diese Liste muss nur einmal erstellt werden.

    Der Funktionsaufruf ist der Moment, in dem die Liste abgearbeitet werden soll. Und weil die Uhrzeit immer wieder geprüft werden muss (um den richtigen Moment zu erwIschen), muss dieser Funktionsaufruf ständig wiederholt werden.

  • Dann wird laufend (bei jedem EEPMain-Durchlauf) geprüft, ob es gerade 10:10:10 ist. Und wenn es soweit ist, werden die entsprechenden Anweisungen ausgeführt.

    .. und zwar so lange, wie es auch 10:10:10: ist. Mit anderen Worten ....

    Erschrick nicht, wenn die Funktion mehrfach aufgerufen wird. Das mag in Deinem Beispiel keine Rolle spielen. In anderen Situationen aber durchaus.

    Kleine Denksportaufgabe. (Nicht für jetzt. Jetzt hast Du mit den schon beschriebenen Problemen genug zu tun. Aber für später.)

    - Wie lässt sich ein Mehhrfachaufruf verhindern?

    Liebe Mitleser.

    Bitte nicht gleich beantworten. Nils kann das selbst. Vielleicht nicht jetzt ... Aber später.

    :aq_1:Gruss Jürg

    Ach ja.

    Alles was ich hier behaupte beruht auf Annahmen. Überprüft habe ich das nicht. Ich würde aber damit rechnen.

    Es ist müssig, dauernd den Weltuntergang heraufzubeschwören. Man muss auch aktiv etwas dafür tun. :bn_1:

  • Guten Morgen,

    ich habe mich gleich mal frisch ans Werk gemacht und mal wieder fleißig in der Testanlage getippt.

    Ergebnis: Ich konnte den Fehler mit dem fehlenden "end" reproduzieren und habe dafür jetzt auch zwei Bildchen:

    Hier ist nur eine Code-Schnipsel drin, damit ich Straßeneinmündungen realistisch darstellen kann (Gleisbesetztfunktionen, abgelehnt an Tutorial_55). EEP bzw. Lua lässt den Code so durchgehen, er funktioniert auch.

    Hier habe ich jetzt noch den Teil mit der Zeit reingeschrieben. Ganz primitiv soll nur ein Signal geschalten werden, ist ja auch nur zum Testen. Und da kommt eben der Fehler. Die function in Linie 14 ist die EEPMain(). Diese ist meiner Ansicht nach aber eindeutig geschlossen. :as_1:

    Und das ist dann auch die Stelle, wo ich nicht weiß, wo dieses 'end' fehlen soll.

    Weiterhin habe ich mich aber an Dieters ( Parry36) Ratschlag orientiert und die Funktionen außerhalb deklariert um sie dann in die Main() einzufügen.

    @Goetz , indem Punkt brauchst du nicht besorgt sein. Ich habe schon einiges an Informatik durch. Ich kenne die Grundlagen rund um If-Schaltungen, Schleifen und Funktionen gut und kenne den Unterschied zwischen Aufruf und Deklaration. Mein Problem liegt eher darin, den Anfang zu finden um etwas am Ende erfolgreich auf die Beine zu stellen. Und ich denke generell zu "menschlich", statt "logisch".

    Hierzu ein Beispiel:

    Ich habe wieder eine ganz simple Funktion definiert um sie dann von der Main() aus zu starten.

    Funktioniert einwandfrei!

    Ich denke, das werde ich wohl bei allen ZZAs so machen. Das Ergebnis wird in der Tat wohl eine deutlich übersichtlichere EEPMain() sein. Nocheinmal danke für den Hinweis, Dieter.

    P.S. Dennoch würde ich immer noch gerne wissen, wo das 'end' im zweiten Bild fehlt, auch wenn ich so wohl nicht mehr vorgehen werde.

    P.S.2. Jürg, das ist aber schon wieder eine ziemliche Aufgabe. Ich denke, sie wird wohl recht einfach sein, aber hier kommt schon wieder mein Hauptproblem: Ich brauche den Anfang. Ich werde mich mal damit befassen, vielleicht komme ich auf einen grünen Zweig. :bq_1:

    Grüße, Nils


    ACER ASPIRE V17 Nitro Black Edition (VN7-793G-7868), Intel i7-7700HQ, NVIDIA GeForce GTX 1060 6GB, 16 GB RAM, 256 GB SSD + 1 TB HDD (WIN 10)

    EEP 15 & EEP 16 - Meine EEP-Videos bei YouTube


    - Am Rande des Wahnsinns hat man die besten Aussichten. -

  • Dennoch würde ich immer noch gerne wissen, wo das 'end' im zweiten Bild fehlt

    Im zweiten Bild steckt folgender Fehler:

    Mit return wird die Funktion verlassen.

    Alles, was darunter (ab Zeile 22) steht, wird nicht mehr ausgeführt.

    Das ist der Grund, warum Lua ein end vor dem folgenden if in Zeile 23 erwartet.


    Ich kenne die Grundlagen ...

    Na klar.

    Sorry :ae_1:

  • Vielen Dank, Goetz, das wars!

    Also hinter die Ohren schreiben: return muss ganz ans Ende einer jeden function, sonst gibt es Probleme.

    Jetzt klappte es auch:

    Allerdings ist es doch trotzdem sinnvoller, die ganzen Funktionen außerhalb zu definieren, wie Dieter es vorgeschlagen hat?

    Von wegen Übersichtlichkeit, Programmierstil, usw.

    Grüße, Nils


    ACER ASPIRE V17 Nitro Black Edition (VN7-793G-7868), Intel i7-7700HQ, NVIDIA GeForce GTX 1060 6GB, 16 GB RAM, 256 GB SSD + 1 TB HDD (WIN 10)

    EEP 15 & EEP 16 - Meine EEP-Videos bei YouTube


    - Am Rande des Wahnsinns hat man die besten Aussichten. -

  • return muss ganz ans Ende einer jeden function ...

    oder ans Ende einer Subroutine in dieser Funktion.

    Und das ist nicht nur in Lua so.

    Sondern auch in C, C++, C#, Java, Python ...

    Allerdings ist es doch trotzdem sinnvoller, die ganzen Funktionen außerhalb zu definieren

    Definitiv, ja!

  • oder ans Ende einer Subroutine in dieser Funktion.

    Wobei die Gefahr besteht, dass es niemals ein return gibt.

    In Goetz' Beispiel funktioniert es zwar, aber wenn man es sauber programmieren will sollte es so aussehen:

    Hier geht es zu --> Kjus EEP.

    Meine freien Modelle, Tools und Tutorials gibt es hier.

    Der Autorenerlös meiner Modelle geht zu 100% an ECPAT Deutschland e.V., Arbeitsgemeinschaft zum Schutz der Kinder vor sexueller Ausbeutung.

    Mitglied des Kontinuums, Reisender durch Zeit und Raum, zur Zeit Gast auf dem dritten Planeten eines unbedeutenden Sonnensystems.

  • Hallo Alle zusammen,

    wäre es nicht sinnvoller dazu auch mal ein Modul zu bringen für

    Dieters ( Parry36) ruS - Paket ?

    Denn Eine Zug-Ziel-Anzeige und Schaltung sollte ja durch die

    angegebene Zeit funktionieren - oder ?LG aus Sachsen

    Dietmar

    HP envy 360 Convertible 15, i7-- 8550U 1,8 GHz, 8 GB), 250 GB SSD (für EEP 16,1), 1 TB HDD, Windows 10

    ASUS VE278 und ASUS VS247