Post by madskaizer on Task Priority Documentation?
CODESYS Forge
talk
(Post)
Hi All I was watching the Wago PFC300 webinar ( https://www.wago.com/global/lp-thank-you-onlineseminar-pfc-300 ), and the presenters comment about priority 1 being way above the Ethernet task priority, so that a priority 1 PLC program can actually loose SCADA connection, made me try to round up some hard evidence on Codesys Priorities. I find there is very little information on "correct" task priority configuration. There is a lot of different hardware manufacturers, using Codesys Runtime, that has different descriptions in their manuals on how to set up priority. https://doku.amk-motion.com/en/Subsystems/PDK_202975_A-Serie_en/Content/Projekt/AMKAMAC/PDK_202975_A4-A5_Produktbeschreibung/Funktionalitaet/PLC-Programming/PLC%20Tasks.htm?TocPath=PLC-Programming%7C_____7 https://product-help.schneider-electric.com/Machine%20Expert/V1.1/en/SoMProg/index.htm?#t=SoMProg%2FTask_Editor%2FTask_Editor-7.htm&rhsearch=priority&rhhlterm=priority&rhsyns=%20&SUBSTRSRCH=1 https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_f_task_configuration.html So my questions :) 1) If there is only 1 PLC_PRG task, does priority matter? 2) What is the priority of Ethernet / communication, if nothing is entered? 3) What is the priority of Codesys OPC UA server? 4) Some users here on forge mentions that Wago PLC programs should run as priority 11, but where does this recommendation origin from? 5) What are you recommendations for a relatively slow process, like building automation? It uses OPC UA for communication to SCADA, maybe some MODBUS-RTU and MODBUS-TCP, usually around 100 I/O, been running with everything in a single task at priority 1, 50-100ms cycle time. Some controllers have separate MODBUS tasks, but doesn't seem like a big difference. How would you recommend splitting up communication, IO fieldbus and programs into differently prioritized tasks? I know its a complex matter and all about my application, but I really miss there was just some kind of guidance in the documentations and with all new standard Codesys programs having priority 1 as default, makes it seem less important, than it really is.
Last updated: 2025-08-11
OPC UA Information Model Error "Dimensions must be empty"
CODESYS Forge
talk
(Thread)
OPC UA Information Model Error "Dimensions must be empty"
Last updated: 2025-08-11
Post by astrum on OPC UA Information Model Error "Dimensions must be empty"
CODESYS Forge
talk
(Post)
Hello everyone, does anyone know what this error means: Internal Error in code generation for http://opcfoundation.org/UA/DI/: Dimensions must be empty. I use the standard information models from Codesys and haven't even called the Information Model, but my program can't compile. the only thing I did was to insert the Communication Manage.
Last updated: 2025-08-11
Task Priority Documentation?
CODESYS Forge
talk
(Thread)
Task Priority Documentation?
Last updated: 2025-08-11
Post by naci30 on Erreur bibliothèque WagoSysKbusTerminalControl et WagoSysKbusServices pour la gestion de la carte 750-671
CODESYS Forge
talk
(Post)
Bonjour, je suis novice, je rencontre un problème pour mon projet la gestion d'un moteur stepper. j’ai des erreurs dans mon code lié à la carte stepper et aux bibliothèques et je n’avance plus. J'ai joint les différentes captures d'ecran, j’explique ce que j’ai dejà fait fait : - j’ai isolé le code du stepper dans un unique projet afin de déceler d’où venait le problème afin de ne pas modifier totalement tout le projet. Ce que j’ai fait: J’ai supprimé les bibliothèques et j’ai réinstallé, j’ai les bonnes versions. J’ai supprimé le 750-671 du KBUS je l’ai réinstallé pareil. J’ai Nettoyé le code pour pouvoir le recompilé pareil. Je précise la version de mon codesys est : V3.5 SP21 patch 1 J’ai joint les différentes captures d’écran: les bibliothèques, le code de test, les 34 erreurs.
Last updated: 2025-08-11
Post by akrawczyk on Dynamically enabling/disabling Modbus slave devices in runtime (performance issue with timeouts)
CODESYS Forge
talk
(Post)
Hi everyone, I'm working on a CODESYS-based project running on a Weintek cMT2078X HMI with a built-in CODESYS runtime. The system communicates with multiple Modbus RTU slave devices, arranged in a cascade. The number of connected units can vary between 2 and 8, depending on the installation. Each slave has 17 Modbus channels, which are polled cyclically every 5 seconds. The issue is that when fewer devices are physically connected (e.g. only 3 out of 8), the Modbus master still attempts to communicate with all configured slaves. This leads to massive delays due to timeouts (currently 200ms per channel). For one disconnected device, that’s: 17 × 200ms = 3.4 seconds of delay per polling cycle, and this quickly multiplies with each additional missing slave. This behavior significantly degrades the system's performance and responsiveness. We attempted a workaround where we tried to trigger polling based on a variable in the PLC program, but this caused instability and even led to hardware hangs/freezes on the cMT2078X – likely due to clashes in how the Modbus polling engine and program logic interact at runtime. My main questions are: Is there a way in CODESYS to dynamically enable/disable Modbus slave devices at runtime, using a BOOL or INT variable (e.g. indicating number of active slaves)? Can devices or channels be conditionally polled or temporarily disabled without removing them from the device tree? Are there any best practices or examples for handling variable numbers of Modbus slaves in scalable systems like this? Would splitting communication across tasks or interfaces help reduce the impact of timeouts? Any advice, documentation references, or architectural suggestions would be extremely helpful. I'm looking for a robust way to dynamically scale slave polling without degrading system stability or performance. Thanks in advance!
Last updated: 2025-08-11
Codesys Virtual control SL
CODESYS Forge
talk
(Thread)
Codesys Virtual control SL
Last updated: 2025-08-11
Post by yannickasselin on Dynamically enabling/disabling Modbus slave devices in runtime (performance issue with timeouts)
CODESYS Forge
talk
(Post)
I would definitely try using the "Reconfigure" function block from "CAA Device Diagnosis@ library. https://content.helpme-codesys.com/en/libs/CAA%20Device%20Diagnosis/3.5.17.0/CAA-Device-Diagnosis/Function-Blocks/Reconfigure/Reconfigure.html#:~:text=This%20function%20block%20reads%20and,take%20effect. Although I have not tried it with Modbus, I had great success with EtherNet/IP, Profinet and EtherCAT. You can also have a look at the other functions in this library. There are useful functions to help iterate through all the nodes under a master node.
Last updated: 2025-08-12
Post by dkugler on Erreur bibliothèque WagoSysKbusTerminalControl et WagoSysKbusServices pour la gestion de la carte 750-671
CODESYS Forge
talk
(Post)
Hi naci, because this is a english forum it increases the chance to get help a lot if you translate your questions into english before posting :-) happy coding!
Last updated: 2025-08-12
Post by ph0010421 on Dynamically enabling/disabling Modbus slave devices in runtime (performance issue with timeouts)
CODESYS Forge
talk
(Post)
Hello If you uncheck 'Auto restart Communication', it will try once and never again. You can manually reset the slave if needed : Slave.xReset (or something similar) Or I have a ModbusRTU library if you want to try it.
Last updated: 2025-08-12
Post by dkugler on Cursor to move to a control
CODESYS Forge
talk
(Post)
this example may be a hint, how to solve this: https://content.helpme-codesys.com/en/CODESYS%20Examples/_ex_visu_selection.html
Last updated: 2025-08-12
Erreur bibliothèque WagoSysKbusTerminalControl et WagoSysKbusServices pour la gestion de la carte 750-671
CODESYS Forge
talk
(Thread)
Erreur bibliothèque WagoSysKbusTerminalControl et WagoSysKbusServices pour la gestion de la carte 750-671
Last updated: 2025-08-12
Cursor to move to a control
CODESYS Forge
talk
(Thread)
Cursor to move to a control
Last updated: 2025-08-12
Post by eksheep on Issue with Timer-Based Increment Function in CoDeSys Ladder Logic (LD)
CODESYS Forge
talk
(Post)
Hi Lamine97, if you are struggling with the LD implementation it would be more helpful for us to see that code in a screenshot.
Last updated: 2025-08-12
Issue with Timer-Based Increment Function in CoDeSys Ladder Logic (LD)
CODESYS Forge
talk
(Thread)
Issue with Timer-Based Increment Function in CoDeSys Ladder Logic (LD)
Last updated: 2025-08-12
Webseite in die Visu einfügen
CODESYS Forge
talk
(Thread)
Webseite in die Visu einfügen
Last updated: 2025-08-12
PFC 200: RETAIN
CODESYS Forge
talk
(Thread)
PFC 200: RETAIN
Last updated: 2025-08-12
Post by alexanderraab on EtherCAT: How to change station-alias/ Slave address
CODESYS Forge
talk
(Post)
Hello, i have the same situation to change the Station-Alias adress online by IEC-Code. Have someone an exsample for that?
Last updated: 2025-08-13
EtherCAT: How to change station-alias/ Slave address
CODESYS Forge
talk
(Thread)
EtherCAT: How to change station-alias/ Slave address
Last updated: 2025-08-13
(no subject)
CODESYS Forge
talk
(Thread)
(no subject)
Last updated: 2025-08-13
Post by dinesh-vamtec on (no subject)
CODESYS Forge
talk
(Post)
Hello everyone, I'm trying the multiple user management in codesys visu. Could you please assist me.
Last updated: 2025-08-13
Post by timvh on Dynamically enabling/disabling Modbus slave devices in runtime (performance issue with timeouts)
CODESYS Forge
talk
(Post)
As far as I remember, the Reconfigure functionality doesn't work for Modbus devices. But... Each Modbus device in your device tree has a name. You can set the property "Enable" of this device to FALSE to stop communicating with it. So if one of your Modbus Slave devices name is "MbSlave1" in the device tree, then in your code you can set the Enable to FALSE to let it stop communicating: MbSlave1.Enable := FALSE; Please let us know if this worked on your controller with your application and your CODESYS version. Alternatively you could use the ModbusFB library. See: https://forge.codesys.com/prj/codesys-example/modbus/home/Home/
Last updated: 2025-08-13
Post by timvh on Current Visu name without Current Visu Variable
CODESYS Forge
talk
(Post)
To change the current visualization for (all) webclients: Add the library “Visu Utils” and use the following example code: VAR xChangeVisu: BOOL; fbChangeVisu : VU.FbChangeVisu; END_VAR // Change to Visu2 when setting xChangeVisu to TRUE fbChangeVisu( xExecute:= xChangeVisu, xDone=> , xBusy=> , xError=> , itfClientFilter:= VU.Globals.OnlyWebVisu, //itfFilter, eError=> , sVisuName:= 'Visu2'); IF fbChangeVisu.xDone OR fbChangeVisu.xError THEN xChangeVisu := FALSE; END_IF
Last updated: 2025-08-13
Dynamically enabling/disabling Modbus slave devices in runtime (performance issue with timeouts)
CODESYS Forge
talk
(Thread)
Dynamically enabling/disabling Modbus slave devices in runtime (performance issue with timeouts)
Last updated: 2025-08-13
Post by timvh on Current Visu name without Current Visu Variable
CODESYS Forge
talk
(Post)
To get the current visu for all your individual web clients, you could iterate over them, using the same library 1) Create a new function block which implements VU.IVisualizationClientIteration 2) Create an instance of this function block + add an instance of the "iterate" function block fbIterateCallBack : FB_IterateOverClients; // this implements VU.IVisualizationClientIteration fbVuIterate : VU.FbIterateClients; // this FB iterates over all clients 3) Call the fbVuIterate and set the reference to the call back FB. Then it will automatically call the method "HandleClient" of this function block. fbVuIterate( xExecute:= NOT fbVuIterate.xDone, xDone=> , xBusy=> , xError=> , itfClientFilter:= VU.Globals.OnlyWebVisu, eError=> , itfIterationCallback:= fbIterateCallBack); In the HandleClients method you can use the property of the interface of your webclient to which page it is currently on: sCurrentVisuOfClient := itfClient.CurrentVisuName; 4) Optionally from here you could also set the visu for the webclient, but this might be obsolete, because the other function block is now available... xQueryOK : BOOL; xChangePage : BOOL; itfVisuClientRawData : VU.IVisualizationClientRaw; xQueryOK := __QUERYINTERFACE(itfClient, itfVisuClientRawData); IF xQueryOK AND xChangePage THEN VisuElems.g_VisuManager.SetMainVisu(pClientData := itfVisuClientRawData.ClientDataPointer, stVisu := 'Visu2'); xChangePage := FALSE; END_IF
Last updated: 2025-08-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.