[gelöst] DCC++ stellt einige Weichen nicht mehr

[gelöst] DCC++ stellt einige Weichen nicht mehr

Postby Duesselklaus » 06.12.2016, 13:55

Hallo Freunde des DCC++,

Ich habe seit einiger Zeit einen Arduino als Zentrale zum Stellen meiner Weichen und Signale im Einsatz. Mit einem Arduino UNO Pin 10 speise ich direkt einen Lenz Booster. Zu Testzwecken habe ich auch einen MEGA mit Ethernet-Shield verwendet (dann natürlich A12). Das klappt beides ganz hervorragend!

Leider beobachte ich aber ein Phenomen, das ich noch nicht erklären oder beseitigen kann:

Nach einiger Zeit (oder einigen Weichenstellungen über Fahrstraßen) kann ich einige - nicht alle - Weichen nicht mehr ansprechen. :roll:

Habt Ihr so etwas schon einmal beobachtet? Kennt Ihr das Problem?

Danke und Gruß
Klaus
Last edited by Duesselklaus on 21.02.2017, 15:20, edited 2 times in total.
Spur1 (indoor), DCC und Motorola gemischt, Loconet und DCCpp zum Fahren und Schalten. Automatik und Manuell über Start-Ziel auf Touch-Screen. Server Linux, Stelltisch Windows; Neigung: Software, Elektronik (incl PCBs)
Duesselklaus
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby rjversluis » 06.12.2016, 14:41

Hi Klaus,

was sagt der Server Trace dazu?
Irgendwie fehlen die Dateien an dein Beitrag.

Kommt dieses Problem auch wenn du anstatt Ethernet USB benutzt?
Anscheinend gibt es bei nicht Arduino Shields Probleme:
viewtopic.php?f=118&t=12808
Best Regards, Rob.
:!: PS: Do not forget to attach the usual files.
:!: PS: Nicht vergessen die übliche Dateien an zu hängen.
[ macOS - Linux] - [ N: CBUS - CANGCx ] - [ G: CBUS - CANGCx ]
rjversluis
Site Admin
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby Duesselklaus » 08.12.2016, 14:53

Hallo Rob,

Das eigentliche Problem vermute ich im Arduino/DCC++. Wenn sich die Weichen nicht mehr schalten lassen, drücke ich den Reset Knopf auf dem UNO und es geht wieder. Der RocRail-Server kann immer ohne Probleme mit dem Arduino kommunizieren - sowohl per USB als auch IP - da habe ich keine Unterschiede sehen können. Fehlermeldungen in Server-Trace gibt es keine, die Strom-Info kommt immer regelmäßig.

Für mich ist die Frage eigentlich: Was schickt RocRail dem Arduino, was den dann durcheinander bringt? Gemerkt habe ich schon, dass man, wenn man die Weichen in der Schnittstelle nicht sauber als "Zubehör" definiert hat, den Arduino durch viele aufeinander folgende <T...> Schaltberfehle durcheinander bringen kann. Das habe ich aber alles im Plan gefixt. Die Geschwindigkeit, mit der RocRail die Befehle schickt, kann es auch nicht sein, da ich Schaltzeiten von 2500ms definiert habe. Also was ist es dann?

Was ich noch nicht herausgefunden habe ist, wie groß die maximale Anzahl von Weichen und Signalen ist, die man definieren darf. Da im DCC++ der Zustand der Devices gespeichert wird, muss es entsprechende Felder und einen Bereich im EEprom geben - und wenn es beim Überlauf keine Fehlermeldungen vom DCC++ zurück an RocRail gibt (dazu habe ich in der Doku noch nichts gefunden), könnte das schon eine Ursache sein. Benutzt RocRail eigenlich den <E> - Befehl? Wenn ja, wann?

Ich hatte die Hoffnung, dass hier jemand im Forum ähnliche Beobachtungen gemacht hat und eine Tip geben kann.

Gruß
Klaus
Spur1 (indoor), DCC und Motorola gemischt, Loconet und DCCpp zum Fahren und Schalten. Automatik und Manuell über Start-Ziel auf Touch-Screen. Server Linux, Stelltisch Windows; Neigung: Software, Elektronik (incl PCBs)
Duesselklaus
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby Duesselklaus » 14.12.2016, 14:26

Hallo Rob,

Ich habe eine Auffälligkeit gefunden, die uns vielleicht zur Lösung des Problems führt:

Zum Ablauf: Ich habe RocRail gestartet und die Funktion "Anlage initialisieren" (Start of Day) aufgerufen. Diekt danach habe ich den Server wieder herunter gefahren.

Wenn ich jetzt im angehängten Trace die Zeilen heraus filtere, die auf das Device 0DCCPP gehen, dann sehe ich bis Zeile 6606, dass die Weichen bis ID 131 definiert werden. Danach, ab Zeile 6622 (Timestamp 20161214.132350.254), wird nur noch die Weiche #48 mit immer wieder anderen Adress-Daten definiert.

Wenn ich vermute, dass die DCC++ Software ihre Devices über die Adresse referenziert (und nicht über die ID), dann würde dies erklären, warum sich ein großer Teil der Weichen nach der Initialisierung nicht mehr stellen läßt - und zwar alle diejenigen, die als ID=48 überdefiniert wurden.

Leider kann ich diese Vermutung nicht an der Bahn ausprobieren - aber vermutlich haben wir hier einen Teil des Problems gefunden. Kannst Du bestätigen, dass das RocRail-DCCpp-Interface keine Accessory-IDs > 131 (oder 128?) definieren kann?

Danke und Gruß
Klaus
You do not have the required permissions to view the files attached to this post.
Spur1 (indoor), DCC und Motorola gemischt, Loconet und DCCpp zum Fahren und Schalten. Automatik und Manuell über Start-Ziel auf Touch-Screen. Server Linux, Stelltisch Windows; Neigung: Software, Elektronik (incl PCBs)
Duesselklaus
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby rjversluis » 14.12.2016, 14:48

Hi Klaus,

wenn ein Weiche als DCC, Accessory, definiert ist wird für die Kennung Adresse und Port verwendet.
Sonnst wird für die Kennung nur Adresse benutzt weil es eben Flat adressiert wird.
Best Regards, Rob.
:!: PS: Do not forget to attach the usual files.
:!: PS: Nicht vergessen die übliche Dateien an zu hängen.
[ macOS - Linux] - [ N: CBUS - CANGCx ] - [ G: CBUS - CANGCx ]
rjversluis
Site Admin
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby Duesselklaus » 14.12.2016, 17:30

Hi Rob,

Danke für den Hinweis.

Kannst Du das Problem ab Zeile 6622 im Server Trace bestätigen? :?:

Danke
Klaus
Spur1 (indoor), DCC und Motorola gemischt, Loconet und DCCpp zum Fahren und Schalten. Automatik und Manuell über Start-Ziel auf Touch-Screen. Server Linux, Stelltisch Windows; Neigung: Software, Elektronik (incl PCBs)
Duesselklaus
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby rjversluis » 14.12.2016, 19:11

Duesselklaus wrote:Kannst Du das Problem ab Zeile 6622 im Server Trace bestätigen? :?:

welches Problem?
Code: Select all
20161214.132350.254 r9999I 00001C50 ODCCPP   0102 send message: <T 48 21 2>
20161214.132350.254 r9999I 00001C50 ODCCPP   0102 send message: <T 48 0>
Best Regards, Rob.
:!: PS: Do not forget to attach the usual files.
:!: PS: Nicht vergessen die übliche Dateien an zu hängen.
[ macOS - Linux] - [ N: CBUS - CANGCx ] - [ G: CBUS - CANGCx ]
rjversluis
Site Admin
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby Duesselklaus » 14.12.2016, 21:20

Hallo Rob,

Wenn man aus dem Trace-File die Zeilen mit DCCPP heraus filtert, bekommt man:

Code: Select all
   ...
   Line 6598: 20161214.132347.726 r9999I 00001C50 ODCCPP   0102 send message: <T 131 27 3>
   Line 6599: 20161214.132347.727 r9999I 00001C50 ODCCPP   0102 send message: <T 131 1>
   Line 6605: 20161214.132348.233 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6606: 20161214.132348.234 r9999I 00001C50 ODCCPP   0102 send message: <T 131 27 3>
   Line 6607: 20161214.132348.236 r9999I 00001C50 ODCCPP   0102 send message: <T 131 0>
   Line 6621: 20161214.132350.253 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6622: 20161214.132350.254 r9999I 00001C50 ODCCPP   0102 send message: <T 48 21 2>
   Line 6623: 20161214.132350.254 r9999I 00001C50 ODCCPP   0102 send message: <T 48 0>
   Line 6637: 20161214.132350.775 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6638: 20161214.132350.776 r9999I 00001C50 ODCCPP   0102 send message: <T 48 21 1>
   Line 6639: 20161214.132350.776 r9999I 00001C50 ODCCPP   0102 send message: <T 48 0>
   Line 6653: 20161214.132351.295 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6654: 20161214.132351.295 r9999I 00001C50 ODCCPP   0102 send message: <T 48 21 0>
   Line 6655: 20161214.132351.296 r9999I 00001C50 ODCCPP   0102 send message: <T 48 1>
   Line 6670: 20161214.132351.312 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6671: 20161214.132351.313 r9999I 00001C50 ODCCPP   0102 send message: <T 48 34 0>
   Line 6672: 20161214.132351.313 r9999I 00001C50 ODCCPP   0102 send message: <T 48 0>
   Line 6689: 20161214.132351.828 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6690: 20161214.132351.829 r9999I 00001C50 ODCCPP   0102 send message: <T 48 20 2>
   Line 6691: 20161214.132351.830 r9999I 00001C50 ODCCPP   0102 send message: <T 48 0>
   Line 6705: 20161214.132352.348 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6706: 20161214.132352.349 r9999I 00001C50 ODCCPP   0102 send message: <T 48 21 2>
   Line 6707: 20161214.132352.350 r9999I 00001C50 ODCCPP   0102 send message: <T 48 0>
   Line 6720: 20161214.132352.870 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6721: 20161214.132352.871 r9999I 00001C50 ODCCPP   0102 send message: <T 48 21 0>
   Line 6722: 20161214.132352.872 r9999I 00001C50 ODCCPP   0102 send message: <T 48 1>
   Line 6735: 20161214.132353.389 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6736: 20161214.132353.389 r9999I 00001C50 ODCCPP   0102 send message: <T 48 21 0>
   Line 6737: 20161214.132353.390 r9999I 00001C50 ODCCPP   0102 send message: <T 48 0>
   Line 6751: 20161214.132353.908 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6752: 20161214.132353.909 r9999I 00001C50 ODCCPP   0102 send message: <T 48 37 2>
   Line 6753: 20161214.132353.909 r9999I 00001C50 ODCCPP   0102 send message: <T 48 0>
   Line 6767: 20161214.132354.427 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6768: 20161214.132354.427 r9999I 00001C50 ODCCPP   0102 send message: <T 48 9 2>
   Line 6769: 20161214.132354.428 r9999I 00001C50 ODCCPP   0102 send message: <T 48 1>
   Line 6782: 20161214.132354.949 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6783: 20161214.132354.949 r9999I 00001C50 ODCCPP   0102 send message: <T 48 39 2>
   Line 6784: 20161214.132354.950 r9999I 00001C50 ODCCPP   0102 send message: <T 48 1>
   Line 6802: 20161214.132355.473 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6803: 20161214.132355.473 r9999I 00001C50 ODCCPP   0102 send message: <T 48 46 1>
   Line 6804: 20161214.132355.474 r9999I 00001C50 ODCCPP   0102 send message: <T 48 0>
   Line 6818: 20161214.132355.995 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6819: 20161214.132355.996 r9999I 00001C50 ODCCPP   0102 send message: <T 48 40 0>
   Line 6820: 20161214.132355.997 r9999I 00001C50 ODCCPP   0102 send message: <T 48 0>
   Line 6834: 20161214.132356.515 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6835: 20161214.132356.516 r9999I 00001C50 ODCCPP   0102 send message: <T 48 39 0>
   Line 6836: 20161214.132356.516 r9999I 00001C50 ODCCPP   0102 send message: <T 48 0>
   Line 6850: 20161214.132357.029 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6851: 20161214.132357.029 r9999I 00001C50 ODCCPP   0102 send message: <T 48 38 0>
   Line 6852: 20161214.132357.030 r9999I 00001C50 ODCCPP   0102 send message: <T 48 0>
   Line 6866: 20161214.132357.551 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6867: 20161214.132357.552 r9999I 00001C50 ODCCPP   0102 send message: <T 48 38 2>
   Line 6868: 20161214.132357.553 r9999I 00001C50 ODCCPP   0102 send message: <T 48 1>
   Line 6882: 20161214.132358.072 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6883: 20161214.132358.072 r9999I 00001C50 ODCCPP   0102 send message: <T 48 47 3>
   Line 6884: 20161214.132358.072 r9999I 00001C50 ODCCPP   0102 send message: <T 48 0>
   Line 6902: 20161214.132358.583 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6903: 20161214.132358.584 r9999I 00001C50 ODCCPP   0102 send message: <T 48 47 1>
   Line 6904: 20161214.132358.585 r9999I 00001C50 ODCCPP   0102 send message: <T 48 1>
   Line 6918: 20161214.132359.103 r9999I 00001C50 ODCCPP   0200 cmd=sw
   Line 6919: 20161214.132359.104 r9999I 00001C50 ODCCPP   0102 send message: <T 48 46 3>
   Line 6920: 20161214.132359.104 r9999I 00001C50 ODCCPP   0102 send message: <T 48 1>
   ...


Ab Zeile 6622 wird das "Accessory" mit der ID 48 (0x30) mit immer anderen Decoder- und Port-Informationen neu definiert.

Ich glaube im Moment nicht, dass das so gewollt ist. Eher vermute ich, dass dies die DCC++ - Zentral durcheinander bringt. Schließlich macht RocRail nichts anderes als die Bahn zu initialisieren.

Was denkst Du dazu?

Gruß
Klaus
Spur1 (indoor), DCC und Motorola gemischt, Loconet und DCCpp zum Fahren und Schalten. Automatik und Manuell über Start-Ziel auf Touch-Screen. Server Linux, Stelltisch Windows; Neigung: Software, Elektronik (incl PCBs)
Duesselklaus
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby Duesselklaus » 14.12.2016, 21:45

Hallo Rob,

mir ist noch was aufgefallen:

Im Trace steht:
Code: Select all
20161214.131744.947 r9999I initFiel OModel   3974 Init [149] switches

Danach würde ich erwarten, dass ich die T-Commands von <T 0 x x> bis <T148 x x> sehe. Die Liste geht aber nur bis <T131 x x>

Die wiederholte Definition des "Accessory" mit der ID 48 ab Zeile 6622 kommt übrigens während der Initialisierung der Signale.

Frage: Warum wird bei den Signalen die ID nicht incrementiert?

Bringt uns das vielleicht weiter?

Danke und Gruß
Klaus
Spur1 (indoor), DCC und Motorola gemischt, Loconet und DCCpp zum Fahren und Schalten. Automatik und Manuell über Start-Ziel auf Touch-Screen. Server Linux, Stelltisch Windows; Neigung: Software, Elektronik (incl PCBs)
Duesselklaus
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby rjversluis » 15.12.2016, 06:50

Moin Klaus,

hänge doch mal dein plan.xml an so dass ich damit testen kann.
Best Regards, Rob.
:!: PS: Do not forget to attach the usual files.
:!: PS: Nicht vergessen die übliche Dateien an zu hängen.
[ macOS - Linux] - [ N: CBUS - CANGCx ] - [ G: CBUS - CANGCx ]
rjversluis
Site Admin
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby rjversluis » 15.12.2016, 08:23

Moin Klaus,

ich vermute das es mit DKW's mit zwei Antriebe zusammen hängt.
Best Regards, Rob.
:!: PS: Do not forget to attach the usual files.
:!: PS: Nicht vergessen die übliche Dateien an zu hängen.
[ macOS - Linux] - [ N: CBUS - CANGCx ] - [ G: CBUS - CANGCx ]
rjversluis
Site Admin
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby rjversluis » 15.12.2016, 09:03

Hallo Klaus,

ich habe es nachstellen können mit dein Plan aus ein anderes Thema.
Es gab da mehrere Probleme welche ich jetzt gelöst habe.
Probiere es mal ab 11.771.
Best Regards, Rob.
:!: PS: Do not forget to attach the usual files.
:!: PS: Nicht vergessen die übliche Dateien an zu hängen.
[ macOS - Linux] - [ N: CBUS - CANGCx ] - [ G: CBUS - CANGCx ]
rjversluis
Site Admin
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby Duesselklaus » 16.12.2016, 14:34

Hallo Rob,

Danke schon einmal für Deinen Einsatz! :thumb_up: :thumb_up:

Es wird jetzt aber leider etwas dauern, bis ich in der Lage sein werde, die Fixes an der Bahn zu checken. :coffee:

Gruß
Klaus
Spur1 (indoor), DCC und Motorola gemischt, Loconet und DCCpp zum Fahren und Schalten. Automatik und Manuell über Start-Ziel auf Touch-Screen. Server Linux, Stelltisch Windows; Neigung: Software, Elektronik (incl PCBs)
Duesselklaus
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby Duesselklaus » 04.01.2017, 22:57

