RE: Software schreiben zum steuern von Loks?

#76 von st-oldie , 30.12.2014 23:39

Hallo ALWIM,

Zitat von ALWIM
Habe jetzt ein Programm geschrieben, was eine Lok steuern kann!



Glückwunsch! IP-Adresse und Lokadresse erst mal fest einzustellen ist für einen ersten Test ja ok. Man muß und kann nicht alles auf einmal einbauen.

Zitat von ALWIM
wenn in der Bedienungsanleitung zb. 60 drin steht? Die Zahl, die in der Anleitung drin steht, ist ja dann irgendwie sinnlos? Oder gibt es da eine Formel zum umrechnen? Man müsste die richtige Adresse doch irgendwie auslesen können?



Du schmeißt dabei 2 verschiedene Dinge (Adressen) in einen Topf.

Eine mfx Lok hat keine mfx Adresse (UID) sondern meldet sich bei einer mfx Zentrale wie der CS2 oder MS2 an. Und bekommt ihre mfx Adresse von der Zentrale zugewiesen.

Wenn eine mfx Lok aber mit einer Zentrale gesteuert werden soll, die mfx nicht kann, wäre sie ja nicht ansprechbar und steuerbar. Und deshalb hört der mfx Dekoder dann auf das Motorola Protokoll und auf eine Motorola Adresse. Also die Adresse, die in der Bedienungsanleitung steht, die 60 in deinem Beispiel. Damit lassen sich die mfx Loks auch von dem alten Digitalsystem von Märklin steuern, das mfx nicht kennt.

Die Loks ist also entweder unter der Motorola Adresse oder unter der von der Zentrale zugewiesenen mfx Adresse erreichbar. Eine Umrechnung ist damit nicht nötig und auch nicht möglich.

Zitat von ALWIM
Was ich mich aber noch frage ist? Wie kommt ein Laie bei einer MFX-Lok an die richtige Loknummer ...



Ein Laie muß nicht an die Adresse kommen, die die mfx Zentrale der Lok zuweist.

Entweder wird die Lok mit einer Zentrale eingesetzt, die mfx nicht kann. Dann wird die Motorola Adresse aus der Anleitung benutzt.

Oder die Lok wird mit einer Zentrale benutzt, die mfx kann. Dann wird die Lok aber aus der Lokliste der Zentrale ausgewählt. Eine Eingabe der Lokadresse ist nicht nötig (und auch nicht möglich).

Zitat von ALWIM
Ich meine, nicht jeder weiß, dass man mit
http://<ip-adresse-der-cs2>/config/lokomotive.cs2 an die richtige Adresse kommt!



Das ist ja nur für dich nötig, da du ein Programm zur Steuerung der Loks schreiben möchtest und deshalb die UID brauchst. Das Auslesen dieser Datei per Webbrowser und dann das manuelle Ermitteln der UID war erst einmal die schnellste Möglichkeit.

Wenn du die lokomotive.cs2 mit deinem Programm auswertest, kannst du alternativ diese Datei auch mit CAN Nachrichten abfragen. Ein Bekannter hat etwas mit dem Märklin CS2 PC Programm experimentiert. Die Doku scheint für die Abfrage der lokomotive.cs2 wohl noch fehlerhaft zu sein.

Zitat von ALWIM
Was mich noch wundert ist:
Gebe ich eine zu hohe Geschwindigkeit an, zeigt die CS 2 eine Fahrstufe von > 800 an! Wahnsinn oder? Aber sonst alles normal! Unglaublich, was die CS 2 alles akzeptiert!



Das wird dann wohl nicht richtig abgefangen. Und dann sind die Ergebnisse immer etwas merkwürdig. Da das Märklin Protokoll ursprünglich unter Veschluß gehalten wurde, ist zumindest nachvollziehbar das man mit Sicherheitsabfragen sparsam war.

Zitat von ALWIM
Mit Qbasic geht es tatsächlich nicht! Ist reines Basic. Da Freebasic aber Bitmanipulation kann, kann man hier nicht mehr von reinem Basic sprechen! Freebasic ist der inoffizielle Nachfolger von Qbasic!



Die Bitmanipulationen, die hier benötigt werden, können auch durch arithmetische Operationen ersetzt werden. Das ist nur weniger verständlich und nicht so elegant. Aber machbar.

Zitat von ALWIM
Ob C(++) in dem Anwendungsfall noch einen Vorteil hat, wage ich zu bezweifeln? Schneller und leichter als mit Freebasic geht es mit C(++) wahrscheinlich auch nicht? Und bei dem Klammerwirrwarr, nehme ich halt doch lieber eine andere Programmiersprache!



Naja, eigentlich ist es eher der Sprachanteil von C, der hier gefragt ist. Schließlich geht es um Bitoperationen.

Wenn du ein paar Jahre zurück gehst, dann ist es tatsächlich so, daß C das richtige Werkzeug ist. Denn die alten Basic Dialekte waren doch arg beschränkt in der Möglichkeit, ein Programm zu strukturieren. Die Sprache C hingegen wurde für die Programmierung eines Betriebssystems (UNIX) entwicklet. Und um die Hardware zu steuern werden solche Bitmanipulationen benötigt. Das Dekodieren und Kodieren der CAN Nachrichten hat gewisse Ähnlichkeiten mit Aufgaben in Hardware Treibern.

Vereinfacht gesagt erweitert C++ die Spache C um Konstrukte, die objektorientierte Programmierung unterstützen. Und dies erleichtert es, auch größere Programme verständlich zu strukturieren.

