Sonstiges Kurze Veranschaulichung zum TDB-Befehl in AWL

Jochen

Level-1
Beiträge
131
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

heute stolperte ich im AWL-Handbuch über den Befehl TDB zum Tauschen von DI- und DB-Register. Ich kann mir nur nicht wirklich was darunter vorstellen. Kann mir jemand erklären, wo man diesen Befehl verwenden würde? Und habe ich den richtig verstanden, dass ich folgenden dummen Code bauen würde:

Code:
AUF DB1
AUF DI1
L 5 
T DBB0
L 3
T DIB1
TDB
L 5
L DIB1
==I
SPBN END
L 5
T DBB0
END: NOP 0

Im Instanz-DB und im GlobalDB Byte 0 Jeweils 5 enthält?

Danke Gruß


Jochen
 
Ja, enthalten jeweils 5 - schon nach der vierten Programmzeile. :cool:
Allerdings auch völlig ohne das TDB. Dein "dummer" Code ist unglücklich gewählt, so daß Du den Effekt des TDB gar nicht sehen kannst, weil Du als Global-DB und als Instanz-DB jeweils den selben DB1 öffnest. Danach ist es egal, ob Du auf den Global-DB (via DBB..) oder den Instanz-DB (via DIB..) zugreifst - Du greifst bei beiden Varianten auf DB1 zu.


Die Operation TDB braucht man in S7 eigentlich nur, wenn man in einem FC einen als BLOCK_DB übergebenen DB als Instanz-DB (bzw. zweiten DB) öffnen will. Das geht nur über Öffnen als Global-DB (AUF #DBnr) und anschließend TDB (tauschen der DB-Register). (In FB geht das Öffnen wie beim FC mit TDB, aber auch ohne TDB aber umständlich indirekt.)

Bei old-S5-style Programmen wird TDB häufiger genutzt für die historischen teilqualifizierten DB-Zugriffe (ohne Angabe der DB-Nummer, z.B. DBB0), in S7 kann und sollte man jedoch nur vollqualifiziert auf DB zugreifen (z.B. DB1.DBB0), man braucht dabei kein TDB. Auch für indirekte Zugriffe, wo man ein DB-Register braucht, braucht man TDB nicht.

S7 benutzt TDB intern im normalerweise verborgenen MC7 bei Bausteinaufrufen.

Harald
 
Zurück
Oben