die Befehle bei märklin Digital

Die Kommunikation zwischen dem PC und dem Interface geschieht fast so wie im richtigen Leben:
will man einen Auftrag erledigen lassen , muß man sagen, von wem man was will.
Die gleichen Bedingungen muß auch ein Programm erfüllen, wenn es dem Interface erfolgreich Befehle erteilen soll.

Um eine Instruktion ausführen zu können, braucht das Interface im Normalfall

Unter 'Adresse' verstehen wir in unserem Fall die Decoder-Adresse der Lokomotive oder des Magnetartikels und
der 'Befehl' teilt dem Interface z.B. die Fahrstufe oder die Schaltrichtung einer Weiche mit.

Die Adressen der Lokomotiven liegen zwischen 1 und 80 und die Adressen der Magnetartikel reichen von 1 bis 256.

Und schon taucht eine Frage auf:
Es gibt 80 Adressen für Lokomotiven und 256 für Magnetartikel. Beide Adressbereiche beginnen mit 1, folglich gibt es eine Überschneidung der Adressen 1 bis 80. Woher weiß das Interface z.B. bei Adresse 19 welcher Empfänger gemeint ist ?
Antwort:
Durch eine kluge Aufteilung der Befehle hat es Märklin verstanden, jedem Befehl eine zweite Information mitzugeben.
Wie wir der folgenden Tabelle entnehmen können, liegen die Befehle für die Fahrtregelung der Lokomotiven zwischen 1 und 31 während die Magnetartikel mit 33 und 34 geschaltet werden.
Erhält nun das Interface den Befehl 33 oder 34 kann es sich bei der zugehörigen Adresse nicht um eine Lokomotive sondern nur um einen Magnetartikel handeln.

Schauen wir uns nun die Befehle im einzelnen an:

Befehl Bedeutung  Licht
0 Fahrstufe 0, Lok anhalten aus
1 - 14 Fahrstufe 1 - 14 aus
15 Fahrtrichtungswechsel aus
16 Fahrstufe 0, Lok anhalten ein
17 - 30 Fahrstufe 1 - 14 ein
31 Fahrtrichtungswechsel ein
32 beendet das Aussenden des Schaltstromes für die Magnetartikel
33 Magnetartikel schalten <<<
34 Magnetartikel schalten >>>
35 - 63 frei
64 - 79 schaltet die Funktionen f1...f4
den einzelnen Funktionen sind dabei die folgenden Werte zugeordnet

f 1 1
f 2 2
f 3 4
f 4 8

Um eine Funktion einzuschalten, ist der betreffende Wert zu der Zahl 64 hinzu zu addieren.

Beispiele Berechnung Befehl
einschalten der Funktion f1 64 + 1 65
einschalten der Funktion f2 64 + 2 66
einschalten der Funktion f3 64 + 4 68
einschalten der Funktion f4 64 + 8 72
einschalten der Funktionen f1 + f2 64 + 1 + 2 67
einschalten der Funktionen f1 + f3 64 + 1 + 4 69
einschalten der Funktionen f2 + f4 64 + 2 + 8 74
einschalten der Funktionen f3 + f4 64 + 4 + 8 76
einschalten der Funktionen f1 + f2 + f3 64 + 1 + 2 + 4 71
einschalten der Funktionen f1 + f2 + f4 64 + 1 + 2 + 8 75
einschalten der Funktionen f1 + f2 + f3 + f4 64 + 1 + 2 + 4 + 8 79

Vielleicht ist Euch aufgefallen, das sich die Beispiele immer nur auf das einschalten von Funktionen beziehen.
Wie aber schaltet man eine Funktion wieder aus ? Es gibt keinen speziellen Befehl zum Ausschalten einer Funktion.

Um die Antwort zu verstehen, erinnere ich Euch an die Überschrift dieser Seiten : DIGITALsteuerung.
Und digital heißt, es gibt nur zwei Zustände: 0 oder 1, ein oder aus ... und daraus folgt:
wenn es der eine Zustand nicht ist, muß es der andere sein !

Für das Interface bedeutet z.B. der Befehl 68:

f 1 = aus f 2 = aus f 3 = EIN f 4 = aus

Dieser Befehl schaltet nicht nur f3 ein, sondern auch f1 + f2 + f4 aus.

Vielleicht ist diese komplizierte Angelegenheit etwas leichter zu verstehen, wenn wir einfach 'anders herum' denken:
wir schalten nicht eine Funktion AUS, sondern wir schalten sie nicht EIN !
Beispiel:
<> wir senden den Befehl 71 und schalten damit f1 + f2 + f3 ein
<> nun wollen wir f2 ausschalten, f1 und f3 sollen eingeschaltet bleiben
<> wir senden den Befehl 69: f1 + f3 einschalten. Da wir f2 + f4 nicht einschalten, schaltet das Interface sie aus.
Das f1 + f3 schon eigeschaltet sind und f4 ausgeschaltet war, ist völlig belanglos.

