RS485 Puma PID Pelletkessel

OP #5915834
Hallo zusammen,

ich habe mir in Polen einen Pelletkessel gekauft, dieser hat eine 
polnische Steuerung an Board die an sich sehr gut ist. Die Steuerung 
möchte ich nicht erneuern (Garantie). Die Steuerung Puma PID hat eine 
RS485 Schnittstelle die laut Hersteller wohl jedes Raumthermostat von 
jedem Hersteller unterstützt.
Ich habe mir von Ama... RS485 Dongles bestellt 5 an der Zahl alle 
liefern das gleiche komische Ergebnis.
1
P���A<+48+48+4e"D������A�<���A�<���A�<���A�<������p�H"q�p]p]p]p]����p�H"q�p]p]p]p]����p�H"q�p]p]p]p]��
2
���A�<��(P���A<+48+48+4e"D������A�<���A�<���A�<���A�<��
3
      ��;
4
���A�<��(P���A<+48+48+4e"D������A�<���A�<��p]p]����p�H"q�p]p]p]p]����p�H"q�p]p]p]p]����p�H"q�p]p]p]�A�<��
5
��;
6
���A�<��(P���A<+48+48+4e"D������A�<���A�<���A�<���A�<��
7
                    ��;
8
���A�<��(P���A<+48+48+4e"D�����p]p]p]p]����p�H"q�p]p]p]p]����p�H"q�p]p]p]p]����p�H"q�p]�A�<���A�<���A�<��
9
��;
10
���A�<��(P���A<+48+48+4e"D������A�<���A�<���A�<���A�<��
11
��;
12
���A�<��(P���A<+48+48+4e"q�p]p]p]p]����p�H"q�p]p]p]p]����p�H"q�p]p]
Ich habe hier schon die gängigen Baudraten durch probiert doch kommt 
immer das gleiche bei raus.
Der Aufbau ist: RPI -> USB to RS485 -> Puma PID
Als "Terminal" nutze ich "screen" auf dem PI
Auch habe ich schon Modbus probiert auch hier ohne Erfolg.

Mit einem kleinen Python Script bekomme ich folgende Ausgabe:
1
▒"▒▒B&BB"""r"▒""""""▒▒▒▒P▒▒▒▒"▒

Hier das Script:
1
#!/usr/bin/env python
2

3
import serial
4

5
port = '/dev/ttyUSB0'
6
serial_comunication = serial.Serial(port, baudrate=1200, timeout=0.75)
7
serial_comunication.write(b'frame')
8
answer = serial_comunication.read(255)
9
serial_comunication.close()
10
print answer

Der Grund warum ich an die RS485 Schnittstelle möchte ist das Auslesen 
der Sensoren in der PID und das Ausschalten des Brennvrogangs. Die PID 
hat leider keine Funktion um einen Pufferspeicher zu befüllen und leider 
auch nicht um 3 Wege Ventile zu steuern, dies möchte ich jedoch mit 
einem PI oder Arduino realisieren.

Kann mir hier jemand Helfen?

Vielen Dank schon mal an euch alle.

Grüße Micha

EDIT: Was ich noch vergessen habe, es scheint als wenn der PID Regler 
die ganze Zeit irgendwas sendet.
OP #5916166
Da gibt es leider ein Problem, ich habe kein Oszi zur Verfügung. Das was 
ich so gelesen habe da ist das doch nicht normal das die Heizung 
dauerhaft etwas sendet oder? Zumal der Anschluss für Raumthermostate 
sein soll.....
Gast #5916181
> ich habe kein Oszi zur Verfügung

Ein Logic-Analyzer für ’nen Zehner mag den Job auch tun

> das [ist] doch nicht normal das die Heizung
> dauerhaft etwas sendet

Vielleicht pollt sie die Thermostate? Ohne mal nachgeschaut zu haben, 
was denn da für Signale anliegen, wird man’s jedenfalls nie 
rausbekommen.
OP #5916388
Vielen Dank für die zahlreichen Tipps.

ich hab mal das Python Script erweitert und durchlaufen lassen, aber 
viel erkennen kann ich da leider nicht. Das Ergebnis habe ich in eine 
Datei schreiben lassen.

Hier das Python Script
1
#!/usr/bin/env python
2

3
import serial
4

5
running = True
6
port = '/dev/ttyUSB0'
7
serial_comunication = serial.Serial(port, baudrate=2400, timeout=0.75)
8
baud = [2400,4800,9600,19200,38400,57600,115200,230400,460800,500000]
9
bsize = ['FIVEBITS', "SIXBITS", "SEVENBITS", "EIGHTBITS"]
10
parity = ["PARITY_NONE", "PARITY_EVEN", "PARITY_ODD", "PARITY_MARK", "PARITY_SPACE"]
11
stopbits = ["STOPBITS_ONE", "STOPBITS_ONE_POINT_FIVE", "STOPBITS_TWO"]
12
#serial_comunication.write(b'frame')
13

14
f = open("Puma-PID-Serial.txt", "a")
15

16
try:
17
    serial_comunication.rs485_mode
18
    for i in baud:
19
        serial.baudrate = i
20
        print("Baudrate: "+str(i))
21
        f.write("Baudrate: "+str(i)+"\n")
22
        answer = serial_comunication.readline()
23
#        serial_comunication.close()
24
        if answer > 0:
25
            print answer.encode("hex")
26
            f.write(answer.encode("hex")+"\n")
27
            x = 0
28
            while x <= 4:
29
                serial.parity = str(parity[x])
30
                print("Baud: "+str(i)+" Parity: "+str(parity[x]))
31
                f.write("Baud: "+str(i)+" Parity: "+str(parity[x])+"\n")
32
                answer = serial_comunication.readline()
33
                print answer.encode("hex")
34
                f.write(answer.encode("hex")+"\n")
35
                for bytesize in bsize:
36
                    serial.bytesize = str(bytesize)
37
                    print("Baud: "+str(i)+" Parity: "+str(parity[x])+" Bytesize: "+str(bytesize))
38
                    f.write("Baud: "+str(i)+" Parity: "+str(parity[x])+" Bytesize: "+str(bytesize)+"\n")
39
                    answer = serial_comunication.readline()
40
                    print answer.encode("hex")
41
                    f.write(answer.encode("hex")+"\n")
42
                for stbits in stopbits:
43
                    serial.stopbits = str(stbits)
44
                    print("Baud: "+str(i)+"Parity: "+str(parity[x])+" Bytesize: "+str(bytesize)+" Stopbits: "+str(stbits))
45
                    f.write("Baud: "+str(i)+"Parity: "+str(parity[x])+" Bytesize: "+str(bytesize)+" Stopbits: "+str(stbits)+"\n")
46
                    answer = serial_comunication.readline()
47
                    print answer.encode("hex")
48
                    f.write(answer.encode("hex")+"\n")
49
                x += 1
50
        else:
51
            try:
52
                print("No answer Baud: "+str(i)+" Parity: "+str(parity[x])+" Bytesize: "+str(bytesize))
53
                f.write("No answer Baud: "+str(i)+" Parity: "+str(parity[x])+" Bytesize: "+str(bytesize)+"\n")
54
            except Exception as err:
55
                print("Error in else: "+str(err))
56
                f.write("Error in else: "+str(err)+"\n")
57

58
    f.close()
59
    serial_comunication.close()
60
except KeyboardInterrupt:
61
   print("close")
62
   serial_comunication.close()

@zufaulzumanmelden
Welchen Logic Analyzer würdest du mir empfehlen?
Kennst du dazu auch ein gutes Tut?

Vielen Dank für eure Hilfe
Angehängte Dateien:
Gast #5918140
Michael K. schrieb:
> Wenn ich den Logic Analyzer direkt an A
> und B stecke geht er doch kaputt da RS485 5V hat oder habe ich das
> Datenblat[t] vom Logiy Analyzer falsch verstanden[?]

Also im Datenblatt zu meinem steht bei den Maximum Ratings was von 
-25V…+25V, bei „Common supported logic standards“ steht ’ne Reihe von 
+1,8V bis +12V, außerdem ist RS-485 explizit aufgelistet.
OP #5918291
Bei mir steht das hier: Spezifikation:
Maximale Abtastgeschwindigkeit: 24Msps
Eingangsspannungsbereich: 0 ~ 5V
Digitalkanal: 8
Niedriger Eingangspegel: <0,8V
High-Eingangspegel: >1,4V
Support-Protokoll: SPI, IIC, UART, SMBus, I2S, CAN, Parallel, 
Benutzerdefiniert, Suche, Async, 1-Wite, PS / 2
Eingangsimpedanz: 1Mohm || 10pF (typisch, ungefähr)
Kristall: ± 20 ppm, 24 MHz
Fehler / Genauigkeit: Pulsbreitenmessung: ± 42 ns (bei 24 MHz)

Denke da aber eher an Tippfehler.....
OP #5923972
Ein Kollege hat mir geraten Masse mit anzuschließen, gesagt getan und 
schon sehen die Daten besser aus.

Das einzige Problem was ich jetzt noch habe ist, das ich per Raspberry 
Pi und Python es nicht schaffe die Daten auszuwerten. Ich denke das dass 
ding Modbus spricht aber wenn ich minimalmodbus für Python verwende 
kommt nur ein Checksummen Fehler dabei raus.

Kann natürlich auch möglich sein das die Regelung kein Modbus spricht.

Könnt ihr euch das bitte einmal anschauen.

Vielen Dank
Angehängte Dateien:
OP #5924626
Habe noch was vergessen.
Bei der Bytefolge:
4 16 0 0 0 6 12 0 0 0 237 0 65 1 7 0 60 12 145 182 250

ist die 65 der Sollwert für den Vorlauf, wenn ich diesen Wert in der 
Regelung ändere, ändert er sich auch auf der Schnittstelle.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.