# Wago 750-881 RS485 Modbus Zugriff auf Register



## Kayle (20 August 2015)

Hallo zusammen,

aktuell schreibe ich per Ethernet Modbus Variablen direkt in die Register ( ab 12228 ) in den Wago Controller. Geht das auch mit dem 750-653 Schnittstellenmodul ? Also das ich direkt über RS485 Modbus die Register beschreiben kann, ohne eine Zeile Programmcode.

Gruß Kay


----------



## .:WAGO::016346:. (21 August 2015)

Hallo Kay,

ohne Code geht es leider nicht. Du kannst den Funktionsbaustein MODBUS_EXTENDED_SLAVE aus der Modb_l05.lib verwenden.
Das Datenarray des Bausteins kannst Du dann in den Merkerbereich mappen: typData AT %MW0 : typSlaveData;

Grüße


----------



## Kayle (22 September 2015)

Hallo Wago Support Team,

danke für die Antwort. Wie schon oben beschrieben schreibe ich aktuell Daten per Ethernet direkt in die Register. Die Daten kommen von einem Arduino über RS485 ( eigenes Protokoll, kein Modbus ) an einen Raspberry Pi mit Pythonscript. Dieses schickt per Modbus die Daten an meine Wago. Jetzt möchte ich den Raspberry Pi gegen etwas Industrietaugliches ersetzen. 

Kurz zu meiner aktuellen Hardware:

- mehrere Raumthermostate die per RS485 BUS untereinander verbunden sind. Die Thermostate bestehen aus einem Arduino und HDC1000 Temp und Feuchte Sensor. 

Das Protokoll ist kein Modbus. Es besteht aus einfachen ASCII Befehlen -> ST,01,GV,SP ( Start, Adresse, GetValue, Stop ). Sobald dieses Telegramm beim Busteilnehmer ankommt werden die Werte Temp und Feuchte zurückgeschickt. Das funktioniert in Verbindung mit dem Raspberry ganz gut. Geht das auch mit einer Wago 750-xxx RS485 Klemme ? Also kann ich die zu sendenden Daten und das was zurück kommt selbst bestimmen und auswerten oder sollte ich die Arduinos besser als Modbus Teilnehmer programmieren ? Bin in dieser Richtung noch voll Anfänger.

Vielen Dank im Voraus
Gruß Kay


----------



## .:WAGO::016346:. (22 September 2015)

Hallo Kay,

Du kannst den Funktionsbaustein SERIAL_INTERFACE aus der Bibliothek Serial_Interface_01.lib verwenden. Falls Du die konfigurierbare Version (750-653/000-003) der seriellen Schnittstelle hast, kannst Du an den Eingängen des Bausteins die serielle Schnittstelle parametrieren.
Ansonsten kannst Du die Parameter auf terminal_default stellen, da die Parameter der Schnittstelle festgelegt sind.
Wenn Du die Serial_Interface_01.lib im Bibliotheksverwalter hinzufügst, wird automatisch die SerComm.lib angezogen. In dieser Bibliothek findest Du unter dem Reiter Datentypen die Enumerationen der Schnittstellenparameter, diese können zum Parametrieren des Bausteins SERIAL_INTERFACE genutzt werden.
Um Daten zu senden kannst Du die Adresse deines Strings oder Array an den Eingang ptSEND_BUFFER übergeben und die Anzahl der zu sendenden Bytes an iBYTES_TO_SEND legen. Mit dem Setzen des Bits xSTART_SEND weden die Daten gesendet.
Werden Daten empfangen werden diese in der Struktur utRECEIVE_BUFFER gespeichert. Das Array Data enthält die empfangen Bytes und die Variable Index die Anzahl der Empfangenen Bytes. Wenn Du die Bytes ausgewertet hat, kannst Du vor dem Senden des nächsten Befehls den Index wieder auf null setzt. Somit liegen die empfangen Daten immer ab dem ersten Arrayelement bereit.

Grüße


----------



## Kayle (22 September 2015)

Hallo und vielen Dank für die Antwort. 

Ich muss mir das in Ruhe erstmal durchlesen und verstehen.

Gruß Kay


----------



## Kayle (13 Oktober 2015)

Hallo Wago Support Team,

noch eine Frage. Ich werde mir jetzt die 750-653 Klemme kaufen um damit auf meine Raumthermostate zuzugreifen. Ich habe allerdings noch ein Verständnisproblem:

Ich kann meine Arduino Controller als Modbus Master und Modbus Slave betreiben. Ist meine Wago festgelegt auf Master oder Slave ? Da steige ich noch nicht ganz durch, wer jetzt Master und wer jetzt Slave ist. Könnt Ihr mir da auf die Sprünge helfen ?

Danke im Voraus
Gruß Kay


----------



## Booner (13 Oktober 2015)

Hei,

bei mir im Haus habe ich mehrere Arduinos per Modbus und RS232 mit einer 750-652 (serielle Schnittstelle) an einen PFC200 angebunden.
Das funktioniert wunderbar.

Hier als kleines Beispiel:
https://www.youtube.com/watch?v=-4rBRaiAmNc

Mittlerweile sendet dieser Arduino (Modbus Slave) über 70 Temperaturmesswerte aus meinem Schichtspeicher an eine Wago SPS (Modbus Master).
Das Schöne am RS485 ist, dass ich da einfach weitere Arduinos dran hängen kann...
Für Arduino gibt es ja schöne Beispiele mit einer Modbus Slave Bibliothek.

Ach, noch ein kleiner Hinweis: versuche nicht zu viele Variablen am Stück zu übertragen!
Das führt zu Kommunikationsproblemen wegen begrenzten Pufferkapazitäten.
Bei den 70 Temperaturmesswerten lese ich immer nur ein Drittel pro Abfrage aus.


Grüße,

Tom


----------



## Kayle (13 Oktober 2015)

Hallo Tom,

Danke für Deine Antwort. Deine Beschreibung ist genau das was ich suche. Es wäre nett wenn Du Deinen Aufbau erklären könntest ( wie z.b. welche arduino library genau ). Bei mir sind es 10 Sensoren. Diese 10 sollen ihre Daten: 1x Temp und 1x Luftfeuchte an die Wago jede Minute senden. 

Danke und Gruß Kay


----------



## Booner (13 Oktober 2015)

Hei,

ich habe (glaube ich ;-) ) diese hier genommen:
https://code.google.com/p/simple-modbus/

Scheint aber mittlerweile andere Libraries auch zu geben. 
Bin nicht mehr auf dem aktuellen Stand.

Dann einfach einen kleinen RS485 Treiber (z.B. MAX485) an die serielle Schnittstelle des Arduino angeschlossen.
Dieser Treiber braucht einen Pin vom Arduino um von Empfangen auf Senden umzuschalten.
In der Lib kann man einen Pin definieren, der das macht.

In der SPS habe ich einen Modbusmaster erstellt. Irgendwo findet sich dazu ein Anwenderhinweis. Daraus einfach mal das Beispielprogramm nehmen.
Mit dem neuen Modbustool von Wago habe ich noch nicht gearbeitet. Was man aber so hört, soll das damit total easy sein?

In dem Youtubevideo hab ich den Arduino an der Serviceschnittstelle des Wago-Controllers angeschlossen.
Das spart erstmal den Kauf einer Schnittstellenklemme, kann aber den Controller in den SPS-Himmel befördern! ;-)
Praktischerweise hat diese Serviceschnittstelle auch TTL-Pegel wie der Arduino (5V)

Nun solltest Du einige Anlaufstellen haben, mit denen Du auch Google füttern kannst. Denn das Einlesen und Verstehen kann Dir nun leider keiner abnehmen...


Viele Grüße,

Tom


----------



## Kayle (13 Oktober 2015)

Hallo Tom,

an meine arduinos habe ich bereits je einen rs485 Wandler angeschlossen. Ich werde mich in das Thema einlesen. Allerdings verstehe ich eines noch nicht: sendet jetzt der master oder der slave? 

Gruß kay


----------



## Booner (13 Oktober 2015)

Hei,

der Master sendet: "Hallo Slave Nummer 3, schick mir Werte 3 bis 15."
Der Slave Nummer 3 sendet dann: "Hallo Master, hier die Werte: xx,xx,xx"

Und so geht das die ganze Zeit. ;-)


Grüße,

Tom


----------



## Kayle (13 Oktober 2015)

Das empfangen und senden wird im arduino von der library übernommen? Ich muss dann nur meine werte in die entsprechenden Register schreiben?


----------



## Booner (13 Oktober 2015)

Hei,

so ist es. Schau Dir die Lib doch einfach mal an. Da sind einige Kommentare drin. Dann wird Dir das schnell klar, was da so passiert...

Grüße,

Tom


----------

