Hallo,
Auf der Suche nach Informationen zum UVR-CAN-Bus bin ich im Internet auf einige sehr interessante
GitHub-Repositories von Matthias Hochgatterer gestossen die sich mit can, canopen und uvr1611 beschäftigten.
Das ganze Projekt ist sehr umfangreich und enthält viel Dokumentation zum CAN-Bus aber auch zur UVR1611.
Das Interesse war geweckt und nachdem ich von Go nichts verstehe, wollte ich auf jedenfall sehen was das Programm
uvrdump von meiner UVR1611 über den CAN-Bus auslesen kann. Aber wie so oft bei Linux-Systemen gibt es vorher immer was zu tun.
Das ganze ist in der Programmier-Sprache Go realisiert worden und sollte auf dem Raspberry Pi mit PICAN2 Modul laufen.
Das PiCAN 2 Aufsteckmodul für den Raspberry Pi gibts für ca. 45 EURO im Internet zu kaufen.
Das PiCAN 2 Modul besitzt zwei Schaltkreise. Zum einen den CAN-Bus-Transceiver MCP2551,
der die 12V CAN-Bus-Signale in TTL-Signale umwandelt und zum zweiten einen
MCP2515 CAN Controller der über SPI vom Raspberry Pi und dem SocketCAN Treiber angesprochen wird.
Hier mein Raspberry Pi 3 mit aufgestecktem PiCAN 2 Modul
Der SocketCAN Treiber, erscheint für die Anwendungsprogramme als can0.
Um das PICAN2 Modul auf dem Raspberry Pi 3 zum laufen zu bekommen, müssen zuerst in der Datei
mit sudo nano /boot/config.txt drei Zeilen hinzugefügt werden und dann den Raspberry Pi 3 nochmal neu booten.
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25
dtoverlay=spi-bcm2835
Zum starten der CAN-Schnittstelle can0 den nachfolgenden Befehl ausführen.
sudo /sbin/ip link set can0 up type can bitrate 50000
mit dem Befehl ifconfig kann überprüft werden ob die CAN-Schnittstelle can0 korrekt gestartet worden ist.
pi@raspberrypi:~ $ ifconfig
can0: flags=193<UP,RUNNING,NOARP> mtu 16
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
Nachdem der UVR-CAN-Bus mit dem PICAN2 über CAN-H und CAN-L verbunden wurde,
habe ich mit dem Testprogramm candump, das bei PICAN2 dabei ist, probiert meinen UVR-CAN-Bus zu lesen.
i@raspberrypi:~/pican2-test/can-test_pi2 $ ./candump can0
can0 738 [1] 05
can0 738 [8] 05 8A 01 00 00 00 00 00
can0 701 [1] 05
can0 73E [1] 05
can0 4BE [8] 01 F4 4F 01 01 00 00 00
can0 4BE [8] 01 F4 4F 01 01 00 00 00
can0 4BE [8] 81 F1 4F 01 01 00 00 00
can0 481 [8] 01 F0 4F 01 04 08 03 80
can0 481 [8] 01 F0 4F 02 3F 39 41 01
can0 481 [8] 01 F0 4F 03 DC 03 41 01
...
das hat schonmal gut geklappt.. die Identifier und Daten kamen mir bekannt vor, hatte ich schon mit dem ESP32 auch so ausgelesen.
Nachdem der UVR1611-CAN-Bus gelesen werden kann, gehts weiter mit dem Go Projekt, zum eigentlichen Programm uvrdump.
Die Programmier-Sprache Go versucht, ein besseres C und eine gute Alternative zu C++ zu sein.
Der geringe Hauptspeicherbedarf von Go-Programmen und die eingebaute Parallelisierung
machen die Sprache für bestimmte Einsatzgebiete gut geeignet.
Die Eignung für massiv parallele Systeme mit vielen Prozessoren und Prozessorkernen war eines der zentralen Entwurfsziele von Go.
Vorher muss auf dem Raspberry Pi mit den nachfolgenden drei Befehlen das Go Paket installiert werden,
damit das kompilieren vom uvr-Projekt mit den can- und canopen Bibliotheken klappt.
wget https://storage.googleapis.com…1.8.3.linux-armv6l.tar.gz
sudo tar -C /usr/local -xzf go1.8.3.linux-armv6l.tar.gz
export PATH=$PATH:/usr/local/go/bin
Dann die ZIP-Dateien von den drei GitHub-Repositories von Matthias Hochgatterer aus dem Internet auf den Raspberry Pi runterladen.
GitHub - brutella/can: Connect to a CAN bus in Go
https://github.com/brutella/can
GitHub - brutella/canopen: Communicate with other CANopen nodes ...
https://github.com/brutella/canopen
GitHub - brutella/uvr: Communicate with an UVR1611 over the CAN bus
https://github.com/brutella/uvr
Dann auf dem Raspberry Pi ins Verzeichnis /usr/local/go/src wechseln
und die zwei folgenden Verzeichnisse github.com/brutella hier anlegen.
sodass es nachher so aussieht /usr/local/go/src/github.com/brutella
Dann die Verzeichnisse (can), (canopen) und (uvr) von den ausgepackten ZIP-Dateien jeweils komplett
in /usr/local/go/src/github.com/brutella in eigene Verzeichnisse kopieren.
so sollte es nachher aussehen:
/usr/local/go/src/github.com/brutella/can
/usr/local/go/src/github.com/brutella/canopen
/usr/local/go/src/github.com/brutella/uvr
dann ins Verzeichnis /usr/local/go/src/github.com/brutella/uvr wechseln und einfach make eingeben.
Damit wird mit Hilfe der Datei Makefile in diesem Verzeichnis ein Go Kompilerlauf gestartet,
der als Ergebnis eine ausführbare Datei uvrdump in diesem Verzeichnis erzeugt.
pi@raspberrypi:~/uvr $ make
GOOS=linux GOARCH=arm GOARM=7 go build cmd/uvrdump.go
Nachdem der Kompilerlauf erfolgreich war, hab ich mit dem Aufruf vom Programm uvrdump
über den UVR-CAN-Bus die Eingänge und Ausgänge von meiner UVR1611 auslesen können.
pi@raspberrypi:~/uvr $ ./uvrdump
2018/10/20 15:21:05 uvrdump.go:90: +---------+-----------------+--------+------
2018/10/20 15:21:05 uvrdump.go:91: | Eingang | Bezeichnung | Status | Wert
2018/10/20 15:21:05 uvrdump.go:92: +---------+-----------------+--------+------
2018/10/20 15:21:06 uvrdump.go:95: | 1 | Kollektor | OK | 49.3
2018/10/20 15:21:06 uvrdump.go:95: | 2 | SP.oben | OK | 73.4
2018/10/20 15:21:06 uvrdump.go:95: | 3 | Puffer.u | OK | 45.9
2018/10/20 15:21:06 uvrdump.go:95: | 4 | Puffer.o | OK | 31.3
2018/10/20 15:21:06 uvrdump.go:95: | 5 | Kollektor2 | OK | 41.6
2018/10/20 15:21:06 uvrdump.go:95: | 6 | SP.unten | OK | 44.5
2018/10/20 15:21:06 uvrdump.go:95: | 7 | SP.mitte | OK | 62.9
2018/10/20 15:21:06 uvrdump.go:95: | 8 | Puffer.m2 | OK | 59.5
2018/10/20 15:21:07 uvrdump.go:95: | 9 | Puffer.m | OK | 49.2
2018/10/20 15:21:07 uvrdump.go:95: | 10 | Heizkr.VL | OK | 33.7
2018/10/20 15:21:07 uvrdump.go:95: | 11 | Heizkr.RL | OK | 25.5
2018/10/20 15:21:07 uvrdump.go:95: | 12 | Temp.Aussen | OK | 18.1
2018/10/20 15:21:07 uvrdump.go:95: | 13 | Temp.Raum | OK | 23.6
2018/10/20 15:21:07 uvrdump.go:95: | 14 | Solar-VL | OK | 60.4
2018/10/20 15:21:07 uvrdump.go:95: | 15 | Solar-RL | OK | 45.7
2018/10/20 15:21:07 uvrdump.go:95: | 16 | Durchfl.Sol. | OK | 122.0
2018/10/20 15:21:07 uvrdump.go:97: +---------+-----------------+--------+------
2018/10/20 15:21:07 uvrdump.go:60: +---------+-----------------+--------+------+
2018/10/20 15:21:07 uvrdump.go:61: | Ausgang | Bezeichnung | Mode | Wert |
2018/10/20 15:21:07 uvrdump.go:62: +---------+-----------------+--------+------+
2018/10/20 15:21:08 uvrdump.go:65: | 1 | Pumpe-Solar | AUTO | EIN |
2018/10/20 15:21:08 uvrdump.go:65: | 2 | Ladep.SP. | AUTO | AUS |
2018/10/20 15:21:08 uvrdump.go:65: | 3 | Anf.Kessel | AUTO | AUS |
2018/10/20 15:21:08 uvrdump.go:65: | 4 | Ventil | AUTO | AUS |
2018/10/20 15:21:08 uvrdump.go:65: | 5 | ----- | | AUS |
2018/10/20 15:21:08 uvrdump.go:65: | 6 | ----- | | AUS |
2018/10/20 15:21:08 uvrdump.go:65: | 7 | ----- | | AUS |
2018/10/20 15:21:09 uvrdump.go:65: | 8 | Misch.Hzkr1 | AUTO | AUS |
2018/10/20 15:21:09 uvrdump.go:65: | 9 | ----- | AUTO | AUS |
2018/10/20 15:21:09 uvrdump.go:65: | 10 | ----- | | AUS |
2018/10/20 15:21:09 uvrdump.go:65: | 11 | Vent.Solar | AUTO | AUS |
2018/10/20 15:21:09 uvrdump.go:65: | 12 | Pumpe-Hzkr | AUTO | EIN |
2018/10/20 15:21:09 uvrdump.go:65: | 13 | ----- | | AUS |
2018/10/20 15:21:09 uvrdump.go:67: +---------+-----------------+--------+------+
Alles anzeigen
Gruß
Jürgen