RE: MS2 und Beaglebone Black als Zentrale

#1 von st-oldie , 06.12.2015 23:40

Hallo,

ich möchte euch meine Bastelei mit einem ARM basierenden Einplatinencomputer vorstellen. Ich hatte mich für den damals als preiswerte Version des Beaglebone neu erschienenen Beaglebone Black entschieden. Im Gegensatz zum Rapsberry Pi verfügt der dort eingesetzte Microcontroller auch über CAN Controller und kann mit einem passenden Cape direkt an den CAN Bus von Märklin angeschlossen werden. Der Banana Pi als mögliche Alternative war da noch nicht erschienen.

Im Gegensatz zur Lösung von Gerhard Bertelsmann, die quasi eine CS2 Slave darstellt und die CAN Nachrichen nur durchreicht, ist meine Lösung eine CS2 Master. Bei mir ist die MS2 immer noch für die Lokanmeldung zuständig. Nach einem Gespräch mit Herrn Kielkopf von Märklin läßt sich mein BBB die Loks von der MS2 geben und erstellt daraus die lokomotive.cs2. Alle anderen *.cs2 Dateien liegen auf dem BBB. Auf der Ethernet Seite verhält sich das BBB wie eine CS2 (soweit das dokumentiert ist). Ich hab meine Software so flexibel ausgelegt, daß ich auch weiter Protokolle (Roco Z21, ...) oder Geräte (CC-Schnitte oder andere CAN-USB Adapter) releativ leicht integrieren kann. Prinzipiell ist auch ein Modus vorgesehen, der nur die CAN Nachrichten durchleitet und damit quasi eine CS2 Slave emuliert. Dieser Modus ist aber nicht weiter getestet.

Meine Software, die für das Weiterleiten der CAN Nachrichten zuständig ist, steht auch auf meiner Homepage, wo das Projekt kurz vorgestellt wird, zum Download zur Verfügung. Dort gibt es auch eine SD Card Image. Das Image ist mittels gzip gepackt und kann, wie auch von Gerd beschrieben, auf eine SD Karte geschrieben werden. Damit startet das BBB auch dirket meine Software. Die Software enthält für den CAN Bus einen Client für die MS2 Nachrichten, der auf sockentCAN aufsetzt. Es läßt sich aber auch ein Client für can4linux integrieren. Damit sollte sich die Software recht leicht an andere UNIX Systeme anpassen.

Das Image enthält auch einen Rocrail Server, den ich aber noch nicht weiter getestet habe. Die Märklin APPs erkennen mein System als CS2 und funktionieren. Die Centralstation für PC (cs2.exe) erkennt meine Softwware als CS2 und lädt die CS2 Dateien. Die cs2.exe muß dabei als Slave laufen. Die *.cs2 Dateien (Magnetartikel, Fahrstraßen, Gleisbilder) können auf der cs2.exe editiert werden und werden anschließend auch wieder übernommen. Allerdings scheint der Timeout für die Erkennung einer Master CS2 in der cs2.exe etwas gerig zu sein. Unter Umständen benötigt man mehrere Versuche, bis das BBB erkannt wird. Dies kann aber auch mit einer realen CS2 der Fall sein. Meine Lösung sollte damit eigentlich mit jeder Software, die per Ethernet mit einer CS2 sprechen kann, funktionieren.



Nochmals Danke an Gerd, die mir das Cape mit den CAN Transceiver gebaut hat. Auf meinen Wunsch hat er eine RJ45 Buchse eingebaut, so daß sich das BBB direkt an das Bussytem des CAN-digital-Bahn Projekts anschließen läßt.

Raum und Ideen für Erweiterungen sind natürlich noch vorhanden. Z.B. ein Web Interface zur Konfiguration des Systems. Das Web Interface könnte man auch um Konfigseiten für Lokdecoder oder das CDB System erweitern. Die MAgnetartikel könnten evtl. auch mit der MS abgeglichen werden. Das ist zur Zeit nicht der Fall, da Fahrstraßen und Gleisbilder von den Magnetartikeln abhängen, aber nicht von der MS2 unterstützt werden.

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: MS2 und Beaglebone Black als Zentrale

#2 von bertr2d2 , 07.12.2015 21:37

Hallo,

schön das Deine Arbeit jetzt öffentlich erreichbar ist

Das Image habe ich herunter geladen, kann mich aber weder via Console noch per Netzwerk daran anmelden. nmap sagt, das nur der FTP-Port offen sei. Das liegt aber ggf. an meiner SD-Karte - werde sie mal neu formartieren.

Ich habe Deine Libs und Dein 'mrsystem' für den BananaPi übersetzt (Dein Programm ist ab jetzt im Image drin).

Mir ist dabei folgendes in Verbindung mit rocrail aufgefallen.
Gestartet sind: drehscheibe, mrms2, mrcs2eth und mrzentrale sowie Rocrail. Eine MS2 ist nicht angeschlossen.

Auf dem CAN-Bus sehe ich folgendes:

1
2
3
4
 

(2015-12-07 21:10:50.327092) can0 TX - - 00302F20 [0]
(2015-12-07 21:10:50.327676) can0 RX - - 0031533C [8] 47 43 7B 11 01 27 00 10

 


soweit ich beurteilen kann : CAN-PING und die Gleisbox antwortet -> alles OK.

Rocrail meldet:

1
2
3
4
5
6
7
 

