Post by francesco86 on Script python for write in a file Project information
CODESYS Forge
talk
(Post)
Dear all, My python script can read a Codesys project and save in file the different POU, but the problem is that I don't able to read the project info from the obj list. Following of this message there is my python script. Can you help my? Best regards Francesco # encoding:utf-8 # We enable the new python 3 print syntax from __future__ import print_function import os import shutil import time import sys from datetime import datetime print("--- Saving files in the project: ---") print("sys.argv: ", len(sys.argv), " elements:") for arg in sys.argv: print(" - ", arg) if (len(sys.argv)>1): folderExportName = sys.argv[1] print(" folderExportName: ", folderExportName) exportPath = sys.argv[2]+ sys.argv[3]+ "\\"+ sys.argv[1] print(" File path: ", exportPath) # git has_repo=False #save_folder=r'E:\Tmp\ControlPlugins\ControlPlugins\Export' save_folder = exportPath if not os.path.exists(save_folder): os.makedirs(save_folder) else: a=os.listdir(save_folder) for f in a: if not f.startswith("."): sub_path= os.path.join(save_folder,f) if os.path.isdir(sub_path): shutil.rmtree(sub_path) else: os.remove(sub_path) elif f==".git": has_repo=True info={} type_dist={ '792f2eb6-721e-4e64-ba20-bc98351056db':'pm', #property method '2db5746d-d284-4425-9f7f-2663a34b0ebc':'dut', #dut 'adb5cb65-8e1d-4a00-b70a-375ea27582f3':'lib', #lib manager 'f89f7675-27f1-46b3-8abb-b7da8e774ffd':'m', #method no ret '8ac092e5-3128-4e26-9e7e-11016c6684f2':'act', #action '6f9dac99-8de1-4efc-8465-68ac443b7d08':'pou', #pou '6654496c-404d-479a-aad2-8551054e5f1e':'itf', #interface '738bea1e-99bb-4f04-90bb-a7a567e74e3a':'', #folder 'ffbfa93a-b94d-45fc-a329-229860183b1d':'gvl', #global var '5a3b8626-d3e9-4f37-98b5-66420063d91e':'prop', #property '2bef0454-1bd3-412a-ac2c-af0f31dbc40f':'tl', #textlist '63784cbb-9ba0-45e6-9d69-babf3f040511':'gtl', #global textlist '225bfe47-7336-4dbc-9419-4105a7c831fa':'dev', #device 'ae1de277-a207-4a28-9efb-456c06bd52f3':'tc', #task configuration 'f8a58466-d7f6-439f-bbb8-d4600e41d099':'m', #method with ret '261bd6e6-249c-4232-bb6f-84c2fbeef430':'gvl', #gvl_Persistent '98a2708a-9b18-4f31-82ed-a1465b24fa2d':'task', #task '085afe48-c5d8-4ea5-ab0d-b35701fa6009':'progInfo'#project information }; def save(text,path,name,tp): if not tp: tp='' else: tp='.'+tp+'.txt' with open(os.path.join(path,name+tp),'w') as f: f.write(text.encode('utf-8')) def print_tree(treeobj, depth, path): global info #record current Path curpath=path isfolder=False t='' #text tp='' #type # get object name name = treeobj.get_name(False) id = treeobj.type.ToString() if id in type_dist: tp = type_dist[treeobj.type.ToString()] #Print all type of objects #print("--Name: ", tp) else: info[id]=name if treeobj.is_device: deviceid = treeobj.get_device_identification() t = 'type='+str(deviceid.type) +'\nid=' +str(deviceid.id) + '\nver='+ str(deviceid.version) if tp == "progInfo": print("-- There is prog info, ", tp) print("-- It has textual declaration: , ", treeobj.has_textual_declaration) print("-- It has textual implementation: , ", treeobj.has_textual_implementation) print("-- It is folder: , ", treeobj.is_folder) print("-- It is children: , ", treeobj.get_children(False)) print("-- It is children len: , ", len(treeobj.get_children(False))) print("-- It is progInfo type: , ", type(treeobj.ScriptProject)) #for child in treeobj.get_children(False): # print_tree(child, depth+1,curpath) try: if treeobj.is_folder : #system.ui.prompt('folder:'+u, PromptChoice.YesNo, PromptResult.Yes) isfolder=true pass except: pass if treeobj.has_textual_declaration : t=t+'(*#-#-#-#-#-#-#-#-#-#---Declaration---#-#-#-#-#-#-#-#-#-#-#-#-#*)\r\n' a=treeobj.textual_declaration t=t+a.text if treeobj.has_textual_implementation: t=t+'(*#-#-#-#-#-#-#-#-#-#---Implementation---#-#-#-#-#-#-#-#-#-#-#-#-#*)\r\n' a=treeobj.textual_implementation t=t+a.text if treeobj.has_textual_declaration and not treeobj.has_textual_implementation: t=t+'(*#-#-#-#-#-#-#-#-#-#---NOT Implementation visible---#-#-#-#-#-#-#-#-#-#-#-#-#*)\r\n' if treeobj.is_task : exports=[treeobj] projects.primary.export_native(exports,os.path.join(curpath,name+'.task')) if treeobj.is_libman: exports=[treeobj] projects.primary.export_native(exports,os.path.join(curpath,name+'.lib')) if treeobj.is_textlist: treeobj.export(os.path.join(curpath,name+'.tl')) children = treeobj.get_children(False) if children or isfolder: if tp: curpath=os.path.join(curpath,name+'.'+tp) else: curpath=os.path.join(curpath,name) if not os.path.exists(curpath): os.makedirs(curpath) if t: save(t,curpath,name,tp) for child in treeobj.get_children(False): print_tree(child, depth+1,curpath) for obj in projects.primary.get_children(): print_tree(obj,0,save_folder) with open(os.path.join(save_folder,'ExportInfo.txt'),'w') as f: now = datetime.now() infTimeExecution = now.strftime("%Y-%m-%d %H:%M:%S") f.write("Export date and time: "+infTimeExecution + "\r\n" + str(info)) print("--- Script finished. ---") #system.ui.info('save ok') projects.primary.close()
Last updated: 2024-04-30
Post by ofey on EtherCAT fieldbus
CODESYS Forge
talk
(Post)
Hi, everyone! I'm trying to set up a PLC controller and a connection to an EtherCAT slave device in Codesys. I want to create a flexible program that I can upload to multiple controllers with different remote IO connected (same program). On one plant i may have 5 AI-cards and 3 DO-cards, and on another I may have 4 AI-cards and 2 DO-cards. For not needing to maintain several different programs wih different devices defined in the program (one for each set up) I thought that using a remote IO would make it easier having a single program. That way I could refer to different memory addresses instead of predefined slots/channels and IO's, that would give me errors if there was a different IO on the plant than what the program expected. When I tried setting up the etherCAT master, I saw that I had to define the etherCAT slave devices with the different IO'cards for me to be able to refer to the memory addresses in a PRG. Exactly what I was trying to avoid. My setup is something like a program that can handle 16 separate pump controls. In a year maybe 6 plans get deployed, and depending on how large the project is, the number of pumps can vary between 4 and 16. And the managers dont want to have IO's for all 16 pumps on every cabinet, and I dont want to maintain 16 separate projects files in case of updates etc. I thought the best way to tackle this was having a single project that read/write data to the different pump IO's by remote IO (fieldbus ethercat) addresses. And the number of pump controls are activated by an external GUI. If pump 1-6 is activated by the GUI, then the PLC-program tries to read/write input/outputs from predefined addresses for the expected IO's. My test setup is a PFC200 WAGO controller and a EtherCAT fieldbus coupler (750-354) with some IO. I hope I didn't explain this too horrible, and if there is a more easy and elegant solution for this challenge I appreciate a feedback on this.
Last updated: 2024-04-08
Post by worker69 on Alarmgruppenvorlage kann über Kontextmenü keine weitere Latch Variable hinzugefügt werden
CODESYS Forge
talk
(Post)
Hallo, ich habe das problem, dass ich in einer Alarmgruppenvorlage keine wietere LATCh Variable hinzufügen kann. Wenn ich dies über das Kontextmenü versuche, dann erscheint folgende Fehlermeldung "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt". Ich verwende Codesys V3.5.19 P0 und 23.5.19 P7 Was mache ich falsch
Last updated: 2026-01-05
Post by timvh on VisuElems.CurrentUserGroupId is not stable
CODESYS Forge
talk
(Post)
I'm not sure what you are trying to do, but getting the CurrentUserGroupID like this will not work, because there could be multiple Visualization Clients and each can have a different user that is logged in. Also when you go online with CODESYS and open an Visualization, this is counted as a client. Probably this is the reason you see it changing. What you can to is "iterate" over all clients and then see which user is logged in on which visualization Client. For this you need to add the Visu Utils library to the project and call the FbIterateClients. See https://content.helpme-codesys.com/en/libs/Visu%20Utils/4.4.0.0/VisuUtils/VisuActionUtilities/Function-Blocks/FbIterateClients.html fbClientIteration( xExecute := x_Execute, itfClientFilter := VU.Globals.AllClients, itfIterationCallback := fbIterator, xDone => x_Done, xBusy => x_Busy, xError => x_Error, eError => e_Error); The fbIterator, in the example above, should be an instance of an FB which you have created yourself and this must implement VU.IVisualizationClientIteration. For example: FUNCTION_BLOCK FB_ITERATOR IMPLEMENTS VU.IVisualizationClientIteration Then automatically the corresponding methods will be called. In the HandleClient Method, you will get an interface to the client(s) and then you can get the current user through this interface: itfClient.UserGroupId You can also get the UserName: itfClient.UserName
Last updated: 2023-11-14
Post by baott569 on CODESYS OPC UA Security: HMI Client Not Receiving Server Certificate
CODESYS Forge
talk
(Post)
Hello everyone, I am currently using OPC UA in CODESYS with the security mode BASIC256SHA256 – Signed and Encrypted. The OPC UA Server is running on an RTE CX device, and the HMI is running on another computer. I have reviewed many CODESYS documents and successfully established communication when the security mode is set to None with Anonymous login. However, when security is enabled, the server does not provide its certificate for the CODESYS HMI client to trust. Interestingly, the client can send its certificate to the server, and UAExpert works normally, but the CODESYS HMI client does not receive the server certificate. Can anyone help clarify what I might be missing? I have been stuck on this issue for three days. If I missed or misconfigured any step, please let me know. I believe I am stuck at step 15 in the following CODESYS guide: Encrypting the Communication of a Data Source OPC UA Client https://content.helpme-codesys.com/en/CODESYS%20Communication/_cds_encrypt_communication_data_sources_opc_ua_client.html Thank you very much.
Last updated: 2026-01-06
Post by baott569 on CODESYS OPC UA Security: HMI Client Not Receiving Server Certificate
CODESYS Forge
talk
(Post)
Hello everyone, I am currently using OPC UA in CODESYS with the security mode BASIC256SHA256 – Signed and Encrypted. The OPC UA Server is running on an RTE CX device, and the HMI is running on another computer. I have reviewed many CODESYS documents and successfully established communication when the security mode is set to None with Anonymous login. However, when security is enabled, the server does not provide its certificate for the CODESYS HMI client to trust. Interestingly, the client can send its certificate to the server, and UAExpert works normally, but the CODESYS HMI client does not receive the server certificate. Can anyone help clarify what I might be missing? I have been stuck on this issue for three days. If I missed or misconfigured any step, please let me know. I believe I am stuck at step 15 in the following CODESYS guide: Encrypting the Communication of a Data Source OPC UA Client https://content.helpme-codesys.com/en/CODESYS%20Communication/_cds_encrypt_communication_data_sources_opc_ua_client.html Thank you very much.
Last updated: 2026-01-06
Post by jinlee on Dynamic I/Os Mapping
CODESYS Forge
talk
(Post)
Hi guys, Recently, I am working at the Dynamic I/Os mapping feature in Ecockpit or Codesys v3.5. I have been trying the libraries. However, it looks like it will not work as I wanted. I want to build the PLC which can detect all the I/Os itself and from there, I can do something on these channels. For example, the current setup is one digital input card, one digital output card and one analogue input card. Then, I want to add one more card into the setup e.g. one more digital input. Then, wago screen can detect this and we can assign them to tasks for example to control digital output. May I know is it possible ? Kind regards
Last updated: 2023-08-18
Post by hfelek on TargetVisu for Linux Package on runtime 4.12.0.0 install error due to Qt dependencies.
CODESYS Forge
talk
(Post)
Hi, I am trying to make my runtime support TargetViso on 4.12.0.0 runtime. First when I tried to install package I got error due to missing libraries that are generated through qt-base. After compiling and installing related qt lib when I tried to install the package, I didnt get lib dependencies error but I got another error: [ERROR] The installed QT Version does not meet the minimum required version 6.4.2. Please install version 6.4.2 or higher and try again. When I check Qt version I get the following response QMake version 3.1 Using Qt version 6.5.0 in /usr/local/qt6/lib. I tried with Qt version 6.9.0 but that didn't help. Any idea on what coudl be the reason. When I looked for codesys related processes the related libraries were included within environment.
Last updated: 2024-08-27
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 timvh on How to manage soft container licenses for (remote) multi units?
CODESYS Forge
talk
(Post)
You need to activate an individual license (ticket number) for each device. THe hardware of each device is unique, so you cannot copy a soft container from one device to another. This license can be installed in a local (wibu - codemeter) soft container, or you could optionally activate it on a hardware (USB) key. The benefit of the key is that you can easily move it to another device, nor does it get lost when you replace parts of the hardware of the device or completely overwrite the image. See: https://store.codesys.com/en/codesys-key.html
Last updated: 2025-04-08
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 jeroen on Ramp function
CODESYS Forge
talk
(Post)
Hi, Found a nice ramp function in the OSCAT lib (FT_RMP), but is there a nice way to 'set' the output to the current input as form of a reset. The reason for this, is that I want to set up a ramp for a pressure control input that should have x Bar/sec linear rise input. The only option (or code it by hand) I found is this OSCAT FB. Any other options? Just need to increase a value by x Bar/sec from let's say 250Bar (as start) to end 1500Bar. The Oscat ramp will always start at 0 when enable is off (FT_RMP.Rmp := FALSE)
Last updated: 2024-01-09
Post by tali on Configuration of disabled/deactivated visu elements
CODESYS Forge
talk
(Post)
would be great to have such fucntionality. Sometimes it is not clear for user which elemetns are blocked and which are not - the greyed out eleemtns are not so different for low resolution / low quality screeens. What I have in my mind as well is to have a possibility to detect the visu Element clicked on and get its Access Rights. If it is blocked/deactivated, the dialog can be rised with INFO 'please login first with proper rights'. It is possible now to have a Mose event Handler ( Examples -> EventHandler) and rise the dialog out of ST (Exapmpals -> ST Dialogs). I am struggling still with getting the separate Visu Element under the mouse and its structure info
Last updated: 2025-12-05
Post by ranadheer on Assistance for MQTT configure with external broker (Mosquitto)
CODESYS Forge
talk
(Post)
Hi everyone Am trying to make establish MQTT connection , where am using IIOT example for this as a demo mode. where i had given IP-address of of local Linux application as a 172.31.239.67 and port number as 1883 in the PLC_PRG itself, and preparing the publish message by manually as " this is from published message", and this should receive at the subscriber side. Aim: To make communicate external publisher to the CODESYS by using MQTT protocol. By any chance having reference documents about this implementation please share here. and suggest the process to make it possible. I had uploaded reference project file after updating address in th PLG_PRG, kindly assist to configure with the broker
Last updated: 2025-12-03
Post by rossanoparis on How to configure CODESYSControl_User.cfg in order to use a specific network card for OPCUA Server
CODESYS Forge
talk
(Post)
Thank you @eschwellinger Even tough I think the content of the link you provided is a bit messy. To bind OPCUA server to a specific adapter, I should have had insert the following section. [CmpOPCUA] NetworkAdapter=eth0 But it doesn't work, I had to insert the following section instead to get the right configuration. [CmpOPCUAServer] NetworkAdapter=eth0 Regards Rossano
Last updated: 2023-08-29
Post by rcaponi on Codesys 3.5 SP19 Patch 4. Trace context menu does not work
CODESYS Forge
talk
(Post)
Hello, I'm using the new Codesys 3.5 SP19 Patch 4 version with CODESYS Control for Raspberry Pi MC SL v4.8. Compared to the Codesys 3.5 SP19 Patch 1 version, the context menu on a Trace object no longer works. So I can no longer run the Downloader Trace command. Do any options need to be enabled with the new version? Best regards Roberto Caponi
Last updated: 2023-10-24
Post by vamsi on How to configure gateway for programming RPi 2B using Codesys
CODESYS Forge
talk
(Post)
I found out what I was doing wrong. I was entering the wrong IP in the gateway. I found that I have to enter the RPi's IP in the gateway field from this post https://forge.codesys.com/forge/talk/Runtime/thread/01703ca970/#d9f6 But I do not understand why it has to be the RPi's IP. Could anyone help me in clarifying this?
Last updated: 2024-07-10
Post by srouse on PFC200BUS not running
CODESYS Forge
talk
(Post)
I started a project in codesys for a WAGO 750-8212 PLC and I am working on getting online with the controller. I can log in to the controller and I can see and control all of the fieldbus couplers that I have. I am unable to get the internal bus working. It just says that the bus is not running and when I scan or devices nothing shows up. Am I missing something important in my device tree?
Last updated: 2024-07-10
Post by paulorb on FB Factory example
CODESYS Forge
talk
(Post)
I am trying to use FB Factory (to dynamically create FB), I am looking for documentation the only thing I found is this page: https://content.helpme-codesys.com/en/libs/CAA%20FB%20Factory/3.5.17.0/Factory/fld-Factory.html I am trying to find the examples, I search on the installed folder, I have the impression that it is no longer installed as part of the CODESYS installation. Where can I find it?
Last updated: 2024-08-12
Post by paulpotat on cm4 runtime problem
CODESYS Forge
talk
(Post)
It looks like it works with 4.13.0.0 indeed. However when installing the runtime, it's not possible to select the multicore option (see attachment). But once the 4.13.0.0 runtime is installed, the logs seems to indicate that the runtime is running in multicore mode. Looking at "htop" output, it seems like it actually is running on multiple CPU. This is very misleading, is it normal or is this a bug ? Thank you for your answer @eschwellinger, BR
Last updated: 2024-09-02
Post by paulpotat on cm4 runtime problem
CODESYS Forge
talk
(Post)
Hello again, After looking into it, I noticed that the release note of "CODESYS Control for Raspberry PI 4.13.0.0" mentions a bug fix titled "Support Compute module 4". Is it possible to have more details about this fix from the CodeSys team please ? Because I have several CM4 boards with the same hardware revision / OS but some of them works with the 4.10 runtime and others only works with the 4.13 runtime...
Last updated: 2024-09-09
Post by winki on Modbus TCP & RTU with Control for Linux SL
CODESYS Forge
talk
(Post)
Hello, Today I am able to test ma industrial computer in my test bench. I am able to do all the configuration throught my VPN, 100% remote. I can see the gateway & the Virtual PLC. Now I would like to do some Modbus TCP Client & Modbus RS485. But I am lost due to docker ! When I go to modbus TCP it only gave me the docker network, but not my eth0 & eth01 When I go to modbus rtu, how can I create the link between Com number & my /dev/ttyRS485 Loic,
Last updated: 2024-10-23
Post by sercan on Connecting Parameter 'A' in G-Code to Physical Axis in CNC Project
CODESYS Forge
talk
(Post)
I want to run the following command by linking it to the A-Axis: G01 A45.0 Which TRAFO should I use to do this? SMC_TRAFO_5Axes and SMC_TRAFO_GantryCutter3 function blocks did not work! For example, when SMC_TRAFO_5Axes is used, parameters B and C can be resolved by the transformer. However, parameter A cannot be resolved. Only SMC_Interpolator displays the value of parameter A in the SMC_Interpolator => piSetPosition.dA output. Should I drive this axis with SoftMotion commands (MC_MoveAbsolute etc.)?
Last updated: 2025-05-07
Post by ivan-g on MODBUS
CODESYS Forge
talk
(Post)
Hi There, I took over a project from a colleague (in GTB) who left the company. When I took over his project, it wouldn't compile because some libraries were missing. I managed to recover quite a few libraries, but I can't find the library that contains the block functions shown in the image. Here are a few examples: Fb_RegMel_ISO Fb_DefModbus FbDecalConsSalSO Fb_Autor_FreeCool_CTA_C I'm a little stuck at the moment, so if you see a Facebook post that speaks to you, don't hesitate to get in touch! Thank you in advance for your help.
Last updated: 2025-08-05
Post by ivan-g on MODBUS
CODESYS Forge
talk
(Post)
Hi There, I took over a project from a colleague (in GTB) who left the company. When I took over his project, it wouldn't compile because some libraries were missing. I managed to recover quite a few libraries, but I can't find the library that contains the block functions shown in the image. Here are a few examples: Fb_RegMel_ISO Fb_DefModbus FbDecalConsSalSO Fb_Autor_FreeCool_CTA_C I'm a little stuck at the moment, so if you see a FB that speaks to you, don't hesitate to get in touch! Thank you in advance for your help.
Last updated: 2025-08-05
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.