-> 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
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