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 28.04.2015 - 12:28Zum Seitenanfang Beitrag zitieren Beitrag melden Beitrag verändern Beitrag löschen


Vor kurzen erhielt ich per PM eine Anfrage, ob es in VE möglich sei, einen Kontakt nur bei jedem 5. Überfahren durch einen Zug auszulösen.
VE bietet hierfür in der derzeit aktuellen Version 0.9a keine eigene Funktionalität an, vielleicht wird dies aber in einer zukünftigen Version 1.0 der Fall sein. Bis dahin gibt es jedoch die Möglichkeit, diese Anforderung durch die bereits vorhandenen Schalt- und Steuerungsmöglichkeiten der Anlagenautomatisierung - also Kontakte und Signale/Relais - umzusetzen.

Für das oben beschriebene konkrete Beispiel werden benötigt:

  • 2 Schaltkontakte
  • 6 Signale, die man z.B. mit ZR0 ... ZR5 benennt (ZR=Zählrelais)
Die beiden Schaltkontakte baut man direkt hintereinander ein, hierbei dient der erste Kontakt dem Durchschalten der Zählrelais. In der Kontaktdefinition sieht dies wie folgt aus:
Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
 
[Kontakt Schalter Zählrelais]
Gleis=...
Position=...
Signal@ ZR0=Signal ZR1
Signal@ ZR1=Signal ZR2
Signal@ ZR2=Signal ZR3
Signal@ ZR3=Signal ZR3
Signal@ ZR4=Signal ZR5
Signal@ ZR5=Signal ZR0
Als nächstes werden die Zählrelais initialisiert, hierzu werden die Signale ZR0 ... ZR4 auf den Wert 0 gesetzt.

Wie erfolgt nun das Durchschalten der Zählrelais?
Beim ersten Auslösen des Kontaktes wird der Wert des Relais ZR5 (+akt) an das Relais ZR4 übergeben und anschließend das Relais ZR5 auf den Wert des Relais ZR0 gesetzt - also auf Grund der Initialisierung auf 0.
Beim nächsten Auslösen erhält das Relais ZR3 den Wert +akt und das Relais ZR4 wird "genullt". Dieses "Weiterschieben" des Wertes +akt erfolgt so lange, bis das Relais ZR0 den Wert +akt besitzt.

Nun passieren zwei Dinge. Zum Einen wird durch die letzte Anweisung der Kontaktdefinition der Zähler wieder neu initialisiert, und zum Anderen kommt jetzt der zweite Schaltkontakt ins Spiel.
Dessen Kontaktdefinition sieht wie folgt aus:
Code:
1:
2:
3:
4:
5:
6:
7:
 
[Kontakt Schalter XYZ]
Aktiv=Signal ZR0
Gleis=...
Position=...
...
auszuführende Schaltanweisungen
...
Auf Grund der Aktiv-Formel wird dieser Kontakt nur ausgelöst, wenn das Relais ZR0 den Wert +akt besitzt.

Hinweise und Anmerkungen:
  • Der zweite Kontakt muss nicht zwingend ein Schaltkontakt sein, der Einsatz eines Haltkontaktes, der nur bei jeder 5. Überfahrt aktiv ist, ist ebenfalls möglich.
  • Möchte man eine andere Anzahl an Überfahrten, so ist auch dies möglich. Wichtig ist hierbei nur, dass man immer ein Zählrelais mehr als die Anzahl der gewünschten Überfahrten benötigt.
  • Es besteht auch die Möglichkeit, die Schaltanweisungen des zweiten Kontaktes direkt in die Definition des Schaltkontaktes für das Durchschalten der Zählrelais zu integrieren. In diesem Fall muss jedoch der Wert des Relais ZR0 immer in irgendeiner Form in die Schaltanweisungen mit einfließen.
    Etwas kompliziert wird es allerdings, wenn auch Weichen direkt über den Schaltkontakt für das Durchschalten der Zählrelais gestellt werden sollen.
    Da Weichen bei der Abarbeitung von Schaltanweisungen immer zuerst - also vor irgendwelchen Signalen - gestellt werden (dies gilt zumindest in VE Version 0.9a), müssen diese entweder in Abhängigkeit des Relais ZR1 gestellt werden, oder man fügt sämtliche Schaltanweisungen für Weichen und Signale vor den Anweisungen für das Durchschalten der Zählrelais ein, dann können sowohl Weichen als auch Signale in Abhängigkeit vom Relais ZR0 gestellt werden.
    Nach meiner Erfahrung ist es - speziell für "Schaltungsneulinge" - besser, mit zwei Kontakten zu arbeiten. Das erspart einiges an "Gehirnakrobatik" und erleichtert auch die spätere Fehlersuche und -behebung.
  • Will man mehrere Kontakte verlegen, die erst nach einer bestimmten Anzahl von Überfahrten ausgelöst werden sollen, dann werden für jeden dieser Kontakte jeweils ein eigener Zählrelaisschalter sowie ein eigener Satz an Zählrelais benötigt.

