Digital-Seiten  

[Die Fingerlinge] [Wiebke] [Bernd] [Joshua] [Vincent]
 

[Aktien] [Modellbahn] [Flohmarkt] [Service] [Infrarot] [Karte] [The Answer]
 

[Digital-Seiten] [Lok-Umbauten]
 

Der preiswerte Märklin-Digital-Start mit Computer
DigitalDirect for Linux (DDL)-Anleitung für Anfänger
Einige Skripte zum DDL-Befehlsinterpreter ddsh, u.a. zur Steuerung über HTML

Der preiswerte Märklin-Digital-Start mit Computer

Was benötigt man dazu ? Ich habe folgende Komponenten mit Erfolg getestet:

  1. Einen PC mit Linux (meist eh schon vorhanden)
  2. Die DigitalDirect For Linux (DDL)-Software (kost´ nix)
  3. Das Märklin-Delta-Steuergerät 6604 (ab ca. DM 100.-). Bitte nur mit Rückgabemöglichkeit kaufen, mein erstes 6604 konnte nicht als Booster betrieben werden (Der Drehschalter unterhalb der rechten STOP-Position hatte noch zwei weitere Positionen, es schien wohl ein Produktionsfehler zu sein).
  4. Einen seriellen Stecker und ein 2-adriges Kabel (ab ca. DM 5.-). Verdrahtung hier und hier.
  5. Eine Märklin-Digital-Lokomotive 37xxx (ab ca. DM 200.- im Sonderangebot)
  6. Eine Weiche mit Antrieb und Märklin-Digitaldecoder (ab ca. DM 60.-)

Macht zusammen DM 365.-.

Richtig Spaß macht es natürlich erst, wenn man Rückmeldungen verwendet. Auch das wird von DDL unterstützt. Folgende weitere Komponenten werden benötigt (habe ich bisher noch nicht getestet):

  1. Der Märklin Encoder DECODER 6088 (ca. DM 100.-) oder, billiger, Selbstbau-Decoder  von Viessmann, Völkner oder anderen Firmen.
  2. Eine 5V-Spannungsversorgung aus dem Trafo dafür (fast umsonst, den Schaltplan habe ich von Jens Ullmann erhalten und in ASCII umgesetzt):

               D1,1N4004    _________
        ~ -----|>|----o----| U1,7805 |----o----------- +
                      |     ---------     |
    Trafo             |         |         |            Ausgang
           C1,100mueF =         |         = C2,100nF
                      |         |         |
        ~ ------------o---------o---------o----------- -
     
  3. Ein Kabel zur Verbindung mit der parallelen Schnittstelle des PC (siehe hier, Abschnitt Unterstützung von s88-Rückmeldemoduln)

