Jump to content

Verschachtelte variablen in V5


Empfohlene Beiträge

Hi all

Da ich nicht sicher bin ob's an mir oder an V5 liegt poste ich das mal hier.

Ich habe mit meinem derzeitigen projekt, an dem ich schon etwa 6 monate dran bin, in V5 probleme. Es handelt sich um eine eingleisige pendelbahn mit einem wendebahnhof und einem endbahnhof jeweils an den enden. In der anlage verschwinden in bestimmten momenten, die noch vor dem lokwechel sind (wenn z b eine action, welche diverse variablen entleeren/entfernen soll, durch eine andere action inaktiv gestellt wird) gleich mehrere variablen, die fuer den lokwechsel im endbahnhof gebraucht werden.

Nun habe ich auf einer testanlage eine vereinfachte version gebaut welche ein anderes problem, das wohl  abba auch in der eigendlichen anlage (in V5) steckt, zeigt. In der urpruenglichen anlage haben einige zuege loks an beiden enden und die einfahrende lok uebergibt zur ausfahrt mittels object variable auf die ausfahrende lok am anderen ende des zuges. Das ganze funktioniert problemlos in V4. Unter "bedingungen sind erfuellt" erteilt eine verschachtelte variable den marschbefehl an die nun neue vordere lok, waehrend "unter bedingungen sind nicht erfuellt" einlok zuege in umgekehrter fahrtrichtung hinaus gesand werden. (Deshalb variablen zur lok erkennung, geschwindigkeitserkennung, fahrtrichtungserkennung) In V5 stecke ich schon fest bei der verschachtelten variablen. Ich habe verschiedene versionen gebaut die alle die gleiche fehlermeldung/anlage pausieren aktion erzeugen.

Siehe bilder

1198265299_2variablenverschachtelt.thumb.JPG.3008545af5280db35c602ad8d94a7a73.JPG

1628919213_1variablenverschachtelt.thumb.JPG.6a7b5179b523601adde137255ce39c1a.JPG

 

Ratloses Cheers

Tom

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Tom,

kannst du eventuell eine kleine Musteranlage mit einstellen wo das Problem auftritt, dann lässt es sich besser auf Fehlersuche gehen ;) Ich selbst bin auch schon fleißig am Arbeiten mit V5 und habe festgestellt dass es erst mal eine große Umstellung mit der EV für mich ist. Mit V4 habe ich einfach meine Trigger-Zeilen geschrieben (nach dem ich auch erst mal lange üben musste bis ich es verstanden habe), nun funktioniert dies nicht mehr und es heißt aufs Neue lernen :$ Die Fehlermeldungen im Auswerter kann ich auch schon nicht mehr sehen >:( aber ich kämpfe mich durch und finde immer mehr Lösungen :D

Gruß Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 21 Minuten schrieb fzonk:

Hallo Tom,

kannst du eventuell eine kleine Musteranlage mit einstellen wo das Problem auftritt....

Gruß Frank

 

Hi Frank

Here we go.....

Ich sehe das aehnlich wie du: lernen macht spass abba wer kann schon permanent spas vertragen:)

V5 trials.mbp

Da sind drei verschiedene timer versionen. Die aktive hat zumindestens schon mal eine veraenderte fehlermeldung bewirkt. (muehsam naehert sich das eichhoernchen.....)

Cheers

Tom

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ändere mal den Eintrag Deiner Lok OV Umschaltlok vom Typ Text in Typ Objekt und wähle dann dort die andere Lok an.

p.s.: bin an einem noch fieseren Fehler dran. Könnte böse Überraschungen geben heute.

Bearbeitet von Andy
Link zu diesem Kommentar
Auf anderen Seiten teilen

Na ich hatte ja schon an anderer stelle hier im forum die eigendliche motivation/faszination fuer die beschaeftigung mit dem MBS genannt: Der weg ist das ziel(y)

Abba da dies ja erst eine beta phase ist haben wir noch gute chancen zukuenftige wege langfristig etwas  weniger steinig und dafuer etwas comfortabler zu gestalten.

Ich hatte mir fuer V4 eine verschachtelschablone in excel gebaut, die nach eingabe der beteiligten variable(n) und objektvariable(n) den befehls string fertig fuer copy&paste ausgab, sowas aehnliches,halt nicht als string dafuer mit genauen anweisungen wo was einzustellen und einzusetzen ist wuensche ich mir gerade fuer V5:D

Cheers

Tom

