Search talk: Case state

 
<< < 1 .. 11 12 13 14 15 > >> (Page 13 of 15)

Post by spiessli on Softmotion axis to CANopen Maxon IDX drive CODESYS Forge talk (Post)
Thanks for the advise, indeed, this was somewhat, what my intention was. I tried around again with EDSes and DCFs, anyway. It appears that the DCFs end up in a subfolder in the attach device dialog. Astonishingly, when attaching the DCF version I get a device in the device tree, where I can add a SoftMotion axis, whereas when I attach the device not in the subfolder, then I cannot. Further astonishingly, when looking in the CANopen parameters in supported profiles, "402" is listed in the case of the DCF variant, whereas in the EDS variant "0" is shown. Comparing EDS and DCF files I cannot guess, where the difference is coming from. I cannot tell either why I have always attached the EDS variant and apparantly never the DCF variant. As I am not in the lab right now, I cannot test if the connection actually is working. Thanks again, spiessli
Last updated: 2024-01-07

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 alex00 on DCS / Central Engineering with Codesys support CODESYS Forge talk (Post)
Hello together I'm currently investing in possibilities to have a central engineering software / system for Codesys based controllers. Something like a DCS / SCADA depending on where you see the functionality. We plan to use more or less vanilla codesys. The tool should support the following: - Connect to multiple PLC's in a project to see its variables and debug it. - Central Engineering capabilities (for example shared libraries in a project). - Download the new code / binaries to the plc. - Maybe have functionality to combine visualization elements and logic together. - See the live status variables on all the systems (crosscommunication). I see that codesys theoretically supports engineering of multiple PLC's, but I couldnt find to much functionality for a DCS type of operation, but that could be lack of knowledge. Any tips from you? Is Codesys good enough for this and maybe there are some manufacturers which build around it? Or are there good tools on the market with Codesys support (and the engineering is separate, but download to codesys possible). The use case is distributed energy installations like Heating pumps, Photovoltaics, etc. All these installations should have a PLC with codesys installed and run in one larger network, the PLC's are connected via VPN. Thanks for your inputs Greetings
Last updated: 2024-02-19

Post by alex00 on DCS / Central Engineering for Codesys CODESYS Forge talk (Post)
Hello together I'm currently investing in possibilities to have a central engineering software / system for Codesys based controllers. Something like a DCS / SCADA depending on where you see the functionality. We plan to use more or less vanilla codesys. The tool should support the following: - Connect to multiple PLC's in a project to see its variables and debug it. - Central Engineering capabilities (for example shared libraries in a project). - Download the new code / binaries to the plc. - Maybe have functionality to combine visualization elements and logic together. - See the live status variables on all the systems (crosscommunication). I see that codesys theoretically supports engineering of multiple PLC's, but I couldnt find to much functionality for a DCS type of operation, but that could be lack of knowledge. Any tips from you? Is Codesys good enough for this and maybe there are some manufacturers which build around it? Or are there good tools on the market with Codesys support (and the engineering is separate, but download to codesys possible). The use case is distributed energy installations like Heating pumps, Photovoltaics, etc. All these installations should have a PLC with codesys installed and run in one larger network, the PLC's are connected via VPN. Thanks for your inputs Greetings
Last updated: 2024-02-19

Post by dtamm on How to read string from CharBufferPtr? CODESYS Forge talk (Post)
I am trying to implement a mechanism to send alarm SMS. For this, I have created an Alarm Class with a Notification Action which calls a POU. This POU implements IAlarmNotifiable making it selectable in the Alarm Class configuration. IAlarmNotifiable has an Execute method which is called by the alarm class. Now, I want to extract the alarm message of the triggered alarm. The Execute method comes with a VAR_INPUT itfAlarm: AlarmManager.IAlarm which supplies a method called GetMessage. The help text says: Returns the message text, that has been configured for the alarm. The result is a pointer to the buffer, where the message text is stored The type of the result is CharBufferPtr, and at some place I read that it can be interpreted as a pointer to string. But I cannot manage to extract the alarm message, all I get are numbers. I have tried the following: psAlarmText := itfAlarm.GetMessage(__SYSTEM.TYPE_CLASS.TYPE_STRING)^; sAlarmText := TO_STRING( itfAlarm.GetMessage(__SYSTEM.TYPE_CLASS.TYPE_STRING)^ ); So how do I get access to the alarm message as clear text? (In this case, "Larm 1")
Last updated: 2024-02-21

Post by manuknecht on High Cycle Times for SoftMotion_PlanningTask when using AxisGroup CODESYS Forge talk (Post)
Hello all I am using an AxisGroup with the Gantry2 Kinematics to move a 2D-Gantry system. When creating the AxisGroup, the SoftMotion_PlanningTask is created automatically with a cycle time of 2 ms in my case. I realized that the maximum cycle time of this task can spike to very high values (up to 60 ms) at lower speeds of the motion, leading to synchronization issues and errors on the axes. The same behaviour - though not as drastic - can be observed with virtual axes too. Is this behaviour intended or to be expected? Can the cycle time or type of the SoftMotion_PlanningTask be changed to prevent these errors? Or is there another fix for this issue? I tried changing the cycle type to Freewheeling, which solved the synchronization issues, but caused an error on the AxisGroup after a while, reading SMC_CP_QUEUE_UNDERRUN. Thanks in advance and best regards Manuel
Last updated: 2024-03-07

Post by markushunter on Different behavior between the "Start" button in the IDE and the Cmp function "AppStartApplication()" CODESYS Forge talk (Post)
In our application with CODESYS V3.5 SP19 Patch 5 and the Soft-PLC Name: CODESYS Control Win V3 x64 Typ: 4096 ID: 0000 0004 Version: 3.5.19.50 the application behaves differently when we start the application via Cmp.AppStartApplication(pApp) than when we press the "Start" button in online mode in the IDE. Unfortunately, it looks like the AppStartApplication() function, which is called in the "StopDone" system event, is not able to restart the fieldbus driver correctly, in our case the EtherNet_IP_Scanner: Name: EtherNet/IP Scanner Hersteller: 3S - Smart Software Solutions GmbH Kategorien: EtherNet/IP Scanner Typ: 100 ID: 0000 100B Version: 4.5.1.0 Bestellnummer: 1 And one EtherNet/IP adapter Name: FANUC Robot R30iB Plus Hersteller: FANUC Robotics America Kategorien: EtherNet/IP Remote Adapter Typ: 101 ID: 356_12_4_3 Version: Major Revision=16#3, Minor Revision = 16#1 Beschreibung: EtherNet/IP Target imported from EDS File: fanucrobot0301_r30ibp.eds Device: FANUC Robot R30iB Plus Version Konfiguration 3.5.6.0 The application was cold reset in both cases via CmpApp.AppReset(pApp := pApp, usResetOption := CmpApp.RTS_RESET_COLD. Does anyone know the difference between the functions or services executed by the "START" button in online mode and Cmp.AppStartApplication()? Thanks and best regards, markushunter
Last updated: 2024-03-20

Post by markushunter on Different behavior between the "Start" button in the IDE and the Cmp function "AppStartApplication()" CODESYS Forge talk (Post)
In our application with CODESYS V3.5 SP19 Patch 5 and the Soft-PLC Name: CODESYS Control Win V3 x64 Typ: 4096 ID: 0000 0004 Version: 3.5.19.50 the application behaves differently when we start the application via CmpApp.AppStartApplication(pApp) than when we press the "Start" button in online mode in the IDE. Unfortunately, it looks like the AppStartApplication() function, which is called in the "StopDone" system event, is not able to restart the fieldbus driver correctly, in our case the EtherNet_IP_Scanner: Name: EtherNet/IP Scanner Hersteller: 3S - Smart Software Solutions GmbH Kategorien: EtherNet/IP Scanner Typ: 100 ID: 0000 100B Version: 4.5.1.0 Bestellnummer: 1 And one EtherNet/IP adapter Name: FANUC Robot R30iB Plus Hersteller: FANUC Robotics America Kategorien: EtherNet/IP Remote Adapter Typ: 101 ID: 356_12_4_3 Version: Major Revision=16#3, Minor Revision = 16#1 Beschreibung: EtherNet/IP Target imported from EDS File: fanucrobot0301_r30ibp.eds Device: FANUC Robot R30iB Plus Version Konfiguration 3.5.6.0 The application was cold reset in both cases via CmpApp.AppReset(pApp := pApp, usResetOption := CmpApp.RTS_RESET_COLD. Does anyone know the difference between the functions or services executed by the "START" button in online mode and Cmp.AppStartApplication()? Thanks and best regards, markushunter
Last updated: 2024-03-20

Post by markushunter on Different behavior between the "Start" button in the IDE and the Cmp function "AppStartApplication()" CODESYS Forge talk (Post)
In our application with CODESYS V3.5 SP19 Patch 5 and the Soft-PLC Name: CODESYS Control Win V3 x64 Typ: 4096 ID: 0000 0004 Version: 3.5.19.50 the application behaves differently when we start the application via Cmp.AppStartApplication(pApp) than when we press the "Start" button in online mode in the IDE. Unfortunately, it looks like the AppStartApplication() function, which is called in the "StopDone" system event, is not able to restart the fieldbus driver correctly, in our case the EtherNet_IP_Scanner: Name: EtherNet/IP Scanner Hersteller: 3S - Smart Software Solutions GmbH Kategorien: EtherNet/IP Scanner Typ: 100 ID: 0000 100B Version: 4.5.1.0 Bestellnummer: 1 And one EtherNet/IP adapter Name: FANUC Robot R30iB Plus Hersteller: FANUC Robotics America Kategorien: EtherNet/IP Remote Adapter Typ: 101 ID: 356_12_4_3 Version: Major Revision=16#3, Minor Revision = 16#1 Beschreibung: EtherNet/IP Target imported from EDS File: fanucrobot0301_r30ibp.eds Device: FANUC Robot R30iB Plus Version Konfiguration 3.5.6.0 The application was cold reset in both cases via CmpApp.AppReset(pApp := pApp, usResetOption := CmpApp.RTS_RESET_COLD. Does anyone know the difference between the functions or services executed by the "START" button in online mode and Cmp.AppStartApplication()? Thanks and best regards, markushunter
Last updated: 2024-03-20

