Anlegen und Löschen eigener BACnet Funktionsbausteine (FB)
Wenn neben den in der Bibliothek Tc3_BACnetRev14 vorhandenen FB eigene BACnet FB instanziiert werden sollen, müssen diese bei Beenden des SPS-Programms in einer Methode FB_exit
gelöscht werden, damit der dynamisch allozierte Speicher wieder freigegeben wird.
Dynamisch angelegte FB-Instanzen von Funktionsbausteinen aus der Bibliothek Tc3_BACnetRev14 werden über die Methode FB_exit
des Dynamic Object Manager automatisch gelöscht und aus dem Speicher entfernt.
Das nachfolgende Beispiel zeigt das dynamische Anlegen von FB-Instanzen eigener FB (die Implementierungen selbst werden in diesem Beispiel nicht gezeigt) sowie das Löschen dieser Instanzen in der Methode FB_exit
.
![]() | Es ist darauf zu achten, dass der richtige Typ des FB bei der Freigabe verwendet wird. |
Variable MAIN
PROGRAM MAIN
VAR
fbDynObj : FB_DYN_OBJECTS;
END_VAR
Code MAIN
fbDynObj();
Variablen FB_DynObj
FUNCTION_BLOCK FB_DYN_OBJECTS
VAR
DynMgmt : FB_BACnet_DynObjectManager := (bCycleObjects := TRUE, bAutoFinishInit := FALSE);
bCreate : BOOL := TRUE;
bDelete : BOOL;
TestFbBVOwn : POINTER TO FB_BACnet_BV_Event;
TestFbAVOwn : POINTER TO FB_BACnet_AV_EventSetp;
END_VAR
Code FB_DynObj
DynMgmt();
IF (DynMgmt.Ready) THEN
IF (bCreate) THEN
bCreate := FALSE;
TestFbBVOwn := __NEW( FB_BACnet_BV_Event );
IF (DynMgmt.CreateObjectEx(TestFbBVOwn, BACnet_Globals.nBACnetInstId_Auto, '\/TestBV own', '\/TestBV own', 0)) THEN
// Initialize properties:
TestFbBVOwn^.sInactiveText := 'AUS';
TestFbBVOwn^.sActiveText := 'EIN';
END_IF
TestFbAVOwn := __NEW( FB_BACnet_AV_EventSetp );
IF (DynMgmt.CreateObjectEx(TestFbAVOwn, BACnet_Globals.nBACnetInstId_Auto, '\/TestEvent own', '\/TestEvent own', 0)) THEN
// Initialize properties:
TestFbAVOwn^.fHighLimit := 470;
TestFbAVOwn^.fLowLimit := -100;
END_IF
DynMgmt.FinishInit();
END_IF
IF (bDelete) THEN
bDelete := FALSE;
FB_exit(FALSE);
END_IF
END_IF
Variablen der Methode FB_DynObj.FB_exit
METHOD FB_exit : BOOL
VAR_INPUT
bInCopyCode : BOOL; // if TRUE, the exit method is called for exiting an instance that is copied afterwards (online change).
END_VAR
Code der Methode FB_DynObj.FB_exit
DynMgmt.RemoveObjectEx(TestFbAVOwn);
__DELETE(TestFbAVOwn);
DynMgmt.RemoveObjectEx(TestFbBVOwn);
__DELETE(TestFbBVOwn);