TIA AWL Anweisung TDB

Watchcat

Level-2
Beiträge
92
Reaktionspunkte
18
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich muss ein Programm migrieren und bin dabei auf folgenden Baustein gestoßen. Ich habe die Anweisung TDB noch nie gesehen. Auch nicht, dass zwei DBs direkt hintereinander geöffnet werden. Leider habe ich auch online nichts gefunden um mir das verständlich zu machen. Kann mir jemand erklären was hier gemacht wird?

1731060222478.png

Gruß Jonas
 
5.1 Datenbausteinoperationen Übersicht Beschreibung

Mit der Operation AUF (Öffne Datenbaustein) können Sie einen globalen Datenbaustein oder einen Instanz-Datenbaustein öffnen. Es kann gleichzeitig im Programm je ein globaler Datenbaustein und ein Instanz-Datenbaustein geöffnet sein. Folgende Datenbausteinoperationen stehen Ihnen zur Verfügung:

AUF Datenbaustein öffnen
TDB Tausche Global-DB und Instanz-DB
L DBLG Lade Länge Global-DB in AKKU 1
L DBNO Lade Nummer Global-DB in AKKU 1
L DILG Lade Länge Instanz-DB in AKKU 1
L DINO Lade Nummer Instanz-DB in AKKU 1
 
Zuletzt bearbeitet:
Ahhhhhhh. Ich nutze TDB also um den Global-DB der über den Input Parameter "instanz_db" übergeben wird in einen Instanz-DB zu tauschen, um dann über z.B. "L DID0" darauf zuzugreifen. Gleichzeitig kann ich z.B. über "L DBD0" auf die Daten des übergebenen "Regler_DB" zugreifen. Richtig?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hintergrund ist, dass es keine AWL-Anweisung zum Öffnen von DI mit DB_ANY (BLOCK_DB) gibt:
AUF #IN_DB_ANY öffnet den übergebenen DB_ANY als Global-DB.
AUF DI #IN_DB_ANY gibt es nicht.
Daher wird im Code von #1 der übergebene DB_ANY halt als Global-DB geöffnet und danach mit TDB mit dem Instanz-DB getauscht.

Das wird auch manchmal gemacht, wenn man einen DB symbolisch direkt öffnen will:
AUF DB 1 kann symbolisch geschrieben werden: AUF "DB1name"
AUF DI 2 kann nicht symbolisch geschrieben werden

Das kann man als workaround so symbolisch machen:
Code:
AUF "DB2name"  //den Instanz-DB DB2 vorläufig als Global-DB öffnen
TDB            //die DB-Register tauschen, wodurch der geöffnete DB2 zum Instanz-DB wird
AUF "DB1name"  //und nun noch einen anderen DB als Global-DB öffnen
 
PS: Will man nur einen übergebenen DB_ANY als Instanz-DB öffnen und den geöffneten Global-DB nicht ändern, dann kann man das so machen:
Code:
TDB             //geöffneten Global-DB vor Änderung schützen/merken
AUF #IN_DB_ANY  //den DB_ANY vorläufig als Global-DB öffnen
TDB            //die DB-Register zurücktauschen
 
Zurück
Oben