OpenDCC OneSpy

Überblick, Entstehung

    OneSpy ist kein BiDiB-Knoten im eigentlichen Sinn, sondern ein Spion bzw. Logger. OneSpy liest passiv am Bus mit. Mögliche Anwendungen sind:
  • Logging: Beobachten des Busverkehrs, als Debughilfsmittel bei der Entwicklung von Knoten oder PC-Software.
  • Monitoring: Auswertung von Informationen auf dem Bus, z.B. separate Anzeige von Belegtmeldungen, Lokadressen, Verschmutzungsmeldungen und Schaltzuständen
  • Die Monitoring-Funktionen emulieren bekannte Modellbahn-Interfaces für Adressmeldung und Belegtmeldung und erlauben so die Nutzung von BiDiB-Systemen zusammen mit bisheriger Software. Das ist natürlich nur ein absoluter Notbehelf, viele der neuen Eigenschaften von BiDiB bleiben dabei auf der Strecke.

Schaltplan

    Es sind 3 zusätzliche serielle Schnittstellen auf FTDI-USB-RS232 nötig. Diese sind auf dem OneTester als Steckverbindungen vorgesehen. Optional ist auch eine einfach Nachverdrahtung möglich.

Funktion

    Die Firmware liest den BiDiBus komplett mit und wertet die Nachrichten aus. Aus diesen Nachrichten können folgende Informationen (zugleich!) abgeleitet werden:
  • Logging des Busses: Damit kann für Test und Debugzwecke genau analysiert werden, welche Nachrichten von wem gesendet wurden. Die Nachrichten werden dabei in Klartext rückübersetzt.
  • HSI88: Belegungen werden gesammelt und mittels einer HSI88-Emulation an den PC gesendet
  • RCTALK: Adressmeldung werden mittels einer RCTALK-Emulation an den PC gesendet
  • Hierzu werden mehrere Tabellen benutzt: eine Knoten-Referenztabelle und Monitoring-Tabellen für HSI88 und RCTALK. In den Tabellen für HSI88 und RCTALK ist hinterlegt, welcher BiDiB-Knoten welchen Melder zugeordnet ist.
    Basis der Analyse ist die Knoten-Referenztabelle. Diese wird anhand der Logon-Nachrichten eine erzeugt (spyref[], z.Z. max. 40 Einträge (NODETAB_SIZE)). In dieser Tabelle ist zu jedem Knoten die Unique-ID, die aktuelle Knotenadresse und der von Anwender vergebene Knotenname abgelegt. Deshalb ist es wichtig, dass der Spy vor dem Einschalten des Busses bereits aktiv ist. (Mit dem Befehl N kann man sich diese Tabelle anzeigen lassen.)

    Kommt nun eine Adress- oder Belegtmeldungsnachricht am Bus, so wird in der Tabelle die Unique-ID zur aktuellen Adresse nachgeschlagen. Mit dieser Unique-ID werden nun die Monitoring-Tabellen durchgesehen, ob weitere Aktionen erforderlich sind. Monitoring-Tabellen kann man im Spy definieren, diese verknüpfen UniqueID und ev. Melderadresse mit einer Zielaktion. Es gibt drei Monitoringtabellen:
    • A) Tabelle für Adressmeldungen (RC-Talk-Tabelle)
    • B) Tabelle für Belegtmeldungen (HSI88-Tabelle)
    • C) Tabelle für zusätzlichen Dekoder (HSI88-Tabelle)

    Sofern eine Übereinstimmung gefunden wird, werden die entsprechenden Daten in das jeweilige Interface eingetragen.

    Die Firmware OneSpy implementiert vier serielle Schnittstellen. Auf diesen werden Protokollemulatoren verlinkt, welche sich dann aus der jeweiligen Monitoring-Tabelle bedienen. Z.Z. sind RCTalk und HSI88 als Protokollemulatoren verfügbar.

