# Modbus TCP zwischen eine S7 1500 und einem Ecograph T RSG35



## aleks_pl (10 März 2015)

Hallo

Ich hab folgendes Problem ich möchte per Modbus TCP daten zwischen einer S7 1500 und einem Ecograph T RSG35 Schreiber austauschen aber leider geht das irgendwie nicht. Ich benutze den Modbus Baustein aus dem TIA Portal V13 laut dem Baustein ist alles OK Werte werden geschrieben und empfangen aber es kommen keine Werte an. Kennt sich damit jemand aus?

Danke schonmal für die Hilfe.


----------



## RONIN (10 März 2015)

Hallo, willkommen erst mal hier.



aleks_pl schrieb:


> Hallo
> laut dem Baustein ist alles OK Werte werden geschrieben und empfangen aber es kommen keine Werte an.


Wie denn? Werte werden empfangen aber sie kommen nicht an...


aleks_pl schrieb:


> Kennt sich damit jemand aus?


Zumindest nicht auch deiner schmalen Beschreibung. Glaskugel hab ich auch keine bei.
Zeig uns doch mal was vom Programm, den Baustein, die Konfiguration, etc..

Sonst ist rätselraten angesagt...


----------



## aleks_pl (10 März 2015)

Auf dem Schreiber werden keine Daten Angezeigt


----------



## RONIN (10 März 2015)

Wenn ich die Hilfe zu MB-Client richtig lese, entspricht die Kombination aus MB-MODE=1 / MB_DATA_ADDR>=40001 / MB_DATA_LEN>=2 doch dem Funktionscode 16 - "Ein oder mehrere Halteregister schreiben"

Glaube nicht dass du dann was empfängst. Versuch mal den MB-MODE auf 0 zu nehmen.


----------



## aleks_pl (10 März 2015)

ich möchte daten an den schreiber schicken dafür müßte ich ja 1 auswählen.

Die daten hab ich noch vom schreiber hersteller.


----------



## RONIN (10 März 2015)

In der von dir gezeigten Konfiguration beschriebst du dem Schreiber jetzt 12Register aber Register 40001 mit den Werten 
Reg 40001: 0
Reg 40002: W#16#80
Reg 40003: 0
...

Die Antwort (Wie in deinem Handbuch-Auszug) bekommst du dabei normalerweise nicht zu sehen. Die dient nur als Rückmeldung dass die von dir geforderten Register erfolgreich beschrieben wurde.
Der MB_CLIENT stellt dir nur die Nutzdaten zur Verfügung. Das Sende-Anfrage / Empfange Antwort / Nutzdaten auswerten - Spiel macht der FB für dich.

Wenn du jetzt auch noch Werte vom Gerät lesen willst, könnte man  aus dem Handbuch "2.6.3 Gerät -> Modbus-Master: Universalkanäle (Momentanwert)" als Beispiel nehmen.
MB-MODE=0
MB_DATA_ADDR = 200 (oder 40200 bin mir nicht sicher)
 MB_DATA_LEN = 3

Damit sollte der MB_CLIENT die auf der Handbuchseite dargestellte Anfrage an den Schreiber senden. Der Schreiber sendet die beschriebene Antwort.
Die Antwort wird dann vom MB_CLIENT entgegengenommen, die Werte der 3 Register werden aus der Antwort entnommen und in deinen DB geschrieben.

Versuch das mal so. Ich weiß jetzt nicht was im Register "200 Universal 1" drinsteht. Sonst nimm ein Register bei dem du den Wert leicht kontrollieren kannst.

Beschreib doch mal welche Register du schreiben welche du empfangen möchtest.


----------



## aleks_pl (10 März 2015)

Also erstmal möchte ich von der S7 zum Schreiber alle 12 Universal eingänge  schreiben. Was ich noch nicht verstehe dort steht das 32bit werte gelesen werden und wenn ich das Richtig verstehe Das Register 215 216 217 ergeben dann den Wert für Universalkanal 6. Wenn ich bei Data ADDR 200 einstelle müßte ich doch nur die Funktion 15 haben und brauch tu ich glaub ich doch funktion 16. Probiere morgen es nochmal aus.


----------



## aleks_pl (11 März 2015)

So hab es ans laufen bekommen man muß für jeden Kanal 3 Wörte einzeln rüberschicken. Und pro Kanal eine verbindung. Jetzt hab ich noch die frage wie bekomme ich aus einer Real zahl 2 x word ?


----------



## RONIN (11 März 2015)

aleks_pl schrieb:


> So hab es ans laufen bekommen man muß für jeden Kanal 3 Wörte einzeln rüberschicken. Und pro Kanal eine verbindung.


Zeig mal wie du das jetzt programmiert hast. Das sollte schon mit einer Instanz gehen. Schlimmstenfalls muss man halt die Registerangaben variabel gestalten.

Der Interesse halber, musstest du 200 oder 40200 als Register angeben?


aleks_pl schrieb:


> Jetzt hab ich noch die frage wie bekomme ich aus einer Real zahl 2 x word ?


Mit 2xWord meinst du wahrscheinlich wie du deinen Real so hinbekommst das du ihn in dein Sende-Array bekommst, oder?

a) Dein Array muss nicht zwingend aus Word bestehen
b) In FUP ist es wahrscheinlich mit der AT-Sicht am einfachsten.

Optimierten Bausteinzugriff in den Einstellungen des FBs/Fcs deaktivieren.
Im Schnittstellenbereich (z.B.: TEMP) eine Real Variable erstellen
In der nächsten Zeile gibst du dann gleich beim Datentyp das Stichwort "AT" ein und drückst Enter.
Dann wird eine weitere REAL-Variable erstellt. Allerdings steht neben dem Variablennamen das Stichwort AT "Name der zuvor erstellten Variable"
Das bedeutet jetzt dass du eine Variable erstellt hast die den gleichen Speicherplatz belegt wie die vorige. Eine Überlagerung
Dann tauscht du noch den Datentyp der AT-Variable gegen STRUCT aus und füllst den Struct mit 2 Worten auf.

Jetzt hast du einen Struct of 2 Word der am selben Speicherplatz liegt wie die Real-Variable.
Sieht dann so aus und kannst du so verwenden.




Du kannst das auch in eine separate Funktion z.B.: Real to 2 Word packen


----------



## TMaroni (11 März 2015)

Hallo Jungs, Kurze frage geht der Slice-Zugriff auf Real-Datentyp?

Gruss
TMaroni


----------



## RONIN (11 März 2015)

TMaroni schrieb:


> Hallo Jungs, Kurze frage geht der Slice-Zugriff auf Real-Datentyp?



Anscheinend nicht. Hab ich auch schnell vorher probiert bevor ich die AT-Sicht vorgeschlagen hab.


----------



## TMaroni (11 März 2015)

Schade das es nicht funktioniert.


----------



## aleks_pl (12 März 2015)

Hallo

also erstmal es hat alles geklappt. Aber ich mußte für Register 40201 .

Danke


----------

