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

Results 1 to 9 of 9

Thread: Instanz Baustein immer ein kompletter DB ??

  1. #1
    Join Date
    13.04.2008
    Location
    Großraum KA
    Posts
    1,034
    Danke
    58
    Erhielt 132 Danke für 116 Beiträge

    Default


    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)
    Reply With Quote Reply With Quote Instanz Baustein immer ein kompletter DB ??  

  2. #2
    Join Date
    08.04.2008
    Location
    Köln
    Posts
    846
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Default

    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
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

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

  4. #4
    Join Date
    17.10.2007
    Location
    35043 Marburg
    Posts
    176
    Danke
    4
    Erhielt 30 Danke für 29 Beiträge

    Default

    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
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    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]
    Last edited by vierlagig; 30.01.2009 at 09:08.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. #6
    Join Date
    17.10.2007
    Location
    35043 Marburg
    Posts
    176
    Danke
    4
    Erhielt 30 Danke für 29 Beiträge

    Default

    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
    Join Date
    22.03.2007
    Location
    Detmold (im Lipperland)
    Posts
    12,402
    Danke
    422
    Erhielt 2,536 Danke für 2,108 Beiträge

    Default

    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
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    Quote Originally Posted by Larry Laffer View Post
    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
    Join Date
    01.10.2007
    Location
    Waiblingen
    Posts
    3,557
    Danke
    767
    Erhielt 537 Danke für 420 Beiträge

    Default


    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

Similar Threads

  1. Wofür Immer-Ein oder Immer-Aus Merker
    By det in forum Programmierstrategien
    Replies: 17
    Last Post: 04.12.2019, 23:29
  2. Replies: 9
    Last Post: 22.08.2019, 18:25
  3. TIA TIA Instanz-DB werden IMMER neu initialisiert
    By Senator42 in forum Simatic
    Replies: 20
    Last Post: 01.08.2018, 16:15
  4. TIA Kompletter Anfänger , ein paar Fragen
    By sps31 in forum Simatic
    Replies: 21
    Last Post: 26.05.2014, 15:12
  5. Replies: 3
    Last Post: 21.02.2014, 08:49

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •