Um Beiträge schreiben zu können, muss man sich anmelden. Die Bestätigung erfolgt durch den Administrator. Den Teil zum Vorbild können nur registrierte User betreten.

ForumNewsMitgliederSuchenRegistrierenMember LoginKostenloses Forum!


Neuer Thread ...


ErstellerThema » Beitrag als Abo bestellenThread schließen Thread verschieben Festpinnen Druckansicht Thread löschen

Holger ...



...

Status: Offline
Registriert seit: 03.01.2006
Beiträge: 1917
Nachricht senden
...   Erstellt am 09.11.2015 - 16:23Zum Seitenanfang Beitrag zitieren Beitrag melden Beitrag verändern Beitrag löschen


Es ist bekannt, dass man mehrere Kontakt übereiander positioniern kann. Man muss dabei nur darauf achten, dass man über die Aktiv-Formel der einzelnen Kontakte dafür sorgt, das beim Überfahren der Kontakte jeweils nur einer der Kontakte aktiv ist und dann ausgelöst wird.

Allerdings bin ich jetzt auf einer meiner Anlagen über ein seltsames Verhalten gestoßen.
Auf dieser habe ich zwei Schaltkontakte übereinander gelegt, die je nach Situation beim Auslösen unterschiedliche Aktionen ausführen sollen.

In der .danl-Datei sieht das dann - beispielhaft - wie folgt aus:

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
 
[Kontakt Schalter S1]
Aktiv=!Signal Flag
Gleis=1+
Position=15.00
. . .
Signal Ausf B=+akt
. . .

[Kontakt Schalter S2]
Aktiv=Signal Flag
Gleis=1+
Position=15.00
. . .
Signal Ausf A=+akt
. . .

Die Schalter S1 soll nur auslösen, wenn das Relais Signal Flag nicht gesetzt ist, und der Schalter S2 soll auslösen, wenn das Relais Signal Flag gesetzt ist.

Bis hierher eigentlich alles ganz logisch - oder?

Worin besteht nun das seltsame Verhalten?
Besitzt das Relais Signal Flag zum Zeitpunkt des Überfahrens der Kontakte den Wert 0 wird der Kontakt Schalter S1 ausgelöst.
Besitzt das Relais Signal Flag zum Zeitpunkt des Überfahrens der Kontakte aber den Wert +akt werden beide(!!!) Kontakte ausgelöst.

Was passiert hier???

Ich habe selbst eine ganze Weile und mehrere Testfahrten im Schneckentempo über diese Kontakte hinweg bei wiederholtem abprüfen der Signalzustände gebraucht, um zu begreifen, was passiert. So richtig verstanden habe ich es ehrlich gesagt nicht.

Der an das Signal Ausf A gebundene Haltkontakt ist folgendermaßen definiert:
Code:
1:
2:
3:
4:
5:
6:
7:
8:
 
[Kontakt Halt Ausf A]
Gleis=5+
Position=0.00
Bremsweg=75.00
Signal=Ausf A
. . .
Signal Flag=0.00
. . .

Aus meinen Beobachtungen und der Tatsache heraus, dass ich den Programmcode von VE ja nicht kenne, kann ich jetzt nur vermuten, dass Folgendes passiert:
Beim Überfahren der Kontakte wird das Auslösen der Kontakte in die Ereigniswarteschlange eingestellt, diese hat dann vermutlich folgenden Inhalt:
Kontakt Schalter S2 ausgelöst | Kontakt Schalter S1 ausgelöst | . . .

Beim Abarbeiten der Warteschlange wird jetzt zunächst geprüft, ob die Aktiv-Formel von Kontakt Schalter S2 den Wert +akt ergibt. Dies ist der Fall, und die Schaltanweisungen des Kontaktes werden ausgeführt, wobei dann auch das Signal Ausf A gesetzt wird. Ein an diesem Signal haltender Zug beginnt seine Fahrt und löst den an das Signal gebundenen Haltkontakt aus. Dieses Auslösen wird von VE vermutlich in der Ereigniswarteschlange bevorzugt und deren Inhalt geändert in:
Kontakt Halt Ausf A ausgelöst | Kontakt Schalter S1 ausgelöst | . . .
Anm.: Das Ereignis des Auslösens des Kontaktes Schalter S2 wurde bereits aus der Warteschalnge gelöscht, da dessen Anweisungen abgearbeitet wurden.

Als nächstes werden also die Anweisungen des Kontaktes Halt Ausf A abgearbeitet und hierbei auch das Relais Signal Flag auf den Wert 0 gestzt, und anschließend das Ereignis aus der Warteschlange entfernt.
Nun kommt die Abarbeitung des Auslösens des Kontaktes Schalter S1 an die Reihe, und dessen Anweisungen werden auch ausgeführt, da die Aktiv-Formel jetzt auch den Wert +akt zurück liefert.

Sollte VE tatsächlich so arbeiten, wie ich es vermute, dann wäre es ein Bug. (Von daher könnte dieser Beitrag auch unter "Allgemein > Bug oder Feature" stehen.)

In meinem Fall führte dieser zu einer "Kollision" der beiden Züge, die vor den Signalen Ausf A und Ausf B standen, da beide los- und in das anschließende Streckengleis fuhren.

Wie kann man diesen "Bug" nun umgehen?
Hier gibt es zwei Möglichkeiten.

Ansatz1:
Die beiden Schaltkontakte hintereinander anordnen, so dass zuerst der Kontakt ausgelöst wird, der Aktiv sein soll, wenn das Relais Signal Flag den Wert 0 besitzt - also nach obigem Beispiel der Kontakt Schalter S1 - und dahinter dann der Kontakt der aktiv sein soll, wenn das Relais Signal Flag den Wert +akt besitzt - also der Kontakt Schalter S2.

Ansatz2:
Das Setzen des Relais Signal Flag auf den Wert 0 erfolgt über einen separaten Schaltkontakt, der hinter dem Haltepunkt des Haltkontaktes liegt.

Gruß Holger





Signatur
Mit ViewEEEC macht EEEC erst richtig Spaß! (Riesendank an Detlev)

Detlev ...
Moderator für ViewEEEC


...

Status: Offline
Registriert seit: 13.09.2005
Beiträge: 2574
Nachricht senden
...   Erstellt am 10.11.2015 - 09:08Zum Seitenanfang Beitrag zitieren Beitrag melden Beitrag verändern Beitrag löschen


Das ist jetzt nicht wirklich ein Bug, sondern hat damit zu tun, dass die Reihenfolge der Schaltbefehle die Priorität festlegt, mit der ggf. freigeschaltete Züge losfahren. Nach der Abarbeitung eines Schaltkontaktes müssen erst die Schaltungen der dadurch losfahrenden Züge ausgeführt werden, da diese ggf. wieder Signale und damit andere Züge sperren. Esrt danach kann mit Abarbeitung eines weiteren Schaltkontaktes weitergemacht werden, auch wenn dieser auf den gleichen Koordinaten liegt.

Detlev





Signatur
http://www.det-schmidt.de/Eeec Die Heimseite von ViewEEEC

Holger ...



...

Status: Offline
Registriert seit: 03.01.2006
Beiträge: 1917
Nachricht senden
...   Erstellt am 10.11.2015 - 09:34Zum Seitenanfang Beitrag zitieren Beitrag melden Beitrag verändern Beitrag löschen


Ok, das klingt logisch.

@all,
also in Zukunft besser zweimal hingucken und falls man über ein "unerklärliches Verhalten" stolpert, einen der beiden Lösungsansätze ausprobieren, oder - als dritter Ansatz - die Aktivformeln um weitere Bedingungen erweitern.

Holger





Signatur
Mit ViewEEEC macht EEEC erst richtig Spaß! (Riesendank an Detlev)


Neuer Thread ...

Geburtstagsliste:
Heute hat kein User Geburtstag!
----------------------------------


Um Beiträge schreiben zu können, muss man sich anmelden. Die Bestätigung erfolgt durch den Administrator. Den Teil zum Vorbild können nur registrierte User betreten.

Impressum

Dieses Forum ist ein kostenloser Service von razyboard.com
Wollen Sie auch ein kostenloses Forum in weniger als 2 Minuten? Dann klicken Sie hier!



blank