Aufbau System DB 0 bei S7

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo jogi,

danke für die super Erklärung. Habs auch nochmal im Simulator angeschaut und habs jetzt anhand Deiner Erklärung kapiert.

Mein Resume: DB0 gibs nur Cpu intern, hat aber nichts mit dem
Anwenderprogramm zu tun, auch wenn im DB-Status die 0 steht.


Gruss Andi :D
 
L P##IN;
LAR1;

--> AR1 zeigt jetzt NICHT auf OB1_DATE_AND_TIME, sondern auf das 1. Wort des obigen Pointers. ; zeigt auf die Anfangsadr. der DUT Structur

L W [AR1,P#0.0]
--> läd das Wort der Lokaldaten OB1, welches ggf. die DB-Nummer enthält ; lädt den Inhalt des 1. Wortes, und da im OB1 ja der Zeiger auf den OB1_Date_AND_Time geht, würde ich immer noch auf das Jahr tippen

T #w_db_nr
AUF DB [#w_db_nr]
--> öffnet, falls nötig, den angegebenen DB ;öffnet auf jeden Fall irgendeinen DB, wird nirgends übersprungen

L D [AR1,P#2.0]
-->läd den tatsächlichen Pointer aus den Lokaldaten von OB1, also mit Bereichskennung und adresse ;und hier wird nach dem Monat geschaut, oder

LAR1
--> jetzt steht in AR1 die Adresse der Variablen, in diesem Beispiel V 12.0
(Vorgänger-Lokaldaten ab byte 12)

... ab hier kann die DT-Variable über AR1 tatsächlich gelesen werden
Ich kann das nicht ganz nachvollziehen. Ich habe noch mal Kommentare dazugeschrieben.

Was macht denn der Baustein?

Gruß pt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi pt

eben nicht :wink:, da bin ich auch zuerst drüber gestolpert

Dieses Fragment eines Bausteins bereitet nur AR1 und das DB1-Register soweit vor, daß die DT-Variable gelesen werden kann, egal ob sie in einem DB oder sonstwo steht.

ich hab nochmals kommentiert :wink:

L P##IN;
LAR1;

--> zeigt auf die Anfangsadr. der DUT Structur

nöö, sondern auf einen POINTER auf die DUT-Struktur.

im Gegensatz zu Bit/Byte/word/dword-Parametern wird bei Übergabe von komplexen Typen (DUT, ANY...) nur ein ZEIGER auf die Variable übergeben. Dieser Zeiger ist 3 Worte lang und liegt in den L-Daten des aufrufenden Bausteins



L W [AR1,P#0.0]
--> läd das Wort der Lokaldaten OB1, welches ggf. die DB-Nummer enthält ; lädt den Inhalt des 1. Wortes, und da im OB1 ja der Zeiger auf den OB1_Date_AND_Time geht (eben nicht !!!) , würde ich immer noch auf das Jahr tippen

T #w_db_nr
AUF DB [#w_db_nr]
--> öffnet, falls nötig, den angegebenen DB ;öffnet auf jeden Fall irgendeinen DB, wird nirgends übersprungen

DB öffnen heisst ja nur, das DB1-Register mit 'ner Nummer vorbesetzen. Solange keiner auf eine DBx-Adresse zugreift, macht das gar nix, wenn's den DB nicht gibt.

L D [AR1,P#2.0]
-->hier wird nach dem Monat geschaut, oder
hier wird der eigentliche PDWORD-Pointer geladen !

LAR1
--> jetzt steht in AR1 die Adresse der Variablen, in diesem Beispiel V 12.0
(Vorgänger-Lokaldaten ab byte 12)

... ab hier kann die DT-Variable über AR1 tatsächlich gelesen werden


sieh Dir das ganze mal im Status an und achte auf das AR1 bei jeder Anweisung, dann wird's klar.


Gruß Jörg
 
Zurück
Oben