Freundliche Grüße
Holger
Ich hab das mal nicht als "... für Dummies" deklariert, da dieses Thema - aus meiner Sicht - dann doch schon eher zur "hohen Schule" bei der Anlagensteuerung gehört.
Bitte korrigiert mich, wenn ich da falsch liege - dann werde ich natürlich auch gern den Titel entsprechend anpassen.





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 29.04.2015 - 09:56Zum Seitenanfang Beitrag zitieren Beitrag melden Beitrag verändern Beitrag löschen


Nee, das ist mit Sicherheit nichts für Anfänger

Eine Möglichkeit, das Schalten nur bei jeder x-ten Überfahrt direkt zu konfigurieren, wird es auch in VE1.0 nicht geben, wann immer es diese Version auch geben wird. Möglicherweise wird das aber durch Operationen wie "+" und Vergleiche wie " " auf Signalwerte etwas erleichtert werden. Schaun wir 'mal.

Das ganze könnte dann so aussehen:

Code:
1:
2:
3:
4:
 
[Kontakt Schalter Zählrelais]
Gleis=...
Position=...
Signal ZR0=Signal ZR1 + 1


Code:
1:
2:
3:
4:
5:
6:
7:
8:
 
[Kontakt Schalter XYZ]
Aktiv=Signal ZR0 > 3
Gleis=...
Position=...
Signal ZR0=0
...
auszuführende Schaltanweisungen
...


Detlev





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

Werner ...
Moderator für Tips & Tricks


...

Status: Offline
Registriert seit: 14.09.2005
Beiträge: 850
Nachricht senden
...   Erstellt am 13.05.2015 - 22:46Zum Seitenanfang Beitrag zitieren Beitrag melden Beitrag verändern Beitrag löschen


Hallo zusammen,
warum nicht gleich ein hübscher Binärzähler?

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
 
Signal@ Zw=Signal S0&Signal S1&Signal S2&Signal S3
Signal@ S3=Signal S3&!Signal Zw
Signal@ Zw=Signal S0&Signal S1&Signal S2&!Signal Zw
Signal@ S3=Signal S3|Signal Zw
Signal@ Zw=Signal S0&Signal S1&Signal S2
Signal@ S2=Signal S2&!Signal Zw
Signal@ Zw=Signal S0&Signal S1&!Signal Zw
Signal@ S2=Signal S2|Signal Zw
Signal@ Zw=Signal S0&Signal S1
Signal@ S1=Signal S1&!Signal Zw
Signal@ Zw=Signal S0&!Signal Zw
Signal@ S1=Signal S1|Signal Zw
Signal@ S0=!Signal S0

So, das war der Zähler, wobei Zeile 1 und 2 für die Nullrückstellung nach dem 16. Impuls zuständig sind. Falls gar nicht soweit gezählt wird, können sie entfallen. Das Ganze ist selbstverständlich expandierbar, wobei pro weiteres Bit jeweils 4 Zeilen notwendig sind, die logischerweise immer länger werden. Zum Beispiel sind die Zeilen 3 bis 6 für die vierte Stelle zuständig. Zeile 13 ist der Sonderfall fürs Einer-Bit. Da kürzen sich die Zwischenrelais raus, die ansonsten Klammern ersetzen.
Danach folgt die Auswertung zwecks Ansteuerung des Signals A, wobei die Anzahl der Impulse über S0 bis S3 (jedes Relais = 1 Bit) in der oberen Zeile einstellbar ist. Im einfachsten Fall erfolgt die Schaltung nach dem 16. Impuls - mehr geht hier nicht.

Code:
1:
2:
3:
4:
5:
 
Signal@ A=!Signal S0&!Signal S1&!Signal S2&!Signal S3
Signal@ S0=Signal S0&!Signal A
Signal@ S1=Signal S1&!Signal A
Signal@ S2=Signal S2&!Signal A
Signal@ S3=Signal S3&!Signal A


Für den 12. Impuls sähe die vorstehende Zeile 1 z.B. so aus:

Code:
1:
 
Signal@ A=!Signal S0&!Signal S1&Signal S2&Signal S3


Es sind auch mehrere unterschiedliche Abfragen in einem Durchgang möglich.

Es kann derselbe oder ein separater nachfolgender Kontakt benutzt werden.

