Jump to content
  • Sign in to follow this  

    Tia Portal – Verschiedene Instanzen zum Aufrufen eines Funktionsblocks

       (0 reviews)

    caixiaofeng

    In einem früheren Artikel haben wir besprochen, was ein Funktionsblock (FB) ist, wie er in einem SPS-Programm funktioniert und wie man ihn erstellt und verwendet. In diesem Artikel sprechen wir über Datenblockinstanzen verschiedener Funktionsblocktypen im Siemens Tia Portal und wann welcher Typ verwendet wird.

    Inhalt:

    • Was ist ein Funktionsblock (FB)?
    • Verschiedene Optionen für Dateninstanzen.
    • Einzelinstanz.
    • Parameterinstanz.
    • Mehrfachinstanz.

    Was ist ein Funktionsblock?

    Ein Funktionsblock oder FB ist einfach ein Block, der Codelogik enthält. Sie verwenden diesen FB, um durch die darin geschriebenen Codeteile bestimmte Funktionen zu erreichen.

    Wenn Sie einen Funktionsblock in Ihren Code aufrufen, werden Sie aufgefordert, einen Datenblock (auch Dateninstanz genannt) zuzuweisen, der diesem FB zugeordnet werden soll, um die Werte der FB-Parameter zu speichern. Nicht alle Parameter innerhalb eines FB werden in der Dateninstanz gespeichert, aber darauf kommen wir später zurück.

    Beim Aufrufen eines Funktionsblocks haben Sie 3 verschiedene Optionen, um diesem Funktionsaufruf eine Datenblockinstanz zuzuordnen. Diese verschiedenen Optionen hängen davon ab, wo Sie Ihren FB aufrufen.

    Kurz gesagt: Ein Funktionsblock-FB ist im Grunde ein Funktions-FC mit einem dedizierten Datenblock-DB. Dieser Datenblock wird zum Speichern der Werte der Funktionsblockparameter verwendet.

    Verschiedene Optionen für Dateninstanzen

    Wir haben 3 verschiedene Optionen für eine Dateninstanz eines Funktionsblocks, und zwar:

    • Einzelinstanz.
    • Parameterinstanz.
    • Mehrfachinstanz.

    Die drei verschiedenen Aufrufdateninstanzen stammen aus den 3 verschiedenen Aufrufmethoden:

    • Sie können einen Funktionsblock-FB innerhalb des Haupt-OB1 aufrufen, wodurch Sie die folgenden Optionen haben:
    • Einzelinstanz.
    • Sie können den Funktionsblock FB innerhalb einer Funktion FC aufrufen, wodurch Sie zwei Optionen haben:
    • Einzelinstanz
    • Parameterinstanz
    • Sie können den Funktionsblock innerhalb eines anderen Funktionsblocks aufrufen, wodurch Sie die drei verfügbaren Optionen zum Erstellen einer Dateninstanz haben:
    • Einzelinstanz
    • Parameterinstanz
    • Mehrere Instanzen

    Einzelne Dateninstanz

    Beginnen wir zunächst mit der Erstellung eines Funktionsblocks FB. Wie bereits erwähnt, erstellen wir einen Funktionsblock, indem wir auf „Neuen Block hinzufügen“ klicken und den gewünschten Blocktyp auswählen. Siehe Abbildung 1.

    150-1.gif

    Abbildung 1 – Erstellen eines Funktionsblocks FB

    Rufen wir nun den wiederverwendbaren FB auf, den wir in unserem Haupt-OB1 erstellt haben. Siehe Abbildung 2.

    150-2.gif

    Abbildung 2 – Aufrufen des FB innerhalb des Haupt-OB1

    Wie Sie im vorherigen Bild sehen, werden Sie beim Aufrufen eines FB innerhalb des Haupt-OB1 aufgefordert, eine Dateninstanz zuzuweisen, die diesem FB-Aufruf zugeordnet werden soll. In diesem Fall gibt es nur eine Option, nämlich die Einzelinstanz.

    Nach Auswahl der Einzelinstanzoption wird ein Datenblock erstellt und mit dem FB-Aufruf verknüpft. Siehe Abbildung 3.

    150-3.gif

    Abbildung 3 – Einzelinstanz erstellt

    Die erstellte Einzelinstanz wird verwendet, um die Werte einiger FB-Parameter zu speichern. Wie die Eingänge, Ausgänge, In Out und statischen Parameter.

    Andere Parameter des FB werden nicht gespeichert, wie Temperatur und Konstanten. Siehe Abbildungen 4 und 5.

    150-4.gif

    Abbildung 4 – Daten werden in der Dateninstanz gespeichert

    150-5.gif

    Abbildung 5 – Daten werden vom FB in der Dateninstanz gespeichert.

    Erstellen wir nun eine einfache Logik innerhalb des FB, um die Dateninstanzen besser zu verstehen. Diese Logik fügt einer statischen Variable einen konstanten Wert von 15 hinzu und verschiebt das Ergebnis dann zum Ausgang. Siehe Bild 6.

    150-6.gif

    Bild 6 – Erstellen Sie eine einfache Logik

    Gehen Sie nun zurück zum Haupt-OB1 und sehen Sie sich an, wie Ihr FB-Aufruf jetzt aussieht. Siehe Bild 7.

    150-7.gif

    Bild 7 – Aktualisieren Sie den FB-Aufruf nach jeder Änderung

    Jede Änderung, die Sie an der Logik innerhalb des FB vornehmen, führt dazu, dass der Funktionsblockaufruf aktualisiert werden muss, damit die vorgenommenen Änderungen angewendet werden können.

    Sie können den Blockaufruf aktualisieren, indem Sie mit der rechten Maustaste auf den FB-Aufruf klicken und die Option „Blockaufruf aktualisieren“ drücken oder indem Sie Ihren SPS-Code neu kompilieren. Siehe Bild 8.

    150-8.gif

    Bild 8 – Aktualisieren des FB-Aufrufs

    Nach der Aktualisierung des Blockaufrufs werden die im FB-Code vorgenommenen Änderungen angewendet und im Blockaufruf verwendet. Wie Sie in Bild 9 sehen.

    Der FB erwartet nun ein Eingangssignal vom Typ bool und gibt einen Ausgang vom Typ int aus.

    150-9.gif

    Bild 9 – Eingänge und Ausgänge sind nun mit dem FB-Aufruf verknüpft

    Lassen Sie uns unseren Code simulieren und sehen, wie sich die SPS verhält. Sehen Sie sich die nächste Animation an, die eine einfache Simulation der bisherigen SPS-Logik zeigt.

    spacer.png

    Wie Sie in der Animation sehen, wird die Funktion immer dann ausgeführt, wenn das Startsignal TRUE ist, und der Ausgang ändert sich weiter. Und sobald das Startsignal nicht mehr verfügbar ist, bleibt der Ausgang auf dem zuletzt aufgezeichneten Wert.

    Die Verwendung der Dateninstanz besteht hier darin, dass die Werte der statischen Variablen und der Ausgangsvariablen in der einzelnen Instanz gespeichert werden, sodass die Funktion bei erneutem Startsignal mit den zuletzt aufgezeichneten Werten fortgesetzt wird.

    Sehr wichtiger Hinweis

    Sie sollten niemals dieselbe einzelne Instanz für zwei verschiedene Aufrufe eines FBs verwenden. Siehe die nächste Animation.

    spacer.png

    Wie Sie in der Animation sehen, haben wir zwei verschiedene FB-Aufrufe, aber beide Aufrufe sind mit derselben einzelnen Instanz verknüpft, weshalb sich der Output2-Wert mit Output1 änderte, selbst wenn das Start2-Signal FALSE war.

    Wie zu erwarten, wird die Änderung der Dateninstanz des 1. Aufrufs auch im 2. Aufruf beeinflusst, da sie denselben Speicherblock haben. Siehe Abbildung 10.

    150-12.gif

    Abbildung 10 – Verwenden Sie niemals dieselbe Dateninstanz mit verschiedenen FB-Aufrufen

    Wenn Sie dieselbe Dateninstanz mit verschiedenen FB-Aufrufen verwendet haben, ist Ihr Funktionsblock nicht mehr wiederverwendbar. Auch wenn die Ein-/Ausgabeparameter für jeden einzelnen FB-Aufruf unterschiedlich sind. Wie Sie im letzten Video (Animation) gesehen haben, hatten beide Aufrufe dieselben Ergebnisse, obwohl der 2. Aufruf nicht einmal ein Aktivierungseingangssignal hat.

    Ein weiterer sehr wichtiger Hinweis

    Wir haben bereits erwähnt, dass Sie, wenn Sie Ihren FB von einem übergeordneten FC aus aufrufen, zwei Optionen für die zugehörige Dateninstanz haben: die Einzelinstanz und die Parameterinstanz. Siehe Abbildung 11.

    150-13.gif

    Abbildung 11 – Verwenden einer Einzelinstanz mit einem von einem FC aus aufgerufenen FB

    Wenn dies passiert und Sie einen FB innerhalb eines FC aufrufen, sollten Sie für Ihre FBs niemals eine Einzelinstanz verwenden. Um zu erfahren, warum das so ist, siehe Abbildung 12

    150-14.gif

    Abbildung 12 – Mehrmaliges Aufrufen des übergeordneten FC

    Wie Sie in Abbildung 12 sehen, werden Sie nicht aufgefordert, einen Datenblock zuzuweisen, wenn Sie den übergeordneten FC in Ihrer Logik mehr als einmal aufrufen, da FCs keinen benötigen.

    Sie wissen jedoch, dass sich innerhalb des FC ein aufgerufener FB befindet, diesem FB ist eine Einzelinstanz zugeordnet. Die 3 FC-Aufrufe haben jetzt also dieselbe Dateninstanz für den FB-Aufruf. Ihre Funktion FC ist also nicht mehr wiederverwendbar.

    Was tun? Wenn Sie einen FB innerhalb eines FC aufrufen müssen, ist die beste Option die Verwendung der Parameterinstanz.

    Parameterinstanz

    Wie bereits erwähnt, sollten Sie, wenn Sie einen FB innerhalb eines FC aufrufen, nicht die einzelne Instanz wählen, sondern die Parameterinstanz ist für Ihre Wiederverwendbarkeit besser.

    Eine Parameterinstanz speichert die Dateninstanz des aufgerufenen FB im In-Out-Bereich der FC-Blockschnittstelle. So können Sie für jeden FC-Aufruf eine neue Dateninstanz eingeben. Siehe Bilder 13 und 14.

    150-15.gif

    Bild 13 – Zuweisen einer Parameterinstanz beim Aufrufen eines FB innerhalb eines FC

    150-16.gif

    Bild 14 – Jeder FC-Aufruf erfordert eine neue Dateninstanz

    Wie Sie im vorherigen Bild sehen, wird jedes Mal, wenn Sie den FC innerhalb Ihres Programms aufrufen, eine Dateninstanz für den wiederverwendbaren FB innerhalb des FC angefordert.

    Auf diese Weise müssen Sie die Dateninstanz jedoch selbst erstellen. Siehe Bild 15.

    150-17.gif

    Bild 15 – Erstellen einer neuen Dateninstanz

    Um eine neue Dateninstanz zu erstellen, gehen Sie genauso vor wie beim Erstellen eines FC oder eines FB, wählen dieses Mal jedoch die DB-Option. Und stellen Sie sicher, dass Sie den DB-Typ so auswählen, dass er mit dem des aufgerufenen FB übereinstimmt.

    Jetzt kann Ihr FC beliebig oft wiederverwendet werden, Sie müssen lediglich für jeden Aufruf eine Instanz erstellen. Siehe Abbildung 16.

    150-18.gif

    Abbildung 16 – Weisen Sie den DB dem FC-Aufruf zu

    Multiinstanzdatenbank

    Eine Multiinstanzdatenbank bedeutet einfach, dass der DB des aufgerufenen FB im DB des aufrufenden FBs höherer Ebene gespeichert wird. Diese Option ist nur verfügbar, wenn Sie einen FB von einem anderen FB aus aufrufen.

    Lassen Sie uns einen weiteren FB erstellen, um ihn als FB höherer Ebene zu verwenden.

    Rufen Sie diesen HigherLevelFB nach dem Erstellen vom Haupt-OB1 aus auf. Natürlich ist die einzige Aufrufoption eine einzelne Instanz, wie zuvor gezeigt. Siehe Abbildung 17.

    150-19.gif

    Abbildung 17 – Rufen Sie den HigherLevelFB vom Haupt-OB1 aus auf

    Rufen Sie nun den ReusableFB vom HigherLevelFB aus auf. Und wählen Sie die Option Multiinstanz. Siehe Abbildung 18.

    150-20.gif

    Abbildung 18 – Mehrfachinstanz-DB zuweisen

    Wenn Sie die Option Mehrfachinstanz wählen, wird die erstellte DB in den statischen Parametern des aufrufenden FB gespeichert. Siehe Abbildung 19.

    150-21.gif

    Abbildung 19 – Instanzen werden in statischen Parametern gespeichert

    Sie können den wiederverwendbaren FB viele Male aufrufen, bei jedem Aufruf wird die Mehrfachinstanz im statischen Parameter gespeichert. Siehe Abbildung 20.

    150-22.gif

    Abbildung 20 – Wiederverwendbaren FB viele Male aufrufen

    Wie Sie sehen, wird die Dateninstanz des FB auf niedrigerer Ebene in der Dateninstanz des FB auf höherer Ebene gespeichert. Dies ist am besten für eine bessere Programmstruktur und eine leicht lesbare Logik.

    Fazit

    Wenn Sie Funktionsblöcke in Ihrem Code erstellen, müssen Sie jedem FB-Aufruf, den Sie in Ihrer Logik vornehmen, einen Datenblock zuordnen. Dieser Datenblock oder auch Dateninstanz genannt, hat je nach Art des Blocks, der Ihren FB aufruft, unterschiedliche Optionen.

    Seien Sie bei der Auswahl des Dateninstanztyps vorsichtig, da einige Optionen für Ihren Fall möglicherweise nicht geeignet sind, wie wir zuvor gezeigt haben. Und manchmal kann dies zu Problemen in Ihrer Logik führen und Ihre Funktion kann nicht mehr wiederverwendet werden.

    Die Verwendung mehrerer Instanzen kann Ihnen dabei helfen, Ihre Programmstruktur besser zu organisieren, da alle aufgerufenen FBs ihre DBs im aufrufenden Haupt-FB speichern.

    Sign in to follow this  


    User Feedback

    Create an account or sign in to leave a review

    You need to be a member in order to leave a review

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now

    There are no reviews to display.


Apply for friendship links:WhatsApp or E-mail: admin@plchmis.com
×
×
  • Create New...