Ich habe folgendes Problem: Ich möchte eine Variable zwischen 2 Ethernet-Controllern (750-841) austauschen, wobei nur gelesen werden soll! Das ich die ModbusEthernet_04.lib dazu benötige weiß ich, allerdings weiß ch nicht wie ich diese anwenden soll.
Ziel des ganzen soll sein, vom Controller mit der IP 192.168.100.202 eine Variable die im Merkerbereich unter Adresse %MW0 liegt auszulesen mit welcher ich dann auf dem Controller mit der IP 192.168.100.201 im Codesys-Programm weiter arbeiten kann.
Es handelt sich dabei um einen INT-Wert (Aussentemperatur).
Hat das schonmal jemand gemacht? Ich weiß nämlich partout nicht, welchen Ein - und Ausgang ich bei dem Baustein ETHERNET_MODBUSMASTER_UDP , mit was belegen soll!
Danke
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Die Library einbinden, dann unter den Globalen Variablen sogenannte "Netzwerkvariablen" anlegen. Bin leider gerade unterwegs, am Ende vom Monat könnte ich Dir ein Beispiel zukommen lassen.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Die Variablen stehen alle schon im MErkerbereich des Controllers und ich kann auch mit einem Bedienpanel der Firma elrest darauf zugeifen (über Modbus). Was ich nun vorhabe ist allerdings eine Kommunikation unter 2 WAGO Ethernet 841 Controllern.
Mein Problem sind die Funktionsbausteine, da ich nicht weiß, wo was an welchen Ein - und Ausgang kommt. Bei WAGO teilte man mir mit, dass ich für diese Querkommunikation eben die ModbusEthernet_04.lib benötige und hier, so wie ich das sehe, den Baustein Ethernet_Modbusmaster_UDP
Wo aber jetzt was hinkommt, damit sich die Controller untereinander finden weiß ich nicht... Deshalb meine Frage, ob das schonmal jemand gemacht hat!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Um einfach mal dem ein oder anderem einen Fingerzeig zu geben (Hallo Elektromax ) hänge ich mal mein Programm an...
Allerdings ist das nicht die eleganteste Möglichkeit Daten auszutauschen... Ich denke die Sache mit den Netzvariablen ist da schon effektiver und nicht ganz so umständlich - wenn man verstanden hat, wie mans anpacken muss
Und nehmt euch unbedingt die Anwendungshinweise zur Hilfe! In Verbindung mit dem Beispielprogramm ist das selbsterklärend... Hoffentlich
... mal nochwas zur Anwendung - hatte ich irgendwie ganz vergessen
Also... Das Programm fügt ihr in den Controller, der die Daten vom anderen benötigt! Sprich: Ihr habt Controller A und Controller B und wollt jetzt beispielsweise von A eine Temperatur haben, dann muss der Baustein aus dem modbus1.pro im Controller B liegen!
Die Variable, die Ihr jetzt vom Controller A haben wollt, müsst ihr in diesem zunächst in den Merkerbereich schreiben! Und hier fängt auch schon das etwas kompliziertere an, aber dazu gleich...
Ich hoffe, der Merkerbereich ist jedem geläufig...
Variable1AT%MW0:INT
Mit dem Baustein aus Controller B greift ihr nämlich jetzt genau auf diesen Merkerbereich von Controller A zu!
Bei IP_ADRESS gebt ihr die IP-Adresse von Controller A an.
Den Funktionscode bitte den Anwendungshinweisen entnehmen. Ich hatte für meinen Zweck 16#03 - read multiple registers
16#3000 bei Read_Adress eingegeben, dann startet er im Merkerbereich bei %MW0
Quantity ist die Anzahl der Worte, die gelesen werden sollen!
Im REC_Buffer wird, nach dem Starten des Bausteins, die Variable aus Controller A ausgelesen, die dort im Merkerbereich 0 liegt.
Denkt daran, dass ihr jetzt den ausgelesen Wert in einer anderen Variable speichert, denn er wird beim nächsten Starten des Bausteins wieder überschrieben!
Sollen Daten in beide Richtungen gesendet werden, dann muss der Baustein in beiden Programmen vorhanden sein. Dann kommt auf dieselbe Weise auch der "WRITE-Teil" zum Einsatz.
So, hoffe jetzt ist das ein wenig klarer... Hab auch nochmal ein weiteres Programm angehangen, da ich gesehen habe, dass beim ersten der Timer fehlte! und bei diesem neuen, sind auch alle Adressen soweit schon richtig, um im Merkerbereich etwas auszulesen!
soweit ist mir die sache eigentlich klar. habe jetzt folgendes problem:
der funktionsblock ETHERNET_MODBUSMASTER_UDP wirft bei mir laufend den Komm-Fehler 153 aus.
Hat jemand von euch ne ahnung was das bedeutet
mal zu meiner anwendung:
ich kommuniziere nicht mit zwei unterschiedlichen controllern, sondern lasse einen 841'er auf seinen eigenen Knoten kucken. Hier soll er an den analogeingangsklemmen das statusbyte auslesen. dieses befindet sich an hex-adresse 0x1050.
leider ist die doku über diesen anwendungsfall sehr spärlich ausgefallen. auch auf seiten von wago.
@e-pappy, hast du vielleicht mal den selben fehler gehabt?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
hast Du bezüglich der Register schon eine Lösung? ETHERNET_MODBUSMASTER_UDP läuft zwar bei mir (auf die IP-Adresse 127.0.0.1), erscheint mir aber doch etwas umständlich. Von Wago gibt's eine Funktion(also kein Funktionsbaustein), die beipielsweise die Typennummer der Klemmen liefert, die Daten müssen demnach direkt im Speicher liegen (und nicht erst über den K-Bus erst abgeholt werden), das sollte doch möglich sein, die mit einem simplen Pointer abzurufen.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Die Beispiele oben sind super, ABER bei den Eingangsparametern bist du in der Zeile verrutscht, aber das erkennt sicher jeder schnell selbst.
Mein Problem ist das das Ding nur mit IP-Adressen umgehen kann, und nicht mit dyndns-accounts. Hat da jmd. ne Lösung, z.B. ne Funktion die mir die IP anhand meines dyndns-accounts in einem String speichert?
MfG
Marcel
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo!
Ich habe folgendes Problem: Ich möchte eine Variable zwischen 2 Ethernet-Controllern (750-841) austauschen, wobei nur gelesen werden soll! Das ich die ModbusEthernet_04.lib dazu benötige weiß ich, allerdings weiß ch nicht wie ich diese anwenden soll.
Ziel des ganzen soll sein, vom Controller mit der IP 192.168.100.202 eine Variable die im Merkerbereich unter Adresse %MW0 liegt auszulesen mit welcher ich dann auf dem Controller mit der IP 192.168.100.201 im Codesys-Programm weiter arbeiten kann.
Es handelt sich dabei um einen INT-Wert (Aussentemperatur).
Hat das schonmal jemand gemacht? Ich weiß nämlich partout nicht, welchen Ein - und Ausgang ich bei dem Baustein ETHERNET_MODBUSMASTER_UDP , mit was belegen soll!
Danke
Die Library einbinden, dann unter den Globalen Variablen sogenannte "Netzwerkvariablen" anlegen. Bin leider gerade unterwegs, am Ende vom Monat könnte ich Dir ein Beispiel zukommen lassen.
Die Variablen stehen alle schon im MErkerbereich des Controllers und ich kann auch mit einem Bedienpanel der Firma elrest darauf zugeifen (über Modbus). Was ich nun vorhabe ist allerdings eine Kommunikation unter 2 WAGO Ethernet 841 Controllern.
Mein Problem sind die Funktionsbausteine, da ich nicht weiß, wo was an welchen Ein - und Ausgang kommt. Bei WAGO teilte man mir mit, dass ich für diese Querkommunikation eben die ModbusEthernet_04.lib benötige und hier, so wie ich das sehe, den Baustein Ethernet_Modbusmaster_UDP
Wo aber jetzt was hinkommt, damit sich die Controller untereinander finden weiß ich nicht... Deshalb meine Frage, ob das schonmal jemand gemacht hat!
siehe oben: Netzwerkvariablen.
Anwendungshinweise von Wago:
http://www.wago.com/wagoweb/documentati ... ws0__d.htm
und Handbücher:
http://www.wago.com/wagoweb/documentati ... 0dc__d.htm m
... für die Anwendungshinweise!
Damit hat es funktioniert! Brauchte ja gott sei dank nur einen Wert
Mal sehen, wie es wird, wenn ich mehrere Daten benötige
Falls noch jemand fragen hat, ein wenig kenn ich mich jetzt auch damit auch und habe mein programmiertes Unterprogramm als einzelnes exportiert...
Vielen Dank nochmal.
Um einfach mal dem ein oder anderem einen Fingerzeig zu geben (Hallo Elektromax ) hänge ich mal mein Programm an...
Allerdings ist das nicht die eleganteste Möglichkeit Daten auszutauschen... Ich denke die Sache mit den Netzvariablen ist da schon effektiver und nicht ganz so umständlich - wenn man verstanden hat, wie mans anpacken muss
Und nehmt euch unbedingt die Anwendungshinweise zur Hilfe! In Verbindung mit dem Beispielprogramm ist das selbsterklärend... Hoffentlich
modbus1.pro [13.18 KiB]
... mal nochwas zur Anwendung - hatte ich irgendwie ganz vergessen
Also... Das Programm fügt ihr in den Controller, der die Daten vom anderen benötigt! Sprich: Ihr habt Controller A und Controller B und wollt jetzt beispielsweise von A eine Temperatur haben, dann muss der Baustein aus dem modbus1.pro im Controller B liegen!
Die Variable, die Ihr jetzt vom Controller A haben wollt, müsst ihr in diesem zunächst in den Merkerbereich schreiben! Und hier fängt auch schon das etwas kompliziertere an, aber dazu gleich...
Ich hoffe, der Merkerbereich ist jedem geläufig...
Mit dem Baustein aus Controller B greift ihr nämlich jetzt genau auf diesen Merkerbereich von Controller A zu!
Bei IP_ADRESS gebt ihr die IP-Adresse von Controller A an.
Den Funktionscode bitte den Anwendungshinweisen entnehmen. Ich hatte für meinen Zweck 16#03 - read multiple registers
16#3000 bei Read_Adress eingegeben, dann startet er im Merkerbereich bei %MW0
Quantity ist die Anzahl der Worte, die gelesen werden sollen!
Im REC_Buffer wird, nach dem Starten des Bausteins, die Variable aus Controller A ausgelesen, die dort im Merkerbereich 0 liegt.
Denkt daran, dass ihr jetzt den ausgelesen Wert in einer anderen Variable speichert, denn er wird beim nächsten Starten des Bausteins wieder überschrieben!
Sollen Daten in beide Richtungen gesendet werden, dann muss der Baustein in beiden Programmen vorhanden sein. Dann kommt auf dieselbe Weise auch der "WRITE-Teil" zum Einsatz.
So, hoffe jetzt ist das ein wenig klarer... Hab auch nochmal ein weiteres Programm angehangen, da ich gesehen habe, dass beim ersten der Timer fehlte! und bei diesem neuen, sind auch alle Adressen soweit schon richtig, um im Merkerbereich etwas auszulesen!
mfG
e-pappy
Quer.pro [28.62 KiB]
Hallo Leute!
soweit ist mir die sache eigentlich klar. habe jetzt folgendes problem:
der funktionsblock ETHERNET_MODBUSMASTER_UDP wirft bei mir laufend den Komm-Fehler 153 aus.
Hat jemand von euch ne ahnung was das bedeutet
mal zu meiner anwendung:
ich kommuniziere nicht mit zwei unterschiedlichen controllern, sondern lasse einen 841'er auf seinen eigenen Knoten kucken. Hier soll er an den analogeingangsklemmen das statusbyte auslesen. dieses befindet sich an hex-adresse 0x1050.
leider ist die doku über diesen anwendungsfall sehr spärlich ausgefallen. auch auf seiten von wago.
@e-pappy, hast du vielleicht mal den selben fehler gehabt?
@radiator:
hast Du bezüglich der Register schon eine Lösung? ETHERNET_MODBUSMASTER_UDP läuft zwar bei mir (auf die IP-Adresse 127.0.0.1), erscheint mir aber doch etwas umständlich. Von Wago gibt's eine Funktion(also kein Funktionsbaustein), die beipielsweise die Typennummer der Klemmen liefert, die Daten müssen demnach direkt im Speicher liegen (und nicht erst über den K-Bus erst abgeholt werden), das sollte doch möglich sein, die mit einem simplen Pointer abzurufen.
Hallo bei mir klappt es
erstmal möchte ich aber erwähnen:
Die Beispiele oben sind super, ABER bei den Eingangsparametern bist du in der Zeile verrutscht, aber das erkennt sicher jeder schnell selbst.
Mein Problem ist das das Ding nur mit IP-Adressen umgehen kann, und nicht mit dyndns-accounts. Hat da jmd. ne Lösung, z.B. ne Funktion die mir die IP anhand meines dyndns-accounts in einem String speichert?
MfG
Marcel
SysSockGetHostByName aus der SyLibSockets.lib
Perfekt!