--- a/branches/FeatureBranches/refactorpayload/SparkplugB/Function Blocks/FB_Edge/FB_Edge/svnobj
+++ b/branches/FeatureBranches/refactorpayload/SparkplugB/Function Blocks/FB_Edge/FB_Edge/svnobj
@@ -1,5 +1,6 @@
-Gx_láa!0…jüoÂOþÆö÷)cÊSystem.StringL{6f9dac99-8de1-4efc-8465-68ac443b7d08}SpecialFuncL{0db3d7bb-cde0-4416-9a7b-ce49a0124323}NoneImplementationL{3b83b776-fb25-43b8-99f2-3c507c9143fc}TextDocument	L{f3878285-8e4f-490b-bb1b-9acbb7eb04db}
-TextLinesL{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}Id
longTagText// Componentsn_MQTT.IASyncPropertyProvider( IASyncPropertyProvider );b_MQTT.ITLSContextProvider( ITLSContextProvider );_MQTT();¸Connected := (NOT _MQTT.ClientError() AND NOT _MQTT.IsConnecting() AND _MQTT.IsConnected());b_SparkplugB( AllmetricsList := _AllMetricsList );HIF _MQTT.STATEMessageReceived() THENž    _RecvSTATEMesg := _MQTT.GetSTATEMessage( MessageTopic => _RecvSTATETopic );Z    onSTATEMessage( Topic := _RecvSTATETopic,`                    Message := _RecvSTATEMesg );END_IFFIF _MQTT.NCMDMessageReceived() THENœ    _RecvNCMDMesg REF= _MQTT.GetNCMDMessage( MessageTopic => _RecvNCMDTopic );f    onNCMDMessage( pTopic := ADR( _RecvNCMDTopic ),Z                   pMessage := _RecvNCMDMesg, R                   Rebirth => _Rebirth );!v_ExponentialBackOff( Enable := (Connect AND NOT Connected),"n                     ConnectionTime := _ConnectionTime,#n                     LockTimesArray := _LockTimesArray,$R                     Enabled => _Enabled,%v                     OutTimeRemaining => _OutTimeRemaining,&~                     LockTimeRemaining => _LockTimeRemaining );'d_StateMachine( Connect := _ExponentialBackOff.out,(R               EoNConnected := Connected,)F               ReBirth := _Rebirth,*l               TimeToWait := TO_TIME( publishPeriod ),+J               pMQTT := ADR( _MQTT ),,b               pSparkplugB := ADR( _SparkplugB ),-8               pEoN := THIS,.X               SessionState => SessionState,/p               arSparkplugBoolean := arSparkplugBoolean,0t               arSparkplugDateTime := arSparkplugDateTime,1h               arSparkplugFloat := arSparkplugFloat,2l               arSparkplugDouble := arSparkplugDouble,3d               arSparkplugInt8 := arSparkplugInt8,4h               arSparkplugInt16 := arSparkplugInt16,5h               arSparkplugInt32 := arSparkplugInt32,6h               arSparkplugInt64 := arSparkplugInt64,7h               arSparkplugUInt8 := arSparkplugUInt8,8l               arSparkplugUInt16 := arSparkplugUInt16,9l               arSparkplugUInt32 := arSparkplugUInt32,:l               arSparkplugUInt64 := arSparkplugUInt64,;d               arSparkplugUUID := arSparkplugUUID,<d               arSparkplugText := arSparkplugText,=l               arSparkplugString := arSparkplugString,>b               AllMetricsList := _AllMetricsList,?V               DeviceList := _DeviceList );@$_Rebirth := FALSE;AV// update current number of plugged devicesBPNumberOfDevices := _DeviceList.ListSize;CDiag();DInterfaceEL{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}F(*G0    Edge of Network NodeHÖ    Allows you to bidirectionally share sparkplug data from the edge of your network to a Primary Host NodeI*)J0{attribute 'reflection'}K‚FUNCTION_BLOCK PUBLIC FB_Edge IMPLEMENTS ISparkplugDeviceProtocolLVAR_INPUTM€    ServerUrl     : STRING;          // eg:'test.mosquitto.org';N`    ServerPort    : UINT    := 1883; // eg: 1883O~    PrimaryHostID : WSTRING := "";   // eg:'PrimaryHostNode';  Pˆ    KeepAlive     : UINT    := 60;   // eg: 60 (Value is in seconds)QV    // Persistent Session (FALSE = DEFAULT)R°    //  * The client must get all messages from a certain topic, even if it is offline. Sò    //  * You want the broker to queue the messages for the client and deliver them as soon as the client is back online.TX    //  * The client has limited resources. Uˆ    //  * You want the broker to store the subscription information of the client and restore the interrupted communication quickly.VÈ    //  * The client needs to reNumberOfMetricse all QoS 1 and 2 publish messages after a reconnect.W    //  X8    //  Clean session (TRUE)Yà    //  * The client needs only to publish messages to topics, the client does not need to subscribe to topics. ZÞ    //  * You don t want the broker to store session information or retry transmission of QoS 1 and 2 messages.[–    //  * The client does not need to get messages that it misses offline. \    //]H    CleanSession : BOOL    := FALSE;^’    Username     : WSTRING := ""; // specify a username if any (optional)_ª    Password     : WSTRING := ""; // specify the password for the username (optional)`”    UseTLS       : BOOL; // Enables usage of the TLS encryption (optional)aô    hCert        : SysTypes.RTS_IEC_HANDLE; // Handle to the client certificate (optional) and only used if UseTLS is TRUEbx    GroupId             : WSTRING; // eg: "SparkplugBDevice"c`    NodeName            : WSTRING; // eg: "EoN1"dŒ    publishPeriod       : UINT; // eg: 5000 (Value is in milliseconds)eö    ITLSContextProvider : MQTT.NBS.ITLSContext; //Encapsulates all the data neccessaray to handle encrypted tcp connectionsfˆ    //Static initialization, as shown in the following code snippet;g    //VARhV    //    commonName : STRING := 'MyRasPi';i¸    //    ciCertInfo : NBS.CERT_INFO := (psInfo:=ADR(commonName), udiSize:=LEN(commonName));jX    //    myTLSContext : NBS.TLSContext := (k`    //        ePurpose:=NBS.PURPOSE.CLIENT_SIDE,lL    //        sUseCaseName:='NBSTest',mB    //        sTLSVersion:='1.3',nJ    //        ciCertInfo:=ciCertInfo,oH    //        udiVerificationMode:=2p    //    );q    //END_VARrœ    IASyncPropertyProvider : MQTT.NBS.IAsyncProperty; // Runs the connect process in a own background task. Use this property if the connection setup takes longer than one task cycle (e.g. TLS connections) sEND_VARtVAR_OUTPUTu6    Connected       : BOOL;v`    SessionState    : SparkplugSessionStateType;wp    itfDevices      : ISparkplugDeviceProtocol := THIS^;x8    NumberOfDevices : UDINT;yVAR_IN_OUTzt    arSparkplugBoolean  : ARRAY[*] OF FB_SparkplugBoolean;{v    arSparkplugDateTime : ARRAY[*] OF FB_SparkplugDateTime;|p    arSparkplugFloat    : ARRAY[*] OF FB_SparkplugFloat;}r    arSparkplugDouble   : ARRAY[*] OF FB_SparkplugDouble;~n    arSparkplugInt8     : ARRAY[*] OF FB_SparkplugInt8;p    arSparkplugInt16    : ARRAY[*] OF FB_SparkplugInt16;€p    arSparkplugInt32    : ARRAY[*] OF FB_SparkplugInt32;p    arSparkplugInt64    : ARRAY[*] OF FB_SparkplugInt64;‚p    arSparkplugUInt8    : ARRAY[*] OF FB_SparkplugUInt8;ƒr    arSparkplugUInt16   : ARRAY[*] OF FB_SparkplugUInt16;„r    arSparkplugUInt32   : ARRAY[*] OF FB_SparkplugUInt32;…r    arSparkplugUInt64   : ARRAY[*] OF FB_SparkplugUInt64;†n    arSparkplugUUID     : ARRAY[*] OF FB_SparkplugUUID;‡n    arSparkplugText     : ARRAY[*] OF FB_SparkplugText;ˆr    arSparkplugString   : ARRAY[*] OF FB_SparkplugString;‰VARŠ    Connect  : BOOL := TRUE; // TRUE: Connects EoN using the configured settings, FALSE: Disconnects EoN from server if it was connected‹:    _Enabled          : BOOL;Œ:    _Rebirth          : BOOL;L    _ConnectionTime   : TIME := T#30S;Ž¤    _LockTimesArray   : ARRAY[1..8] OF TIME := [4(TIME#30S0MS), 2(TIME#1M0S0MS), TIME#2M0S0MS, TIME#4M0S0MS]; // could be made accessible public  ¢    _OutTimeRemaining     : TIME; // Duration of Out Time Period = TRUE remaining¤    _LockTimeRemaining    : TIME; // Duration of Out Time Period = FALSE remaining‘Ä    _ExponentialBackOff   : FB_ExponentialBackOffTimer; // Handles the Exponential Backoff ttiming’`    _StateMachine         : FB_EdgeStateMachine;“b    _TopicProvider        : FB_EdgeTopicProvider;”V    _NodeControl          : FB_NodeControl;•´    _cPrimaryHostID       : WSTRING; // Corrected PrimaryHostID, contains no illegal chars–¨    _cGroupId             : WSTRING; // Corrected GroupId, contains no illegal chars—ª    _cNodeName            : WSTRING; // Corrected NodeName, contains no illegal chars˜P    _MQTT                 : FB_EdgeMQTT;™X    _MQTT_eError          : MQTT.MQTT_ERROR;š˜    _SparkplugB           : FB_SparkplugBSimple; // Handles SparkPlugB Stuff›„    _DeviceList           : List; // Handles all connected DevicesœD    _prevNumberOfDevices  : UDINT;J    _ItfCurElement        : IElement;žD    _DeviceCnt            : UDINT;ŸZ    _ItfCurDevice         : ISparkplugDevice; B    _HasItfDevice         : BOOL;¡Ø    _AllMetricsList       : LIST; // Complete List Of All Metrics That Will ever be Sent, needed for NBIRTH ¢ˆ    _ChangeList           : LIST; // The Send list; Needed for NDATA£B    _Initialise           : BOOL;¤B    _Disconnect           : BOOL;¥B    _Initialised          : BOOL;¦B    _Reset                : BOOL;§B    _SubscribeNCMD        : BOOL;¨B    _UnSubscribeNCMD      : BOOL;©B    _NodeBirthPublished   : BOOL;ªB    _PublishNodeDataStart : BOOL;«B    _DisablePublisher     : BOOL;¬–    _LastWillTopic        : WSTRING(GC_Sparkplug.supported_string_lengths);­®    _NDEATH               : FB_SparkplugUInt64;    // contains the current NDEATH BDSeq®¾    _NDEATHPayload        : ARRAY[0..255] OF BYTE; // what is the maximum size of this payload?¯D    _NDEATHPayloadSize    : UDINT;°€    _LastWillQos          : MQTT.MQTT_QOS := MQTT.MQTT_QOS.QoS0;±T    _LastWillRetain       : BOOL := FALSE;²¶    _NBIRTH               : FB_SparkplugUInt64;      // contains the current raw NBIRTH seq³¦    _Blob                 : ARRAY[0..65535] OF BYTE; // buffer for encoded messages´¨    _BlobSize             : UDINT;                   // current encoded message sizeµT    _NDATAEncoderPrepared : BOOL := FALSE;¶B    _PublishNDATA         : BOOL;·B    _ErrorDetected        : BOOL;¸D    _ChangeError          : ERROR;¹ä    _ChangeDetected       : BOOL;  // At least 1 Signal change has been detected; RBE needed next PublishInterval ºÊ    _CurrentChanges       : UDINT; // Number of detected changes, each changes reflects 1 Signal     »d    _MessageType          : SparkplugMessageTypes;¼F    _RecvSTATEMesg        : STRING;½–    _RecvSTATETopic       : WSTRING(GC_Sparkplug.supported_string_lengths);¾‚    _RecvNCMDMesg         : REFERENCE TO FB_PayloadSimpleDecoder;¿–    _RecvNCMDTopic        : WSTRING(GC_Sparkplug.supported_string_lengths);ÀF    _Diag                 : STRING;Á>    {attribute 'instance-path'}Â0    {attribute 'noinit'}Ã$    _POU : STRING;Ä"UniqueIdGeneratorÅ
-15324ÆPOULevelÇL{8e575c5b-1d37-49c6-941b-5c0ec7874787}ÈStandardÉ ChildObjectGuidsÊ8System.Collections.ArrayListË,AddAttributeSubsequentÌboolÐÐ-ÐÐ	E
-8ÐÐ
­¥;ÚÐ-ÐÐ
­¦;ÚÐ-ÐÐ
­§;ÚÐ-ÐÐ
­¨;ÚÐ-ÐÐ
­©;ÚÐ-ÐÐ
­ª;ÚÐ-ÐÐ
­«;ÚÐ-ÐÐ
­¬;ÚÐ-ÐÐ
­­;ÚÐ-ÐÐ
­®;ÚÐ-ÐÐ
­¯;ÚÐ-ÐÐ
­°;ÚÐ-ÐÐ
­±;ÚÐ-ÐÐ
­²;ÚÐ-ÐÐ
­³;ÚÐ-ÐÐ
­´;ÚÐ-ÐÐ
­µ;ÚÐ- ÐÐ
­¶;ÚÐ-ÐÐ
­·;ÚÐ-ÐÐ
­¸;ÚÐ-!ÐÐ
­¹;ÚÐ-"ÐÐ
­º;ÚÐ-#ÐÐ
­»;ÚÐ-$ÐÐ
­¼;ÚÐ-%ÐÐ
­½;ÚÐ-&ÐÐ
­¾;ÚÐ-ÐÐ
­¿;ÚÐ-'ÐÐ
­À;ÚÐ-(ÐÐ
­Á;ÚÐ-)ÐÐ
­Â;ÚÐ-*ÐÐ
­Ã;ÚÐ-+ÐÐ
­Ä;ÚÐ-,ÐÐ
­Å;ÚÐ--ÐÐ
­Æ;ÚÐ-.ÐÐ
­Ç;ÚÐ-/ÐÐ
­È;ÚÐ-0ÐÐ
­É;ÚÐ-1ÐÐ
­Ê;ÚÐ-2ÐÐ
­Ë;ÚÐ-3ÐÐ
­Ì;ÚÐ-4ÐÐ
­Í;ÚÐ-5ÐÐ
­Î;ÚÐ-6ÐÐ
­Ï;ÚÐ-7ÐÐ
­Ð;ÚÐ-8ÐÐ
­Ñ;ÚÐ-9ÐÐ
­Ò;ÚÐ-:ÐÐ
­Ó;ÚÐ-;ÐÐ
­Ô;ÚÐ-<ÐÐ
­Õ;ÚÐ-=ÐÐ
­Ö;ÚÐ->ÐÐ
­×;ÚÐ-?ÐÐ
­Ø;ÚÐ-ÐÐ
­Ù;ÚÐ-@ÐÐ
­Ú;ÚÐ-AÐÐ
­Û;ÚÐ-BÐÐ
­ÃÚÐ-CÐDEÐ	E
-‚ÐÐ
­!;ÚÐ-FÐÐ
­";ÚÐ-GÐÐ
­#;ÚÐ-HÐÐ
­$;ÚÐ-IÐÐ
­%;ÚÐ-JÐÐ
­&;ÚÐ-KÐÐ
­';ÚÐ-LÐÐ
­(;ÚÐ-MÐÐ
­);ÚÐ-NÐÐ
­*;ÚÐ-OÐÐ
­+;ÚÐ-PÐÐ
­,;ÚÐ-QÐÐ
­-;ÚÐ-RÐÐ
­.;ÚÐ-SÐÐ
­/;ÚÐ-TÐÐ
­0;ÚÐ-UÐÐ
­1;ÚÐ-VÐÐ
­2;ÚÐ-WÐÐ
­3;ÚÐ-XÐÐ
­4;ÚÐ-YÐÐ
­5;ÚÐ-ZÐÐ
­6;ÚÐ-[ÐÐ
­7;ÚÐ-\ÐÐ
­8;ÚÐ-]ÐÐ
­9;ÚÐ-^ÐÐ
­:;ÚÐ-_ÐÐ
­;;ÚÐ-`ÐÐ
­<;ÚÐ-aÐÐ
­>;ÚÐ-bÐÐ
­?;ÚÐ-cÐÐ
­@;ÚÐ-dÐÐ
­A;ÚÐ-eÐÐ
­C;ÚÐ-fÐÐ
­D;ÚÐ-\ÐÐ
­E;ÚÐ-gÐÐ
­F;ÚÐ-hÐÐ
­G;ÚÐ-iÐÐ
­H;ÚÐ-jÐÐ
­I;ÚÐ-kÐÐ
­J;ÚÐ-lÐÐ
­K;ÚÐ-mÐÐ
­L;ÚÐ-nÐÐ
­M;ÚÐ-oÐÐ
­N;ÚÐ-pÐÐ
­O;ÚÐ-qÐÐ
­P;ÚÐ-rÐÐ
­Q;ÚÐ-sÐÐ
­R;ÚÐ-tÐÐ
­S;ÚÐ-uÐÐ
­T;ÚÐ-vÐÐ
­U;ÚÐ-wÐÐ
­V;ÚÐ-xÐÐ
­W;ÚÐ-sÐÐ
­X;ÚÐ-yÐÐ
­Y;ÚÐ-zÐÐ
­Z;ÚÐ-{ÐÐ
­[;ÚÐ-|ÐÐ
­\;ÚÐ-}ÐÐ
­];ÚÐ-~ÐÐ
­^;ÚÐ-ÐÐ
­_;ÚÐ-€ÐÐ
­`;ÚÐ-ÐÐ
­a;ÚÐ-‚ÐÐ
­b;ÚÐ-ƒÐÐ
­c;ÚÐ-„ÐÐ
­d;ÚÐ-…ÐÐ
­e;ÚÐ-†ÐÐ
­f;ÚÐ-‡ÐÐ
­g;ÚÐ-ˆÐÐ
­h;ÚÐ-sÐÐ
­i;ÚÐ-‰ÐÐ
­j;ÚÐ-ŠÐÐ
­l;ÚÐ-‹ÐÐ
­m;ÚÐ-ŒÐÐ
­n;ÚÐ-ÐÐ
­o;ÚÐ-ŽÐÐ
­q;ÚÐ-ÐÐ
­r;ÚÐ-ÐÐ
­s;ÚÐ-‘ÐÐ
­t;ÚÐ-’ÐÐ
­u;ÚÐ-“ÐÐ
­Ü;ÚÐ-”ÐÐ
­v;ÚÐ-•ÐÐ
­w;ÚÐ-–ÐÐ
­x;ÚÐ-—ÐÐ
­y;ÚÐ-˜ÐÐ
­z;ÚÐ-™ÐÐ
­{;ÚÐ-šÐÐ
­|;ÚÐ-›ÐÐ
­};ÚÐ-œÐÐ
­~;ÚÐ-ÐÐ
­;ÚÐ-žÐÐ
­€;ÚÐ-ŸÐÐ
­;ÚÐ- ÐÐ
­‚;ÚÐ-¡ÐÐ
­ƒ;ÚÐ-¢ÐÐ
­„;ÚÐ-£ÐÐ
­…;ÚÐ-¤ÐÐ
­†;ÚÐ-¥ÐÐ
­‡;ÚÐ-¦ÐÐ
­ˆ;ÚÐ-§ÐÐ
­‰;ÚÐ-¨ÐÐ
­Š;ÚÐ-©ÐÐ
­‹;ÚÐ-ªÐÐ
­Œ;ÚÐ-«ÐÐ
­;ÚÐ-¬ÐÐ
­Ž;ÚÐ-­ÐÐ
­;ÚÐ-®ÐÐ
­;ÚÐ-¯ÐÐ
­‘;ÚÐ-°ÐÐ
­’;ÚÐ-±ÐÐ
­“;ÚÐ-²ÐÐ
­”;ÚÐ-³ÐÐ
­•;ÚÐ-´ÐÐ
­–;ÚÐ-µÐÐ
­—;ÚÐ-¶ÐÐ
­˜;ÚÐ-·ÐÐ
­™;ÚÐ-¸ÐÐ
­š;ÚÐ-¹ÐÐ
­›;ÚÐ-ºÐÐ
­œ;ÚÐ-»ÐÐ
­;ÚÐ-¼ÐÐ
­ž;ÚÐ-½ÐÐ
­Ÿ;ÚÐ-¾ÐÐ
­ ;ÚÐ-¿ÐÐ
­¡;ÚÐ-ÀÐÐ
­¢;ÚÐ-ÁÐÐ
­£;ÚÐ-ÂÐÐ
­¤;ÚÐ-ÃÐÐ
­hÚÐ-sÐÄ-ÅÐÆÇ-ÈÉÊÐËÌ­
\ No newline at end of file
+Gx_lKQ!0…jüo3BÓ˜ðèFLkSystem.StringL{6f9dac99-8de1-4efc-8465-68ac443b7d08}SpecialFuncL{0db3d7bb-cde0-4416-9a7b-ce49a0124323}NoneImplementationL{3b83b776-fb25-43b8-99f2-3c507c9143fc}TextDocument	L{f3878285-8e4f-490b-bb1b-9acbb7eb04db}
+TextLinesL{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}Id
longTagText// Componentsn_MQTT.IASyncPropertyProvider( IASyncPropertyProvider );b_MQTT.ITLSContextProvider( ITLSContextProvider );_MQTT();¸Connected := (NOT _MQTT.ClientError() AND NOT _MQTT.IsConnecting() AND _MQTT.IsConnected());T_SparkplugB( AllmetricsList := _Metrics );HIF _MQTT.STATEMessageReceived() THENž    _RecvSTATEMesg := _MQTT.GetSTATEMessage( MessageTopic => _RecvSTATETopic );Z    onSTATEMessage( Topic := _RecvSTATETopic,`                    Message := _RecvSTATEMesg );END_IFFIF _MQTT.NCMDMessageReceived() THENœ    _RecvNCMDMesg REF= _MQTT.GetNCMDMessage( MessageTopic => _RecvNCMDTopic );f    onNCMDMessage( pTopic := ADR( _RecvNCMDTopic ),Z                   pMessage := _RecvNCMDMesg, R                   Rebirth => _Rebirth );!v_ExponentialBackOff( Enable := (Connect AND NOT Connected),"n                     ConnectionTime := _ConnectionTime,#n                     LockTimesArray := _LockTimesArray,$R                     Enabled => _Enabled,%v                     OutTimeRemaining => _OutTimeRemaining,&~                     LockTimeRemaining => _LockTimeRemaining );'d_StateMachine( Connect := _ExponentialBackOff.out,(R               EoNConnected := Connected,)F               ReBirth := _Rebirth,*l               TimeToWait := TO_TIME( publishPeriod ),+J               pMQTT := ADR( _MQTT ),,b               pSparkplugB := ADR( _SparkplugB ),-8               pEoN := THIS,.X               SessionState => SessionState,/T               AllMetricsList := _Metrics,0P               DeviceList := _Devices );1$_Rebirth := FALSE;2V// update current number of plugged devices3JNumberOfDevices := _Devices.ListSize;4Diag();5Interface6L{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}7(*80    Edge of Network Node9Ö    Allows you to bidirectionally share sparkplug data from the edge of your network to a Primary Host Node:*);0{attribute 'reflection'}<\FUNCTION_BLOCK PUBLIC FB_Edge IMPLEMENTS IEdge=VAR_INPUT>€    ServerUrl     : STRING;          // eg:'test.mosquitto.org';?`    ServerPort    : UINT    := 1883; // eg: 1883@~    PrimaryHostID : WSTRING := "";   // eg:'PrimaryHostNode';  Aˆ    KeepAlive     : UINT    := 60;   // eg: 60 (Value is in seconds)BV    // Persistent Session (FALSE = DEFAULT)C°    //  * The client must get all messages from a certain topic, even if it is offline. Dò    //  * You want the broker to queue the messages for the client and deliver them as soon as the client is back online.EX    //  * The client has limited resources. Fˆ    //  * You want the broker to store the subscription information of the client and restore the interrupted communication quickly.GÈ    //  * The client needs to reNumberOfMetricse all QoS 1 and 2 publish messages after a reconnect.H    //  I8    //  Clean session (TRUE)Jà    //  * The client needs only to publish messages to topics, the client does not need to subscribe to topics. KÞ    //  * You don t want the broker to store session information or retry transmission of QoS 1 and 2 messages.L–    //  * The client does not need to get messages that it misses offline. M    //NH    CleanSession : BOOL    := FALSE;O’    Username     : WSTRING := ""; // specify a username if any (optional)Pª    Password     : WSTRING := ""; // specify the password for the username (optional)Q”    UseTLS       : BOOL; // Enables usage of the TLS encryption (optional)Rô    hCert        : SysTypes.RTS_IEC_HANDLE; // Handle to the client certificate (optional) and only used if UseTLS is TRUESx    GroupId             : WSTRING; // eg: "SparkplugBDevice"T`    NodeName            : WSTRING; // eg: "EoN1"UŒ    publishPeriod       : UINT; // eg: 5000 (Value is in milliseconds)Vö    ITLSContextProvider : MQTT.NBS.ITLSContext; //Encapsulates all the data neccessaray to handle encrypted tcp connectionsWˆ    //Static initialization, as shown in the following code snippet;X    //VARYV    //    commonName : STRING := 'MyRasPi';Z¸    //    ciCertInfo : NBS.CERT_INFO := (psInfo:=ADR(commonName), udiSize:=LEN(commonName));[X    //    myTLSContext : NBS.TLSContext := (\`    //        ePurpose:=NBS.PURPOSE.CLIENT_SIDE,]L    //        sUseCaseName:='NBSTest',^B    //        sTLSVersion:='1.3',_J    //        ciCertInfo:=ciCertInfo,`H    //        udiVerificationMode:=2a    //    );b    //END_VARcœ    IASyncPropertyProvider : MQTT.NBS.IAsyncProperty; // Runs the connect process in a own background task. Use this property if the connection setup takes longer than one task cycle (e.g. TLS connections) dEND_VAReVAR_OUTPUTf6    Connected       : BOOL;g`    SessionState    : SparkplugSessionStateType;h,	{attribute 'no_copy'}iJ    itfEdge         : IEdge := THIS^;j8    NumberOfDevices : UDINT;kVARl    Connect  : BOOL := TRUE; // TRUE: Connects EoN using the configured settings, FALSE: Disconnects EoN from server if it was connectedm:    _Enabled          : BOOL;n:    _Rebirth          : BOOL;oL    _ConnectionTime   : TIME := T#30S;p¤    _LockTimesArray   : ARRAY[1..8] OF TIME := [4(TIME#30S0MS), 2(TIME#1M0S0MS), TIME#2M0S0MS, TIME#4M0S0MS]; // could be made accessible public  q¢    _OutTimeRemaining     : TIME; // Duration of Out Time Period = TRUE remainingr¤    _LockTimeRemaining    : TIME; // Duration of Out Time Period = FALSE remainingsÄ    _ExponentialBackOff   : FB_ExponentialBackOffTimer; // Handles the Exponential Backoff ttimingt`    _StateMachine         : FB_EdgeStateMachine;ub    _TopicProvider        : FB_EdgeTopicProvider;vV    _NodeControl          : FB_NodeControl;w´    _cPrimaryHostID       : WSTRING; // Corrected PrimaryHostID, contains no illegal charsx¨    _cGroupId             : WSTRING; // Corrected GroupId, contains no illegal charsyª    _cNodeName            : WSTRING; // Corrected NodeName, contains no illegal charszP    _MQTT                 : FB_EdgeMQTT;{X    _MQTT_eError          : MQTT.MQTT_ERROR;|˜    _SparkplugB           : FB_SparkplugBSimple; // Handles SparkPlugB Stuff}„    _Devices              : List; // Handles all connected Devices~D    _prevNumberOfDevices  : UDINT;J    _ItfCurElement        : IElement;€D    _DeviceCnt            : UDINT;Z    _ItfCurDevice         : ISparkplugDevice;‚B    _HasItfDevice         : BOOL;ƒØ    _Metrics              : LIST; // Complete List Of All Metrics That Will ever be Sent, needed for NBIRTH „ˆ    _ChangeList           : LIST; // The Send list; Needed for NDATA…B    _Initialise           : BOOL;†B    _Disconnect           : BOOL;‡B    _Initialised          : BOOL;ˆB    _Reset                : BOOL;‰B    _SubscribeNCMD        : BOOL;ŠB    _UnSubscribeNCMD      : BOOL;‹B    _NodeBirthPublished   : BOOL;ŒB    _PublishNodeDataStart : BOOL;B    _DisablePublisher     : BOOL;Ž–    _LastWillTopic        : WSTRING(GC_Sparkplug.supported_string_lengths);¨    _NDEATH               : FB_RemoteMetric;    // contains the current NDEATH BDSeq¾    _NDEATHPayload        : ARRAY[0..255] OF BYTE; // what is the maximum size of this payload?‘D    _NDEATHPayloadSize    : UDINT;’€    _LastWillQos          : MQTT.MQTT_QOS := MQTT.MQTT_QOS.QoS0;“T    _LastWillRetain       : BOOL := FALSE;”¶    _NBIRTH               : FB_SparkplugUInt64;      // contains the current raw NBIRTH seq•¦    _Blob                 : ARRAY[0..65535] OF BYTE; // buffer for encoded messages–¨    _BlobSize             : UDINT;                   // current encoded message size—T    _NDATAEncoderPrepared : BOOL := FALSE;˜B    _PublishNDATA         : BOOL;™B    _ErrorDetected        : BOOL;šD    _ChangeError          : ERROR;›ä    _ChangeDetected       : BOOL;  // At least 1 Signal change has been detected; RBE needed next PublishInterval œÊ    _CurrentChanges       : UDINT; // Number of detected changes, each changes reflects 1 Signal     d    _MessageType          : SparkplugMessageTypes;žF    _RecvSTATEMesg        : STRING;Ÿ–    _RecvSTATETopic       : WSTRING(GC_Sparkplug.supported_string_lengths); ‚    _RecvNCMDMesg         : REFERENCE TO FB_PayloadSimpleDecoder;¡–    _RecvNCMDTopic        : WSTRING(GC_Sparkplug.supported_string_lengths);¢F    _Diag                 : STRING;£>    {attribute 'instance-path'}¤0    {attribute 'noinit'}¥$    _POU : STRING;¦"UniqueIdGenerator§
+15662¨POULevel©L{8e575c5b-1d37-49c6-941b-5c0ec7874787}ªStandard« ChildObjectGuids¬8System.Collections.ArrayList­,AddAttributeSubsequent®boolÐÐ-ÐÐ	E
+)ÐÐ
­=ÚÐ-ÐÐ
­=ÚÐ-ÐÐ
­	=ÚÐ-ÐÐ
­
+=ÚÐ-ÐÐ
­=ÚÐ-ÐÐ
­=ÚÐ-ÐÐ
­
=ÚÐ-ÐÐ
­=ÚÐ-ÐÐ
­=ÚÐ-ÐÐ
­=ÚÐ-ÐÐ
­=ÚÐ-ÐÐ
­=ÚÐ-ÐÐ
­=ÚÐ-ÐÐ
­=ÚÐ-ÐÐ
­=ÚÐ-ÐÐ
­=ÚÐ-ÐÐ
­=ÚÐ- ÐÐ
­=ÚÐ-ÐÐ
­=ÚÐ-ÐÐ
­=ÚÐ-!ÐÐ
­=ÚÐ-"ÐÐ
­=ÚÐ-#ÐÐ
­=ÚÐ-$ÐÐ
­=ÚÐ-%ÐÐ
­=ÚÐ-&ÐÐ
­ =ÚÐ-ÐÐ
­!=ÚÐ-'ÐÐ
­"=ÚÐ-(ÐÐ
­#=ÚÐ-)ÐÐ
­$=ÚÐ-*ÐÐ
­%=ÚÐ-+ÐÐ
­&=ÚÐ-,ÐÐ
­'=ÚÐ--ÐÐ
­(=ÚÐ-.ÐÐ
­)=ÚÐ-/ÐÐ
­*=ÚÐ-0ÐÐ
­+=ÚÐ-ÐÐ
­,=ÚÐ-1ÐÐ
­-=ÚÐ-2ÐÐ
­.=ÚÐ-3ÐÐ
­ÃÚÐ-4Ð56Ð	E
+rÐÐ
­–<ÚÐ-7ÐÐ
­—<ÚÐ-8ÐÐ
­˜<ÚÐ-9ÐÐ
­™<ÚÐ-:ÐÐ
­š<ÚÐ-;ÐÐ
­›<ÚÐ-<ÐÐ
­œ<ÚÐ-=ÐÐ
­<ÚÐ->ÐÐ
­ž<ÚÐ-?ÐÐ
­Ÿ<ÚÐ-@ÐÐ
­ <ÚÐ-AÐÐ
­¡<ÚÐ-BÐÐ
­¢<ÚÐ-CÐÐ
­£<ÚÐ-DÐÐ
­¤<ÚÐ-EÐÐ
­¥<ÚÐ-FÐÐ
­¦<ÚÐ-GÐÐ
­§<ÚÐ-HÐÐ
­¨<ÚÐ-IÐÐ
­©<ÚÐ-JÐÐ
­ª<ÚÐ-KÐÐ
­«<ÚÐ-LÐÐ
­¬<ÚÐ-MÐÐ
­­<ÚÐ-NÐÐ
­®<ÚÐ-OÐÐ
­¯<ÚÐ-PÐÐ
­°<ÚÐ-QÐÐ
­±<ÚÐ-RÐÐ
­²<ÚÐ-SÐÐ
­³<ÚÐ-TÐÐ
­´<ÚÐ-UÐÐ
­µ<ÚÐ-VÐÐ
­¶<ÚÐ-WÐÐ
­·<ÚÐ-MÐÐ
­¸<ÚÐ-XÐÐ
­¹<ÚÐ-YÐÐ
­º<ÚÐ-ZÐÐ
­»<ÚÐ-[ÐÐ
­¼<ÚÐ-\ÐÐ
­½<ÚÐ-]ÐÐ
­¾<ÚÐ-^ÐÐ
­¿<ÚÐ-_ÐÐ
­À<ÚÐ-`ÐÐ
­Á<ÚÐ-aÐÐ
­Â<ÚÐ-bÐÐ
­Ã<ÚÐ-cÐÐ
­Ä<ÚÐ-dÐÐ
­Å<ÚÐ-eÐÐ
­Æ<ÚÐ-fÐÐ
­Ç<ÚÐ-gÐÐ
­È<ÚÐ-hÐÐ
­É<ÚÐ-iÐÐ
­Ê<ÚÐ-jÐÐ
­Ë<ÚÐ-dÐÐ
­Ì<ÚÐ-kÐÐ
­Í<ÚÐ-lÐÐ
­Î<ÚÐ-mÐÐ
­Ï<ÚÐ-nÐÐ
­Ð<ÚÐ-oÐÐ
­Ñ<ÚÐ-pÐÐ
­Ò<ÚÐ-qÐÐ
­Ó<ÚÐ-rÐÐ
­Ô<ÚÐ-sÐÐ
­Õ<ÚÐ-tÐÐ
­Ö<ÚÐ-uÐÐ
­×<ÚÐ-vÐÐ
­Ø<ÚÐ-wÐÐ
­Ù<ÚÐ-xÐÐ
­Ú<ÚÐ-yÐÐ
­Û<ÚÐ-zÐÐ
­Ü<ÚÐ-{ÐÐ
­Ý<ÚÐ-|ÐÐ
­Þ<ÚÐ-}ÐÐ
­ß<ÚÐ-~ÐÐ
­à<ÚÐ-ÐÐ
­á<ÚÐ-€ÐÐ
­â<ÚÐ-ÐÐ
­ã<ÚÐ-‚ÐÐ
­ä<ÚÐ-ƒÐÐ
­å<ÚÐ-„ÐÐ
­æ<ÚÐ-…ÐÐ
­ç<ÚÐ-†ÐÐ
­è<ÚÐ-‡ÐÐ
­é<ÚÐ-ˆÐÐ
­ê<ÚÐ-‰ÐÐ
­ë<ÚÐ-ŠÐÐ
­ì<ÚÐ-‹ÐÐ
­í<ÚÐ-ŒÐÐ
­î<ÚÐ-ÐÐ
­ï<ÚÐ-ŽÐÐ
­ð<ÚÐ-ÐÐ
­ñ<ÚÐ-ÐÐ
­ò<ÚÐ-‘ÐÐ
­ó<ÚÐ-’ÐÐ
­ô<ÚÐ-“ÐÐ
­õ<ÚÐ-”ÐÐ
­ö<ÚÐ-•ÐÐ
­÷<ÚÐ-–ÐÐ
­ø<ÚÐ-—ÐÐ
­ù<ÚÐ-˜ÐÐ
­ú<ÚÐ-™ÐÐ
­û<ÚÐ-šÐÐ
­ü<ÚÐ-›ÐÐ
­ý<ÚÐ-œÐÐ
­þ<ÚÐ-ÐÐ
­ÿ<ÚÐ-žÐÐ
­=ÚÐ-ŸÐÐ
­=ÚÐ- ÐÐ
­=ÚÐ-¡ÐÐ
­=ÚÐ-¢ÐÐ
­=ÚÐ-£ÐÐ
­=ÚÐ-¤ÐÐ
­=ÚÐ-¥ÐÐ
­hÚÐ-dЦ-§Ш©-ª«¬Э®­
\ No newline at end of file