Modbus RTU Codesys Schrittmotorsteuerung

TimSchu

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Ich bin neu in Codesys und verstehe nicht wie ich mit Modbus RTU die Parameter eines Schrittmotortreiber mappen und schreiben kann.
Ich benutze den Stepperonline DM556RS. Die Anleitung ist auf Englisch und liegt als angehängte Datei bei. Ich habe diese Anleitung mehrmals durchgelesen und die Schritte befolgt.
Die Kommunikation steht. alles ist grün. Ich habe dort die drei Funktionscodes 03, 06,10. In Codesys gibt es aber keinen Funktionscode 10 sondern nur 16. Ist dort schon der Fehler. 1663585297634.png
1663585486798.png

Dort habe ich es so verstanden, dass ich die Holding Register 0x0F10 ... 0x0F19 verwenden soll und auf diese kann ich die Parameter mappen. Dann kann ich in die Variablen, die den Adressen zugewiesen sind, Werte schreiben, die dann dem Treiber in die Parameter geschrieben werden. Nach dem Mapping muss ich 0x01801 in 0x2244 schreiben um die Parameter ins EEPROM zu speichern. In der pdf ist auf Seite 33 auch ein Beispiel abgebildet, das ich versucht habe.
1663585931495.png
1663586623755.png

Ich möchte dem Schrittmotor einfach direkt aus meinem Programm sagen: fahre mit einer Geschwindigkeit auf die jeweilige Position.

Habe ich etwas übersehen und was mache ich falsch?

Vielleicht kennt sich ja jemand damit gut aus und kann mir weiterhelfen.

Vielen Dank im vorraus dafür.
 

Anhänge

Nach dem Mapping muss ich 0x01801 in 0x2244 schreiben
machst du doch aber nicht.
du schreibst 16#2244 in 16#0F10 und anschließend 16#1801 in 16#0F10.

Deine Trigger stehen auf Zyklisch. So ist keine gezielte Kommunikation möglich.
Du solltest eine Schrittkette aufbauen mit folgenden Schritten:
1. Daten Schreiben
2. Antwort auswerten
3. Speichern schreiben
4. Antwort auswerten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sollte ich also meinen Kanal 1 (Write Single Register) auf 0x1801 stellen und dann die 0x2244 hinein schreiben?
Ich hatte es vorher falsch beschrieben, 2244 in 1801 ist richtig.
Was sollte ich dann für den Trigger einstellen wenn nicht zyklisch? Mit den Varianten "Steigende Flanke" und "Applikation" ist keine Verbindung zum Bus da.

Ich lege hier nochmal die Schritte bei wie es in der Anleitung beschrieben wurde. Habe ich das verkehrt gemacht?

1663589722058.png
1663594117629.png
 
Die Anleitung ist etwas missverständlich geschrieben. So wie ich das aus den Beispielen herauslese, kannst du auf die Adressen 0x0F10 bis 0x0F19 Werte schreiben, die definieren, welche Parameter du gemappt haben willst. Der Zugriff selber passiert dann anschließend auf den Adressen 0x0F0 bis 0x0F9, anders herum gesagt: je nach Wert in z.B. 0x0F10 hat die 0x0F00 eine andere Funktion.
Vorteil dieses Mappings ist dass bis zu 10 eigentlich verstreut im Speicher liegende Variablen in einem Rutsch gelesen/geschrieben werden können.
Diese Mapping kann einmalig zu dem Gerät geschickt werden und anschließend ins Eeprom gespeichert werden. Du kannst das aber auch zyklisch schicken und auf das Schreiben ins Eeprom verzichten. Du solltest nur überlegen, welche Variablen gelesen und welche geschrieben werden sollen und diese entsprechend zusammenfassen, dann kannst du beispielsweise 4 Variablen schreiben (Definition auf 0x0F10 bis 0x0F13, Schreiben der Daten auf 0x0F00 bis 0x0F03) und 6 Variablen lesen (Definition auf 0x0F14 bis 0x0F19, Schreiben der Daten auf 0x0F04 bis 0x0F09).
 
Zurück
Oben