A) Adressmeldungen

    In den BiDiB-Belegtmeldern kann jeder Knoten auf allen Meldereingängen eine oder mehrere Lok-Adresse erkennen. Diese werden auf virtuelle RC-TALK Melder abgebildet. RC-Talk bietet aber nur eine Lok-Adresse je Melder, auch ist die Gesamtzahl der Melder (offiziell) auf 32 beschränkt. Das Protokoll kann aber auch bis zu 128 Melder verarbeiten, zumindest in der Melde-Richtung.
    Diese Abbildung wird also definiert durch Zielnummer des (virtuellen) RCTALK-Melders, sowie durch Knotennummer und Melderadresse, welche diesem virtuellen Melder zugeordnet ist. Die Firmware ist in der Lage, zwei verschiedene Melderadressen (auf einem Knoten) auf den gleichen (virtuellen) RCTALK-Melder abzubilden.

C) Belegtmeldungen

    Belegtmeldungen aus dem BiDiB-System werden auf virtuelle S88-Melder abgebildet.
    Diese Abbildung wird bereichsweise definiert durch die Angabe einer Basisadresse für einen bestimmten BiDiB-Knoten. Damit werden dann die Melder dieses Knotens (die ja von 0 bis zu maximalen Melderzahl des Knotens reichen) ab der Basisadresse in das S88-Feld eingetragen. Die untersten 16 Melder sind reserviert für die Funktion C.

C) Zusätzlicher Dekoder in Abschnitt

    BiDiB-Belegtmelder können auch mehrere Dekoder in einem Abschnitt unterscheiden. Das kann man sinnvoll nutzen: z.B. wenn man auf einen Zug aufrangieren will und die einfahrende Lok beim Betreten des Abschnittes einen Melder auslöst, quasi eine virtuelle Lichtschranke.
    Diese Funktion ist als Momentmelder gebaut: sie löst immer dann aus, wenn ein weiterer Dekoder den Abschnitt betritt (sich also die Zahl der railcom-Dekoder im Abschnitt erhöht) und bleibt dann für 3s aktiv.
    Diese Abbildung wird definiert durch Zielnummer des (virtuellen) S88-Melders, sowie durch Knotennummer und Melderadresse, welche in dieser Weise überwacht werden soll.

Schnittstelle DebugIF

    Hier kann mit 115200 8N1 ein Terminal angeschlossen werden. Über diese Schnittstelle sind zum einen die anderen 3 Schnittstellen konfigurierbar, zum anderen sind Loggingausgaben zur Busanalyse implementiert.

    Befehle:
  • N Show Nodelist
    Es wird eine Liste der aktuellen Knoten und der Knotennamen angezeigt.
  • R Show RC-Talk
    Es wird der Status der RC-Talkemulation angezeigt, gefolgt von einer Liste der konfigurierten RC-Talk Melder (Monitoring-Tabelle für RCTalk), der Zustand dieser Melder sowie die gemeldete Adresse.
  • RS Simulate RC-Talk
    Es folgen drei Parameter: RC_INDEX, LOKADDR, DIR.
    RC_INDEXIn diesem (virtuellen) RC-Talk-Melder wird eine Lok simuliert.
    LOKADDRDie simulierte Lokadresse. Wertebereich 1 .. 10239
    DIRRichtung der simulierten Lok; 1=forward, 0=rückwärts.
  • RC Config RC-Talk
    Anlegen der Monitoringtabelle. Es folgen optional drei oder mehr Parameter: RC_INDEX, NODE, MNUM [MNUM). Fehlen die Parameter, wird die momentane Konfiguration angezeigt.
    RC_INDEXDieser (virtuelle) RC-Talk-Melder wird konfiguriert. Es sind bis zu 32 virtuelle RC-Talk Melder möglich.
    NODEDer virtuelle Melder wird mit diesem Node verknüpft. Anzugeben ist hier der aktuelle Index, den man der Nodetabelle entnehmen kann (Befehl N).
    MNUMDer virtuelle RC-Talk-Melder wird mit diesem Melder auf dem Node verknüpft. Es können zwei Melder auf einen virtuellen RC-Talk-Melder verknüpft werden, z.B. um Strecke und Halt eines Abschnittes gleichzeitig zu erfassen.
    Kommt nun eine Lok in einem der konfigurierten Abschnitte, so wird am RC-TALK Interface eine Lokmeldung ausgegeben.
  • RL Log RC-Talk
    - reserved -


  • HC Config Monitoring-Tabelle für HSI88
    Es folgen zwei Parameter: NODE, BASE. Fehlen die Parameter, wird die momentane Konfiguration angezeigt.
    NODEDie Melderzuordnung dieses Nodes wird eingestellt. Anzugeben ist hier der aktuelle Index des Knotens, den man der Nodetabelle entnehmen kann (Befehl N).
    BASEBasisadresse der Zuordnung, Wertebereich 0 ... 1016. Die Basisadresse muß bei Division durch 8 den Rest 0 ergeben. (Beispiele: 32, 40, 128, 256)
    Tritt nun eine Belegung an einem Knoten auf, so wird diese an der gewählten Basisadresse fortfolgend einsortiert. Wenn z.B. für den Knoten eine Basisadresse 40 definiert wurde und dieser Knoten meldet eine Belegung auf Port 12, so wird der Melder 52 im HSI88 aktiviert.
  • HD Config 'Double'-Tabelle für HSI88
    Es folgen drei Parameter: S88_NUM, NODE, MNUM. Fehlen die Parameter, wird die momentane Konfiguration angezeigt.
    S88_NUMDieser S88-Melder wird als virtuelle Lichtschranke definiert. (Bereich: 0..15)
    NODEDie Melderzuordnung dieses Nodes wird eingestellt. Anzugeben ist hier der aktuelle Index des Knotens, den man der Nodetabelle entnehmen kann (Befehl N).
    MNUMDieser Melder wird mit virtueller Lichtschranke ausgerüstet
    Tritt nun eine Erhöhung der railcom-Dekoder auf diesem Melder an diesem Knoten auf, so wird für 3s ein Momentmelder ausgelöst.
  • HS SImulate HSI88
    Es folgen zwei Parameter: INDEX, ON_OFF Fehlen die Parameter, wird eine kurze Hilfe angezeigt.
    INDEXDieser Melder wird ein- oder ausgeschaltet. Wertebereich 0...1016
    ON_OFF0: Melder ausschalten
    1 (oder kein Parameter): Melder einschalten.
  • O Anzeige Occupancy
    Es folgen keine Parameter. Die momentane Belegung wird angezeigt.


  • Logging:
    Der Logger ist sehr mächtig und kann neben der Textdarstellung auch eine weitreichende Dekodierung von Nachrichten in Klartext vornehmen.
    Eine Befehlsübersicht ist mit ? <cr> abzufragen.

Schnittstelle Serial 0 (Port C0)

    Hier wird mit 115200 8N1 ein HSI88 emuliert. HSI88 kann im Orginal maximal 496 Melder, viele PC-Programm erlauben auch nur eine Konfiguration im Bereich bis 496. Es werden hier die ersten 496 Melder der HSI88-Tabelle ausgegeben.

Schnittstelle Serial 1 (Port C1)

    Hier wird mit 115200 8N1 ein weiteres HSI88 emuliert. Dieses greift mit Offset 512 in die Tabelle, damit stehen weitere 496 Melder ab Adresse 512 zur Verfügung.

Schnittstelle Serial 2 (Port D1)

    Hier wird mit 115200 8N1 das RC-Talk Interface emuliert.

Hinweis zu TC

    Um unter TC ein Interface mit vom Orginal abweichender Baudrate zu verwenden, muß man diese Baudrate im Devicemanager einstellen und dann mittels eines Eintrages in railroad.ini TC anweisen, diese Einstellung auch zu verwenden. Hierzu wird eine Zeile UseCommmDefaults=1 eingetragen (für weitere Digitalsystem mit höherer Nummer dann entsprechend UseCommmDefaults2=1, UseCommmDefaults3=1).