ModBus-Timeout-Fehler

Jemand sehr erfahren mit Modbus & RS-485???

Meine Aufgabe ist es, einen Gleichstrommotor mit Micro PIC24 zu steuern. Die Motoreinstellung wie Winkel, Verzögerung, Start / Stopp, Arbeitszyklus usw. wird vom PC über Modbus an PIC24 gesendet.

Das System ist so:

PIC24 -> UART -> IC MAX3471 -> RS-485 zu RJ-45 Konverter -> RJ-45 zu USB -> PC (mit modbuspoll-Tool)

Das verwendete Modbus-Format ist Modbus RTU.

Zunächst funktionieren die Modbus-Lese-Halteregister-Funktion und die Schreib-Einzelregister-Funktion. Aber nachdem ich einige der Motoreinstellungen mit der Modbus-Schreibfunktion für einzelne Register gesendet hatte und der Motor dann zu laufen begann, kam es immer zu einem Zeitüberschreitungsfehler bei der Modbus-Kommunikation.

Und sobald der Zeitüberschreitungsfehler auftritt, wird beim nächsten Einschalten des Systems weiterhin ein Zeitüberschreitungsfehler angezeigt. Geben Sie hier die Bildbeschreibung einIch habe versucht, die UART-Baudrate von 9600 auf 115200 zu ändern. Versuchen Sie, die RS-485-zu-RJ-45-Konverterplatine zu ändern (nur für den Fall, dass sie kaputt geht), das Phänomen wiederholt sich einfach.

Kann mir jemand einen Tipp geben, was die mögliche Ursache sein könnte?

Auch bin ich mir nicht sicher, im Modbus RTU-Format sollten am Anfang und am Ende 28 Bit (mindestens 3 1/2 Zeichenlänge) stehen, aber sollte sich der Mikro-Firmware-Code darum kümmern, da er am PC verwendet wird Modbuspoll-Tool?

Ich habe das A- und B-Signal mit einem Logikanalysator abgegriffen, wenn ich ein Zeichen von uC an RS-485 sende (aber nicht mit dem PC verbunden), wird das Zeichen auf der A- und B-Leitung korrekt angezeigt. Aber wenn ich auf das A- und B-Leitungssignal tippe, wenn ich die Read-Holding-Register-Funktion vom PC mit Modbus-Poll sende (Zeitüberschreitungsfehler ausgeben), bekomme ich ein seltsames Signal:

Geben Sie hier die Bildbeschreibung ein

Das Problem scheint also nicht im uC-Firmwarecode zu liegen, sondern in einem von beiden: USB-zu-RS-485-Konverter, direktes Ethernet-Kabel oder RS-485-Schnittstellenkarte. Hier ist der USB-zu-RS-485-Konverter, den ich verwendet habe:Geben Sie hier die Bildbeschreibung ein

und die RS-485-Schnittstellenkarte:Geben Sie hier die Bildbeschreibung ein

Antworten (1)

In einigen Fällen erzeugt das Starten eines Motors oder eines Hochleistungsgeräts Rauschen beim Erdungssignal. Wenn Sie keine gute Masse und Abschirmung haben, wirkt sich dies auf Ihr Signal aus.

zum Debuggen: 1) Betreiben Sie Ihren Controller ohne schwere Last, überprüfen Sie einfach den Controller mit einer LED oder einer kleinen Last, nachdem Sie diese LED ein- / ausgeschaltet haben, wenn Sie ein Problem haben, dann haben Sie ein Problem mit Code und Implementierung .

2) Wenn Sie im ersten Schritt kein Problem haben, sollten Sie die Erdung und die Gehäusemasse überprüfen

Empfehlung : Wenn Sie mit Hochspannungslast arbeiten, ist es aus Sicherheitsgründen besser, ein isoliertes USB_to_485-Modul zu verwenden.

Ich vermute auch eher das Hardwareproblem als den Firmware-Code. Weil der Modbus kein Kommunikationsproblem hat, wenn das USB-zu-Seriell-Modul (FT232R) verwendet wird.
Wie erde ich das Chassis gut? Soll ich einfach ein Kabel an der Schraube verdrillen und es mit meiner Stromversorgungsmasse verbinden?
@Qrenz was ist dein Motortyp? Schneiden Sie beispielsweise die Länge des Drahts ab
@M KS: bürstenloser Gleichstrommotor mit Getriebe 12 V, Durchmesser Welle 28 mm. Gute Idee, werde ich ausprobieren.
Stattdessen sollten Sie die RS-485-Signalmasse nicht direkt am Gehäuse erden. Diese Erdung sollte viel früher in der Leitung erfolgen, wo die Versorgungsmasse in das Subsystem eintritt. Im Falle einer Abschirmung sollte sie jedoch an einem Ende des Kabels gegen das Chassis geerdet werden.
@Qrenz Ich denke, das Problem wird gelöst, wenn Sie ein isoliertes USB_to_serial verwenden. Abschirmung und Erdung haben viele Tricks und hängen von Ihrer Schaltungskonfiguration und Ihrem Stromverteilungsmechanismus ab.
Heute habe ich gerade meinen UART-Firmware-Code geändert/verbessert, um eine bessere Pufferung und Datenüberlaufbehandlung zu erzielen. Aber es gibt immer noch einen Timeout-Fehler ... Die Projektfrist ist Ende November ...
Ich frage mich immer noch, warum Modbus sehr reibungslos läuft, wenn ich nur das FT232R-Breakout-Board verwende, aber bei der Verwendung von RS-485 immer wieder Zeitüberschreitungsfehler ausgibt.
@Qrenz IS Ft232 Basis USB_to_485 funktioniert aber der andere nicht?
@M KS: Das funktioniert sehr reibungslos: uC (Modbus-Code) - UART1 (Tx Rx Gnd) - FT232R-Breakout-Board - USB-Kabel - PC (Modbus-Abfrage) Aber dieser immer Zeitüberschreitungsfehler: uC (Modbus-Code) - UART2 (Tx Rx EN Gnd 3,3 V) - MAX3471 (auf derselben Platine mit uC) - 6 Kabel (AB TxLED RxLED Gnd 3,3 V) - RS-485-zu-RJ-45-Platine - Ethernet-Kabel gerade - RJ-45-zu-USB-Konverterkabel - PC ( Modbus-Umfrage). Der Projektmanager möchte RS-485-Ethernet verwenden, da er plant, in Zukunft mehr als 1 Gerät zu steuern, er möchte USB to Serial nicht verwenden. Und dieses Projekt war eigentlich ein Überbleibsel von einem ehemaligen Mitarbeiter, ich führe es weiter.
@Qrenz Was ist der Chip im Inneren (RJ-45-zu-USB-Konverterkabel)? Ist das FT232-basiertes System? Wenn Sie einen Bereich haben, überprüfen Sie den Richtungssteuerungsstift auf der Seite des Mikrocontrollers. Verzögerung im Steuer-Pin kann das Modbus-Paket beschädigen
@M KS Der Chip basiert auf FTDI, wenn ich mir den installierten Treiber im Geräte-Manager ansehe. Sie meinen den Aktivierungsstift für MAX3471, um vom Ausgang zum Eingang und umgekehrt zu wechseln? Im Moment habe ich eine Verzögerung von 2 us eingegeben, um vom Empfangen zum Senden und umgekehrt zu wechseln. Reicht das? Ich habe nur einen Logikanalysator (Saleae), ich habe vor, morgen das A- und B-Signal abzugreifen, um es zu sehen (denn wenn ich mich richtig erinnere, habe ich die LED am RJ-45-Anschluss nie blinken sehen). Außerdem habe ich gerade im MAX3471-Datenblatt gesehen, dass die Datenrate fMAX 64 kbps beträgt und mein UART-Baud auf 115200 eingestellt war. Vielleicht sollte ich es auf 9600 bps senken?
@Qrenz fMAX ist mindestens 64K, das ist nicht das Problem, einige RJ-45 haben eine ohmsche Verbindung! Überprüfen Sie die RX- und TX- und Dir-Steuerung mit einem Logikanalysator.
@M KS Ich habe das A- und B-Signal von RS-485 mit einem Logikanalysator überprüft. Wenn ich ein Zeichen vom Mikro sende, ist es in Ordnung, dass das Zeichen auf der Leitung korrekt angezeigt wird, aber das Problem sind die Daten, die vom PC gesendet wurden Seite wird es in der Zeile falsch angezeigt ... (Ich habe meine oberste Frage bearbeitet)