# WAGO Modbus Kommunikation



## capri-fan (26 Januar 2012)

Hallo,

ich habe einen WAGO Controller 750-841 und einen Koppler 750-352 von dem ich Signale einlesen möchte.

Auf dem Controller läuft im Moment nur die WagoLibModbus_Sample01.pro und ich kann auch in awReceifeBuffer
erkennen wenn ich am Koppler einen Eingang auf 1 schalte.

Wie aber wird adressiert? Ich habe schon Stunden im Netz gesucht aber nicht das passende gefunden (oder ich bin zu blöd dazu).

Sind die Signale vom Koppler Merker oder was?

Gruß
c-f


----------



## Controllfreak (26 Januar 2012)

Vielleicht hilft Dir dieser Anwendungshinweis

http://www.wago.com/wagoweb_china/public/app_note/a3000/a300003d.pdf


----------



## composti (24 Juli 2012)

Hallo,
ich habe das gleiche Problem - Kopplung einer Wago 750-881 mit einem Slave Wago 750-352.
Zum Einsatz kommt der Baustein ETHERNET_MODBUSMASTER_UDP.
Leider bin ich nicht so schlau, die Wago Anwendungshinweise zu verstehen.
Ein kleines Beispiel, wie ich mittels dieses Bausteins die beiden Eingänge meiner ersten Klemme am Slave 750-352 ansprechen kann wäre nett.
Die erste Klemme ist die 750-400 und hat 2 digitale Eingänge.
Netzwerktechnisch sind beide SPS Geräte im Netz und auch per Browser ansprechbar, Master 192.168.24.222 und Slave 192.168.24.222

Danke für Eure Hilfe!
composti


----------



## NochEinProgrammierer (24 Juli 2012)

composti schrieb:


> Hallo,
> ......, Master 192.168.24.*222* und Slave 192.168.24.*222*
> 
> Danke für Eure Hilfe!
> composti



Bist Du Dir mit den IP-Adressen sicher? Würde mich wundern wenn das geht.


----------



## composti (24 Juli 2012)

Sorry, war ein Schreibfehler!
Master 192.168.24.22*2* und Slave 192.168.24.22*3*
Bestimmt kannst du mir mit diesen Informationen weiterhelfen


----------



## composti (24 Juli 2012)

So, nun habe ich mal gebastelt. An sich fehlt mir jetzt nur noch die Umsetzung der I/O des Slaves auf die Arrays ptreaddata und ptsenddata. Gibt es keine Möglichkeit, die I/O des Slaves direkt anzusprechen?


----------



## Methi (25 Juli 2012)

Sieht m.W. doch schon ziemlich gut aus... viel anders mach ich das glaub auch nicht (nur halt in ST)

Ob folgendes die Ideallösung darstellt, weiß ich nicht, aber es funktioniert (bin ja kein Profi  )
Wago 841 kommuniziert mit 842 über Modbus; 2 Byte werden gelesen und 2 Byte werden geschrieben, also die ersten 16 Eingänge gelesen und die ersten 16 Ausgänge geschrieben.


```
Master1        : ETHERNET_MODBUSMASTER_UDP;
Funktion        : BYTE     := 16#17;
ReadAddress    : WORD     := 16#0000;
ReadQuantity    : WORD    := 16#0002;
Rec_Buffer    : ARRAY[1..10] OF WORD; (*lieber zu groß, als zu klein *)
WriteAddress    : WORD    := 16#0000;
WriteQuantity    : WORD    := 16#0002;
Send_Buffer    : ARRAY[1..10] OF WORD;
Start          : BOOL;
Fehler        : WORD;
Fertig        : BOOL;
T1        : TON;
Z1        : CTU;
```