Ob es schneller und leichter geht, ist im Wesentlichen auch eine Frage, wie vertraut man mit der Sprache ist. Da ich viel mit Linux (Kernel, Treiber und Applikationen) mache, hab ich die C Beispiele quasi aus dem Ärmel schütteln können (sofern sie nicht schon vorhanden waren). Mit Basic dauert es für mich länger. Und natürlich, ob die entsprechenden Möglichkeiten vorhanden sind. Also hier ob Bitoperationen zur Verfügung stehen. Das durch arithmetische Operationen zu ersetzen macht es mühsamer.

Wenn man natürlich bei Basic an die alten Basic Sprachen denkt, ist klar, daß da Vorbehalte sind. Die Möglichkeiten, ein Programm gut zu strukturieren waren nur eingeschränkt. Das machte oft die Programme unübersichtlich. Speziell, wenn der Autor nur wenig Erfahrung hat. Ich kenne die moderneren Basich Dialekte auch nicht. Dafür finde ich nicht, daß man in C/C++ ein Klammerwirrwar hat. Die geschweiften Klammern fassen Anweisungen zu einem Block zusammen, der dann z.B. den Schleifenrumpf o.ä. bildet. Und das ganze wird dann noch hübsch eingerückt. Und die runden Klammern fassen Teile von Ausdrücken zusammen.

Tschüß
Michael


st-oldie  
st-oldie
InterRegioExpress (IRE)
Beiträge: 458
Registriert am: 22.12.2009
Homepage: Link
Ort: Friedberg (Hessen)
Gleise Märklin K-Gleis
Spurweite H0
Steuerung Märklin Systems
Stromart Digital


RE: Software schreiben zum steuern von Loks?

#77 von ALWIM , 31.12.2014 01:54

Jetzt hat mich der Ehrgeiz gepackt!
Mein Programm empfängt von der CS 2 nun Rückmeldungen! Ich weiß zwar nicht wieso, aber ich musste eine Broadcastadresse eingeben. Bei Auto gibt es keine Rückmeldungen! Schon komisch? Somit kann ich das Programm weiter verbessern!
Sollte ich einmal fertig werden, mit dem Programm, kann es durchaus sein, dass ich das Ding irgendwo hochlade! Dann haben alle was davon! Wenn ich eine bestimmte Funktion die ich im Kopf habe, mit einbaue, würden MFX+ Loks überflüssig werden. Diese Simulation kann man auch für Loks mit MM Dekoder oder DCC Dekoder schreiben! Zumindest theoretisch. Die entsprechenden Werte (Kohle, Sand, Diesel, Öl) sind dann auf dem Computer gespeichert. Führerstandsbild anzeigen lassen, entsprechende Hebel betätigen und die Lok fährt los. Wäre aufwändig, aber machbar! Ich mach es aber nicht! Märklin soll dadurch nicht geschädigt werden. Wenn, dann mach ich so eine Funktion nur für mich persönlich. Aber erst einmal muss das andere funktionieren! Was danach kommt, ist Zukunftsmusik.
Es schaut so aus, als ob ich 2014 mit dem Ding nicht mehr fertig werde!

Zitat
Du schmeißt dabei 2 verschiedene Dinge (Adressen) in einen Topf.

Eine mfx Lok hat keine mfx Adresse (UID) sondern meldet sich bei einer mfx Zentrale wie der CS2 oder MS2 an. Und bekommt ihre mfx Adresse von der Zentrale zugewiesen.

Habe ich irgendwo geschrieben, dass eine MFX-Lok eine MFX Adresse hat? Ähh??? ??? Wenn, dann war das ein Irrtum.

Nun denn! Frohes Gelingen!!!


Mein letzter Zugang:
1x Lockdown...


ALWIM  
ALWIM
InterRegio (IR)
Beiträge: 219
Registriert am: 05.04.2014


RE: Software schreiben zum steuern von Loks?

#78 von st-oldie , 31.12.2014 16:33

Hallo ALWIM,

Zitat von ALWIM
Mein Programm empfängt von der CS 2 nun Rückmeldungen! Ich weiß zwar nicht wieso, aber ich musste eine Broadcastadresse eingeben. Bei Auto gibt es keine Rückmeldungen!



Meinst du mit Rückmeldung die Antwort auf deinen Befehl, die den Befehl mit gesetztem Response Bit wiederholt? Warum du in der CS2 eine Broadcastradresse statt DHCP (AUTO) angeben mußt, weiß ich allerdings auch nicht.

Zitat von ALWIM

Zitat
Du schmeißt dabei 2 verschiedene Dinge (Adressen) in einen Topf.

Eine mfx Lok hat keine mfx Adresse (UID) sondern meldet sich bei einer mfx Zentrale wie der CS2 oder MS2 an. Und bekommt ihre mfx Adresse von der Zentrale zugewiesen.

Habe ich irgendwo geschrieben, dass eine MFX-Lok eine MFX Adresse hat? Ähh??? ??? Wenn, dann war das ein Irrtum




Nein, hast du nicht. Aber du hattest gefragt, ob man aus der Adresse in der Bedieungsanleitung die UID errechnen kann bzw. wie das zusammenhängt. Also hab ich einfach mal kurz den Mechanismus der mfx Adressen mit Anmeldung und der Motorola Adressen erklärt. Beides sind ja getrennte Einsatzszenarien. Und die mfx Adresse muß man normalerweise nicht kennen.

Tschüß
Michael


st-oldie  
st-oldie
InterRegioExpress (IRE)
Beiträge: 458
Registriert am: 22.12.2009
Homepage: Link
Ort: Friedberg (Hessen)
Gleise Märklin K-Gleis
Spurweite H0
Steuerung Märklin Systems
Stromart Digital


RE: Software schreiben zum steuern von Loks?

#79 von ALWIM , 31.12.2014 17:16

Zitat
Meinst du mit Rückmeldung die Antwort auf deinen Befehl, die den Befehl mit gesetztem Response Bit wiederholt?