Post by k2saki on CNC / G01 Speed is very slow (or go-stop motion) in Continuous short segment . CODESYS Forge talk (Post)
I'm using CAD/CAM that outputs GCode with G01 many short segments from NURBS Curve, only X-Y axis. But CODESYS CNC motion seems much slower ( or stop-go motion ) in simulation mode than F-Value (I checked value from SMC_Interpolator - dVel ). In GCode G01, F value is F500, but movement is very slow, actual speed (dVel) is between 0 to 30 back and forth. I think very old CNC can move like that, but nowadays, a lot of CNC can move smoothly to process free curve ( somethimes option switch ) I tried to use G51 Dxx but I got the same result. My questions are 1) How do I improve CODESYS CNC motion in this case ? 2) How can I graph the sampling from dVel of SMC_Interpolate in CODESYS? From my GCode N2006 G01 X1.4364 Y-14.6847 F500 N2007 G01 X1.6759 Y-14.6768 N2008 G01 X1.9152 Y-14.6486 N2009 G01 X2.1547 Y-14.6400 N2010 G01 X2.3943 Y-14.6090 N2011 G01 X2.6336 Y-14.6002 N2012 G01 X2.8732 Y-14.5716 N2013 G01 X3.1127 Y-14.5634 N2014 G01 X3.3520 Y-14.5410 N2015 G01 X3.5915 Y-14.5336 N2016 G01 X3.8308 Y-14.5307 ... Thansk.
Last updated: 2024-04-29

Post by mxj262 on FB having single input but initialized with Array CODESYS Forge talk (Post)
I am adding elements of an ARRAY using pointer to access each element inside a FOR loop and the FOR loop does not stop! What is the right way to use pointers in such case?? I have another loop that is not using pointer and it stops but the loop using pointer keep on adding. METHOD FB_Init: BOOL VAR_INPUT bInitRetains: BOOL; // TRUE: the retain variables are initialized (reset warm / reset cold) bInCopyCode: BOOL; // TRUE: the instance will be copied to the copy code afterward (online change) END_VAR VAR_IN_OUT // basically REFERENCE TO window_buffer: ARRAY [*] OF INT; // array of any size END_VAR THIS^.windowPtr := ADR(window_buffer[0]); THIS^.windowSize := UPPER_BOUND(window_buffer, 1) - LOWER_BOUND(window_buffer, 1) + 1; FUNCTION_BLOCK FB500 VAR_INPUT END_VAR VAR_OUTPUT END_VAR VAR windowPtr: POINTER TO INT; windowSize: DINT; currentIndex: UINT; element1:INT; element2:INT; i:INT; j:INT; sum:DINT:=0; END_VAR element1:=windowPtr[0]; // read the first element of the Array dynamic memorry element2:=windowPtr[1]; FOR i:=0 TO (TO_INT(windowSize-1)) BY 1 DO // this loop does not stop Sum:=sum + windowPtr[i]; END_FOR FOR j:=0 TO 5 BY 1 DO // this loop stops j:=j+1; END_FOR https://ibb.co/k3DhkZT
Last updated: 2024-05-06

Post by rabaggett on Reading Named Pipes in Linux Is there a better way? CODESYS Forge talk (Post)
I have a Python program that will handle things in my application such as VISA over IP and Telnet control of instruments. I want the main control and HMI in Codesys. My problem is communication between the two. I have looked at several ways to accomplish this, and settled on having the Python program create two named pipes, one to send information to Codesys, and one for Codesys to send information to Python. The information would be packetized with \n for end of packet.. Seems simple. I think the named pipes method should work, but file reading in Codesys using the CAA file library starts to get difficult when the file is never ending, as in this case. Before I spend too much time making something that may be fundamentally flawed I want to ask. Is there a better way? Is there a way to read the file 'one line at a time' which might solve my never ending file problem? Thanks!
Last updated: 2024-05-09

