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
:
Bearbeitet durch User
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.
Hallo, Schau mal ob es nicht "E" statt "N" ist. Bei Modus ist oft even als Standard (So auch bei unseren Geräten...)
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?
Gut - habe ich gemacht ... Werde morgen mal A und B testweise tauschen, auch wenn ich mir nur wenig Hoffnung mache.
PS: Die Steuerung ist nicht zufällig im ASCII Modus? Hast du den Tipp Modus Poll ausprobiert?
Nein - die Steuerung ist im RTU Modus. Du meinst Modbus Poll? Mangels RS485 Adapter kann ich das leider gerade nicht probieren.
Ups, ja das meinte ich. Du solltest dir so ein Konverter zu legen... echt praktisch... Ich geh jetzt schlafen. Gute Nacht :-)
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?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.