Das Interface schaltet bei dem Befehl 69:

f 1 = EIN f 2 = aus f 3 = EIN f 4 = aus

und damit haben wir genau das erreicht, was wir wollten.

96 schaltet die Anlage nach einem Nothalt wieder ein
97 schaltet die Anlage stromlos NOTHALT
98 - 128 frei
129 1. Rückmeldemodul auslesen
130 1. + 2. Rückmeldemodul auslesen
131 1. - 3. Rückmeldemodul auslesen
132 1. - 4. Rückmeldemodul auslesen
133 1. - 5. Rückmeldemodul auslesen
134 1. - 6. Rückmeldemodul auslesen
135 1. - 7. Rückmeldemodul auslesen
136 1. - 8. Rückmeldemodul auslesen
137 1. - 9. Rückmeldemodul auslesen
138 1. - 10. Rückmeldemodul auslesen
139 1. - 11. Rückmeldemodul auslesen
140 1. - 12. Rückmeldemodul auslesen
141 1. - 13. Rückmeldemodul auslesen
142 1. - 14. Rückmeldemodul auslesen
143 1. - 15. Rückmeldemodul auslesen
144 1. - 16. Rückmeldemodul auslesen
145 1. - 17. Rückmeldemodul auslesen
146 1. - 18. Rückmeldemodul auslesen
147 1. - 19. Rückmeldemodul auslesen
148 1. - 20. Rückmeldemodul auslesen
149 1. - 21. Rückmeldemodul auslesen
150 1. - 22. Rückmeldemodul auslesen
151 1. - 23. Rückmeldemodul auslesen
152 1. - 24. Rückmeldemodul auslesen
153 1. - 25. Rückmeldemodul auslesen
154 1. - 26. Rückmeldemodul auslesen
155 1. - 27. Rückmeldemodul auslesen
156 1. - 28. Rückmeldemodul auslesen
157 1. - 29 Rückmeldemodul auslesen
158 1. - 30. Rückmeldemodul auslesen
159 1. - 31. Rückmeldemodul auslesen
160 - 192 frei
193 1. Rückmeldemodul auslesen
194 2. Rückmeldemodul auslesen
195 3. Rückmeldemodul auslesen
196 4. Rückmeldemodul auslesen
197 5. Rückmeldemodul auslesen
198 6. Rückmeldemodul auslesen
199 7. Rückmeldemodul auslesen
200 8. Rückmeldemodul auslesen
201 9. Rückmeldemodul auslesen
202 10. Rückmeldemodul auslesen
203 11. Rückmeldemodul auslesen
204 12. Rückmeldemodul auslesen
205 13. Rückmeldemodul auslesen
206 14. Rückmeldemodul auslesen
207 15. Rückmeldemodul auslesen
208 16. Rückmeldemodul auslesen
209 17. Rückmeldemodul auslesen
210 18. Rückmeldemodul auslesen
211 19. Rückmeldemodul auslesen
212 20. Rückmeldemodul auslesen
213 21. Rückmeldemodul auslesen
214 22. Rückmeldemodul auslesen
215 23. Rückmeldemodul auslesen
216 24. Rückmeldemodul auslesen
217 25. Rückmeldemodul auslesen
218 26. Rückmeldemodul auslesen
219 27. Rückmeldemodul auslesen
220 28. Rückmeldemodul auslesen
221 29. Rückmeldemodul auslesen
222 30. Rückmeldemodul auslesen
223 31. Rückmeldemodul auslesen
224 - 256 frei

Wie schon weiter oben erläutert, werden normalerweise immer Befehl und Adresse (2 Bytes) an das Interface übertragen.
Es gibt allerdings mehrere Ausnahmen:

An dieser Stelle möchte ich mir auch mal eine kritische Frage an Märklin erlauben:
Warum wurde bei der Abfrage der Rückmeldemodule so verschwenderisch mit den Adressen umgegangen ?
62 Adressen, -das ist fast ein Viertel der zur Verfügung stehenden Range !
Warum wurde nicht auch hier eine 2-Byte-Anweisung geschaffen.
z.B.
Befehl = 35 (Auslesen eines Rückmeldemoduls), Adresse = Adresse des gewünschten Moduls
oder
Befehl = 36 (Auslesen mehrerer Rückmeldemodule), Adresse = Adresse bis zu welchem Modul ausgelesen werden soll