Post by scrollman on Attribute FB for comment
CODESYS Forge
talk
(Post)
Hello, I can use {attribute 'reflection'} FUNCTION_BLOCK POU VAR {attribute 'instance-path'} {attribute 'noinit'} str: STRING; END_VAR to get name of FB. How I can get the comment of FB, in the same way in the FB? Thank you for your time!
Last updated: 2025-12-31
Post by timvh on High resolution displays with 150% scaling causes CodeSys IDE to be blurry
CODESYS Forge
talk
(Post)
Instead of using scaling of 150%, can't you adjust your diplay resolution (Windows+i keys, then go to System > Display settings)?
Last updated: 2026-01-07
Post by sb879 on Non-formal invocation of function blocks in CODESYS
CODESYS Forge
talk
(Post)
Is it possible to do non-formal invocation of function blocks in CODESYS? I get an error when I try, see the attached pic. Also attached a pic from IEC 61131-3 describing non-formal invocations.
Last updated: 2025-12-04
Post by sb879 on Non-formal invocation of function blocks in CODESYS
CODESYS Forge
talk
(Post)
Is it possible to do non-formal invocation of function blocks in CODESYS? I get an error when I try, see the attached pic. Also attached a pic from IEC 61131-3 describing non-formal invocations.
Last updated: 2025-12-04
Post by eschwellinger on The element of type 'VisuFbElemImage' could not be updated. Reason: Index was outside the bounds of the array.
CODESYS Forge
talk
(Post)
check with the CODESYS Installer er if you are on latest Visuversion. 4.9.1.0
Last updated: 2026-01-27
Post by mondinmr on COL.IMap2 and HashTableFactory cause frequent Access Violation
CODESYS Forge
talk
(Post)
Good morning, I’ve been using the Collection library for a long time, mostly with Stack, LinkedList, and List. From your examples I was able to manage the different factories, even for custom elements. Now I need a hashtable, but with this object I’m running into a lot of random access violations. If I append something inside FB_Init after constructing the hashtable, it crashes, even though the list was already created. If I only create the hashtable in FB_Init and append afterwards, it usually works. I don’t understand the meaning of the dispose call in this code: pSlave := ADR(slave); uSlave := TO_ULINT(pSlave); iKey := fKey.Create(uSlave); IF hash.CountKeys() = 0 THEN Service.logger.appendLog('Filling hashtable', 'HashManager', AdvLogType.AdvDebugMsg); ok := FALSE; ELSE eError := hash.ContainsKey(iKey, xResult => ok); END_IF IF NOT ok THEN pI := __NEW(UINT); iVal := fKey.Create(TO_ULINT(pI)); Service.logger.appendLog(CONCAT('New slave', TO_STRING(uSlave)), 'HashManager', AdvLogType.AdvDebugMsg); hash.AddKeyValuePair(iKey, iVal); appendNewSlave := pI; ELSE eError := hash.GetElementByKey(iKey, itfValue => iElem); xResult := __QUERYINTERFACE(iKey, itfIInstance); IF xResult THEN itfIInstance.Dispose(); END_IF IF eError <> COL.COLLECTION_ERROR.NO_ERROR THEN Service.logger.appendLog(CONCAT('ERROR ', TO_STRING(eError)), 'HashManager', AdvLogType.AdvCriticalMsg); appendNewSlave := nullptr; RETURN; END_IF __QUERYINTERFACE(iElem, iVal); {warning disable C0033} pI := TO___UXINT(iVal.UlintValue); {warning restore C0033} appendNewSlave := pI; END_IF Without the dispose call, every second cold reset crashes immediately when I try to access iVal, even if eError doesn’t report any error. With the dispose call, the cold reset issue disappears, but I get other problems: a) If I start the runtime using systemctl start codesyscontrol, it crashes at IF hash.CountKeys() = 0 THEN b) If I delete the files in PlcLogic and download again, it works and survives multiple cold resets. But as soon as I run systemctl restart codesyscontrol, everything gets corrupted again and it starts crashing at that point. FUNCTION_BLOCK SlaveMapCounter VAR hash : COL.IMap2; eError : COL.COLLECTION_ERROR; END_VAR In its FB_Init I create it: METHOD FB_Init: BOOL VAR_INPUT bInitRetains: BOOL; // TRUE: retain variables are initialized (reset warm / reset cold) bInCopyCode: BOOL; // TRUE: the instance will be copied to the copy code afterward (online change) END_VAR VAR hF : COL.HashTableFactory; END_VAR hash := hF.Create(256); In another FB I instantiate it statically: FUNCTION_BLOCK ABSTRACT AbstractServoEthercatController EXTENDS AbstractServoController VAR_STAT hashSlaves : SlaveMapCounter; END_VAR VAR field : REFERENCE TO ADVAbstractFieldUnitEthercatCia402; initCnt : REFERENCE TO UINT; END_VAR The append method is the one shown above, and I call it after the runtime has started. The accesses are performed by a single task, and in any case I’m working on an isolated single core. I’ve tried everything, moving the create, the instances, and all the rest several times, but nothing seems to work. I’d like to point out that these FBs are part of our own library, which is used in many applications.
Last updated: 2025-09-11
Post by nicetuxedo on Can not activate license on Raspberry pi
CODESYS Forge
talk
(Post)
Hello everyone, I'm hoping for some assistance with a license activation issue: a software crash has left my license in a strange state. Here is the sequence of events: I purchased a new license for the Raspberry PI from the official CODESYS web store. I opened the CODESYS and started the online activation process using the ticket number I received. During the activation, the CODESYS software threw an exception and crashed. I was not able to see if the activation completed. After restarting CODESYS, I attempted to run the activation process again with the same ticket number. The License Manager now gives me an error stating that the ticket has already been activated/used. I am now stuck because my installation is not licensed, but the activation server believes my ticket has been consumed. Has anyone encountered this before? Is there a way to have the ticket status reset?
Last updated: 2025-10-08
Post by abner on Open specific Version of Codesys Control Win V3 x64
CODESYS Forge
talk
(Post)
Hi, I have installed different versions of Codesys, 3.5.7 - 3.5.8 - 3.5.16 - 3.5.19. When I create a project in Codesys 3.5.16 and I try to open an instance of Codesys Control Win V3 x64 it always open version 3.5.19, so appear a message windows about versions of devices are different. I have tried to open it from the installation folder and always open the last version 3.5.19 C:\Program Files\CODESYS 3.5.16.0\GatewayPLC C:\Program Files\CODESYS 3.5.19.70\GatewayPLC Does somebody know how to open an specific version of Codesys Control Win V3?
Last updated: 2024-08-21
Post by fredruel on ModbusServer became unreachable if reach maximum of 16 byClientConnections
CODESYS Forge
talk
(Post)
Hello Fraziersedge, the solution of Codesys might be to update your codesys to the lastest version but it was not possible for us. In our Codesys V3.5 SP9 patch 8 I was able to fix this bug. I change my ModbusTCP slave component version or one of the sub component version (ex: SysSocket). Look at the picture in attachement that's the receipe that have work for us. When I got the bug my version of ModbusTCP slave was 3.5.5.0 with SysSocket at 3.5.6.0 and I change to ModbusTCP slave 3.5.14.0 with same version 3.5.14.0 of SysSocket event if I still use codesys V3.5 SP9 patch 8.
Last updated: 2024-08-27
Post by wbj0t on Raspberry Pi CM4. CoDeSyS files corrupted after hard reset.
CODESYS Forge
talk
(Post)
Hello everyone. Raspberry Pi CM4 after some 1 week of work was hard reset mannualy several times and after these hard resets User Management file was missed (when click login button, enter login/password, error: User Management File missed). Also programm can not open file via SysFile library, but this file exists and size of him is 0 bytes, but must be more any way (I keep some kind of archive via this lib). What happens, how files corrupted? Where do I need try to find this error of the codesys or system whole? In the log files of codesys nothing interesting about this happens. Thanks for reading Is this enough hold PlcLogic and SysFileMap.cfg as reserve copy in another place for restoring the programm? And how automate restoring actions if programm files corrupted?
Last updated: 2024-09-16
Post by etienneneu on loading delay with the option "check client animations and overlay of native elements"
CODESYS Forge
talk
(Post)
Hello guys, I have the following problem with the Codesys visualization (4.6.0) and Codesys V3.5.20.20. I would like to use my own HTML5 elements for my visualization. To do this, I have to select the option “Support client animations and overlay of native elements” in the visualization manager. But with the selection of this option, the visu has a massive loading delay when changing frame content. This happens even if I have not even added HTML5 elements. However, if this option is deactivated, then changing the content of the frames works without any problems, it loads instantly. I have already tried to change various refresh rates but without success. Have any of you experienced this and been able to fix it?
Last updated: 2024-10-30
Post by pernockham on How to manage soft container licenses for (remote) multi units?
CODESYS Forge
talk
(Post)
Using Codesys runtime for Linux and thinking of the process of preparing multiple such systems for my customer. I don't necessarily have physical access to these units, they can be (very) remote. The idea so far is to use an image to install the Linux OS and codesys runtime. Application updates can be done by distribution of the PlcLogic/Application/application.app and application.crc files. But whats the most practical way of managing the license for these units? Do each controller need to be physically connected to a License Manager instance or can licenses be distributed by means of a license file for each unit? I believe that the license should be stored in soft containers for each unit. Help and insights appreciated! Per
Last updated: 2025-04-04
Post by levih on FbHTTPs_Get how to get data from a website and use it in codesys
CODESYS Forge
talk
(Post)
You get an array of DWORD into your receive buffer. You need to process this into usable data, before you can fit it into your DUT. I've made it work using FbWrite_ToIEC_ByRule in stead of Fb_JSON_ParseAndModify. I've attached images of the code. You receive the data into ARRAY[0..1023] OF DWORD. Then you use that array as the input for fbWrite_ToIEC_ByRule. To get the output from this you define a rule to fit the expected data structure including nesting levels. The you feed the rule into FbWrite_ToIEC_ByRule and then you can set the output to be of your DUT type.
Last updated: 2025-06-16
Post by manuknecht on Using an Axis of an Axis Group in Torque Conctrol
CODESYS Forge
talk
(Post)
I don't seem to be able to use an axis, which is part of an Axis Group in torque control mode. I call the SMC_SetControllerMode FB to switch from position to torque control mode, followed by the SMC_SetTorque FB to set the desired torque. This works flawlessly for most axes, however if an axis is part of an axis group, switching the controller mode seems to work without any issues, but the desired torque is never set. SMC_SetTorque does not return an error, but fSetTorque of the axis is never changed. Disabling the axis group before does not change anything, but if I use MC_UngroupAllAxes before changing the controller mode, it all works as it should. Is there no way to control a single axis in torque control, if it is part of an axis group?
Last updated: 2025-07-17
Post by jzhvymetal77 on VarAccGetAddress does not return the correct address for TYPE_ARRAY or TYPE_USERDEF.
CODESYS Forge
talk
(Post)
VarAccGetAddress does not return the correct address for TYPE_ARRAY or TYPE_USERDEF. When you use VarAccGetNode, it returns a proper IBaseTreeNode if you provide the full path of an array element or structure element, and it even provides the correct data type. The problem is that with TYPE_ARRAY, it returns the start address of the array rather than the indexed element. With TYPE_USERDEF, it only returns the offset of the element instead of the actual address. This causes many issues with nested structures or arrays of structures, since it requires manually calculating the address based on the parent IBaseTreeNode. See attached image and example.
Last updated: 2025-08-28
Post by dkugler on Project loses 'Download time' information
CODESYS Forge
talk
(Post)
and if you copy or transfer a project to another place, copy not only the .project, copy .compileinfo .bootinfo and .bootinfo_guids then we figured out it is more often possible to go online without full download. If you build an archiv and extract it, some of this files are missing and login isn't possible without download. I work with V3.5 SP16 Patch 4. I don't know if this problem of the archiv is solved in newer Versions/SP's and I don't know what the problem of Codesys is to help out a lot of programers of this very annoying problem or at least help with a workaround
Last updated: 2025-09-18
Post by comingback4u on Memory Address Overlap
CODESYS Forge
talk
(Post)
Hello, We use a controller that comes with a bunch of predefined faults. These faults are considered active and historic. They are a 32 byte array but only take up 26 bytes of data. Because of this the historic faults start at address 26 instead of 31. Active faults variable take up address location 0 to 31. Historic faults variable take up address location 26 to 57. Because of this overlap I get an error that these overlap and it wont allow me to download to my controller. This isn't an issue in 3.5.5.4 but becomes an issue in newer version. Is there a way to turn this off? If I change the address location, the historic faults then become broken without doing some manipulation in the code. The software will build just fine. Thank you for your time.
Last updated: 2024-03-07
Post by jaspergain on Non-existing identifiers
CODESYS Forge
talk
(Post)
Hello, I got a bit of a weird issue going on which is kind of annoying. So recently we switched a lot of Modbus IO to EtherCAT, as we were having issues with stability. All works fine, which is great. But sometimes when I change the program I get errors claiming that identifiers are not defined. Meaning I can't go online. See the picture below. I believe this is because some of these identifiers were used with Modbus, and they weren't properly removed/deleted? A clean all temporary fixes the issue, but it comes back again after a while of changing the code, and building. Any way to fix these non-existing required identifiers, or even find out where they are required? Thanks for the help in advance. Jasper.
Last updated: 2024-05-29
Post by davidbo on RETAIN PERSISTENT only stored at gracefully shutdown?
CODESYS Forge
talk
(Post)
I have {attribute 'checksumnoinit_override' := '2629838988'} {attribute 'init_related_code' := '5c6efcf8-e0f4-4166-a9fa-17eadd8908df'} VAR_GLOBAL RETAIN PERSISTENT {attribute 'order_in_persistent_editor' := '0'} segmentValue: ARRAY[0..49] OF REAL; {attribute 'order_in_persistent_editor' := '1'} segmentTime: ARRAY[0..49] OF REAL; // Generated instance path of persistent variable PRG.test: INT; // Generated instance path of persistent variable PRG.nw_storage: SysSocket_Implementation.SysSocket_Interfaces.SOCK_ADAPTER_INFORMATION2; END_VAR When I have changed PRG.nw_storage it will not be stored at a power off, but if I do a: sudo systemctl restart codesycontrol and then a power off it will be stored. Is there a way to store persistent variables without a restart of codesyscontrol? Can anyone explain how and when CODESYS store persistent variables?
Last updated: 2025-11-17
Post by pernockham on Trend legend naming and access/config to/of trend/legend-variables
CODESYS Forge
talk
(Post)
Trying the web-version of trend-data. This seems to be a impressive tool, but I lack/cant find a number of what I would think are important parts. There does not seem to be a way to get away from the dot.notated variable naming in the legend.. A developer might want the dot-notation but an end-customer will surely not. For instance I want to display 12 temperatures, instead of t1, t2 etc.. they will be named. gvl_io.unit[1].trend.temps.t1_a gvl_io.unit[1].trend.temps.t1_b gvl_io.unit[1].trend.temps.t1_c gvl_io.unit[1].trend.temps.t2_a .. gvl_io.unit[1].trend.temps.t4_b.. gvl_io.unit[1].trend.temps.t4_c.. Quite a lot of unnecessary text/data taking space from the actual trend => Is there a way to access/interface the legend-data programmatically so I can change the presentation/naming?
Last updated: 2025-12-16
Post by trusty-squire on Strange problem with the ‘MC_SetPosition’ function
CODESYS Forge
talk
(Post)
How are the servo drives controlled? EtherCAT, step/dir pulses, other? Another thought is that - if it's step/dir pulse based control - the pulses from the PLC to the drive are getting missed/lost at high frequencies? If that's the case then there would be multiple troubleshooting steps/corrections that could be investigated. You could try to create a simplified program, with all the same parameters, that only has an MC_SetPosition FB you manually trigger and see if you are still getting the same results? When you manually control the motor directly from the servo drive software at the speeds you are calling for, does it move precisely to the target position?
Last updated: 2025-01-18
Post by felipemsgarcia on Axis EtherCAT address
CODESYS Forge
talk
(Post)
Hello, Thank you for your answer. I'm afraid I was not clear on what I was trying to achieve. I'm trying to change parameters and command axes from inside a function block and the first thing that came to my mind was pass both the EtherCAT slave and axis to the function block (as image attached). But, I believe it's worse than just pass directly the EtherCAT slave address to the function block (is it???). However I was wondering if there was a way to get the EtherCAT address directly from the axis, so I don't need to pass the EtherCAT slave nor the EtherCAT address to the function block. Thank you again!
Last updated: 2025-03-07
Post by mehakfatima on Need Help Configuring Energy Analyzers via Modbus TCP & RTU (RS-485) in CODESYS 3.5
CODESYS Forge
talk
(Post)
Hello everyone, I am currently working on reading data from energy analyzers using Modbus TCP and RTU (RS-485). In my previous software, I used the following method to add slave devices (i have attached the image) and configure registers: Add the Modbus slave device. Configure the communication parameters (baud rate, parity, etc.). Define the registers and their addresses for data retrieval. Now, I am trying to achieve the same in CODESYS 3.5, but I am not sure how to configure the Modbus master, add slave devices, and set up the registers properly. If anyone has experience with Modbus TCP/RTU setup in CODESYS 3.5, I would really appreciate your guidance! A step-by-step explanation or any references/tutorials would be extremely helpful.
Last updated: 2025-03-13
Post by wbj0t on connect IDE to plc that uses modem ppp
CODESYS Forge
talk
(Post)
Hello everyone! I have an PLC device that uses modem ppp connection to the internet with white IP. Device PPP connection with modem operator established, so I can connect to this device via SSH also within Codesys IDE (check version, info, etc...) BUT, I cant establish connection to this device in the device gateway options for application upload and debugging. How can I do this? Im trying set my device remote IP and port 11740, but, as I understand, it is wrong decision, because the next logic in this connection: local W10 service (Codesys Gateway) listen on 1217, then (some how) this service scanning local networks for seeking any local IP which listening on port 11740, and then connects and writes there. OR IM WRONG?:) W10 tool 'Test-NetConnection' with parameters 'ip -Port 11740' succeeded with True. Need some help, please :)
Last updated: 2024-05-21
Post by laurits on Max lines of code, codesys CNC ?
CODESYS Forge
talk
(Post)
Hi, yes now its working, to get "QUEUE.bFull" to work, I've had to set the "QUEUE.nNumReservedEntries" to 3. (I tried different values here, only effect for larger values i can see is the the queue capacity gets smaller.) I've noticed the movement is slowing down when it reaches the end of the "fill Up", must be because of the "checkVelocity" can only see the current "QUEUE". Any way of solving this ? BUF : ARRAY[0..20000] OF SMC_GEOINFO; xp : ARRAY[1..100000] OF REAL; yp : ARRAY[1..100000] OF REAL; CASE iState OF 000: IF R_TRIG_bStart.Q THEN iState := iState + 1; END_IF bReady := FALSE; //initialize Queue GEO.dT1:=0; GEO.dT2:=1; GEO.dToolRadius := 0; GEO.dVel := 15000; GEO.dVelEnd := 15000; GEO.dAccel := 2000; GEO.dDecel := 2000; GEO.iObjNo := 0; GEO.piDestPos.dX := 0; GEO.piDestPos.dY := 0; QUEUE.bEndOfList := FALSE; QUEUE.nPastMarker := -1; QUEUE.nWritePos := 0; QUEUE.pbyBuffer := ADR(BUF[0]); n := 0; sMC_CheckVelocities(bExecute:= FALSE); SM3_CNC.SMC_SetQueueCapacity(ADR(QUEUE), SIZEOF(BUF)); QUEUE.nNumReservedEntries := 3; 001: FOR i := 1 TO SIZEOF(xp)/SIZEOF(xp[1]) DO xp[i] := UDINT_TO_REAL(i) * 0.01; yp[i] := UDINT_TO_REAL(i) * 0.01; END_FOR iState := iState + 1; 002: WHILE NOT QUEUE.bFull DO // when the Queue is full, wait until it has been processed by the following FBs n := n + 1; GEO.iSourceLine_No := n; GEO.piStartPos := GEO.piDestPos; // copy last destination GEO.iMoveType := LIN; // generate linear movement GEO.iObjNo := GEO.iObjNo + 1; // calculate number GEO.piDestPos.dX := xp[n]; // generate position GEO.piDestPos.dY := yp[n]; SMC_CalcLengthGeo(pg := ADR(GEO)); // calculate length of object with the help of the standard function SMC_AppendObj(poq:=ADR(QUEUE), pgi:=ADR(GEO)); //append object to queue IF n = UDINT_TO_DINT( SIZEOF(xp)/SIZEOF(xp[1])) THEN // all target positions processed QUEUE.bEndOfList := TRUE; iState := iState + 1; EXIT; END_IF END_WHILE sMC_CheckVelocities(bExecute:= TRUE, poqDataIn:= ADR(QUEUE)); bReady := TRUE; // Send message to smc_interpolator to start 003:
Last updated: 2025-06-04
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.