7.3.2.4
Lesen und Schreiben von Daten mit SFC14 und SFC15
Anstatt von Peripheriezugriffsbefehlen können auch die S7-Systemfunktionen SFC14 (DPRD_DAT) und SFC15
(DPWR_DAT) im CPU-Programm zur Datenübertragung genutzt werden. Dies ist für Daten innerhalb eines E/A-
Moduls möglich.
Um z.B. alle 12 Messwerte eines E/A-Moduls Messwerte 12 mit einem Aufruf zu lesen und in einen Datenbau-
stein zu übertragen, gehen Sie wie folgt vor:
Erstellen Sie einen Datenbaustein zur Aufnahme der zu lesenden Daten (mit 12 REAL-Werten).
²
Rufen Sie SFC14 auf:
²
CALL SFC14
LADDR: = W#16#200 // E/A-Modul Adresse, z.B. 512, hexadezimal
RET_VAL: = MW100 // z.B. Merkerwort 100 als Rückgabewert
RECORD: = P#DB10.DBX0.0 BYTE 48 // 12 Werte = 48 Bytes nach z.B. DB10
Enthält der Ziel-Datenbaustein mehr Informationen als nur die 12 Messwerte und beginnen diese nicht
bei Datenbaustein-Byte 0, dann kann auch ab diesem Offset kopiert werden, z.B. mit:
CALL DPRD_DAT
LADDR: = W#16#200
RET_VAL: = MW100
RECORD: = P#DB10.DBX24.0 BYTE 48 // 48 Bytes nach z.B. DB10 ab Byte 24
7.3.2.5
Lesen und Schreiben azyklischer Daten mit SFB52
Das SIPROTEC-IO-Gerät liefert azyklische Datensätze (siehe Kapitel
den folgenden Systemfunktionsbausteinen in der S7 SPS gelesen oder geschrieben werden können:
•
Lesen von Einheiten-IDs → Lesen mit SFB52 (RDREC)
Das Lesen der Einheiten-IDs eines E/A-Moduls Messwert 12 wird hier an einem Beispiel erläutert.
Der SFB52 arbeitet asynchron, d.h. das Lesen der azyklischen Daten kann sich über mehrere SPS-Anwender-
zyklen erstrecken.
Definieren Sie die Struktur des zu lesenden Datensatzes in einem Datenbaustein, z.B. DB11:
SFB52-Aufruf
Der Datenbaustein DB52 ist für den Aufruf von SFB52 als Instanz-DB erforderlich. Wenn er noch nicht existiert,
werden Sie bei Eingabe des unten aufgeführten Beispiels automatisch abgefragt, ob der DB52 generiert
werden soll.
Anstatt der hier beispielhaft verwendeten DB11, M10, MD21, MW25 und MW100 können auch andere Merker
oder Datenbausteine genutzt werden.
CALL SFB52, DB52
REQ := M10.3 // Auslösen des Leseauftrages
ID := DW#16#200 // E/A-Modul Adresse, z.B. 512, hexadezimal
INDEX := 100 // Index der azykl. Daten, siehe Kapitel
MLEN := 26 // Länge der zu lesenden Daten, siehe Kapitel
Messwerten
VALID := M10.0 // SFB52-Rückgabewert: TRUE = Datensatz wurde gelesen
BUSY := M10.1 // SFB52-Rückgabewert: TRUE = Lesevorgang läuft
ERROR := M10.2 // SFB52-Rückgabewert: TRUE = Lesefehler
STATUS := MD21 // SFB52-Rückgabewert: Fehlercode
LEN := MW25 // SFB52-Rückgabewert: Länge der gelesenen // Informationen in Byte
RECORD := P#DB11.DBX0.0 BYTE 26 // Zielort für die gelesenen Daten
Im Beispiel wird mit M10.3 = TRUE das Lesen der Einheiten-IDs ausgelöst.
In jedem folgenden SPS-Anwenderzyklus wird mit M10.1 und M10.2 geprüft, ob der Lesevorgang noch läuft
oder ob ein Fehler aufgetreten ist.
SIPROTEC 5, Kommunikationsprotokolle, Handbuch
C53000-L1800-C055-2, Ausgabe 06.2016
7.3 Parametrierung IO-Controller
7.1.6 Azyklisches Lesen von
7.1.4 E/A-Module
7.1.6.1 Lesen der Einheiten-IDs von
PROFINET IO
Daten), die mit
211