--- 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_lh!0…jüo«T­-À„Iÿ‚œ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_IFVIF NOT StillGettingClientCertificate 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,/œ         arSparkplugInt32       := SparkPlugBSimpleTypes.arSparkplugInt32_EoN,0œ         arSparkplugInt64       := SparkPlugBSimpleTypes.arSparkplugInt64_EoN,1œ         arSparkplugUInt8       := SparkPlugBSimpleTypes.arSparkplugUInt8_EoN,2ž         arSparkplugUInt16      := SparkPlugBSimpleTypes.arSparkplugUInt16_EoN,3ž         arSparkplugUInt32      := SparkPlugBSimpleTypes.arSparkplugUInt32_EoN,4ž         arSparkplugUInt64      := SparkPlugBSimpleTypes.arSparkplugUInt64_EoN,5š         arSparkplugUUID        := SparkPlugBSimpleTypes.arSparkplugUUID_EoN,6š         arSparkplugText        := SparkPlugBSimpleTypes.arSparkplugText_EoN,7ž         arSparkplugString      := SparkPlugBSimpleTypes.arSparkplugString_EoN,8l         SessionState           => EoNConnectionState,9j         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;@     ItfEoN := 0;AdMyDevice1( DeviceName          := "SomeDevice001",Bb           DeviceHealthy       := Device1Healthy,CR           ItfEoNInstance      := ItfEoN,DD           PluggedIntoEoN      =>,Eb           SessionState        => MyDevice1State,F`           publishPeriod       := publishPeriod,Gœ           arSparkplugBoolean  := SparkPlugBSimpleTypes.arSparkplugBoolean_D1,Hž           arSparkplugDateTime := SparkPlugBSimpleTypes.arSparkplugDateTime_D1,I˜           arSparkplugFloat    := SparkPlugBSimpleTypes.arSparkplugFloat_D1,Jš           arSparkplugDouble   := SparkPlugBSimpleTypes.arSparkplugDouble_D1,K–           arSparkplugInt8     := SparkPlugBSimpleTypes.arSparkplugInt8_D1,L˜           arSparkplugInt16    := SparkPlugBSimpleTypes.arSparkplugInt16_D1,M˜           arSparkplugInt32    := SparkPlugBSimpleTypes.arSparkplugInt32_D1,N˜           arSparkplugInt64    := SparkPlugBSimpleTypes.arSparkplugInt64_D1,O˜           arSparkplugUInt8    := SparkPlugBSimpleTypes.arSparkplugUInt8_D1,Pš           arSparkplugUInt16   := SparkPlugBSimpleTypes.arSparkplugUInt16_D1,Qš           arSparkplugUInt32   := SparkPlugBSimpleTypes.arSparkplugUInt32_D1,Rš           arSparkplugUInt64   := SparkPlugBSimpleTypes.arSparkplugUInt64_D1,S–           arSparkplugUUID     := SparkPlugBSimpleTypes.arSparkplugUUID_D1,T–           arSparkplugText     := SparkPlugBSimpleTypes.arSparkplugText_D1,Už           arSparkplugString   := SparkPlugBSimpleTypes.arSparkplugString_D1 );VdMyDevice2( DeviceName          := "SomeDevice002",Wb           DeviceHealthy       := Device2Healthy,Xb           SessionState        => MyDevice2State,Yœ           arSparkplugBoolean  := SparkPlugBSimpleTypes.arSparkplugBoolean_D2,Zž           arSparkplugDateTime := SparkPlugBSimpleTypes.arSparkplugDateTime_D2,[˜           arSparkplugFloat    := SparkPlugBSimpleTypes.arSparkplugFloat_D2,\š           arSparkplugDouble   := SparkPlugBSimpleTypes.arSparkplugDouble_D2,]–           arSparkplugInt8     := SparkPlugBSimpleTypes.arSparkplugInt8_D2,^˜           arSparkplugInt16    := SparkPlugBSimpleTypes.arSparkplugInt16_D2,_˜           arSparkplugInt32    := SparkPlugBSimpleTypes.arSparkplugInt32_D2,`˜           arSparkplugInt64    := SparkPlugBSimpleTypes.arSparkplugInt64_D2,a˜           arSparkplugUInt8    := SparkPlugBSimpleTypes.arSparkplugUInt8_D2,bš           arSparkplugUInt16   := SparkPlugBSimpleTypes.arSparkplugUInt16_D2,cš           arSparkplugUInt32   := SparkPlugBSimpleTypes.arSparkplugUInt32_D2,dš           arSparkplugUInt64   := SparkPlugBSimpleTypes.arSparkplugUInt64_D2,e–           arSparkplugUUID     := SparkPlugBSimpleTypes.arSparkplugUUID_D2,f–           arSparkplugText     := SparkPlugBSimpleTypes.arSparkplugText_D2,gž           arSparkplugString   := SparkPlugBSimpleTypes.arSparkplugString_D2 );hdMyDevice3( DeviceName          := "SomeDevice003",ib           DeviceHealthy       := Device3Healthy,jb           SessionState        => MyDevice3State,kœ           arSparkplugBoolean  := SparkPlugBSimpleTypes.arSparkplugBoolean_D3,lž           arSparkplugDateTime := SparkPlugBSimpleTypes.arSparkplugDateTime_D3,m˜           arSparkplugFloat    := SparkPlugBSimpleTypes.arSparkplugFloat_D3,nš           arSparkplugDouble   := SparkPlugBSimpleTypes.arSparkplugDouble_D3,o–           arSparkplugInt8     := SparkPlugBSimpleTypes.arSparkplugInt8_D3,p˜           arSparkplugInt16    := SparkPlugBSimpleTypes.arSparkplugInt16_D3,q˜           arSparkplugInt32    := SparkPlugBSimpleTypes.arSparkplugInt32_D3,r˜           arSparkplugInt64    := SparkPlugBSimpleTypes.arSparkplugInt64_D3,s˜           arSparkplugUInt8    := SparkPlugBSimpleTypes.arSparkplugUInt8_D3,tš           arSparkplugUInt16   := SparkPlugBSimpleTypes.arSparkplugUInt16_D3,uš           arSparkplugUInt32   := SparkPlugBSimpleTypes.arSparkplugUInt32_D3,vš           arSparkplugUInt64   := SparkPlugBSimpleTypes.arSparkplugUInt64_D3,w–           arSparkplugUUID     := SparkPlugBSimpleTypes.arSparkplugUUID_D3,x–           arSparkplugText     := SparkPlugBSimpleTypes.arSparkplugText_D3,yž           arSparkplugString   := SparkPlugBSimpleTypes.arSparkplugString_D3 );zInterface{L{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}|PROGRAM Edge1}VAR~N    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 := 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);ÃEND_VARÄ"UniqueIdGeneratorÅ4799ÆPOULevelÇL{8e575c5b-1d37-49c6-941b-5c0ec7874787}ÈStandardÉ ChildObjectGuidsÊ8System.Collections.ArrayListË,AddAttributeSubsequentÌboolÐÐ-ÐÐ	E
-zÐÐ
­"ÚÐ-ÐÐ
­qÚÐ-ÐÐ
­#ÚÐ-ÐÐ
­$ÚÐ-ÐÐ
­%ÚÐ-ÐÐ
­&ÚÐ-ÐÐ
­'ÚÐ-ÐÐ
­(ÚÐ-ÐÐ
­)ÚÐ-ÐÐ
­*ÚÐ-ÐÐ
­œÚÐ-ÐÐ
­,ÚÐ-ÐÐ
­ÚÐ-ÐÐ
­-ÚÐ-ÐÐ
­.ÚÐ-ÐÐ
­/ÚÐ-ÐÐ
­0ÚÐ-ÐÐ
­1ÚÐ-ÐÐ
­2ÚÐ-ÐÐ
­3ÚÐ- ÐÐ
­4ÚÐ-!ÐÐ
­5ÚÐ-"ÐÐ
­6ÚÐ-#ÐÐ
­7ÚÐ-$ÐÐ
­8ÚÐ-%ÐÐ
­
-ÚÐ-&ÐÐ
­9ÚÐ-'ÐÐ
­:ÚÐ-(ÐÐ
­;ÚÐ-)ÐÐ
­<ÚÐ-*ÐÐ
­=ÚÐ-+ÐÐ
­>ÚÐ-,ÐÐ
­?ÚÐ--ÐÐ
­@ÚÐ-.ÐÐ
­AÚÐ-/ÐÐ
­BÚÐ-0ÐÐ
­CÚÐ-1ÐÐ
­DÚÐ-2ÐÐ
­EÚÐ-3ÐÐ
­FÚÐ-4ÐÐ
­GÚÐ-5ÐÐ
­HÚÐ-6ÐÐ
­IÚÐ-7ÐÐ
­JÚÐ-8ÐÐ
­KÚÐ-9ÐÐ
­LÚÐ-:ÐÐ
­MÚÐ-;ÐÐ
­NÚÐ-<ÐÐ
­OÚÐ-=ÐÐ
­PÚÐ-ÐÐ
­QÚÐ-ÐÐ
­RÚÐ->ÐÐ
­SÚÐ-?ÐÐ
­TÚÐ-:ÐÐ
­UÚÐ-@ÐÐ
­VÚÐ-ÐÐ
­WÚÐ-ÐÐ
­XÚÐ-AÐÐ
­ZÚÐ-BÐÐ
­[ÚÐ-CÐÐ
­\ÚÐ-DÐÐ
­]ÚÐ-EÐÐ
­^ÚÐ-FÐÐ
­_ÚÐ-GÐÐ
­`ÚÐ-HÐÐ
­aÚÐ-IÐÐ
­bÚÐ-JÐÐ
­cÚÐ-KÐÐ
­dÚÐ-LÐÐ
­eÚÐ-MÐÐ
­fÚÐ-NÐÐ
­gÚÐ-OÐÐ
­hÚÐ-PÐÐ
­iÚÐ-QÐÐ
­jÚÐ-RÐÐ
­kÚÐ-SÐÐ
­lÚÐ-TÐÐ
­mÚÐ-UÐÐ
­nÚÐ-ÐÐ
­oÚÐ-VÐÐ
­qÚÐ-WÐÐ
­rÚÐ-CÐÐ
­sÚÐ-DÐÐ
­tÚÐ-XÐÐ
­uÚÐ-FÐÐ
­vÚÐ-YÐÐ
­wÚÐ-ZÐÐ
­xÚÐ-[ÐÐ
­yÚÐ-\ÐÐ
­zÚÐ-]ÐÐ
­{ÚÐ-^ÐÐ
­|ÚÐ-_ÐÐ
­}ÚÐ-`ÐÐ
­~ÚÐ-aÐÐ
­ÚÐ-bÐÐ
­€ÚÐ-cÐÐ
­ÚÐ-dÐÐ
­‚ÚÐ-eÐÐ
­ƒÚÐ-fÐÐ
­„ÚÐ-gÐÐ
­…ÚÐ-ÐÐ
­†ÚÐ-hÐÐ
­ˆÚÐ-iÐÐ
­‰ÚÐ-CÐÐ
­ŠÚÐ-DÐÐ
­‹ÚÐ-jÐÐ
­ŒÚÐ-FÐÐ
­ÚÐ-kÐÐ
­ŽÚÐ-lÐÐ
­ÚÐ-mÐÐ
­ÚÐ-nÐÐ
­‘ÚÐ-oÐÐ
­’ÚÐ-pÐÐ
­“ÚÐ-qÐÐ
­”ÚÐ-rÐÐ
­•ÚÐ-sÐÐ
­–ÚÐ-tÐÐ
­—ÚÐ-uÐÐ
­˜ÚÐ-vÐÐ
­™ÚÐ-wÐÐ
­šÚÐ-xÐÐ
­‡ÚÐ-yÐz{Ð	E
-NÐÐ
­rÚÐ-|ÐÐ
­sÚÐ-}ÐÐ
­tÚÐ-~ÐÐ
­uÚÐ-ÐÐ
­vÚÐ-€ÐÐ
­wÚÐ-ÐÐ
­xÚÐ-‚ÐÐ
­yÚÐ-ƒÐÐ
­zÚÐ-„ÐÐ
­{ÚÐ-…ÐÐ
­|ÚÐ-†ÐÐ
­}ÚÐ-‡ÐÐ
­~ÚÐ-ˆÐÐ
­ÚÐ-‰ÐÐ
­€ÚÐ-ŠÐÐ
­ÚÐ-‹ÐÐ
­‚ÚÐ-ŒÐÐ
­ƒÚÐ-ÐÐ
­„ÚÐ-ŽÐÐ
­…ÚÐ-ÐÐ
­†ÚÐ-€ÐÐ
­‡ÚÐ-ÐÐ
­ˆÚÐ-‘ÐÐ
­‰ÚÐ-’ÐÐ
­ŠÚÐ-“ÐÐ
­‹ÚÐ-”ÐÐ
­ŒÚÐ-•ÐÐ
­ÚÐ-–ÐÐ
­ŽÚÐ-—ÐÐ
­ÚÐ-ÐÐ
­¾ÚÐ-˜ÐÐ
­¿ÚÐ-™ÐÐ
­‘ÚÐ-šÐÐ
­’ÚÐ-ÐÐ
­“ÚÐ-›ÐÐ
­”ÚÐ-œÐÐ
­•ÚÐ-ÐÐ
­–ÚÐ-žÐÐ
­—ÚÐ-ŸÐÐ
­˜ÚÐ- ÐÐ
­™ÚÐ-¡ÐÐ
­šÚÐ-¢ÐÐ
­›ÚÐ-£ÐÐ
­œÚÐ-¤ÐÐ
­ÚÐ-¥ÐÐ
­žÚÐ-¦ÐÐ
­ŸÚÐ-§ÐÐ
­ ÚÐ-¨ÐÐ
­¡ÚÐ-©ÐÐ
­¢ÚÐ-ªÐÐ
­£ÚÐ-«ÐÐ
­¤ÚÐ-ÐÐ
­¥ÚÐ-¬ÐÐ
­¦ÚÐ-­ÐÐ
­§ÚÐ-®ÐÐ
­¨ÚÐ-¯ÐÐ
­©ÚÐ-°ÐÐ
­ªÚÐ-±ÐÐ
­«ÚÐ-²ÐÐ
­¬ÚÐ-³ÐÐ
­­ÚÐ-´ÐÐ
­®ÚÐ-µÐÐ
­¯ÚÐ-€ÐÐ
­°ÚÐ-¶ÐÐ
­±ÚÐ-·ÐÐ
­²ÚÐ-¸ÐÐ
­³ÚÐ-¹ÐÐ
­´ÚÐ-ºÐÐ
­µÚÐ-€ÐÐ
­¶ÚÐ-»ÐÐ
­·ÚÐ-¼ÐÐ
­¸ÚÐ-½ÐÐ
­¹ÚÐ-¾ÐÐ
­ºÚÐ-¿ÐÐ
­»ÚÐ-ÀÐÐ
­¼ÚÐ-ÁÐÐ
­½ÚÐ-ÂÐÐ
­ÚÐ-ÃÐÄ-ÅÐÆÇ-ÈÉÊÐËÌ­
\ No newline at end of file
+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