Post by durallymax on VAR_INFO from inside of a FB to get info on the instance.
CODESYS Forge
talk
(Post)
The help link appears to be broken. When I implemented something similar I had to add {attribute 'reflection} above the declaration of the FB with {attribute 'instance-path'} above the string VAR that would contain the path. Then wrote a function to trim off however much I wanted removed by searching for periods, then formatting it with spaces at the periods and removing brackets on arrays while also breaking up the PascalCase to present it a bit nicer for the end-users.
Last updated: 2025-12-12
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 grant32 on RAMP_REAL FB is retaining my output value when i try to re use the FB
CODESYS Forge
talk
(Post)
Hello, I'm relatively new to PLC programming. I am trying to creat a ramp down function, I have an example here of what I am using. I can get the function to work, the issue is that the OUT (variable3) value is being held by the FB so after I use it once it no longer works. In this example i set variable3 to 100 and the rest is as seen, over the course of a minute it ramped down to 10 (as desired). But when I deenergize TEST_START, set variable3 back to 100, and then re-energize TEST_START it immediately jumps back to the previously held value 10. The reset on this block just pauses the function and holds the last OUT. In my case I will need the function to start OUT at a set value, ramp down to the IN (variable2) value, and then accept a new OUT value to ramp down next time the block is energized. Hopefully this made sense, if anyone has any advice that would be awesome!
Last updated: 2024-07-29
Post by paulorb on STRUCT AT %MW1000
CODESYS Forge
talk
(Post)
Hi I am trying to use STRUCT to parse commands from Modbus/TCP, Modbus client will fill the bytes related to a specific command (type, parameters), then PLC (Codesys) will access the command parameters. A STRUCT will simplify a lot the process of parsing the data, so I don't need to parse byte per byte, address will be mapped to a struct and I can use it for parsing the data. From what I understood, the compiler does not allow me to specify the location of the struct for a %MW register. VAR_COMMAND AT %MW1002: structGenericModbusCommand; This will throw: Bad declaration, use '%ML' for 'structGenericModbusCommand' variable But If I change it to %ML, when you go online you see that it is actually allocating the struct in another memory address. When we go online, on GVL we can see: VAR_COMMAND. structGenericModbusCommand %ML1002 commandType COMMANDTYPE %MB8016 ... %MB8020 I am not specifying a pointer or a reference it is a struct type, why is it mapping to a %MW location (random one). How can I control where it is mapping to? I need a consistent way to map STRUCT to specific modbus address. Is it possible? Thanks, Paulo Note I am using a Codesys OEM: Schneider Machine Expert Logic Builder (M241)
Last updated: 2024-08-13
Post by hyys12 on Help understanding analog in-/outputs
CODESYS Forge
talk
(Post)
Hello. I am currently working on a WAGO PLC, where I am trying to wrap my head around how the analog inputs and outputs work in codesys. I have looked far and wide on the internet, for a general introduction to the whole concept, but I have not had any luck with finding anything that helped me understand it better. The whole goal is for me to be able to read an analog input from a temperature sensor, as well as using an analog output, to control a frequency inverter. I know these have nothing to do with each other, but that is all I have on hand right now. I am trying to program this using Ladder Diagram. The only thing is, that every video/guide I have seen/read using LD, just adds a whole lot of function blocks, to do all kinds of stuff they don't explain. My general question is, how would one go ahead and read the analog input, as well as transmit an analog output? Is there some kind of specific function block I would have to use for this, or some great video I can watch, to understand the inner workings. Is it somehow possible to see the values the PLC recieved/sends? Regards.
Last updated: 2024-12-11
Post by canplum on Codesys 3.5.21 fails to copy file to USB
CODESYS Forge
talk
(Post)
Although I have set in /etc/codesyscontrol/CODESYSControl_User.cfg the [SysFile] PlaceholderFilePath.1=/media/pi, $usb$ PlaceholderFilePath.1.View=1 PlaceholderFilePath.1.Volatile=1 I am not able to copy a file to this directory defined by the placeholder. Neither SysProcess.SysProcessExecuteCommand2 nor SysFileCopy nor FileCopy is working. If I try to copy the same file to /home/pi all is working fine. I also can create and open a different file by using SysFileOpen. I don't understand why the system allows to open (create) and write files into that directory but doesn't allow to copy into it. Obviously there is a rights problem with the USB drive. I have already set the permissions to drwxr-xr-x 2 and the user to pi but without any success. With 3.5.16 I never had such an issue. Is there anybody with some hints how to solve that problem? Cheers, canplum
Last updated: 2025-05-23
Post by yannickasselin on Connect to remote PLC via local pc and teamviewer
CODESYS Forge
talk
(Post)
Yes it is possible. I did it a lot of times using TeamViewer VPN. Unfortunately, TeamViewer VPN only works on Windows. If the remote PLC is a Codesys runtime running on Windows, you should be able to login directly using TeamViewer VPN if it is installed on the PC/PLC. If it is not Windows based, you can still do it but you need to have a Windows based PC acting as a gateway in the middle. In this case you need to enable IP Forwarding on the Windows remote PC (the gateway) and you need to setup the gateway IP address on the PLC to be the address of the Windows PC. Then you need to add a route on your local PC to point to the gateway PC for Codesys communication. I know it may not be detailed enough but I did not want to make a whole tutorial on how to do it. Bottom line, it is possible. I do it all the time.
Last updated: 2024-02-02
Post by phoward131 on Alarm State Icon
CODESYS Forge
talk
(Post)
I am trying to create an icon on an overview screen that depicts if an alarm group has active alarms, active acknowledged alarms, or inactive unacknowledged alarms (waiting for confirmation). I've attempted to set up Notification Actions in the Alarm Class to set variables based on state changes but have been unable to find a clean and effective way to do this. Because an action on any alarm will trigger the variable to be set as instructed, I'm struggling to find a way to configure it for what I need (ie if two alarms activate, then one deactivates, the variable for indicating an alarm is active would be cleared after the single deactivation). I've been pointed toward the Alarm Manager example project but I'm finding it too complicated to understand how to implement it in my own project. Has anyone come up with another good way to indicate the states of alarms or a simpler usage of the Alarm Manager functions?
Last updated: 2024-04-23
Post by xnoop on MBTCP Slave configuration
CODESYS Forge
talk
(Post)
Hello, I use Codesys 3.5 SP18 Patch 4 (64 bit) My Codesys project is composed of several dozen of Modbus TCP Slaves. I want to configure each of them by define : - Modbus TCP Slave Configuration : Name, IPAddress, port - Channels - Mapping I can't afford to configure manually and I need to find automatic way What possibilities does the Codesys offer? 1. I know it possible to use python script to create Modbus TCP Master and Slave. But I don't find anyway to create Channels and Mapping through the API 2. I 've tested to set mapping with file.csv on a Modbus Tcp Slave, but no way to import channels definition from file 3. I 've tried to use PLCOpenXml file. For example I 've create a project with an Ethernet device. I've exported it in PlcOpenXml file. After delete the Ethernet device, I've imported the PlcOpenXml file without success. I've tried the same by creating Modbus TCP Slave. Could you help me to find to good way ? Thanks
Last updated: 2024-06-19
Post by andrea199403 on Assigning Modbus addresses to a structure in a dynamic way
CODESYS Forge
talk
(Post)
Hello everyone, I am new to this forum and I am also new to Codesys programming. My problem is this: I have a STRUCT of 64 bool and 30 real, this STRUCT is assigned in the programme 9 times. Now I need to communicate with an HMI via Modbus and I have defined the slave device and created the holding registers for communication. I would like to declare the first call of the STRUCT on the Modbus registers %QX2000.0 to %QX2007.7 for the booleans and on the registers %QW1004 to %QW1034 for the real registers. That said, I would like to change an index and set an offset of 100 bytes for the calls of the other 8 assignments, so that the result is: %QX2100.0 to %QX2107.7 for the booleans and on the %QW1104 to %QW1134 registers for the Real registers, etc. Is there a way to declare this? Thank you very much.
Last updated: 2025-10-21
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)
Hello at all I'd like to know how to configure CODESYSControl_User.cfg in order to use a specific network card for OPCUA Server. In the past, I tried to ask in "Forge" about this topic, but I could find neither help nor document informations about it. Reading the file "codesyscontrol.log" I see these logs OPC UA Server Started: Hostname: NTLRPICTRL01, Port: 4840 URL: opc.tcp://NTLRPICTRL01:4840 Loopbackadapter activated. **All available networkadapters are used.** Multithreading activated. 3 workers used. My controller, which is a Linux PC, has got two network cards eth0 and eth1 I whant to use the card with name "eth0" as a server for OPCUA and keep the "eth1" free for other stuffs. Is it possible ? Best regards Rossano
Last updated: 2023-08-25
Post by muhq on Profinet connection to Siemens CP343-1 Lean (IO-Device/Slave)
CODESYS Forge
talk
(Post)
Hi, I am quite new to Codesys and I try to do a Profinet connection to an Siemens PLC (315-2DP) with CP343-1 Lean Modul. I already configured the Siemens PLC, exported the GSDML. Then I added a new project in Codesys, added following moduls: - Ethernet - PN_Controller - Imported Profinet Device via GSDML importer When I start the programm everything looks fine but I always get the message "Stopped Profinet" and no data is available This is only for a small test. Therefore I start to do that on a Windows 10 with Development System. Later I will try to realize this on Raspberry. Ethernet Adapter is configured (192.168.1.1 / 24) Firewall deactivated WinPCap is installed S7-Station seems to be found ('fuadazenzitest') Can please somebody help me?
Last updated: 2023-08-26
Post by simotion on Pointer to Softmotion axis
CODESYS Forge
talk
(Post)
In my projet I use Softmotion. There are several Softmotion axis (type SM_Drive_Virtual). In the Global Variable List I have an array of pointers to the adress of the Axis. Axis : ARRAY[1..iMaxCntAxes] OF POINTER TO AXIS_REF_SM3 := ADR(AX01_Axis), // [1 ADR(AX02_Axis), // [2] This works, but when compiling I get the message : . [WARNING] E3D: GVL Device: PLC Logic: Application: C0564: A reference to uninitialized variable AX01_Axis is used for initialization of Axis. Accessing the uninitialized variable may result in unexpected behavior. [WARNING] E3D: GVL Device: PLC Logic: Application: C0564: A reference to uninitialized variable AX02_Axis is used for initialization of Axis. Accessing the uninitialized variable may result in unexpected behavior. Is there a way when initializing to force the hardware (softmotion axis) to first initialize and then the Global Variable List?
Last updated: 2023-10-25
Post by andre-luis on Check if Codesys runtime is on 'Running' or 'Stopped' state?
CODESYS Forge
talk
(Post)
Hi there, I'm running the Codesys runtime on Windows 64 and I need to know if it is on "Running" or "Stopped" state just after a system crash. The following commands works perfectly well to (re)start it... net stop “CODESYS Control Win V3 - x64" net start “CODESYS Control Win V3 - x64" ...however I'm unable to determine when it is required to be call; I mean, by checking the System Tray icon, it is possible to know if it is on "Stopped" state, but I wanted to run a .BAT command to retrieve it. How can we do that?
Last updated: 2024-07-02
Post by vamsi on How to configure gateway for programming RPi 2B using Codesys
CODESYS Forge
talk
(Post)
I am using a Raspberry Pi 2B. Installed Codesys V3.5.20.1 64-bit and installed 'CODESYS Control for Raspberry PI 4.12.0.0' I am able to install the packages using the 'Update Raspberry Pi' option, but when I try to log into the RPi, in the Device tab it says 'Sacn fail. Please checl that the gateway is running and that its settings are correct'. My setup looks like this. I connected my RPi to my company LAN and also my laptop to company LAN (using HP Docking station). This setup worked when I installed 'CODESYS Control for Raspberry PI', but now I donot know how to configure the gateway. Could anyone please help me in finding what I have to enter in the gateway configuration? Thanks, Vamsi.
Last updated: 2024-07-10
Post by hyys12 on How to use/create SOTU in LD program
CODESYS Forge
talk
(Post)
I am trying to make a LD program for an existing installation with a motor. Here an inductive sensor is used to give an input, as a check to verify the conveyor is actually running. Here the plan was to use a TOF timer which gets constantly reset when the sensor input gets detected. The problem is, that if the conveyor is stuck, and the sensor sends a continous signal, the timer will never do what it is supposed to do. Therefor I need some help on how I can convert the input to a pulse, with the help of something like a SOTU. I just cannot find this in codesys anywhere.
Last updated: 2024-07-11
Post by nico-hefr on Python script command for "Access Control"
CODESYS Forge
talk
(Post)
Hi everyone, I use Python Script to generate some POU in Codesys V3.5 SP19 and I would like to limit the "Access Control" to them thanks to the Python command. Is there any commands that allow to edit the "Properties... >> Access Control" of the POU? The other possibility is to set the permissions with "Project >> User Management >> Permissions... >> Project objects >> Modify >> ... >> myPOU", but I did not find the related Python commands. Otherwise, is there a global setting that allows to set the permissions by default? For example, Modify = Denied for everyone user by default. Thank you in advance for your help, Nico
Last updated: 2024-07-18
Post by hyys12 on CODESYS 3.5 dicovery of PLC modules
CODESYS Forge
talk
(Post)
I have a WAGO PLC, to which I am establishing a connection. Here I use the autodiscover to register the connected modules. Now, I have tested the in-/outputs of the different modules, to verify they are consistent with how they are physically connected to the PLC in regards to how CODESYS has numbered them. Will CODESYS always number the modules closest to the PLC itself lowest, and the one furthest away, the highest? I am rather new to the program, so I both hope my question makes sense, as well as not being completely obvious. Thanks!
Last updated: 2024-12-06
Post by tmarmy1 on Redundancy for RTE x64 - stuck in standalone
CODESYS Forge
talk
(Post)
Sorry if this has been asked before, but I can't seem to locate a thread that leads me answers. I am running two RTE x64 softPLCs, one on the host machine and a second via a VM. I have managed to finally get both to a position that they see each other, but they are in standalone mode instead of an active/passive state for failover (image attached). Every attempt to sync via the button fails. There is probably some step or option that I have missed in my bumbling through this learning process, but for the life of me I can't seem to figure it out. Anyone got any suggestions what I need to look at to get this into an active/passive redundancy state?
Last updated: 2025-02-20
Post by peterkcontrols on TargetVisu started in windowed or not full screen
CODESYS Forge
talk
(Post)
Hello, I am using Codesys on an industrial pc with a single monitor. I would also like to have a separate vision software running on the PC and would like to display it half screen. When I run the soft PLC the my visualization screen appears full screen, I would like to be able to set the size of the visualization screen so I can display other software on the monitor. Is it possible to set the width/height of the targetVisu? Anyone try something similar? I would like to avoid having to put it on a Virtual Machine. Thank you
Last updated: 2025-02-26
Post by matthew on High resolution displays with 150% scaling causes CodeSys IDE to be blurry
CODESYS Forge
talk
(Post)
I have just upgraded my laptop which has a high res display 2560x1600 and I have to have scaling switch on at 150% but everything looks blurry and not crisp, It seems CodeSys IDE is the only software on my system to look this bad, if I switch to 100% it's crisp but way to small. From a bit of research this could be due to the use of old windows forms or something? I have found a temp workaround that sort of works but not great. You have to run CodeSys in compatibility mode and adjust the DPI settings, this works ok and the editor is clear and crisp again but the actual tool bars are small like running at 100% Anyone got any tips for running CodeSys on high res displays with scaling?
Last updated: 2025-03-03
Post by bingo on PLC Shell commands via ST Code
CODESYS Forge
talk
(Post)
Suppose you need to switch PLC IP dynamically between 192.168.1.10\192.168.2.10, First, set PLC IP to 192.16.1.10. Create a PGVL with a flag ‘xUseSecondry’ xUseSecondry : bool ; create a function that use socket to update IP: FUNCTION fSwitchIP : bool VAR_INPUT useMainIP:bool; END_VAR --------------------------------CODE------ if useMainIP then SysSockSetIPAddress(‘0’, ‘192.168.1.10’); PGVL.xUseSecondry := 0; else SysSockSetIPAddress(‘0’, ‘192.168.2.10’); PGVL.xUseSecondry := 1; end_if Now, if during execution, you need to switch IP, call the function ‘fSwitchIP()’, Set input to 1 for main IP, 0 for secondary IP. In order to set secondary IP at startup, you can do the following: in your PLC_PRG add a flag: xInit : bool := 1 ; and the code: if xInit then if PGVL.xUseSecondry then fSwitchIP(0); end_if xInit := 0 ; end_if *Alternative way is to use system events.
Last updated: 2025-03-03
Post by peterkcontrols on Copying 2 byte word to output
CODESYS Forge
talk
(Post)
Hello. I am using codesys 3.5. I would like to know if it is possible to set a variable to an output without declaring in. I have defined a STRUCT and within this struct I have a Struct for inputs called I and a struct for outputs called O. I have declared a variable of the type of this Struct, I would like to set or alias the value in this variable to an input/output value of an IO block that has a module on the ethernet tree. Is it possible to copy the contents of %IW0 -> STRUCT.I ? The size of both of these is 2 bytes. I understand that I can declare a variable with the input like Input01 AT %IX0.0 : BOOL; However how can I make STRUCT.I.D00 AT %IX0.0? Is this possible? Thanks
Last updated: 2025-03-03
Post by manuknecht on Using an Axis of an Axis Group in Torque Conctrol
CODESYS Forge
talk
(Post)
I don't seem to be able to use an axis, which is part of an Axis Group in torque control mode. I call the SMC_SetControllerMode FB to switch from position to torque control mode, followed by the SMC_SetTorque FB to set the desired torque. This works flawlessly for most axes, however if an axis is part of an axis group, switching the controller mode seems to work without any issues, but the desired torque is never set. SMC_SetTorque does not return an error, but fSetTorque of the axis is never changed. Disabling the axis group before does not change anything, but if I use MC_UngroupAllAxes before changing the controller mode, it all works as it should. Is there no way to control a single axis in torque control, if it is part of an axis group?
Last updated: 2025-07-17
Post by bruceae on Special Characters
CODESYS Forge
talk
(Post)
Hello, I am fairly new to the codesys environment. Is there a reference chart that I can look at in order to write special character in a string? The Special characters that I need to inclue inside the string are as follows; Null Bell Carriage Return I have a TCP_Write command that I am sending to an external device. In order for that device to function properly it needs to see the string with the null and bell characters as the header, followed by the desired command, terminated with the carriage return. Any reference sheet or how to write this in the actual string would be greatly appreciated.
Last updated: 2025-08-26
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.