--- a/trunk/mqttsparkplug/mqttsparkplug-example/Device_1/Plc Logic/Application1/Edge1/svnobj
+++ b/trunk/mqttsparkplug/mqttsparkplug-example/Device_1/Plc Logic/Application1/Edge1/svnobj
@@ -1,5 +1,5 @@
-Gx_lSi!0…jüo˜U&N…U“{&Èß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
longTagTextScenario();bGenerateDataTimer( IN := NOT GenerateDataTimer.Q,X                   PT := GenerateDataPeriod,^                   ET => GenerateDataElapsed );6IF GenerateDataTimer.Q THEN,    GenerateEoNData();2    GenerateDeviceData();END_IF8TON_DelayStartup(IN:= TRUE);„IF NOT StillGettingClientCertificate AND TON_DelayStartup.Q THEN  Z    EoN( ServerUrl              := ServerUrl,\         ServerPort             := ServerPort,î         PrimaryHostID          := "CODESYSPrimaryHost", //"Sparky", , // Please change this to your own PrimaryHostID!Z         KeepAlive              := KeepAlive,`         CleanSession           := CleanSession, X         Username               := Username,!X         Password               := Password,"T         UseTLS                 := UseTLS,#R         hCert                  := hCert,$V         GroupId                := GroupId,%X         NodeName               := NodeName,&b         publishPeriod          := publishPeriod,'¦// Uncomment this for TLS usage and please alter the initialisation of myTLSContext(Ô//         ITLSContextProvider    := ItfTLSContext, // We provide a reference to an instance of TLSContext)H         IASyncPropertyProvider := ,*          arSparkplugBoolean     := SparkPlugBSimpleTypes.arSparkplugBoolean_EoN,+¢         arSparkplugDateTime    := SparkPlugBSimpleTypes.arSparkplugDateTime_EoN,,œ         arSparkplugFloat       := SparkPlugBSimpleTypes.arSparkplugFloat_EoN,-ž         arSparkplugDouble      := SparkPlugBSimpleTypes.arSparkplugDouble_EoN,.š         arSparkplugInt8        := SparkPlugBSimpleTypes.arSparkplugInt8_EoN,/œ         arSparkplugInt16       := SparkPlugBSimpleTypes.arSparkplugInt16_EoN,0œ         arSparkplugInt32       := SparkPlugBSimpleTypes.arSparkplugInt32_EoN,1œ         arSparkplugInt64       := SparkPlugBSimpleTypes.arSparkplugInt64_EoN,2œ         arSparkplugUInt8       := SparkPlugBSimpleTypes.arSparkplugUInt8_EoN,3ž         arSparkplugUInt16      := SparkPlugBSimpleTypes.arSparkplugUInt16_EoN,4ž         arSparkplugUInt32      := SparkPlugBSimpleTypes.arSparkplugUInt32_EoN,5ž         arSparkplugUInt64      := SparkPlugBSimpleTypes.arSparkplugUInt64_EoN,6š         arSparkplugUUID        := SparkPlugBSimpleTypes.arSparkplugUUID_EoN,7š         arSparkplugText        := SparkPlugBSimpleTypes.arSparkplugText_EoN,8ž         arSparkplugString      := SparkPlugBSimpleTypes.arSparkplugString_EoN,9l         SessionState           => EoNConnectionState,:j         NumberOfDevices        => NumberOfDevices );;ELSE<v    //The below method creates a Client Certificate for you=    //It generates a CSR and sends it to test.mosquitto.org to be signed>    AdditionalStepsToRegisterAClientCertificateWithtest_mosquitto_org();?IF PlugIt THEN@$    ItfEoN := EoN;A     ItfEoN := 0;BdMyDevice1( DeviceName          := "SomeDevice001",Cb           DeviceHealthy       := Device1Healthy,DR           ItfEoNInstance      := ItfEoN,ED           PluggedIntoEoN      =>,Fb           SessionState        => MyDevice1State,G`           publishPeriod       := publishPeriod,Hœ           arSparkplugBoolean  := SparkPlugBSimpleTypes.arSparkplugBoolean_D1,Iž           arSparkplugDateTime := SparkPlugBSimpleTypes.arSparkplugDateTime_D1,J˜           arSparkplugFloat    := SparkPlugBSimpleTypes.arSparkplugFloat_D1,Kš           arSparkplugDouble   := SparkPlugBSimpleTypes.arSparkplugDouble_D1,L–           arSparkplugInt8     := SparkPlugBSimpleTypes.arSparkplugInt8_D1,M˜           arSparkplugInt16    := SparkPlugBSimpleTypes.arSparkplugInt16_D1,N˜           arSparkplugInt32    := SparkPlugBSimpleTypes.arSparkplugInt32_D1,O˜           arSparkplugInt64    := SparkPlugBSimpleTypes.arSparkplugInt64_D1,P˜           arSparkplugUInt8    := SparkPlugBSimpleTypes.arSparkplugUInt8_D1,Qš           arSparkplugUInt16   := SparkPlugBSimpleTypes.arSparkplugUInt16_D1,Rš           arSparkplugUInt32   := SparkPlugBSimpleTypes.arSparkplugUInt32_D1,Sš           arSparkplugUInt64   := SparkPlugBSimpleTypes.arSparkplugUInt64_D1,T–           arSparkplugUUID     := SparkPlugBSimpleTypes.arSparkplugUUID_D1,U–           arSparkplugText     := SparkPlugBSimpleTypes.arSparkplugText_D1,Vž           arSparkplugString   := SparkPlugBSimpleTypes.arSparkplugString_D1 );WdMyDevice2( DeviceName          := "SomeDevice002",Xb           DeviceHealthy       := Device2Healthy,Yb           SessionState        => MyDevice2State,Zœ           arSparkplugBoolean  := SparkPlugBSimpleTypes.arSparkplugBoolean_D2,[ž           arSparkplugDateTime := SparkPlugBSimpleTypes.arSparkplugDateTime_D2,\˜           arSparkplugFloat    := SparkPlugBSimpleTypes.arSparkplugFloat_D2,]š           arSparkplugDouble   := SparkPlugBSimpleTypes.arSparkplugDouble_D2,^–           arSparkplugInt8     := SparkPlugBSimpleTypes.arSparkplugInt8_D2,_˜           arSparkplugInt16    := SparkPlugBSimpleTypes.arSparkplugInt16_D2,`˜           arSparkplugInt32    := SparkPlugBSimpleTypes.arSparkplugInt32_D2,a˜           arSparkplugInt64    := SparkPlugBSimpleTypes.arSparkplugInt64_D2,b˜           arSparkplugUInt8    := SparkPlugBSimpleTypes.arSparkplugUInt8_D2,cš           arSparkplugUInt16   := SparkPlugBSimpleTypes.arSparkplugUInt16_D2,dš           arSparkplugUInt32   := SparkPlugBSimpleTypes.arSparkplugUInt32_D2,eš           arSparkplugUInt64   := SparkPlugBSimpleTypes.arSparkplugUInt64_D2,f–           arSparkplugUUID     := SparkPlugBSimpleTypes.arSparkplugUUID_D2,g–           arSparkplugText     := SparkPlugBSimpleTypes.arSparkplugText_D2,hž           arSparkplugString   := SparkPlugBSimpleTypes.arSparkplugString_D2 );idMyDevice3( DeviceName          := "SomeDevice003",jb           DeviceHealthy       := Device3Healthy,kb           SessionState        => MyDevice3State,lœ           arSparkplugBoolean  := SparkPlugBSimpleTypes.arSparkplugBoolean_D3,mž           arSparkplugDateTime := SparkPlugBSimpleTypes.arSparkplugDateTime_D3,n˜           arSparkplugFloat    := SparkPlugBSimpleTypes.arSparkplugFloat_D3,oš           arSparkplugDouble   := SparkPlugBSimpleTypes.arSparkplugDouble_D3,p–           arSparkplugInt8     := SparkPlugBSimpleTypes.arSparkplugInt8_D3,q˜           arSparkplugInt16    := SparkPlugBSimpleTypes.arSparkplugInt16_D3,r˜           arSparkplugInt32    := SparkPlugBSimpleTypes.arSparkplugInt32_D3,s˜           arSparkplugInt64    := SparkPlugBSimpleTypes.arSparkplugInt64_D3,t˜           arSparkplugUInt8    := SparkPlugBSimpleTypes.arSparkplugUInt8_D3,uš           arSparkplugUInt16   := SparkPlugBSimpleTypes.arSparkplugUInt16_D3,vš           arSparkplugUInt32   := SparkPlugBSimpleTypes.arSparkplugUInt32_D3,wš           arSparkplugUInt64   := SparkPlugBSimpleTypes.arSparkplugUInt64_D3,x–           arSparkplugUUID     := SparkPlugBSimpleTypes.arSparkplugUUID_D3,y–           arSparkplugText     := SparkPlugBSimpleTypes.arSparkplugText_D3,zž           arSparkplugString   := SparkPlugBSimpleTypes.arSparkplugString_D3 );{Interface|L{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}}PROGRAM Edge1~VARN    Init                : BOOL := TRUE;€J    TestScenario        : USINT := 8;    ‚X    EoN                 : Sparkplug.FB_Edge;ƒ|    EoNConnectionState  : Sparkplug.SparkplugSessionStateType;„@    NumberOfDevices     : UDINT;…\    MyDevice1           : Sparkplug.FB_Device;†N    Device1Healthy      : BOOL := TRUE;‡\    MyDevice2           : Sparkplug.FB_Device;ˆN    Device2Healthy      : BOOL := TRUE;‰\    MyDevice3           : Sparkplug.FB_Device;ŠN    Device3Healthy      : BOOL := TRUE;‹>    PluggedIntoEoN      : BOOL;Œ|    MyDevice1State      : Sparkplug.SparkplugSessionStateType;|    MyDevice2State      : Sparkplug.SparkplugSessionStateType;Ž|    MyDevice3State      : Sparkplug.SparkplugSessionStateType;N    PlugIt              : BOOL := TRUE;z    ItfEoN              : Sparkplug.ISparkplugDeviceProtocol;‘B    ServerUrl           : STRING;’>    ServerPort          : UINT;“>    KeepAlive           : UINT;”P    CleanSession        : BOOL := FALSE;•P    Username            : WSTRING := "";–P    Password            : WSTRING := "";—P    UseTLS              : BOOL := FALSE;˜¸    hCert               : SysTypes.RTS_IEC_HANDLE := SysTypes.RTS_INVALID_HANDLE; // Handle to the client certificate (optional) only used if UseTLS is TRUE™j	GroupId             : WSTRING := "SparkplugBDevice";št    NodeName            : WSTRING := "EdgeOfNetworkNode1";›¢    publishPeriod       : UINT    := 500; //  milliseconds interval so 1000 = 1s œ¬    //Encapsulates all the data neccessaray to handle/check  encrypted tcp connectionsˆ    //Static initialization, as shown in the following code snippet;ž    //Ÿ    //VAR V    //    commonName : STRING := 'MyRasPi';¡¸    //    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:=2¨    //    );©    //END_VARªL    commonName : STRING  := 'MyRasPi';«œ    ciCertInfo : Sparkplug.MQTT.NBS.CERT_INFO := (psInfo := ADR( commonName ),¬¶                                                   udiSize := TO_UDINT(LEN( commonName )));­6    sUseCaseName : STRING; ®¶    ePurpose  : Sparkplug.MQTT.NBS.PURPOSE;                                                ¯X    sHostname : Sparkplug.MQTT.NBS.HOSTNAME;°F    udiVerificationMode    : UDINT;±f                                                   ²–    myTLS: Sparkplug.MQTT.NBS.TLSContext := (sUseCaseName := sUseCaseName, ³ˆ                                              ePurpose := ePurpose, ´Œ                                              sHostname := sHostname, µŽ                                              udiVerificationMode := udiVerificationMode);                                             ¶f    ItfTLSContext : Sparkplug.MQTT.NBS.ITLSContext;·>    GenerateDataPeriod  : TIME;¸>    GenerateDataElapsed : TIME;¹<    GenerateDataTimer   : TON;º^    Timestamp           : Sparkplug.T_DateTime;»R    Str                 : ChangingString;¼Œ    //These are specific for registering certificates at test.mqtt.org½z    getClientCert                  : Sparkplug.GetClientCert;¾t    RegisterCSR                    : Web_Client.WebClient;¿R    countClientCert                : INT;Àf    httpPost                       : WSTRING(2048);ÁT    StillGettingClientCertificate  : BOOL;Âf    wsCSRorClientCertOut           : WSTRING(2048);Ãr    WaitForTheServerToRegisterCert : TON := (PT := T#1S);Äl	TON_DelayStartup               : TON := (PT := T#5S);ÅEND_VARÆ"UniqueIdGeneratorÇ4964ÈPOULevelÉL{8e575c5b-1d37-49c6-941b-5c0ec7874787}ÊStandardË ChildObjectGuidsÌ8System.Collections.ArrayListÍ,AddAttributeSubsequentÎboolÐÐ-ÐÐ	E
-|ÐÐ
­"ÚÐ-ÐÐ
­qÚÐ-ÐÐ
­#ÚÐ-ÐÐ
­$ÚÐ-ÐÐ
­%ÚÐ-ÐÐ
­&ÚÐ-ÐÐ
­'ÚÐ-ÐÐ
­(ÚÐ-ÐÐ
­)ÚÐ-ÐÐ
­*ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­
ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­,ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­-ÚÐ-ÐÐ
­.ÚÐ-ÐÐ
­/ÚÐ-ÐÐ
­0ÚÐ-ÐÐ
­1ÚÐ-ÐÐ
­2ÚÐ- ÐÐ
­3ÚÐ-!ÐÐ
­4ÚÐ-"ÐÐ
­5ÚÐ-#ÐÐ
­6ÚÐ-$ÐÐ
­7ÚÐ-%ÐÐ
­8ÚÐ-&ÐÐ
­
-ÚÐ-'ÐÐ
­9ÚÐ-(ÐÐ
­:ÚÐ-)ÐÐ
­;ÚÐ-*ÐÐ
­<ÚÐ-+ÐÐ
­=ÚÐ-,ÐÐ
­>ÚÐ--ÐÐ
­?ÚÐ-.ÐÐ
­@ÚÐ-/ÐÐ
­AÚÐ-0ÐÐ
­BÚÐ-1ÐÐ
­CÚÐ-2ÐÐ
­DÚÐ-3ÐÐ
­EÚÐ-4ÐÐ
­FÚÐ-5ÐÐ
­GÚÐ-6ÐÐ
­HÚÐ-7ÐÐ
­IÚÐ-8ÐÐ
­JÚÐ-9ÐÐ
­KÚÐ-:ÐÐ
­LÚÐ-;ÐÐ
­MÚÐ-<ÐÐ
­NÚÐ-=ÐÐ
­OÚÐ->ÐÐ
­PÚÐ-ÐÐ
­QÚÐ-ÐÐ
­RÚÐ-?ÐÐ
­SÚÐ-@ÐÐ
­TÚÐ-;ÐÐ
­UÚÐ-AÐÐ
­VÚÐ-ÐÐ
­WÚÐ-ÐÐ
­XÚÐ-BÐÐ
­ZÚÐ-CÐÐ
­[ÚÐ-DÐÐ
­\ÚÐ-EÐÐ
­]ÚÐ-FÐÐ
­^ÚÐ-GÐÐ
­_ÚÐ-HÐÐ
­`ÚÐ-IÐÐ
­aÚÐ-JÐÐ
­bÚÐ-KÐÐ
­cÚÐ-LÐÐ
­dÚÐ-MÐÐ
­eÚÐ-NÐÐ
­fÚÐ-OÐÐ
­gÚÐ-PÐÐ
­hÚÐ-QÐÐ
­iÚÐ-RÐÐ
­jÚÐ-SÐÐ
­kÚÐ-TÐÐ
­lÚÐ-UÐÐ
­mÚÐ-VÐÐ
­nÚÐ-ÐÐ
­oÚÐ-WÐÐ
­qÚÐ-XÐÐ
­rÚÐ-DÐÐ
­sÚÐ-EÐÐ
­tÚÐ-YÐÐ
­uÚÐ-GÐÐ
­vÚÐ-ZÐÐ
­wÚÐ-[ÐÐ
­xÚÐ-\ÐÐ
­yÚÐ-]ÐÐ
­zÚÐ-^ÐÐ
­{ÚÐ-_ÐÐ
­|ÚÐ-`ÐÐ
­}ÚÐ-aÐÐ
­~ÚÐ-bÐÐ
­ÚÐ-cÐÐ
­€ÚÐ-dÐÐ
­ÚÐ-eÐÐ
­‚ÚÐ-fÐÐ
­ƒÚÐ-gÐÐ
­„ÚÐ-hÐÐ
­…ÚÐ-ÐÐ
­†ÚÐ-iÐÐ
­ˆÚÐ-jÐÐ
­‰ÚÐ-DÐÐ
­ŠÚÐ-EÐÐ
­‹ÚÐ-kÐÐ
­ŒÚÐ-GÐÐ
­ÚÐ-lÐÐ
­ŽÚÐ-mÐÐ
­ÚÐ-nÐÐ
­ÚÐ-oÐÐ
­‘ÚÐ-pÐÐ
­’ÚÐ-qÐÐ
­“ÚÐ-rÐÐ
­”ÚÐ-sÐÐ
­•ÚÐ-tÐÐ
­–ÚÐ-uÐÐ
­—ÚÐ-vÐÐ
­˜ÚÐ-wÐÐ
­™ÚÐ-xÐÐ
­šÚÐ-yÐÐ
­‡ÚÐ-zÐ{|Ð	E
-OÐÐ
­ÚÐ-}ÐÐ
­ÚÐ-~ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-€ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-‚ÐÐ
­ÚÐ-ƒÐÐ
­ÚÐ-„ÐÐ
­ÚÐ-…ÐÐ
­ÚÐ-†ÐÐ
­ÚÐ-‡ÐÐ
­ÚÐ-ˆÐÐ
­ ÚÐ-‰ÐÐ
­!ÚÐ-ŠÐÐ
­"ÚÐ-‹ÐÐ
­#ÚÐ-ŒÐÐ
­$ÚÐ-ÐÐ
­%ÚÐ-ŽÐÐ
­&ÚÐ-ÐÐ
­'ÚÐ-ÐÐ
­(ÚÐ-ÐÐ
­)ÚÐ-‘ÐÐ
­*ÚÐ-’ÐÐ
­+ÚÐ-“ÐÐ
­,ÚÐ-”ÐÐ
­-ÚÐ-•ÐÐ
­.ÚÐ-–ÐÐ
­/ÚÐ-—ÐÐ
­0ÚÐ-˜ÐÐ
­1ÚÐ-ÐÐ
­2ÚÐ-™ÐÐ
­3ÚÐ-šÐÐ
­4ÚÐ-›ÐÐ
­5ÚÐ-ÐÐ
­6ÚÐ-œÐÐ
­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ÚÐ-»ÐÐ
­XÚÐ-ÐÐ
­YÚÐ-¼ÐÐ
­ZÚÐ-½ÐÐ
­[ÚÐ-¾ÐÐ
­\ÚÐ-¿ÐÐ
­]ÚÐ-ÀÐÐ
­^ÚÐ-ÁÐÐ
­_ÚÐ-ÂÐÐ
­`ÚÐ-ÃÐÐ
­aÚÐ-ÄÐÐ
­bÚÐ-ÅÐÆ-ÇÐÈÉ-ÊËÌÐÍέ
\ No newline at end of file
+Gx_lŠ7!0…jüo‡*×V5¦Û(
+#Ò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
longTagTextIF Init THEN(    AddAllMetrics();    Scenario();END_IFbGenerateDataTimer( IN := NOT GenerateDataTimer.Q,X                   PT := GenerateDataPeriod,^                   ET => GenerateDataElapsed );6IF GenerateDataTimer.Q THEN,    GenerateEoNData();2    GenerateDeviceData();>TON_DelayStartup( IN := TRUE );€IF NOT StillGettingClientCertificate AND TON_DelayStartup.Q THEN@    EoN( ServerUrl := ServerUrl,D         ServerPort := ServerPort,Ö         PrimaryHostID := "Ignition-Sparky", //"Sparky", , // Please change this to your own PrimaryHostID! @         KeepAlive := KeepAlive,!L         CleanSession := CleanSession,"<         Username := Username,#<         Password := Password,$4         UseTLS := UseTLS,%0         hCert := hCert,&8         GroupId := GroupId,'<         NodeName := NodeName,(P         publishPeriod := publishPeriod,)ļ         // Uncomment this for TLS usage and please alter the initialisation of myTLSContext*æ         //         ITLSContextProvider    := ItfTLSContext, // We provide a reference to an instance of TLSContext+F         IASyncPropertyProvider :=,,X         SessionState => EoNConnectionState,-\         NumberOfDevices => NumberOfDevices );.PELSIF StillGettingClientCertificate THEN/v    //The below method creates a Client Certificate for you0    //It generates a CSR and sends it to test.mosquitto.org to be signed1    AdditionalStepsToRegisterAClientCertificateWithtest_mosquitto_org();2IF PlugIt THEN3$    ItfEoN := EoN;4ELSE5     ItfEoN := 0;6RMyDevice1( DeviceName := "SomeDevice001",7V           DeviceHealthy := Device1Healthy,8H           ItfEoNInstance := ItfEoN,9:           PluggedIntoEoN =>,:T           SessionState => MyDevice1State,;X           publishPeriod := publishPeriod );<RMyDevice2( DeviceName := "SomeDevice002",=V           DeviceHealthy := Device2Healthy,>T           SessionState => MyDevice2State,?RMyDevice3( DeviceName := "SomeDevice003",@V           DeviceHealthy := Device3Healthy,AT           SessionState => MyDevice3State,BInterfaceCL{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}DPROGRAM Edge1EVARF0    Init : BOOL := TRUE;G<    TestScenario : USINT := 8;H8    EoN : Sparkplug.FB_Edge;Iz    EoNConnectionState : Sparkplug.SparkplugSessionStateType;J8    NumberOfDevices : UDINT;KH    MyDevice1 : Sparkplug.FB_Device;LD    Device1Healthy : BOOL := TRUE;MH    MyDevice2 : Sparkplug.FB_Device;ND    Device2Healthy : BOOL := TRUE;OH    MyDevice3 : Sparkplug.FB_Device;PD    Device3Healthy : BOOL := TRUE;Qr    MyDevice1State : Sparkplug.SparkplugSessionStateType;Rr    MyDevice2State : Sparkplug.SparkplugSessionStateType;Sr    MyDevice3State : Sparkplug.SparkplugSessionStateType;T4    PlugIt : BOOL := TRUE;U`    ItfEoN : Sparkplug.ISparkplugDeviceProtocol;V.    ServerUrl : STRING;W,    ServerPort : UINT;X*    KeepAlive : UINT;YB    CleanSession : BOOL := FALSE;Z:    Username : WSTRING := "";[:    Password : WSTRING := "";\6    UseTLS : BOOL := FALSE;]œ    hCert : SysTypes.RTS_IEC_HANDLE := SysTypes.RTS_INVALID_HANDLE; // Handle to the client certificate (optional) only used if UseTLS is TRUE^X    GroupId : WSTRING := "SparkplugBDevice";_B    NodeName : WSTRING := "Ian1";`    publishPeriod : UINT := 500; //  milliseconds interval so 1000 = 1s aŽ    //Encapsulates all the data neccessaray to handle/check  encrypted tcp connectionsbˆ    //Static initialization, as shown in the following code snippet;c    //d    //VAReV    //    commonName : STRING := 'MyRasPi';fļ    //    ciCertInfo : NBS.CERT_INFO := (psInfo:=ADR(commonName), udiSize:=LEN(commonName));gX    //    myTLSContext : NBS.TLSContext := (h`    //        ePurpose:=NBS.PURPOSE.CLIENT_SIDE,iL    //        sUseCaseName:='NBSTest',jB    //        sTLSVersion:='1.3',kJ    //        ciCertInfo:=ciCertInfo,lH    //        udiVerificationMode:=2m    //    );n    //END_VARoJ    commonName : STRING := 'MyRasPi';pō    ciCertInfo : Sparkplug.MQTT.NBS.CERT_INFO := (psInfo := ADR( commonName ), udiSize := TO_UDINT( LEN( commonName ) ));q4    sUseCaseName : STRING;rT    ePurpose : Sparkplug.MQTT.NBS.PURPOSE;sX    sHostname : Sparkplug.MQTT.NBS.HOSTNAME;t@    udiVerificationMode : UDINT;u˜    myTLS : Sparkplug.MQTT.NBS.TLSContext := ( sUseCaseName := sUseCaseName,vŠ                                                ePurpose := ePurpose,wŽ                                                sHostname := sHostname,xš                                                udiVerificationMode := udiVerificationMode );yf    ItfTLSContext : Sparkplug.MQTT.NBS.ITLSContext;z<    GenerateDataPeriod : TIME;{>    GenerateDataElapsed : TIME;|8    GenerateDataTimer : TON;}J    Timestamp : Sparkplug.T_DateTime;~2    Str : ChangingString;Œ    //These are specific for registering certificates at test.mqtt.org€X    getClientCert : Sparkplug.GetClientCert;N    RegisterCSR : Web_Client.WebClient;‚4    countClientCert : INT;ƒ>    httpPost : WSTRING( 2048 );„R    StillGettingClientCertificate : BOOL;…V    wsCSRorClientCertOut : WSTRING( 2048 );†r    WaitForTheServerToRegisterCert : TON := (PT := T#1S);‡V    TON_DelayStartup : TON := (PT := T#5S);ˆEND_VAR‰"UniqueIdGeneratorŠ5106‹POULevelŒL{8e575c5b-1d37-49c6-941b-5c0ec7874787}StandardŽ ChildObjectGuids8System.Collections.ArrayList,AddAttributeSubsequent‘boolÐÐ-ÐÐ	E
+AÐÐ
­³ÚÐ-ÐÐ
­´ÚÐ-ÐÐ
­µÚÐ-ÐÐ
­¶ÚÐ-ÐÐ
­·ÚÐ-ÐÐ
­¸ÚÐ-ÐÐ
­¹ÚÐ-ÐÐ
­ºÚÐ-ÐÐ
­»ÚÐ-ÐÐ
­¼ÚÐ-ÐÐ
­½ÚÐ-ÐÐ
­¾ÚÐ-ÐÐ
­¿ÚÐ-ÐÐ
­ÀÚÐ-ÐÐ
­ÁÚÐ-ÐÐ
­ÂÚÐ-ÐÐ
­ÃÚÐ-ÐÐ
­ÄÚÐ-ÐÐ
­ÅÚÐ-ÐÐ
­ÆÚÐ- ÐÐ
­ÇÚÐ-!ÐÐ
­ÈÚÐ-"ÐÐ
­ÉÚÐ-#ÐÐ
­ÊÚÐ-$ÐÐ
­ËÚÐ-%ÐÐ
­ÌÚÐ-&ÐÐ
­ÍÚÐ-'ÐÐ
­ÎÚÐ-(ÐÐ
­ÏÚÐ-)ÐÐ
­ÐÚÐ-*ÐÐ
­ÑÚÐ-+ÐÐ
­ÒÚÐ-,ÐÐ
­ÓÚÐ--ÐÐ
­ÔÚÐ-.ÐÐ
­ÕÚÐ-/ÐÐ
­ÖÚÐ-0ÐÐ
­×ÚÐ-1ÐÐ
­ØÚÐ-ÐÐ
­ÙÚÐ-ÐÐ
­ÚÚÐ-2ÐÐ
­ÛÚÐ-3ÐÐ
­ÜÚÐ-4ÐÐ
­ÝÚÐ-5ÐÐ
­ÞÚÐ-ÐÐ
­ßÚÐ-ÐÐ
­àÚÐ-6ÐÐ
­áÚÐ-7ÐÐ
­âÚÐ-8ÐÐ
­ãÚÐ-9ÐÐ
­äÚÐ-:ÐÐ
­åÚÐ-;ÐÐ
­æÚÐ-ÐÐ
­çÚÐ-<ÐÐ
­èÚÐ-=ÐÐ
­éÚÐ-8ÐÐ
­êÚÐ-9ÐÐ
­ëÚÐ->ÐÐ
­ìÚÐ-;ÐÐ
­íÚÐ-ÐÐ
­îÚÐ-?ÐÐ
­ïÚÐ-@ÐÐ
­ðÚÐ-8ÐÐ
­ñÚÐ-9ÐÐ
­òÚÐ-AÐÐ
­‡ÚÐ-;ÐBCÐ	E
+EÐÐ
­nÚÐ-DÐÐ
­oÚÐ-EÐÐ
­pÚÐ-FÐÐ
­qÚÐ-GÐÐ
­rÚÐ-HÐÐ
­sÚÐ-IÐÐ
­tÚÐ-JÐÐ
­uÚÐ-KÐÐ
­vÚÐ-LÐÐ
­wÚÐ-MÐÐ
­xÚÐ-NÐÐ
­yÚÐ-OÐÐ
­zÚÐ-PÐÐ
­{ÚÐ-QÐÐ
­|ÚÐ-RÐÐ
­}ÚÐ-SÐÐ
­~ÚÐ-TÐÐ
­ÚÐ-UÐÐ
­€ÚÐ-VÐÐ
­ÚÐ-WÐÐ
­‚ÚÐ-XÐÐ
­ƒÚÐ-YÐÐ
­„ÚÐ-ZÐÐ
­…ÚÐ-[ÐÐ
­†ÚÐ-\ÐÐ
­‡ÚÐ-]ÐÐ
­ˆÚÐ-^ÐÐ
­‰ÚÐ-_ÐÐ
­ŠÚÐ-`ÐÐ
­‹ÚÐ-aÐÐ
­ŒÚÐ-bÐÐ
­ÚÐ-cÐÐ
­ŽÚÐ-dÐÐ
­ÚÐ-eÐÐ
­ÚÐ-fÐÐ
­‘ÚÐ-gÐÐ
­’ÚÐ-hÐÐ
­“ÚÐ-iÐÐ
­”ÚÐ-jÐÐ
­•ÚÐ-kÐÐ
­–ÚÐ-lÐÐ
­—ÚÐ-mÐÐ
­˜ÚÐ-nÐÐ
­™ÚÐ-oÐÐ
­šÚÐ-pÐÐ
­œÚÐ-qÐÐ
­ÚÐ-rÐÐ
­žÚÐ-sÐÐ
­ŸÚÐ-tÐÐ
­ ÚÐ-uÐÐ
­¡ÚÐ-vÐÐ
­¢ÚÐ-wÐÐ
­£ÚÐ-xÐÐ
­¤ÚÐ-yÐÐ
­¥ÚÐ-zÐÐ
­¦ÚÐ-{ÐÐ
­§ÚÐ-|ÐÐ
­¨ÚÐ-}ÐÐ
­©ÚÐ-~ÐÐ
­ªÚÐ-ÐÐ
­«ÚÐ-€ÐÐ
­¬ÚÐ-ÐÐ
­­ÚÐ-‚ÐÐ
­®ÚÐ-ƒÐÐ
­¯ÚÐ-„ÐÐ
­°ÚÐ-…ÐÐ
­±ÚÐ-†ÐÐ
­²ÚÐ-‡ÐÐ
­bÚÐ-ˆЉ-ŠЋŒ-ŽА‘­
\ No newline at end of file