DigitalDirect for Linux (DDL)-Anleitung für Anfänger

  1. Zunächst bitte diesem Link folgen und die Seite komplett lesen, mit dem Ziel, den Aufbau und das Konzept sowie die Programme von DDL zu verstehen. Folgende Programme habe ich bereits verwendet:
    erddcd: Das zentrale Programm zur Ansteuerung des Boosters
    simpleclient: Ein einfaches Testprogramm zum Steuern von Lokomotiven
    j-man: Das eigentliche Programm zum Steuern von Loks und Weichen
    ddsh: Ein Befehlsinterpreter zum automatischen Steuern von Loks und Weichen, inclusive Auswertung von Rückmeldungen
  2. Der steuernde PC muss mindestens Linux-Kernel 2.0 haben. Bei SuSE z.B. ist das mindestens ab SuSE 6.0 der Fall.
  3. Den Booster mit dem Trafo und der Schiene verbinden und mit dem Kabel die serielle Schnittstelle mit dem Booster verbinden. Eine Lokomotive mit Beleuchtung und am besten auch noch einen beleuchteten Wagen auf das Gleis setzen. Trafo einschalten. Jetzt sollte noch keine Veränderung sichtbar sein.
  4. Als Benutzer root in das Verzeichnis /usr/local wechseln und DDL durch folgenden Befehl installieren:
    cd /usr/local; tar -xzvf ddl.tgz
  5. Das Verzeichnis DDL nach ddl verschieben (muss nicht sein, mag ich aber lieber):
    mv DDL ddl
    Ausserdem das Verzeichnis /usr/local/ddl/cfg anlegen, um der Übersichtlichkeit halber dort bestimmte Konfigurationsdateien anzulegen:
    mkdir ddl/cfg
  6. Im Verzeichnis /usr/local/ddl/bin folgenden Befehl ausführen, um das Programm erddcd zu starten, welches die Befehle von dem Steuerprogramm entgegennimmt und den Booster ansteuert (Die Optionen geben unter anderem an, dass der TCP/IP-Port 12345 sowie die erste serielle Schnittstelle (entspricht unter anderen Betriebssystemen z.B. COM1) benutzt werden soll und dass erddcd aktuelle Meldungen auf den Bildschirm schreibt):
    ./erddcd -p 12345 -d /dev/ttyS0 -m
  7. Auch wenn man für das java-Steuerprogramm j-man keine lesbare Lokomotivdatei benötigt, so empfehle ich doch, sich eine zu erstellen. Zum einen kann man dann auch das Steuerprogramm simpleclient sofort benutzen, zum anderen hat man immer eine Übersicht über seine Lokomotiven und die verwendeten Protokolle und Adressen. Schliesslich verwende ich die Lokomotivdatei auch in Zusammenhang mit der DDL-Shell ddsh. Vielleicht gibt es ja auch demnächst ein neues Feature in j-man, mit dem man die Datei loco.dat einlesen kann (und natürlich eine Option zum Löschen aller Loks in einem Schritt) ?
    Also bitte jetzt im Verzeichnis /usr/local/ddl/cfg eine Datei loco.dat anlegen:
    Wenn die Lok einen Delta-Decoder (eingestellte Adresse z.B. 24) hat, folgendes eintragen:
    E69,M2,24
    Wenn die Lok einen 6090-Digital-Decoder hat (eingestellte Adresse z.B. 78) hat, folgendes eintragen:
    BR120,M1,78
    Wenn die Lok einen 60901-Digital-Decoder hat (eingestelle Adresse z.B. 72) hat, folgendes eintragen:
    BR216,M2,72
  8. Jetzt als gewöhnlicher Benutzer anmelden. In der Datei ~/.bashrc folgende Variablen passend einstellen (wie, steht in der Datei j-man): JAVAHOME, JAVAVM und DDLHOME, und diese Variablen exportieren. Hier ein Beispiel:
    JAVAHOME=/usr/lib/jre1.1.7/
    JAVAVM=jre
    DDLHOME=/usr/local/ddl
    export JAVAHOME JAVAVM DDLHOME
    Damit die Änderungen sofort wirksam werden, bitte diese 4 Zeilen auch im aktuellen Terminalfenster nacheinander eingeben.
  9. Jetzt das Programm j-man starten und im Datei-Menü anpassen (Hostname, Port, ...):
    ./j-man
  10. Nach Einschalten des Digitalstroms mit j-man sollte jetzt die Beleuchtung angehen und man kann seine ersten Fahrten mit der Lok durchführen.
  11. Wenn folgende Linux-Kernel-Module geladen sind, kann man die Lok auch mit dem Joystick oder besser mit einem Gamepad bedienen: joystick und joy-analog. Mit dem Linux-Kernel 2.0 ist es etwas schwieriger, man muss sich zuerst die Joystick-Treiber von der DDL-Homepage herunterladen und übersetzen. Abhängig von der Compiler-Version muss man dazu sogar noch den Kernel patchen und neu übersetzen. Wie das alles geht, steht aber im Joystick-Treiber-Paket.
    Nach dem Laden der Joystick-Module muss man noch im j-man die Verwendung der Joystick-Treiber einstellen und j-man neu starten.
  12. Falls irgendetwas bei DDL nicht wie hier oder auf der Homepage beschrieben funktioniert, bitte vor E-Mails an den Autor oder an die Newsgroup zunächst die Häufig gestellten Fragen (Frequently Asked Questions, FAQ) durchlesen. Oder eine frühere Version von ddl probieren. Die Version vom 29.01.2000 habe ich hier abgelegt.

Und nun viel Spass !

Einige Skripte zum DDL-Befehlsinterpreter ddsh, u.a. zur Steuerung über HTML

