Jump to content

Variablenverwaltung


Timba

Empfohlene Beiträge

Hallo,

kann mir mal jemand erklären, welcher Sinn/Nutzen hinter der Kopiertaste bei den Variablen steht?

beispiel.jpg.cfa593e17927c23f8e142ee0d8fea56d.jpg

Irgendwie habe ich bisher keinen entdeckt. Kopieren und Einfügen funzt nicht, wäre ja auch unlogisch, dieselbe Variable doppelt zu besitzen. Den Inhalt in ein externes Programm kopieren geht auch nicht. Also wofür ist das Ding da? Vielleicht verbirgt sich ja dahinter ein Feature, das mir die Arbeit wahnsinnig erleichtert und ich weiß es nicht. Also bitte, erleuchtet mich. ;)

Bearbeitet von Timba
Link zu diesem Kommentar
Auf anderen Seiten teilen

Halli @Timba,

angenommen, Du möchtest Deinen Triebfahrzeugen eine ganze Reihe von Objektvariablen zuweisen, die bei allen Triebfahrzeugen vorhanden sein sollen und möglicherweise sogar gleiche Werte aufweisen. Dann brauchst Du diese Objektvariablen nur bei einem Triebfahrzeug explizit anlegen, kannst sie dann kopieren und bei einem andern Triebfahrzeug einfügen. Danach brauchst Du gegebenenfalls nur noch deren Inhalte anpassen.

Beispiel:
Copy.thumb.jpg.918e4abdd2af2f8d8f0230db9f651ce4.jpg

Ich hatte einmal ein Kopfbahnhofbeispiel gebaut, bei dem Züge mit unterschiedlichen "Triebfahrzeug-Konfigurationen" einfahren, deren Geschwindigkeiten genauso wie die im Kopfbahnhof zu deaktivierenden Kupplungen bei jedem Fahrzeug als Objektvariablen hinterlegt sind. Angenommen, diese seien bei der Dampflok "BR 01-118" explizit definiert worden. Dann kann man sie hier alle zusammen in die Zwischenablage kopieren, ohne das Bearbeitungsfenster verlassen zu müssen ein anderes Triebfahrzeug auswählen ...

Paste.thumb.jpg.fcdc66974471d11e414025c13f38190c.jpg

... (hier "BR 218") und dort einfügen. Es werden dann zwar die Werte für die Dampflok mit eingefügt, aber diese rechts abzuändern geht deutlich schneller, als das Bearbeitungsfenster für jedes Triebfahrzeg separat zu öffnen und dann alle Objetvariablen neu von Hand einzugeben. Außerdem ist diese Methode weniger anfällig für Tippfehler.

Viele Grüße
BahnLand

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi BahnLand,

für Objektvariablen ist das einleuchtend und ich erinnere mich, dass wir vor ein paar Tagen schon diesen Punkt behandelt haben. Aber welchen Nutzen hat es bei Modulvariablen? Wenn ich in der EV links oben "Variablen" aufrufe, erscheinen ja ausschließlich Modulvariablen in der Liste und oben drüber die Icons, die ich in meinem Screenshot zeige. An der Stelle macht das doch keinen Sinn, oder doch? Womöglich stehen die Icons nur da, weil Objekt- und Modulvariablen gleich verwaltet werden oder so. Keine Ahnung.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Minuten schrieb Neo:

es gibt auch den Bedarf, Variablen zwischen verschiedenen Modulen zu kopieren, oder zwischen Modulen und Objekten.

Ja, aber wie soll das gehen? Ich habe es versucht und das Ergebnis war nix. Außerdem stehen bei mir die Modulvariablen alle in einer einzigen Liste. Da ist nix von Modul zu Modul kopieren. Mache ich was falsch? -grübel-

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Timba,

jedes Modul besitzt eine eigene Liste von Variablen. Stelle sicher, dass das richtige Modul selektiert ist, wenn du eine Variable erstellst und bedenke, dass die Variablenliste eines Moduls erst sichtbar wird, wenn mindestens eine Modulvariable existiert.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aha. Haben diese Variablen dann nur für das jeweilige Modul Gültigkeit? Oder sind sie global? Müsste mir meinen Kram nochmal genauestens anschauen, aber ich glaube ich habe kaum Variablen, die nur innerhalb eines Moduls gebraucht werden. Aber danke schon mal für die Aufklärung. Werde jeden Tag ein kleines bisschen schlauer.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Timba,

die Modulvariablen gelten nur für das jeweilige Modul. Das ist auch der Grund, warum du bei der Referenzierung einer Modulvariable auch immer das entsprechende Modul mit angeben musst. Globale Variablen gibt es in V5 nicht mehr, die globalen Variablen aus V4 sind nun Teil des obersten Moduls.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wo wir gerade dabei sind hätte ich noch eine Frage: Warum kann man Modulvariablen kein Schlagwort zuordnen? Hätte ich vorhin gut gebrauchen können. Habe eine Kontrollroutine zur Fehlersuche geschrieben, die herausfinden soll, ob verschiedene Variablen einen negativen Wert angenommen haben. Mit Schlagwort hätte ich alle zusammenfassen und in der Routine den Auslöser abfragen können. So habe ich mir jetzt mit einem benutzerdefinierten Ereignis beholfen und für jede Variable als Auslöser einen Verweis auf dieses Ereignis gesetzt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gerade eben schrieb Neo:

