RE: CAN Protokoll Aufschlüsselung?

#1 von 218er , 08.06.2012 18:57

Hallo ihr alle,

wie ihr vielleicht wisst beschäftige ich mich schon länger mit dem Thema SPS->Verbindung Märklin Digital (6021 oder/und CS2). Dazu hab ich eine Frage, in einem andern Thread hab ich ja gesagt, dass ich einen SPS-gesteuerten Sbhf plane bzw. baue. Anfangs wollte ich die Weichen direkt über eine digitale Ausgangskarte der SPS schalten, und zum Stoppen der Züge einfach den Strom im Gleis abstellen sobald der vorderste Zugteil eine vorbestimmte Position X erreicht hat, welche über einen Reedkontakt der SPS signalisiert dass der Zug am Haltepunkt angekommen ist.

Mittlerweile hab ich mich aber nebenher auch noch mit dem Thema http://stummiforum.de/viewtopic.php?f=21&t=68788 beschäftigt, dazu auch noch mit dem Einfließenlassen der Weichenstellungsrückmeldung ins SPS-Programm. Die Eingänge dafür sind schon integriert, jedoch ist noch das Problem, dass ich im Schattenbahnhof keinen Sichtkontakt zu den Zügen hab, und auch nicht will ,allenfalls mit ner Webcam zum ab und an mal gucken ob alles ok ist, aber im Großen und Ganzen solls von alleine laufen. Da das mit dem Anhalten der Züge durch stromlosmachen nicht so ganz das ist was ich mir vorgestellt hab, weil da immer das Problem auftauchen kann dass die Züge falsch rum losfahren.

Also hab ich mir gedacht, ich könnte doch versuchen die Züge mittels der SPS aktiv zu steuern, in dem ich direkt auf die gefahrene Geschwindigkeit einwirke und die entsprechenden Befehle über eine CAN-Karte und den CAN-Bus direkt in die CS2 einspeise, oder per Interface 6051 in die Control Unit 6021, und dann per Connect 60128 in die CS2. Da ist aber die Frage, wie sieht das CAN-Protokoll aus, und kann man überhaupt von außen mit ner Industriesteuerung da Signale drüberschicken? Also sowohl zum Schalten der Weichen, Steuern der Züge und der Rückmeldung der Weichenposition?

Wär nett wenn da einer was dazu schreiben könnte, insbesondere zur Anbindung der SPS an die 6021 (per Interface 6051) oder die CS2 (per Connect 60128).

Danke euch und Gruß

Gregor


Loks und Wagen ohne Kulissenführung, Pikoloks mit Smartdecoder und nicht maßstäbliche Wagen können mir gestohlen bleiben...


218er  
218er
EuroCity (EC)
Beiträge: 1.119
Registriert am: 18.02.2011
Gleise Selbstbau mit RP 25 und maßstäblichen Weichen
Spurweite H0
Steuerung Eigenbau
Stromart DC, Digital


RE: CAN Protokoll Aufschlüsselung?

#2 von Sandblech , 08.06.2012 20:48

Hallo Gregor,

kennst du schon das:

http://medienpdb.maerklin.de/digital2200...otokoll-2_0.pdf

und das:

http://can-digital-bahn.com

Da findest noch die eine oder andere Info. Grundsätzlich sollte deine Idee mit CAN kombinierbar sein.


Gruß
Michael


Sandblech  
Sandblech
InterRegio (IR)
Beiträge: 107
Registriert am: 17.02.2012


RE: CAN Protokoll Aufschlüsselung?

#3 von 218er , 08.06.2012 21:31

Hallo Michael,

das zweite kenn ich, die Infos aber irgendwie nicht gefunden. Vom ersten hab ich auch schon gehört, ich wusste aber nicht mehr genau wo es ist auf der Märklin HP. Es überrascht mich aber dass die das so einfach veröffentlichen. Ein bisschen versteckt ists aber schon. Das mit dem CAN-Bus ist an sich für mich kein unbekanntes Gebiet, damit hab ich ja täglich zu tun beim Arbeiten. Nein es geht nicht um KFZ Allerdings durchschau ichs noch nicht so genau wie das mit dem CAN-Bus und der Moba funktionieren soll, bzw. welche Daten die SPS in welchem Format an die CS2 schicken muss damit sich da was tut, und wie die Rückmeldungen von der CS2 in der SPS ankommen.

Danke für die Links

Gruß Gregor


Loks und Wagen ohne Kulissenführung, Pikoloks mit Smartdecoder und nicht maßstäbliche Wagen können mir gestohlen bleiben...


218er  
218er
EuroCity (EC)
Beiträge: 1.119
Registriert am: 18.02.2011
Gleise Selbstbau mit RP 25 und maßstäblichen Weichen
Spurweite H0
Steuerung Eigenbau
Stromart DC, Digital


RE: CAN Protokoll Aufschlüsselung?

#4 von Andreas85 , 09.06.2012 18:23

