Search talk: boolean operator priority and order

 
<< < 1 .. 89 90 91 92 93 .. 158 > >> (Page 91 of 158)

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 nz-dave on MC_HOMING CODESYS Forge talk (Post)
Hi Just new to motion and i am building my own 3axis cnc cutter using servo drives. i have every thing working quite well apart from mc_home. when executed (r_trig) it stops immediately and i get fb_wasnt_called_during_motion. if i execute the mc_home fb with a toggle it just runs and runs for a while then errors out. what im unsure of is the way mc_home works. from what i understand it changes the drive mode to 6 (homing) and should then run of the drive homing settings. once origin sensor is made then homing would stop and mc_home.done is true. and the position on the fb is where i what the new home position (zero) to be? or do i feed mc_readposition to that input? so i would think its the settings in the drive that aren't quite right. but i believe they are all correct. has any one got any info to steer me in the right direction? Cheers
Last updated: 2025-04-04

Post by r-c-r on SM3RaspiStepper 0.0.0.6 issue CODESYS Forge talk (Post)
Ok, so i made some tests in the meantime and i have some conclusions. It apears that the enable bit is activated only when a motion function is executed. I implemented a very simple program with MC_Power and MC_Jog. If i enable everything on MC_Power, the enable GPIO pin stays off. However, as soon as the MC_Jog function is used the enable GPIO pin turns ON and remains ON. In version 0.0.0.4 this is not happening. The GPIO enable pin turns on or off when the MC_Power is enabled or disabled. From this behaviour i understand that in version 0.0.0.6 the GPIO enable bit is activated together with pulse and dir pins when motion starts. When motion stops, enable bit remains with the last state (on in this case) and you cannot turn it off for example. For me this bit is useful because i can turn on and off the stepper drive with MC_Power function. Now i can turn it on, but never off.
Last updated: 2025-04-04

Post by jakubmphoenix on EtherCAT Master on RaspberryPi with EtherCAT Slave on Beckhoff CODESYS Forge talk (Post)
Hello everyone, I’m currently working on setting up an EtherCAT Master using CODESYS on a Raspberry Pi, and I’ve run into some issues I could use help with. Project Setup: EtherCAT Master: Raspberry Pi with CODESYS Control for Raspberry Pi 64 SL installed EtherCAT Slave: Beckhoff CX5130 with EK1200 coupler I/O Module: EL2008 License Module: EL6070-0033 I’ve installed the required CODESYS packages and the Linux gateway on the Raspberry Pi. In my project, I added the EtherCAT Master with the appropriate port settings and scanned for devices. The CX5130 shows up as a slave, but communication fails—I'm getting error messages and can't access the outputs. Specifically: The EL2008 output module isn’t recognized properly in CODESYS. There’s no option to communicate with it through the CX5130. I’ve tried connecting via both the Raspberry Pi’s built-in Ethernet port and an external network card. I've attached screenshots showing the errors I get in CODESYS and the devices detected via TwinCAT for reference. Any help or suggestions would be greatly appreciated! Thanks in advance! EMERGENCY FROM DEVICE 1001 ERROR CODE 16#A000 Error register 16#02 Error field: 16#02 Error field : 16#0E 16#04 16#00 16#04 16#00
Last updated: 2025-07-16

Post by kurtk on Modbus TCP Server CODESYS Forge talk (Post)
ditto I'm just getting my codesys wheels on and the modbus stuff is confusing. I am re-platforming an existing PLC application On that platform one could simply tag variables to register numbers and the whole shooting match could be accessed via modbus and typically holding registers and input registers were treated the same way... On codesys I see there is a modbus TCP server Device I/O mapping tab and a Modbus TCP server IEC objects tab I get the sense that one can configure the serving of variables both/either way but am unclear about the optimum/necessary path. Apparently in the IEC Objects tab one can "ADD" something or other - presumeably channels. I have created a preliminary function block but the Select Function Block window shows nothing to select WTH ? I exported the Device mapping and was surprised to see the entire Device IO map - complete with all the bit-mapped holding/input registers!! WTH!!?? Bit-mapped words are strictly a nichey special purpose application. I am targetting making a couple hundred variables available which would turn into hundreds of pages of IO/mapping Is the FUnction Block IEC objects thingy an alternative to that ? I notice that CODESYS shows the tags which the PLC used to specify the register address... are tags used in CODESYS for any specific hard-core purpose ?
Last updated: 2025-08-19

Post by antonz on CoDeSys v3.5: creating libraries for both 32-bit and 64-bit controllers CODESYS Forge talk (Post)
Looking for thoughts on creating libraries that can be used on both 32-bit and 64-bit controllers. We are currently writing software in CoDeSys for both target types and will continu to do so for the near future. Projects are always unique, no straight forward copy/paste, yet there is enough similarity between them to use libraries for recurring logic. I do not want to create and maintain twice for both platforms if this is not absolutely necessary. I am aware of useful datatypes like __XWORD, __XINT, __UXINT. Still looking for more information and/or sample code for portable pointer arithmetic. In addition to that: how should one go about when creating and working with compiled libraries? Would I need to compile the same lib twice, once for 32-bit targets once for 64-bit targets? I would end up with two different libs with the same namespace, which does not sound elegant to me. Note: I did not intentionally make the previous paragraph bold. The forge forum software seems to do this automatically upon insertion of a word which starts with two underscores, e.g. __XWORD (yeah, here we go again :) )
Last updated: 2025-08-25

Post by leandroct on Creating Boot Application not working CODESYS Forge talk (Post)
I have a Control Win V3.5 SP20 (64-bit) application, and until now, I open the program (with a password) and download it. However, I need to give the client the option to install the program on the Controller, without them having to open it and access the code. So, I followed these steps: 1 – In the Online => Create Boot Application menu, I saved the generated files in a directory: Application.app Application.crc PlcLogic\visu\ directory with several files 2 – In the SysTray, I ran the PLC, and it created a directory. In the root of this directory (C:\ProgramData\CODESYS\CODESYSControlWinV3x64\E84889DB), I pasted Application.app and Application.crc. Since it created a \visu directory, I pasted the PlcLogic\visu\ files generated in Create Boot Application into it. 3 - In the general Codesys directory (C:\ProgramData\CODESYS\CODESYSControlWinV3x64), I edited CodesysControl.cfg, adding: [CmpLog] Application.1=Application 4 - When running the PLC, nothing happens and the TargetVisu screen does not open. What I'm doing wrong?
Last updated: 2025-09-03

Post by mondinmr on Direct Pointers in IOMapping for EtherCAT with IoDrvEthercatLib.ETCSlave_Dia CODESYS Forge talk (Post)
Using SDO, I can read the EtherCAT mappings and offsets from various registers like 0x1c12, 0x1c13, etc. When I obtain registers mapped in the PDOs and various offsets, I could technically access directly to the statusword, controlword, etc., if they are mapped. I have noticed that on IoDrvEthercatLib.ETCSlave_Diag I can find pointers to the input and output buffers. However, although the input buffer can be easily read by referring to what has been obtained from the SDOs, it is not possible to write to the output buffer, as it is overwritten in each cycle by the data from the IOMapping task. Is there a way, knowing an instance of IoDrvEthercatLib.ETCSlave_Diag, to obtain the pointer to the first data in the IOMapping? The offsets are identical to those of the PDOs, but obviously the data is a copy. For me, the cleanest thing would be to access the pointers on IOMapping, for DS402a devices to retrieve the key data and point them to internal references. I need to know this as, having developed our own motion library, I would like to simplify the initial setup by eliminating unnecessary and nonsensical mappings that can lead users to unnecessary errors. In the current version that we have been using for years, we have to map everything manually. I would like to pass only the slave reference to the FB_init constructors and eliminate the mapping.
Last updated: 2024-02-12

Post by wbj0t on mobus tcp slave device. read/write holdings with 2 variables. CODESYS Forge talk (Post)
Hi there. I have an issue to read and set time for the controller. In the issue many registers described as writable by 6/16 functions, and, in this time, also(!) readable! For example: I have time registers: min, hour, day, mon, year. By specifications it is possible check time (so I need always update these varibles in loop) and set time by writing these same registers, BUT how to set, if they will immediatle updated by current time after writing? So, I need to separate one address at two variables. I have seen option mark: Overlay of the process image by the holding and input register. I understand this so: When I READ by function 3, I will get variable that connected with the same INPUT address and when I WRITE by 6/16 this will change second variable that connected with HOLDING address. BUT, this mark doesnt work, when I write 6/16 and try to get by function 3, I will get written value instead INPUT variable. So, what to do?
Last updated: 2024-03-20

Post by leafy on Use third party actuator with IO-Link Master (IFM) CODESYS Forge talk (Post)
Hey there! I am currently doing a little automation project for uni. I am trying to integrate a control-valve-system (Buerkert AirLINE Field) in my IO-Link environment. With IFM sensors, I used their pre-built function blocks, but with this third-party device, i need to write my own function block. Thankfully, IFM provides a generic sensor-fb so I can write my own FB with "extends" and "super". So far, so good. I found the IODD and some other documentation and I thought I get how it works, but somehow can't really get it to work at all. From my understanding, i need to write data into the PDO-Array. But i get confused with the indices and subindices of IO-Link. I'll append the IODD and some screenshots of my project. There is an AOI for LogicXDesigner, but I can't use that in Codesys. I hope someone has integrated a IOL-device in Codesys before and can help me with this. Cheers leafy
Last updated: 2024-04-16

