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

Ergebnis 1 bis 7 von 7

Thema: DB-Offset herausfinden

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

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    nach kurzer Frage an Dr. Google gibt es hier meine Prämiere.

    Zu meiner Fragestellung:
    Ich habe eine Anlage mit vielen Ventilen. Diese Ventile sind alle in einem DB_Ventile eingetragen. Hinter jedem Ventil liegt ein Struct mit ettlichen Informationen.
    Jetzt wurde ein Baustein erstellt, welcher Ventilgruppen überwachen soll. Um die zu beobachtenden Ventile parametrierbar zu machen wird an die Eingänge des FCs der DB-Offset der zugehörigen Ventile angegeben.

    Gibt es eine Möglichkeit nicht immer den Offset heraus zu kramen? Ich stelle mir das so vor, dass man die erste Bool Variable des gewünschten Ventils angibt und dann im FC intern über Pointer die gewünschten Informationen bekommt.

    Zum verwendeten System:
    Siemens CPU313C
    TIA Portal V13 SP Update8
    Programmiert wird in AWL

    Danke im Voraus
    Thomas
    Zitieren Zitieren DB-Offset herausfinden  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Übergib dem FC nur eine einzelne Struct Ventil (oder auch UDT "Ventil") per IN_OUT, dann braucht man im FC gar keine Adressen/Offsets berechnen und kann schön symbolisch operieren.

    Man könnte auch die Struct Ventil in ein Array of Struct Ventil packen und per IN_OUT an den FC übergeben sowie die Array-Indexnummer. Doch dann verliert man die Möglichkeit, den Array-Structs verschiedene Symbole und Symbolkommentare zu geben.

    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:

    Torpedo_Tommy (29.04.2016)

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

    Standard

    Hallo Harald,

    danke für die tolle und schnell Antwort.
    Deine Lösung funktioniert!

    Mein Bedenken ist jetzt die Laufzeit....

    Jedes Ventilstruct besteht aus 20Byte und pro Bausteinaufruf werden 10 Ventile geöffnet. Dazu kommen noch ähnliche Bausteine die für Motoren bzw. Analogwerte zuständig sind....
    Je nach Anlagen sind das dann >7000Byte pro Zyklus die verarbeitet werden müssen....

    Ich werde das vll mal nächste Woche versuchen und schauen, wie sich die Zykluszeit verhält.

    Oder gibt es denn einen anderen Weg? Wie gesagt evtl. über Pointer? Weil pro Struct muss ich nur auf 3-4 Bool Variablen zugreifen.

    Thomas

  5. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Wenn Du die Struktur an IN_OUT an den FC übergibst, dann wird nicht die ganze Struktur kopiert sondern nur die Adresse an den FC übergeben. Der FC muß im Hintergrund zwar mehr rechnen um auf die Strukturmember zuzugreifen (ca. 40 Byte Programmcode mehr als normal bei jedem Zugriff), doch bei Zugriff auf nur 4 Bools sollte das noch effizienter sein als die Structs zu kopieren.

    Wenn Du die Übergabe extra als POINTER deklarierst, dann erreichst Du auch nichts anderes, als was bei Struct an IN_OUT passiert, verlierst aber die Typprüfung des Compilers beim FC-Aufruf und mußt im FC wieder undurchsichtige Adressberechnungen betreiben.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #5
    Torpedo_Tommy ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.09.2012
    Beiträge
    4
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo nochmal,


    ich habe jetzt die vorgeschlagenen Vorgehensweisen getestet.
    Mit einer CPU 315 2DP habe ich in einem Loop 500 Durchläufe des Bausteins programmiert. Sonst ist die CPU leer.


    Zuerst hab ich den momentanen Baustein durchlaufen lassen und hatte eine Zykluszeit von 60ms.


    Das Programm mit den Änderungen der Eingänge auf IN/OUT und als UDT übergeben, ergab eine Zykluszeit von 97ms. Programmtechnisch gab es sonst keine Änderungen.


    Somit ist das für mich keine Option mehr.


    Ich bedanke mich aber für die schnellen und auch wirklich hilfreichen Antworten!
    Bis zur nächsten Frage^^

  7. #6
    Registriert seit
    25.09.2013
    Beiträge
    230
    Danke
    9
    Erhielt 31 Danke für 30 Beiträge

    Standard

    Hallo Torpedo,

    in Step7 Classic habe ich in diesem fall immer die Ventilnummer am Bausstein übergeben.
    Du weißt ja gewiss wie lang die Daten eines Ventils sind dann kannst du dir den offset ja in deinem Baustein berechnen.

    Gruß

    Jens

  8. #7
    Registriert seit
    19.04.2010
    Beiträge
    26
    Danke
    1
    Erhielt 10 Danke für 7 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Torpedo_Tommy,

    wenn du auf die Signale mehrmals im Baustein zugreifst, kannst du auch mal probieren die Bits am Anfang des Bausteins in Lokale Variablen zu kopieren und mit denen zu arbeiten.
    Alternativ kannst du die Struktur auch als Datentyp ANY übergeben, und innerhalb des Bausteins DB-Nummer und Startadresse von dort auslesen.

    Grüße
    Dominik

Ähnliche Themen

  1. TIA DB Göße herausfinden
    Von subvexus im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 26.09.2013, 23:56
  2. Indradrive CS Kommutierungs-Offset
    Von Scorch89 im Forum Antriebstechnik
    Antworten: 1
    Letzter Beitrag: 10.06.2011, 16:53
  3. Array Offset
    Von forellengarten im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 04.04.2011, 22:22
  4. DB Datentyp herausfinden
    Von The-Cook im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 04.06.2009, 15:20
  5. Adresse herausfinden
    Von Knoll im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.09.2006, 10:02

Lesezeichen

Berechtigungen

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