opensx / Funkregler

Funkregler mit XBee für Selectrix
GNU General Public License v3.0
0 stars 0 forks source link

Änderungen durch anderen Handregler werden nicht nach Funkregler übertragen #1

Open schnorpser opened 8 years ago

schnorpser commented 8 years ago

Wird eine SX-Adresse durch den Funkregler auf einen Wert gesetzt und ein anderer Handregler übernimmt/überschreibt die letzte Eingabe des Funkreglers, werden die Änderungen nicht zum Funkregler übertragen.

Beispiel: Funkregler steuer SX-Adresse 3: Fahrstufe 12, kein Licht, kein Horn. Anderer Handregler übernimmt SX-Adresse 3 und erhöht auf Fahrstufe 20.

Beobachtung: Funkregler bemerkt diese Änderung nicht. Bedient man im Anschluss den Funkregler, wird Fahrstufe auf 13 oder 11 gesetzt (je nachdem, ob Fahrstufe erhöht oder verringert wird) und nicht an Fahrstufe 20 "angeknüpft".

Firmware: Download der aktuellen Daten für "XBee_Throttle" und "SxXBee2" aus dem Git vom 19.10.2015. Aktualisierung aller geänderten Libs.

opensx commented 8 years ago

das ist nicht so völlig trivial wegen der Zeitverzögerungen beim Funktransport der Befehle ! Deshalb ist im Moment nur folgendes Feedback von der Basisstation implementiert:

Bei Kabel-Handregler ist das Verhalten dagegen ziemlich einfach zu implementieren, da ein 2. Regler ja immer innerhalb von 77ms die Änderung seines Kanals mit, d.h. bevor er selber was ändern kann.

Wie genau stellst Du Dir denn idealerweise die Funktionsweise beim Funk vor?

1 . Ich habe gesehen, der "HC01" Handregler schaltet zB einfach die Lokselektion auf inaktiv, wenn er merkt, das jemand anderes auch auf dem Kanal Änderungen macht. Beim Funkregler wäre das äquivalente Verhalten, dass dann auf "A ?" (=Adresselection) umgeschaltet wird (und nicht die aktuellen Daten verändert werden.) - das wäre auch eine Möglichkeit.

  1. Ansonsten: Wenn die folgende Änderungssequenz läuft, was soll dann passieren, wenn a) zweiter Handregler schaltet zB die Geschw. von 15 auf 10 b) direkt danach (also bevor er die Änderung mitbekommt) schaltet der Funkregler die Geschw. von 15 auf 20 ??

Ich möchte aber auch nicht unbedingt jede Änderung durch den Funkregler quittieren durch die Basisstation, um nicht zu viel "Funkverkehr" zu erzeugen. (wird erst wichtig, wenn mal 10 Funkregler im gleichen Raum funken...)

viele Grüße Michael.

schnorpser commented 8 years ago

Hallo Michael,

der HC01 ist kein guter Vergleichs-Regler :-) Bedingt durch seint Funktionsprinzip mit Poti überschreibt er bei Übernahme einer Lok durch einen anderen Regler hart die aktuelle Fahrstufe, sobald man den HC01 wieder "anmeldet", also das Schreiben auf den Bus aktiviert.

Ich könnte mir folgende Lösung für den Funkregler vorstellen:

Zu überlegen wäre, ob "unendlich" viele Slots möglich sein sollen, oder man die Anzahl gleich auf einen sinnvollen Wert pro Basisstation festlegt. Klar, harte Grenze ist der Speicher der Basis, aber ggf. ist die Bandbreite eher "gesättigt" als der Speicher.

Was meinst Du? Viele Grüße, Norbert

opensx commented 8 years ago

hallo Norbert,

ich habe eine neue Version (SW 1.1.10) eingecheckt (die HW/SW version wird jetzt beim Einschalten angezeigt - so ein grosses Display ist doch was Feines...) mit einem Lösungsvorschlag für das "2 Handregler Problem":

Der Funkregler ignoriert das (missverständliche) Feedback vom SX-Bus, solange er aktiv ist. (d.h. während man am Regler dreht). Nach 2 Sekunden geht er in den "nicht aktiv" Zustand und fragt dann regelmäßig den Zustand des SX-Bus ab (alle 2 sec).

Probier es mal aus - zum Debugging siehst Du oben im Display ein kleines "b", wenn das Feedback geblockt wird, und ein "-", wenn der Funkregler sich als "nicht aktiv" betrachtet.

Ein weiterer Bug wurde gefixed: solange von der Basis noch kein "Gleisbit" gesendet wurde, wird der Gleisspannungszustand als "GL?" angezeigt und man kann die Power weder ein noch ausschalten.

viele gruesse, michael