ich versuche, eine Modbus-RTU-Kommunikation zwischen meinem Raspberry Pi mit CODESYS Control für Raspberry Pi 64 SL und einem Servotreiber von StepperOnline, Typ T6, herzustellen.
Die Verbindung ist wie folgt:
RJ45-Stecker am Servotreiber -> Kabel mit RJ45 an einem Ende und USB-A-Stecker am anderen Ende -> Seriell-zu-USB-Konverter -> Raspberry Pi.
Der Seriell-zu-USB-Konverter und die Kabel habe ich zusammen mit dem Motor und Treiber von StepperOnline gekauft und sie sind dafür gedacht, den Servotreiber mit einem Computer zu verbinden, auf dem deren Setup-Software läuft.
dmesg | grep tty auf dem Pi sagt mir, dass der USB-zu-Seriell-Konverter auf ttyusb0 ist. Ich weiß nicht, wie man das in einen COM-Port übersetzt, ich habe COM 1 genommen.
Ich habe ein Projekt in Codesys erstellt und ein Modbus_COM-Gerät hinzugefügt, einen Modbus_Master_COM_Port und einen Modbus_Slave_COM_Port angehängt.
Auf der Registerkarte "Allgemein" des Modbus_COM habe ich die folgenden Werte eingestellt:
Ich habe noch keinen Code geschrieben, weil ich noch nicht herausgefunden habe, wie man die Kommunikation programmiert.
Wenn ich das Projekt zum Raspberry Pi herunterlade scheint der Modbus_Master_COM_Port zu laufen (grünes Symbol), aber der Modbus_Slave_COM_Port nicht (rotes Dreiecksymbol). Wenn ich einen anderen COM-Port eintrage, haben sowohl der Master als auch der Slave das rote Dreiecksymbol.
Ich habe dies auch mit meinem Windows-PC unter Verwendung von Codesys Control Win 64 versucht und die gleichen Ergebnisse bekommen.
Ich wäre dankbar für jede Hilfe oder Tipps, wie ich den Grund dafür herausfinden kann, warum der Servotreiberreiber nicht reagiert.
Ich habe 'Modbus_Slave_COM_Port' in eine Watchliste genommen. Leider reichen meine Kenntnisse nicht aus, um aus dem Ergebnis irgendwelche Schlüsse zu ziehen.
xBusy und xError wechseln zwischen true und false (im Gegentakt), der angezeigte Fehler ist 'Response Timeout'. iChannelIndex wechselt zwischen 0 und -1.
Wenn ich das richtig verstehe bedeutet das wohl, das der Servotreiber auf Anfragen einfach nicht reagiert.
Ich hänge einen screenshot vom Watchfenster an, vielleicht kann jemand mehr herauslesen als ich.
Ist das RS232 oder RS485?
Bei RS485 muss der Adaper also dein USB/Serial die Senderichtung in Hardware machen und das unterstützen.
Abschlusswiederstände?
Last edit: eschwellinger 2024-06-01
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Ich scheine den Grund gefunden zu haben, das Kabel mit dem RJ45 Stecker ist für RS232 verdrahtet (am anderen Ende des Kabels ist ein 9-poliger SUB-D Stecker, nicht wie von mir im Eingangspost behauptet ein USB Stecker).
In der Anleitung des Treibers ist immer nur von RS 485 die Rede. Alerdings habe ich es gestern abend noch geschafft eine funktionierende Version der setup-software herunterzuladen, und die verbindet sich offenbar über RS232. Daraufhin habe ich mir in der Anleitung des Treibers das Pinout der RJ45 Buchse nochmal angesehen, und die hat Kontakte für RS232 und für RS485. (Die liegen jeweils ganz am Rand, so ist mir das vorher nicht aufgefallen).
Ich muss also als Nächstes ein richtig verdrahtetes Kabel auftreiben, und dann sehen ob das mit dem Adapter den ich habe funktioniert.
An einen Abschlusswiderstand habe ich auch schon gedacht, nur weiss ich nicht wo ich den an einem RJ45 Stecker / Buchse - Paar anbringen soll...
Ich bitte um Entschuldigung für die Verwirrung, ich mache das alles zum ersten Mal und es ist ganz schön viel auf einmal für mich.
Nochmal vielen Dank für die Unterstützung!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
ich versuche, eine Modbus-RTU-Kommunikation zwischen meinem Raspberry Pi mit CODESYS Control für Raspberry Pi 64 SL und einem Servotreiber von StepperOnline, Typ T6, herzustellen.
Die Verbindung ist wie folgt:
RJ45-Stecker am Servotreiber -> Kabel mit RJ45 an einem Ende und USB-A-Stecker am anderen Ende -> Seriell-zu-USB-Konverter -> Raspberry Pi.
Der Seriell-zu-USB-Konverter und die Kabel habe ich zusammen mit dem Motor und Treiber von StepperOnline gekauft und sie sind dafür gedacht, den Servotreiber mit einem Computer zu verbinden, auf dem deren Setup-Software läuft.
dmesg | grep tty auf dem Pi sagt mir, dass der USB-zu-Seriell-Konverter auf ttyusb0 ist. Ich weiß nicht, wie man das in einen COM-Port übersetzt, ich habe COM 1 genommen.
Ich habe ein Projekt in Codesys erstellt und ein Modbus_COM-Gerät hinzugefügt, einen Modbus_Master_COM_Port und einen Modbus_Slave_COM_Port angehängt.
Auf der Registerkarte "Allgemein" des Modbus_COM habe ich die folgenden Werte eingestellt:
Slave address 1
Baud rate 9600
Parity None
Data bits 8
Stop bits 2
Ich habe den Servotreiber auf die gleichen Werte eingestellt. (Ich habe auch andere Werte getestet, aber mit dem gleichen Ergebnis).
Auf der Registerkarte "Modbus Slave Channel" des Modbus_Slave_COM_Port habe ich einen Kanal hinzugefügt und die folgenden Werte eingetragen:
Access type Read Holding Registers (Function Code 3)
Read Register offset 0x0000
Length 1
Ich habe noch keinen Code geschrieben, weil ich noch nicht herausgefunden habe, wie man die Kommunikation programmiert.
Wenn ich das Projekt zum Raspberry Pi herunterlade scheint der Modbus_Master_COM_Port zu laufen (grünes Symbol), aber der Modbus_Slave_COM_Port nicht (rotes Dreiecksymbol). Wenn ich einen anderen COM-Port eintrage, haben sowohl der Master als auch der Slave das rote Dreiecksymbol.
Ich habe dies auch mit meinem Windows-PC unter Verwendung von Codesys Control Win 64 versucht und die gleichen Ergebnisse bekommen.
Ich wäre dankbar für jede Hilfe oder Tipps, wie ich den Grund dafür herausfinden kann, warum der Servotreiberreiber nicht reagiert.
Ein Versuch wäre mal 'Modbus_Slave_COM_Port' ins Watchfenster und die Diagnose anschauen.
Hallo, und vielen Dank für die Antwort.
Ich habe 'Modbus_Slave_COM_Port' in eine Watchliste genommen. Leider reichen meine Kenntnisse nicht aus, um aus dem Ergebnis irgendwelche Schlüsse zu ziehen.
xBusy und xError wechseln zwischen true und false (im Gegentakt), der angezeigte Fehler ist 'Response Timeout'. iChannelIndex wechselt zwischen 0 und -1.
Wenn ich das richtig verstehe bedeutet das wohl, das der Servotreiber auf Anfragen einfach nicht reagiert.
Ich hänge einen screenshot vom Watchfenster an, vielleicht kann jemand mehr herauslesen als ich.
Nochmal danke fürs Lesen und Überlegen!
Ist das RS232 oder RS485?
Bei RS485 muss der Adaper also dein USB/Serial die Senderichtung in Hardware machen und das unterstützen.
Abschlusswiederstände?
Last edit: eschwellinger 2024-06-01
Hallo,
Ich scheine den Grund gefunden zu haben, das Kabel mit dem RJ45 Stecker ist für RS232 verdrahtet (am anderen Ende des Kabels ist ein 9-poliger SUB-D Stecker, nicht wie von mir im Eingangspost behauptet ein USB Stecker).
In der Anleitung des Treibers ist immer nur von RS 485 die Rede. Alerdings habe ich es gestern abend noch geschafft eine funktionierende Version der setup-software herunterzuladen, und die verbindet sich offenbar über RS232. Daraufhin habe ich mir in der Anleitung des Treibers das Pinout der RJ45 Buchse nochmal angesehen, und die hat Kontakte für RS232 und für RS485. (Die liegen jeweils ganz am Rand, so ist mir das vorher nicht aufgefallen).
Ich muss also als Nächstes ein richtig verdrahtetes Kabel auftreiben, und dann sehen ob das mit dem Adapter den ich habe funktioniert.
An einen Abschlusswiderstand habe ich auch schon gedacht, nur weiss ich nicht wo ich den an einem RJ45 Stecker / Buchse - Paar anbringen soll...
Ich bitte um Entschuldigung für die Verwirrung, ich mache das alles zum ersten Mal und es ist ganz schön viel auf einmal für mich.
Nochmal vielen Dank für die Unterstützung!
Kleines Update; mit dem richtigen Adapter und Kabel läuft jetzt auch der Slave. Herzlichen Dank noch mal!