Jump to content

Fahrzeuge auf einem Gleis


siggi

Empfohlene Beiträge

vor 2 Minuten schrieb Neo:

Hallo Siggi,

ist dir die Wiederholung "Für alle Fahrzeuge auf einem Gleis/Gleiskontakt" bekannt?

Viele Grüße,

Neo

Hallo Neo,
danke für den Hinweis! Bisher ist mir die Wiederholung nicht bekannt, muss aber gestehen, dass ich sie (Wiederholung allg.) bis dato nicht benutzt habe.
Werde mich dann mal damit beschäftigen.

Gruß Siggi

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 26 Minuten schrieb h.w.stein-info:

Hallo Siggi

Screenshot_30.jpg.33ef4a416473b06db1cd9b820a0e7f7e.jpg

Im Protokollierung ist es sichtbar - denke man kann es abfragen und auf eine Beschriftung abgeben .

Kann Dir aber hier nicht genau sagen , wie es in der EV / Lua geht - hier muss ich noch viel lernen und verstehen !

Viele sind da weiter , die hier Hinweise geben können .

 

Viele Grüße

H:xnS

Hallo h.w.stein,
danke für die Info. Bei mir bekomme ich nur die Lok eines Zuges angezeigt, nicht aber die Wagen.

Gruß Siggi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Siggi 

Denke , dass hier nur die Fahrzeuge ( Lok / Fahrzeug / Personen / Flugzeuge usw. )  mit Antrieb genutzt wird , da man diese auch in der Regel steuert .

Hier hat Goetz ein Beispiel als Video gemacht mit den Zugverband " Tram an den Haltestellen " .

Das ist von der grafische EV auf Lua umgewandelt und erweitert worden . Lua hat hierbei mehr Möglichkeiten .

Viele Grüße

H:xnS

Link zu diesem Kommentar
Auf anderen Seiten teilen

Für deinen Ausgabetext würde ich dir gerne eine Hilfe anbieten:

local AusgabeText = {
  "Zug:   "..Zugname,
  Zugteile,
  "\rLoks:   "..Loks,
  "Wagen:  "..Wagen,
  "Gesamt:  "..Loks+Wagen
}

$("GBS_txt-Gleisbelegung").text = table.concat(AusgabeText, "\r")

das ist noch ungeprüft. Kann also Fehler enthalten.
Beachte bitte, dass ein \r von table.concat eingesetzt wird und deshalb nur Loks einen (zweiten) \r enthält.

Ich finde, dass diese Form leichter anzupassen ist, wenn man Texte ändern möchte.

table.concat fügt alle Zellen einer Liste als Text aneinander. Das zweite Argument bestimmt, was als Trennzeichen zwischen die Zellinhalte kommt.
Statt des \r vor Loks hätte ich auch einen leeren String einfügen können. Dann entspräche die Tabelle optisch noch mehr dem Ausgabetext. 

 

Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 10 Stunden schrieb Goetz:

Für deinen Ausgabetext würde ich dir gerne eine Hilfe anbieten:


local AusgabeText = {
  "Zug:   "..Zugname,
  Zugteile,
  "\rLoks:   "..Loks,
  "Wagen:  "..Wagen,
  "Gesamt:  "..Loks+Wagen
}

$("GBS_txt-Gleisbelegung").text = table.concat(AusgabeText, "\r")

das ist noch ungeprüft. Kann also Fehler enthalten.
Beachte bitte, dass ein \r von table.concat eingesetzt wird und deshalb nur Loks einen (zweiten) \r enthält.

Ich finde, dass diese Form leichter anzupassen ist, wenn man Texte ändern möchte.

table.concat fügt alle Zellen einer Liste als Text aneinander. Das zweite Argument bestimmt, was als Trennzeichen zwischen die Zellinhalte kommt.
Statt des \r vor Loks hätte ich auch einen leeren String einfügen können. Dann entspräche die Tabelle optisch noch mehr dem Ausgabetext. 

 

Hallo Götz,

danke für die Hilfe! Ich werde den Skriptschnippsel nachher mal einbauen. Als Lua Neuling bin ich f+r jedem Tipp dankbar.
 

Schönen Sonntag
Gruß Siggi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Siggi,

vor einer Stunde schrieb siggi:

Als Lua Neuling bin ich für jeden Tipp dankbar.

Dann möchte ich dir gerne noch eine (bessere) Alternative anbieten.

Du kannst Strings in Lua erstens mehrzeilig anlegen und zweitens mit Platzhaltern (für Namen, Nummern etc.) versehen.
Der Befehl string.format() setzt dann der Reihe nach die Daten dort ein, wo die Platzhalter stehen.

Ein mehrzeiliger String wird in doppelte eckige Klammern anstelle der Anführungszeichen eingebettet.
Platzhalter markiert man mit einem vorangestellten % Zeichen. Der nachfolgende Buchstabe deklariert dann den Typen, der hier eingesetzt werden soll.
%s ist der Platzhalter für einen String, %d ist der Platzhalter für eine Ganzzahl.

local TextMuster = [[
Zug: %s
%s

Loks:   %d
Wagen:  %d
Gesamt: %d
]]

local AusgabeText = string.format(TextMuster, Zugname, Zugteile, Loks, Wagen, Loks+Wagen)

$("Versuchstext").text = AusgabeText

Wie du siehst, sind die Zeilenumbrüche hier einfach im Textmuster enthalten. Der Steuercode für eine neue Zeile entfällt damit.
Das wäre in Lua der "amtliche" Umgang mit Textbausteinen.

Viele Grüße
Götz

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb Goetz:

Hallo Siggi,

Dann möchte ich dir gerne noch eine (bessere) Alternative anbieten.

Du kannst Strings in Lua erstens mehrzeilig anlegen und zweitens mit Platzhaltern (für Namen, Nummern etc.) versehen.
Der Befehl string.format() setzt dann der Reihe nach die Daten dort ein, wo die Platzhalter stehen.

Ein mehrzeiliger String wird in doppelte eckige Klammern anstelle der Anführungszeichen eingebettet.
Platzhalter markiert man mit einem vorangestellten % Zeichen. Der nachfolgende Buchstabe deklariert dann den Typen, der hier eingesetzt werden soll.
%s ist der Platzhalter für einen String, %d ist der Platzhalter für eine Ganzzahl.


local TextMuster = [[
Zug: %s
%s

Loks:   %d
Wagen:  %d
Gesamt: %d
]]

local AusgabeText = string.format(TextMuster, Zugname, Zugteile, Loks, Wagen, Loks+Wagen)

$("Versuchstext").text = AusgabeText

Wie du siehst, sind die Zeilenumbrüche hier einfach im Textmuster enthalten. Der Steuercode für eine neue Zeile entfällt damit.
Das wäre in Lua der "amtliche" Umgang mit Textbausteinen.

Viele Grüße
Götz

Guten Morgen Götz,

nochmal danke! Beide Varianten getestet und für gut befunden.
Und gleich kommen wieder Fragen auf:
1 - wo kommen die Blanks in Variante 2 her (sh. Foto)?
2 - kann ich auch Objektbezeichnungen in Lua in Strings umwandeln (zB. Gleis 2 in "Gleis 2")
3 - Wie man in der Textausgabe sieht, ist die Reihenfolge  der Zugteile willkürlich. Kann man die Reihenfolge abfragen?

Am Anfang von Modellbaustudio wollte ich mich eigentlich nicht mit Lua befassen, aber irgendwann kommt man nicht daran vorbei.
Nachdem ich laufe meines Lebens einige Scriptsprachen erlernt habe (Informix, VB Script für Access, ASP, Visual Studio, Java Script) komme ich auch langsam in Lua rein, man muss nur immer wieder andere Syntax und Befehle aus dem Kopf bekommen.

Viele Grüße Siggi
 

Belegung.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb siggi:

1 - wo kommen die Blanks in Variante 2 her (sh. Foto)?

möglicherweise durch Einrückungen in deinem Code?
Im mehrzeiligen String dürfen die natürlich nicht stehen, weil Lua sie dort nicht als Einrückungen, sondern als Teil des Textes versteht.

Die entstehen durch den Zeilenumbruch im Textblock. Der fügt (aus mir unbekanntem Grund) noch einen Tab-Sprung ein. Bei der Auflistung machst du den Zeilenumbruch mit \r. Wenn du da noch ein \t dahinter setzt, stehst alles auf einer Höhe.

 

 

vor einer Stunde schrieb siggi:

2 - kann ich auch Objektbezeichnungen in Lua in Strings umwandeln (zB. Gleis 2 in "Gleis 2")

Der Name eines Objekts ist eine Eigenschaft namens "name". Und der Inhalt dieser Variablen ist ein String.

 

vor einer Stunde schrieb siggi:

3 - Wie man in der Textausgabe sieht, ist die Reihenfolge  der Zugteile willkürlich.

Das ist die Reihenfolge, in der das Modellbahn Studio die Fahrzeuge auf dem Gleis liefert. 

 

vor einer Stunde schrieb siggi:

Beide Varianten getestet und für gut befunden.

Viel lieber hätte ich gelesen, dass du sie studiert und verstanden hast.  ;)

 

Im Übrigen musst du nicht jedes Mal mein gesamtes Posting zitieren, um darauf zu antworten.

Bearbeitet von Goetz
Ergänzungen nach neuen Erkenntnissen.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Götz,
 

vor 7 Minuten schrieb Goetz:

möglicherweise durch Einrückungen in deinem Code?
Im mehrzeiligen String dürfen die natürlich nicht stehen, weil Lua sie dort nicht als Einrückungen, sondern als Teil des Textes versteht.

Nichts eingerückt!
local TextMuster = [[
Zug: %s
%s

Loks:   %d
Wagen:  %d
Gesamt: %d
]]

local AusgabeText = string.format(TextMuster, ZugName, ZugElemente, Loks, Wagen, Loks+Wagen)

$("GBS_txt-Gleisbelegung").text = AusgabeText

vor 8 Minuten schrieb Goetz:

