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

Ergebnis 1 bis 8 von 8

Thema: Datenbereich Typ Any im FB auslesen

  1. #1
    Anonymous Gast

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich hab da so ein kleines Problem, ich möchte in einer S7-315 2DP in einem DB insgesamt 144 Zähler installieren. Den DB habe ich über ARRAYs erstellt. Nun hab ich mir einen FB geschrieben, womit ich jeweils 8 Zähler addieren kann (Formaloperanden, da ich das nicht 144 mal programmieren will ). Jedenfalls möchte ich als Aktualoperanden später nur noch ein Byte sowie den Start der jew. 8 Wort-Blöcke im DB angeben, wenn ich den FB aufrufe.
    Wenn ich als Formaldatentyp in der Deklaration ANY angebe kann ich beim FB-Aufruf das ganze mit p#DB106.dbx0.0 byte 16 beschalten. Nur wie muss ich den FB konfigurieren das er mir die 16 Byte auf 8 einzelne Worte trennt, so dass ich weiterarbeiten kann??

    Gruß Jörg
    Zitieren Zitieren Gelöst: Datenbereich Typ Any im FB auslesen  

  2. "Du musst in der FB Schnittstelle das gleiche Array definieren. Ich würde das ganze über einen UDT mit deinen acht Wörtern lösen.
    Mit der UDT hast du den Vorteil, dass du sie 144 als Array im DB aufrufen kannst und einmal in deinem FB. ==> Namensgleichheit und keine Probleme bei der Symbolischen Adressierung.

    UDT: hier kannst du dir auch Tipparbeit Sparen wenn du Array's nimmst. Z.B.

    UDT1

    Zaehlerwert vom Typ Array [1..8] of INT


    DB 1

    Zaehler vom Typ Array [1..144] of UDT1


    FB 1 In/Out Variable

    Zaehler vom Typ UDT1

    Jetzt kannst du der FB symbolisch Db1.Zaehler[1] die kompletten 16 Byte zuweisen. Im Fb1 kannst du über Zaehler.Zaehlerwert[1] auf die einzelnen Wörter zugreifen.

    Natürlich verwendest du auch für Db1, Udt1, und Fb1 Symbolische Namen, dann sieht's richtig elegant aus. Bei Problemen nachfragen...

    Gruß, Christian"


  3. #2
    Anonymous Gast

    Standard

    Du musst in der FB Schnittstelle das gleiche Array definieren. Ich würde das ganze über einen UDT mit deinen acht Wörtern lösen.
    Mit der UDT hast du den Vorteil, dass du sie 144 als Array im DB aufrufen kannst und einmal in deinem FB. ==> Namensgleichheit und keine Probleme bei der Symbolischen Adressierung.

    UDT: hier kannst du dir auch Tipparbeit Sparen wenn du Array's nimmst. Z.B.

    UDT1

    Zaehlerwert vom Typ Array [1..8] of INT


    DB 1

    Zaehler vom Typ Array [1..144] of UDT1


    FB 1 In/Out Variable

    Zaehler vom Typ UDT1

    Jetzt kannst du der FB symbolisch Db1.Zaehler[1] die kompletten 16 Byte zuweisen. Im Fb1 kannst du über Zaehler.Zaehlerwert[1] auf die einzelnen Wörter zugreifen.

    Natürlich verwendest du auch für Db1, Udt1, und Fb1 Symbolische Namen, dann sieht's richtig elegant aus. Bei Problemen nachfragen...

    Gruß, Christian

  4. #3
    Anonymous Gast

    Standard

    Ach noch was...

    Ich würde das ganze in SCL schreiben... Dann kannst du eine Schleife 1..144 programmieren und die Array's über den Schleifenzaehler instanzieren. Ruck Zuck ist die Schose fertig.

    Gruß, Christian

    PS: Für die Lösung mit nem Udt,Db und Fb hab ich dir ein kleines Beispiel Beispiel mit deinen 144 Zaehlern gemacht. Schreib mir ne PM mit deiner Mail, dann schick ich dir das Ganze.

  5. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    Wenn du kein SCL hast oder es nicht benutzen willst, gibt es auch noch eine weitere Variante:

    1. Du definierst ein UDT mit den 8 Zählerworten.
    2. Du erstellst einen DB, der diese UDT enthält (Array of UDT)
    3. Du übergibst im FB kein Any, sondern den Typ UDT als INOUT.

    Im FB kannst du dann auf die direkte Symbolik der UDT durchgreifen, um damit zu arbeiten. An die FB-Schnittstelle schreibst du dann jeweils (am besten symbolisch) die entsprechende UDTx aus dem DB.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. #5
    Anonymous Gast

    Standard

    @ Ralle
    siehe meine erste Antwort...

    Gruß, Christian

  7. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    @xhasx

    Da war wohl nur deine 2. Antwort bei mir hängengeblieben .
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. #7
    Registriert seit
    03.04.2004
    Beiträge
    121
    Danke
    7
    Erhielt 14 Danke für 10 Beiträge

    Standard

    So, ich bin der Gast ganz oben, irgendwas hat wohl meinen Namen verschluckt

    Schon mal Dank für die schnellen Antworten!

    @xhasx
    Wäre klasse wenn du mir das beispiel schicken könntest

    joerg_Salzmann@gmx.de


    Gruß Jörg

  9. #8
    Registriert seit
    14.10.2005
    Beiträge
    137
    Danke
    3
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    wäre es nicht das einfachste nur das Startbyte zu übergeben und innerhalb des Fbs mit indirekter Adressierung zu arbeiten?

    Torsten

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 07.08.2010, 14:17
  2. Datenbereich für FC festlegen...
    Von AndreK im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 29.07.2010, 12:43
  3. Datenbereich konsistent lesen
    Von Larry Laffer im Forum HMI
    Antworten: 42
    Letzter Beitrag: 10.09.2008, 17:10
  4. Datenbereich / Tabelle anzeigen
    Von Ingeborg im Forum HMI
    Antworten: 6
    Letzter Beitrag: 20.12.2007, 12:16
  5. Datenbereich LED OP15/ S5
    Von spsbroesel im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 14.12.2004, 08:35

Lesezeichen

Berechtigungen

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