Zitat von 218er
Hallo Michael,

das zweite kenn ich, die Infos aber irgendwie nicht gefunden. Vom ersten hab ich auch schon gehört, ich wusste aber nicht mehr genau wo es ist auf der Märklin HP. Es überrascht mich aber dass die das so einfach veröffentlichen. Ein bisschen versteckt ists aber schon. Das mit dem CAN-Bus ist an sich für mich kein unbekanntes Gebiet, damit hab ich ja täglich zu tun beim Arbeiten. Nein es geht nicht um KFZ Allerdings durchschau ichs noch nicht so genau wie das mit dem CAN-Bus und der Moba funktionieren soll, bzw. welche Daten die SPS in welchem Format an die CS2 schicken muss damit sich da was tut, und wie die Rückmeldungen von der CS2 in der SPS ankommen.

Danke für die Links

Gruß Gregor

Hallo Gregor,
am einfachsten kommt man rein, wenn man die CS2 mit dem "anderen Gerät" also PC oder SPS verbindet, und einfach mal beobachtet, was die CS2 zum Beispiel beim Schalten einer Weiche macht, oder beim Schalten einer Funktion, oder beim Anfahren einer Lok.

Es ist übrigens keine CAN-Karte in der SPS erforderlich, wenn die eh schon Ethernet drin hat. Dann reicht es in der CS2 das CAN-Ethernet-Gateway zu aktivieren. Danach werden die Daten am CAN-Bus transparent auf dem Ethernet zugänglich. Umgekehrt nimmt die CS2 dann Pakete über UDP an, und legt sie auf ihren CAN-Bus.

Auf diese Art umgeht man auch das Problem der galvanischen Trennung elegant. Ethernet ist nicht galvanisch getrennt. Bei CAN müsste man da besonders drauf achten. (Wenn das nicht beachtet wird, gibts eventuell "vagabundierende" Ströme

Andreas


CS2 4.1, GFP 2.43 MS2 2.1 FritzBoxFonWlan OpenWrt MobileStation App 8) manjaro


Andreas85  
Andreas85
Metropolitan (MET)
Beiträge: 2.970
Registriert am: 11.01.2009
Ort: Albershausen
Gleise CGleis
Spurweite H0
Steuerung CS2+CS3
Stromart Digital


RE: CAN Protokoll Aufschlüsselung?

#5 von 218er , 09.06.2012 21:23

Hallo Andreas,

ähm kannst dus auch so erklären dass ich kapiere?

Wie genau muss ich das innerhalb der SPS auf die Ethernetbuchse schicken? Als Wort oder Byte oder Doppelwort oder wie geht das?

Gruß


Loks und Wagen ohne Kulissenführung, Pikoloks mit Smartdecoder und nicht maßstäbliche Wagen können mir gestohlen bleiben...


218er  
218er
EuroCity (EC)
Beiträge: 1.119
Registriert am: 18.02.2011
Gleise Selbstbau mit RP 25 und maßstäblichen Weichen
Spurweite H0
Steuerung Eigenbau
Stromart DC, Digital


RE: CAN Protokoll Aufschlüsselung?

#6 von Andreas85 , 12.06.2012 19:56

Zitat von 218er
Hallo Andreas,

ähm kannst dus auch so erklären dass ich kapiere?

Wie genau muss ich das innerhalb der SPS auf die Ethernetbuchse schicken? Als Wort oder Byte oder Doppelwort oder wie geht das?

Gruß

Ok also ausführlicher:

Auf dem CAN werden Datenpakete mit 29Bit Kennung, 4Bit Meldungslänge und bis zu 8Byte Daten verwendet.
Auf dem Ethernet werden UDP-Pakete verwendet. Die bestehen aus einer Ziel-IP, aus einem Ziel-Port, und aus einer beliebigen Anzahl "Bytes"
Die CS2 verpackt jedes CAN-Paket in ein UDP-Packet mit der Länge 13. Das sind dann 4+1+8=13 Bytes (siehe auch Seite 7 in der Doku)

Ich würde auf keinen Fall mit dem Senden anfangen ! (Zu VilLe Fählermüglichkaiten)
Versuch zuerst mal ein Paket der CS2 aufzufangen

Dazu mußt du suchen, ob die SPS überhaupt UDP empfangen kann, und wie man dann den Port 15730 für den Empfang von Paketen einschaltet.

Ich hab das nicht mit einer SPS sondern mit einem PC gemacht. Aber wenn deine SPS Ethernet hat, und UDP kann, sollte das auch gehen.

Wenn du soweit bist, gehts weiter.
Andreas


CS2 4.1, GFP 2.43 MS2 2.1 FritzBoxFonWlan OpenWrt MobileStation App 8) manjaro


Andreas85  
Andreas85
Metropolitan (MET)
Beiträge: 2.970
Registriert am: 11.01.2009
Ort: Albershausen
Gleise CGleis
Spurweite H0
Steuerung CS2+CS3
Stromart Digital


RE: CAN Protokoll Aufschlüsselung?

#7 von 218er , 13.06.2012 14:36

Danke Andreas, ich werd dann bei Bedarf mich wieder melden.


Loks und Wagen ohne Kulissenführung, Pikoloks mit Smartdecoder und nicht maßstäbliche Wagen können mir gestohlen bleiben...


218er  
218er
EuroCity (EC)
Beiträge: 1.119
Registriert am: 18.02.2011
Gleise Selbstbau mit RP 25 und maßstäblichen Weichen
Spurweite H0
Steuerung Eigenbau
Stromart DC, Digital


RE: CAN Protokoll Aufschlüsselung?

#8 von ronaldhelder ( gelöscht ) , 14.06.2012 20:09

Gregor,

die CAN daten, mit UDP gesendet, passen hier 'rein:

typedef struct
{
unsigned char Header[2];
unsigned char Hash[2];
unsigned char Length;
unsigned char UID[4];
unsigned char Data[4];
} TCan;

und zwar so:

#define ANSWERBIT 0x01

#define CMD_SYSTEM 0x0000
#define CMD_LOKDISCOVERY 0x0002
#define CMD_CDBGLEISREP 0x0202
#define CMD_MFX_BIND 0x0004
#define CMD_MFX_VERIFY 0x0006
#define CMD_LOK_SPEED 0x0008
#define CMD_LOK_DIR 0x000A
#define CMD_LOK_FUNCTION 0x000C
#define CMD_READ_CONFIG 0x000E
#define CMD_WRITE_CONFIG 0x0010
#define CMD_SET_SWITCH 0x0016
#define CMD_S88_POLLING 0x0020

// makros voor Märklin CS2
#define Clear(a) {memset(&a, 0, sizeof(a));};
#define SetCmd(a, b) {a.Header[0] = (b >> 8 ); a.Header[1] = (b & 0x00FF);}
#define GetCmd(a) (((a.Header[0] << 8 ) + a.Header[1]) & 0x01FF)
#define GetHash(a) ((a.Hash[0] << 8 ) + a.Hash[1])
#define Hash(a) {a.Hash[0] = 0x03; a.Hash[1] = 0x00;}

und dann z.B. für ein STOP commando:

Clear(CanTx);
SetCmd(CanTx, CMD_SYSTEM);
Hash(CanTx);
CanTx.Length = 5;
CanTx.Data[0] = 0x00; // Sub Cmd Stop

error = SendBytes(CanTx);


Happy Hunting


ronaldhelder

RE: CAN Protokoll Aufschlüsselung?

#9 von RSH-Rainer , 20.06.2012 17:59

Zitat von 218er
Hallo ihr alle,

wie ihr vielleicht wisst beschäftige ich mich schon länger mit dem Thema SPS->Verbindung Märklin Digital (6021 oder/und CS2).

Gregor



Hallo Gregor,
was verwendest Du denn für eine SPS?

Gruß Rainer


Vorstellungsbeitrag

Bahnhöfe aus aller Welt


RSH-Rainer  
RSH-Rainer
InterCity (IC)
Beiträge: 722
Registriert am: 07.05.2005
Ort: zwischen Ruhrgebiet und Sauerland
Gleise 2/3-L
Spurweite H0, 1
Steuerung DCC / MM
Stromart AC, DC, Digital, Analog


RE: CAN Protokoll Aufschlüsselung?

#10 von 218er , 30.06.2012 11:48

Zitat von Rainer


Hallo Gregor,
was verwendest Du denn für eine SPS?

Gruß Rainer



Hallo Rainer,

eine stinknormale 315er….wirds werden. Ich hab nur im Moment keine, da die die ich hatte nur von nem Kollege geliehen war zum Testen. Der braucht se jetzt aber wieder. Daher bin ich grad am Gucken nach ner eigenen, andauernd irgendwas leihen nervt ja irgendwie doch nur mit der Zeit, sowohl mich als auch den Besitzer…


Ich hab hier was gefunden, mit UDP…das müsste es doch eigentlich sein….
http://support.automation.siemens.com/WW...463&caller=view

Da gibts ja auch schon fertig programmierte Bausteine, ist ja praktisch.

Allerdings konnt ichs bisher nicht live testen, da ich immer noch keine CPU hab….

Ich hab mir das Programm mal runtergeladen von der Seite, allerdings werd ich da noch nicht ganz schlau draus, wie das mit den Sende- und Empfangsports der CS2 funktioniert….die CS2 sendet an den Port 15730 und empfängt mit 15731. In dem SPS Programm ist aber nur von einem Port die Rede…das wird ja denn so nicht gehen?

Ich glaub ich muss mir mal das was ronaldhelder geschrieben hat nochmal angucken.

Gruß Gregor


Loks und Wagen ohne Kulissenführung, Pikoloks mit Smartdecoder und nicht maßstäbliche Wagen können mir gestohlen bleiben...


218er  
218er
EuroCity (EC)
Beiträge: 1.119
Registriert am: 18.02.2011
Gleise Selbstbau mit RP 25 und maßstäblichen Weichen
Spurweite H0
Steuerung Eigenbau
Stromart DC, Digital


RE: CAN Protokoll Aufschlüsselung?

#11 von RSH-Rainer , 30.06.2012 17:25

Zitat von 218er
...
Ich hab mir das Programm mal runtergeladen von der Seite, allerdings werd ich da noch nicht ganz schlau draus, wie das mit den Sende- und Empfangsports der CS2 funktioniert….die CS2 sendet an den Port 15730 und empfängt mit 15731. In dem SPS Programm ist aber nur von einem Port die Rede…das wird ja denn so nicht gehen?
...


Vermutlich darfst Du 2 Verbindungen mit 2 Ids aufmachen.
- in der SPS den Port15730 zum Empfangen
- an den Port 15731 der CS23 zum Senden

Gruß Rainer


Vorstellungsbeitrag

Bahnhöfe aus aller Welt


RSH-Rainer  
RSH-Rainer
InterCity (IC)
Beiträge: 722
Registriert am: 07.05.2005
Ort: zwischen Ruhrgebiet und Sauerland
Gleise 2/3-L
Spurweite H0, 1
Steuerung DCC / MM
Stromart AC, DC, Digital, Analog


RE: CAN Protokoll Aufschlüsselung?

#12 von 218er , 30.06.2012 19:14

Zitat von Rainer

Vermutlich darfst Du 2 Verbindungen mit 2 Ids aufmachen.
- in der SPS den Port15730 zum Empfangen
- an den Port 15731 der CS23 zum Senden

Gruß Rainer



Wie genau meinst du das? So dass ich das ganze Programm quasi zweimal hab, das sich aber nur durch den Port unterscheidet?

Du schreibst da was von 2 lds? Was ist das lds? Oder heißt es ell oder iih, vor ds?

Gruß


Loks und Wagen ohne Kulissenführung, Pikoloks mit Smartdecoder und nicht maßstäbliche Wagen können mir gestohlen bleiben...


218er  
218er
EuroCity (EC)
Beiträge: 1.119
Registriert am: 18.02.2011
Gleise Selbstbau mit RP 25 und maßstäblichen Weichen
Spurweite H0
Steuerung Eigenbau
Stromart DC, Digital


RE: CAN Protokoll Aufschlüsselung?

#13 von Bitnapper , 30.10.2012 06:56

Schönen guten Morgen!

Mir ist noch nicht klar, wie UID-Vergabe und Hash-Berechnung funktionieren. Ich habe mal MS2 und Gleisbox belauscht. Da wird zunächst gepingt:

1
2
3
4
5
6
 
PingCommand
Prioritiy: 0x00
Command: 0x18
Hash: 0x4b00
Length: 0
Data:
 



Das hat ja wohl die MS2 initiiert, denn es kommt eine Antwort von der Gleisbox:

1
2
3
4
5
6
7
8
9
10
11
12
13
 
PongResponse
Prioritiy: 0x00
Response: 0x18
Hash: 0xbf6d
Length: 8
Data: 71 0x47 01000111
67 0x43 01000011
42 0x2a 00101010
-2 0xfe 11111110
1 0x01 00000001
39 0x27 00100111
0 0x00 00000000
16 0x10 00010000
 



Also TypeID 0x10 (Gleisbox 60112 und 60113) mit SoftwareVersion 0x0127 und Geräte-UID 0x47432afe. Habe ich das soweit richtig verstanden?

Nun will ich den Hash berechnen. Laut CAN CS2 Protokoll Kapitel 1.2.4 soll ich den UID Hash wie folgt berechnen: 16 Bit High UID XOR 16 Bit Low der UID. Also 0100011101000011 XOR 0010101011111110 = 0110110110111101. Bit 9 - 7 müssen zwecks CS1 Unterscheidung durch 110 ersetzt werden, das ergibt 0110111100111101 bzw. 0x6F3D. Mitgelesen habe ich aber einen Hashwert von 0xbf6d. Wo liegt denn da bitte mein Denkfehler?

Wenn ich nun selber mit einem "Gerät" - z. B. einer Software via Ethernet (Kapitel 1.2.7) - mitreden will, suche ich mir dann aus dem Adressschema (Kapitel 1.3.1.2) eine als Privatanwender / Club eine Adresse im Bereich 0x1800 - 0x1BFF bzw. als Firma im Bereich 0x1C00 - 0x1FFF aus?

Danke & Gruß 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: CAN Protokoll Aufschlüsselung?

#14 von TT800 , 30.10.2012 12:09

Hallo,

meiner Erinnerung nach - als ich das ebenfalls nachempfunden habe - werden die 2 Bytes des XOR-Ergebnisses gewechselt, bevor mit 0x110 die Bits 7..9 überschrieben werden. Steht aber nirgends.


Viele Grüße,
Stephan
__________________________________________________________________________
[60211{60128connected}+60215{GUI:4.2.13|GFP:3.81}+60216{GUI3:2.4.1(0)|GFP3:12.113}+CS3webApp]
Insider seit 1993 - HeimatBf: MIST Wien - http://www.insider-stammtisch.net/


TT800  
TT800
Metropolitan (MET)
Beiträge: 3.896
Registriert am: 31.07.2009
Ort: Weinviertel, Niederösterreich
Spurweite H0
Steuerung Märklin
Stromart Digital


RE: CAN Protokoll Aufschlüsselung?

#15 von Bitnapper , 30.10.2012 12:58

Danke Stephan,

so gehts!

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: CAN Protokoll Aufschlüsselung?

#16 von Andreas85 , 30.10.2012 16:33

Zitat von TT800
Hallo,

meiner Erinnerung nach - als ich das ebenfalls nachempfunden habe - werden die 2 Bytes des XOR-Ergebnisses gewechselt, bevor mit 0x110 die Bits 7..9 überschrieben werden. Steht aber nirgends.



Das ist das Ewige Problem mit Hi-Byte/Low-Byte -Order

Andreas


CS2 4.1, GFP 2.43 MS2 2.1 FritzBoxFonWlan OpenWrt MobileStation App 8) manjaro


Andreas85  
Andreas85
Metropolitan (MET)
Beiträge: 2.970
Registriert am: 11.01.2009
Ort: Albershausen
Gleise CGleis
Spurweite H0
Steuerung CS2+CS3
Stromart Digital


RE: CAN Protokoll Aufschlüsselung?

#17 von [Tobi] ( gelöscht ) , 04.07.2014 14:33

Hallo alle zusammen,

ich bin neu hier im Forum und weiß nicht recht, ob ich diesen alten Thread wieder zum leben erwecken sollte, obwohl er vom Thema sehr gut passt, oder einen neuen eröffnen sollte. Ich schreibe erst einmal hier.

Also ich möchte mich auch mit dem CAN Protokoll beschäftigen. Dazu wurde mir erst einmal die MS2 und die Anschlussbox 60113 zur Verfügung gestellt. Erste Botschaften zwischen diesen Geräten konnte ich auch bereits belauschen. Nur leider ist mir die Berechnung der Kollisionsauflösung (Hashcode) der Meldungskennung, trotz des CAN CS2 Protokolls (Version 2) von Märklin unklar.
Zwischen der MS 2 und der Anschlussbox sind in regelmäßigen Abständen zwei Nachrichten zu erkennen.
ID: 30CF4B
DIR: RX
DLC: 0
Data:0
und
ID: 31DB5E
DIR: RX
DLC: 8
Data: 47 43 99 9A 01 27 00 10
Nach meinen ersten Erkenntnissen müsste es sich dabei um den Ping des Teilnehmers handeln (Märklin Protokoll V2 Seite 41)
Nun möchte ich gerne hiervon den Hash Code (Seite 6 des Protokolls) berechnen. Z.B. von der unteren Nachricht
Dazu müssten doch erst einmal die 16 Bit High UID und die 16 Bit LOW UID XOR verknüpft werden. Also 47 43 XOR 99 9A. Ich erhalte demnach DED9 (in binärer Schreibweise 1101 1110 1101 1001) Die Bits 7 bis 9 werden ausgeblendet und die höherwertigen Bits 10 bis 15 um 3 Bits nach rechts verschoben. Die ersten 3 Bits erhalten den Wert "0" Es ergibt sich 0001 1010 1101 1001 (also in hexadezimaler Schreibweise 1BD9)
Da der Wert 1BD9 ungleich DB5E ist, habe ich entweder ein Verständnisproblem der Beschreibung von Märklin oder mich einfach nur verrechnet.

Ich hoffe Ihr könnt mir helfen

@Bitnapper: Welches Programm hast du verwendet? Ich erhalte nur die ID, also die komplette Meldungskennung. Du hattest in deinem alten Beitrag bereits die Meldungskennung unterteilt in Priorität, Response und Hash angegeben. Ich gehe bisher einfach davon aus, dass meine fehlenden Bits der 29 Bit langen Meldungskennung "null" sind. Damit aber auch die Priorität null ist. Da bin ich mir aber auch unsicher, ob dass sein kann.

Viele Grüße Tobias


[Tobi]

RE: CAN Protokoll Aufschlüsselung?

#18 von Bitnapper , 06.07.2014 22:16

Hallo Tobias!

Zitat von [Tobi]
Welches Programm hast du verwendet?


Das einzige "fertige" Programm zur Anzeige des CS2CAN-Nachrichtenaustausches, das ich kenne, ist CServer 2010 von Rainer Serwe.

