TIA MODBUS Siemens 1512SP-1 PN und CM PtP RS485 Kommunikation zu Schrittmotortreiber

mona1234

Level-2
Beiträge
22
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich möchte eine Ansteuerung von mehreren Schrittmotoren über Modbus und einen Treiber von Stepper Online realisieren (DM556RS). Dafür habe ich mir in Tia ein dementsprechendes Programm erstellt. Ich habe nun das Problem, dass der Modbus_Comm_Load immer im Status 7000 bleibt. Des weiteren wechselt der Master immer zwischen 7001, 7002 und 8188. Hat jemand einen Tipp wie ich diesen Fehler beheben kann? Ich habe schon verschiedenste Sachen ausprobiert, welche ich zu dem Thema gefunden habe. Leider bin ich auch ziemlich neu auf dem Gebiet.

Das CM welches ich verwende ist das folgende: 6ES7 137-6AA01-0BA0.
Modbus_Comm_Load.pngModbus_Master.pngSlave.pngModbusParameterList.png

Hier auch der Link zu dem Treiber: https://www.omc-stepperonline.com/d...48vdc-fuer-nema-17-23-24-schrittmotor-dm556rs

Ich hoffe dass mir jemand helfen kann. Falls ich noch etwas hochladen soll gerne Bescheid geben!

Vielen Dank im Voraus!
 
Hallo,
der Fehler 8188 sagt alles. Mode hat einen ungültigen Wert. In deinem Fall 4. Versuch mal 0 zum lesen und 1 zum schreiben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

den Fehler hatte ich jetzt auch wegbekommen. Nun habe ich einen neuen Fehler 81E2 (Zeichenrahmenfehler). Ich habe alle möglichen Anpassungen/Varianten von Einstellungen für Startbit, Anzahl an Datenbits (DATA_LEN), Paritätsbit, Baudrate und Stoppbit(s) ausprobiert, jedoch geht der Fehler nicht weg. Hierzu noch eine Idee woran es liegen könnte?

Des weiteren Vermute ich, dass meine Konfiguration (Modbus_Comm_Load) nicht richtig funktioniert, da hier durchgehend der Status 7000 angezeigt wird und DONE nie TRUE wird.

Viele Grüße!
 
Zuletzt bearbeitet:
Zu Modbus_Comm_Load:
REQ benötigt eine steigende Flanke, das geht oft nicht im ersten OB1-Zyklus. Wozu soll der "TOF FirstScan" gut sein? Und sitzt das CM PtP in einer dezentralen ET200SP Station? Dann muss Modbus_Comm_Load auch nach Stations-Wiederkehr aufgerufen werden. Erzeuge mal den REQ testweise mit einer BOOL-Variable (z.B. Merker), die du per Beobachtungstabelle steuerst.
Merkst du dir, ob DONE und ERROR schon mal TRUE waren? Tipp: Testweise die Signale auf einen Zähler verschalten.
Stimmt die HW-Kennung an PORT?
 
Hallo,

ich habe das jetzt so Umgesetzt und es scheint als würde der Comm_Load richtig funktionieren. Jedoch kommt weiterhin der Fehler (Abwechselnd 7001, 7002 und 81E2) beim Modbus_Master. Das CM PtP sitz nicht in einer dezentralen Steuerung. Auch die HW Kennung sollte stimmen.

1723020789207.png1723020802550.png1723020819505.png

1723020949942.png

1723021208033.png

Noch weitere Ideen?
 
Hast du im Modbus Com Load auch die Stopbits die Mode, Line_Pre etc. belegt? Das sehe ich in deinem Code nicht. Die sind leider (entgegen aller Styleguides vom Siemens) im STAT des Bausteins.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich werde das mit dem Leitfaden nochmal probieren. Jedoch kann ich ja bei der Parametrierung vom CM auch die Vorbelegung auswählen. Ist das dann das gleiche wie Line_Pre = 2 oder muss ich das noch zusätzlich auswählen?
1723024010854.png
Ich habe das wie folgt angeschlossen:

Siemens Pin 12 auf Pin 2
Siemens Pin 14 auf Pin 1 (Tauschen auch schon versucht)
Siemens Pin 15 und 16 auf Pin 5 und 6

Auch der Abschlusswiderstand sollte richtig angeschlossen sein, da dieser durch einen einfachen Schalter Ein-/Ausgeschaltet werden kann. Muss auf der Seite des Masters (SPS) auch ein Widerstand eingebaut werden?

Bei den statischen Parametern habe ich nur Mode belegt. Muss ich hier Sachen wie Parity etc auch belegen? Habe mal einen Screenshot angefügt.

1723023335274.png1723023487469.png

1723023824614.png
 
Ich werde das mit dem Leitfaden nochmal probieren. Jedoch kann ich ja bei der Parametrierung vom CM auch die Vorbelegung auswählen. Ist das dann das gleiche wie Line_Pre = 2 oder muss ich das noch zusätzlich auswählen?

Du kannst entweder oder benutzen. Wenn du allerdings den Load aktivierst, überschreibt dieser die Vorwahl in der Parametrierung des CM.
Umgekehrt überschreibt die Parametrierung des CM den Load bei jedem Spannungsunterbruch des CM. Das heisst, wenn du Load nutzt, dann musst du ihn Starten jedesmal wenn der CM sich neu anmeldet, wenn die CPU neu startet, wenn die Karte Gezogen und gesteckt wurde etc.
Ich macht das bei Kommunikationsfehlern zyklisch alle 10sek um das zur Sicherheit abzufangen.

Bei den statischen Parametern habe ich nur Mode belegt. Muss ich hier Sachen wie Parity etc auch belegen? Habe mal einen Screenshot angefügt.
JA du musst alles belegen, ansonsten werden die Startwerte genommen die im STAT eingetragen sind.
ModComLoad überschreibt die Werte der Kartenkonfiguration immer ob da etwas angeschlossen ist oder nicht ist irrelevant.
 
Trotzdem nochmal eine Frage zu den statischen Parametern. Wenn ich die Startwerte erstmal beibehalte muss ich da ja nichts anpassen oder?

Ich habe jetzt auch die Vorbelegung im CM deaktiviert und den Lin_Pre auf 2 gesetzt. Jetzt blinkt immerhin die Tx led, jedoch bin ich ja im Mode 0 (Receive) weshalb eigentlich Rx blinken sollte. Des weiteren habe ich auch keinen Fehler mehr, sondern der Status bleibt jetzt dauerhaft bei 7002.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Trotzdem nochmal eine Frage zu den statischen Parametern. Wenn ich die Startwerte erstmal beibehalte muss ich da ja nichts anpassen oder?

Ich habe jetzt auch die Vorbelegung im CM deaktiviert und den Lin_Pre auf 2 gesetzt. Jetzt blinkt immerhin die Tx led, jedoch bin ich ja im Mode 0 (Receive) weshalb eigentlich Rx blinken sollte. Des weiteren habe ich auch keinen Fehler mehr, sondern der Status bleibt jetzt dauerhaft bei 7002.

Mode 0 ist RS232 Vollduplex. In deinem Datenblatt steht aber dass es RS485 ist. das wäre Mode 4 Halbduplex
Tx blinkt wenn dein Treiber was sendet, Rx Blinkt wenn die Karte was empfängt. Das hat nichts mit dem Mode zu tun nur was auf der Leitung abgeht.
 
Aber ich habe doch zwei verschiedene Modes. Zum einen den Mode den Ich bei dem Comm Load bei den Statischen Parametern einstelle und den Mode beim Modbus_Master.

1723029111800.png
 
Auch der Abschlusswiderstand sollte richtig angeschlossen sein, da dieser durch einen einfachen Schalter Ein-/Ausgeschaltet werden kann. Muss auf der Seite des Masters (SPS) auch ein Widerstand eingebaut werden?
Bei RS485 gehört an beide Leitungsenden ein Abschlusswiderstand. Kurze Leitungen funktionieren in der Regel auch mit nur einem Abschlusswiderstand an nur einer Seite - das ist aber so nicht spezifiziert und taugt nur als Test/Bastellösung. Zwei Abschlusswiderstände erhöhen die Funktions- und Störsicherheit. Weiters ist es bei Siemens üblich, dass auch der RS485-Ruhepegel (wenn kein Busteilnehmer sendet) mit 2 Bias-Widerständen und 5VDC auf eine Vorbelegung gezogen wird. Ob die parametrierbare "Vorbelegung der Empfangsleitung" gleichwertig ist, weiß ich nicht.
Wie lang ist die RS485-Leitung?

PS: Aus dem Handbuch deines CM PtP:
Bei Leitungslängen > 50 m müssen Sie für einen störungsfreien Betrieb jeweils einen Abschlusswiderstand von ca. 330 Ω auf der Empfängerseite vorsehen.
Bei RS485 sind beide Seiten "Empfängerseite", daher sollte man diese Siemens-Formulierung so auslegen, dass an beiden Seiten ein Abschlusswiderstand nötig ist.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei RS485 gehört an beide Leitungsenden ein Abschlusswiderstand. Kurze Leitungen funktionieren in der Regel auch mit nur einem Abschlusswiderstand an nur einer Seite - das ist aber so nicht spezifiziert und taugt nur als Test/Bastellösung. Zwei Abschlusswiderstände erhöhen die Funktions- und Störsicherheit. Weiters ist es bei Siemens üblich, dass auch der RS485-Ruhepegel (wenn kein Busteilnehmer sendet) mit 2 Bias-Widerständen und 5VDC auf eine Vorbelegung gezogen wird. Ob die parametrierbare "Vorbelegung der Empfangsleitung" gleichwertig ist, weiß ich nicht.
Wie lang ist die RS485-Leitung?
Der Aufbau ist aktuell auch nur zum Testen, und die Leitung nur ca. 1 m lang.
 
Langsam!
Lass erst mal den Master ganz weg und schau, dass Du Com_Load auf Status 0 bekommst.
Dazu bitte den Status-Ausgang nur dann wegschreiben, wenn Error oder DONE = true ist.

Wenn Com-Load Status 0 (kein Fehler) meldet, kann man dann schauen, wie es weitergeht.
Die ganzen COM-Einstellungen müssen zu Deinem Partner passen.
 
Musst du am DM556RS nicht die Pins 1 + 9 und 2 + 10 verbinden? Ich meine, das muss.
GND muss nicht verbunden werden, nur A und B.
Pin 1-8 ist der erste RJ-45 Port und Pin 9-16 der zweite. An 9-16 können dann weitere Slaves angeschlossen werden. Der erste Port kann auch laut der Aussage vom Support für das Senden und Empfangen genutzt werden.

Langsam!
Lass erst mal den Master ganz weg und schau, dass Du Com_Load auf Status 0 bekommst.
Dazu bitte den Status-Ausgang nur dann wegschreiben, wenn Error oder DONE = true ist.

Wenn Com-Load Status 0 (kein Fehler) meldet, kann man dann schauen, wie es weitergeht.
Die ganzen COM-Einstellungen müssen zu Deinem Partner passen.
So wie ich das verstanden habe bekommt man den Modbus_Comm_Load Baustein nicht mehr auf Status 0, dass war nur bei den alten Bausteinen MB_Comm_Load der Fall. Des weiteren bleibt auch der DONE nicht mehr durchgehen true. Das war zumindest das was ich dazu gefunden habe. Vielleicht liege ich auch Falsch.
 
Pin 1-8 ist der erste RJ-45 Port und Pin 9-16 der zweite. An 9-16 können dann weitere Slaves angeschlossen werden. Der erste Port kann auch laut der Aussage vom Support für das Senden und Empfangen genutzt werden.
Aha, also z.B. für ankommende und weitergehende RS485-Bus-Leitungen. Dann ist die Anschlusstabelle falsch oder zumindest irreführend. Es gibt bei RS485 nicht 4 getrennte Signale TxD+, RxD+, TxD- und RxD-. Es gibt nur 2 Signale TxD/RxD+ und TxD/RxD-
Sind trotzdem 4 getrennte Signale erwähnt, dann müssen in der Regel TxD+ mit RxD+ und TxD- mit RxD- verbunden werden.
Kommt aber auf die Qualität und Korrektheit der Dokumentation drauf an ...
 
Zurück
Oben