# Wago 750-8102 Modbus Problem (e!cockpit)



## Ganner (13 Januar 2019)

Hallo Leute,


ich beschäftige mich derzeit mit der Kommunikation zwischen einer 750-8102 via RS485 Modbus RTU mit einer Kompressorsteuerung der Firma Almig. Dabei ist die Wago der Master und die "Air Control P" der Slave.<br>Zum testen habe ich felgendes Programm auf der Wago (PLC_PRG intervall 10ms) laufen:


PROGRAM PLC_PRG
VAR
    FbKompressorVariable70:    FbMbMasterSerial;
    afbFrequenzumrichter:        ARRAY[0..49] OF FbMbMasterSerial;
    xConnect, xIsConnected, xError, xTrigger: BOOL;
    tTimeOut:        TIME := T#2S;
    utQuery:        typMbQuery;
    utResponse:        typMbResponse;
    xMessage:        BOOL;
    sMessage:        STRING;
    timBlink:        ton;
END_VAR


utQuery.bUnitId        := 1;
utQuery.bFunctionCode    := 3;
utQuery.uiReadAddress    := 0;
utQuery.uiReadQuantity    := 10;


FbKompressorVariable70(
    xConnect        := xConnect,
    I_Port            := COM1,
    udiBaudrate        := 19200,
    usiDataBits        := 8,
    eParity            := eTTYParity.None,
    eStopBits        := eTTYStopBits.One,
    eHandshake        := eTTYHandshake.None,
    ePhysical        := eTTYPhysicalLayer.RS485_HalfDuplex,
    xIsConnected        => xIsConnected,
    xError            => xError,
    oStatus            => ,
    eFrameType        := eMbFrameType.RTU,
    tTimeOut        := tTimeOut,
    utQuery            := utQuery,
    xTrigger        := xTrigger,
    utResponse        := utResponse);


timBlink(IN := NOT timBlink.Q, PT := T#500MS);
IF timBlink.Q THEN
    xTrigger := NOT xTrigger;
END_IF;


Aktuell bekomme ich vom Slave keine Antwort. Sobald ich die Kommunikation (xConnect:=true) setze wird IsConnected ebenfalls true . Im Fb unter oStatus.m_pResultItem.text bekomme ich aber nach Ablauf der Zeit  die Meldung Timeout. Ich habe bereits verschiedene Funktionscodes Registeradressen und Anzahl zu lesender Register getestet, mit dem gleichen Ergebnis. Die Verbindungsparameter stimmen soweit (8/NONE/1). Auch die Triggerzeiten der Query´s und die Timeout Zeit habe ich bereits variiert. Wenn ich die Kompressorsteuerung via Adapter direkt mit dem Laptop verbinde und mittels Modbustester und den gleichen Parametern Anfragen sende bekomme ich Antwort und die Kommunikation steht. Den Modbus Konfigurator in e!Cockpit habe ich ebenfalls bereits getestet, mit dem gleichen Ergebnis, keine Antwort vom Slave. Die Kompressorsteuerung unterstütz die FC´s 03_hex Datenregister lesen und 10_hex Datenregister schreiben. Die Register (lesen) beginnen bei 40001 Adresse 0000h und gehen bis 40117 Adresse 0074h. Vielleicht kann mir jemand helfen der ein ähnliches Problem hatte oder mir Tipps gehen wie ich weiter vorgehen kann. Da ich erst seit einigen Monaten im Bereich der Steuerungstechnik tätig bin, lasst milde walten wenn grobe Schnitzer auftauchen. Gibt es eventuell ein Möglichkeit die Sendedaten und Empfangsdaten sichtbar zu machen? Im query sehe ich ja Adressen usw, im Response taucht davon nichts auf. Der Modbustester bietet beispielsweise die Möglichkeit "Spy Communication". Darin sieht man das Mastertelegramm (zb. 01 03 00 15 00 02 D5 CF). Meine Vermutung liegt aktuell darin, dass keine gültige Anfrage an der Slave erfolgt. Auszug aus der Spezifikation der Steuerung:
"Falls der Slave keinen gültigen Befehl empfangen hat ( z.B. wegen einer falschen CRC Checksumme ), dann sendet er keine Antwort zurück !!!"
Ich würde mich freuen wenn mir jemand Tipps geben könnte.


Gruß


----------



## Tobsucht (14 Januar 2019)

Hallo Ganner,

das Bit xTrigger darf vom Anwenderprogramm nicht auf FALSE gesetzt werden. Dies macht der Baustein.
Daher würde ich z.B. diese Ansteuerung verwenden:


```
[COLOR=#333333]timBlink(IN := [/COLOR][COLOR=#333333]xIsConnected AND NOT [/COLOR][COLOR=#333333]xTrigger[/COLOR][COLOR=#333333], PT := T#500MS);
[/COLOR][COLOR=#333333]xTrigger S= [/COLOR][COLOR=#333333]timBlink.Q;[/COLOR]
```

Für den Anfang kannst Du ja mit dem Zugriff auf ein Register beginnen, bzw. mit einem Zugriff starten der mit einem anderen Master funktioniert.
Wenn der Modbustester eine Antwort auf die Anfrage FC3 Startadresse 21 Anzahl 2 erhält kann Du diese Anfrage testen.

Bei RS485 ist es durchaus möglich dass Du einen aktiven Busabschluss brauchst. Du kannst z.B. einen ProfiBus Stecker verwenden. Dieser enthält das entsprechende Widerstandsnetzwerk.


Grüße


----------



## Ganner (14 Januar 2019)

Hallo,
erstmal vielen Dank für die Rückmeldung. Den Trigger werde ich anpassen, hatte ich zeitweise aber schon ausgeklammert und händisch getriggert. Die Variante mit dem Profibus-Stecker werde ich testen. 
Gibt es eventuell die Möglichkeit den Grund für den Timout nachzuvollziehen? Fehlercode o.ä der für die Ausgabe der Meldung zuständig ist.

Grüße


----------



## Thruser (14 Januar 2019)

Hallo,



Tobsucht schrieb:


> Hallo Ganner,
> 
> das Bit xTrigger darf vom Anwenderprogramm nicht auf FALSE gesetzt werden. Dies macht der Baustein.
> Daher würde ich z.B. diese Ansteuerung verwenden:
> ...


das funktioniert so nicht, da wenn timBlink.Q false ist auch xTrigger auf false gesetzt wird. 

Nimm dies:


> timBlink(IN := not xTrigger, PT := T#500MS); // TON
> 
> IF timBlink.Q THEN
> xTrigger :=TRUE;
> END_IF



@Ganner
Hast Du die Schnittstelle im WBM auch auf "Unassigned" gesetzt?

Da Du anscheinend einen Adapter für den Rechner hast schau sonst mal an, welche Daten von der Wago gesendet werden. Das funktioniert mit Realterm ganz gut. Oder ein anderes Terminal Programm, daß Dir auch die Daten in Hexwerten anzeigt.

Gruß


----------



## Ganner (14 Januar 2019)

Hey,

den Impuls hatte ich zeitweise komplett ausgeklammert und von hand getriggert, werde das auf jeden Fall korrigieren.
Die Schnittstelle im WBM hatte ich bisher noch nicht umgestellt, aber bereits davon gelesen. Allerdings finde ich im WBM kein Registereintrag in welchem ich die RS-Schnitttstelle anpassen könnte, lediglich die Ethernet-Schnittstellen tauchen im WBM auf. Ich werde später nochmal das WBM durchstöbern ob ich eine entsprechende Einstellung finde.
Ich werde auf jeden Fall mal Realterm testen. Vielleicht stellt sich da schon ein Fehler in der Anfrage raus.
Ansonsten schonmal vielen Dank für die Tipps. 

Grüße


----------



## Ganner (14 Januar 2019)

Kurzes Update,

Funktioniert. Nachdem ich einen Modbus-Slave auf dem Laptop laufen lies und gesehen habe das nur matsch an kam, habe ich die Variante mit dem aktiven Busabschluss getestet. Profibusstecker angeklemmt und schon kamen die Daten.
vielen Dank für die Hilfe!!!

Grüße


----------

