Eingestellt: 01.01.2007 --- letzte Änderung: 20.10.2024 --- (c) Dr.-Ing. Thomas Wiesner
Um die Module des MBCAN-Projektes auf dem CAN-Bus ansprechen und parametrieren zu können, bedarf es neben der Geräte-UiD auch einen adäquaten
Befehlssatz. Der Befehlssatz von Märklin® setzt sich aus Kommandos zusammen, die im CAN-Header integriert sind. Da dieser Header sehr sensibel
auf Fehler reagiert, fällt er für eigene Befehlsübertragungen aus.
Märklin® hat aber eine Möglichkeit geschaffen, dass Privatpersonen, Vereine o.ä. freie Adressräume in der Loc-ID (Local ID, nicht Lokomotiv-ID ;-) ) nutzen können.
Diese liegen im Adressraum 0x00001800 bis 0x00001BFF (Datenbytes 1 bis 4 der CAN-Nachricht) und sind u.a. über das Schaltkommando 0x0B (= 0x16 im CAN-Header)
verfügbar.
Mein Befehlssatz baut auf diesem Adressraum und das Schaltkommando auf. Anders als bei Märklin® üblich, generiere ich aber nur uni-direktionale Befehle. D.h.,
das Response-Bit im CAN-Header bei den Märklin®-Kommandos nutze ich nicht. Bislang hat die CS2/3® noch nicht gemeckert. Sollte das irgendwann mal so sein, werde auch ich
die Befehle bi-direktional aufbauen.
Befehl |
Sender |
Loc-ID |
Funktion |
PC_DB_H PC_DB_M PC_DB_L |
PC |
0x00001800 0x00001801 0x00001802 |
Übertragung des Datenbanknamens
Bytes 1 bis 6 stellen das Datum, Bytes 7 bis 12 die Uhrzeit dar.
Beispiel: 070917235340 = am 07.09.2017 um 23:53:40 wurde die Datenbank erstellt.
Dieser Name findet sich auch im Dateinamen der exportierten Datenbank aus dem Parametriercenter.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x00001800 – 0x00001802
D4 – D7: Datumsangaben Byteweise
Nachrichten:
PC_DB_H
00 16 5F 38 08 00 00 18 00 30 37 30 39
PC_DB_M
00 16 5F 38 08 00 00 18 01 31 37 32 33
PC_DB_L
00 16 5F 38 08 00 00 18 02 35 33 34 30
Antwort der Module:
-/-
|
PC_KENNER |
PC |
0x00001803 |
Kenner und Identifier für die Module
Die Kennung der MBCAN-Module folgt strikt dem Format der Geräte-UiD von Märklin. In der GUiD stellt die erste Stelle die Kennung dar. Zur Zeit verwendet MBCAN die Kennung "m" (0x6D). Im Parametriercenter kann die Kennung angepasst werden, falls Märklin den Kenner "m" für seine eigene Module reklamiert.
Darüber hinaus bekommt jedes Modul noch einen Identifier, mit dem es sich an der GUiD der CS2/3 als „Sonstige Geräte“ anmelden kann. Zur Zeit ist dies „AAAA“ (0xAAAA). Im Parametriercenter kann die Kennung angepasst werden, falls Märklin den Identifier "m" für seine eigene Module reklamiert.
Ausgenommen sind die Module mbc-80 (Identifier 0x0040) und mbc-82 (Identifier 0x0000) die von Märklin fest vorgegeben sind. Diese Identifier sind in der Firmware der Module bereits fest integriert
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x00001803
D5: Kenner
D6 - D7: Identifier
Nachrichten:
00 16 5F 38 08 00 00 18 03 00 6D AA AA
Antwort der Module:
-/-
|
PC_NEU |
PC |
0x00001804 |
Neuanmeldeaufforderung
Zyklische Aufforderung an neu am MBCAN-Bus angeschlossene und noch nicht angemeldete Module, sich am Parametriercenter anzumelden. Dies gilt auch für Module, die über das Parametriercenter zurückgesetzt wurden.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x00001804
Nachrichten:
00 16 5F 38 08 00 00 18 04 00 00 00 00
Antwort der Module:
MD_NEU_DATA
|
PC_NEU_DATA |
PC |
0x00001805 |
Rückmeldung des PC an das Modul während des Neuanmeldeprozesses
Der PC sendet das empfangene Seriennummer-Byte auf den MBCAN-Bus zurück als Quittierung. Das entsprechende Modul antwortet dann mit dem nächsten Byte, alle anderen Module schalten in den Listen-Modus und reagieren erst nach einer weiteren PC_NEU-Nachricht, falls sie noch nicht erfolgreich angemeldet waren.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x00001805
D7: n-tes Byte der Seriennummer
Nachrichten:
Seriennummernbyte 0x04 wird vom PC bestätigt
00 16 5F 38 08 00 00 18 05 00 00 00 04
Antwort der Module:
MD_NEU_DATA
|
MD_NEU_DATA |
Modul |
0x00001806 |
Meldung des Moduls während des Neuanmeldeprozesses
Wenn das Modul noch nicht am Parametriercenter angemeldet war, reagiert es mit dieser Nachricht an den PC. Es sendet sein erstes Byte seiner Seriennummer an den PC. Reagiert der PC mit der Nachricht PC_NEU_DATA mit exakt dem gleichen Byte, sendet es weitere Bytes seiner Seriennummer, bis entweder alle Bytes übertragen wurden (erfolgreiche Anmeldung) oder der PC gerade ein anderes Modul initiiert. Stimmt das Byte nicht überein, geht es in den Listen-Modus und wartet auf eine weitere PC_NEU-Nachricht.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x00001806
D7: n-tes Byte der Seriennummer
Nachrichten:
Seriennummernbyte 0x04 wird vom Modul gesendet
00 16 2B 17 08 00 00 18 06 00 00 00 04
Antwort des PC:
PC_NEU_DATA
|
PC_RESET |
PC |
0x00001807 |
Durchführen eines Hardware-Resets auf dem Modul
Über das Parametriercenter können Module gezielt einem RESET unterzogen werden. Die Identifizierung der Module geschieht über ihre GUiD.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x00001807
D4 – D7: GUiD des Moduls
Nachrichten:
GUiD mbc-84 #1 = 6D 38 34 01
00 16 5F 38 08 00 00 18 07 6D 38 34 01
Antwort der Module:
-/-
|
PC_MD_DEL |
PC |
0x00001808 |
Modul aus Datenbank entfernen
Das Modul wurde aus der Datenbank entfernt und kann sich an dieser Datenbank auch nicht mehr neu anmelden. Wird in der Regel nur bei Modulen verwendet, die sich in der Datenbank befinden aber nicht mehr am Bus angeschlossen werden sollen. Wird nur einmal gesendet, wenn das Modul im Parametriercenter gelöscht wird. Ist das Modul nicht am Bus und wird nach einem Neustart der Software wieder am Bus angeschlossen, meldet es sich nicht mehr neu an, es sei denn, die Datenbank wird neu erstellt.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x00001808
D4 – D7: GUiD des Moduls
Nachrichten:
GUiD mbc-84 #1 = 6D 38 34 01
00 16 5F 38 08 00 00 18 08 6D 38 34 01
Antwort der Module:
-/-
|
PC_ALIVE |
PC |
0x00001809 |
ALIVE-Abfrage
Zyklische Abfrage über die GUiD, ob das betreffende Modul sich noch am MBCAN-Bus befindet. Es antwortet mit der Nachricht MD_ALIVE.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x00001809
D4 – D7: GUiD des Moduls
Nachrichten:
GUiD mbc-84 #1 = 6D 38 34 01
00 16 5F 38 08 00 00 18 09 6D 38 34 01
Antwort der Module:
MD_ALIVE
|
MD_ALIVE |
Modul |
0x0000180A |
Antwort ALIVE-Anfrage
Antwort des Moduls auf eine ALIVE-Abfrage durch den PC.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x0000180A
D4 – D7: GUiD des Moduls
Nachrichten:
GUiD mbc-84 #1 = 6D 38 34 01
00 16 2B 17 08 00 00 18 0A 6D 38 34 01
Antwort des PC:
-/-
|
PC_ARRAY |
PC |
0x0000180B |
Zugriff Systemarray anfragen
Der PC fragt über die GUiD an, ob er auf das Systemarray des Moduls zugreifen darf.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x0000180B
D4 – D7: GUiD des Moduls
Nachrichten:
GUiD mbc-84 #1 = 6D 38 34 01
00 16 5F 38 08 00 00 18 0B 6D 38 34 01
Antwort der Module:
MD_ARRAY
|
MD_ARRAY |
Modul |
0x0000180C |
Zugriff Systemarray freigegeben
Antwort des durch die GUiD im Befehl PC_ARRAY adressierten Moduls mit Freigabe des Zugriffs. Das Modul geht dann in die Wartestellung, alle anderen Module werten die folgenden Anfragen des PC nicht mehr aus. Ausgenommen sind Anfragen des PC außerhalb des Befehls PC_ARRAY_DATA.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x0000180C
D4 – D7: GUiD des Moduls
Nachrichten:
GUiD mbc-84 #1 = 6D 38 34 01
00 16 2B 17 08 00 00 18 0C 6D 38 34 01
Antwort des PC:
-/-
|
PC_ARRAY_DATA |
PC |
0x0000180D |
Schreiben/Lesen auf Array
Der PC stellt die Zugriffsanfrage. Dies kann entweder ein Lese- oder ein Schreibzugriff sein. Außerdem ist der Systemarray-Index enthalten, der gelesen oder beschrieben werden soll.
Beispiel: D4 = 0 -> Lesen, 1 -> Schreiben; D5 + D6 = Systemarray-Index; D7 = zu schreibender Wert, bei lesendem Zugriff irrelevant. Über den Index des Systemarrays wird außerdem das Ende einer Datenübertragung angezeigt. Liegt der Index über der Maximallänge des Systemarrays und entspricht es einem bestimmten Wert, wird die Wartestellung des Modus für weitere Datenübertragungen aufgehoben und alle anderen Module können wieder auf einen PC_ARRAY-Zugriff angesprochen werden.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x0000180D
D4: 0 -> Lesen, 1 -> Schreiben
D5 – D6: Systemarray-Index
D7: zu schreibender Wert, beim Lesen n.c.
Nachrichten:
Schreibe den Wert 0x0A an die Stelle 0x0001 im Systemarray
00 16 5F 38 08 00 00 18 0D 01 00 01 0A
Antwort der Module:
MD_ARRAY_DATA
|
MD_ARRAY_DATA |
Modul |
0x0000180E |
Antwort des Moduls auf Systemarray-Zugriff
Bei einem lesenden Zugriff übergibt das Modul auf D7 den Inhalt des Systemarrays, bei einem schreibenden Zugriff ist D7 irrelevant. Die anderen Datenbytes der Nachricht (D4 ... D6) sind identisch mit der Nachricht des PC.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x0000180E
D4: 0 -> Lesen, 1 -> Schreiben
D5 – D6: Systemarray-Index
D7: gelesener Inhalt des Systemarrays, beim Schreiben n.c.
Nachrichten:
Gelesener Wert 0x07 aus der Stelle 0x0108 im Systemarray
00 16 2B 17 08 00 00 18 0E 00 01 08 07
Antwort des PC:
-/-
|
PC_UPGRADE |
PC |
0x0000180F |
Firmware-Upgrade
Der PC fragt über die GUiD an, ob er die Firmware des Moduls upgraden darf. Ist nur aktiv bei Modulen der 3. Generation und nicht gültig für die Module des Typs mbc-91.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x0000180F
D4 – D7: GUiD des Moduls
Nachrichten:
GUiD mbc-84 #1 = 6D 38 34 01
00 16 5F 38 08 00 00 18 0F 6D 38 34 01
Antwort der Module:
MD_UPGRADE
|
MD_UPGRADE |
Modul |
0x00001810 |
Firmware-Upgrade freigeben
Antwort des durch die GUiD im Befehl PC_UPGRADE adressierten Moduls mit Freigabe des Zugriffs. Das Modul geht dann in die Wartestellung, alle anderen Module werten die folgenden Anfragen des PC nicht mehr aus. Ausgenommen sind Anfragen des PC außerhalb des Befehls PC_UPGRADE_DATA.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x00001810
D4 – D7: GUiD des Moduls
Nachrichten:
GUiD mbc-84 #1 = 6D 38 34 01
00 16 2B 17 08 00 00 18 10 6D 38 34 01
Antwort des PC:
-/-
|
PC_UPGRADE_DATA |
PC |
0x00001811 |
Schreiben Firmware
Der PC übermittelt die Upgrade-Daten. Das Modul speichert diese in das externe EEPROM zur Vorbereitung der Neuprogrammierung. Die Daten werden PAGE-weise (je 64 Byte) vom Parametriercenter übertragen, so dass der BOOTLOADER hinterher die Daten aus dem externen EEPROM auch korrekt auslesen kann.
Genutzte Datenbytes:
HASH: Laufende Nummer in der jeweiligen PAGE
D0 – D3: Loc-ID 0x00001811
D4 – D7: 4 zu schreibende Bytes
Nachrichten:
Schreibe im laufenden Index 2 die Werte 0x01, 0x00, 0x01 und 0x0A fortlaufend in das externe EEPROM
00 16 03 02 08 00 00 18 11 01 00 01 0A
Antwort der Module:
MD_UPGRADE_DATA
|
MD_UPGRADE_DATA |
Modul |
0x00001812 |
Antwort des Moduls auf Schreiben Firmware
Das Modul antwortet mit der exakten Datenstruktur der gesendeten Nachricht und signalisiert damit, dass es die Upgrade-Daten im externen EEPROM gespeichert hat.
Genutzte Datenbytes:
HASH: Laufende Nummer in der jeweiligen PAGE
D0 – D3: Loc-ID 0x00001812
D4 – D7: 4 zu schreibende Bytes
Nachrichten:
Schreibe im laufenden Index 2 die Werte 0x01, 0x00, 0x01 und 0x0A fortlaufend in das externe EEPROM
00 16 03 02 08 00 00 18 12 01 00 01 0A
Antwort des PC:
-/-
|
PC_BOOT |
PC |
0x00001813 |
Schreiben Firmware
Der PC übermittelt die Upgrade-Daten. Das Modul speichert diese in das externe EEPROM zur Vorbereitung der Neuprogrammierung. Die Daten werden PAGE-weise (je 64 Byte) vom Parametriercenter übertragen, so dass der BOOTLOADER hinterher die Daten aus dem externen EEPROM auch korrekt auslesen kann.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x00001813
D4 – D7: GUiD des Moduls
Nachrichten:
GUiD mbc-84 #1 = 6D 38 34 01
00 16 5F 38 08 00 00 18 13 6D 38 34 01
Antwort der Module:
-/-
|
MD_S88 |
Modul |
0x00001814 |
Stellungsmeldung mbc-88 / mbc-90
Sendet bei Statusänderung eines PINs die Stellung auf den MBCAN-Bus, so dass sowohl des Parametriercenter als auch andere Module diese ggf. weiterverarbeiten können. Ist ein Relikt aus den ersten beiden Generationen der MBCAN-Modulreihe und sollte bei Eigenentwicklungen durch Auswertung der 0x23-CAN-Kommandos von Märklin® ersetzt werden.
Genutzte Datenbytes:
D0 – D3: Loc-ID 0x00001814
D4 – D5: Modulnummer (BUS 1 1…31, BUS 2 32…62, BUS 3 63…93)
D6: Kontaktnummer (1...16)
D7: Stellung
Nachrichten:
Modul 16 Kontakt 2 hat Stellung 1
00 16 2B 17 08 00 00 18 14 00 10 02 01
Antwort der Module:
-/-
|
Soweit die von mir definierte Kommunikation zwischen den Modulen und dem PC. Erweiterungen sind jederzeit möglich, Adressraum ist ja noch reichlich vorhanden.
Den Befehlssatz finden Sie als pdf-Datei unter Download.
Quellen:
• "Kommunikationsprotokoll CAN transportierbar über Ethernet", Märklin, 2012
zurück zum Anfang