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. Ich 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:
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:
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.
Qrenz
Qrenz
M KS
Qrenz
Lundin
M KS
Qrenz
Qrenz
M KS
Qrenz
M KS
Qrenz
M KS
Qrenz