RE: Software schreiben zum steuern von Loks?

#26 von ALWIM , 12.11.2014 02:57

Zitat
jedenfalls vermute ich stark, dass er irgendein VB-Derivat verwendet auf Basis dessen, was er damit gemacht haben will)

Nein, ich fange komplett bei 0 an!

Zitat
Ne, Martin, es ist einfach so, dass Alwim "VB" als "Basic" bezeichnet, und "VB" hat mit "Basic" soviel gemeinsam wie ein "Doktorfisch" mit "Humanmedizin".


Visualbasic ist es nicht. Aber Qbasic auch nicht! Es gibt glaube ich sogar Q64, wenn ich mich nicht irre. :

Zitat
Dann mal los: Dein Basic Programm braucht nur eine Socket-Verbindung von Deinem Rechner zur CS2 aufzumachen und die entsprechenden Datenpakete schicken, bzw. auf Empfang zu lauschen.


leichter gesagt als getan! Der beschissene Can-Bus bzw. das UDP-Protokoll ist das Problem!

Zitat
Ich empfehle für den Anfang das STOP-Kommando, also Dein Programm schickt STOP an die CS2 und die geht dann auch auf STOP!


Mit dem wollte ich auch anfangen. Sobald der Stop-Befehl mal funktioniert, ist der Rest dann nicht mehr so schwer.

Ich muss den Can-Bus irgendwie entschlüsseln können? Die Seiten im Internet sind mir keine große Hilfe!
Auch die Seite aus dem Forum bleibt mir ein Rätsel.

Wegen dem beschissenen CServer.exe von Serwe R. spinnt jetzt meine Zugspitzbahn. Das Licht blinkt wie verrückt im Stillstand. Lok fährt, obwohl Fahrstufe 0 drin ist? Wird die Adresse auf 7 eingestellt, fährt die Lok einfach unkontrolliert los! Wenn ich es schaffe, selber so ein Programm zu schreiben und die Lok macht so etwas, na dann Prost Mahlzeit!

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?

#27 von st-oldie , 12.11.2014 18:51

Hallo ALWIM,

Zitat von ALWIM

Zitat
Dann mal los: Dein Basic Programm braucht nur eine Socket-Verbindung von Deinem Rechner zur CS2 aufzumachen und die entsprechenden Datenpakete schicken, bzw. auf Empfang zu lauschen.


leichter gesagt als getan! Der beschissene Can-Bus bzw. das UDP-Protokoll ist das Problem!

Zitat
Ich empfehle für den Anfang das STOP-Kommando, also Dein Programm schickt STOP an die CS2 und die geht dann auch auf STOP!


Mit dem wollte ich auch anfangen. Sobald der Stop-Befehl mal funktioniert, ist der Rest dann nicht mehr so schwer.

Ich muss den Can-Bus irgendwie entschlüsseln können? Die Seiten im Internet sind mir keine große Hilfe!
Auch die Seite aus dem Forum bleibt mir ein Rätsel.




Was ist denn genau daran dein Problem? Irgenwelche Details oder fehlt die der komplette Überblick? Versuch mal genauer zu beschreiben, was die nicht verstehst. Dann kann man versuchen, dir nach und nach auf die Sprünge zu helfen.

Vereinfacht:

Jede UDP Nachricht enthält die CAN Id, das Längenbyte (DLC, das angibt, wieviel Datenbytes diese Nachricht enthält) und die Datenbytes. Also den CAN Frame.

Der Aufbau der CAN Id und die Datenbytes sind in der Doku von Märklin beschrieben. Die Beschreibung ist gut genug, um danach die Befehle zu kodieren.

Ich kann als Beispiel nur meinen C Code beisteuern. Aber der kann mittlerweile auch recht viel. Es ist also nicht mehr so einfach, die relevanten Stellen zu finden.

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?

#28 von ALWIM , 13.11.2014 01:35

Zitat
Was ist denn genau daran dein Problem? Irgenwelche Details oder fehlt die der komplette Überblick? Versuch mal genauer zu beschreiben, was die nicht verstehst. Dann kann man versuchen, dir nach und nach auf die Sprünge zu helfen.

Ich verstehe den Can-Bus bzw. die Zusamensetzung des UDP-Packets nicht so ganz. Mir fehlt wahrscheinlich der komplette Überblick! Die PDF-Datei ist etwas kompliziert geschrieben.

Ich muss zum Senden in meinen Programm einen String angeben. Keine Ahnung wie der String letztendlich aussehen muss bzw. zusammengesetzt wird.

Bei der PDF-Datei von Märklin fand ich diese Nummer:
00004711 5 00 00 00 00 00 = Stopp an alle
Wie setzt sich diese Nummer zusammen? Was hat es mit der Nummer auf sich?

Mir geht es letztendlich nur noch um die Zusammensetzung des Can-Busses bzw. des UDP-Packetes!
Der Rest dürfte ein Kinderspiel sein!

Ich danke trotzdem schon mal für die Hilfe!

Den C-Quellcode, werde ich mir mal ansehen, sobald ich etwas mehr Zeit habe.

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?

#29 von BernhardN , 13.11.2014 10:26

Zitat von ALWIM

Ich muss zum Senden in meinen Programm einen String angeben. Keine Ahnung wie der String letztendlich aussehen muss bzw. zusammengesetzt wird.


Exakt das dürfte das Problem sein, dass reines BASIC scheitert. Der CAN-Bus braucht die Daten Bitweise, dazu hat BASIC im Gegensatz z.B. zu C keine Möglichkeit im Sprachumfang. Hier müsstest Du suchen, ob dein BASIC Bit-Manipulationen erlaubt oder eine weitere Bibliothek finden, die dir dabei hilft. Das kommt aber auf Deinen BASIC-Dialekt an, ob da überhaupt was machbar ist.

C(++) hat halt doch seine Vorteile, gerade wenn's tief runter geht...

Ganz allgemein: Das ist der Grund, warum "richtige Informatiker"[TM] viele Sprachen/Sprachsysteme lernen, um für den jeweiligen Anwendungsfall die passende Programmiersprache zu haben - oder sich notfalls eine selbst zu entwickeln. Auch wenn die meisten dann bei ein oder zwei "Lieblingssprachen" hängenbleiben und manchmal Dinge damit machen, für die was anderes passen würde. Auch der Metallbaumeister nimmt mal zum Nagel einschlagen eine Zange, wundert sich dann aber wenigstens nicht, wenn er sich damit auf den Daumen drischt.


Grüße aus OBB,
BernhardN

Liste "Lazarettwagen/-züge, Fahrzeuge mit Rotkreuz-Bezug"
Weitere von mir gepflegte Links/Themen/Listen/FAQs befinden sich in Überarbeitung.


 
BernhardN
InterRegioExpress (IRE)
Beiträge: 443
Registriert am: 06.01.2013


RE: Software schreiben zum steuern von Loks?

#30 von Murrrphy , 13.11.2014 10:33

Zitat von ALWIM

Zitat
Was ist denn genau daran dein Problem? Irgenwelche Details oder fehlt die der komplette Überblick? Versuch mal genauer zu beschreiben, was die nicht verstehst. Dann kann man versuchen, dir nach und nach auf die Sprünge zu helfen.

Ich verstehe den Can-Bus bzw. die Zusamensetzung des UDP-Packets nicht so ganz. Mir fehlt wahrscheinlich der komplette Überblick! Die PDF-Datei ist etwas kompliziert geschrieben.

Ich muss zum Senden in meinen Programm einen String angeben. Keine Ahnung wie der String letztendlich aussehen muss bzw. zusammengesetzt wird.

Bei der PDF-Datei von Märklin fand ich diese Nummer:
00004711 5 00 00 00 00 00 = Stopp an alle
Wie setzt sich diese Nummer zusammen? Was hat es mit der Nummer auf sich?

Mir geht es letztendlich nur noch um die Zusammensetzung des Can-Busses bzw. des UDP-Packetes!



Vielleicht verstehst Du nun, warum wir Dir mit einigen Leuten (die durchaus Ahnung von der Materie haben) von Basic für diesen Fall abgeraten haben... Du kannst das Problem mit Basic theoretisch lösen, die Frage ist eben, wie aufwendig. Hier liegt kein String vor, sondern eine Bitfolge. In diesem Fall hat BernhardN eigentlich alles schon gesagt zur Bit-Manipulation, schau, ob und wie Du für Deinen Basic-Dialekt eine Bibliothek findest oder schau, dass Du Dir ggf. ein Tool selber schreibst für diese Manipulation.


Viele Grüße
Achim



 
Murrrphy
Administrator
Beiträge: 8.863
Registriert am: 02.01.2006
Homepage: Link
Gleise C-Gleis
Spurweite H0
Steuerung CS 3 / MS 2
Stromart AC, DC, Digital


RE: Software schreiben zum steuern von Loks?

#31 von 3047 , 13.11.2014 10:40

Zitat von ALWIM
Hallo Community,
ich möchte mir gegebenfalls eine Software schreiben mit der ich Lokomotiven am Computer steuern kann.
Das ganze möchte ich in der Programmiersprache Basic machen! Dass es geht weiß ich!
Leider weiß ich nicht so recht, welche Befehle man an die CS2 senden muss, damit eine Lok fährt oder Funktionen ein bzw. ausgeschaltet werden!
Vielleicht gibt es unter euch ein paar Programmierer die sich damit auskennen?

Ich brauche irgendwie ein Protokoll, so etwas in der Art.
Meine Kenntnisse im Programmieren sind zwar recht hoch, reichen aber für so ein Projekt (noch) nicht aus.

Mir geht es lediglich um das Steuern der Loks! Ich sehe das ganze als Lerneffekt im programmieren an. Es gibt zwar bereits Programme im Internet, aber etwas eigenes wäre schon nicht schlecht!

Mir ist halt im Moment noch nicht klar, wie ich mit einem Basicprogramm einen oder mehrere Befehle an die CS2 senden kann, so dass diese von der CS verarbeitet werden? Mit Basic geht es! Das weiß ich zu 100%

Vielleicht weiß da einer mehr? Mit C++ Quellcodes kann ich nichts anfangen, da ich von C++ keine Ahnung habe!
Ich habe aber immerhin schon mit einem Testprogramm eine Nachricht von einem Rechner auf den anderen schicken können!

Gruß
ALWIM



Hallo Alwim

willkommen im Club!

Ich habe selbst in BASIC auf einem COMMODORE 64 einmal solche Programmieraufgaben gemacht und habe auch alle Informationen und Beispielprogramme dafür von Märklin bekommen.

Das geht allerdings nur im MM Format. (Märklin Motorola). Dazu brauchts eine 6021 und ein Interface 6050/6051 (mit seriellem Kabel von der 6051 zum Computer, serielle Schnittstelle). Diese Kombination kann man dann allerdings über ein Kabel an die 60215 Zentrale anschließen.
Die 60215 selbst benutzt ein anderes, neueres Protokoll, das ebenfalls frei dokumentiert auf der Märklin Webseite veröffentlicht, heruntergeladen werden kann. Ob dieses ebenfalls per Basic erreichbar ist, kann ich Dir allerdings nicht sagen. Ich kann Dir also nur zum alten MM Protokoll hilfreich sein. Dazu folgendes:

Die Befehle sind simpel wie Print, Wait, ect.,

Später habe ich die Programme in GW Basic für den PC genutzt. Ist aber schon ein paar Jahre her. Die Beispielprogramme sind auf der Märklin WEbseite auch zu finden und können heruntergeladen werden. (Beispieldiskette).

Solltest Du gar nicht mehr fündig werden, müsste ich mal meine alten Märklin CDs durchforsten, da ist es mit Sicherheit irgendwo alles zu finden.

Damals hab ich übrigens auch den Kupplungswalzer programmiert. Also Lok kurz zurückfahren mit niedriger Geschwindigkieit. Lok umschalten, Telexkupplung einschalten für 5 Sekunden, und dann in neuer Fahrtrichtung 5 Sekunden losfahren.

Das ganze habe ich in Module gepackt die ich dann aufrufen konnte, also Lok aufrufen, Lok in allen Fahrstufen langsam beschleunigen bis zur gewünschten Geschwindigkeit, oder Signal aufrufen, schalten.

Solche Module lassen sich ja heute in der 60215 im Memory ablegen und aufrufen, so wie ich das früher auf meinem Commodore C64 auf Funktionstasten abgelegt hatte. Man sieht, was man heute kann, konnte man grundsätzlich schon vor 30 Jahren auf Technik mit 64KByte RAM und 1Mhz Geschwindigkeit.

Dann brauchte ich im Basic nur noch die entsprechenden Progrmmierzeilen aufrufen die dann auf eine Eingabe der Adresse gewartet haben, dann folgte Ausführung und Rückkehr zu einem anderen Programmiermodul mit Eingabeaufforderung für die nächste Aufgabe.

Das geht aber auch in Pascal oder einer anderen Programmiersprache mit der man Geräte ansrpechen und adressieren kann, also jeder Programmiersprache.

Basic war aber damals und wohl auch heute noch die einfachste Möglichkeit, weil leicht zu erlerndende Progrmmiersprache.

Ich möchte Dich deshalb ausdrücklich ermuntern, diese Möglichkeit zu nutzen. Es ist etwas ganz anderes, wenn man selbst einen Programmablauf geschrieben hat und sieht wie die Lok oder der Zugverband das umsetzt. Also Licht eingeschaltet wird, losgefahren wird, sich auf der Modellbahn programmgesteuert etwas in Bewegung setzt, und Abläufe genau so umgesetzt werden wie man sich das vorher vorgestellt hat uns so selbst progammiert hat.

