Jump to content

Auswertung von Textvariablen


MarkoP

Empfohlene Beiträge

Da die EV meines Wissens keine Variable-Arrays unterstützt hätte ich die Frage welche Ideen und Möglichkeiten andere User erfunden haben um Variablensparend viele Informationen unterzubringen. Mir schwebt da z.B. die Trennung einer Textvariablen via Trennzeichen (; / - etc.) auf. Hat da schon jemand mit rumexperimentiert?

Hintergrund ist einfach, dass ich gerne für meine Züge eine Variable "Zugverband" mit den Namen der einzelnen angehängten Wagon's erstellen möchte. Gleiches ist auch für den Transport bei Wagon- oder Zugbeladung interessant, wo mehrere Container auf den gleichen Wagon / das gleiche Schiff oder noch feiner den gleichen Stellplatz auf diesen zugewiesen sind.

Wenn man für jede Möglichkeit eine einzelne Objektvariable erstellt wird es unübersichtlich und man hat das Problem, dass man im Voraus gar nicht planen kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Marko,

ich denke, dass Du da heute "schlechte Karten" hast, da es für Textvariablen im Modellbahn-Studio keine Operationen zum "Zerschneiden" und "Zusammensetzen" gibt. Nur bei "numerischen" Variablen hat man die Möglichkeit, arithmetische Operationen (+-*/) zu verwenden. Dies hat auch dazu geführt, dass ich bei meinem Ablaufberg-Beispiel sämtliche betroffenen Wagen mit "Nummern" bezeichnen musste. Nur so war es möglich, diese über eine "rundum" laufenden Zähler-Variable zu identifizieren.

Für Dein Problem der Wagen-Identifizierung im Zugverband über die Zugkennzeichnung ist dies allerdings nicht anwendbar. Wenn Du nämlich für Deine Wagen einstellige "Nummern" verwendest, bist Du auf insgesamt 10 Fahrzeuge beschränkt, die Du als "Positionen" in einer bis zu 10-stelligen Zahl verwenden könntest. Würdest Du für Deine Wagen 2-stellige Nummern verwenden, könntest Du diese zwar auch hintereinander in einer Zahl anordnen (1. Wagen 1er- und 10er-Stelle, 2. Wagen 100er- und 1000er-Stelle, usw.). Ich weiß aber nicht, wie viele Dezimalstellen das Modellbahn-Studio überhaupt verkraftet, darstellen und numerisch bearbeiten kann. Ich halte daher diese Idee der Identifizierung von Wagen in einer Zugkomposition für nicht praktikabel.

Solange Du auf das Hinterlegen der Liste der Wagen-Bezeichnungen in einem Zugverband in einer gemeinsamen Variable verzichten kannst, kannst Du die in meiner Ablaufberg-Anlage beschriebene Vorgehensweise natürlich auch für andere Abfrage-Situationen verwenden, solange Du für die Fahrzeug-Bezeichnungen ausschließlich numerische Werte verwendest.

Viele Grüße
BahnLand

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Bahnland,

das Problem das ist habe ist folgendermaßen:
Ich habe in meiner Hafen-Anlagen mehrere Schiffsanlegeplätze. Zwei davon mit mehreren für den zugänglichen Gleisen.
Nun soll ein reger Betrieb hergestellt werden, wobei die Züge zufällig mit wechselnden Zugkompositionen auf die Abstellgleise für den Kran fahren sollen.
Damit nun der Kran die Container entladen kann, muss ich wissen, welcher Container auf welchem Wagon steht und an welcher Lok dieser hängt.