Post by mil581 on Modbus TCP Server connection is ESTABLISHED but all holding registers are value 0? CODESYS Forge talk (Post)
Hello everyone! I'm facing a weird issue with CODESYS Control Win V3 x64 on a fresh Windows install. The situation is as follows: CODESYS Modbus TCP Server (Slave) is running and I can see live values in the mapping display of Modbus settings: GVL (e.g., 32, 42, 50). Port 502 is LISTENING according to netstat. When connecting via Modbus Poll or Node-RED, the connection status changes to ESTABLISHED and everything reports as fine. The Problem: Despite the successful connection, all holding registers return 0 no matter what. It's like the OS accepts the TCP handshake, the request counter goes up but the data payload never reaches Modbus Client (in this case Node-RED or Modbus Poll). Quick Stats: Firewall: Completely OFF. Unit ID: Verified & Matching. IP: Tried 127.0.0.1 and 192.168.0.1. Interface: Correctly bound in Ethernet Device settings. I already tried absolutely everything from changing IP address, subnet, port, deleting the project and starting new one and even nuking my old Windows install. Since I am near completion of my bachelor thesis only thing left for me to do is connect SoftPLC to NodeRED via Modbus but this issue is driving me crazy for weeks. I do not know what to do anymore.
Last updated: 2025-12-25

Post by wpawago on Message view - Column "Action" CODESYS Forge talk (Post)
Hello everyone, I am with Codesys SP21 Patch5, there is an "Action" column in the Messages view, located between "Description" and "Project". Does anyone know how this column is supposed to work? I could not find any information about it in the CODESYS documentation: https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_cmd_messages.html I tried using it with Static Analysis Light, for example with the unused variables check, but the Action field remains empty. I initially thought it might provide a quick fix, such as automatically deleting the unused variable, but that does not seem to be the case. I am also developing some IronPython scripts and was wondering whether it is possible to populate this column with a custom action, allowing users to trigger a predefined command directly from the Messages view. Has anyone worked with this feature before or knows if it is exposed through the scripting API?
Last updated: 2026-08-26

Post by jonasz on Deploy LicenseServer for Linux SL CODESYS Forge talk (Post)
Good morning, I'm digging into this topic because I'm curious about resolving my problem in a test environment. In my previous message, I asked about the CODESYS Safe Timeprovider SL package (4.18.0.0), which I saw in the illustration. I noticed that it runs as a service. I am asking about this because from the perspective of an "ordinary" user, this service provides easier access to the settings of the time provider's operating parameters. The basic time provider configuration is outlined at https://content.helpme-codesys.com/en/CODESYS%20Control/_rtsl_virtual_safe_time_provider.html. Why my questions? They stem from my specific case, which is experiencing timeout issues. I know that my environment is currently only a test environment. I'm assuming a real-world scenario in which I won't be able to achieve a better result with my configuration, and I will ultimately need to increase the time provider's cycle time. By running the time provider service, I can easily influence the time provider's operation and thus eliminate the problem. I know, I know, safety systems are not life-enhancing extras.
Last updated: 2025-11-19

Post by nickpoon on SysProcessCreate stopped working after SP21? CODESYS Forge talk (Post)
I'm going through the process of updating the CODESYS Project a machine to 3.5 SP21 (old version was 3.5 SP20). One function that stopped working when upgrading was SysProcessCreate. I need to run a .exe file that is located in C:\Program Files\MQTTStream. Some initial searching suggested that there are new security rules that prevent the SoftPLC from reading/writing files to outside of its Device folder (located here - C:\Windows\System32\config\systemprofile\AppData\Roaming\CODESYS\CODESYSControlWinV3x64\24FD6770) Relocating files helped fix my JSON file reader/writer functions (which were failing previously), but not the case for SysProcessCreate. I've even attempted to just run window's cmd.exe and with: pszCommandLine = 'cd /d C:\Windows\System32\config\systemprofile\AppData\Roaming\CODESYS\CODESYSControlWinV3x64\24FD6770\PlcLogic\MQTTStream & sift-proxy.exe --grpc_uri="https://grpc-api.siftstack.com" --api_key="xxxxxxxxxxxxxxxxxxx" mqtt-client --broker_ip=10.0.10.101 --broker_port=1883 --config_file="mqtt_telemetry_config.json" --username Plantd --password 1234 --stream_metrics --storage_path="sift-proxy-logs"' I have not been able to find a lot of documentation on this, and I suspect the new update may have created a bug for SysProcessCreate. Any help would be greatly appreciated
Last updated: 2026-02-02

