# Daten über Modbus-TCP auslesen



## Spritkopp (15 August 2016)

Guten Tag zusammen,

ich würde gerne über Modbus-TCP Daten von meinem Wechselrichter in ein Codesys v2.3.9.47-Programm einlesen.
Ich würde mich gern näher mit der Thematik beschäftigen, habe jedoch nur wenig Erfahrung mit CoDeSys 2.3 in Bezug auf auslesen von Daten über Modbus-TCP.

Ich habe eine Wago SPS 750-880 und eine (wie ich glaube) passende Wago-Bibliothek (WagoLibModbus_IP_01.lib). Diesen Baustein habe ich wie in der beiliegenden Beschreibung parametriert.
Mit dem Funktionscode soll die Seriennummer ausgelesen werden. Beim Versuch sich einzuloggen erfolgt ein Kommunikationsfehler.




Kann sich diesen Fehler jemand erklären?

Würde mich freuen, wenn mir jemand weiter helfen könnte bzw. über Bereitstellung verständlicher Infomaterialien.
Spritkopp


----------



## ChickenWingZ (15 August 2016)

Guten Morgen,

das sieht mir nach einem klassischen Fehler á la Verbindungsproblem zur SPS aus.

PC mit SPS korrekt verbunden?
Kommunikationsparameter richig eingstellt? (IP subnetz usw bei TCP, ComPort Baud usw bei Seriell)
Kommst du über Ethernet Settings auf die SPS?
Mal die SPS oder auch mal das Codesys Gateway neugestartet?

Gruß


----------



## Spritkopp (15 August 2016)

Vielen Dank für deine schnelle Antwort.
PC ist mit SPS über Netzwerkleitung verbunden. Die SPS kommuniziert ebenfalls mit dem Netzwerk.

IP Rechner: 192.168.0.22
subnet: 255.255.255.0
Kommunikationsparameter:
IP-SPS: 192.168.0.33
Portnummer: 2455
Transportprotokoll: TCP

Mit Hilfe des Wago Settings Programms habe ich die SPS gefunden.
Was meinst du mit CoDeSys-Gateway?


----------



## wolfi-sps (15 August 2016)

Hallo Spritkopp,

Ich würde an Deiner Stelle den MODBUS-Master Konfigurator nehmen. Ist wesentlich einfacher zu konfigurieren.
Ist in der Hardwarekonfiguration zu finden - Modbus-Master [FIX]
Ich lese meinen Kessel damit aus - zwar seriel - aber den kannst du auch für TCP/IP verwenden.

Wolfgang


----------



## Spritkopp (15 August 2016)

Danke für den Tipp Wolfgang, komme vielleicht später darauf zurück.  Würde es gern erst einmal über den Bibliotheksbaustein versuchen.

Nach  weiterem experimentieren konnte ich die Kommunikation ans laufen  bringen. Jedoch erhalte ich keinen Wert als Antwort, stattdessen bekomme  ich einen Errorcode 150. Wo wird mein geforderter Wert (beispielsweise  bei mir die Serialnr.) als Doppelword ausgegeben?

Zudem ist mir auch nicht ersichtlich warum die variablen in der Deklaration mit FALSE versehen sind.




Wäre super, wenn ihr mir auch da auf die Sprünge helfen könntet.
Vorab schon mal vielen Dank.


----------



## wolfi-sps (15 August 2016)

Bei wRead Adress (Startadresse) würde ich mal statt 30057 - 57 probieren.
Habe den Baustein vor langer Zeit auch mal verwendet. Bin mir nicht sicher - aber ein Versuch wäre es wert.
Fehler Code 150 ist in der Bausteinbeschreibung nicht vorhanden.
Wenn´s nicht klappt - stell mal den Problem ins WAGO Forum, da lesen die WAGO Leute mit.
Die haben bestimmt eine Lösung. Die WAGO - Jung´s sind gut 

Wolfgang


----------



## Spritkopp (15 August 2016)

Danke für den Tipp, leider besteht der Fehler auch wenn ich nur 57 eingebe.
Werde das auch mal mit dem Wago-Forum versuchen.
Wenn noch einem etwas einfällt würde ich mich trotzdem freuen.
Besten Dank nochmals


----------



## wolfi-sps (15 August 2016)

Mir fällt noch was ein - nimm mal als bFunktions_code  23  - ist das lese/schreibregister.


----------



## Spritkopp (15 August 2016)

Problem besteht weiterhin. Trotzdem Danke


----------



## holgermaik (15 August 2016)

Fehler 150





> 0x0096 – Server not available


In welchen Registern deine Seriennummer steht, sollte im Handbuch zum Wechselrichter stehen.


----------



## Nost (15 August 2016)

Du liest 100 Wörter aus. Setzt die Anzahl mal runter. Ich gehe nicht davon aus das der wechselrichter 100 Register am Stück beschrieben hat.


----------



## Spritkopp (16 August 2016)

Hallo Nost, danke für deine Antwort.

Ich habe tCON_WATCHDOG auf 2s gesetzt (Tipp vom Wago-Forum) und die wREAD_QUANTITY mal runter auf  15 und nachher auf 10 gesetzt, aber leider besteht der Fehler weiterhin.

Die Sache ist auch, dass die IP-Adresse von einer Webbox ist, an der wiederrum die Wechselrichter via Modbus (RS485) verbunden sind. Da es sich dabei um zwei Wechselrichter handelt, kann ich nur über meine Webbox diese ansprechen. Diese Webbox besitzt eine Gateway-IP.


----------



## Spritkopp (16 August 2016)

Nach weiterem rumtüfteln bekomme ich nun einen Wert ausgelesen, mitdem ich jedoch leider nichts anzufangen weiß. Abgefragt wurde in diesem Fall die Netzspannung der ersten Phase. Egal welchen Funktionscode ich auswähle (z.B Seriennummer-Abfrage) bleibt die Dezimalzahl am ADR Baustein gleich.
Hat jemand noch eine Idee, wie ich den korrekten Wert auslesen kann?


__________________________________________________________________

Änderung 18.08.2016 :
Habe mich dann doch für den Modbus-Konfigurator entschieden und konnte das Problem lösen.

Vielen Dank für eure Hilfe
Spritkopp


----------



## Spritkopp (2 September 2016)

Hallo zusammen,
ich möchte das Thema nochmal gern aufgreifen, da ich immer noch keine Lösung gefunden habe.
Kurze Zusammenfassung: Ich möchte ein Programm entwerfen, mit dem ich meinen Wechselrichter über Modbus-Befehle anspreche und die Wirkleistung sowie den cosPhi-Wert ändere.
Ich bin auf Empfehlung des Herstellers von meiner Webbox abgestiegen und habe mir ein „Web-Connect“-Modul zulegt, das laut Herstellen meine Anforderung erfüllen sollte. Dazu habe ich die richtigen Modbus-Register erhalten.
Mit dem Programm „simply Modbus TCP client“ funktioniert das Schreiben der Wirkleistung auch einwandfrei. Dieselben Werte habe ich in mein CoDeSys 2.3 Modbus-Master Konfigurator übertragen. Leider fährt der Wechselrichter sofort von nach Programmstart auf 0W Wirkleistung, auch wenn ich in meiner Variabel beispielsweise 20% eingebe bleibt er trotzdem bei 0W. Ich habe bereits andere Byte-Reihenfolgen, Datentypen, Vorzeichen vor meinen Variablen und sonstiges probiert aber ich bin mit meinem Latein am Ende. Hersteller und auch die WAGO-Hotline konnten mir leider auch nicht weiterhelfen.
Das Schreiben von Daten via Modbus ist in der Weboberfläche des Web-Connect-Moduls freigegeben. (schließlich funktioniert es ja mit simply Modbus TCP client).
Das Lesen von Daten via Modbus funktioniert über den Modbus Master Konfigkurator weiterhin einwandfrei.

Ich würde mich freuen, wenn Ihr noch eine Idee habt, wie ich dieses Problem lösen könnte.

Vorab vielen Dank
Spritkopp


----------



## Nost (2 September 2016)

Manche Geräte zählen die Register addresse ab 0 andere ab 1. Reduziert das Register in das du schreibst um eins. Bekommst du einen Kommunikation error?


----------



## Spritkopp (2 September 2016)

Danke für deine Antwort.
Das habe ich bereits auch probiert, dann erscheint sofort die Meldung MBCFG_Error = MBCFG_Illegal_Response und beim angegebenen Register dauert dies wehsentlich länger und erscheint nur stoßweise. In der Zwischenzeit wo kein Error vorliegt steht dort No_Error


----------



## wat84 (2 September 2016)

Hallo,

hast du mal im Modbus Master-Konfigurator die Zykluszeit, Timeout und Verzögerung verändert?


----------



## Spritkopp (2 September 2016)

Ja, ich habe die Zeiten beide höher angesetzt, da ich beim anderen Programm (simply Modbus TCP client) festgestellt habe, dass dieser schonmal eine Minute braucht um die Werte umzusetzen.
Ich habe jetzt einen heißen Tipp von *Thruser* erhalten.
Mir war nicht bewusst, dass ich meine Eingabe Forcen muss, da ich zuvor nur mit Siemens gearbeitet habe.
Leider reagiert der Wechselrichter auf meine Eingabe wie er möchte. So kann es sein dass ich 0% oder 100% habe, aber nie einen Zwischenwert erreiche. Teilweise fährt er auch die Leistung auf 0% ohne dass ich eine weitere Eingabe gemacht habe.
________________________________________________________
ÄNDERUNG:

Es lag an der falschen Byte Reihenfolge, jetzt funktioniert es wie es soll. *Danke für eure Hilfe*.
Kann mir vielleicht jemand sagen, wie ich in einem Baustein die Variable forcen kann?


----------



## Sprocky (8 September 2016)

wolfi-sps schrieb:


> Hallo Spritkopp,
> 
> Ich würde an Deiner Stelle den MODBUS-Master Konfigurator nehmen. Ist wesentlich einfacher zu konfigurieren.
> Ist in der Hardwarekonfiguration zu finden - Modbus-Master [FIX]
> ...



Hallo!
In meinem WAGO Projekt taucht der Punkt leider nicht auf. lege ich ein neues (leeres) Projekt an, ist der Modbus-Master [fix] da. Kann ich den irgendwie nachträglich in das alte Projekt einfügen?

danke!


----------



## wolfi-sps (8 September 2016)

Hallo Sprocky,

Exportiere Dein PRG im alten und Importiere  es wieder im neuen - sollte gehen.

Wolfgang


----------



## Sprocky (8 September 2016)

Hat funktioniert.

DANKE!
Helmut


----------



## wolfi-sps (8 September 2016)

Sehr gerne - wir sind eine Gemeinde


----------