Ich selber arbeite an einer Java-Bibliothek für die Kommunikation mit der CS2. Daher stammten auch meine Angaben hier im Thread. Davon habe ich allerdings noch nichts veröffentlicht, ist einfach noch zu experimentell.

Was nutzt Du? Vielleicht können wir Ideen austauschen oder sogar Quellcode...

Zitat
Ich erhalte nur die ID, also die komplette Meldungskennung. Du hattest in deinem alten Beitrag bereits die Meldungskennung unterteilt in Priorität, Response und Hash angegeben.


Das CS2CAN-Protokoll von Märklin ist proprietär, deshalb zeigt CAN-Standardsoftware die CS2-typische Aufteilung nicht an. Nach meinem Verständnis muss die Konvertierung von Standard-CAN nach CS2CAN so erfolgen:

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
 
	@Override
public byte getPriority()
{
return (byte) ((this.nativeMessage.getId() &gt;&gt; 25) &amp; 0xF);
}
 
@Override
public byte getCommand()
{
return (byte) ((this.nativeMessage.getId() &gt;&gt; 17) &amp; 0xFF);
}
 
@Override
public boolean isResponse()
{
return 0x10000 == (this.nativeMessage.getId() &amp; 0x10000);
}
 
@Override
public short getHash()
{
return (short) (this.nativeMessage.getId() &amp; 0xFFFF);
}
 
@Override
public byte getLength()
{
return this.nativeMessage.getLength();
}
 
@Override
public byte[] getData()
{
return this.nativeMessage.getData();
}
 
 



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: CAN Protokoll Aufschlüsselung?

#19 von DiegoGarcia , 07.07.2014 12:10

Hallo Tobias,

Hier ist des Rätsels Lösung.
- Hash hat die Aufgabe, anzuzeigen, dass es sich um gültige CS2-Befehle handelt. Dazu sind die Bits 7, 8 und 9 reserviert. Sie müssen das Bitmuster "110" enthalten.

- Jeder Absender soll seinen eigenen Hash verwenden. Wie er den generiert empfiehlt zwar Märklin, die Praxis zeigt aber, dass externe Software den universalen Hash „0x0300“ verwendet (so auch SDL und C2XH (welche auch ein CAN-Protokoll anzeigen können), evtl. auch TC und WDP).

- Beim Hashcode 0x0300 liegt entweder die UID 0x0000 oder 0xFFFF zugrunde, was also mit real existierender CS2/CAN-Hardware (MS1, CS1, ECoS, CS2, Detectoren) nicht kollidieren sollte.

In Deinem Beispiel kommt man vom gesendeten Hash 0xDB5E wie folgt zur UID:

1. UID wird ge-XOR-ed = 0x4347 XOR 0x9A99 = 0xD9DE

2. Es werden keine Bits verschoben (Faulheit), sondern einfach die Bits 7, 8 und 9 auf “110” gesetzt: (0xD9DE OR 0x0300) AND 0xFF7F = 0xDB5E = 0b1101 1011 0101 1110. Und das ist genau der Hash des Ping-Reply aus Deinem obigen Beispiel.

Auf das Einsparen der Bitverschiebung muß man erstmal kommen. Es bleibt festzuhalten: man kann vom Hashcode nicht auf die UID schließen, da nicht bekannt sein kann, wie der Teilnehmer seinen Hash erzeugt hatte und auch nicht bekannt ist, wie die überschriebenen bzw. verschobenen Bits vorher ausgesehen haben. Außerdem ist BIG Endian einzuhalten.

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: CAN Protokoll Aufschlüsselung?

#20 von st-oldie , 08.07.2014 18:05

Hi Bitnapper und Tobias,

Zitat von Bitnapper
Das einzige "fertige" Programm zur Anzeige des CS2CAN-Nachrichtenaustausches, das ich kenne, ist CServer 2010 von Rainer Serwe.

Ich selber arbeite an einer Java-Bibliothek für die Kommunikation mit der CS2. Daher stammten auch meine Angaben hier im Thread. Davon habe ich allerdings noch nichts veröffentlicht, ist einfach noch zu experimentell.

Was nutzt Du? Vielleicht können wir Ideen austauschen oder sogar Quellcode...



Ich hab da auch schon fertigen Code.

Ich hab ein kleines System für einen ARM basierten Einplatinencomputer (BeagleBone Black) geschrieben, um eine Bridge zwischen CAN und Ethernet zu realisieren. Das System besteht aus mehreren Daemons, die per Socket miteinander kommunizieren. Damit kann ich beliebige Protokolle einfach durch einen weiteren Daemon integrieren. Mein BBB wird einfach an den CAN Bus (habe einen Startpunkt 2 des CDB Projekts) und an mein Ethernet angeschlossen. Die Software ist in C geschrieben.

