Beispiel13: Modulkommunikation: Methodenaufruf C++-Modul nach SPS-Modul

Dieser Artikel beschreibt, wie ein TwinCAT 3 C++ Modul per TcCOM Interface Methoden eines Funktionsbausteins der SPS aufruft.

Download

Hier erhalten Sie den Quellcode für dieses Sample: https://github.com/Beckhoff/TC1300_Samples/tree/main/S13-CppToPLC

1. Öffnen Sie mittels eines Visual Studios, in dem TwinCAT installiert ist, das Projekt über Open Project ….
2. Wenn Sie das Projekt auf Windows oder auf TwinCAT/BSD® ausführen möchten (nicht für Beckhoff RT Linux® nötig): Konfigurieren Sie das Signieren für dieses Projekt, indem Sie auf der Seite unter Rechtsklick auf dem Projekt->Properties->Tc Sign die TwinCAT Signierung anschalten und Ihr Zertifikat und ggf. Passwort konfigurieren.
Weitere Informationen zur Signierung der C++ Projekte im Kapitel TwinCAT.
3. Wählen Sie Ihr Zielsystem aus.
4. Bauen Sie das Beispiel (z. B. Build->Build Solution).
5. Aktivieren Sie die Konfiguration mit einem Klick auf Beispiel13: Modulkommunikation: Methodenaufruf C++-Modul nach SPS-Modul 1:.
Das Beispiel ist einsatzbereit.

Beschreibung

Dieses Beispiel stellt die Kommunikation von einem C++ Modul zu einem Funktionsbaustein einer SPS mittels Methodenaufruf dar. Hierfür wird ein TcCOM-Interface definiert, welches von der SPS angeboten wird und von dem C++ Modul genutzt wird.

Die SPS-Seite als Provider entspricht dabei dem entsprechenden Projekt des Beispiels TcCOM Sample 01, wo eine SPS nach SPS Kommunikation betrachtet wird. Hier wird nun ein Caller in C++ bereitgestellt, der das gleiche Interface nutzt.

Die SPS-Seite wird von TcCOM Sample 01 übernommen. Der dort als TcCOM-Modul registrierte Funktionsbaustein bietet die ihm zugeteilte Objekt-ID als Ausgangsvariable an.
Aufgabe des C++ Moduls ist es, das angebotene Interface dieses Funktionsbausteins zugreifbar zu machen.

Es wird von einem C++ Projekt mit einem Cycle IO-Modul ausgegangen.
1. Legen Sie im TMC Editor einen Interface-Pointer mit dem Namen Calculation vom Typ I_Calculation an. Über diesen erfolgt später der Zugriff.
Beispiel13: Modulkommunikation: Methodenaufruf C++-Modul nach SPS-Modul 2:
2. Die Data Area Inputs wurde mit dem Typ Input-Destination vom Modul-Wizard bereits erstellt. Hier legen Sie im TMC Editor einen Eingang mit dem Namen oidProvider vom Typ OTCID an. Über diesen wird später die Objekt-ID aus der SPS verknüpft.Beispiel13: Modulkommunikation: Methodenaufruf C++-Modul nach SPS-Modul 3:
3. Alle weiteren Symbole sind für das Beispiel nicht relevant und können gelöscht werden.
Der TMC-Code-Generator bereitet den Code entsprechend vor:
In dem Header des Moduls werden einige Variablen angelegt, um die Methoden-Aufrufe später durchzuführen.
Beispiel13: Modulkommunikation: Methodenaufruf C++-Modul nach SPS-Modul 4:
Im eigentlichen Code des Moduls wird im CycleUpdate() der Interface-Pointer anhand der von der SPS übermittelten Objekt-ID gesetzt. Es ist wichtig, dass dieses im CycleUpdate() und damit im Echtzeitkontext geschieht, da die SPS erst den Baustein bereitstellen muss.
Ist dies einmalig erfolgt, können die Methoden aufgerufen werden.
Beispiel13: Modulkommunikation: Methodenaufruf C++-Modul nach SPS-Modul 5:
Zusätzlich muss, wie oben zu sehen ist, der Interface-Pointer beim Herunterfahren aufgeräumt werden. Dies geschieht in der SetObjStateOS Methode.
4. Bauen Sie das C++ Projekt nun einmal.
5. Legen Sie eine Instanz des Moduls an.
6. Verbinden Sie den Eingang des C++ Moduls mit dem Ausgang der SPS.
Beispiel13: Modulkommunikation: Methodenaufruf C++-Modul nach SPS-Modul 6:
Das Projekt kann gestartet werden. Wenn die SPS läuft, wird die OID durch das Mapping an die C++ Instanz bekannt gemacht. Sobald dies erfolgt ist, können die Methoden aufgerufen werden.