RS485 Puma PID Pelletkessel

OP #5915834
Lesenswert?

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.
Gast #5916181
Lesenswert?

> 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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren