Angefangen hat das Scannen von S88 Modulen mit den Arduino Boards Uno und Nano. Das habe ich in mei­nem Blog „S88 Scanner mit Arduino“ be­schrieben. Mit dem PC (Rocrail) wurde zu­nächst noch über USB mit dem Littfinski HSI 88 Protokoll kom­mu­ni­ziert.

Als der Umbau meines Hosenträgers auf WLAN mit Z21 Protokoll anstand, wurde der vor­han­dene Arduino Uno und große Teile der Software weiter­verwendet und der bestehende Shield mit der S88N Buchse (SJ45) um ein WLAN Modul ESP-01 erweitert.

Arduino Uno mit Shield, RJ45/S88N-Buchse und ESP8266-01

Die Komponente S88 Scanner ist aus zwei Teilen aufgebaut. Der eigentliche Scanner ist ein Ar­dui­no Uno, der mithilfe der Arduino Bi­blio­thek FlexiTimer2 die S88 Signale CLOCK, LOAD und RESET erzeugt. Über den PIN 2 werden die S88 DATA eingelesen und in einen Buffer gepackt. Nach einem ersten Durchgang (n x 16 Clocks) können die Daten über USB zum PC übertragen werden.


ESP 8266-01 als Schnittstelle zum WLAN

Der Arduino überträgt die S88 Daten seriell auf einen ESP 8266-01, der sie unter Verwendung des Z21 EtherNet Protokolls auf das Gate­­way (auf die Bridge) weiter­leitet. Vom Gateway kom­men über WLAN und Z21 Ethernet Protokoll die Anfragen zum ESP. Sie gehen von dort seriell in den Ar­dui­no. Z21 Anfragen, wie zum Beispiel LAN_RMBUS_GET_DATA werden korrekt be­ant­wortet und auch der Broadcast Me­cha­nis­mus funktioniert, wie im Protokoll beschrie­ben. Ist also das entsprechende RM-Bus Broadcast-Flag gesetzt, werden alle Ver­än­de­run­gen am S88 Bus automatisch gemeldet.

Der ESP8266-01 ist auf einem Lochraster Shield aufgebaut. (2-rei­hige, 8-polige Buchse). Da der ESP8266-01 keinen USB-Port hat, ist zum Laden des Sketches ein FTDI232 USB-Adapter erfor­der­lich, der den Shield und dem WLAN Modul auch mit 3,3 V versorgt. Eine Steck­­brücke zwi­schen GPIO2 und GND ist zum Laden der Soft­ware er­forderlich. Für den normalen Betrieb wird die Steckbrücke ent­fernt. Der FTDI232 Baustein fin­det auf einer 6-poligen Buch­sen­leiste Platz und kann nach dem Laden der Software entfernt wer­den. Der Code kann auch mit einer DEBUG Op­tion kompiliert wer­den, was aber den nor­ma­len Betrieb – wegen der seriellen Über­tra­gung – ausschließt.

Die serielle Übertragung verwendet eine Bi­blio­thek „PacketSerial“ von https://github.com/bakercp/PacketSerial.

In der Z21 Variante ist die Einstellung der An­zahl der S88 Module noch nicht möglich. Der Code nimmt immer 10 16-Bit S88 Module an.

10 Module bedeutet 160 Bit Feedback und dürfte für die meisten An­lagen mehr als reichen. Diese Einschränkung ist auf die Roco Phy­sik mit dem RMBUS und maximal 20 8-Bit RM-Mo­du­len 10787 zurückzuführen. Der S88 Scanner kann min­des­tens 32 Module ab­arbeiten aber lei­der nur 10 davon mit dem Z21 Protokoll LAN_RMBUS_DATACHANGED weitergeben.

Der S88 Scanner in der hier beschriebenen Form funktioniert problemlos, hat aber den Nach­teil, dass die serielle Schnittstelle für die Kom­munikation mit dem ESP-01 verwendet wird und nicht zeit­gleich auch für den seriellen Monitor der Ar­dui­no IDE verwendet werden kann. Deswe­gen fasste ich den Plan, den Scanner auf eine ESP Ent­wick­lungs­plattform komplett neu aufzu­set­zen. Bei der Ent­wicklung der Software gab es diverse Heraus­forderungen:

1.   Ticker Biblothek