Post by leafy on Use third party actuator with IO-Link Master (IFM) CODESYS Forge talk (Post)
Hey there! I am currently doing a little automation project for uni. I am trying to integrate a control-valve-system (Buerkert AirLINE Field) in my IO-Link environment. With IFM sensors, I used their pre-built function blocks, but with this third-party device, i need to write my own function block. Thankfully, IFM provides a generic sensor-fb so I can write my own FB with "extends" and "super". So far, so good. I found the IODD and some other documentation and I thought I get how it works, but somehow can't really get it to work at all. From my understanding, i need to write data into the PDO-Array. But i get confused with the indices and subindices of IO-Link. I'll append the IODD and some screenshots of my project. There is an AOI for LogicXDesigner, but I can't use that in Codesys. I hope someone has integrated a IOL-device in Codesys before and can help me with this. Cheers leafy
Last updated: 2024-04-16

Post by aris on Modbus write via FB failure CODESYS Forge talk (Post)
Hi all, I am using CoDeSys V3.5 and a soft controller Win V3x64. I am trying to read a modbus slave via Function Blocks and not via the channels of the hardware tree for the Slave. I created some requests of type ModbusRequest and I notice that I can read Input Registers and Coils but I can not write Holding Registers and Coils. I am using the library IoDrvModbusTCP 4.1.0.0. When i just use a single modbus request with FC06 (or FC16), there is no request sent to the slave and although the xExecute takes its true value from a pulse of 2 seconds duration, I take almost every 3 minutes an error "TCP_COMMUNICATION_ERROR - 16#A5 - TCP Port. error. Request was not sent". My code is ok because if i change the function code for reading registers, everything works fine. Did anyone have this issue in the past? Thank you in advance.
Last updated: 2025-11-06

Post by valenting on License problem with Raspberry Pi CODESYS Forge talk (Post)
Hello, I have a raspberry pi with a license installed, but Codesys stops after 2 hours, and when I start it manually I have the following message: pszInfo=!!!! no runtime license - running in demo mode(~2 hours) I tried using License Manager, and got the following message: Licensing info not available. There is no dongle attached to the device. I have this message frequently, and usually removing the content of /var/opt/codesys/.cmact_license makes it work. After doing it and restarting Codesys, I have an empty Softcontainer without my License. I tried using "Install license" using the .WibuCmRau file for the corresponding license and got the following message: Licensing info not available. The device does not support this service. I also tried using Additional Functions > Restore Licenses with the Ticket ID and got the following message: This device does not support automatic license backup. How can I reinstall the license to this Raspberry Pi?
Last updated: 2025-11-28

Post by mrkm-dic on UC20-M4000 Redundancy – Application is not automatically synchronized and redundancy breaks after online change CODESYS Forge talk (Post)
Hello, I am currently testing redundancy using two UC20-M4000 controllers with CODESYS Control SL. The basic redundancy functionality (Active/Passive switching and failover) works, but I am experiencing problems when updating the application. Environment Controller: Weidmüller UC20-M4000 OS: u-OS Runtime: CODESYS Control SL 4.12.1.0-1 Redundancy link: dedicated Ethernet connection between the two controllers Time synchronization: NTP configured, time difference between controllers is about 1–2 seconds Current behavior Application synchronization When I download a modified application to PLC1 (Active controller), the application is not automatically copied to PLC2 (Passive controller). However, when I perform a path swap, the application download to PLC2 starts automatically. My expectation was that the Passive controller would automatically receive the updated application after downloading to the Active controller. Online change When performing an online change, redundancy is lost and the controllers switch to Standalone mode. Typical log messages include: RedundancySynchronize called Redundancy failover itself works correctly. The application boot project exists on both controllers (Application.app and Application.crc). Network interfaces are up and correctly configured. Question Is this behavior expected when updating the application in a redundant UC20-M4000 setup? Should the Passive PLC automatically receive the updated application, or is manual synchronization required? Any advice or recommended configuration for stable redundancy during online change and application download would be greatly appreciated. Thank you.
Last updated: 2026-03-16

Post by russells on Codesys ControlWinV3x64 with EtherCat Slave CODESYS Forge talk (Post)
Hi there I am running Codesys ControlWinV3x64 (Patch 4) on my laptop for demonstration purposes but I am unable to get connection to the EtherCAT master and slave device. This is the process that I have followed: * Installed NPCap. * Added the xml file for the SMC slave device to the Device Repository. * Activated Control Win SysTray x64 and selected Start PLC. * Scanned the network for the local device (my laptop). * Added an EtherCAT master to the project and scanned the EtherCAT master for the Network and then selected the correct network. * Selected "Scan for devices" to identify the connected I/O. * Add the SMC EtherCAT slave manually because I was unable to scan it in. * Selected "Scan for devices". I have followed the steps described above but I can't scan in the EtherCAT slave or connect to it. I thought this situation was unique to the EtherCAT slave but I have also tried the same for an EtherNet/IP slave using the Ethernet Adaptor and EtherNet/IP scanner and I am also unable to scan in the device or activate the EtherNet/IP network. Any assistance will be appreciated.
Last updated: 2026-02-04

