SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden

Dieser Artikel beschreibt, wie eine SPS eine Methode, die von einem anderen Modul bereitgestellt wird, aufrufen kann - hier: das zuvor definierte C++ Modul.

Schritt 1: Verfügbare Schnittstellen überprüfen

Option 1:

1. Navigieren Sie zur C++ Modulinstanz.
2. Wählen Sie den Karteireiter Interfaces aus.
Die Schnittstelle IStateMachine befindet sich in der Liste, mit ihrer spezifischen IID (Interface ID).

SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 1:

Option 2:

1. Navigieren Sie zu System.
2. Wählen Sie den Karteireiter Interfaces aus.
Die Schnittstelle IStateMachine befindet sich in der Liste, mit ihrer spezifischen IID (Interface ID).
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 2:

Im unteren Bereich wird der hinterlegte Code in unterschiedlichen Programmiersprachen dargestellt.

Schritt 2: Neues SPS Projekt anlegen

Es wird ein Standard PLC Project, genannt „PLC-calling-Statemachine“, angelegt.

1. Machen Sie einen Rechts-Klick auf den SPS Knoten.
2. Wählen Sie Standard PLC Project aus.
3. Passen Sie den Namen an.
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 3:
Das Projekt ist erfolgreich angelegt.

Schritt 3: Einen Funktionsbaustein (FB) hinzufügen (der als der C++ Modulmethoden aufrufende Proxy fungiert)

1. Machen Sie einen Rechts-Klick auf POUs.
2. Wählen Sie Add->POU....
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 4:
3. Definieren Sie einen neu zu erstellenden FB, der später als Proxy zum Aufrufen von C++ Klasse fungiert: Geben Sie den Namen des neuen FB ein: „FB_StateMachine“.
4. Wählen Sie Function Block, dann Implements und klicken dann die Schaltfläche ... an.
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 5:
5. Wählen Sie die Schnittstelle entweder über den Karteireiter Text Search oder über den Karteireiter Categories, indem Sie die Structured View abwählen.
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 6:
6. Wählen Sie IStateMachine und klicken Sie auf OK.
Daraufhin wird die Schnittstelle IStateMachine als zu implementierende Schnittstelle aufgelistet.
7. Wählen Sie als Method implementation language Structured Text (ST) aus.
8. Wählen Sie als Implementation language Structured Text (ST) aus.
9. Beenden Sie diesen Dialog mit Open.
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 7:
Sie haben den FB erfolgreich hinzugefügt.

Schritt 4: Funktionsbaustein-Schnittstelle anpassen

Als Ergebnis der Erstellung eines FB, der die Schnittstelle IStateMachine implementiert, wird der Assistent einen FB mit entsprechenden Methoden erstellen.

Der FB_StateMachine stellt 4 Methoden zur Verfügung:

1. Löschen Sie Implements IStateMachine. Da der Funktionsbaustein als Proxy agieren soll, implementiert er selber nicht das Interface. Also kann er gelöscht werden.
2. Löschen Sie die Methoden TcAddRef, TcQueryInterface und TcRelease. Sie werden für einen Proxy Funktionsbaustein nicht benötigt.
Es ergibt sich:
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 8:

Schritt 5: FB-Methoden FB_init (Konstruktor) und FB_exit (Destruktor) hinzufügen

1. Machen Sie einen Rechtsklick auf FB_StateMachine im Baum und wählen Sie Add / Method…
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 9:
2. Fügen Sie die Methoden FB_exit und FB_init hinzu - beide mit Structured Text (ST) als Implementation language. Sie stehen als vordefinierter Name zur Verfügung.
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 10:
3. Verlassen Sie den Dialog jeweils mit Klick auf Open.
Zum Schluss stehen alle notwendigen Methoden zur Verfügung:
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 11:

Schritt 6: FB-Methoden implementieren

Nun müssen alle Methoden mit Code gefüllt werden.

Hinweis

Fehlende Attribute führen zu unerwartetem Verhalten

Attribut-Anweisungen mit geschwungenen Klammern stellen Code dar, der einzufügen ist.

Genaueres zu den Attributen ist in der SPS Dokumentation dokumentiert.

1. Implementieren Sie die Variablendeklaration der FB_Statemachine. Der FB selber braucht keinen zyklisch auszuführenden Code.
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 12:
2. Implementieren Sie die Variablendeklaration und den Code-Bereich der Methode FB_exit.
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 13:
3. Implementieren Sie die Variablendeklaration und den Code-Bereich der Methode FB_init.
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 14:
4. Implementieren Sie die Variablendeklaration und den Code-Bereich der Methode GetState (die generierten Pragmas können gelöscht werden, da sie für einen Proxy-FB nicht benötigt werden).
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 15:
5. Implementieren Sie die Variablendeklaration und den Code-Bereich der Methode SetState (die generierten Pragmas können gelöscht werden, da sie für einen Proxy-FB nicht benötigt werden).
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 16:
6. Implementieren Sie die Variablendeklaration und den Code-Bereich der Methode Start
(die generierten Pragmas können gelöscht werden, da sie für einen Proxy-FB nicht benötigt werden).
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 17:
7. Implementieren Sie die Variablendeklaration und Code-Bereich der Methode Stop
(die generierten Pragmas können gelöscht werden, da sie für einen Proxy-FB nicht benötigt werden).
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 18:
Die Implementierung des FB_StateMachine der als Proxy zum Aufruf der C++ Modulinstanz agiert, ist abgeschlossen.

Schritt 7: FB in SPS aufrufen

Jetzt wird der FB_StateMachine in der POU MAIN aufgerufen.

Dieses einfache Beispiel agiert folgendermaßen:

SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 19:

Schritt 8: SPS-Code kompilieren

1. Machen Sie einen Rechtsklick auf das SPS Projekt und klicken Sie auf Build.
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 20:
Das Ergebnis der Kompilation zeigt „1 succeeded - 0 failed“. SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 21:

Schritt 9: SPS FB mit C++ Instanz verknüpfen

Jetzt werden die Vorteile aller vorherigen Schritte offensichtlich:

Der SPS-FB FB_StateMachine kann im Hinblick auf die Verknüpfung mit jeder Instanz des C++ Moduls StateMachine konfiguriert werden. Das ist eine sehr flexible und leistungsstarke Methode, um SPS und C++ Module auf der Maschine miteinander zu verbinden.

1. Navigieren Sie zur Instanz des SPS Moduls im linken Baum und wählen die Registerkarte Symbol initialization auf der rechten Seite.
Es werden alle Instanzen von FB_StateMachine aufgelistet, in diesem Beispiel haben wir lediglich eine FB Instanz in POU MAIN definiert.
2. Wählen Sie das Dropdownfeld Value und und dann die C++ Modulinstanz, die mit der FB Instanz verknüpft werden soll. SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 22:
SPS und C++ Modul sind miteinander verbunden.

Schritt 10: Die Ausführung von beiden Modulen, SPS und C++, beobachten

Nach der Aktivierung der TwinCAT Konfiguration, dem Herunterladen und Starten des SPS-Codes, kann die Ausführung der beiden Codes, SPS und C++, einfach beobachtet werden:

1. Nach dem Login und Start des SPS-Projekts, befindet sich der Editor bereits im online-Modus (linke Seite der folgenden Abbildung).
2. Um auf online-Variablen des C++ Moduls zugreifen zu können, aktivieren Sie das C++ Debugging und führen die Schritte des Schnellstarts aus, um das Debugging zu starten (rechte Seite der folgenden Abbildung).
SPS um Methoden aufzurufen, die von einem anderen Modul angeboten werden 23: