Jump to content

Problem in der EV mit Variablenwert E (gelöst)


Empfohlene Beiträge

Bei einer Anlage, an der ich schon längere Zeit baue, funktioniert plötzlich etwas nicht mehr, das bisher aber funktioniert hat. Seit wann das so ist, weiß ich nicht genau, weil ich längere Zeit pausiert habe, aber schätzungsweise Mitte März sollte es noch funktioniert haben. Als ich vor zwei Wochen weitermachen wollte, ging es nicht mehr.

Ich habe das Problem eingrenzen können, es liegt aller Wahrscheinlichkeit nach an den negierten Bedingungen, denn wenn ich testweise beide Bedingungen rauslösche, wird die Aktion ausgelöst - aber nur wenn beide Bedingungen gelsöcht sind. Offenbar werden die beiden negierten Bedingungen nicht (mehr) richtig interpretiert. Es liegt nicht daran, dass die Variable SG10Ein während der Abfrage etwa den Wert D oder E hat, dieser ist in dem Falle 0. Die Aktion müsste also ausgelöst werden.

Hat jemand eventuell eine Idee, waran das liegen könnte? Ich bin gerade ratlos.

Viele Grüße vom Elefant

test190612.jpg

Bearbeitet von elefant65
Die Lösung des Problems hat eine andere Ursache ergeben als zunächst vermuetet - daher Thema angepasst
Link zu diesem Kommentar
Auf anderen Seiten teilen

Präzisierung: Auch wenn ich nur die letzte Bedingung lösche oder in dieser E bspw. durch S ersetze, wird die Aktion ausgelöst. Liegt also offenbar nicht an den negierten Bedingungen, sondern am Wert E. Die Variable hat aber während der Abfrage definitiv nicht den Wert E. Ist also alles noch seltsamer als ich zunächst dachte.    

Link zu diesem Kommentar
Auf anderen Seiten teilen

Beides. Unmittelbar, bevor das Ereignis ausgelöst wird, habe ich nach der Variablen geschaut, und auch unmittlbar danach - eine laufende Überprüfung von Variablen in Echtzeit ist ja nicht möglich.

Aber sie kann auch nicht den Wert E haben, weil der Wert beim Start der Anlage auf 0 gesetzt wird und bis zu dem gezeigten Ereignis kein anderes Ereignis ausgelöst worden sein kann, das den Wert verändert. Und wie gesagt, es hat ja bereits funktioniert. Nach ein paar Wochen/Monaten dann nicht mehr, ohne dass ich an der EV irgendetwas geändert hätte. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Elefant,

vor 15 Minuten schrieb elefant65:

Nach ein paar Wochen/Monaten dann nicht mehr, ohne dass ich an der EV irgendetwas geändert hätte.

je komplexer eine Anlage/EV ist, umso schneller können sich Konstellationen ergeben, die man vorher eventuell nicht bedacht hat. Helfen werden wir dir hier nur können, wenn du deine Anlage zum Testen zur Verfügung stellst, in dem du sie z.B. in den Online-Katalog lädst.

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Elefant,

du kannst dir die Variablen auch in Echtzeit anzeigen lassen. Du musst nur ein Textfeld aus dem Onlinekatalog auf deine Anlage ziehen. Dazu erstellst du in der EV folgendes Ereignis:

Auslöser:

    Variable wird gesetzt

          Name: aus der Liste die zu überwachende Variable suchen

         Wert: $Name der Variable

 

Aktion:

     Setzte Beschriftung

          Name: Name des Textfeldes

          Wert: $Name deiner Variable

 

die Dollarzeichen sind dabei wichtig!

vielleicht hilft dir dies schon weiter, ansonsten kann ich mich nur Neo anschließen, wenn du die Anlage hier einstellst kann man besser auf Fehlersuche gehen. 

Gruß Frank 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe die noch nicht ganz fertige  Anlage (T01906-01) jetzt mal veröffentlicht.

Kurze Erläuterung: Der Zugverkehr in den drei Bahnhöfen ist so geregelt, dass die Züge nach einer festgelegten Wartezeit losfahren dürfen, allerdings unter Berücksichtung von gewissen Prioritäten. So haben D-Züge Vorrang vor Eilzügen, Personenzügen und Güterzügen. Das ist insgesamt relativ komplex.

Die zu Beginn in den Bahnhöfen stehenden Züge haben alle schon eine festgelegte Haltezeit absolviert (Anfangsbelegung der entsprechenden Variablen). Beim Betätigen des Schalters Start, werden diese Haltezeiten weitergezählt, und beim Erreichen der Mindest-Haltezeit wird das Signal auf Ausfahrt gestellt (unter Berücksichtigung der Prioritäten).

Als erstes müsste 5 Sekunden nach dem Start (SBf-G11-Wartezeit=90) der rote Personenzug im Südbahnhof abfahren, wenn kein D- oder Eil-Zug in der Anfahrt auf den Bahnhof ist (SG10Ein nicht=D und nicht=E), denn der würde gleich durchfahren dürfen, und sich kein Zug auf dem Durchfahrtgleis (SG10=0) befindet.

Und das Ganze funktioniert nicht mehr. Lösche ich in der EV die Bedingung, dass SG10Ein nicht E sein darf, klappt es seltsamerweise. Ich habe mir auch mal die Variable, wie im letzten Post erklärt, anzeigen lassen. Sie hat immer den Wert 0.

Das war jetzt nur das Beispiel für den roten Zug im Südbahnhof (EV: Südbahnhof Richtung West / Gleis 11). Bei den anderen funktioniert es analog, bzw. es funktioniert auch hier nicht. Nur die beiden D-Züge im Hauptbahnhof (in der Mitte) fahren nach ihrer Haltezeit los. Diese müssen keine Rücksicht auf höher priorisierte Züge nehmen, daher fehlt hier die Bedingung, dass die entsprechende Variable für die Gleisbelegungen nicht E sein dürfen.   

Mir ist klar, dass das Ganze wahrscheinlich nicht optimal programmiert ist, aber es hat mal funktioniert.

Vielen Dank schon mal dafür, wenn sich das mal jemand ansehen könnte.

Viele Grüße vom Elefanten    

ev001.jpg

ev002.jpg

Bearbeitet von elefant65
Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Lösung scheint gefunden zu sein: Ich habe überall dort, wo eine Variable mit "E" belegt oder nach "E" abgefragt wird, das "E" durch "EZ" ersetzt. Und schon funktioniert die Steuerung wieder so wie früher :) :):) Habe zwar noch keinen Langzeittest gemacht, aber innerhalb der ersten Minuten gab es weder unbeabsichtigte Stillstände noch Unfälle.   

Würde mich natürlich mal interessieren, woran das liegen kann. Das "E" wird ja in der Programmierung (oder wurde zumindest früher, als ich noch in einfachen Sprachen selbts programmiert habe) für Zahlen mit Zehnerpotenzen verwendet. Vielleicht macht sich deshalb der Buchstabe als Wert für Variablen nicht so gut? Aber, vor ein paar Monaten ging es ja noch damit... Für mich ein Rätsel.

Vielen Dank für eure Tipps, die mich immerhin angeregt haben, der Sache mal systematisch auf den Grund zu gehen.

Neo, die Anlage musst du nicht mehr freischalten, sie funktioniert ja sowieso nicht.

Viele Grüße vom Elefanten 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Anlage heißt nicht 

vor 2 Stunden schrieb elefant65:

T01906-01

wie du schreibst, sondern

To1906-01

Aber nach fünf vergeblichen Anläufen mit dem aus deinem Posting kopierten Anlagennamen habe ich sie nun gefunden.

Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

Gerade eben schrieb elefant65:

Das "E" wird ja in der Programmierung (oder wurde zumindest früher, als ich noch in einfachen Sprachen selbts programmiert habe) für Zahlen mit Zehnerpotenzen verwendet. Vielleicht macht sich deshalb der Buchstabe als Wert für Variablen nicht so gut?

Nein, damit wird es definitiv nichts zu tun haben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Böse böse Falle! >:(

Es scheint so, als würdest Du hier einem Typenproblem zum Opfer fallen.
Wenn Du SG10Ein auf einen nichtnumerischen Wert initialisierst, funktioniert alles!!!
Setze ich also SG10Ein statt auf 0 auf NULL, was genauso nicht 'D' und nicht 'E' ist wie 0, dann schnackelt's. Also - stell's statt auf 0 auf X.
Hol' Dir BahnLand's XML-Auswerter, exportiere die EV, suche nach SG10Ein (und verwandten Fällen) und passe sie an.
Das ist im Sinne der Beschreibung also tatsächlich ein MBS-Fehler!

Gruß
  Andy

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 7 Minuten schrieb Goetz:

Nein, damit wird es definitiv nichts zu tun haben

Da wäre ich mir nicht sicher! Er zeigt E nie in Datenfeldern an, da rundet er, aber schau mal auf der Schnittstelle. Wenn Du irgendwo eine 0,00 in der Anzeige hast, hat er in der Tat einen E-Wert drin und den überträgt er dann auch so.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Minuten schrieb Andy:

und den überträgt er dann auch so.

Aber dann besteht der Wert doch nicht nur aus dem Großbuchstaben E
Und wenn das MBS eine Zahl erwartet, weil dieser Typ durch die Initialisierung vorgegeben wurde, dann wird das MBS doch sicher kein einzelnes E als floating point number interpretieren?

 

Also, im Augenblick bin ich mir noch ziemlich sicher dass das eine nichts mit dem anderen zu tun hat.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 10 Minuten schrieb Andy:

sieh und staune:

Vielen Dank für die anschauliche Demonstration :)

Und weil sowohl ein E als auch ein e als wahr gewertet wird, nicht jedoch ein A, ist es tatsächlich wohl so wie ihr beide sagt:

Es wird als E in einer floating point Zahl interpretiert.

Bearbeitet von Goetz
Link zu diesem Kommentar
Auf anderen Seiten teilen

Da war ich gerade mal eine Runde joggen, und schon ist das Rätsel gelöst :) Vielen Dank für die Mühe!

Das war natürlich auch eine Schluderei von mir, der Variable numerische und alphanumerische Werte zuzuweisen - unglücklicherweise dann auch mit einer Zahl als initialem Wert.

Bis vor ein paar Monaten hat es aber so problemlos funktioniert. Die Änderung muss dann mit einer Programmaktualisierung gekommen sein, aber nicht mit der allerletzten von vor ein paar Tagen. Davor ging es auch schon nicht.

Einen schönen Sommerabend noch wünscht euch der Elefant

Bearbeitet von elefant65
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb elefant65:

Das war natürlich auch eine Schluderei von mir

Nein nein, das hätte er verkraften müssen! Und gut, dass Du's gemacht hast. Auch dass Du auf 'E' als Exponent gekommen bist, das war mir nach meinem ersten Post noch nicht klar. Da war ich gerade am tippen, als Du es geschrieben hast.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

sehr interessantes Phänomen. Vorweg, ein Update des Studios hat dieses Problem nicht verursacht, das gibt es seit der ersten V4-Version. Das Problem tritt nämlich nur bei der 64-Bit-Version, nicht aber bei der 32-Bit-Version auf, soll heißen:

  • 32-Bit-Version interpretiert ein "E" als Text
  • 64-Bit-Version interpretiert ein "E" als eine Zahl 0

Das könnt ihr selber mit Andys Beispielprojekt testen.

Das war so natürlich nicht beabsichtigt, der Fehler liegt hier aber nicht direkt beim Studio, sondern bei der verwendeten Entwicklungsumgebung (Delphi), die bei der Konvertierung von Text in Zahlen einen Bug hat. Der Bug ist beim Hersteller bekannt, bis er gefixed ist, werde ich selber (in V5) einen Workaround einbauen, sodass auch unter 64-Bit ein E nicht einfach als 0 interpretiert wird (wobei das nur beim Konvertieren der EV eine Rolle spielt, später unterscheidet V5 strikt zwischen Text und Zahlen, unabhängig des Inhalts).

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

@elefant65,
die Anlage steht jetzt ganz normal im Katalog und Du kannst sie immer mit Deiner Arbeitsversion überschreiben, ohne dass Du auf eine Freigabe warten mußt.
Das gilt nur für Modelle.
Die Anlage muß sich sicher nicht verstecken und diese Idee mit der Prioritätssteuerung gefällt mir persönlich sehr gut.
Da wäre ich schon gespannt, wie's aussieht, wenn der E-Fehler draußen ist.

Übrigens konnte ich mir's nicht verkneifen, mal zu testen, was passiert, wenn man nun durch E teilt. Es passiert glücklicherweise absolut nichts, mein Rechner ist nicht verdampft.

Gruß
  Andy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich bin froh, dass der Rechner die Divison durch E schadlos überstanden hat :D

Ich habe jetzt die funktionierende Version online gestellt (To1906-01)  - diesmal sollte auch der angegebene Dateiname stimmen.

Bei der Einfahrt in die kleinen Bahnhöfe aus Richtung Schattenbahnhof kommt es zu keinen Überholungen, da hier der "Fahrplan" so ausgelegt ist, dass die Züge in genügend großem Zeitabstand starten - also immer erst, wenn ein Zug den Bahnhof in Richtung Hauptbahnhof verlassen hat. Die Steuerung ist aber so ausgelegt, dass es auch bei kürzerer Taktfolge je nach Priorität der Züge ggf. zum Halt vor der Einfahrt, im Bahnhof oder zu Überholungen kommen würde.

Im Hauptbahnhof greift dann eine Mischung aus Mindesthaltzeit (zum Ein- und Aussteigen) und Priorität nach Zugart. Wenn der Schnellzug eh noch etwas halten muss, fährt auch der Personenzug schon mal los, weil der dann ja im folgenden kleinen Bahnhof, wo nur die Personenzüge halten, wieder überholt werden kann. Wenn die Ausfahrt frei wird und ein Personenzug und einer mit höherer Priorität schon über der Haltezeit sind, bekommt natürlich der mit höherer Priorität den Vorzug. Die Güterzüge haben die geringste Priorität.

So eine Steuerung war die Grundidee der Anlage, daher auch eine 0815-Streckenführung und alles in der Ebene. Nachdem ich schon mal daran gescheitert war und im Wirrwar der Variablen und Countdowns selbst nicht mehr durchgeblickt habe, sollte deshalb das Hauptaugenmerk darauf liegen. Alles andere, auch der kleine Abstecher eines Güterzuges in das Werk am Südbahnhof und die Rückkehr in den Zugablauf auf der Hauptstrecke kam dann erst später dazu.

Die Schranke (links) ist noch nicht programmiert, was noch nicht schlimm ist, da sich auf den Straßen noch nichts bewegt ;) Die Straßenbahn fährt, aber auf dem größten Teil der Strecke noch "stromlos". Und, abgesehen von der Hochzeitsgesllschaft vor der Basilika in der historischen Altstadt, ist die Gegend bislang noch ausgestorben. Die meisten Weichen haben noch keine Anzeige usw.  Das werde ich jetzt nach und nach in Angriff nehmen. Mein alter Rechner war mit der Grafikarte ans Limit gekommen, deshalb hat die Arbeit an dieser Anlage lange geruht. Jetzt, mit neuem Rechner und Gamer-Grafikarte, macht es wieder Spaß.

Wenn jemand noch irgendwelche Ungereimtheiten entdeckt, ich freue mich über jeden Hinweis :)

Viele Grüße vom Elefanten

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 3 Stunden schrieb elefant65:

mit neuem Rechner und Gamer-Grafikarte ...

kam möglicherweise auch ganz unmerklich der Wechsel von 32 bit zu 64 bit?

Das wäre dann eine Erklärung, warum der Fehler erst jetzt auftrat. Laut Neo besteht er ja nur in der 64-bit Version.

Link zu diesem Kommentar
Auf anderen Seiten teilen

In der Tat so ist es: auf dem alten Rechner hatte ich tatsächlich noch die 32-Bit-Version, auf dem neuen habe ich die 64-Bit-Version installiert.

Meine allererste Vermutung nach dem Umzug auf den neuen Rechner war natürlich, dass das Problem irgendetwas mit dem neuen Rechner zu tun hat. Ich war eigentlich der Meinung, dass ich es deshalb auch noch einmal auf dem alten Rechner getestet hätte und dort das Problem auch aufgetreten wäre. Aber das habe ich dann wohl doch nicht getan..., denn ein Test vorhin dort lief problemlos mit "E" unter der 32-Bit-Version. Ich verstehe auch nicht, warum ich auf dem alten Rechner beim Umstieg auf die V4 nicht gleich die 64er-Version installiert habe. Aber ist ja auch egal jetzt - das Problem ist geklärt und Neo hat auch die Ursache herausgefunden. Vielen Dank noch mal allen Beteiligten für die Unterstützung beim Aufspüren des Fehlers! Das Modellbahnstudio ist nicht nur ein wirklich tolles Programm, auch das Forum bzw. die im Forum aktiven Enthusiasten - und natürlich nicht zuletzt die fleißgen Modellbauer - sind Spitze!

Ich wünsche allen ein schönes Wochenende. Viele Grüße von Elefant

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