ETHERNET_MODBUSMASTER_UDP, nicht zusammenhängende Adressen lesen/schreiben

tomrey

Level-2
Beiträge
387
Reaktionspunkte
33
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi all,
ich versuche mit einer 750-889 unter Codesys 2.3 mit dem ETHERNET_MODBUSMASTER_UDP das Modbus-Gateway meiner Viessmann-Heizung per FC 03/04 zu lesen und per FC06 zu schreiben.
Die auszulesenden Registeradressen liegen nicht nebeneinander (z.B. 21 Input-Register-Adressen im Bereich 1-459), ich komme also mit Startadresse (wReadAdr) und Anzahl (wReadQty) nicht weiter.
Am liebsten würde ich mit einem Array/Struct arbeiten in dem die gewünschten Adressen tabellarisch angegeben werden. So arbeitet z.B. der Modbus-Adapter im iobroker.
Muß ich tatsächlich für jede MB-Adresse 1 Instanz vom FB machen oder wie lösen die Profis sowas?
Grüße
 
Du brauchst keine neue Instanz dafür. Einfach wenn der Datenpunkt ausgelesen wurde, den nächsten abfragen.
Alternativ gibt es in CS 2.3 auch den Modbuskonfigurator unter dem Punkt Steuerungskonfigurator. Der macht aber m.E. auch
nichts anderes
 
ich versuche mit einer 750-889 unter Codesys 2.3 mit dem ETHERNET_MODBUSMASTER_UDP das Modbus-Gateway meiner Viessmann-Heizung per FC 03/04 zu lesen und per FC06 zu schreiben.
Willst du wirklich die Modbus-Abfragen per UDP machen? Warum?
Ich kenne nur Modbus TCP. Beim Modbus Protokoll muss man zwingend Antworten abwarten bzw abholen. Ich kann mir grad nicht vorstellen, wie man das korrekt per UDP realisieren kann.

Die auszulesenden Registeradressen liegen nicht nebeneinander (z.B. 21 Input-Register-Adressen im Bereich 1-459), ich komme also mit Startadresse (wReadAdr) und Anzahl (wReadQty) nicht weiter.
Am liebsten würde ich mit einem Array/Struct arbeiten in dem die gewünschten Adressen tabellarisch angegeben werden. So arbeitet z.B. der Modbus-Adapter im iobroker.
Hier wurde so eine Jobliste zum Lesen mehrerer Modbus Register Bereiche für Wago realisiert:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, vielen Dank, dann werde ich den joblist-FB mal nach Codesys CFC umschreiben.
Mit dem Modbus Konfiguratur wäre die Var-Darstellung übersichtlicher aber ob man den mit dem joblist-Ansatz verknüpfen kann?
Nebenfrage: kan man den Modbuskonfigurator auch in Tabellenform bearbeiten z.B. f. copy-paste aus Excel?
Grüße
 
Mit dem Modbus Konfiguratur wäre die Var-Darstellung übersichtlicher aber ob man den mit dem joblist-Ansatz verknüpfen kann?
Ich kenne den Konfigurator nicht, doch ich glaube, in dem Konfigurator brauchst du dich um solche Details nicht kümmern, ob er auf die Variablen in einem Rutsch oder in mehreren Jobs zugreifen muss.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Mit dem Modbus Konfiguratur wäre die Var-Darstellung übersichtlicher aber ob man den mit dem joblist-Ansatz verknüpfen kann?
Nebenfrage: kan man den Modbuskonfigurator auch in Tabellenform bearbeiten z.B. f. copy-paste aus Excel?
mit dem Modbus Konfigurator bist Du viel schneller und sauberer als von Hand. Es ist ja nicht nur die Joblist Programmieren, sondern auch noch die Zuordnung der zu lesenden und schreibenden Daten. Und den richtigen Zeitpunkt dafür. Da ist die verlinkte Joblist nur der Anfang.
Das nimmt Dir der Konfigurator ab. Auch kannst Du Dir den generierten Code danach ansehen.

Und bevor Du Dir die Liste in Excel zusammengeschrieben hast, hast Du auch schon fast die Daten im Konfigurator eingestellt. Die Konfiguration wird sonst auch auch als XML mit im Code gespeichert.

Grundsätzlich ist UDP ein bißchen schneller, da aber die eigentliche Kommunikation intern vom Betriebssystem gehandhabt wird und man in etwas 'größeren' Zeitabständen die Daten abfragt ist das irrelevant. Außerdem ist die TCP Kommunikation etwas zuverlässiger.

Gruß
 
Im Anwendungshinweis Modbus stehts mit UDP/TCP:
"Die WAGO Kontakttechnik GmbH & Co. KG erweitert die Modbus Familie
um Modbus-UDP. Diese Variante verwendet eine verbindungslose asynchrone
Client Server Kommunikation über Ethernet.
Bei Modbus-UDP erfolgt die TimeOut-Überwachung auf Applikationsebene
(OSI-Schicht 7). Dadurch löst Modbus-UDP ein Problem, das entsteht, wenn
der Modbus-Server(Slave) nicht verfügbar ist (zB. Versorgungsspannung getrennt).
Bei Modbus-TCP greifen in diesem Fall Retransmissionsmechanismen des
TCP-Stacks, die dazu führen, das der Modbus-Client erst sehr spät feststellt,
das die Gegenstelle nicht antwortet."
In der Duku zur WagoLibModbus_IP_01.lib:
"It is recommended to use the function block
ETHERNET_MODBUSMASTER_UDP since data exchange can be handled
more quickly than using the TCP block."

Ob das für mich überhaupt relevant ist, jedenfalls ist UDP default im Konfigurator und ich probiere es jetzt einfach aus.
Grüße
 
Habe fertig,
danke an alle, die mir geraten haben. KNX ist Geschichte, die neue Modbus-Kopplung mit dem Vitogate 300 funzt via Modbus-Konfigurator zur 750-889 und zu iobroker.
Einige Unstimmigkeiten der Datenpunktliste kläre ich mit Viessmann.
Grüße
 
Ja genau, wichtigstes tool war Excel um die Speicheradressen gegenüberzustellen.
Tricky ist auch die Startadresse, Viessmann arbeitet angeblich immer ab 1 aber das stimmt nach meinen Recherchem mit nem Modbus-Mastertool nicht für alle FCs. Der Modbus-Konfigurator macht immer ein Array 1..x draus und das verschiebt die Adressen nochmal.
Grüße
 
Mal so am Rande, die Viessmann E3 Plattform kann man auch ohne das teure Wago Gateway an iobroker koppeln.

 
Zuletzt bearbeitet:
Zurück
Oben