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:
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 |
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 |
|
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 |
|
- |
|
80B1 |
Die Längenangabe in Parameter RECORD ist falsch. |
|
|
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. |
|
|
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 |
- |