TIA DB-Instanzen eines Datentyps symbolisch adressieren

muma1234

Level-2
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Liebes Forum,

Ich habe mehrere DBs die aus einem PLC-Datentyp (Mein_PLC_Datentyp) generiert werden. Die DBs müssen nicht optimiert sein da OPC-Zugriff darauf besteht.
Nun möchte ich einen FB schreiben der diese DBs verarbeitet. Als Eingang soll dieser FB den DB in irgendeiner Form übergeben bekommen (DB_Eingelesen).
Im FB selbst möchte ich die Elemente der DBs symbolisch adressieren.

Beispiel:
DB1.Wert1 = 5
DB2.Wert1 = 10

Beim Aufruf des FB mit DB_Eingelesen = DB1:
Temp1 = DB_Eingelesen.Wert1 -> Temp1 = 5

Beim Aufruf des FB mit DB_Eingelesen = DB2:
Temp1 = DB_Eingelesen.Wert1 -> Temp1 = 10

Meiner Meinung nach könnte dies möglich sein, da die Struktur des DBs ja vor der Compilierung des FB bekannt ist. (Natürlich darf man an den Eingang nur DBs verschalten die aus dem PLC-Datentyp generiert wurden)


Ich habe bisher ausprobiert:

1. Eingangsparametertyp des FB: Mein_PLC_Datentyp
Symbolisch Adressierung funktioniert, allerdings wird dann der komplette PLC-Datentyp nochmal im E-Bereich des FB abgelegt -> Wahnsinnige Speicherverschwendung
(Anmerkung: Was passiert mit dieser Variante in einem FC? Wird hier der komplette Datentyp im Stack abgebildet?)

2. Eingangsparametertyp des FB: DB_ANY
Belegt nur ein Wort im Speicher, allerdings keine symbolische Adressierung möglich sondern nur absolut (DB_Eingelesen.DBW0)
Absolute Adressierung hat zur Folge, dass bei einer strukturellen Änderung des DBs die Adressen angepasst werden müssen!

Gibt es eine Möglichkeit die meine Anfordrungen erfüllt?


Software: TIA V13 SP1
SPS: CPU 1516
Programmiersprache: Vorzugsweise AWL/FUP
 
- Mein_PLC_Datentyp an IN_OUT übergeben --> es wird nur ein Pointer übergeben, jeder Zugriff im FB erzeugt aber wegen der Adressberechnungen viel Programmcode
- im FB auf einen Mein_PLC_Datentyp in TEMP kopieren, damit arbeiten und am Ende des FB wieder zurück zum IN_OUT kopieren

Harald
 
Äußert sich der zusätliche Programmcode denn merklich in der Zykluszeit?
Das weiß ich nicht. Ich kenne die S7-1500 nicht. Das könnte man mal untersuchen. Vielleicht weiß der User HelleBarde genaueres?
Ich könnte mir auch vorstellen, daß als weiterer Nachteil bei der Übergabe von Struct/Datentypen per IN_OUT nur noch Aktualparameter von nicht-optimierten DB übergeben werden können, was ja automatisch vieeel langsameren Code erzeugen soll...

Bei S7-300/400 braucht ein Zugriff auf den Struct an IN_OUT in AWL in einem multiinstanzfähigen FB ca. 42 Byte Programmcode gegenüber 4 Byte auf einen Struct an IN. Um wieviel sich die Ausführungszeit erhöht habe ich nicht getestet.

Harald
 
Zurück
Oben