Hallo Rob,

Nachdem Du die Möglichkeit geschaffen hast, die Rückmeldungen der DCC++ Zentrale im Server Trace zu lesen (Beitrag "DCC++ Feedback im Server Trace sichtbar machen"), habe ich die Suche nach dem Problem mit meiner DCC++Zentrale weitergeführt.

Das Problem, das ich beobachten kann ist, dass die DCC++-Zentrale nur 34 <T...> Kommandos mit unterschiedlichen Definitionen akzeptierte. Bei der 35. Defintion kam die Rückmeldung <X>, was in der neuesten RocRail-Server eine Meldung im Trace File erzeugt (im Moment "Not OK"). Die Versuche habe ich übrigens mit einem Arduino UNO und damit mit USB-Interface gemacht. Das Umstricken des Sketches, damit der UNO mit Ethernet-Shield läuft, kommt später .... (den Programmier-Ausgang brauche ich nicht, so dass ich von A10 auf A5 wechseln könnte - aber dazu später mehr)

Ich habe den Versuch dann heute auch mit einem Arduino MEGA und Ethernet Shield wiederholt und konnte sehen, dass das Problem hier nicht zu beobachten ist. Leider habe ich jetzt aber keine Zeit mehr, um auszuprobieren, wie sich ein MEGA am USB Bus (seriell) verhält. Der Fehler kann daher entweder durch das Interface oder durch einen zu kleinen Speicher des UNO (wahrscheinlicher) ausgelöst werden. Das werde ich in den kommenden Tag untersuchen.

Um jetzt kurzfristig die Bahn wieder betriebsfähig zu bekommen, habe ich eine kleine Änderung am DCC++-Interface gemacht: RocRail schickt bei jedem Stellbefehl erst die Definition des Devices <T 77 8 1> (das Device 77 ist am Decoder 8, Port 2 angeschlossen) und dann den Stellbefehl <T 77 0>.(Device 77 , z.B. Ausgang 0 aktiv). Das Incrementieren der Device-ID ist aber im Moment (so, wie RocRail die Befehle im Moment schickt), nicht nötig, da ja immer Definitino und Stellbefehl zusammen kommen. Ich habe daher die ID in den <T...> Befehlen für die DCC Swiches fest auf 77 gesetzt. Das macht ein Debugging nicht leichter :rr_cap: und der <E>-Befehl ist so defintiv nicht mehr verwendbar, :oops: aber die Funktion wird ja im Moment ohnehin nicht aufgerufen. Die Versuche an meinem Mini-Aufbau waren aber schon einmal erfolgreich.

Morgen werde ich die Änderung an der Bahn ausprobieren und berichten, ob es negative Seiteneffekte gibt. Wenn nicht, wäre diese Lösung ein Fix für das angenommene "Out of Memory" Problem. Nicht schön, aber die Bahn würde laufen.

Wenn ich etwas übersehen haben sollte ... :coding:

Danke
Klaus
Spur1 (indoor), DCC und Motorola gemischt, Loconet und DCCpp zum Fahren und Schalten. Automatik und Manuell über Start-Ziel auf Touch-Screen. Server Linux, Stelltisch Windows; Neigung: Software, Elektronik (incl PCBs)
Duesselklaus
 

Re: DCC++ stellt einige Weichen nicht mehr

Postby Duesselklaus » 05.01.2017, 22:33

Hier kommt das Ergebnis meines Versuchs:

Die Lösung mit einer festen ID ist zu einfach und funktioniert an (mindestens) zwei Stellen nicht:

- Weichen mit zwei Antrieben lassen sich nicht mehr stellen, da RocRail die Befehle für beide Antriebe fast gleichzeitig schickt. Die Definitionen überschreiben sich während der Ausführung des Befehls.
- Das Tool "Weichensteuerung", mit dem man die Dekoder direkt ansprechen kann, funktioniert nicht mehr....

Ich werde jetzt erst einmal überlegen, ob es eine einfache Lösung in RocRail gibt, oder ob ich das Problem auf der Seite des Arduino lösen muß.

Also erst einmal ... :coffee: :coding: :coffee:

Klaus
Spur1 (indoor), DCC und Motorola gemischt, Loconet und DCCpp zum Fahren und Schalten. Automatik und Manuell über Start-Ziel auf Touch-Screen. Server Linux, Stelltisch Windows; Neigung: Software, Elektronik (incl PCBs)
Duesselklaus
 

Next

Return to Arduino (DE)