RD_REC: Datensatz von Peripherie lesen (S7-300, S7-400) - STEP 7

Erweiterte Anweisungen (S7-300, S7-400)

ft:publication_title
Erweiterte Anweisungen (S7-300, S7-400)
Product
STEP 7
Version
V20
Publication date
11/2024
Language
de-DE
RD_REC: Datensatz von Peripherie lesen

Beschreibung

Mit der Anweisung lesen Sie den Datensatz mit der Nummer RECNUM von der adressierten Baugruppe. Sie starten den Lesevorgang, indem Sie beim Aufruf den Eingangsparameter REQ mit "1" belegen. Falls der Lesevorgang sofort ausgeführt werden konnte, liefert die Anweisung am Ausgangsparameter BUSY den Wert "0" zurück. Falls BUSY den Wert "1" hat, ist der Lesevorgang noch nicht abgeschlossen.

Siehe auch: Unterschied zwischen synchron und asynchron arbeitenden Anweisungen. Der gelesene Datensatz wird nach fehlerfreier Datenübertragung in den durch RECORD aufgespannten Zielbereich eingetragen.

Hinweis

Falls Sie einen Datensatz, dessen Nummer größer als eins ist, aus einer FM oder einem CP auslesen, die Sie vor Februar 1997 erworben haben (im Folgenden als "alte Baugruppen" bezeichnet), dann verhält sich "RD_REC" anders als bei einer neuen Baugruppe. Dieser Sonderfall wird im Abschnitt "Verwendung alter S7-300-FMs und -CPs bei DS-Nr. >1" (siehe unten) behandelt.

Wenn ein DPV1-Slave über GSD-Datei projektiert ist (GSD ab Rev. 3) und die DP-Schnittstelle des DP-Masters auf "S7-kompatibel" eingestellt ist, dürfen im Anwenderprogramm keine Datensätze mit "RD_REC" von den E/A-Baugruppen gelesen werden. Der DP-Master adressiert in diesem Fall den falschen Steckplatz (projektierter Steckplatz + 3).

Abhilfe: Schnittstelle des DP-Masters auf "DPV1" umstellen.

Parameter

Die folgende Tabelle zeigt die Parameter der Anweisung "RD_REC":

Parameter

Deklaration

Datentyp

Speicherbereich

Beschreibung

REQ

Input

BOOL

E, A, M, D, L

REQ = 1: Anforderung zum Lesen

IOID

Input

BYTE

E, A, M, D, L oder Konstante

Kennung des Adressbereichs:

  • B#16#54 = Peripherie Eingang (PE)

  • B#16#55 = Peripherie Ausgang (PA)

Handelt es sich um eine Mischbaugruppe, ist die Bereichskennung der niedrigeren Adresse anzugeben. Bei gleichen Adressen ist B#16#54 anzugeben.

LADDR

Input

WORD

E, A, M, D, L oder Konstante

Logische Adresse der Baugruppe. Bei einer Mischbaugruppe ist die kleinere der beiden Adressen anzugeben.

RECNUM

Input

BYTE

E, A, M, D, L oder Konstante

Datensatznummer (zulässige Werte: 0 bis 240)

RET_VAL

Return

INT

E, A, M, D, L

Tritt während der Bearbeitung der Anweisung ein Fehler auf, enthält der Rückgabewert einen Fehlercode. Zusätzlich: Länge des tatsächlich übertragenen Datensatzes in Bytes (mögliche Werte: +1 bis +240), falls der Zielbereich größer ist als der übertragene Datensatz und bei der Übertragung kein Fehler auftrat.

BUSY

Output

BOOL

E, A, M, D, L

BUSY = 1: Der Lesevorgang ist noch nicht beendet.

RECORD

Output

ANY

E, A, M, D, L

Zielbereich für den gelesenen Datensatz. Sie müssen bei asynchroner Bearbeitung von "RD_REC" darauf achten, dass die Aktualparameter von RECORD bei allen Aufrufen dieselbe Längeninformation haben. Es ist nur der Datentyp BYTE zulässig.