Der S88 Scanner sollte auf ein ESP32 De­velop­ment Board umgesetzt werden. An­stel­le der Arduino Bibliothek „FlexiTimer2“ sollte die ESP32-Ticker Bibliothek Verwen­dung finden. Die Software lief ei­gent­lich auf An­hieb, aber mir fielen irgendwann „S88 Geister­mel­dun­gen“ auf. Auf dem Oszilloskop waren im S88 CLOCK Signal re­gel­mäßig An­häu­fun­­gen von Impulsen, gefolgt von längeren Pau­sen zu sehen. Re­du­zierung der Modu­le von 10 auf 2 führte zum Ab­sturz des ESP. Zur Lösung des Problems habe ich auf eine hard­ware­­nahe Lösung aus dem FreeRTOS Bereich zurückgegriffen. Ab da war ein stabiler Lauf zu beobachten.

2.   ESP32 Dual Core / Aufteilung auf 2 Kerne

Die Aufteilung des Codes auf 2 Prozessorkerne ver­sprach ebenfalls einen Vorteil. Es machte aber den Code unnötig komplex und war eigentlich bei der erzielten Geschwindigkeit auch gar nicht not­wen­dig. Eine definitive Umstellung auf getrennte Kerne für S88 Ver­ar­beitung und Netzwerk-Kommunikation steht deswegen noch aus . . . .


S88 Scanner für herkömmliche S88 Rückmelder

Das ESP32 Entwicklungsmodul wurde auf einer Platine mit Strom­versorgung, S88N Buchse und 3,3 nach 5V Pegelwandler aufgebaut und unter dem Hosenträger in Betrieb genommen.

S88 Scanner mit ESP32 und CD4501 als Pegelwandler
Der Baustein CD 4501 wandelt die 3,3 V Pegel des ESP32 in 5V oder 7-12V Pegel

Eigenschaften:

  • Verwendet ein preisgünstiges und super­schnel­les ESP32 NodeMCU Ent­wick­lungs­modul.
  • RJ45 Buchse für S88-N für eine störsichere Verkabelung der S88 Module. Wahlweise 5 oder 7 – 12 Versorgungs­spannung der S88 Module.
  • Roco Z21 Ethernet Protokoll : Bis zu 10 16-Bit S88 Module (ins­gesamt 160 Bit) entsprechend 2 x 10 Roco 10787 RM Module. Märklin cs2-Can Protokoll: bis zu 32 16-Bit S88 Module.
  • Verwendet das Roco Z21 LAN_RMBUS_DATACHANGED Tele­gramm oder alternativ das Märklin Rückmelde-Event mit der CAN-ID 23.

Protokolle

Zuerst wurde, wie beim Vorgänger mit ESP8266-01, das Z21 Pro­to­koll implementiert. Das erfor­dert noch ein Gateway, das die Rück­meldungen an einen PC weiterreicht und zugleich dem PC eine Z21 vorspiegelt.

Später wurde auch das Märklin cs2-CAN Proto­koll implementiert, das den Vorteil hat, dass man ohne Gate­way und auch ohne PC aus­kommt.

Die notwendige Konfiguration des Netzwerkes und der wichtigsten Parameter erfolgt bei bei­den Proto­kol­len über ein Web-Interface. Beide Varianten verfügen auch über CV (Konfigu­ra­tions­variablen), die beim cs2-CAN Protokoll in der CS2 und auch im Modell­bahn­steu­erpro­gramm Rocrail gelesen und geschrieben werden können. Bei der Verwendung des Z21 Pro­to­kolls stehen die CVs vorerst nur im Programm Rocrail zum Lesen und Schreiben zur Verfü­gung.

Gespeist wird das Modul wahl­weise mit 5 Volt DC aus einem USB Netzteil, mit 7 – 12 V DC aus einem Steckernetzteil oder über den USB Port des ESP32 Node MCU Board. Der S88 bus kann mit einer Steck­brücke wahlweise mit 5V oder mit 7 – 12 Volt ver­sorgt werden. Ein Pegel­wand­ler sorgt für die Anpassung der 3,3 V Ausgangspegel des ESP 32 an die 5-12 V Signalpegel auf dem S88 Bus.


Verwendung mit der CS2

Dadurch, dass das digitale Gleissignal der CS2 ver­schie­dene kurze „Aussetzer“ oder Lücken hat, musste zu­­nächst die Scanfrequenz (S88 Clock) herabgesetzt werden, um das Melden die­ser Lücken als S88 Er­eig­nisse zu vermeiden. Da trotzdem bei der Ver­wendung von Stan­dard S88 Masse­meldern jedes Staubkorn auf den Schienen abge­bildet wurde, musste zusätzlich einen Filter eingebaut werden. Durch den Filter werden Besetzt­mel­dun­gen sofort und Frei­mel­dungen verzögert gesendet. So wird durch den Filter die Flutung des Netz­wer­kes mit sinn­losen und wieder­holten Tele­grammen vermieden. Dank des Filters liegt die S88 Clock Fre­quenz nun auch wieder bei ca. 8 kHz, was bedeutet, dass der Scanner zum Einlesen von 496 S88 Ein­gän­gen ca. 67 ms benötigt. Damit werden alle Ein­gänge ca. 15 mal in der Sekunde aufgefrischt.

