jloos Geschrieben 30. Dezember 2023 Geschrieben 30. Dezember 2023 Hallo, ich möchte eine IF Entscheidung, die diese Bedingungen enthält. if (Fahrzeug steht auf ( GKT1 oder GKT2 oder GKT3 )) und (Fahrstraße ist aktiv ( FS1 oder FS2 oder FS3 )) then code ausführen end Ich habe es aber nicht hinbekommen, da komme ich an meine LUA Grenzen. Kann mir bitte jemand helfen, danke Gruß Jürgen
Roter Brummer Geschrieben 30. Dezember 2023 Geschrieben 30. Dezember 2023 Ich bin zwar kein Lua-Experte, aber so müsste es gehen. if (#layout:getVehiclesOn($("GKT1")) > 0) or (#layout:getVehiclesOn($("GKT2")) > 0) or (#layout:getVehiclesOn($("GKT3")) > 0) then if ($("FS1").active) or ($("FS2").active) or ($("FS3").active) then $("Taster").state = ($("Taster").state + 1) % $("Taster").stateCount end end HG Brummi
Phrontistes Geschrieben 30. Dezember 2023 Geschrieben 30. Dezember 2023 oder als Einzeiler (xx = jeweiliges Objekt) if ((#layout:getVehiclesOn($("xx")) > 0) or (#layout:getVehiclesOn($("xx")) > 0) or (#layout:getVehiclesOn($("xx")) > 0)) and (($("xx").active)) or ($("xx").active) or ($("xx").active)) then end
jloos Geschrieben 30. Dezember 2023 Autor Geschrieben 30. Dezember 2023 Vielen Dank für die Hilfe, ich wünsche alles Gute für das Neue Jahr. Gruß Jürgen
Goetz Geschrieben 30. Dezember 2023 Geschrieben 30. Dezember 2023 Für bessere Lesbarkeit würde ich den Vorschlag von @Roter Brummer ein wenig umwandeln: local aufGK = #layout:getVehiclesOn($("GKT1")) > 0 or #layout:getVehiclesOn($("GKT2")) > 0 or #layout:getVehiclesOn($("GKT3")) > 0 local aktiveFS = $("FS1").active or $("FS2").active or $("FS3").active if aufGK and aktiveFS then -- Action!!! end
jloos Geschrieben 30. Dezember 2023 Autor Geschrieben 30. Dezember 2023 vor 8 Stunden schrieb Goetz: if aufGK and aktiveFS Danke @Goetz, funktioniert, aber ich habe nicht verstanden warum. Was für Variablen sind aufGK und aktiveFS? Gruß Jürgen
HaNNoveraNer Geschrieben 30. Dezember 2023 Geschrieben 30. Dezember 2023 In aufGK wird ermittelt, ob etwas auf den definierten Gleiskontakten steht. In aktiveFS wird ermittelt, ob eine der definierten Fahrstraßen aktiv ist. Diese Variablen haben dann die Werte WAHR oder FALSCH, je nachdem was zutrifft.
Phrontistes Geschrieben 30. Dezember 2023 Geschrieben 30. Dezember 2023 Hallo Jürgen @jloos, zwischen den drei Vorschlägen gibt es funktional keinen Unterschied. Was für Dich besser lesbar ist, musst Du entscheiden. Mein Einzeiler entspricht jedenfalls exakt Deiner Anfrage, in der Du die Logik einschließlich der erforderlichen Klammern richtig formuliert hattest. Ich habe mit meinem Einzeiler nur Deine Anfrage übersetzt. Beste Grüße Phrontistes
jloos Geschrieben 30. Dezember 2023 Autor Geschrieben 30. Dezember 2023 Ja Danke @Phrontistes , Deine Zeile ist klar und deutlich für mich. Habe ich auch verwendet. Als dann die Lösung von @Goetz kam, wurde ich neugierig und wollte wissen wie das funktioniert. Ich habe Anfang der 80'er Jahre ein bißchen dBase programmiert. Das ist mein Erfahrungsschatz. Lang lang ist her. Vielen Dank an Alle, Gruß Jürgen
Goetz Geschrieben 30. Dezember 2023 Geschrieben 30. Dezember 2023 (bearbeitet) vor einer Stunde schrieb jloos: Was für Variablen sind aufGK und aktiveFS? Hallo Jürgen, Mit #layout:getVehiclesOn($("GKT1")) > 0 erhältst du als Ergebnis wahr, wenn die Anzahl (#) Fahrzeuge auf dem Kontakt größer als 0 ist. Andernfalls bekommst du falsch. Dieses Ergebnis nennt man ein Boolean und du kannst es wie Zahlen oder Texte in einer Variablen speichern. Dazu schreibst du (wie bei jeder Zuweisung) zuerst den Namen der Variablen, dann ein = Zeichen und dahinter den Ausdruck. Wenn du mehrere solche Ausdrücke mit or verknüpfst, dann ist das Ergebnis dieser Operation wahr, wenn mindestens einer der verknüpften Ausdrücke wahr ist. Und wenn das alles rechts vom = steht, dann wird zuerst der ganze Sermon ausgewertet und das Ergebnis (entweder wahr oder falsch bzw. true oder false) in der Variablen gespeichert, deren Namen links vom = steht. Das ist im Kern nichts anderes als bei einer Rechenoperation, wo du links vom = den Namen der Variablen hinschreibst und rechts sowas wie 2 * 4. Würdest du stattdessen alles hinter das if schreiben, dann würde im Grunde dasselbe passieren. Der ganze Kladeradatsch wird ausgewertet, liefert im Ergebnis entweder true oder false und das nutzt if um zu entscheiden, ob das hinter dem then ausgeführt werden soll oder nicht. Ich erzeuge stattdessen erst das true oder false, lege es im Zwischenschritt in einer Variablen ab und benutze die dann hinter dem if. Der einzige Zweck ist, dass ich die Sache in kleinere Brocken unterteile. Die sind später leichter zu handhaben, wenn man Änderungen vornimmt. Viele Grüße Götz Bearbeitet 30. Dezember 2023 von Goetz
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