Jump to content

Variable von Objekten aus einer Liste als Bedingung abfragen


Empfohlene Beiträge

Hallo zusammen,

Mein Neffe (L-N.Bär) arbeitet ja momentan an einer Modulanlage mit Brummis neuen Modulen. Um seine Fahrwegs Steuerung zu entschlacken hat er die Gleise und weichen des Fahrweges in einer Liste gespeichert. Als Bedingung für die Schaltung des Fahrweges soll dann überprüft werden ob die Gleise frei und nicht Reserviert sind. Da diese Liste für jeden Fahrweg aber verschieden lang ist, kommt es teilweise zu Fehlermeldungen oder die EV hängt sich auf.

Hat jemand eine Idee wie er das Problem lösen kann?

Bisher ist er so vorgegangen: Jeder Zug meldet sein Zielgleis den zuständigen Stellwerk (Liste in den das Anfangssignal der Fahrstraße gespeichert wird, wird geschrieben und im Signal wird das Zielgleis gespeichert). Anschließend soll über ein Benutzer definiertes Ereignis von den unter Index 1 gespeicherten Signal aus der Liste der Gleise und Weichen des Fahrweges abgefragt werden ob diese frei und nicht reserviert sind und bei positiver Abfrage der Fahrweg reserviert und evtl nach kurzer Verzögerung freigeschaltet werden.

HG

Wüstenfuchs

Link zu diesem Kommentar
Auf anderen Seiten teilen

9 hours ago, Wüstenfuchs said:

Does anyone have any idea how to solve the problem?

Hallo,

Ich habe Englisch verwendet, das ist der Google-Übersetzer auf Deutsch

Dies ist nur ein Vorschlag, ich bin sicherlich nicht in der Lage, Ihr Problem zu lösen. Aber ...

  • Eine Kopie des Skripts in Lua im Notepad gibt sofort einen Überblick über das Geschehen.
  • Weitere Informationen über die Art des Fehlers sind ebenfalls erforderlich. (über Analysator?)
    Vielleicht kann jemand (ein Experte) helfen, den Fehler zu finden .... und dann kann man sich endlich eine Lösung im EV überlegen.

Es ist nicht viel, aber ich wünsche Ihnen viel Erfolg bei der Lösung dieses Problems.

Ein schönes Wochenende wünsche ich ihnen, mit freundlichen Grüßen,

Herman

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,
Soweit ich sehen kann, ist die Variable Signallistewest tatsächlich eine Liste.
In lua wird der Index der Liste als [1] notiert, nicht als ["1"]. Bei mir erzeugt das den Fehler.

Aber noch keine Lösung im EV für dich.
Mit freundlichen Grüßen,

Herman

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Wenn das Wiederholungselement Fahrwegabfrage die Variablen "reserviert" und "Gleis frei" hat, dann ist die Angabe des Indices bei der Prüfung auf  "Gleis frei" falsch.

Grüße, Wolfgang

 

 

Bearbeitet von prinz
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Herman,

stimmt da hat der Kurze alles auf Text stehen gehabt, aber daß war noch nicht die ganze Lösung des Problems.

jetzt sagt das Ereignisprotokoll:

[19:43:09] Gleiskontakt wird ausgelöst -> H/V Blocksignal#002, Regio Shuttle 2, 1

[19:43:09] Signalliste Schreiben

[19:43:09] Objekt-Variable wird gesetzt -> H/V Hauptsignal Einfahrt süd/west, "Bevorzugtes Gleis", 1

[19:43:09] Objekt-Variable wird gesetzt -> Stellwerk Kienbach, "Nächster west", 2

[19:43:09] Signalliste west ausführen n

[19:43:09] attempt to index a nil value (field '?')

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 3 Stunden schrieb prinz:

Wenn das Wiederholungselement Fahrwegabfrage die Variablen "reserviert" und "Gleis frei" hat, dann ist die Angabe des Indices bei der Prüfung auf  "Gleis frei" falsch.

Dem ist aber nicht so, das Widerholungselement Fahrwegabfrage ist eine Liste. Der erste Eintrag darin ist das Zielgleis mit den Variablen "reserviert" und "Gleis frei" alle anderen Einträge sind Weichen mit der Variable "reserviert".

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 6 Stunden schrieb Wüstenfuchs:

Der erste Eintrag darin ist das Zielgleis mit den Variablen "reserviert" und "Gleis frei"

Ja, so hatte ich das auch gelesen. Der Fehler liegt, denke ich, in der Mehrfachbedingung. Zuerst wird dort "Fahrwegabfrage.variables["reserviert"]" geprüft, also als Variable, in der zweiten Bedingung für "Gleis frei" wird noch ein Index auf Fahrwegabfrage gesetzt. Entwender ist hier Fahrwegabfrage ein Objekt mit Variablen oder eine Liste, gedanklich nicht zu verwechseln mit der Liste Fahrwegsabfrage, über die hier gerade iteriert wird.

Grüße, Wolfgang

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

9 hours ago, Wüstenfuchs said:

[19:43:09] attempt to index a nil value (field '?')

Hallo,

Etwas stört mich immer noch. Aber ich kann nicht versprechen, dass ich es finden werde.
Wenn es gelöst ist, freut mich das super. Dann hört es hier für mich auf. Wenn nicht, können Sie bitte den neuen Lua-Code eingeben. (ohne Textfehler)
Mit freundlichen Grüßen,

Herman

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen,

ich glaube fast, da ist mehr als ein Wurm in der EV. deshalb bin ich gerade dabei diese  in einer Testanlage neu zu schreiben. Zum glück kenn ich die Vorlage die mein Neffe für die EV benutzt hat, mal sehen ob ich den Fehler so beheben kann oder da dann immer noch der Wurm drin ist. Die Testanlage kann ich dann auch hier Einstellen, beim Original ginge bei fast 9MB nur eine Veröffentlichung. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,
Ich schaue jetzt zurück auf den Code.
Sicher hast du schon die Indizes in einer Zahl geändert.
In der EV sind es Zahlen, außer "Weiche" und "Stellung" nicht.

1760013627_Indexweiche.jpg.31789073079db7538bf5c20dbc4ae391.jpg

Sie sollten eine Variable mit einer Zahl darin sein.
Ich interessiere mich für dieses Stück Lua-Code. (die geänderte).

1390206540_Weichenschaltungcode.jpg.9d040a38c6c2917f9e77fbde33bd858c.jpg

Schöne Grüße,
Herman 
 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich den Fehler in meiner EV nicht finden kann, schiebe ich immer ein paar Skripte ein, in denen dann nur steht z.B. print("in Wiederholung") oder print(Weichenschaltung["Weiche"].name) . Im Log kann man dann leichter erkennen, wo der Fehler steckt.

Weichenschaltung["Weiche"] ist an dieser Stelle richtig, da Weichenschaltung wohl eine Tabelle ist und so die Tabellenspalte identifiziert wird.

Grüße, Wolfgang

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

11 minutes ago, prinz said:

probably a table

Hallo Prinz. Danke für die Bemerkung. ... Ok für einen Tabelle.

Hallo Wüstenfuchs,
Ich habe einige Arbeiten von Prince gesehen und bin mir sicher, dass er sehr gut im Umgang mit EVs ist, und auch in Lua.
Ich verlasse das Thema. Erfolg mit Lösungsfindung !
Schöne Grüße,

Herman

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Wüstenfuchs,

Dank der Vorschusslorbeeren von @Herman habe ich mich gleich an die Arbeit gemacht.

Folgende Punkte habe ich geändert:

Bei "Schalter wird betätigt" wurde nur das Ereignis "Fahrstrasse schalten" aus Ausfahrt aktiviert/deaktiviert. Ich habe da auch noch dieses Ereignis aus "Einfahrt" hinzugefügt.

Bei "Einfahrt auslösen" war der "Wurm" in der zweiten Zeile (Für alle Elemente in einer Liste). Der Eintrag ((Stellwerk Kienbach.Signalliste Einfahrt)[1].Fahrstrassenliste)[1] ist eine Tabelle. Demzufolge muss die Reservierungsliste über "Variable (Liste/Tabelle)" statt "Variable (Erweitert)" adressiert werden. Ich habe das nur für die Bedingung ....Fahrstrasse = 1 korrigiert. Bei den anderen wird es ähnlich sein. Da dort aber die Signalliste Ausfahrt angesprochen wird, wollte ich nichts ändern.

Ebenso verhält es sich in "Fahrstrasse schalten" in "Einfahrt". Dort betrifft es die Wiederholungen für "Reservirungsliste" und "Weichen".

Den Fehler habe ich gefunden, nachdem ich diese Bandwurmadresse aufgelöst habe:
Setze Stellwerk Kienbach.Temporaer1 = Stellwerk Kienbach.Signalliste Einfahrt[1]
Setze Stellwerk Kienbach.Temporaer2 = Stellwerk Kienbach.Temporaer1.Fahrstrassenliste
Setze Stellwerk Kienbach.Temporaer3 = Stellwerk Kienbach.Temporaer2[1]
Setze Stellwerk Kienbach.Temporaer4 = Stellwerk Kienbach.Temporaer3.Reservirungsliste
Dann musste ich beim Abbruch nur nachschauen, welche Werte beim Stellwerk eingetragen waren.

 

Dann gibt es noch einen weiteren Fehler, den ich aber noch nicht korrigiert habe (soweit bin ich noch nicht durchgestiegen): Beim Ereignis "Ausfahrt setzen" in "Ausfahrt" (Gleiskontakt mit Schlagwort Halt) gab es einen Fehler im Log, da der Gleiskontakt keine Variable "Ausfahrt" besitzt. Wahrscheinlich soll das beim Signal gesetzt werden. Das dem Gleiskontakt zugeordnete Signal hatte aber diese Variable auch nicht.

 

Wenn ich Dir weiterhelfen kann, mache ich das gerne, benötige aber dann wahrscheinlich mehr Infos über das Problem.

 

Grüße, Wolfgang

 

 

Test Fahrwegsteuerung LN2.mbp

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...