Nein, nicht auf den Befehl! Die CS 2 sendet ja automatisch, ohne Anfrage, Befehle/Meldungen zum Computer. Diese sehe ich jetzt. Müssen nur noch entschlüsselt werden! Ändert sich automatisch sobald ich bei einer Lok die Geschwindigkeit aufdrehe oder eine Funktion ein- bzw. ausschalte! Alles rechtens also.

Was aber bisher nicht funktioniert, ist die Änderung der Fahrtrichtung. Sobald ich die Daten an die CS 2 sende ändert der zwar seine Richtung, aber immer nur in die eine. Also auf rückwährts. Ich habe aber 3 = Richtungswechsel angegeben!

1
2
3
4
5
6
7
 
hash = ((((UID AND &amp;h0000FFFF) XOR (UID SHR 16)) AND &amp;hFF7F) OR &amp;h0300)
StartWord = (((Prio SHL 12) + (mainCommand SHL 1) + (ResponseBit AND 1)) AND &amp;hFFFF)
DataBytes(0) = ((UID SHR 24) AND &amp;hFF)
DataBytes(1) = ((UID SHR 16) AND &amp;hFF)
DataBytes(2) = ((UID SHR 8) AND &amp;hFF)
DataBytes(3) = (UID AND &amp;hFF)
DataBytes(4) = ((Richtungsangabe SHR 8) AND &amp;hFF)
 



1
2
3
4
5
6
7
 
Prio = &amp;h04				 ' wir haben Priorit&#228;t 4
mainCommand = &amp;h05 ' Systembefehl
SubCommand = &amp;h0A
DLC = &amp;h05 ' Nutzdatenl&#228;nge in Bytes
ResponseBit = &amp;h00
Richtungsangabe = &amp;h04
 
 



Normalerweise, müsste das funktionieren? Egal was ich bei der Richtungsangabe angebe, er wechselt die Richtung immer nur in die eine. Also auf Rückwährts! Selbst bei 0 ist das so. Schon komisch? Ich sehe jetzt auf die schnelle keinen Fehler?

Zitat
Warum du in der CS2 eine Broadcastradresse statt DHCP (AUTO) angeben mußt, weiß ich allerdings auch nicht.

Macht nichts, hauptsache es funktioniert jetzt!

Lokfunktionen ein und ausschalten klappt auch hervorragend. Versucht habe ich aber, bisher nur das Licht! Weichen schalten, habe ich noch nicht probiert. Erstmal das andere! Der Rest kommt später.

Gruß
ALWIM


Mein letzter Zugang:
1x Lockdown...


ALWIM  
ALWIM
InterRegio (IR)
Beiträge: 219
Registriert am: 05.04.2014


RE: Software schreiben zum steuern von Loks?

#80 von DiegoGarcia , 31.12.2014 17:51

Hallo ALWIM,

Zitat von cs2CAN-Protokoll-2_0.pdf, Seite 31,
Beschreibung:
Abfragen oder setzen der Fahrtrichtung einer Lok
DLC = 4, Abfrage der Richtung:
Aktuelle Richtung erfragen. Antwort mit 5 Bytes in Form von „Setzen Richtung“. DLC = 5, Setzen der Richtung:
Ändern der Fahrtrichtung gemäß dem Parameter „Richtung“. Bei einer Änderung der Richtung sorgt Gleis Format Prozessor für Fahrstufe 0, Lok wird mit Decoder „ABV“ gebremst. Wird Richtung nicht geändert, erfolgt keine Änderung der Fahrstufe.
Bedeutung Parameter Richtung:
0 = Fahrtrichtung bleibt
1 = Fahrtrichtung vorwärts
2 = Fahrtrichtung rückwärts
3 = Fahrtrichtung umschalten
Rest: Richtung bleibt



Mit...

Zitat von ALWIM

1
2
3
4
5
6
7
 
hash = ((((UID AND &amp;h0000FFFF) XOR (UID SHR 16)) AND &amp;hFF7F) OR &amp;h0300)
StartWord = (((Prio SHL 12) + (mainCommand SHL 1) + (ResponseBit AND 1)) AND &amp;hFFFF)
DataBytes(0) = ((UID SHR 24) AND &amp;hFF)
DataBytes(1) = ((UID SHR 16) AND &amp;hFF)
DataBytes(2) = ((UID SHR 8) AND &amp;hFF)
DataBytes(3) = (UID AND &amp;hFF)
DataBytes(4) = ((Richtungsangabe SHR 8) AND &amp;hFF)
 



1
 
	Richtungsangabe = &amp;h04
 



...bist Du beim "Rest". &h04 ist falsch. Nimm

1
 
Richtungsangabe = &amp;h03
 

. Außerdem:

1
 
DataBytes(4) = ((Richtungsangabe SHR 8) AND &amp;hFF)
 

liefert meinem Verständnis nach auch immer den Wert Null. AFAIK sollte es sein:

1
 
DataBytes(4) = (Richtungsangabe AND &amp;hFF)
 



Ciao
Diego


talks are cheap, and they don't mean much .…


 
DiegoGarcia
Metropolitan (MET)
Beiträge: 2.797
Registriert am: 15.04.2007
Steuerung mfx


RE: Software schreiben zum steuern von Loks?

#81 von ALWIM , 01.01.2015 13:38

Der Richtungswechsel funktioniert zwar, doch ändert sich in der CS 2 die Grafik nicht! Der Richtungspfeil, steht immer auf rückwährts! Steht er mal auf vorwährts, so geht er auf rückwährts! Jedoch nicht mehr auf vorwährts.

