Daten über Modbus-TCP auslesen

Spritkopp

Level-1
Beiträge
24
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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.

Screenshot.jpg

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
 
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ß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
Zuletzt bearbeitet:
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
 
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.

screenshot1.jpg

Wäre super, wenn ihr mir auch da auf die Sprünge helfen könntet.
Vorab schon mal vielen Dank.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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 :D

Wolfgang
 
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
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Zuletzt bearbeitet:
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?
scrrenshotUDP2.jpg
__________________________________________________________________

Ä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
 
Zuletzt bearbeitet:
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
Zuletzt bearbeitet:
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

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!
 
Zurück
Oben