Post by timvh on Array to String
CODESYS Forge
talk
(Post)
The new (UTF8) string library is faster and can handle large strings. https://content.helpme-codesys.com/en/CODESYS%20String%20Libraries/_strlib_start_page.html PS, in CODESYS, the maximum string length is not 255 characters. The String functions of the standard library are limited to strings of 255 characters. But you can use other (memory) functions to handle strings larger than 255 characters.
Last updated: 2024-07-22
Post by k2saki on How to define CONDITIONAL PRAGMA that effects all ST-POU in project.
CODESYS Forge
talk
(Post)
I'd like to use same code/project in different devices. (RPi, PLC) I change some lines in some POU before compiling. (array size, file path, etc ) My question is How to define pragma that effects all ST-POU in project. Is it possible ? I've read this. https://help.codesys.com/api-content/2/codesys/3.5.12.0/en/_cds_pragma_conditional/
Last updated: 2024-05-12
Post by imuser on Is it possible to use debug functions such as Step Execution while the PLC ladder is in Running?
CODESYS Forge
talk
(Post)
Hello, I am a student learning CODSIS. Lately, I've been curious about something. During the actual PLC run, that is, Assume that the I/O is connected to a physical device and the analog value is updated in real time. Is it possible to use a feature like Codesys’ Debug-Step Over-Step IN? If possible..... How do I process the values of analog values (pressure sensor, temperature, current, etc.) that are being updated in real time? To step over, the ladder must stop at the breakpoint. If that happens, the PLC will actually stop, right??
Last updated: 2024-01-16
Post by eaglealex on Length of string and Array of bytes
CODESYS Forge
talk
(Post)
Hello! I have tried read a file to the string variable. But I faced a problem - there is about 2800 bytes of information in file, but string have a limit 2393 bytes. I made two variables with same address (for automatic convertion) - string[3000] and array of bytes[1..3000]. And I noticed that array of bytes contains all information from file, but string shows only first 2393 bytes. So I have lost information. Is there really such a limitation? Or I have an error in my program and Codesys 2.3 have no limit for such kind of conversation between string and array of bytes? Thank you very much!
Last updated: 2025-04-01
Post by eaglealex on Length of string and Array of bytes
CODESYS Forge
talk
(Post)
Thank you for your answer! I know that 0 will be the end of the string. I checked it. There is no 0 in array of bytes. I made screenshots. There is array of bytes, aborted string and the result of my test via online converter.
Last updated: 2025-04-02
Post by lbartik on MPC predictive control
CODESYS Forge
talk
(Post)
Would this work? https://www.mathworks.com/hardware-support/codesys.html I'm also interested in real-world MPC and have no idea where to start. There is an exciting Python library that is also beyond my grasp: https://www.do-mpc.com/en/latest/index.html Step 1, get PhD(s). Step 2, get job in aerospace/robotics. Step 3, return 15 years later to share this knowledge?
Last updated: 2024-10-19
Post by gseidel on Strange problem with the ‘MC_SetPosition’ function
CODESYS Forge
talk
(Post)
Hi Gustavo, can you reduce the problem to a project that reproduces the issue without the real servo drives? (You could set the servo drives to virtual and strip away as much as possible from the application.) If you can attach a project, we will have a look. Best regards, Georg
Last updated: 2025-01-10
Post by spiessli on Softmotion axis to CANopen Maxon IDX drive
CODESYS Forge
talk
(Post)
Just verified the behaviour. Still is the same. It should be attached here. But I also tried the DCF-file with the axis in the lab with the real drive: The MC_Power block never goes out of busy. Had not time to investigate further, though.
Last updated: 2024-01-08
Post by davidbo on Is it possible in the log to see previous shutdown
CODESYS Forge
talk
(Post)
If my application does some kind of violation which makes it cast an exception it will trigger my real watchdog which results in a reboot. Unfortunately the log it seems only shows the boot sequence. Is it possible to see what happen before reboot?
Last updated: 2024-02-08
Post by gilbertamine on Comparing Arrays of structure
CODESYS Forge
talk
(Post)
Hi Everybody, I'm looking for a simple way of comparing two array of a structure. My structure is define like this : TYPE Positions_T : STRUCT PosX: DINT; PosY: DINT; PosZ: DINT; END_STRUCT END_TYPE I have multiples Var : ARRAY [0..220] OF Positions_T, that I need to compare quickly. I don't really want to do a Loop that goes by every 220 points and compare each one of them so I was wondering if there is another way. I came accross the MEM.Compare function, but it require to know the size in Bytes of the memory, and I don't know how to do that... Has anybody an idea on how to do the comparing easily ? Thanks in advance
Last updated: 2024-08-22
Post by jzhvymetal77 on Special Chars in Visualizationfor QR code string
CODESYS Forge
talk
(Post)
In Visualization, is there any way to make special characters in a string display properly in a Text object? I wrote a function block to create QR codes at runtime. My code uses “$DB,” which in ASCII should render as a solid block. The code works, but to display it in Visualization I had to create multiple rectangles with visibility bound to a BOOL array. That works, but since each BOOL must be exposed as a separate variable, it consumes most of the available monitoring resources. See Attached image.
Last updated: 2025-09-29
Post by jzhvymetal77 on Special Chars in Visualizationfor QR code string
CODESYS Forge
talk
(Post)
In Visualization, is there any way to make special characters in a string display properly in a Text object? I wrote a function block to create QR codes at runtime. My code uses “$DB,” which in ASCII should render as a solid block. The code works, but to display it in Visualization I had to create multiple rectangles with visibility bound to a BOOL array. That works, but since each BOOL must be exposed as a separate variable, it consumes most of the available monitoring resources. See Attached image.
Last updated: 2025-09-29
Post by eaglealex on Length of string and Array of bytes
CODESYS Forge
talk
(Post)
Browser's bug... Sorry
Last updated: 2025-04-02
Post by mxj262 on FB having single input but initialized with Array
CODESYS Forge
talk
(Post)
Last updated: 2024-05-04
Post by mxj262 on FB having single input but initialized with Array
CODESYS Forge
talk
(Post)
works
Last updated: 2024-05-06
Post by hwillems on Ranges, Lambdas, on Fixed arrays of structs
CODESYS Forge
talk
(Post)
I do datastructures and algorithms in Codesys. For example a Struct of Person with thing's like IdNumber, Name, Age etc. as example. Now i do all kind of calculations, filters. So i have this pretty big Fixed Array with Structs. On this struct i want to do simple stuff you can do easily in C++/Python/Rust etc. For example i want to do this: AvererageAge := Average(Peoples.Age); Then it will return the average of all members ages. Or Sort struct on age etc. Or sort on alphabetical Name. Or use Lambda functions to filter/mutate out things like, filter out everybody above 18 years old. Or remove people who it's name start with "A". Currently i have to write my own custom function for example sorting on Age. And make a super specific function based on that particulare datastructure. Here an Example: (*Before calling this FIlter method, set the mNodeFilterSwitch to the desired filter.*) CASE mNodeFilterSelect OF (********************************[ Status Filters ]***********************************) NodeID: FOR x := ACS_OUT_BEGIN TO ACS_OUT_END BY 1 DO FOR y := ACS_IN_BEGIN TO ACS_IN_END BY 1 DO IF marrNode[y].Status.oiNodeID > marrNode[y + 1].Status.oiNodeID THEN mNodeTemp := marrNode[y + 1]; marrNode[y + 1] := marrNode[y]; marrNode[y] := mNodeTemp; END_IF; END_FOR; END_FOR; Started: FOR x := DES_OUT_BEGIN TO DES_OUT_END BY -1 DO FOR y := DES_IN_BEGIN TO DES_IN_END BY -1 DO IF marrNode[y].Status.oxStarted > marrNode[y - 1].Status.oxStarted THEN mNodeTemp := marrNode[y - 1]; marrNode[y - 1] := marrNode[y]; marrNode[y] := mNodeTemp; END_IF; END_FOR; END_FOR; Starting: FOR x := DES_OUT_BEGIN TO DES_OUT_END BY -1 DO FOR y := DES_IN_BEGIN TO DES_IN_END BY -1 DO IF marrNode[y].Status.oxStarting > marrNode[y - 1].Status.oxStarting THEN mNodeTemp := marrNode[y - 1]; marrNode[y - 1] := marrNode[y]; marrNode[y] := mNodeTemp; END_IF; END_FOR; END_FOR; END_CASE; I have like 30+ of these in the enum. Not really DRY code right? These are custom made bubble sort filters in a function. You pass in the Datastructure, and say what function you want. (This is an enum collection of sorting functions) And then the Array with Nodes of Structs gets ordered. Why can't we have Iterators and Lambda's and build in standard functions like regular languages? Also i use bubble sort because it's the easiest to implement because i can't get this to code DRY. Problem with ST (Even the new one with classes) that it's very limited for programming datastructures and algorithms. Yes you still not want dynamic memory and you need to choose the correct algorithm so you know the most extreme edge cases regarding the time it takes to execute the algorithms.(Real-time execution) How are other people dealing with this? Here for example saw some software using an adjusted ST language and having FOR EACH possibility: https://www.fernhillsoftware.com/help/iec-61131/structured-text/st-for-each.html You can then build your own custom Iterator functions. I wish the IEC 61131-3 standard would be more expressive and having more standard modern features, but still keep close to the fact of no dynamics memory and real-time systems.
Last updated: 2023-08-31
Post by mozed on Connection to device closed
CODESYS Forge
talk
(Post)
Hello I am using an OpusA3 with version 3.5 SP17 Patch 3 as part of a project. I had no real problem before I encountered a problem that blocked me. The detection of the OpusA3 from Codesys is done correctly. The gateway is well configured and if I ping the gateway or the OpusA3 I receive the response correctly. The problem is that when I try to connect, the Opus screen freezes and a few moments later Codesys displays an error message ("connection to device closed"). I tried to change PC, to update the runtime, to change OpusA3 but the problem remains the same. I'm a little lost knowing that before it worked without problem. I went back to a previous version of the project (where it worked correctly) but the message still appears. Do you have any clues to solve the problem? Sincerely,
Last updated: 2023-08-23
Post by timvh on Profinet fault with codesys control V3 - Receive packet error
CODESYS Forge
talk
(Post)
Are you using the Control Win SL (installed together with the development environment of CODESYS)? If yes, you might want to consider using the CODESYS RTE instead. This has real-time capabilities (running on separate core(s)). But to be able to use this, you have to install the CODESYS Ethernet driver for your network interface to be able to let the RTE access the network port also in realtime. See: https://store.codesys.com/en/codesys-control-rte-sl-bundle.html https://content.helpme-codesys.com/en/CODESYS%20Control/_rtsl_windows_rts_v3.html PS, I haven't tested this myself yet, but you could try to use the SetCommunicationState method of the Profinet controller to see if you can reset and start the bus communication: result := PN_Controller.SetCommunicationState(eRequestedState := DED.DEVICE_TRANSITION_STATE.START); PS, if you are located in the Netherlands or Belgium, we could also provide the license(s) for you.
Last updated: 2024-02-28
Post by timvh on Profinet fault with codesys control V3 - Receive packet error
CODESYS Forge
talk
(Post)
Are you using the Control Win SL (installed together with the development environment of CODESYS)? If yes, you might want to consider using the CODESYS RTE instead. This has real-time capabilities (running on separate core(s)). But to be able to use this, you have to install the CODESYS Ethernet driver for your network interface to be able to let the RTE access the network port also in realtime. See: https://store.codesys.com/en/codesys-control-rte-sl-bundle.html https://content.helpme-codesys.com/en/CODESYS%20Control/_rtsl_windows_rts_v3.html PS, I haven't tested this myself yet, but you could try to use the SetCommunicationState method of the Profinet controller to see if you can reset and start the bus communication: result := PN_Controller.SetCommunicationState(eRequestedState := DED.DEVICE_TRANSITION_STATE.START); PS, if you are located in the Netherlands or Belgium, we could also provide the license(s) for you.
Last updated: 2024-02-28
Post by askic on Generate FBs from source
CODESYS Forge
talk
(Post)
Hello, I'm coming from Siemens (TIA) world and currently learning Codesys. I'd like to know if there is an option to add external txt file with ST code for creation of a function block and then use this file as a source file from which FB will be generated? For example, in TIA, there is an option add external source file to the project structure and then use option "Generate blocks from source". This would create a FB. Does Codesys have something similar? This external source file would look like this: FUNCTION_BLOCK Scaling VAR_INPUT x, k, n : REAL; END_VAR VAR_OUTPUT y : REAL; END_VAR VAR END_VAR y := k*x+n; END_FUNCTION_BLOCK
Last updated: 2024-07-31
Post by pernockham on AC Persistence - values are not read from file during start?
CODESYS Forge
talk
(Post)
I swear I tested this like 20 times yesterday without success. Repeated it today and it works. Maybe the system needed a "real" power reboot? To note. To make a manual edit of a variable I tried some different approaches this is what worked for me. "system/online edited" gvl_var.example_variable REAL:F16#2FFB334H-4 767.7 "manually edited" (with runtime stopped followed by a "cold start" to read from file) gvl_var.example_variable REAL:790.1 (the system will use the manual value but will not set an equivalent "hex" value until next online edit/write cycle)
Last updated: 2025-09-03
Post by timvh on Sorting array of any-sized structure
CODESYS Forge
talk
(Post)
Look all the way at the end of the link below. This provides a way to use arrays with various lengths: https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_datatype_array.html
Last updated: 2023-08-18
Post by jegerjon on Find index based on values
CODESYS Forge
talk
(Post)
Hi, I need to figure out witch indexes of an Array containing the highest and lowest values. Typically search for the 5 lowest values and result the indexnumbers containing the 5 lovest values. is there a library for this, or codeexample?
Last updated: 2023-08-20
Post by jegerjon on Find index based on values
CODESYS Forge
talk
(Post)
Hi, I need to figure out witch indexes of an Array containing the highest and lowest values. Typically search for the 5 lowest values and result the indexnumbers containing the 5 lovest values. is there a library for this, or codeexample?
Last updated: 2023-08-20
Post by timvh on Readable IO names
CODESYS Forge
talk
(Post)
IF you create an ENUM {attribute 'qualified_only'} {attribute 'strict'} TYPE E_IO : ( FIRST := 0, SECOND := 1 ); END_TYPE You should be able to access the array items like: IOCard_OUTPUT[E_IO.FIRST]
Last updated: 2024-09-28
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.