Step 7 Adresse im DB auslesen ?

Waelder

Level-2
Beiträge
964
Reaktionspunkte
117
Zuviel Werbung?
-> Hier kostenlos registrieren
Irgendwie stehe ich auf´m schlauch, wie kann ich die Adresse in einem DB auslesen ?
Die verarbeitung geschieht in einem FB

Beispiel :

DB302.dbw50 = 50
DB302.dbw64 = 64
DB302.dbw71 = 71

anscheinend bin ich zu blöd das auszuwerten.

Gruss Wälder
 
Hallo Wälder,
ich bitte um Nachsicht, aber ich verstehe die Frage nicht so recht ...
Vergibst du die Adresse absolut ? Dann geht das nicht.
Vergibst du die Adresse symbolisch denn geht das über einen Pointer - das würde auch für einen IN-Parameter des FB gelten ...

Schreib doch mal etwas mehr ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Larry,

vermutlich habe ich mich ungeschickt ausgedrückt. Ich habe einen DB mit Daten der Beinhaltet 50 verschiedene Behälter (silos) mit einigen informationen (per UDT angelegt).

Silo1 beginnt bei DB 0 usw

Silo1 beginnt bei DB300.DBW 0
Silo2 beginnt bei DB300.DBW 54
Silo3 beginnt bei DB300.DBW 108
Silo4 beginnt bei DB300.DBW 162
Silo5 beginnt bei DB300.DBW 216
usw ...

mich interessiert nur die Adresse hinten nicht das DB300 also

0
54
108
162
216
usw.....

Ich möchte diese Information auf einen Integer legen um in einer späteren Aktion diese Zahl (adresse) auslesen und für einen Zugriff auf diesen DB Benutzen um Daten daraus in ein Zielbaustein (DB301 z.b.) zu kopieren.
Das kann ich ja über den Variabeln Blockmove erledigen.

ICh hoffe das kam jetzt besser rüber von mir :) :sm8:

Grüsse & Danke
Wälder
 
Wie LL schon geschrieben hat, direkt kommst Du nicht dran...

Und wenn Du die Geschichte mit einem Index aufbaust?

INDEX := (Silonummer - 1) * 54

Dann hättest Du schon mal die Startadresse....
 
Oder mittels ANY-Pointer kommt er auch an die Adresse ran ... also im Prinzip eine Kombination aus beidem... Übergibst du die komplette Struktur symbolisch kannst du dir die Startadresse der ersten Komponente ermitteln und dann per Formel die dtsclipper schon geschrieben hat die weiteren Silos ermitteln ... dein UDT hat ja immer eine fixe Größe von 54 Byte! Müsstest du also 2700 Bytes als Zugriffsbreite retour bekommen (wenn du die Struktur übergibst!)

mfg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich mache solche Dinge immer sehr trivial.
Nehme Nummer des Silos, multipliziere mit Länge und du hast die Startadresse in dem DB.
Um es zu vereinfachen suche ich mir richtige Grenzen. Also x * 50 oder x * 100.

Symbolisch erwischt du die Adresse nicht, leider.


bike

aber auch TIA kann das nicht :)
 
Hallo Wälder,
wie ich schon geschrieben habe - den symbolischen Zugriff könntest du mit einem Pointer auflösen und somit auf die 1. Adresse der Struktur kommen. Das ginge aber nur, wenn deine Silo's nicht schon ein Array sind.
1. Du könntest also "DB300".Silo_1 (der wiederum ein UDT vom Typ UDT1 = Silodaten ist) auflösen.
2. Wenn du allerdings in deinem DB300 ein Array[1..50] vom Typ Silodaten hast dann geht es nicht.

Im Fall 1 lädst du dir einfach den Pointer vom "DB300".Silo_1 maskierst den nicht interessanten Bereich aus (siehe hierzu den Aufbau vom Pointer aus der Step7-Hilfe), teilst das Ganze durch 8 (wegen der Bit-Adresse) und du erhälst die Start-Adresse deiner Struktur.

Gruß
Larry
 
Zurück
Oben