20151207.210650.301 r0000E gbxreade (null) *trace dump( 0xB6D06868: length=13 )
offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |ASCII...........|
--------------------------------------------------------- |----------------|
00000000: 00 31 50 3C 08 47 43 7B 11 01 27 00 10 |.1P<.GC{..'.. |
20151207.210650.302 r9999E gbxreade OMCS2 2402 INVALID packet; CAN hash value: 0x503C
 
 


und mrms2:

1
2
3
4
5
6
7
8
9
10
 
select liefert 1
data on cmd socket to drehscheibe
new data available
read new comand frame from socket 7
send can data 0x4310300 8 to UDP client
0x47 0x43 0x7b 0x11 0x01 0x27 0x00 0x10
hash 0x503c resp 0x1 cmd 0x18 prio 0x0
add client socket 3
add outside udp socket 4
add outside tcp socket 5
 



Kann es sein, das der Hash durch Dein Programm etwas "manipuliert" wird ? Aus dem ursprünglichen Hash 0x533c wurde 0x503c.
Und Rocrail meckert dann zurecht darüber.

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.539
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital


RE: MS2 und Beaglebone Black als Zentrale

#3 von st-oldie , 07.12.2015 23:16

Hi Gerd,

Zitat von bertr2d2
schön das Deine Arbeit jetzt öffentlich erreichbar ist



Schön daß es dir gefällt. Du bist ja recht schnell dabei, es auzuprobieren

Zitat von bertr2d2
Das Image habe ich herunter geladen, kann mich aber weder via Console noch per Netzwerk daran anmelden. nmap sagt, das nur der FTP-Port offen sei. Das liegt aber ggf. an meiner SD-Karte - werde sie mal neu formartieren.



Eigentlich sollte neuformatieren nicht nötig sein. Du schreibst ja ein Image, also alle Sektoren neu. Bevor ich das Netzwerk auf DHCP umgesteltl habe, hab ich erfolgreich sowohl eine FTP als auch eine SSH Verbindung aufbauen können.

Zitat von bertr2d2
Ich habe Deine Libs und Dein 'mrsystem' für den BananaPi übersetzt (Dein Programm ist ab jetzt im Image drin).

Mir ist dabei folgendes in Verbindung mit rocrail aufgefallen.
Gestartet sind: drehscheibe, mrms2, mrcs2eth und mrzentrale sowie Rocrail. Eine MS2 ist nicht angeschlossen.

Auf dem CAN-Bus sehe ich folgendes:

1
2
3
4
 

(2015-12-07 21:10:50.327092) can0 TX - - 00302F20 [0]
(2015-12-07 21:10:50.327676) can0 RX - - 0031533C [8] 47 43 7B 11 01 27 00 10

 


soweit ich beurteilen kann : CAN-PING und die Gleisbox antwortet -> alles OK.

Rocrail meldet:

1
2
3
4
5
6
7
 

20151207.210650.301 r0000E gbxreade (null) *trace dump( 0xB6D06868: length=13 )
offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |ASCII...........|
--------------------------------------------------------- |----------------|
00000000: 00 31 50 3C 08 47 43 7B 11 01 27 00 10 |.1P<.GC{..'.. |
20151207.210650.302 r9999E gbxreade OMCS2 2402 INVALID packet; CAN hash value: 0x503C
 
 


und mrms2:

1
2
3
4
5
6
7
8
9
10
 
select liefert 1
data on cmd socket to drehscheibe
new data available
read new comand frame from socket 7
send can data 0x4310300 8 to UDP client
0x47 0x43 0x7b 0x11 0x01 0x27 0x00 0x10
hash 0x503c resp 0x1 cmd 0x18 prio 0x0
add client socket 3
add outside udp socket 4
add outside tcp socket 5
 



Kann es sein, das der Hash durch Dein Programm etwas "manipuliert" wird ? Aus dem ursprünglichen Hash 0x533c wurde 0x503c.
Und Rocrail meckert dann zurecht darüber.




Nicht manipuliert. Ich "kenne" ein paar CAN Messages, die dekodiert werden und ausgewertet werden. Und für diese wird der Hash wieder neu berechnet. Nicht unterstützte CAN Messages werden "raw" durchgereicht, wobei der Hash üernommen wird. Eigentlich ist mir da kein Fehler bewußt, da die cs2.exe und die Märklin Mobile Station damit zurecht gekommen sind.

Hast du auch die Konfigdatei mit übertragen? Den Modus, wo mein System nicht Zentrale spielt, hab ich nicht weiter getestet.

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: MS2 und Beaglebone Black als Zentrale

#4 von bertr2d2 , 08.12.2015 08:28

Hallo Michael,

Zitat von st-oldie
Hi Gerd,
Schön daß es dir gefällt. Du bist ja recht schnell dabei, es auzuprobieren

Ich spiele halt gerne - insbesondere mit neuem Spielzeug

Zitat

Zitat von bertr2d2

Kann es sein, das der Hash durch Dein Programm etwas "manipuliert" wird ? Aus dem ursprünglichen Hash 0x533c wurde 0x503c.
Und Rocrail meckert dann zurecht darüber.


Nicht manipuliert. Ich "kenne" ein paar CAN Messages, die dekodiert werden und ausgewertet werden. Und für diese wird der Hash wieder neu berechnet. Nicht unterstützte CAN Messages werden "raw" durchgereicht, wobei der Hash üernommen wird. Eigentlich ist mir da kein Fehler bewußt, da die cs2.exe und die Märklin Mobile Station damit zurecht gekommen sind.



Kann schon sein, das M*rklin selbst nicht so pingelig ist bzw. Ihre eigen Vorgaben nicht beachtet. Die PC-Software meldet sich z.B. so:

1
2
3
 

08:14:08.489 UDP-> CANID 0x00310000 [8] 00 00 00 00 01 01 ee ee
 
 


Das ist laut Doku auch kein gültiger Hash.
Ich denke aber, man sollte der Vorgabe soweit wie möglich, bzw. es sinnvoll erscheint, folgen. Externe Programme, wie in diesem Fall Rocrail, scheinen sich enger an der Doku zu orientieren.

Zitat

Hast du auch die Konfigdatei mit übertragen? Den Modus, wo mein System nicht Zentrale spielt, hab ich nicht weiter getestet.


Welche Konfigurationsdatei meinst Du ? Ich habe nur folgende Datei (wie in Deinem Image) angelegt:
/etc/mrconfig

1
2
3
4
5
6
 

# Testdatei
port 10234
interface "lo"
cs2_path /var/www/config
 
 


bzw. die typischen CS2 Dateien (aus deinem Image):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
root@BananaPi:/www/config# ls -l
-rw-r--r-- 1 root root 167 Dec 7 20:51 fahrstrassen.cs2
-rwxr-xr-x 1 root root 104 Dec 7 20:51 geraet.vrs
-rw-r--r-- 1 root root 87 Dec 7 20:51 gleisbild.cs2
drwxrwxr-x 2 root root 4096 Dec 7 20:51 gleisbilder
drwxrwxr-x 2 root root 4096 Dec 7 18:20 icons
-rw-r--r-- 1 root root 35277 Dec 7 20:51 lokomotive.cs2
-rw-r--r-- 1 root root 1506 Dec 7 20:51 magnetartikel.cs2
-rw-r--r-- 1 root root 3626 Dec 7 20:51 prefs.cs2
 
root@BananaPi:/www/config# ls -l gleisbilder/
-rw-r--r-- 1 root root 2331 Dec 7 20:51 karben.cs2
 

 


Karben - cool

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.539
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital


RE: MS2 und Beaglebone Black als Zentrale

#5 von st-oldie , 08.12.2015 10:55

Hi Gerd,

Zitat von bertr2d2

Zitat von st-oldie

Zitat von bertr2d2
Kann es sein, das der Hash durch Dein Programm etwas "manipuliert" wird ? Aus dem ursprünglichen Hash 0x533c wurde 0x503c.
Und Rocrail meckert dann zurecht darüber.


Nicht manipuliert. Ich "kenne" ein paar CAN Messages, die dekodiert werden und ausgewertet werden. Und für diese wird der Hash wieder neu berechnet. Nicht unterstützte CAN Messages werden "raw" durchgereicht, wobei der Hash üernommen wird. Eigentlich ist mir da kein Fehler bewußt, da die cs2.exe und die Märklin Mobile Station damit zurecht gekommen sind.



Kann schon sein, das M*rklin selbst nicht so pingelig ist bzw. Ihre eigen Vorgaben nicht beachtet. Die PC-Software meldet sich z.B. so:

1
2
3
 

08:14:08.489 UDP-> CANID 0x00310000 [8] 00 00 00 00 01 01 ee ee
 
 


Das ist laut Doku auch kein gültiger Hash.




Es kann schon sein, daß da Märklin nicht so pingelig ist. Ich hab schon mehrere CAN NAchrichten von Märklin gesehen, die nicht der eigenen Doku entsprechen.

Mir ist aber nach darüber schlafen noch etwas eingefallen. Die fehlenden Bits in deinem Beispiel sind genau die Bits, die zur Unterscheidung der CS2/MS2 CAN Nachrichten zur MS1 gesetzt werden müssen. Da bin ich mir sicher, daß ich diese Bits setze. Aber die Definition der Bitmasken wird mit Makros gemacht, die du mal als Idee eingebracht hast. Und diese Makros sind in einer Include Datei (bitmask.lzh von der Lib Sektion meiner Download Seiten). Der Hinweis auf diese Include Datei fehlt auf der Download Seite für meinen Modellbahn Code. Kann es sein, daß es da noch Probleme gibt? Ansonsten müßte ich mal die Erzeugung des Hash prüfen.

Zitat von bertr2d2
Ich denke aber, man sollte der Vorgabe soweit wie möglich, bzw. es sinnvoll erscheint, folgen. Externe Programme, wie in diesem Fall Rocrail, scheinen sich enger an der Doku zu orientieren.



Das ist das, was ich ja sowieso mache. Ich hab ja als erstes die Doku und wenn es nicht funktioniert, Traces.

Zitat von bertr2d2
Welche Konfigurationsdatei meinst Du ? Ich habe nur folgende Datei (wie in Deinem Image) angelegt:



Ja genau das. Wenn du das so übernomen hast, sollte meine Software bei dir genauso wie bei mir zuhause laufen.

Zitat von bertr2d2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
root@BananaPi:/www/config# ls -l
-rw-r--r-- 1 root root 167 Dec 7 20:51 fahrstrassen.cs2
-rwxr-xr-x 1 root root 104 Dec 7 20:51 geraet.vrs
-rw-r--r-- 1 root root 87 Dec 7 20:51 gleisbild.cs2
drwxrwxr-x 2 root root 4096 Dec 7 20:51 gleisbilder
drwxrwxr-x 2 root root 4096 Dec 7 18:20 icons
-rw-r--r-- 1 root root 35277 Dec 7 20:51 lokomotive.cs2
-rw-r--r-- 1 root root 1506 Dec 7 20:51 magnetartikel.cs2
-rw-r--r-- 1 root root 3626 Dec 7 20:51 prefs.cs2
 
root@BananaPi:/www/config# ls -l gleisbilder/
-rw-r--r-- 1 root root 2331 Dec 7 20:51 karben.cs2
 

 


Karben - cool




Ja, Friedberg war mir zu mühsam da zu groß. Und ich wollte selbst erstellte Dateien haben.

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: MS2 und Beaglebone Black als Zentrale

#6 von bertr2d2 , 08.12.2015 12:05

Hallo Michael,

Zitat von st-oldie
Hi Gerd,
...
Mir ist aber nach darüber schlafen noch etwas eingefallen. Die fehlenden Bits in deinem Beispiel sind genau die Bits, die zur Unterscheidung der CS2/MS2 CAN Nachrichten zur MS1 gesetzt werden müssen. Da bin ich mir sicher, daß ich diese Bits setze. Aber die Definition der Bitmasken wird mit Makros gemacht, die du mal als Idee eingebracht hast. Und diese Makros sind in einer Include Datei (bitmask.lzh von der Lib Sektion meiner Download Seiten). Der Hinweis auf diese Include Datei fehlt auf der Download Seite für meinen Modellbahn Code. Kann es sein, daß es da noch Probleme gibt? Ansonsten müßte ich mal die Erzeugung des Hash prüfen.



das Bit_Mask Makro habe ich drin. Das passt soweit.

Ich denke, ich hab den Fehler gefunden - in enceth.c:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 

#include <string.h>
#include <strings.h>
#include "mr_can.h"
 
void MrEthCs2Encode(char *UdpFrame, MrCs2CanDataType *CanMsg)
{ unsigned CanHash;
 
CanHash = MrCs2GetHash(CanMsg) | MR_CS2_MASK_HASH_MAGIC;
MrCs2SetId(CanMsg,
MrCs2EncodeId(MrCs2GetHash(CanMsg), MrCs2GetResponse(CanMsg),
MrCs2GetCommand(CanMsg), MrCs2GetPrio(CanMsg)));
bzero(UdpFrame, MR_CS2_UDP_LENGTH);
UdpFrame[0] = (MrCs2GetId(CanMsg) >> 24) & 0x000000FF;
UdpFrame[1] = (MrCs2GetId(CanMsg) >> 16) & 0x000000FF;
UdpFrame[2] = (MrCs2GetId(CanMsg) >> 8) & 0x000000FF;
UdpFrame[3] = (MrCs2GetId(CanMsg) >> 0) & 0x000000FF;
UdpFrame[4] = MrCs2GetDlc(CanMsg);
memcpy(&UdpFrame[5], &CanMsg->Data, MrCs2GetDlc(CanMsg));
}
 
 


Hier werden die entsprechenden Bits in der Variablen CanHash gesetzt, aber mit CanHash selbst passiert weiter nix. Zudem wird Hash nicht richtig gesetzt. Folgende Änderung sollte funktionieren:

1
2
3
4
5
6
7
8
9
10
11
12
13
 

--- a/mrsystem/src/libs/mr_can/enceth.c
+++ b/mrsystem/src/libs/mr_can/enceth.c
@@ -5,7 +5,8 @@ void MrEthCs2Encode(char *UdpFrame, MrCs2CanDataType *CanMsg)
{ unsigned CanHash;
 
- CanHash = MrCs2GetHash(CanMsg) | MR_CS2_MASK_HASH_MAGIC;
+ CanHash = (MrCs2GetHash(CanMsg) & ~MR_CS2_MASK_HASH_MAGIC) | MR_CS2_HASH_MAGIC;
+ MrCs2SetHash(CanMsg, CanHash);
MrCs2SetId(CanMsg,
MrCs2EncodeId(MrCs2GetHash(CanMsg), MrCs2GetResponse(CanMsg),
MrCs2GetCommand(CanMsg), MrCs2GetPrio(CanMsg)));
 
 



Kanns jetzt leider nicht ausprobieren

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.539
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital


RE: MS2 und Beaglebone Black als Zentrale

#7 von st-oldie , 09.12.2015 22:38

Hi Gerd,

so, ich hab jetzt auch mal Zeit gefunden, in den Code reinzuschauen. Du hast dir ja schon richtig Mühe gegeben.

Zitat von bertr2d2
Ich denke, ich hab den Fehler gefunden - in enceth.c:

1
2
3
4
5
6
7
 
void MrEthCs2Encode(char *UdpFrame, MrCs2CanDataType *CanMsg)
{ unsigned CanHash;
 
CanHash = MrCs2GetHash(CanMsg) | MR_CS2_MASK_HASH_MAGIC;
MrCs2SetId(CanMsg,
MrCs2EncodeId(MrCs2GetHash(CanMsg), MrCs2GetResponse(CanMsg),
MrCs2GetCommand(CanMsg), MrCs2GetPrio(CanMsg)));
 



Hier werden die entsprechenden Bits in der Variablen CanHash gesetzt, aber mit CanHash selbst passiert weiter nix. Zudem wird Hash nicht richtig gesetzt.




Stimmt, du hast die richtige Stelle gefunden. Hash wird aber richtig gesetzt. Ich hab wohl irgendwann mal die Idee gehabt, in Hash nicht die zusätzlichen Bits zu setzen. Das wird dann in der Variable CanHash gemacht. 'Du kannst dich da bei an cs2_encode.c für CAN Nachrichten orientieren.

Zitat von bertr2d2
Zudem wird Hash nicht richtig gesetzt. Folgende Änderung sollte funktionieren:

1
2
3
4
5
6
7
8
9
10
11
 
--- a/mrsystem/src/libs/mr_can/enceth.c
+++ b/mrsystem/src/libs/mr_can/enceth.c
@@ -5,7 +5,8 @@ void MrEthCs2Encode(char *UdpFrame, MrCs2CanDataType *CanMsg)
{ unsigned CanHash;
 
- CanHash = MrCs2GetHash(CanMsg) | MR_CS2_MASK_HASH_MAGIC;
+ CanHash = (MrCs2GetHash(CanMsg) & ~MR_CS2_MASK_HASH_MAGIC) | MR_CS2_HASH_MAGIC;
+ MrCs2SetHash(CanMsg, CanHash);
MrCs2SetId(CanMsg,
MrCs2EncodeId(MrCs2GetHash(CanMsg), MrCs2GetResponse(CanMsg),
MrCs2GetCommand(CanMsg), MrCs2GetPrio(CanMsg)));
 




Hash sollte nicht verändert werden sondern CanHash sollte beim Berechnen der ID benutzt werden. Richtig müßte es so lauten:

1
2
3
4
 
   CanHash = (MrCs2GetHash(CanMsg) & ~MR_CS2_MASK_HASH_MAGIC) | MR_CS2_HASH_MAGIC;
MrCs2SetId(CanMsg,
MrCs2EncodeId(CanHash, MrCs2GetResponse(CanMsg),
MrCs2GetCommand(CanMsg), MrCs2GetPrio(CanMsg)));
 



Der Hash ohne die Bits wird genommen, die MS2 Bits gesetzt und damit die ID erzeugt. Der Hash selbst bleibt unverändert.

Zitat von bertr2d2
Kanns jetzt leider nicht ausprobieren



Bist du schon mal zum Ausprobieren gekommen? Ich hab die nächsten Tage wieder keine Zeit, das nochmals zu testen.

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: MS2 und Beaglebone Black als Zentrale

#8 von bertr2d2 , 10.12.2015 09:44

Hallo Michael,

Zitat von st-oldie
Hi Gerd,

Hash sollte nicht verändert werden sondern CanHash sollte beim Berechnen der ID benutzt werden. Richtig müßte es so lauten:

1
2
3
4
 
   CanHash = (MrCs2GetHash(CanMsg) & ~MR_CS2_MASK_HASH_MAGIC) | MR_CS2_HASH_MAGIC;
MrCs2SetId(CanMsg,
MrCs2EncodeId(CanHash, MrCs2GetResponse(CanMsg),
MrCs2GetCommand(CanMsg), MrCs2GetPrio(CanMsg)));
 



Der Hash ohne die Bits wird genommen, die MS2 Bits gesetzt und damit die ID erzeugt. Der Hash selbst bleibt unverändert.

Zitat von bertr2d2
Kanns jetzt leider nicht ausprobieren



Bist du schon mal zum Ausprobieren gekommen? Ich hab die nächsten Tage wieder keine Zeit, das nochmals zu testen.



ja, ich habs nochmal getestet. Es gibt Fortschritt mit dem Patch von oben (Gleisbox wird nun auch von Rocrail richtig erkannt), aber steuern geht noch nicht. Eine Sache ist mir dabei noch aufgefallen:

1
2
3
4
5
6
7
8
9
10
11
12
 

20151210.042451.168 r9999I ping OMCS2 2638 Request CAN configuration by ping thread on: Gbox2
20151210.042451.178 r0000B gbxwrite (null) *trace dump( 0x00FB9344: length=13 )
offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |ASCII...........|
--------------------------------------------------------- |----------------|
00000000: 00 30 2F 20 00 52 63 72 4C 66 44 FF 20 |.0/ .RcrLfD. |
20151210.042451.180 r0000B gbxreade (null) *trace dump( 0xB6D48868: length=13 )
offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |ASCII...........|
--------------------------------------------------------- |----------------|
00000000: 04 31 03 00 08 00 00 00 00 01 00 EE EE |.1........... |
20151210.042451.181 r9999I gbxreade OMCS2 1274 Unknown Ping for type: 0xEEE0
 
 


Das "riecht" nach Priority-Bug

Ab hier bin ich aber mit meinem Latein am Ende. Ich kenn den inneren Aufbau Deines Frameworks zu weig, um hier noch den Fehler zu finden.
Wenn Du willst,kann ich Dir ein can2lan Trace zur Verfügung stellen, wo die Steuerung über Rocrail funktioniert.

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.539
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital


RE: MS2 und Beaglebone Black als Zentrale

#9 von st-oldie , 12.12.2015 13:17

Hi Gerd,

Zitat von bertr2d2

Zitat von st-oldie
Bist du schon mal zum Ausprobieren gekommen? Ich hab die nächsten Tage wieder keine Zeit, das nochmals zu testen.


ja, ich habs nochmal getestet. Es gibt Fortschritt mit dem Patch von oben (Gleisbox wird nun auch von Rocrail richtig erkannt), aber steuern geht noch nicht.




Schön, dann sind wir einen Schritt weiter.

Zitat von bertr2d2
Eine Sache ist mir dabei noch aufgefallen:

1
2
3
4
5
6
7
8
9
10
11
12
 

20151210.042451.168 r9999I ping OMCS2 2638 Request CAN configuration by ping thread on: Gbox2
20151210.042451.178 r0000B gbxwrite (null) *trace dump( 0x00FB9344: length=13 )
offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |ASCII...........|
--------------------------------------------------------- |----------------|
00000000: 00 30 2F 20 00 52 63 72 4C 66 44 FF 20 |.0/ .RcrLfD. |
20151210.042451.180 r0000B gbxreade (null) *trace dump( 0xB6D48868: length=13 )
offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |ASCII...........|
--------------------------------------------------------- |----------------|
00000000: 04 31 03 00 08 00 00 00 00 01 00 EE EE |.1........... |
20151210.042451.181 r9999I gbxreade OMCS2 1274 Unknown Ping for type: 0xEEE0
 
 


Das "riecht" nach Priority-Bug




Dann ist der Fehler aber in Rocrail! Ich hab ja hier schon die Doku zitiert, die explizit sagt, daß die Priority nicht zur Dekodierung der Message ausgewertet werden darf!

Wobei merkwürdigerweise Teile der Märklin App wohl die Priority ignorieren und Teile nicht. Aber Märklin hält sich ja an mehreren Stellen nicht an seine eigene Doku.

Ich verstehe aber etwas an deinem Test nicht so ganz. Dein Ping bzw. dein Kommentar sieht so aus, als ob Rocrail die Gleisbox anspricht. Das sollte Rocrail aber nicht tun! Rocrail sollte das BBB als CS2 erkennen und damit sprechen! Nur dann hab ich die Möglichkeit, die Lokliste der MS2 nach Rocrail zu konvertieren und an Rocrail zu senden. Meine Lösung arbeitet gerade nicht als einfacher CAN - Ethernet Proxy wie dein can2udp. Meine Lösung ist nicht ein Slave sondern soll sich wie eine Master CS2 verhalten.

Zitat von bertr2d2
Ab hier bin ich aber mit meinem Latein am Ende. Ich kenn den inneren Aufbau Deines Frameworks zu weig, um hier noch den Fehler zu finden.
Wenn Du willst,kann ich Dir ein can2lan Trace zur Verfügung stellen, wo die Steuerung über Rocrail funktioniert.



Hat Zeit. Ich bin heute zu Mittag wieder von unserer Dienstreis zurück. Morgen hab ich mich schon verabredet. Mal sehen, wieviel Zeit vor Weihnachten noch bleibt. Das ist ein Spagat zwischen Eltern besuchen wollen, Interesse der Eltern ihre Kinder zu sehen und meine privaten Interessen womit ich mich beschäftige.


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: MS2 und Beaglebone Black als Zentrale

#10 von bertr2d2 , 12.12.2015 15:34

Hallo Michael,

Zitat von st-oldie
Hi Gerd,

Zitat von bertr2d2
Eine Sache ist mir dabei noch aufgefallen:

1
2
3
4
5
6
7
8
9
10
11
12
 

20151210.042451.168 r9999I ping OMCS2 2638 Request CAN configuration by ping thread on: Gbox2
20151210.042451.178 r0000B gbxwrite (null) *trace dump( 0x00FB9344: length=13 )
offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |ASCII...........|
--------------------------------------------------------- |----------------|
00000000: 00 30 2F 20 00 52 63 72 4C 66 44 FF 20 |.0/ .RcrLfD. |
20151210.042451.180 r0000B gbxreade (null) *trace dump( 0xB6D48868: length=13 )
offset: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |ASCII...........|
--------------------------------------------------------- |----------------|
00000000: 04 31 03 00 08 00 00 00 00 01 00 EE EE |.1........... |
20151210.042451.181 r9999I gbxreade OMCS2 1274 Unknown Ping for type: 0xEEE0
 
 


Das "riecht" nach Priority-Bug




Dann ist der Fehler aber in Rocrail! Ich hab ja hier schon die Doku zitiert, die explizit sagt, daß die Priority nicht zur Dekodierung der Message ausgewertet werden darf!

Wobei merkwürdigerweise Teile der Märklin App wohl die Priority ignorieren und Teile nicht. Aber Märklin hält sich ja an mehreren Stellen nicht an seine eigene Doku.



Ich gebe Dir ja Recht: es sollte auch mit gesetztem Prio Bits funktionieren. Sicherlich kann man über Bert einen schnellen Fix für Rocrail bekommen. Aber IMHO ist das wie das Reiten auf einem toten Pferd: die Prio Erweiterung wird von M*rklin anscheinend gar nicht genutzt. Im Gegenteil: Selbst M*rklins Anwendungen haben ein Problem damit. Wenn Dein System auch von anderer Software (WDP, TC ...) benutzt werden soll, würde ich drauf verzichten, die Prio Bits zu verwenden. Du hast a) keinen Vorteil (zumindest über Ethernet) und b) nur Ärger.

Zitat

Ich verstehe aber etwas an deinem Test nicht so ganz. Dein Ping bzw. dein Kommentar sieht so aus, als ob Rocrail die Gleisbox anspricht. Das sollte Rocrail aber nicht tun! Rocrail sollte das BBB als CS2 erkennen und damit sprechen! Nur dann hab ich die Möglichkeit, die Lokliste der MS2 nach Rocrail zu konvertieren und an Rocrail zu senden. Meine Lösung arbeitet gerade nicht als einfacher CAN - Ethernet Proxy wie dein can2udp. Meine Lösung ist nicht ein Slave sondern soll sich wie eine Master CS2 verhalten.


Hmm, ich weiss nicht, ob Rocrail, abgesehen vom S88, viel mehr nutzt als das CAN-Ethernet Gateway. Zumindest kann ich nichts großartiges entdecken, was darüber hinaus geht. Rocrail startet z.B. (wenn man es eingeschaltet hat ) einen MFX-Zyklus, um die Loks zu identifizieren. Aber ich kann mich auch irren ...

Ich habe letztendlich nur Deine Programme genommen um zu sehen, was im Zusammenspiel mit Rocrail damit raus kommt. Dazu habe ich Byte-Level Trace eingeschaltet. Siehe hier ein neues Log. Zur Info: ich habe Rocrails mgbox verwendet anstatt Rocrails mcs2 Lib. Hier funktioniert noch weniger.

Ich denke, ich lasse das mit den Tests jetzt lieber. Sonst sind wir alle zusammen noch mehr verwirrt

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.539
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital


RE: MS2 und Beaglebone Black als Zentrale

#11 von st-oldie , 12.12.2015 16:55

Hi Gerd,

Zitat von bertr2d2
Hmm, ich weiss nicht, ob Rocrail, abgesehen vom S88, viel mehr nutzt als das CAN-Ethernet Gateway. Zumindest kann ich nichts großartiges entdecken, was darüber hinaus geht.



Dann sollte es funktionieren.

Zitat von bertr2d2
Rocrail startet z.B. (wenn man es eingeschaltet hat ) einen MFX-Zyklus, um die Loks zu identifizieren. Aber ich kann mich auch irren ...



Darf das Rocrail wirklich machen? Schließlich soll das BBB eine CS2 emulieren, also auch die Loks verwalten wie auch eine reale CS2. Da sollte man doch nicht selbst die Loks identifizieren? Geht sowas überhaupt bei einer realen CS2?

Zitat von bertr2d2
Ich habe letztendlich nur Deine Programme genommen um zu sehen, was im Zusammenspiel mit Rocrail damit raus kommt. Dazu habe ich Byte-Level Trace eingeschaltet. Siehe hier ein neues Log. Zur Info: ich habe Rocrails mgbox verwendet anstatt Rocrails mcs2 Lib. Hier funktioniert noch weniger.



Kannst du mir mal erklären, was du genommen hast? Was ist die mcs2 lib und was die mgbox? Ich hab einfach Rocrail installiert, den Rocrail Server (rocrail.exe) und rocview gestartet und dann in den "Rocrail Eigenschaften" einen neuen CS2 Controller mit der IP Adresse bzw. Hostnamen meines BBB angelegt. Nachdem ich dann eine Lok manuell angelegt hatte, konnte ich sie sofort steuern. Es hat also sofort mit dem BBB wie mit einer realen CS2 funktioniert.

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: MS2 und Beaglebone Black als Zentrale

#12 von bertr2d2 , 12.12.2015 18:39

Hallo Michael,

Zitat von st-oldie
Kannst du mir mal erklären, was du genommen hast? Was ist die mcs2 lib und was die mgbox? Ich hab einfach Rocrail installiert, den Rocrail Server (rocrail.exe) und rocview gestartet und dann in den "Rocrail Eigenschaften" einen neuen CS2 Controller mit der IP Adresse bzw. Hostnamen meines BBB angelegt. Nachdem ich dann eine Lok manuell angelegt hatte, konnte ich sie sofort steuern. Es hat also sofort mit dem BBB wie mit einer realen CS2 funktioniert.


was ich verwendet habe, kannst Du im verlinkten Rocrail-Tracefile identifizieren:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 

20151212.150022.294 r9999I main OControl 1776 initDigInts lib="mgbox" idd="Gbox2"
20151212.150022.297 r9999I main OMCS2 2897 ----------------------------------------
20151212.150022.297 r9999I main OMCS2 2898 MGBOX 2.0.0
20151212.150022.297 r9999I main OMCS2 2899 ----------------------------------------
20151212.150022.297 r9999I main OMCS2 2900 s88 modules [0]
20151212.150022.298 r9999I main OMCS2 2901 version [0]
20151212.150022.298 r9999I main OMCS2 2902 sensor device ID [0]
20151212.150022.298 r9999I main OMCS2 2903 command pause [10]ms
20151212.150022.298 r9999I main OMCS2 2904 sensor range [0-0]
20151212.150022.298 r9999I main OMCS2 2905 hash [0x2F20]
20151212.150022.299 r9999I main OMCS2 2907 system info [yes]
20151212.150022.299 r9999I main OMCS2 2908 discovery [yes]
20151212.150022.299 r9999I main OMCS2 2909 bind [yes]
20151212.150022.299 r9999I main OMCS2 2910 report state [yes]
20151212.150022.299 r9999I main OMCS2 2914 sublib [default]
20151212.150022.299 r9999I main OMCS2 2920 udp address [127.0.0.1]
20151212.150022.299 r9999I main OMCS2 2921 udp tx port [15731]
20151212.150022.300 r9999I main OMCS2 2922 udp rx port [15730]
20151212.150022.300 r9999I main OMCS2 2923 ----------------------------------------
 
 


Interessanter ist die Frage: Was hast Du als Zentrale eingestellt ? CS2, also mcs2 vermute ich mal. Kannst Du Dein Tracefile verlinken ?
Hast Du noch Änderungen am Code gemacht ?

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.539
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital


RE: MS2 und Beaglebone Black als Zentrale

#13 von st-oldie , 13.12.2015 11:00

Hallo Gerd,

ich hab jetzt mal selbst nach mgbox und rocrail als Stichwort gegooglet, um zu verstehen was du machst bzw. was mgbox als Software macht und wozu diese Software da ist.

Das was du probiert hast, kann prinzipiell nicht funktionieren. Genau dafür war ja meine Einleitung in diesem Thread da um auf diese Unterschiede hinzuweisen, die du leider nur als Erbsen zählen ignoriert hast. Vielleicht ist CAN-UDP Bridge auch eine korrektere Bezeichnung als CAN-UDP Proxy.

Zitat von bertr2d2
was ich verwendet habe, kannst Du im verlinkten Rocrail-Tracefile identifizieren:



Genau deshalb kam ja meine Frage, ob die Gleisbox direkt angesprochen wird.

Zitat von bertr2d2
Interessanter ist die Frage: Was hast Du als Zentrale eingestellt ? CS2, also mcs2 vermute ich mal. Kannst Du Dein Tracefile verlinken ?



Interessanter ist erst mal der Unterschied und der Einsatzzweck von deinem can2usb und meinem mrsystem. Ich hab an meiner Software für den Test gestern nichts geändert außer dem Bugfix mit den CS2 Bits. Ja, ich hab natürlich mcs2 als Zentrale eingestellt, siehe dazu meine Erklärung unten. Ich hab auch kein Tracefile dazu, das hat einfach funktioniert. Aber jetzt mal zu meiner Erklärung (mit meinem Verständnis von mgbox):

Die Software mgbox ist dazu da, auch die Anmeldung der mfx Loks in Rocrail zu ermöglichen. Ob das jetzt direkt in mgbox erfolgt oder direkt in Rocrail, weiß ich nicht. mgbox dürfte deshalb innerhalb von Rocrail ein Server sein, den ich mit dem Rocrail Viewer ansprechen kann. Bei Rocrail speichert der Server die Elemente (Loks, Magnetartikel, ...). Dadurch kann ja der Viewer die Loks ansprechen, die sich bei mgbox anmelden. Dazu darf auch keine weitere Zentrale an den CAN Bus angeschlossen sein, eine CS2 müßte als Slave laufen. Das steht ja auch so in der Beschreibung von mgbox. Um das zu erreichen, greift mgbox direkt auf die Gleisbox zu. Wenn die Gleisbox über z.B. einen Einplatinencomputer an Ethernet angeschlossen wird, ist die Schnittstelle natürlich die von Märklin dokumentierte Ethernet Schnittstelle der CS2. Du benötigst dann auf dem Einplatinencomputer eine CAN-USB Bridge, die die Nachrichten zwischen CAN und USB weiterleitet. Das Programm mgbox verläßt sich darauf, daß alle Nachrichten die Gleisbox erreichen. Ich vermute, mgbox steht für Märklin GleisBOX. mgbox spricht also die Gleisbox an und nicht die CS2! Und dein can2usb ist eine solche CAN-USB Bridge, da es alle Nachrichten zwischen CAN und USB weiterleitet.

Meine Software hingegen versucht auf der Ethernet Seite eine CS2 nachzuahmen. Es ist überhaupt nicht garantiert, daß sämtliche Nachrichten genauso an die Gleisbox weitergereicht werden! Auch wenn schon die meisten Nachrichten weitergeleitet werden. Das ist aber ein Implementierungsdetail. Z.B. wird der Ping einer CS2 nicht auf den CAN Bus weitergeschickt, damit die MS2 nicht in den Slave Modus geht. Meine Lösung versucht auch nicht, die Gleisbox "aufzuwecken". Das ist Aufgabe der angeschlossenen MS2. Bei meiner Lösung ist die MS2 zusammen mit dem BBB die Zentrale. Nicht eine daran angeschlossene Software. Deshalb mußt du für meine Lösung eine Software (bzw. Modus) verwenden, die mit einer CS2 kommuniziert. Also in Rocrail den Zentrale Typ mcs2

Das ganze hat also nichts mit Erbsen zählen zu tun sondern ist ganz im Gegenteil eine wesentliche Beschreibung dessen, was die Software macht und wofür sie geeignet ist. Dein can2usb ist eine CAN-USB Bridge, die auch dazu geeignet ist, wenn direkt CAN Nachrichten ungefiltert an die Gleisbox geschickt werden sollen. Meine Lösung soll eine CS2 nachahmen und ist dafür gemacht, mit einer Software zu kommunizieren, die eine CS ansteuern. Sollte da etwas nicht funktionieren, ist das entweder ein Fehler in meinem mrsystem Programmen oder die Software verläßt sich auf einen Fehler in den Märklin Geräten. Damit sind das eigentlich verschiedene Anwendungen, auch wenn sie sich etwas überlappen.

Meine Software ist auch für einen Modus vorbereitet, in dem sie auch nur als CAN-UDP Bridge arbeiten soll. Aber der Modus ist nicht dokumentiert und nicht getestet. Ob der richtig funktioniert, weiß ich nicht. Man könnte jetzt versuchen, den Modus in Betrieb zu nehmen und evtl. mit can2usb soweit ausztubauen, daß mein mrsystem auch can2usb ersetzen kann. Das könnte es einfacher machen, ein Image zu Ferfügung zu stellen, daß je nach Konfig beide Szenarien abdeckt.

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: MS2 und Beaglebone Black als Zentrale

#14 von bertr2d2 , 13.12.2015 12:05

Hallo Michael,

Zitat von st-oldie
Hallo Gerd,

ich hab jetzt mal selbst nach mgbox und rocrail als Stichwort gegooglet, um zu verstehen was du machst bzw. was mgbox als Software macht und wozu diese Software da ist.

Das was du probiert hast, kann prinzipiell nicht funktionieren. Genau dafür war ja meine Einleitung in diesem Thread da um auf diese Unterschiede hinzuweisen, die du leider nur als Erbsen zählen ignoriert hast. Vielleicht ist CAN-UDP Bridge auch eine korrektere Bezeichnung als CAN-UDP Proxy.

Das Erbsen zählen bezog sich auf das can2lan in Verbindung mit CS2 Master/Slave Diskussion.

Zitat

Zitat von bertr2d2
was ich verwendet habe, kannst Du im verlinkten Rocrail-Tracefile identifizieren:



Genau deshalb kam ja meine Frage, ob die Gleisbox direkt angesprochen wird.



Das tue ich mit der gepimpten Gleisbox, wo eine CAN2USB Bridge eingebaut wird, aber nicht mit dem integralen CAN-Controllers des BananaPis. Hier hat man ja schon Netzverbindung die das can2lan natürlich nutzt.

Zitat

Zitat von bertr2d2
Interessanter ist die Frage: Was hast Du als Zentrale eingestellt ? CS2, also mcs2 vermute ich mal. Kannst Du Dein Tracefile verlinken ?



Interessanter ist erst mal der Unterschied und der Einsatzzweck von deinem can2usb und meinem mrsystem. Ich hab an meiner Software für den Test gestern nichts geändert außer dem Bugfix mit den CS2 Bits. Ja, ich hab natürlich mcs2 als Zentrale eingestellt, siehe dazu meine Erklärung unten. Ich hab auch kein Tracefile dazu, das hat einfach funktioniert.



Rocrail ist sehr dynamisch in der Entwicklung und daher wäre das Tracefile interessant. M.W. wird ein Tracefile immer generiert. Wenn Du Dein Tracefile nicht reinstellen magst, kannst Du vielleicht Dein 'rocrail.ini' File hier reinstellen ?

Zitat

Aber jetzt mal zu meiner Erklärung (mit meinem Verständnis von mgbox):

Die Software mgbox ist dazu da, auch die Anmeldung der mfx Loks in Rocrail zu ermöglichen. Ob das jetzt direkt in mgbox erfolgt oder direkt in Rocrail, weiß ich nicht. mgbox dürfte deshalb innerhalb von Rocrail ein Server sein, den ich mit dem Rocrail Viewer ansprechen kann. Bei Rocrail speichert der Server die Elemente (Loks, Magnetartikel, ...). Dadurch kann ja der Viewer die Loks ansprechen, die sich bei mgbox anmelden. Dazu darf auch keine weitere Zentrale an den CAN Bus angeschlossen sein, eine CS2 müßte als Slave laufen. Das steht ja auch so in der Beschreibung von mgbox. Um das zu erreichen, greift mgbox direkt auf die Gleisbox zu. Wenn die Gleisbox über z.B. einen Einplatinencomputer an Ethernet angeschlossen wird, ist die Schnittstelle natürlich die von Märklin dokumentierte Ethernet Schnittstelle der CS2. Du benötigst dann auf dem Einplatinencomputer eine CAN-USB Bridge, die die Nachrichten zwischen CAN und USB weiterleitet. Das Programm mgbox verläßt sich darauf, daß alle Nachrichten die Gleisbox erreichen. Ich vermute, mgbox steht für Märklin GleisBOX. mgbox spricht also die Gleisbox an und nicht die CS2! Und dein can2usb ist eine solche CAN-USB Bridge, da es alle Nachrichten zwischen CAN und USB weiterleitet.


Hier mal die Unterschiede zwsichen Rocrails 'mgbox' und 'mcs2':
http://wiki.rocrail.net/doku.php?id=cs2:gbox-en
Ein Auszug:
"The MGBOX and MCS2 library are mainly the same. The MGBOX library is primary developed to get easily the used SID for a fresh registered loco when using a Gleisbox and MS2. ...
The Gleisbox has to be connected to Rocrail by an Ethernet-CAN bridge (prefered) or a Serial/USB CAN bridge."

Über mgbox kann man die Gleisbox auch über Ethernet ansprechen - Bert nutzt dazu seine Arduino basierte CAN-Ethernet Bridge.
Das macht bei mir can2lan unter anderem. Ich weiss nicht, warum Du hier über eine CAN-USB Bridge sprichst.

Zitat

Meine Software hingegen versucht auf der Ethernet Seite eine CS2 nachzuahmen. Es ist überhaupt nicht garantiert, daß sämtliche Nachrichten genauso an die Gleisbox weitergereicht werden! Auch wenn schon die meisten Nachrichten weitergeleitet werden. Das ist aber ein Implementierungsdetail. Z.B. wird der Ping einer CS2 nicht auf den CAN Bus weitergeschickt, damit die MS2 nicht in den Slave Modus geht. Meine Lösung versucht auch nicht, die Gleisbox "aufzuwecken". Das ist Aufgabe der angeschlossenen MS2. Bei meiner Lösung ist die MS2 zusammen mit dem BBB die Zentrale. Nicht eine daran angeschlossene Software. Deshalb mußt du für meine Lösung eine Software (bzw. Modus) verwenden, die mit einer CS2 kommuniziert. Also in Rocrail den Zentrale Typ mcs2

Das ganze hat also nichts mit Erbsen zählen zu tun sondern ist ganz im Gegenteil eine wesentliche Beschreibung dessen, was die Software macht und wofür sie geeignet ist.


Mir ist der Unterschied zwischen CAN und Ethernet schon klar Und ich habe in Grundzügen auch Verstanden, was Dein Framework tut. Ein wichtiges Detail habe ich aber jetzt erst realisiert: Man braucht eine MS2 damit die Kombination aus Deiner Software und Rocrail funktioniert.

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.539
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital


RE: MS2 und Beaglebone Black als Zentrale

#15 von st-oldie , 13.12.2015 15:25

Hallo Gerd,

sag mal, liest du dir eigentlich durch, was ich schreibe? Deine Antowrt kommt mir so vor, als hast du meine Erklärung nicht richtig verstanden oder nicht richtig durchgelesen.

Zitat von bertr2d2
Das Erbsen zählen bezog sich auf das can2lan in Verbindung mit CS2 Master/Slave Diskussion.



Das war leider der unwichtigste Teil meiner Aussage.

Zitat von bertr2d2
Rocrail ist sehr dynamisch in der Entwicklung und daher wäre das Tracefile interessant. M.W. wird ein Tracefile immer generiert. Wenn Du Dein Tracefile nicht reinstellen magst, kannst Du vielleicht Dein 'rocrail.ini' File hier reinstellen ?



Der Trace war in der Konsole, wird der auch automatisch abgespeichert? Aber ich bin davon ausegangen, daß der Trace nicht nötig ist, da das Problem anders gelagert ist.

Zitat von bertr2d2
Hier mal die Unterschiede zwsichen Rocrails 'mgbox' und 'mcs2':
http://wiki.rocrail.net/doku.php?id=cs2:gbox-en
Ein Auszug:
"The MGBOX and MCS2 library are mainly the same. The MGBOX library is primary developed to get easily the used SID for a fresh registered loco when using a Gleisbox and MS2. ...
The Gleisbox has to be connected to Rocrail by an Ethernet-CAN bridge (prefered) or a Serial/USB CAN bridge."



Das ist doch genau das, was ich dir gerade geschrieben hatte. Deine Software ist eine CAN-USB Bridge und funktioniert, weil mgbox direkt mit der Gleisbox redet. Meine Software ist das nicht, so daß du nur einen Client für CS2 verwenden kannst. Wenn du das wieder aus Rocrail zitierst, gibst du mir das Gefühl, daß du meine Erklärung nicht gelesen oder nicht verstanden hast!

Zitat von bertr2d2
Mir ist der Unterschied zwischen CAN und Ethernet schon klar



Dann hast du dir meine Erklärung nicht durchgelesen! Ich hab nicht den Unterschied zwischen CAN und Ethernet erklärt. sondern ...

Zitat von bertr2d2
Und ich habe in Grundzügen auch Verstanden, was Dein Framework tut. Ein wichtiges Detail habe ich aber jetzt erst realisiert: Man braucht eine MS2 damit die Kombination aus Deiner Software und Rocrail funktioniert.



Auch das war nicht die Kernaussage für dein Problem. Der wesentliche Unterschied zwischen deiner Software und meiner Software bzgl. Benutzung von mgbox ist der, daß deine Softeware eine CAN-USB Bridge ist und meine nicht! Dabei spielt es erst mal keine Rolle, daß ich die MS2 als Master nehme. Auch wenn meine Software selbst die Anmeldung der mfx Loks verwalten würde, hättest du das gleiche Problem. Wobei du doch eignetlich mitbekommen hast, daß ich die Loks der MS2 auslese.

Wie wäre es, wenn wir uns bei einem Bier zusammen setzen. Dann kann ich dir das mal verbal von Angesicht zu Angesicht erklären. Vielleicht ist es dann mit der Erklärung einfacher. Du wohnst ja um die Ecke Kannst du ein alten PC Netzreil reparieren?

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: MS2 und Beaglebone Black als Zentrale

#16 von bertr2d2 , 14.12.2015 08:04

Hallo,

Michael und ich haben miteinander telefoniert und die (fachlichen) Unstimmigkeiten ausgeräumt. Wie Michael schon geschrieben hat, funktioniert die Software mit Rocrail unter der Verwendung von 'mcs2' als Zentrale. Um die Software zu verwenden sollte man ein BBB und das verlinkte Image nutzen. So kann Michael ggf. system-spezifische Probleme ausschließen.

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.539
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital


RE: MS2 und Beaglebone Black als Zentrale

#17 von Der_Henning , 30.12.2015 14:04

Hallo ihr,
bin gerade auf dieses Projekt gestoßen, das sieht extrem interessant aus - schon mal vielen Dank für die Mühe, die ihr hier hereinsteckt!

Ich habe hier noch einen kleinen ARM-Rechner herumliegenden, der neue Aufgaben sucht, das werde ich mal ausprobieren! Melde mich wieder, wenn ich was getestet habe, wird aber noch etwas dauern.

Danke auf jeden Fall!
Henning


Der_Henning  
Der_Henning
InterRegio (IR)
Beiträge: 142
Registriert am: 11.12.2012
Spurweite H0
Steuerung MS2
Stromart AC, Digital


RE: MS2 und Beaglebone Black als Zentrale

#18 von st-oldie , 01.01.2016 12:20

Hallo Henning,

Zitat von Der_Henning
bin gerade auf dieses Projekt gestoßen, das sieht extrem interessant aus



Vielen Dank Ich hatte gehofft, daß es für einige interessant sein könnte, auch wenn der Interessentenkreis für eine Bastellösung nicht ganz so groß ist wie für fertige Komponenten. Auch deshalb, weil es schon Fragen gab, das CDB-Projekt an Ethernet anzuschließen und meine Lösung das kann. Und ich habe einen etwas anderen Ansatz als can2udp, so daß sich jeder die für ihn sympatischste Lösung aussuchen kann.

Zitat von Der_Henning
schon mal vielen Dank für die Mühe, die ihr hier hereinsteckt!



Danke, aber es ist auch wie in vielen andern quelloffenen Projekten. Es steckt ein Eigeninteresse dahinter. Ich wollte genau so eine Lösung für mich haben und bastel auch gern an Software für Computer (mach ich auch beruflich). Deshalb bin ich auch bisher bei meinem BBB geblieben und hab nicht auch versucht, meine Software auf z.B. dem Banana Pi zu testen. Und ich wollte dann andere daran teilhaben lassen. Zum einen, weil ich gehofft hatte, daß es andere interessieren könnte. Und weil ich hier gesehen habe, daß man bei offenen Fragen zum CAN Protokoll hier mit anderen Leuten möglicherweise Wissenslücken füllen kann. Also selbst auch davon profitiert.

Zitat von Der_Henning
Ich habe hier noch einen kleinen ARM-Rechner herumliegenden, der neue Aufgaben sucht, das werde ich mal ausprobieren! Melde mich wieder, wenn ich was getestet habe, wird aber noch etwas dauern.



Gern. Wie Gerhard schon schrieb, kann ich natürlich nur Dinge auf meinem BBB nachstellen. Aber meine Software sollte sich auf jede Plattform portieren lassen, auch auf andere CPUs. Es muß nicht notwendigerweise ARM sein. Und wenn andere mit der Software "rumspielen", finden sich auch schneller Fehler.

Wenn du eine andere CAN Anbindung als CANSockets auf deinem ARM Board hast (CAN-UDP Adapter), melde dich nochmals per PM. Mein System ist darauf ausgelegt, daß ich leicht verschiedene Protokolle intergrieren kann. Aber außer CANSockets (und natürllich CS2 Ethernet) ist alles andere was im Code vorhanden ist, nur rudimentär bzw. als leere Frame angelegt. Da die Bearbeitung der CAN Frames an sich aber schon vorhanden ist, sollte sich das leicht erweitern lassen, evtl. mit einem kleinen Umbau um mehr vorhandenen Code wiederzuverwenden.

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: MS2 und Beaglebone Black als Zentrale

#19 von bertr2d2 , 03.01.2016 12:58

Hallo Michael,

ich habe mal Deinen Code genommen um zu schauen, warum momentan 'mrzentrale' teilweise auf dem BPi abstürzt. Ich mache das auf meiner Workstation (AMD64). Es gibt da ein paar Stellen, die Du Dir bei Gelegenheit mal anschauen solltest:

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
 

% valgrind ./mrzentrale -v -f
==12481== Memcheck, a memory error detector
==12481== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==12481== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==12481== Command: ./mrzentrale -v -f
==12481==
start with no fork at Sun Jan 3 12:37:32 2016
 
ZentraleInit
load Gleisbild Pages
read geraet.vrs
new paragraph geraet in geraet.vrs
geraet paragraph in geraet.vrs
new value version= in lok cfg
neuer version Eintrag
new value minor=1 in lok cfg
minor version
new value geraet= in lok cfg
neuer geraet Eintrag
new value sernum=1 in lok cfg
serial number
new value hardvers=OpenWRT,3 in lok cfg
hardware version
end of geraet.vrs
ready for incoming comands
add client socket 4
wait for 4 fd, max 10 s
select liefert 0
interrupt at Sun Jan 3 12:37:42 2016
 
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
FSM: unhandled 0
FSM: new state -1
read new comand frame from socket 6
FSM: answer ping
==12481== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
==12481== at 0x513E4D2: send (send.c:28)
==12481== by 0x40A0B5: MrIpcSend (send.c:10)
==12481== by 0x40582D: HandlePing (states.c:885)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481== Address 0x7fefffc24 is on thread 1's stack
==12481==
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 7
FSM: CAN member 1195604753, version 295, type 16
==12481== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
==12481== at 0x513E4D2: send (send.c:28)
==12481== by 0x40A0B5: MrIpcSend (send.c:10)
==12481== by 0x4031E9: HandleMemberWaitMs2 (states.c:54)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481== Address 0x7fefffc24 is on thread 1's stack
==12481==
FSM: new state 1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 10
FSM: unhandled 10
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 11
FSM: LOKNAME CFG data length 80, crc 65516
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: evaluate lokname cfg
==12481== Invalid read of size 1
==12481== at 0x50943B1: vfprintf (vfprintf.c:1630)
==12481== by 0x509C8D8: printf (printf.c:35)
==12481== by 0x4034C2: HandleLoknameCfgData (states.c:133)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481== Address 0x54152c0 is 0 bytes after a block of size 80 alloc'd
==12481== at 0x4C2B3F8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12481== by 0x4033B3: HandleLoknameCfgHeader (states.c:102)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481==
[lok]
.name=335 105-3 DB
[lok]
.name=
[numloks]
.wert=1
==12481== Invalid write of size 1
==12481== at 0x4034D6: HandleLoknameCfgData (states.c:134)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481== Address 0x54152c0 is 0 bytes after a block of size 80 alloc'd
==12481== at 0x4C2B3F8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12481== by 0x4033B3: HandleLoknameCfgHeader (states.c:102)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481==
new paragraph lok in lok cfg
lok paragraph in lok cfg
new value name=335 105-3 DB in lok cfg
lok name 0 in lok cfg
new paragraph lok in lok cfg
lok paragraph in lok cfg
new value name= in lok cfg
lok name 1 in lok cfg
new paragraph numloks in lok cfg
numloks paragraph in lok cfg
new value wert=1 in lok cfg
number of loks in lok cfg
number of loks in lok cfg is 1
end of lok cfg
request lokinfo 0 >335 105-3 DB< from 1
==12481== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
==12481== at 0x513E4D2: send (send.c:28)
==12481== by 0x40A0B5: MrIpcSend (send.c:10)
==12481== by 0x4039E4: HandleLoknameCfgData (states.c:248)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481== Address 0x7fefffc24 is on thread 1's stack
==12481==
FSM: new state 3
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 10
FSM: unhandled 10
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 11
FSM: LOKINFO CFG data length 1304, crc 65448
FSM: new state 4
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 8 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 16 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 24 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 32 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 40 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 48 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 56 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 64 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 72 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 80 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 88 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 96 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 104 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 112 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 120 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 128 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 136 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 144 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 152 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 160 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 168 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 176 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 184 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 192 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 200 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 208 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 216 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 224 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 232 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 240 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 248 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 256 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 264 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 272 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 280 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 288 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 296 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 304 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 312 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 320 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 328 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 336 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 344 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 352 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 360 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 368 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 376 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 384 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 392 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 400 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 408 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 416 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 424 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 432 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 440 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 448 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 456 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 464 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 472 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 480 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 488 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 496 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 504 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 512 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 520 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 528 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 536 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 544 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 552 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 560 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 568 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 576 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 584 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 592 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 600 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 608 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 616 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 624 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 632 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 640 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 648 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 656 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 664 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 672 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 680 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 688 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 696 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 704 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 712 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 720 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 728 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 736 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 744 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 752 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 760 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 768 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 776 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 784 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 792 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 800 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 808 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 816 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 824 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 832 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 840 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 848 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 856 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 864 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 872 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 880 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 888 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 896 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 904 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 912 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 920 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 928 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 936 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 944 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 952 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 960 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 968 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 976 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 984 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 992 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1000 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1008 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1016 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1024 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1032 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1040 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1048 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1056 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1064 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1072 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1080 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1088 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1096 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1104 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1112 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1120 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1128 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1136 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1144 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1152 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1160 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1168 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1176 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1184 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1192 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1200 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1208 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1216 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1224 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1232 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1240 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1248 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1256 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1264 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1272 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1280 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1288 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1296 von 1304
FSM: new state 2
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 13
FSM: LOKINFO CFG data, aktuell 1304 von 1304
==12481== Invalid write of size 1
==12481== at 0x403C33: HandleLokinfoCfgData (states.c:311)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481== Address 0x5415b88 is 0 bytes after a block of size 1,304 alloc'd
==12481== at 0x4C2B3F8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12481== by 0x403AD7: HandleLokinfoCfgHeader (states.c:276)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481==
new paragraph lokomotive in lok info cfg
lokomotive paragraph in lok cfg
new value lok= in lok cfg
neuer lok Eintrag
new value uid=0x4005 in lok cfg
lok uid
new value name=335 105-3 DB in lok cfg
lok name
new value adresse=0x17 in lok cfg
lok adresse
new value typ=mfx in lok cfg
lok typ
new value mfxuid=0x7dfc3a80 in lok cfg
lok mfxuid
new value symbol=1 in lok cfg
lok symbol
new value symbol=1 in lok cfg
lok symbol
new value av=15 in lok cfg
lok av
new value bv=15 in lok cfg
lok bv
new value volume=0 in lok cfg
lok volume
new value velocity=0 in lok cfg
lok velocity
new value richtung=0 in lok cfg
lok richtung
new value vmax=255 in lok cfg
lok vmax
new value vmin=20 in lok cfg
lok vmin
new value fkt= in lok cfg
lok fkt
new value typ=1 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=9 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=9 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=0 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=8 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=0 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=1 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=0 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=1 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=0 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=0 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=0 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=0 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=0 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=0 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value fkt= in lok cfg
lok fkt
new value typ=0 in lok cfg
lok function typ
new value dauer=0 in lok cfg
lok function dauer
new value wert=0 in lok cfg
lok function wert
new value wert=0 in lok cfg
lok function wert
end of lok info cfg
save lokomotive.cs2
FSM: new state 6
add client socket 4
wait for 4 fd, max 10 s
select liefert 0
interrupt at Sun Jan 3 12:37:59 2016
 
==12481== Use of uninitialised value of size 8
==12481== at 0x4032E1: HandleWaitMs2Timer (states.c:79)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402F3C: ZentraleRun (zentrale.c:490)
==12481== by 0x401C4A: main (main.c:103)
==12481==
FSM: periodic task
==12481== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
==12481== at 0x513E4D2: send (send.c:28)
==12481== by 0x40A0B5: MrIpcSend (send.c:10)
==12481== by 0x4032B6: QueryMembers (states.c:72)
==12481== by 0x40330C: HandleWaitMs2Timer (states.c:83)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402F3C: ZentraleRun (zentrale.c:490)
==12481== by 0x401C4A: main (main.c:103)
==12481== Address 0x7fefffc74 is on thread 1's stack
==12481==
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 7
FSM: CAN member 1195604753, version 295, type 16
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 0
interrupt at Sun Jan 3 12:38:09 2016
 
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
==12481== Use of uninitialised value of size 8
==12481== at 0x4032E1: HandleWaitMs2Timer (states.c:79)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x403029: ZentraleRun (zentrale.c:512)
==12481== by 0x401C4A: main (main.c:103)
==12481==
FSM: periodic task
FSM: new state -1
read new comand frame from socket 6
FSM: answer ping
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 7
FSM: CAN member 1195604753, version 295, type 16
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 7
FSM: CAN member 1195604753, version 295, type 16
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 0
interrupt at Sun Jan 3 12:38:27 2016
 
add client socket 4
wait for 4 fd, max 10 s
select liefert 0
interrupt at Sun Jan 3 12:38:37 2016
 
FSM: periodic task
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 7
FSM: CAN member 1195604753, version 295, type 16
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 6
FSM: answer ping
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 7
FSM: CAN member 1195604753, version 295, type 16
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 0
interrupt at Sun Jan 3 12:38:57 2016
 
FSM: periodic task
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 7
FSM: CAN member 1195604753, version 295, type 16
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 0
interrupt at Sun Jan 3 12:39:07 2016
 
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
FSM: periodic task
FSM: new state -1
read new comand frame from socket 6
FSM: answer ping
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 7
FSM: CAN member 1195604753, version 295, type 16
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 7
FSM: CAN member 1195604753, version 295, type 16
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 0
interrupt at Sun Jan 3 12:39:27 2016
 
add client socket 4
wait for 4 fd, max 10 s
select liefert 0
interrupt at Sun Jan 3 12:39:37 2016
 
FSM: periodic task
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 7
FSM: CAN member 1195604753, version 295, type 16
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 6
FSM: answer ping
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 7
FSM: CAN member 1195604753, version 295, type 16
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 0
interrupt at Sun Jan 3 12:39:57 2016
 
FSM: periodic task
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
select liefert 1
read new comand frame from socket 7
FSM: CAN member 1195604753, version 295, type 16
FSM: new state -1
add client socket 4
wait for 4 fd, max 10 s
 



Das sind (im Normalfall) eher die harmlosen Stellen:

1
2
3
4
 

==12481== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
==12481== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
 
 


aber diese Stellen sollte man Aufmerksamkeit schenken:

1
2
3
4
5
6
7
8

Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.539
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital


RE: MS2 und Beaglebone Black als Zentrale

#20 von st-oldie , 03.01.2016 17:08

Hallo Gerd,

du hast aber viel Zeit übrig Ich komme da ja gar nicht hinterher.

Zitat von bertr2d2
ich habe mal Deinen Code genommen um zu schauen, warum momentan 'mrzentrale' teilweise auf dem BPi abstürzt. Ich mache das auf meiner Workstation (AMD64).



Nicht nur auf dem BPi, mit der kaputten Datenbank der MS2 hatte ich auch schon einen Absturz bei mir auf dem BBB. Aber mit einer nicht korrupten Datenbank der MS2 hab ich den Absturz noch nicht gesehen. Der Fehler dürfte aber dennoch unabhängig von der HArdwareplattform sein. Evtl. aber abhängig von der Entwicklungsumgebung bzw. deren Einstellungen.

Du hast im Parallelthread geschrieben, du hättest ein paar Änderungen gemacht. Kannst du sie mir zusenden? Oder hast du das gerade schon gemacht?

Zitat von bertr2d2

1
2
3
4
5
6
7
8
9
10
11
12
13
 

==12481== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
==12481== at 0x513E4D2: send (send.c:28)
==12481== by 0x40A0B5: MrIpcSend (send.c:10)
==12481== by 0x40582D: HandlePing (states.c:885)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481== Address 0x7fefffc24 is on thread 1's stack
==12481==
 
 





Die Meldung verstehe ich so auf Anhieb nicht. Send bekommt nur den Socket und die zu sendenen Daten, die fast immer auf dem Stack angelegt werden.

Zitat von bertr2d2

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
 

==12481== Invalid read of size 1
==12481== at 0x50943B1: vfprintf (vfprintf.c:1630)
==12481== by 0x509C8D8: printf (printf.c:35)
==12481== by 0x4034C2: HandleLoknameCfgData (states.c:133)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481== Address 0x54152c0 is 0 bytes after a block of size 80 alloc'd
==12481== at 0x4C2B3F8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12481== by 0x4033B3: HandleLoknameCfgHeader (states.c:102)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481==
[lok]
.name=335 105-3 DB
[lok]
.name=
[numloks]
.wert=1
==12481== Invalid write of size 1
==12481== at 0x4034D6: HandleLoknameCfgData (states.c:134)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481== Address 0x54152c0 is 0 bytes after a block of size 80 alloc'd
==12481== at 0x4C2B3F8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==12481== by 0x4033B3: HandleLoknameCfgHeader (states.c:102)
==12481== by 0x40BCF3: FsmDo (in /home/gerd/projekte/railroad/mrsystem/src/bin/mrzentrale)
==12481== by 0x402B99: ProcessSystemData (zentrale.c:420)
==12481== by 0x402C5A: HandleSystemData (zentrale.c:446)
==12481== by 0x403091: ZentraleRun (zentrale.c:518)
==12481== by 0x401C4A: main (main.c:103)
==12481==
 
 


Riecht nach Strings, die ein Byte zu kurz (fehlendes Byte für Null Terminierung ?) angelegt worden sind ...




Auch das kann ich auf Anhieb nicht zuordnen. Ich lege die Liste der Loknamen in einem Array an, daß ich dynamisch anlege und bei größeren Anzahl Loks mit realloc vergrößere. Die dort gespeicherten Loknamen werden mit in einem String mit 17 Zeichen Länge gespeichert, der Bestandteil des Arrays ist (array of struct). Der sollte also groß genug sein. Also sollte das erst mal kein Grund für den Absturz sein.

Der Trace von Kevin

Zitat von 4000K

Falls es hilft:

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
 

...
FSM: evaluate lokname cfg
[lok]
.name=146 240-7
[lok]
.name=ABC
[numloks]
.wert=8
Qnew paragraph lok in lok cfg
lok paragraph in lok cfg
new value name=146 240-7 in lok cfg
lok name 0 in lok cfg
new paragraph lok in lok cfg
lok paragraph in lok cfg
new value name=ABC in lok cfg
lok name 1 in lok cfg
new paragraph numloks in lok cfg
numloks paragraph in lok cfg
new value wert=8 in lok cfg
number of loks in lok cfg
number of loks in lok cfg is 8
end of lok cfg
Segmentation fault
root@BananaPi:~#
 
 



[/quote]

Deutet auf die Funktion "HandleLoknameCfgData()" in states.c hin, wo ich die CAN Nachricht mit den Loknamen parse, um die Loknamen zu speichern und die Anzahl Loks bekomme. Mit der letzten Ausgabe sollte also zumindest die while Schleife, mit der die Daten geparst werden, beendet sein. Da weitere Ausgaben fehlen, dürfte also wohl der Absturz stattfinden, bevor die Lokinfos oder weitere Loknamen angefordert werden. Also vor der nächsten IF-Anweisung. Evtl. könnte der Fehler auch im Parser stecken.

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: MS2 und Beaglebone Black als Zentrale

#21 von bertr2d2 , 03.01.2016 18:10

Zitat von st-oldie
Hallo Gerd,

du hast aber viel Zeit übrig Ich komme da ja gar nicht hinterher.


Kevins Frustiertheit nagt an meinem Gewissen

Zitat

Zitat von bertr2d2
ich habe mal Deinen Code genommen um zu schauen, warum momentan 'mrzentrale' teilweise auf dem BPi abstürzt. Ich mache das auf meiner Workstation (AMD64).



Nicht nur auf dem BPi, mit der kaputten Datenbank der MS2 hatte ich auch schon einen Absturz bei mir auf dem BBB. Aber mit einer nicht korrupten Datenbank der MS2 hab ich den Absturz noch nicht gesehen. Der Fehler dürfte aber dennoch unabhängig von der HArdwareplattform sein. Evtl. aber abhängig von der Entwicklungsumgebung bzw. deren Einstellungen.

Du hast im Parallelthread geschrieben, du hättest ein paar Änderungen gemacht. Kannst du sie mir zusenden? Oder hast du das gerade schon gemacht?



Valgrind ist IMHO ein wirklich nützliches Tool insbesondere für einen Nicht-Profi wie mich. Ich habe schon etliche Fehler damit gefunden.

Folgende Änderungen habe ich gemacht:

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
 

--- a/mrsystem/src/client_zentrale/states.c
+++ b/mrsystem/src/client_zentrale/states.c
@@ -76,9 +76,9 @@ static int HandleWaitMs2Timer(void *Priv, void *SignalData)
{ ZentraleStruct *Data;
MrIpcCmdType *CmdFrame;

+ Data = (ZentraleStruct *)Priv;
if (ZentraleGetVerbose(Data))
puts("FSM: periodic task");
- Data = (ZentraleStruct *)Priv;
CmdFrame = (MrIpcCmdType *)SignalData;
QueryMembers(Data);
if (ZentraleGetVerbose(Data))
@@ -99,7 +99,7 @@ static int HandleLoknameCfgHeader(void *Priv, void *SignalData)
printf("FSM: LOKNAME CFG data length %lu, crc %dn", Length, Crc);
ZentraleSetCfgLength(Data, Length);
ZentraleSetCfgHaveRead(Data, 0);
- ZentraleSetCfgBuffer(Data, malloc(ZentraleGetCfgLength(Data)));
+ ZentraleSetCfgBuffer(Data, malloc(ZentraleGetCfgLength(Data)+1));
if (ZentraleGetCfgBuffer(Data) == NULL)
{
if (ZentraleGetVerbose(Data))
@@ -273,7 +273,7 @@ static int HandleLokinfoCfgHeader(void *Priv, void *SignalData)
printf("FSM: LOKINFO CFG data length %lu, crc %dn", Length, Crc);
ZentraleSetCfgLength(Data, Length);
ZentraleSetCfgHaveRead(Data, 0);
- ZentraleSetCfgBuffer(Data, malloc(ZentraleGetCfgLength(Data)));
+ ZentraleSetCfgBuffer(Data, malloc(ZentraleGetCfgLength(Data)+1));
if (ZentraleGetCfgBuffer(Data) == NULL)
{
if (ZentraleGetVerbose(Data))
 
 


Gerade der erste Bug hat bei mit einem Segmentation-Fault zugeschlagen. Übrigens hat Valgrind alle drei Stellen angemeckert ...

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.539
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital


RE: MS2 und Beaglebone Black als Zentrale

#22 von st-oldie , 03.01.2016 19:05

Hallo Gerd,

Zitat von bertr2d2
Kevins Frustiertheit nagt an meinem Gewissen



Gut, für den Teil, deine Lösung falsch verstanden zu haben, kann ich nichts. Aber Fehler im mrsystem gehen auf meine Kappe. Wobei ich ja insgeheim die Hoffung hatte, daß eine größere Userbasis zu mehr Tests führt und Fehler aufdeckt, die ich noch nicht gefunden hab.

Zitat von bertr2d2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 

--- a/mrsystem/src/client_zentrale/states.c
+++ b/mrsystem/src/client_zentrale/states.c
@@ -76,9 +76,9 @@ static int HandleWaitMs2Timer(void *Priv, void *SignalData)
{ ZentraleStruct *Data;
MrIpcCmdType *CmdFrame;

+ Data = (ZentraleStruct *)Priv;
if (ZentraleGetVerbose(Data))
puts("FSM: periodic task");
- Data = (ZentraleStruct *)Priv;
CmdFrame = (MrIpcCmdType *)SignalData;
QueryMembers(Data);
if (ZentraleGetVerbose(Data))
 
 


Gerade der erste Bug hat bei mit einem Segmentation-Fault zugeschlagen. Übrigens hat Valgrind alle drei Stellen angemeckert ...




Ok, ja das ist ein Fehler. Da es nur ein lesender Zugriff ist, kann das aber auch ohne Absturz als Folge bleiben. Aber da kann tatsächlich lesend auf ungültigen Speicher zugegriffen werden.

Zitat von bertr2d2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 

@@ -99,7 +99,7 @@ static int HandleLoknameCfgHeader(void *Priv, void *SignalData)
printf("FSM: LOKNAME CFG data length %lu, crc %dn", Length, Crc);
ZentraleSetCfgLength(Data, Length);
ZentraleSetCfgHaveRead(Data, 0);
- ZentraleSetCfgBuffer(Data, malloc(ZentraleGetCfgLength(Data)));
+ ZentraleSetCfgBuffer(Data, malloc(ZentraleGetCfgLength(Data)+1));
if (ZentraleGetCfgBuffer(Data) == NULL)
{
if (ZentraleGetVerbose(Data))
@@ -273,7 +273,7 @@ static int HandleLokinfoCfgHeader(void *Priv, void *SignalData)
printf("FSM: LOKINFO CFG data length %lu, crc %dn", Length, Crc);
ZentraleSetCfgLength(Data, Length);
ZentraleSetCfgHaveRead(Data, 0);
- ZentraleSetCfgBuffer(Data, malloc(ZentraleGetCfgLength(Data)));
+ ZentraleSetCfgBuffer(Data, malloc(ZentraleGetCfgLength(Data)+1));
if (ZentraleGetCfgBuffer(Data) == NULL)
{
if (ZentraleGetVerbose(Data))
 
 





Die beiden Änderungen sind so, wie du vermutet hast, unnötig. Da kopiere ich die empfangene Teile der CFG Daten (Loknamen bzw. Lokinfo) zusammen. Da wird nichts zusätzlich angehängt. Die MS2 sagt ja, wieviel Bytes kommen. Aber durch deinen Hinweis ist mir etwas anderes aufgefallen: ich kopiere immer jeden empfangenen Puffer mit allen 8 Bytes komplett in diesen Puffer. Wenn die Anzahl CFG Bytes, die mir die MS2 meldet, nicht Vielfache von 8 Bytes sind, kopiere ich zuviel. Ich teste nicht beim Kopieren, wieviel Bytes noch fehlen. Das kann je nachdem, welches die Mindestgröße für einen malloc Aufruf in der Speicherverwaltung ist, und wie lang die Namen sind und wieviel Bytes damit pro Infoeinheit mit den Loknamen zusammenkommt, zu einem Überschreiben führen. Du solltest also beim Anlegen des Puffers nicht 1 für eine abschließendes Nullbyte sondern 7 für das Alignment auf 8 zur Größe addieren (oder schöner aber aufändiger auf Vielfache von 8 aufrunden):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 

@@ -99,7 +99,7 @@ static int HandleLoknameCfgHeader(void *Priv, void *SignalData)
printf("FSM: LOKNAME CFG data length %lu, crc %dn", Length, Crc);
ZentraleSetCfgLength(Data, Length);
ZentraleSetCfgHaveRead(Data, 0);
- ZentraleSetCfgBuffer(Data, malloc(ZentraleGetCfgLength(Data)));
+ ZentraleSetCfgBuffer(Data, malloc(ZentraleGetCfgLength(Data)+7));
if (ZentraleGetCfgBuffer(Data) == NULL)
{
if (ZentraleGetVerbose(Data))
@@ -273,7 +273,7 @@ static int HandleLokinfoCfgHeader(void *Priv, void *SignalData)
printf("FSM: LOKINFO CFG data length %lu, crc %dn", Length, Crc);
ZentraleSetCfgLength(Data, Length);
ZentraleSetCfgHaveRead(Data, 0);
- ZentraleSetCfgBuffer(Data, malloc(ZentraleGetCfgLength(Data)));
+ ZentraleSetCfgBuffer(Data, malloc(ZentraleGetCfgLength(Data)+7));
if (ZentraleGetCfgBuffer(Data) == NULL)
{
if (ZentraleGetVerbose(Data))
 
 



Versuch bitte nochmals diese Änderung. sonst besteht die Möglichkeit, daß mrzentrale immer noch abstürzt. Das könnte tatsächlich der Absturz sein, den Kevin gefunden hat. Weil er genau da auftritt, wo aufgeräumt wird, nachdem möglicherweise über das Pufferende geschrieben wurde.

Ach ja, beim Einfügen der Änderung sehe ich gerade, daß ich an einer Stelle sogar diesen zusätzlichen Offset addiert hab.

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: MS2 und Beaglebone Black als Zentrale

#23 von bertr2d2 , 03.01.2016 20:04

Hallo Michael,

jetzt sieht es so aus, das BPi immer noch abstürzt, AMD64 läuft sauber. Hier mal ein Vergleich:
links BPi - rechts AMD64

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
 

read new comand frame from socket 13 read new comand frame from socket 13
FSM: evaluate lokname cfg FSM: evaluate lokname cfg
[lok] [lok]
.name=335 105-3 DB .name=335 105-3 DB
[lok] [lok]
.name= .name=
[numloks] [numloks]
.wert=1 .wert=1
ardvers=anew paragraph lok in lok cfg | �new paragraph lok in lok cfg
lok paragraph in lok cfg lok paragraph in lok cfg
new value name=335 105-3 DB in lok cfg new value name=335 105-3 DB in lok cfg
lok name 0 in lok cfg lok name 0 in lok cfg
new paragraph lok in lok cfg new paragraph lok in lok cfg
lok paragraph in lok cfg lok paragraph in lok cfg
new value name= in lok cfg new value name= in lok cfg
lok name 1 in lok cfg lok name 1 in lok cfg
new paragraph numloks in lok cfg new paragraph numloks in lok cfg
numloks paragraph in lok cfg numloks paragraph in lok cfg
new value wert=1 in lok cfg new value wert=1 in lok cfg
number of loks in lok cfg number of loks in lok cfg
number of loks in lok cfg is 1 number of loks in lok cfg is 1
end of lok cfg end of lok cfg
request lokinfo 0 >335 105-3 DB< from 1 request lokinfo 0 >335 105-3 DB< from 1
FSM: new state 3 FSM: new state 3
Segmentation fault | add client socket 4
> wait for 4 fd, max 10 s
> select liefert 1
> read new comand frame from socket 10
> FSM: unhandled 10
> FSM: new state -1
 

 


Interessanter Weise funktioniert das BPi 'mrzentrale' auch, wenn ich es mit Debugging Informationen übersetze. Da scheint noch was zu klemmen

Gruß

Gerd


Smallest Rocrail Server Ever II ist jetzt Smallest Railroad Server Ever II
SRSEII -> SRSEII (Raider heisst jetzt Twix, sonst ändert sich nix )


bertr2d2  
bertr2d2
CityNightLine (CNL)
Beiträge: 1.539
Registriert am: 09.10.2012
Spurweite H0
Stromart Digital


RE: MS2 und Beaglebone Black als Zentrale

#24 von Rainald Adamski , 04.01.2016 00:05

Hallo,

ich habe einige Fragen zu der Diskussion. Leider ist mir das technische Niveau zu hoch.

Ich bin auf der Suche nach einer Zentrale, die MM, DCC und mfx sprechen kann. Vorab, die die CS ist mir oversized, da ich weiterhin mit einem PC fahren möchte. Derzeit im Einsatz WDP 8.x, IB 1 upgedated, RM über S88-N, 4 Boosterkreise 3xTAMS B3 zum Fahren, 1 x Delta zum Schalten MM
In Zukunft möchte ich mit iTrain fahren, Rocrail ist mir zu kryptisch. Die RM kann ich direkt an den Rechner anschließen, Littfinski HSI oder Tams.

Jetzt konkret zu meiner Frage,
Kann ich meine Vorstellung mit der diskutierten Hardware (BBB, MS2) und meiner installierten HArdware realisieren?
Was benötige ich für zusätzliche Hardware?
Was benötige ich für Software?
Als Handfahrgeräte sind Tablet und MS 2 vorhanden.
Gibt es ein "how to"?

Besten Dank vorab für Eure Anrworten


Beste Grüße aus Neuss

Rainald


Rainald Adamski  
Rainald Adamski
InterRegio (IR)
Beiträge: 166
Registriert am: 20.05.2005
Ort: Neuss
Gleise K-Gleis
Spurweite H0
Steuerung SRSE I und II, DTC-Drehscheibest., LS-Railspeed, iTrain pro 5.1.x
Stromart Digital


RE: MS2 und Beaglebone Black als Zentrale

#25 von Frankenbahn , 04.01.2016 00:18

Zitat von bertr2d2

Riecht nach Strings, die ein Byte zu kurz (fehlendes Byte für Null Terminierung ?) angelegt worden sind ...


Ich bin zwar kein Linux-Entwickler und seit 15 Jahren entwickle ich gar nichts mehr, aber mir sieht das aus der Ferne auch genau nach diesem Problem aus.
Führt zu extrem schwer zu findenden Fehlern, die sich ganz boshaft auswirken.
Gerade auf dem Stack hat das oft dazu geführt, dass das Lowbyte der Rücksprungadresse mit 0 überschrieben wurde und der Code danach nur ungefähr an der richtigen Stelle fortgesetzt wurde
Blöderweise konnte man das im Debugger immer nicht feststellen, weil der Compiler im Debug-Modus Füllbytes eingefügt hatte.
Viel Erfolg bei der Fehlersuche
Martin


Frankenbahn  
Frankenbahn
InterRegio (IR)
Beiträge: 100
Registriert am: 16.05.2015
Spurweite H0, N
Stromart Digital


   


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