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