Aktuell habe ich (u.a.) einen Encoder und Decoder für die MS2/CS2 CAN Nachrichten zur Gleisbox. Einen Tracer, der die CAN Nachrichten dekodiert ausgibt und einen CS2-Ethernet Client. Damit sieht mein BBB auf der Ethernet-Seite für die Märklin App wie eine CS2 aus. Mit dem System bin ich in der Lage, der Märklin APP eine Lokliste mit allen Fahrzeugen meiner MS2 zu geben und meine Loks mit der Märklin APP zu steuern.

Magnetartikel sind ungetestet, weil ich noch keine Dekoder eingebaut habe.

Ich hab damit schon alle hier angesprochenen Probleme wie Erzeugen des Hash, Kodieren und Dekodieren der Meldungskennung und Datenbytes gelöst. Die Encoder/Decoder sind schon komplett für sämtliche Nachrichten implementiert, soweit sie von Märklin dokumentiert sind. Encoder und Decoder sind in einer Lib zusammengefaßt und ich hab auch etwas Doku, wie das zu benutzen ist.

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: CAN Protokoll Aufschlüsselung?

#21 von [Tobi] ( gelöscht ) , 09.07.2014 17:44

Hallo alle zusammen,

vielen Dank für eure Antworten. Leider bin ich noch totaler Anfänger auf diesem Gebiet.
Daher verstehe ich nicht, wie du, Diego auf die XOR Verknüpfung von 0x4247 und 0x9A99 kommst. Ich dachte es müsste 0x4742 xor 9A99 sein. Könntest du mir bitte diesen Umstand genauer Erörtern?

Nach meinem Wissen müsste die hex. Zahl 4743999A bei BIG bzw. LITTLE Endian wie folgt gespeichert werden:

Big Endian: 47 43 99 9A
Little Endian: 9A 99 43 47

Da hier der Big Endian vorliegt, müssten doch die Bytes intern folgende Inhalte enthalten:
D-Byte 0: 47
D-Byte 1: 43
D-Byte 2: 99
D-Byte 3: 9A

Da ich wie gesagt noch Anfänger bin, möchte ich erst einmal das Protokoll einigermaßen verstehen, bis ich was programmieren kann.
In der Hochschule habe ich derzeit die Möglichkeit den CAN Bus mit der Software CANoe zu belauschen, aber ich würde gerne auch verstehen was passiert. Daher die Fragen. (Ich studiere übrigens auch nicht Informatik, sondern Energietechnik)

Der nachfolgende Screenshot zeigt meine ausgelesene Daten



Viele Grüße Tobias


[Tobi]

RE: CAN Protokoll Aufschlüsselung?

#22 von DiegoGarcia , 09.07.2014 19:01

Hallo Tobias,

laut cs2CAN-Protokoll-2_0.pdf, Seite 41, befindet sich wie von Dir richtig angegeben für den Ping-Befehl 0x18 (CAN-ID 0x30) die „Absender-Geräte-UID“ in den Daten-Bytes D-Byte 0 (High) bis D-Byte 3 (Low). Ist also in Big Endian hinterlegt.

In Deinem Fall „47 43 99 9A“. Weiter oben hatte Stephan schon geschrieben in 2012

Zitat von TT800
meiner Erinnerung nach - als ich das ebenfalls nachempfunden habe - werden die 2 Bytes des XOR-Ergebnisses gewechselt, bevor mit 0x110 die Bits 7..9 überschrieben werden. Steht aber nirgends.

Zitat von Andreas85
Das ist das Ewige Problem mit Hi-Byte/Low-Byte -Order


Ich muß zugeben, dass ich diesen Bytewechsel vor dem XOR gemacht habe. Also hier nun korrigiert nach Stephan:

1. UID wird ge-XOR-ed = 0x4743 XOR 0x999A = 0xDED9

2. Bytereihenfolge ändern auf Little Endian liefert 0xD9DE

3. Es werden keine Bits verschoben (Faulheit), sondern einfach die Bits 7, 8 und 9 auf “110” gesetzt: (0xD9DE OR 0x0300) AND 0xFF7F = 0xDB5E = 0b1101 1011 0101 1110. Und das ist genau der Hash des Ping-Reply aus Deinem obigen Beispiel.

Entschuldige bitte meinen Rechenfehler. Sorry. Ob aber dieser Bytewechsel bei der Hash-Codierung Pflicht ist, weiss ich nicht. Wie gesagt, ich bevorzuge den Hashcode 0x0300 für meine Software.

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: CAN Protokoll Aufschlüsselung?

#23 von digitalbahner_1974 , 10.07.2014 07:20

Zitat von [Tobi]


Der nachfolgende Screenshot zeigt meine ausgelesene Daten



Viele Grüße Tobias



Wie komme ich als Privatmann an CANoe oder anders gefragt: Für wenn arbeitetst Du wirklich?


Viele Grüße
Stefan


„Es wurde schon alles gesagt, nur nicht von jedem“

Carl Valentin


digitalbahner_1974  
digitalbahner_1974
InterRegioExpress (IRE)
Beiträge: 277
Registriert am: 10.04.2012


