ObjectPersistence (FB) ¶ FUNCTION_BLOCK ObjectPersistence EXTENDS BACnet.BACnetServerPluginBase IMPLEMENTS CmpEventMgr.ICmpEventCallback, BACnet.IBACnetPersistence Default implementation of object persistence. It stores selected properties of objects in one binary data file per object and maintains an index file for bookkeeping. The naming convention for the object persistence file is: pdata_{deviceId}_{objectType}_{objectInstanceNumber}.dat to ensures to identify and restore object information for an object matching the tuple {deviceId},{objectType},{objectInstanceNumber}. Optionally ObjectPersistence stores/restores objects which have create by client CreateObject-requests - this option is enabled by default. This BACnet-Server-plugin needs to be registered prior to BACnetServer.StartBACnetStack() to ensure restore of objects from persistence during StartBACnetStack(), so you can’t use it with BACnet-Server AutoStart (at application init). During restore non existent object files listed in the index file are ignored silently. The user is in control where to place the persistence files - writing the ObjectPersistence.PersistentPath. This helps to control when the persistence files are deleted. The default for PersistentPath is ‘./bacnetbackup’ which keeps the persistence files at “Reset Origin (Application)” (as well at “Reset Warm” and “Reset Cold” of course) but deletes the persistence files at “Reset Origin Device”. If it is required to delete the persistence files at “Reset Origin (Application)” this could be achieved placing the persistence files underneath the application: pCurrentApplication := CmpApp.AppGetCurrent(ADR(result)); objectPersistence.PersistentPath := CONCAT(pCurrentApplication^.szName, ‘/bacnetbackup’); Placing the persistence files somewhere else leaves the control when to delete them completely at the application calling ObjectPersistence.DeleteAllData(). There are two options when to persist object information. The recommended default option is to persist object information at graceful shutdown of BACnetServer - see BACnetServer.StopBACnetStack(). A graceful shutdown of BACnetServer is done during graceful shutdown of the PLC if the PLC provides enough power reserve through an internal uninterruptible power supply (UPS). CmpApp.EVT_PrepareExit is used to trigger the graceful shutdown of BACnetServer during graceful shutdown of the PLC. Some PLC’s doesnt provides enough power reserve to do so, in this case a “hard shutdown” might happen any time. In this case the object information needs to be stored on demand calling DumpDatabase() prior to a sudden shutdown, but a hard shutdown might happen in the middle of this action. So all objects are stored to an object temp file first, last file to store is the index temp file. Done this the index temp file is copied to index file, and afterwards all object temp files are copied to object data files. In case the index file or an object data file can not be read properly during restore, we give it a try to read the according temp file instead. The application can choose this option setting HardShutdown to TRUE prior to plugin registration. Properties: HardShutdown Name PersistentPath RestoreClientCreatedObjects Methods: DeleteAllData DumpDataBase LogIndexFileContent PostUnregister PreRegister Structure: DeleteAllData (Method) DumpDataBase (Method) HardShutdown (Property) LogIndexFileContent (Method) Name (Property) PersistentPath (Property) PostUnregister (Method) PreRegister (Method) RestoreClientCreatedObjects (Property)
ObjectPersistence.DeleteAllData (METH) ¶ METHOD DeleteAllData : CmpBACnet.IEC_BACNET_STATUS This function deletes all the previously created data files. InOut: Scope Name Type Return DeleteAllData CmpBACnet.IEC_BACNET_STATUS
ObjectPersistence.DumpDataBase (METH) ¶ METHOD DumpDataBase : CmpBACnet.IEC_BACNET_STATUS Dumps the object database to data files. InOut: Scope Name Type Return DumpDataBase CmpBACnet.IEC_BACNET_STATUS
ObjectPersistence.HardShutdown (PROP) ¶ PROPERTY HardShutdown : BOOL
ObjectPersistence.LogIndexFileContent (METH) ¶ METHOD LogIndexFileContent : CmpBACnet.IEC_BACNET_STATUS Logs the existing persistence files. InOut: Scope Name Type Return LogIndexFileContent CmpBACnet.IEC_BACNET_STATUS
ObjectPersistence.Name (PROP) ¶ PROPERTY Name : STRING
DeviceDateTime.GetTimeZoneFromSystem (METH) ¶ METHOD GetTimeZoneFromSystem : ERROR Gets the timezone from the underlying system. InOut: Scope Name Type Return GetTimeZoneFromSystem ERROR
DeviceDateTime.Name (PROP) ¶ PROPERTY Name : STRING
DeviceDateTime.RegisterTimeProvider (METH) ¶ METHOD RegisterTimeProvider : UDINT InOut: Scope Name Type Return RegisterTimeProvider UDINT
DeviceDateTime.TimeZone (PROP) ¶ PROPERTY TimeZone : Util.TimeZone Read / write the timezone. See also GetTimeZoneFromSystem and UpdateTimeZoneFromSystem .