Bearbeitet von metallix
correction
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor einer Stunde schrieb fzonk:

Warte mal ab bis du dann bei solchen Schachteln ankommst

solche Verschachtelungen kannst du in V5 noch vereinfachen. Objekte brauchen in V5 nicht mehr über Namen angesprochen zu werden, weil Variablen direkt Objektreferenzen speichern können. In einem fiktiven Beispiel sehe die Verschachtelung dann so aus:

Variable.jpg.beb777e8bb2e7b85bc6d3a0b32fb6a09.jpg

Zonenzuordnung ist in diesem Fall eine Variable von Gleiskontakt201 vom Typ Objekt. Mit direkten Objektreferenzen sparst du eine Verschachtelung pro Ebene.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Neo

vor 2 Stunden schrieb Neo:

solche Verschachtelungen kannst du in V5 noch vereinfachen. Objekte brauchen in V5 nicht mehr über Namen angesprochen zu werden, weil Variablen direkt Objektreferenzen speichern können

Dein Tipp funktioniert leider nicht, ich habe die betroffenen Ereignisse umgestellt und schon meckert die „Ereignis Protokollierung“ und bringt mir den Fehler „attempt to index a nil value (field 'variables')“ ohne Protokollierung werden die Ereignisse auch nicht abgearbeitet.

Ich habe die Anlage mal als Entwurf hochgeladen unter der Content ID: 4CDF8714-BDB3-45E7-BC7A-47A92C58F4C0 da kannst du dir es gern selber anschauen. Es gibt 3 Ereignisse die ich nach deinem Vorschlag abgeändert habe. Eins direkt an der Ereignisoberfläche „Zonenstatus beim verlassen setzen (2)“ und zwei im Ordner „Bahnhof“ „Modul-Variable wird gesetzt, Ausfahrt Gleiskontakt111 (2)“ und „Modul-Variable wird gesetzt, Ausfahrt Gleiskontakt201 (2)“. Alle 3 Ereignisse sind aktuell deaktiviert da ich die Umstellung erst mit Kopien probiert habe. Mit meiner Ursprünglichen Variante läuft es fehlerfrei (momentan aktiv), nach der Umstellung läuft es nicht mehr. Zum anschauen der Anlage empfehle ich vierfache Geschwindigkeit, da auf Grund von Zufallsauslösern es aktuell etwas dauern kann bis ein Ereignis ausgelöst wird.

Gruß Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Frank,

vor 5 Stunden schrieb fzonk:

bringt mir den Fehler „attempt to index a nil value (field 'variables')“

deine Variable Zonenzuordnung besitzt den falschen Typ. Im Moment verwendest du den Typ Text mit dem Namen der Zuordnung. Das kann natürlich nicht funktionieren, weil ein Text keine Eigenschaft "variables" besitzt. Du musst deine Zonenzuordnung zum Typ Objekt abändern und direkt das Objekt referenzieren.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi again

Also an meinem endbahnhof in der anlage klappt es nicht. Ich habe die eintraege entsprechend Frank's correcture eingestellt, bekomme abba nur fehlermeldung mit pausenstop.

A4.JPG.7724fcf3855fd5d4d88705011cba33ae.JPG

Intressanterweise fuehrt der obere attempt to compare number with nill eintrag nicht zum pausenstop. Der ist auch noch so wie V5 ihn sich uebersetzt hat und funktioniert ansonsten einwandfrei.

Hier mal die eintraege die probleme bereiten

A1.thumb.JPG.4901a5419e1eadcf29cdad421ebdbd7d.JPG

Ich vermute das problem hier in der bedingung. Das ereigniss wird ausgefuehrt wenn ein Signal auf fahrt schaltet. Im ursprung war das schalten des signals auch noch in den bedingungen als" & ".Die bedingung habe ich zwischendurch in anderen einstellungen versucht, ohne erfolg. In dieser einstellung faehrt der zug immerhin schon mal rueckwaerts aus, obwohl er eine wechsellok hat.

A2.thumb.JPG.ffb6f1ad70f4a94d32656a4532b0dd3b.JPG

Das ist die "bedingung erfuellt" option die nicht eintritt

A3.thumb.JPG.6585bc9e9bc8afa8dd14711edad0ada9.JPG

Das ist die "bedingung nicht erfuellt" die somewhat eintritt.

Mir ist auch aufgefallen das mit zunehmendem probieren, bei aktivem protokoll, der rechner, trotz optischer reduzierung aufs wesendliche und beurlaubung aller anderen aktivitaeten nach einer weile soweit in die knie geht das das bild unansehnlich ruckelt und die fps einstellig angezeigt wird. Nach einem neustart der V5 ist es dann wieder normal.

Durch die neuen gleiskontakte, die richtungsbezogen arbeiten koennen, lassen sich in meiner EV dieser anlage bestimmt etliche identische eintraege, ueber die das EV fenster am oberen rand auch mault, einsparen. Ebenso duerfte das aktivieren/deaktivieren von ereignissen u ereignissbloecken weniger haeufig notwendig werden.

Cheers

Tom

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 14.7.2019 um 21:41 schrieb Neo:

deine Variable Zonenzuordnung besitzt den falschen Typ. Im Moment verwendest du den Typ Text mit dem Namen der Zuordnung. Das kann natürlich nicht funktionieren, weil ein Text keine Eigenschaft "variables" besitzt. Du musst deine Zonenzuordnung zum Typ Objekt abändern und direkt das Objekt referenzieren.

Danke noch mal für den Tipp, nach etwas probieren habe ich es verstanden mit den Objekten als Variablen anlegen und es funktioniert ausgezeichnet und spart viele Extraschritte. Es gibt halt viele neue Möglichkeiten, da muss ich mich erst mal durchprobieren und „neu“ lernen.

Gruß Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 21 Stunden schrieb metallix:

Also an meinem endbahnhof in der anlage klappt es nicht. Ich habe die eintraege entsprechend Frank's correcture eingestellt, bekomme abba nur fehlermeldung mit pausenstop.

Kannst du die Anlage als Entwurf hochladen und mir oder dem Forum die Content ID zukommen lassen, dann kann man beser schauen woran es liegen könnte. Mit den Bilderchen kann ich noch keine Schlüsse ziehen woran es liegen könnte...

Gruß Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Am 14.7.2019 um 23:26 schrieb Neo:

Objekte brauchen in V5 nicht mehr über Namen angesprochen zu werden, weil Variablen direkt Objektreferenzen speichern können.

Viele Grüße,

Neo

 

Das ist der entscheidende tip fuer mein problem(y) .....dachte ich zunaechstB| und probierte weiter. Nun habe ich die gewuenschte abfahrtsentscheidung wieder zum laufen gebracht, kann abba nicht erkennen wo hier eine variable mit einer objektreferenz behilflich ist.9_9 (Vielleicht kannst du mir das hier mal rausdeuten damit auch ich das blicke?)    

So sieht die loesung aus

A5.JPG.b59954cb85a67d9cdaed38a9b57f5932.JPG

BHTGast ist die einlaufende lok welche eine objektvariable "Wechsellok" haben kann...

A6.JPG.8bf63ade68bbe2f292db9590d80b538f.JPG

Wenn es eine "Wechsellok" am anderen ende gibt wird sie hiermit gestartet. Die geschwindigkeit ist in diesem fall festgelegt  (keep it simple(y))

A7.JPG.865ac18a808819a2492db484640dc430.JPG

Mit dieser unerfuellten bedingung wird die einzellok wieder raus geschickt diesmal mit der richtungsumgekehrten (*-1) eingangsgeschwindigkeit.

Jetzt frage ich mich allerdings warum V5 das nicht so uebersetzt hat als es die anlage "reingesaugt" (sprich in ihre lingo uebersetzt) hat? Ich habe uebrigens noch jede menge fehlermeldungen/pausen meist dann wenn ein ereigniss ursprungsvariablen, die zur erstellung weiterer variablen noetig waren, loescht. Ich erinnere mich das ich damals in V4 beim schreiben des "drehbuches" fuer die verschiedenen bahnhoefe schon probleme hatte wenn ich die aktiven abba bereits ueberfluessigen variablen auf = (nix) 0  setzen wollte. Dabei musste ich folgevariablen inaktiv stellen und in einer bestimmten reihenfolge vorgehen damit nicht fuer neustarts die noetigen parameter vorher schon ausgeloescht waren.Beispiel einer typischen reihenfolge,wie sie jetzt auch noch in der anlage stecken.

Zug betritt ein gleis zum abbremsen,dabei wird die Lok und die geschwindigkeit erkannt. hier im endbahnhof werden 2 variablen angelegt (BHTGast geschw + BHTGastAbfahrtsgeschw)             (Ich sehe da auch potential das zu vereinfachen in V5)

Im naechsten ereigniss wird die geschwindigkeit mit 0 verglichen um die fahrtrichtung der lok zu bestimmen (das meldet jetzt das protokol, laesst es abba durchgehen)

Die naechste aktion multipliziert die BHTGastAbfahrtsgeschw mit -1

Wenn nun der timer fuer die wartezeit ablaeuft und das signal schaltet wirft er auch die urspruengliche geschwindigkeitsvariable raus, so wie es festgelegt ist. Das quitiert das protokol mit abbruch und fehlermeldung. Nach "entpausen" laeuft abba alles wunschgemaess weiter.

Ich denke ich werde die ganze EV ueberarbeiten. Viele alte eintraege werden ja nun mit den richtungs abhaengig reagierenden gleiskontakten ueberfluessig und auch das nun im gleichen ereigniss sowohl bedingungsgepruefte aktionen wie auch normale aktionen gleichzeitig ablaufen koennen reduziert die eintraege nochmals.

 

Cheers

Tom

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

vor 13 Stunden schrieb metallix:

Jetzt frage ich mich allerdings warum V5 das nicht so uebersetzt hat als es die anlage "reingesaugt" (sprich in ihre lingo uebersetzt) hat?

wenn man (in V4) Objekte anhand von Namen anspricht, dann kann das leider nicht automatisch in echte Objektreferenzen konvertiert werden, weil das Studio deine Absicht nicht kennt. Es könnte ja sein, dass du die Adressierung per Name bewusst gewählt hast, weil du so das Ziel einer Aktion durch eine Namensänderung einfach austauschst. Aus diesem Grund gibt es auch in V5 noch die Möglichkeit, Objekte per Name zu adressieren, wobei das Ergebnis zufällig ist, wenn mehrere Objekte den gleichen Namen besitzen.

Wenn du viele Variablen hast, die Namen von Objekten enthalten, wird die Umstellung auf echte Objektreferenzen schon aufwendig, weil du alle Bedingungen und Aktionen anpassen musst, die mit den Variablen arbeiten. Ich empfehle dir, in einer kleinen Demoanlage ein Objekt in einer Variable zu speichern und über ein Ereignis anzusprechen, um den Unterschied zur Adressierung per Name zu erkennen.

Wenn du eh vorhast, die EV neu zu gestalten, bringt eine Anpassung der alten EV nicht viel.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo

Ich habe mal dein ursprüngliches Muster noch mal umgeschrieben und meines Erachtens in die kleinste Form für eine V5 EV gebracht. Ich habe mich dabei auf den Wendekreis beschränkt und alles andere Gelöscht. Die Variablen Umspannlok und Umspannen habe ich als Objekte in den jeweiligen Variablen hinterlegt. Schau es dir einfach noch mal an. Ich kann mich Neo nur anschließen, umschreiben einer V4EV ist ohne weiteres gar nicht so einfach, vor allem wenn man die Neuerungen aus V5 einfließen lassen will. Ich persönlich habe mir einer meiner Anlagen genommen, habe die komplette EV und alle Variablen gelöscht und habe von vorne angefangen, auf diese Weiße fuchse ich mich auch gleich in die Neuerungen rein.

Gruß Frank

V5 trials EV nach V5.mbp

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Frank

Danke sehr. Wirklich kompakt. Ich habe mittlerweile mit dem umbau der EV in der V5 recht gute ergebniss und erfolge. Halt durch eifrige dialoge mit dir, Neo und anderen und durch fleissiges ueben sowohl in der trial  anlage als  auch am objekt. Richtig verlieren kann man ja nix wenn man oefter kopien anlegt. Im grunde mache ich es in der anlage aehnlich wie du, nur das ich nicht alles gleich rauswerfe sondern mir die "uebersetzung" auch genau anschaue und damit ein wenig spiele, bevor ich modifizier und am ende ueberfluessiges raus werfe. Gerade durch diese anschauen gingen mir schon einige lichter ueber funktionsweisen und (voellig neue) moeglichkeiten auf. Dabei waechst meine begeisterung fuer V5 zunehmend rasant. Es brauchte halt eine weile sich an die neue form und eigenschaften zu gewoehnen und der weg, welcher ja immer noch das ziel ist :), ist auch noch recht lange.

Cheers

Tom

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hah, das kommt davon wenn man mal den tag nicht mit "MBS rumspielen" verbringt.

