www.sondersignalanlagen.com

www.sondersignalanlagen.com (https://sosi.myds.me/forum/index.php)
-   Hella RTK + OWS (https://sosi.myds.me/forum/forumdisplay.php?f=54)
-   -   RTK7 CAN-Bus verstehen (https://sosi.myds.me/forum/showthread.php?t=29346)

Doc112 23.09.2018 13:06

RTK7 CAN-Bus verstehen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute!


Letzte Woche sind zwei CAN-Bus Module mit SPI-Schnittstelle aus China angekommen. Und jetzt versuche ich mich in den CAN-Bus ein zu fuchsen.


Mein Ziel ist es einzelne Nachrichte im CAN-Bus abzufangen und diese der passenden Funktion zu zu ordnen. Später will ich dann einen CAN-Node mittels Arduino bauen um selbst die RTK7 zu steuern.


Als Hardware nutze ich eine Arduino, der mir die Brücke zwischen Mac und CAN-Bus ermöglichen soll. Der Arduino gibt die empfangenen Nachrichten über den Seriellen Monitor aus. Als CAN-Shield nutze ich ein MCP2515 wie dieses (LINK) und die mcp_can Library (LINK).

https://uploads.tapatalk-cdn.com/201...1e47be24fb.jpg
https://uploads.tapatalk-cdn.com/201...3bc7555cec.jpg

Grundlegende Infos gibt es z.B. hier:
http://henrysbench.capnfatz.com/henr...work-tutorial/


Mit meinem Testaufbau (Arduino Uno & Arduino MEGA (SPI-Belegung unterschiedlich) kann ich eine zuverlässliche Kommunikation zwischen Sender und Empfänger aufbauen.

https://uploads.tapatalk-cdn.com/201...afba553eb5.tif

Code:

//Empfänger
#include "spi.h"
 #include "mcp_can.h"

// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 10;

MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin

void setup()
{
    Serial.begin(115200);

    while (CAN_OK != CAN.begin(CAN_125KBPS))              // init can bus : baudrate = 500k
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    }
    Serial.println("CAN BUS Shield init ok!");
}


void loop()
{
    unsigned char len = 0;
    unsigned char buf[8];

    if(CAN_MSGAVAIL == CAN.checkReceive())            // check if data coming
    {
        CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf

        unsigned long canId = CAN.getCanId();
       
        Serial.println("-----------------------------");
        Serial.print("Get data from ID: 0x");
        Serial.println(canId, HEX);

        for(int i = 0; i<len; i++)=""  ="" print="" the="" data
          {
            Serial.print(buf[i], HEX);
            Serial.print("\t");
        }
        Serial.println();
    }
}

Code:

// Sender
#include "mcp_can.h"
#include "SPI.h"

// the cs pin of the version after v1.1 is default to D9
// v0.9b and v1.0 is default D10
const int SPI_CS_PIN = 53;

MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin

void setup()
{
    Serial.begin(115200);

    while (CAN_OK != CAN.begin(CAN_125KBPS))              // init can bus : baudrate = 500k
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println(" Init CAN BUS Shield again");
        delay(100);
    }
    Serial.println("CAN BUS Shield init ok!");
}

unsigned char stmp[8] = {0, 0, 0, 0, 0, 0, 0, 0};
void loop()
{
    // send data:  id = 0x00, standrad frame, data len = 8, stmp: data buf
    stmp[7] = stmp[7]+1;
    if(stmp[7] == 100)
    {
        stmp[7] = 0;
        stmp[6] = stmp[6] + 1;
       
        if(stmp[6] == 100)
        {
            stmp[6] = 0;
            stmp[5] = stmp[6] + 1;
        }
    }
   
    CAN.sendMsgBuf(0x00, 0, 8, stmp);
    delay(100);                      // send data per 100ms
}

</len;>

Die Boud-Rate ist bereits auf 125kbs wie aus dem RTK7-Programm ausgelesen angepasst.


Im Bild unten seht ihr die Ausgabe aus der RTK7.


Doch wenn ich dann den Empfänger an den CAN-Bus der die ZSE verlässt anschließe kommt nichts sinvolles an. Bei Betätigen der HKL-Taste am HA änder sich zwar der Serielle Monitor aber die Nachricht sieht nicht nach einer CAN-Nachricht aus.


Was denkt ihr mache ich Falsch?
Meines Wissens baut das CiA 447 auf CAN-Open auf. Ist die Nachrichtenstruktur nicht erhalten wie bei CAN-Open?


Ich bin auf eure Ideen gespannt und hoffe ihr könnt mir helfen.

Vielen Dank und Grüße

JOHANNES

Blaulicht 23.09.2018 13:25

Sehr interesssant, aber ich versteh nur Bahnhof :kratz:

techniker 23.09.2018 13:57

D.h. du willst die ZSE selbst steuern?
Im Prinzip relativ einfach, da der Grundaufbau nach DIN festgelegt ist.
(DIN hätte ich hier, darf ich aber nicht weitergeben.)

Dies wollte/werde ich auch irgendwann umsetzten bzw. weitermachen, wenn ich mal Zeit dazu finde.. :roll: :flenn:

Wenn ich mich recht erinnere war das 0x0600h + Node-ID für SDO-MSG's vom Gateway zur Komponente. Deine 0x400'er Knoten-ID's müsste ich erst wieder nachschlagen, was dies für Nachrichtentypen sind.. :kratz:
(kann mich auch irren - wie gesagt, ist schon eine Weile her..)

-------------------

PS: Oder war das evtl. die Heartbeat-ID der ZSE..? :kratz:

Doc112 24.09.2018 07:06

Denkst du die Nachrichten sind so kurz?

techniker 24.09.2018 08:24

Ja. Es werden zu 95% nur Flags übertragen.. ;)

Doc112 24.09.2018 13:44

Zitat:

Zitat von techniker (Beitrag 313032)
Ja. Es werden zu 95% nur Flags übertragen.. ;)