Post by fajean on Issue with library updates CODESYS Forge talk (Post)
We make heavy use of internally developed libraries, which are often nested on multiple levels. I routinely work simultaneously on several libraries along with a project that use them. I make changes to a library and immediately perform a download (online or otherwise) in the project. For the longest time, we had zero issue with this. But starting a good while back, with 3.5 SP19 I think, CODESYS started not noticing library updates in other instances most of the time. When the update is missed, the project sees no need to update the code, and any download ignores the new code. A "Clean all" does not solve the issue. But if I close and then re-open the project, then the new version is noticed and the download works. The other solution is saving the library to the registry multiple times (say, 20-30 times, less if lucky), and then at some point the project notices the changed library. I am now on SP21, and it is still not fixed. This is driving me mad, any tasks probably takes me double the time or more due to this problem. My colleague has the same problem on a separate computer. Is this a known issue? Is there a setting somewhere that changes how updates are checked? Thanks for any help!
Last updated: 2026-02-13

Post by darko7417 on When running as a service, CodesysControl doesn't write log files to the disk (and other CmpLog related issuess) CODESYS Forge talk (Post)
I run CODESYS runtime as a service and use CmpLog (the LogAdd2 function) to log different events to a file. I have done this many times before on various projects and hardware, and it works fine. On this particular system, I have CODESYS 3.5.20.40 running on a Windows 11 PC. The CODESYSControlService autostarts (with Local System credentials, the default), and the application runs fine. However, the configuration file is not read (or at least not the one that should be, or not the CmpLog section), and log files are not written to the disk. I would be thankful if anyone knew why this is happening and how to fix it. A note to CODESYS people: you must provide more information on the codesys configuration file, CODESYSControlService.exe and other major components and system behaviour. You created the service and various features (i.e. logging), but haven't explained how they work, which, in my opinion, is below standard for industrial automation software. These are my observations: - When running as a service, the config file is not read (none of them), or at least the CmpLog section is not read. I checked the log using Codesys IDE, and the CmpLog parameters are not the ones I have set in any of the config files. Which CmpLog config values does the service use, and where does it read them from? I have no idea, but it's not the config files. Here are the codesys config files I located on the PC's disk: o C:\Program Files (x86)\CODESYS 3.5.20.40\GatewayPLC\CODESYSControl.cfg (only 2 lines in this config) o C:\Program Files (x86)\CODESYS 3.5.20.40\GatewayPLC\AppDataFiles\CODESYSControlWinV3\CODESYSControl.cfg o C:\Users\SRV\AppData\Roaming\CODESYS\CODESYSControlWinV3\C4DBB537\CODESYSControl.cfg o C:\Program Files (x86)\CODESYS 3.5.20.40\GatewayPLC\tempCFG\CODESYSControl.cfg - When I run codesys as an app (e.g. by clicking the icon), this config file is read C:\Users\SRV\AppData\Roaming\CODESYS\CODESYSControlWinV3\C4DBB537\CODESYSControl.cfg and log files are written ok. The icon target is "C:\Program Files (x86)\CODESYS 3.5.20.40\GatewayPLC\CODESYSControlService.exe" -d o the -d option, I think, starts a cmd-like window showing service debug output (the output shown in log in the IDE) o the -i option, again I think, means install the service - I tried adding -d to service start parameters in the registry, but it started only once and after that it refused to start. Knowing what -d does and which other options are available would be great (e.g. can I make the service read a different config file). - Syslog UDP logging works fine in any case. - These are my CmpLog parameters ~~~ [CmpLog] Logger.0.Name=PlcLog3 Logger.0.Filter=0xFFFFFFFF Logger.0.Enable=1 Logger.0.MaxEntries=10003 Logger.0.MaxFileSize=50003 Logger.0.MaxFiles=33 Logger.0.Backend.0.ClassId=0x0000010B ;sends logger messages to SysOut Logger.0.Backend.1.ClassId=0x00000104 ;writes logger messages in a file Logger.0.Backend.2.ClassId=0x00000135 ;sends logger messages as UDP syslog Logger.0.Type=0x314 ;Set the timestamp to RTC ~~~
Last updated: 2025-02-27

