Beispiel13: Modulkommunikation: C-Modul ruft SPS-Methoden auf

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

Download

Systemvoraussetzung: TwinCAT 3.1 Build 4020

Hier erhalten Sie den Quellcode für dieses Beispiel.

1. Entpacken Sie die heruntergeladene ZIP-Datei.
2. Öffnen Sie mittels eines Visual Studios, in dem TwinCAT installiert ist, das Projekt über Open Project ….
3. 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 erhalten Sie hier.
4. Wählen Sie Ihr Zielsystem aus.
5. Bauen Sie das Beispiel (z. B. Build->Build Solution).
6. Aktivieren Sie die Konfiguration mit einem Klick auf Beispiel13: Modulkommunikation: C-Modul ruft SPS-Methoden auf 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: C-Modul ruft SPS-Methoden auf 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: C-Modul ruft SPS-Methoden auf 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: C-Modul ruft SPS-Methoden auf 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: C-Modul ruft SPS-Methoden auf 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: C-Modul ruft SPS-Methoden auf 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.