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

Ergebnis 1 bis 9 von 9

Thema: Instanz Baustein immer ein kompletter DB ??

  1. #1
    Registriert seit
    13.04.2008
    Ort
    Großraum KA
    Beiträge
    963
    Danke
    52
    Erhielt 128 Danke für 112 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich muss einen kleineren FB ( ca. 20 Zeilen ) über 50 mal in meinem Programm aufrufen. Muss ich jetzt wirklich 50 DBs dafür opfern oder lässt sich das irgendwie in einem DB block zB. mit UDTs bündeln ??

    peter(R)
    Zitieren Zitieren Instanz Baustein immer ein kompletter DB ??  

  2. #2
    Registriert seit
    08.04.2008
    Ort
    Köln
    Beiträge
    844
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Standard

    Hallo Peter,

    Du kannst auch alles in einen DB packen. Hier ist ein Beispiel dafür, allerdings mit dem FB "TCONT_CP".

    http://www.sps-forum.de/showpost.php...68&postcount=7

    Grüße
    Gebs

  3. #3
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    multiinstanz oder UC
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #4
    Registriert seit
    17.10.2007
    Ort
    35043 Marburg
    Beiträge
    176
    Danke
    4
    Erhielt 30 Danke für 29 Beiträge

    Standard

    Hallo,

    wenn du deinen FB innerhalb eines Bausteins öfter aufrufst kannst du das über eine Multiinstanz machen. Dafür muss aber der aufrufende Baustein ein FB sein. Im Deklarationsteil unter Stat kannst du dann deinen FB als Variable anlegen Datentyp FB<Nr>. Musst aber vorher checken ob dein Baustein multiinstanzfähig ist, d.h. AR2 muss nach verlassen des Bausteins den gleichen Wert wie beim Aufruf haben und auch das DB Register 2 (DI) muss wieder den gleichen Wert haben. Wenn du innerhalb deines FB's auf die Adressen deiner Parameter (Pointer) zugreifst musst du den Offset aus AR2 dazu addieren. Ein FB als Multiinstanz weiß ja nicht das er nicht unbedingt bei DI Adresse 0.0 anfängt. Der Versatz steht dann im AR2.
    Grüße...
    Paradox ist, wenn sich jemand im Handumdrehen den Fuß bricht.

  5. #5
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    wo simatiker grad von AR2 anfängt

    wenn du die FBs in FCs aufrufst:

    - bastel dir in deinem FB das AR2 für den Zugriff auf einen globalen DB als IDB selber. brauchste eigentlich nur einen index als aufrufnummer um die richtige stelle im DB zu finden. den aufruf machste dann wie oben schon mal angedeutet per UC (wobei ich oben auf den aufruf aus einem FB eingehen wollte)

    [edit] blödsinn ... mit UC bekommste ja keine daten rüber ... gott, ist das früh heut
    hat der baustein überhaupt ne schnittstelle?

    wenn er eine hat, dann wird das ganze unterfangen ein wenig aufwendiger, denn die müßteste vorher in den IDB (IN) kopieren, damit du damit arbeiten kannst und nachher aus dem IDB (OUT) kopieren[/edit]
    Geändert von vierlagig (30.01.2009 um 09:08 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. #6
    Registriert seit
    17.10.2007
    Ort
    35043 Marburg
    Beiträge
    176
    Danke
    4
    Erhielt 30 Danke für 29 Beiträge

    Standard

    mit UDT's lässt sich das ganze dann aber auch als FC realisieren, ne UDT anlegen die in einen DB packen und an die FC als IN_OUT. Und dann den Pointer auf den Anfang der jeweiligen UDT im DB am IN_OUT Parameter deiner FC beim Aufruf.
    Grüße...
    Paradox ist, wenn sich jemand im Handumdrehen den Fuß bricht.

  7. #7
    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

    Hallo,
    also ich finde den Vorschlag von Simatiker (alle FB-Aufrufe als Multiinstanz in einen neuen FB packen) wesentlich professioneller. Durch die Sache mit den UC-Aufrufen blickt doch irgendwann keiner mehr durch - ist aber Ansichtssache ...

    Gruß
    LL

  8. #8
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Durch die Sache mit den UC-Aufrufen blickt doch irgendwann keiner mehr durch - ist aber Ansichtssache ...
    oder Absichtssache
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  9. #9
    Registriert seit
    01.10.2007
    Ort
    Waiblingen
    Beiträge
    3.317
    Danke
    767
    Erhielt 536 Danke für 419 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Beispiel:
    Code:
    FUNCTION_BLOCK "Beispiel_FB"
    TITLE =
    VERSION : 0.1
    
    VAR_INPUT
      Befehl_setze : BOOL ; 
      Befehl_ruecksetze : BOOL ; 
    END_VAR
    VAR_OUTPUT
      Signalzustand : BOOL ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =
          U     #Befehl_setze; 
          S     #Signalzustand; 
          U     #Befehl_ruecksetze; 
          R     #Signalzustand; 
    END_FUNCTION_BLOCK
    FUNCTION_BLOCK "Aufruf-FB"
    TITLE =
    VERSION : 0.1
    
    VAR
      Instanz1 : "Beispiel_FB"; 
      Instanz2 : "Beispiel_FB"; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =
          CALL #Instanz1 ;
          CALL #Instanz2 ;
    END_FUNCTION_BLOCK
    DATA_BLOCK "Aufruf_Instanz"
    TITLE =
    VERSION : 0.0
    "Aufruf-FB"
    BEGIN
       Instanz1.Befehl_setze := FALSE; 
       Instanz1.Befehl_ruecksetze := FALSE; 
       Instanz1.Signalzustand := FALSE; 
       Instanz2.Befehl_setze := FALSE; 
       Instanz2.Befehl_ruecksetze := FALSE; 
       Instanz2.Signalzustand := FALSE; 
    END_DATA_BLOCK
    ORGANIZATION_BLOCK OB 1
    TITLE = "Main Program Sweep (Cycle)"
    VERSION : 0.1
    
    VAR_TEMP
      OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
      OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
      OB1_PRIORITY : BYTE ; //Priority of OB Execution
      OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
      OB1_RESERVED_1 : BYTE ; //Reserved for system
      OB1_RESERVED_2 : BYTE ; //Reserved for system
      OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
      OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
      OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
      OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
    END_VAR
    BEGIN
    NETWORK
    TITLE =
          CALL "Aufruf-FB" , "Aufruf_Instanz" ;
    END_ORGANIZATION_BLOCK

Ähnliche Themen

  1. Instanz-DB
    Von SPS_NEU im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 18.03.2009, 14:08
  2. Instanz-DBs -> VAT
    Von SPSKILLER im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 02.06.2008, 03:20
  3. Antworten: 13
    Letzter Beitrag: 18.01.2008, 12:47
  4. Instanz-DB
    Von titinparma im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 15.10.2007, 17:56
  5. Instanz DB
    Von Flo im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 14.10.2006, 20:04

Lesezeichen

Berechtigungen

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