Jump to content

ostenfstr

Mitglieder
  • Gesamte Inhalte

    4
  • Benutzer seit

  • Letzter Besuch

Letzte Besucher des Profils

Der "Letzte Profil-Besucher"-Block ist deaktiviert und wird anderen Benutzern nicht angezeigt.

  1. Hallo liebe Fan-Gemeinde, das Problem mit den variablen Objekten ließ mir keine Ruhe und ich habe mal eine kleine Testdemo erstellt, die das Problem weiter einkreist. Ist wahrscheinlich etwas übersichtlicher als eine ganze Anlage zu durchforsten Der Effekt ist reproduzierbar ... sobald einer Variablen, die zur Objekt-Referenzierung dient, innerhalb der EV neu gesetzt wird, benutzt der GESAMTE EV-Zyklus den ZULETZT zugewiesenen Wert. Dieses gilt sowohl für EREIGNISSE, wie auch für BEDINGUNGEN, nicht jedoch für AKTIONEN. Aktionen werden immer mit dem korrekten Objekt durchgeführt. Auch hat die Variable zu jedem Zeitpunkt den korrekten Wert. Dieses Verhalten ist doch nicht gewollt, oder? Es grüßt der Tüftler Ostenfstr Test_mit_variablen.zip
  2. Hallo liebe Fan-Gemeinde,   Wie angekündigt, habe ich mal einen Entwurf kreiert, der mir schon ewig im Kopf rumgeistert, der aber bei der Umsetzung auf Variablen einige Probleme bereitet... Zur Erklärung: Ich habe die Block-Steuerung von BAHNLAND aus dem WIKI mal testweise für zwei zweigleisige Kopfbahnhöfe modifiziert (siehe Datei 1: Langanlage Check 1). Bitte ignoriert für die Erklärung meines Problems alle ausgeblendeten Gruppen. Betätigt man den Hauptschalter am GBS, so fahren die beiden Züge in munterem Wechselspiel hin und her. So weit so gut ... EDIT: BITTE AB HIER NUR DEN TEXT LESEN UND NICHT MIT DEM BEISPIEL BESCHÄFTIGEN ... EINE DETAILIERTERE PROBLEMBESCHREIBUNG HABE ICH IM NÄCHSTEN BEITRAG EINGESTELLT. Im Beispiel 2 (Langanlage Check 2) habe ich versucht, im Bahnhof A (Gleise A1 und A2) die Signale (#SigA1B und #SigA2B) durch Variablen zu ersetzen. Die Idee ist folgende: Vor der Abarbeitung einer EV-Gruppe werden die zu dieser Gruppe gehörenden Variablen gesetzt (in diesem Fall: %Signal = #SigA1B oder %Signal = #SigA2B). Anschließend kann dann ein identisch definiertes Ereignis das jeweilige Ausfahrtsignal mit "$%Signal" abfragen. Der folgende Effekt tritt aber leider bei dieser Form der Abfrage ein (dargestellt rechts oberhalb vom GBS) ein: Die Variable "%Signal" wird offensichtlich korrekt gesetzt (erkennbar an der Beschriftung im angegebenen Bereich). Die nachfolgende Aktion, welche den Zustand von "$%Signal" als Bedingung abfragt, scheint aber den Variablenwert aus dem VORHERGEHENDEN Zyklus abzufragen, d.h. die Bedingung "wenn '$%Signal' = 0 dann Setze Beschriftung=Zu" in der Abarbeitung von Gleis A1 den Signalzustand von Signal #SigA2B darstellt. Ich gebe zu, das klingt ein wenig kompliziert, aber ich hoffe, dass die versierten Mitglieder verstehen, was ich meine. Ich habe ein ähnliches Problem bei der Lok-Geschwindigkeits-Ereignisgruppe beobachtet. Auch dort hat die EV bei Bedingungs-Definitionen den letzten Wert aus dem VORHERGEHENDEN Zyklus eingesetzt. Außerdem habe ich festgestellt (darum die aufwändige Darstellung links über dem GBS), dass BERECHNUNGEN mit Variablen eben NICHT (wie NEO angegeben hat) ihr Ergebnis den folgenden Ereignissen im gleichen Zyklus zur Verfügung stellen (testweise den Counter Sekunde+0,2 mal mit 0 starten). Bei der Routine, die die Lokgeschwindigkeit setzt ist der Wert "GeschwNeu+15"  NICHT direkt in einer Bedingung zu verwenden. Bin ich hier auf einen Bug gestoßen, oder habe ich in der Programmierung der EV etwas grundsätzlich verkehrt gemacht? @Bahnland: Ich denke, dass dieser Effekt dazu geführt hat, dass Du die "Zwischencounter" benutzt, weil die Aktionen nicht "atomar" sind. Meiner Meinung nach sollte man sich jedoch auf die korrekte Abarbeitung absolut verlassen können. Sonst arten größere Automatisierungs-Projekte in unendlicher Versuchsarbeit aus, oder? Ich hoffe, jemand durchblickt meine Erläuterungen  und bin schon jetzt gespannt auf eure Kommentare. Es grüßt Ostenfstr Langanlage_check_1.zip Langanlage_check_2.zip
  3. Hallo Bahnland, Neo, EASY, Ich muss schon sagen ... Ich bin schwer beeindruckt ... Kaum stellt man hier im Forum eine Frage, schon wird man innerhalb kürzester Zeit mit technisch präzisen Kommentaren geradezu bombardiert Vielen Dank euch allen!   Ich versuche mal strukturiert zu antworten: Zu 1 "Abfrage Countdown über Variable": @Neo: Mein Problem ist, dass ein abzufragender Countdown während der Programmierung praktisch noch gar nicht real exisiert, da nirgendwo ein Startereignis existiert. Da ihn das MBS nicht kennt, taucht er auch nicht in der Auswahlliste auf. Ich werde mal alle Countdowns als Dummy definieren und sehen, ob ich die dann auswählen kann. Ich würde mich wieder melden, wenn ich hier überhaupt nicht weiterkomme. Zu 2 "ständiges Ereignis": @Neo: eine (oder mehrere) Aktion(en), die bei JEDEM Durchlauf durch die EV IMMER ausgeführt werden. @EASY: Vielen Dank. Dann benutze ich zunächst mal meine Zählvariable und starte die mit einem Schalter. Mal sehn, ob sich das bei Fortschritt des Projektes überhaupt als störend herausstellt. Zu 3 "Mehrere Instanzen können gleichzeitig eine Variable abfragen" @Neo: Das ist klar und deutlich. Danke. @Bahnland: Danke, das werde ich so mal umsetzen.   Ich werde jetzt mal mit diesen Informationen in Ruhe eine Teststrecke aufbauen und sie dann mal zur Kommentierung einstellen.   Nochmals vielen Dank für eure Mühe ostenfstr  
  4. Hallo liebe Fan-Gemeinde,   nach geraumer Zeit habe ich wieder vor, eine neue Anlage mit dem MBS zu bauen. Beim Einlesen und Ausprobieren der neuen Funktionalitäten kam mir spontan der Gedanke, ob es jetzt wohl möglich sei, eine Automatiksteuerung (hauptsächlich Streckenblock- und Bahnhofsfunktionalitäten) so zu modularisieren, dass man z.B. einen kompletten Streckenblock so erstellen kann, dass die zugehörige EV mit der Änderung eines einzigen Ereignisses (welches dann Blockdefinitions-Variablen setzt) in beliebiger Anzahl auf die eigene Anlage gezogen werden kann. Ich habe die grundlegenden Mechanismen dafür weitestgehend ausprobiert, hätte aber dazu einige Fragen, die das Forum vielleicht beantworten könnte: 1. In den Versions-updates steht "Die Animations/Countdownbedingungen und -Aktionen unterstützen nun ebenfalls Variablen (beginnend mit $)". In meinem Fall stolperte ich darüber, dass wohl das Starten eines Countdowns über einen variablen Counter ausgelöst werden kann, nicht jedoch die Abfrage auf einen abgelaufenen Counter. Hat das einen tieferen Sinn? 2. Um so eine EV aufzubauen, die diese Struktur aufweist (Ereignis: Variablen Block A setzen / standardisierte Ereignisgruppe Streckenblock / Ereignis: Variablen Block B setzen / standardisierte Ereignisgruppe Streckenblock / Ereignis: Variablen Bahnhof C setzen / standardisierte Ereignisgruppe Durchgangsbahnhof / usw.) müsste man bei jedem Durchlauf der EV die zugehörigen Variablen setzen. In der EV muss ich aber immer ein auslösendes Ereignis haben. Die bisherige Lösung ist die Erhöhung einer Variablen, wenn diese Variable geändert wurde. Gibt es eine Möglichkeit, auf elegante Weise die ERSTE Änderung auszulösen? 3. Bahnland beschreibt in dem Automatisierungs-Wiki (großes Lob für den Artikel) im Abschnitt über Lock-Variablen: "Leider ist der hier beschriebene Mechanismus "Lockvariable auf 0 prüfen und dann auf eigenen Wert setzen" nicht "atomar". D.h. die Aktionsfolge "Lesen + Bewerten + Schreiben" kann nicht als "eine Operation" realisiert werden, während deren Bearbeitung konkurrierende Lese- und Schreib-Operationen unterbunden werden. " Wird die EV nicht sequentiell abgearbeitet, so dass jeder Schritt davon ausgehen kann, dass der vorhergehende Schritt abgeschlossen ist und er sofort auf die Ergebnisse der vorhergehenden Aktionen zugreifen kann? Dann wäre doch eine Lock-Variable in dem Moment geändert, in dem sie gesetzt würde. Könnte tatsächlich eine nachfolgende Instanz einen alten Wert sehen, obwohl dieser schon geändert ist?   Es scheint vielleicht für das Gesamtergebnis ein zu hoher Aufwand zu sein, den ich hier betreibe. Aber für mich hat so eine Standardisierung einige gravierende Vorteile. So ließe sich z.B. bei einer Gleisverzweigung oder -zusammenführung eine Round-Robin-Funktion entwickeln, die dann durch einfachen Austausch der Steuerblöcke auf eine Anlage auch im Nachhinein innerhalb von Minuten implementiert werden kann. Weiterhin verliere ich keine Automatisierungsereignisse, wenn ich beim Umbau mal ein Gleis ändere oder eine andere Weiche benutze, weil die EV nicht mehr direkt auf die Objekte zugreift, sondern eine Referenz über Namen herstellt.   Es wäre nett, wenn jemand zu den Fragen einige Antworten hätte. Gruß Ostenfstr
×
×
  • Neu erstellen...