```
(* Sende Daten vorbereiten *)
Send_Buffer[1].0 := OutSlave0;
Send_Buffer[1].1 := OutSlave1;
Send_Buffer[1].2 := OutSlave2;
.......

Master1(
strIP_ADDRESS := '192.168.115.22', bFUNCTION_CODE := Funktion, wREAD_ADDRESS:=ReadAddress, wREAD_QUANTITY:=ReadQuantity,ptREAD_DATA:=ADR(Rec_Buffer[1]), 
wWRITE_ADDRESS:=WriteAddress,wWRITE_QUANTITY:=WriteQuantity,ptSEND_DATA:=ADR(Send_Buffer[1]),xSTART:=Start,xRESET:=0);

Fehler := Master1.wERROR;
Fertig := Master1.xREADY;

T1(IN:=(NOT T1.Q AND Fertig), PT:=t#1ms);
Start := T1.Q;

(* Empfangene Daten auswerten *)
InSlave0 := Rec_Buffer[1].0;
....
```

Nehm auch gern noch Verbesserungsvorschläge von den Profis an


----------



## composti (25 Juli 2012)

Hallo Methi,

genau der Teil hat mir gefehlt: 

(* Empfangene Daten auswerten *) InSlave0 := Rec_Buffer[1].0; ....
Ich danke dir, gruß composti


----------



## composti (2 Oktober 2012)

*Analoge Ausgangsklemme im Slave ansprechen*

Hallo,
nun stehe ich vor dem Problem, dass ich eine analoge Ausgangsklemme ansprechen will.  Wie kann ich den 
"Send_Buffer[1].0 := OutSlave0" auf die erste analoge Ausgangsklemme im Slave mappen?
Danke für jede Hilfe
composti


----------



## cas (2 Oktober 2012)

soweit ich weis immer nur über eine Variable...

MfG CAS


----------



## composti (2 Oktober 2012)

Hallo CAS,
vielleicht habe ich mich aufgrund der fehlenden Kenntnisse falsch ausgedrückt.
Ich  habe in der Variablen "Outslave0" (Word) einen Wert von z.B. 245  stehen. Diesen Wert möchte ich an den Sendbuffer übergeben, der die  erste analoge Ausgangsklemme anspricht. 

Send_Buffer[1].0 := OutSlave0;
Wie muss ich den "Sendbuffer" definieren, dass die erste analoge Ausgangsklemme im Slave angesprochen wird und dort ein Wert von 0-32671 übergeben werden kann?

Das  entspricht einer Ausgangsspannung von 0-10V.
Im zitierten Beispiel kann ich nur eine digitale Ausgangklemme mit dem Wert 0 oder 1 ansprechen.

Gruß
composti


----------



## cas (2 Oktober 2012)

wie gesagt, über eine Variable...
Die Variable muß auf dem Slave sein und dort ein Programm, dass den Wert auf die Klemme "sendet".

MfG CAS


----------



## composti (2 Oktober 2012)

Hallo,
das  habe ich bereits wie weiter oben im Beitrag steht bereits für digitale Aus- und Eingänge auf dem Slave realisiert. Der Slave hat das Programm schon eingebaut und im Master nutze ich den Baustein ETHERNET_MODBUSMASTER_UDP erfolgreich. Wie muss die Variable für die analoge Klemme aufgebaut sein und wie heißt die erste analoge Wago Ausgangsklemme am Slave?
Damit komme ich nicht klar, dass es über eine Variable gehen muss, habe ich verstanden.

Gruß
composti


----------



## Methi (2 Oktober 2012)

S. 37ff.:
http://www.wago.com/wagoweb/documentation/app_note/a3000/a300003d.pdf

Dazu beachten, einen anderen Funktionscode als 0x17 (FC23) benutzen ... zum Schreiben FC6 (0x06) oder FC16 (0x10) verwenden

Send_Buffer[1].0 := OutSlave0;
würde nur ein Bit manipulieren. Ein Word wird mit 
Send_Buffer[1] := Analowert;
gesetzt


----------



## composti (3 Oktober 2012)

Achtung: Es funktioniert auch problemlos mit dem Funktionscode FC23, damit kann ich sowohl digitale Ein- und Ausgänge als auch die Analogklemme ansteuern.
Im Anhang ein meine Lösung für den Kommbaustein im Master.
Gruß
composti


----------

