Post by timvh on KeyPad Function in Visualization to fill a table
CODESYS Forge
talk
(Post)
Create an array of STRING and 1 INT variable, e.g.: asMyString : ARRAY[0..9] OF STRING; iIndex : INT; Then place a "Table" object in the visualization: - link this to the string array variable. - Check the option "Use Template" - Then in the Input Configuration - add the "Write Variable" command Somewhere else add a "Combobox, array" - link this to the same array. - And link the index to the INT variable. In the Combobox, you can then select one of the strings from the array. The index variable will indicate which selection has been made.
Last updated: 2026-01-08
Post by gseidel on Mismatch between coordinate monitor and actual motion using SMC_GroupJog2, MC_MoveLinearAbsolute (6DOF)
CODESYS Forge
talk
(Post)
Dear darwin03, my first guess is that the axis scaling of the last axis (joint 6) is not correct. It should be confiugured so that one technical unit equals one angular degree. From the video, it rather looks like 1 technical unit is a full revolution of the joint. (This holds for all rotary axes used with SoftMotion Robotics: they must be scaled so that one technical unit equals one angular degree.) Best regards, Georg
Last updated: 2026-04-07
Post by wollvieh on SP19 Runtime Zugriff auf lokales Dateisystem
CODESYS Forge
talk
(Post)
Hallo, hier in diesem Beispiel ist $Download$ ein Platzhalter für den kompletten Pfad /home/pi/Downloads/ auf dem Zielsystem, wo die SoftPlc läuft. In der SoftPlc gibt man dann als Dateipfad und Dateiname wie folgt an : '$$Download$$/Datei.txt' Die Datei Datei.txt wird dann auf dem Zielsystem unter /home/pi/Downloads/ angelegt. Pfade darunter werden auch angelegt, z.Bsp.: '$$Download$$/Ordner1/Datei.txt' Beispiel des Platzhalters: [SysFile] PlaceholderFilePath.2=/home/pi/Downloads/, $Download$
Last updated: 2026-01-22
Post by nehaltrivedi96 on Modbus connection via Qronox PCD3 M6893
CODESYS Forge
talk
(Post)
Hello, I am currently scaling 4-20mA signals and the scaled output (temperature) has to be sent via modbus protocol to a tool like doctor modbus or modbus poll. I have defined my inputs as real as and the output is also real, but to send this output via modbus it has to be of word. So how will i convert real into word and then send the generated output via modbus?
Last updated: 2026-02-18
Post by william on Unit testing support / libraries for EcoStruxure Machine Expert (CODESYS)
CODESYS Forge
talk
(Post)
Hi, We are investigating available libraries and frameworks for automated PLC unit testing in Schneider EcoStruxure Machine Expert. Specifically, we are looking for: Assertion libraries or test frameworks compatible with Machine Expert CODESYS‑based solutions that are not TwinCAT‑specific Any official or community‑recommended approach for unit testing FB/FC logic offline We have found several open‑source examples, but many appear to be TwinCAT‑dependent and therefore not compatible. Are there any known libraries, best practices, or recommended approaches for implementing unit tests in Machine Expert? Thanks in advance.
Last updated: 2026-02-19
Post by stefan-gimpl on Beobachtungszeitpunkt
CODESYS Forge
talk
(Post)
Guten Tag, irgendwas ist hier im Argen, die Status werden nicht richtig angezeigt. Im Bild im Anhang wird die Variable in Zeile 16 CollectiveAlarm auf false gesetzt, es wird aber true angezeigt. In Zeile 17 frage ich testweise den Status nochmals ab, der ist auch false, obwohl die Variable CollectiveAlarm noch immer true anzeigt. Was kann hier die Ursache sein? Gibt es einen Beobachtungszeitpunkt, wann die Werte abgefragt werden?
Last updated: 2026-03-04
Post by sulzbrunn on Codeys Installation freezes while attempting to install packages
CODESYS Forge
talk
(Post)
Hi, I am facing the same problem: I am trying to install CODESYS 3.5.17.60 The last log entries are: ... InstallShield 14:18:17: Done Initializing... InstallShield 14:18:17: Registering Msi Server... InstallShield 14:18:17: Invoking script function InstallOEMPackages 1: [CDS Info]: CDS_OEMPACKCOUNT: 47 1: [CDS Info]: CDS_OEMPACKCOUNTALL: 47 Action 14:18:17: CDSInstallOEMPackages. Install all Packages added to the setup 1: [CDS Info]: Call: C:\PROGRA~2\CODESY~1.60\CODESYS\Common\PACKAG~2.EXE --profile="CODESYS V3.5 SP17 Patch 6" --installAll="C:\Users\UserXXX\AppData\Local\Temp{94C03~1\Packages"
Last updated: 2026-03-19
Post by aapostolidis on _NEW when used with classes and interfaces. Interface shows "Hidden Instance" in watch.
CODESYS Forge
talk
(Post)
Hello, im using dynamic memory allocation with the NEW()-operator. When i instanciate a class with the NEW()-operator and want to debug/watch the interface of the class, the watch is only showing "Hidden Instance" (See attached screenshot). Is there any possibility to debug the interface data ? The interface is working properly but the debugging by the watch is not possible, what is a big disadvantage. Thank you. Best Regards, Alexander
Last updated: 2026-03-24
Post by tommyk-mar on Smooth path is not working with SMC_NCInterpreter
CODESYS Forge
talk
(Post)
Hello, Im using SMC_NCInterpreter and SMC_NCReadFile2 to read gcode program for CNC machine and what I have observed is that G51 and G52 is not smoothing the path. Machine stops in every point, what could I do to make machine pass through the points without stopping or what could allow me to use smooth path corretly if I use NCInterpreter. Im using it because I want to add variables to my gcode and its not possible directly from the CNC editor thats why I do use external file. Any ideas?
Last updated: 2026-03-26
Post by darwin03 on Mismatch between coordinate monitor and actual motion using SMC_GroupJog2, MC_MoveLinearAbsolute (6DOF)
CODESYS Forge
talk
(Post)
Hi Guys!!! I am experiencing an issue when trying to move 6DOF using SMC_GroupJog2 and MC_MoveLinearAbsolute, but I don't understand why, when I jog only X or Y, the coordinate I monitor just changes the X or Y value. It's true, but in reality, Joint6 is still running like the video. Am I wrong somewhere? Many thanks for considering my request.! Video: https://drive.google.com/drive/folders/1vRHQ3AtTO3mijptqZgn5OcP9pyi527Jm?usp=sharing
Last updated: 2026-04-06
Post by sunfloweeerrry on Edgelogix-rpi-1000-cm4102032 SPI port connection to PiFace I/O Driver in CodeSys.
CODESYS Forge
talk
(Post)
Hello, I hv a problem. Couldn't solve this for 2 days now. So I'm quite new at CodeSys and I have to use the spi port x30 on the edgelogix rpi 1000. So what I have to do is just 'add device' at the SPI where I hv to pick the 'SPI master' after that I hv to change the parameters according to the edgelogix I did found in the spidev.h but nothing got updated so I 'add device' again where I pick the PiFace I/O Driver and I put my variables at the I/O Mapping, which i put the input startbit at the in part and led at the out part. I want to make the led blink according to my structured text code but somehow the hardware didn't connected with the CodeSys spi port. Nothing happens. Any idea what I have to do?
Last updated: 2023-08-18
Post by cdutz on Problems connecting to Codesys 4.9.0.0 runtime on my Wago PFC200
CODESYS Forge
talk
(Post)
Turns out I managed to get a connection to my PLC. It seems that a few weeks ago Wago released something with version 4.3.3(25). So I reset my PLC to Factory-Reset, set it to the 192.168.1.17 IP and changed the IP to the one I wanted with the Wago EthernetSettings tool. Then updated the latest firmware using the WAGOupload tool. Now the PLC came back up without a PLC runtime running, so in the Web-tool I wen't to the "Configuration"/"PLC Runtime" and selected the runtime version "CODESYS V3". I uninstalled all Codesys versions and installed the version from the download package of Wago together with all the packages the bundle provided. After creating a new project I didn't select the old PFC200 runtime, but one of the dozens of new device profiles, that it now listed. With these settings I was then able to connect to my PLC. Now I hope I'll get the existing project that I had ported to this new structure. Sorry for the noise. Chris
Last updated: 2023-08-26
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 egret on Issue with J1939, PGN 65267 (Vehicle Position)
CODESYS Forge
talk
(Post)
I have a J1939 network (ISOBUS) connected to my PLC. I can receive various PGNs such as 65256 (Vehicle Direction/Speed) and 65254 (Time/Date). However, I cannot receive 65267 (Vehicle Position). PGN 65267 (VP) contains SPN 584 (Latitude) and SPN 585 (Longitude). On the network both SPNs return a value of -210 (meaning the CAN message payload is zero in both cases). The conversion settings are the default values and appear to be correct (see attached screenshot). Using a CAN analyser I can see that PGN 65267 (Vehicle Position) is being transmitted over the network with valid (non-zero) data that matches the latitude and longitude coordinates I would expect. I've created a program to read the raw J1939 data and this also returns valid data. It seems that the Codesys J1939 database has a problem with reading PGN 65267 messages. Can anybody else confirm this? I'm using Codesys Version 3.5 SP16 Patch 5.
Last updated: 2023-09-13
Post by danwoodlock on RPI Zero w - Edge gateway cant install
CODESYS Forge
talk
(Post)
Hello all, First post. I recently acquired an RPI zero W from amazon, and have been using it with Codesys v3.5 SP19 patch 2. I first got it working yesterday, and after installing the runtime on the Pi, I was prompted to install the edge gateway. Installation of the edge gateway failed because of unsupported architecture, undeterred I was able to connect to the pi and program as I wanted. The issue I've noticed is that if I do not load anything to the pi overnight, I can then no longer connect to the pi and download, although I can still ping it from my pc. I found that if I power cycle the PI, I am then able to connect again, and it works as normal. I did some googling and found instances where people recommended downloading the newest edge gateway, which brings me here. Wondering if there are any suggestions, or if this is a known issue. I actually tried installing all 3 versions of edge gateway for science, but all fail with the same message. Thanks -Dan
Last updated: 2023-09-13
Post by sturmghost on Initialization of visualization variables and cyclic code execution
CODESYS Forge
talk
(Post)
I'm looking for a smart and short way to implement initialization of visualization variables depending on the visualization input. For an easy example consider a rectangle which rests at XPos := 0 when the input state is false and at XPos := 50 when the input state is true. My visualization variables look like this: VAR_IN_OUT State : BOOL; END_VAR VAR XPos : INT; END_VAR I put this rectangle via a visualization frame element into another visualization and link a frame reference variable with the state to it. If the variable is true, the rectangle should rest at XPos := 50 and false at XPos := 0 at visualization init but how should I assign the 50 or 0 to the internal visualization variable XPos? I would need some init-methode for the visualization but I dont want a global init-method for such tasks. I want to do it inside of the visualization element but I can't see any solution for this? It would be good to be able to define ST-code within the visualization element which runs cyclic at each VISU_TASK task-cycle then I could just check the input state and change the XPos accordingly. Does someone have a solution?
Last updated: 2023-10-01
Post by sturmghost on Visualization using methods and cyclic ST-calls
CODESYS Forge
talk
(Post)
Im looking for a way to implement ST-code into the visualization element without creating a helper POU or method in my device/application tree. Like visualization properties are evaluated at each VISU_TASK cycle I want to be able to create own ST code which interacts with the visualization interface variables. To be more specific I want to have a property which executes user defined ST-code at each VISU_TASK cycle exactly like its already possible for Input Configuration on various mouse and dialog events. Also a property for initialization (so only executed once) and a timed property would be nice. With the situation right now I'll have to create a POU function which handles the ST-code and misuse a property, like the text variable, to execute this POU function at each VISU_TASK cycle. Or does it exist and I don't know it?
Last updated: 2023-10-02
Post by manuknecht on Persistence Manager does not save alphabetically first value
CODESYS Forge
talk
(Post)
I have several libraries which contain values that should be saved on a PLC. As apparently no Persistent Variable List is available within Libraries, I use the Persistence Manager to create a Persistence Channel in the Project which imports the library. I then specify the persistence channel in the library using the {attribute 'ac_persist':='PersistenceChannel_CT'} specifier. This generally works very well and gives me exactly the properties I require. However, it came to my attention that the (alphabetially) first value from the library is not saved in the created ASCII file. When checking the content of the Persistence Channel, it shows all the variables as defined in the library. But the created file does not contain the first value and it is not restored after restart or reset. (see attached picture) I disabled Periodic Saving and set xSaveOnChange to TRUE and so the file usually updates immediately after changing one of the values. When changing the first value, it does not update which is consistent with this value not being saved. I also created a sample project and library from scratch which shows the same issue both using a Raspberry Pi and using a Linux machine. Does someone know what the reason for this could be or did someone make similar experiences? Looking forward to hearing your suggestions. Thanks in advance and best wishes Manuel
Last updated: 2023-10-17
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 ofey on Testing of Codesys program
CODESYS Forge
talk
(Post)
Hi! I thought to hear what you guys think is the best way to test the program in my scenario. I have some PLC programs that have been made and deployed on different PLC's. The program has added the specific devices and IO that is applicable. I have made a test environment for everything outside of the PLC, ie. the same SCADA system that is talking to the PLC, and a program running locally is simulating the plant (level regulation of different tanks). Pr. now I have had to manually change the variables that are reading/writing values from the IO so they read/write via OPC instead. I also have to change the device tree from the specific PLC rack, to the soft PLC. So I kind of end up with two different programs that I have to maintain. I was just wondering if you believe there is an easier way to do this. So I can have the exactly same program and kind of switch between the soft mode, and the "real" mode.
Last updated: 2023-12-07
Post by climblinne on Calling OPC UA Methods from UaExpert
CODESYS Forge
talk
(Post)
Hello, I hope someone could help me. I installed the newest Codesys 3.5 SP 20 Patch 1. When loading the demo files from @i-campbell I can upgrade them to the latest version and everthing works on the OPC-UA client side as expected (object "a" is visible, I can use the "ExampleMethod"). Now I * remove the "Information Model", * delete the "OPC_UA_Symbols Objects", * Add "Information Model" again * add "TestRootObjectType" again and "Generate IEC declarations" * and search for mapped instances (to get instance "a" again) Very good still working as expected. Now I delete the OPC_UA_Symbols and add it again referring to the "objecttest" from 16.9.2020. Also I redo the steps from above. The result is now, that I can't see the "a" object in the "Root/Objects" folder. Why ist this and how can I make it running? I think, it could may be a different version of the UA configuration file. I tried to build my own model definition files and got the same problem (but I am really not an expert). When someone has a actual model, which is also running in the actual Codesys I would be very grateful. Or even better, how to make the correct model in e.g. UA Modeler SW (I followed the description https://documentation.unified-automation.com/uamodeler/1.6.0/html/howprojnet_sec.html).
Last updated: 2024-07-01
Post by trusty-squire on Confused by dwIpoTime input for SMC_Interpolator
CODESYS Forge
talk
(Post)
Hi, Learning Codesys CNC, and I am confused by the dwIpoTime parameter. I have a basic demo application, using SMC_Interpolator feeding into SMC_TRAFO_Gantry2Tool2, which then sets the position of the x/y SM_Drive_Virtual axis. I also have a C axis which revolves the tool, which is controlled using a simple tangential angle calculation SMC_CalcDirectionFromVector. The GCode I'm using has feed/accel set at 500. The axis configuration limits are well above that (2000). What's strange is that, when I run the simulation, the feed speed changes drastically when I update the variable dwIpoTime. The larger the number, the faster it moves. What's going on here? The documentation only says "This variable has to be set for each call. It represents the cycle time in ÎĽsec." Why does it change the feed speed I'm seeing the in simulation? What is a good number to use? The example I was looking at set it at 5000. Screenshot attached.
Last updated: 2024-07-18
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 dogulas on OPC UA C# client connecting to OPC UA CODESYS server
CODESYS Forge
talk
(Post)
Noob alert! I’m just getting my feet wet with CODESYS. I have a “Hello World” project in the CODESYS IDE. I’m using the Win SoftPLC on the same computer. I’ve added a Communication Manager under the Application node. Under that is “OPC UA Server -> IEC Symbol Publishing 01”. I also added “OPC_UA_Symbols -> Information Model”. I’m not sure I need the second thing. I was grasping at straws. I also set up several dummy symbols in the IEC Symbol Publishing 01 node. In my C# application, I am trying to get an instance of EndpointDescription from CoreClientUtils.SelectEndpoint(“opc.tcp://localhost:1217/Gateway-1”, useSecurity: false, 15000). I wasn’t sure about the “Gateway-1”. I found that in the CODESYS IDE under the project -> Communication Settings. When I execute the previous method call in C#, I get: “BadSecureChannelClosed”. I have no idea what that means. Any pointers to documentation are welcome.
Last updated: 2024-08-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.