Mit Hilfe von ddsh kann man Loks und Magnetartikel automatisch steuern, ohne in den Ablauf eingreifen zu müssen (allerdings kann man trotzdem z.B. mit j-man oder mit dem Joystick in den Ablauf eingreifen). Auch die Anbindung an einen Web-Server ist relativ unproblematisch, so dass man sehr leicht eine Modellbahn über das Internet steuen lassen kann. Über Rückmeldemodule, z.B. das Märklin s88 oder vergleichbare, kann man aktuelle Zustände von der Modellbahn erhalten (z.B. Gleisbesetzmeldungen oder gezählte Achsen eines Zuges) und in ddsh auswerten.

Zunächst bitte die Datei /usr/local/ddl/cfg/connect.dat anlegen, um zentral den Rechnernamen und den Port des erddcd abzulegen. Hier ein Beispiel:
host=kirk
port=12345

Hier einige Beispielskripte:

Ein Skript zum Ein- und Ausschalten des Digitalstroms (ddlpower on/off)

#!/usr/bin/ksh

# Name: ddlpower
# Purpose: Switch DDL Digital Voltage on or off
# Author: Bernd Finger, February 27, 2000, mailto:bernd@fingerlinge.de
DDL_FILE=/var/tmp/._ddl.ddsh.$$
LOCO_DAT_FILE=/usr/local/ddl/cfg/loco.dat
CONNECT_DAT_FILE=/usr/local/ddl/cfg/connect.dat

# --- don't change below this line ---
PROGNAME=ddlpower
ARG=$1
if [ ${ARG}. = "on". ] || [ ${ARG}. = "start". ]; then
   ACTION=start
elif [ ${ARG}. = "off". ] || [ ${ARG}. = "stop". ]; then
   ACTION=stop
else
   echo "Usage: ${PROGNAME} [on|start|off|stop]"
   echo "Exit."
   exit 1
fi

_HOST=$(awk 'BEGIN{FS="="}/host/{print $2}' ${CONNECT_DAT_FILE})
_PORT=$(awk 'BEGIN{FS="="}/port/{print $2}' ${CONNECT_DAT_FILE})

touch ${DDL_FILE}
chmod 700 ${DDL_FILE}

echo "#!/usr/local/ddl/bin/ddsh" > ${DDL_FILE}

echo "connect(\"${_HOST}\", ${_PORT});\n \
${ACTION};\n \
disconnect;\n \
exit;\n" >> ${DDL_FILE}

${DDL_FILE}
rm -f ${DDL_FILE}
 

Ein Skript zum Steuern einer Lok über einen einzigen Befehl aus der Befehlszeile

Ist gerade in der Testphase. Das Hauptproblem ist die verschiedene Steuerung von Loks mit M1- und M2-Protokoll (z.B. 6090 / 60901,60902,66031). Mit einem zukünftigen Release von ddl soll aber eine universelle Schnittstelle eingeführt werden, die das Problem beseitigt.
 

Skripte und Dateien zum Steuern von Loks und Magnetartikeln über HTML

Dieses Zeugs ist gerade auch noch in der Testphase, aber es läuft bereits mit einer einzigen Lok. Für mehrere Loks ist wahrscheinlich eine Frames-basierte Lösung angebracht. Bitte beachten: Natürlich sind auch alle anderen DDL-Client-Programme voll Internet- und Client/Server-tauglich. Problematisch kann es nur sein, den passenden Port freigeschaltet zu bekommen und/oder die Client-Software auf seinem Betriebssystem zum Laufen zu bekommen (ausser vielleicht bei j-man).
Zunächst das Programm loco_sh, das das das HTML-Argument analysiert, daraus ein DDL-Skript aufbaut und startet. Es muss im Verzeichnis cgi-bin des Web-Servers liegen, z.B. in /usr/local/httpd/cgi-bin.

#!/usr/bin/ksh

# Name: loco_sh
# Purpose: Parse HTML args, build ddsh file and execute
# Author: Bernd Finger, February 27, 2000, mailto:bernd@fingerlinge.de
DDL_FILE=/var/tmp/._ddl.ddsh.$$
HTML_FILE=/usr/local/httpd/htdocs/ddl/br160.html
LOCO_DAT_FILE=/usr/local/ddl/cfg/loco.dat
CONNECT_DAT_FILE=/usr/local/ddl/cfg/connect.dat

# --- don't change below this line ---

LOCO_ID=br160
SPEED_ID=$(echo $QUERY_STRING | awk '{gsub("speed=", ""); print}')

