CAN-Bus: Message-Daten werden nur einmal angezeigt
Verfasst: Dienstag 24. Oktober 2023, 18:09
Hallo Experten,
folgendes Problem(Falls die Vorgeschichte nicht interessiert einfach bis "Nun zum eigentlichen Problem:" gehen):
ich bin gerade dabei mir einen eigenen Heizungsregler zu basteln (parallel zu dem Vorhandenen um immer eine Rückfallebene zu haben). Dabei habe ich folgende Aufgaben bereits erledigt:
1. Raspberry Pi 3 B+ mit Standard Raspbian über Noobs in der 32bit Version und ein bisschen Löt- und Bastelarbeit
2. Möglichkeit zum Einlesen aller Temperaturen an der Anlage mit DS18B20 1-Wire-Bus Temperatursensoren
3. Temperatursteuerung mittels PID-Regler (PID als Klasse) --> Anwendung CPU-Temperatur --> Drehzahlsteuerung um den CPU auf Wunschtemperatur zu halten
4. Auslesen der eingesetzten Regelklemmleiste https://www.moehlenhoff.de/fileadmin/us ... al_web.pdf über eine XML-Schnittstelle
Alle Werte lasse ich mir aktuell noch mittels Print ausgeben was dann so aussieht:
CPU-Temperatur: 43.5 °C / Lüfterausgang: 44.564 %
CPU-Temperatur: 44.0 °C / Lüfterausgang: 44.564 %
2023-10-24T18:13:31
1 Wohnzimmer Soll: 21.0 °C Ist: 22.1 °C Offset: 0.0 °C
2 Küche Soll: 20.0 °C Ist: 21.4 °C Offset: 0.0 °C
3 Bad Soll: 21.0 °C Ist: 21.9 °C Offset: 0.0 °C
CPU-Temperatur: 43.5 °C / Lüfterausgang: 46.04 %
CPU-Temperatur: 43.5 °C / Lüfterausgang: 47.486 %
CPU-Temperatur: 44.0 °C / Lüfterausgang: 47.486 %
CPU-Temperatur: 43.5 °C / Lüfterausgang: 48.902 %
...
CPU-Temperatur: 43.5 °C / Lüfterausgang: 57.938 %
CPU-Temperatur: 42.9 °C / Lüfterausgang: 54.278 %
S1, Temp Fühl: 31.937 °C, Offset: 0.00 K, Name: 28-3c21f648b39f, Start: 1698163410, Mintemp: 30.625, Maxtemp: 31.937
S2, Temp Fühl: 40.687 °C, Offset: 0.00 K, Name: 28-3c99f6483f05, Start: 1698163411, Mintemp: 39.125, Maxtemp: 40.687
S3, Temp Fühl: 27.125 °C, Offset: 0.00 K, Name: 28-3ca0f6480a74, Start: 1698163412, Mintemp: 27.000, Maxtemp: 27.125
S4, Temp Fühl: 51.062 °C, Offset: 0.00 K, Name: 28-3ce5f6484503, Start: 1698163413, Mintemp: 51.062, Maxtemp: 51.375
S5, Temp Fühl: 49.750 °C, Offset: 0.00 K, Name: 28-3cf9f64879c5, Start: 1698163414, Mintemp: 49.750, Maxtemp: 50.125
S6, Temp Fühl: 59.125 °C, Offset: 0.00 K, Name: 28-3c8df64870b5, Start: 1698163415, Mintemp: 59.125, Maxtemp: 59.312
Nun zum eigentlichen Problem:
Meine Heiztherme arbeitet mit CAN-Bus und bräuchte ein paar Werte für meine Berechnung. Zum Beispiel die Außentemperatur, die berechnete Vorlauftemperatur, ... usw.
Ich habe einen USBtoCAN Adapter von DSD Tech SH-SH-C30A (https://www.deshide.com/product-details ... 1671089557) mittels der CANable-Update-Seite https://canable.io/updater/canable1.html eine neue Firmware installiert (vorher hat er gar nicht auf den CAN-Bus reagiert).
Das wird im Terminal angezeigt
zeigt nach einem Neustart des Adapters folgende Ausgabe im Terminal:
Das erneute Aufrufen zeigt dann:
Nach einem Neustart oder dem Abziehen und wieder einstecken des Adapters funktioniert es wieder genau ein Mal.
folgendes Problem(Falls die Vorgeschichte nicht interessiert einfach bis "Nun zum eigentlichen Problem:" gehen):
ich bin gerade dabei mir einen eigenen Heizungsregler zu basteln (parallel zu dem Vorhandenen um immer eine Rückfallebene zu haben). Dabei habe ich folgende Aufgaben bereits erledigt:
1. Raspberry Pi 3 B+ mit Standard Raspbian über Noobs in der 32bit Version und ein bisschen Löt- und Bastelarbeit
- Alles über SSH + XRDP auf meinen Rechner gelegt wo ich Ihn dann aus der Ferne programmieren kann.
- Die nachfolgenden Punkte mittels Klassen programmiert und mit Threads gestartet
2. Möglichkeit zum Einlesen aller Temperaturen an der Anlage mit DS18B20 1-Wire-Bus Temperatursensoren
3. Temperatursteuerung mittels PID-Regler (PID als Klasse) --> Anwendung CPU-Temperatur --> Drehzahlsteuerung um den CPU auf Wunschtemperatur zu halten
4. Auslesen der eingesetzten Regelklemmleiste https://www.moehlenhoff.de/fileadmin/us ... al_web.pdf über eine XML-Schnittstelle
Alle Werte lasse ich mir aktuell noch mittels Print ausgeben was dann so aussieht:
CPU-Temperatur: 43.5 °C / Lüfterausgang: 44.564 %
CPU-Temperatur: 44.0 °C / Lüfterausgang: 44.564 %
2023-10-24T18:13:31
1 Wohnzimmer Soll: 21.0 °C Ist: 22.1 °C Offset: 0.0 °C
2 Küche Soll: 20.0 °C Ist: 21.4 °C Offset: 0.0 °C
3 Bad Soll: 21.0 °C Ist: 21.9 °C Offset: 0.0 °C
CPU-Temperatur: 43.5 °C / Lüfterausgang: 46.04 %
CPU-Temperatur: 43.5 °C / Lüfterausgang: 47.486 %
CPU-Temperatur: 44.0 °C / Lüfterausgang: 47.486 %
CPU-Temperatur: 43.5 °C / Lüfterausgang: 48.902 %
...
CPU-Temperatur: 43.5 °C / Lüfterausgang: 57.938 %
CPU-Temperatur: 42.9 °C / Lüfterausgang: 54.278 %
S1, Temp Fühl: 31.937 °C, Offset: 0.00 K, Name: 28-3c21f648b39f, Start: 1698163410, Mintemp: 30.625, Maxtemp: 31.937
S2, Temp Fühl: 40.687 °C, Offset: 0.00 K, Name: 28-3c99f6483f05, Start: 1698163411, Mintemp: 39.125, Maxtemp: 40.687
S3, Temp Fühl: 27.125 °C, Offset: 0.00 K, Name: 28-3ca0f6480a74, Start: 1698163412, Mintemp: 27.000, Maxtemp: 27.125
S4, Temp Fühl: 51.062 °C, Offset: 0.00 K, Name: 28-3ce5f6484503, Start: 1698163413, Mintemp: 51.062, Maxtemp: 51.375
S5, Temp Fühl: 49.750 °C, Offset: 0.00 K, Name: 28-3cf9f64879c5, Start: 1698163414, Mintemp: 49.750, Maxtemp: 50.125
S6, Temp Fühl: 59.125 °C, Offset: 0.00 K, Name: 28-3c8df64870b5, Start: 1698163415, Mintemp: 59.125, Maxtemp: 59.312
Nun zum eigentlichen Problem:
Meine Heiztherme arbeitet mit CAN-Bus und bräuchte ein paar Werte für meine Berechnung. Zum Beispiel die Außentemperatur, die berechnete Vorlauftemperatur, ... usw.
Ich habe einen USBtoCAN Adapter von DSD Tech SH-SH-C30A (https://www.deshide.com/product-details ... 1671089557) mittels der CANable-Update-Seite https://canable.io/updater/canable1.html eine neue Firmware installiert (vorher hat er gar nicht auf den CAN-Bus reagiert).
Das wird im Terminal angezeigt
Nun habe ich versucht die Daten des Bus zu lesen. Schauen ob etwas da ist. Folgender Code (nur Test-Code):lsusb -v
idVendor 0x1d50 OpenMoko, Inc.
idProduct 0x606f Geschwister Schneider CAN adapter
bcdDevice 0.00
iManufacturer 1 canable.io
iProduct 2 canable gs_usb
iSerial 3 002A00455046570620333836
Code: Alles auswählen
import gs_usb
import can
import usb
from time import sleep
dev = usb.core.find(idVendor=0x1D50, idProduct=0x606F)
with can.interface.Bus(channel="ttyAMA0",
interface="gs_usb",
bus=dev.bus,
address=dev.address,
bitrate=115200) as bus:
try:
i = 0
while True:
try:
msg = bus.recv(0.1)
print(msg)
except AttributeError:
print("Nothing received this time")
except KeyboardInterrupt:
print("Program Exited")
except can.CanError:
print("Message NOT sent")
gut... CAN-Bus da...und breche das ganze mit Strg+C absudo nice -19 python3 /home/rp/Dokumente/Regler/Old/test.py
Timestamp: 3158.843952 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.845623 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.848792 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.850620 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.852533 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.854439 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.856260 ID: 000c S Rx E DL: 8 00 30 02 00 00 00 00 ff Channel: ttyAMA0
Timestamp: 3158.857848 ID: 000c S Rx E DL:^CProgram Exited
Das erneute Aufrufen zeigt dann:
Was läuft da schief? Warum wird nun "None" angezeigt?sudo nice -19 python3 /home/rp/Dokumente/Regler/Old/test.py
None
None
None
None
None
^CProgram Exited
Nach einem Neustart oder dem Abziehen und wieder einstecken des Adapters funktioniert es wieder genau ein Mal.