RE: CAN Protokoll Aufschlüsselung?

#24 von [Tobi] ( gelöscht ) , 10.07.2014 15:52

Hallo Stefan,

wie ich bereits geschrieben habe studiere ich Energietechnik. Da ich mich bereits privat seit längerer Zeit mit Modelleisenbahnen beschäftige und das wohl auch das ein oder andere Mal in der Hochschule erwähnt habe, hat mir einer meiner Professoren vorgeschlagen, meine BA zur Ansteuerung einer Märklin Modelleisenbahn über den CAN Bus zu verfassen. Er möchte auf Grundlage der Erkenntnisse einen Laborversuch einrichten.
Das Problem ist nur, dass ich als Energietechniker "nur" die Grundlagenvorlesungen zur Programmierung gehört habe. Zudem kenne ich das (Märklin-) CAN Protokoll nicht. Bevor ich mich für oder gegen die BA zu diesem Thema entscheide, möchte ich bereits einige Informationen sammeln bzw. für mich entscheiden, ob ich mir das überhaupt zutraue. Ich muss auch bedenken, dass mir nur 8 Wochen Bearbeitungszeit zur Verfügung stehen.

Um meine Entscheidung zu treffen, habe ich bereits jetzt Zugriff auf einen Computer (der Hochschule) mit CANoe. Alle Versuche die ich jetzt mit diesem Programm durchführe sind rein privat und sollen mich lediglich bei meiner Entscheidung unterstützen.

Das Programm CANoe ist von Vektor als Demoversion (nach Registrierung) frei verfügbar. Allerdings kann mit der Demoversion nicht auf einen realen Bus zugegriffen werden. Das lizenzierte Programm mit CAN Interface wird für eine private Person nicht erschwinglich sein. (Ich habe die Rechnungen gesehen!) Falls ich mich für diese BA entscheide und (oder) das Projekt privat fortführen möchte fragte ich bereits Bitnapper nach seinem Programm.

Sonst gehe ich nur Aushilfsjobs nach. (und das meist auch nur in den Semesterferien)

Vielen Dank an alle die mir bisher weitergeholfen haben!

Viele Grüße Tobias


[Tobi]

RE: CAN Protokoll Aufschlüsselung?

#25 von st-oldie , 11.07.2014 18:46

Hallo Tobias,

Zitat von [Tobi]
wie ich bereits geschrieben habe studiere ich Energietechnik. Da ich mich bereits privat seit längerer Zeit mit Modelleisenbahnen beschäftige und das wohl auch das ein oder andere Mal in der Hochschule erwähnt habe, hat mir einer meiner Professoren vorgeschlagen, meine BA zur Ansteuerung einer Märklin Modelleisenbahn über den CAN Bus zu verfassen. Er möchte auf Grundlage der Erkenntnisse einen Laborversuch einrichten.
Das Problem ist nur, dass ich als Energietechniker "nur" die Grundlagenvorlesungen zur Programmierung gehört habe. Zudem kenne ich das (Märklin-) CAN Protokoll nicht. Bevor ich mich für oder gegen die BA zu diesem Thema entscheide, möchte ich bereits einige Informationen sammeln bzw. für mich entscheiden, ob ich mir das überhaupt zutraue. Ich muss auch bedenken, dass mir nur 8 Wochen Bearbeitungszeit zur Verfügung stehen.



So rein prinzipiell halt ich das nicht für zu anspruchsvoll. Du sollst ja keine komfortable Modellbahnsteuerung erstellen. Ich habe auf meinem BBB CAN Sockets. Von denene lese bzw. schreibe ich immer eine Struktur vom Typ "struct can_frame". Diese Struktur enthält die Felder "can_id", "can_dlc" und "data[8]". Der Aufbau jedes dieser Fehler ist in der Märklin Dokumentation beschrieben.

"can_dlc" gibt die anzahl Datenbytes an.

Welche Datenbytes zu setzen sind, ist für die meisten Nachrichten erklärt. Es ist so, daß oft Datentypen mit 32 oder 16 Bit auf die Datenbytes verteilt werden.

Die "can_id" setzt man mit etwas Bitshift zusammen.

Du kannst damit eine Funktion für das Erstellen des Hash oder für das Füllen eines CAN Frames mit 5-10 Zeilen erstellen. Also mit recht wenig Code.

Du findest meinen komplette C Code unter

https://code.google.com/p/usb2rail/sourc.../new_framework/

Z.B.:

calc_has.c berechnet den Has für eine voggebenen UID
canexxx.c sind die Encoder für die einzelnen Märlin Nachrichten
candxxx.c sind die Decoder für die einzelnen Märlin Nachrichten
cs2_encode.c füllt einen CAN Frame

Dort unter libs/mr_can findest du die Bibliothek für die Encoder/Decoder.

Gut, ich muß zugeben, daß ich beruflich embedded systems unter Linux programmiere und damit entsprechend Erfahrung habe.

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