Post by gatto on Two licenses have to be installed forgot to enable one license
CODESYS Forge
talk
(Post)
Hi. What type of PLC do you have? What activation method do you use? What license ticket did you purchase and want to activate? Can you describe the process you followed step by step?
Last updated: 2026-02-02
Post by yoeri on Python script: Launch Codesys, Execute Script, Exit Codesys
CODESYS Forge
talk
(Post)
For whoever finds this old thread. Instead of System.exit(0), use system.exit(0) without capital 'S', this worked for me. I use these imports from future import print_function import sys import os
Last updated: 2026-02-12
Post by risele on AI + Programming
CODESYS Forge
talk
(Post)
It's already fine to use, with help of exporting/importing as PLC_Open, at least CODEX is good in editing directly at XML and/or providing changes description separately.
Last updated: 2026-02-13
Post by pernockham on Unable to deploy "Control for Linux SL 4.18.0.0"
CODESYS Forge
talk
(Post)
Downloaded and installed edge gateway 4.19.0.0. Unfortunately same behavior: "Control for Linux SL" NOT shown in drop lists on either "Deployment" Tab of tool "Deploy Control SL", or as "installed packages" on "Operation" tab (only "CODESYS Edge Gateway for linux" is shown).
Last updated: 2026-02-16
Post by pernockham on Unable to deploy "Control for Linux SL 4.18.0.0"
CODESYS Forge
talk
(Post)
Am I alone in this? Is this a known fault? Should I look for the reason of the lacking update option for "Control for linux SL" in my system or is it a potential fault in the codesys system?
Last updated: 2026-02-17
Post by pernockham on Gateway in China - "Gateway not connected"
CODESYS Forge
talk
(Post)
Finally sorted (unit in China). The problem was related to dns-setting of the gateway/host. Connection (also inside china) tested/works.
Last updated: 2026-03-18
Post by reinier-geers on CODESYS crashes when adding standard OPC UA Information Model to Communication Manager
CODESYS Forge
talk
(Post)
I only experiance a lot of problems with Version 20 and 21. Version 20 crashes at a online change Version 21 - 5 identical programms in one project. The frist runs. The thirt Crashes. NOt even a screen
Last updated: 2026-03-19
Post by egr99 on Modbus TCP Server connection is ESTABLISHED but all holding registers are value 0?
CODESYS Forge
talk
(Post)
Hi there, Read the above description and experienced the same: Reading coil/discrete input/input register/holding register doesn't fill the mapped I/O variable. Any suggestions? Defined (see attachment): - Ethernet (with parameters according to the used Ethernet adapter of my Windows 11 laptop) - -Modbus TCP Client - - -LOGO231 as Modbus TCP Server - - -WS242 as Modbus TCP Server (WaveShare Modbus TCP <-> RTU converter) - - - -WS242_01 as Modbus Server, COM port (slave-id 1 RTU) - - - -WS242_03 idem (slave-id 3 RTU) - - - -WS242_11 idem (slave-id 11 RTU) Writing coil/holding register works from a mapped I/O variable works fine. Verification of Modbus traffic with WireShark: QUERY to and the RESPONSE of all slave-ids are correct Status of all defined is CONNECTED, RESPONSE_SUCCESS, RUNNING etc. Request counters increase with expected frequency. Error counter = 0. (To have all counters works fine I had to change Modbus TCP Client's parameter OptimizationON to FALSE). LOGO231 works fine: values in mapped I/O conform expectation WS242 without Modbus Server, COM port and with defined channels (for only 1 slave-id possible) works fine. PLC Settings: Update I/O while in stop: I see xBusy changing from FALSE to TRUE and vice versa. Always update variables: Enabled 1
Last updated: 2026-04-05
Post by reinier-geers on Resize and position Numpad/Keypad
CODESYS Forge
talk
(Post)
HI, I download the scale dialog. But cant find were i can Set the size of the dialogs. only the position. I want the diolog bigger
Last updated: 2026-04-15
Post by skiper on Best practice to reduce CPU load
CODESYS Forge
talk
(Post)
Hi ! I can't say exactly the best practice you can use to reduce your cpu load but you can use the codesys exemple. https://www.codesys.com/products/visualization/#c3876 Go to the midle of the page and you have a link to download an exemple.
Last updated: 2026-04-21
Post by patrik on Wish: CODESYSControl.cfg - again
CODESYS Forge
talk
(Post)
Really good post. I hope that it gets seen by CoDeSys staff. I often find the documentation lacking when it comes to using CoDeSys in more complex ways. If using standard "basic PLC functionality", then it's fine and functions are documented in a sufficient way. Once you go outside of that bubble then I find the documentation not enough. CODESYSControl.cfg is a good example of this. And why isn't more of this integrated in the IDE. like changing port of the webserver. Why is it hidden in this file and not accessible through the IDE. It feels like a layer of complexity purposely left in so you don't change it if you don't know what you are doing. Like the argument is if you have the know-how to find the file you have the know-how to edit it. I find the documentation lacking when it comes to more complex libraries too. Like the element collections library. there is parameters I still don't quite know what they do. I can't find any documentation about them. There is an example project to download from CoDeSys so you can see how you are supposed to set your factories up. I leave some parameters like it is in the example. Should I? I don't know. Does it work. Yes. But I could perhaps create memory leaks if I get something wrong and I don't see that until way later. In the create method of your element factory you have a function called __vfinit and you just have to accept that it works. Why can't I get insight in what it does through documentation? Don't CoDeSys want us to know how these work so we can't use them to accidentally break something? I find the error logging lacking too. I've had the CoDeSys service crash but it doesn't say why. I've seen windows noticing the crash but no error code was sent or error message. Also in my current issue where the application fails to start after power outage. I can see in the log that it fails to load retain in the application as one log entry and application failing to start as another. But why? Why does loading the retain fail? give me more information! Is it just a skill issue with me? I don't know. If it is then I'd still want CoDeSys to step up their game when it comes to documentation. I'm sorry if a lot of frustration comes though in this post. I really like the product and what I can do with it compared to other PLC brands.
Last updated: 2024-11-21
Post by gmau on Station 'xyz': AR aborted by device (alarm.ind): AR consumer DHT expired
CODESYS Forge
talk
(Post)
Hello, I am writing to You with the problem of Profinet communication in my Codesys V2.5 SP21 project working on Codesys Control RTE V3 x64 device. I have implemented multiple Profinet devices in the network, the Profinet itself is configured properly, based on the hardware and software parameters of the industrial PC (Windows 10 IoT). My Profinet network contains such Profinet devices as a robot, IO-Link master with some devices on it, IO modules, safety, vision sensor (the configuration is attached to this topic). Once every few hours, sometimes more often, sometimes not even once a day, the error show up at one, two or a few random modules at the same time, every one is the same: "Station 'xyz': AR aborted by device (alarm.ind): AR consumer DHT expired". The communication is then lost with that module, but it is up instantly. It is not such a problem when it comes to regular IOs, but with safety or rotation table, it causes errors and machine stops. I have tried multiple solution based on any forum suggestions, manuals, etc., but it is still happening. Mabye when I turned on the Watchdog for this communication, it is happening less times, but still, I could not turning up the Watchdog parameters at the expense of cycle time of the process. The same is with Send Clock, Reduction and DHT. I have one of the ethernet port on the PC configured with CmpEt1000Drv driver. The card itself is Intel Ethernet Connection I219-LM. These devices are connected to one EKI-2728-NI-A Profinet switch (it was changed from the standard non Profinet one, but still nothing has changed). As I said ealier, I am attaching all the configurations for each device and the communication itself - if any of You had the same problems or have any ideas what could be the cause, I would be much gratefull for any help. For now I am out of ideas, if You have any additional question, please ask. Sincerely, PF
Last updated: 2025-09-04
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 ryusoup on JSONByteArrayWriter problem?
CODESYS Forge
talk
(Post)
Hello, I am trying to implement a FB to make JSON formatted WSTRING type message using JSON Utilities 1.9.0.0 included in the IIoT library. In my case, I want to set some objects or arrays and set values to them later. But when I wrote as the sample below, // init builder builder(pJsonData:=pJsonData, diRootObj=>diRootObj); // set the 1st key to root diKey1 := builder.SetKeyWithArray(wsKey:="key1", diParentIndex:=diRootObj, eError=>eError); // set a value to the 1st key wsValue:="value01"; builder.SetValue(Value:=wsValue, diParentIndex:=diKey1, eError=>eError); // set the 2nd key to root diKey2 := builder.SetKeyWithArray(wsKey:="key2", diParentIndex:=diRootObj, eError=>eError); // set a value to the 2nd key wsValue:="value02"; builder.SetValue(Value:=wsValue, diParentIndex:=diKey2, eError=>eError); // set a value to the 1st key again wsValue:="value03"; builder.SetValue(Value:=wsValue, diParentIndex:=diKey1, eError=>eError); // set a value to the 2nd key again wsValue:="value04"; builder.SetValue(Value:=wsValue, diParentIndex:=diKey2, eError=>eError); // write build result writer(xExecute:=TRUE, pwData:=ADR(wsResult), udiSize:=SIZEOF(wsResult), xAsyncMode:=FALSE, jsonData:=pJsonData^); the result was: { "key1": ["value01"], "key2": ["value02", "value03", "value04"] } while my expection was: { "key1": ["value01", "value03"], "key2": ["value02", "value04"] } Inspecting pJsonData^, JSONData itself seems to be ok, so I believe the issue is something caused by the writer FB. Does anyone know how to fix it? Thanks,
Last updated: 2023-10-04
Post by andrax on CodeSys Raspberry pi I2C driver not found
CODESYS Forge
talk
(Post)
Hi, Communication with the ADS1115 is actually simple. 1. write config 2. write address pointer 3. read conversation register The ADS1115 works like a multiplexer. This means that you do this individually for each channel that you want to read. e.g: Channel 1: write config > write address pointer > read conversation register Channel 2: write config > write address pointer > read conversation register Channel 3: write config > write address pointer > read conversation register Channel 4: write config > write address pointer > read conversation register then you start again from the beginning You can also omit individual channels or read only one. It doesn't matter. I have written the driver so that I can also use it on the TCA9548. The driver is from Stefan Dreyer. In your case, the driver works and communication with the ADS1115 is running. As you can see, the cfgWrong:=FALSE If you could not write or read data, cfgWrong:=TRUE; This means that either something is wrong with your ADS1115 or you have connected something incorrectly. Question: what voltage do you want to measure?
Last updated: 2024-11-08
Post by struccc on Bibliothek: floatingpointutils
CODESYS Forge
talk
(Post)
The issue s the byte order typically in this case. Can be especially problematic with floating point numbers - even more tricky if transferred with a word based protocol. It is a peasant way to try out the alternatives, dword order can be a-b-c-d, b-a-d-c, c-d-a-b, d-c-b-a where a is the most significant, d is the least significant byte. So all you need is to swap the bytes in your dword, until you get the expected result. If you don't want to mess writing code for this, I'd recommend CAA_Memory library for that: MEM.ReverseBYTEsInDWORD and MEM.ReverseWORDsInDWORD functions would definitively do the trick. Otherwise, can do like this: VAR dwIn : DWORD := 16#11223344; dwOut : DWORD; rOut : REAL; pIN : POINTER TO BYTE; pOUT : POINTER TO BYTE; END_VAR pIN := ADR(dwIn); //pOUt := ADR(dwOut); pOUt := ADR(rOut); pOut[0] := pIN[3]; pOut[1] := pIN[2]; pOut[2] := pIN[1]; pOut[3] := pIN[0]; Ugly, but does the job...
Last updated: 2024-11-19
Post by dom4u on Using PEAK CAN PCIe card (IPEH-004040) with Codesys Control RTE V3
CODESYS Forge
talk
(Post)
Some findings on this issue: PEAK CAN Driver is the same as in every PCI card from PEAK. I updated the inf file. Here are my steps: 1. Include right VendorID into the *.inf file 2. Disable Windows driver check (Disable WHQL check). This you need because 3S driver is not certified. You will find steps via google or ask chatgpt :) 3. Select: Select driver from a list and navigate to the folder. Say yes to install an uncertified driver. 4. Driver installed and device without errors I did the same with CAN Card from ESD, but here you dont need to include the vendor ID. In ANY CASE it was not successful. The RTIOwdmgeneric is not available in Codesys or anyhow accassable :( I wonder that it fails in two cases, two suppliers, two driver in the same way. How can RTIOwdmgeneric implemented into the project?
Last updated: 2024-12-20
Post by ojz0r on Assignment Efficiency - Repetitive Assignment vs IF statement
CODESYS Forge
talk
(Post)
Its important that you know the difference between the two. Example 1: Coils[0] := Coils[0] OR (Buttons[0] AND Sensors[0] > 6); In this case the statements will be evaluated every scan and result in either true or false for Coils[0]. Example 2: IF NOT Coils[0] AND Buttons[0] AND (Sensors[0] > 6) THEN Coils[0] := TRUE; END_IF In this example Coils[0] will latch the result in a true evaluation, if you want it to behave the same way as example 1 then you need to do it like example 3 below: IF NOT Coils[0] AND Buttons[0] AND (Sensors[0] > 6) THEN Coils[0] := TRUE; ELSE Coils[0] := FALSE; END_IF However back to the real question. There is no problem using either example 1 or example 3, if im not requiring a latch i usually go with example 1 as it is more compact.
Last updated: 2025-03-07
Post by r-c-r on SM3RaspiStepper 0.0.0.6 issue
CODESYS Forge
talk
(Post)
Ok, so i made some tests in the meantime and i have some conclusions. It apears that the enable bit is activated only when a motion function is executed. I implemented a very simple program with MC_Power and MC_Jog. If i enable everything on MC_Power, the enable GPIO pin stays off. However, as soon as the MC_Jog function is used the enable GPIO pin turns ON and remains ON. In version 0.0.0.4 this is not happening. The GPIO enable pin turns on or off when the MC_Power is enabled or disabled. From this behaviour i understand that in version 0.0.0.6 the GPIO enable bit is activated together with pulse and dir pins when motion starts. When motion stops, enable bit remains with the last state (on in this case) and you cannot turn it off for example. For me this bit is useful because i can turn on and off the stepper drive with MC_Power function. Now i can turn it on, but never off.
Last updated: 2025-04-04
Post by markushunter on Different behavior between the "Start" button in the IDE and the Cmp function "AppStartApplication()"
CODESYS Forge
talk
(Post)
In our application with CODESYS V3.5 SP19 Patch 5 and the Soft-PLC Name: CODESYS Control Win V3 x64 Typ: 4096 ID: 0000 0004 Version: 3.5.19.50 the application behaves differently when we start the application via Cmp.AppStartApplication(pApp) than when we press the "Start" button in online mode in the IDE. Unfortunately, it looks like the AppStartApplication() function, which is called in the "StopDone" system event, is not able to restart the fieldbus driver correctly, in our case the EtherNet_IP_Scanner: Name: EtherNet/IP Scanner Hersteller: 3S - Smart Software Solutions GmbH Kategorien: EtherNet/IP Scanner Typ: 100 ID: 0000 100B Version: 4.5.1.0 Bestellnummer: 1 And one EtherNet/IP adapter Name: FANUC Robot R30iB Plus Hersteller: FANUC Robotics America Kategorien: EtherNet/IP Remote Adapter Typ: 101 ID: 356_12_4_3 Version: Major Revision=16#3, Minor Revision = 16#1 Beschreibung: EtherNet/IP Target imported from EDS File: fanucrobot0301_r30ibp.eds Device: FANUC Robot R30iB Plus Version Konfiguration 3.5.6.0 The application was cold reset in both cases via CmpApp.AppReset(pApp := pApp, usResetOption := CmpApp.RTS_RESET_COLD. Does anyone know the difference between the functions or services executed by the "START" button in online mode and Cmp.AppStartApplication()? Thanks and best regards, markushunter
Last updated: 2024-03-20
Post by markushunter on Different behavior between the "Start" button in the IDE and the Cmp function "AppStartApplication()"
CODESYS Forge
talk
(Post)
In our application with CODESYS V3.5 SP19 Patch 5 and the Soft-PLC Name: CODESYS Control Win V3 x64 Typ: 4096 ID: 0000 0004 Version: 3.5.19.50 the application behaves differently when we start the application via CmpApp.AppStartApplication(pApp) than when we press the "Start" button in online mode in the IDE. Unfortunately, it looks like the AppStartApplication() function, which is called in the "StopDone" system event, is not able to restart the fieldbus driver correctly, in our case the EtherNet_IP_Scanner: Name: EtherNet/IP Scanner Hersteller: 3S - Smart Software Solutions GmbH Kategorien: EtherNet/IP Scanner Typ: 100 ID: 0000 100B Version: 4.5.1.0 Bestellnummer: 1 And one EtherNet/IP adapter Name: FANUC Robot R30iB Plus Hersteller: FANUC Robotics America Kategorien: EtherNet/IP Remote Adapter Typ: 101 ID: 356_12_4_3 Version: Major Revision=16#3, Minor Revision = 16#1 Beschreibung: EtherNet/IP Target imported from EDS File: fanucrobot0301_r30ibp.eds Device: FANUC Robot R30iB Plus Version Konfiguration 3.5.6.0 The application was cold reset in both cases via CmpApp.AppReset(pApp := pApp, usResetOption := CmpApp.RTS_RESET_COLD. Does anyone know the difference between the functions or services executed by the "START" button in online mode and Cmp.AppStartApplication()? Thanks and best regards, markushunter
Last updated: 2024-03-20
Post by markushunter on Different behavior between the "Start" button in the IDE and the Cmp function "AppStartApplication()"
CODESYS Forge
talk
(Post)
In our application with CODESYS V3.5 SP19 Patch 5 and the Soft-PLC Name: CODESYS Control Win V3 x64 Typ: 4096 ID: 0000 0004 Version: 3.5.19.50 the application behaves differently when we start the application via Cmp.AppStartApplication(pApp) than when we press the "Start" button in online mode in the IDE. Unfortunately, it looks like the AppStartApplication() function, which is called in the "StopDone" system event, is not able to restart the fieldbus driver correctly, in our case the EtherNet_IP_Scanner: Name: EtherNet/IP Scanner Hersteller: 3S - Smart Software Solutions GmbH Kategorien: EtherNet/IP Scanner Typ: 100 ID: 0000 100B Version: 4.5.1.0 Bestellnummer: 1 And one EtherNet/IP adapter Name: FANUC Robot R30iB Plus Hersteller: FANUC Robotics America Kategorien: EtherNet/IP Remote Adapter Typ: 101 ID: 356_12_4_3 Version: Major Revision=16#3, Minor Revision = 16#1 Beschreibung: EtherNet/IP Target imported from EDS File: fanucrobot0301_r30ibp.eds Device: FANUC Robot R30iB Plus Version Konfiguration 3.5.6.0 The application was cold reset in both cases via CmpApp.AppReset(pApp := pApp, usResetOption := CmpApp.RTS_RESET_COLD. Does anyone know the difference between the functions or services executed by the "START" button in online mode and Cmp.AppStartApplication()? Thanks and best regards, markushunter
Last updated: 2024-03-20
Post by sushela on Latest Temu Coupon Codes [acq615756] All Users
CODESYS Forge
talk
(Post)
Latest Temu Coupon Codes [acq615756] | All Users If you’re an avid Temu shopper or new to the platform, you’re in for a treat. Temu offers incredible savings with their latest coupon codes, and one of the hottest deals right now is the $100 off discount using the code [acq615756]. Whether you're placing your first order or are an existing customer, this coupon code is designed to offer fantastic value. In this article, we will explore all the benefits of using the Temu Coupon Code [acq615756], breaking it down into different categories to ensure you get the most out of this amazing offer. TEMU Coupon $100 Off for Existing Customers {[acq615756]} Existing customers on Temu can now enjoy a massive discount of $100 off their purchases. If you’ve been shopping on the platform for a while and are looking for a great deal, the [acq615756] code is perfect for you. It's rare to find such generous discounts for repeat customers, making this offer one not to miss. Apply the code at checkout and enjoy significant savings on your next order. TEMU Coupon $100 Off First Order {[acq615756]} If you’re new to Temu, there's an even better reason to start shopping now. By using the [acq615756] code, new users can save $100 on their very first order. This is an ideal way to explore the platform’s wide range of products without breaking the bank. Simply enter the code during your first purchase to redeem the discount. TEMU Coupon $100 Off Code {[acq615756]} The [acq615756] code is one of the most versatile coupon codes available. Whether you’re an existing user or a first-timer, this $100 off coupon can be applied to a broad range of products across the Temu platform. Just enter the code at checkout, and enjoy instant savings on your total. TEMU Coupon $100 Off for Existing Customers UK {[acq615756]} For our shoppers in the UK, the [acq615756] coupon code is a fantastic opportunity to save £100 off your next order. Existing customers can make the most of this discount when shopping from the UK. Whether you’re buying clothing, electronics, or household items, use the code at checkout to enjoy the discount and elevate your shopping experience. TEMU Coupon $100 Off New User {[acq615756]} New users on Temu have a golden opportunity to save big on their very first order with the [acq615756] coupon code. If you're hesitant to make your first purchase, this $100 off deal is a compelling reason to start now. With this code, you can buy more products at a reduced price, making your first shopping experience more rewarding. TEMU Coupon $100 Off for Existing Customers 2024 {[acq615756]} Looking for a way to save in 2024 as an existing customer? The [acq615756] code is here to help. This coupon provides an easy way for repeat shoppers to save $100 on any purchase. Make sure to take advantage of this deal throughout the year and enjoy continuous savings while shopping for your favorite products. TEMU Coupon $100 Off Code UAE {[acq615756]} Shoppers in the UAE can also benefit from the [acq615756] coupon code. Whether you are a new or existing customer, this $100 discount is applicable on your purchases. Be sure to apply the code during checkout and enjoy lower prices on a wide range of items available on Temu. TEMU Coupon $100 Off First Order Free Shipping {[acq615756]} In addition to saving $100 on your first order, Temu sweetens the deal by offering free shipping. Use the [acq615756] code when you make your first purchase and enjoy not only significant savings but also free delivery. It’s the perfect way to start shopping on Temu without any hidden costs. TEMU Coupon $100 Off for Existing Customers Free Shipping USA {[acq615756]} For our shoppers in the USA, the [acq615756] code offers an incredible $100 off your purchase, plus free shipping. Existing customers can benefit from this offer to save even more. Enjoy the convenience of home delivery without the extra cost, making your shopping experience smoother and more affordable. TEMU Coupon Code $100 Off + Free Shipping {[acq615756]} This coupon code [acq615756] is more than just a discount; it’s an all-in-one deal. With $100 off and free shipping combined, you can shop to your heart's content without worrying about shipping fees. This offer applies to all users, both new and returning, ensuring that everyone can enjoy amazing savings. TEMU Coupon $100 Off for Existing Customers Canada {[acq615756]} Canadian customers aren’t left out! Existing shoppers in Canada can use the [acq615756] coupon code to get $100 off their order. Temu continues to expand its presence, and this discount ensures that loyal customers in Canada can shop at discounted rates while enjoying a vast array of products. Conclusion The Temu Coupon Code [acq615756] is an exceptional opportunity for all users, offering $100 off across multiple regions, from the UK to the UAE, USA, and Canada. Whether you’re a new customer or have been shopping with Temu for a while, this code provides incredible value, ensuring that you save big on your next purchase. Don’t miss out on the added benefit of free shipping, and make sure to apply this code at checkout to maximize your savings. Start shopping now and take advantage of these amazing offers before they expire!a
Last updated: 2024-10-26
Post by mondinmr on Frustration-Fueled Feedback on Project File Management and Git Integration
CODESYS Forge
talk
(Post)
Good day, I’m writing this message out of frustration regarding the current way project files are saved as encrypted XML and single-file format in CODESYS. I find this approach to be quite tedious for several reasons: Limited Access to Structured Text: Not being able to access Structured Text (ST) externally makes it impossible to work with alternative editors like VSCode. Tools like VSCode are incredibly responsive and feature advanced systems such as GitHub Copilot, which would be a real game-changer when working with ST IEC. While CODESYS works well for small code snippets or debugging, when the codebase grows, switching to VSCode to boost productivity becomes essential, and copy-pasting between environments is a cumbersome workaround. Poor Integration with Git: This file format also makes it very difficult to integrate effectively with Git. I have tested the internal demo, but for advanced merges, it is unusable. Without properly formatted plain text, it’s impossible to leverage the vast ecosystem of external tools around Git that allow smooth merges in heterogeneous teams. File Corruption on Network Drives: I often work from multiple locations with shared network drives. When the development environment saves a file and something goes wrong midway (which can occasionally happen when using VPNs and network drives), the entire project becomes irrecoverable. There’s no way to cancel the save process, and the development environment freezes. This has happened to me at least four times over the past two weeks, and one of those incidents cost me an entire day of work. All of this is particularly disappointing because I truly believe that the libraries, runtime, and overall work done by CODESYS are exceptional. I find it fantastic that there is a platform allowing development of PLCs and control systems using OOP, which is a huge advantage in modern control engineering. I apologize for the rant, but this issue has been extremely frustrating. Best regards.
Last updated: 2024-10-15
Post by mondinmr on Frustration-Fueled Feedback on Project File Management and Git Integration
CODESYS Forge
talk
(Post)
In reality, other vendors are already moving towards integration with VS Code. B&R, for example, is likely the only one that could truly challenge Codesys in the market: they’ve overhauled their once-archaic environment (previously lacking ST OOP) and are now catching up significantly with Automation Studio Code, offering modern programming capabilities and native support for tools like Git and GitHub Copilot. The other big names in the market, frankly, are still light years behind. For smaller projects, typically handled by “wire strippers” (with all due respect!), a classic environment might be just fine. But once you’re dealing with thousands or even millions of lines of code—possibly organized in an OOP paradigm, spanning large teams, integrating third-party libraries, requiring version control, and performing comprehensive tests—a lightweight, responsive editor supercharged with AI-based features becomes essential. The real strength of something like VS Code lies in its vast ecosystem of extensions and integrations: from advanced Git support to automated build/test pipelines, and even AI-assisted autocompletion that already makes software development much more agile and productive. I understand that a PLC project involves more than just ST code (task setup, fieldbus configuration, libraries, etc.). However, there’s no technical reason not to at least provide ST files in a pure text format, making version control and collaboration far easier. B&R has clearly adopted this approach; I hope Codesys will accelerate its own efforts to offer a native, text-based integration and modern development tooling. Once you go beyond a certain level of complexity—dozens of configurations, OOP hierarchies, and distributed teams—you really do need “engineer-level” software tools, not just solutions targeting “wire strippers.” For large-scale automation projects, a more open and flexible approach is the only way to avoid chronic frustration. Let me emphasize that I truly love Codesys and consider the work done so far to be brilliant—I’d be sorry to see it overshadowed by others moving faster in this direction.
Last updated: 2025-02-18
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.