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: Überprüfen Sie die verfügbare Schnittstellen.
- Schritt 2: Erstellen Sie ein neues SPS-Projekt.
- Schritt 3: Fügen Sie eine neue FB-StateMachine hinzu (die als der C++ Modulmethoden aufrufende Proxy fungiert).
- Schritt 4: Säubern Sie die Funktionsbaustein-Schnittstelle.
- Schritt 5: Fügen Sie die FB-Methoden „FB_init“ und „exit“ hinzu.
- Schritt 6: Implementieren Sie die FB-Methoden.
- Schritt 7: Rufen Sie die FB-StateMachine in der SPS auf.
- Schritt 8: Kompilieren Sie den SPS-Code.
- Schritt 9: Verknüpfen Sie die SPS FB mit der C++ Instanz.
- Schritt 10: Beobachten Sie die Ausführung von beiden Modulen, SPS und C++.
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).
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).
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.
- 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....
- 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.
- 5. Wählen Sie die Schnittstelle entweder über den Karteireiter Text Search oder über den Karteireiter Categories, indem Sie die Structured View abwählen.
- 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.
- 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:
- GetState
- SetState
- Start
- Stop
- 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:
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…
- 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.
- 3. Verlassen Sie den Dialog jeweils mit Klick auf Open.
- Zum Schluss stehen alle notwendigen Methoden zur Verfügung:
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.
- 2. Implementieren Sie die Variablendeklaration und den Code-Bereich der Methode FB_exit.
- 3. Implementieren Sie die Variablendeklaration und den Code-Bereich der Methode FB_init.
- 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).
- 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).
- 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). - 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).
- 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:
- Zyklische Inkrementierung eines SPS-Zählers nCounter
- Wenn nCounter = 500, dann wird die C++-StateMachine mit Zustand „1“ gestartet, um seinen internen C++ Zähler zu inkrementieren. Anschließend per GetState() den State von C++ auslesen.
- Wenn nCounter = 1000, dann wird die C++-StateMachine auf Zustand „2“ gesetzt, um seinen internen C++ Zähler zu dekrementieren. Anschließend per GetState() den State von C++ auslesen.
- Wenn nCounter = 1500 dann wird die C++-StateMachine gestoppt. Der SPS nCounter wird ebenfalls auf „0“ gesetzt, sodass alles von vorne beginnt.
Schritt 8: SPS-Code kompilieren
- 1. Machen Sie einen Rechtsklick auf das SPS Projekt und klicken Sie auf Build.
- Das Ergebnis der Kompilation zeigt „1 succeeded - 0 failed“.
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 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).