trabajador73
Level-2
- Beiträge
- 112
- Reaktionspunkte
- 5
-> Hier kostenlos registrieren
Hallo, Ein DB wird mit dem Befehl "AUF" geöffnet in einem FC. Im nächsten Netzwerk steht folgendes.
LAR1 P##TW_DB_zeiger // Adresse von Zeiger "TW_DB_zeiger" laden
L B#16#10 // Kennung 10 laden für ANY-Pointer
T LB [AR1,P#0.0] // und an Lokalstack Offset 0 transferieren
L B#16#2 // Kennung 2 für Datentyp BYTE laden
T LB [AR1,P#1.0] // und an Lokaldatenstack Offset 1 transferieren
L 1246 // Anzahl Bytes im DB als Wiederholungsfaktor laden
T LW [AR1,P#2.0] // und an Lokaldatenstack Offset 2 transferieren
L #zeig_DB_TW // DB-Nummer laden
T LW [AR1,P#4.0] // und an Lokaldatenstack Offset 4 transferieren
L 2#1000010000000000 // Datenbereichstyp DB-Register übergeben
T LW [AR1,P#6.0] // und an Lokaldatenstack Offset 6 transferieren
L P#0.0 // Anfang laden
T LW [AR1,P#8.0] // und an Lokaldatenstack Offset 6 transferieren
CALL "BLKMOV"
SRCBLK :=#TW_DB_zeiger
RET_VAL:=#fehler
DSTBLK :=P#DB400.DBX0.0 BYTE 1246
Ich habe verstanden der Hilfzeiger #TW_DB_zeiger zeigt zuerst auf eine Adresse des geöffneten DB, nämlich auf das 16 Byte oder Bit. Mit der Adressenaufteilung in einem DB habe ich mich noch nicht näher beschäftigt. Denn die Zeile mit "T LB[AR1, P#0.0] bewirkt eine Zeigerzuweisung auf das 16 Byte des geöffneten DB. Danach der Hilfszeiger zeigt auf das Byte 32 und P#2.0 auf Byte 1246 usw. Ich denke ich habe einige Verständnissschwierigkeiten, denn warum wird diese mehreren Zeigerzuweisungen vorgenommen, ohne weitere Ausführungen.
Genauso mir ist auch nicht verständlich die "BLKMOV" Ausführung.
Die Adresse wohin die Daten kopiert werden ist exakt zugewiesen "DSTBLK":=P#DB400.DBX0.0 nämlich ab dieser Adresse die nächsten 1246 Bytes werden beschrieben mit dem kopierten Daten aus der Adressenzuweisung von "SRCBLK". Aber diese Adressenzuweisung des Hilfsmerker reicht nach meinem momentanen Wissensstand nicht aus.
Bei mir funktioniert die Returntaste nicht. Muss irgendeine Einstellung aktiviert werden, damit die Returntaste einen Zeilenumbruch ermöglicht.
Danke für Eure Hilfe.
LAR1 P##TW_DB_zeiger // Adresse von Zeiger "TW_DB_zeiger" laden
L B#16#10 // Kennung 10 laden für ANY-Pointer
T LB [AR1,P#0.0] // und an Lokalstack Offset 0 transferieren
L B#16#2 // Kennung 2 für Datentyp BYTE laden
T LB [AR1,P#1.0] // und an Lokaldatenstack Offset 1 transferieren
L 1246 // Anzahl Bytes im DB als Wiederholungsfaktor laden
T LW [AR1,P#2.0] // und an Lokaldatenstack Offset 2 transferieren
L #zeig_DB_TW // DB-Nummer laden
T LW [AR1,P#4.0] // und an Lokaldatenstack Offset 4 transferieren
L 2#1000010000000000 // Datenbereichstyp DB-Register übergeben
T LW [AR1,P#6.0] // und an Lokaldatenstack Offset 6 transferieren
L P#0.0 // Anfang laden
T LW [AR1,P#8.0] // und an Lokaldatenstack Offset 6 transferieren
CALL "BLKMOV"
SRCBLK :=#TW_DB_zeiger
RET_VAL:=#fehler
DSTBLK :=P#DB400.DBX0.0 BYTE 1246
Ich habe verstanden der Hilfzeiger #TW_DB_zeiger zeigt zuerst auf eine Adresse des geöffneten DB, nämlich auf das 16 Byte oder Bit. Mit der Adressenaufteilung in einem DB habe ich mich noch nicht näher beschäftigt. Denn die Zeile mit "T LB[AR1, P#0.0] bewirkt eine Zeigerzuweisung auf das 16 Byte des geöffneten DB. Danach der Hilfszeiger zeigt auf das Byte 32 und P#2.0 auf Byte 1246 usw. Ich denke ich habe einige Verständnissschwierigkeiten, denn warum wird diese mehreren Zeigerzuweisungen vorgenommen, ohne weitere Ausführungen.
Genauso mir ist auch nicht verständlich die "BLKMOV" Ausführung.
Die Adresse wohin die Daten kopiert werden ist exakt zugewiesen "DSTBLK":=P#DB400.DBX0.0 nämlich ab dieser Adresse die nächsten 1246 Bytes werden beschrieben mit dem kopierten Daten aus der Adressenzuweisung von "SRCBLK". Aber diese Adressenzuweisung des Hilfsmerker reicht nach meinem momentanen Wissensstand nicht aus.
Bei mir funktioniert die Returntaste nicht. Muss irgendeine Einstellung aktiviert werden, damit die Returntaste einen Zeilenumbruch ermöglicht.
Danke für Eure Hilfe.