Michel Geschrieben 17. Februar 2020 Geschrieben 17. Februar 2020 Ich habe auf meiner Anlage 4 Signale mit folgenden Namen aufgebaut: "S_BE_L_01" \ "S_BE_L_02" \ "S_BE_L_03" \ "S_BE_L_04" nun möchte ich über eine Variable "t" = Zahl , die von 1-4 für die letzte Ziffer steht auf dieses Signal-Objekt zugreifen. Nur das funktioniert leider nicht. 1.) s="S_BE_0" s ist ein String, mit dem Beginn des Signal-Namens 2.) t=1 3.) Signal=s..t hier baue ich den String für den Signal-Namen zusammen, z.B. Signal = "S_BE_L_01" 4.) print ("Signal="..Signal) hier gebe ich den Signalnamen aus 5.) Signal.state=0 Dieser Befehl soll das Signal auf Halt stellen $("S_BE_L_01").state = 0 mit der Zeile funktioniert die Steuerung, aber ich möchte dies programmtechnisch lösen Hat jemand eine Idee? Vielen Dank Michel Zusatz: ich habe es auch schon mit anderen Varianten für Zeile 5 versucht: $(Signal).state=0 $("S_BE_L_0"..t).State=0 es kommt oft die Meldung. [18:35:10] Skriptfehler (51): attempt to index a string value (global 'Signal')
Neo Geschrieben 17. Februar 2020 Geschrieben 17. Februar 2020 Hallo Michel, verwende die Funktion layout:getEntityByName(), um Objekte über einen Namen zu adressieren: local signal = layout:getEntityByName("Signal" .. t) Viele Grüße, Neo
Michel Geschrieben 17. Februar 2020 Autor Geschrieben 17. Februar 2020 Hallo Neo, danke erst Mal für das Verschieben in den Thread. hier mal mein Code. das betreffende Signal habe ich zum Testen mal mit dem Namen "Signal1" umbenannt. t=1 local signal = layout:getEntityByName("Signal"..t) print ("einzustellendes Signal= " .. signal) signal.state=1 Beim Print Befehl kommt schon der Fehler: [21:43:11] Skriptfehler (55): attempt to concatenate a table value (local 'signal') muss ich die Signale in einer Tabelle definieren, oder was mache ich hier falsch?
Neo Geschrieben 17. Februar 2020 Geschrieben 17. Februar 2020 Hallo Michel, vor 11 Minuten schrieb Michel: print ("einzustellendes Signal= " .. signal) "signal" ist ein Objekt (in Lua eine Tabelle), das nicht in einen String konvertiert werden kann. Vermutlich wolltest du folgendes erreichen: print ("einzustellendes Signal= " .. signal.name) Viele Grüße, Neo
Timba Geschrieben 17. Februar 2020 Geschrieben 17. Februar 2020 Hallo @Michel verzeih, wenn ich mich ungefragt in deine Angelegenheit einmische, aber machst du es dir nicht gerade unnötig schwer? Ich meine, wo du doch offenbar weißt, welches Signal du schalten willst (da du ja die Nummer hast) kannst du doch einfacher die Signale einmal in einer Tabelle auflisten Signale = {$("S_BE_L_01"), $("S_BE_L_02"), $("S_BE_L_03"), $("S_BE_L_04)} und dann direkt darauf zugreifen: Signale[t].state = 0 Das geht ggf. sogar ganz ohne Lua. Gruß Timba
Michel Geschrieben 18. Februar 2020 Autor Geschrieben 18. Februar 2020 vor 8 Stunden schrieb Neo: Hallo Michel, "signal" ist ein Objekt (in Lua eine Tabelle), das nicht in einen String konvertiert werden kann. Vermutlich wolltest du folgendes erreichen: print ("einzustellendes Signal= " .. signal.name) Viele Grüße, Neo Guten Morgen Neo, vielen Dank für deine Tips. Jetzt funktioniert es
Michel Geschrieben 18. Februar 2020 Autor Geschrieben 18. Februar 2020 vor 7 Stunden schrieb Timba: Hallo @Michel verzeih, wenn ich mich ungefragt in deine Angelegenheit einmische, aber machst du es dir nicht gerade unnötig schwer? Ich meine, wo du doch offenbar weißt, welches Signal du schalten willst (da du ja die Nummer hast) kannst du doch einfacher die Signale einmal in einer Tabelle auflisten Signale = {$("S_BE_L_01"), $("S_BE_L_02"), $("S_BE_L_03"), $("S_BE_L_04)} und dann direkt darauf zugreifen: Signale[t].state = 0 Das geht ggf. sogar ganz ohne Lua. Gruß Timba Hallo Timba, kein Problem, wenn sich andere zu dem Thema äußern. Bin für jede Hilfe dankbar. Dein Vorschlag würde aber auch gehen, denke ich. Meine Situation ist folgende: Ich habe für einen Bahnhof 4 Einfahrtsgleise BE_01-BE_04, die über Gleiskontakte (ebenfalls mit einer Variable für die Nr.) angesprochen werden, wenn ein Zug einfährt. Dazu für jedes Gleis ein Signal. Wenn ein Zug über eines der Gleiskontakte fährt, ermittle ich die Nr. des Gleis, damit ich die anderen Signale auf Halt stellen kann. Dies alles wird dann in einer For-Schleife abgefangen. Und steuere somit dann weitere Ereignisse, die ebenfalls mit der Nr. angesprochen werden. Wenn ich das fertig habe, poste ich es mal.
Michel Geschrieben 18. Februar 2020 Autor Geschrieben 18. Februar 2020 (bearbeitet) wie funktioniert das mit Ereignissen? Ereignis= Weiche_für_ZG01_von_L local ZielWeiche = layout:getEntityByName("Weiche_für_ZG01_von_L") ZielWeiche.enabled = true [07:52:40] Skriptfehler (52): attempt to index a nil value (local 'ZielWeiche') so funktioniert es: $("Weiche_für_ZG01_von_L").enabled = true möchte aber nicht alles in einer Tabelle ablegen. Wenn weitere Ereignisse hinzukommen sollen, muss ich die Tabelle erweitern. Bearbeitet 18. Februar 2020 von Michel
Timba Geschrieben 18. Februar 2020 Geschrieben 18. Februar 2020 Hi Michel, ich bin mir ziemlich sicher, dass du mit dem Befehl "layout:getEntityByName()" nur Objekte finden kannst und keine Ereignisse. Deshalb bleibt deine Variable "ZielWeiche" leer und entsprechend der Skriptfehler. Im unteren Beispiel hast du das Ereignis direkt eingegeben und damit kannst du es auch enabeln oder disabeln. Gruß Timba
Michel Geschrieben 18. Februar 2020 Autor Geschrieben 18. Februar 2020 Hallo Timba, ich denke auch, dass ich mit getEntityByName nur Objekte finden kann. Vielleicht gibt es ja einen Befehl der das gleiche für Ereignisse liefert.
Michel Geschrieben 18. Februar 2020 Autor Geschrieben 18. Februar 2020 (bearbeitet) Ich hab´s rausbekommen, bzw. in einem Thread gelesen. Da hat Neo schon die Lösung gepostet. Thread: Liste mit benutzerdefinierten Ereignissen? danke Ereignisse geht wohl doch nur über eine Liste zum aufrufen. @Timba: Du hattes aber auch recht mit deiner Liste Aber dass ich das über eine Ereignis-Variable steuern kann war mir nicht klar. Ich wollte nur in meinem Script nicht jedes einzelne Ereignis in eine Tabelle eintragen. Würde dann etwas unübersichtlich aussehen. Nochmals vielen Dank für die Unterstützung. Jetzt kann ich mal weiter machen mit meinen Versuchen. Bearbeitet 18. Februar 2020 von Michel
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen.
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden