# WAGO 750-8101 über Modbus auf FU (Rexroth EFC 3610) zugreifen



## Riku (19 März 2019)

*WAGO 750-8101 Ueber Modbus auf FU (Rexroth EFC 3610) zugreifen*

Moin zusammen,
ich habe momentan eine Problematik wobei ich einmal Hilfe braeuchte. Vorab: Ich bin komplett neu auf dem Gebiet der Wago Steuerung somit schonmal Verzeihung falls ich simple Fragen stelle.

Zu der Problematik: Fuer meinen Studentenjob will ich mit meiner WAGO 750-8101 auf einen Frequenzumrichter der Firma Rexroth zugreifen. Das ganze soll mit Modbus realisiert werden. Verbunden sind Steuerung und FU ueber einen Switch. Fuer die Kommunikation wurde der FU mit einer zusaetzlichen Multi-Ethernet-Karte ausgestattet.
Probleme entstehen nun bei dem eigentlichen Zugriff auf das Fremdgerät(FU). Ich habe bereits im e!COCKPIT einen "Generic_MODBUS_Slave" hinzugefuegt. Die IP-Adresse des Slaves habe ich in den Registern des FU eingestellt und dementsprechend in dem e!COCKPIT Netzwerk eingetragen. Dieses gilt auch fuer andere Parameter wie Baudrate, Paritaet und Stoppbits.
Im ersten Schritt wollte ich nun ein Register auslesen, um zu gucken ob  die Kommunikation funktioniert. Also hab ich einen generischen  Datenpunkt im Feldbuskonfigurator angelegt und wollte diesen lediglich  in mein PLC_PRG an eine andere WORD Variable uebergebe. Jedoch zeigt der FU lediglich einen Kommunikationsfehler FDI an. Stelle ich an den Registern noch was um verschwindet zwar der Fehler am FU dafuer zeigt nun aber der MODBUS der WAGO Steuerung ein Fehler an.

Mir ist bewusst, dass es unzaehlige Fehlerquellen geben kann, deswegen wuerde ich sehr Dankbar sein, wen zunaechst auf die generelle Anbindung von Fremdgeraeten unter Wago bzw. e!COCKPIT eingegangen wird.

Findet die Anbindung rein in dem Netzwerk statt oder muss ich ueber eine zusaetzliche Bibliothek etwas einfuegen ?
Wird die Adresse der Register in Deszimal umgerechnet ?
Wie kann ich Fehler der WAGO Steuerung direkt auslesen (mehr als nur "MODBUS Fehler") ?

Ueber jegliche Hilfe wuerde ich mich sehr freuen !

Edit: Fehler


----------



## Tobsucht (19 März 2019)

Hallo Riku,

ab der Firmware 11 des PFC100 steht dir eine Diagnose über die Bibliothek WagoSysModbusDiag zur Verfügung.
Da erwähnt wurde, dass eine Ethernet Karte im Spiel ist gehe ich jetzt mal von Modbus TCP aus.

Unter IoConfig_Globals wird für jeden Slave automatisch eine Instanz angelegt. Diese Instanz liefert die Methoden GetErrorCode() und GetChannelErrorCode, wobei n der entsprechende Kanal ist.
Je nach angelegten Datenpunkten legt der Konfigurator mehrere Kanäle an um die Datenpunkte abzuarbeiten.

Bei Modbus TCP kannst Du den generellen Kommunikationsstatus prüfen:
eSlaveState := IoConfig_Globals.Generic_MODBUS_Slave_tcp.GetErrorCode();

Dies liefert einen ersten Ansatz.


Zuerst könntest Du aber mit dem PC als Modbus TCP Master testen. Mit dem Programm Modbus Poll (modbustools.com) kannst Du schneller als im e!Cockpit die Unit ID und die Adressen ändern.
Sofern es dann mit Modbus Poll läuft, kannst Du die Parameter für e!Cockpit nutzen.

Grüße

Edit:

die Enumeration eSlaveState kannst Du so deklarieren:
eSlaveState: WagoSysModbusDiag.eRemoteSlaveError;


----------



## Riku (20 März 2019)

Hey Tobsucht !
VIelen dank erstmal für die Tipps. Sobald ich mehr weis melde ich mich nochmal.


----------



## Riku (29 März 2019)

Moinsen nochmal!
Hatte nun wieder etwas Zeit und bin zumindest etwas weiter gekommen.

