Post by john-robinson on Limiting Memory Access of an Array to Within its Bounds
CODESYS Forge
talk
(Post)
Recently we had an issue regarding some simple code to calculate a rolling average. The code indexes from zero to 199 to properly store the current input into a circular buffer which then allows us to calculate a rolling average: VAR input_5s : REAL; outs_arr : ARRAY[0..199] OF REAL; i : USINT := 0; END_VAR ___ //this code runs every five seconds, calculating a rolling average outs_arr[i] := input_5s; i := i + 1; output := OSCAT_BASIC.ARRAY_AVG(ADR(outs_arr), SIZEOF(outs_arr)); IF i >= SIZEOF(outs_arr) THEN i := 0; END_IF There is a simple bug in this code where the index will be set to 0 when it has surpassed the length of the array in bytes (800 in this case) rather than larger than the number of reals in the array (200). The solution here is simple, replacing i >= SIZEOF(outs_arr) with i >= SIZEOF(outs_arr)/SIZEOF(outs_arr[0]). In this example when the index increased to 201 and the line outs_arr[201] := input_5s was called, codesys arbitrarily wrote to the address in memory that is where outs_arr[201] would be if the array was that long. I would like to find a way to wrap the codesys array inside of a wrapper class that checks if an input is within the bounds of an array before writing to that value. I know how I would implement that for a specific array, I could create a method or class that takes an input of an array of variable length, ie. ARRAY[*] OF REAL, but I don't know how to make this for any data type. I am wondering if anyone has ever done anything similar to this, or has any better suggestions to ensure that none of the programmers on this application accidentally create code that can arbitrarily write to other locations in memory.
Last updated: 2024-03-05
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 vformanek on OPCUA Datasource, can not login...
CODESYS Forge
talk
(Post)
Hello? I have a problem with datasource... I am trying to connect to a OPCUA server. I create a datasource, but I can not login into it. I need to use login credentials to login... Everything works fine in UAExpert, but in codesys I cant seem to get in properly using the login credentials... I have tried to configure the datasource initializer but seem to keep failing... Do I need to call it somewhere ? Will the find endpoints work with this configured to store my password ? !
Last updated: 2023-11-20
Post by joosterloh on Anbindung an bestehendes SIMIT Modell
CODESYS Forge
talk
(Post)
Hey also ich soll mit CodeSys 3.5 ein Modell erstellen, welches ich dann später mit einem bestehenden Modell in Simit anbinden kann. In CodeSys steht das Modell mehr oder weniger und ich wollte jetzt mal ausprobieren, ob ich die beiden Modelle miteinander koppeln kann. Übern einen OPC UA Server hat das auch alles geklappt. Allerdings hängt es jetzt an den globalen Variablen. Wie gehe ich da am besten vor? Soll ich die Variablen in CodeSys anpassen oder gibt es da einen Trick? Vielen Dank schon einmal im Voraus!
Last updated: 2024-07-14
Post by anuj9326 on OPC-UA Client connection, Linux SL /Raspberry Pi
CODESYS Forge
talk
(Post)
hello edwin i have did the same and i could connect the opc-ua server but i dont see anything in the resources tree, in the application i linked my variables to the symbol configuration but i dont see that in the uaexpert. if i use the same application with a non linux system i can get those variables values and see the complete tree structure. What could be the problem ?
Last updated: 2024-08-21
Post by anuj9326 on OPC-UA Client connection, Linux SL /Raspberry Pi
CODESYS Forge
talk
(Post)
hello edwin i have did the same and i could connect the opc-ua server but i dont see anything in the resources tree, in the application i linked my variables to the symbol configuration but i dont see that in the uaexpert. if i use the same application with a non linux system i can get those variables values and see the complete tree structure. What could be the problem ?
Last updated: 2024-08-21
Post by deeksha on RaspberryPi with CoDeSys throwing error
CODESYS Forge
talk
(Post)
I am trying to access Raspberry pi on CoDeSys, but it throws an error says, "No connection to target: An established connection was aborted by the server." I am able to access Raspberry pi via MobXterm, but on CoDeSys, it throws error. Looking for help in resolving this error. Error snap is attached. IP address is scanned here successfully, but when I am trying to install Raspberry pi packet: 4.0.0.0, it throws this error.
Last updated: 2024-08-23
Post by ralfki on User management
CODESYS Forge
talk
(Post)
Hello eschwellinger, at first thank you for your answer. So the only ways to activate the user management are CodeSys delevelopment enviroment and the Codesys Automation Server. So there is no function to activate the user management via code? Do you have an idea how to get back the users when somebody replaced the PLC. Our customers have only our own developed visualization and they also don't want to install further softwares. Do you maybe have a solution for this
Last updated: 2024-09-04
Post by veneto on OPC UA Client
CODESYS Forge
talk
(Post)
Ciao damian177, provo a chiederti un'informazione. Sul mio progetto Codesys(ver.3.5 SP17) non è visibile l'oggetto "Data Source Manager". Il PC con il progetto Codesys(client) è collegato via rete TCP ad un PLC Siemens1200(server). Sul PC con Codesys ho installato UAexpert(client) e riesco a vedere le variabili del PLC1200. Riesci ad aiutarmi a capire come mai non è visibile l'oggetto "Data Source Manager"? Molte grazie
Last updated: 2024-09-06
Post by gatto on library ModbusTCP Slave 4.1.0.0 - function block ModbusServer
CODESYS Forge
talk
(Post)
Hi all, this is my situation : plc weidmuller UC20 WL200 AC target version 4.12.0.0 codesys 3.5.20.0 Actually i'm testing the program without license (2 hours). i'm trying to use the function block ModbusServer. I used it on the past with codesys 3.5.14.40 an it worked. Now not. i can connect (as you see byClientConnctions = 1) but i dont recive a reply from server. Someone can help me?
Last updated: 2024-11-27
Post by ph0010421 on Task time too fast?
CODESYS Forge
talk
(Post)
Hello I've made an FB which is a TCP server. It uses the excellent CAA NetServices library. If I have the FB in a task <4ms, then the RT crashes immediately at boot up. If the task >=4ms, it starts and runs perfectly. This is even if the block is not doing anything; just instantiated. Am I missing something silly? Why would a low task time cause this? 4ms is perfectly adequate, but I'm just interested why... thanks PH
Last updated: 2024-11-27
Post by aliazzz on Runtime licenses not detected => DEMO Mode 2hour
CODESYS Forge
talk
(Post)
Hi! After upgrading all my licensed runtimes to V4.14.0.0 (= RaspberryPi SL, LinuxSL and ControlWin x64 SL) I found out via the logfiles they all defaulted back into DEMO mode while all runtimes have a USB dongle inserted. So, my main question is how I can get the Dongle license detected? I use License Server 4.14.0.0 and Edge Gateway 4.14.0.0 on all platforms Any suggestions are welcome.
Last updated: 2024-12-15
Post by rmaas on TCP Server
CODESYS Forge
talk
(Post)
Hi George, I do not know what the problem is with the syssocket implementation, but when i read the forums it seems the Net Base Services library is the recommended way to go. There is another more extensive example here: https://forge.codesys.com/prj/codesys-example/plc-chat-nbs/home/Home/ I have just tested this example and it works very well, also with closing and opening the connection from hercules... good luck!
Last updated: 2025-02-20
Post by fschuler on No connection to Raspberry at runtime installation
CODESYS Forge
talk
(Post)
Hi, I try to install the Codesys realtime in a Raspberry PI 3B+. When I click on the installation button I get always the message No connection to device: An established connection was aborted by the server. Raspberry 3B+ with newest raspberry PI OS. Codesys 3.5.15 Patch 1 Codesys Runtime Package 3.5.16.20 SSH is activated. I can login with Putty Ping is possible IP address search is possible Just the installation is not started.
Last updated: 2025-07-23
Post by fschuler on Keine Verbindung zum Raspberry bei Runtime Installation
CODESYS Forge
talk
(Post)
Hallo, Hi, Ich versuche die Codesys Runtime auf einer Raspberry PI 3B+ zu installieren. Immer wenn ich auf den Schalter installieren drücke kommt eine Fehlermeldung: Keine Verbindung zum Zielgerät: An established connection was aborted by the server. Raspberry 3B+ mit neustem raspberry PI OS. Codesys 3.5.15 Patch 1 Codesys Runtime Package 3.5.16.20 SSH ist aktiviert. I ich kann mich mit Putty einloggen Ping ist möglich IP Adresse suchen ist möglich Nur die Installation startet nicht
Last updated: 2025-07-23
Post by eschwellinger on Edge Gateway online, but PLC is not online
CODESYS Forge
talk
(Post)
we need some logfiles from the edge gateway /etc/Gateway.cfg [CmpLog] CmpEdgeGateway.Filter=0xFFFFFFFF Logger.0.Name=/tmp/codesysedge.log Logger.0.Filter=0x0000000F Logger.0.Enable=1 Logger.0.MaxEntries=100000 Logger.0.MaxFileSize=5000000 Logger.0.MaxFiles=1 Logger.0.Backend.0.ClassId=0x00000104 ;writes logger messages in a file Logger.0.Type=0x314 ;Set the timestamp to RTC and does the scan via Automation Server show the plc?
Last updated: 2024-01-09
Post by felipemsgarcia on Edge Gateway online, but PLC is not online
CODESYS Forge
talk
(Post)
Hi Edwin, The PLC is already in the automation server so nothing happens when I scan the network, however the PLC show offline (not connected). Please see logs below. [CmpLog] Logger.0.Name=codesysedge.log Logger.0.Filter=0x0000000F Logger.0.Enable=1 Logger.0.MaxEntries=100000 Logger.0.MaxFileSize=1000000 Logger.0.MaxFiles=1 Logger.0.Backend.0.ClassId=0x00000104 ;writes logger messages in a file Logger.0.Type=0x314 ;Set the timestamp to RTC Thank you!
Last updated: 2024-01-09
Post by camilloo on Control for Linux SL on Ubuntu Core
CODESYS Forge
talk
(Post)
(dhumphries) I followed your advice and tried it on Ubuntu Server. Was a good choice. Your material was also very helpful :). Thanks for Your help! I no longer have problems connecting to Ubuntu. However, I still cannot install Virtual PLC. I'm currently getting a missing path message: "C:\Program Files\CODESYS 3.5.19.60\CODESYS\CODESYS Virtual Control for Linux SL\Delivery\virtuallinux\VirtualControlAPI.py." It looks as the package: "CODESYS Virtual Control for Linux SL" was not installed. But, there isn't one in CODESYS Store or I'm doing something incorrectly.
Last updated: 2024-03-03
Post by k4zz on Continuous Build Server
CODESYS Forge
talk
(Post)
Hallo Martin, Thank you so much for the Code example. It works really fine for .porject Types. However, I encountered a challenge when attempting to apply it to .library Types. I also tried the option to "Perform static analysis automatically after compilation" # get Project values myProject = projects.primary # Creates an active application app = myProject.active_application # build Application and run static code analysis app.generate_code() Could you please offer any insights into why this might be occurring?
Last updated: 2024-03-15
Post by jonasz on Deploy LicenseServer for Linux SL
CODESYS Forge
talk
(Post)
Hello, I'm asking for help with installing the license server for Linux SL 4.18.0.0. When I try to install it, I get a message that the WIBUCodeMeter package is missing. I checked the package manager tab to see if the package is installed, and it is - Codemeter 8.40.7120.501. I've checked the CodeMeter Runtime on the target machine, and everything seems to be working fine. One thing caught my eye: the Device Architecture tab says "None" Please help me solve this problem.
Last updated: 2025-11-14
Post by alessandro on SysMemCmp SysMemCpy
CODESYS Forge
talk
(Post)
VAR Data1:ARRAY[1..10] OF SINT ; Data2:ARRAY[1..10] OF SINT ; Data3:ARRAY[1..10] OF SINT ; Data4:ARRAY[1..10] OF SINT ; ex_1 : BOOL ; ex_2 : BOOL ; enable : BOOL :=0 ; END_VAR // PROGRAM // The scope of this example is compare and copy the values of two ARRAY only if some value is different using SysMemCmp and SysMemCpy. // In this 2 example we don't use a FOR cicle for do this, and pBuffer1 and pBuffer2 is just a pointer to ARRAY. See details in Library util.SysMem of Codesys // The compare funcion util.SysMem.SysMemCmp is bidirectional if Data1 chanege respect Data2 ex_1 go to 1 and if Data2 change respect Data1 also // but the copy function util.SysMem.SysMemCpy work only from source ARRAY pSrc:=ADR(Data1) to destination ARRAY pDest:=ADR(Data2) // Example 1 Full ARRAY compare and copy // This compare 2 different equal ARRAY and if there is some difference ex_1 go to 1 and if you give enable he copy Data1 in Data2 ex_1 := TO_BOOL(util.SysMem.SysMemCmp(pBuffer1:=ADR(Data1), pBuffer2:=ADR(Data2), udiCount:=SIZEOF(Data1))); IF ex_1 AND enable THEN util.SysMem.SysMemCpy(pDest:=ADR(Data2), pSrc:=ADR(Data1), udiCount:=SIZEOF(Data1)); END_IF // Example 2 Only selected area of the ARRAY compare and copy // This compare 2 different equal ARRAY starting from position number [3] for 4 byte in this case start at position [3] and finish at position number [6] // and if there is some difference only in area [3..6] of the ARRAY ex_2 go to 1 if you give enalbe he copy Data3[3..6] in Data4[3..6] // if something change in other array position[0..2] or [7..10] are ingnored ex_2 := TO_BOOL(util.SysMem.SysMemCmp(pBuffer1:=ADR(Data3[3]), pBuffer2:=ADR(Data4[3]), udiCount:=4)); IF ex_2 AND enable THEN util.SysMem.SysMemCpy(pDest:=ADR(Data4[3]), pSrc:=ADR(Data3[3]), udiCount:=4); END_IF // Attention udiCount input is intended in <byte> in the example 1 I pass to udiCount:=SIZEOF(Data1) for compare and copy the intere ARRAY and // SIZEOF pass the size of intere ARRAY in byte to the function input, in this 2 examples I used variable type SINT each one occupie 1 byte and one position in the ARRAY // and in the example 2 I pass udiCount:=4 for compare and copy only 4 position of Data3/4[3..6] if you want to extend this example and use it for an ARRAY OF WORD // remember that each WORD will occupe 2 byte (16 bit) and you will have to pass udiCount:=SIZEOF(Data1) if you need to compare intere ARRAY example 1 // but need udiCount:=(42) for the example 2 because need to compare and copy 4 word each occupie 2 byte (16 bit). // For REAL (32 bit) need udiCount:=SIZEOF(44) for LREAL or (64 bit) need udiCount:=SIZEOF(416) // a good rule is calculate the dimension of the ARRAY in byte without empty space at the end, multiple of data type number for variable bigger then 8 bit // Example : If you want to create an ARRAY for 5 REAL (32 bit) each occupie 4 byte the correct size is ARRAY[0..19] OF REAL 54=20 position. // NOTE : In the example the position of compare function util.SysMem.SysMemCmp is first and the copy function util.SysMem.SysMemCpy inside the IF is after // in one cycle of the program the two array is compared and if there is some difference and enable are copied. // If you move util.SysMem.SysMemCmp after the IF cycle he will copare the ARRAY in the current cycle but the copy of the value will do in the next cycle.</byte>
Last updated: 2025-10-24
Post by garyl on Comments in arrays and assigning RST coil's to 600 outputs
CODESYS Forge
talk
(Post)
Hello all, im working on a project that requires me to convert an old automation direct DirectSoft PLC d2-250-1. One of the problems im encountering is that all of the comments are attached to members of the different addresses. When i convert the addresses (1777 "C" registers, 777 X registers, and 20,0000 V registers) im running into difficulties keeping the inputs/outputs correct since they are missing documentation. Is there a good way to retain the comments of the indexes in the array? Secondly, initially i was declaring the "C" and "V" addresses individually and this worked to retain the comments as to which register did what, however i ran into a problem when one rung reset (or set to 0) approximately 600 C Addresses. Since each tag is separately declared this proved to be nearly impossible without a literal wall of code that attempted to crash the program. So i converted all of the registers (C,X,Y,V) into separate structs, declared them as arrays and pointed all of the original call outs in the program to the newly defined structs. However i have now lost comments and the program is very hard to follow. Thanks for any help with this issue.
Last updated: 2023-08-31
Post by s1ack on Request a dark mode for CODESYS
CODESYS Forge
talk
(Post)
and other colors have to be licensed? Introducing Code-Based Licensing Code Basic S: White text w/ grey background (ST only) Code Basic M: White text w/ dark gray background (ST Only) Code Basic L: White test w/ black background (ST Only) Code Standard S: 2 Colors of light syntax highlight colors w/ black background. (ST Only) Code Standard M: 4 Colors of light syntax highlight colors w/ black background. (ST only) Code Standard L: 6 Colors of light syntax highlight colors w/ black background. (ST only) Code Performance S: 2 Colors of light syntax highlight colors w/ user definable background. (Entire IDE) Code Performance M: 4 Colors of light syntax highlight colors w/ user definable background. (Entire IDE) Code Performance L: 6 Colors of light syntax highlight colors w/ user definable background. (Entire IDE) You get the gist... I used to be a big fan of CoDeSys. Recent re-entry after 5 years away, not so much.
Last updated: 2024-11-15
Post by cihangur on C0138: No matching 'FB_Init' method found for instantiation of VisuClientObjectMgr
CODESYS Forge
talk
(Post)
This "FB_Init" error has become very annoying lately. It's usually related to webvisu and is resolved by deleting all objects and related libraries. Of course, you need to re-add the deleted objects. Lately, we've generally been managing by not upgrading, but this problem persists in every version since SP20 and should be resolved. I updated a project from SP 19 to SP 21 and found 116 similar errors. [ERROR] alarmmanager, 4.7.0.0 (intern): ReplaceAlarmPlaceholdersConverted: C0138: No matching 'FB_Init' method found for instantiation of CharBufferString [ERROR] visuelemsalarm, 4.7.0.0 (system): protDrawRowHeader [VisuFbElemAlarmTable]: C0138: No matching 'FB_Init' method found for instantiation of CharBufferString [ERROR] alarmmanager, 4.7.0.0 (intern): AnalyzePlaceholders2 [Alarm]: C0138: No matching 'FB_Init' method found for instantiation of CharBufferString If you have an ERROR related VisuClientObjectMgr you can try to disable "Visualization Manager - Settings - Support client animations and overlay of native elements " selection "C0138: No matching 'FB_Init' method found for instantiation of VisuClientObjectMgr" etc
Last updated: 2025-10-10
Post by acc00 on Main Task cycle too long leading to PLC Fail
CODESYS Forge
talk
(Post)
I have 2 Wago PFC200 PLC, running with Runtime SP19 Patch 5, with the Redundant application. The PLC communicates as Modbus Master with at this moment 15 Modbus Slaves -later there will be 28 in total- (Drives, Power management units,...). These devices are connected in 2 rings (1 ring of Drives, 1 ring of Power Management units), with 2 Managed Moxa Switches being part of the ring. Each PLC is connected to one of these switches. The issue I'm encountering is that the Cycle time of the Active PLC goes very high when I'm closing the Drive ring (simulating an issue on one Cabinet supply, resulting in that one Drive shut down, which can happen on field quite often). As a result of this long cycle, the PLC fails and goes to Exception, and the Passive PLC does not take control of the system. A normal cycle is around 30ms for the Main task, and a few ms for the Ethercat task. When I monitor with Profiler, I see that in this Maximum Cycle, the main Task is only taking 13ms, so I'm not sure where the PLC is hanging for so long. Is the remaining cycle time the Redundant management/sync or something else? Thank you in advance.
Last updated: 2024-03-08
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.