Globale Variablen gibt es in V5 nicht mehr, die globalen Variablen aus V4 sind nun Teil des obersten Moduls.

Aha. Ok. Da ich die Anlage aus V4 übernommen habe, sind natürlich alle meine Variablen in dieser obersten Ebene und ich hatte geglaubt, das müsste so sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 9 Stunden schrieb Neo:

Das ist auch der Grund, warum du bei der Referenzierung einer Modulvariable auch immer das entsprechende Modul mit angeben musst.

Das bezieht sich bestimmt auf einen Lua-Skript, oder?
Wenn ich in einer Aktionsliste einen Variablenamen anspreche, wird automatisch das dazugehörige Ereignismodul mit referenziert, sodass ich Variablen aus jedem Ereignismodul verwenden kann. Oder sehe ich das falsch?

fragt der Wolfgang

Modul-Variable.thumb.jpg.27f5bc093d4e70a0b163042ae5b46567.jpg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 11 Stunden schrieb Timba:

Warum kann man Modulvariablen kein Schlagwort zuordnen?

du kannst auch Schlagwörter zu Modulen hinzufügen, genau so wie du Schlagwörter zu Objekten hinzufügst (+ Symbol -> Variable -> Schlagwort).

vor 2 Stunden schrieb wopitir:

Das bezieht sich bestimmt auf einen Lua-Skript, oder?

Nein, du kannst auch in der grafischen EV gezielt auf Module von Variablen zugreifen, durch Verwendung von Variable (Erweitert):

Variable.jpg.5d6079e98ed8412cc3ac81f3bfd45e36.jpg

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 14 Minuten schrieb Neo:

du kannst auch Schlagwörter zu Modulen hinzufügen, genau so wie du Schlagwörter zu Objekten hinzufügst (+ Symbol -> Variable -> Schlagwort).

Habe ich mir angesehen. Und wie funktioniert das? Werden dann bei Verwendung des Schlagworts alle Variablen dieses Moduls angesprochen oder wie ist das gedacht?

Meine Idee war, wenn ich in einem Modul Variable A, B, C, D, E und F habe und will in einem Ereignis A,B und C ansprechen, diese drei unter einem Schlagwort zusammenzufassen. Das scheint nicht zu gehen, oder doch?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 40 Minuten schrieb Timba:

Das scheint nicht zu gehen, oder doch?

nein das funktioniert nicht, mit Schlagwörtern kannst du keine Variablen gruppieren. Schlagwörter dienen dazu, Module oder Objekte zu klassifizieren, nicht deren Variablen darin.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

wann macht es Sinn eine Variable über die EV mit Aktion "Variable löschen" komplett zu löschen? Ist sie dann von der Anlage weg, oder nur versteckt? Im Ereignis-Protokoll wird sie auf Null gesetzt.
Kann ich in der grafischen EV prüfen ob eine Variable angelegt ist, wenn ja, wie? Gibt es ein Fenster das alle Variablen auflistet?

fragt Wolfgang

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin Wolfgang,

wie kommst du darauf, dass eine gelöschte Variable im Ereignisprotokoll auf Null gesetzt ist? Habe das gerade probiert - bei mir ist eine gelöschte Variable komplett weg. Auch im Ereignisprotokoll. Ich denke mal, sie ist komplett weg und nicht nur versteckt.

Sinn macht es immer, eine nicht mehr gebrauchte Variable zu löschen, denn es dient der Übersicht und schützt vor Verwechslungsgefahr. Für den Speicher spielt es keine Rolle, nehme ich an, der ist garantiert groß genug.

Bearbeitet von Timba
Tippfehler
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Timba,

vor 2 Stunden schrieb Timba:

wie kommst du darauf, dass eine gelöschte Variable im Ereignisprotokoll auf Null gesetzt ist?

Ich habe in meinem Versuch mit einer Aktion "Variable löschen" eine Variable gelöscht. Den Aktionsablauf habe ich mit der Ereignis-Protokolliern verfolgt. Als das Ereignis "Variable löschen" ausgelöst wurde, stand nach -> der Variablenname, Null. Es könnte ja sein dass das Programm alle Null-Variablen nur ausblendet. Deshalb auch die Frage nach einer Liste in der alle in der Anlage angelegten Variablennamen (egal ob aktiv oder inaktiv) angezeigt werden.

Gruß
Wolfgang

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Wolfgang,

