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
.
- 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.
- 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.
- 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.
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.
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.
- 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.