Rückmeldemodul S88 und PCSteuerung

Für alle Diskussionen rund um digitale Modellbahntechnik und alles zum Thema Software Modellbahnplanung und Modellbahnsteuerung
Antworten
LenaSophia

Rückmeldemodul S88 und PCSteuerung

Beitrag von LenaSophia » Montag 11. Februar 2013, 19:32

Hallo zusammen,

nach langer Suche im WWW hoffe ich, dass ich hier jemanden finde, der mir weiterhelfen kann.

Ich programmiere derzeit meine eigene Modellbahnsteuerung. Warum? Das Display meiner CS1 (mit ECOS versehen) ist kaputt und lässt sich nicht mehr verwenden und ich programmiere total gerne. So kann ich zwei Leidenschaften verbinden.

Per IPSocket-Verbindung greife ich auf die ECOS zu und nutze die API der ECOS, um diese mit Daten zu versorgen und auch zur Steuerung.

Nach Lok- und Weichensteuerung bin ich nun bei den Rückmeldemodulen angekommen. An der Bahn habe ich von LDT ein RM-DEC88Opto mit 16 Ports.
Wenn ich eine View auf das S88-Modul habe, bekomme ich die Events fleißig zurück gemeldet. Allerdings hab ich noch ein Verständnisproblem bei den Antworten.

Jeder Port liefert einen definierten Wert zurück, wenn der Streckenabschnitt belegt ist. Das ist noch relativ klar. Nun hat das Modul aber ja 16 Ports und ich konnte erkennen, das zwei belegte Abschnitte eine Summierung der Werte ergibt. Überschreitet der Wert die 9, so wird hexadezimal geliefert.

Wie berechne ich aber nun die Summen bei vielen belegten Strecken? Nur die Summen ergeben doppelte Werte...

Hat irgendwer zufällig die Berechnungsformel für viele belegte Ports der S88-Rückmeldung über die ECOS?

Vielen Dank und viele Grüße
LenaSophia

PS: Ich hoffe ich hab das verständlich erklärt, ansonsten bitte fragen
PPS: H0, C-Gleise, CS1 mit ECOS, RM-DEC88-Opto

Benutzeravatar
Bernie-Bärchen
Forumane
Beiträge: 472
Registriert: Sonntag 3. August 2008, 00:15

Re: Rückmeldemodul S88 und PCSteuerung

Beitrag von Bernie-Bärchen » Mittwoch 13. Februar 2013, 19:58

Hallo LenaSophia,

zuerst müßtest Du hier posten mit welcher Programmiersprache Du Deine Software erstellst.
Vielleicht hilft Dir auch diese Internetseite weiter.

Herr Serwe hat hier beschrieben wie die CS unter Visual Basic angesteuert wird. Unten auf der Seite findest Du auch 2 Source-Codes zum Download.

:wink: BB

cab
Stammgast
Beiträge: 58
Registriert: Montag 15. Oktober 2007, 13:23

Re: Rückmeldemodul S88 und PCSteuerung

Beitrag von cab » Mittwoch 13. Februar 2013, 20:19

Hallo,

ich denke Du mußt die Summen gar nicht berechnen. Das Rückmeldemodul sendet Dir doch eine Summe. Die kannst Du dann mit einer UND-Maske wieder selektieren. Also wenn die Summe beispielsweise 0x2514 ist und Du legst die Maske von 0x0001, 0x0002, 0x0004 ... bis 0x8000 nacheinander darüber, dann kannst Du jeden belegten Block der ungleich Null ist ermitteln. Ich hoffe ich habe Dich damit richtig verstanden und konnte helfen.

Carsten
Fehler sind menschlich, aber wer richtigen Mist bauen will, braucht einen Computer!

LenaSophia

Re: Rückmeldemodul S88 und PCSteuerung

Beitrag von LenaSophia » Freitag 15. Februar 2013, 16:34

Hallo Carsten,

vielen Dank für die Rückmeldung!

So ganz klappt es so nicht, wir haben gestern abend die Lösung gefunden.

Der Ansatz ist hexadezimal. Die 4 rückgemeldeten Zahlen stellen jeweils 4 Ports dar.
Die vier Ports haben die Werte 1, 2, 4, und 8. Somit kann die maximale Summe 15 sein und jede mögliche Summe ist nur durch eine Portkonstellation abzubilden.
Da "15" ja zwei Ziffern benötigen würde, wird das Ergebnis in Hexadezimal zurück geliefert.