Konfiguration des Scanners mit Rocrail

Mein zuletzt gebauter Scanner hat die 1203 als Netzwerk Identifikationsnummer, kurz NID. Wenn man die NID als „Lange Adresse“ in die Program­mier­schnittstelle von Rocrail einträgt, das korrekte Interface zur CS2 eingibt (bei mir rot einge­kringelt „HSI“), PoM und Acc aktiviert, kann man alle CVs im lau­fen­den Be­trieb lesen und schreiben. Der Status des Buttons „PT on“ spielt dabei keine Rolle. Nach dem Schreiben bootet der Scanner. Das ist aber meistens nach maximal 2 Sekun­den erledigt. So lang muss man Geduld üben, bevor ein weiterer Parameter gelesen oder geschrieben werden kann.

Das Menü „Programmieren“ in Rocrail

Konfiguration des Scanners im Web-Interface

Konfiguration des Scanners für Märklin CS2 im Web-Interface

Der Scanner ist ein WLAN Scanner, der nur über einen WLAN Router mit der CS2 verbunden werden kann. Ich habe mir im Internet einen sehr preisgünstigen TP-Link WR841N besorgt, der für den Zweck ideal geeignet ist.

Zunächst muss der Scanner wissen, wie das WLAN des Routers heißt, das ist die SSID. Damit er sich verbinden kann, braucht er auch das WLAN Passwort. Das sind die beiden ersten Para­meter, die ein­gegeben werden müssen.

Der CS2 wird bevorzugt eine feste IP Adresse zugewiesen. Einmal legt man die Zuordnung von Mac-ID und IP-Adresse im Router fest.

Bei mir sollte die CS2 immer die 100 an vierter Stelle erhal­ten.

Die Adresse der CS2 kann auch in der CS2 definiert werden. Die MAC-Adresse 00:1B:C5:0C:91:37 wird im Router für die Vergabe der festen Adresse 192.168.20.100 verwendet.

Der nächste Parameter ist die Anzahl der 16-Bit-S88-Module, die gescannt werden soll. Bis zu 32 Module (512 Rückmelder) sind erlaubt. (Märklin erlaubt nur 31 Module = 496 Rückmelder)

Virtuelle Rückmelder sind „Merker“, dessen Zustand „be­legt“ oder „frei“ im Speicher gesetzt wird und so lange bei­behalten wird, bis sie wieder durch eine Weichenfunktion aus Keyboard, Layout oder Memory verändert wird. Nütz­lich, um z.B. festzuhalten, dass ein Gleis belegt ist, auch wenn der physikalische Mel­der prellt oder schon gar nicht mehr belegt meldet. Hier dürfen prinzipiell alle Adressen genutzt werden, die nicht von physikalischen Meldern be­nutzt werden. Trägt man eine 0 (Null) ein, gibt es keine vir­tuellen Rückmelder. Die Grundeinstellung ist 513, weil das die erste Adres­se ist, die nicht von einem physi­ka­li­schen Melder belegt werden kann.

Unter Device-ID ist die gewünschte Gerät-Kennung für diesen scan­ner anzugeben. Märklin verwendet für die Gerät-Kennung fol­gen­den Mechanismus:

  • die cs2 sendet einen „Rundruf“ oder „Ping“ aus, den alle Kom­po­nen­ten, die am CAN Bus oder am Ether­net hän­gen, beantworten müssen.
  • Jedes Gerät antwortet mit seiner Seriennummer und ein Anga­ben zum Typ und Versionsnummer des Gerätes. Zum Teil ist die Serien­num­mer die hexadezimale Dar­stellung von 3 ASCII-Zei­chen und einer laufenden Num­mer im Bereich von 1 – 255. Ein LinkS88 mel­det sich beispielsweise mit 0x53383811. Das sind die HEX Codes für die Zeichen „S“, „8“, „8“ und die hexadezimale Zahl 11 (17 dezimal). Der Gerätetype wird gemeldet mit 0x40 (64 dezi­mal). Die CS2 vergibt dem Gerät daraufhin eine Gerät-Ken­nung. Wenn sie denn noch frei ist, wäre das in unserem Beispiel die 17 aus der Seriennummer. Im Setup-Menü der CS2 unter „Ge­räte“ wür­de angezeigt werden: „LinkS88(17)“ mit 17 als Ge­rät-ken­nung. Die Gerät-Kennung kann man hier mit der Nummer eines Vor­gän­gergerätes überschreiben.
  • Der S88 WLAN Scanner beantwortet den Ping mit „0x52383806“ (R88 06), versionsstand 1.1 und Gerätetyp 0x40 (ich kenne leider keine anderen Gerätetypen). Im Gerätemenu wird mein WLAN Scanner nun mit LinkS88(6) und Gerät-Kennung 6 angezeigt.