Das könnte man auf die Spitze treiben. Wer Lust hat, noch mehr Bit-Relais anzulegen und den berühmten unterirdischen Schaltwagen in einem minutengenau berechneten Kreis rotieren lässt, könnte damit sogar eine Digitaluhr bauen , bei der mit nur einem einzigen Kontakt z.B. verschiedene Züge nach Fahrplan gestartet werden könnten. Das nervigste dabei wäre wohl die Binärcodierung. Wer Lust und Zeit hat, kann es ja mal ausprobieren.

Oder man lässt es sein, denn schließlich warten wir doch alle darauf, dass Detlev so was irgendwann "richtig" programmiert

Vielleicht findet sich aber auch ein begnadeter Mathematiker, der das Ganze noch vereinfacht.




Detlev ...
Moderator für ViewEEEC


...

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


Ehrlich gesagt hatte ich bei Holgers Schaltung auch gleich gedacht, binär würde das doch auch gehen, aber verständlicher ist dann Holgers Variante für Nicht-Informatiker doch irgendwie.

Aber interessant ist es schon, was man mit doch recht einfachen Schaltungs-Möglichkeiten so alles anstellen kann. So spontan würde ich sagen, einfacher geht es nicht, dazu würde man dann eine XOR (Exklusiv-Oder) Verknüpfung benötigen. Aber mit "+" wäre es noch einfacher.

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 28.05.2015 - 18:35Zum Seitenanfang Beitrag zitieren Beitrag melden Beitrag verändern Beitrag löschen


@Werner:
Auch ich hatte schon mal die Idee, einen Binärzähler zu bauen, allerdings habe ich dafür nie einen brauchbaren Ansatz gefunden.
Ich hab auch eine ganze Weile gebraucht, um zu verstehen was Du hier machst.

Zugegeben, Deine Lösung benötigt eindeutig weniger Relais als meine, aber der Schaltungsaufwand dafür ist schon immens - bei meiner Lösung wären für die bei Dir maximal möglichen 16 Durchläufe insgesamt 17 Relais erforderlich.
Und für einen Einsteiger oder auch Nicht-Informatiker ist Binärcode schon sehr abstrakt.

Mir war zunächst auch nicht ganz klar, was Du mit dem Signal A anstellst - wenn ich das richtig verstanden habe, entspricht dies dem Signal ZR0 aus meiner Lösung, in dessen Abhängigkeit dann ein weiterer Kontakt ausgelöst wird. Dann reicht es doch aber auch, wenn die Auswertungs-Formel direkt in die Aktiv-Formel des zweiten Kontaktes eingetragen wird. Oder?

Und leider stimmen einige Aussagen zu Deiner Lösung auch nicht so ganz:

Wollte man tatsächlich das Signal A nach jedem 16. Impuls schalten, dürfen die nachfolgenden 4 Anweisungen aus dem zweiten Codeblock nicht(!) verwendet werden, da diese die einzelnen "Bits" bereits wieder Ausnullen und der Zähler dann beim nächsten Auslösen gleich auf 1 springt - somit würde das Signal A nachfolgend bereits nach jedem 15. Durchlauf wieder aktiv werden.

Die vier Anweisungen sind nur dann erforderlich, wenn ein Kontakt nach weniger als 16 Durchläufen ausgelöst werden soll.

Die Aussage "Es sind auch mehrere unterschiedliche Abfragen in einem Durchgang möglich." stimmt leider ebenfalls nicht.
Verwendet man auch die Anweisungen zum Ausnullen, ergibt i.d.R. nur die Auswertungs-Formel für den dem niedrigsten Zählerwert +akt, alle anderen Formeln ergeben immer 0.
Verwendet man die Anweisungen zum Ausnullen nicht, dann kann man zwar den "Zeitpunkt" des ersten(!) Auslösens bestimmen, jedes weitere Auslösen erfolgt dann aber immer nach jedem 16 Durchlauf ab dem ersten Auslösen.
Es sei denn, man definiert mehrere Bedingungen, bei denen die gleiche Aktion ausgelöst werden soll, also z.B.:

Code:
1:
2:
 
Signal@ A=Signal S0&!Signal S1&Signal S2&!Signal S3
Signal@ B=!Signal S0&!Signal S1&Signal S2&Signal S3
wodurch das Signal A beim Zähler 5 und das Signal B beim Zähler 12 aktiv wird, und definiert dann einen weiteren Kontakt, dessen Aktiv-Fomel dann lautet
Code:
1:
 
Aktiv=Signal A|Signal B
Dieser Kontakt würde dadurch nach dem 5., 12., 21., 28. usw. Durchlauf ausgelöst.

Gruß
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