Post by wchin on Passing EtheNetIP adapter device into a Function Block to access it's IO
CODESYS Forge
talk
(Post)
We are creating helper function blocks for our VFD(EtherNetIP). How should I set it up so that I can pass the device into and out of the Function Block so that ideally I can access the IO of the device by devicename.channelname. So something like for example we have a VFD with a start bit that is in the ControlWord channel and a SetVelocity that is a channel. And we want to create a Function Block called StartVFD. So I declare something like: FUNCTION_BLOCK StartVFD VAR_IN_OUT device: ioDrvEthernetIP.RemoteAdapter; END_VAR VAR_INPUT velocity : REAL; So in the code it would look something like device.SetVelocity := velocity; device.ControlWord.6 := True; We have a pretty basic eds file for our VFD and can update it if necessary. Thanks in advance.
Last updated: 2025-10-28
Post by wchin on Passing EtheNetIP adapter device into a Function Block to access it's IO
CODESYS Forge
talk
(Post)
We are creating helper function blocks for our VFD(EtherNetIP). How should I set it up so that I can pass the device into and out of the Function Block so that ideally I can access the IO of the device by devicename.channelname. So something like for example we have a VFD with a start bit that is in the ControlWord channel and a SetVelocity that is a channel. And we want to create a Function Block called StartVFD. So I declare something like: FUNCTION_BLOCK StartVFD VAR_IN_OUT device: ioDrvEthernetIP.RemoteAdapter; END_VAR VAR_INPUT velocity : REAL; So in the code it would look something like device.SetVelocity := velocity; device.ControlWord.6 := True; We have a pretty basic eds file for our VFD and can update it if necessary. Thanks in advance.
Last updated: 2025-10-28
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 gseidel on Can't get SMC_SmoothPath to work
CODESYS Forge
talk
(Post)
Hi bertus, I cannot see any problem in the code you posted. Just some ideas: What is the value of D_ANGLE_TOL? - Do you need the assignment bAbort := NOT bDecoder? Does it help to leave it out? Any errors (e.g. SMC_SmoothPath.Error/ErrorID) or PLC log messages? What if you comment out SMC_SmoothMerge and SMC_LimtiDynamics, is corner smoothing still not working? Is bDecode written from a different task (e.g. visu)? Then I would recommend to assign to a local variable (bDecodeLocal := bDecode) and use that for all FBs. Otherwise, FBs might see different values of bDecode in a single cycle, which will cause problems. Regards, Georg
Last updated: 2025-12-17
Post by pernockham on Unable to deploy "Control for Linux SL 4.18.0.0"
CODESYS Forge
talk
(Post)
The option to update "Control for Linux SL" is not shown in the "deploy control SL tool", I can see and update the gateway but not the control (3.5.21 SP4). Has the way to update control SL changed? In the process of fault finding I removed the control SL entirely from my target, then I had to revert to version 3.5.21.0 SP 1 to re-install "Control SL 4.17.0.0". So I thought it was just a matter of using SP1 to update also to 4.18.0.0, but after installing the files for 4.18.0.0 in the SP1-version, the behavior was identical to SP4, ie no Control for Linux SL shown in the deploy tool.. See screenshots.
Last updated: 2025-12-19
Post by reinier-geers on wEBCLIENT Post data api
CODESYS Forge
talk
(Post)
Ive got the webclient axample. If i put https://reversed.notion.site/Marktprijzen-API-89ce600a88ac4abe8c2ad89d3167a83e example to https://reqbin.com/post-online then i get data. If i do the same in Webclient example i get " not a valid graphql request. Why ? sUrl := 'https://graphql.frankenergie.nl/' Request_type_post Contenttype = 1 (json ) Postvalue := '{"query":{"query":"query MarketPrices {\n marketPrices(date:\"2025-12-25\") {\n electricityPrices {\n from\n till\n marketPrice\n marketPriceTax\n sourcingMarkupPrice\n energyTaxPrice\n perUnit\n }\n gasPrices {\n from\n till\n marketPrice\n marketPriceTax\n sourcingMarkupPrice\n energyTaxPrice\n perUnit\n }\n }\n}' I tranfer the postvalue from String to WSTRING
Last updated: 2025-12-25
Post by remlab on WebClient result empty
CODESYS Forge
talk
(Post)
Hello, I try to read into a IPX800v4 (this is a PLC for domotic application) with a WebClient fonction I use as url http://192.168.0.250:50543/api/xdevices.json?key=XXX&Get=C XXX is replace by the correct key for sure The status code is 200, it should works correctly But the result is '{' that's my problem When I try the same url with a web browser the result is correct like { "product": "IPX800_V4", "status": "Success", "C1": 16, "C2": 2, "C3": 0, "C4": 0, "C5": 0, "C6": 0, "C7": 0, "C8": 0, "C9": 0, "C10": 0, "C11": 0, "C12": 0, "C13": 0, "C14": 0, "C15": 0, "C16": 0 } When i replace the url by a web site like google for exemple it works Can you help me please ?
Last updated: 2026-03-04
Post by infinitetool on No connection could be made because the target machine actively refused it
CODESYS Forge
talk
(Post)
Hi! I'm having trouble connecting to a device in Deploy Control SL. I'm able to see the device is available during a scan, and I can ping the device as well, but when I try to connect I get the message "No connection could be made because the target machine actively refused it". I've worked on this for hours including turning off the firewall on the device PC but nothing seems to work. The device is running a fresh install of Windows 11 IoT Enterprise 2024 and the Development System is 3.5.21.50 running on Windows 11. Thank you in advance for any ideas!
Last updated: 2026-03-10
Post by mascara on JOG continues in WCS ( SMC_GroupJog2 )
CODESYS Forge
talk
(Post)
I'm using the SMC_GroupJog2 block from the SM3_Robotics library for manual movement of an AxisGroup in WCS coordinates. The observed behavior is: When pressing X+, the X-axis starts moving correctly. If I press Y+ during the movement, the block interrupts the current movement and starts a new movement in X and Y. If I release any button, all axes stop, even if another button is still pressed. Example: Pressing X+ → X moves Pressing X+ and Y+ → X stops momentarily and starts XY movement Releasing X+ while holding Y+ → all axes stop The expected behavior would be: to allow simultaneous continuous movement on multiple axes to not interrupt movement when another axis is added or removed. Is there a correct configuration of SMC_GroupJog2 to achieve this behavior, or is there another block more suitable for continuous manual jog in AxisGroup (WCS)?
Last updated: 2026-03-11
Post by reinier-geers on internal error
CODESYS Forge
talk
(Post)
Hi ive got an internal error. BUt no solution for this. How do i solve this ? ------ Build started: Application: Slave_3.Application ------- [ERROR] Internal error:System.NullReferenceException: De objectverwijzing is niet op een exemplaar van een object ingesteld. bij _3S.CoDeSys.ObjectManager.ExistingPSNode.get_ParentObjectGuid() bij _3S.CoDeSys.ObjectManager.AbstractPSNode.get_ParentNode() bij _3S.CoDeSys.ObjectManager.ProjectStructure.ConsolidateAndClearPendingChanges(LList`1 pendingChanges) bij _3S.CoDeSys.ObjectManager.ProjectStructure.RaisePendingChanges(Boolean bTriggerPendingChanges2) bij _3S.CoDeSys.ObjectManager.Project.HandleUndoMgrAfterEndCompoundAction2(EventArgs e) bij _3S.CoDeSys.ObjectManager.UndoManager.OnAfterEndCompoundAction2(EventArgs e) bij _3S.CoDeSys.ObjectManager.UndoManager.EndCompoundAction() bij _3S.CoDeSys.DeviceEditorSoftMotion.StaticSoftMotionEditor._ehBeforeCompile(Object sender, CompileEventArgs e) bij _3S.CoDeSys.Core.LanguageModel.CompileEventHandler.Invoke(Object sender, CompileEventArgs e) bij _3S.CoDeSys.Core.LanguageModel.CompileEventHandler.Invoke(Object sender, CompileEventArgs e) bij _3S.CoDeSys.LanguageModelManager.LanguageModelManagerConsolidated.OnBeforeCompile(CompileEventArgs e) bij _3S.CoDeSys.LanguageModelManager.LanguageModelManagerConsolidated.RaiseAndCheckBeforeCompile(Guid guidApplication, IMessageCategory cmc) bij ..(Boolean , Boolean , Boolean ) bij _3S.CoDeSys.Compiler35210.CompilerPhases.CompilerPhaseControllerGenerateCode.(Boolean ) bij _3S.CoDeSys.Compiler35210.CompilerPhases.CompilerPhaseControllerGenerateCode.() Build complete -- 1 errors, 0 warnings : No download possible
Last updated: 2026-04-14
Post by darwin03 on Mismatch between coordinate monitor and actual motion using SMC_GroupJog2, MC_MoveLinearAbsolute (6DOF)
CODESYS Forge
talk
(Post)
Dear Georg, Thank you for your explanation about the axis scaling. I checked the scaling of Joint6 and corrected it so that one technical unit equals one angular degree. However, I am now facing another issue. When I move all axes to zero position and then try to use SMC_GroupJog2 and MC_MoveLinearAbsolute, I receive the error SMC_CP_CONFIGS_DIFFER I already tried moving each joint manually to different positions before executing the motion command, but the error still appears. Could you please explain: What exactly causes SMC_CP_CONFIGS_DIFFER Thank you very much for your support. Best regards, darwin03
Last updated: 2026-05-04
Post by pernockham on Gateway in China - "Gateway not connected"
CODESYS Forge
talk
(Post)
I think I understand my problem. They are most probably related to configuration of the network. When I use DHCP for the unit to my router it all works. However when using static IP I have not managed to reach functioning state. Trying to replicate the situation on my desk. Having a static IP on the "debian host" and a connection to my computer which then routes traffic on to internet. I have entered settings for gateway and netmask. I can ping from my "debian plc host" to internet and also do "curl google.com" so traffic seems to find its way through and back, still "Automation server" will not find the gateway. Any hints how a manual configuration should be done? Is it possibly a "firewall" issue of my "normal router"? Thanks for any help! Per
Last updated: 2026-01-27
Post by timvh on CPU + EtherCAT redundancy
CODESYS Forge
talk
(Post)
It works well with two Wago 750-8210's. I helped a few customers setting this up. But it should work with any device which can control EtherCAT I/O, is real-time and has sufficient network interfaces. Two network adapters can be used to create a redundant EtherCAT network (you need 2 additional switches for this). The other network adapters can be used to interconnect the 2 PLC's (synchronization). We noticed that if you exchange variable lists that there could be some issues if you have long lists. So what we did is use a SoftPLC on a server that contains all the settings which continuously sends network packages (GVL sender) and which is received by both PLC's (network receiver). Switching over is done in milliseconds. The bus doesn't notice the change-over. EtherCAT communication works flawlessly.
Last updated: 2026-01-30
Post by winki on Error in licence activation
CODESYS Forge
talk
(Post)
Hello, I think I understand: On my debian gateway I have done: sudo cmu --list cmu - CodeMeter Universal Support Tool. Version 8.30a of 2025-May-06 (Build 6885) for Linux/ARMHF 64-Bit Copyright (C) 2007-2025 by WIBU-SYSTEMS AG. All rights reserved. List all locally connected CmContainers: - CmContainer with Serial Number 130-XXXXXXXX and version 3.00 (empty) - CmContainer with Serial Number 130-XXXXXXXX and version 3.00 (locked) Result: 2 CmContainer(s) listed. The licence has been activated with a computer Name, but the guy who did it make a mistake in the name, so he changed it after to have activate the licence. I think this has created a second container. The licence is actived on the other container.
Last updated: 2026-02-06
Post by timvh on EXCEPTION [watchdog] how to find position cause
CODESYS Forge
talk
(Post)
Monitor what your current cycle time is (in the Task Configuration when you are online). If this is sometimes close to 200ms, then change your code (e.g. limit the loops, or prevent copying a lot of data between objects). Or just set the Watchdog time (or sensitivity) higher if you don't care that it sometimes takes longer than 200ms. If you want to find out which objects in your application consume the most time, then buy a PDE (Professional Developer Edition) license. With this you get a license for the Profiler. This can help you a lot to find the root cause, because it will create a nice overview of all objects, their calls and the time (percentage) it takes to execute it.
Last updated: 2026-02-09
Post by konstantin on CAM Motion Recover after STO
CODESYS Forge
talk
(Post)
Hello, one of the projects I work on is about a racetrack collator with two independent belts on it - two different servo motors. Both motors share the same mechanical frame and there is a train on a belt that collects items from the input conveyor. The way the motion is performed is the following - there is a virutal master axis and both real axis are synchronised with different cam motion profiles. The problem is when an STO is triggered on any of the slave axis, the synchronization process starts from position 0 of the slaves. How can I force the slaves to retain their current position until the master passes their position? Then the slaves should catch up with the master according to the profile, the slaves should not start synchronization from 0 position. Best Regards Konstantin Kolev
Last updated: 2026-02-12
Post by konstantin on Lenze i950 Servo and WAGO PFC200
CODESYS Forge
talk
(Post)
Hello, basically the i950 drive support CiA402 Basic and CiA402 Advanced modes. I attached pictures of both mode supported functions. It also support CSP, VL, CSV and CST modes. It seems the homing mode is in CiA402 Advanced mode but how can you not have the homing mode in both modes? It is a vital part of any servo system. If I use the SoftMotion standard demo mode, I can move the servo absolute and relative but cannot home it. But in SoftMotion Light mode, I cannot execute any motion function. Here is the official manual for i950 servo drive - i950 Documentation Best Regards Konstantin Kolev
Last updated: 2026-02-13
Post by gseidel on CAM Motion Recover after STO
CODESYS Forge
talk
(Post)
Dear Mr. Kolev, I'm not sure I understood correctly. But this is my take on your question: When the STO of the slave is triggered, store the current master position (e.g. 225 units) After the reset of the slave error, call MC_SetPosition on the virtual master and reset it to the stored position (225 units) Optionally, before MC_CamIn is restartet, move the slave back to the slave position corresponding to the stored master position. (If you do this, no ramping in will be necessary) Restart MC_CamIn, with absolute master position and absolute slave position. Choose the StartMode that is appropriate for your machine. Best regards, Georg Seidel
Last updated: 2026-02-16
Post by gordonkeller360 on Escape character behavior for hex values in string -- what gives?
CODESYS Forge
talk
(Post)
I have a program which sequentially places byte representations of characters from a string into an array. FUNCTION_BLOCK MoveBytesFromString VAR_IN_OUT abRxBuf: ARRAY [0..79] OF BYTE; END_VAR VAR testString : STRING := '$0A$R$L$TTesting,123...$94$86$0A'; iCount: DINT; END_VAR ---------------------------------------------------------------------------------------- // clear the buffer MEM.MemFill(ADR(abRxBuf), 80, 0); FOR iCount := 0 TO LEN(testString) - 1 DO // account for undesired null terminator of string abRxBuf[iCount] := testString[iCount]; END_FOR Escaped characters, like $T, $N, etc. work just fine, and so do their hex representation counterparts ($09, $0A, etc). However, when I put something like $94, I get a set of nonsense values... see image attached after one spin of the program. Could someone explain to me what is happening here? I'll continue to investigate...
Last updated: 2026-03-09
Post by poliautomacao on Absolute movement controlled by an external encoder.
CODESYS Forge
talk
(Post)
Hello, I made this configuration, I'm moving the encoder value to SM_Driver_PosControl.in.wActPosition. When I make the absolute movement of my PosControl axis, my physical drive axis rotates perfectly, but I noticed that the movement is not followed by the encoder. That is, if I hold the encoder and keep it in position 0, the PosControl axis makes the absolute movement of 314 mm and stops, which is strange because the encoder is at 0. Theoretically, the PosControl axis should accelerate to try to compensate for the movement error. I haven't yet achieved perfect functionality.
Last updated: 2026-03-24
Post by jorenbeyl on library inside library
CODESYS Forge
talk
(Post)
I am currently developing a library that contains real‑time data. To handle this real‑time data, I am using additional libraries called SysTime and SysTypes Interfaces. When I compile my library on its own, no errors occur. However, when I use this library in a project and compile the project, I get an error indicating that the SysTime data type is not recognized. This happens even though the SysTime library is visible as a dependency under my library. Does anyone know how to correctly include a library within another library so that the project recognizes the sub‑library without causing compilation errors?
Last updated: 2026-04-23
Post by polo on 1 Wire und i2c zeitgleich in Betrieb
CODESYS Forge
talk
(Post)
Hallo zusammen, ich habe schon einige Zeit 16 DS18B20 am 1 Wire laufen ... auch die ganze Zeit stabil ... jetzt habe ich ein PWM Signal über i2c für eine Pumpenansteuerung zusätzlich in Betrieb genommen.. nur das Signal für die Pumpe geht über i2C ... 100Hz 10ms. Es läuft auch alles soweit ... nur fallen mir jetzt die Temperaturen in Abständen aus ... Vertragen sich die beiden Systeme zeitlich evtl. nicht so gut ... 1 wire extra task mit 200ms Prio 0 i2c task 10ms ... damit die 100Hz auch übertragen werden Prio 1 (Adafruit_PWM) Main Task 20ms Prio 5 Oder jetzt besser beides über i2c abrufen ... ist aber dann evtl. für die DS18B20 zu schnell ? Oder sind die 5V vom Pi jetzt zu schwach für beide Signale? Vielen Dank euch
Last updated: 2026-04-27
Post by kurt9 on ReadWriteEEprom FB question
CODESYS Forge
talk
(Post)
I want to programmatically write the alias address to a new EtherCAT slave when I plug it into my IPC EtherCAT network. I am looking at the ReadWriteEEprom FB and see that one of the elements is "pbyData". which is the pointer to byte that is usually set to 2048 bytes. Since I am setting the alias address to the EEprom only (EEprom address 16#0012), I would assume that what I am writing is 2 bytes only. Does the pbyData have to be specified as ADR(myArray) where "myArray" is the 2 bytes of the alias address? How is the best way to set this element of the function block? Thanks in advance
Last updated: 4 days ago
Post by thommy54 on CODESYSControl_User cfg richtig konfigurieren
CODESYS Forge
talk
(Post)
Hallo, nach Erwerb eines neueren Raspberry pi 4 (V1.5) musste ich zwangsläufig von Codesys 3.5.16 hochwechseln - ich habe auf 3.5.20.1 geupdated. Da schlugen mir plötzlich ne Menge Einschränkungen entgegen, deren Behebung einige Zeit dauerte. Eine davon ist, das ein SysFile.SysFileOpen nicht mehr funktioniert. Ich habe das Problem mit Einträgen in der /etc/CODESYSControl.cfg behoben: [SysFile] FilePath.1=/etc/, 3S.dat IecFilePath.1=/proc/, cpuinfo IecFilePath.2=/proc/, iomem PlaceholderFilePath.1=/sys/devices/w1_bus_master1, $OneWire$ PlcLogicPrefix=1 ; ; ---------------------- ; selbst eingefügt PlaceholderFilePath.2=/home/root, $my_home_root$ PlaceholderFilePath.3=/etc/init.d, $my_conf$ PlaceholderFilePath.4=/var/lib/mpd, $my_music$ PlaceholderFilePath.5=/root/Rasp_SPS_Filesystem, $my_Rasp$ Ob die Einträge sich etwas überlappen, kann mir gern jemand sagen, das ist aber nicht das Problem. Ich habe bei den vielen Versuchen, das Teil zum Laufen zu bringen, bemerkt, daß die Einträge auch ganz schnell mal verschwinden. Das ist ja auch so beschrieben, wenn die nächste Version kommt, sind meine Einträge weg. Da ich ähnliche Probleme mit dem Funktionieren von "SysProcessExecuteCommand2()" hatte, die ich ebenfalls mit Einträgen in die /etc/CODESYSControl.cfg hätte beheben können, habe ich gelesen, das man "private" Einträge lieber in die Datei /etc/CODESYSControl_User.cfg machen soll. Gesagt getan und "SysProcessExecuteCommand2()" lief: [SysProcess] Command=AllowAll Command.0=shutdown Aber auch irgendwo stand, das so ein Beteichner wie [SysFile] oder [SysProcess] nur einmal in den beiden Files /etc/CODESYSControl.cfg oder(!) /etc/CODESYSControl_User.cfg vorkommen darf. Das ist nun die eigentliche Frage! Ist das so ? Bei [SysProcess] ist das kein Problem, das gibt es in /etc/CODESYSControl.cfg nicht. Aber bei [SysFile] sieht das anders aus. Da sind 5 Zeilen schon in /etc/CODESYSControl.cfg drin. Würde ich diese in die User-Datei rüberschieben, könnte beim nächsten Update was fehlen oder, oder... Lasse ich es so wie es ist, sind meine Einträge beim Update weg - das sollte ja verhindert werden. Kann da jemand genaue Auskunft geben ?? Vielen Dank Thomas
Last updated: 2024-06-28
Post by thommy54 on Raspi-Cam: CameraStream.project nicht zum Laufen zu bringen
CODESYS Forge
talk
(Post)
Hallo, Ich bringe das CameraStream.project nicht zum Laufen. Ich sehe die Ursache darin, das das Beispielprogramm sehr sparsam mit Programm-Kommentaren umgeht (von der Hilfe gar nicht zu reden). Ich habe beide Varianten bei der zu ändernden Zielvariable getestet: //copy video.htm to the webserver; //the location of the webserver depends on the used Apache version as mentioned in online help hDirHtmlTest:=SysDirOpen( szDir:='/var/www', pDirInfo:= ADR(dirInfo), diMaxDirEntry:=iMaxDirEntry, szDirEntry:=szDirEntry, pResult:=ADR(iDirHtmlError)); IF (iDirHtmlError = 0) THEN SysDirClose(hDir:=hDirHtmlTest); SysFileCopy('/var/www/video.htm', '$$PlcLogic$$/Application/video.htm', ADR(dwCopySize)); ELSE .... als auch hDirHtmlTest:=SysDirOpen( szDir:='/var/www/html', pDirInfo:= ADR(dirInfo), diMaxDirEntry:=iMaxDirEntry, szDirEntry:=szDirEntry, pResult:=ADR(iDirHtmlError)); IF (iDirHtmlError = 0) THEN SysDirClose(hDir:=hDirHtmlTest); SysFileCopy('/var/www/html/video.htm', '$$PlcLogic$$/Application/video.htm', ADR(dwCopySize)); ELSE .... Die Url-Streams habe ich gelassen wie sie vorgegeben waren: urlStream := CONCAT('http://', CONCAT(sIPAddress, '/video.htm')); urlPicture := CONCAT('http://', CONCAT(sIPAddress, '/cam_pic.php')); In der Webvisu im Browser komme ich maximal dahin wie im Screeshot Video_Visu_1 zu sehen. Also scheint der Link zu video.htm zu klappen. Das der zu cam_pic.php nicht klappt, wundert mich nicht, denn es existiert nicht und wird auch nicht evtl. am rechten Ort angelegt. Ich bin mir vollkommen im Unklaren: muss da was auf dem Raspberry Pi im Hintergrund laufen , z.B. raspivid . Welcher Programmteil bedient die Cam ? Ich erkenne auch nicht, wo ein einzelnes picture entstehen soll. Wäre dankbar, wenn ich hier etwas Hilfe bekommen könnte. Evtl. gibt es Probleme mit der von mir verwendeten Codesys-Version 3.5.20.1 ? Ich benutze einen Raspberry 4 Rev.1.2. Grüße Thomas
Last updated: 2024-07-04
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.