Zunächst hab ich es mit dem Modbuss Poll probiert.
Nach  etwas ausprobieren habe ich es geschafft das ich Register auslesen  konnte. Die meisten Werte habe ich dabei gelassen wie Sie eingestellt  sind.
9600 Baud.
8 Data bits
Even Parity
1 Stop Bit
Response Timeout 1000 ms
Delay between Polls 20 ms
Connect Timeout 3000 ms

Bei der Abfrage des Registers habe ich das Leistungsmodul Temperatur Register (D0.20) des FU's abgefragt.
Einstellung dafür war:
Slave ID 71
Function 03 (Read Holding Registers
Address 4116 (0x1014)
Quantity 10
Scan Rate 1000ms

Dabei  habe ich dann auch tatsächlich den richtigen Wert herausbekommen. (Ich  kann die Werte direkt über eine USB Schnittstelle und dem Tool Convert Works direkt auslesen und somit kontrollieren). Somit weiß ich zumindest das die Kommunikation schonmal möglich ist.

In e!cockpit hab ich nun für den Slave einen Datenpunkt angelegt, mit dem ich das Register 4116 auslesen möchte.
Auslesen tu ich das ganze zyklisch alle 1000 ms.
Ausgehend von den Modbus Poll Daten hab ich die Antwortverzögerung auf 20 ms eingestellt und "Timeout in [ms] auf 2500.

Werf ich nun die Anlage an so zeigt der FU auf dem Display "Fdi" an welches besagt das die Feldbusdaten-ungültig sind.
Im e!cockpit wird mir für den Modbus ein Fehler angezeigt welcher sich jedoch nach ein paar Minuten (~ 3-4  min) langsam verschwindet. Langsam verschwindet bedeutet, dass er  zunächst dauerhaft anliegt, dann kurz auf OK springt und wieder zurück  und dann irgendwann dauerhaft auf OK bleibt. Der Fehler am Umrichter  bleibt weiterhin anstehend.

Tatsächlich  lässt sich zu diesem Moment auch die Temperatur im Programm anzeigen.  Trotzdem finde ich das gesamte Verhalten weiterhin sehr komisch.

Mit  der Bibliothek hatte ich bisher nicht so viel Erfolg. Dabei liegt es  jedoch mehr an mir da ich mit dem Umgang noch etwas...ungeschickt bin.

Weiterhin denk ich das durch Timings mir irgendwas bei der Kommunikation verbaut wird, sprich entweder Timeoutet  irgendwas oder der Response kommt zu schnell oder weis der Geier was.  Ich melde mich nochmal, wenn ich mehr weis, ggf. kann ich damit auch  jemand anderen noch helfen.

Edit: Eine Frage kam bei mir noch auf welches vielleicht erklärt ob ich komplett auf dem Holzweg bin: Ich hab öfter gesehen das Leute Modbus Sachen aus der Bibliothek nutzen und nicht mit dem Konfigurator arbeiten. Fragen stellt sich hier jetzt ob ich wirklich NUR den Konfigurator verwenden kann ohne irgendwas aus der Bibliothek zu nutzen.

Edit2: Hab nun versucht mit der Bib WagoSysModbusDiag zunächst ein einstieg mit der GetNumberOfChannels() methode zu machen. 
Var
ChannelNummer    :uint;
END_VAR

ChannelNummer:=WagoSysModbusDiag.FbModbusRemoteSlave.GetNumberOfChannels();

Bei der Verbindung bzw. übersetzung bekomm ich dan den Fehler 

 
C0086: Keine Definition für Schnittstelle 'I_WagoSysModbusDiag' gefunden

An dieser Stelle weiß ich zunächst nicht weiter da ich den Fehler nicht behoben bekomme.


----------



## Knaller (29 März 2019)

Moin

Zur Inbetriebnahme von einem Rexroth EFC 3610 kann auch das Indraworks  14V20 oder größer verwendet werden.   
Ich hatte da einige Probleme bei Profinet mit der Multiethernet- Karte.  Nach einem Software  Update ging alles.
Ich würde den Service unter 09352 405060 anrufen und die Firmware auf dem EFC prüfen lassen.


----------



## Riku (5 April 2019)

Hey Knaller !
Sorry für die späte antwort. Ich werds mal mit Indraworks probieren und den Tipp mit dem Softwareupdate weiter verfolgen.
Ich meld mich sofern ich was neues habe.


----------