Post by jari-koivuluoma on Problem trying Net Base Services 3.5.15.0 TCP connection CODESYS Forge talk (Post)
I have a need to send messages between 2 PLCs and I cant use network variables (because of size limit) so I tried writing this simple test program. This seems to work fine. I can send messages back and forth when a first "Start server" and then "Connect client". See the attached image. However, if I disconnect the client by setting ClientConnect to false and try to re-connect then the TCP_Client just gives me TIMEOUT error. When I stop and start the server again, then Im able to reconnect. How is this supposed to work? Why reconnecting wont work. There is not other way of disconnecting the client than setting xEnable of the TCP_Client to false. This is just a testing program and I will try it on 2 seperate devices once this works. PROGRAM PLC_PRG VAR CONSTANT mySize : UDINT := 255; END_VAR VAR Server: NBS.TCP_Server; ServerIpStr: STRING := '127.0.0.1'; ServerIP: NBS.IP_ADDR; ServerPort: UINT := 50000; ServerConnection: NBS.TCP_Connection; Client: NBS.TCP_Client; ServerRead: NBS.TCP_Read; ServerWrite: NBS.TCP_Write; ServerSend: STRING(mySize); ServerReceive: STRING(mySize); ServerConnect: BOOL; bServerSend: BOOL; IP: NBS.INADDR; ConnectedClientIP: STRING; ClientPort: UINT := 50000; ClientIpStr: STRING := '192.168.1.49'; ClientIP: NBS.IP_ADDR; ClientRead: NBS.TCP_Read; ClientWrite: NBS.TCP_Write; ClientSend: STRING(mySize); ClientReceive: STRING(mySize); ClientConnect: BOOL; bClientSend: BOOL; Error: BOOL; Message: BOOL; END_VAR // Server ServerIP.sAddr := ServerIpStr; Server( ipAddr := ServerIP, uiPort := ServerPort ); ServerConnection( xEnable := Server.xEnable, hServer := Server.hServer, ); IP := ServerConnection.IPAddress; ConnectedClientIP := F_Concat7( BYTE_TO_STRING(IP.S_un_b.s_b1),'.', BYTE_TO_STRING(IP.S_un_b.s_b2),'.', BYTE_TO_STRING(IP.S_un_b.s_b3),'.', BYTE_TO_STRING(IP.S_un_b.s_b4)); ServerRead( xEnable := ServerConnection.xActive, hConnection := ServerConnection.hConnection, szSize := SIZEOF(ServerReceive), pData := ADR(ServerReceive) ); IF ServerRead.xReady AND ServerRead.szCount > 0 THEN Message := TRUE; END_IF IF ServerRead.eError > 0 THEN Error := TRUE; END_IF ServerWrite( xExecute := ServerConnection.xActive AND bServerSend, hConnection := ServerConnection.hConnection, szSize := LEN(ServerSend)+1, pData := ADR(ServerSend) ); IF ServerWrite.xDone THEN bServerSend := FALSE; END_IF IF ServerWrite.eError > 0 THEN Error := TRUE; END_IF // Client ClientIP.sAddr := ClientIpStr; Client( xEnable := ClientConnect, ipAddr := ClientIP, uiPort := ServerPort, udiTimeOut := 10000000 ); ClientRead( xEnable := Client.xActive, hConnection := Client.hConnection, szSize := SIZEOF(ClientReceive), pData := ADR(ClientReceive) ); IF ClientRead.xReady AND ClientRead.szCount > 0 THEN Message := TRUE; END_IF IF ClientRead.eError > 0 THEN Error := TRUE; END_IF ClientWrite( xExecute := Client.xActive AND bClientSend, hConnection := Client.hConnection, szSize := LEN(ClientSend)+1, pData := ADR(ClientSend) ); IF ClientWrite.xDone THEN bClientSend := FALSE; END_IF IF ClientWrite.eError > 0 THEN Error := TRUE; END_IF
Last updated: 2024-10-03

Post by mondinmr on Frustration-Fueled Feedback on Project File Management and Git Integration CODESYS Forge talk (Post)
Good day, I’m writing this message out of frustration regarding the current way project files are saved as encrypted XML and single-file format in CODESYS. I find this approach to be quite tedious for several reasons: Limited Access to Structured Text: Not being able to access Structured Text (ST) externally makes it impossible to work with alternative editors like VSCode. Tools like VSCode are incredibly responsive and feature advanced systems such as GitHub Copilot, which would be a real game-changer when working with ST IEC. While CODESYS works well for small code snippets or debugging, when the codebase grows, switching to VSCode to boost productivity becomes essential, and copy-pasting between environments is a cumbersome workaround. Poor Integration with Git: This file format also makes it very difficult to integrate effectively with Git. I have tested the internal demo, but for advanced merges, it is unusable. Without properly formatted plain text, it’s impossible to leverage the vast ecosystem of external tools around Git that allow smooth merges in heterogeneous teams. File Corruption on Network Drives: I often work from multiple locations with shared network drives. When the development environment saves a file and something goes wrong midway (which can occasionally happen when using VPNs and network drives), the entire project becomes irrecoverable. There’s no way to cancel the save process, and the development environment freezes. This has happened to me at least four times over the past two weeks, and one of those incidents cost me an entire day of work. All of this is particularly disappointing because I truly believe that the libraries, runtime, and overall work done by CODESYS are exceptional. I find it fantastic that there is a platform allowing development of PLCs and control systems using OOP, which is a huge advantage in modern control engineering. I apologize for the rant, but this issue has been extremely frustrating. Best regards.
Last updated: 2024-10-15

Post by imdatatas on MC_CamIn did not work properly with SMC_FreeEncoder on SoftMotion 4.17.0.0 CODESYS Forge talk (Post)
Hello, I am facing a problem with the new Softmotion 4.17.0.0 version. Has anyone encountered a similar problem, what is the solution? I would be happy if you could share it. Problem description: -- "SMC_FreeEncoder" encoder axis is the master, -- The motor of the servo driver on the EtherCAT bus is the slave axis. -- When the MC_CamIn block executed, the InSync output is activated. However, although the master encoder axis position value changes, there is no movement in the slave servo axis! Test steps: 1-) EtherCAT servo axis installed, configured and motion test was performed with MC_Jog. No problem. 2-) Softmotion general axis pool > SMC_FreeEncoder was added and pulse amount configuration was performed. No problem. 3-) Incremental encoder actual count value was transferred to the "SMC_FreeEncoder.diEncoderPosition" variable as DINT under the ethercat task in every cycle and the encoder axis position value was observed. No problem. 4-) A simple CAM table with a 1:1 ratio was created under the project tree. (For example: Simply, when the encoder rotates 1 turn, the motor will rotate 1 turn.) 5-) The SMC_FreeEncoder axis enabled with MC_Power and brought to the StandStill state. 6-) The MC_CamTableSelect block was run with default input values ​​(all absolute) and only the Cam table name was specified. The Done output was seen successfully. No problem. 7-) The MC_CamIn block was activated with default input values ​​(absolute) and only the master encoder axis name, slave servo axis name, CamTableID input pins was specified and then "Execute" input set to TRUE. 8-) The InSync output information of the MC_CamIn block observed as TRUE. However, although the encoder axis value changed, the position value of the slave axis did not change at all, it did not move. It always remained at 0.0mm. 9-) When I repeated the same steps above, only changing the master axis to SM_Drive_Virtual instead of FreeEncoder and gave movement to the virtual axis, this time the slave axis moved successfully. However, when the same steps and operations are performed with the same IDE just downgrade SoftMotion version from 4.17.0.0 to 4.10.0.0, everything works normally and without problems as expected in MC_CamIn block with FreeEncoder master. (By the way, The used IDE version is Codesys V3.5 SP20patch3.) Best Regards Imdat
Last updated: 2024-11-11

Post by eoahe on Problem Reading Registers via Modbus from non Codesys device CODESYS Forge talk (Post)
Hey Guys :) I have the following Problem using Modbus via Codesys: I'm trying to implement a Modbus Device into my codesys project. The device is a Router from Teltonika (RUT956) and it can communicate via Modbus. Currently I'm trying to implement it into my codesys prject as a slave and I'm using my windows computer as master. As it is not a codesys device (the codesys application is not uploaded to device as it has its own software) I'm having problems requesting and reading registers from the router. I've set up my windows computer as Master and implemented the router as slave. When I go online on my master device it sais that it has established a connection to the slave (router)(So I'm thinking this could work as there is a connection?). The goal is to read the GPS (latitude and longitude) data and on the homepage of teltonika you can find the register address and number of registers (adress 143 for latitude and 145 for longitude; both have a number of two registers). I've found tutorials how to read specific registers via their register address with other modbus programs (like modbus-cli), but as my entire project is established in codesys I was hoping to read these specific registers via codesys so that I can show the GPS data on my dashboard. I've tried establishing slave channels but that hasn't been working. I tried read input register channels of the length 4 but it's not possible to define specific register addresses to read via codesys so that didn't work (I jsut get a slaves device failure) and I've also tried establishing 516 (total number of registers the router sends I think?) read inputregister channels but that has the samle failure... So i guess the problem I'm having is establishing slave channels to read these specific registers. Does anyone know how to tackle this problem and has maybe had the same problem? Or maybe someone knows a workaround? I'm quite new to codesys so maybe I'm also lacking expertise...
Last updated: 2025-03-01

Post by scoob on ModbusFB - Slow Response Time CODESYS Forge talk (Post)
Hello, I have been trying to use the ModbusFB functions so I can put some code into libraries, but it seems to be very slow for me. I have a Modbus device with 100ms registers. I previously setup 10 channels in the 'traditional' Modbus Slave with channels and mappings - and set a cyclic trigger at 100ms - this worked fine. I then tried the ModbusFB example, and setup reading the same 10 blocks of modbus addresses, copying the example and putting all of the requests into an array and triggering the requests sequentially. I timed how long the requests are taking to get round to each one, and it is around 1s 450ms. How do I speed this up to match the cyclic time? IF NOT(init) THEN init := TRUE; // Set the required IP address: ipAddress[0] := 192; ipAddress[1] := 168; ipAddress[2] := 1; ipAddress[3] := 10; // Pass the required IP address to the clinet FB: client_NetworkSwitch.aIPaddr := ipAddress; client_NetworkSwitch.udiLogOptions := (ModbusFB.LoggingOptions.ClientConnectDisconnect OR ModbusFB.LoggingOptions.ClientReceivedValidReplies); // Try to connect the client client_NetworkSwitch(xConnect:=TRUE); // Configure all the channels to read connecting them to the client: portStatus_Request(rClient := client_NetworkSwitch, uiStartItem := 4096, uiQuantity := 32, pData := ADR(portStatus), udiReplyTimeout := udiReplyTimeout); portSpeed_Request(rClient := client_NetworkSwitch, uiStartItem := 4352, uiQuantity := 32, pData := ADR(portSpeed)); flowControl_Request(rClient := client_NetworkSwitch, uiStartItem := 4608, uiQuantity := 32, pData := ADR(flowControl)); linkUpCounter_Request(rClient := client_NetworkSwitch, uiStartItem := 5888, uiQuantity := 32, pData := ADR(linkUpCounter)); txPacketCounter1_Request(rClient := client_NetworkSwitch, uiStartItem := 8192, uiQuantity := 100, pData := ADR(txPacketCounter1)); txPacketCounter2_Request(rClient := client_NetworkSwitch, uiStartItem := 8292, uiQuantity := 28, pData := ADR(txPacketCounter2)); rxPacketCounter1_Request(rClient := client_NetworkSwitch, uiStartItem := 8448, uiQuantity := 100, pData := ADR(rxPacketCounter1)); rxPacketCounter2_Request(rClient := client_NetworkSwitch, uiStartItem := 8548, uiQuantity := 28, pData := ADR(rxPacketCounter2)); txErrors_Request(rClient := client_NetworkSwitch, uiStartItem := 8704, uiQuantity := 64, pData := ADR(txErrors)); rxErrors_Request(rClient := client_NetworkSwitch, uiStartItem := 8960, uiQuantity := 64, pData := ADR(rxErrors)); // Trigger all client requests initially FOR clientRequestsCnt := 0 TO (SIZEOF(clientRequests)/SIZEOF(clientRequests[0]))-1 DO pClientRequest := clientRequests[clientRequestsCnt]; pClientRequest^.xExecute := TRUE; END_FOR // Prepare sequential trigger / control of client requests. clientRequestsCnt := 0; pClientRequest := clientRequests[clientRequestsCnt]; END_IF // Call the client to do request processing: client_NetworkSwitch(); // Now we trigger client request sequentially ... IF NOT pClientRequest^.xExecute AND NOT pClientRequest^.xDone AND run AND client_NetworkSwitch.xConnected THEN pClientRequest^.xExecute := TRUE; END_IF // .. and check result/error IF pClientRequest^.xExecute AND run AND client_NetworkSwitch.xConnected THEN IF pClientRequest^.xDone THEN // Prepare next trigger of client request (a rising edge of xExecute) pClientRequest^.xExecute := FALSE; IF clientRequestsCnt < SIZEOF(clientRequests)/SIZEOF(clientRequests[0])-1 THEN // next client request clientRequestsCnt := clientRequestsCnt + 1; ELSE clientRequestsIterationCounter := clientRequestsIterationCounter + 1; clientRequestsCnt := 0; END_IF pClientRequest := clientRequests[clientRequestsCnt]; END_IF END_IF I did try a semi-coded way using the IoDrvModbusTCP library, and setting the slave com settings, then 10 commands and 10 requests, then using a TP on xDone as a pause, before triggering another request - this is time the delay is around 120ms - so the device is fine with the speed, just something I am doing wrong in the ModbusFB method I am sure.
Last updated: 2024-04-26

Post by cer-wa on Not able to connect multiple profinet encoder in codesys Linux ARM64 CODESYS Forge talk (Post)
Hello, currently im working with a RevPi connect 5 on a codesys project. Up until now I was having a blast because things were going really smooth but for like almost a day im kind of stuck on the integration of multiple profinet sensors into my project. This is kind of a bummer because that should be an easy thing to do. What I tried so far was to create and additional ethernet adapter where I then tried to connect my devices. in the beginning I tried to connect the devices directly which was not working because I could assign the IP-adress only to the ethernet adapter and not to the devices but the device was found in the device repository (this gets important in the second part) So what I tried next was to setup a PN-Controller and connect my devices subsequently to the Controller. Sadly now the devices wont show up in the device repository anymore. To me its not clear why this is happening. And the worst thing is: I went ahead and setup a device completely like I would want to have it in the project and when I then click on scan devices I can even find the device. But it can not be added to project for whatever reason eventhough im 100% certain that the gsdml file is the correct one. Can anyone help me with this. Like I said this seems like an easy thing to do and its taking me way longer than expected already. The only thing that came to my mind why this might not work is because I have codesys license which only allows one profinet instance. Could that be the case? The error message seems then pretty unfit but ok. I will be grateful for every advice. Thanks in advance! Best regards!
Last updated: 2025-09-25

