TIA Modbus TCP & S7-1200

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich stehe mal wieder vor einer Herausforderung… :confused:


Ich möchte gerne mittels der S7-1200 (Master) die Modbus-Adresse 13640 eines EKS-Kartenlesegerätes auslesen. Dies dient der Benutzeranmeldung am Display.

Soweit ich mich eingelesen habe, gibt es für Modbus TCP den fertigen Baustein MB_Client.


Unbenannt.JPG



Dazu nun folgende Fragen:

1)
Wenn ich als Master vom Slave nur lesen möchte, dann muss doch ansonsten kein weiterer Baustein (wie z.B. MB_Server) programmiert werden, oder?

2)
In der Beschreibung steht:

Input-Wörter lesen 1 bis 125 WORD pro Aufruf

MB_DATA_ADDR --> 30001 bis 39999

Kann ich da jetzt an MB_DATA_ADDR einfach 30001 schreiben?


3)
Lt. Beschreibung steht an MB_DATA_LEN die Datenlänge; also Anzahl der Bits oder Wörter für den Datenzugriff.

Je nachdem welcher User sich anmeldet, steht in der Modbus-Adresse 13640 (WORD) z.B. eine 1 für Administrator oder eine 3 für Anlagenbediener, usw.

Demnach wird ja 1 Datenwort (MB_DATA_LEN = 1 ?) aus dem Eingangsregister gelesen, oder?


Vielen Dank für die Hilfestellung!
 
Zuletzt bearbeitet:
1. Richtig nur den Client verwenden - aber es ist wichtig die Optimierung im dazugehörigen Datenbaustein zu deaktivieren.
-> Das ist deshalb wichtig weil du im folgendem mit Pointern arbeitest.

2. Das stimmt auch schon. Du gibst nur die Startadresse an...

3. ... und hier die Anzahl der Wörter die ausgelesen werden.

und hier mal ein SCL Beispiel von mir:

// Modbusclient aufrufen und Messwerte einlesen
#MB_CLIENT_Instance(REQ:=TRUE,
DISCONNECT:=FALSE,
MB_MODE:=0,
MB_DATA_ADDR:=400201,
MB_DATA_LEN:=80,
STATUS=>#Status,
MB_DATA_PTR:= P#DB6.DBX14.0 REAL 40,
CONNECT:="Daten_Turbine".Verbindung);
 
Zuviel Werbung?
-> Hier kostenlos registrieren
und hier mal ein SCL Beispiel von mir:

// Modbusclient aufrufen und Messwerte einlesen
#MB_CLIENT_Instance(REQ:=TRUE,
DISCONNECT:=FALSE,
MB_MODE:=0,
MB_DATA_ADDR:=400201,
MB_DATA_LEN:=80,
STATUS=>#Status,
MB_DATA_PTR:= P#DB6.DBX14.0 REAL 40,
CONNECT:="Daten_Turbine".Verbindung);

Vielen Dank blumentopf23,

warum schreibst du da noch eine zusätzliche 4 vor die Modbus-Adresse?

Und wenn man mit Pointern arbeiten muss - wird da im DB dann ein Array angelegt?
 
Bei der 4 handelt es sich um die Adresse laut Handbuch. Die benötigst du also nicht.
Wenn du den Datenbaustein angelegt hast müsstest du zwei Sachen anlegen.

1. Einen Eintrag für die Verbindung vom Typ TCON_IP_v4 (ist wahrscheinlich nicht in der Auswahlliste - also einfach eintippen:confused:)2. Das Arry mit dem entsprechenden Typ für die einzulesenden Daten. Muss natürlich lang genug sein!!


Hänge noch ein Bild vom DB an...

Datenbaustein.jpg
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ihr Zwei,
Ich hab eine ähnliche Aufgabe und frage mich, wie ihr auf eine ModBus-Adresse 13640 zugreifen konntet?
Wie genau muss der Baustein "MB_Client" hierzu beschalten werden?
Ich habe auch Adressen die bei z.B. HEX 0x402F also 16431 liegen.
Wie muss ich da den Baustein beschalten, dass ich die Daten da lesen kann?
Als ModBus-Funktion soll ich 04 verwenden.


MB_Client.jpg

Vielen dank schon mal im voraus.

Gruß
 
Zurück
Oben