• Hallo TT-Modellbahner, schön, dass du zu uns gefunden hast.
    Um alle Funktionen nutzen zu können, empfehlen wir dir, dich anzumelden. Denn vieles, was das Board zu bieten hat, ist ausschließlich angemeldeten Nutzern vorbehalten. Du benötigst nur eine gültige E-Mail-Adresse und schon kannst du dich registrieren.
    Deine Mailadresse wird für nichts Anderes verwendet als zur Kommunikation zwischen uns.
    Die Crew des TT-Boardes

Lok lässt sich mit PC nicht steuern (Lenz Digital Plus)

H

HuskyNET

Hi,
ich hab ein kleines Problem mit der Steuerung meiner Modellbahn. Ich verwende das Lenz Digital Plus System. Die Verbindung kann ich erfolgreich herstellen. Auch Rückmeldung oder das Schalten der Weichen funktioniert problemlos. Nur reagiert meine Lok mit Digitaldecoder nicht auf meinen Fahrbefehl. Eine konventionelle Lok lässt sich aber steuern.

Hier die Bytes die ich sende, um die konventionelle Lok an Adresse 0 zum Rückwärtsfahren auf Fahrstufe 10 zu bringen:

[ 228, 16, 0, 0, 10, 254 ]

288 = Headerbyte
16 = Kennung 14 Fahrstufen insgesamt
0 = Highbyte der Lokadresse
0 = Lowbyte der Lokadresse
10 = Sollfahrstufe 10 (da Rückwärtsfahrt entspricht die Zahl der Sollfahrstufe)
254 = XOR-Byte

Was muss ich nun senden, um eine Lok mit Decoder an Adresse 180 auf Fahrstufe 10 rückwärts fahren zu lassen? Die Lok hat 128 Fahrstufen insgesamt. Wenn ich im Handregler LH100 die Adresse 180 eingebe, kann ich damit die Lok problemlos steuern. Folgender Fahrbefehl funktioniert aber mit dem PC nicht:

[ 228, 19, 0, 180, 10, 73 ]

288 = Headerbyte
19 = Kennung 128 Fahrstufen insgesamt
0 = Highbyte der Lokadresse
180 = Lowbyte der Lokadresse
10 = Sollfahrstufe 10 (da Rückwärtsfahrt entspricht die Zahl der Sollfahrstufe)
73 = XOR-Byte

Stimmt das so, oder hab ich irgendeinen Fehler in der Adresse / dem Befehl? Oder muss ich, bevor ich diesen Befehl aufrufe, noch einen anderen aufrufen? (Es gibt da ja noch Befehle wie "Lok frei" und "Lok besetzt", aber das sind ja nur Abfragen, oder?)

Tausend Dank schonmal im Vorraus!
 
XBus-Telegramm

HuskyNET schrieb:
Folgender Fahrbefehl funktioniert aber mit dem PC nicht:

[ 228, 19, 0, 180, 10, 73 ]

Probiere es mal mit [228, 19, 192, 180, 10, (selber ausrechnen)]

Edit: Und vorher natürlich prüfen, ob die Lok zur Verfügung steht und hinterher die Antwort auswerten.

Thomas
 
Ab Adresse 100 muss diese um C000hex inkrementiert werden. (siehe Kapitel 1.3 in der Interfacebeschreibung von Lenz)

Es wäre von Vorteil, wenn Du nicht wegen jeder Frage einen neuen Thread öffnest.

Gruß Thomas

p.s. Hoppla, da hat's sogar schon einer ausgerechnet ;-)
 
Hey danke! Das geht! Aber wieso geht das?

Ab Adresse 100 muss diese um C000hex inkrementiert werden.

Ja genau so steht das in der Interfacebeschreibung. Ich komme wenn ich das ausrechne fürs Highbyte aber trotzdem auf 0. Also folgendes steht dort genau drin:

Für Lokadresse von 100 bis 9999 gilt:
Highbyte der Lokadresse ist: AH = (ADR&0xFF00)+0xC000
Lowbyte der Lokadresse ist: AL = (ADR&0x00FF)

Meine Adresse ist 180. Also

AH = ( 180 & 0xFF00 ) + 0xC000
AH = ( 0 ) + 0xC000
AH = 49152

Wenn ich das nun in einen Byte umwandle, komme ich auf 0, da ja ein Byte nur von 0 - 255 geht, und der danach wieder bei 0 weitermacht. Also komme ich auf AH = 0

AL = ( 180 & 0x00FF )
AL = 180

Ist da irgendwo ein Fehler? Für die anderen Adressen muss ichs ja dann im Programm ausrechnen können.

Und irgendwie hab ich jetzt das Problem gelöst, verstehs aber garnicht mehr. Beim nochmal Durchlesen der Antwort wollte ich noch den Beweis reinschreiben, dass, wenn ich 49152 in einen Byte umwandle, dass dann 0 rauskommt. Also hab ich 49152 / 256 gerechnet (eine Zahl ohne Kommastellen wäre ja der Beweis gewesen). Und siehe da, ich komm auf 192. Genau die Zahl, mit ders funktioniert. Aber wieso das?

Es wäre von Vorteil, wenn Du nicht wegen jeder Frage einen neuen Thread öffnest.

Ähm, ok. Ich wars von anderen Forem eigentlich immer gewöhnt, dass jede Frage in einen eigenen Thread gehört. Aber werd's mir merken. PS: Deshalb haben vielleicht auch die ganzen anderen Threads so viele Antworten... :biggrin:

Gruß Randy
 
Also eigentlich geht das so:

Adresse 180 = 0xB4

0xB4 + 0xC000 = 0xC0B4

höherwertiges (erstes) Byte 0xC0 = 192

niederwertiges (zweites) Byte 0xB4 = 180

In dem Stückchen Pascal-Code, den ich Dir in der Antwort im ersten Thraed angehängt hatte, findest Du einen passenden Script in der Procedure oDigi.SetFst.

Gruß Thomas
 
ASO! Aber ist das dann nicht falsch was in der Beschreibung steht? Naja, zumindest geht jetzt alles.

Bei dem Pascal Code hab ich mir mehr die Kommentare angeguckt :rolleyes:, und hab das dann auch so bei mir aktiviert. Und siehe da, es funktioniert. Trotzdem ne nette Gelegenheit, sich mal bissl mit Pascal zu beschäftigen :)
 
Zurück
Oben