Guten Abend!
Ich habe gerade in unserem Garten einen Pool gebaut und eine Steuerung
von OSPA verbaut. Die Steuerung lässt sich per Modbus auslesen und das
habe ich gerade vor.
Der Raspberry Pi ist über einen RS485 Adapter an die Modbus
Schnittstelle (ebenfalls laut Doku RS485) angeschlossen. An der
Steuerung mit 120 Ohm abgeschlossen und am Raspberry auch. Beide Geräte
sind auf 19200 Baud, 8 N 1 eingestellt.
Jetzt sende ich ein Kommando, um ein Register auszulesen, ich kriege
aber von der Steuerung keinerlei Reaktion. Daher dachte ich schon, es
liegt evtl. an der Baudrate o.ä.
Habe das Signal mit einem Oszi angeschaut. Bitdauer sind 53us, 8 Bytes
dauern ca. 4,1 ms. Das stimmt alles m.E. mit der Baudrate überein. Auch
das Telegramm habe ich mir Bit für Bit angeschaut und es stimmt mit dem
per Software gesendeten Telegramm überein.
Ich übertrage:
0x01 = Slave Adresse
0x04 = Read Input Register
0x00
0x03 = Adresse
0x00
0x01 = Anzahl der zu lesenden Register
0xC1 = CRC
0xCA = CRC
Ich würde - zumindest - eine Fehlernachricht oder ähnliches erwarten,
erhalte aber überhaupt nichts. Bevor ich jetzt an die Herstellerfirma
herantrete möchte ich zunächst eigene Fehlerquellen ausschließen.
Irgendeine Idee, woran es noch haken könnte?
Vielen Dank für euren Input!
Hallo,
> Michael schrieb:> Auf einer Seite? Ich habe natürlich A mit A und B mit B verkabelt> ...
das wäre an sich so ok, aber leider gibt es da keinen richtigen Standard
bezüglich der Bezeichnungen und Anschlüsse.
Also im Zweifelfall doch einfach mal auf einer Seite tauschen.
Die andere Sache ist die Frage, wer Master und wer Slave ist.
Die Steuerung sollte aber doch Slave sein.
Und bevor du an die Fa. Fragen schickst, hast du eine Softwaredoku dazu
herunter geladen oder ein Programm zum testen oder zumindest ein
Telegramm, dass zum testen dienen kann, z.B. per terminalprog.?
Probiere es doch auch mal mit PC und einem Modbus-Tool z.B. "ModPoll"
Gruß Öletronika
Beide Leitungen zu tauschen werde ich morgen mal probieren.
Die Doku des Herstellers sagt:
M-Bus A entspricht Data +
M-Bus B entspricht Data -
Am Raspberry Pi ist ein MAX481 verbaut. Im Datenblatt ist A =
Noninverting und B = Inverting. Sollte doch dann eigentlich passen,
oder?
Master ist der Raspberry Pi, Slave die Steuerung. In der Steuerung ist
die Modbus-Adresse auf "1" eingestellt.
Die Doku zum Modbus habe ich mir von der Herstellerfirma besorgt und
mehrfach durchgearbeitet. Im Raspberry Pi verwende ich die libmodbus.
Das versendete Telegramm stimmt mit meinen Überlegungen überein. Über
den PC kann ich es im Moment nicht testen, weil ich hierfür keinen
Adapter habe.
Du hast Recht, das war der Standard. Ich habe es aber in der Steuerung
auf 8 N 1 umgestellt.
Den Raspberry Pi und die Steuerung habe nicht noch mit GND verbunden.
Ich nehme an, das sollte passen, oder?
Leider hat auch das Vertauschen von A und B keinerlei Änderung gebracht.
Habe in der Steuerung Auch die Adresse mal auf 2 gestellt und die
Parität auf Even (natürlich im Raspi angepasst). Keinerlei Reaktion ...
Beigefügt noch die Bilder des Telegramms mit 19200 8 N 1 von meinem
Oszi, gemessen zwischen A und B.
Vielleicht kann sich das mal jemand anschauen, der mit dem Modbus
Protokoll schon gearbeitet hat.
Michael schrieb:> Am Raspberry Pi ist ein MAX481 verbaut. Im Datenblatt ist A => Noninverting und B = Inverting. Sollte doch dann eigentlich passen,> oder?
Und die Richtungsumschaltung für den Treiber machst du wie?
Wolfgang schrieb:> Michael schrieb:>> Am Raspberry Pi ist ein MAX481 verbaut. Im Datenblatt ist A =>> Noninverting und B = Inverting. Sollte doch dann eigentlich passen,>> oder?>> Und die Richtungsumschaltung für den Treiber machst du wie?
Macht das Interface automatisch, sobald Daten gesendet werden.
Kann es sein, dass die Spannungsdifferenz zwischen A und B zu gering
ist? Ich messe laut Oszi knappe 1,5V.
Ich habe auf beiden Seiten nur einen 120 Ohm Abschlusswiderstand
verbaut, den Bus aber nicht mit BIAS Widerständen vorgespannt. Wie muss
das richtigerweise aussehen?
Mir ist aufgefallen, dass die Spannungsdifferenz zwischen A und B im
Ruhepegel und bei logisch 1 nahezu 0 V beträgt (ca. 100 mV).
Jetzt habe ich den Bus A mit 240 Ohm gegen 5V und B mit 240 Ohm gegen
GND vorgespannt. Die Spannungsdifferenz bei logisch 1 beträgt jetzt ca.
0,6 V, bei logisch 0 -1V.
Das sollte doch jetzt passen, oder?