Search talk: how to import libraries into project

 
<< < 1 .. 244 245 246 247 248 .. 254 > >> (Page 246 of 254)

Post by imdatatas on Read "Homed" status from EtherCAT drive CODESYS Forge talk (Post)
Hello, I have experienced such situations with some servo drive devices in the past. The home completion information is reported to the upper controller by the slave drive with the states of the relevant bits in the StatusWord (for example; 6041h Bit10, Bit12 in Home mode). If the states of these bits are correct in terms of number and state but the motor does not actually perform the action; You can contact the slave drive manufacturer. There may be a problem with the device firmware. Another area you can play around with is looking at the settings in the "Advanced configuration" for Softmotion axis on the page the link to below, and trying it out and using the one that works for you. https://content.helpme-codesys.com/en/CODESYS%20SoftMotion/_sm_cmd_add_softmotion_cia402_axis.html A method I recommended worked for a user as in below message. https://forge.codesys.com/forge/talk/Engineering/thread/40bc82454d/ I hope your problem will be solved as soon as possible and by sharing the result here, you will help others to know and overcome it. Good luck. Best regards, Imdat
Last updated: 2025-01-08

Post by ojz0r on Assignment Efficiency - Repetitive Assignment vs IF statement CODESYS Forge talk (Post)
Its important that you know the difference between the two. Example 1: Coils[0] := Coils[0] OR (Buttons[0] AND Sensors[0] > 6); In this case the statements will be evaluated every scan and result in either true or false for Coils[0]. Example 2: IF NOT Coils[0] AND Buttons[0] AND (Sensors[0] > 6) THEN Coils[0] := TRUE; END_IF In this example Coils[0] will latch the result in a true evaluation, if you want it to behave the same way as example 1 then you need to do it like example 3 below: IF NOT Coils[0] AND Buttons[0] AND (Sensors[0] > 6) THEN Coils[0] := TRUE; ELSE Coils[0] := FALSE; END_IF However back to the real question. There is no problem using either example 1 or example 3, if im not requiring a latch i usually go with example 1 as it is more compact.
Last updated: 2025-03-07

Post by razebones on sdo read write codesys 3.5 CODESYS Forge talk (Post)
ENG For some reason, I can't bind a variable to the data parameter. Also, why does only the sdo_read4 function work for me? I also can't write through sdo_write4. I can only view the received values via sdo_read4. Please help me with this task. Moreover, I tried to write the values through sdo write 4 and for a while the data stopped being written and I overwritten it manually and sdo read4 started working again and at the same time they do not want to work in the main task. RU Я не могу почему то привязать переменную к параметру data. Так же у меня почему работает только функция sdo_read4 так же не могу записать через sdo_write4. Могу только просматривать полученные значения через sdo_read4. Помогите пожалуйста с этой задачей. Причём я попытался записать значения через sdo write 4 и у меня на какое то время перестали записываться данные и перезаписал вручную и sdo read4 начал работать снова и одновременно они не хотят работать в main task.
Last updated: 2025-04-01

Post by sbhaskarla on WebVisu File Transfer Error CODESYS Forge talk (Post)
I’m encountering an issue when downloading CSV files via the WebVisu button input config -> file-transfer option: • Custom directory: /plcdata/csv_logs/filename.csv o Error: Error 4 – Error during file transfer • Sandbox directory: /var/opt/codesys/PlcLogic/plcdata/csv_logs/filename.csv o Result: Download succeeds without error. Actions taken so far: 1. Added /plcdata/csv_logs to codesyscontrol.cfg (see attached). 2. Enabled file-transfer services in codesyscontrol_user.cfg (see attached). 3. Confirmed that the PLC writes CSV files correctly to /plcdata/csv_logs/. Despite these settings, WebVisu still returns Error when accessing the custom path 1. Using the placeholder file path '$$CSVLOGS$$/filename.csv' and it returns Error 6. 2. Using the literal path /plcdata/csv_logs/filename.csv and it returns Error 4 Could someone please help me determine what additional configuration or troubleshooting steps are required to serve files from /plcdata/csv_logs/? Please find screenshots attached for better understanding and I have also attached the config files
Last updated: 2025-06-13

Post by erictur on CODESYS Control for Linux ARM SL (32 bit) on Moxa UC-3100 IPC CODESYS Forge talk (Post)
UC3100 comes with Arm Cortex-A8 1 GHz and belongs to Moxa Industrial Linux 1 (Debian 9) for Arm-based Computers. I tried to install the CODESYS Control for Linux ARM SL (32 bit) on Moxa UC-3100 IPC. Unfortunately, the Third-party requirements: - libc >= 2.27 (required by CodeMeter Runtime) of the CODESYS Control for Linux ARM SL cannot be met on the Debian 9, which comes with glibc 2.24. I read the post by @johnlee (Getting Start with Codesys Control for Linux SL) (https://forge.codesys.com/forge/talk/Runtime/thread/0a515ced3f/). Where he discusses installation of CODESYS Control for Linux ARM SL on Debian 9. There was CODESYS Linux runtime v3.5.14 availble and it was successfully intalled on the Debian 9. However, the CODESYS Store has the oldest version V4.1.0.0 32 bit available. There is no way to find the CODESYS Linux runtime v3.5.14. So is there any work around for this? Or I cannot install the CODESYS Runtime on any of the Moxa IPCs based on the Moxa Industrial Linux 1 (Debian 9)?
Last updated: 2025-07-10

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

Post by pernockham on AC Persistence - values are not read from file during start? CODESYS Forge talk (Post)
Im struggling with the AC Persistence. AC persistence seems to work for any variable that is changed online and values are kept during reboot. However, if I try to edit the persistence files offline or replace the persistence files with a previously downloaded older persistence file (with modified values), the online value will not follow, as if the system did not at all read the file at boot? My testing sequence. - Edit a the value of a persistenced variable (with xSaveOnChange = True) - Save/download the associated persistence file, (and confirm the value has changed). - Edit the value online for a second time . - Stop runtime - Replace (upload) the persistence file with my previously downloaded file . - Coldstart/Warmstart/Start runtime - Whatever Im trying the value of my persistence variable will always be equal to that of my second edit as if the file is not read/considered during boot. What am I doing wrong?
Last updated: 2025-09-02

Post by gseidel on AXIS_REF_SM3 Error Codes? CODESYS Forge talk (Post)
Hi SLUCodesys, dwErrorId is a drive specific error number. The drive documentation should be consulted to interpret it. (Note that you should use MC_ReadAxisError to read this error, see https://content.helpme-codesys.com/en/libs/SM3_Basic/Current/SM3_Basic/POUs/Diagnostics/MC_ReadAxisError.html. Accessing the internal variable will result in outdated values if the acis error is not mapped by PDO and is not recommended in general.) uiDriveInterfaceError holds errors of the SoftMotion driver for the drive. It is also an internal variable, not intended for direct access. It is intended for logging, the PLC log will contain the drive interface error, consisting of this number and an error text. My recommendation for handling axis errors in the CODESYS application: 1) Use MC_ReadStatus on the axis to find out whether it is in state Errorstop 2) If in Errorstop, there are two possibilities: an error reported by the drive (MC_ReadAxisError) or an error of the SoftMotion function blocks (output MC_ReadStatus.FBErrorOccured). 3) If there is no drive error, you can use SMC_ReadFBError https://content.helpme-codesys.com/en/libs/SM3_Basic/Current/SM3_Basic/POUs/Diagnostics/FBError/SMC_ReadFBError.html Best regards, Georg
Last updated: 2025-09-24

Post by nicetuxedo on Can not activate license on Raspberry pi CODESYS Forge talk (Post)
Hello everyone, I'm hoping for some assistance with a license activation issue: a software crash has left my license in a strange state. Here is the sequence of events: I purchased a new license for the Raspberry PI from the official CODESYS web store. I opened the CODESYS and started the online activation process using the ticket number I received. During the activation, the CODESYS software threw an exception and crashed. I was not able to see if the activation completed. After restarting CODESYS, I attempted to run the activation process again with the same ticket number. The License Manager now gives me an error stating that the ticket has already been activated/used. I am now stuck because my installation is not licensed, but the activation server believes my ticket has been consumed. Has anyone encountered this before? Is there a way to have the ticket status reset?
Last updated: 2025-10-08

Post by nz-dave on Bool turning on in case stament in wrong state? CODESYS Forge talk (Post)
I had the FB called via a for loop to call a few instances of my FB I have removed it the for loop and just called them 1 by 1. Seems to have sorted the problem. tho, i have other FB's and for loops doing the same thing but they are all fine. below is basically what was happening. var: mVibrator : ARRAY[1..GVL_Settings.Number_Of_Products] OF Main_Vibrator; end_var Controller(PRG) call: FOR v := 1 TO GVL_Settings.Number_Of_Products BY 1 DO; mVibrator[v] (); END_FOR So at state 30: the mVibrator[1].start was turning on 30: Main_Mixer.Start := TRUE; Process_State := 2; IF Main_mixer.Done THEN Main_Mixer.Start := FALSE; Control_State := 40; END_IF but its not till state 50: that it is actual in the code. 50: Main_Suction_valve.Open_Input := TRUE; mVibrator[1].Start := TRUE; Process_State := 4; IF GVL_Weigh_hopper.LoadCell_Weight = 0 THEN Main_Suction_valve.Open_Input := FALSE; mVibrator1.Start := FALSE; Control_State := 60; END_IF Thanks for your input.
Last updated: 2023-12-16

Post by vipul on Multicast udp CODESYS Forge talk (Post)
Hi, Good afternoon can anybody help me with UDP Multicast code. I am not able to send or recieve data when code is dumped on linux device. Below is my code. Declaration: PROGRAM udp_multicast VAR oneTimeFlag :UINT :=0; state: INT:=0; driver: UDP.UDPDriver; //port : UDP.Port;//moved to GVL src_ipAddr_ud: UDINT; src_ipAddr_st:STRING := '192.168.127.155';//'192.168.1.155';//ipms ip address dst_ipAddr_ud:UDINT; group_ipAddr_st:STRING := '239.1.5.10'; //group_ipAddr_ud:UDINT; result: SysTypes.RTS_IEC_RESULT; //result of recieve function. bind: UDINT; //result of binding. resultCreate:SysTypes.RTS_IEC_RESULT;//result of port creation. timer:BLINK; temFlag :INT:= 0; post:INT :=0; checksumFunc:checksumXor; localStringBuf:STRING[500]; chksum:BYTE; dataBuffer:POINTER TO BYTE; checksumString:ARRAY[0..5] OF BYTE; recvSize:__XINT; errorCode:UDINT; joinGroupErrorCode:UDINT; END_VAR ************8 Implementation: IF oneTimeFlag <> 1 THEN oneTimeFlag:=1; resultCreate := driver.CreatePort(ADR(GVL.port)); src_ipAddr_ud := UDP.IPSTRING_TO_UDINT(sIPAddress:= src_ipAddr_st); GVL.group_ipAddr_ud := UDP.IPSTRING_TO_UDINT(sIpAddress:= group_ipAddr_st); GVL.port.IPAddress := src_ipAddr_ud; GVl.port.ReceivePort:= GVL.src_port;//port on which messages are expected. GVl.port.SendPort := GVL.dest_port; GVl.port.OperatingSystem := 0; //0- any system GVL.port.Socket :=3; //3- socket type is multicast bind := GVL.port.Bind(udiIPAddress:=src_ipAddr_ud,); GVl.port.JoinGroup(udiGroupAddress:= GVL.group_ipAddr_ud,udiInterfaceAddress:= src_ipAddr_ud,eLogCode=>joinGroupErrorCode); END_IF timer(ENABLE:=TRUE,TIMELOW:=T#100MS,TIMEHIGH:=T#100MS); IF timer.OUT = TRUE THEN GVL.port.Send(udiIPTo:=GVL.group_ipAddr_ud,GVL.dest_port,pbyData:=ADR(GVL.writeData),diDataSize:=SIZEOF(GVL.writeData)); ELSE SysMemSet(ADR(GVL.readData[0]),0,SIZEOF(GVL.readData)); result := GVl.port.Receive(ADR(GVL.readData),diDataSize:=SIZEOF(GVL.readData),udiIPFrom=>dst_ipAddr_ud,diRecvSize=>recvSize,eLogCode=>errorCode); SysMemMove(ADR(GVL.readDataBuf[0]),ADR(GVL.readData[0]),SIZEOF(GVL.readData)); END_IF post:=LEN(GVL.readDataBuf);
Last updated: 2024-01-14

Post by acc00 on Main Task cycle too long leading to PLC Fail CODESYS Forge talk (Post)
I have 2 Wago PFC200 PLC, running with Runtime SP19 Patch 5, with the Redundant application. The PLC communicates as Modbus Master with at this moment 15 Modbus Slaves -later there will be 28 in total- (Drives, Power management units,...). These devices are connected in 2 rings (1 ring of Drives, 1 ring of Power Management units), with 2 Managed Moxa Switches being part of the ring. Each PLC is connected to one of these switches. The issue I'm encountering is that the Cycle time of the Active PLC goes very high when I'm closing the Drive ring (simulating an issue on one Cabinet supply, resulting in that one Drive shut down, which can happen on field quite often). As a result of this long cycle, the PLC fails and goes to Exception, and the Passive PLC does not take control of the system. A normal cycle is around 30ms for the Main task, and a few ms for the Ethercat task. When I monitor with Profiler, I see that in this Maximum Cycle, the main Task is only taking 13ms, so I'm not sure where the PLC is hanging for so long. Is the remaining cycle time the Redundant management/sync or something else? Thank you in advance.
Last updated: 2024-03-08

Post by zoronoa on J1939.ReceiveWatchdog & J1939.ReceiveParameterGroup CODESYS Forge talk (Post)
Hi, I'm trying to monitor a specific PGN which I have it sending a pulse every 500mS Problem: Using the Watchdog for the ECU does not really help me as I have multiple instances with separate PGNs, if a PGN goes ghost, the ECU watchdog won't be flagged as the others will be running. I found the J1939.ReceiveWatchdog & J1939.ReceiveParameterGroup function blocks and they seem like a good solution for my problem, I just can't get them to work from my understanding you just build the J1939.ReceiveParameterGroup once and then connect it's output to the J1939.ReceiveWatchdog, here's my CODE for the setup HEARTBEAT_TIMER(IN:= TRUE, PT:= T#1000MS); //turn-on delay because of initialization race IF HEARTBEAT_TIMER.Q= TRUE THEN Glob_Var.DisplayReceive.xExecute:= TRUE; Glob_Var.DisplayReceive.itfECU:= Valve_X; Glob_Var.DisplayReceive.dwPGN:= 65511; Glob_Var.DisplayWatchdog.xEnable:= TRUE; Glob_Var.DisplayWatchdog.itfParameterGroup:= Glob_Var.DisplayReceive.itfParameterGroup; Glob_Var.DisplayWatchdog.tTimeout:= T#1500MS; END_IF Notes: Glob_Var.DisplayReceive is of type J1939.ReceiveParameterGroup Glob_Var.DisplayWatchdog is of type J1939.ReceiveWatchdog The above code is done once and not cyclically I'm monitoring Glob_Var.DisplayWatchdog.xError cyclically
Last updated: 2024-03-13

Post by thewizard8 on Raspberry PI4 Serial Port CODESYS Forge talk (Post)
Hi Dear All, I'm using my raspberry PI4 as a CoDeSyS PLC (Build from scratch with custom electronics). I was able to implement all fieldbuses with the exception of Modbus Serial. I'm using the internal Port (GPIO) and I configured it in /etc/Codesyscontrol_user.cfg the following away: [SysCom] Linux.Devicefile.1=/dev/ttyUSB0 Linux.Devicefile.2=/dev/ttyS0 I'm using COM2 on Master configuration. I'm using a interface board from TTL/RS485 (bidirectional board), and it's works perfectly with other devices but not in CoDeSyS. I'm able to send data with python script and read it on my pc using putty, but when I use a modbus slave simulator to interface with codesys I always get red icons on master and slave. (Please find image attached). I'm pretty shure that this might be a bad parameter on my CoDeSyS runtime configurstion file. Can someone help me? I'm stuck and this is for my master degree certification.
Last updated: 2024-03-18

Post by jose-coro on Trouble installing codesys 64 3.5.19.0 CODESYS Forge talk (Post)
I tried to intalling codesys 64 3.5.19.0, during the installation process I get the following messages: "One or more problems have appeared with the current version profile. please consult with the supplier to solve the problem. -The plugin '{ee08241a-dd43-445a-b0a1-de9f717d92e0}(exactly 3.5.19.0)' is required for the current version profile but is not installed. The plug-in '{c7880c90-68c0-4cf8-a726-f0ee72b11f86}(exactly 3.5.19.0)' is required for the current version profile but is not installed. The add-on '{973a3934-1ec6-4770-83a4-59677803015a}(exactly 3.5.19.0)' is required for the current version profile but is not installed. It is recommended to terminate the application." Then the following message appears: "This package could not be installed: CODESYS Compatibility Package 3.5.17.20”. After that the instalation continue and the folling message appears: "It is possible that packages from this path could not be installed: C:\Users...\Appdata\Local\Temp{EFE2F~1}\Packages"
Last updated: 2024-04-23

Post by jose-coro on Trouble installing codesys 64 3.5.19.0 CODESYS Forge talk (Post)
I tried to intalling codesys 64 3.5.19.0, during the installation process I get the following messages: "One or more problems have appeared with the current version profile. please consult with the supplier to solve the problem. -The plugin '{ee08241a-dd43-445a-b0a1-de9f717d92e0}(exactly 3.5.19.0)' is required for the current version profile but is not installed. The plug-in '{c7880c90-68c0-4cf8-a726-f0ee72b11f86}(exactly 3.5.19.0)' is required for the current version profile but is not installed. The add-on '{973a3934-1ec6-4770-83a4-59677803015a}(exactly 3.5.19.0)' is required for the current version profile but is not installed. It is recommended to terminate the application." Then the following message appears: "This package could not be installed: CODESYS Compatibility Package 3.5.17.20”. After that the instalation continue and the folling message appears: "It is possible that packages from this path could not be installed: C:\Users...\Appdata\Local\Temp{EFE2F~1}\Packages"
Last updated: 2024-04-23

Post by gatto on Backtick identifiers CODESYS Forge talk (Post)
Hello, I’m in Codesys 3.5.20.40 and I try to declare the variable ´var1´ but I get an error. here : https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_rules.html i read : Backtick identifiers By using backticks, characters can also be used in identifiers that are not normally permitted in identifiers, such as special characters. The acute accent character is used for backticks: ´ (Unicode: U+02CA) The use of backticks is recommended in order to be able to use the same identifiers in CODESYS as in other programming languages or documents, such as circuit diagrams. Any character may be used between two backticks, except line breaks and other backticks. Keywords are also allowed as identifiers between backticks. Examples: ´Variable+9´ ´INT´ The backticks are part of each identifier and therefore var1 and ´var1´ are two different identifiers. Example PROGRAM PLC_PRG VAR var1 : INT; ´var1´: INT; END_VAR var1 := var1 + 1; ´var1´ := 12; Are there any limitations or is something missing in my development environment?
Last updated: 2025-10-28

Post by baott569 on CODESYS OPC UA Security: HMI Client Not Receiving Server Certificate CODESYS Forge talk (Post)
Hello everyone, I am currently using OPC UA in CODESYS with the security mode BASIC256SHA256 – Signed and Encrypted. The OPC UA Server is running on an RTE CX device, and the HMI is running on another computer. I have reviewed many CODESYS documents and successfully established communication when the security mode is set to None with Anonymous login. However, when security is enabled, the server does not provide its certificate for the CODESYS HMI client to trust. Interestingly, the client can send its certificate to the server, and UAExpert works normally, but the CODESYS HMI client does not receive the server certificate. Can anyone help clarify what I might be missing? I have been stuck on this issue for three days. If I missed or misconfigured any step, please let me know. I believe I am stuck at step 15 in the following CODESYS guide: Encrypting the Communication of a Data Source OPC UA Client https://content.helpme-codesys.com/en/CODESYS%20Communication/_cds_encrypt_communication_data_sources_opc_ua_client.html Thank you very much.
Last updated: 2026-01-06

Post by baott569 on CODESYS OPC UA Security: HMI Client Not Receiving Server Certificate CODESYS Forge talk (Post)
Hello everyone, I am currently using OPC UA in CODESYS with the security mode BASIC256SHA256 – Signed and Encrypted. The OPC UA Server is running on an RTE CX device, and the HMI is running on another computer. I have reviewed many CODESYS documents and successfully established communication when the security mode is set to None with Anonymous login. However, when security is enabled, the server does not provide its certificate for the CODESYS HMI client to trust. Interestingly, the client can send its certificate to the server, and UAExpert works normally, but the CODESYS HMI client does not receive the server certificate. Can anyone help clarify what I might be missing? I have been stuck on this issue for three days. If I missed or misconfigured any step, please let me know. I believe I am stuck at step 15 in the following CODESYS guide: Encrypting the Communication of a Data Source OPC UA Client https://content.helpme-codesys.com/en/CODESYS%20Communication/_cds_encrypt_communication_data_sources_opc_ua_client.html Thank you very much.
Last updated: 2026-01-06

Post by mjam04 on AM243 LaunchPad as PROFINET Device with CODESYS – RPC Aborted error when scanning devices CODESYS Forge talk (Post)
Hello, I am currently trying to use the AM243 LaunchPad as a PROFINET device and connect to it using CODESYS. In my setup I am also using a Raspberry Pi running the CODESYS PROFINET Runtime, which acts as the PROFINET controller. The setup of the Profinet controller is correct, so all devices are in the same subnet. However, I encounter an issue when scanning for PROFINET devices in CODESYS. The AM243 LaunchPad appears in the scan results, but the following error is reported: RPC Aborted: 0x16C9A049 Additionally, CODESYS shows the message that the identification data is not available and the IP address should be checked. Because of this error, the controller cannot establish a connection to the device. Another observation is that I cannot ping the AM243 LaunchPad from my PC, even though I configured what should be the correct IP address. Setup: PROFINET Device: AM243 LaunchPad PROFINET Stack: Industrial Communication SDK example PROFINET Controller: Raspberry Pi running CODESYS with PROFINET Runtime Engineering PC: CODESYS IDE Network: Ethernet connection between PC, Raspberry Pi, and AM243 In the attachments there is a screenshot of the corresponding error. Did anybody had the same error? Any hints or debugging suggestions would be greatly appreciated. Thank you!
Last updated: 2026-03-13

Post by mohammedben on Fail communication between CODESYS and Fuxa SCADA via OPC UA CODESYS Forge talk (Post)
hi, When I try to establish communication between CODESYS and Fuxa SCADA via OPC UA, the connection fails, and I receive the following error: 2026-02-15T08:38:13.618Z [ERR] 'codesys' connect failure! Error: The connection may have been rejected by server, Err = (ClientTCP_transport6: socket has been disconnected by third party) 2026-02-15T08:38:13.619Z [ERR] 'codesys' try to connect error! Error: The connection may have been rejected by server, Err = (ClientTCP_transport6: socket has been disconnected by third party) 2026-02-15T08:38:13.622Z [ERR] 'codesys' connect error! undefined (1) Note that there are no problems when I establish communication with the UaExpert and OPC UA Client Simulator software. I also previously tried communicating with RapidSCADA and received the following error: Endpoint with the specified security options not found. And when I try to connect with "none" in the security policy, I get this error: BadSecureChannelClosed I have tried almost all the solutions available online and have not found a solution. I hope you can provide me with a solution that solves this problem. Thanks in advance
Last updated: 2026-02-16

Post by risele on Modbus connection via Qronox PCD3 M6893 CODESYS Forge talk (Post)
You are welcome. Also note, that it's valid only if you modbus-device use same real/float value representation (IEEE 754). That's true for most of systems. But some devices may have other representation, such as integer + position of the decimal point, for example 123.456 is integer = 123456 and position = 3 Also note, that, ones again, depending on endianess of each system, you may also need to swap not just words, but bytes. TYPE u_Real : UNION rVal:REAL; wVal:ARRAY[0..1] OF WORD; bVal:ARRAY[0..3] OF BYTE; dwVAL:DWORD; //same as previous, may be easier to specify the MB register END_UNION END_TYPE than swapping may be something as VAR A,B,C,D:BYTE; //Bytes of the real value uIn, uOut:u_Real; rVal:REAL; ModbusReg1,ModbusReg2:WORD; END_VAR uIn.rVal:=rVal; uOut.A:=uIn.D; uOut.B:=uIn.C; uOut.C:=uIn.B; uOut.D:=uIn.A; ModbusReg1:=uOut.wVal[0]; ModbusReg1:=uOut.wVal[2]; Or you even need to reorder bits... Ones again, sending float/real values is not defined by Modbus protocol itself, so it is hardware- and software-dependent. The Modbus Poll (and most of modbus tools) have configuration parameters that will properly swap bytes on their side. Ones again, that's very helpful: https://www.scadacore.com/tools/programming-calculators/online-hex-converter/
Last updated: 2026-02-19

Post by shamcke on Array with generic constant as persistent variable CODESYS Forge talk (Post)
Hello, I have written a function block that uses a generic constant for the upper bound of an array. I wanted to have this array in the persistent memory area, thus I constructed my FB as follows: FUNCTION_BLOCK FbWithGenericArrayLength VAR_GENERIC CONSTANT uiArrayLength : UINT := 10; END_VAR VAR PERSISTENT arr : ARRAY[1..uiArrayLength] OF INT; END_VAR In my PLC_PRG I declare an instance of said FB PROGRAM PLC_PRG VAR myFb : FbWithGenericArrayLength<10>; END_VAR This compiles just fine. When I let CODESYS fill my persistent list, it adds duplicate entries {attribute 'qualified_only'} VAR_GLOBAL PERSISTENT RETAIN // Generated instance path of persistent variable PLC_PRG.myFb.arr: ARRAY [1..uiArrayLength] OF INT; // Generated instance path of persistent variable PLC_PRG.myFb.arr: ARRAY [1..uiArrayLength] OF INT; END_VAR so I manually delete the duplicate. When i now compile, I get errors ------ Build started: Application: Device.Sim.Device.Application ------- Typify code... [ERROR] Sandbox_FW31: PersistentVars [Device: PLC Logic: Application](Line 4): C0161: Border 'uiArrayLength' of array is no constant value [ERROR] Sandbox_FW31: PersistentVars [Device: PLC Logic: Application](Line 4): Type of mapped variable is not equal to original type Compile complete -- 2 errors, 0 warnings Build complete -- 2 errors, 0 warnings : No download possible Is is simply not possible to use a generic constant for the persistent array? Thanks in advance. Edit: It seems I can manually replace the uiArrayLength in the persisten list by the value 10 I used as the generic constant for this particular instance.
Last updated: 2026-05-29

Post by pra83 on CODESYS SoftRedundancy — Both PLCs stay standalone after network interruption — Auto recovery not working CODESYS Forge talk (Post)
Hello, We are facing a critical issue with CODESYS SoftRedundancy that we have been unable to resolve despite extensive troubleshooting. HARDWARE: 2× HP EliteDesk 800 G9 SFF Intel Core i7-14700 (20 cores) 16GB RAM, 512GB NVMe SSD Windows 11 IoT Enterprise LTSC 2024 NIC1: Built-in Intel GbE NIC2: Intel I210-T1 PCIe (NIC team) SOFTWARE: CODESYS Control Win V3 - x64 Version 3.5.22.10 CODESYS SoftRedundancy SL Server 1 IP: 172.10.10.101 (PLC1 — Active) Server 2 IP: 172.10.10.102 (PLC2 — Standby) CURRENT CODESYSControl.cfg: [CmpRedundancy] BootupWaitTime=120000 StandbyWaitTime=12100 SynchronousTimeout=12100 [CmpSchedule] ProcessorLoad.Maximum=80 WatchdogTime=12000 WatchdogTimeoutAction=0 CONFIRMED WORKING: PLC1/PLC2 identification configured via IDE Connection IP configured via IDE AutoSync enabled and written via IDE Normal Active/Standby operation working Server 2 auto-promotes when Server 1 completely fails PROBLEM DESCRIPTION: When NIC1 cable is removed from Server 1 — both servers go to standalone mode. When NIC1 cable is reconnected — both servers remain in standalone indefinitely. Neither server auto-recovers to Active/Standby without manual CODESYS service restart. AutoSync fires (!!! Autosync !!! visible in log) but recovery does not complete. Tested with direct cable (no NIC team) — same result. Confirmed not a hardware or NIC teaming issue. KEY LOG MESSAGES: "Timeout: No sync message RMSG_StartCycle (5) from master: Standalone" "Socket on other side closed gracefully 0" "Standby PLC: Open acyclic work socket failed" "Connection broke after 11806ms. Check BootupWaitTime." Autosync(fires but does not complete recovery) PCAP ANALYSIS (Wireshark): CODESYS sync stops completely at T+3s Server 1 sends TCP FIN on ports 1206 and 1208 at T+5s No CODESYS redundancy traffic for remaining 24 seconds Both servers stay standalone indefinitely WHAT WE HAVE TRIED: StandbyWaitTime = 12100ms SynchronousTimeout = 12100ms WatchdogTime = 12000ms (less than StandbyWaitTime) AutoSync enabled NIC2 set as Standby adapter Disabled Windows Network Discovery Direct cable test — rules out NIC hardware QUESTION: Per official CODESYS documentation: "No automatic Reconnect is included in the functional scope of the redundancy components. You can program the triggering of a reconnect." Is RDCY.Synchronize() the correct function to add to our application for automatic recovery after both PLCs go standalone? What is preventing auto-recovery when AutoSync is enabled and PlcIdent is correctly set? Thank you for your support.
Last updated: 2026-05-02

Post by winki on ModbusFB ClientRequest: never recovers after a single ReplyTimeout (requires full download) CODESYS Forge talk (Post)
Library: ModbusFB (CODESYS Modbus package) IDE / Runtime: CODESYS V3.5 SP___ / Control runtime ___ Target: ___ (e.g. gateway, Linux ARM64 / Debian) Slave: Modbus TCP inverter Summary I poll a Modbus TCP slave with a permanent connection: one ClientTCP (kept connected, xConnect:=TRUE) and one ClientRequestReadHoldingRegisters, triggered cyclically. Everything works fine after a fresh application download. But as soon as one single ReplyTimeout occurs (slave temporarily not answering), the request never recovers. It stays stuck and no further messages are sent, even though the TCP connection is still reported as alive. Only a full application download brings it back — an online change or a runtime reset is not enough / not what I want in production. State observed when stuck So the connection is alive, the request finished in ReplyTimeout, the FB is back to _state = None, but udiNumMsgSent no longer increases — as if a new rising edge on xExecute is no longer accepted / no longer produces a new message. My trigger logic (simplified) Each PLC cycle, in this order: If the request is fully at rest (NOT xExecute AND NOT xBusy AND NOT xDone AND NOT xError) and a read is pending, I set xExecute := TRUE. I call clientTcp() then clientRequest(rClient := clientTcp) once each, per cycle. On xDone or xError, I set xExecute := FALSE. I made sure to insert at least one full cycle with xExecute = FALSE (seen by the FB call) before re-triggering, so the falling edge is processed. Questions After a ReplyTimeout (xError = TRUE), what is the exact, correct sequence to re-trigger the same ClientRequest so a new message is actually sent again? Is a full cycle with xExecute = FALSE between two executions mandatory? Is there a known condition where, after ReplyTimeout, the ClientTCP keeps xConnected = TRUE but silently stops sending new requests (e.g. an internal request queue / _udiRequestId that gets out of sync)? udiNumMsgSent freezing at 23 while the FB shows _state = None is what puzzles me. Is the recommended pattern to drop the connection (ClientTCP.xConnect := FALSE for one cycle, then TRUE) on a request error, rather than keeping it alive? The docs state a request error does not close the connection, so I kept it open — but maybe that is the issue here. Could the large uiStartItem (50514) be relevant? It works right after download, so addressing seems correct, but I want to rule it out. Any guidance on the canonical recovery pattern after a request timeout would be greatly appreciated. Thanks!
Last updated: 2026-06-19

<< < 1 .. 244 245 246 247 248 .. 254 > >> (Page 246 of 254)

Showing results of 6333

Sort by relevance or date