Erstellen eines FBs in der SPS, der das C++ Objekt anlegt und dessen Funktionalität anbietet

1. Legen Sie eine SPS an und fügen Sie dort einen neuen Funktionsbaustein an.
Dieser Proxy-Baustein soll die Funktionalität bereitstellen, die in C++ programmiert wurde. Dies kann er über einen Schnittstellenpointer, der von der C++ Klasse definiert wurde und aufgrund der TMC-Beschreibungsdatei in der SPS bekannt ist.
Erstellen eines FBs in der SPS, der das C++ Objekt anlegt und dessen Funktionalität anbietet 1:
2. Deklarieren Sie im Deklarationsteil des Funktionsbausteins als Ausgang einen Schnittstellenzeiger auf die Schnittstelle (IIncrement), die später die Funktionalität nach außen bereitstellt.
Erstellen eines FBs in der SPS, der das C++ Objekt anlegt und dessen Funktionalität anbietet 2:
3. Legen Sie die Klassen-ID und die Schnittstellen-ID als Membervariablen an.
Während die Schnittstellen-ID über eine globale Liste bereits verfügbar ist, wird die Klassen-ID - sofern sie noch nicht bekannt sein sollte - über einen anderen Weg ermittelt. Wenn Sie die TMC-Beschreibungsdatei des zugehörigen C++ Treibers öffnen, finden Sie die entsprechende GUID dort vor.
Erstellen eines FBs in der SPS, der das C++ Objekt anlegt und dessen Funktionalität anbietet 3:
4. Fügen Sie dem SPS Proxy-Baustein die FB_init Konstruktormethode hinzu.
Für den Fall, dass es sich nicht um einen Online Change sondern um die Initialisierung des Bausteins handelt, wird ein neues TcCOM-Objekt (Klasseninstanz der spezifizierten Klasse) angelegt und der Schnittstellenzeiger auf die spezifizierte Schnittstelle geholt. Dabei wird der verwendeten Funktion FW_ObjMgr_CreateAndInitInstance() auch der Name und der Zielzustand des TcCOM-Objektes mitgegeben. Diese zwei Parameter werden hier als Eingangsparameter der FB_init Methode deklariert, weshalb sie bei Instanziierung des Proxy-Bausteins anzugeben sind. Die zu instanziierende TwinCAT C++ Klasse kommt ohne TcCOM-Initialisierungsdaten und ohne TcCOM-Parameter aus.
Bei diesem Funktionsaufruf zählt das Objekt selbst einen Referenzzähler hoch.
Erstellen eines FBs in der SPS, der das C++ Objekt anlegt und dessen Funktionalität anbietet 4:
5. Es ist zwingend notwendig, die verwendete Referenz wieder freizugeben und das Objekt zu löschen, sofern es nicht mehr verwendet wird. Rufen Sie hierzu die Funktion FW_ObjMgr_DeleteInstance() im FB_exit Destruktor des Bausteins auf.
Erstellen eines FBs in der SPS, der das C++ Objekt anlegt und dessen Funktionalität anbietet 5:
Damit ist die Implementierung des Proxy-Funktionsbausteins bereits abgeschlossen.
6. Deklarieren Sie zum Aufruf der über die Schnittstelle bereitgestellten Methoden in der Applikation eine Instanz des Proxy-Bausteins. Die Aufrufe selbst finden alle über den als Ausgang des Bausteins definierten Schnittstellenzeiger statt. Wie bei Zeigern typisch, muss eine Überprüfung auf Null vorrausgehen. Daraufhin können die Methoden, auch mittels Intellisense, direkt aufgerufen werden.
Erstellen eines FBs in der SPS, der das C++ Objekt anlegt und dessen Funktionalität anbietet 6:
Das Beispiel ist bereit zum Test.