Post by gseidel on Mismatch between coordinate monitor and actual motion using SMC_GroupJog2, MC_MoveLinearAbsolute (6DOF) CODESYS Forge talk (Post)
Hi darwin03, when all joints are 0°, then the 6-axis robot is in a so called singularity. This means that it is in a special position where it cannot move freely in all directions but is restricted by its own construction. For a simple example, imagine a scara robot where the arm is fully stretched. In this position it cannot move freely. You can find a lot of information about robot configurations in the www. As far as CODESYS SoftMotion Robotics is concerned, this page holds the most important links, look for the error SMC_CP_CONFIGS_DIFFER: https://content.helpme-codesys.com/en/CODESYS%20SoftMotion/_sm_robotics_errors.html The most important rules: 1) CP movements (linear moves, circular moves, cartesian jogging) cannot change the configuration during the movement. Both start- and endpoint must be in the same configuration. This excludes also the edge case that one or both of them are in a singularity. 2) PTP movements can move through singularities and cross configurations without problems. 3) SMC_SetKinConfiguration can be used to set the configuration of the axis group. Regards, Georg
Last updated: 2026-05-04

Post by mubeta on Some 'pathetic' errors in SoftMotion program CODESYS Forge talk (Post)
Thank you for your interest. Your answers are in line with what I knew, so at least it comforts me that I did not misinterpret the situation. However, I don't have an exact match as, for this project over the past few days I have: 1) I have gone back to leaving the various FBs of the motion always called, all of them, and in the state machine I use a boolean to activate the various useful Execute. (But in the future I want to go back and try the programming technique with which I wanted to develop this project); 2) For the occasional error: SMC_FB_WASNT_CALLED_DURING_MOTION perhaps it was due to the fact that I had set the Ethercat bus synchronism only at the CAN master level, but not at the level of individual drives. I have now also activated it for the individual drives and it does indeed seem to have been resolved, but having also adopted the programming technique mentioned in point 1), I cannot say whether this was the solution to the problem, or instead the previous point. Is there an error ‘regulator or start not set’ in the device log before the error ‘motion generating FB wasn't called for at least one cycle’? I can't answer that right now. By now the machine is running and I am no longer there, at this one. Also, I seem to remember that the 'fbeFBerror' drive structure (5-element array), does not cycle, BUT ONCE THE 5 EVENTS AFTER SWITCHING ON, IT DOES NOT UPDATE ANYMORE (but that's another issue), so diagnostics were not easy.
Last updated: 2024-07-24

Post by timvh on Get Alarm status in Codesys CODESYS Forge talk (Post)
You are right, that you can use the GetState method, but it is not that simple. You first have to get a list of (filtered) alarms from the AlarmManager. You can find an example in Forge how to do this. See https://forge.codesys.com/prj/codesys-example/alarm-manager/home/Home/ Then you can go through this list to get the state of all the (filtered) alarms. See below the code which you could use. This is all based on the example from forge. Create a program: // This example shows how to access alarms via structured text. PROGRAM PLC_PRG VAR xInit : BOOL := TRUE; udiResult : UDINT; fbAlarmFilterCriteriaAll : FB_AlarmFilterCriteriaAll; fbAlarmManagerClient : FB_AlarmManagerClient; itfAlarmManagerClient : IAlarmManagerClient := fbAlarmManagerClient; xAlarm1 : BOOL; xAlarm2 : BOOL; xWarning : BOOL; iNrOfAlarmsInAlarmList : INT; iNrOfActiveAlarmsInAlarmList : INT; paitfAlarm: POINTER TO ARRAY [0..0] OF AlarmManager.IAlarm; iAlarmIndex : INT; eAlarmState: AlarmManager.AlarmState; END_VAR IF xInit THEN xInit := FALSE; fbAlarmManagerClient.itfAlarmFilterCriteria := fbAlarmFilterCriteriaAll; // register alarm client to get updated about alarm status / changes udiResult := AlarmManager.g_AlarmHandler.RegisterClient(itfAlarmManagerClient, 0, 0); END_IF // Polling the number of alarms udiResult := AlarmManager.g_AlarmHandler.GetActiveAlarms(itfAlarmManagerClient, parritfActiveAlarms => paitfAlarm, iCountActiveAlarms => iNrOfAlarmsInAlarmList); iAlarmIndex := 0; iNrOfActiveAlarmsInAlarmList := 0; WHILE iAlarmIndex < iNrOfAlarmsInAlarmList DO eAlarmState := paitfAlarm^[iAlarmIndex].GetState(); IF eAlarmState = AlarmManager.AlarmState.Active OR eAlarmState = AlarmManager.AlarmState.ActiveAcknowledged THEN iNrOfActiveAlarmsInAlarmList := iNrOfActiveAlarmsInAlarmList + 1; END_IF iAlarmIndex := iAlarmIndex + 1; END_WHILE See below some details about the function blocks: One function block should implement the IAlarmFilterCriteria interface. This can be empty except a few methods. FUNCTION_BLOCK FB_AlarmFilterCriteriaAll IMPLEMENTS AlarmManager.IAlarmFilterCriteria Method implementation (others related to interface are empty) METHOD AreAllAlarmClassesSelected : BOOL AreAllAlarmClassesSelected := TRUE; METHOD AreAllAlarmGroupsSelected : BOOL AreAllAlarmGroupsSelected := TRUE; METHOD GetPriorityFrom : USINT GetPriorityFrom := 0; METHOD GetPriorityTo : USINT GetPriorityTo := 255; The other function block should implement IAlarmManagerClient and get a reference to the FB which implements the IAlarmFilterCriteria FUNCTION_BLOCK FB_AlarmManagerClient IMPLEMENTS AlarmManager.IAlarmManagerClient VAR_INPUT itfAlarmFilterCriteria: AlarmManager.IAlarmFilterCriteria; END_VAR Method implementation (others related to the interface are empty) METHOD GetFilterCriteria : AlarmManager.IAlarmFilterCriteria // see VAR_INPUT for filter GetFilterCriteria := itfAlarmFilterCriteria; Off course you have to add the AlarmManager to your application and add some alarms to it.
Last updated: 2025-09-02

Post by olehmann03 on PFC200 - WAGO 750-8202 - MODBUS RTU CODESYS Forge talk (Post)
Hello, I’m working on implementing Modbus RTU communication with a Carel controller (CPCO). I want to use the front RS485 interface through the DB9 connector. The issue is that I can’t get the communication working correctly. Below are the steps I’ve done so far: Connected pins 3 and 8 from the DB9 connector to the +/- RX/TX terminals on the Carel side. In the PLC shell, I set serialmode to RS485. In WBM under Administration > Serial Interface > Assign owner of serial interface, I set the port to unassigned. In the device tree, I created Modbus_COM with the following settings: COM port: 1 Baud rate: 19200 Parity: None Stop bits: 1 Created a Modbus client on this COM interface in RTU mode. Under the status tab, I can see it is in running state. On the client, I created a Modbus server and set the Modbus address of my unit to 1. Defined a few channels as FC03 to read holding registers according to the Carel register map. I checked the communication with the Carel controller using a USB-to-RS485 converter connected to my PC, and communication works correctly there. In the status tab, I can see that the Modbus server is polling, but there is no response from the controller. I also tried multiple times swapping A/B lines on the Carel side, but it did not help. Do you have any suggestions on what else I should check?
Last updated: 2026-05-22

Post by olehmann03 on PFC200 - WAGO 750-8202 - MODBUS RTU CODESYS Forge talk (Post)
Hello, I’m working on implementing Modbus RTU communication with a Carel controller (CPCO). I want to use the front RS485 interface through the DB9 connector. The issue is that I can’t get the communication working correctly. Below are the steps I’ve done so far: Connected pins 3 and 8 from the DB9 connector to the +/- RX/TX terminals on the Carel side. In the PLC shell, I set serialmode to RS485. In WBM under Administration > Serial Interface > Assign owner of serial interface, I set the port to unassigned. In the device tree, I created Modbus_COM with the following settings: COM port: 1 Baud rate: 19200 Parity: None Stop bits: 1 Created a Modbus client on this COM interface in RTU mode. Under the status tab, I can see it is in running state. On the client, I created a Modbus server and set the Modbus address of my unit to 1. Defined a few channels as FC03 to read holding registers according to the Carel register map. I checked the communication with the Carel controller using a USB-to-RS485 converter connected to my PC, and communication works correctly there. In the status tab, I can see that the Modbus server is polling, but there is no response from the controller. I also tried multiple times swapping A/B lines on the Carel side, but it did not help. Do you have any suggestions on what else I should check?
Last updated: 2026-05-22

Post by baltzer on ICertificateVerifier.VerifyCertificate doesn't appear to override an ERR_CERT_HAS_EXPIRED rejection in TCP_Client.Upgrade() CODESYS Forge talk (Post)
Setup: Net Base Services (NBS), TCP_Client + TLSContext, ePurpose := CLIENT_SIDE, connecting to a third-party embedded device (Velux KLF200 home automation gateway) whose factory-installed TLS certificate expired on 2026-07-12 and has no user-facing renewal path. Tested on both CODESYS Control for Raspberry Pi SL (3.5.19.0) and CODESYS Control Win V3 x64, with identical results on both. Goal: Accept the peer's expired certificate via a custom ICertificateVerifier implementation, since the certificate itself can never be replaced. Implementation: FUNCTION_BLOCK FB_MyCertVerifier IMPLEMENTS NBS.ICertificateVerifier VAR udiCallCount : UDINT; aeCurStateLog : ARRAY[0..9] OF NBS.RTS_IEC_RESULT; END_VAR METHOD VerifyCertificate : UDINT VAR_INPUT hCert : NBS.RTS_IEC_HANDLE; eCurState : NBS.RTS_IEC_RESULT; END_VAR IF udiCallCount < 10 THEN aeCurStateLog[udiCallCount] := eCurState; END_IF udiCallCount := udiCallCount + 1; VerifyCertificate := 0; // also tried: VerifyCertificate := eCurState; Wired in via tlsContext.itfCertVerifer := certVerifier at declaration time, alongside itfTLSContext := tlsContext set at TCP_Client's own declaration (per an earlier forum thread here on ensuring inline start-values on FB-typed variables are actually honored when nested one level deep - that fix was needed and worked correctly for getting the handshake to start at all). Observed: - VerifyCertificate is confirmed called exactly once per connection attempt (via the call counter above). - eCurState passed in = 0x709 = ERR_CERT_HAS_EXPIRED - correctly reflecting the actual state of the peer's certificate. - Packet capture confirms the full TLS 1.2 handshake completes correctly at the wire level: ClientHello -> ServerHello -> Certificate -> ServerKeyExchange -> ServerHelloDone -> our ClientKeyExchange/ChangeCipherSpec/Finished -> server's ChangeCipherSpec/Finished. Both sides successfully complete the cryptographic handshake. - Despite this, TCP_Client.Upgrade() subsequently returns NBS.ERROR.CONNECTION_ERROR, and the connection is torn down with a plain TCP FIN (not a TLS alert) roughly 7-8ms after our side ACKs the server's Finished message. - TCP_Client.eErrorID (inherited from LCon) remains NO_ERROR throughout - the failure is only visible via Upgrade()'s return value. - Returning 0 (ERR_OK/ERR_CERT_OK - confirmed via the CmpErrors2 Interfaces documentation that these are literally the same value) makes no difference. - Echoing eCurState back unchanged (on the theory that this callback might work like mbedTLS's native verify callback, where the incoming state is a flags value to be cleared/modified and returned, rather than paired with a separate fixed "accept" sentinel) also makes no difference. - Identical result across udiVerificationMode := 0, 1, and 2. - Importing the peer's certificate into the runtime's trusted certificate store via cert-import trusted makes no difference either. - With itfCertVerifer left at its default (no custom verifier) and udiVerificationMode := 2, the underlying engine sends its own fatal TLS alert (handshake_failure) immediately after receiving the peer's Certificate message - suggesting built-in validation may reject at the record layer independent of whether a custom verifier is even present. Questions: 1. Is there an additional step required for a custom ICertificateVerifier to actually override an ERR_CERT_HAS_EXPIRED (or more generally, any ERR_CERT_*) rejection, or is certificate validation enforced unconditionally for a CLIENT_SIDE TLSContext regardless of what the verifier returns? 2. Is 0/ERR_OK genuinely the correct "accept" return value for VerifyCertificate, or does it expect something else (a specific bit pattern, a different constant, a value that must be computed from hCert itself)? 3. Is there a supported way to connect to a peer presenting a certificate that is both self-signed and expired, short of the peer issuing a new certificate? Happy to share the full packet captures or additional test combinations if useful. Also worth noting for anyone finding this thread later: a maintained Node-RED library for this same device (node-red-contrib-velux-klf200, forked to handle this exact expired-certificate situation) solves it by disabling built-in TLS validation entirely (rejectUnauthorized: false) and doing fingerprint-based pinning by hand after the handshake completes, rather than relying on a validation callback - which may be the more realistic approach here too if ICertificateVerifier genuinely can't override this class of rejection. Thanks in advance /Jørgen Disclosure: most of the CODESYS code and this investigation was developed with the help of Claude (Anthropic's AI assistant) - the state machine design, SLIP/checksum implementation, and debugging methodology (including the packet capture analysis) were worked through in an extended back-and-forth with it. Posting here because we've run out of self-serviceable options and this now looks like it needs input from someone with visibility into NBS's actual implementation.
Last updated: 2026-07-26

Post by fefefede on Get the numer of day CODESYS Forge talk (Post)
Hello i tro to create a program to turn on or off the air condition in relationship temperature and numer of day. I can't get the number of day. I try this after installing SysTime library but this not work and have this error on debug ------ Build started: Application: Device.Sim.Device.Application ------- Typify code... Generate code... [ERROR] giorno_accensione_aria: PLC_PRG Device: PLC Logic: Application: C0032: Cannot convert type 'Unknown type: 'SysTimeCore(TRUE)'' to type 'TIME' [ERROR] giorno_accensione_aria: PLC_PRG Device: PLC Logic: Application: C0035: Program name, function or function block instance expected instead of 'SysTimeCore' [ERROR] giorno_accensione_aria: PLC_PRG Device: PLC Logic: Application: C0032: Cannot convert type 'Unknown type: 'DayOfWeek(CurrentTime)'' to type 'INT' [ERROR] giorno_accensione_aria: PLC_PRG Device: PLC Logic: Application: C0035: Program name, function or function block instance expected instead of 'DayOfWeek' [INFORMATION] giorno_accensione_aria: PLC_PRG Device: PLC Logic: Application: C0181: Related position Build complete -- 4 errors, 0 warnings : No download possible PROGRAM PLC_PRG VAR Temperatura: UDINT; AriaCondizionata: BOOL := FALSE; CurrentDayOfWeek: INT; //Variabile Giorno CurrentTime: TIME; GiornoDellaSettimana: INT; DayOfWeek: INT; END_VAR CurrentTime := SysTimeCore(TRUE); // Ottieni l'ora corrente CurrentDayOfWeek := DayOfWeek(CurrentTime); CASE GiornoDellaSettimana OF 1: // Azioni per Lunedì 2: // Martedì se più 10° accend altrimenti spegni IF Temperatura >= 10 THEN AriaCondizionata := TRUE; ELSE AriaCondizionata := FALSE; END_IF 3: // Mercoledì se più di 50° accendi altrimenti spegni IF Temperatura >=50 THEN AriaCondizionata := TRUE; ELSE AriaCondizionata := FALSE; END_IF 4: // Giovedì se più di 40° accendi altrimenti spegni IF Temperatura >=40 THEN AriaCondizionata := TRUE; ELSE AriaCondizionata := FALSE; END_IF 5: // Venerdì se più di 50° accendi altrimenti spegni IF Temperatura >=50 THEN AriaCondizionata := TRUE; ELSE AriaCondizionata := FALSE; END_IF 6: // Sabato se più di 25° accendi altrimenti spegni IF Temperatura >=25 THEN AriaCondizionata := TRUE; ELSE AriaCondizionata := FALSE; END_IF 7: // Domenica sempre spenta AriaCondizionata := FALSE; END_CASE
Last updated: 2023-09-14

Post by clarenced on Multiple applications on one device sharing variables. CODESYS Forge talk (Post)
I am looking for an example of how to run 2 applications on 1 device that would have global variables shared between the two apps. In this case what I am trying to do is to have the main program logic run as one application and then have the visualization run as a second application. I find this https://us.store.codesys.com/media/n98_media_assets/files/000013-F/0/Multiple%20Applications_en.pdf, that talks about exactly what I want to do, but I can't find the download. The main reason I want to do this is for download speed. Right now it takes at least a minute to download our application to the PLC. A simple program downloads to the PLC in a very short time, but add visualization and the download time gets much longer. If I could download the program separately from the visualization I think that a simple program change would take very little time to download. I have tried create a GVL in the POUs view. This partly works in that both applications can see the GVL, but they each create their own instance of it and the variables are not shared between the two apps. There are ideas of using OPCUA but this raises problems with licensing and having to move any variable that needs to be shared into the Symbol Configuration. This adds a lot of management to keep this up to date. Any ideas would be appreciated thanks.
Last updated: 2025-02-20

Post by edson-bueno on SysProcess Execute Command unable to run commands with special characters CODESYS Forge talk (Post)
Hi, I found the same issue, and I fixed with this steps: 1st go to codesys .cfg file. sudo nano CODESYSControl.cfg Then insert this: [SysProcess] BasePriority=Realtime Command=AllowAll Now we need to grant codesys root rights on Linux. Step 1: Create or edit the systemd override configuration: sudo systemctl edit codesyscontrol In the editor that opens, insert: [Service] User=root Save and exit: Press Ctrl+O to save Press Ctrl+X to exit Step 2: Reload systemd and reboot To apply the override: sudo systemctl daemon-reexec sudo systemctl daemon-reload sudo reboot Step 3: Confirm CODESYS is running as root After reboot, open the terminal and run: ps aux | grep codesyscontrol You should see something like: root 1234 ... /opt/codesys/bin/codesyscontrol.bin ... If instead it shows admin or another user, the override was not applied correctly. Step 4: (Optional) Confirm from within CODESYS In your CODESYS project, insert this test code to run the Linux command whoami: Make sure the lib SysProcessImplementation, SysTypes, and CmpErrors is on the project. VAR sCommand : STRING := '/usr/bin/whoami'; sOutput : STRING(255); refCommand : REFERENCE TO STRING; refOutput : REFERENCE TO STRING; resultCmd : UDINT; END_VAR refCommand REF= sCommand; refOutput REF= sOutput; SysProcessExecuteCommand2( pszCommand := refCommand, pszStdOut := refOutput, udiStdOutLen := SIZEOF(sOutput), pResult := ADR(resultCmd) ); Notes & Warnings This method gives full system access to the CODESYS runtime — do not expose this system to the public network without protection. Do not use sudo in commands inside CODESYS when the runtime is already running as root. @tomas111, in case you want to read the temperatur, use this command: sCommand:STRING:='/usr/bin/vcgencmd measure_temp';
Last updated: 2025-05-20

<< < 1 .. 11 12 13 14 15 > >> (Page 13 of 15)

Showing results of 362

Sort by relevance or date