Vielleicht hat die Software der CS 2 einen Bug drin? Wäre ja möglich. Anders kann ich mir das nicht erklären? Da ich die ganze Zeit ohne Lokomotiven getestet habe, also ohne eine Lok auf dem Gleis, dachte ich an einen Fehler im Quellcode. Die Lok zeigt den Richtungswechsel an (Lichtwechsel funktioniert). Auch fährt die Lok in beiden Richtungen. Nur die CS 2 zeigt keinen Richtungswechsel an!

Mache auf jeden Fall mal weiter!

Gruß
ALWIM


Mein letzter Zugang:
1x Lockdown...


ALWIM  
ALWIM
InterRegio (IR)
Beiträge: 219
Registriert am: 05.04.2014


RE: Software schreiben zum steuern von Loks?

#82 von st-oldie , 01.01.2015 21:07

Hi,

Zitat von DiegoGarcia
Außerdem:

1
 
DataBytes(4) = ((Richtungsangabe SHR 8) AND &amp;hFF)
 

liefert meinem Verständnis nach auch immer den Wert Null. AFAIK sollte es sein:

1
 
DataBytes(4) = (Richtungsangabe AND &amp;hFF)
 




Genau. In diesem Fall ist außerdem keine Bitmanipulation nötig, wenn sichergestellt ist, daß die Richtungsangabe immer im sinnvollen Wertebereich (< 4) bleibt. Man muß ja keine Bytes auf dei UDP Daten verteilen. Es reicht enfach, das entsprechende Byte auf den Wert der Richtungsänderung zu setzen.

Die Verknüpfung (Richtungsangabe AND &hFF) sorg nur dafür, daß der Wertebereich innerhalb des Wertebereichs eines Bytes bleibt.

Tschüß
Michael


st-oldie  
st-oldie
InterRegioExpress (IRE)
Beiträge: 458
Registriert am: 22.12.2009
Homepage: Link
Ort: Friedberg (Hessen)
Gleise Märklin K-Gleis
Spurweite H0
Steuerung Märklin Systems
Stromart Digital


RE: Software schreiben zum steuern von Loks?

#83 von ALWIM , 05.01.2015 18:40

Stand der Dinge:

Arbeite gerade an den Lokfunktionen! Bisher habe ich die Funktionen von 0-10 programmiert! Das Beste: Ich kann dem Programm mitteilen, welche Funktion eine Dauerfunktion bzw. eine Momentfunktion ist!!!

Funktionen 1-9:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
' Lokfunktion 1-9
FOR i = 1 TO 9
IF MULTIKEY(i+1) AND MULTIKEY(&amp;h2A) = 0 AND Tastensperre(i) = 0 THEN
Tastensperre(i) = 1
IF Funktionen(i) &gt;= (&amp;h0100*i) THEN Funktionen(i) += i
IF Funktionen(i) &gt; (&amp;h0101*i) THEN Funktionen(i) = (&amp;h0100*i)
k = i
LOKFUNKTIONEN
KOMMANDO
SENDENCS2
 
' Ist die Funktion keine Dauerfunktion, wird diese sofort wieder ausgeschaltet!
IF Momentfunktion(k) = 1 THEN
SLEEP 200,1 ' etwas warten, wegen der Grafik
Funktionen(i) = (&amp;h0100*k)
LOKFUNKTIONEN
KOMMANDO
SENDENCS2
EXIT FOR
END IF
END IF
IF MULTIKEY(i+1) = 0 THEN Tastensperre(i) = 0
NEXT
 


eine bessere Idee, habe ich im Moment nicht!

An den restlichen Funktionen (11-15) wird noch gearbeitet! Bisher funktioniert das Programm hervorragend! Man könnte das Programm als weiteren Fahrregler, zusätzlich zu vorhandenen Programmen (CS 2.exe, Rocrail, ...) verwenden! Man wird mit der Anbindung keine Probleme haben.

Beispiel:
Programm ist gestartet. CS 2 fährt hoch. Man drückt aus Stopp und die CS 2 schaltet in den Stoppzustand. Das Programm sendet an die vorgegebene IP-Adresse. Wenn keine CS 2 vorhanden, dann auch keine Ausführung eines Befehles. Das Senden geht somit ins leere!

Alles funktioniert bisher prima (bis auf die Anzeige der Richtung beim Befehl Richtungswechsel)!

Wann ich wieder dazu komme, an dem Ding was zu machen steht in den Sternen. Bin in nicht allzu kurzer Zeit im Knast drin.


Mein letzter Zugang:
1x Lockdown...


ALWIM  
ALWIM
InterRegio (IR)
Beiträge: 219
Registriert am: 05.04.2014


RE: Software schreiben zum steuern von Loks?

#84 von Utopia , 10.01.2015 23:09

Zitat von ALWIM

Wann ich wieder dazu komme, an dem Ding was zu machen steht in den Sternen. Bin in nicht allzu kurzer Zeit im Knast drin.



Aha...

Grüss mir den Ulli!

In der Schweiz zu schnell gefahren?

...


--------------------------------------------
Mein letzter Neuzugang:
Die Welt 'ne kleine Cola

Krachtenderfreie Zone Der Schorsch hat mich überfahren... 🥴

"Gummi gehört auf die Straße und nicht auf die Schiene..." 😉


Utopia  
Utopia
InterRegioExpress (IRE)
Beiträge: 305
Registriert am: 16.11.2014
Ort: Heiden
Gleise RocoLine
Spurweite H0
Steuerung DCC Z21, WlanMaus, MultiMaus, Handy
Stromart Digital


RE: Software schreiben zum steuern von Loks?

#85 von ALWIM , 11.01.2015 17:08

Zitat von Utopia

Zitat von ALWIM

Wann ich wieder dazu komme, an dem Ding was zu machen steht in den Sternen. Bin in nicht allzu kurzer Zeit im Knast drin.