Der Name eines Objekts ist eine Eigenschaft namens "name". Und der Inhalt dieser Variablen ist ein String.

-- Variablen vorbelegen
local tbl = layout:getVehiclesOn(Gleis)
Local Wagen = 0 .........

Wenn ich die Variable "Gleis" (Als Parameter(Objekt) von der Taste übergeben) aus dem Script ausgeben will, bleibt die Anzeige leer. (Nicht wirklich schlimm, ich werde studieren und forschen.

vor 15 Minuten schrieb Goetz:

Das ist die Reihenfolge, in der das Modellbahn Studio die Fahrzeuge auf dem Gleis liefert. 

OK! Wieder was dazugelernt!

vor 16 Minuten schrieb Goetz:

Viel lieber hätte ich gelesen, dass du sie studiert und verstanden hast.  ;)


😊Hab ich!!

Um die Vorschläge zu verstehen, kopiere ich sie nicht einfach sondern schreibe sie selber neu.
Ich werde auch nicht immer warten bis ich eine Antwort aus dem Forum bekomme, zwischenzeitlich forsche und probiere ich selber! 😉

Viele Grüße
Siggi

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 12 Minuten schrieb siggi:

Um die Vorschläge zu verstehen, kopiere ich sie nicht einfach sondern schreibe sie selber neu.

perfekt (y)

vor 14 Minuten schrieb siggi:

Wenn ich die Variable "Gleis" (Als Parameter(Objekt) von der Taste übergeben) aus dem Script ausgeben will, bleibt die Anzeige leer.

Weil die Variable nur eine Adresse enthält und nicht den Namen.
Hast du es schon mit Gleis.name versucht?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein erweitertes Studienobjekt für dich:

local GleisName = Gleis.name
local Zug       = layout:getVehiclesOn(Gleis)
local ZugName   = ""
local ZugListe  = {}
local ZugTeile  = ""
local Loks      = 0
local Wagen     = 0
local AusgabeText = ""
local TextMuster = [[
Ort: %s
Zug: %s

%s
                                                       
Loks:   %d
Wagen:  %d
Gesamt: %d]]

for k, v in ipairs(Zug) do
  table.insert(ZugListe, v.name)
  if v:hasEngine() then
  ZugName = v.name
  Loks = Loks + 1
  else
    Wagen = Wagen + 1
  end
end

ZugTeile = table.concat(ZugListe, "\n  ")

AusgabeText = TextMuster:format(GleisName, ZugName, ZugTeile, Loks, Wagen, Loks+Wagen)
$("GBS_txt-Gleisbelegung").text = AusgabeText

hasEngine() ist eine Methode im MBS, welche true zurück gibt, wenn das Objekt einen Motor enthält, ansonsten false
Zur Verwendung des Doppelpunktes in Lua Skripten habe ich vor einer Weile ein kurzes Video aufgenommen

Bearbeitet von Goetz
ergänzende Erklärung
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Götz,
danke für deine Arbeit. Ich habe das Script für meine Zwecke noch etwas modifiziert. So habe ich Loks und Wagen in getrennte Tabellen geschrieben, für den Fall, dass mehr als eine Lok auf dem Gleis steht. Die Textausgabe habe ich so gestaltet, dass der Text immer oben im Anzeigefeld beginnt (bei mehr als 12 Zeilen müsste man das Textfeld natürlich vergrößern, leider kann man Text im Textfeld ja nicht scrollen).
In der Anlage mein derzeitiger Stand des Versuchs. Heute einiges über Lua gelernt.

Gruß Siggi

Belegungen.mbp

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi

AusgabeText = TextMuster:format(GleisName, ZugName, Loks, ZugTeileLok, Wagen, ZugTeileWagen, Loks+Wagen)

Woher kommt diese :format Anweisung?
Ich finde das weder in Lua noch im MBS?

Und was ist das:  eine Tabelle/String in doppelter Klammer ohne Trennzeichen?

local TextMuster = [[Ort: %s  Zug: %s ]]

Gruß
Thomas

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Thomas,

beide Antworten findest du in der Lua-Dokumentaion:

format-Anweisung

Zitat

Literal strings can also be defined using a long format enclosed by long brackets. We define an opening long bracket of level n as an opening square bracket followed by n equal signs followed by another opening square bracket. So, an opening long bracket of level 0 is written as [[, an opening long bracket of level 1 is written as [=[, and so on. A closing long bracket is defined similarly; for instance, a closing long bracket of level 4 is written as ]====]. A long literal starts with an opening long bracket of any level and ends at the first closing long bracket of the same level. It can contain any text except a closing bracket of the same level. Literals in this bracketed form can run for several lines, do not interpret any escape sequences, and ignore long brackets of any other level. Any kind of end-of-line sequence (carriage return, newline, carriage return followed by newline, or newline followed by carriage return) is converted to a simple newline.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Thomas,

siehe dazu:

Zitat

The string library provides all its functions inside the table string. It also sets a metatable for strings where the __index field points to the string table. Therefore, you can use the string functions in object-oriented style. For instance, string.byte(s,i) can be written as s:byte(i).

Viele Grüße,

Neo

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