Arduino / canbus / UVR ?

Es gibt 3 Antworten in diesem Thema, welches 7.159 mal aufgerufen wurde. Der letzte Beitrag () ist von SolarEngel.

  • Hallo
    es gibt für den Arduino ein preiswertes canbus shield < 10 euro
    und das mit klassenbibliotek
    hat damit schon mal einer versucht damit den canbus der uvr auszulesen ?


    könnte mir z.b einen WMZ auf den arduino vorstellen
    oder zusätzliche sensoren über den arduino auf den canbus schreiben und damit als netzwerkeingang für die UVR verwertbar
    mit 1wire sensoren 18ds...... hätte man unzählige sensoren auf der uvr



    gruß
    meinolf

    HVS40LC
    große Brennkammer /bessere Turbos (Sven)
    14 Lochdüse
    2400l Puffer ( Tichelmann verschaltet )
    UVR1611 /CMI / Datalogger mit Raspberry
    10qm Solar Vaillant Flachkollektor
    Eigenbau Frischwassersttion

  • Hallo,


    da der ESP32 im Umgang und in der Programmierung Arduino-ähnlich ist, möchte ich diesem Thread antworten.


    Ich bin zur Zeit am experimentieren mit dem ESP32, der kennt laut Datenblatt auch CAN-Funtionen.
    Speziell wollte ich herausfinden, ob es mit einfachen Mitteln möglich ist die Datenpakete
    von meinem CAN-Bus an dem die uvr1611, cmi, bl-net und can-io dranhängen mitzulesen.


    Es ist nur einen CAN-Bus-Transceiver notwendig, der die 12V CAN-Bus-Signale in die für den ESP32
    notwendigen 3,3V TTL-Signale (rx und tx) umwandelt. Den Rest kann der ESP32 und ein bisschen Software.


    Man merkt schon dass in den letzten Jahren die Maker-Szene grösser geworden ist. Es gibt auch dafür sehr preisgünstig Fertigmodule.
    Ich habe ein Waveshare SN65HVD230 CAN Board für ca. 5,94 EURO bei Eckstein gefunden, das genau diesen Zweck erfüllt.


    Die ersten Versuche wurden mit dem Logikanalyser gemacht, der kann auch CAN-Protokoll analysieren.
    Hier ein Standard CAN-Datenpaket mit Checksumme am Ende. Mein UVR CAN-Bus läuft mit 50kBit/s.


    erster Testaufbau auf dem Steckbrett


    Ich betrachte diese Monitoringsmöglichkeit meines UVR - CAN-Bus wie ein Messgerät das die CAN-Bussignale sichtbar machen
    kann, nicht mehr und nicht weniger.


    Nützlich sein kann diese Information im Fehlerfall, wenn man Datenpakete von einem bestimmten Gerät
    auf dem Bus vermisst und nicht genau weiss wo man suchen soll.
    Interessant finde ich auch die Heartbeatmeldungen, die alle TA-Geräte in regelmässigen Abständen senden.
    Da kann man sehen ob ein Gerät noch funktioniert, auch wenn keine sonstige Kommunikaton stattfindet.


    Ich möchte einfach ein Gefühl dafür bekommen, ob der Bus z.B. überlastet ist. Dann könnte ich z.B. einige
    Abfragen nicht so oft durchführen. Oder wenn es timeouts geben sollte, dann könnte ich sehen
    welche Geräte besonders aktiv auf dem CAN-Bus sind und dann besser rausfinden warum.. usw..


    Jedes CAN-Datenpaket hat am Anfang einen Identifier, der sagt ganz grob aus, von welchem Gerät zu welchem Zweck
    die Daten kommen.


    In einer CANOPEN-Beschreibung habe ich eine soche CAN-Identifier-Zurodnungsmöglichkeit gefunden..


    Identifierzuordnung
    ----------------------------------------------------------->gefundene Identifiers in meinen CAN-Busdaten
    180 + NID TPDO1 Netzwerkvariable Digital 1....16 -->01BE=BL-NET, 01A0=CAN-IO
    200 + NID TPDO2 Analog 1.....4 ---------------------->023E=BL-NET
    280 + NID TPDO3 Analog 5.....8 ---------------------->02BE=BL-NET
    300 + NID TPDO4 Analog 9....12 ---------------------->033E=BL-NET
    380 + NID TPDO5 Analog 13...16 --------------------->03BE=BL-NET
    400 + NID MPDO6 Client - Server Adressierung
    480 + NID MPDO7 Datenlogging --------------------->0481=UVR, 04BE=BL-NET, 04A6=CMI
    580 + NIDS SSDO1 Server -> Client
    5C0 + NIDC SSDO2....SSDO63 Server -> Client ---->05F8=CMI
    600 + NIDS SSDO1 Client -> Server
    640 + NIDC SSDO2....SSDO63 Client -> Server ---->0678=CMI
    700 + NID Heartbeat ---------------------------------->0701=UVR, 073E=BL-NET, 0738=CMI, 0720=CAN-IO


    NID ..... Knotennummer ( 1....62)
    NIDS…. Knotennummer Server
    NIDC.... Knotennummer Client


    Meine Geräte die am CAN-Bus hängen und deren Knoten-Nr in hex, um den Identifier zu berechnen.
    knoten 56 = CMI hex 38
    Knoten 1 = UVR1611 hex 01
    Knoten 32 = CAN-IO hex 20
    Knoten 62 = BL-NET hex 3E


    Beispiel um den CAN-Idendifier vom Heartbeat-Paket der UVR1611 zu Berechnen: 0700hex + 01hex = 0701hex = Heartbeat-id von der UVR1611


    Hier ein Auszug vom Mitschnitt meiner CAN-Bus Daten von dem ESP32-Programm,
    damit man sieht, wie CAN-Datenpakete von den einzelnen Geräten beispielhaft identifiziert werden können.


    ---------------------------->CAN-Identifier
    New standard frame from 0x00000720, DLC 1, Data 0x05 --> Heartbeat-Paket von CAN-IO
    New standard frame from 0x0000073E, DLC 1, Data 0x05 --> Heartbeat-Paket von BL-NET
    New standard frame from 0x00000701, DLC 1, Data 0x05 --> Heartbeat-Paket von UVR1611
    New standard frame from 0x000004BE, DLC 8, Data 0x01 0xF4 0x4F 0x01 0x01 0x00 0x00 0x00 --> Datenlogging BL-NET
    New standard frame from 0x000004BE, DLC 8, Data 0x81 0xF1 0x4F 0x01 0x01 0x00 0x00 0x00
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x01 0x01 0x00 0x03 0x80 --> Datenlogging UVR1611
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x02 0x3A 0x02 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x03 0xFC 0x02 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x04 0x9E 0x02 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x05 0x29 0x02 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x06 0xF3 0x01 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x07 0x88 0x01 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x08 0x44 0x02 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x09 0xC6 0x01 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x0A 0x34 0x02 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x0B 0x25 0x01 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x0C 0x1F 0x01 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x0D 0x23 0x01 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x0E 0x0A 0x01 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x0F 0xAB 0x02 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x10 0x27 0x02 0x41 0x01
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x11 0x79 0x00 0x40 0x03
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x12 0x0F 0x00 0x80 0x80
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x13 0x32 0x12 0x00 0x00
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x14 0xA8 0x17 0x1C 0x00
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x15 0x00 0x00 0x00 0x00
    New standard frame from 0x00000481, DLC 8, Data 0x01 0xF0 0x4F 0x16 0xAA 0x0C 0x5C 0x00
    New standard frame from 0x000004BE, DLC 8, Data 0x81 0xF3 0x4F 0x01 0x01 0x00 0x00 0x00 --> Datenlogging BL-NET
    New standard frame from 0x000004BE, DLC 8, Data 0x01 0xF4 0x4F 0x01 0x01 0x00 0x00 0x00
    New standard frame from 0x000004BE, DLC 8, Data 0x81 0xF1 0x4F 0x01 0x02 0x00 0x00 0x00
    New standard frame from 0x00000738, DLC 1, Data 0x05 --> Heartbeat-Paket von CMI
    New standard frame from 0x00000678, DLC 8, Data 0x40 0x05 0x58 0x00 0x00 0x00 0x00 0x00 --> Client -> Server CMI
    New standard frame from 0x000005F8, DLC 8, Data 0x40 0x05 0x58 0x00 0x00 0x00 0x00 0x00 --> Server -> Client CMI
    New standard frame from 0x00000678, DLC 8, Data 0x60 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    New standard frame from 0x000005F8, DLC 8, Data 0x00 0xC2 0xC6 0x07 0x45 0x49 0x4E 0x47
    New standard frame from 0x00000678, DLC 8, Data 0x70 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    New standard frame from 0x000005F8, DLC 8, Data 0x10 0x41 0x45 0x4E 0x47 0x45 0xC5 0xC3
    New standard frame from 0x00000678, DLC 8, Data 0x60 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    New standard frame from 0x0000023E, DLC 8, Data 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF --> Analog 1.....4 von BL-NET
    New standard frame from 0x000003BE, DLC 8, Data 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF --> Analog 13...16 von BL-NET
    New standard frame from 0x0000033E, DLC 8, Data 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF --> Analog 9....12 von BL-NET
    New standard frame from 0x000002BE, DLC 8, Data 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF --> Analog 5.....8 von BL-NET
    New standard frame from 0x000001A0, DLC 2, Data 0x00 0x00 --> Netzwerkvariable Digital 1....16 von CAN-IO
    New standard frame from 0x000001BE, DLC 2, Data 0xFF 0xFF --> Netzwerkvariable Digital 1....16 von BL-NET


    Es ist nicht meine Absicht, den CAN-Bus und die Datepakete aller angeschlossenen Geräte zu dekodieren
    und irgendwelche externe Steuerungsmöglichkeiten zu schaffen. Dazu fehlen mir die Kenntnisse und Fähigkeiten
    und vor allem die notwendige Zeit. Ich habe auch nirgends eine Beschreibung des CAN-Protokolls der Geräte von TA gelesen.


    Das Programm ist sehr einfach und die Ausgabe erfolgt auf dem seriellen Monitor.
    Wenn man Arduinos programmieren kann, dann ist die Umstellung auf den ESP32 unproblematisch.
    Der Link zum runterladen der notwendigen ESP32CAN-Biliothek steht im Source-Code.
    Diese wird in der Programmier-IDE (version Arduino 1.8.6) im Menüpunkt SKETCH-Bibliothek einbinden-.zip-Bibliothek hinzufügen, den Programmen zugeordnet.


    In der Datei CAN_config.h in der ESP32CAN-Biliothek musste eine neue Zeile CAN_SPEED_50KBPS für die fehlende CAN-Busgeschwindigkeit
    hinzugefügt werden, damit auch 50kBit/s CAN-Bus gelesen werden kann.

    hier der Auszug von der Datei, in der geändert werden muss:
    ....
    /** \brief CAN Node Bus speed */
    typedef enum {
    CAN_SPEED_50KBPS = 50, /**< \brief CAN Node runs at 50kBit/s. */ /**--> diese Zeile muss hinzugefügt werden */
    CAN_SPEED_100KBPS = 100, /**< \brief CAN Node runs at 100kBit/s. */
    CAN_SPEED_125KBPS = 125, /**< \brief CAN Node runs at 125kBit/s. */
    ...
    CAN_SPEED_1000KBPS = 1000 /**< \brief CAN Node runs at 1000kBit/s. */
    } CAN_speed_t;
    ....


    Die angehängte .ZIP Datei mit einem UNZIPPER Programm entzippen. Dann die INO-Datei mit der Arduino IDE einlesen, kompilieren und auf den ESP32 hochladen.


    Gruß
    Jürgen

    Dateien

    Atmos D15P mit A25; LambdaCheck; UVR1611 mit CAN-I/O44, BL-NET und CMI ;
    2x1000l Puffer mit 2x10m² VRK und glykolfreie Solarthermie(Ost-West); WW-FWS; zentrale Wasserenthärtung;

    PV 3,2 kWp EEG; PV-Insel 6 kWp mit Victron MultiPlus-II 48/5000/70-50 und 8 x PylonTech LiFePo4 Modul 48V 2,4 kWh US2000 mit BMS; Victron Cerbo-GX;

    Herkules SE 5000 DF DIESEL Elektrostart Stromerzeuger Generator 2x220V-1x380V, Dauerleistung 4.200 Watt, 11 Stunden Dauerbetrieb, Tankinhalt 13,3 l

  • Hallo Jürgen,


    ich nutze aktuell ein selbst geschriebenes Skript (link), welches mein Schema/die Visualisierung (http://BL-Net/GRAFIK.htm) vom BL-Net auswertet. Das Schema habe ich mit dem TA-Designer erstellt.
    Das tolle daran ist, dass auch alle Ein/Ausgänge von Logikblöcken darüber ausgelesen werden können.


    Jetzt macht der BL-Net aber Ärger (ich muss ihn regelmäßig vom Strom trennen, damit er wieder reagiert) und ich suche nach Alternativen.


    Hast du die Variablen der Logikblöcke auch schon identifiziert?


    Wenn ich es richtig verstehe ist es vom jetzigen Status zu einem Ersatz des BL-Net aber noch weit, da das Tool aktuell nur den CAN-Bus auf die Serielle Schnittstelle schreibt ohne die Daten zu verarbeiten, oder?



    Gruß,
    Hendrik

  • Hallo Hendrik,


    ja, mit dem ESP32 kann man in diesem Status nur die Aktivität auf dem CAN-Bus lesen/messen für verschiedene Geräte(adressen).
    Das war mein kleines Forschungsprojekt CAN-Bus Messgerät mit ESP32. Ich hab da noch kein Bedarf gehabt um weiterzuforschen.
    Ist ja nur noch ein kleines oder grosses Stück Software dazu notwendig, um mehr Daten daraus auszulesen.
    Der ESP32 hat ja einen sehr großen Programmspeicher und viel Rechenpower im Vergleich zu den Arduinos, da kann man sich schon austoben.


    Bei mir läuft auch noch ein BL-NET im Hintergrund schon viele Jahre ohne Probleme.
    Ich lese dort die beiden Datenrahmen aus und schicke die Daten über MQTT zu meinem Smarthome.


    Eine kleine Html-Seite zum schnellen, direkten Parameter lesen/ändern oder experimentieren hat wohl jeder im Petto.


    Gruß
    Jürgen

    Atmos D15P mit A25; LambdaCheck; UVR1611 mit CAN-I/O44, BL-NET und CMI ;
    2x1000l Puffer mit 2x10m² VRK und glykolfreie Solarthermie(Ost-West); WW-FWS; zentrale Wasserenthärtung;

    PV 3,2 kWp EEG; PV-Insel 6 kWp mit Victron MultiPlus-II 48/5000/70-50 und 8 x PylonTech LiFePo4 Modul 48V 2,4 kWh US2000 mit BMS; Victron Cerbo-GX;

    Herkules SE 5000 DF DIESEL Elektrostart Stromerzeuger Generator 2x220V-1x380V, Dauerleistung 4.200 Watt, 11 Stunden Dauerbetrieb, Tankinhalt 13,3 l

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!