Dann versuche ich mal was zu senden.

Doc112 16.10.2018 13:14

Es ist ein kleine Problem aufgetreten. Wie ihr oben seht sind die empfangenen Nachrichten von der RTK7 nicht so lang wie die normalen CAN-Nachrichten. Ich bekomme diese aber nicht gut gefiltert.
Meine Vorstellung wäre es, die zwei HEX-Stellen zu speichern und erst im Serial-Monitor auszugeben, wenn sich die neue Nachricht von der Alten unterscheidet. So wäre die Analyse einfacher.
Mit der Pufferstelle [i] hab ich schon was versucht, klappt leider nicht.

Habt ihr eine Idee?

Gruß JOHANNES

Actros 19.10.2018 08:01

Kannst du die ASCII Werte mit der Software in Bits umwandeln ?
Macht das ganze übersichtlicher :D

Meister_xxl 21.02.2020 23:18

Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

ich greife das Thema mal wieder auf und habe mal meine RTK7 auf dem CAN abgehört. Sieht anders aus.

702h bis 705h senden ständig.
30ah ändert seinen Inhalt, wenn Blaulicht oder andere Lichtfunktionen geschaltet werden.
2c1h,2c3h,341h und 343h scheinen vom Matrix-ASG hinten zu kommen.
1e1h,1e3h,261h und 263h scheinen vom Matrix-ASG vorne zu kommen.
Die anderen kann ich aktuell nicht zuordnen.

Vielleicht kann Wilhelm ja mal ein paar Infos dazu schreiben.

Gruß
Dennis

Doc112 22.02.2020 08:14

Sehr gut. Wie sieht denn dein versuchsaufbau aus? Welche Hard- und Software nutzt du? Hast du schon Nachrichten versendet?
Gruß JOHANNES

Meister_xxl 22.02.2020 15:22

USBtin interface mit USBtin Viewer, aber auch Arduino mit CAN Shield. Beide werfen die gleichen Daten aus. Um sinnvoll senden zu können, muß ich erstmal die entsprechenden Sequenzen finden und dann simulieren.

Doc112 23.02.2020 09:16

Kannst du mir den Arduino Code schicken?

Meister_xxl 23.02.2020 12:43

Liste der Anhänge anzeigen (Anzahl: 1)
Hier der Code

Meister_xxl 25.02.2020 22:27

Liste der Anhänge anzeigen (Anzahl: 1)
Hier mal ein Log vom Start nach Anschalten der Stromversorgung


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:44 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.