Hinweis: Beachten Sie, dass der Parameter RECORD bei S7-300-CPUs immer die vollständige Angabe der DB-Parameter erfordert (Bsp.: P#DB13.DBX0.0 Byte 100). Das Weglassen einer expliziten DB-Nr. ist für S7-300-CPUs unzulässig und führt zu einer Fehlermeldung im Anwenderprogramm.

Weitere Informationen zu den gültigen Datentypen finden Sie unter "Übersicht über die gültigen Datentypen".

Parameter RECORD

Hinweis

Wenn Sie sicherstellen wollen, dass immer der gesamte Datensatz gelesen wird, wählen Sie einen Zielbereich mit der Länge 241 Bytes. Bei einer fehlerfreien Datenübertragung steht dann in RET_VAL die tatsächliche Datensatzlänge.

Verwendung alter S7-300-FMs und -CPs bei DS-Nr. > 1

Falls Sie mit der Anweisung "RD_REC" aus einer alten S7-300-FM oder einem alten S7-300-CP einen Datensatz auslesen wollen, dessen Nummer größer als eins ist, müssen Sie Folgendes beachten:

  • Falls der Zielbereich größer als die tatsächliche Länge des gewünschten Datensatzes ist, werden keine Daten in RECORD eingetragen. RET_VAL wird mit W#16#80B1 beschrieben.

  • Falls der Zielbereich kleiner als die tatsächliche Länge des gewünschten Datensatzes ist, liest die CPU so viele Bytes ab Datensatzanfang, wie in der Längenangabe von RECORD angegeben ist, und trägt sie in RECORD ein. RET_VAL wird mit "0" beschrieben.

  • Falls die Längenangabe von RECORD gleich der tatsächlichen Länge des gewünschten Datensatzes ist, liest die CPU den gewünschten Datensatz und trägt ihn in RECORD ein, RET_VAL wird mit "0" beschrieben.

Parameter RET_VAL

  • Trat während der Bearbeitung der Funktion ein Fehler auf, enthält der Rückgabewert einen Fehlercode.

  • Falls bei der Übertragung kein Fehler auftrat, enthält RET_VAL

    • 0, falls der gesamte Zielbereich mit Daten aus dem selektierten Datensatz gefüllt wurde (Der Datensatz kann aber unvollständig sein.).

    • die Länge des tatsächlich übertragenen Datensatzes in Bytes (mögliche Werte: +1 bis +240), falls der Zielbereich größer ist als der übertragene Datensatz.

      Hinweis

      Falls der allgemeine Fehler W#16#8745 auftritt, zeigt dies nur an, dass beim Schreibvorgang auf das Prozessabbild der Zugriff auf mindestens ein Byte nicht möglich war. Der Datensatz wurde ordnungsgemäß von der Baugruppe gelesen und in den E/A-Speicherbereich geschrieben.

Bei den "echten" Fehlerinformationen (Fehlercodes W#16#8xyz) der folgenden Tabelle sind zwei Fälle zu unterscheiden:

  • Temporäre Fehler (Fehlercodes W#16#80A2 bis 80A4, 80Cx):

    Bei dieser Fehlerart ist es möglich, dass sich der Fehler ohne Ihr Zutun behebt, d. h. es ist sinnvoll, dass Sie die Anweisung erneut aufrufen (ggf. mehrfach).

    Beispiel für einen temporären Fehler: Benötigte Betriebsmittel sind momentan belegt (W#16#80C3).

  • Permanente Fehler (Fehlercodes W#16#809x, 80A0, 80A1, 80Bx):

    Bei dieser Fehlerart kann sich der Fehler nicht ohne Ihr Zutun beheben. Ein erneuter Aufruf der Anweisung ist erst sinnvoll, wenn Sie den Fehler beseitigt haben. Beispiel für einen permanenten Fehler: Falsche Längenangabe in RECORD (W#16#80B1).

    Hinweis

    Wenn Sie mit "WR_REC" Datensätze zu einem DPV1-Slave übertragen oder mit RD_REC Datensätze von einem DPV1-Slave lesen und dieser im DPV1-Mode arbeitet, bewertet der DP-Master die vom Slave erhaltene Fehlerinformation wie folgt:

    Liegt die Fehlerinformation in den Bereichen W#16#8000 bis W#16#80FF oder W#16#F000 bis W#16#FFFF, reicht der DP-Master die Fehlerinformation an die Anweisung weiter. Liegt sie außerhalb, gibt er den Wert W#16#80A2 an die Anweisung und suspendiert den Slave.

    Zur Beschreibung der von DPV1-Slaves stammenden Fehlerinformationen siehe STATUS[3] Parameter STATUS.

Parameter RET_VAL für WR_REC und RD_REC

Fehlercode
(W#16#...)

Erläuterung

Einschränkung

0000

kein Fehler

-

7000

Erstaufruf mit REQ=0: keine Datenübertragung aktiv; BUSY hat den Wert 0.

-

7001

Erstaufruf mit REQ=1: Datenübertragung angestoßen; BUSY hat den Wert 1.

Dezentrale Peripherie

7002

Zwischenaufruf (REQ irrelevant): Datenübertragung bereits aktiv; BUSY hat den Wert 1.

Dezentrale Peripherie

8090

Angegebene logische Basisadresse ungültig: Es ist keine Zuordnung im SDB1/SDB2x vorhanden, oder es ist keine Basisadresse.

-

8092

In ANY-Referenz ist eine Typangabe ungleich BYTE angegeben.

Nur bei S7-400

8093

Für die über LADDR und IOID ausgewählte Baugruppe ist diese Anweisung nicht zulässig. (Zulässig sind S7-300-Baugruppen bei S7-300, S7-400-Baugruppen bei S7-400, S7-DP-Baugruppen bei S7-300 und S7-400.)

-

80A0

Negative Quittung beim Lesen von Baugruppe: Baugruppe während des Lesevorgangs gezogen oder Baugruppe defekt

nur bei "RD_REC"

80A1

Negative Quittung beim Schreiben zur Baugruppe: Baugruppe während des Schreibvorgangs gezogen oder Baugruppe defekt

nur bei "WR_REC"

80A2

  • DP-Protokollfehler bei Layer2 (z. B. Slaveausfall oder Busstörungen)

  • Bei ET200S ist im DPV0-Mode kein Datensatz-Lesen möglich.

Dezentrale Peripherie

80A3

DP-Protokollfehler bei User-Interface/User

Dezentrale Peripherie

80A4

Kommunikation am K-Bus gestört

Fehler tritt auf zwischen CPU und externer DP-Anschaltung

80B0

  • Anweisung für Baugruppentyp nicht möglich

  • Baugruppe kennt den Datensatz nicht.

  • Datensatznummer 241 ist unzulässig.

  • Bei "WR_REC" sind die Datensätze 0 und 1 nicht erlaubt.

-

80B1

Die Längenangabe in Parameter RECORD ist falsch.

  • Bei "WR_REC": Länge falsch

  • bei "RD_REC" (nur möglich bei Verwendung alter S7-300-FMs und S7-300-CPs):Angabe > DS-Länge

  • bei DPNRM_DG: Angabe < DS-Länge

80B2

Der projektierte Steckplatz ist nicht belegt.

-

80B3

Ist-Baugruppentyp ungleich Soll-Baugruppentyp im SDB1

-

80B7

DP-Slave oder Baugruppe meldet einen unzulässigen Bereich eines Parameters oder eines Wertes.

nur bei "RD_REC"

80C0

Bei "WR_REC": Die Daten können nur im STOP-Zustand der CPU geschrieben werden. Hinweis: Damit ist ein Schreiben durch das Anwenderprogramm nicht möglich. Sie können die Daten nur online mit PG/PC schreiben.

Bei "RD_REC": Die Baugruppe führt den Datensatz, aber es liegen entweder noch keine Daten vor oder die Daten können nur im STOP-Zustand der CPU gelesen werden. Hinweis: Falls Daten nur im STOP-Zustand der CPU gelesen werden können, ist eine Auswertung durch das Anwenderprogramm nicht möglich. In diesem Fall können Sie die Daten nur online mit PG/PC lesen.

Bei "DPNRM_DG": Es liegen keine Diagnosedaten vor.

Bei "WR_REC" oder "RD_REC" oder "DPNRM_DG"

80C1

Die Daten des auf der Baugruppe vorangegangenen Schreibauftrags für denselben Datensatz sind von der Baugruppe noch nicht verarbeitet.

-

80C2

Die Baugruppe bearbeitet momentan das mögliche Maximum an Aufträgen für eine CPU.

-

80C3

Benötigte Betriebsmittel (Speicher etc.) sind momentan belegt.

-

80C4

Interner temporärer Fehler. Auftrag konnte nicht ausgeführt werden.

Wiederholen Sie den Auftrag. Bei häufigem Auftreten dieses Fehlers überprüfen Sie bitte Ihren Aufbau auf elektrische Störquellen.

-

80C5

Dezentrale Peripherie nicht verfügbar.

Dezentrale Peripherie

80C6

Datensatzübertragung wurde abgebrochen wegen Prioritätsklassenabbruchs (Wiederanlauf oder Hintergrund)

Dezentrale Peripherie

8xyy

allgemeine Fehlerinformation

Siehe auch: Fehlerauswertung mit dem Ausgangsparameter RET_VAL 

-