Post by xcqt on Oop best practice CODESYS Forge talk (Post)
Hi all, I’m currently trying to improve my OOP structure in CODESYS and I’m looking for some input on how others approach this. I understand the basics like inheritance, interfaces, abstract FBs, methods, and properties, but I still struggle a bit with the overall architecture and what’s considered clean or scalable in bigger projects. As an example, I’m working on two different energy meter function blocks: FB_EnergyMeter_MQTT reads data from MQTT (strings) FB_EnergyMeter_Modbus reads data from Modbus (words) Both have their own Update() method and implement the same interface (something like IF_EnergyMeter). Later on, I’ll probably add more meter types, but they should all behave the same from the controller’s point of view. Now, there’s a FB_GridControl block that needs power data from these meters. I see two options here: Define the meter blocks inside FB_GridControl and call them directly (for example fbModbusMeter.UpdateModbus()). Keep the meter blocks outside and pass them into FB_GridControl as interface references, so the control block doesn’t know which specific type of meter it’s dealing with. Option 2 feels cleaner and more flexible to me, but I’m not entirely sure how to handle the data flow in that case. Should I pass the meter instance through an interface reference (REFERENCE TO IF_EnergyMeter)? Or is there a better way to link the external FBs to the control block? I’d like to hear how you structure this kind of setup or see an example from someone who has done something similar. EDIT: I think i need to do something like this fbModbusUpdateInput(wInput:= wWordValue); fbMqttUpdateInput(strInput:= strStringValue); IF bUseMqtt THEN Meter REF = fbMqttUpdateInput; ELSE Meter REF = fbModbusUpdateInput; END_IF fbControl.SetMeter(UsedMeter := Meter); Or am i thinking wrong? Thanks, Thomas
Last updated: 2025-10-16

Post by r-niedermayer on OPC UA subscriber not operational CODESYS Forge talk (Post)
Hi. As far as projects in "old version"s are concerned, these can be upgraded to newer versions at any time. To do this, the device must be updated accordingly and the copilers and library versions must be adapted. You can find instructions on how to proceed in the online help/FAQ: https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_changing_compiler_version.html https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_cmd_update_device.html See also 4.3.22.4 "How to open an Example Project" within the following pdf for more details on the single steps: https://forge.codesys.com/lib/counit/tickets/_discuss/thread/3e991befbc/ca97/attachment/Public%20FAQ-v13-20240610_075228.pdf Regaring your OPCUA connection state always showing just "DISABLED", without knowing both sides of the assembly in detail, one can only approach the problem theoretically. We can give a chekclist on how to proceed: Fist, please recheck the communication settings in the OPC UA connection function block to ensure that the server URL, endpoint URL, and other settings are correct and match the configuration of the OPC UA server. Verify that the OPC UA server is running and accessible. -You can try to connect to the OPC UA server using a separate client, such as UAExpert, to ensure that the issue is not related to the OPC UA server itself. Test the security settings in the OPC UA connection function block to ensure that the correct security policy and certificate are selected. If you are using a dynamic connection to the OPC UA server, probe that the connection settings are correctly configured and that the OPC UA client is able to establish a connection to the OPC UA server. Also, please loock into the log files for any errors related to the OPC UA connection function block, these should be listet there. The log files may also provide additional information about the issue and help you to further troubleshoot the problem. FYI - Please see https://content.helpme-codesys.com/en/CODESYS%20Communication/_cds_obj_data_source_communication_opc_ua_server.html: Her you can finde the Communication settings via OPC UA Server -> layout Browse Live Server: The client connects to the server and detects the existing variables and types. From Information Model The client reads the data structure (layout) of the OPC UA Server from the information model set here and as a result receives the information about available variables and types. A connection to the server is not required. The list contains the information models installed in the OPC UA Information Model Repository. "Read Connection" Settings from IEC Variable (option set): - The connection settings used by the device are not read here from the dialog, but at runtime from the IEC variable specified here. - For this possibility, please see the Using a Dynamic Connection to an OPC UA Server (https://content.helpme-codesys.com/en/CODESYS%20Communication/_comm_use_dynamic_opc_ua_server_comm_settings.html) The settings for the communication of a Client-data source to an OPC UA Server can also be dynamically configured from the IEC code and can also be changed at runtime. For such a purpose, a structure is available in the DatasourceOpcUAServer library (For a description of the OPC UA Server, there is one included in the standard installation of CODESYS, https://content.helpme-codesys.com/en/CODESYS%20Communication/_cds_encrypt_communication_data_sources_opc_ua_client.html)
Last updated: 2024-11-04

<< < 1 .. 89 90 91 92 93 .. 158 > >> (Page 91 of 158)

Showing results of 3940

Sort by relevance or date