Glückwunsch zu Deiner Entscheidung. Wenn ich Dir noch irgendwie helfen kann, bitte per PN.


kollegiale Grüße

Gustav


3047  
3047
InterCity (IC)
Beiträge: 962
Registriert am: 17.11.2012


RE: Software schreiben zum steuern von Loks?

#32 von BernhardN , 13.11.2014 10:58

Bitte nicht PN, sondern hier.

Das Projekt ist interessant, ich kann mir auch vorstellen, dass es selbst mit BASIC (und ein paar Erweiterungen) geht. Es geht mit C o.ä. sicherlich besser, aber der Threadersteller hat halt seine Vorlieben.

Der C64 erlaubte sehr hardwarenahe Programmierung ohne Sperenzchen, da war das noch einfach. Steht hier auch noch irgendwo rum. Führe mich nicht in Versuchung...


Grüße aus OBB,
BernhardN

Liste "Lazarettwagen/-züge, Fahrzeuge mit Rotkreuz-Bezug"
Weitere von mir gepflegte Links/Themen/Listen/FAQs befinden sich in Überarbeitung.


 
BernhardN
InterRegioExpress (IRE)
Beiträge: 443
Registriert am: 06.01.2013


RE: Software schreiben zum steuern von Loks?

#33 von Zimmerle ( gelöscht ) , 13.11.2014 11:36

Hallo zusammen,

als Informatiker und mit über 30 Jahren Programmiererfahrung muss ich doch etwas schmunzeln ob der hier gemachten Äußerungen hinsichtlich der Verwenudng "geeigneter" Programmiersprachen.

Natürlich stimmt die Aussage, dass für bestimmte Aufgaben einige Programmiersprachen besser geeignet sind als andere. Das ist eine Platitüde. Ob sich nun Basic für die besagte Aufgabe eignet oder nicht, kommt einfach auf das Basic-Derivat an. Lutz hat es je schon gesagt, das man sich wundern würde, wenn man wissen würde, was nicht alles in Basic oder besser gesagt, in den weiterentwickelten Basic-Varianten alles programmiert wurde. Es gibt heute heute hochprofessionelle Basic-Compiler mit denen man nahezu all das machen kann, was man in C auch kann. Und glaubt mir, man muss nicht objektorientiert programmieren, wenn man ein UDP-Paket auf die Reise schicken will.

Was man für eine solche Aufgabe braucht sind Kenntnisse in der Socket Programmierung. Der Basic-Compiler sollte dazu eine API zur Verfügung stellen, oder man schaut sich nach Tools dafür um. Für professionelle Compiler wie z.B. PowerBasic gibt es das. Das nun als nebenbei.

Zimmerle


Zimmerle

RE: Software schreiben zum steuern von Loks?

#34 von DiegoGarcia , 13.11.2014 13:03

Hallo Alwim,

dann mal als Beispiel der Stopp-Befehl im "Basic-Pseudocode", so wie ich ihn machen würde:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
Sub SendeStopCS2(useThisSocket As UDPSocket)
dim i As Integer // als Laufvariable
dim myDLC As Byte // Anzahl der Datenbytes im CAN-Paket, 1 Byte (eigentlich nur ein Nibble)
dim myPrio As Byte // Priorität des befehls, 1 Nibble (4 Bits)
dim myResponseBit As Byte // wenn wir als PC-Programm senden, ist dieses Bit immer 0
dim myStartWord As Word // die Kombination aus Prio, Command und Responsebit
dim myUID As LongInteger // Zieladresse des Objektes auf dem CAN, 32 Bits
dim myHash As Word // unser Hash, 16 Bits
dim myCommand As Byte // unser Befehl, 8 Bits
dim mySubCommand As Byte // unser Unterbefehl, 8 Bits
dim myDataBytes(7) As Byte // array[0..7] of Byte, immer genau 8 Bytes
 
dim mySendingString As String // diese Zeichenkette werden wir über das UDP-Socket senden
 
myPrio = 0 // wir haben keine Priorität
myCommand = &h00 // Systembefehl
mySubCommand = 0 // Stopp
myHash = &h4711 // wie im Beispiel, kann aber auch &h0300 sein (als Minimum)
myDLC = &h05 // 5 Bytes Nutzdatenlänge
myUID = &h00000000 // UID = 0 bedeutet: sende den Befehl an alle
 
// Inits
for i = 0 to 7
myDataBytes(i) = 0 // init array
next
 
// Kombination
myStartWord = Bitwise.BitAnd(Bitwise.ShiftLeft(myPrio, 12) + Bitwise.ShiftLeft(myCommand, 1) + Bitwise.BitAnd(myResponseBit, 1), &hFFFF)
myDataBytes(0) = Bitwise.BitAnd(Bitwise.ShiftRight(myUID, 24), 255) // Big Endian encoding
myDataBytes(1) = Bitwise.BitAnd(Bitwise.ShiftRight(myUID, 16), 255)
myDataBytes(2) = Bitwise.BitAnd(Bitwise.ShiftRight(myUID, 8), 255)
myDataBytes(3) = Bitwise.BitAnd(myUID, 255)
myDataBytes(4) = mySubCommand
 
// wir stellen nun die Daten als String dar
mySendingString = ChrB(Bitwise.ShiftRight(myStartWord, 8)) + ChrB(BitWise.BitAnd(myStartWord, 255))
mySendingString = mySendingString + ChrB(Bitwise.ShiftRight(myHash, 8)) + ChrB(BitWise.BitAnd(myHash, 255))
mySendingString = mySendingString + ChrB(myDLC)
for i = 0 to 7
mySendingString = mySendingString + ChrB(myDataBytes(i))
next
 
// Senden, wenn Socket offen
if (useThisSocket <> NIL) and (useThisSocket IsA UDPSocket) and useThisSocket.IsOpen then
useThisSocket.WriteString(LeftB(mySendingString, 13)) // schreibe immer genau 13 Bytes
end
 
end Sub
 