Der S88 Scanner wurde akzeptiert und als LinkS88(6) angelegt

Man kan das Gerät nun bearbeiten:

Das Gerät wurde Markiert. Kennung und Nickname können bearbeitet werden.
Das Gerät S88 WLAN Scanner wurde bearbeitet. Es hat jetzt den Nicknamen „WLAN“ und die Gerät-Kennung 1

Die CS2 speichert das Gerät mit Nicknamen und neuer Gerät-Ken­nung dauerhaft und sollte es mal nicht mit dem WLAN ver­bun­den sein oder nicht versorgt werden, wird der Eintrag in der Tabelle rot angezeigt.

Für Gerät-Kennung wurde hier im Beispiel die 1 einge­tra­gen.

Das aktuelle „Problem“ dabei ist, dass die Bereiche der Rück­mel­de­adres­sen für diesen Scanner in der CS2 nach dem Schema des Ori­gi­nal LinkS88 organisiert sind:

  • es gibt die Adressen 1 – 16 . (Beim LinkS88 die 16 Klemmen). Gerät-Kennung 1, Bus 0, Adressen 1 – 16. Gerade mal genug für ein S88 Modul.
  • Der zweite Bereich geht von 101 – 164. Das sind eine Art virtuelle Rückmelder, die durch eine 8 x 8 Matrix­ver­knüp­fung im LinkS88 der Ein­gän­ge an der Klemmen 1 – 8 mit den Eingängen 9 – 16 gebildet wer­den. Der WLAN Scanner kann nicht als Matrix konfiguriert werden. Trotz­dem steht dieser Adress­bereich 101- 164 für bis zu 4 16-Bit S88 Module zur Verfügung. Dieser Bereich ist ebenfalls Gerät-Ken­nung 1, Bus 0, Module 1 – 4 – wird aber als Bus 0, mit Angabe der Zeile und der Spalte angezeigt.
  • Von 1001 – 1512, 2001 – 2512 und von 3001 bis 3512 stehen weitere Adressbereiche für Gerät-Kennung 1, Busse 1 – 3 und Module 1 – 32 .

Letztendlich habe ich eine Konfigurationsdatei erstellt, die im „Info“ Bereich der CS2 die komplette Konfiguration des S88 Scanners zur Verfügung stellt. Man kann aus 3 Bussen wählen. Der gewählte Bus stellt bis zu 512 Rückmelder zur Verfügung. Mit einem Schieber kann man festlegen, wie viel Module der gewählte Bus einscannt.

Im Moment wir der Scanner als LinkS88 angemeldet. Ich verwende dazu eine fiktive Seriennummer „R88 06“ bzw. in Hex 0x52383806 und eine fiktive Katalognummer 61883GC mit Version 1.0. Angemeldet wird der Scanner mit Auswahltext „Scan S88 #6“. Der Scanner erscheint zuerst als LinkS88 (6) mit Gerät-Ken­nung 6 bei den Auto­matik-Geräten. Nach Editieren des Eintrags und Hinzufügen eines Nicknames (WLAN Scan­ner) erscheint das Gerät nun mit der Gerät-Kennung 1 bei den Automatik-Ge­rä­ten.

Das neue „Gerät“ mit dem Kenner 1 und „Artikelnummer“ 61883GC emuliert den Bus 1 mit bis zu 512 Rückmeldern. Es wurden 2 Module angemeldet.

Theoretisch kann man im Info Bereich alle weiteren Parameter definieren oder die Definition der Eigen­schaften komplette anders gestalten. Ausgehend vom Beispiel LinkS88 war das hier gezeigte Menü mit relativ wenig Auswand zu realisieren.

Die CS2 meldet jede Veränderung der Parameter. Damit könnte die Einstellung die­ser Werte im Web-In­terface entfallen und die Konfiguration fast komplett in der CS2 voll­zogen werden. Es ist auch denkbar, beide Konfigurationsschnittstellen parallel zu be­nut­zen. Was im Web-Interface bleibt, und bleiben muss. ist die Einstellung von Router-SSID und Pass­word.


S88 Scanner mit Z21 Ethernet Protokoll

Dieselbe ESP32 Hardware aber mit Firmware für das Z21 Protokoll war bei mir bis vor kurzem unter dem Hosenträger im Einsatz. Sie kommunizierte über WLAN mit einem Gateway und von da über WLAN mit dem WLAN-Router und mit meinem PC, wo die Modellbahnsoftware die S88 Rückmelder auswertete. Konfiguration des Scanners erfolgte über Web-Interface und bei der Verwendung von Rocrail über die POM Schnittstelle für Zubehördecoder. Der Nachteil dieser an sich guten Losung war und ist die Begren­zung des ESP8266 Gateways an seinem WLAN AP (Acces Point) mehr als 8 Clients (andere Rück­mel­de­module und Aktoren) zu betreiben.

Die Konfiguration über Web-Interface war im Vergleich zu der Variante für die CS2 etwas umständlich. da man sich dafür in den Access Point des Scanners (WLAN mit der SSID APXXXX) einloggen musste. Der S88 Scanner verwendet aus dem Protokoll die Meldung für die RM-Bus 10787 Module. Roco hat die Verwen­dung von 20 solcher 8-Bit RM-Bus-Module vorgesehen, so dass der Scanner von 32 möglichen Modulen und 512 Bits nur die ersten 10 16-Bit Module, sprich 160 Bit melden kann.


NextGen Firmware

Bei mir habe ich die Original Firmware der ersten Generation durch eine Firmware der nächsten Gene­ra­tion abgelöst. Sie weist gegenüber der ersten Version einige gra­vie­rende Vorteile auf:

  • keine Begrenzung auf 8 Sensorknoten an einem Gateway
  • Die Reichweite ist die Reichweite des verwendeten WLAN Netzes, nicht die Reichweite des ESP32 Access-Points. Die räumliche Ausdehnung des WLAN Netzes kann mit Repeatern fast beliebig vergrößert werden.
  • Nur die erstmalige Netzwerk-Konfiguration bei einem neuen ESP Board und frisch gela­de­ner Firmware verwendet noch den Access Point des Sensors („APXXXX“).
  • Die Access Points der Sensorknoten werden bei erfolgreicher Verbindung mit dem Router abge­schal­tet.
  • Die Konfiguration über Web-Interface ist jederzeit möglich. Zugriff über die normale Netz­werk­adresse im Modellbahnnetzwerk oder je nach PC Konfiguration auch über den Host­na­men „APXXXX“.
  • Einfachere leicht verständliche Konfiguration, die auf dem Smartphone genauso aussieht, wie auf dem PC
  • Firmware Updates mittels „OTA“ (Over The Air = kabellos über das WLAN)

Hier die Screenshots der S88 Scanner-Konfiguration :

Vom Hauptmenü aus kann man die WLAN Parameter oder die CVs bearbeiten. Unter Information sieht man die aktuelle Konfiguration und Eigenschaften der Hard- und Software
Sobald SSID und Passwort bekannt sind, kann sich der Scanner direkt mit dem Router verbinden und kann der Zugriff über die Netzwerkadresse oder Hostnamen erfolgen. Der Access-Point mit dem SSID Namen AP3300 wird abgeschaltet. Der Name AP3300 bleibt aber als Hostnamen erhalten.
Für den Scanner braucht es nur wenige CVs. Über CV8 kann die Hardware auf Defaults zurückgestellt werden. CV7 ist nur Lesen.
Für den Scanner braucht es nur wenige CVs. Über CV8 kann die Hardware auf Defaults zurückgestellt werden. CV7 ist nur Lesen.
Übersicht aller Hard-und Software-Eigenschaften des S88 Scanners (nur lesen)
Übersicht aller Hard-und Software-Eigenschaften des S88 Scanners (nur lesen)

Hardware

Die Schaltung wurde in Eagle gezeichnet.

Nachbau
Firmware für den S88 Scanner „NextGen“ mit Z21 Protokoll
Firmware für den ESP32 S88 Scanner an Märklin CS2 (nur zum Testen/Diskussion)
Firmware für den ESP32 S88 Scanner der ersten Generation mit Z21 Protokoll (keine Weiterentwicklung)

Letzte Aktualisierung 18.05.2021