Post by tk096 on High Cycle Times for SoftMotion_PlanningTask when using AxisGroup
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hi, under this circumstances the performance of a Raspberry Pi 4 should be sufficient to run a Softmotion robotics application. A closer look at the project would be required. Maybe you could contact the codesys support? Usually it is recommended to run the planning task cyclically every 2ms with task priority of 0 on a dedicated core. In the task configuration you can have a look at the average and maximum execution time of the planning task. You could use the function block SMC_TuneCPKernel (https://content.helpme-codesys.com/en/libs/SM3_Robotics/Current/SM3_Robotics/POUs/AdministrativeConfiguration/Computation/SMC_TuneCPKernel.html) to define suitable values for the parameters 'fSyncBufferDuration' and 'fPlanningInterval'. However, as previously mentioned, the performance of a Raspberry Pi 4 with realtime patch should be sufficient. The 'fPlanningInterval' parameter specifies the maximum planning step width in seconds. The cycle time of the planning task should not permanently exceed this value. A higher value reduces the computational effort, but can lead to a violation or no full utilization of the set limit values for velocity, acceleration and jerk. From a starting value of 0.016 seconds, the value should be increased gradually until the performance is acceptable. The parameter 'fSyncBufferDuration' specifies the size (in seconds) of the buffer between the planning and fieldbus task. The cycle time of the planning task must not exceed this value at peak times (this will lead to the error SMC_CP_QUEUE_UNDERRUN). A higher value can compensate for peaks in the cycle time of the planning task. At the same time, however, this also increases the latency for executing interrupts and aborting movements.
    
    Last updated: 2024-03-22
    
    
      
        Post by manuknecht on Maximum dynamic limits of MC_MoveLinearAbsolute and MC_MoveLinearRelative
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hello all I use an axis group with two linear axes in a kinematic system. Using MC_MoveLinearAbsolute and MC_MoveLinearRelative, I am trying to realise dynamic movements (set velocity: 1 m/s, set acceleration: 30 m/s^2) with the highest possible jerk, as I want to compare this with a movement with a trapezoidal velocity profile. However, my measurements show that the axes accelerate with a maximum jerk of approx. 800 m/s^3, even if the value in the function block was set to 10,000 m/s^3. I have already increased the dynamic limits of the two axes accordingly (Velocity: 5000 u/s, Acc-/Deceleration: 250'000 u/s^2, Jerk: 100'000'000 u/s^3, where 1 u = 1 mm), but this had no effect. I have checked the input parameters of the function blocks and the VelFactor, AccFactor and JerkFactor factors are all set to the maximum (value 1). Reducing the cycle time has resulted in a higher jerk, but as we are already working with a cycle time of 1 ms, there is nothing more that can be done here. The axes themselves are still a long way from drawing the maximum current, which is why I assume that this should not be a problem either. Are there other factors or parameters that influence the dynamic limits and therefore allow faster movements? The PLC I am using is a Raspberry Pi 4 and Codesys V3.5 SP20 with all libraries up to date. Thanks in advance Manuel
    
    Last updated: 2024-05-08
    
    
      
        Post by xcqt on Oop best practice
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hi all, I’m currently trying to improve my OOP structure in CODESYS and I’m looking for some input on how others approach this. I understand the basics like inheritance, interfaces, abstract FBs, methods, and properties, but I still struggle a bit with the overall architecture and what’s considered clean or scalable in bigger projects. As an example, I’m working on two different energy meter function blocks: FB_EnergyMeter_MQTT reads data from MQTT (strings) FB_EnergyMeter_Modbus reads data from Modbus (words) Both have their own Update() method and implement the same interface (something like IF_EnergyMeter). Later on, I’ll probably add more meter types, but they should all behave the same from the controller’s point of view. Now, there’s a FB_GridControl block that needs power data from these meters. I see two options here: Define the meter blocks inside FB_GridControl and call them directly (for example fbModbusMeter.UpdateModbus()). Keep the meter blocks outside and pass them into FB_GridControl as interface references, so the control block doesn’t know which specific type of meter it’s dealing with. Option 2 feels cleaner and more flexible to me, but I’m not entirely sure how to handle the data flow in that case. Should I pass the meter instance through an interface reference (REFERENCE TO IF_EnergyMeter)? Or is there a better way to link the external FBs to the control block? I’d like to hear how you structure this kind of setup or see an example from someone who has done something similar. EDIT: I think i need to do something like this fbModbusUpdateInput(wInput:= wWordValue); fbMqttUpdateInput(strInput:= strStringValue); IF bUseMqtt THEN Meter REF = fbMqttUpdateInput; ELSE Meter REF = fbModbusUpdateInput; END_IF fbControl.SetMeter(UsedMeter := Meter); Or am i thinking wrong? Thanks, Thomas
    
    Last updated: 2025-10-16
    
    
      
        Post by e13740e on Parameterized Property syntax for array element processing
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Since parameterized (indexed) properties are not possible, I decided to use architectural approach "Indexing Property Adapter" to achieve the intended goal — avoiding code duplication for validated access to array elements. Essence: Create a Function Block Adapter (FB_PropertyAdapter) that encapsulates the logic for working with a single element of the target array (e.g., with one settings structure). Declare Properties inside the adapter block for accessing each individual field of the data structure. All validation logic is implemented within the Set accessors of these properties. Data Binding via VAR_IN_OUT: The adapter block receives a reference to a specific data element from the global array through its VAR_IN_OUT section, which ensures direct work with the original data without copying. Create an Array of Adapters: In the parent POU (e.g., FB_SettingsManager), an array of these adapter blocks is created — one for each element of the global array that needs to be managed. Initialize Bindings: In a FOR loop, each adapter instance from the array is given a reference to the corresponding data element. Result: This approach allows accessing the data via the index of the adapter array, and then through the property name, which simulates the behavior of an indexed property: MyAdapterArray[Index].MyProperty Thus, the validation and data access logic is written only once inside the adapter block and is then reused multiple times by creating instances of it in an array. This completely solves the problem of code duplication while providing a clean, scalable, and object-oriented architecture compatible with standard CODESYS features. Question closed.
    
    Last updated: 2025-10-19
    
    
      
        Post by struccc on Wish: CODESYSControl.cfg - again
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Before creating this topic, I was browsing the search results for CodesysControl.cfg - many results, and I remember very well, it's a problematic issue for a long time. To summarize: there were many requests for documentation on this file - the most comprehensive reply is: https://forge.codesys.com/forge/talk/Runtime/thread/ebbf851a3d/#eb85 Hi, not really, this is covered by the manual which you get if you use a runtime toolkit which is not free of charge. Maybe we need to extract the config file part from that documentation if that is possible. BR Edwin I am not sure how much is this relevant, since we buy SL License directly from CODESYS... I think it is a reasonable demand, to get documentation on the configuration entries affecting the documented behaviour of the runtime system and it's components The actual reason I bring up this issue again can be read here: https://forge.codesys.com/forge/talk/Runtime/thread/febad3cc40/#0e12 but mostly my frustration about noticing some new, unknown and undocumented entries in my configuration file. Again. And this happens a lot recently. Just some examples: Changes with SysFile - and mandatory use of IEC path Introduction of Mandatory user management File transfer service now disabled by default SysProcess - allowed commands The above mentioned CmpApp parameters... And finally (Regaridng windows install): With the newer versions, the installation directory (together with the configuration file) tends to hide itself to some super silly location under the roaming profile data of local system account. I am not sure if this change was documented somewhere, but was a very unpleasant one. Someone could please explain the reason and the concept of the introduction of this release specific directories (I am sure, there is a good reason) - how to use them properly? - How to re-introduce user configuration (to preserve configuration data between versions)? - How to do version - to version migrations properly? - How to keep old version of runtime available and ready to start with it's original configuration and application? - ... Therefore, the lack a regularly updated description of CodesysControl .cfg , including all the configuration entries, together with their default values for different runtime versions is really a big deficiency.* This should be done for all components storing or just seeking data from this file... (Maybe there is such thing but I failed to find???) It is regularly causing trouble when introducing a new version (together with the long awaited bug fixes and enhancements), what has changed it's default behaviour for security or other practical reasons. I agree this is very important, and it is logical to change the default options: But it must be documented historically, and make it easily available, so we can prepare better for the upgrade of the runtime. Forge talk is a great source, but not very practical for this kind of documentation purposes... Thanks in advance for CODESYS staff 🙏🙏🙏 (Ps.: It would look rather silly, if some members of the user community prepares this documentation on a Forge Wiki page... Or??? Should we?)
    
    Last updated: 2024-11-21
    
    
      
        Post by bschraud on runtime received SIGABRT
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Ich konnte den Fehler leider nicht wirklich finden. Hier mein bisheriger Fortschritt: Um nähere Informationen zu bekommen, habe ich einen strace erstellt: PID ermitteln: $ ps aux | grep codesyscontrol | grep -v grep --> 560 sudo strace -tt -f -p 560 -o /tmp/codesys_strace.log (Die Logdatei wird schnell einige hundert MB groß.) Mit grep -B 100 'si_signo=SIGABRT' /tmp/codesys_strace.log konnte ich die relevanten Einträge finden: (Die PID hat sich inzwischen wegen einem Reboot geändert) 1023 15:33:49.497136 writev(2, [{iov_base="Unexpected error 9 on netlink de"..., iov_len=45}], 1 <unfinished ...=""> .. 1023 15:33:49.498352 tgkill(545, 1023, SIGABRT <unfinished ...=""> 1023 15:33:49.498440 <... tgkill resumed> ) = 0 .. 1023 15:33:49.498730 --- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=545, si_uid=0}</unfinished></unfinished> Der Codesys Log zeigt zu diesem Zeitpunkt: Exception: HANDLED EXCPT <excpt>NonContinuable</excpt> in CH_COMM_CYCLE Mit sudo lsof -p 545 habe ich die Anzahl der geöffneten Dateien überprüft ohne Auffälligkeiten Mit sudo netstat -tunaep | grep codesys habe ich die offenen Netzwerkverbindungen der codesys Prozesse überprüft Hier sieht es so aus, dass codesyscontrol und codesysedge über die externen Netzwerkschnittstelle anstatt über den localhost kommunizieren: udp 0 0 172.19.11.127:1740 0.0.0.0: 0 17882 549/codesyscontrol. udp 0 0 172.19.11.255:1740 0.0.0.0: 0 17883 549/codesyscontrol. udp 0 0 172.19.11.255:1743 0.0.0.0: 0 16993 529/codesysedge.bin udp 0 0 172.19.11.127:1743 0.0.0.0: 0 16992 529/codesysedge.bin Leider kann ich keine Konfiguration mit einer anderen Schnittstelle einstellen.. Als nächstes habe ich die udp Kommunikation der beiden Prozesse aufgezeichnet: SPID des BlkDrvUdp Threads ermitteln: $ ps aux | grep codesyscontrol | grep -v grep --> 548 $ ps -T -p 548 | grep BlkDrvUdp --> 1200 Damit kann man den strace starten: sudo strace -p 1020 -f -tt -o /tmp/udp_control_trace.log -e trace=socket,connect,bind,sendto,recvfrom,close $ ps aux | grep codesysedge | grep -v grep --> 528 $ ps -T -p 528 | grep BlkDrvUdp --> 789 sudo strace -p 789 -f -tt -o /tmp/udp_edge_trace.log -e trace=socket,connect,bind,sendto,recvfrom,close Beim Aufzeichnen des Traces kamen wiederholte Fehlereinträge im codesyscontrol.log (diesmal ohne SIGABRT) nach folgendem Muster: tail -f /var/opt/codesys/codesyscontrol.log (mit UTC Zeit) 2025-04-17T11:23:43.147Z, 0x00000071, 1, 0, 0, Host : PAC4 2025-04-17T11:23:43.147Z, 0x00000071, 1, 0, 0, HTTP port : 8080 2025-04-17T11:23:43.147Z, 0x00000071, 1, 0, 0, HTTPS port : 443 2025-04-17T11:23:43.147Z, 0x00000071, 1, 0, 0, Connection type : HTTP 2025-04-17T11:23:43.147Z, 0x00000071, 1, 0, 0, ********** 2025-04-17T11:23:46.318Z, 0x00000061, 1, 0, 0, Create asymmetric key done! 2025-04-17T11:23:53.464Z, 0x00000071, 1, 404, 0, File $PlcLogic$/$visu$/favicon.ico not found on this server 2025-04-17T11:23:55.208Z, 0x0000100c, 1, 0, 0, Visu_PRG: Creating Client for Extern-ID: 2025487823 2025-04-17T11:23:55.216Z, 0x0000100c, 1, 0, 0, Visu_PRG: Creating Client successful for Extern-ID: 2025487823 Returned IEC-ID: 0 2025-04-17T11:40:43.471Z, 0x00000114, 4, 1, 0, ** ERROR: SysTaskCreate [CheckLicense0]: pthread_setname_np: Bad file descriptor Hier der dazu passende trace auszug von grep -B 100 '13:40:43' /tmp/udp_edge_trace.log: 798 13:40:42.592535 socket(AF_NETLINK, SOCK_RAW|SOCK_CLOEXEC, NETLINK_ROUTE) = 9 798 13:40:42.592794 bind(9, {sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, 12) = 0 798 13:40:42.593049 sendto(9, {{len=20, type=0x12 / NLMSG_??? /, flags=NLM_F_REQUEST|0x300, seq=1744890042, pid=0}, "\x00\x00\x00\x00"}, 20, 0, {sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, 12) = 20 798 13:40:42.602995 sendto(9, {{len=20, type=0x16 / NLMSG_??? /, flags=NLM_F_REQUEST|0x300, seq=1744890043, pid=0}, "\x00\x00\x00\x00"}, 20, 0, {sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, 12) = 20 798 13:40:42.614794 close(9) = 0 798 13:40:42.615065 socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 9 798 13:40:42.615331 close(9) = 0 798 13:40:42.616159 close(9) = 0 798 13:40:42.616318 socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 9 798 13:40:42.616555 close(9) = 0 798 13:40:42.617209 close(9) = 0 798 13:40:42.617355 socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 9 798 13:40:42.617590 close(9) = 0 798 13:40:42.618497 close(9) = 0 798 13:40:42.618712 socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 9 798 13:40:42.618995 close(9) = 0 798 13:40:42.619568 close(9) = 0 798 13:40:42.620247 close(9) = 0 798 13:40:42.620441 socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 9 798 13:40:42.620690 close(9) = 0 798 13:40:42.621181 close(9) = 0 798 13:40:42.621823 close(9) = 0 798 13:40:43.520036 close(9) = 0 798 13:40:43.520406 close(9) = 0 und grep -B 100 '13:40:43' /tmp/udp_control_trace.log 1035 13:40:43.389785 socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 20 1035 13:40:43.390043 close(20) = 0 1035 13:40:43.390681 close(20) = 0 1035 13:40:43.393690 close(20) = 0 22586 13:40:43.450945 close(0) = 0 22586 13:40:43.451230 close(0) = -1 EBADF (Ungültiger Dateideskriptor) 22586 13:40:43.451689 close(20) = 0 22586 13:40:43.452104 close(1) = 0 22586 13:40:43.452481 close(21) = 0 22586 13:40:43.452679 close(2) = 0 22586 13:40:43.452860 close(2) = -1 EBADF (Ungültiger Dateideskriptor) 1009 13:40:43.454112 close(21) = 0 22586 13:40:43.454522 close(8) = 0 22586 13:40:43.455428 close(8) = 0 22586 13:40:43.455976 close(8) = 0 22586 13:40:43.456852 close(8) = 0 22587 13:40:43.463115 close(8) = 0 22587 13:40:43.464074 close(8) = 0 22587 13:40:43.464682 close(8) = 0 22587 13:40:43.465463 close(8) = 0 22587 13:40:43.468229 close(8) = 0 22587 13:40:43.468737 close(1 <unfinished ...=""> 1009 13:40:43.468805 close(20 <unfinished ...=""> 22587 13:40:43.468849 <... close resumed> ) = 0 1009 13:40:43.468896 <... close resumed> ) = 0 22587 13:40:43.468942 close(2) = 0 22587 13:40:43.469504 +++ exited with 0 +++ 22586 13:40:43.469670 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=22587, si_uid=0, si_status=0, si_utime=0, si_stime=1} --- 22586 13:40:43.470175 +++ exited with 0 +++ 1009 13:40:43.470265 close(20) = 0 546 13:40:43.470577 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=22586, si_uid=0, si_status=0, si_utime=0, si_stime=2} --- 1035 13:40:43.470913 close(20) = -1 EBADF (Ungültiger Dateideskriptor) 22588 13:40:43.480352 --- SIGRT_7 {si_signo=SIGRT_7, si_code=SI_TKILL, si_pid=546, si_uid=0} --- 22588 13:40:43.481675 --- SIGRT_6 {si_signo=SIGRT_6, si_code=SI_TKILL, si_pid=546, si_uid=0} --- 22588 13:40:43.482410 +++ exited with 0 +++</unfinished></unfinished> Die Zeile 2025-04-17T11:40:43.471Z, 0x00000114, 4, 1, 0, **** ERROR: SysTaskCreate [CheckLicense0]: pthread_setname_np: Bad file descriptor zeigt, dass der EBADF-Fehler beim Versuch auftritt, einen neuen Thread namens "CheckLicense0" zu erstellen. Die Funktion pthread_setname_np() erhält einen EBADF-Fehler. Ich weiß leider nicht, ob das eine heiße Spur ist. Parallel dazu habe ich die Aufrufe von Systemfunktionen über SysProcess_Implementation.SysProcessExecuteCommand2 auskommentiert ohne den Fehler damit abzustellen. An diesem Punkt habe ich wegen Termindruck den alten Stand der Runtime (4.11.0.0) mit der Codesys Version 3.5 SP20 wiederhergestellt und die geänderten Programme und Visualisierungen manuell getauscht mit dem Ergebnis, dass der Fehler in den letzten 2 Stunden nicht mehr aufgetreten ist. Wenn jemand das Problem kennt, wäre ich für einen Austausch dankbar. Frohe Ostern!
    
    Last updated: 2025-04-17
    
    
      
        Post by dwpessoa on CNC Jumps G20 - SMC_NCInterpreter and long time to process
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      I am studying and developing a Softmotion+CNC system for a machine that executes multiple pieces. The G code program is written by the machine operator and each cycle execute 1 piece. The programs are large, exceeding 1000 lines and using up to 8 axes (X, Y, Z, A, B, C, P and Q). The machine needs to run cyclically, executing N pieces (selected by the Operator)... so I tested it using Looping and counters (G36 G37 and G20) and it worked, but it takes a long time to process, and the more pieces I need, the longer the processing time and this is totally impracticable. I found this solution which was very good, and for a few cycles it works well, but for 99999 pieces of a program with 1000 lines, it doesn't work very well... Another solution I tested is to maintain the interpolator with an automatic restart, that is, I load the program without looping (without G20) and give it another start as soon as it finishes. This partially resolved it, but there is still a delay in processing SMC_NCInterpreter in each restart :(. Another solution I thought of is to manually create the SMC_GEOINFO structure and then reuse it, avoinding the Interpreter, but reading the documentation and checking the structure filled by standard blocks, I noticed that there doesn't seem to be a "JUMP" function in the structure! In other words, the SMC_NCInterpreter actually keeps copying and copying the program section for each jump (G20)... If I repeat a 10-line program 1000 times, I will have a structure with more than 10000 lines... possibly this is the cause of take so long to process. Has anyone ever had a problem like this? I believe the same thing happens with typical applications with manipulator robots using Codesys in continuous cycles, and I would like to know if there is any solution, or even if I am misinterpreting the G20 question in SMC_GEOINFO. Thanks!
    
    Last updated: 2023-09-20
    
    
      
        Post by gustavocsw on MQTT memory leak problem
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hello everyone, I'm using the IoT Library to implement the MQTT communication with my local broker server in order to publish and subscribe at specifics topics to share and consume information about my application. But, it seems that are occurring some memory leak problem in a "high" frequency (more than 10 Hz) subscribe process. I follow the same method as in IoT Lib exemples, and at first looks perfect but my PLC was rebooting frequently and when I check its memory usage that was increasing as fast as the subscribe massage was sent. I'm using a WEG PLC410 and a WEG PLC500, and this error occurred in both of them (including in CODESYS Control Win x64). The application sends to the system a message JSON with the float payload Ex. {"data" : 0.8500}, but this happens with a INT, or BOL as well. I use the follow code in my application to find the value: //FindFirstValueByKey VARs PROGRAM JSON_VELO VAR //------Setting the JSON Subscriber to Set the Relay Value jsonDataVelo : JSON.JSONData; jsonByteArrayReaderVelo : JSON.JSONByteArrayReader; xST1okVelo : BOOL; FindFirstValueByKeyVelo : JSON.FindFirstValueByKey; jsonElementVelo : JSON.JSONElement; xDoneReaderVelo : BOOL; xDoneFindVelo : BOOL; //STRING and WSTRING for Subscribe the massage sPayloadJsonVelo : STRING := 'opa'; psPayloadJsonVelo : POINTER TO BYTE := ADR(sPayloadJsonVelo); //wsPayloadJsonRelaySet : WSTRING := "opa"; wsPayloadJsonVelo : WSTRING := STRING_TO_WSTRING('opa'); pwsPayloadJsonVelo : POINTER TO WORD := ADR(wsPayloadJsonVelo); lrVelo : LREAL; xKeepAliveVelo : BOOL; xSetVelo : BOOL; RSSet : RS; LIMPAR : STRING; //Find the msg end sFindVelo : STRING := '}'; psFindVelo : POINTER TO STRING := ADR(sFindVelo); iLenVelo : INT; iSizeVelo : INT := 12; udiContMsg : UDINT; END_VAR // FindFirstValueByKey CODE // Relay Set configuration xSetVelo := MQTT_SUBSCRIBER.RSVelo.Q1; IF xSetVelo THEN xKeepAliveVelo := TRUE; END_IF IF xKeepAliveVelo THEN udiContMsg := udiContMsg + 1; iLenVelo := TO_INT(StrLenA(psPayloadJsonVelo)); iSizeVelo := iLenVelo - TO_INT(MQTT_SUBSCRIBER.udiPayloadSizeVelo); StrDeleteA(psPayloadJsonVelo,iSizeVelo,iLenVelo); wsPayloadJsonVelo := STRING_TO_WSTRING(sPayloadJsonVelo); pwsPayloadJsonVelo := ADR(wsPayloadJsonVelo); //MQTT.ConvertUTF8toUTF16(sourceStart:= ADR(sPayloadJsonVelo), targetStart:= ADR(wsPayloadJsonVelo), dwTargetBufferSize:= TAM, bStrictConversion:= 1); //Reset jsonByteArrayReader jsonByteArrayReaderVelo ( xExecute := TRUE, pwData := pwsPayloadJsonVelo, jsonData := jsonDataVelo, xDone => xDoneReaderVelo ); FindFirstValueByKeyVelo( xExecute := xDoneReaderVelo, wsKey := "data", diStartIndex:= 0, jsonData := jsonDataVelo, jsonElement => jsonElementVelo, xDone => xDoneFindVelo ); IF xDoneFindVelo THEN lrVelo := jsonElementVelo.value.lrValue; //Reset jsonByteArrayReader jsonByteArrayReaderVelo ( xExecute := FALSE, pwData := pwsPayloadJsonVelo, jsonData := jsonDataVelo, xDone => xDoneReaderVelo ); FindFirstValueByKeyVelo( xExecute := FALSE, wsKey := "data", diStartIndex:= 1, jsonData := jsonDataVelo, jsonElement => jsonElementVelo, xDone => xDoneFindVelo ); xKeepAliveVelo := FALSE; GVL.xSetVeloRead := TRUE; END_IF END_IF And this to subscribe at the topic: //SUBSCRIBE VAR: //----------------- Subscribe Velocity ----------------------- MQTTSubscribeVelo : MQTT.MQTTSubscribe;//Variable MQTTSubscriber block -X - function-X wsTopicSubscribeVelo : WSTRING(1024) := "CORE/odometry/GET/data/simp"; // Topic to publish a message sSubscribeMassageVelo : STRING; udiPayloadSizeVelo : UDINT; xSDoneVelo : BOOL; xSErrorVelo : BOOL; xReceiveVelo : BOOL; eSTypeVelo : MQTT.MQTT_ERROR; eSMQTTErrorVelo : MQTT.MQTT_ERROR; RSVelo : RS; udiCont : UDINT; //SUBSCRIBE CODE: MQTTSubscribeVelo( xEnable:= MQTT_CLIENT.xConnection_Broker AND NOT xSErrorVelo AND NOT JSON_VELO.xKeepAliveVelo, pbPayload:= JSON_VELO.psPayloadJsonVelo, udiMaxPayloadSize:= SIZEOF(JSON_VELO.sPayloadJsonVelo), udiPayloadSize => udiPayloadSizeVelo, mqttClient:= MQTT_CLIENT.ClientMQTT, wsTopicFilter:=wsTopicSubscribeVelo, xDone => xSDoneVelo, xError=> xSErrorVelo, xReceived => xReceiveVelo, eMQTTError=> eSMQTTErrorVelo ); RSVelo(SET := xReceiveVelo, RESET1 := JSON_VELO.xKeepAliveVelo);
    
    Last updated: 2024-09-09
    
    
      
        Post by munwar on Temu Coupon code^ 40 Off 👉 "[acq794628]" | 👈 ^^October 2024 New and Existing Customers
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Temu Coupon code^ 40 Off 👉 "[acq794628]" | 👈 ^^October 2024 New and Existing Customers New users receive a $40 discount on orders over $100 Use the Temu Coupon code [acq794628] during checkout to get Temu Coupon $100 off For New Users. You can save $100 off your first order with the coupon code available for a limited time only. Extra 30% off for new and existing customers + Up to 90% off & more. Temu coupon codes for New users- [acq794628] Temu discount code for New customers- [acq794628] Temu $100 coupon code- [acq794628] what are Temu codes- acq794628 does Temu give you $100- [acq794628] Yes Verified Temu coupon code August 2024- {acq794628} Temu New customer offer {acq794628} Temu discount code 2024 {acq794628} 100 off coupon code Temu {acq794628} Temu 100% off any order {acq794628} 100 dollar off Temu code {acq794628} Temu coupon $100 off for New customers There are a number of discounts and deals shoppers can take advantage of with the Teemu Coupon Bundle [acq794628]. Temu coupon $100 off for New customers"acq794628" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. You can think of it as a supercharged savings pack for all your shopping needs Temu coupon code 80% off – [acq794628] Free Temu codes 50% off – [acu600079] Temu coupon $100 off – [acq794628] Temu buy to get $39 – [acq794628] Temu 129 coupon bundle – [acq794628] Temu buy 3 to get $99 – [acq794628] Exclusive $100 Off Temu Coupon Code Temu $100 Off Coupon Code : (acq794628) Temu Coupon Code $100 Bundle :(acq794628) Free Gift On Temu : (acq794628) Temu $100 off coupon code for Exsting users : (acq794628) Temu coupon code $100 off Temu 90% OFF promo code "acq794628" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “acq794628” for first time users. You can get a $100 bonus plus 30% off any purchase at Temu with the $100 Coupon Bundle at Temu if you sign up with the referral code [acq794628] and make a first purchase of $100 or more. Temu coupon code 100 off-{acq794628} Temu coupon code -{acq794628} Temu coupon code $100 off-{acq794628} kubonus code -{acq794628}
    
    Last updated: 2024-10-26
    
    
      
        Post by falif461 on Is Temu $100 coupon legit? [acq557317]
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      New users at Temu receive a CACA$100 discount on orders over CACA$100 Use the code [acq557317] during checkout to get Temu Discount CACA$100 off For New Users. You can save CACA$100 off your first order with the coupon code available for a limited time only. Extra 30% off for new and existing customers + Up to CACA$100 % off & more. Temu coupon codes for New users- [acq557317] Temu discount code for New customers- [acq557317] Temu CACA$100 coupon code- [acq557317] what are Temu codes- acq557317 does Temu give you CACA$100- [acq557317] Yes Verified Temu coupon code October 2024- {acq557317} Temu New customer offer {acq557317} Temu discount code 2024 {acq557317} 100 off coupon code Temu {acq557317} Temu 100% off any order {acq557317} 100 dollar off Temu code {acq557317} Temu coupon CACA$100 off for New customers There are a number of discounts and deals shoppers can take advantage of with the Teemu Coupon Bundle [acq557317]. Temu coupon CACA$100 off for New customers"acq557317" will save you CACA$100 on your order. To get a discount, click on the item to purchase and enter the code. You can think of it as a supercharged savings pack for all your shopping needs Temu coupon code 80% off – [acq557317] Free Temu codes 50% off – [acu600079] Temu coupon CACA$100 off – [acq557317] Temu buy to get £39 – [acq557317] Temu 129 coupon bundle – [acq557317] Temu buy 3 to get €99 – [acq557317] Exclusive CACA$100 Off Temu Discount Code Temu CACA$100 Off Coupon Code : (acq557317) Temu Discount Code CACA$100 Bundle :(acq557317)acq557317 Temu CACA$100 off coupon code for Exsting users : (acq557317) Temu coupon code CACA$100 off Temu CACA$100 % OFF promo code "acq557317" will save you CACA$100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers CACA$100 off coupon code “acq557317” for first time users. You can get a CACA$100 bonus plus 30% off any purchase at Temu with the CACA$100 Coupon Bundle at Temu if you sign up with the referral code [acq557317] and make a first purchase of CACA$100 or more. Temu coupon code 100 off-{acq557317} Temu coupon code -{acq557317} Temu coupon code CACA$100 off-{acq557317} kubonus code -{acq557317}
    
    Last updated: 2024-10-26
    
    
      
        Post by bindu on 30% off ➤ Temu Coupon Code [[acq717533 "OR" frd266077]]  for New and Existing Customers 
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      "New users at Temu receive a $100 discount on orders over $100 Use the code [acq717533] during checkout to get Temu Coupon $100 off For New Users. You can save $100 off your first order with the coupon code available for a limited time only. Extra 30% off for new and existing customers + Up to 90% off & more. Temu coupon codes for New users- [acq717533] Temu discount code for New customers- [acq717533] Temu $100 coupon code- [acq717533] what are Temu codes- acq717533 does Temu give you $100- [acq717533] Yes Verified Temu coupon code October 2024- {acq717533} Temu New customer offer {acq717533} Temu discount code 2024 {acq717533} 100 off coupon code Temu {acq717533} Temu 100% off any order {acq717533} 100 dollar off Temu code {acq717533} Temu coupon $100 off for New customers There are a number of discounts and deals shoppers can take advantage of with the Teemu Coupon Bundle [acq717533]. Temu coupon $100 off for New customers""""acq717533"""" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. You can think of it as a supercharged savings pack for all your shopping needs Temu coupon code 80% off – [acq717533] Free Temu codes 50% off – [acu600079] Temu coupon $100 off – [acq717533] Temu buy to get £39 – [acq717533] Temu 129 coupon bundle – [acq717533] Temu buy 3 to get $99 – [acq717533] Exclusive $100 Off Temu Coupon Code Temu $100 Off Coupon Code : (acq717533) Temu Coupon Code $100 Bundle :(acq717533) Free Gift On Temu : (acq717533) Temu $100 off coupon code for Exsting users : (acq717533) Temu coupon code $100 off Temu 90% OFF promo code """"acq717533"""" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “acq717533” for first time users. You can get a $100 bonus plus 30% off any purchase at Temu with the $100 Coupon Bundle at Temu if you sign up with the referral code [acq717533] and make a first purchase of $100 or more. Temu coupon code 100 off-{acq717533} Temu coupon code -{acq717533} Temu coupon code $100 off-{acq717533} kubonus code -{acq717533}"
    
    Last updated: 2024-10-26
    
    
      
        Post by bindu on 50% off ➥ Temu Coupon Code [[acq866328 "OR" frp414131]]  for Existing Customers 
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      "New users at Temu receive a $100 discount on orders over $100 Use the code [acq866328] during checkout to get Temu Coupon $100 off For New Users. You can save $100 off your first order with the coupon code available for a limited time only. Extra 30% off for new and existing customers + Up to 90% off & more. Temu coupon codes for New users- [acq866328] Temu discount code for New customers- [acq866328] Temu $100 coupon code- [acq866328] what are Temu codes- acq866328 does Temu give you $100- [acq866328] Yes Verified Temu coupon code October 2024- {acq866328} Temu New customer offer {acq866328} Temu discount code 2024 {acq866328} 100 off coupon code Temu {acq866328} Temu 100% off any order {acq866328} 100 dollar off Temu code {acq866328} Temu coupon $100 off for New customers There are a number of discounts and deals shoppers can take advantage of with the Teemu Coupon Bundle [acq866328]. Temu coupon $100 off for New customers""""acq866328"""" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. You can think of it as a supercharged savings pack for all your shopping needs Temu coupon code 80% off – [acq866328] Free Temu codes 50% off – [acu600079] Temu coupon $100 off – [acq866328] Temu buy to get £39 – [acq866328] Temu 129 coupon bundle – [acq866328] Temu buy 3 to get $99 – [acq866328] Exclusive $100 Off Temu Coupon Code Temu $100 Off Coupon Code : (acq866328) Temu Coupon Code $100 Bundle :(acq866328) Free Gift On Temu : (acq866328) Temu $100 off coupon code for Exsting users : (acq866328) Temu coupon code $100 off Temu 90% OFF promo code """"acq866328"""" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “acq866328” for first time users. You can get a $100 bonus plus 30% off any purchase at Temu with the $100 Coupon Bundle at Temu if you sign up with the referral code [acq866328] and make a first purchase of $100 or more. Temu coupon code 100 off-{acq866328} Temu coupon code -{acq866328} Temu coupon code $100 off-{acq866328} kubonus code -{acq866328}"
    
    Last updated: 2024-10-26
    
    
      
        Post by kedar on Temu Discount Code Portugal ⏭ ["^"acs597987"^"] for Free Shipping (Free Credit $750) 
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      "New users at Temu receive a $100 discount on orders over $100 Use the code [acs597987] during checkout to get Temu Discount $100 off For New Users. You can save $100 off your first order with the coupon code available for a limited time only. Extra 30% off for new and existing customers + Up to 90% off & more. Temu coupon codes for New users- [acs597987] Temu discount code for New customers- [acs597987] Temu $100 coupon code- [acs597987] what are Temu codes- acs597987 does Temu give you $100- [acs597987] Yes Verified Temu coupon code October 2024- {acs597987} Temu New customer offer {acs597987} Temu discount code 2024 {acs597987} 100 off coupon code Temu {acs597987} Temu 100% off any order {acs597987} 100 dollar off Temu code {acs597987} Temu coupon $100 off for New customers There are a number of discounts and deals shoppers can take advantage of with the Teemu Coupon Bundle [acs597987]. Temu coupon $100 off for New customers""acs597987"" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. You can think of it as a supercharged savings pack for all your shopping needs Temu coupon code 80% off – [acs597987] Free Temu codes 50% off – [acu600079] Temu coupon $100 off – [acs597987] Temu buy to get £39 – [acs597987] Temu 129 coupon bundle – [acs597987] Temu buy 3 to get $99 – [acs597987] Exclusive $100 Off Temu Discount Code Temu $100 Off Coupon Code : (acs597987) Temu Discount Code $100 Bundle :(acs597987) Free Gift On Temu : (acs597987) Temu $100 off coupon code for Exsting users : (acs597987) Temu coupon code $100 off Temu 90% OFF promo code ""acs597987"" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “acs597987” for first time users. You can get a $100 bonus plus 30% off any purchase at Temu with the $100 Coupon Bundle at Temu if you sign up with the referral code [acs597987] and make a first purchase of $100 or more. Temu coupon code 100 off-{acs597987} Temu coupon code -{acs597987} Temu coupon code $100 off-{acs597987} kubonus code -{acs597987}"
    
    Last updated: 2024-10-26
    
    
      
        Post by kedar on Temu Discount Code Japan ➧ ["^"acq615756"^"] for First order & Free Shipping 
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      "New users at Temu receive a $100 discount on orders over $100 Use the code [acq615756] during checkout to get Temu Discount $100 off For New Users. You can save $100 off your first order with the coupon code available for a limited time only. Extra 30% off for new and existing customers + Up to 90% off & more. Temu coupon codes for New users- [acq615756] Temu discount code for New customers- [acq615756] Temu $100 coupon code- [acq615756] what are Temu codes- acq615756 does Temu give you $100- [acq615756] Yes Verified Temu coupon code October 2024- {acq615756} Temu New customer offer {acq615756} Temu discount code 2024 {acq615756} 100 off coupon code Temu {acq615756} Temu 100% off any order {acq615756} 100 dollar off Temu code {acq615756} Temu coupon $100 off for New customers There are a number of discounts and deals shoppers can take advantage of with the Teemu Coupon Bundle [acq615756]. Temu coupon $100 off for New customers""acq615756"" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. You can think of it as a supercharged savings pack for all your shopping needs Temu coupon code 80% off – [acq615756] Free Temu codes 50% off – [acu600079] Temu coupon $100 off – [acq615756] Temu buy to get £39 – [acq615756] Temu 129 coupon bundle – [acq615756] Temu buy 3 to get $99 – [acq615756] Exclusive $100 Off Temu Discount Code Temu $100 Off Coupon Code : (acq615756) Temu Discount Code $100 Bundle :(acq615756) Free Gift On Temu : (acq615756) Temu $100 off coupon code for Exsting users : (acq615756) Temu coupon code $100 off Temu 90% OFF promo code ""acq615756"" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “acq615756” for first time users. You can get a $100 bonus plus 30% off any purchase at Temu with the $100 Coupon Bundle at Temu if you sign up with the referral code [acq615756] and make a first purchase of $100 or more. Temu coupon code 100 off-{acq615756} Temu coupon code -{acq615756} Temu coupon code $100 off-{acq615756} kubonus code -{acq615756}"
    
    Last updated: 2024-10-26
    
    
      
        Post by kedar on [40% off] Temu Coupon Code ➔ [acq615756]  for New and Existing Customers 
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      "New users at Temu receive a $100 discount on orders over $100 Use the code [acq615756] during checkout to get Temu Coupon $100 off For New Users. You can save $100 off your first order with the coupon code available for a limited time only. Extra 30% off for new and existing customers + Up to 90% off & more. Temu coupon codes for New users- [acq615756] Temu discount code for New customers- [acq615756] Temu $100 coupon code- [acq615756] what are Temu codes- acq615756 does Temu give you $100- [acq615756] Yes Verified Temu coupon code October 2024- {acq615756} Temu New customer offer {acq615756} Temu discount code 2024 {acq615756} 100 off coupon code Temu {acq615756} Temu 100% off any order {acq615756} 100 dollar off Temu code {acq615756} Temu coupon $100 off for New customers There are a number of discounts and deals shoppers can take advantage of with the Teemu Coupon Bundle [acq615756]. Temu coupon $100 off for New customers""""acq615756"""" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. You can think of it as a supercharged savings pack for all your shopping needs Temu coupon code 80% off – [acq615756] Free Temu codes 50% off – [acu600079] Temu coupon $100 off – [acq615756] Temu buy to get £39 – [acq615756] Temu 129 coupon bundle – [acq615756] Temu buy 3 to get $99 – [acq615756] Exclusive $100 Off Temu Coupon Code Temu $100 Off Coupon Code : (acq615756) Temu Coupon Code $100 Bundle :(acq615756) Free Gift On Temu : (acq615756) Temu $100 off coupon code for Exsting users : (acq615756) Temu coupon code $100 off Temu 90% OFF promo code """"acq615756"""" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “acq615756” for first time users. You can get a $100 bonus plus 30% off any purchase at Temu with the $100 Coupon Bundle at Temu if you sign up with the referral code [acq615756] and make a first purchase of $100 or more. Temu coupon code 100 off-{acq615756} Temu coupon code -{acq615756} Temu coupon code $100 off-{acq615756} kubonus code -{acq615756}"
    
    Last updated: 2024-10-26
    
    
      
        Post by kedar on Temu Discount Code Norway ➵ ["^"acs597987"^"] for Existing Customers 
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      "New users at Temu receive a $100 discount on orders over $100 Use the code [acs597987] during checkout to get Temu Discount $100 off For New Users. You can save $100 off your first order with the coupon code available for a limited time only. Extra 30% off for new and existing customers + Up to 90% off & more. Temu coupon codes for New users- [acs597987] Temu discount code for New customers- [acs597987] Temu $100 coupon code- [acs597987] what are Temu codes- acs597987 does Temu give you $100- [acs597987] Yes Verified Temu coupon code October 2024- {acs597987} Temu New customer offer {acs597987} Temu discount code 2024 {acs597987} 100 off coupon code Temu {acs597987} Temu 100% off any order {acs597987} 100 dollar off Temu code {acs597987} Temu coupon $100 off for New customers There are a number of discounts and deals shoppers can take advantage of with the Teemu Coupon Bundle [acs597987]. Temu coupon $100 off for New customers""acs597987"" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. You can think of it as a supercharged savings pack for all your shopping needs Temu coupon code 80% off – [acs597987] Free Temu codes 50% off – [acu600079] Temu coupon $100 off – [acs597987] Temu buy to get £39 – [acs597987] Temu 129 coupon bundle – [acs597987] Temu buy 3 to get $99 – [acs597987] Exclusive $100 Off Temu Discount Code Temu $100 Off Coupon Code : (acs597987) Temu Discount Code $100 Bundle :(acs597987) Free Gift On Temu : (acs597987) Temu $100 off coupon code for Exsting users : (acs597987) Temu coupon code $100 off Temu 90% OFF promo code ""acs597987"" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “acs597987” for first time users. You can get a $100 bonus plus 30% off any purchase at Temu with the $100 Coupon Bundle at Temu if you sign up with the referral code [acs597987] and make a first purchase of $100 or more. Temu coupon code 100 off-{acs597987} Temu coupon code -{acs597987} Temu coupon code $100 off-{acs597987} kubonus code -{acs597987}"
    
    Last updated: 2024-10-26
    
    
      
        Post by kedar on Temu Discount Code Belgium ⇨ ["^"acs597987"^"] for First Order 
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      "New users at Temu receive a $100 discount on orders over $100 Use the code [acs597987] during checkout to get Temu Discount $100 off For New Users. You can save $100 off your first order with the coupon code available for a limited time only. Extra 30% off for new and existing customers + Up to 90% off & more. Temu coupon codes for New users- [acs597987] Temu discount code for New customers- [acs597987] Temu $100 coupon code- [acs597987] what are Temu codes- acs597987 does Temu give you $100- [acs597987] Yes Verified Temu coupon code October 2024- {acs597987} Temu New customer offer {acs597987} Temu discount code 2024 {acs597987} 100 off coupon code Temu {acs597987} Temu 100% off any order {acs597987} 100 dollar off Temu code {acs597987} Temu coupon $100 off for New customers There are a number of discounts and deals shoppers can take advantage of with the Teemu Coupon Bundle [acs597987]. Temu coupon $100 off for New customers""acs597987"" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. You can think of it as a supercharged savings pack for all your shopping needs Temu coupon code 80% off – [acs597987] Free Temu codes 50% off – [acu600079] Temu coupon $100 off – [acs597987] Temu buy to get £39 – [acs597987] Temu 129 coupon bundle – [acs597987] Temu buy 3 to get $99 – [acs597987] Exclusive $100 Off Temu Discount Code Temu $100 Off Coupon Code : (acs597987) Temu Discount Code $100 Bundle :(acs597987) Free Gift On Temu : (acs597987) Temu $100 off coupon code for Exsting users : (acs597987) Temu coupon code $100 off Temu 90% OFF promo code ""acs597987"" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “acs597987” for first time users. You can get a $100 bonus plus 30% off any purchase at Temu with the $100 Coupon Bundle at Temu if you sign up with the referral code [acs597987] and make a first purchase of $100 or more. Temu coupon code 100 off-{acs597987} Temu coupon code -{acs597987} Temu coupon code $100 off-{acs597987} kubonus code -{acs597987}"
    
    Last updated: 2024-10-26
    
    
      
        Post by kedar on [50% off] Temu Coupon Code ➧ [acr900074]  for Existing Customers 
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      "New users at Temu receive a $100 discount on orders over $100 Use the code [acr900074] during checkout to get Temu Coupon $100 off For New Users. You can save $100 off your first order with the coupon code available for a limited time only. Extra 30% off for new and existing customers + Up to 90% off & more. Temu coupon codes for New users- [acr900074] Temu discount code for New customers- [acr900074] Temu $100 coupon code- [acr900074] what are Temu codes- acr900074 does Temu give you $100- [acr900074] Yes Verified Temu coupon code October 2024- {acr900074} Temu New customer offer {acr900074} Temu discount code 2024 {acr900074} 100 off coupon code Temu {acr900074} Temu 100% off any order {acr900074} 100 dollar off Temu code {acr900074} Temu coupon $100 off for New customers There are a number of discounts and deals shoppers can take advantage of with the Teemu Coupon Bundle [acr900074]. Temu coupon $100 off for New customers""""acr900074"""" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. You can think of it as a supercharged savings pack for all your shopping needs Temu coupon code 80% off – [acr900074] Free Temu codes 50% off – [acu600079] Temu coupon $100 off – [acr900074] Temu buy to get £39 – [acr900074] Temu 129 coupon bundle – [acr900074] Temu buy 3 to get $99 – [acr900074] Exclusive $100 Off Temu Coupon Code Temu $100 Off Coupon Code : (acr900074) Temu Coupon Code $100 Bundle :(acr900074) Free Gift On Temu : (acr900074) Temu $100 off coupon code for Exsting users : (acr900074) Temu coupon code $100 off Temu 90% OFF promo code """"acr900074"""" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “acr900074” for first time users. You can get a $100 bonus plus 30% off any purchase at Temu with the $100 Coupon Bundle at Temu if you sign up with the referral code [acr900074] and make a first purchase of $100 or more. Temu coupon code 100 off-{acr900074} Temu coupon code -{acr900074} Temu coupon code $100 off-{acr900074} kubonus code -{acr900074}"
    
    Last updated: 2024-10-26
    
    
      
        Post by kedar on Temu Discount Code Sweden ⥓ ["^"acs615756"^"] for New and Existing Customers 
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      "New users at Temu receive a $100 discount on orders over $100 Use the code [acs615756] during checkout to get Temu Discount $100 off For New Users. You can save $100 off your first order with the coupon code available for a limited time only. Extra 30% off for new and existing customers + Up to 90% off & more. Temu coupon codes for New users- [acs615756] Temu discount code for New customers- [acs615756] Temu $100 coupon code- [acs615756] what are Temu codes- acs615756 does Temu give you $100- [acs615756] Yes Verified Temu coupon code October 2024- {acs615756} Temu New customer offer {acs615756} Temu discount code 2024 {acs615756} 100 off coupon code Temu {acs615756} Temu 100% off any order {acs615756} 100 dollar off Temu code {acs615756} Temu coupon $100 off for New customers There are a number of discounts and deals shoppers can take advantage of with the Teemu Coupon Bundle [acs615756]. Temu coupon $100 off for New customers""acs615756"" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. You can think of it as a supercharged savings pack for all your shopping needs Temu coupon code 80% off – [acs615756] Free Temu codes 50% off – [acu600079] Temu coupon $100 off – [acs615756] Temu buy to get £39 – [acs615756] Temu 129 coupon bundle – [acs615756] Temu buy 3 to get $99 – [acs615756] Exclusive $100 Off Temu Discount Code Temu $100 Off Coupon Code : (acs615756) Temu Discount Code $100 Bundle :(acs615756) Free Gift On Temu : (acs615756) Temu $100 off coupon code for Exsting users : (acs615756) Temu coupon code $100 off Temu 90% OFF promo code ""acs615756"" will save you $100 on your order. To get a discount, click on the item to purchase and enter the code. Yes, Temu offers $100 off coupon code “acs615756” for first time users. You can get a $100 bonus plus 30% off any purchase at Temu with the $100 Coupon Bundle at Temu if you sign up with the referral code [acs615756] and make a first purchase of $100 or more. Temu coupon code 100 off-{acs615756} Temu coupon code -{acs615756} Temu coupon code $100 off-{acs615756} kubonus code -{acs615756}"
    
    Last updated: 2024-10-26
    
    
      
        Post by imdatatas on MC_CamIn did not work properly with SMC_FreeEncoder on SoftMotion 4.17.0.0
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hello, I am facing a problem with the new Softmotion 4.17.0.0 version. Has anyone encountered a similar problem, what is the solution? I would be happy if you could share it. Problem description: -- "SMC_FreeEncoder" encoder axis is the master, -- The motor of the servo driver on the EtherCAT bus is the slave axis. -- When the MC_CamIn block executed, the InSync output is activated. However, although the master encoder axis position value changes, there is no movement in the slave servo axis! Test steps: 1-) EtherCAT servo axis installed, configured and motion test was performed with MC_Jog. No problem. 2-) Softmotion general axis pool > SMC_FreeEncoder was added and pulse amount configuration was performed. No problem. 3-) Incremental encoder actual count value was transferred to the "SMC_FreeEncoder.diEncoderPosition" variable as DINT under the ethercat task in every cycle and the encoder axis position value was observed. No problem. 4-) A simple CAM table with a 1:1 ratio was created under the project tree. (For example: Simply, when the encoder rotates 1 turn, the motor will rotate 1 turn.) 5-) The SMC_FreeEncoder axis enabled with MC_Power and brought to the StandStill state. 6-) The MC_CamTableSelect block was run with default input values (all absolute) and only the Cam table name was specified. The Done output was seen successfully. No problem. 7-) The MC_CamIn block was activated with default input values (absolute) and only the master encoder axis name, slave servo axis name, CamTableID input pins was specified and then "Execute" input set to TRUE. 8-) The InSync output information of the MC_CamIn block observed as TRUE. However, although the encoder axis value changed, the position value of the slave axis did not change at all, it did not move. It always remained at 0.0mm. 9-) When I repeated the same steps above, only changing the master axis to SM_Drive_Virtual instead of FreeEncoder and gave movement to the virtual axis, this time the slave axis moved successfully. However, when the same steps and operations are performed with the same IDE just downgrade SoftMotion version from 4.17.0.0 to 4.10.0.0, everything works normally and without problems as expected in MC_CamIn block with FreeEncoder master. (By the way, The used IDE version is Codesys V3.5 SP20patch3.) Best Regards Imdat
    
    Last updated: 2024-11-11
    
    
      
        Post by struccc on Application failing to boot after system reboot
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      I started to experience the same issue, after upgrading to 3.5.19 , and still persists with 3.5.20.3 , using CodesysControlWinV3 x64 on Windows. Unfortunately, this is a live application, normally it is running for months without interruption - so it was a surprise at the last cold start... It was not possible to go online with the original version, so I couldn't see the application, or system status, just the log message. First time I manually clean the Application from the PlcLogic directory (there was no coredump file in there), then I could start the runtime service, and do a fresh download, and set the bootproject. I could not try a cold system reboot - it's in a 24/7 production environment, and I was under heavy pressure to start... What I did, I have created a backup from the * complete * runtime directory, from the failed, and fixed version - before and after download. This directory in my case C:\ProgramData\CODESYS\CODESYSControlWinV3x64\55096128 - At the next shutdown, it was sufficient to copy back this backup completely, and could start the runtime service afterwards. Ugly, but local staff with some skills can do it without programming tool... I don't store any live data, configuration, log files, persistent data in this directory - the only reason I need this is to edit the CodesysControl... .cfg file.... And to see the logfiles in emergencies like this. The application concerned doesn't use any retain area. - exactly for these reasons - Maybe that is causing the problem with the newer runtime versions As far as I see, this problem occurs only if the power of the Windows PLC is interrupted without a proper shutdown. Unfortunately, this can happen sometimes. The newer versions, seems tp modify CodesysControl.cfg on the fly, and register the applications, and bootproject information after download. (I don't really see CodesysControl.cfg a proper location for this... but that's just my feeling) So now I had a look at CodesysCotrol.cfg on my laptop and I found: [CmpRetain] ;Retain.SRAM.Size=0x200200 ;Retain.SRAM.Address=0xFA3C5776 ;SimulateSRAM=1 [CmpApp] ;Bootproject.CreateOnDownload=0 ;Bootproject.StoreOnlyOnDownload=0 ;Bootproject.InvalidateByRename=1 ;Bootproject.InvalidateBySetting=1 ;Bootproject.InvalidateNever=0 ;PersistentForce=0 ;RetainType.Applications=InSRAM ;RetainType.Applications=OnPowerfail ;RetainType.Applications=None ;Exception.Hardware.GlobalStop=1 Application.1=MyTestAppNoRetain The last line appeared after download and boot project creation. Maybe... Should set RetainType.Applications=None? I wonder about all these settings, but... Will write separately about it. I hope this helps a little...
    
    Last updated: 2024-11-21
    
    
      
        Post by jonasz on Device diagnosis ( EtherCAT IO card )
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hi, I'll link to the topic not wanting to start a new one. In the application I am building, I wanted to use the diagnostics described in the CAA Device Diagnosis library. In principle, everything is ok, except for the elements related to ModbusTCP. Despite the fact that ModbusTCP is taken into account in the documentation, it is not recognised via the interfaces. FUNCTION_BLOCK NET_HW_DIAG VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR (* Referencja do struktury z danymi dla HMI ASTRAADA.*) Visu: REFERENCE TO VISU; (* Wskaźnik na mastera EtherCAT.*) pEtherCATMaster : POINTER TO IoDrvEtherCAT; (* Wskaźnik na slave EtherCAT.*) pEtherCATSlave : POINTER TO EtcSlave; (* Interfejs dla węzła w drzewie urządzeń.*) _itfNode: DED.INode; (* Ogólny interfejs magistrali. Zapewnia podstawowe informacje o magistrali polowej.*) _itfBus: DED.IBus; (* Interfejs urządzenia. Zapewnia rozszerzone informacje o urządzeniu (magistralowym).*) _itfDevice2: DED.IDevice2; (* Ogólny interfejs magistrali. Zapewnia podstawowe informacje o magistrali polowej.*) _itfStack: DED.IStack; (* Numer węzła w drzewie urządzeń.*) uiNodes: UINT; (* Operator jest rozszerzeniem normy IEC 61131-3. W czasie wykonywania operator wykonuje konwersję typu odwołania do interfejsu na inny typ. Operator zwraca wynik BOOL. Wartość TRUE oznacza, że CODESYS pomyślnie wykonał konwersję. *) xQueryResultBus: BOOL; xQueryResultDevice2: BOOL; xQueryResultStack: BOOL; (* Struktura danych dotyczących węzłów w drzewie urządzeń.*) NetHwDiag: NW_HW_STAT; ModbusTcpClientDeviceInfo: IoDrvModbusTCP.DED.DEVICE_INFO; ModbusTcpClientDeviceState: IoDrvModbusTCP.DED.DEVICE_STATE; ModbusTcpDeviceInfo: IoDrvModbusTCP.DED.DEVICE_INFO; ModbusTcpDeviceState: IoDrvModbusTCP.DED.DEVICE_STATE; END_VAR (* Pobranie wskaźników dla pierwszego mastera i pierwszego slave w sieci EtherCAT.*) pEtherCATMaster := g_pFirstMaster; pEtherCATSlave := pEtherCATMaster^.FirstSlave; (* Diagnostyka sieci EtherCAT.*) pEtherCATMaster := g_pFirstMaster; pEtherCATSlave := pEtherCATMaster^.FirstSlave; NetHwDiag.xConfigFinished := pEtherCATMaster^.xConfigFinished; NetHwDiag.xDistributedClockInSync := pEtherCATMaster^.xDistributedClockInSync; NetHwDiag.xError := pEtherCATMaster^.xError; NetHwDiag.xSyncInWindow := pEtherCATMaster^.xSyncInWindow; NetHwDiag.sLastMessage := pEtherCATMaster^.LastMessage; NetHwDiag.LastError := pEtherCATMaster^.LastError; (* Diagnostyka drzewa urządzeń.*) uiNodes := 0; _itfNode := DED.GetRoot(); REPEAT NetHwDiag.asDeviceName[uiNodes] := DED.GetDeviceNameString(itfNode := _itfNode); xQueryResultBus := __QUERYINTERFACE(_itfNode,_itfBus); IF xQueryResultBus THEN _itfBus.GetBusInfo(buiInfo := NetHwDiag.aBusInfo[uiNodes]); NetHwDiag.aBusState[uiNodes] := _itfBus.GetBusState(); END_IF xQueryResultDevice2 := __QUERYINTERFACE(_itfNode,_itfDevice2); IF xQueryResultDevice2 THEN _itfDevice2.GetDeviceInfo(deiInfo := NetHwDiag.aDeviceInfo[uiNodes]); NetHwDiag.aDeviceState[uiNodes] := _itfDevice2.GetDeviceState(); IF pEtherCATSlave <>0 THEN pEtherCATSlave^(); IF pEtherCATSlave^.SlaveAddr = NetHwDiag.aDeviceInfo[uiNodes].idSystem THEN NetHwDiag.aAlStatus[uiNodes] := pEtherCATSlave^.ALStatus; pEtherCATSlave := pEtherCATSlave^.NextInstance; END_IF END_IF ELSE xQueryResultStack := __QUERYINTERFACE(_itfNode,_itfStack); IF xQueryResultStack THEN _itfStack.GetDeviceInfo(deiInfo := NetHwDiag.aDeviceInfo[uiNodes]); NetHwDiag.aDeviceState[uiNodes] := _itfStack.GetDeviceState(); END_IF END_IF uiNodes := uiNodes + 1; _itfNode := DED.GetNextNode(_itfNode); UNTIL _itfNode = 0 END_REPEAT (* Diagnostyka Modbus.*) Modbus_TCP_Client.GetDeviceInfo(deiInfo := ModbusTcpClientDeviceInfo); ModbusTcpClientDeviceState := Modbus_TCP_Client.GetDeviceState(); PAC_3200T.GetDeviceInfo(deiInfo := ModbusTcpDeviceInfo); ModbusTcpDeviceState := PAC_3200T.GetDeviceState(); Of course, you can take the easy way out and refer directly to the devices, but I wanted a reusable component. Any constructive help is very welcome Best regards Jonasz
    
    Last updated: 2025-07-15
    
    
      
        Post by jzhvymetal77 on IecVarAccessLibrary.IBaseTreeNode methon
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      I had this code working in a previous version of CoDeSys to read variables from a GVL that were added to the Symbol configuration. The problem now is that when I get the _IBaseTreeNode_Parent, it returns a valid interface, but none of the methods or properties work. If you monitor the _IBaseTreeNode in the watch window, it does show the correct child count. However, it fails at step 30, where the child count incorrectly returns zero. In the image, you can see that the watch window displays the correct value that the property should return. Attached is the full project code. FUNCTION_BLOCK Symbols_TO_STR VAR_INPUT i_sPath : STRING(255); i_diIndexChild : DINT; i_diIndexComponent : DINT; END_VAR VAR_OUTPUT q_diChildCount : DINT; q_diComponentCount : DINT; q_sName : STRING(255); q_sValue : STRING(255); q_sType : STRING(80); q_sErrorResult : STRING(80); END_VAR VAR uiStepCopy : UINT; uiStep : UINT; uiStepProcessCopy : UINT; uiStepProcess : UINT; _IBase : IecVarAccessLibrary.IBase; _pIIecVarAccess5 : POINTER TO IecVarAccessLibrary.IIecVarAccess5; _IIecVarAccess5 : IecVarAccessLibrary.IIecVarAccess5; _RTS_IEC_RESULT : IecVarAccessLibrary.RTS_IEC_RESULT; _udiResult : UDINT; _VariableInformationStruct : IecVarAccessLibrary.VariableInformationStruct; _IBaseTreeNode_Parent : IecVarAccessLibrary.IBaseTreeNode; _IBaseTreeNode_Child : IecVarAccessLibrary.IBaseTreeNode; _ITypeDesc_Child : IecVarAccessLibrary.ITypeDesc; _TypeDescAsUnion_Child : IecVarAccessLibrary.TypeDescAsUnion; _arIBaseTreeNode_Child : ARRAY[0..20] OF IecVarAccessLibrary.IBaseTreeNode; _TypeClass_Child : IecVarAccessLibrary.IBaseLibrary.TypeClass; _psSymbolName_Child : POINTER TO STRING; _sSymbolName_Child : STRING(255); _IBaseTreeNode_Component : REFERENCE TO IecVarAccessLibrary.IBaseTreeNode; _TypeClass_Component : IecVarAccessLibrary.IBaseLibrary.TypeClass; _ByteAddress_Component : __XWORD; _ByteOffset_Component : __XWORD; _sArrayIndexName_Component : STRING(20); _diArrayIndexCalc_Component : DINT; _diArrayIndexValue_Component: DINT; _psSymbolName_Component : POINTER TO STRING; _sSymbolName_Component : STRING(255); END_VAR uiStepCopy:=uiStep; uiStepProcessCopy:=uiStepProcess; CASE uiStep OF 10: // GET IBASE FROM CURRENT APP _IBase:= IecVarAccessLibrary.IecVarAccGetFirstInterface2(0); IF _IBase<>0 THEN uiStep:=20; ELSE q_sErrorResult:=CONCAT(UINT_TO_STRING(uiStep), ': IecVarAccGetFirstInterface2'); uiStep:=9000; END_IF 20: //QueryInterface IIecVarAccess5 from IBASE _pIIecVarAccess5 := _IBase.QueryInterface(IecVarAccessLibrary.ITFID_IIecVarAccess5, ADR(_RTS_IEC_RESULT)); IF _pIIecVarAccess5<>0 AND _RTS_IEC_RESULT=0 THEN _IIecVarAccess5 := _pIIecVarAccess5^; uiStep:=30; ELSE q_sErrorResult:=CONCAT(UINT_TO_STRING(uiStep), ': QueryInterface_IIecVarAccess5'); uiStep:=9000; END_IF 30: // Get IBaseTreeNode_Parent _IBaseTreeNode_Parent := _IIecVarAccess5.VarAccGetNode3(ADR(i_sPath), ADR(_VariableInformationStruct), ADR(_RTS_IEC_RESULT)); IF _IBaseTreeNode_Parent<>0 AND _RTS_IEC_RESULT=0 THEN q_diChildCount:=_IBaseTreeNode_Parent.ChildCount; uiStep:=40; ELSE q_sErrorResult:=CONCAT(UINT_TO_STRING(uiStep), ': IBaseTreeNode_Parent'); uiStep:=9000; END_IF 40: // Get IBaseTreeNod_Child IF(q_diChildCount-1>=i_diIndexChild AND i_diIndexChild >=0) THEN _IBaseTreeNode_Child := _IBaseTreeNode_Parent.GetChild(i_diIndexChild); IF _IBaseTreeNode_Child<>0 THEN uiStep:=50; ELSE q_sErrorResult:=CONCAT(UINT_TO_STRING(uiStep), ': IBaseTreeNode_Parent'); uiStep:=9000; END_IF ELSE q_sErrorResult:=CONCAT(UINT_TO_STRING(uiStep), ': i_diIndexChild OutBounds'); uiStep:=9000; END_IF
    
    Last updated: 2025-08-20
    
    
      
        Post by ofey on EtherCAT fieldbus 
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hi, everyone! I'm trying to set up a PLC controller and a connection to an EtherCAT slave device in Codesys. I want to create a flexible program that I can upload to multiple controllers with different remote IO connected (same program). On one plant i may have 5 AI-cards and 3 DO-cards, and on another I may have 4 AI-cards and 2 DO-cards. For not needing to maintain several different programs wih different devices defined in the program (one for each set up) I thought that using a remote IO would make it easier having a single program. That way I could refer to different memory addresses instead of predefined slots/channels and IO's, that would give me errors if there was a different IO on the plant than what the program expected. When I tried setting up the etherCAT master, I saw that I had to define the etherCAT slave devices with the different IO'cards for me to be able to refer to the memory addresses in a PRG. Exactly what I was trying to avoid. My setup is something like a program that can handle 16 separate pump controls. In a year maybe 6 plans get deployed, and depending on how large the project is, the number of pumps can vary between 4 and 16. And the managers dont want to have IO's for all 16 pumps on every cabinet, and I dont want to maintain 16 separate projects files in case of updates etc. I thought the best way to tackle this was having a single project that read/write data to the different pump IO's by remote IO (fieldbus ethercat) addresses. And the number of pump controls are activated by an external GUI. If pump 1-6 is activated by the GUI, then the PLC-program tries to read/write input/outputs from predefined addresses for the expected IO's. My test setup is a PFC200 WAGO controller and a EtherCAT fieldbus coupler (750-354) with some IO. I hope I didn't explain this too horrible, and if there is a more easy and elegant solution for this challenge I appreciate a feedback on this.
    
    Last updated: 2024-04-08
    
    
      
        Post by shooxplc on How to call the same program from library and get the vars updated.
    
    
       CODESYS Forge
    
    
      talk
    
    (Post)
    
    
      Hi, I am writing to you today because I would like to create a library that would contain a program with its various subprograms, in my example "PLC_PRG" with "a", "aa", "aaa". But once the library is created as shown below: I would like to be able to drag and drop my folder as many times as I want (let's say I manage the same system multiple times). Once the drag and drop is done, we can see the second folder with the variables renamed successfully. As shown below: But my variables in CAD_1 remain the same as for CAD, so it's PLC_PRG instead of PLC_PRG_1, for example. Is there a solution to automate this? I wouldn't want to have to rename all my variables manually, considering that in the program where I want to do this, the number of variables is substantial. Lucas.
    
    Last updated: 2023-08-23
    
To search for an exact phrase, put it in quotes.  Example: "getting started docs"
To exclude a word or phrase, put a dash in front of it.  Example: docs -help
To search on specific fields, use these field names instead of a general text search.  You can group with AND or OR.