Jump to content

Grundlagen zu Variablen


Empfohlene Beiträge

hallo neo, @ alle modellbahnbauer........ich hätte mal einen vorschlag vor zu bringen.....wobei  ich jetzt auch an viele (so wie ich nur virtuell bauen) denke. besteht evtl die Möglichkeit....(weil ich hier immer wieder mal lese mit negieren und bzw variablen und noch so einigen anderen punkten, wo ich als kompletter laie leider nur Bahnhof verstehe,:( dass man da unter wiki vielleicht ein paar leicht verständliche einträge mit kleinen Infos machen könnte......zb negieren bei.....oder negieren deaktivieren bei....das wäre doch also meines erachtens eine hilfe für alle neueinsteiger (....und ääähhhh) auch für mich:$....was haltet ihr alle zusammen von diesen vorschlag....gruß schlagerfuzzi......PS: mir macht das Programm allen ernstes sehr viel spass (y)und ich bin halt mal sehr lernbegierig....um vieles zu erlernen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Lass mich mal versuchen dir zu erläutern, was Variablen sind.

Wenn es mir gelingt, das in für Laien verständlicher Form zu vermitteln, dann denke ich über weitere Themen nach.

 

Im normalen Sprachgebrauch bedeutet variabel, dass etwas veränderbar ist.
Und daraus leitet sich das Wort Variable in der Programmierung ab.

In Programmen muss man sich oft etwas für eine kurze Zeit merken, damit man später Bezug darauf nehmen kann. 

Beispiel:

  1. Im Bahnhof können verschiedene Züge ankommen
  2. Ich stoppe den eintreffenden Zug
  3. Ich merke mir den Namen dieses Zuges
  4. Jetzt kann ich den richtigen Zug wieder in Bewegung setzen, wenn das Signal umschaltet.
  5. Hätte ich mir den Namen nicht gemerkt, dann wüsste ich jetzt nicht, welcher Zug losfahren soll.

Deshalb benötigt man einen Platz, an dem man Informationen ablegen kann, die man sich merken möchte.

Du kannst dir eine Variable wie ein kleines Kästchen vorstellen, in das ich einen Zettel hinein lege. Außen schreibe ich einen Namen auf das Kästchen, damit ich es später wiederfinde. Ich kann den Zettel im Kästchen jederzeit austauschen. Aber es kann in jedem Kästchen immer nur ein Zettel liegen.

Im Beispiel oben würde ich außen auf das Kästchen Gleis1 schreiben.
Und für die übrigen Gleise im Bahnhof weitere Kästchen mit den Namen Gleis2, Gleis3 ... anlegen.

Wenn ein Zug auf Gleis 1 ankommt, dann

  1. fährt er auf ein Gleisstück, das ein Ereignis auslöst
  2. als Aktion wähle ich Variable setzen
  3. Der Name der Variablen ist Gleis1
  4. Mit dem Wert ist bei der Variablen das gemeint, was in das Kästchen gelegt werden soll. (Das sind meistens Zahlen, deshalb "Wert")
  5. Als Wert trage ich in diesem Beispiel den Zugnamen ein  (Wie das genau geht, erkläre ich später.)

Das erste Beispiel sollte dir verständlich machen, was eine Variable ist. Aber es eignet sich nicht für eigene Versuche, weil es noch unvollständig ist.

Deshalb möchte ich dir ein zweites Beispiel geben, welches du leicht nachbauen kannst. Ein Oval mit einem Textfeld, dass die gefahrenen Runden anzeigt.

  1. Lege ein kleines Oval
  2. Setz ein Textfeld neben das Oval
  3. Wähle in der EV ein neues Ereignis
  4. Ereignis ist "Zug betritt Gleis"
  5. Als Gleis wählst du eins in der Nähe des Textfeldes
  6. Bei Lok lässt du "jede Lok" stehen.
  7. Unter Aktionen wählst du ganz unten in der Liste "Variable setzen"
  8. Denk dir einen Namen für die Variable aus. Das kann Runde sein. Oder Schlagerfuzzi. Oder Test. Völlig egal
  9. Bei Wert trägst du ein:  +1
  10. Die zweite Aktion im selben Ereignis ist "Beschriftung setzen" (findest du unter "spezifische Aktionen")​
  11. Als Modell wählst du Beschriftung (so heißt das Textfeld auf der Anlage)
  12. Als Text gibst du das selbe Wort ein, welches du dir als Namen für die Variable ausgedacht hast.

Jetzt setz eine Lok auf das Oval und lass sie ihre Runden drehen.
Im Textfeld wird der Name stehen, den du unter "Beschriftung setzen" eingegeben hast.

Die EV nimmt das Wort also als Text und versteht noch nicht, dass du eigentlich etwas anderes willst. Nämlich die Zahl, welche in deiner Variablen gespeichert ist.

Deshalb musst du die EV noch einmal öffnen und folgende Änderung vornehmen

  1. Such unter Aktionen "Beschriftung setzen".
  2. Schreib vor das Wort unter Text ein Dollar Zeichen $ (Direkt davor, ohne Leerzeichen dazwischen!)

Am $ Zeichen erkennt die EV, dass dieses Wort der Name einer Variablen ist und du nicht den Namen, sondern den Wert der Variablen benutzen möchtest. Die EV guckt jetzt, was in dem Kästchen liegt. Und das benutzt sie.

Lass die Lok erneut ihre Runden drehen und du siehst, dass jetzt im Textfeld eine Zahl steht, die bei jeder Runde eins weiter gezählt wird. Denn das +1 als Wert bedeutet, dass zum alten Wert 1 addiert wird und das dann der neue Wert ist. Wenn du für einen weiteren Versuch das + entfernst und nur die 1 im Feld "Wert" stehen lässt, dann steht im Textfeld bei jeder Runde die Zahl 1.

Wenn du sejr experimentierfreudig bist, dann kannst du zum Schluss versuchen einen Taster neben das Textfeld zu setzen, der die Variable per EV wieder auf 0 zurück setzt. Sozusagen einen Reset-Schalter.

 

Lass mich wissen, wie du bis hierhin zurecht kommst und dann schauen wir weiter, okay?

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo goetz.......ui ui ui.,das klingt nach arbeit:o.:D..zuerst 1x vielen dank, dass du dir die mühe gemacht hast, es mir soweit zu erklären.....(y),aber sowas muß ich am we mal ausprob....denn da bin ich besser aufnahmefähiger als unter der Woche:D.....ich werde dich aber am laufenden halten, wie ich zurecht gekommen bin, einen schönen abend noch.....und noch mal mercy....gruß schlagerfuzzi

Link zu diesem Kommentar
Auf anderen Seiten teilen

sorry goetz, ich wollte dich weder ärgern noch kränken.....nur in meinen kopf will das alles im mom noch richtig rein...denn ich blicke halt in einigen Sachen noch nicht ganz durch.ich habe deine Erklärung schon soweit mitbekommen, ich bin der typ, der relativ lange braucht, bis endlich der Groschen gefallen ist...was mir in meine Birne noch nicht ganz reinpasst, gebe ich jetzt ehrlich zu..muß ich da für alle züge jeweils so eine Beschriftung setzen oder reicht da eine aus für die gesamte anlage?....sorry, dass ich so begriff stutzig bin....gruß schlagerfuzzi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zitat

muß ich da für alle züge jeweils so eine Beschriftung setzen

Die Beschriftung hat nichts mit Variablen zu tun. Sie sollte dir nur eine Möglichkeit zeigen, wie man Variablen benutzen kann.

 

Zitat

für was die variablen gut sein sollen...

Sie sind der Platz, an dem ein Computer sich etwas merkt.

Das kann alles mögliche sein:

  • Ein Zugname
  • Eine Anzahl
  • Eine Geschwindigkeit
  • und alles andere, was einem so einfällt.

 

Weil in einer Variablen immer nur eine Information stehen kann, benötigt man viele Variablen.
Für jede Information, die man sich merken möchte, eine neue.
Und damit man diese Variablen unterscheiden kann, müssen sie alle unterschiedliche Namen bekommen.

Wenn mein Bahnhof zum Beispiel drei Gleise hat und ich mir merken möchte, welcher Zug auf welchem Gleis steht, dann brauche ich drei Variablen. Für jedes Gleis eine. Und jede muss einen anderen Namen bekommen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo goetz, ich glaube diese moralische ohrfeige:D:D:D trägt langsam früchte, jetzt weiß ich allmählich worauf du hinaus wolltest. habe mich während der heimfahrt mal ein bisschen mit variablen auseinander gesetzt....habe dieses und jenes mal probiert....und siehe da, jetzt hat sich bei mir so langsam der rost der schraube gelöst:D, ok, es sind zwar noch kleinere prob, aber dank deiner großartigen hilfe.(y)(y)....bin ich einen ganz großen schritt vorwärts gekommen. mit ein bisschen Übung komme ich dann auch wieder einen schritt weiter. (mir hat gestern abend die Birne geraucht;))....aber wie sagt man so schön, es ist noch kein meister vom himmel gefallen.....nochmal DANKE sagt schlagerfuzzi.......PS: ich nehme gerne noch weitere Möglichkeiten (y):D und ratschläge an.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zitat

ich nehme gerne noch weitere (...) ratschläge an.

Dann möchte ich dir gerne einen ganz allgemeinen Ratschlag fürs Lernen mitgeben, Schlagerfuzzi:

Lern Fehler lieben!

Ehrlich. Fehler sind nützlich, weil sie immer wertvolle Informationen enthalten.
Wenn nicht das passiert, was du erwartet hast, dann ist das ein Hinweis darauf, dass noch ein Missverständnis vorliegt. Und wenn stattdessen etwas anderes passiert, dann steckt darin manchmal sogar die Erklärung, was man wie verstehen muss. Denn die EV macht immer "das richtige". Nämlich ganz exakt das, was man reinprogrammiert hat.

Unsere Eltern und unsere Schulen bringen uns jahrelang bei, dass Fehler schlimm seien. Wir kriegen beigebracht Fehler zu vermeiden. Deshalb entschuldigen wir uns für Fehler oder versuchen sie zu verbergen. Oder wir rechtfertigen unsere Fehler. Und das ist ein ganz schlechter Weg, wenn man lernen möchte. 

Ich lerne selber sehr schnell, weil ich keine Angst vor Fehlern habe. Und weil mich kein Fehler ärgert. Wer sich nämlich über einen Fehler ärgert, der verliert damit den Blick für die nützliche Information, die in Fehlern steckt. Das bringt einem leider kein Lehrer bei.

Also:
Schüttel die Angst vor Fehlern ab. Entschuldige dich niemals für einen Fehler. Weil eine Fehler nichts mit Schuld zu tun hat. Freu dich auf die nächsten Fehler. Wirklich. Sie bringen dich sehr schnell weiter, wenn du sie dir genau anschaust. Wer sich für Fehler entschuldigt, der schaut leider nie hin, sondern immer weg. Und verpasst damit genau das, was ihm helfen würde.

Viel Spaß beim weiteren Lernen. Und ich werde dich gerne mit mehr Lernstoff füttern.

@Admins
Danke fürs Verschieben und Umbenennen des Threads

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zitat

mein 1. versuch ...

... sieht schon sehr gut aus. Vor allem freut mich deine Experimentierfreude. Du hast z.B. sowohl +1 als auch -1 ausprobiert.

In der Variablen "Signal" speicherst du das Wort "Signal". Wolltest du damit nur probieren, ob das geht? Oder hattest du damit etwas anderes vor? Etwas, bei dem ich dir helfen könnte?

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo goetz, ok ich werde es versuchen mich für fehler nicht mehr zu entschuldigen:D....und ich nehme dein Angebot gerne an mit weiteren Lernstoff...(y)...hast du meine 1 demo anlage gesehn?...aber durch deine großartige hilfe, bin ich jetzt einen ganz großen schritt in meinen anlagen weitergekommen....klasse beigebracht (y)danke....herr Lehrer:D:D.....gruß schlagerfuzzi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zitat

gibt's da evtl noch weitere Möglichkeiten mit dem wort signal?

Nein, da gibt es keine besonderen Möglichkeiten.

Gib mir bitte noch ein wenig Zeit für die nächste Lektion. Ich muss mir zuvor ein paar Gedanken machen. Wahrscheinlich werde ich wieder das erste Beispiel (mit dem Bahnhofsaufenthalt) aufgreifen. Vielleicht mit einem Zwischenschritt, um die einzelnen Lektionen überschaubar zu halten.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du weißt jetzt, wie du Variablen erzeugen kannst um darin etwas zu speichern.

Das 3D-Modellbahn Studio erstellt aber auch selbst Variablen. Beispielsweise dann, wenn ein Gleis betreten wird. Damit man in der EV abfragen kann, wer das Gleis betreten hat. Solche Variablen haben fest vergebene Namen, weil diese Namen vom MBS erzeugt werden.

Jeden Variablennamen darf es nur einmal geben. Also darf man selbst keinen Variablennamen verwenden, den das 3D-Modellbahn Studio schon benutzt. Alle Variablen, die das 3D-Modellbahn Studio erstellt, beginnen deshalb mit einem Unterstrich vor dem Namen. So sind Verwechslungen ausgeschlossen.

 

In der Variablen _Trigger1 steht, wer das Gleis betreten hat.
Genau genommen stehen da vier Informationen in vier Variablen. Und alle vier beginnen im Namen mit _Trigger 1. Dann folgt ein Punkt. Und danach

  • _Name für den Namen des Zuges.
    oder
  • _CurrentSpeed für die aktuelle Geschwindigkeit.
    ("current" ist das englische Wort für "aktuell" und "speed" das englische Wort für Geschwindigkeit)
    oder
  • _TargetSpeed für die eingestellte Geschwindigkeit.
    ("target" ist das englische Wort für "Ziel")
    oder
  • _Visible für die Sichtbarkeit des Objekts
    ("visible" ist englisch für "sichtbar")

Jetzt musst du dich noch erinnern, dass vor dem Variablennamen ein $ stehen muss damit du an die Information kommst, die in der Variablen gespeichert ist. Dann kannst du dir zusammenreimen, wie du an den Namen des Zuges kommst, der gerade ein Gleis betreten hat.
Nämlich mit

$_Trigger1._Name

Es ist nicht leicht zu erkennen, dass nach _Trigger1 ein Punkt kommt bevor es mit _Name weiter geht. Deshalb habe ich diese übergroße Schrift gewählt.

Probier es aus.

  1. Bau wieder ein Oval.
  2. Such dir ein Gleis aus, welches bei Betreten ein Ereignis auslöst.
  3. Setz ein Beschriftungsfeld daneben
  • Ereignis: Zug betritt Gleis
  • Lok: alle Loks
  • Gleis: Das welches du ausgesucht hast
     
  • Aktion: Beschriftung setzen
  • Beschriftung: Beschriftung
  • Text: $_Trigger1._Name

Jetzt müsste im Beschriftungsfeld der Name der Lok stehen, sobald du das ausgesuchte Gleis überfährst.

Ändere anschließend mal den Namen der Lok.
Bei der nächsten Runde wird der neue Namen angezeigt.

Und wenn das alles klappt und du verstanden hast, wie es funktioniert, dann könntest du versuchen statt des Namens mal die aktuelle Geschwindigkeit anzuzeigen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo goetz, ich habe jetzt mal nur so nebenbei mal eine frage an dich....wie ist das mit den variablen, wenn ich zb auf meinen anlagen  2 oder 3 völlig gleiche und identische züge laufen habe, genügt es da wenn ich zb Alex zug 1 ...Alex zug 2 usw. schreibe..oder nur Alex 1...oder nur zug 1 - zug ??? oder muß ich da mit variablen die gleiche Beschriftung haben wie im Katalog...gruß schlagerfuzzi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo schlagerfuzzi,

mit den Namen ist es eine etwas kompliziertere Sache. Einige Funktionen in der EV arbeiten ausschließlich über Namen, weshalb es bei doppelt vorkommenden Namen zu Fehlern kommen kann (mal nimmt das MBS das eine, mal das andere Objekt -> das Problem hatten wir hier im Forum schon einmal). 

Der Name mit den "gearbeitet" wird ist der, den Du im Eigenschaftsfenster vergibst... der "Katalogname" wird überschrieben. Du bist also in der Namensgebung ziemlich frei... (es gibt meines wissens allerdings einige Sonderzeichen [wie bei Dateinamen] die nicht verwendet werden dürfen)... das einzige was es zu bedenken gibt ist, daß Du die Namen so vergibst, daß Du noch den Überblick hast, welcher Name zu welchem Objekt gehört... (erleichtert die Fehlersuche)

Es ist also immer sinnvoll (dient auch der Übersichtlichkeit) allen Objekten und Variablen, auf die in der EV irgendwie zugegriffen werden soll (als Ereignis, Bedingung oder als Aktion) einen eigenen (nur einmal vorkommenden) Namen zu geben.

Gruß
EASY

Link zu diesem Kommentar
Auf anderen Seiten teilen

Zitat

wie ist das mit den variablen ...

Solche Dinge musst du selbst ganz gezielt testen, Schlagerfuzzi.
Dann lernst du es am schnellsten.
Weil alles Wissen, das du dir selbst erarbeitest, am längsten im Gedächtnis haften bleibt.

Probier aus, was passiert wenn die Namen gleich sind.
Probier aus, was bei verschiedenen Namen passiert.
Probier unterschiedliche Schreibweisen bei den Namen aus.
Stell so viele Versuche an wie du brauchst bis dir alles klar ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo easy, hallo goetz , erstmal danke für eure schnelle hilfe.(y) @easy das mit den Sonderzeichen ist mir klar, das habe ich selber schon erleben müssen auf meinen anderen anlagen, weil bestimmte zeichen werden nicht akeptiert ...@goetz du hast voll kommen recht mit deinen satz, dass ich es ganz gezielt testen muß, um es selber am besten im kopf zu behalten.....denn wie du sagst, was ich selber erarbeite, bleibt meist zu 100% im Gedächtnis....gruß schlagerfuzzi

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

hallo Modell und eisenbahnfreunde, ich habe wieder mal herum experimentiert und dank der großartigen hilfe von goetz der mir mit aufopfernder mühe und seiner hilfe hier viel geholfen hat, ein kleines video mit variablen zu gestalten(y)(y)....es ist eine traurige aber wahre geschichte, die ich mit variablen, Kameras und Kippschalter hier zusammen gestellt habe. sollte jemand intresse haben, kann ich die anlage gerne unter zip mit einstellen....lasst es mich wissen......allerdings hat diese anlage für mich auch einen sehr guten und großen reiz gehabt...:D.lach...:D..weil ich jetzt auch begriffen habe, was goetz mit all den variablen mir alles sagen und zeigen wollte...grins.....jetzt ist der Groschen haushoch gefallen......DANKE AN GOETZ(y)......gruß schlagerfuzzi....PS: freue mich auf eure Meinungen http://youtu.be/Ve9JOTt3wC4

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