Erstellen eines FBs in der ersten SPS, welcher seine Funktionalität global bereitstellt
1. Legen Sie eine SPS an und erstellen Sie einen neuen Funktionsbaustein (FB) (hier: FB_Calculation). Leiten Sie den Funktionsbaustein von der Klasse TcBaseModuleRegistered ab, damit eine Instanz dieses Funktionsbausteins nicht nur in der gleichen SPS verfügbar, sondern auch aus einer zweiten SPS heraus erreichbar ist. Hinweis: Alternativ können Sie auch einen FB in einer bestehenden SPS modifizieren.
2. Der Funktionsbaustein muss seine Funktionalität mittels Methoden anbieten. Diese werden in einer globalen Schnittstelle definiert, deren Typ systemweit und programmiersprachenunabhängig bekannt ist. Um ein globales Interface anzulegen, öffnen Sie im Reiter „Interface“ der Systemeigenschaften das Kontextmenü und wählen Sie die Option „New“ aus.
Es öffnet sich der TMC Editor, welcher Sie darin unterstützt ein globales Interface anzulegen.
3. Spezifizieren Sie den Namen (hier: I_Calculation) und fügen Sie die gewünschten Methoden an. Das Interface wird automatisch von ITcUnknown abgeleitet, um dem TwinCAT TcCOM-Modulkonzept gerecht zu werden.
4. Geben Sie analog den Namen der Methoden an (hier: Addition() und Subtraction()) und wählen Sie als Rückgabedatentyp HRESULT. Dieser Rückgabetyp ist zwingend vorgeschrieben, wenn diese Art der TcCOM-Kommunikation implementiert werden soll.
5. Spezifizieren Sie zuletzt die Methodenparameter und schließen dann den TMC Editor.
6. Implementieren Sie nun im Funktionsbaustein FB_Calculation die Schnittstelle I_Calculation und fügen Sie das Attribut c++_compatible an.
7. Wählen Sie im Kontextmenü des Funktionsbausteins die Option „Implement interfaces...“ aus, um die zu dieser Schnittstelle gehörenden Methoden zu erhalten.
8. Löschen Sie die beiden Methoden TcAddRef()und TcRelease(), weil hiervon die bereits vorhandene Implementierung der Basisklasse verwendet werden soll.
9. Legen Sie für den Funktionsbaustein FB_Calculation die Methode FB_reinit() an und rufen Sie die Basisimplementierung auf. Hierdurch wird gewährleistet, dass die Methode FB_reinit() der Basisklasse beim Online Change durchlaufen wird. Dies ist zwingend notwendig.
10. Implementieren Sie die Methode TcQueryInterface() der Schnittstelle ITcUnknown. Über diese Methode ist es anderen TwinCAT Komponenten möglich, einen Schnittstellenzeiger auf eine Instanz dieses Funktionsbausteines zu erhalten und damit Methodenaufrufe zu tätigen. Der Aufruf von TcQueryInterface ist erfolgreich, wenn der Funktionsbaustein oder seine Basisklasse die mittels iid (Interface-ID) angefragte Schnittstelle bereitstellt. Für diesen Fall wird dem übergebenen Schnittstellenzeiger die Adresse auf den Funktionsbaustein typgewandelt zugewiesen und der Referenzzähler mittels TcAddRef() erhöht.
11. Füllen Sie die beiden Methoden Addition() und Subtraction() mit entsprechendem Code, um die Funktionalität zu erbringen: nRes := nIn1 + nIn2 und nRes := nIn1 - nIn2
12. Fügen Sie eine oder mehrere Instanzen dieses Funktionsbausteins im Programmbaustein MAIN oder in einer globalen Variablenliste hinzu.
Die Implementierung in der ersten SPS ist vollständig.
Nach dem Kompilieren der SPS ist im Prozessabbild die Objekt-ID des TcCOM-Objektes, welches die Instanz von FB_Calculation representiert, als Ausgang verfügbar.