# echo SPEED_ID=$SPEED_ID

if [ ${SPEED_ID} -eq 1 ]; then
   echo "Speed 1 not allowed. Exit."
   exit 1
elif [ ${SPEED_ID} -gt 14 ]; then
   echo "Speed must be lower than 15. Exit."
   exit 1
elif [ ${SPEED_ID} -lt -14 ]; then
   echo "Speed must be higher than -15. Exit."
   exit 1
fi
if [ ${SPEED_ID}. = "STOP+%21". ]; then
   SPEED_ID=0
fi

_HOST=$(awk 'BEGIN{FS="="}/host/{print $2}' ${CONNECT_DAT_FILE})
_PORT=$(awk 'BEGIN{FS="="}/port/{print $2}' ${CONNECT_DAT_FILE})

touch ${DDL_FILE}
chmod 700 ${DDL_FILE}

_ADDR=$(awk 'BEGIN{FS=","}/'${LOCO_ID}'/{print $2}' ${LOCO_DAT_FILE})
_PROT=$(awk 'BEGIN{FS=","}/'${LOCO_ID}'/{print $3}' ${LOCO_DAT_FILE})

echo "#!/usr/local/bin/ddsh" > ${DDL_FILE}
if [ ${_PROT}. = "M2". ]; then
   PROT_STRING=MARKLIN_NEW
elif [ ${_PROT}. = "M1". ]; then
   echo "Protocol M1 not supported. Exit"
   exit 1
fi

echo "loco ${LOCO_ID}(\"${PROT_STRING}\", ${_ADDR});" >> ${DDL_FILE}
echo >> ${DDL_FILE}

echo "connect(\"${_HOST}\", ${_PORT});"           >> ${DDL_FILE}
if [ ${PROT_STRING}. = "MARKLIN_OLD". ] && [ ${SPEED_ID}. = "-". ] ; then
   echo "${LOCO_ID}.setspeed(1);"               >> ${DDL_FILE}
else
   echo "${LOCO_ID}.setspeed(${SPEED_ID});"     >> ${DDL_FILE}
fi
echo "${LOCO_ID}.send();" >> ${DDL_FILE}
echo "disconnect;" >> ${DDL_FILE}
echo "exit;" >> ${DDL_FILE}

${DDL_FILE}
echo "Content-type: text/html"
echo
cat ${HTML_FILE}
rm -f ${DDL_FILE}

Und jetzt noch die passende HTML-Datei dazu. Sie muss unter dem Namen abgelegt werden, der in der loco_sh-Datei (siehe oben) als HTML_FILE angegeben ist. In diesem Fall also br160.html im Verzeichnis /usr/local/httpd/htdocs/ddl.

<HTML>
<HEAD>
<TITLE>BR 160</TITLE>
</HEAD>
<BODY bgcolor=#d0ffd0>

<h4>Lokomotive steuern:</h4>
<form action=/cgi-bin/loco_2_sh>
<font size=+3>BR 160:</font><br>
<input name=speed type=submit width=30 value="-10">
<input name=speed type=submit width=30 value="-9">
<input name=speed type=submit width=30 value="-8">
<input name=speed type=submit width=30 value="-7">
<input name=speed type=submit width=30 value="-6">
<input name=speed type=submit width=30 value="-5">
<input name=speed type=submit width=30 value="-4">
<input name=speed type=submit width=30 value="-3">
<input name=speed type=submit width=30 value="-2">
<input name=speed type=submit width=50 value="STOP !">
<input name=speed type=submit width=30 value="2">
<input name=speed type=submit width=30 value="3">
<input name=speed type=submit width=30 value="4">
<input name=speed type=submit width=30 value="5">
<input name=speed type=submit width=30 value="6">
<input name=speed type=submit width=30 value="7">
<input name=speed type=submit width=30 value="8">
<input name=speed type=submit width=30 value="9">
<input name=speed type=submit width=30 value="10">
</form>

</BODY>
</HTML>

Das Ganze funktioniert, wenn man die HTML-Datei im Browser aufruft und eine der Schaltflächen betätigt. Am einfachsten und universellsten ist es, wenn der Web-Server auf der gleichen Maschine wie der ddl-Daemon erddcd läuft, dann braucht man auf dem Steuerrechner nur einen Web-Browser.

Und nun viel Spass und Erfolg beim Experimentieren !