Hallo, wie in meinen älteren Beiträgen zu erkennen, habe ich eine ältere digitale Märklin Modellbahn bekommen.
Neben einer Control Unit (6021) und diversen Decodern (S88, k83 etc.) war auch ein Interface (6051) dabei. Ich habe begonnen eine kleine Steuerung in C zu schreiben, die funktioniert auch so weit.
Ab und zu gibt es allerdings ein kleines Problem, Befehle scheinen vom Interface verschluckt zu werden (scheint nur Magnetartikel zu betreffen, ich kann es aber nicht 100% sicher sagen). Mit Hilfe eines Programms konnte ich sehen, dass der Befehl über den Com Port gesendet wird, das Interface verwirft ( ? ) diesen aber wohl. Wie gesagt, das ist nicht immer der Fall, meist funktioniert alles.
Gibt es was zu beachten bei der Programmierung mit dem Interface? Vor dem Senden warte ich immer auf das CTS-Signal des Ports. Das Handbuch bietet leider kaum Informationen.
Hat jemand Erfahrungen damit? Freue mich über jeden Hinweis!
ich bin kein Experte und ich weiß nicht ob Dir das weiterhilft. Aber ich kann mich erinnern, das ich vor Jahren mal WinDigipet Version 7.0 zu Weihnachten geschenkt bekam und auch das Interface 6051. Ich habe damals ein wenig damit rumexperimentiert (noch unter Win 98 ) und meine, das es da Probleme bezüglich der Baudrate gab. Das Interface kann glaube ich nur 4800 Baud.
Wie gesagt, bin diesbezüglich kein Experte aber vielleicht hilft es Dir weiter.
ich meine es waren (sind) 2400 Baud, und ausserdem 2 Stopbits, also 8n2
dann folgt noch I2C und dann MM auf dem Gleis (dort mindestens 2 mal). Und es kann nur ein Weichendekoderausgang z.Z. aktiv sein, dann folgt noch der Abschaltbefehl.
An der Konfiguration des PCs und des Interface liegt es nicht, da ist alles richtig eingestellt.
Ich warte auf das CTS-Signal des Interface, danach sende ich Daten. Den Befehl "32" zum Abschalten der Magnetartikel sende ich so nach 150ms. Das Handbuch ist an der Stelle etwas ungenau, es empfiehlt eine Zeit zwischen 80ms und 1000ms (immerhin Faktor 12,5!).
Zu den beiden Links von Märklin: Dort wird empfohlen eine Schleife zu programmieren, um so eine Verzögerung zu erzeugen. So richtig schön ist diese Lösung ja nicht. Ein Interface mit RTS und CTS benötigt diese Schleife nicht. Das Interface 6051 unterstützt diese Funktionen?
Zitat von RougieZu den beiden Links von Märklin: Dort wird empfohlen eine Schleife zu programmieren, um so eine Verzögerung zu erzeugen. So richtig schön ist diese Lösung ja nicht. Ein Interface mit RTS und CTS benötigt diese Schleife nicht. Das Interface 6051 unterstützt diese Funktionen?
Die Texte zu den Links stammen noch von der Zeit der Einfuehrung der 6050/51, und da ware noch C64 aktuell. Wichtig ist: auch bei diesen Uralt-Rechnern sollte schon Verzoegerungen einprogrammiert werden. Trotz CTS, ich glaub das kam ein Byte zu frueh oder so. Ist verdammt lange her, sorry!
ZitatDen Befehl "32" zum Abschalten der Magnetartikel sende ich so nach 150ms.
Wieviel Zeit bis zum naechsten Befehl danach?
ZitatDas Handbuch ist an der Stelle etwas ungenau, es empfiehlt eine Zeit zwischen 80ms und 1000ms (immerhin Faktor 12,5!).
Das ist die Zeit die jede Weiche braucht, koennte/sollte fuer jede Weiche einstellbar sein. Ein k84 Relais wird am unteren Ende sein, eine schwergaengige Weiche/Signal am oberen Ende dieser Zeitspanne.
Den Verdacht mit dem zu früh gesendeten Byte habe ich auch. Das würde dann einfach verworfen werden, oder?
Bis zum Senden des nächsten Befehls vergeht keine bestimmtes Intervall, mal vergeht mehr Zeit und mal weniger. Es können sich alle an das Interface gesendete Befehle gegenseitig stören, oder? Also könnte das Abbremsen eines Zugs das Schalten eines Signals stören?
Ok, das erklärt diese große Schwankung zwischen 80 und 1000ms. Das heißt aber auch, dass alte Weichen/Signale die schon etwas schwergängiger sind länger das Umschaltsignal benötigen bevor 32 gesendet wird? Wie kann man das für jede Weiche einstellen?
Zitat von RougieBis zum Senden des nächsten Befehls vergeht keine bestimmtes Intervall, mal vergeht mehr Zeit und mal weniger.
Ein Abschaltbefehl sollte mit einer Mindestpause gefolgt werden. Ja, trotz CTS.
ZitatEs können sich alle an das Interface gesendete Befehle gegenseitig stören, oder? Also könnte das Abbremsen eines Zugs das Schalten eines Signals stören?
Ich hatte damals (tm) nie versucht Weichenbefehlssequenzen (Weiche - Weiche - ... - Abschalt) mit Lok/Fkt./s88/etc. Befehlen zu mischen. Sprich trat nie auf. Bei mir. Sprich kann sein!
ZitatOk, das erklärt diese große Schwankung zwischen 80 und 1000ms. Das heißt aber auch, dass alte Weichen/Signale die schon etwas schwergängiger sind länger das Umschaltsignal benötigen bevor 32 gesendet wird? Wie kann man das für jede Weiche einstellen?
Deine Software (Maerklin k83). Oder Deine Dekoder (ich glaub es gibt ein paar wo das vor Ort einstellbar ist. Oder gibt es die nur bei DCC? Handbuch! Bei den Maerklin k83 jedenfalls nur per Software).
Zitat von Jens Wulf Ein Abschaltbefehl sollte mit einer Mindestpause gefolgt werden. Ja, trotz CTS.
Also nach einem Abschaltbefehle sollte eine Pause folgen, oder? Hast Du Erfahrungen, wie lang die sein sollte?
ZitatIch hatte damals (tm) nie versucht Weichenbefehlssequenzen (Weiche - Weiche - ... - Abschalt) mit Lok/Fkt./s88/etc. Befehlen zu mischen. Sprich trat nie auf. Bei mir. Sprich kann sein!
Da habe ich mich falsch ausgedrückt, ich wollte keine Befehle mischen. Ich meinte eher Folgendes: Können sich Befehle (ändern der Zuggeschwindigkeit, umschalten von Signalen etc.) stören wenn dazwischen keine ausreichende Pause gemacht wird? Die Befehle an sich bestehen ja aus mehreren Teilen (Kommando + Adresse, anschl. Abschaltbefehl), die werden nicht untereinander gemischt.
Zitat von RougieDen Verdacht mit dem zu früh gesendeten Byte habe ich auch. Das würde dann einfach verworfen werden, oder?
Bis zum Senden des nächsten Befehls vergeht keine bestimmtes Intervall, mal vergeht mehr Zeit und mal weniger.
Hallo Rougie, in 2003 hatte ich (noch ohne CTS/RTS) den Datentransfer zur 6051 realisiert mit der folgenden Verzögerung: 100ms zwischen den einzelnen Bytes zur 6051, und 150ms nach dem Senden eines kompletten Befehls. Da die 6051 nur mit 2400 baud läuft, gab es dann keine Kollisionen mehr. Hängt aber auch vom Betriebssystem ab. Im Laufe der Zeit konnten die Verzögerungen immer weiter verkürzt werden. Die Verzögerungen sind bei mir nun implementiert zusätzlich zum CTS/RTS-Handshake.
Zitat von Mafi in 2003It is recommended for the hardware Control Unit 6021 to delay 100ms between two 6050-Lok-commands. The IB can accept commands in shorter time (67ms may be sufficient). To make the command sequence send by the push button "Immediate" acceptable for all vehicle decoders, you can determine in the Preferences window the delay time after the sending of the first byte of a 6050-Lok-command and the delay time after the sending of the last byte of this command. We recommend 50ms for the first and 150ms for the last byte when using the hardware 6021 and 0ms for the first and 67ms for the last byte when using the hardware IB. The Preferences setting will accept values ranging from 0ms to 300ms.
#10 von
ronaldhelder
(
gelöscht
)
, 18.12.2011 13:39
Hallo Programmierer ohne Namen
bist du sicher dass die CTS richtig funktioniert. Die ersten 6050 hatten keine CTS, und bei den anderen kommt es auch oft vor dass der Kabel das CTS Signal nicht weitergibt. Was dann nur hilft, ist eine Pause nach jedem Befehl (zwischen Bytes ist das nicht nötig, da der 6050 1 Byte kan speichern , 50ms bis 100 ms solten reichen.