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

Ergebnis 1 bis 6 von 6

Thema: Elemente einer Struktur initialisieren

  1. #1
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    S7-300, Step7 V5.5, SCL

    Folgende Aufgabenstellung:

    Ich habe immer wieder Anwendungen, in denen eine unterschiedliche Struktur (UDT) in einem Global-DB als Array abgelegt ist.
    Z.B. werden da Daten von einem Platz zum anderen übergeben. Das klappt auch problemlos. Jetzt möchte ich aber die Daten an bestimmten Feldelementen des Arrays auch mal löschen / initialisieren.
    Für meine Zwecke genügt es, wenn alle Strukturelemente = 0 bzw. FALSE sind.
    Aktuell löse ich das so, dass ich das Array mit dem Index 0 verwende, in dem auch alle Strukturelemente 0 / FALSE sind:

    Code:
    Status_SFC20:=BLKMOV(SRCBLK :="Daten".Platz[0],DSTBLK :="Daten".Platz[4]);
    Die Daten an Platz 4 werden so z.B. initialisiert. Das funktioniert auch, birgt aber die Gefahr, dass jemand mal versehentlich irgendwas in das Array[0] reinschreibt.

    Falls es da etwas "Fertiges" gibt, wäre mir wichtig, dass ich die Länge des "Löschbereichs" nicht handisch anpassen muss, wenn die Struktur verändert wird. Ich strebe also keine Lösung an, bei der ich schreiben muss an welcher Adresse im DB der zu löschende Bereich beginnt und wie lang dieser ist.

    Jemand eine Idee für mich?
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.
    Zitieren Zitieren Elemente einer Struktur initialisieren  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard

    Hallo,

    so, wie du es machst ist es m.E. eine von 2 Möglichkeiten, es zu realisieren - ich mache es auch aus Bequemlichkeit schon so dann und wann so ...

    Die andere Möglichkeit wäre, auf den zu löschenden Bereich eine gleich große AT-Sicht zu legen, die aus z.B. einem Array of DINT's besteht, denen du dann "0" zuweisst.

    Gruß
    Larry

  3. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Tigerente1974 (19.01.2012)

  4. #3
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von Tigerente1974 Beitrag anzeigen
    Die Daten an Platz 4 werden so z.B. initialisiert. Das funktioniert auch, birgt aber die Gefahr, dass jemand mal versehentlich irgendwas in das Array[0] reinschreibt.

    Falls es da etwas "Fertiges" gibt, wäre mir wichtig, dass ich die Länge des "Löschbereichs" nicht handisch anpassen muss, wenn die Struktur verändert wird. Ich strebe also keine Lösung an, bei der ich schreiben muss an welcher Adresse im DB der zu löschende Bereich beginnt und wie lang dieser ist.
    Hallo Tigerente,
    genau dafür gibt es den SFC21 (Fill).
    Als Eingangsparameter sagst du mit was dein Struct gefüllt werden soll, in deinem Fall "0"
    Als Ausgang legst du den Struct an.
    Nun werden genau so viele Byte wie der Ausgang Struct lang ist, mit dem Wert vom Eingang überschrieben.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  5. #4
    Tigerente1974 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard

    Klingt nach der von mir gesuchten Lösung.

    Wie muss der Bausteinaufruf aussehen? Habe keine Lösung gefunden, die sauber durch den compiler läuft.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  6. #5
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von Tigerente1974 Beitrag anzeigen
    Klingt nach der von mir gesuchten Lösung.

    Wie muss der Bausteinaufruf aussehen? Habe keine Lösung gefunden, die sauber durch den compiler läuft.
    Code:
    Status_SFC21 := FILL(BVAL := MB2, BLK :="Daten".Platz[4]);
    So ungefähr.
    Die Ein-/Ausgangsbezeichnung des SFC21 (???) weiß ich jetzt nicht auswendig. Für das MB2 kannst du einfach eine Temp vom Typ Byte nehmen und dieser "0" zuweisen.
    Einfach in SCL unter Bausteinaufrufe den SFC21 reinholen.

    Edit: Schnell nachgeschaut wie die Parameter heißen
    Geändert von Paule (19.01.2012 um 23:21 Uhr)
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  7. Folgender Benutzer sagt Danke zu Paule für den nützlichen Beitrag:

    Tigerente1974 (20.01.2012)

  8. #6
    Tigerente1974 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.572
    Danke
    63
    Erhielt 259 Danke für 219 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Paule!

    Genau so geht es! Ich stand gestern abend irgendwie auf dem Schlauch...
    Du hast mir einen "Herzenswunsch" erfüllt
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

Ähnliche Themen

  1. Phoenix Contact Elemente
    Von EcoWash im Forum Suche - Biete
    Antworten: 0
    Letzter Beitrag: 29.08.2011, 11:10
  2. Antworten: 0
    Letzter Beitrag: 06.10.2009, 06:32
  3. Länge einer Struktur im DB ermitteln
    Von Knut333 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 22.01.2009, 18:04
  4. Aus einer FB Struktur ein Wort auslesen
    Von ottopaul im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 11.07.2007, 00:39
  5. Initialisieren einer ET200L IMSC
    Von Hagen im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 23.02.2005, 09:58

Lesezeichen

Berechtigungen

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