man muss hier unterscheiden zwischen einfachen Variablen (Boolean, Zahlen, Texte...) und Variablen, die Referenzen enthalten (Objekte, Ereignisse). Wird eine Variable gelöscht, dann wird ihr nil zugewiesen, ein Lua-Wert, der aussagt, dass die Variable keinen Wert enthält. Im Normalfall werden die Variablen daher einfach gelöscht. Bei Variablen, die aber Objekte referenzieren, kann bei einem nil nicht unterschieden werden, ob der Nutzer die Variable löschen wollte oder den gültigen Wert "keine Referenz" setzen wollte. Lua (und das Studio) unterscheiden nicht zwischen "leer" und "keine Referenz". Aus diesem Grund bleibt die Variable in diesem Fall erhalten, wird aber auf einen leeren Wert gesetzt.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 3 Stunden schrieb Neo:

Bei Variablen, die aber Objekte referenzieren, kann bei einem nil nicht unterschieden werden, ob der Nutzer die Variable löschen wollte oder den gültigen Wert "keine Referenz" setzen wollte. Lua (und das Studio) unterscheiden nicht zwischen "leer" und "keine Referenz". Aus diesem Grund bleibt die Variable in diesem Fall erhalten, wird aber auf einen leeren Wert gesetzt.

Hallo @Neo

dazu ist mir gerade ein merkwürdigen Phänomen untergekommen. Sobald eine Variable des Typs "Zeit" eingerichtet wurde fängt das Ereignisprotokoll bereits an laufend "Zeitpunkt erreicht" runterzurattern, auch wenn der Variablen noch gar kein Wert zugewiesen wurde. Löschen der Variable beendet das nicht. Es bleibt für immer und ewig, außer man beginnt eine neue Anlage. Ich kann nur vermuten, dass mit der Einstellung auf den Typ "Zeit" bereits besagte Referenz auf die Anlagenzeit hergestellt wurde und nicht wieder zu löschen ist. Habe ich recht damit? Bisschen nervig ist das schon, aber vermutlich nicht zu ändern.

 

Wobei ich an der Stelle gleich noch einen Verbesserungsvorschlag einschieben kann. Wollte man im Ereignisprotokoll aus irgendeinem Grund zwar alles sehen, aber eine Kategorie nervt sehr, z.B. das gerade erwähnte "Zeitpunkt erreicht" oder ich will gar nicht wissen, welche der 2.000 Schienen gerade betreten oder verlassen wurde, aber alles andere will ich haben, dann heißt das, Klick Filter-Icon, Klick Nach Ereignissen filtern, Klick Ereigniskategorie wählen, und wieder von vorne, Klick Filter-Icon, Klick Nach Ereignissen filtern, Klick Ereigniskategorie wählen, usw. usw., ganze 13 mal. Gibt es dafür keine andere Lösung? Irgendwie nach Art der Mehrfachselektion bei Objektauswahl? Wenn wenigstens dieses Dialogfenster stehen bliebe bis der Nutzer seine Wahl vollständig getroffen hat und man nicht jedesmal aufs Neue den ganzen Weg dahin durchklicken müsste, dann wäre das schon eine deutliche Verbesserung des Arbeitsflusses.

Bearbeitet von Timba
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Timba,

die Einträge "Zeitpunkt erreicht" haben nichts mit einer Variable zu tun, sondern mit der Simulationszeit. Wenn du die Simulationszeit auf Virtuell oder Echtzeit einstellst, wird jede Minute (der Simulationszeit) ein Ereignis "Zeitpunkt erreicht" ausgelöst. Das ist sinnvoll, um z.B. die Simulationszeit in einem Beschriftungsfeld anzuzeigen oder generisch auf eine bestimmte Zeit zu reagieren.

Ich stimme dir aber zu, dass die Ereignisprotokollierung dadurch schnell unübersichtlich werden kann. Ich werde mir hier für das nächste Update eine Verbesserung einfallen lassen. Womöglich braucht es gar keine Protokollierung der Zeitänderung, die aktuelle Zeit ist ja auch jederzeit in der Statusleiste sichtbar.

Auch die Filterung von Ereignissen werde ich mit dem nächsten Update vereinfachen.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe da auch mal eine Frage zu den Variablen.

Ist es in der EV V5 möglich, Arrays von Variablen anzulegen, auf welche man dann mit einer Indexvariablen zugreifen kann?  (nicht mit LUA)

Hintergrund ist, dass ich auf Gleisen in Abhängigkeit von der Zählvariable die Geschwindigkeit setzen möchte, dass aber bei 50 Gleisen nicht mit 50 Bedingungen abfragen möchte.

Also
Variable = 1 dann setze Geschwindigkeit Gleis 1
Variable = 2 dann setze Geschwindigkeit Gleis 2
Variable = 3 dann setze Geschwindigkeit Gleis 3
etc.
 

vielen Dank im Voraus

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 54 Minuten schrieb randermann.tbb:

nicht mit Lua

Warum nicht?
Damit wäre es ein Kinderspiel.

Die Listen für die grafische EV hat Neo wohl geplant, aber noch nicht implementiert. Ohne Lua musst du dich also noch etwas gedulden. Mit Lua kannst du es sofort haben.

 

Lua ist übrigens ein Name und keine Abkürzung. Deshalb legen die Erfinder dieser Sprache Wert auf die Schreibweise Lua.

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