Step 7 String als UDT am FB In Out S7 -300 mit Classic

Wincctia

Level-2
Beiträge
830
Reaktionspunkte
190
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Beisammen,

wie oben beschrieben ich habe mir einen UDT für die Kommunikation der Visu mit einen FB der von mir erstellt worden ist am In Out des FB wird der UDT aufgerufen und in einem DB wird er aufgerufen der DB ist Symbolisch am Aufruf des FB angegeben.
der UDT enthält mehrere Strukturen und in einer Struktur ist ein String der von der Visu beschrieben wird. Nun so weit so gut aber, ich müsste den String im FB Umkopieren auf einen Ausgangsbereich. Nur wie kann ich den String Kopieren Blockmove nimmt das Symbol aus den Deklarationsbereich nicht an und Selbst einen Pointer davor schreiben geht leider nicht weil ja so eine Variable wie ich weis keine Adresse hat.

Wisst ihr wie das geht?
Ich müsste wie oben geschrieben den String nur in einen Ausgangsbereich Kopieren können mehr wäre nicht!


Mit besten Grüßen Tia

Programmiert wird mit
Step 7 classic v 5.5
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas

würde ich gern nur soll ich einen Baustein entwicklen der in Awl ist hab heute schon Stundenlang Propiert hab echt keine Idee mehr. Währe über jeden Tip dankbar evtl auch nur ein Denkanstoß

danke schon mal Gruß Tia
 
Das Problem ist, dass du aus dem AWL-Programm im FB zwar an die Adresse der UDT herankommst (Datenbaustein und Anfangsadresse), aber nicht an den Versatz der einzelnen Elemente im UDT.

Wenn der String auf den du zugreifen willst im UDT an erster Stelle liegt, und auch garantiert nie verschoben wird, dann kannst du dir da was basteln.

Du lädst das erste Zeichen des Strings:

L #data.stringVar[1]

Damit das erste Zeichen geladen werden kann, muss der als Parameter übergebene Datenbaustein geöffnet werden. In einem FB wird dafür das DB-Register verwendet. Außerdem wird die Anfangsadresse dieses UDT noch in das Adressregister 1 (AR1) geladen. Mit dem Wissen kannst du direkt nach der Anweisung mit

L DBNO

auf die Datenbausteinnummer zugreifen, und mit

TAR1

auf die Anfangsadresse im Datenbaustein. Zwischenspeichern würde ich diese Informationen in einer Temp-Variable, damit die Registerinhalte nicht wieder zerstört werden wenn du auf andere Daten zugreifst.

Was mit den Informationen theoretisch möglich wäre, dass du dir im temp-Bereich ebenfalls eine UDT des gleichen Typs anlegst, und dann mit den extrahierten Informationen einen Any-Pointer zusammenbaust, und dann per Blockmove die ganze UDT in den Temp-Bereich kopierst. Da kannst du dann auf alle Elemente zugreifen, auch die String-Inhalte.
 
Zurück
Oben