Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 4 von 4

Thema: DB-Instanzen eines Datentyps symbolisch adressieren

  1. #1
    Registriert seit
    22.04.2015
    Beiträge
    4
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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
    Zitieren Zitieren DB-Instanzen eines Datentyps symbolisch adressieren  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    - 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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    muma1234 (29.10.2015)

  4. #3
    muma1234 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.04.2015
    Beiträge
    4
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Harald,

    Danke für deine Antwort.
    zu der Variante mit IN_OUT: Ist genau das was ich will. Äußert sich der zusätliche Programmcode denn merklich in der Zykluszeit?

  5. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von muma1234 Beitrag anzeigen
    Ä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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 30.08.2015, 19:41
  2. Antworten: 6
    Letzter Beitrag: 08.07.2015, 23:17
  3. Step 7 Länge eines Datentyps ermitteln
    Von HelmiMUC im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 18.03.2015, 13:35
  4. Die ByteGröße eines selbssdefinierten Datentyps ermitteln
    Von alb im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 24.02.2012, 14:54
  5. DB's symbolisch adressieren
    Von erwin36 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 11.11.2009, 21:23

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •