Jump to content

Objektzugriff per Name


Michel

Empfohlene Beiträge

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 von Michel
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 zu diesem Kommentar
Auf anderen Seiten teilen

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 von Michel
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...