Post by micik on Download EtherCAT project on SoftPLC (ControlWin-V3 x64)
CODESYS Forge
talk
(Post)
Hello, I have almost exactly problem already discussed here in this old thread: https://forge.codesys.com/forge/talk/Engineering/thread/03af9426eb/ However, this is quite old and I assume not completely relevant. In my case, I use v3.5.20 on windows 11, so Winpcap is no longer supported on newer OS. Also, this hint about adding entry to the .cfg file under ProgramFiles(x86) is also not relevant anymore. I guess, I need to add entry SysEthernet to this .cfg file: C:\ProgramData\CODESYS\CODESYSControlWinV3x64...\CODESYSControl.cfg like this one: [ComponentManager] Component.1=CmpTargetVisuStub Component.2=CmpWebServer Component.3=CmpWebServerHandlerV3 Component.4=SysCpuMultiCore Component.5=SysReadWriteLock Component.6=SysCpuBreakpoints Component.7=SysPipeWindows Component.8=SysEthernet But I'm not sure about Npcap vs WinpCap. Please, if applicable, update these instructions.
Last updated: 2024-08-08
Post by micik on Ethercat project loaded to Win V3 x64 bit SoftPLC
CODESYS Forge
talk
(Post)
Hello, I have almost exactly problem already discussed here in this old thread: https://forge.codesys.com/forge/talk/Engineering/thread/03af9426eb/ However, this is quite old and I assume not completely relevant. In my case, I use v3.5.20 on windows 11, so Winpcap is no longer supported on newer OS. Also, this hint about adding entry to the .cfg file under ProgramFiles(x86) is also not relevant anymore. I guess, I need to add entry SysEthernet to this .cfg file: C:\ProgramData\CODESYS\CODESYSControlWinV3x64...\CODESYSControl.cfg like this one: [ComponentManager] Component.1=CmpTargetVisuStub Component.2=CmpWebServer Component.3=CmpWebServerHandlerV3 Component.4=SysCpuMultiCore Component.5=SysReadWriteLock Component.6=SysCpuBreakpoints Component.7=SysPipeWindows Component.8=SysEthernet But I'm not sure about Npcap vs WinpCap. Please, if applicable, update these instructions. I hope it is still possible to
Last updated: 2024-08-22
Post by timvh on Visuutils FbOpenDialog(Extended) not open Dialog from POUs
CODESYS Forge
talk
(Post)
I had a similar situation recently where this didn't work, but read to the end to see the solution. The reason is that CODESYS only downloads visualisations (dialogs) if they are part of the project or linked to the project. In your case the dialog is not loaded onto the controller. But the solution is pretty simple: Double click on the Visualization Manager in your application. Select the Tab "Visualizations". Here you can see that your dialog is not "checked". Do this manually and load your project on the controller. Then your code should be able to open the dialog, because now it exists on the controller.
Last updated: 2024-09-28
Post by timvh on Modbus TCP & RTU with Control for Linux SL
CODESYS Forge
talk
(Post)
RS485 doesn't seem very logical to use in VPLC's in my opinion. I also don't know if this is supported.... But for TCP/IP, I think you still need to configure the Nic settings. See the attached png. In my case enp6s0. When changing this setting, restart the VPLC. What is really nice, is that you don't have to configure the IP address setting in Linux. By setting the Nic to a certain IP address in the CODESYS instance configuration, this is automatically done for you. I only tested this with EtherCAT, but I guess this works the same for Modbus TCP/IP.
Last updated: 2024-10-23
Post by gatto on Undertanding Application Based Licenses
CODESYS Forge
talk
(Post)
Hi, i think you are right. Did you press the key shopping cart? Codesys tells you the license. What I don't appreciate is that i need an additional license for communication. The system reports opc ua but this cheats you. This is communication that also concerns the tag symbols that codesys eth v3 exchanges with an operator panel. Attached is a screenshot of my case where you can see that communication opc ua is cheating you. 512 tags included in the program license are few. So, I had to buy 2 licenses. one for the program and one for communication. I don't like this policy.
Last updated: 2024-11-11
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 imdatatas on String length issue in GetRecipeNames method
CODESYS Forge
talk
(Post)
Hi, If the string length in the GetRecipeNames method is lower than the default value, there will be a problem with the resulting Recipe file names. For example; When the method in the link is called, let's say the defined string length is 19. In this case, the string content is corrupted as in the image. strArr: ARRAY[0..9] OF STRING(19); https://content.helpme-codesys.com/de/libs/Recipe%20Management/Current/pou-RecipeManCommands/GetRecipeNames.html The same problem does not occur when the string definition is made in the default size. strArr: ARRAY[0..9] OF STRING; FYI Regards, Imdat
Last updated: 2025-02-19
Post by imdatatas on String length issue in GetRecipeNames method
CODESYS Forge
talk
(Post)
Hi, If the string length in the GetRecipeNames method is lower than the default value, there will be a problem with the resulting Recipe file names. For example; When the method in the link is called, let's say the defined string length is 19. In this case, the string content is corrupted as in the image. strArr: ARRAY[0..9] OF STRING(19); https://content.helpme-codesys.com/de/libs/Recipe%20Management/Current/pou-RecipeManCommands/GetRecipeNames.html The same problem does not occur when the string definition is made in the default size. strArr: ARRAY[0..9] OF STRING; FYI Regards, Imdat
Last updated: 2025-02-19
Post by atone on CAA File Handling: "Read only" error
CODESYS Forge
talk
(Post)
In case of error while opening the file to read you assume that the file doesn't exist and try to create one. But it could be that the SD card is not ready yet or simply not there. I would try to check first if the SD card is there and accessible. Otherwise with FILE.Create you could end up creating a new directory that is not mapped to the SD card. This would explain the errors even after a reboot, though it doesn't explain the READ_ONLY_CAA error I guess? I would use FILE.DirOpen and FILE.DirList to check if the SD card is there and ready.
Last updated: 2025-03-20
Post by otbeka on CAA File Handling: "Read only" error
CODESYS Forge
talk
(Post)
Hi, sorry for the late reply. After some investigation, the read-only error was being triggered by a FAT-fs filesystem panic on the kernel end, probably caused by unfinished write/reads causing corruption. I found this thread https://forge.codesys.com/forge/talk/Engineering/thread/e637d252b7/ which seems to give a solution of using SysProcess to send the 'sync' command to the console immediately following a write to prevent issues if power is lost or, in my case, if the unit is harshly power cycled. Indeed this seems to resolve the issue bar the worst possible edge cases.
Last updated: 2025-05-02
Post by buczekj on About CPU Loading
CODESYS Forge
talk
(Post)
This is a phenomenon that I have seen myself and with others. Texas instruments wrote an application note with this same issue. They noted with Codesys 3.5.19.10, that selecting CPU 1 as the EtherCAT task showed CPU spiking improvements over the performance of cores 0, 2, and 3. It appears to be linked to EtherCAT, are you configuring for use with distributed clocks? If so, I recommend choosing the 'Based on Input Reference' option. I have found it to reduce the CPU usage spike maximum slightly (see attached). See link to TI (also attached in case link breaks) https://www.ti.com/lit/an/spradh0/spradh0.pdf?ts=1723546111357
Last updated: 2025-07-01
Post by timvh on Codesys 3.5.18.60 – Application Loss and Persistent Data Corruption
CODESYS Forge
talk
(Post)
Which device do you use? Does this have persistent memory (e.g. NVRAM) available? Maybe first ask your PLC vendor about the possibilities and how they advice to use persistent variables? If you have no NVRAM available, CODESYS will store the variables in a file when the device gracefully shuts down. But on an abrupt power failure, this is not possible. If you have no NVRAM and you want to use persistent variables, then consider using a UPS. In this case when the power is lost, the UPS can keep the power on the PLC which then can gracefully shut down. Alternatively use the Persistence Manager to store the variable values in a file e.g. only on change. See: https://content.helpme-codesys.com/en/CODESYS%20Application%20Composer/ac_pm_overview.html
Last updated: 2025-08-26
Post by gseidel on Using an Axis of an Axis Group in Torque Conctrol
CODESYS Forge
talk
(Post)
Hi manuknecht, the axis group currently always writes the axis set torque values. If no dynamic model has been configured for the axis group, then the set torques are written to 0. The solution for your use case is to call SMC_GroupUpdate [0] before you call SMC_SetTorque on the axes. This way, the axis group will write 0 to the set torques in the call to SMC_GroupUpdate(), and SMC_SetTorque then will write the desired set torque. Best regards, Georg [0] https://content.helpme-codesys.com/en/libs/SM3_Robotics/Current/SM3_Robotics/POUs/AdministrativeConfiguration/Computation/SMC_GroupUpdate.html
Last updated: 2025-09-09
Post by reinholdgaylord on CAA File Handling: "Read only" error
CODESYS Forge
talk
(Post)
Hi, sorry for the late reply. After some investigation, the read-only error was being triggered by a FAT-fs filesystem panic on the kernel end, probably caused by unfinished write/reads causing corruption. I found this thread https://forge.codesys.com/forge/talk/Engineering/thread/e637d252b7/geometry dash lite which seems to give a solution of using SysProcess to send the 'sync' command to the console immediately following a write to prevent issues if power is lost or, in my case, if the unit is harshly power cycled. Indeed this seems to resolve the issue bar the worst possible edge cases. Thank you so much!
Last updated: 2025-09-25
Post by alexgooi on Licensing info not available.
CODESYS Forge
talk
(Post)
Thank you for the response, The empty softcontainer does not become visible unfortunately, but I think I can get that back to working. I think I'm misunderstanding something. You are pointing to the Softcontainer number and the ticket code, I thought that I needed to fill in the virtual control containers serial code is this a misunderstanding? And if this is indeed the case, how is the link between the server (softcontainer) and the Codesys control docker container made? If I have multiple Codesys docker containers running on the same docker server, how is the correct license distributed to the correct Codesys runtime container?
Last updated: 2025-10-02
Post by sean-barton on Function block method default arguments
CODESYS Forge
talk
(Post)
I have default arguments specified for function block methods but when calling a method, an error is produced requiring me to supply all the arguments despite there being default values. According to the online documentation, under section "Calling a Method" and subsection "argument passing" of the following link: https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_obj_method.html "Passing an argument for an input ... can be omitted ... for which a default or initial value was specified in the declaration..." I have found this to be the case for all Codesys IDEs I've used, 3.5.11, 3.5.16, 3.5.17, 3.5.19. Am I missing something?
Last updated: 2023-12-21
Post by macros8 on Translation - How to get text as reference in Frames translated?
CODESYS Forge
talk
(Post)
Hi, thanks for the link. Maybe I create elements in incorrect way. I always use Interface Editor to create variables which are used inside element (see pics). After that I place element in my visu and use Reference property to link variable or set the value. In that case the value of string is not transferred to general text list for translation as I mentioned before. Do I have to all properties which influence behavior of my element create in Frame configuration instead? What´s the difference to the Interface editor? Thanks a lot. M.
Last updated: 2024-01-02
Post by anderson on function block output
CODESYS Forge
talk
(Post)
I'm trying to make a CNC machine, but I'm having problems because the drive I'm using only has the option of communicating through digital inputs. In this case, I should use the CLP's digital outputs to communicate with it, correct? However, in the function blocks it seems that they are already pre-programmed and I didn't find the pulse output options, for example, so that I could associate a digital output from the PLC to connect this to the drive's pulse input. My question is: is it possible to associate the pulse output of the function block with a digital output of the PLC? and how to do this?
Last updated: 2024-01-05
Post by mp9876 on Device logon problem following fresh install
CODESYS Forge
talk
(Post)
Yes it had been the case I believe as I have seen that message regarding they were not the same. I had update the device though to match them and that still did not fix the problem. I gotta say I wanted to get out of that situation and attempted a lot of things and then I did two things at the same time that fixed my problem: Wiped the 64 bit version and installed the 32 bit version Installed latest SP20 I wish I knew which one of these actions fixed the problem but now I gotta catch up on this IDE learning; it's been quite a learning experience I have to say! Thank you very much for your time and advice; much appreciated!
Last updated: 2024-03-19
Post by jonasz on Discontinuity of A/B/C axis movement.
CODESYS Forge
talk
(Post)
Hi, My problem was related to the behavior of the modulo axis, but maybe you will find something useful from what I write. The solution lies in path processing. Codesys offers a G-code analysis tool. Insert a CNC object into the project. The CNC settings object will be added automatically. By inserting appropriate processing modules into the CNC settings object and parameterizing them, you can test the behavior of the axis. When the effect is satisfactory, remember to add the module from CNC settings in the correct order in the processing path. Each CNC machine case is different. You need to spend some time to get your design tailored like an Armani suit. Good luck.
Last updated: 2024-05-09
Post by paro on Modbus Client Request Not Processed
CODESYS Forge
talk
(Post)
Hi, works in my case if I increase the timeout! to_udint(t#100ms) -> 100 -> 100us.. FUNCTION_BLOCK MODBUS_master_example_ST VAR initDone : BOOL := FALSE; aIPAddress : ARRAY [0..3] OF BYTE := [127,0,0,1]; clientTcp: ModbusFB.ClientTcp; // buffer to read input registers aDataInputRegisters : ARRAY[0..9] OF UINT; // some client requests clientRequestReadInputRegisters: ModbusFB.ClientRequestReadInputRegisters; xExecute: BOOL; uistart: UINT := 100; udiTimeout1: UDINT; END_VAR IF NOT initDone THEN initDone := TRUE; // configure clientTcp clientTcp(aIPaddr:=aIPAddress, uiPort:=502, udiLogOptions := ModbusFB.LoggingOptions.All); // configure clientRequestReadInputRegisters clientRequestReadInputRegisters(rClient:=clientTcp, uiUnitId:=1, udiTimeout:=1000000); // 1sec END_IF // call the client FB's clientTcp(); clientRequestReadInputRegisters(rClient:=clientTcp,xExecute := xExecute AND NOT clientRequestReadInputRegisters.xBusy ,uiStartItem:=uistart, uiQuantity:=3, pData:=ADR(aDataInputRegisters[0]));
Last updated: 2024-05-30
Post by timo on String nach erlaubten/unerlaubten Zeichen durchsuchen
CODESYS Forge
talk
(Post)
Hallo, Ich bastele gerade an einer möglichst einfachen Möglichkeit mit der ich prüfen kann ob ein String Sonderzeichen enthält. Mein Ansatz ist ein ST FB mit einer Case Schrittkette. Ich vergleiche jedes Zeichen des Strings mit allen Zeichen eines vorher definierten Strings erlaubter Zeichen, der A-Z, a-z und 0-9 enthält und ggf angepasst werden kann, wenn ich weitere Zeichen erlaube. Leider wird meine j Zählervariable nicht richtig ausgeführt. Hat da jemand eine Idee? Oder gibt es eine einfachere Lösung/einen fertigen FB den ich mir anschauen kann? FUNCTION_BLOCK Sonderzeichen_Check VAR_INPUT inputString : STRING; // Zu prüfender String startCheck : BOOL; // Startsignal END_VAR VAR_OUTPUT ok : BOOL; // TRUE, wenn keine ungültigen Zeichen END_VAR VAR i : INT := 1; // Input-String Zähler j : INT := 1; // erlaubte Zeichen Zähler allowedChars: STRING := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; // Erlaubte Zeichen currentChar : STRING[1]; // Aktuelles Zeichen step : INT := 0; // Schritt END_VAR CASE step OF 0: // Warten auf Start IF startCheck THEN step := 10; END_IF 10: // Initialisierungen i := 1; j := 1; ok := TRUE; // Standard: ok step := 20; 20: // Durchgehen des Eingangs-Strings IF i <= LEN(inputString) THEN currentChar := MID(inputString, i, 1); // Aktuelles Zeichen step := 30; ELSE step := 70; // Alle Zeichen ok END_IF 30: // Durchgehen der erlaubten Zeichen IF j <= LEN(allowedChars) THEN step := 40; // Zu Schritt 40 ELSE step := 60; // Ungültiges Zeichen END_IF 40: // Vergleich IF currentChar = MID(allowedChars, j, 1) THEN i := i + 1; // Nächstes Zeichen im Input step := 20; ELSE j := j + 1; // Nächstes erlaubtes Zeichen step := 30; END_IF 60: // Ungültiges Zeichen ok := FALSE; // Setze auf FALSE step := 0; 70: // Alle Zeichen ok step := 0; END_CASE
Last updated: 2025-01-20
Post by otbeka on CAA File Handling: "Read only" error
CODESYS Forge
talk
(Post)
Hi, On CODESYS V3.5.19.50 I am using the latest 3S File Access library (CAA File & CAA Types) to save and retrieve configuration data from the User Data section of an SD card, via file called config.txt. The application reads the file to memory once upon initialisation, and then the only other operation is overwriting the file with the updated configuration whenever the user changes the settings. An issue is ocurring, seemingly randomly, where the config.txt file, and all surrounding directories, cannot be written to by the unit, returning a READ_ONLY_CAA error upon file open. This sometimes does not clear even after power-cycling the PLC several times, yet checking the file permissions with ls -l shows normal read, write, and execute access. I am wondering if this is caused by the PLC itself or by an issue in my application. I have included my CAA File handler function block (SD_Card_Bin(FB).txt) and any associated types/calls below: TYPE ConfigData : STRUCT Config : ARRAY[0..256] OF STRING(64); NumberOfStrings : UDINT; END_STRUCT END_TYPE TYPE Buffer : STRUCT Data : ARRAY[0..SIZEOF(ConfigData)] OF BYTE; DataLength : UDINT; END_STRUCT END_TYPE A case within my MAIN PRG: mode.WriteConfigDataToFile: VisuElems.CURRENTVISU := 'Screen_Write'; IF xModeHasChanged THEN iErrorCount := 0; iRoute := 0; END_IF CASE iRoute OF 0: inBuffer := ConfigData_To_Buffer(GVL.UnitData); xConfigError := FALSE; xDataConfigured := FALSE; iRoute := 1; 1 : //Read Data from Card SD_Card_Bin.strFileName :=FileName; SD_Card_Bin.iFileOperation := 2; SD_Card_Bin(xExecute :=TRUE, WriteBuffer := inBuffer, xDone =>xDataConfigured, xError=>xConfigError, strErrorCodes=>strError); IF xDataConfigured THEN SD_Card_Bin(xExecute :=FALSE); IF xConfigError THEN iRoute := 32767; ELSE iRoute :=100; END_IF END_IF 100: // The end bCurMode := mode.DisplayProcessVariables; 32767: // Config error iErrorCount := iErrorCount + 1; IF iErrorCount > 2 THEN // Repeats 3 times, if no progress abandons and returns error bCurMode := mode.WriteError; ELSE iRoute := 0; // Try again END_IF END_CASE I'd like to rule out my application as the cause of this bug - help via comments or criticism would be greatly appreciated.
Last updated: 2025-03-19
Post by open on How to create a stopwatch?
CODESYS Forge
talk
(Post)
Hi @ph0010421, I tried the program the TimeTaken is calculated when stop is triggered. I want the TimeTaken to be continuously calculated and counting when a BOOL variable is true. I tried to program this way: Declaration: PROGRAM PLC_PRG VAR bStartStop: BOOL := FALSE; // Start/Stop button bReset: BOOL := FALSE; // Reset button bRunning: BOOL := FALSE; // Flag indicating whether the stopwatch is running tStartTime: TIME; // Variable to store the start time tElapsedTime: TIME; // Variable to store the elapsed time END_VAR Implementation: // Main program logic IF bReset THEN // Reset button pressed, reset the stopwatch bRunning := FALSE; tElapsedTime := T#0s; ELSIF bStartStop THEN // Start/Stop button pressed, toggle the running state IF bRunning THEN // Stop the stopwatch bRunning := FALSE; ELSE // Start the stopwatch bRunning := TRUE; tStartTime := tElapsedTime; END_IF; END_IF // Update the elapsed time when the stopwatch is running IF bRunning THEN tElapsedTime := tElapsedTime + T#1s; // Adjust the time increment as needed END_IF However counting of the seconds is not accurate. I tried changing the main task cycle time interval to 1000ms. The counting of seconds become slower. (see attached) Please help
Last updated: 2023-12-08
Post by wbj0t on What the right way to update TCP/COM slave device holding registers
CODESYS Forge
talk
(Post)
Hi all :) I have an plc. This plc has option to be as slave device. There are TCP -> Serial Slave Device and COM -> Serial Slave Device. There are 4096 ModBus holding registers with mark "internal modify" for the both devices above. So, COM Slave has 4096 registers and TCP Slave has 4096 registers. And, finally, I have an ARRAY[0..4095] OF WORD. This array glued with COM Slave and TCP slave. Yes, I need plc's opportunity to be communication both TCP and COM ways for the same registers. For example, the next task structure: * TASK_0: 1. pou_READ_Registers 2. pou_0 3. pou_1 4. ... 5. pou_N 6. pou_WRITE_Registers At the first pou I read registers for the other pous, after job we have sort of state of the plc. At the last pou (6) we write modified registers. It is a good scenario: some one wrote registers for the job, after job we save these (modified) registers. But, what if registers wrote between 1 and 6 pou by operator, for example, at the 3 pou -> the last pou 'pou_WRITE' will rewrite this request from operator. What the right way to work with this logic? Thanks you.
Last updated: 2024-07-01
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.