Erstellen eines FBs in der SPS, der als einfacher Proxy die Funktionalität des C++ Objektes 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 Schnittstellenzeiger, der von der C++ Klasse definiert wurde und aufgrund der TMC-Beschreibungsdatei in der SPS bekannt ist.
- 2. Deklarieren Sie im Deklarationsteil des Funktionsbausteins als Ausgang einen Schnittstellenzeiger auf die Schnittstelle, der später die Funktionalität nach außen bereitstellt.
- 3. Legen Sie die Objekt-ID und die Schnittstellen-ID als lokale Membervariablen an.
Während die Schnittstellen-ID über eine globale Liste bereits verfügbar ist, wird die Objekt-ID über die TwinCAT-Symbol-Initialisierung zugewiesen. Das Attribut TcInitSymbol sorgt dafür, dass die Variable in einer Liste auftaucht, die der externen Symbolinitialisierung dient. Zugewiesen werden soll die Objekt-ID des angelegten C++ Objektes.
- Die Objekt-ID wird bei Anwahl des Objektes unter dem Knoten TcCOM-Objekte angezeigt.
Die Liste der Symbol-Initialisierungen befindet sich - sofern das Attribut TcInitSymbolverwendet wurde - im Knotenpunkt der SPS-Instanz im Reiter Symbol Initialisierung.
- 4. Weisen Sie hier dem Symbolnamen der Variablen per Dropdown eine vorhandene Objekt-ID zu. Beim Download der SPS wird dieser Wert zugewiesen, um so bereits vor der SPS-Laufzeit festgelegt zu sein. Neue Symbolinitialisierungen oder Änderungen werden demnach mit einem neuen Download der SPS eingespielt.
Die Übergabe der Objekt-ID könnte alternativ auch per Prozessabbildverknüpfung wie im ersten Beispiel implementiert werden (TcCOM_Sample01_PlcToPlc).
- 5. Implementieren Sie den SPS Proxy-Baustein.
Zuerst wird dem Baustein die FB_init Konstruktormethode hinzugefügt. Für den Fall, dass es sich nicht um einen OnlineChange sondern um die Initialisierung des Bausteins handelt, wird der Schnittstellenzeiger auf die spezifizierte Schnittstelle des spezifizierten TcCOM-Objektes mit Hilfe der Funktion FW_ObjMgr_GetObjectInstance() geholt. Hierbei zählt das Objekt selbst einen Referenzzähler hoch.
- 6. Es ist zwingend notwendig, die verwendete Referenz wieder freizugeben. Rufen Sie hierzu die Funktion FW_SafeRelease() im FB_exit Destruktor des Bausteins auf.
- Damit ist die Implementierung des Proxy-FunktionsBausteins bereits abgeschlossen.
- 7. 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.
- Das Beispiel ist bereit zum Test.