(* Anmerkung: ChrB(##) gewährleistet, dass genau ein Byte an den String übergeben wird
(* Hexcodierung hier: 0x## meint das gleiche wie ##h oder wie hier: &h##

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?

#35 von BernhardN , 13.11.2014 13:03

Hallo (Herr?) Zimmerle!

Zitat von Zimmerle
Natürlich stimmt die Aussage, dass für bestimmte Aufgaben einige Programmiersprachen besser geeignet sind als andere. Das ist eine Platitüde.

Das kam von mir. Und ich meine, das muss man schon mal anmerken dürfen, wenn (wieder) so getan wird, als gäbe es nur eine allein-seligmachende Programmiersprache. Das wurde hier von mehreren Seiten so dargestellt.

Zitat von Zimmerle
Es gibt heute heute hochprofessionelle Basic-Compiler mit denen man nahezu all das machen kann, was man in C auch kann.

Das ist aber kein "richtiges BASIC"[TM] mehr (das ursprüngliche BASIC ist eine Interpreter-Sprache).

Klar gibt es heutzutage Derivate, die per Compiler ganz andere Sachen möglich machen als es der alte Sprachstandard vorsieht. Welchen BASIC-Ableger der Threadersteller nutzt, hat er aber (trotz Nachfrage WIMRE) bisher verschwiegen. Deshalb ist die konkrete Hilfe, die er haben möchte, sehr schwierig.

Ich habe mir bei seinem letzten Beitrag sogar schon Überlegungen gemacht, wie man das ganze mit bloßen ASCII-Zeichenkettenoperationen des BASIC hindübeln könnte (selbst das könnte sogar gehen, je nachdem wie die Bibliothek das weitergibt), aber für solche Spielchen bin ich zu alt. Da nehme ich lieber gleich das, was für mich schneller ein Ergebnis bringt. Wenn jemand wie der Threadersteller erst C oder Assembler lernen muss, dann würde das natürlich wiederum länger dauern. Soll er mit BASIC selig werden. Nur ohne konkrete Aussagen wird er einfach keine praktische Hilfe bekommen.

Eine coole Sache ist das Projekt aber schon. Deshalb ja die Aufforderung, den interessanten Thread nicht auf PN-Ebene abzuwickeln.

Zitat von Zimmerle
Und glaubt mir, man muss nicht objektorientiert programmieren, wenn man ein UDP-Paket auf die Reise schicken will.

Das hat auch bisher keiner behauptet, oder? Soviel zum Thema Platitüde.

Kollegiale Grüße,


BernhardN
("richtiger Informatiker"[TM], knapp über 30 Jahre Softwareentwicklung in professionellem Umfeld
- nein, ich hab' mich nicht verrechnet)


Grüße aus OBB,
BernhardN

Liste "Lazarettwagen/-züge, Fahrzeuge mit Rotkreuz-Bezug"
Weitere von mir gepflegte Links/Themen/Listen/FAQs befinden sich in Überarbeitung.


 
BernhardN
InterRegioExpress (IRE)
Beiträge: 443
Registriert am: 06.01.2013


RE: Software schreiben zum steuern von Loks?

#36 von BernhardN , 13.11.2014 13:19

Zitat von DiegoGarcia
dann mal als Beispiel der Stopp-Befehl im "Basic-Pseudocode", so wie ich ihn machen würde:


Na, wenn das mit der "BASIC"-Version des Threaderstellers compilierbar ist, passt es doch! Das B in BASIC gilt da aber irgendwie schon nicht mehr. Das kann man so auch gleich in C machen, sieht ja eh schon fast so aus.

Es fehlen für jemanden mit "0 Ahnung" (siehe Ausgangsbeitrag) m.M. noch ein paar hilfreiche Angaben, auch wenn es "nur" Pseudocode sein soll:

  • Welches BASIC?
  • Wo kommen das "Bitwise.", "useThisSocket." und die anderen vorausgesetzten Definitionen her (Bibliothek)?
  • Wie muss man den Socket-Zugriff vorbereiten? Aber das macht wohl die dem Threadersteller bekannte Bibliothek schon, ist nur die Frage ob das mit dem Code zusammenpasst.


Grüße aus OBB,
BernhardN

Liste "Lazarettwagen/-züge, Fahrzeuge mit Rotkreuz-Bezug"
Weitere von mir gepflegte Links/Themen/Listen/FAQs befinden sich in Überarbeitung.


 
BernhardN
InterRegioExpress (IRE)
Beiträge: 443
Registriert am: 06.01.2013


RE: Software schreiben zum steuern von Loks?

#37 von ALWIM , 13.11.2014 14:06

Zitat
Es fehlen für jemanden mit "0 Ahnung" (siehe Ausgangsbeitrag) m.M. noch ein paar hilfreiche Angaben, auch wenn es "nur" Pseudocode sein soll:

Welches BASIC?
Wo kommen das "Bitwise.", "useThisSocket." und die anderen vorausgesetzten Definitionen her (Bibliothek)?
Wie muss man den Socket-Zugriff vorbereiten? Aber das macht wohl die dem Threadersteller bekannte Bibliothek schon, ist nur die Frage ob das mit dem Code zusammenpasst.



Ich beantworte mal die Fragen:

Es handelt sich um Freebasic!
Die Bibliothek die ich gefunden habe, kann auch UDP-Packete verschicken und heißt: TSNE
Theoretisch könnte ich ja auch Winsock direkt verwenden! Das geht. Die ist nämlich vorhanden!

Zitat
Aber das macht wohl die dem Threadersteller bekannte Bibliothek schon, ist nur die Frage ob das mit dem Code zusammenpasst


Das werde ich erstmal testen!

Den Can-Bus zu verstehen, hat nichts mit Programmieren zu tun. Viele Dinge programmiert man mit Basic schneller als mit C oder gar C++! Und einfacher geht es zum Teil auch.

Was haltet ihr davon:




Ist bisher nur eine Studie und für den Eigenbedarf gedacht! Das Programm ist unvollständig und noch ausbaufähig!
(programmiert mit Freebasic)!


Mein letzter Zugang:
1x Lockdown...


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


RE: Software schreiben zum steuern von Loks?

#38 von 3047 , 13.11.2014 15:40

Zitat von ALWIM

Zitat
Es fehlen für jemanden mit "0 Ahnung" (siehe Ausgangsbeitrag) m.M. noch ein paar hilfreiche Angaben, auch wenn es "nur" Pseudocode sein soll:

Welches BASIC?
Wo kommen das "Bitwise.", "useThisSocket." und die anderen vorausgesetzten Definitionen her (Bibliothek)?
Wie muss man den Socket-Zugriff vorbereiten? Aber das macht wohl die dem Threadersteller bekannte Bibliothek schon, ist nur die Frage ob das mit dem Code zusammenpasst.



Ich beantworte mal die Fragen:

Es handelt sich um Freebasic!
Die Bibliothek die ich gefunden habe, kann auch UDP-Packete verschicken und heißt: TSNE
Theoretisch könnte ich ja auch Winsock direkt verwenden! Das geht. Die ist nämlich vorhanden!

Zitat
Aber das macht wohl die dem Threadersteller bekannte Bibliothek schon, ist nur die Frage ob das mit dem Code zusammenpasst


Das werde ich erstmal testen!

Den Can-Bus zu verstehen, hat nichts mit Programmieren zu tun. Viele Dinge programmiert man mit Basic schneller als mit C oder gar C++! Und einfacher geht es zum Teil auch.

Was haltet ihr davon:




Ist bisher nur eine Studie und für den Eigenbedarf gedacht! Das Programm ist unvollständig und noch ausbaufähig!
(programmiert mit Freebasic)!




An der mathematischen Funktion musst Du noch feilen. Oder wie kommt dein Programm bei 12 Stück a 2,99 Euro auf 295,.. Euro?

EDIT: oder du hast hier die Gesamtkosten aller Gleismaterialen zusammengerechnet und hier dargestellt - wäre auch möglich...ist aber nicht ersichtlich woraus sich dieser Betrag ergibt.

Aber schön gemacht, ist schon ein guter Anfang...selbst ist der Mann - das begrüße ich ausdrücklich!


kollegiale Grüße

Gustav


3047  
3047
InterCity (IC)
Beiträge: 962
Registriert am: 17.11.2012


RE: Software schreiben zum steuern von Loks?

#39 von ALWIM , 13.11.2014 16:36

Zitat
An der mathematischen Funktion musst Du noch feilen. Oder wie kommt dein Programm bei 12 Stück a 2,99 Euro auf 295,.. Euro?

EDIT: oder du hast hier die Gesamtkosten aller Gleismaterialen zusammengerechnet und hier dargestellt - wäre auch möglich...ist aber nicht ersichtlich woraus sich dieser Betrag ergibt.


Ich habe in der Tat die Gesamtkosten aller in der Datenbank vorhandenen Gleismaterialien zusammengerechnet.
Dass 12 Stück a 2,99 nicht 295 Euro ergeben ist klar, da muss ich dir recht geben. Das würde auch keinen Sinn machen so etwas zu errechnen. Wobei? Die Funktion wäre ja schnell drin!
Die Datei T-Gleis.märklin, diente nur zum Testen der Software beim programmieren. Ein T-Gleis gibt es nicht!
Deswegen ist die mit auf dem Bild! Das T steht in dem Fall für Test!!!

Man könnte ja noch einen Button einfügen, der eine Stückliste aller vorhandenen Schienen auf dem Bildschirm ausgibt! Zum Schluss surrt dann der Drucker!

Was nicht vorhanden ist, schreibt man sich halt selber!

War ein Kinderspiel für mich so etwas zu schreiben. Ich kann das Programm leider nicht zum Download anbieten, wegen der Bilder die verwendet habe. Die habe ich mir von der Märklin Homepage runtergeladen.

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?

#40 von 3047 , 13.11.2014 17:06

Zitat von ALWIM

Zitat
An der mathematischen Funktion musst Du noch feilen. Oder wie kommt dein Programm bei 12 Stück a 2,99 Euro auf 295,.. Euro?

EDIT: oder du hast hier die Gesamtkosten aller Gleismaterialen zusammengerechnet und hier dargestellt - wäre auch möglich...ist aber nicht ersichtlich woraus sich dieser Betrag ergibt.


Ich habe in der Tat die Gesamtkosten aller in der Datenbank vorhandenen Gleismaterialien zusammengerechnet.
Dass 12 Stück a 2,99 nicht 295 Euro ergeben ist klar, da muss ich dir recht geben. Das würde auch keinen Sinn machen so etwas zu errechnen. Wobei? Die Funktion wäre ja schnell drin!
Die Datei T-Gleis.märklin, diente nur zum Testen der Software beim programmieren. Ein T-Gleis gibt es nicht!
Deswegen ist die mit auf dem Bild! Das T steht in dem Fall für Test!!!

Man könnte ja noch einen Button einfügen, der eine Stückliste aller vorhandenen Schienen auf dem Bildschirm ausgibt! Zum Schluss surrt dann der Drucker!

Was nicht vorhanden ist, schreibt man sich halt selber!

War ein Kinderspiel für mich so etwas zu schreiben. Ich kann das Programm leider nicht zum Download anbieten, wegen der Bilder die verwendet habe. Die habe ich mir von der Märklin Homepage runtergeladen.

Gruß
ALWIM





Alwim,
ich kann mich gut erinnern, dass so etwas selbst gemachtes viel mehr Spass macht, weil man auch immer an dem Programm "herumschrauben" kann wenn man neue Einfälle hat. Nach Basic habe ich damals viel in DBASE III programmiert, war ähnlich wie Basic, als Datenbanksprache, da ging auch schnell was zusammen und machte viel Spass weil man schnell was dazumachen konnte oder ändern konnt wie es einem gerade eingefalle ist.

Mach weiter so. Aber nochmals zurück zur Idee, die Moba erst mal in Motorola anzusprechen statt direkt im CAN Bus? Motorola Protokoll in Basic ist kinderleicht und lässt sich wie ich schon ausführte, auch zur 60215 schicken. Man kann damit eigentlich alles machen was auch unter MFX möglich ist nur halt unter MM Adressen ansprechbar....

Tut mir leid dass ich Dir zum Problem mit dem CAN Bus nichts helfen kann.


kollegiale Grüße

Gustav


3047  
3047
InterCity (IC)
Beiträge: 962
Registriert am: 17.11.2012


RE: Software schreiben zum steuern von Loks?

#41 von st-oldie , 13.11.2014 19:20

Hallo ALWIM,

da es ja immer wieder in eine Diskussion abgleitet, ob dein Basic geeignet ist oder nicht, versuche ich jetzt mal etwas mehr auf dein Problem einzugehen.

Zitat von ALWIM
Ich verstehe den Can-Bus bzw. die Zusamensetzung des UDP-Packets nicht so ganz. Mir fehlt wahrscheinlich der komplette Überblick! Die PDF-Datei ist etwas kompliziert geschrieben.



Eigentlich ist die Doku in der PDF Datei nicht so kompliziert. Allerdings muß ich zugeben, daß ich beruflich embedded systems programmiere und deshalb Erfahrung mit solchen Dokumenten habe.

Wie schon geschrieben wurde, handelt es sich nicht um Strings, sondern um Zahlen (long, 32 Bit) und Datenbytes. Und Märklin hat dokumentiert, wie die einzelnen Bits aussehen müssen.

Ich vermute aus deinen Fragen und Problemen, daß du mit Bitmanipulation und auch der Darstellung von Zahlen im Computer keine Erfahrung hast? Ohne solche Kenntnisse kannst du solche Steueraufgaben aber nicht lösen. Und hast wahrscheinlich auch Probleme mit meinem Code.

Da ich übers Wochenende unterwegs auf dem EJag Fest bin und deshalb hier nicht schreiben werde, möchte ich dir eine Hausaufgabe stellen:

Bitte informiere dich mal über die Darstellung von Zahlen im Computer, Dualsystem bzw. Binärsystem, Bits und Bitmanipulationen. Das sind die Grundlagen für eine solche Programmieraufgabe. Wenn du dazu Fragen hast, kann ich das nächste Woche erklären (es sein denn, hier erbarmt sich jemand, dir das zu erklären ohne über Sinn und Unsinn von Basic zu streiten).

Und bitte prüfe mal, ob du mit deinem Basic Bitmanipulationen (bitweises "and" und "or") durchführen kannst bzw. eine Library dazu findest.

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?

#42 von Nichteisenbahner ( gelöscht ) , 13.11.2014 20:33

Zitat von Nichteisenbahner
Prinzipiell würde ich allerdings doch dazu raten, statt BASIC eine "richtige" Programmiersprache zu benutzen.

Hi,
wenn ich geahnt hätte, zu was das führt, ich hätte den Mund gehalten. Das war doch nur ein kleiner freundlicher Hinweis - eine Diskussion a la Märklin vs. Rest der Welt (oder Microsoft vs. Linux oder so) wollte ich damit nicht losbrechen.
Aber echt.
Gruß
Martin


Nichteisenbahner

RE: Software schreiben zum steuern von Loks?

#43 von DiegoGarcia , 13.11.2014 22:16

Hallo ALwim und Michael,

FreeBasic wiki: Thema Operatoren
http://www.freebasic.net/wiki/wikka.php?...tPgOpArithmetic
http://www.freebasic.net/wiki/wikka.php?wakka=CatPgOpLogical
Alwims FreeBasic kennt Bit-Verschiebung SHL und SHR, und Bit-weise Verknüpfung AND, OR, XOR

…und http://www.freebasic.net/wiki/wikka.php?...tPgOpAssignment
Zuweisungsoperatoren, z.B. AND= und OR= und SHL= und SHR=

Damit lassen sich die BitWise-Funktionen aus meinem Beispiel nachbilden.

Beipiel

1
2
3
4
5
 
Function Bitwise.ShiftLeft(thisValue As Integer, BitsToShift As Integer) As Integer
// wir schieben die Bits in "thisValue" um die Anzahl "BitsToShift" nach links
// und geben das Ergebnis als Funktionswert zurück
Return thisValue SHL BitsToShift
end function
 



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?

#44 von ALWIM , 13.11.2014 22:43

Zitat
Und hast wahrscheinlich auch Probleme mit meinem Code.


Im Moment weiß ich noch nicht welches Basic das ist.
Ich tippe auf Visual Basic?

Es gibt aber auch Blitzbasic und Powerbasic?

Ich muss ja nur die entsprechenden Werte zusammenrechnen, wenn ich das richtig sehe?

Zitat
Ich vermute aus deinen Fragen und Problemen, daß du mit Bitmanipulation und auch der Darstellung von Zahlen im Computer keine Erfahrung hast?


Ahnung bei der Darstellung von Zahlen, habe ich denke schon. Bitmanipulation eher nicht. Habe ich noch nicht gemacht.

Zitat
Wie schon geschrieben wurde, handelt es sich nicht um Strings, sondern um Zahlen (long, 32 Bit) und Datenbytes.


Das ist mir klar, ich brauche letztendlich in meinem Programm nur einen String. So ist die Variable in der Bibliothek definiert.

Ich habe mir mal in Freebasic ein Rouletteprogramm geschrieben. Das schreibt man nicht so einfach mal aus dem Nichts! Da braucht man schon Kenntnisse!

Ein Bild davon:


Ich habe im Moment leider zu wenig Zeit, um das ganze mal gründlich zu Studieren.
Beabsichtige 700 Euro zum Fenster raus zu schmeißen! Warte auf ein günstiges Angebot vom Train á Grande Vitesse bevor ich zuschlage! Deswegen schaue ich des öfteren wer was, zu welchem Preis hat. Und dann gibt es noch ein anderes Hobby von mir, was ebenfalls unheimlich viel Zeit verbraucht!

http://de.wikipedia.org/wiki/Schach
Und da sind zur Zeit jede Menge Turnierpartien für mich zu spielen
(Mannschaftskämpfe, Stadtmeisterschaft)
Da zur Zeit auch noch die WM läuft, gehen da auch noch mal ein paar Stunden weg!


Ich danke euch recht herzlich für die Hilfe!

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?

#45 von st-oldie , 14.11.2014 19:36

Hallo Diego,

Zitat von DiegoGarcia
FreeBasic wiki: Thema Operatoren
http://www.freebasic.net/wiki/wikka.php?...tPgOpArithmetic
http://www.freebasic.net/wiki/wikka.php?wakka=CatPgOpLogical
Alwims FreeBasic kennt Bit-Verschiebung SHL und SHR, und Bit-weise Verknüpfung AND, OR, XOR

…und http://www.freebasic.net/wiki/wikka.php?...tPgOpAssignment
Zuweisungsoperatoren, z.B. AND= und OR= und SHL= und SHR=



prima, danke. Ja dann sollte es kein Problem sein, ein CAN Paket nach der Doku von Märklin zusammenzubauen.

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?

#46 von st-oldie , 14.11.2014 20:13

Hallo ALWIM,

Zitat von ALWIM

Zitat
Und hast wahrscheinlich auch Probleme mit meinem Code.


Im Moment weiß ich noch nicht welches Basic das ist.
Ich tippe auf Visual Basic?




Nein, mein Code ist in C geschrieben. Als ich zum erstenmal mit Basic in Berührung gekommen bin, war das tatsächlich nicht ernst zu nehmen: Zeilennummern, keine richtigen Funktionen, ... Basic Dialekte gibt es viele. Auch viele, die das ursprünglich spartanische Basic erweitern, so daß Basic auch besser für größere Projekte eingesetzt werden kann.

Und dann kam bei mir beruflich hauptsächlich C und etwas C++, so daß ich auch privat dabei geblieben bin.

Zitat von ALWIM
Ich muss ja nur die entsprechenden Werte zusammenrechnen, wenn ich das richtig sehe?



Genau. Man kann die Werte auch arithmetisch errechnen. Aber Bitmanipulationen sind für dieses Problem einfacher und bei Arithmetik gibt es Fallstricke.

Zitat von ALWIM

Zitat
Ich vermute aus deinen Fragen und Problemen, daß du mit Bitmanipulation und auch der Darstellung von Zahlen im Computer keine Erfahrung hast?


Ahnung bei der Darstellung von Zahlen, habe ich denke schon. Bitmanipulation eher nicht. Habe ich noch nicht gemacht.




Wenn dir also Bits, Hexdarstellung, .. geläufig sind, dann ist die Ausgangsbasis doch nicht so schlecht.

Du kannst dir ja überlegen, ob du dir mal anschaust, was bitweises OR, AND, NOT und SHIFT ist, wenn du da noch unsicher bist. Oder wenn ich das mal kurz erklären soll, sag hier Bescheid. Dann kann ich das nächste Woche mal kurz zusammenfassen.

Und vielleicht kann ich ja danach mal versuchen, die Beschreibung von Märklin nochmals etwas einfacher und anschaulicher zu erklären. Vielleicht interessiert die Aufschlüsselung der CAN Id auch andere. Soweit ich gesehen habe, gab es in einem anderen Thread ja auch Fragen zum Aufbau der CAN Frames.

Vielleicht ist Diego so freundlich, dann da weiterzuhelfen, wo es um eine konkrete Umsetzung auf BASIC geht. Da ich damit zuwenig vertraut bin, würde es bei mir länger dauern und evtl. Fehler enthalten.

Zitat von ALWIM

Zitat
Wie schon geschrieben wurde, handelt es sich nicht um Strings, sondern um Zahlen (long, 32 Bit) und Datenbytes.


Das ist mir klar, ich brauche letztendlich in meinem Programm nur einen String. So ist die Variable in der Bibliothek definiert.




Das ist kein Problem. Denn du kannst einen String ja als Abfolge von Bytes sehen. Ich weiß jetzt aber nicht aus dem Stehgreif, wie die Zuweisung in BASIC genau ist. In C ist ein char ja ein Byte, das man sowohl als Zahl als auch als darstellbares Zeichen ansehen kann. Aber in ein Zeichen eine Zahl zu schreiben, geht auch in Basic. Jedem Zeichen ist ja ein Zahlenwert zugeordnet, nämlich sein ASCII Code (bei 8 Bit Zeichensätzen, es gibt aber auch noch ander Codierungen).

Zitat von ALWIM
Ich habe mir mal in Freebasic ein Rouletteprogramm geschrieben. Das schreibt man nicht so einfach mal aus dem Nichts! Da braucht man schon Kenntnisse!



Das ist aber trotzdem noch ein Unterschied, ob du ein Programm mit GUI entwickelst, das mit einem Menschen interagiert oder eine Steuerung eines Geräts. Bei der Gerätesteuerung wird es in der Regel technischer und mathematischer. Aber zumindest beherrschst du dein Handwerkszeug.

Zitat von ALWIM
Ich danke euch recht herzlich für die Hilfe!



Also ich fand das meiste hier noch nicht so hilfreich. Gemessen an den 2 Seiten Thread ist das sogar ein schlechtes Verhältnis von Hilfreichem zu Nicht-Hilfreichem.

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?

#47 von DiegoGarcia , 14.11.2014 22:56

Zitat von st-oldie
Vielleicht ist Diego so freundlich, dann da weiterzuhelfen, wo es um eine konkrete Umsetzung auf BASIC geht. Da ich damit zuwenig vertraut bin, würde es bei mir länger dauern und evtl. Fehler enthalten.



Hallo Michael,

Na gut, dann stürzen wir uns mal in den FreeBasic ProgrammersGuide (wofür Handbücher doch gut sind):
http://www.freebasic.net/wiki/wikka.php?...CatPgProgrammer


Datentypen: in FreeBasic ist Integer 32bit oder 64bit gross:
http://www.freebasic.net/wiki/wikka.php?...tPgStdDataTypes
Wir wollen es aber etwas mehr einengen: „ULong“ ist 32bit Integer ohne Vorzeichen. Und „UShort“ ist 16bit Integer ohne Vorzeichen. Können wir auch gut gebrauchen. Und es gibt anders als in RB/Xojo in FreeBasic den Datentyp „Byte“, das sind 8bit ohne Vorzeichen.

Hexadezimale Schreibweise von Literals ist wie bei VB/RB/RealStudio/Xojo (s.o.):
http://www.freebasic.net/wiki/wikka.php?wakka=ProPgLiterals


Operatoren hatte ich ja oben schon gelistet:
http://www.freebasic.net/wiki/wikka.php?wakka=CatPgOperators

Da interessieren uns die Bit-Operatoren und die Shift-Operatoren:
http://www.freebasic.net/wiki/wikka.php?wakka=CatPgOpLogical
http://www.freebasic.net/wiki/wikka.php?...tPgOpArithmetic

Anders als in RB/RealStudio/Xojo gibt es in Freebasic „SHL“ und „SHR“, sowie die Bitmanipulation durch logische Operatoren „And“, „Or“ und „Xor“.

Dazu als Tipp an ALWIM: um zugewährleisten, dass ein ganzzahliger Wert (LongInt, Integer, Byte) wirklich nur 8 Bits „lang“ ist, kann man ihn logisch „And“ verknüpfen mit 255 = &hFF. Beispiel:

(270 AND 255) liefert 14, da 270 = &h10E, und 255 = &hFF, und ist somit identisch mit der Schreibweise (&h10E AND &hFF). Ich hoffe, ich hab’s nicht zu kompliziert gemacht.

Und zu unserem Glück gibt es auch in FreeBasic einen String-Concatenation-Operator "+":
http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgOpConcat


Für unser CAN-Paket müssen wir sicherstellen, dass die Bytes wirklich Bytes sind, d.h. nur 8 Bits lang. Und davon genau 13 Bytes. Nicht mehr und nicht weniger. Wenn wir dann eine Conversion „Zahlwert“ zu „String“ machen, können wir in FreeBasic die Funktion „CHR“ nehmen, wenn sichergestellt ist, das der Parameter, den wir an CHR übergeben, wirklich nur ein Byte groß ist. Andernfalls könnte dann auch evtl. ein Unicode-Character dabei herauskommen, und der wäre dann 2 Bytes lang. Und das wollen wir nicht. Für „CHR“ siehe die Übersicht der String-Funktionen:
http://www.freebasic.net/wiki/wikka.php?wakka=CatPgString
Bei anderen Basic-Compilern ist das oft anders.


Noch etwas: Array-Schreibweise ist in VB/RB/RealStudio/Xojo und FreeBasic mit runden Klammern:
http://www.freebasic.net/wiki/wikka.php?...ProPgArrayIndex
http://www.freebasic.net/wiki/wikka.php?wakka=ProPgArrays
Auch in FreeBasic ist als Default die Array-Indizierung mit "0" beginnend (zero-based indexing):

Zitat
When creating or resizing an array, if a lower bound is not specified it defaults to zero (0).

Dazu scheint es aber in FreeBasic auch explizite Möglichkeiten zu geben, so dass ich nun im folgenden davon mal Gebrauch machen will.


Somit habe ich jetzt mein obiges Beispiel dann mal nach FreeBasic portiert (wirkt auf mich dann aber doch wieder sehr PASCAL-lastig), ich hoffe, es enthält nicht zu viele Fehler (geht mir da wie Dir, Michael). Leider weiss ich aber immer noch nicht, wie in Freebasic die UDP-Sockets definiert sind. Deshalb nachwievor als „Dummy-Typ“ der Datentyp „UDPSocket“, der eine Routine zum Schreiben eines Strings enthält (so wie von ALWIM beschrieben, und so wie es auch in RB/RealStudio/Xojo (und wohl auch in VB) definiert ist):


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
Declare Sub SendeStopCS2(useThisSocket As UDPSocket)
 
Sub SendeStopCS2(useThisSocket As UDPSocket)
dim i As Integer // als Laufvariable
dim myDLC As Byte // Anzahl der Datenbytes im CAN-Paket, 1 Byte (eigentlich nur ein Nibble)
dim myPrio As Byte // Priorität des befehls, 1 Nibble (4 Bits)
dim myResponseBit As Byte // wenn wir als PC-Programm senden, ist dieses Bit immer 0
dim myStartWord As UShort // die Kombination aus Prio, Command und Responsebit
dim myUID As ULong // Zieladresse des Objektes auf dem CAN, 32 Bits
dim myHash As UShort // unser Hash, 16 Bits
dim myCommand As Byte // unser Befehl, 8 Bits
dim mySubCommand As Byte // unser Unterbefehl, 8 Bits
dim myDataBytes(0 to 7) As Byte // array[0..7] of Byte, immer genau 8 Bytes
 
dim mySendingString As String // diese Zeichenkette werden wir über das UDP-Socket senden
 
myPrio = 0 // wir haben keine Priorität
myCommand = &h00 // Systembefehl
mySubCommand = 0 // Stopp
myHash = &h4711 // wie im Beispiel, kann aber auch &h0300 sein (als Minimum)
myDLC = &h05 // 5 Bytes Nutzdatenlänge
myUID = &h00000000 // UID = 0 bedeutet: sende den Befehl an alle
 
// Inits
for i = 0 to 7 // Märklins Doku zählt auch von D0 .. D7
myDataBytes(i) = 0 // init array
next
 
// Kombination
myStartWord = ( ((myPrio SHL 12) + (myCommand SHL 1) + (myResponseBit AND 1)) AND &hFFFF )
myDataBytes(0) = ((myUID SHR 24) AND &hFF) // Big Endian encoding
myDataBytes(1) = ((myUID SHR 16) AND &hFF)
myDataBytes(2) = ((myUID SHR 8) AND &hFF)
myDataBytes(3) = (myUID AND &hFF)
myDataBytes(4) = mySubCommand
 
// wir stellen nun die Daten als String dar
mySendingString = Chr((myStartWord SHR 8) AND &hFF) + Chr(myStartWord AND &hFF)
mySendingString = mySendingString + Chr((myHash SHR 8) AND &hFF) + Chr(myHash AND &hFF)
mySendingString = mySendingString + Chr(myDLC AND &hFF)
for i = 0 to 7
mySendingString = mySendingString + Chr(myDataBytes(i) AND &hFF) // wir gehen mit "AND &hFF" auf Nummer sicher...
next
 
// Senden, wenn Socket offen
if (useThisSocket <> NIL) and (useThisSocket Is UDPSocket) and useThisSocket.IsOpen then
useThisSocket.WriteString(Left(mySendingString, 13)) // schreibe immer genau 13 Bytes
end
 
end Sub
 



Und latürnich kann man das auch kürzer kodieren, wenn man die kleinen didaktischen Hinweise nicht mehr brauchen tut.

BTW: zum Thema "CS2 Hash Berechnen" hatten wir ja vor kurzem noch das hier:
viewtopic.php?t=77840 - CAN Protokoll Aufschlüsselung? (Juni 2012)

Ciao
Diego


EDIT:
Beispiel für UDP via TSNE-Plugin für Freebasic: http://www.freebasic-portal.de/porticula...udpbas-755.html


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?

#48 von Bitnapper , 15.11.2014 09:33

Hallo ALWIM!

Zitat von ALWIM
[...] ich kann mit Basic sogar auf die WinApi oder auf OpenGL zugreifen!
Mit Basic kann ich alles machen, was ich mit C++ auch kann! Vieles sogar einfacher!!!


Für native Windows-Programme mit grafischer Benutzeroberfläche ist Visual Basic sicher eine Option. Ich selber habe schon mit C# gearbeitet, was die Vorzüge konsequenter Objektorientierung mit vollem Zugriff auf die Windows-API verbindet ohne den Ballast von C++.

Meine Steuersoftware realisiere ich in Java. Das ist mit C# vergleichbar und hat den Vorteil der Plattformunabhängigkeit. So kann ich meinen Code z. B. sowohl für Windows-Clients auch auch für Android-Apps verwenden. Der Zugriff auf die Windows-API ist dank Java Native Access problemlos möglich.

Zitat
Theoretisch könnte ich in Basic Assembler Programme schreiben. Der Basic Compiler kann Assembler Codes verarbeiten.


Das solltest Du konsequent vermeiden. Alle für die Modellbahnsteuerung benötigten Funktionen sind mit Hochsprachelementen bzw. über APIs ansprechbar. Einzige Ausnahme wäre, wenn Du eigene Hardware am PC betreiben willst, für die es keine Treiber gibt, und den I/O selber abwickeln musst.

Auch aus Performancegründen sehe ich keinen Grund, für die Modellbahnsteuerung Assemblerprogrammierung einzusetzen.

Viel Erfolg und beste Grüße

Bitnapper


Kein Alkohol ist auch keine Lösung!


 
Bitnapper
InterRegio (IR)
Beiträge: 144
Registriert am: 01.10.2010
Gleise C-Gleis
Spurweite H0
Stromart AC, Digital


RE: Software schreiben zum steuern von Loks?

#49 von ALWIM , 16.11.2014 12:49

Zitat
Beispiel für UDP via TSNE-Plugin für Freebasic: http://www.freebasic-portal.de/porticula...udpbas-755.html

Das Beispiel kenne ich! Habe es seit Monaten auf meinem Rechner drauf! War ursprünglich geplant für ein anderes Projekt.

Zitat

Zitat
Theoretisch könnte ich in Basic Assembler Programme schreiben. Der Basic Compiler kann Assembler Codes verarbeiten.


Das solltest Du konsequent vermeiden.



Muss ich sowie so, da ich von Assembler keine Ahnung habe!

Ich danke euch vielmals für die Antworten!

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?

#50 von st-oldie , 17.11.2014 18:29

Hallo Diego

Zitat von DiegoGarcia
Na gut, dann stürzen wir uns mal in den FreeBasic ProgrammersGuide (wofür Handbücher doch gut sind):
http://www.freebasic.net/wiki/wikka.php?...CatPgProgrammer



Das reinstürzen wollte ich eigentlich für mich vermeiden. Ich hatte bisher fast keinen Kontakt mit BASIC. Und ich wollte meine Arbeit hier auch überschaubar halten und nicht eine weitere Programmiersprache nur für diesen Thread lernen.

Aber vielen Dank für deine Auflistung.

Zitat von DiegoGarcia
BTW: zum Thema "CS2 Hash Berechnen" hatten wir ja vor kurzem noch das hier:
viewtopic.php?t=77840 - CAN Protokoll Aufschlüsselung? (Juni 2012)



Das ist alles kein Problem. Ich hab selbst eine fertige Software, die die Nachrichten codieren und decodieren kann. Und auch eine Bridge zwischen Ethernet und CAN ist. Und weder MS2 noch die Märklin App haben sich über meine Pakete beschwert. Deshalb hab ich mich ja hier auch eingemischt.

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


   


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