Zweite Idee ist der Zwischenlagerplatz:
Auf ein Schiff passen selbstverständlich mehr Container als mit einem Zug transportiert werden können (Zuglänge ist ja durch den Kranbereich festgelegt).
Also müssen die Container von verschiedenen Zügen auf einem Zwischenstellplatz gelagert werden. Aus Platzgründen (Erfassungsbereich des Krans) müssen diese gestapelt werden. Der Lagerplatz hat 6x4 Stellflächen. Also 24 Möglichkeiten. Wenn ich für jede Möglichkeit 3 vertikale Positionen einräume, käme ich auf 6x4x3=96 Möglichkeiten. Für jede Möglichkeit müsste eine Variable vorgehalten werden und es gibt insgesamt 3 dieser Lagerplätze. Dazu das gleiche Spiel mit jedem der 5 Containerschiffe, wo die Lagerung ja quasi genauso abläuft.
Für mich gibt es zwei Möglichkeiten. Entweder ich kann in der EV explizit einen Container benennen (was die Hinterlegung der Namen verausetzt) oder ich muss der EV sagen "Nimm das Ladegut von Stellplatz A1b (A=Reihe; 1=Spalte; b=vertikale Position). Das ist aber genauso wenig möglich, das sich Variablen nicht zusammensetzen lassen

Irgendeine Idee?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Marko,

um die eindeutige Bezeichnung aller Container wirst Du nicht herum kommen, da Du ja jeden einzelnen, den Du bewegen möchtest, explizit ansprechen musst. Um eine "dynamische" Bestimmung der zu bewegenden Container zu ermöglichen, habe ich folgenden Lösungsvorschlag (bitte selbst ausprobieren!):

Bezeichne alle Containertragwagen mit Nummern, da sie nur dann innerhalb des Zugverbands (über den Rundum-Zähler) automatisch bestimmt werden können. Wenn ich das noch richtig in Erinnerung habe, werden auf den Containertragwagen für jede mögliche Ablage-Positionen "Ablage-Flächen" benötigt, die mit dem jeweiligen Containertragwagen verknüpft sein müssen. Auch diese müssen eindeutig sein, damit sie vom Kran anvisiert werden können. Lege nun bei jedem Containertragwagen für jede mögliche Ablage-Position eine Objektvariable an, die Du beispielsweise für den Containertragwagen "123" fortlaufend mit "123.Pos1", "123.Pos2" usw. bezeichnest. Weise diesen Objektvariablen als Inhalte die Namen der mit dem Containertragwagen verknüpften Ablageflächen zu. Wenn Du nun beispielsweise auf Containertragwagen "123" auf der in der Objektvariable "123.Pos2" hinterlegten Ablagefläche den Container "Hapac47" ablegst, weise einer weiteren Objekt-Variable "123.Ladung2"  als Wert die Bezeichnung "Hapac47" dieses Containers zu.

Wenn Du nun mit dem Containerzug, in dem sich dieser Wagen befindet, in den Einzugbereich des entladenden Krans bewegst, kannst Du irgendwann den Wagen "123" identifizieren. Frage nun die Objektvariablen "123.Ladung1", "123.Ladung2" usw. ab, ob sie einen Wert verschieden von der "leeren Zeichenkette" ("") besitzen (diesen Wert besitzen alle "nicht definierten", also "unbekannten" Variablen bei einer "Abfrage"). Wenn ein Wert vorgefunden wird, ist dies der Name des hier abgelegten Containers, der damit vom abladenden Kran "angesprochen" werden kann. Wenn der Kran den Container von dem Tragwagen entfernt hat, muss natürlich die Objektvariable (hier "123.Ladung2") auf die leere Zeichenkette zurückgesetzt werden.

Ich würde jetzt jedem Container noch eine Objekt-Variable "Länge" zuordnen (z.B. "Hapac47.Länge"), in der die Länge "20" oder "40" für einen 20-Fuß- oder 40-Fuß-Container hinterlegt wird. Damit kannst Du dann beim Abladen gleich erkennen, ob der Container auf dem Platz für 20-Fuß-Container oder für 40-Fuß-Container zwischengelagert werden soll.

Und damit sind wir auch schon bei den Abstellplätzen. Wenn Dein Abstellplatz 6x4 Plätze hat, würde ich diese mit 1-24 durchnummerieren. Da Du mehrere Abstellplätze hast, musst Du diese noch unterscheiden (z.B. durch die 1000er-Stelle: Plätze 1001-1024 gehören zum Abstellplatz 1, Plätze 2001-2024 gehören zum Abstellplatz 2). Jeder Platz wird hierbei durch eine "Ablage-Fläche" mit diesem Namen (1001-1024, 2001-2024, usw.) identifiziert. Weise nun jeder Ablagefläche innerhalb der Abstellplätze die Objektvariablen (z.B.) "1001.Ebene1", "1001.Ebene2" und "1001.Ebene3" zu, wenn Du insgesamt 3 Container übereinander stapeln möchtest. Sobald Du auf einer Ebene einen Container abgelegt hast (beispielsweise Container "Hapac47" auf Ebene 2 des Platzes "1012", so weise der Objektvariable "1012.Ebene2" den Wert "Hapac47" zu. 

Usw. usw. usw.

Jetzt versuche mal, diesen Faden weiter zu spinnen. Damit solltest Du sowohl einen Containerzug als auch einen Zwischenstellplatz als auch ein Containerschiff über die Ereignisverwaltung vollautomatisch be- und entladen können.

Viele Grüße
BahnLand

Bearbeitet von BahnLand
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Bahnland,

werde ich auf jeden Fall versuchen. So ähnlich sahen meine Ansätze bisher auch aus. Ich befürchte nur, dass die Anzahl der Objektvariablen zu groß wird und das Ganze nicht mehr durchschaubar ist. Auch habe ich derzeit noch Probleme wie ich einen Containertragwagon der in den Kraneinzugsbereich einfährt identifizieren soll (Dazu sollte ja die Zugverband-Variable dienen).

Werde mich auf jedenfall zurück melden. Kann aber einige Tage dauern, da das ganze doch extreme Ausmaße annimmt und ich nicht soviel Zeit habe.

Viele Grüße und Dank sage ich erst mal.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich habe bisher einiges Probiert.

Die "leere Zeichenkette" funktioniert bei mir jedenfalls nicht. Meine Objektvariable hat entweder den Wert des Containernamens oder ist leer ("").
Ich habe schon "", <>""; "" negiert und anderes probiert. Wenn die Objektvariable leer ist kann ich sie nicht abfragen. Der Inhalt wird in einem Beschriftungsfeld angezeigt, nur die Bedingungsabfrage "Variable besitzt den Wert" funktioniert einfach nicht.

Gruß
MarkoP

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Marko,

die "Leere Zeichenkette" oder "" bedeutet, dass Du das Feld, das den Textinhalt beinhalten soll, leer lässt (also keine Aprostrophe reinschreiben!). Dann funktioniert die Abfrage auch bei nicht existenten Variablen. Siehe dazu das folgende Anlagenbeispiel

Variablen-Abfrage.mbp

Weise dort der Variable "ABCDE" abwechselnd einen Wert zu oder lösche sie (Wert im Eingabefeld löschen). Lege jeweils danach den Kippschalter um und betrachte die Ausgabe für den Variablenwert (oder die "Ersatzausgabe"). Siehe hierzu auch die EV-Definition mit Bedingung-erfüllt- und Bedingung-nicht-erfüllt-Pfad.

Viele Grüße
BahnLand

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Aloys,

vor 3 Stunden schrieb aloys63:

der  Rundum-Zähler geht aber nur wen die Wagen getrennt werden sonst nicht habe ich schon versucht

worauf beziehst Du Dich hier?
Wenn Du den Rundumzähler verwendest, um ein Fahrzeug auf einem bestimmten Gleisstück zu identifizieren, und sich auf dem Gleis gleichzeitig mehrere Fahrzeuge befinden, schlägt die Abfrage bei der ersten Nummer an, die auf dem Gleis angetroffen wird. Insofern hast Du Recht, dass die Identifikation nur dann "eindeutig" ist, wenn sich auf dem fraglichen Gleis zum Abfrage-Zeitpunkt tatsächlich nur ein Fahrzeug befindet. Wenn Du aber trotz "Treffer" weiter zählst und prüfst, bekommst Du auch die anderen Fahrzeuge angezeigt.

Viele Grüße
BahnLand 

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