Jetzt ist Neo mir zuvor gekommen;) Nachdem ich gestern abend mir ein video von Goetz angesehen hatte, erschlossen sich mir einige weitere dimensionen, die power von objektvariablen ist jetzt einfach suuuper. Goetz meinte in dem video auch man solle lieber in so kleinen trials als an einer richtigen anlage ueben. Also ich denke nicht so. Meine "uebungsanlage" ist nicht so riesig und hat den unschaetzbaren vorteil das ich die ablaeufe ja schon mal hinbekommen habe, wenn auch mit ecken und kannten, so das V5 das nicht so recht akzeptieren wollte. Und es ist ja auch keine auftragsarbeit oda  pruefung, also kein zeitdruck. Ich speichere die verschieden stadien numeriert ab, so kann auch imschlimmsten fall zurueckgegangen werden und imbesten fall wird dann in 500jahren oda so ein zukunftsmensch der meine rostige vergammelte festplatte auswerten kann sich wundern mit was wir dann antiken erdlinge unsere zeit verbrachten. Abba er wird auch eine steile lernkurve sehen(y)@Neo du wolltest ein beispiel wo es hakte. In der hier angehaengten kleinen trial anlage ist genau das thema in V5 geloest. War es in V4 auch,allerdings nicht mit drei ereignissen und zwei ausloesern, sondern mit eitlichen countdowns, variablen, variablen loeschungen(:Djetzt passiert dasnicht mehr, wir haben da schon drueber gesprochen),dafuer abba nur jeweilseine objektvariable pro (umspann)lok. V5 hat es wohl uebersezt abba nicht ausfuehren koennen.Jetzt wo ich mich so langsam reinarbeite fange ich auch an zu verstehen. Eine frage: es gibt bei den fahrzeugeigenschaften auch eine Richtung. Beim probieren zeigte es den zahlenwert -1 an, ich glaube sogar in beiden richtungen der testlok (also vorwaerts un rueckwaerts) Wie kann das ausgewertet werden fuer ein ereigniss?

V5trials wechselbespannung u einzelbespannung einspurige pendelstrecke mit wendeschleife.mbp

Cheers und danke fuer die hilfen u tips

Tom

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Tom,

vor 17 Minuten schrieb metallix:

V5 hat es wohl uebersezt abba nicht ausfuehren koennen.

kannst du mir bitte noch deine V4-Anlage schicken? Ich möchte gern prüfen, warum V5 das nicht ausführen konnte.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi all

Richtung  Fahrzeug  Gleiskontakt sind moegliche ausloeser von gleiskontakten. Ich bin bei meinem versuch anscheinend immer auf die rueckseite (-1) gestossen. Tatsaechlich sagt es (1) wenn man von der anderen seite kommt. Somit habe ich diese frage (weiter oben an Neo) selbst beantwortet.

Cheers

Tom

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo @Neo

Ich versuche gerade eine EV mit Hilfe von Benutzerdefinierten Ereignissen zu erstellen. In diesem Beispiel handelt es sich um eine Gleiszuweisung für einen Bahnhof, die EV soll prüfen ob ein Gleis frei ist und wenn ja soll es die Weichen zu dem Gleis schalten, wenn nicht soll es das nächste Gleis prüfen. Soweit alles gut, ich habe meine Parameter definiert und dazu zum einen eine Bedingung und zum anderen 3 Aktionen definiert.

image.thumb.jpeg.9fc2ac3fadb992ed6d68c4e6ea54b64a.jpeg

Als zweiten Schritt habe ich ein Ereignis erstellt wo die Benutzerdefinierten Ereignisse eingearbeitet sind.

image.thumb.jpeg.18f8e2b0dc0e105df92f8d571bfaba52.jpeg

Funktioniert soweit alles super, jetzt habe ich aber das Problem das ich eigentlich möchte dass wenn die Prüfung der Bedingung aus dem Benutzerdefinierten Ereignissen negativ ausfällt mit einer weiteren Prüfung weiter macht (Benutzerdefinierten Ereignissen bleibt gleich aber die Parameterwerte ändern sich) jedoch gibt mir die EV nicht die Möglichkeit, da ja das Benutzerdefinierten Ereignissen zusammengefasst wurde und die Bedingung daraus mit in die Aktion eingebaut wurde. Gibt es eine Möglichkeit wie ich dies anlegen kann ohne die Bedingung und Aktionen aus dem Benutzerdefinierten Ereignissen wieder auseinander zu nehmen?

Gruß Frank

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