Durch die Umrechung der Rückgabewerte von hex in dezimal kann ich dann die belegten Ports und somit Gleisabschnitte ermitteln.

Viele Grüße
LenaSophia

LenaSophia

Re: Rückmeldemodul S88 und PCSteuerung

Beitrag von LenaSophia » Freitag 15. Februar 2013, 16:36

Bernie-Bärchen hat geschrieben:Hallo LenaSophia,

zuerst müßtest Du hier posten mit welcher Programmiersprache Du Deine Software erstellst.
Vielleicht hilft Dir auch diese Internetseite weiter.

Herr Serwe hat hier beschrieben wie die CS unter Visual Basic angesteuert wird. Unten auf der Seite findest Du auch 2 Source-Codes zum Download.

:wink: BB
Hallo Bernie-Bärchen,

danke für die Links, ich schau mir das mal an.
Stimmt, die Sprache hätte ich noch erwähnen können. Da das im Grunde für die Thematik nicht relevant ist, hab ich das nicht erwähnt.
Die Steuerung schreib ich in Java und für die Oberfläche verwende ich GWT.

Viele Grüße
LenaSophia

cab
Stammgast
Beiträge: 58
Registriert: Montag 15. Oktober 2007, 13:23

Re: Rückmeldemodul S88 und PCSteuerung

Beitrag von cab » Freitag 15. Februar 2013, 20:03

Hallo LenaSophia,

ich denke ich hatte Dich schon richtig verstanden, bin aber bei Deinen 16 Ports von 2 Byte ausgegangen. Deine Auswertung mit der Umrechnung in dezimal ist überflüssig.

Besipiel:

char a; //Speicher für 1 Port
a = LiesPort_1();
if( (a & 0x01) != 0){
; // Gleisabschnitt 1 gefunden
}
if( (a & 0x02) != 0){
; // Gleisabschnitt 2 gefunden
}
if( (a & 0x04) != 0){
; // Gleisabschnitt 3 gefunden
}
if( (a & 0x08) != 0){
; // Gleisabschnitt 4 gefunden
}

Die Annahme das die ganzen Zahlen größer 9 und kleiner 16 zwei Zahlen benötigen trifft nur auf die Schreibweise der Menschen zu, im Rechner belegen diese immer nur 1 Byte und sind dual codiert (Ausnahme BCD-Codierung).

Carsten
Fehler sind menschlich, aber wer richtigen Mist bauen will, braucht einen Computer!

LenaSophia

Re: Rückmeldemodul S88 und PCSteuerung

Beitrag von LenaSophia » Samstag 16. Februar 2013, 15:22

Hi Carsten,

ja.. so könnte man es auch machen! Um die Programmierung schlank zu halten und schnellstmöglichst die Meldungen auch interpretieren zu können, bleibe ich bei der Berechnung im hexadezimalen Zahlensystem.

Trotzdem vielen Dank für die Unterstützung!

LenaSophia

Benutzeravatar
HaNull
Forumane
Beiträge: 4381
Registriert: Freitag 2. Februar 2007, 01:47
Wohnort: Rhein-Sieg-Kreis

Re: Rückmeldemodul S88 und PCSteuerung

Beitrag von HaNull » Samstag 16. Februar 2013, 19:52

Moin!
LenaSophia hat geschrieben:ja.. so könnte man es auch machen! Um die Programmierung schlank zu halten und schnellstmöglichst die Meldungen auch interpretieren zu können, bleibe ich bei der Berechnung im hexadezimalen Zahlensystem.
Schneller und schlanker als das Code-Beispiel von Carsten kann man es eigentlich nicht machen.
Wenn Du die gelesene Zahl erstmal in eine Zeichenkette umwandelst, um dann die hexadezimalen Ziffern vergleichen zu können, dürfte das viel langsamer sein.
Langsamer im Mikrosekundenbereich, also vermutlich nicht praxisrelevant.
████████   Gruß aus NRW
████████   Thomas
████████   Multi-MISTler: 1. Siegburg (RSK) - 2. Köln rrh. - 3. Rheinbreitbach

Antworten