Aha...

Grüss mir den Ulli!

In der Schweiz zu schnell gefahren?

...



Ich habe nichts angestellt! Bin nur zum Vergnügen/Spaß drin! Und das für nur ein paar Stunden!

Werde jetzt an den Icons für die Funktionen arbeiten. Sind ja doch ziemlich viele! Habe jetzt da schon eine Lösung/Idee.

Gruß
ALWIM


Mein letzter Zugang:
1x Lockdown...


ALWIM  
ALWIM
InterRegio (IR)
Beiträge: 219
Registriert am: 05.04.2014


RE: Software schreiben zum steuern von Loks?

#86 von Nichteisenbahner ( gelöscht ) , 11.01.2015 18:27

Zitat von ALWIM
Bin in nicht allzu kurzer Zeit im Knast drin.

Hi,
musst Du uns so erschrecken? Ich hab natürlich gedacht, Du fährst ein. Steuer hinterzogen, oder so...
Gruß
Martin


Nichteisenbahner

RE: Software schreiben zum steuern von Loks?

#87 von ALWIM , 11.01.2015 19:12

Zitat von Nichteisenbahner

Zitat von ALWIM
Bin in nicht allzu kurzer Zeit im Knast drin.

Hi,
musst Du uns so erschrecken? Ich hab natürlich gedacht, Du fährst ein. Steuer hinterzogen, oder so...
Gruß
Martin


Tut mir leid, wenn ich euch erschreckt habe! Aber das musste einfach mal sein.

Um beim Thema zu bleiben:
Eine Lok fährt mit bestimmter Geschwindigkeit (eingestellt auf dem PC-Programm). Die Geschwindigkeit wird an der CS 2 runtergeregelt. Nun drücke ich eine der Tasten auf dem PC und die Lok fährt mit der zuletzt angezeigten Geschwindigkeit weiter, auch wenn ich mit der CS auf 0 gewesen bin. Da werde ich wahrscheinlich mit Rückmeldungen arbeiten müssen oder? Mal schauen, ob ich die hinbekomme! Da habe ich noch keine Idee, wie ich das am besten mache.

Gruß
ALWIM


Mein letzter Zugang:
1x Lockdown...


ALWIM  
ALWIM
InterRegio (IR)
Beiträge: 219
Registriert am: 05.04.2014


RE: Software schreiben zum steuern von Loks?

#88 von Shoogar , 12.01.2015 00:22

Zitat von ALWIM

Zitat von Nichteisenbahner

Zitat von ALWIM
Bin in nicht allzu kurzer Zeit im Knast drin.

Hi,
musst Du uns so erschrecken? Ich hab natürlich gedacht, Du fährst ein. Steuer hinterzogen, oder so...
Gruß
Martin


Tut mir leid, wenn ich euch erschreckt habe! Aber das musste einfach mal sein.






OK, war OT.
Ich bin auch erschrocken.

Interessantes Projekt, welchem Du Dich da widmest.


viele Grüße

Armin


-----------------------------------------------------------------------------------------------------------
Überzeugter Europäer - gegen die Verblödung des Abendlandes


 
Shoogar
EuroCity (EC)
Beiträge: 1.204
Registriert am: 07.08.2010


RE: Software schreiben zum steuern von Loks?

#89 von ALWIM , 10.05.2015 00:56

Kurze Info über den bisherigen Stand der Dinge:



Habe jetzt mal ein wenig an dem Programm weitergemacht. Was ich geschrieben habe, ist ein provisorischer Tacho. Die Nadel bewegt sich je nach Geschwindigkeit. Man kann mit den Pfeiltasten die Geschwindigkeit verändern (Pfeil-nach-oben/Pfeil-nach-unten), sowie die Richtung umschalten (Pfeil-nach-links/Pfeil-nach-rechts). Mit den Tasten Bild-auf und Bild-ab kann man die Lokomotiven auswählen. Immer die nächste Lok. Rechts sieht man die Funktionssymbole. Verwende momentan die von Märklin, also die von der CS2.exe Habe auch noch keine Idee, wie das Programm letztendlich heißen soll. Deswegen der Name Central Station 2. Neben dem Namen steht die jeweilige ausgewählte Lok. In meinem Fall die Polizeilok.
Rückmeldungen funktionieren leider immer noch nicht.

Tastenübersicht:

S = Stopp
G = Go
1-9 + 0 = F0-F9
SHIFT + 0 = F10
SHIFT + 1 = F11
SHIFT + 2 = F12
SHIFT + 3 = F13
SHIFT + 4 = F14
SHIFT + 5 = F15
Pfeil-nach-oben = Geschwindigkeit erhöhen
Pfeil-nach-unten = Geschwindigkeit senken
Pfeil-nach-links = Richtung vorwährts
Pfeil-nach-rechts = Richtung rückwährts
Entertaste = Richtung wechseln
Escape-Taste = Programm beenden
Leertaste = Stopp oder Go im Wechsel

Das zweite Programm zur Eingabe der Lokdaten für das erste Programm (Central Station 2.exe)


Man kann eine Datenbank erstellen, diese laden, Lokomotiven darin speichern bzw. entfernen. Der Lokomotive kann man auch Funktionssymbole zuordnen. Diese werden dann beim eigentlichen Steuerprogramm angezeigt. Man kann auch dem Programm mitteilen, ob die Funktion eine Dauer- oder Momentfunktion ist. Der eingegebene Lokname ist auch zugleich der Name für das Lokbild das angezeigt wird. Man erstellt also ein Lokbild und vergibt dann als Lokname den Namen des Bildes. Schon wird dann ein Lokbild angezeigt. So ein Lokbild möchte ich dann später auch beim Hauptprogramm mit anzeigen lassen.

Pläne für die Programme:
???

Wo die Reise letztendlich hingeht, weiß ich noch nicht. Bei bisherigen Tests, musste ich feststellen, dass das Programm funktioniert! Das Programm läuft sehr stabil! Kein einziger Aufhänger, Verbindung mit der CS2 innerhalb von 1 Sekunde! Sobald mein Programm die richtige IP-Adresse hat, braucht man es nur noch starten und kann sofort loslegen!

Sollte ich irgendwann mal damit fertig werden, stelle ich nicht nur das Programm zur Verfügung, sondern auch den Quellcode!
Verbesserungsvorschläge erwünscht. Irgendwie bringe ich keinen so guten Tacho hin? Der bisherige Tacho ist nicht so ganz das was ich haben will.

Gruß
ALWIM


Mein letzter Zugang:
1x Lockdown...


ALWIM  
ALWIM
InterRegio (IR)
Beiträge: 219
Registriert am: 05.04.2014


RE: Software schreiben zum steuern von Loks?

#90 von ALWIM , 24.05.2015 18:46

Ich stehe vor einem kleinem Rätsel?

Bin jetzt dabei die Rückmeldungen (quasi zum PC) zu programmieren! Ich komme an die Lokadresse ran, kann die Funktionen, welche Funktion aktiv bzw. unaktiv ist, erkennen. Doch die beschissene Geschwindigkeit kriege ich nicht hin!!! Egal was ich mache, ich kann die Geschwindigkeit am PC nicht anzeigen lassen! Diese funktioniert irgendwie nicht!

Ein Beispiel:

Damit kann ich die Lokadresse auf dem PC anzeigen lassen. Ob MM oder DCC oder MFX, jede Adresse zeigt er mir richtig an! In der Variable V_Data kommen die unverschlüselten Rückmeldungen auf dem PC an.

1
2
3
4
 
byte5 = V_Data[5] SHL 24
byte6 = V_Data[6] SHL 16
byte7 = V_Data[7] SHL 8
byte8 = V_Data[8] SHL 0
 



Mit

1
 
byte1 = (V_Data[1] SHR 1)
 

zeigt er mir das Main Command an!

Mit

1
2
 
byte9 = V_Data[9]
byte10 = V_Data[10]
 


erhalte ich die Funktionen, welche aktiv bzw. unaktiv sind. Doch warum ohne Bitverschiebung ist mir bisher ein Rätsel?

Egal was ich versuche, die Geschwindigkeit wird jedes mal falsch angezeigt?

Mit

1
2
 
byte9 = V_Data[9] SHL 4
byte10 = V_Data[10] SHR 4
 


erhalte ich Werte von 0-62! Aber in dieser Reihenfolge: 0, 0, 1, 1, 3, 3, 4, 4, 6, 6, 7, 7, 9, 9, 10, 10, 12, 12, 14, 14, 15, 15, 17, 17, 18, 18, 20, 20, 21, 21, 23, 23, 25, 25, 26, 26...
Was soll das sein?

Mit (habe Bitverschiebung um 8 nach rechts gemacht; deswegen SHL 8 )

1
2
 
byte9 = V_Data[9] SHL 8
byte10 = V_Data[10]
 


kriege ich auch Minuszahlen und völlig durcheinander! Wie komme ich an die Gechwindigkeit ran?
Ich habe das Gefühl, da stimmt etwas mit der CS 2 (Quellcode der CS 2) nicht? Habe schon überlegt an Märklin zu schreiben wegen meinem Problem. Das muss doch funktionieren? Schließlich klappt es doch auch mit der PC-Software! Alleine komme ich da nicht mehr weiter. Hätte nicht gedacht, dass es so schwierig ist, so ein Programm zu schreiben. Aber es klappt! Ich glaube jetzt zu wissen, warum sich das Programm r-serwe, was ich da im Internet gefunden habe, aufhängt! Mein Programm hängt sich auch auf, wenn ich mit Rückmeldungen auf dem Bildschirm arbeite. Das Programm ist nicht Thread-Safe! Deswegen hängt sich mein Programm und wahrscheinlich das von r-serwe auf.

Bin dankbar für jede Hilfe! Vielleicht weiß jemand, wie ich an die Geschwindigkeit bei der Rückmeldung ran komme?

Gruß
ALWIM


Mein letzter Zugang:
1x Lockdown...


ALWIM  
ALWIM
InterRegio (IR)
Beiträge: 219
Registriert am: 05.04.2014


RE: Software schreiben zum steuern von Loks?

#91 von Andi , 24.05.2015 18:54

Moin ALWIM,

mal eine bescheiden Frage: Was meinst du mit Geschwindigkeit? Der Decoder arbeitet in der Regel mit Fahrstufen und nicht mit "Geschwindigkeit".


Schöne Grüße
Andreas


 
Andi
ICE-Sprinter
Beiträge: 5.162
Registriert am: 21.05.2005
Steuerung CS 2 / CS 3


RE: Software schreiben zum steuern von Loks?

#92 von ALWIM , 24.05.2015 19:01

Zitat von Andi
Moin ALWIM,

mal eine bescheiden Frage: Was meinst du mit Geschwindigkeit? Der Decoder arbeitet in der Regel mit Fahrstufen und nicht mit "Geschwindigkeit".

Mit Geschwinigkeit meine ich die Rückmeldung der CS 2 zum Computer. Das was die CS 2 an den PC sendet! Sagen wir die Fahrstufe wird auf dem PC falsch angezeigt. Diese wird ja an den Computer gesendet. Ich sende diese in einem Bereich von 0-1000 an die CS2.

Gruß
ALWIM


Mein letzter Zugang:
1x Lockdown...


ALWIM  
ALWIM
InterRegio (IR)
Beiträge: 219
Registriert am: 05.04.2014


RE: Software schreiben zum steuern von Loks?

#93 von Andi , 24.05.2015 19:45

Moin ALWIM,

als erstes würde ich versuchen in der Dokumentation nachzulesen. Ich gehe mal davon aus du besitzt eine Doku, oder woher weißt du, dass die Geschwindigkeit in byte9 und byte10 abgelegt ist?

Wenn du dort nichts findest, würde ich versuchen durch probieren rauszufinden, in welchem Format der Wert in den beiden Bytes abgespeichert ist, d.h. aufsteigende Werte (0, 1, 2, 3, 4, 5, ...) senden und schauen wie sich die Inhalte der beiden Bytes verändern.


Schöne Grüße
Andreas


 
Andi
ICE-Sprinter
Beiträge: 5.162
Registriert am: 21.05.2005
Steuerung CS 2 / CS 3


RE: Software schreiben zum steuern von Loks?

#94 von DiegoGarcia , 24.05.2015 21:10

Hi ALWIM,

die Zentrale (CS2, MS2) berichtet die Lokgeschwindigkeit im 5. und 6. Byte (also wenn man die Datenbytes von 0 bis 7 zählt, dann DataByte(4) und DataByte(5)). Da DU ja die Bytes aus Prio+Hash+DLC ja auch mit zählst, ist das bei Dir wie von Dir richtig angegeben das Byte(9) und Byte(10) (gezählt von 0) einer CAN-Message:

1
2
3
4
5
6
7
8
9
10
 
// Parsing the DataBytes of Loco-Speed-Command 0x04 response, DLC=6
v = ((DataBytes(4) * 256) + DataBytes(5))
if (v &lt; 8) then
v = 0
elseif (v &gt; 1000) then
v = 126
else
v = v SHR 4
end
// v enth&#228;lt die Lokgeschwindigkeit nun in Fahrstufen (Wertebereich 0 bis 126)
 


Wieso sollte da bei Märklin ein Fehler drin sein? Der Fehler liegt bei Dir: kein Shifting machen, bevor Du nicht die beiden Bytes zusammengeführt hast!

Cheers
Diego


talks are cheap, and they don't mean much .…


 
DiegoGarcia
Metropolitan (MET)
Beiträge: 2.797
Registriert am: 15.04.2007
Steuerung mfx


RE: Software schreiben zum steuern von Loks?

#95 von ALWIM , 25.05.2015 01:17

Zitat von DiegoGarcia
Hi ALWIM,

die Zentrale (CS2, MS2) berichtet die Lokgeschwindigkeit im 5. und 6. Byte (also wenn man die Datenbytes von 0 bis 7 zählt, dann DataByte(4) und DataByte(5)). Da DU ja die Bytes aus Prio+Hash+DLC ja auch mit zählst, ist das bei Dir wie von Dir richtig angegeben das Byte(9) und Byte(10) (gezählt von 0) einer CAN-Message:

1
2
3
4
5
6
7
8
9
10
 
// Parsing the DataBytes of Loco-Speed-Command 0x04 response, DLC=6
v = ((DataBytes(4) * 256) + DataBytes(5))
if (v &lt; 8) then
v = 0
elseif (v &gt; 1000) then
v = 126
else
v = v SHR 4
end
// v enth&#228;lt die Lokgeschwindigkeit nun in Fahrstufen (Wertebereich 0 bis 126)
 


Wieso sollte da bei Märklin ein Fehler drin sein? Der Fehler liegt bei Dir: kein Shifting machen, bevor Du nicht die beiden Bytes zusammengeführt hast!

Cheers
Diego




Selbst wenn ich vorher kein Shifting mache, erhalte ich nicht das was ich will? Alles funktioniert bis auf die Geschwindigkeit.
Und wieso erhalte ich die Funktionen ohne zu shiften? Da shifte ich doch auch um 8 nach rechts? Schon komisch?
Bei obigen Beispiel kommt bei mir immer 0 raus.

So funktioniert die Geschwindigkeitsregelung der CS2. Ich shifte da um 8 nach rechts.

1
2
3
 
DataBytes(4) = ((Speed(k) SHR 8) AND &amp;hFF)
DataBytes(5) = (Speed(k) AND &amp;hFF)
 
 


Der Logik nach, müsste ich demnach um wieder zurück zu kommen, um 8 nach links shiften? Irgendwas übersehe ich da? Der Sache muss ich weiter auf den Grund gehen.

Vielen herzlichen Dank für die Hilfe!


Mein letzter Zugang:
1x Lockdown...


ALWIM  
ALWIM
InterRegio (IR)
Beiträge: 219
Registriert am: 05.04.2014


RE: Software schreiben zum steuern von Loks?

#96 von DiegoGarcia , 25.05.2015 17:14

Zitat von ALWIM
...ich shifte da um 8 nach rechts.

1
2
3
 
DataBytes(4) = ((Speed(k) SHR 8) AND &amp;hFF)
DataBytes(5) = (Speed(k) AND &amp;hFF)
 
 


Der Logik nach, müsste ich demnach um wieder zurück zu kommen, um 8 nach links shiften?



Ja.

1
 
Speed = ((DataBytes(4) SHL 8) AND &amp;hFFFF) + (DataBytes(5) AND &amp;hFF)
 


talks are cheap, and they don't mean much .…


 
DiegoGarcia
Metropolitan (MET)
Beiträge: 2.797
Registriert am: 15.04.2007
Steuerung mfx


RE: Software schreiben zum steuern von Loks?

#97 von KLVM , 26.05.2015 18:23

Gibt es eigentlich tatsächlich überhaupt keine vorgefertigten Bibliotheken, Frameworks oder ähnliches für die Moba-Steuerung, welche einem das Bytegeschubse ersparen können?


Ich mag kein Streumaterial.


KLVM  
KLVM
InterCity (IC)
Beiträge: 711
Registriert am: 27.01.2013


RE: Software schreiben zum steuern von Loks?

#98 von LDG , 26.05.2015 19:13

Hallo,

Zitat von KLVM
Gibt es eigentlich tatsächlich überhaupt keine vorgefertigten Bibliotheken, Frameworks oder ähnliches für die Moba-Steuerung, welche einem das Bytegeschubse ersparen können?

Doch die gibt es[*], aber sein Ziel ist es es mit Basic selbst zu programmieren (siehe Eröffnungsbeitrag). Da gibt es wohl noch nichts. Der Weg ist das Ziel

Gruß,
Lothar

[*]


Termine des Mist67 (Speyer)
Stummitreff WN: jeden 1. Freitag im Monat in Winnenden
Stummitreff BB: jeden 3. Freitag im Monat in Sindelfingen
...meine Rocrail Hilfsmittel Online


 
LDG
EuroCity (EC)
Beiträge: 1.301
Registriert am: 07.11.2007
Ort: bei Karlsruhe
Gleise Märklin Modell, M, K, α und C ; RocoLine m. Bettung
Spurweite H0
Steuerung Digital und Analog
Stromart Digital, Analog


RE: Software schreiben zum steuern von Loks?

#99 von ALWIM , 28.05.2015 13:43

Zitat von LDG
Hallo,

Zitat von KLVM
Gibt es eigentlich tatsächlich überhaupt keine vorgefertigten Bibliotheken, Frameworks oder ähnliches für die Moba-Steuerung, welche einem das Bytegeschubse ersparen können?

Doch die gibt es[*], aber sein Ziel ist es es mit Basic selbst zu programmieren (siehe Eröffnungsbeitrag). Da gibt es wohl noch nichts. Der Weg ist das Ziel

Gruß,
Lothar

[*]



Ja, ich will es mit Basic (Freebasic) machen! Welche Bibliotheken gibt es? Wo finde ich die zum Download? Ich kann möglicherweise sogar C-Bibliotheken verwenden? Ich komme an alles, bis auf die beschissene Geschwindigkeit ran! Aber es funktioniert soweit, die Lokomotiven fahren! Ohne Rückmeldungen ist das Programm für mich wertlos. Mal schauen was ich noch machen kann! Mir würde sogar Assembler helfen!

Gruß
ALWIM


Mein letzter Zugang:
1x Lockdown...


ALWIM  
ALWIM
InterRegio (IR)
Beiträge: 219
Registriert am: 05.04.2014


RE: Software schreiben zum steuern von Loks?

#100 von LDG , 28.05.2015 15:29

Hallo ALWIM,

Was erwartest Du von einer Bibliothek? Vermutlich die "Basisifunktionen" : Abstraktion von Anbindung der Zentrale, Lok- und Zubehördekoderadressierung(-kommandos) und Rückmelderverarbeitung
Dann ist der SRCP-Server als "Bibliothek" (Blackbox) verwendet ein sehr gutes Beispiel. Mit der aktuellen SRCP-API (0.84) oder (0.85-WIP). Ähnliches gilt für Rocrail (mit der Rocrail-API oder SRCP-API mit beliebiger Software ansprechbar).
Bei beiden Varianten macht man die "Basiskonfiguration" für den Serverteil mit deren Tools (wobei der SRCP-Server die CS2 oder MS2 noch nicht unterstützt. Wer will das? -> Wer macht es?) und kann dann via dokumentierter API eine eigene Logik (Auswertung der Rückmelder, Senden von Weichen- und Fahrbefehlen) darüber aufbauen.

Wenn die CS2 nativ via (Free-)Basic angesprochen werden soll dann gibt es da derzeit wohl noch nichts frei erhältlich. Da hilft dann nur das Studium der Märklin-Protokollspezifikation und selbst implementieren der "Bitschiebereien". Du kannst es ja gleich strukturiert angehen und die "Basisfunktionen" in eine Bibliothek (mit dokumentierter API ) auslagern und danach anderen Benutzern zur Verfügung stellen (gerne auch OpenSource!).
Frei zugängliche Bibliotheken oder Tools kommen nur von Entwicklern, die bereit sind Ihre eigene Arbeit auch Anderen zur Verfügung zu stellen (das ist der Grundgedanke von OpenSource).

Gruß,
Lothar
...von dem Einiges an Ergänzungen und Erweiterungen auch in OpenSource-Projekten zu finden ist und damit Allen frei zugänglich gemacht wurde.
Meist in Teilbereichen von Rocrail (SRCP-Schnittstelle, Erweiterung des Analyser, Konsistenzprüfungen) und zu kleineren Teilen (meist Bugfixes und kleine Ergänzungen) auch im SRCP-Projekt Dazu kommt noch ein OpenSource-Projekt in Kooperation mit Kersten Tams.
OpenSource lebt vom Nehmen (Nutzung der Software) und vom Geben (Verbesserungen auch Anderen zur Verfügung stellen)


Termine des Mist67 (Speyer)
Stummitreff WN: jeden 1. Freitag im Monat in Winnenden
Stummitreff BB: jeden 3. Freitag im Monat in Sindelfingen
...meine Rocrail Hilfsmittel Online


 
LDG
EuroCity (EC)
Beiträge: 1.301
Registriert am: 07.11.2007
Ort: bei Karlsruhe
Gleise Märklin Modell, M, K, α und C ; RocoLine m. Bettung
Spurweite H0
Steuerung Digital und Analog
Stromart Digital, Analog


   


  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz