Post by kenth1973 on MC_Phasing state explenation
CODESYS Forge
talk
(Post)
Hi Georg OK got it, thank you. I respect your (CODESYS) policies on that issue. Will try to update according to your recommondation if the customer experience same error in the future. Though - from within my coding heart it does bother me deeply, that I cannot get further understanging/knowledge on the iPhasingState, but I guees I will have to swollow that bitter pill and get on with it! hehe ;-)
Last updated: 2025-12-17
Post by bertus on Can't get SMC_SmoothPath to work
CODESYS Forge
talk
(Post)
Thanks. I will do more investigation and testing next week.
Last updated: 2026-01-02
Post by spoun on RaspberryPi 5 gateway problem
CODESYS Forge
talk
(Post)
I have the same issue, has anyone found a possible solution?
Last updated: 2026-03-27
Post by nz-dave on *exception* [processorloadwatchdog] occurred in: app=[all], task=[all]
CODESYS Forge
talk
(Post)
Can anyone shed some light on this issue im having. at random, sometimes days, sometimes weeks or months. i get this error and have to reset the plc. Im using a Weintek HMI with ethernet/ip remote io and vsd. i have tried increasing my task times and watchdogs. and when i view my PLCload in the shell its normally around 3-4%, highest ive ever seen is 7%. Nothing i do seems to help the issue. Could the HMI's Codesys CPU be getting to hot do to high ambient temp?
Last updated: 2026-02-01
Post by konstantin on Lenze i950 Servo and WAGO PFC200
CODESYS Forge
talk
(Post)
Hello, In our workshop we have a Lenze i950 servo drive that has an EtherCAT bus and CiA402 compatibility. The WAGO is PFC200 750-8212 and as per documentation it has built-in license for SoftMotion Light functionality. It is not capable of supporting the full SoftMotion functionality like gearing and synchronizing. I added the EtherCAT esi files from Lenze and the EtherCAT master does see the drive, then I added a SoftMotion Light Axis object. The problem is that I can only energize the axis, I cannot execute any other commands. I set the positive and negative torque limits from the PDOs to 200% and when I try to move the axis by force it does not move back to its original position. I use the SML function blocks from the PLCOpen library and the error from the function blocks is that the op mode cannot be changed. Then I tried using a standard SoftMotion axis object and everything works fine, except the MC_Home function block. The axis moves back to its position when forced out of it. I follow this guide from Lenze - Lenze i950 CODESYS V3 What could cause this issue with the SoftMotion Light axis object? Best Regards Konstantin Kolev
Last updated: 2026-02-11
Post by william on Unit testing support / libraries for EcoStruxure Machine Expert (CODESYS)
CODESYS Forge
talk
(Post)
Thank you, I will try it!
Last updated: 2026-02-20
Post by lukasz on Unresolved reference when trying to upload to Codesys Runtime V3
CODESYS Forge
talk
(Post)
Hello! I'm working with Codesys SP21 Patch 4. The project builds without any errors. When trying to upload my project to Codesys Runtime V3 x64 I get a lot of Unresolved Reference errors, all with FU- at the start and then -CLOSELAYER2, -GETBUSINFO, -GETFRAME etc. I also get a error pop-up that I should 'update device' in the project but it's not specified to which version or anything useful really.There's also not much to choose from. When I check Runtime version in the systray I get 3.5.21.40 and it's the same as I have set up in the project as the device. All information I get is that it should be clear from the errors but no useful information is provided in the errors. Do I need to install some library? I checked other posts and for different reference error and this was the answer. Thanks in advance!
Last updated: 2026-03-25
Post by iliyatsukerman on SoftMotion auf PFC200
CODESYS Forge
talk
(Post)
Hallo, Wir würden Ihre Unterstützung bei der Überprüfung der Kompatibilität der folgenden Konfiguration sehr schätzen: • PSTR-LO-16/400FEV ELMO • SCALANCE XC208 • WAGO PFC200 750-8213/40-010 • Die SPS (WAGO) wird gleichzeitig eingesetzt als: o EtherCAT-Master zur Kommunikation mit einem Elmo-Servoantrieb (EtherCAT-Slave, 4 Achsen – generisches CiA 402-Profil), und o Modbus-TCP-Server zur Kommunikation mit einem Siemens Modbus-TCP-Client, welcher zur Fernsteuerung des Elmo-Servoantriebs über die SPS dient. Bitte bestätigen Sie, ob die SPS in der Lage ist, diese Dualfunktion — als EtherCAT-Master und gleichzeitig als Modbus-TCP-Server — ohne Konflikte oder Performanceprobleme zu unterstützen. Insbesondere interessiert uns, ob die CODESYS SoftMotion SL Basislizenz (2305000000-F) notwendig ist, um 4 Servoachsen zu steuern, und ob diese Lizenz auf einer WAGO PFC200 SPS mit CODESYS Version 3.5 Service Pack 19 Patch 40 oder höher unterstützt wird. Alle Achsen im Servoantrieb werden unabhängig voneinander gesteuert. Mit freundlichen Grüßen. ILIYA
Last updated: 2025-07-13
Post by george32 on Readable IO names
CODESYS Forge
talk
(Post)
Hello Folks, I have a quite basic understanding of how PLC programming works. However I keep getting stuck on 1 problem I could not get my head around. The problem is as follow: I have a PLC with 60 IO (20 inputs, 40 outputs). Each IO is defined as a function block. Furthermore I have an external IO card connected trough a CanBus connection. This IO card has 4 analog input channels (USINT), 4 digital inputs (Bool) and 4, digital outputs (Bool) Because I have 2 different components which both has data have I made 4 arrays to store the data off every component in one variable. PLC_Input: Array [1..20] of BOOL; PLC_Output: Array [1..40] of BOOL IOCard_Input: Array [1..8] of BOOL IOCard_Output: Array [1..4] of BOOL Because the control and reading of the different in and outputs is done by a TCP connection I want to use some kind of enumeration or struct to give each index a name so that my main would be a little bit more readable instead of all the magic numbers. Also this would make my program more dynamic for the furter in case I need to changes some in the IO nummers. For example: pump is placed on the fysical terminal strip number place 54, which is the 3th output of the IO card in the program: if I am sending a message with value 54 I would like to control IOCard_Output[3]. If there is a solution or methode to get this done, I can eventually do the following in my main program: IOCard_Output[Pump]. I have tried the following: IOCard_Output[Pump - 51] with an enumration but this keeps raising an error I hope some of you could help me further with this problem. In gross lines: I want to couple all the different IO to a more readable name and this readable name should control the right Array index Thanks in advance, George
Last updated: 2024-09-26
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 mariapaola on Port instantiation of serial interface in WAGO PLC using Modb_L05.lib in CoDeSys v2.3
CODESYS Forge
talk
(Post)
Hi, Would really appreciate your insights in this issue I have. I am currently using a WAGO 750-881 with multiple IO devices. For one of them I already occupied the MODBUS Master configuration tool so I cannot overwrite it for my other devices. I have a total of two serial interfaces WAGO 750-652. The first one is instantiated in COM2 and doesn't need any protocol since the information comes in an specific formatting that need little code to differentiate between needed info. This one is working just fine. The second one is where I have an issue. I have tried to instantiate the port using MODBUS library modb_L05.lib to properly receive the data from an ARDUINO and I am absolutely unable to open the port: Signal DEVICE2.fbModbus.MODBUS_EXT_MASTER.Interface.Com_Port_Ist_Offen is never TRUE, among with all other signals from that interface, while signal DEVICE1.COM2.Com_Port_Ist_Offen is TRUE, and the other signals also read as TRUE or FALSE. I have tried instantiating the second one as the first one, changing COM3 to COM4, I've tried a lot of things but it wont ever open the channel. I don't know if you have any recommendations for me. For both physical modules, both witness LEDs A and E are on. First one is instantiated like this: PROGRAM DEVICE1 VAR wBaudRate : WORD := BAUD_9600; bDataBits : BYTE := 8; bParity : BYTE := 0; bFlowControl : BYTE := 3; (RS422 FullDuplex with continous send) i : INT; COM2 : SERIAL_INTERFACE; xOpenPort2 : BOOL := TRUE; ( Flag to open the Port ) xInitPort2 : BOOL; ( Flag to initiallize the Port ) ReceiveBuffer2 : typRing_Buffer; END_VAR COM2( bCOM_PORT_NR := 2, cbBAUDRATE := wBaudRate, cbsBYTESIZE := bDataBits, cpPARITY := bParity, csSTOPBITS := STOPBITS_1, cfFLOW_CONTROL := bFlowControl, utRECEIVE_BUFFER := ReceiveBuffer2, ptSEND_BUFFER := ADR(SendString2), xINIT := xInitPort2, xOPEN_COM_PORT := xOpenPort2, iBYTES_TO_SEND := LEN(SendString2)+1, xSTART_SEND := xSendActive2 ); Second one like this: PROGRAM DEVICE2 VAR COM4 : SERIAL_INTERFACE; xInitPort4 : BOOL := TRUE; xOpenPort4 : BOOL := TRUE; ReceiveBuffer4 : typRing_Buffer; fbModbus : MODBUS_EXTENDED_MASTER_RTU; fbError : enumMB_ERROR; stQuery : typModbusExtendedQuery; stResponse : typModbusResponse; au16Data : ARRAY[0..14] OF WORD; i : INT; tPoll : TON; END_VAR COM4( bCOM_PORT_NR := 4, cbBAUDRATE := BAUD_9600, cbsBYTESIZE := 8, cpPARITY := 0, csSTOPBITS := STOPBITS_1, cfFLOW_CONTROL := 2, ( RS-485 half-duplex ) utRECEIVE_BUFFER := ReceiveBuffer4, xINIT := xInitPort4, xOPEN_COM_PORT := xOpenPort4, xSTART_SEND := xSendActive4, ); stQuery.SlaveAddress := 1; stQuery.FunctionCode := 3; stQuery.Read_StartAddress := 0; stQuery.Read_Quantity := 15; (Poll code) fbModbus( ENABLE := TRUE, bCOM_PORT := 4, ( COM4=> 750-652 port ) cbCOM_BAUDRATE := BAUD_9600, cpCOM_PARITY := 0, csCOM_STOPBITS := 1, cbsCOM_BYTESIZE := 8, cfCOM_FLOW_CONTROL := 2, TimeOut := T#500ms, StartFunction := xStart, ExtQuery := stQuery, Response := stResponse, MB_Error => fbError ); FOR i := 0 TO 14 DO au16Data[i] := stResponse.Data[i]; END_FOR;
Last updated: 2025-11-28
Post by tcarlbom on Read tag values using external program
CODESYS Forge
talk
(Post)
This is my first time posting in this forum and I am new to codesys. I am a fullstack developer and I am trying to figure out how the following. What would be the best approach to create a own/custom tag browser? Either directly in codesys ide or using a separate custom program (perhaps a winforms application). 1.a. Shall I parse the .project xml file to get a list of all tags in the project? 1b. Shall I use python scripting in codesys ide to get a list of tags? Once one have selected some tags. These tags shall be exposed to a python program which will be acting as a edge computer. It’s fine to be able to import a file. 2a. I found a library called codesys plchandler which (as I understand) acts a rest api server. Is this correct? If so, can I query the api from a custom python script, ie can query what tags exist in project and or read tag values? My research so far. From earlier projects I know that using opc ua would be perfect for this but from my opinion it’s bloating the plc since it’s resource intensive. So opc ua is not an option. Codesys automation server is neat. But I don’t want to rely on some cloud services and subscription based pricing. There seem to be several interesting codesys libraries like mqtt, tcp server and NVL sender which would help me expose plc tags. But all have a common problem. One have to manually write what tags which will be used in these function blocks. I want a similar experience like “selecting” tags in the opc ua or the codesys tracing, ie a tag browser.
Last updated: 2024-06-28
Post by fmon on Modbus : dis- / re-connect cable: modbus does not re-start
CODESYS Forge
talk
(Post)
Hello, I am using codesys Modbus TCP client (4.4.0.0) to communicate with a python modbus server (package pyModbusTCP). I first start my python server on the distant machine. After a fresh codesys compilation, a plc connection/transfer and a PLC run, the modbus connection is OK. Every time in this context the connection is created correctly. When I shut down the server, the modbus connection falls, that is normal. When I restart the python server, impossible to recreate the modbus connexion. With the client autoreconnection, I see on my server that the client tries to connect but unsuccesfully. I have the following message : DEBUG:pyModbusTCP.server:accept new connection from ClientInfo(address='192.168.1.20', port=33476) DEBUG:pyModbusTCP.server:Exception during request handling: NetworkError('recv return null') I tried to stop the codesys client and to restart it with these commands : Modbus_TCP_Client.xStop := True; // Or False Modbus_TCP_Client.Enable := True; // Or False Modbus_TCP_Server.Enable := True; // Or False I tried to confirm the error manually to force reconnection with: Modbus_TCP_Server_Motors.xConfirmError := TRUE; I tried also this command to STOP/RESET/START client and server (codesys side) but nothing happens : status_client := Modbus_TCP_Client.SetCommunicationState(eRequestedState := DED.DEVICE_TRANSITION_STATE.STOP); // .RESET & .START The answer of this function when executed is "status_client = NOT_SUPPORTED" It seems that is a socket problem, but I do not understand if it is on the client or server side. I tried a modbus simulator called "ananas.exe" and the result is the same. Impossible to get a modbus reconnection. What is different at the first connection and at a reconnection attempt ? Thanks for your help
Last updated: 2025-03-14
Post by fmon on Modbus TCP client reconnection problem
CODESYS Forge
talk
(Post)
Hello, I am using codesys Modbus TCP client (4.4.0.0) to communicate with a python modbus server (package pyModbusTCP). I first start my python server on the distant machine. After a fresh codesys compilation, a plc connection/transfer and a PLC run, the modbus connection is OK. Every time in this context the connection is created correctly. When I shut down the server, the modbus connection falls, that is normal. When I restart the python server, impossible to recreate the modbus connexion. With the client autoreconnection, I see on my server that the client tries to connect but unsuccesfully. I have the following message : DEBUG:pyModbusTCP.server:accept new connection from ClientInfo(address='192.168.1.20', port=33476) DEBUG:pyModbusTCP.server:Exception during request handling: NetworkError('recv return null') I tried to stop the codesys client and to restart it with these commands : Modbus_TCP_Client.xStop := True; // Or False Modbus_TCP_Client.Enable := True; // Or False Modbus_TCP_Server.Enable := True; // Or False I tried to confirm the error manually to force reconnection with: Modbus_TCP_Server_Motors.xConfirmError := TRUE; I tried also this command to STOP/RESET/START client and server (codesys side) but nothing happens : status_client := Modbus_TCP_Client.SetCommunicationState(eRequestedState := DED.DEVICE_TRANSITION_STATE.STOP); // .RESET & .START The answer of this function when executed is "status_client = NOT_SUPPORTED". Is it normal ? It seems that is a socket problem, but I do not understand if it is on the client or server side. I tried a modbus simulator called "ananas.exe" and the result is the same. Impossible to get a modbus client reconnection. What is different at the first client connection and at a reconnection attempt ? Thanks for your help
Last updated: 2025-03-17
Post by dnordenberg on BOOL variable in OPC UA and modbus simultaneously
CODESYS Forge
talk
(Post)
How can I have an BOOL variable that is read/write in both modbus TCP server and from OPC UA at the same time? Variables with %MX.n %QX.n addressing which is used for BOOL/coils in modbus server is not allowed in OPC UA symbol list on Schneider M251 controllers. I have already asked on Schneiders forum but there are not a lot of codesys experts over there :( So OPC symbols can't have a address and the modbus TCP server needs a address. So how should I do it then? It seems like an impossible combination. Since I want read/write access from both ways I can't just simply make a second variable and assign it the value of another since it would be a one way assignment. I also tried using VAR_CONFIG which then makes the address syntax %Q or %M in my main variable list and that fools OPC UA Symbol Configuration to allow it and then I add the complete %MX.n address of it in the VAR_CONFIG list. This semi works, I can toggle the BOOL from modbus but the OPC UA symbol seems to be read only. It displays symbol status but nothing happens when I toogle it. I think I need another way to have the variables and symbols pointing to the same bits in memory... My plan B is to write a BOOL array compare FB that saves a history bit from previous cycle and if that does not match current status at next cycle for either the OPC symbol or the modbus variable then it copies the new status over to the other. Maybe ugly but it's like my last alternative. Kind regards David
Last updated: 2025-07-14
Post by serwis on Dynamic target position tracking
CODESYS Forge
talk
(Post)
Hello, I am trying to control a servo drive and dynamically set its position. I control the drive via EtherCAT with a cycle time of 500us. I use the MC_MoveAbsolute block for this. The problem is that when using a PID controller, I generate the positions I want the drive to move to on an ongoing basis, and I would like the position to be set immediately. The MC_MoveAbsolute block must receive a rising edge to execute, and I would like the movement to be performed without waiting for this edge. I have created a function that generates a rising edge every 1 ms, but I am unable to change this time to 500 µs because the TON function does not support times shorter than 1 ms. Below is the code to call the rising edge: IF Exe = TRUE THEN delay1(IN:=TRUE, PT:=T#1MS); IF delay1.Q = TRUE THEN Exe := FALSE; delay1(IN:=FALSE); END_IF END_IF IF Exe = FALSE THEN delay(IN:=TRUE, PT:=T#1MS); IF delay.Q = TRUE THEN Exe := TRUE; delay(IN:=FALSE); END_IF END_IF END_IF Here is the code for calling the MC_MoveAbsolute function: MoveDegree( Axis:= Tilt, Execute:= Exe, Position:= position_target - (base_angle_real * feedforward_turn), Velocity:= vel, Acceleration:= acc, Deceleration:= dec, Jerk:= jerk, Direction:= MC_DIRECTION.shortest, BufferMode:= MC_BUFFER_MODE.Aborting, Done=> , Busy=> , Active=> , CommandAborted=> , Error=> , ErrorID=> ); I realize that there are probably better methods for performing this type of task. How can I implement motion with a dynamically changing setpoint? THANKS
Last updated: 2025-09-05
Post by testlogic on Sending Sequential Modbus TCP Packets
CODESYS Forge
talk
(Post)
I have a Modbus TCP slave device where I need to do sequential writes to the same register. The register I'm writing to is kind of like a command line, each packet is a command word encoded in Hexadecimal. I am having difficulty implementing this system in CoDeSys 3.5 SP19. I feel like the structure of the program should be something along the lines of (Pseudocode): ModbusTCPSend(Command Register, Command1) ModbusTCPSend(Command Register, Command2) ModbusTCPSend(Command Register, Command3) I have tried to implement this with a rising edge trigger wMot1OPCode := 16#E1; //Stop Motor & Kill Program xMot1SendOP := TRUE; //Send OP on rising edge xMot1SendOP := FALSE; //Reset wMot1OPCode := 16#9E; //Disable Motor xMot1SendOP :=TRUE; //Send OP on rising edge xMot1SendOP := FALSE; //Reset Where "wMot1OPCode" is the IO map for writing to the command register, and "xMot1SendOP" is the rising edge trigger for that modbus channel. However, this doesn't work. The device never responds to the modbus commands. It seems like the trigger variable is switched too quickly for modbus to send the packet. I know the modbus register is working, because I can set the channel to cyclic and the device will respond. However, I can't use this reliably because I need each command to be sent once, in order. Cyclic keeps re-sending the commands and seems like it could miss a command as well if one was sent in-between cycle time. I have also trying using the Application trigger as described by https://faq.codesys.com/pages/viewpage.action?pageId=24510480, but this is also not working for me. See attached picture for my FBD code. This seems like a simple function, I can't tell what I'm doing wrong here. Thanks for the help.
Last updated: 2024-03-06
Post by reinier-geers on Ping By Name
CODESYS Forge
talk
(Post)
How can i ping my computer by name ? My controler uses SysSockPing , But seems only by IP adres, not by name. IP adres changes. So how can i ping by name or know that im connected
Last updated: 2023-08-24
Post by reinier-geers on Ping By Name
CODESYS Forge
talk
(Post)
To bad. Controller uses Version 9.2 But i dont see a lower version of net bas Service. Maybe i can try a linux command.
Last updated: 2023-08-29
Post by roundex on CSVReaderInit returns error : INVALID_HANDLE
CODESYS Forge
talk
(Post)
I got same issue but managed to get it to work again by downgrading the Runtime. Here's my specs: CODESYS V3.5.19.0 Runtime Linux SL 4.7.0.0. CSV Utility SL 1.1.0.0 (Licensed IIoT libraries SL) I tried Runtime 4.8.0.0. and 4.9.0.0 but both result in INVALID_HANDLE error.
Last updated: 2023-08-30
Post by janderson on Ethercat scan for devices not picking up EL7041 as a softmotion axis
CODESYS Forge
talk
(Post)
I have a beckhoff EL7041-1000 rev 21 in my ethercat bus but it wont correctly create a softmotion axis unless i manually insert the device. scan for devices gives me an el7041-1000 without an SM3 axis.
Last updated: 2023-09-02
Post by jinil on Import RsLogix 5000 project to Codesys
CODESYS Forge
talk
(Post)
Hello, I am trying to do the same thing. I want my Rslogix 5000 project into Codesys. Was wondering if you have found a way to do it. Thank you.
Last updated: 2023-09-07
Post by jinil on Import RsLogix 5000 project to Codesys
CODESYS Forge
talk
(Post)
Hello, I am trying to do the same thing. I want my Rslogix 5000 project into Codesys. Was wondering if you have found a way to do it. Thank you.
Last updated: 2023-09-07
Post by wehling-h on Troubles with using CAN API
CODESYS Forge
talk
(Post)
Hi together, I'm using a 11bit driver system which seems to work well so far. May someone here knows if i have to configure a singleID for each message i like to receive and evaluate?
Last updated: 2023-09-11
Post by transmin01 on CANbus issue
CODESYS Forge
talk
(Post)
Hi, I have been trying to get a CANbus device working with Codesys 3.5SP19 patch1 via a Beckhoff EL6751 gateway without success. I have the CANOpen_Manager and CANopen device configured but this will not run. Is there any code required to kickstart the CANbus comms into action? Regards Trevor
Last updated: 2023-09-13
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.