Jump to content

Objektzugriff per Name


Michel
 Share

Recommended Posts

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')
 

Link to comment
Share on other sites

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?
 

 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 :)

 

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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.

 

 

Edited by Michel
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Edited by Michel
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...