Hallo zusammen,
ich versuche, mit einem Arduino Opta WiFi über die eingebaute RS485-Schnittstelle einen A6-RS Servo Drive per Modbus RTU anzusprechen.
Mein Ziel ist, über RS485 Parameter im Servo zu setzen und später damit den Servo zu steuern.
Aufbau
-
Controller: Arduino Opta WiFi
-
Gegenstelle: A6-RS Servo Drive
-
Verbindung: RS485 direkt vom Opta zum Servo
-
Verdrahtung:
- Opta B(+) → Servo RS485+
- Opta A(-) → Servo RS485-
- Opta GND → Servo GND
Was funktioniert
Ich sende vom Opta per RS485/Modbus RTU einen Write-Befehl auf den Servo:
- Parameter: C00.00
- Wert: 1
- Modbus-Frame:
01 06 00 00 00 01 48 0A
Der Parameter wird tatsächlich korrekt gesetzt.
Das heißt für mich:
- Slave-Adresse, CRC und Registeradresse stimmen
- die Verdrahtung ist zumindest für Opta → Servo korrekt
- der Servo verarbeitet den Request
Was nicht funktioniert
Der Servo sollte laut Handbuch bei Function Code 0x06 mit einem Echo desselben Frames antworten.
Genau diese Antwort bekomme ich am Opta aber nie erkannt.
Serielle Ausgabe z. B.:
10:54:42.088 -> TX: 01 06 00 00 00 01 48 0A
10:54:42.251 -> Keine Antwort erkannt.
Noch interessanter:
Der Parameter wird trotzdem korrekt gesetzt.
Bereits getestet
Ich habe schon einiges ausprobiert:
- verschiedene Delay-/Timeout-Werte nach dem Senden
RS485.flush()- längeres Warten auf Antwort
- Lesen frameweise mit Timeout
- Servo-Parameter C0A.03 (Modbus response time) testweise auf 20 ms gesetzt
- trotzdem keine Antwort erkannt
Beispiel:
11:01:45.926 -> 1) Setze C0A.03 = 20 ms
11:01:46.406 -> TX: 01 06 0A 03 00 14 7A 1D
11:01:46.406 -> C0A.03 = 20 ms gesendet (blind).
11:01:46.703 -> 2) Schreibe C00.00 = 1 und lese Echo
11:01:47.033 -> TX: 01 06 00 00 00 01 48 0A
11:01:47.827 -> Keine Antwort erkannt.
Auch hier wurde der Parameter korrekt gesetzt.
Zusätzlicher RS485-Rohdaten-Test
Ich habe vorher auch einen Rohdaten-Test gemacht, um die RS485-Hardware des Opta grundsätzlich zu prüfen.
Dabei kam vom Opta am Empfänger zwar etwas an, aber das Verhalten war auffällig instabil. Beispiel:
- bei gesendetem
0x55kam teils55 ff - teils nur
ff - teils verfälschte Bytes
Das hat mich stutzig gemacht, ob die eingebaute RS485-Schnittstelle des Opta evtl. ein Problem beim Umschalten TX/RX oder beim Frame-Ende hat.
Meine Frage
Hat jemand den Opta RS485 schon zuverlässig in Halbduplex mit Antworttelegrammen verwendet?
Mich interessiert vor allem:
- Gibt es beim ArduinoRS485 auf dem Opta etwas Besonderes bei TX→RX Turnaround?
- Muss man nach
endTransmission()noch etwas Spezielles tun? - Gibt es bekannte Probleme mit der eingebauten RS485-Schnittstelle des Opta, speziell beim Empfangen von Antworten?
- Hat jemand funktionierenden Beispielcode für Modbus RTU Request + Antwort lesen auf dem Opta?
Ich wäre sehr dankbar für Hinweise, weil das Senden offenbar funktioniert, aber ich die Rückantwort einfach nicht sauber reinbekomme.
Danke!