Beschreibung
Mit der Anweisung kopieren Sie einen DB oder einen Teil eines DB, der im Ladespeicher (Micro Memory Card) liegt, in den Datenbereich eines Ziel-DB. Der Ziel-DB muss ablaufrelevant sein, d. h. er darf nicht mit dem Attribut UNLINKED erzeugt worden sein. Der Inhalt des Ladespeichers wird beim Kopiervorgang nicht verändert.
Um Datenkonsistenz zu gewährleisten, dürfen Sie den Zielbereich während der Bearbeitung von "READ_DBL" (d. h. solange der Parameter BUSY den Wert TRUE hat) nicht verändern.
Für die Parameter SRCBLK und DSTBLK gelten folgende Einschränkungen:
-
Bei einem ANY-Pointer vom Typ BOOL muss die Länge durch 8 teilbar sein.
-
Bei einem ANY-Pointer vom Typ STRING muss die Länge gleich 1 sein.
Die Länge des Quell-DB können Sie bei Bedarf mit der Anweisung "TEST_DB" ermitteln.
|
Hinweis READ_DBL wird asynchron bearbeitet und eignet sich deshalb nicht dazu, Variablen häufig (bzw. zyklisch) im Ladespeicher zu lesen. Ein einmal begonnener Auftrag wird stets zu Ende geführt. Wenn die maximale Anzahl gleichzeitig aktiver "READ_DBL"-Anweisungen erreicht ist und Sie "READ_DBL" zu diesem Zeitpunkt in einer Prioritätsklasse hoher Priorität erneut aufrufen, dann wird der Fehlercode W#16#80C3 zurückgeliefert. Es ist daher nicht sinnvoll, den hochprioren Auftrag sofort wieder zu starten. |
Arbeitsweise
Die Anweisung "READ_DBL" ist eine asynchron arbeitende Anweisung, d. h. die Bearbeitung erstreckt sich über mehrere Aufrufe. Sie starten den Auftrag, indem Sie "READ_DBL" mit REQ = 1 aufrufen.
Über die Ausgangsparameter RET_VAL und BUSY wird der Zustand des Auftrags angezeigt.
Siehe auch: Unterschied zwischen synchron und asynchron arbeitenden Anweisungen
Parameter
Die folgende Tabelle zeigt die Parameter der Anweisung "READ_DBL":
|
Parameter |
Deklaration |
Datentyp |
Speicherbereich |
Beschreibung |
|---|---|---|---|---|
|
REQ |
Input |
BOOL |
E, A, M, D, L |
REQ = 1: Anforderung zum Lesen |
|
SRCBLK |
Input |
ANY |
D |
Zeiger auf den Datenbaustein im Ladespeicher, aus dem gelesen wird |
|
RET_VAL |
Return |
INT |
E, A, M, D, L |
Fehlerinformation |
|
BUSY |
Output |
BOOL |
E, A, M, D, L |
BUSY = 1: Der Lesevorgang ist noch nicht beendet. |
|
DSTBLK |
Output |
ANY |
D |
Zeiger auf den Datenbaustein im Arbeitsspeicher, in den geschrieben werden soll |
Weitere Informationen zu den gültigen Datentypen finden Sie unter "Übersicht über die gültigen Datentypen".
Parameter RET_VAL
|
Fehlercode (W#16#...) |
Beschreibung |
|---|---|
|
0000 |
kein Fehler |
|
0081 |
Der Zielbereich ist größer als der Quellbereich. Der Quellbereich wird komplett in den Zielbereich geschrieben, die restlichen Bytes des Zielbereichs werden nicht verändert. |
|
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". |
|
7002 |
Zwischenaufruf (REQ irrelevant): Datenübertragung bereits aktiv; BUSY hat den Wert "1". |
|
8081 |
Der Quellbereich ist größer als der Zielbereich. Der Zielbereich wird komplett beschrieben, die restlichen Bytes des Quellbereichs werden ignoriert. |
|
8093 |
Beim Parameter DSTBLK ist kein Datenbaustein angegeben oder ein Datenbaustein, der nicht im Arbeitsspeicher steht. |
|
80B1 |
Beim Parameter SRCBLK ist kein Datenbaustein angegeben, oder der dort angegebene Datenbaustein ist kein Ladespeicherobjekt (z. B. ein per "CREAT_DB" erzeugter DB). |
|
80B4 |
DB mit F-Attribut darf nicht gelesen werden. |
|
80C0 |
Der Ziel-DB wird gerade durch eine andere Anweisung oder eine Kommunikationsfunktion bearbeitet. |
|
80C3 |
Die maximale Anzahl gleichzeitig aktiver "READ_DBL"-Anweisungen ist momentan bereits erreicht. |
|
827F |
Parameter 2 ist fehlerhaft, möglicherweise ein nicht unterstützter Datentyp |
|
8xyy |
allgemeine Fehlercodes Siehe auch: Fehlerauswertung mit dem Ausgangsparameter RET_VAL |