--- a/branches/h-hermsen/mqttsparkplugb/SparkplugB/Function Blocks/FB_Device/FB_Device/svnobj
+++ b/branches/h-hermsen/mqttsparkplugb/SparkplugB/Function Blocks/FB_Device/FB_Device/svnobj
@@ -1,6 +1,6 @@
-Gx_l$E!0…jüo5c{ˆÎñ'ÇT±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
longTagTextJPluggedIntoEoN := IsPluggedIntoEoN();F_EonPlugged(CLK := PluggedIntoEoN);H_EonUnlugged(CLK := PluggedIntoEoN);*IF _EonPlugged.Q THEN¼    WriteDeviceLog(UDINT_TO_DWORD(CmpLog.LogClass.LOG_INFO), 'Device plugged into %s', 'EoN');END_IF,IF _EonUnlugged.Q THENÀ    WriteDeviceLog(UDINT_TO_DWORD(CmpLog.LogClass.LOG_INFO), 'Device unplugged from %s', 'EoN');F// Continously check the plug state8IF THIS^.PluggedIntoEoN THEN0    // Check EoN pointer,    IF _pEoN <> 0 THENJ        // Read the currect EoN State\        _EoNSession := _pEoN^.ConnectionState;    ELSE b        // Plugged but no valid EoN => To Offline!^        DeviceState := DeviceStateType.OFFLINE;"    END_IF    #ELSE$&    // not plugged %Z    DeviceState := DeviceStateType.UNPLUGGED;&\    // Set To OFFLINE because we are unplugged'j    _EoNSession := SparkplugSessionStateType.OFFLINE;(°_EoNONLINE(CLK := (_EoNSession = SparkplugSessionStateType.ONLINE), Q => _EoNisONLINE );)(IF _EoNisONLINE THEN*:    // EoN Onlione => To init+P    DeviceState := DeviceStateType.INIT;,END_IF;-¶_EoNOFFLINE(CLK := (_EoNSession = SparkplugSessionStateType.OFFLINE), Q => _EonisOFFLINE );.*IF _EonisOFFLINE THEN/L    // Push Device to Exit            0V    DeviceState := DeviceStateType.EXITING;1&CASE DeviceState OF2<    DeviceStateType.UNPLUGGED:3‚                        DeviceState := DeviceStateType.UNPLUGGED;48    DeviceStateType.OFFLINE:5~                        DeviceState := DeviceStateType.OFFLINE;62    DeviceStateType.INIT:7`                        IF NOT _Initialised THEN8j                            // Initialises the DEVICE9r                            _Initialised := Initialise();:8                        ELSE;”                            DeviceState := DeviceStateType.PUBLISH_DBIRTH;<<                        END_IF=F    DeviceStateType.PUBLISH_DBIRTH:>r                        IF NOT _DeviceBirthPublished THEN?‚                            // should contain 0 after first birth@Ø                            _DeviceBirthPublished := _pEoN^.PublishDBIRTH(GroupID        := _pEoN^._GroupId,AÚ                                                                          NodeName       := _pEoN^._NodeName,BÐ                                                                          DeviceName     := THIS^._Name,CÚ                                                                          AllMetricsList := _AllMetricsList);D„                            DeviceState := DeviceStateType.ONLINE;E6    DeviceStateType.ONLINE:F6                        // G2                        ;H8    DeviceStateType.EXITING:IP                        // Un-initialiseJ>                        // INITK\                        _Initialised := FALSE;L                 MR                        // PUBLISH_DBIRTHNn                        _DeviceBirthPublished := FALSE;OR                        // ONLINE        P<                        // ...Q
-    ;REND_CASES,// Update Device StateTNIF DeviceState <> _LastDeviceState THENUŅ    WriteDeviceLog(UDINT_TO_DWORD(CmpLog.LogClass.LOG_INFO), 'Device State: %s', TO_STRING(DeviceState));V@_LastDeviceState := DeviceState;W&// Device DiagnosisXDiag();YInterfaceZL{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}[hFUNCTION_BLOCK FB_Device IMPLEMENTS ISparkplugDevice\VAR_INPUT]Ø    Name           : WSTRING;                  // A name for this device eg: "FT001"^Š    Description    : WSTRING;                  // A description for this device eg: "Flow Transmitter 1"_Ž    ItfEoNInstance : ISparkplugDeviceProtocol; // Connect EoN instance `¼    //TriggerDDEATH  : BOOL;                     // Trigger DDEATH Publishing (Only if ONLINE)aEND_VARbVAR_OUTPUTc4    PluggedIntoEoN : BOOL;dJ    DeviceState    : DeviceStateType;eVAR_IN_OUTft    arSparkplugBoolean  : ARRAY[*] OF FB_SparkplugBoolean;gv    arSparkplugDateTime : ARRAY[*] OF FB_SparkplugDateTime;hp    arSparkplugFloat    : ARRAY[*] OF FB_SparkplugFloat;ir    arSparkplugDouble   : ARRAY[*] OF FB_SparkplugDouble;jn    arSparkplugInt8     : ARRAY[*] OF FB_SparkplugInt8;kp    arSparkplugInt16    : ARRAY[*] OF FB_SparkplugInt16;lp    arSparkplugInt32    : ARRAY[*] OF FB_SparkplugInt32;mp    arSparkplugInt64    : ARRAY[*] OF FB_SparkplugInt64;np    arSparkplugUInt8    : ARRAY[*] OF FB_SparkplugUInt8;or    arSparkplugUInt16   : ARRAY[*] OF FB_SparkplugUInt16;pr    arSparkplugUInt32   : ARRAY[*] OF FB_SparkplugUInt32;qr    arSparkplugUInt64   : ARRAY[*] OF FB_SparkplugUInt64;rn    arSparkplugUUID     : ARRAY[*] OF FB_SparkplugUUID;sn    arSparkplugText     : ARRAY[*] OF FB_SparkplugText;tr    arSparkplugString   : ARRAY[*] OF FB_SparkplugString;uVARv”    _Name                 : WSTRING; // A name for this device eg: "FT001"w¼    _Description          : WSTRING; // A description for this device eg: "Flow Transmitter 1"xH    _Element              : Element;y’    _LastDeviceState      : DeviceStateType := DeviceStateType.UNPLUGGED;zF    _EonPlugged           : R_TRIG;{F    _EonUnlugged          : F_TRIG;|j    _itfPrevEoN           : ISparkplugDeviceProtocol;}~    _pEoN                 : POINTER TO FB_Edge_Of_Network_Node;~¶    _EoNSession           : SparkplugSessionStateType := SparkplugSessionStateType.OFFLINE;F    _EoNONLINE            : R_TRIG;€D    _EoNisONLINE           : BOOL;F    _EonOFFLINE           : R_TRIG;‚D    _EonisOFFLINE          : BOOL;ƒB    _Initialised          : BOOL;„B    _DeviceBirthPublished : BOOL;…l    _AllMetricsList       : LIST; // Complete List    †f    _ChangeList           : LIST; // The Send list;‡B    _ChangeDetected       : BOOL;ˆB    _ChangeError          : BOOL;‰B    _ErrorDetected        : BOOL;ŠD    _CurrentChanges       : UDINT;‹F    _Diag                 : STRING;ŒVAR CONSTANT    // ASCIIŽ6    WAIT : STRING := '...';*    // UTF-8 encodingP    FW_SLASH           : WSTRING := "/";‘^    SPARKPLUGB         : WSTRING := "spBv1.0/";’R    TOPIC_FILTER_POUND : WSTRING := "/#";“R    TOPIC_FILTER_PLUS  : WSTRING := "/+";”^    NODE_DEATH_TOPIC   : WSTRING := "/NDEATH/";•^    NODE_BIRTH_TOPIC   : WSTRING := "/NBIRTH/";–\    NODE_DATA_TOPIC    : WSTRING := "/NDATA/";—^    DEVICE_DEATH_TOPIC : WSTRING := "/DDEATH/";˜^    DEVICE_BIRTH_TOPIC : WSTRING := "/DBIRTH/";™\    DEVICE_DATA_TOPIC  : WSTRING := "/DDATA/";šZ    NCMD               : WSTRING := "/NCMD/";›Z    DCMD               : WSTRING := "/DCMD/";œP    POUND              : WSTRING := "#";P    PLUS               : WSTRING := "+";žP    UNDERSCORE         : WSTRING := "_";Ÿ"UniqueIdGenerator 1644”POULevel¢L{8e575c5b-1d37-49c6-941b-5c0ec7874787}£Standard¤ ChildObjectGuids„8System.Collections.ArrayList¦,AddAttributeSubsequent§boolŠŠ-ŠŠ	E
-^ÐÐ
­¾ÚÐ-ÐÐ
­¿ÚÐ-ÐÐ
­ÀÚÐ-ÐÐ
­ÂÚÐ-ÐÐ
­ÃÚÐ-ÐÐ
­ÄÚÐ-ÐÐ
­ÆÚÐ-ÐÐ
­ÇÚÐ-ÐÐ
­ÈÚÐ-ÐÐ
­2ÚÐ-ÐÐ
­3ÚÐ-ÐÐ
­4ÚÐ-ÐÐ
­eÚÐ-ÐÐ
­_ÚÐ-ÐÐ
­`ÚÐ-ÐÐ
­aÚÐ-ÐÐ
­jÚÐ-ÐÐ
­kÚÐ- ÐÐ
­lÚÐ-!ÐÐ
­^ÚÐ-"ÐÐ
­ÜÚÐ-#ÐÐ
­ÝÚÐ-$ÐÐ
­ÞÚÐ-%ÐÐ
­gÚÐ-&ÐÐ
­fÚÐ-'ÐÐ
­(ÚÐ-ÐÐ
­WÚÐ-ÐÐ
­YÚÐ-(ÐÐ
­7ÚÐ-)ÐÐ
­8ÚÐ-*ÐÐ
­9ÚÐ-+ÐÐ
­:ÚÐ-,ÐÐ
­iÚÐ-ÐÐ
­hÚÐ--ÐÐ
­<ÚÐ-.ÐÐ
­=ÚÐ-/ÐÐ
­>ÚÐ-0ÐÐ
­5ÚÐ-ÐÐ
­àÚÐ-ÐÐ
­AÚÐ-1ÐÐ
­PÚÐ-2ÐÐ
­QÚÐ-3ÐÐ
­OÚÐ-ÐÐ
­NÚÐ-ÐÐ
­âÚÐ-4ÐÐ
­ãÚÐ-5ÐÐ
­äÚÐ-ÐÐ
­åÚÐ-6ÐÐ
­æÚÐ-7ÐÐ
­çÚÐ-8ÐÐ
­èÚÐ-9ÐÐ
­éÚÐ-:ÐÐ
­êÚÐ-;ÐÐ
­ëÚÐ-<ÐÐ
­ìÚÐ-ÐÐ
­íÚÐ-=ÐÐ
­îÚÐ->ÐÐ
­ïÚÐ-?ÐÐ
­ðÚÐ-@ÐÐ
­ñÚÐ-AÐÐ
­òÚÐ-BÐÐ
­óÚÐ-CÐÐ
­ôÚÐ-:ÐÐ
­õÚÐ-DÐÐ
­öÚÐ-<ÐÐ
­÷ÚÐ-ÐÐ
­øÚÐ-EÐÐ
­ùÚÐ-FÐÐ
­úÚÐ-GÐÐ
­ûÚÐ-ÐÐ
­üÚÐ-HÐÐ
­ýÚÐ-IÐÐ
­þÚÐ-5ÐÐ
­ÿÚÐ-JÐÐ
­ÚÐ-KÐÐ
­ÚÐ-LÐÐ
­ÚÐ-MÐÐ
­ÚÐ-NÐÐ
­ÚÐ-OÐÐ
­ÚÐ-PÐÐ
­ÚÐ-ÐÐ
­ÚÐ-#ÐÐ
­	ÚÐ-QÐÐ
­
-ÚÐ-RÐÐ
­ÚÐ-ÐÐ
­ÚÐ-SÐÐ
­
ÚÐ-TÐÐ
­ÚÐ-UÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-VÐÐ
­ÚÐ-ÐÐ
­ÚÐ-WÐÐ
­UÚÐ-XÐYZÐ	E
-HÐÐ
­ÚÐ-[ÐÐ
­ÚÐ-\ÐÐ
­ÚÐ-]ÐÐ
­ÚÐ-^ÐÐ
­ÚÐ-_ÐÐ
­ ÚÐ-`ÐÐ
­!ÚÐ-aÐÐ
­"ÚÐ-bÐÐ
­#ÚÐ-cÐÐ
­$ÚÐ-dÐÐ
­%ÚÐ-aÐÐ
­&ÚÐ-eÐÐ
­'ÚÐ-fÐÐ
­(ÚÐ-gÐÐ
­)ÚÐ-hÐÐ
­*ÚÐ-iÐÐ
­+ÚÐ-jÐÐ
­,ÚÐ-kÐÐ
­-ÚÐ-lÐÐ
­.ÚÐ-mÐÐ
­/ÚÐ-nÐÐ
­0ÚÐ-oÐÐ
­1ÚÐ-pÐÐ
­2ÚÐ-qÐÐ
­3ÚÐ-rÐÐ
­4ÚÐ-sÐÐ
­5ÚÐ-tÐÐ
­6ÚÐ-aÐÐ
­7ÚÐ-uÐÐ
­8ÚÐ-vÐÐ
­9ÚÐ-wÐÐ
­:ÚÐ-xÐÐ
­=ÚÐ-yÐÐ
­>ÚÐ-zÐÐ
­?ÚÐ-{ÐÐ
­³ÚÐ-|ÐÐ
­´ÚÐ-}ÐÐ
­ZÚÐ-~ÐÐ
­µÚÐ-ÐÐ
­ÚÐ-€ÐÐ
­¶ÚÐ-ÐÐ
­ÚÐ-‚ÐÐ
­@ÚÐ-ƒÐÐ
­AÚÐ-„ÐÐ
­BÚÐ-…ÐÐ
­CÚÐ-†ÐÐ
­DÚÐ-‡ÐÐ
­EÚÐ-ˆÐÐ
­FÚÐ-‰ÐÐ
­GÚÐ-ŠÐÐ
­HÚÐ-‹ÐÐ
­IÚÐ-aÐÐ
­JÚÐ-ŒÐÐ
­KÚÐ-ÐÐ
­LÚÐ-ŽÐÐ
­MÚÐ-ÐÐ
­NÚÐ-ÐÐ
­OÚÐ-‘ÐÐ
­PÚÐ-’ÐÐ
­QÚÐ-“ÐÐ
­RÚÐ-”ÐÐ
­SÚÐ-•ÐÐ
­TÚÐ-–ÐÐ
­UÚÐ-—ÐÐ
­VÚÐ-˜ÐÐ
­WÚÐ-™ÐÐ
­XÚÐ-šÐÐ
­YÚÐ-›ÐÐ
­ZÚÐ-œÐÐ
­[ÚÐ-ÐÐ
­\ÚÐ-žÐÐ
­‘ÚÐ-aП- С¢-£¤¥Ц§­
\ No newline at end of file
+Gx_l}a!0…jüoL…ø/¤8ó¤§'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
longTagTextJPluggedIntoEoN := IsPluggedIntoEoN();F_EonPlugged(CLK := PluggedIntoEoN);H_EonUnlugged(CLK := PluggedIntoEoN);*IF _EonPlugged.Q THEN¼    WriteDeviceLog(UDINT_TO_DWORD(CmpLog.LogClass.LOG_INFO), 'Device plugged into %s', 'EoN');END_IF,IF _EonUnlugged.Q THENÀ    WriteDeviceLog(UDINT_TO_DWORD(CmpLog.LogClass.LOG_INFO), 'Device unplugged from %s', 'EoN');F// Continously check the plug state8IF THIS^.PluggedIntoEoN THEN0    // Check EoN pointer,    IF _pEoN <> 0 THENJ        // Read the currect EoN State\        _EoNSession := _pEoN^.ConnectionState;    ELSE b        // Plugged but no valid EoN => To Offline!^        DeviceState := DeviceStateType.OFFLINE;"    END_IF    #ELSE$&    // not plugged %Z    DeviceState := DeviceStateType.UNPLUGGED;&\    // Set To OFFLINE because we are unplugged'j    _EoNSession := SparkplugSessionStateType.OFFLINE;(°_EoNONLINE(CLK := (_EoNSession = SparkplugSessionStateType.ONLINE), Q => _EoNisONLINE );)(IF _EoNisONLINE THEN*:    // EoN Onlione => To init+P    DeviceState := DeviceStateType.INIT;,END_IF;-¶_EoNOFFLINE(CLK := (_EoNSession = SparkplugSessionStateType.OFFLINE), Q => _EonisOFFLINE );.*IF _EonisOFFLINE THEN/L    // Push Device to Exit            0V    DeviceState := DeviceStateType.EXITING;1&CASE DeviceState OF2<    DeviceStateType.UNPLUGGED:3‚                        DeviceState := DeviceStateType.UNPLUGGED;48    DeviceStateType.OFFLINE:5~                        DeviceState := DeviceStateType.OFFLINE;62    DeviceStateType.INIT:7`                        IF NOT _Initialised THEN8j                            // Initialises the DEVICE9r                            _Initialised := Initialise();:8                        ELSE;”                            DeviceState := DeviceStateType.PUBLISH_DBIRTH;<<                        END_IF=F    DeviceStateType.PUBLISH_DBIRTH:>r                        IF NOT _DeviceBirthPublished THEN?‚                            // should contain 0 after first birth@Ø                            _DeviceBirthPublished := _pEoN^.PublishDBIRTH(GroupID        := _pEoN^._GroupId,AÚ                                                                          NodeName       := _pEoN^._NodeName,BÐ                                                                          DeviceName     := THIS^._Name,CÚ                                                                          AllMetricsList := _AllMetricsList);D„                            DeviceState := DeviceStateType.ONLINE;E6    DeviceStateType.ONLINE:F¨    // Detect if any Device values have changed and add them to the Encoder directlyG							//  If we have sent recently (_PublishBlocked), then do not checkHd							//  If we are rebirthing, then do not checkIr                            IF (NOT _PublishBlocked) THENJX								// Set Prepare NDATA Payload EncoderKz								IF NOT(_DDATAEncoderPrepared) OR _ChangeDetected THENL´									_DDATAEncoderPrepared := THIS^.PrepareDDATA( AllMetricsList := _AllMetricsList );M.								END_IF;        N								O¢								// Detect EoN data changes and feed them to the encoder for NDATA payloadPÀ								_ChangeError := _pEoN^._SparkplugB.FindChanges(arSparkplugBoolean:= arSparkplugBoolean, Q~																			 arSparkplugDateTime:= arSparkplugDateTime, Rr																			 arSparkplugFloat:= arSparkplugFloat, Sv																			 arSparkplugDouble:= arSparkplugDouble, Tn																			 arSparkplugInt8:= arSparkplugInt8, Ur																			 arSparkplugInt16:= arSparkplugInt16, Vr																			 arSparkplugInt32:= arSparkplugInt32, Wr																			 arSparkplugInt64:= arSparkplugInt64, Xr																			 arSparkplugUInt8:= arSparkplugUInt8, Yv																			 arSparkplugUInt16:= arSparkplugUInt16, Zv																			 arSparkplugUInt32:= arSparkplugUInt32, [v																			 arSparkplugUInt64:= arSparkplugUInt64, \n																			 arSparkplugUUID:= arSparkplugUUID, ]n																			 arSparkplugText:= arSparkplugText, ^v																			 arSparkplugString:= arSparkplugString, _l																			 AllMetricsList:= _AllMetricsList, `n																			 ChangeDetected => _ChangeDetected, aj																			 ErrorDetected => _ErrorDetected, bp																			 NumberOfChanges => _CurrentChanges);c€								IF _ChangeError <> ERROR.NO_ERROR OR _ErrorDetected THENd„									WriteDeviceLog( UDINT_TO_DWORD(CmpLog.LogClass.LOG_INFO), 'EoN FindChanges Error: %s', TO_STRING(_ChangeError) );        e								END_IFf									 gr								IF _DDATAEncoderPrepared AND _ChangeDetected THENh									WriteDeviceLog( UDINT_TO_DWORD(CmpLog.LogClass.LOG_INFO), 'EoN FindChanges Detected: %s', TO_STRING(_CurrentChanges) );        iÆ									_PublishNDATAError := _pEoN^.PublishDDATA( AllMetricsList := _AllMetricsList );           j							END_IFk–							_PublishBlockTimerEnable := _ChangeDetected AND NOT _PublishBlocked;lr							_PublishBlockTimer(IN := _PublishBlockTimerEnable,mp											   PT := UINT_TO_TIME( _pEoN^.publishPeriod),nB												Q => _PublishBlocked,o^											   ET => _PublishBlockTimerElapsed);p8    DeviceStateType.EXITING:qP                        // Un-initialiser>                        // INITs\                        _Initialised := FALSE;t                 uR                        // PUBLISH_DBIRTHvn                        _DeviceBirthPublished := FALSE;wR                        // ONLINE        x<                        // ...y
+    ;zEND_CASE{,// Update Device State|NIF DeviceState <> _LastDeviceState THEN}Ò    WriteDeviceLog(UDINT_TO_DWORD(CmpLog.LogClass.LOG_INFO), 'Device State: %s', TO_STRING(DeviceState));~@_LastDeviceState := DeviceState;&// Device Diagnosis€Diag();Interface‚L{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}ƒ0{attribute 'reflection'}„hFUNCTION_BLOCK FB_Device IMPLEMENTS ISparkplugDevice…VAR_INPUT†¨    Name           : WSTRING;                  // A name for this device eg: "FT001"‡Ð    Description    : WSTRING;                  // A description for this device eg: "Flow Transmitter 1"ˆŽ    ItfEoNInstance : ISparkplugDeviceProtocol; // Connect EoN instance ‰¼    //TriggerDDEATH  : BOOL;                     // Trigger DDEATH Publishing (Only if ONLINE)ŠEND_VAR‹VAR_OUTPUTŒ4    PluggedIntoEoN : BOOL;J    DeviceState    : DeviceStateType;ŽVAR_IN_OUTt    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Ÿœ    _Name                     : WSTRING; // A name for this device eg: "FT001" Ä    _Description              : WSTRING; // A description for this device eg: "Flow Transmitter 1"¡P    _Element                  : Element;¢š    _LastDeviceState          : DeviceStateType := DeviceStateType.UNPLUGGED;£N    _EonPlugged               : R_TRIG;¤N    _EonUnlugged              : F_TRIG;¥r    _itfPrevEoN               : ISparkplugDeviceProtocol;¦†    _pEoN                     : POINTER TO FB_Edge_Of_Network_Node;§¾    _EoNSession               : SparkplugSessionStateType := SparkplugSessionStateType.OFFLINE;¨N    _EoNONLINE                : R_TRIG;©J    _EoNisONLINE              : BOOL;ªN    _EonOFFLINE               : R_TRIG;«J    _EonisOFFLINE             : BOOL;¬J    _Initialised              : BOOL;­J    _DeviceBirthPublished     : BOOL;®t    _AllMetricsList           : LIST; // Complete List    ¯n    _ChangeList               : LIST; // The Send list;°N    _Diag                     : STRING;±F    _PublishBlockTimer        : TP;²J    _PublishBlockTimerEnable  : BOOL;³J    _PublishBlockTimerElapsed : TIME;´‚    _PublishBlocked           : BOOL; // Status of the BlockTimerµ\    _DDATAEncoderPrepared     : BOOL := FALSE;¶J    _PublishNDATAError        : BOOL;·J    _ChangeDetected           : BOOL;¸L    _ChangeError              : ERROR;¹J    _ErrorDetected            : BOOL;ºL    _CurrentChanges           : UDINT;»>    {attribute 'instance-path'}¼0    {attribute 'noinit'}½$    _POU : STRING;¾VAR CONSTANT¿    // ASCIIÀ6    WAIT : STRING := '...';Á*    // UTF-8 encodingÂP    FW_SLASH           : WSTRING := "/";Ã^    SPARKPLUGB         : WSTRING := "spBv1.0/";ÄR    TOPIC_FILTER_POUND : WSTRING := "/#";ÅR    TOPIC_FILTER_PLUS  : WSTRING := "/+";Æ^    NODE_DEATH_TOPIC   : WSTRING := "/NDEATH/";Ç^    NODE_BIRTH_TOPIC   : WSTRING := "/NBIRTH/";È\    NODE_DATA_TOPIC    : WSTRING := "/NDATA/";É^    DEVICE_DEATH_TOPIC : WSTRING := "/DDEATH/";Ê^    DEVICE_BIRTH_TOPIC : WSTRING := "/DBIRTH/";Ë\    DEVICE_DATA_TOPIC  : WSTRING := "/DDATA/";ÌZ    NCMD               : WSTRING := "/NCMD/";ÍZ    DCMD               : WSTRING := "/DCMD/";ÎP    POUND              : WSTRING := "#";ÏP    PLUS               : WSTRING := "+";ÐP    UNDERSCORE         : WSTRING := "_";Ñ"UniqueIdGeneratorÒ2191ÓPOULevelÔL{8e575c5b-1d37-49c6-941b-5c0ec7874787}ÕStandardÖ ChildObjectGuids×8System.Collections.ArrayListØ,AddAttributeSubsequentÙboolÐÐ-ÐÐ	E
+ˆÐÐ
­ÚÐ-ÐÐ
­	ÚÐ-ÐÐ
­
+ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­
ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ- ÐÐ
­ÚÐ-!ÐÐ
­ÚÐ-"ÐÐ
­ÚÐ-#ÐÐ
­ÚÐ-$ÐÐ
­ÚÐ-%ÐÐ
­ÚÐ-&ÐÐ
­ ÚÐ-'ÐÐ
­!ÚÐ-ÐÐ
­"ÚÐ-ÐÐ
­#ÚÐ-(ÐÐ
­$ÚÐ-)ÐÐ
­%ÚÐ-*ÐÐ
­&ÚÐ-+ÐÐ
­'ÚÐ-,ÐÐ
­(ÚÐ-ÐÐ
­)ÚÐ--ÐÐ
­*ÚÐ-.ÐÐ
­+ÚÐ-/ÐÐ
­,ÚÐ-0ÐÐ
­-ÚÐ-ÐÐ
­.ÚÐ-ÐÐ
­/ÚÐ-1ÐÐ
­0ÚÐ-2ÐÐ
­1ÚÐ-3ÐÐ
­2ÚÐ-ÐÐ
­3ÚÐ-ÐÐ
­4ÚÐ-4ÐÐ
­5ÚÐ-5ÐÐ
­6ÚÐ-ÐÐ
­7ÚÐ-6ÐÐ
­8ÚÐ-7ÐÐ
­9ÚÐ-8ÐÐ
­:ÚÐ-9ÐÐ
­;ÚÐ-:ÐÐ
­<ÚÐ-;ÐÐ
­=ÚÐ-<ÐÐ
­>ÚÐ-ÐÐ
­?ÚÐ-=ÐÐ
­@ÚÐ->ÐÐ
­AÚÐ-?ÐÐ
­BÚÐ-@ÐÐ
­CÚÐ-AÐÐ
­DÚÐ-BÐÐ
­EÚÐ-CÐÐ
­FÚÐ-:ÐÐ
­GÚÐ-DÐÐ
­HÚÐ-<ÐÐ
­IÚÐ-ÐÐ
­JÚÐ-EÐÐ
­KÚÐ-FÐÐ
­LÚÐ-GÐÐ
­MÚÐ-HÐÐ
­NÚÐ-IÐÐ
­OÚÐ-JÐÐ
­PÚÐ-KÐÐ
­QÚÐ-LÐÐ
­RÚÐ-MÐÐ
­SÚÐ-NÐÐ
­TÚÐ-OÐÐ
­UÚÐ-PÐÐ
­VÚÐ-QÐÐ
­WÚÐ-RÐÐ
­XÚÐ-SÐÐ
­YÚÐ-TÐÐ
­ZÚÐ-UÐÐ
­[ÚÐ-VÐÐ
­\ÚÐ-WÐÐ
­]ÚÐ-XÐÐ
­^ÚÐ-YÐÐ
­_ÚÐ-ZÐÐ
­`ÚÐ-[ÐÐ
­aÚÐ-\ÐÐ
­bÚÐ-]ÐÐ
­cÚÐ-^ÐÐ
­dÚÐ-_ÐÐ
­eÚÐ-`ÐÐ
­fÚÐ-aÐÐ
­gÚÐ-bÐÐ
­hÚÐ-NÐÐ
­iÚÐ-cÐÐ
­jÚÐ-dÐÐ
­kÚÐ-eÐÐ
­lÚÐ-fÐÐ
­mÚÐ-gÐÐ
­nÚÐ-hÐÐ
­oÚÐ-iÐÐ
­pÚÐ-eÐÐ
­qÚÐ-jÐÐ
­rÚÐ-kÐÐ
­sÚÐ-lÐÐ
­tÚÐ-mÐÐ
­uÚÐ-nÐÐ
­vÚÐ-oÐÐ
­wÚÐ-ÐÐ
­xÚÐ-pÐÐ
­yÚÐ-qÐÐ
­zÚÐ-5ÐÐ
­{ÚÐ-rÐÐ
­|ÚÐ-sÐÐ
­}ÚÐ-tÐÐ
­~ÚÐ-uÐÐ
­ÚÐ-vÐÐ
­€ÚÐ-wÐÐ
­ÚÐ-xÐÐ
­‚ÚÐ-ÐÐ
­ƒÚÐ-#ÐÐ
­„ÚÐ-yÐÐ
­…ÚÐ-zÐÐ
­†ÚÐ-ÐÐ
­‡ÚÐ-{ÐÐ
­ˆÚÐ-|ÐÐ
­‰ÚÐ-}ÐÐ
­ŠÚÐ-ÐÐ
­‹ÚÐ-ÐÐ
­ŒÚÐ-~ÐÐ
­ÚÐ-ÐÐ
­ŽÚÐ-ÐÐ
­UÚÐ-€Ё‚Ð	E
+TÐÐ
­µÚÐ-ƒÐÐ
­¶ÚÐ-„ÐÐ
­·ÚÐ-…ÐÐ
­¸ÚÐ-†ÐÐ
­¹ÚÐ-‡ÐÐ
­ºÚÐ-ˆÐÐ
­»ÚÐ-‰ÐÐ
­¼ÚÐ-ŠÐÐ
­½ÚÐ-‹ÐÐ
­¾ÚÐ-ŒÐÐ
­¿ÚÐ-ÐÐ
­ÀÚÐ-ŠÐÐ
­ÁÚÐ-ŽÐÐ
­ÂÚÐ-ÐÐ
­ÃÚÐ-ÐÐ
­ÄÚÐ-‘ÐÐ
­ÅÚÐ-’ÐÐ
­ÆÚÐ-“ÐÐ
­ÇÚÐ-”ÐÐ
­ÈÚÐ-•ÐÐ
­ÉÚÐ-–ÐÐ
­ÊÚÐ-—ÐÐ
­ËÚÐ-˜ÐÐ
­ÌÚÐ-™ÐÐ
­ÍÚÐ-šÐÐ
­ÎÚÐ-›ÐÐ
­ÏÚÐ-œÐÐ
­ÐÚÐ-ÐÐ
­ÑÚÐ-ŠÐÐ
­ÒÚÐ-žÐÐ
­ÓÚÐ-ÐÐ
­ÔÚÐ-ŸÐÐ
­ÕÚÐ- ÐÐ
­ÖÚÐ-¡ÐÐ
­×ÚÐ-¢ÐÐ
­ØÚÐ-£ÐÐ
­ÙÚÐ-¤ÐÐ
­ÚÚÐ-¥ÐÐ
­ÛÚÐ-¦ÐÐ
­ÜÚÐ-§ÐÐ
­ÝÚÐ-¨ÐÐ
­ÞÚÐ-©ÐÐ
­ßÚÐ-ªÐÐ
­àÚÐ-«ÐÐ
­áÚÐ-¬ÐÐ
­âÚÐ-­ÐÐ
­ãÚÐ-®ÐÐ
­äÚÐ-¯ÐÐ
­åÚÐ-°ÐÐ
­æÚÐ-±ÐÐ
­çÚÐ-²ÐÐ
­èÚÐ-³ÐÐ
­éÚÐ-´ÐÐ
­êÚÐ-µÐÐ
­ëÚÐ-¶ÐÐ
­ìÚÐ-·ÐÐ
­ÚÐ-¸ÐÐ
­îÚÐ-¹ÐÐ
­ïÚÐ-ºÐÐ
­ðÚÐ-ÐÐ
­ñÚÐ-»ÐÐ
­òÚÐ-¼ÐÐ
­óÚÐ-½ÐÐ
­ôÚÐ-ŠÐÐ
­õÚÐ-¾ÐÐ
­öÚÐ-¿ÐÐ
­÷ÚÐ-ÀÐÐ
­øÚÐ-ÁÐÐ
­ùÚÐ-ÂÐÐ
­úÚÐ-ÃÐÐ
­ûÚÐ-ÄÐÐ
­üÚÐ-ÅÐÐ
­ýÚÐ-ÆÐÐ
­þÚÐ-ÇÐÐ
­ÿÚÐ-ÈÐÐ
­ÚÐ-ÉÐÐ
­ÚÐ-ÊÐÐ
­ÚÐ-ËÐÐ
­ÚÐ-ÌÐÐ
­ÚÐ-ÍÐÐ
­ÚÐ-ÎÐÐ
­ÚÐ-ÏÐÐ
­ÚÐ-ÐÐÐ
­‘ÚÐ-ŠÐÑ-ÒÐÓÔ-ÕÖ×ÐØÙ­
\ No newline at end of file