# PFC200 Verbindung über RS485 und Modbus RTU an ein Gateway



## mrcgrndt (20 November 2015)

Hallo zusammen, 

ich möchte ein Energiemanagementprojekt umsetzen und komme da nicht so recht weiter. Könnt Ihr mir da helfen?

Die Anlage ist folgendermaßen aufgebaut: ein WAGO 750 - 8202 mit angeschlossenem Analogeingangsmodul und Leistungsmessung kommuniziert via Ethernet mit mehreren WAGO 750 - 352 Kopplern, die ebenfalls den Analog - und den Leistungsmessungsbaustein angeschlossen haben. So weit so gut... Zusätzlich soll aber über die RS485 Schnittstelle des Controllers über Modbus RTU ein (Nicht - Wago) Gateway angeschlossen werden, der zusätzlich jede Menge Daten an den Master schicken soll. Das Gateway setzt meinen CAN – Bus der Maschinen in den Modbus um. 
Alles in CoDeSys 2.3 programmiert. 

Das Auslesen der Leistungsmessung funktioniert sowohl beim Controller als auch mit den angeschlossenen Kopplern top. Der Knackpunkt ist bei mir die Anbindung des Modbus - Gateways, ich kenne mich aber auch noch nicht so recht mit dem Modbus aus... 

Die RS485 Schnittstelle habe ich im WBM so eingestellt, das das Programm selber bestimmen kann, in welchem Modus sich die Schnittstelle befindet. 
In meinem Programm (welches ich schon halb fertig von einem Kollegen übernommen habe) wurde bereits der Modbus_Extended_Master Baustein eingesetzt und wie auf dem Screenshot parametriert. 



In der Live - Ansicht habe ich dort am Ausgang keinen MB_Error, dafür aber am bInterfaceError Fehlercode 4: dieser Funktionsblock - Instanz ist bereits ein anderer COM - Port zugeordet. 
Was bedeutet das? 
Außerdem habe ich, als ich dort nicht weitergekommen bin herausgefunden, dass man in der Steuerungskonfiguration unter Modbus – Master und Modbus variables noch eine Konfiguration vornehmen kann. Diese habe ich so eingestellt:



Baudrate usw. ist bereits mit dem Gateway abgeglichen. 
Muss ich in der Netzwerkansicht an das Modbus – Netzwerk direkt auch alle meine Slaves konfigurieren? Das mache ich eigentlich schon im Init des Modbus_RTU_Master. 
Bei Modbus variables muss man außerdem eine Geräte – Id festlegen, das heißt der Modbus Master bekommt auch eine eigene Modbus – Adresse? Wenn ja, benötigt das Gateway dann auch nochmal eine separate Adresse?
Im Init des Modbus_RTU_Master sind dann schon folgende Einstellungen getroffen worden: 


So wie ich das verstehe wurde dem structModbusSlave[1] hier bereits die SlaveAddress 1 zugeordet, das müsste dann der Modbus – Adresse entsprechen, oder? In meinem Fall wäre das dann Maschine 1. FunctionCodeRead:=3 dürfte auch passen, da Holding Register gelesen werden sollen. Muss dann in der nächsten Zeile zwangsläufig eine Startadresse definiert werden? Hinterher soll es möglich sein, alle Register auslesen zu können. Gleiche Frage gilt dann für die Read_Quantity. Können auch mehrere FunctionCodes gleichzeitig ausgelesen werden?
So. Vielleicht habe ich ja glück und jemand kann mit den Angaben was anfangen… Wenn nötig hänge ich auch noch das Programm an. Wenn ich das dann hinbekomme, geht’s nur noch um das eigentliche Auslesen der Daten vom Gateway (also z.B. Maschine 1, Umgebungstemperatur usw.). Da bräuchte ich auch noch Unterstützung. 
Danke Euch schonmal für Eure Hilfe und wünsche ein schönes Wochenende!
Marco


----------



## .:WAGO::014797:. (23 November 2015)

Hallo Marco,

Du hast versucht Modbus-Variablen zu konfigurieren. Das ist ein Lösungsansatz, wenn der PFC gegenüber dem Gateway als Modbus-Slave dienen soll. Ich gehe davon aus, dass das Gateway ebenfalls wie die 750-352 in Deinem System ein Modbus-Slave ist. In diesem Fall empfehle ich, den Modbus-(Master-)Konfigurator zu verwenden. Es besteht die Möglichkeit sowohl die 750-352 mit den Leistungsmessklemmen wie auch die Modbus RTU-Kommunikation über die serielle Schnittstelle zu konfigurieren.




Weiere Infos zum Modbus Master Konfigurator findet man hier:

http://www.wago.de/suche/index.jsp?...earch_downloadsDe_labelǁDokumentation&lang=de


----------



## mrcgrndt (26 November 2015)

Danke für die Antwort. Habe es doch mit dem Modbus_RTU_Master geschafft. Das Auslesen der Zählerstände und analoger Eingänge über Modbus und FunctionCodeRead 3 hat auch gut geklappt.  Mit dem Auslesen der Coils habe ich allerdings noch Schwierigkeiten. Ich habe die folgenden Einstellungen getroffen:





Bild 1 sage ich im Init vom Modbus_RTU_Master dass er unter der structModbusSlave[3] die Coils im FunctionCode 1 auslesen soll. 
Bild 2 ist dann der Funktionsbaustein mit dem Code, der mir die ausgelesenen Coils in BOOL - Variablen umformen soll. 
Bild 3 dann der Code aus dem FB. DWORD_TO_BOOL war nur eine Idee von mir, wäre vermutlich zu einfach. Könnt ihr mir da helfen?


----------

