# Wago 750-315/300-000 als Modbus Slave an 750-8101



## Sebi87 (20 Januar 2021)

Hallo zusammen, 

ich habe einen 750-315/300-000 Koppler per Modbus an einen 750-8101 gehängt. Zur Kommunikation nutze ich die WagoAppPlcModbus und aus dieser den FbMbMasterSerial.
Das funktioniert schonmal insofern, dass ich entweder mit FC4 Register aus dem 315er lesen kann und mit FC16 Register schreiben. Wenn ich aber FC23 nutzen will um beides zu machen, streikt das ganze. 
Ich hänge mal einen Screenshot von meinem Gebastel an.
Hat jemand sowas schonmal gemacht ?


----------



## Tobsucht (20 Januar 2021)

Hallo,

der Koppler unterstützt keinen Funktionscode 23 daher wird er dies auch mit dem Fehler 1 melden.

Grüße


----------



## Sebi87 (20 Januar 2021)

Hi Tobsucht,

Das hat mir der Telefonsupport von Wago auch schon erzählt, aaaaaber ...

https://www.wago.com/de/io-systeme/feldbuskoppler-modbus/p/750-315_300-000

In dem Handbuch das man dort runterladen kann, steht aber in der Tabelle auf Seite 94 dass der Koppler FC23 kann ... ab Seite 104 steht auch der Request beschrieben ... 

Wago ist hier im Forum ja auch vertreten, vielleicht kann sich da mal jemand äusern wieso das im Handbuch steht wenn der Koppler es angeblich gar nicht kann. Oder kann er es eben doch ... 

Andere Frage: Hat mir dann jemand ein Beispiel, wie ich den abwechselnd lesend und schreibend anspreche ? Ich habe das nach dem Telefonat mit Wago versucht aber bekomm es nicht auf die Reihe.


----------



## Tobsucht (21 Januar 2021)

Das im Handbuch beschriebene Protokoll ist auch nicht Modbus RTU.
Fragst Du jetzt auch warum der Koppler keine Ethernet Schnittstelle hat?


----------



## Sebi87 (21 Januar 2021)

Nein das frage ich nicht, das ist mir schon klar. 

Aber ich frage mich wieso über der Tabelle drüber steht "... Auflistung der IN DEM FELDBUSKOPPLER REALISIERTEN Modbus Funktionen" wenn er das angeblich nicht kann. Und dann frage ich nochmal, wieso stehen in Handbuch das ZU DIESEM ARTIKEL gehört Sachen die er angeblich nicht kann ... das macht doch keinen Sinn ....

Edit: Wenn es nicht RTU ist, was dann ? TCP oder UDP ja wohl nicht. Ich habs auf der Seite mal gelb markiert.


----------



## Tobsucht (21 Januar 2021)

Dann scroll doch mal weiter runter zur Beschreibung der Funktionscodes.
Dort wird das Modbus TCP /Modbus UDP Protokoll beschrieben.

Scheinbar wurde die Dokumentation von einem Ethernet Koppler kopiert.


----------



## Sebi87 (21 Januar 2021)

Großes Kino ... naja wie auch immer.

Hast du eine Idee wie ich das dann hinbekomme dass ich lesen und schreiben kann ? Also irgendwie FC4 und FC16 abwechselnd ... 
Oder gibt es einen RTU Koppler, der FC23 kann ? Dem Handbuch kann man da ja scheinbar nicht trauen ...


----------



## Tobsucht (21 Januar 2021)

Ist irgendetwas falsch an FC4 und FC16?


----------



## Sebi87 (21 Januar 2021)

Daran ist generell mal nichts falsch ... ich hab nur keine Ahnung wie ich das löse. Ich hab schon probiert, den Modbus Mater einmal mit FC4 und einmal mit FC16 aufzurufen, aber das haut irgendwie auch nicht hin. Daher war ja die Frage ob mir jemand sagen kann wie ich das löse. Dem Wago Support habe ich mal gemailt, aber da kam nur zurück dass das mit FC23 nicht geht. Irgendwie waren die früher mit mehr Begeisterung dabei ...


----------



## Tobsucht (21 Januar 2021)

Es sollte kein Problem sein eine Anfrage mit FC4 zu machen und danach die Query auf FC16 umzustellen.


----------



## Sebi87 (21 Januar 2021)

Ja, bestimmt ... aber leider überschreitet es halt meine bisherigen Fähigkeiten :-(


----------



## Sebi87 (1 Februar 2021)

So, nun habe ich mich zwischenzeitlich selbst noch weiter nach einer Lösung umgeschaut und habe diesen Beitrag hier gefunden:

Wago "Modbus TCP"-Kommunikation mit 750-8100 (Master) und 852 (Slave) unter e!Cockpit 

Der Vorschlag von Thruser lässt sich auf meine Situation Adaptieren.

Sieht dann so aus:

PROGRAM Modbus_ST
VAR_INPUT
    Jobliste: ARRAY [0..1] OF typMbQuery := [ 
        ( //JOB 0, Eingänge lesen (Registerzugriff, inklusive digitale Eingänge)
            bUnitId:= 2, 
            bFunctionCode:= 4, 
            uiReadAddress:= 0, 
            uiReadQuantity:= 13, 
            uiWriteAddress:= 0, 
            uiWriteQuantity:= 1, 
            awWriteData:= [125(0)]
        ),
        ( //JOB 1, Ausgänge schreiben (Registerzugriff)
            bUnitId:= 2, 
            bFunctionCode:= 16, 
            uiReadAddress:= 0, 
            uiReadQuantity:= 0, 
            uiWriteAddress:= 0, 
            uiWriteQuantity:= 1, 
            awWriteData:= [125(0)]
        )];
END_VAR
VAR
    iJobCounter:INT:=0;
    xTrigger:BOOL:=TRUE;
    FB_F_Trig:F_Trig;

    Responseliste:ARRAY [0..1] OF typMbResponse;

    FB_ModbusMaster:FbMbMasterSerial;
END_VAR

//Modbus Master Aufrufen
FB_ModbusMaster (xConnect:=TRUE, 
                   I_Port    := COM1,
                  udiBaudrate := 9600,
                  usiDataBits := 8,
       eParity     := WagoTypesCom.eTTYParity.None,
                   eStopBits   := WagoTypesCom.eTTYStopBits.One,
                  eHandshake  := WagoTypesCom.eTTYHandshake.None,
                  ePhysical   := WagoTypesCom.eTTYPhysicalLayer.RS485_HalfDuplex,
                   eFrameType  := eMbFrameType.RTU, 
                   tTimeOut:=T#2S, 
                   utQuery:=Jobliste[iJobCounter], 
                   xTrigger:=xTrigger, 
                   utResponse:=Responseliste[iJobCounter]);

//Auf Jobende warten
FB_F_Trig (clk:=xTrigger);

//Jobende erfolgt, nächsten Job starten
IF FB_F_Trig.Q THEN
    xTrigger :=TRUE;
    iJobCounter := (iJobCounter+1) MOD 2;
END_IF

Modbus_Eingangsarray:=Responseliste[0].awData;
Jobliste[1].awWriteData:=Modbus_Ausgangsarray;


GVL:

VAR_GLOBAL

    Modbus_Ausgangsarray:ARRAY [0..124] OF WORD;
    Modbus_Eingangsarray:ARRAY[0..124]OF WORD;

END_VAR


----------

