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

Ergebnis 1 bis 8 von 8

Thema: UDT in FB statisch aufrufen

  1. #1
    Registriert seit
    12.08.2007
    Ort
    Berlin
    Beiträge
    68
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Werte Kollegen,

    da ich seit langer Zeit mit Schneider arbeite, habe ich etwas Rost angelegt...
    ich stehe vor einem Problem und komme nicht weiter, Bitte um Hilfe...

    Ich habe einen UDT erstellt mit verschiedenen Datentypen, im DB 90 wird dieser aufgerufen bzw. im Panel werden die Werte dann im DB 90 eingegeben.

    Im FB möchte ich bei positivem Startereignis die Werte aus dem DB90 in die statischen Werte vom FB kopieren und damit Arbeiten:

    Auf DB90

    U #Start
    FP #Flanke_Start
    SPBNB _001
    CALL "BLKMOV"
    SRCBLK :="Rampf_FDP"
    RET_VAL:=#statisch_Fehlercode
    DSTBLK :=#statische_Werte
    _001: NOP 0

    Der statische Wert ist vom Datentyp Array [1..10] of Word
    (Der Inhalt ist aber verschieden, BOOL, INT...) ist diese herangehensweise Richtig?

    Wie greife ich jetzt im FB auf die einzelnen Worte?
    Zitieren Zitieren UDT in FB statisch aufrufen  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Du solltest die gleiche UDT im DB als statische Variable einfügen und das Umkopieren dann in diese UDT vornehmen. Dann kannst du mit den definierten Variablen in der Stat UDT weiterarbeiten.

    Code:
          CALL  "BLKMOV"
           SRCBLK :=#inudt
           RET_VAL:=#retval
           DSTBLK :=#statudt
    wobei:

    inudt vom Typ UDTx im var IN ist
    statudt vom Typ Udtx im var STAT.

    Im Weiteren geht dann folgendes:

    L #statudt.PosNr_X

    Der Zugriff auf die UDT-Variablen ist so möglich.
    Statt inudt kannst du natürlich auch gleich den udt aus dem DB90 an SFC20 anlegen.
    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

  3. #3
    Registriert seit
    12.08.2007
    Ort
    Berlin
    Beiträge
    68
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für deine Antwort,
    die Vorgabe sollte so aussehen:
    Die UDT ist nur eine Vorlage, die z.B. Start->Bool, Drehzahl->Integer usw.
    IM DB90 rufe ich diese Vorlage auf, hier werden die Werte aus dem Panel vorgegeben, die sich ständig ändern können.
    Im FB wollte ich nur den inhalt des DB90 ins statische kopieren, um beim Start die z.Z. aktuellen Werten zu arbeiten, beim nächsten Start können schon wieder andere Werte vorhanden seien.
    Mein Problem ist, wie kopiere ich den Inhalt des DB90 in den FB und wie kann an die einzelnen Adressen ran?

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.710
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    ... das hat Ralle doch sehr schön beschrieben ...

    Du legst im STAT-Bereich deines FB dieselbe UDT noch einmal an :
    statudt vom Typ Udtx im var STAT.
    Als Eingangs-Parameter hast du auch diese UDT :
    inudt vom Typ UDTx im var IN
    dann kopierst du dir die Daten, die du dem FB beim Aufruf an inUDT übergeben hast in deinen STAT-Bereich :
    CALL "BLKMOV"
    SRCBLK :=#inudt
    RET_VAL:=#retval
    DSTBLK :=#statudt
    Nun kannst du auf die Inhalte der Quelle im FB (symbolisch) zugreifen :
    L #statudt.PosNr_X
    Alle diese Zitate stammen aus dem Beitrag von Ralle.
    Das einzige, was Ralle vergessen hat ist die Übergabe an den FB. Das Machst du am Besten symbolisch :
    Code:
    call FB xyz , DB 1213
      inUDT : #Daten_DB.Unterdaten_Block_UDT
    Die von mir verwendeten namen sind hier natürlich nur Platzhalter für die Namen, die du verwendest ...

    Gruß
    LL

  5. #5
    Registriert seit
    12.08.2007
    Ort
    Berlin
    Beiträge
    68
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    sorry, habe verstanden, nur wo muß ich den Aufruf:

    call FB xyz , DB 1213
    inUDT : #Daten_DB.Unterdaten_Block_UDT
    machen? Im OB1 ?

    Beim Probieren fällt mir noch was ein...
    die aktuellen Werte stehen doch im DB90, die UDT ist doch nur eine Vorlage für DB90,
    warum lädt man also den UDT im FB90 auf, oder stehen die Werte auch im UDT, wenn man es in DB90 eingibt???
    Geändert von Bitte_ein_Bit (24.11.2008 um 23:38 Uhr)

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Zitat Zitat von Bitte_ein_Bit Beitrag anzeigen
    sorry, habe verstanden, nur wo muß ich den Aufruf:

    call FB xyz , DB 1213
    inUDT : #Daten_DB.Unterdaten_Block_UDT
    machen? Im OB1 ?
    Entweder im OB1 oder in einem anderen FC/FB, der dann aber seinerseits im OB1 aufgerufen werden muß.
    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

  7. #7
    Registriert seit
    12.08.2007
    Ort
    Berlin
    Beiträge
    68
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank Ralle,

    hatte mein Beitrag noch geändert, hast du wohl übersehen...

    Beim Probieren fällt mir noch was ein...
    die aktuellen Werte stehen doch im DB90, die UDT ist doch nur eine Vorlage für DB90,
    warum lädt man also den UDT im FB90 auf, oder stehen die Werte auch im UDT, wenn man es in DB90 eingibt???

    Den Aufruf bekomme ich nicht hin im OB1:
    call FB 90 , DB 90
    inUDT : #Daten_DB.Udt_Rampf
    kannst du Bitte noch erklären, was ich hier schreiben muß?

    Mein UDT heißt: Udt_Rampf, im FB90 als In Var. SPS1, stat. var: SPS

  8. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Eine UDT ist tatsächlich erstmal nur eine definierte Datenstrucktur. Diese kann man nun einerseits im DB einsetzen um sich die mehrmalige Definition gleicher Variablenstruckturen zu sparen und um auf die Elemente dieser Strucktur einfach zugreifen zu können. Eine schöne Eigenschaft ist es, daß man einen solche UDT auch im Schnittstellenbereich eines FB/FC eintragen kann. Dann hat man die Möglichkeit diese Daten außen an den FB über den einfachen Eintrag "My_DB".MyUDT anzutragen und somit dem FB/FC zu übergeben. Im Prinzip kann man dann im FB/FC genau mit diesen Daten weiterarbeiten. Tatsächlich liegen die Daten die ganze Zeit über im DB, in welchem die UDT eingebettet ist. Willst du nun die Daten gesondert im Stat-Bereich halten und bearbeiten, kannst du auch dort die selbe UDT als Datenstrucktur nutzen, die Daten dann auch rel. einfach umkopieren und auf die dann Stat-Daten zugreifen. Die Statischen Daten liegen im Instanz-DB des FB.

    Zu deinem Aufruf:

    Im Daten_DB mußt du eine Variable anlegen, UDT_RAMPF, welche dann als Typ deine definierte UDT erhält. Dann solltest du auch

    "Daten_DB".UDT_RAMPF

    an deinen FB antragen können, allerdings nur, wenn im FB im IN-Bereich die Variable InUDT definiert ist und ebenfalls als Datentyp dieselbe UDT erhalten hat.

    PS: Anführungszeichen nicht vergessen: "Daten_DB".UDT_RAMPF

    Code:
    call FB 90 , DB 90
    inUDT : "Daten_DB".Udt_Rampf
    UDT_RAMPF ist die Variable, welche du im DB benennst. Die UDT selbst hast einen anderen symbolischen Namen, z.Bsp. My_UDT !!!
    Also nicht den symbolischen Namen der UDT, mit der Variable im DB, welche dann vom Typ der UDT ist, verwechseln!
    Geändert von Ralle (25.11.2008 um 01:16 Uhr)
    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

Ähnliche Themen

  1. FB im FB Aufrufen mit SCL
    Von paula23 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 08.02.2011, 12:33
  2. statisch 0 und 1
    Von tuppes38 im Forum Programmierstrategien
    Antworten: 38
    Letzter Beitrag: 05.09.2009, 10:07
  3. statisch Heap erzeugen/löschen bei WinCC start/ende
    Von BorisDieKlinge80 im Forum HMI
    Antworten: 2
    Letzter Beitrag: 10.06.2008, 10:35
  4. FC Aufrufen in S5
    Von KallDall im Forum Programmierstrategien
    Antworten: 2
    Letzter Beitrag: 26.09.2007, 12:49
  5. WinCC flex Variable statisch in DB schreiben
    Von geduldiger im Forum HMI
    Antworten: 14
    Letzter Beitrag: 05.07.2007, 13:56

Lesezeichen

Berechtigungen

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