Python und RS485

Rund um die Software von Revolution Pi
digohm
Posts: 35
Joined: 10 Aug 2017, 23:00
Answers: 0

Re: Python und RS485

Post by digohm »

Danke für deine Antwort! Ich habe jetzt weiter experimentiert und erhalte im Modbus Status Register jetzt zumindest den Fehler 11.
1.JPG
1.JPG (40.56 KiB) Viewed 6001 times
Im Handbuch des 3216 wird bezüglich Modbus auf das Handbuch 2000 verwiesen. Darin steht:
2.JPG
2.JPG (49.55 KiB) Viewed 6001 times
Als Beispiel ist das angeführt:
3.JPG
3.JPG (60.27 KiB) Viewed 6001 times
digohm
Posts: 35
Joined: 10 Aug 2017, 23:00
Answers: 0

Re: Python und RS485

Post by digohm »

Im Handbuch des 3216 stehen dann unter anderem folgende Register Adressen:
4.JPG
4.JPG (117.38 KiB) Viewed 6000 times
Die Adresse 1 würde ich gerne auslesen. Da die Registeradressen mit 1 beginnen sollte also auch hier kein Problem vorliegen.
In Pictory habe ich bisher nur die eine Action definiert:
5.JPG
5.JPG (45.05 KiB) Viewed 6000 times
Es ist mir echt ein Rätsel was ich falsch mache!
digohm
Posts: 35
Joined: 10 Aug 2017, 23:00
Answers: 0

Re: Python und RS485

Post by digohm »

Seit ich jetzt + mit - und - mit + und nicht + mit + und - mit - verbunden habe kommuniziert der Eurotherm 3216 mit dem RS485 Stick. Insofern ist die Beschriftung an eurem Stick falsch, was dieses 8 € Teil zur mit Abstand teuersten verbauten Komponente macht...
Jedenfalls erhalte ich jetzt mit der Software qModMaster wie im Bild ersichtlich sowohl die Ist-Temperatur, als auch die Soll-Temperatur:
10.JPG
10.JPG (49.77 KiB) Viewed 5926 times
In Pictory habe ich den Master mit den gleichen Einstellungen wie in qModMaster neu konfiguriert:
11.JPG
11.JPG (40.39 KiB) Viewed 5926 times
Trotzdem erhalte ich immer nur den Dezimalwert 128:
12.JPG
12.JPG (34.88 KiB) Viewed 5926 times
Am Eurotherm 3216 blinkt alle 2,5 Sekunden ein Symbol auf, somit wird auf jeden Fall kommuniziert. Was mache ich jetzt noch falsch?
digohm
Posts: 35
Joined: 10 Aug 2017, 23:00
Answers: 0

Re: Python und RS485

Post by digohm »

Mit folgendem Testprogramm funktioniert es auch:

Code: Select all

import minimalmodbus as mm
instr = mm.Instrument("/dev/ttyUSB0", 2)
instr.serial.baudrate = 9600 
instr.serial.bytesize = 8
instr.serial.parity   = mm.serial.PARITY_NONE
instr.serial.stopbits = 1
instr.serial.timeout  = 0.5
instr.serial.rtscts = False
instr.serial.dsrdtr = False
instr.serial.debug = True
data = instr.read_registers(1,2,3)
print(data)
Ergebnis:
[248, 402]

Pictory Konfiguration:
13.JPG
13.JPG (71.65 KiB) Viewed 5925 times
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41
Answers: 1

Re: Python und RS485

Post by volker »

Okay,
da hast Du inzwischen ja einige Problemquellen eingrenzen können. Ich hatte ja von Anfang an vermutet, dass die Verkabelung eventuell nicht stimmte. Allerdings solltest Du davon ausgehen, dass die Beschriftung auf dem USB Stick stimmt. zu viele User (wir hier in Testaufbauten eingeschlossen) haben dieses teil schon erfolgreich im Einsatz, ohne dass wir Anschlüsse vertauschen müssten. Ich habe es sicherheitshalber eben noch einmal durchgeprüft und die Beschriftung ist korrekt:
A = D+ (linke Klemme von oben)
B = D- (rechte Klemme von oben)
Also Bitte beim Hersteller vom Slave beschweren, nicht bei uns...

Da Du keine Daten bekommst, muss etwas an Deiner Konfiguration nicht stimmen. Bitte bei neuer Konfiguration IMMER ein Reset PiControl machen (piTest -x). Ansonsten hast Du zwischen Deinen Screendumps Änderungen gemacht (Name der Prozessvariablen ist z.B. anders). Das macht es nicht einfach, genau zu suchen, wo du eventuell etwas nicht so konfiguriert hast, wie es sein sollte. Daher mach Doch bitte mal von einer Einstellung, nach der Du ein Reset gemacht hast, Sreenshots von allen PiCtory Einstellungen (einschließlich Prozessvariablenname und extended configuration) und dann von Command line Aufrufen (bitte auch PiTest -x, pitest -d). Ich bin auf die Bilder gespannt, denn ich sehe aktuell noch nicht, wo genau da etwas falsch konfiguriert ist.
Unser RevPi Motto: Don't just claim it - make it!
digohm
Posts: 35
Joined: 10 Aug 2017, 23:00
Answers: 0

Re: Python und RS485

Post by digohm »

Hallo Volker,

das war kein Vorwurf an euch! Ich habe jetzt wie von dir empfohlen PiControl resettet und neue Screenshots angefertigt. Leider erhalte ich immer noch die gleichen Werte wie vorher:
100.JPG
100.JPG (206.92 KiB) Viewed 5843 times
101.JPG
101.JPG (208.84 KiB) Viewed 5843 times
102.JPG
102.JPG (69.44 KiB) Viewed 5843 times
Via Python am RevPi und am Windows 10 Notebook mit qModMaster erhalte ich die richtigen Werte. Vielen Dank für deine Hilfe!
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41
Answers: 1

Re: Python und RS485

Post by volker »

Okay,
ich gehe davon aus, dass es ein Adressierungsproblem ist. Du machst mit qModMaster etwas anderes, als mit dem virtuellen Modul Modbus Master:
unter qModmaster liest Du zwei Register ab dem Register 2 aus (gut in der Darstellung der Inhalte zu erkennen, dort ist das erste Register 1 ausgegraut).
unter dem virtuellen Modul liest Du 2 Register ab dem 1. Register aus. Offenbar mag das der Slave nicht (was durchaus ein übliches Verhalten bei Modbus slaves sein kann) und antwortet mit dieser 128.
Bitte versuche daher mal das selbe unter qModMaster (also Lesen ab Adresse 0 = Register 1). Oder auch anders herum, mach einfach mal im virtuellen Modul das, was Du eigentlich machen willst und gebe als Registeradresse 2 statt 1 ein.

Noch ein Hinweis zur Backgroundinfo: Dieses bescheuerte Durcheinander hat sich sicher nicht KUNBUS einfallen lassen, sondern ist leider Bestandteil der Modbus Spezifikationen. Dort werden Register ab 1 gezählt und nicht ab 0. Im eigentlichen Telegramm, welches nachher über die Leitung geht, steht aber für das Register 1 die Adresse 0 und für Register 2 die Adresse 1, usw. Wir können nicht mehr tun, als auf diesen Umstand deutlich in unserem Tutorial hinweisen. Wir zählen in PiCtory die Registernummern ab 1, nicht ab 0. Bei qModMaster kannst Du das als "Base Adress" in den Settings einstellen.
Unser RevPi Motto: Don't just claim it - make it!
digohm
Posts: 35
Joined: 10 Aug 2017, 23:00
Answers: 0

Re: Python und RS485

Post by digohm »

Hallo Volker,

es funktioniert! :)
Was habe ich gemacht:
Registeradresse wie empfohlen um 1 erhöht :)
Zusätzlich hat sich Pictory anscheinend problematisch verhalten, bzw. der Browser. Nutze Pictory via VNC Viewer und dem Standardbrowser auf dem RevPi. Der USB Pfad hat sich nicht von ...0 auf ...1 ändern lassen. Trotz Speichern und Reset war nach dem Drücken von F5 wieder der alte USB Pfad ...0 vorhanden. Erst mit dem Inkognitomodus hat sich das beheben lassen. Kann man die Website von Pictory so umprogrammieren, dass das Laden aus dem Cache verhindert wird? Oder sollte es garnicht dazu kommen?

Zusätzlich hat sich der Wechsel vom RS485 Stick zur teureren Alternative im Shop bewährt. Die Kommunikation lief bisher über mehrere Stunden (auslesen der Temperatur im Sekundentakt) fehlerfrei. Mit dem Stick gab es zumindest via Python zwischendurch immer wieder Fehlermeldungen.

Eine kosmetische Kleinigkeit ist mir noch im Modulbaum von Pictory aufgefallen. Beim Mouseover über den Eintrag Modbus RTU Master erscheint dann der Text Modbus TCP Master.

Vielen Dank für die Geduld und Unterstützung!

LG
Tom
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41
Answers: 1

Re: Python und RS485

Post by volker »

Super!
Der Tip-Text Fehler ist bekannt und bereits in der neuesten Version behoben (ist noch nicht veröffentlicht). Trotzdem Danke für den Hinweis!
Unser RevPi Motto: Don't just claim it - make it!
digohm
Posts: 35
Joined: 10 Aug 2017, 23:00
Answers: 0

Re: Python und RS485

Post by digohm »

Eine Frage hätte ich jetzt noch. Wie funktioniert der Zugriff mit Python?
Muss ich da, nachdem ich alle Actions zum Lesen und Schreiben eingerichtet habe, auf das Prozessabbild zugreifen? Wie beim Tutorial für das DIO Modul?
Wird dann ein Modbus Schreibbefehl im entsprechenden Action Interval immer wieder an das Gerät geschickt?

Kann man auf den Modbus Master auch via revpimodio zugreifen?

Das waren jetzt ein paar Fragen mehr als nur eine :)
Post Reply