Post by pppn on Issue with Forward Open Connections in Ethernet/IP Protocol Stack in Codesys
CODESYS Forge
talk
(Post)
Hello, I am facing an issue with my Ethernet-based project in Codesys. My product was functioning well until I modified the protocol stack and uploaded it to my device. Here are the details of my problem: Project Setup: I am working on an Ethernet-based project to test my product. The project was running without issues before modifying the protocol stack. Issue: After modifying the protocol stack and uploading it to my device, I am encountering an error in Codesys related to the forward open connections. Error status: connection failure, extended: connection in use or duplicate forward open. According to the Ethernet/IP protocol in codesys, there are three forward open connections that need to be established. The first two connections are opening without any issues. The third connection, which is an input-only connection, is causing problems. The error message indicates that the connection is already open. Debugging Attempts: I have extensively debugged the protocol stack and found no issues. The product works well when tested with EIP tools but not with Codesys. Exclusive owner connections are working correctly, and only the input-only connection is problematic. Wireshark Traces: Wireshark traces show that the third connection attempts to open but reports that it is already open. Steps to Reproduce: Modify the protocol stack and upload it to the device. Attempt to establish three forward open connections in Codesys. Observe the error on the third connection (input-only). Request: I would appreciate any suggestions or guidance on how to resolve this issue. If there are specific settings or configurations in Codesys that I need to check, please let me know. Additionally, if there are known issues or workarounds related to this problem, I would be grateful for the information. Attachments: Wireshark traces showing the connection attempts and errors Screenshots of the error messages in Codesys codesys version: CODESYS V3.5 SP16 Patch 3 + 64 bit
Last updated: 2024-06-25
Post by pppn on Issue with Forward Open Connections in Ethernet/IP Protocol Stack in Codesys
CODESYS Forge
talk
(Post)
Hello, I am facing an issue with my Ethernet-based project in Codesys. My product was functioning well until I modified the protocol stack and uploaded it to my device. Here are the details of my problem: Project Setup: I am working on an Ethernet-based project to test my product. The project was running without issues before modifying the protocol stack. Issue: After modifying the protocol stack and uploading it to my device, I am encountering an error in Codesys related to the forward open connections. Error status: connection failure, extended: connection in use or duplicate forward open. According to the Ethernet/IP protocol, there are three forward open connections that need to be established. The first two connections are opening without any issues. The third connection, which is an input-only connection, is causing problems. The error message indicates that the connection is already open. Debugging Attempts: I have extensively debugged the protocol stack and found no issues. The product works well when tested with EIP tools but not with Codesys. Exclusive owner connections are working correctly, and only the input-only connection is problematic. Wireshark Traces: Wireshark traces show that the third connection attempts to open but reports that it is already open. Steps to Reproduce: Modify the protocol stack and upload it to the device. Attempt to establish three forward open connections in Codesys. Observe the error on the third connection (input-only). Request: I would appreciate any suggestions or guidance on how to resolve this issue. If there are specific settings or configurations in Codesys that I need to check, please let me know. Additionally, if there are known issues or workarounds related to this problem, I would be grateful for the information. Attachments: Wireshark traces showing the connection attempts and errors Screenshots of the error messages in Codesys codesys version: CODESYS V3.5 SP16 Patch 3 + 64 bit
Last updated: 2024-06-25
Post by rossanoparis on After un upgrade of "CODESYS Control for Raspberry Pi MC SL" from v4.7 to v4.9 SysFileOpen function stopped working
CODESYS Forge
talk
(Post)
Hello at all. After un upgrade of "CODESYS Control for Raspberry Pi MC SL" from v4.7 to v4.9 SysFileOpen function stopped working. I'm not able to read or write files from the PLC application. Before this upgrade all worked fine. I've read this thread [ https://forge.codesys.com/forge/talk/Engineering/thread/3da9ded84e/ ] Despite I followed that indications I couldn't get my code working again. Perhaps I'm missing something or I didn't understand how to use placeholders at all. Is there a different syntax to use for "SysFileOpen" in order to use placeholders? Thanks in advance for your help. Information Compiler: CODESYS V3.5 SP19 Patch 2 Runtime: codesyscontrol 4.9.0 HW: KUNBUS RevPi Connect S Below the paths I want to access (The entire CODESYSControl_User.cfg file is attached) [SysFile] PlaceholderFilePath.1=/home/pi/hpca/bin, $hpcabin$ PlaceholderFilePath.2=/home/pi/hpca/cfg, $hpcacfg$ PlaceholderFilePath.3=/home/pi/hpca/logs, $hpcalogs$ PlaceholderFilePath.4=/home/pi/hpca/resources, $hpcares$
Last updated: 2023-08-22
Post by trusty-squire on CNC - How to manipulate SMC_GeoInfo objects
CODESYS Forge
talk
(Post)
I have an application using CNC GCode interpolation, but I need to modify the GCode provided to the PLC based on certain parameters. I am currently attempting to modify the SMC_GeoInfo objects in the SMC_OutQueue using the code below. Note that all the other code is pretty standard and works fine, but when I add the below it errors. PROGRAM TEST VAR fbReadCncFile : SMC_ReadNCFile2; fbCncInterpreter : SMC_NCInterpreter; arrCncInterpreter : ARRAY[1..99] OF SMC_GeoInfo; pGeoInfo: POINTER TO SMC_GeoInfo; giGeoInfo: SMC_GeoInfo; // ... END_VAR // ... Some code here in order to read CNC file using SMC_ReadNCFile2 and provide to SMC_NCInterpreter pGeoInfo := SMC_GetObj(poq:=ADR(fbCncInterpreter.poqDataOut), n:=1); IF pGeoInfo <> 0 THEN giGeoInfo := pGeoInfo^; // Do some manipulation here, then update the queue at the same position MC_SetObj(poq:=ADR(fbCncInterpreter.poqDataOut) , n:=0 , pgi:=ADR(giGeoInfo) ); END_IF It throws an error when I get to the line giGeoInfo := pGeoInfo^; Error: EXCEPTION [AccessViolation] occured: App=[Sim.Device.Application], Task=[PathTask] How do I use SMC_GetObj and access the data? It creates a pointer with the value as shown in the photo, but all the dereferenced values say dereference of invalid pointer.
Last updated: 2024-07-26
Post by jmfernandes on OpenDir always in error
CODESYS Forge
talk
(Post)
Hello I'm trying to use DirOpen to access a directory where then I can read/list the files inside. But I can't list any files because DirOpen.xError is always true. In eError the message is this: " ERROR_UNKNOWN Local library error ID (0: no error; 5101: time out)**** " I have in the file explorer the path 'C:\CodesysTest\Aluminium' and to make sure I also created in the plc a folder to 'prj/Recipes/Aluminium'. I tried using the different paths, but in both it happens the same thing.Inside the folder Aluminium there is two csv files, that I want to list. I added in the library manager CAA Files and CAA Types. I am using the example of https://content.helpme-codesys.com/en/libs/CAA%20File/Current/Examples.html#directory but not matter what I do, I can't get the list the names of the files. What am I missing?
Last updated: 2024-07-31
Post by bjarne-pagaard on Communication between applications on same device/controller/runtime (Win RTE 3.5.20.20)
CODESYS Forge
talk
(Post)
Hi, I would like to divide a project into multiple applications - as a minimum: one handling visualization and Alarm Manager, one handling I/O and plant control logic. But how to exchange variables between the applications? What have you done to get such a solution? In versions 3.5.19 and earlier, you can have Child applications, where the children can access a GVL in the Parent application. Children apps is no longer possible in 3.5.20 - but you can have 'sibling' apps - Several apps directly under PLC Logic, that is. But how do they best communicate? The Communication Manager / Data Sources Manager is sort of possible via OPC UA, but it seems like overkill and with some limitations - for example no ARRAY OF STRUCT possible this way. If you have separate devices in your project, you can exchange data via 'CODESYS ApplicationV3', but not other applications in the same device (see attachment Datasources.png). You can do it via 'Select the project type'->'Other Project' and select the same project file, but this leads to crashing the Development system when working with the variables afterwards. It would be great to hear your thoughts / experiences on this topic - Bjarne
Last updated: 2024-09-27
Post by sbhaskarla on WebVisu File Transfer Error
CODESYS Forge
talk
(Post)
Iβm encountering an issue when downloading CSV files via the WebVisu button input config -> file-transfer option: β’ Custom directory: /plcdata/csv_logs/filename.csv o Error: Error 4 β Error during file transfer β’ Sandbox directory: /var/opt/codesys/PlcLogic/plcdata/csv_logs/filename.csv o Result: Download succeeds without error. Actions taken so far: 1. Added /plcdata/csv_logs to codesyscontrol.cfg (see attached). 2. Enabled file-transfer services in codesyscontrol_user.cfg (see attached). 3. Confirmed that the PLC writes CSV files correctly to /plcdata/csv_logs/. Despite these settings, WebVisu still returns Error when accessing the custom path 1. Using the placeholder file path '$$CSVLOGS$$/filename.csv' and it returns Error 6. 2. Using the literal path /plcdata/csv_logs/filename.csv and it returns Error 4 Could someone please help me determine what additional configuration or troubleshooting steps are required to serve files from /plcdata/csv_logs/? Please find screenshots attached for better understanding and I have also attached the config files
Last updated: 2025-06-13
Post by rabaggett on Reading Named Pipes in Linux Is there a better way?
CODESYS Forge
talk
(Post)
I have a Python program that will handle things in my application such as VISA over IP and Telnet control of instruments. I want the main control and HMI in Codesys. My problem is communication between the two. I have looked at several ways to accomplish this, and settled on having the Python program create two named pipes, one to send information to Codesys, and one for Codesys to send information to Python. The information would be packetized with \n for end of packet.. Seems simple. I think the named pipes method should work, but file reading in Codesys using the CAA file library starts to get difficult when the file is never ending, as in this case. Before I spend too much time making something that may be fundamentally flawed I want to ask. Is there a better way? Is there a way to read the file 'one line at a time' which might solve my never ending file problem? Thanks!
Last updated: 2024-05-09
Post by sigurdrb on send appliaction files to wago plc (codesys 3.5) via ssh
CODESYS Forge
talk
(Post)
Hi, I was hoping I could send the two files "application.app" and "application.crc" directly to the directory "/home/codesys/PlcLogic/Application" instead of logging into the device with codesys, downloading the program to the controller and then do the "create boot application", so it will reboot with the correct program running. I think i also need to edit the file "eRUNTIME.cfg" located in the "/home/codesys/ folder, because when I create the boot application from the codesys IDE, these lines are added to the file: [CmpApp] Application.1 = Application [SysFileMap] /home/codesys/PlcLogic/Application/Application.app=0x212520, 0x2DBC747E, 2DBC747E.app I think the "eRUNTIME.cfg" file is the same as CODESYSControl.cfg I also dont know the purpose of the hexadecimal numbers etc. that is generated. When I tried to replicate what codesys was doing, I placed the same files in the same folder as when codesys generated the boot file. And also added the lines in the eRUNTIME.cfg file: [CmpApp] Application.1 = Application [SysFileMap] /home/codesys/PlcLogic/Application/Application.app The controller did not boot up with any program, so my method did not work at all. I guess these lines tells the controller to run an application and where to find it? Could any of you help me with the best way to get the compiled program to the controller without using codesys or wago-software?
Last updated: 2024-05-28
Post by rkohser on Scripted Git clone / checkout being blocked by "Project Environment" popup
CODESYS Forge
talk
(Post)
Hi, I am trying to build a CI/CD pipeline around our codesys projects. The only entry point if the git url and branch, as we do not put our project file under source control, so we needed to find a way to git clone from the python scripting engine. This is currently how we do this : system.commands["Git", "Clone"].execute( "ProjectLocation=" + project_dir, "ProjectName=" + project_file_name, "RemoteUrl=" + project_git_remote_url, "GitProjectStoragePath=" + project_git_local_dir, ) system.commands["Git", "Checkout", "Branch"].execute( "PrimaryProjectHandle=0", "BranchName=origin/" + project_git_branch ) This works fine, except that, depending on the environment and the project, the "Project Environment" popup gets displayed to suggest for some updates, and waits for a user interaction, even with the "--noUI" flag injected as parameter. I investigated the VersionUpdateFlags, but the problem is that the git clone is an atomic operation that clones and directly opens the generated project without the possibility to inject any updateFlags argument (only used in the ScripProjects.open() function. I also tried to simulate some keyboard events acknowledge the window from script but I did not find the right location for the SendKeys statement, I think before the git clone call is too early and after is too late. So I am wondering if there would be some other way to do that. Is there some more proper scripting api for the git add on ? Is there a global configuration of the VersionUpdateFlags that would allow the popup to be disabled outside from any project context ? Is there some way to automatically acknowledge this kind of messages in a "--noUI" mode ? What do you suggest ? Thanks for your help, Roland Edit : I managed to solve my problem by following these steps in my pipeline : - create a template of a project and opt file preconfigured not to open the popup - open this project - initialize an empty git repo - add the remote, fetch and checkout the needed branch -> no popup is displayed, hourra Edit2 : The initial question was raised on a CODESYS V3.5 SP18 Patch 2 profile. Since CODESYS 3.5.19.30 a scripting API is available for Codesys Git that allows cloning a project with the support of VersionUpdateFlags https://content.helpme-codesys.com/en/CODESYS%20Git/_git_using_scripting.html
Last updated: 2024-01-19
Post by vformanek on How to access files correctly in Linux
CODESYS Forge
talk
(Post)
Hello, its still not quite clear to me how to deal with the PLCLogic directory in linux. I have the directory right here: I need to correctly access the files in this folder through CODESYSControl.cfg. Here is my CODESYSControl.cfg where on the first lines there are a few lines: [SysFile] FilePath.1=/etc/, 3S.dat PlcLogicPrefix=1 That means that if I am going to use relative paths its going to go to from the PLCLogic directory right ? For example here: Whitch paths should I use. I cant seem to successfully run any of these aproaches ...
Last updated: 2023-09-08
Post by danielbeers on Automation Server + Pi Gateway + PLC w/ CAN
CODESYS Forge
talk
(Post)
Hello, I have a project using some EPEC PLC's. Some of them are programmable using Ethernet and some use CAN. We currently have a Raspberry Pi that is acting as a gateway to the Codesys Automation Server and is successfully working for the PLC's communicating over ethernet. I am trying to achieve a similar result for the PLC's that have only CAN access. I have PEAKCan drivers on the Pi, and can successfully send/receive messages. But the Gateway does not recognise the PLC when scanned from the Automation server online. Is there a library or service that exists to translate the CAN messaging, to the Edge Gateway, and be able to achieve remote access with the Automation Server? Or is this not possible without creating something custom? Cheers, Daniel
Last updated: 2024-09-22
Post by timvh on Modbus TCP & RTU with Control for Linux SL
CODESYS Forge
talk
(Post)
It seems you have 2 network interfaces. Did you try eth1? Did you already configure the IP address for this interface in Linux? If yes, then maybe undo this. - or only set eth0 in the Nic configuration without anything else (so no IP address, because this is already set in Linux). For more information about the Nic settings, see (probably already read it?): https://content.helpme-codesys.com/en/CODESYS%20Control/_rtsl_obj_deploy_control_sl_configuration.html PS, if you only want to run CODESYS Control SL, you don't necessarily need the Virtual PLC variant. You could also install and run the CODESYS Control SL Runtime in the Host operating system. This way you should also be able to access the serial port and directly access all ethernet ports. Maybe this is easier?
Last updated: 2024-10-23
Post by davidbo on All the things needed for anonymous login to OPC UA
CODESYS Forge
talk
(Post)
I thought I knew what I am doing, but something is missing what? From Device-Communication Settings select from drop down menu "Device" Select entry "Change Runtime Security Policy" Check the "Allow anonymous login" Select "Symbol Configuration" in your application In settings check "Support for OPC UA features" Check some of the values you want in your set Press the build button in the "Symbol Configuration" Press the button "Configure Symbol Rights" Make sure that Anonymous_OPCUAServer has access right to your "default set" From Device-Communication Settings select "Access Rights" in RemoteConnections-OPCUAServer Anonymous_OPCUAServer should be given modify and view rights I suppose. I can connect with UaExpert but I cannot see my Application or browse my values. What is missing?
Last updated: 2025-09-10
Post by ac-spr on Runtime variable that indicates a user is online to the code
CODESYS Forge
talk
(Post)
Looking to access a variable at runtime that indicates a user is online to the code. essentially want to use this value to feedback to the user on the HMI. we use turck and bosch rexroth devices if this information helps. I was hoping there was a variable at the application level, or a library that could be used but I was unable to find anything. I know there's a pop up when you try to login/ go online to the code when a user is already logged in, so the system does provide an indication that it knows already online, but has no access to a value from what I can see. Any help is appreciated
Last updated: 2024-04-22
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 grant32 on Codesys ARTI .XML file not creating but working.
CODESYS Forge
talk
(Post)
Hello, I am working on a project with a Beijer Nexto Xpress. I have done this a few times with no issues but for some reason this time when creating a Symbol Configuration the ARTI .xml file is not being created in the Project Folder. However when manually putting the ARTI tags in the HMI program they are connected and work. So I am just not getting the file to import all the tags. I can do it manually which is fine but no matter where the project folder is saved this occurs. Anyone experienced this? Did not see another forum on it.
Last updated: 2023-10-27
Post by pierre on difference between stub file and source file in scriptengine
CODESYS Forge
talk
(Post)
I included the stub files of scriptengine (codesys python api) in a directory scriptengine of a project. I tried to include librarymanager like that: from scriptengine import librarymanager visual studio code detected an error. It said librarmanager could not be found. Indeed in the stub file, this was library_manager. But if I change it in my code, the plugin doesn t work anymore. I found an easy solution to this problem. I ve just changed the copied stub files.(library_manager -> librarymanager) But I think it would be better if you update it yourself in the future.
Last updated: 2024-09-20
Post by pierre on difference between stub file and source file in scriptengine
CODESYS Forge
talk
(Post)
I included the stub files of scriptengine (codesys python api) in a directory scriptengine of a project. I tried to include librarymanager like that: from scriptengine import librarymanager visual studio code detected an error. It said librarmanager could not be found. Indeed in the stub file, this was library_manager. But if I change it in my code, the plugin doesn t work anymore. I found an easy solution to this problem. I ve just changed the copied stub files.(library_manager -> librarymanager) But I think it would be better if you update it yourself in the future.
Last updated: 2024-09-20
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 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 kut69 on Retain / Persistent Variables in Codesys for Raspberry Pi
CODESYS Forge
talk
(Post)
Hi, I am interested in details about the .ret file in the filesystem. I have already a project where the file is used (write on demand, read by start) and I want to share it as 'default input' for test devices using the identical application. Opening the .ret file content in a hex editor (I only use a single string retain var) I asked myself what the meaning of the first 24 bytes is. It neither contains a handle to the application nor a reference to the variable. Is this maybe a timestamp? Or a CRC/checksum? Regards, Thomas
Last updated: 2025-05-19
Post by taywinkel on Virtual Runtime CSV Utility Error
CODESYS Forge
talk
(Post)
Hello, I am having trouble figuring out the proper location for my virtual runtime to create a .CSV file. No matter the file location I set, I get error 14 (CANNOT_OPEN_DIRECTORY). I have tried multiple different file paths ('/', '/var/opt/codesysvcontrol/PlcLogic', '/var/opt/codesys/'). I understand that there is only certain places that Codesys can read/write. I am also running this virtual runtime in a Podman container. Does anyone know what the location should be? I attached the archive I was using, a project that tests CSV capability that I borrowed from someone else. Thanks!
Last updated: 2025-09-03
Post by arjunk on How to correctly create a device descriptor (.devdesc.xml) for a custom Linux ARM64 PLC in CODESYS 3.5.21.20?
CODESYS Forge
talk
(Post)
Iβm trying to integrate a custom PLC into CODESYS so that it appears under the Device section. From what I understand, this requires a .devdesc.xml device descriptor file. I attempted to create the XML manually, but whenever I try to install it in order to generate a .package file, CODESYS crashes. CODESYS version: 3.5.21.20 Target PLC: Linux ARM64βbased My questions are: Is there an official or easier way to generate a valid .devdesc.xml file for a custom PLC? Are there tools, templates, or examples that can help ensure the XML is structured correctly and wonβt cause crashes? For Linux ARM64 targets specifically, is there a recommended starting point (e.g., modifying an existing device descriptor)? Any guidance or best practices for creating and packaging custom device descriptors would be greatly appreciated.
Last updated: 2025-10-06
Post by francescoc on Logger in ms
CODESYS Forge
talk
(Post)
Hi, I cannot find any documentation regarding the codesys configuration file. I modified this part to have log files saved to disk: [CmpLog] Logger.0.Name=LOGS/PlcLog Logger.0.Filter=0xFFFFFFFF Logger.0.Enable=1 Logger.0.MaxEntries=20000 Logger.0.MaxFileSize=5000 Logger.0.MaxFiles=10 Logger.0.Backend.0.ClassId=0x0000010B ;sends logger messages to SysOut Logger.0.Backend.1.ClassId=0x00000104 ;writes logger messages in a file Logger.0.Backend.2.ClassId=0x00000135 ;sends logger messages as UDP syslog Logger.0.Type=0x314;Set the timestamp to RTC ;Logger.1.Name=/tmp/CommLog ;Logger.1.Enable=1 I need to have milliseconds in the timestamp as well. What value should I use instead of 0x314? Is there any documentation regarding this file? Thank you
Last updated: 2024-03-16
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.