Quantcast
Channel: SPS-Forum - Automatisierung und Elektrotechnik
Viewing all articles
Browse latest Browse all 47327

Step 7 UDT als In/Out Variable an FB

$
0
0
Hallo Forum,

ich habe mir einen FB geschrieben, mit dem ich eine Sequenz an Telegrammen absetzen und empfangen kann.
Dabei hat dieser FB einen eigenen Sende- und Empfangsbereich mit jeweils einer Länge von 20 Byte, auf den DP_WRDAT und DP_RDDAT zugreift. Das funktioniert auch alles soweit.

Nun bestehen diese 20 Byte langen Telegramme aus einem festen Header und den folgenden variablen Nutzdaten. Den Header realisiere ich dabei im FB selbst und die Nutzdaten, werden halt vom Anwender individuell zusammengestellt und sollen anschließend im FB nach dem Header angehängt werden.

Meine Idee war nun:
1. Ich definiere eine UDT, in der Sende/ und Empfangsdaten stehen
UDT1.png

2. Der Anwender erzeugt nun einen globalen DB, in welchem er eine Variable vom Typ UDT deklariert
DB1 mit UDT1.png


3. Diesen DB übergibt er als IN/OUT vom Typ UDT an den FB
Aufruf Baustein mit Übergabe DB1.png


Intern wollte ich mittels BLKMOV die Daten aus dem übergebenen DB1 in meinen FB Sendebereich einfügen und andersrum einen Teil des Empfangstelegramms in meinen DB1 zurückschreiben.

Meine Überlegung ist, einen ANY-PTR zu erstellen, der mir einmal die reinen Nutzdaten aus DB1 in meinen Instanz DB Sendebereich schreibt. Und einmal die reinen Nutzdaten aus dem kompletten Empfangstelegramm zurück in DB1 kopiert.
Dafür muss ich dem PTR ja eine Anfangsadresse übergeben, was mich schon stutzig macht, denn S7 reserviert für die IN/OUT Variable nur 6 Byte, obwohl die UDT schon 20 Byte Groß ist? (Siehe 1. Screenshot)

InstanzDB INOUT.png

Ich hoffe es wurde deutlich, was ich umsetzen möchte?! Ich bekomme es nämlich nicht hin :(

Oder bin ich evtl. sogar komplett auf dem falschen Weg und eine andere Lösung wäre hier viel eleganter?

Danke und Gruß
R_TRIG
Angehängte Grafiken

Viewing all articles
Browse latest Browse all 47327