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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: Schleife über FB

  1. #1
    Registriert seit
    04.11.2013
    Beiträge
    10
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich rufe innerhalb eines Multiinstanz FB mehrfach den selben FB, allerdings mit verschiedenen instanzen auf.
    Ist es Möglich diese in einem Array unterzubringen und dann über eine Schleife aufzurufen?

    Ich versuche das mal in einem ganz einfachen Bsp darzustellen:

    Aktuell:

    Code:
    CALL #meinFB_1
      In := M0.0
      Out := M0.1
    
    CALL #meinFB_2
      In := M1.0
      Out := M1.1
    
    CALL #meinFB_3
      In := M2.0
      Out := M2.1
    
    U #meinFB_1.Wert
    U #meinFB_2.Wert
    U #meinFB_3.Wert
    = m5.0
    Das würde ich gerne so zusammenfassen:
    (Ich schreibe bas mal in Pseudocode: )

    Code:
    L 0
    T "index"
    
    L  3
    NEXT: T
    
      CALL #meinFB_Array["index"]
        In := InArray["index"]
        Out := OutArray["index"]
    
    L "index"
    LOOP NEXT
    
    U #meinFB_Array[0].Wert
    U #meinFB_Array[1].Wert
    U #meinFB_Array[2].Wert
    = m5.0
    Das mit den Arrays für ein und Ausgansdaten ist noch recht einfach aber wie macht man das für die DBs?
    Falls das geht kann man die Schleife dann auch dynamisch erweitern oder muss diese von anfang an festgeletg werden?
    Ich hoffe ich konnte verständlich ausdrücken worum es mir geht!

    Schöne Grüße
    chomp
    Zitieren Zitieren Schleife über FB  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Hallo,
    dazu gab es mal von Thomas_V2.1 einen interessanten Beitrag - vielleicht ist das ja etwas für dich ...

    Gruß
    Larry

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

    chomp (29.01.2014)

  4. #3
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    .
    @chomp

    Du rufst in deiner AWL-Schleife den FB OHNE
    Instanz-DB und OHNE Bausteinparameter mit
    Hilfe deiner Indexvariablen auf:

    Code:
    ...
    
    UC FB  [#index]
    ...
    Der FB wird hier ohne Instanz-DB aufgerufen und
    darf damit auch keine Bausteinparameter und keine
    statischen Lokaldaten haben.

    Du musst also dafür sorgen (wie im Beispiel von
    Thomas V2.1 ), das der FB bei jedem Aufruf mit dem
    gleichen festen/seperatem Datenbereich arbeitet,
    den du vor seinem Aufruf füllen und nachher wieder
    in dein ARRAY zurückkopieren musst.

    Zum Füllen und Kopieren in den richtigen Array-Bereich
    benutzt du auch deinen #index.
    kind regards
    SoftMachine

  5. #4
    chomp ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    04.11.2013
    Beiträge
    10
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Ihr zwei,

    nach genau so einer Lösung habe ich gesucht!
    Ich probie das mal!

    Vielen Dank!

    chomp

  6. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von SoftMachine Beitrag anzeigen
    Code:
    ...
    
    UC FB  [#index]
    ...
    Damit rufst Du allerdings NICHT verschiedene Instanzen eines FB auf sondern verschiedene FB<nr>, deren nr in #index steht.


    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Daumen runter

    Im übrigen halte ich nichts von solchen Schweinereien, die aus einer einmaligen Schreibfaulheit des Programmierers resultieren aber für immer das Programm total undurchsichtig machen.
    Außerdem ist gar nicht sicher, ob dabei überhaupt irgendwas "gespart" wird, wenn die FB-Aufrufe mit verschiedenen Übergabeparametern versorgt werden müssen.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Eine saublöde Idee  

  8. #7
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    .
    Zitat Zitat von PN/DP Beitrag anzeigen
    Damit rufst Du allerdings NICHT verschiedene Instanzen eines FB auf sondern verschiedene FB<nr>, deren nr in #index steht.
    Harald
    Hallo Harald,

    ja, genau das habe ich beschrieben.

    Der FB hat dann keine Instanz und keine
    Bausteinparameter mehr, die müssen wie
    bei Larry´s Beispiel von Thomas V2.1 auf
    anderen Weg bereitgestellt werden.

    Gern kann der TE auch einen FB mit fester
    Nummer
    in ähnlicher Weise programmieren,
    der #index wird dann nur für die Adressierung
    der Array-Bereiche benutzt.

    Das geht auch.



    Zitat Zitat von PN/DP Beitrag anzeigen
    Im übrigen halte ich nichts von solchen Schweinereien, die aus einer einmaligen Schreibfaulheit des Programmierers resultieren aber für immer das Programm total undurchsichtig machen.
    Außerdem ist gar nicht sicher, ob dabei überhaupt irgendwas "gespart" wird, wenn die FB-Aufrufe mit verschiedenen Übergabeparametern versorgt werden müssen.

    Harald

    Darüber hinaus ist das lediglich eine mögliche
    Lösung auf die Frage des TE, ob nun
    "Schweinerei" oder "Entenei".

    Und der Speicher für die Übergabeparameter
    wird doch so oder so schon in seinem Array
    vorgehalten.

    Gruss
    kind regards
    SoftMachine

  9. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von SoftMachine Beitrag anzeigen
    Code:
    ...
    
    UC FB  [#index]
    ...
    Zitat Zitat von SoftMachine Beitrag anzeigen
    Zitat Zitat von PN/DP Beitrag anzeigen
    Damit rufst Du allerdings NICHT verschiedene Instanzen eines FB auf sondern verschiedene FB<nr>, deren nr in #index steht.
    Harald
    ja, genau das habe ich beschrieben.
    Warum? Das hat der TE doch gar nicht gefragt, siehe
    Zitat Zitat von chomp Beitrag anzeigen
    ich rufe innerhalb eines Multiinstanz FB mehrfach den selben FB, allerdings mit verschiedenen instanzen auf.
    Ist es Möglich diese in einem Array unterzubringen und dann über eine Schleife aufzurufen?

    Zitat Zitat von SoftMachine Beitrag anzeigen
    Gern kann der TE auch einen FB mit fester
    Nummer
    in ähnlicher Weise programmieren,
    der #index wird dann nur für die Adressierung
    der Array-Bereiche benutzt.

    Das geht auch.
    Das geht eben nicht mit Deinem "UC FB [#index]". Deshalb ja auch das aufwändige Kopieren der kompletten Instanzdaten (Übergabeparameter + STAT!) zwischen dem Instanzen-Array und der Ausführ-Instanz im Codebeispiel von Thomas_V2.1


    Zitat Zitat von SoftMachine Beitrag anzeigen
    Und der Speicher für die Übergabeparameter
    wird doch so oder so schon in seinem Array
    vorgehalten.
    Es geht nicht um den Speicherplatz sondern: Der Wert der unterschiedlichen Aktualparameter muß in die Array-Instanzen kopiert werden und dann nochmal vom Array in die für den Aufruf genutzte Instanz. Was daran wohl vorteilhaft sein soll??? Da kann man doch auch ganz klassisch mit weniger Aufwand und schön übersichtlich jeden Instanz-Aufruf einzeln ausprogrammieren.

    Harald
    Geändert von PN/DP (24.01.2014 um 18:24 Uhr)
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.405 Danke für 2.002 Beiträge

    Standard

    Lassen wir das doch mal außen vor ...
    Es ging hier um eine Möglichkeit und das wäre eine - wenn auch unschön, das gebe ich zu. Ich hatte aber auch schon ein paar mal den Wunsch nach einem "Array of FB". Es ist eigentlich idiotisch, dass Siemens dies nicht ermöglicht.
    Ich habe das dann anders gelösst (trotzdem wäre es schön gewesen ...)

    Gruß
    Larry

  11. #10
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    .

    Hallo Harald !

    Die eigentliche Antwort für den TE ist der
    UC-Aufruf in seiner AWL-Programmierung,
    der ihn seiner Instanz-DB-Übergabe entledigt.

    Und beim UC-Aufruf gibt es keine Instanzen
    mehr.

    Alles weitere ist bereits genannt worden.

    Gruss
    kind regards
    SoftMachine

Ähnliche Themen

  1. Step 7 Unterschied zwischen IF- Schleife und While-Schleife
    Von Vokal12 im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 29.10.2013, 22:52
  2. Step 7 Schleife ?
    Von byfluffy im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 18.10.2013, 12:09
  3. Antworten: 23
    Letzter Beitrag: 12.06.2011, 07:30
  4. for-Schleife
    Von fai004 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 26.04.2009, 19:14
  5. For Schleife in VB 6
    Von godi im Forum Hochsprachen - OPC
    Antworten: 8
    Letzter Beitrag: 14.06.2007, 10:03

Lesezeichen

Berechtigungen

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