Post by andre-luis on Check if Codesys runtime is on 'Running' or 'Stopped' state?
CODESYS Forge
talk
(Post)
Just to share, for those who as me are seeking for this and had found no information anywhere in this World: Every time I stop/start the PLC runtime ( turning into 'Stopped' or 'Running' state ) the 'CODESYSControlService' appears at the Taskmanager list, which could suggest a straight correlation. I was expecting a clever solution, but this one solves for while.
Last updated: 2024-07-02
Post by andre-luis on Check if Codesys runtime is on 'Running' or 'Stopped' state?
CODESYS Forge
talk
(Post)
It's already there, the service get started as default. I missed to say that sometimes it happens w/o even the system get restarted. Anyway, the main issue here is to know the state of the runtime. We collect a lot of informations about the whole system, and it would be nice to have a way to detect the runtime state.
Last updated: 2024-07-02
Post by dkugler on TargetVisu Freezing
CODESYS Forge
talk
(Post)
The only weird situation i remeber with particular or complete frozen target visu was after the rtc clock was fallen or set back to the past. It looked like after running a while the alarm history database crashed during writing entries at a date lot of years in the past. After setting the rtc clock to actual date/time and deleting the alarm db every thing worked fine. I don't know, if this is/was a problem of our PLC hardware/firmware? Maybe check date/time at your system?
Last updated: 2024-09-13
Post by pixsys on Webvisu cliĂŤnt responsiveness
CODESYS Forge
talk
(Post)
Hi, please check if "Support client animations and overlay of native elements" option is enabled. This option is very heavy to manage for the Webclients. I'm using the Pixsys srl "TC series" HMI with the code "P3" (so a 4+4 cores CPU) that runs very well also with this option active. The same CPU is mounted also in their WebPanel "WP" series, so you can try one of them if you want.
Last updated: 2024-11-06
Post by pmanuele on Beckhoff AS1060 and EL7041 configuration
CODESYS Forge
talk
(Post)
Hello everyone, i'm having some problems commanding AS1060 step motor with EL7041 (rev22) drive. With motor i've also the incremental encoder (05.2420.1230.0200.5009). I can correctly move the motor in "Position controller" operating mode with the internal counter. The problems start when i set the Encoder in feedback type or i change the operating mode. Does anyone have experience with these two terminals and can give me some advice of main parameters to check or change? Thanks everyone
Last updated: 2024-12-11
Post by bruno-roth on Read "Homed" status from EtherCAT drive
CODESYS Forge
talk
(Post)
Hello, the information if your axis is already homed you could only find out direct from your Slave. In DS402 status there is no Bit defined. But some manufacturer of Drives use some optional bits or status. E.g. if you have Schneider Electric LXM32 Servo you will find this information in Bit 15. You have to check the manual of your used Servo-Drive f this information is provided in any object and then read it out with SDO.
Last updated: 2025-01-08
Post by mondinmr on Something of strange in the trace
CODESYS Forge
talk
(Post)
I noticed something strange in the trace: one of the variables (specifically parts.servoFeeder.m_pathGen.m_acPos) is showing an absurd or unrealistic valueâsomething around 4E+18. However, when I check the same variable in the watch window, it shows a normal and expected value (around 506). Do you know why there is this discrepancy between the trace and the watch? Could it be a bug in the trace tool? Thanks in advance!
Last updated: 2025-05-16
Post by marcolim on RPC failed 0x16c9a085
CODESYS Forge
talk
(Post)
Hello Matteo, I think the problem is about configuration of firewall (windows firewall usually). You can disable temporary the firewall to check if the communication works. Eventually you can: Go to the control panel -> Windows Defender Firewall -> Allow an app or feature Enable the options to change the settings. Scroll down in the application list to CODESYS and CODESYS ControlService. If you donât see this application add it to the list. Make sure that all the checkboxes are checked (Domain, Private and public).
Last updated: 2024-04-01
Post by larboardinner on Alarm Table Issues
CODESYS Forge
talk
(Post)
Variable for Selected Alarm ID only updates when the visualization is actually configured to send the alarmâs ID back to the control. On some devices/visualization profiles this isnât enabled by default. Make sure your Alarm Table element has âSend Selected Alarm IDâ activated in the visualization properties. you could check this example: https://store.codesys.com/alarm-manager.html Geometry Dash Lite If that option isnât available in your version, then unfortunately the âSelected Alarm Groupâ is the only one that updates reliably in older 3.5.x builds.
Last updated: 2025-11-17
Post by gseidel on Scara3 kinematic robot error
CODESYS Forge
talk
(Post)
Hi aniket-b, the maximum cycle time of the EtherCAT_Task is very high, ca. 35 ms. Could you please check if this is just the first cycle after starting the application or if it happens during motion? (You can reset the times in the task configuration by right-clicking in the "monitoring" tab.) Another thing to try: put the SoftMotion_Planning task on a different core. Best regards, Georg
Last updated: 2026-01-07
Post by timvh on KeyPad Function in Visualization to fill a table
CODESYS Forge
talk
(Post)
Create an array of STRING and 1 INT variable, e.g.: asMyString : ARRAY[0..9] OF STRING; iIndex : INT; Then place a "Table" object in the visualization: - link this to the string array variable. - Check the option "Use Template" - Then in the Input Configuration - add the "Write Variable" command Somewhere else add a "Combobox, array" - link this to the same array. - And link the index to the INT variable. In the Combobox, you can then select one of the strings from the array. The index variable will indicate which selection has been made.
Last updated: 2026-01-08
Post by struccc on Inheritence of struct,
CODESYS Forge
talk
(Post)
Strangely reminds me to my struggles... Want to do something "Elegant", reusable, universal, practical... In CODESYS??? đ First of all, before you get too deep into this: If you could find a way, to make a "universal" log entry object, containing the variable length data itself, you wouldn't be able to store them in an array, or access them like an array, or pass them by value as a type. (please correct me, if I'm wrong, incorrect, or not precise). Because... Basically you can't declare a type with variable memory footprint. This is a very deeply embedded characteristic of CODESYS, and all IEC 61131-3 systems, and it has many reasons behind. And yes, it is a very common trap / mistake, to forget about. So, with a log entry - I guess - it's pretty much the purpose: store data and metadata together, and then handle it in a uniform way. There are ways to handle this, really depends on what is the purpose. For example: 1. Entries with fixed length (Maybe it is not as evil as it looks for the first time. Depends on the situation, but definitely the fastest and easiest code) You can have your base object, with an internal, fixed length string or byte array variable. I would go with a string, and call it _Data.; And then you can make properties, like As_Bool, As_Int, As_Real... In the 'set' accessors, you can do like: pReal := ADR(_Data); // POINTER TO REAL As_Real := pReal^; In the 'get' accessors, evidently: pReal := ADR(_Data); // POINTER TO REAL pReal^ := AS_Real; Or, can use ANY type, if you are not obsessed with variable / property like access: 2. Fixed length, but nicer First, some disadvantage to any values: - You can only assign values with write access. No literals, constants, etc... - Can only be used as input variable of function or function_block - Therefore, stg you could reach: LogEntry.Initialize (stVariable|rVariable|iVariable|xVariable); Just a quick example (it's funny to play with ANY): Be careful it was not tested. I'm sure can be done better, please feel free to comment FUNCTION_BLOCK FB_LogEntry VAR_INPUT MsgClass : UDINT; // Like DEBUG, WARN, ERR... MsgCode : UDINT; // Like Errors.ERR_FAILED MsgTS : DT; // The timestamp END_VAR VAR _Data : STRING(80); // Our data container... _Descr : __SYSTEM.AnyType; // A standard descriptor for our data, containing TYPE_CLASS, address and size END_VAR METHOD SET_Value : BOOL VAR_INPUT anyValue : ANY; END_VAR VAR I : DINT; diSize : DINT; pStr : POINTER TO STRING; END_VAR // Check what did we receive in anyValue. diSize := anyValue.diSize; // We use constant __SYSTEM.TYPE_CLASS to identify the received data type CASE anyValue.TypeClass OF // Maybe we don't want to store references, pointers... and who knows what else... __SYSTEM.TYPE_CLASS.TYPE_REFERENCE, __SYSTEM.TYPE_CLASS.TYPE_POINTER : SET_Value := FALSE; // For the planned types we will be just fine. TYPE_CLASS.TYPE_BOOL, TYPE_CLASS.TYPE_INT, TYPE_CLASS.TYPE_REAL : SET_Value := TRUE; // Optionally string can be handled separately, maybe we have received STRING(255), but practically it is shorter than 80 bytes... TYPE_CLASS.TYPE_STRING : pStr := anyValue.pValue; diSize := MIN(anyValue.diSize, LEN(pStr^) + 1); // Get the actual size, and rewrite the received structure member diSize := MIN(SIZEOF(_Data), diSize); // Can chop down the received string to our length... SET_Value := TRUE; // Maybe want to play a little bit more here, to narrow down or convert datatypes, etc... // Or just reject any other datatype ELSE SET_Value := FALSE; RETURN; END_CASE // Fail, if the received value is still larger than our container... IF diSize > SIZEOF(_Data) THEN SET_Value := FALSE; END_IF // Here we should be ok, just set up the _DataType structure, and copy store the data IF SET_Value THEN THIS^._Descr.TypeClass := anyValue.TypeClass; // The typeclass is already filtered THIS^._Descr.diSize := diSize; // Set the (adjusted) size THIS^._Descr.pValue := ADR(_Data); // This will not change, just to be sure {IF defined (pou:SysMem.SysMemCpy)} SysMem.SysMemCpy(_DataType.pValue, anyValue.pValue, TO_UDINT(anyValue.diSize)); {ELSE} // An ugly replacement MemCpy FOR I:=0 TO diSize - 1 DO _Descr.pValue[I] := anyValue.pValue[i]; END_FOR {END_IF} // Otherwise, in case of failure maybe better set an empty value (overwrite the former data descriptor) ELSE THIS^._Descr.TypeClass := TYPE_CLASS.TYPE_NONE; THIS^._Descr.pValue := ADR(_Data); THIS^._Descr.diSize := 0; END_IF METHOD GET_Value : BOOL VAR_INPUT anyValue : ANY; END_VAR VAR I : DINT; END_VAR // We just have to serve the data, using the __System.AnyType structure received // Roughly we can say: IF anyValue.TypeClass = _Descr.TypeClass AND anyValue.pValue <> 0 // This should not be possible, already taken care of by Codesys (?) THEN {IF defined (pou:SysMem.SysMemCpy)} SysMem.SysMemCpy(anyValue.pValue, _DataType.pValue, TO_UDINT(MIN(anyValue.diSize, _Descr.diSize))); {ELSE} // An ugly replacement MemCpy FOR I:=0 TO MIN(anyValue.diSize -1, _Descr.diSize - 1) DO anyValue.pValue[I] := _Descr.pValue[I]; END_FOR {END_IF} // Just to make sure, that our string is terminated... IF anyValue.TypeClass = TYPE_CLASS.TYPE_STRING THEN anyValue.pValue[anyValue.diSize -1] := 0; END_IF GET_Value := TRUE; RETURN; END_IF // ... But can play more CASE anyValue.TypeClass OF TYPE_CLASS.TYPE_WSTRING : ; // Could do conversion TYPE_CLASS.TYPE_XSTRING : ; // Wow, I have to figure this out TYPE_CLASS.TYPE_PARAMS : ; // BTW, what is this, how to use? TYPE_CLASS.TYPE_ANYNUM : ; // ... END_CASE Be careful it was not tested. I'm sure can be done better, please feel free to comment 3. If you really want to do entries with variable size In a standard environment, it would be similar to the previous, except you dont have the container variable _Data, just use a pointer, practically _Descr.pValue At Initialize (SET_Value), you have to allocate the memory, would be easy with SysMem.SysMemAlloc - nowadays with SysMem.SysMemAllocData -, and you make sure to release it after use with SysMem.SysMemFreeData... SysMemAlloc was already hidden. The problem with this, that sooner or later your application will totally fragment the dynamic memory, and fail... So should look for some form of dynMaybe MemUtils.MemoryManager (I am not sure what is the status and the future of it). 4. You will end up by a LogEntry Factory ... 5. You could still have a look at this IEC Snippets BTW, Standard Codesys Logger is not a bad choice either. If you are really interested, I share some more code / library.
Last updated: 2025-03-09
Post by drbuzz on Communication Error (#0) for IFM controller
CODESYS Forge
talk
(Post)
Hi Folks, Every time I use an IFM controller I always seem to run into a problem connecting to it. I get the Communications Error (#0). So I thought I would share some tips and tricks. Once the CANfox Cable (EC2112) cable driver is installed, you can use the yellow app in the sys tray to blink the lights on the cable. Confirm the cable works in the IFM maintenance software by connecting to the controller and reading the information on it. Make sure to download an OS into the controller (the light will go from a fast blink to solid green). In Codesys V2.3, the communication settings for the CR0401 is 250kBaud by default and Node ID 127. What got me, was I needed to reboot the computer after the cable driver install. Also if your application has canbus settings in it which are changed from default, after the controller is power cycled, the new Node ID and Baud will be in effect. I made a handy guide because too much time has been wasted on this. Programming IFM CR0401 Serial/Can Programming Cable ⢠Connect IFM EC2112 CanFox programming cable with connector adapter. ⢠Make sure cable is linked to VM (if using VM). ⢠Install drivers for cable if not installed. o Download from IFM EC2112 site. https://www.ifm.com/ca/en/product/EC2112 ⢠Once Installed, reboot computer. ⢠In system tray, there should be a yellow icon that you can open and check on programming cable. Select the cable in the list and flash the lights to confirm it is working. Maintenance Software ⢠Install IFM Maintenance Tool Software. o Download from IFM Site. https://www.ifm.com/ca/en/download/eco100_MaintenanceTool ⢠Open IFM Maintenance software ⢠Select Basic System ⢠Select CAN cable ⢠It will tell you if you donât have a cable connected. ⢠Use Wizard if needed. ⢠Read Channel Parameter on the Settings page, or get Identity in the System Information > Identity. ⢠Default Node is 127 on a new unit. Baud is 250kBaud (bits/sec) ⢠Controller information should populate. ⢠Controller green light should be blinking at 5hz (meaning OK but no OS, just bootloader). ⢠Click Software > Load. ⢠Open the OS file. Should match Codesys version selection (for CR0401 this is version 3). o Download OS file from IFM Website. https://www.ifm.com/ca/en/product/CR0401 o It is located at the top of the download under âsoftware for CR0401â. o Select the file and load it⌠this will take a minute. ⢠Once completed the unit should now have a solid green light o Solid green means the controller has an OS but no application is running. Codesys V2.3 Application ⢠Codesys needs to be downloaded and installed from the IFM website as it has the IFM libraries and license to use the software. o Download from the IFM CR0401 page. o https://www.ifm.com/ca/en/product/CR0401 ⢠Create new application with the correct IFM controller or Open Codesys application. ⢠Keep in mind that the PLC Configuration on the Resources tab can be changed for the CAN communication interface⌠so changes to node and baud will take effect after the first download and reboot of the controller. ⢠Go to âOnlineâ in the top menu and change âCommunication Parametersâ o The Local dropdown shows the last configuration used. All other interfaces will show below it and need to be updated when changed or used. o Confirm Node ID is 127 for the first download. ď§ The NodeID will change to whatever the program has after (in my case 125). ď§ Node Send Offset should be default at 1536 ď§ Node Recv Offset should be default at 1408 ď§ Can bus Baudrate should be 250 kbaud. ď§ Yes to Motorola Byte Order ď§ Block Transfer should be false and note used (60 is default setting). ď§ Can Card Driver should match the systray item which is Sie_USB. ⢠If the system populated the other one, just update and relay the communication parameters. The software will usually bring up the available cable and driver. ⢠Go to âOnlineâ and Login to download. o Press Yes to Download Application. I hope this helps!
Last updated: 2025-03-21
Post by sushela on Temu Promo Code [acq615756] for Existing Customers 2024
CODESYS Forge
talk
(Post)
Temu Promo Code acq615756 for Existing Customers in 2024 Temu is known for offering unbeatable deals across a wide range of products. In 2024, existing customers can enjoy even greater savings with the Temu promo code acq615756. Whether you're a loyal shopper or returning for a second purchase, this code opens up exciting opportunities for discounts. In this article, weâll dive into everything you need to know about using Temu promo code acq615756 as an existing customer. What Is the Temu Promo Code acq615756 for Existing Customers? Promo code acq615756 is one of Temuâs top offers for 2024, designed to reward loyal customers who have previously made purchases. Unlike many promotions that only target first-time buyers, this code provides a discount on purchases made by existing customers. It's an ideal way to enjoy continued savings on Temuâs vast collection of products. How Much Can Existing Customers Save with Promo Code acq615756? By applying promo code acq615756, existing customers can unlock significant discounts, often ranging from 30% to 50% off on select products. This generous offer allows regular shoppers to continue enjoying budget-friendly prices without needing to create new accounts or qualify as first-time buyers. How to Use Temu Promo Code acq615756 as an Existing Customer To use the acq615756 promo code, follow these simple steps: Log in to your existing Temu account. Browse through the products you want to buy and add them to your cart. At checkout, locate the âPromo Codeâ box and enter acq615756. Hit apply, and the discount will be instantly applied to your order. Whether youâre purchasing electronics, fashion, home goods, or beauty products, this code ensures you're saving more on every order. Eligibility Requirements for Using Promo Code acq615756 Existing customers must meet certain criteria to be eligible for using this promo code. These requirements include: Having made at least one previous purchase on Temu. The promo code may have minimum order requirements, depending on the promotion terms for 2024. The code may only be valid for certain categories or products, so check the terms before finalizing your purchase. 5. Best Practices for Maximizing Savings as an Existing Customer Hereâs how you can make the most of Temu promo code acq615756: Combine with other offers: Temu often allows promo codes to be used alongside other ongoing promotions, such as seasonal sales or flash discounts. Subscribe to Temuâs newsletter: Keep an eye on Temuâs email updates for announcements about limited-time offers and additional discounts for existing customers. Shop during major sale events: Applying the promo code during Black Friday, Cyber Monday, or Holiday Sales can maximize your savings on top of already discounted prices. 6. Are There Any Restrictions on Temu Promo Code acq615756? While promo code acq615756 offers substantial savings, it may come with a few restrictions: Expiration date: Check the validity of the code as some offers are time-sensitive. One-time use: The promo code may be redeemable once per customer, so plan your purchases accordingly. Limited categories: In some cases, the discount may not apply to specific product categories such as electronics or luxury items. 7. Frequently Asked Questions (FAQs) About Temu Promo Code acq615756 for Existing Customers Q1: Can I combine Temu promo code acq615756 with other discounts? Yes, you can often combine this promo code with other ongoing sales and offers. However, always check the terms and conditions to confirm if stacking is allowed. Q2: Is Temu promo code acq615756 available for existing customers only? Yes, this code is specifically tailored for existing Temu customers. If you're a first-time buyer, you may need to look for other codes. Q3: Does Temu promo code acq615756 have a minimum purchase requirement? In some cases, this promo code may require a minimum order amount, typically around $50 or more. Be sure to review the specific promotion details when applying the code. Q4: How long is the promo code acq615756 valid? The validity of Temu promo code acq615756 may vary. Itâs advisable to use it as soon as possible to avoid missing out on the discount. Q5: What if the promo code doesnât work at checkout? If the code doesnât apply, double-check that you're logged into your existing customer account and that youâve met the eligibility criteria such as product selection or minimum order requirements. Temuâs 2024 Promo Strategy for Existing Customers Temu recognizes the importance of retaining loyal customers, and offering exclusive promo codes like acq615756 is part of their broader 2024 strategy. Existing customers who regularly shop on the platform are rewarded with ongoing deals, ensuring they receive value for their repeat business. This customer-centric approach helps Temu maintain its competitive edge in the e-commerce space. Why Existing Customers Should Take Advantage of Promo Code acq615756 If youâve previously shopped on Temu, now is the perfect time to take advantage of the acq615756 promo code. Not only does it offer you substantial savings, but it also rewards you for your loyalty. With this code, thereâs no need to wait for major sales; you can enjoy deep discounts on your favorite products all year long. Conclusion Temu promo code acq615756 for existing customers in 2024 is an unbeatable way to save on repeat purchases. Whether you're upgrading your tech gadgets, revamping your wardrobe, or sprucing up your home, this code helps you stretch your budget further. Log in to your Temu account today, apply acq615756, and enjoy exclusive discounts tailored just for you. Don't miss out on this opportunityâstart saving with Temu now!
Last updated: 2024-10-26
Post by egau on Hard shutdown: no code on device after power on
CODESYS Forge
talk
(Post)
Hi, We have a machine running Codesys on a Windows IPC (CODESYS Control Win v3 - x64). When we hard shutdown the machine, the code on the PLC sometimes becomes "corrupted" after a power on (When trying to login to the PLC, we get the message "The application 'Application' does not exist on device."). I've noticed these errors in the logs, but I'm not sure what to make of them. We are not using any RETAIN variables in our code, although I'm not sure about referenced librairies. (we are using the persistence manager). I'm pretty sure that not doing a graceful shutdown is the root cause of this. This being said, what is the proper way of doing a graceful shutdown? Is putting the Codesys application in "stop" sufficient? I know how to implement this, so if it works then it would be a quick fix. However, I think we need to add a UPS, which would detect power loss and inform the PLC that it needs to initiate its shutdown, and then the PLC would shutdown gracefully. Any help with this will be greatly appreciated :)
Last updated: 2024-10-03
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 tama00 on GPIOs not running with Raspberry Pi 4 (and SPI connection)
CODESYS Forge
talk
(Post)
Hello everyone, I have a working SPI connection (with transferExt) between a Raspberry master with Codesys and an ESP32 slave. I would also like to use a few GPIO pins. Is there a problem with using SPI AND GPIOs? Environment: Raspberry Pi 4+ with Raspian from Oct 23 Codesys V3.4 SP19 Patch 5 with Runtime Version 4.10.0.0 Device: GPIOs B+/Pi2 My problem: The status is displayed as âGPIOs : not runningâ. And also during mapping the message âThe bus is not running. The values shown are perhaps not actualâ. However, the variable changes that I make in my program are displayed under âCurrent Valueâ. In the Logic Analyzer, the pin toggles during transmission with small intervals of +-4us (seems to be a cyclical disorder, but I don't know where exactly it could be coming from). This applies to pins that I actually use (output) but also to the other GPIOs (not used). With GPIO 4, the line remains permanently high. Attached is a screenshot from the Logic Analyzer. Channel 1,3,5 were GPIO pin 26, 22, 17 Would be very grateful for help. Best regards
Last updated: 2024-05-06
Post by caprez95 on Trace Restart Visuelement
CODESYS Forge
talk
(Post)
Hallo zusammen. Ich habe schon länger mit dem Problem zu kämpfen, dass ich einen Trend (Visuelement) nicht resetten (neustarten) kann. Ich habe es jetzt mit dem Beispiel hinbekommen, die Trace-Aufzeichnung ßber die CmpTraceMgr Bibliothek zu steuern. Aber wie bekomme ich diese Trace-Aufzeichnung in ein Visuelement? Der Code sieht wie folgt aus: // Configure trace IF xInit THEN // Create a trace packet PacketConfig.pszName := ADR('IECTraceConfiguration.Trace1'); // Name of trace PacketConfig.pszApplicationName := ADR('IECTraceConfiguration'); // Name of the application PacketConfig.pszIecTaskName := ADR('Task'); // Name of the task PacketConfig.pszComment := ADR('Demo packet'); PacketConfig.ulEveryNCycles := 1; PacketConfig.ulBufferEntries := 1000; PacketConfig.ulFlags := TRACE_PACKET_FLAGS.TRACE_PACKET_FLAGS_TIMESTAMP_MS AND TRACE_PACKET_FLAGS.TRACE_PACKET_FLAGS_AUTOSTART; IF (NOT fbTraceManager.CreatePacket(PacketConfig := PacketConfig, hPacket=>hPacket1)) THEN xError := TRUE; END_IF // Create a trace record RecordConfig.pszVariable := ADR('iSignal'); // This is the name of variable to record RecordConfig.tcClass := INT_TO_UDINT(TypeClass.TYPE_INT); // Type of the recording variable RecordConfig.ulSize := SIZEOF(iSignal); // Size of the recording variable pApp := AppFindApplicationByName('IECTraceConfiguration', 0); AppGetAreaOffsetByAddress(pApp, ADR(iSignal), ADR(RecordConfig.tvaAddress.taAddress.Area.usArea), ADR(RecordConfig.tvaAddress.taAddress.Area.ulOffset)); // Get and set area offsets RecordConfig.tvaAddress.ulAddressFlags := TRACE_VAR_ADDRESS_FLAGS_IEC OR TRACE_VAR_ADDRESS_FLAGS_AREA_OFFSET; RecordConfig.ulGraphColor := 16#FF00FF00; // green RecordConfig.ulGraphType := 1; // Line with points IF (NOT fbTraceManager.AddRecord(RecordConfig := RecordConfig, hPacket := hPacket1, hRecord => hRecord1)) THEN xError := TRUE; END_IF xInit := FALSE; END_IF // Starts the recording IF xStart THEN IF (NOT fbTraceManager.StartPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xStart := FALSE; END_IF // Stop the recording IF xStop THEN IF (NOT fbTraceManager.StopPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xStop := FALSE; END_IF // Reset the recording IF xReset THEN IF (NOT fbTraceManager.ResetPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xReset := FALSE; END_IF
Last updated: 2024-06-04
Post by caprez95 on Trace Restart Visuelement
CODESYS Forge
talk
(Post)
Hello everyone. I've been struggling with the problem for a long time that I can't reset (restart) a trend (visual element). With the example I have now managed to control the trace recording via the CmpTraceMgr library. But how do I get this trace recording into a visual element? The code looks like this: // Configure trace IF xInit THEN // Create a trace packet PacketConfig.pszName := ADR('IECTraceConfiguration.Trace1'); // Name of trace PacketConfig.pszApplicationName := ADR('IECTraceConfiguration'); // Name of the application PacketConfig.pszIecTaskName := ADR('Task'); // Name of the task PacketConfig.pszComment := ADR('Demo packet'); PacketConfig.ulEveryNCycles := 1; PacketConfig.ulBufferEntries := 1000; PacketConfig.ulFlags := TRACE_PACKET_FLAGS.TRACE_PACKET_FLAGS_TIMESTAMP_MS AND TRACE_PACKET_FLAGS.TRACE_PACKET_FLAGS_AUTOSTART; IF (NOT fbTraceManager.CreatePacket(PacketConfig := PacketConfig, hPacket=>hPacket1)) THEN xError := TRUE; END_IF // Create a trace record RecordConfig.pszVariable := ADR('iSignal'); // This is the name of variable to record RecordConfig.tcClass := INT_TO_UDINT(TypeClass.TYPE_INT); // Type of the recording variable RecordConfig.ulSize := SIZEOF(iSignal); // Size of the recording variable pApp := AppFindApplicationByName('IECTraceConfiguration', 0); AppGetAreaOffsetByAddress(pApp, ADR(iSignal), ADR(RecordConfig.tvaAddress.taAddress.Area.usArea), ADR(RecordConfig.tvaAddress.taAddress.Area.ulOffset)); // Get and set area offsets RecordConfig.tvaAddress.ulAddressFlags := TRACE_VAR_ADDRESS_FLAGS_IEC OR TRACE_VAR_ADDRESS_FLAGS_AREA_OFFSET; RecordConfig.ulGraphColor := 16#FF00FF00; // green RecordConfig.ulGraphType := 1; // Line with points IF (NOT fbTraceManager.AddRecord(RecordConfig := RecordConfig, hPacket := hPacket1, hRecord => hRecord1)) THEN xError := TRUE; END_IF xInit := FALSE; END_IF // Starts the recording IF xStart THEN IF (NOT fbTraceManager.StartPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xStart := FALSE; END_IF // Stop the recording IF xStop THEN IF (NOT fbTraceManager.StopPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xStop := FALSE; END_IF // Reset the recording IF xReset THEN IF (NOT fbTraceManager.ResetPacket(hPacket := hPacket1)) THEN xError := TRUE; END_IF xReset := FALSE; END_IF
Last updated: 2024-06-04
Post by elektron785 on GPIO mit Codesys Virtual Control for Linux ARM64 SL
CODESYS Forge
talk
(Post)
Hallo zusammen, ich mĂśchte an einem Entwicklungsboard auf dem der i.MX 8M Plus von NXP aufgesteckt ist die vier zur VerfĂźgung gestellten GPIOs als Ausgänge verwenden. Ich habe mir dazu die Readme-Datei des GPIO-Beispiels von "C:\Program Files\CODESYS 3.5.20.40\CODESYS\CODESYS Control SL Extension Package\4.14.0.0\Examples\GPIO" angeschaut Die Ăbersicht der verfĂźgbaren GPIOs sieht folgendermaĂen aus - wobei ich das auf die reduziert habe, die fĂźr mich von Interesse sind: gpiochip0: GPIOs 0-31, parent: platform/30200000.gpio, 30200000.gpio: gpio-0 (SODIMM206 ) gpio-1 (SODIMM208 ) gpio-2 ( ) gpio-3 ( ) gpio-4 ( |sd-vsel ) out hi gpio-5 (SODIMM210 ) gpio-6 (SODIMM212 ) gpio-7 (SODIMM216 ) gpio-8 (SODIMM218 ) gpio-9 ( ) gpio-10 ( ) gpio-11 (SODIMM16 ) gpio-12 (SODIMM155 |regulator-usb1-vbus ) out lo gpio-13 (SODIMM157 ) gpio-14 (SODIMM185 |regulator-usb2-vbus ) out hi gpio-15 (SODIMM91 )** FĂźge ich nun das GPIO (1 Bit)-Gerät in meinem Codesys-Programm hinzu funktioniert der Bus solange bis ich die Richtung in den GPIO-Parametern von "not used" auf "Output" stelle (siehe Bild gpio_parameter). Dann funktioniert nach Download der Bus nicht mehr. Gibt es noch eine andere MĂśglichkeit das zu steuern oder muss ich noch Einstellungen tätigen? FĂźr die Zeile mit dem echo (export/unexport) aus dem Beispiel fehlen mir trotz sudo die Zugriffsrechte. "The Kernel Linux has deprecated GPIO user space SysFS. However, the kernel config CONFIGGPIOSYSFS is still enabled on Toradex's BSP to support customers using it in their legacy applications. You can check the configuration by running zcat /proc/config.gz | grep CONFIGGPIOSYSFS. For GPIO access from userspace, the new char device API, also known as libgpiod, must be used." Dies steht in der Verwendung der GPIOs - eine AusfĂźhrung des zcat-Kommandos liefert ein =y zurĂźck.
Last updated: 2025-03-17
Post by gustavocsw on MQTT memory leak problem
CODESYS Forge
talk
(Post)
Hello everyone, I'm using the IoT Library to implement the MQTT communication with my local broker server in order to publish and subscribe at specifics topics to share and consume information about my application. But, it seems that are occurring some memory leak problem in a "high" frequency (more than 10 Hz) subscribe process. I follow the same method as in IoT Lib exemples, and at first looks perfect but my PLC was rebooting frequently and when I check its memory usage that was increasing as fast as the subscribe massage was sent. I'm using a WEG PLC410 and a WEG PLC500, and this error occurred in both of them (including in CODESYS Control Win x64). The application sends to the system a message JSON with the float payload Ex. {"data" : 0.8500}, but this happens with a INT, or BOL as well. I use the follow code in my application to find the value: //FindFirstValueByKey VARs PROGRAM JSON_VELO VAR //------Setting the JSON Subscriber to Set the Relay Value jsonDataVelo : JSON.JSONData; jsonByteArrayReaderVelo : JSON.JSONByteArrayReader; xST1okVelo : BOOL; FindFirstValueByKeyVelo : JSON.FindFirstValueByKey; jsonElementVelo : JSON.JSONElement; xDoneReaderVelo : BOOL; xDoneFindVelo : BOOL; //STRING and WSTRING for Subscribe the massage sPayloadJsonVelo : STRING := 'opa'; psPayloadJsonVelo : POINTER TO BYTE := ADR(sPayloadJsonVelo); //wsPayloadJsonRelaySet : WSTRING := "opa"; wsPayloadJsonVelo : WSTRING := STRING_TO_WSTRING('opa'); pwsPayloadJsonVelo : POINTER TO WORD := ADR(wsPayloadJsonVelo); lrVelo : LREAL; xKeepAliveVelo : BOOL; xSetVelo : BOOL; RSSet : RS; LIMPAR : STRING; //Find the msg end sFindVelo : STRING := '}'; psFindVelo : POINTER TO STRING := ADR(sFindVelo); iLenVelo : INT; iSizeVelo : INT := 12; udiContMsg : UDINT; END_VAR // FindFirstValueByKey CODE // Relay Set configuration xSetVelo := MQTT_SUBSCRIBER.RSVelo.Q1; IF xSetVelo THEN xKeepAliveVelo := TRUE; END_IF IF xKeepAliveVelo THEN udiContMsg := udiContMsg + 1; iLenVelo := TO_INT(StrLenA(psPayloadJsonVelo)); iSizeVelo := iLenVelo - TO_INT(MQTT_SUBSCRIBER.udiPayloadSizeVelo); StrDeleteA(psPayloadJsonVelo,iSizeVelo,iLenVelo); wsPayloadJsonVelo := STRING_TO_WSTRING(sPayloadJsonVelo); pwsPayloadJsonVelo := ADR(wsPayloadJsonVelo); //MQTT.ConvertUTF8toUTF16(sourceStart:= ADR(sPayloadJsonVelo), targetStart:= ADR(wsPayloadJsonVelo), dwTargetBufferSize:= TAM, bStrictConversion:= 1); //Reset jsonByteArrayReader jsonByteArrayReaderVelo ( xExecute := TRUE, pwData := pwsPayloadJsonVelo, jsonData := jsonDataVelo, xDone => xDoneReaderVelo ); FindFirstValueByKeyVelo( xExecute := xDoneReaderVelo, wsKey := "data", diStartIndex:= 0, jsonData := jsonDataVelo, jsonElement => jsonElementVelo, xDone => xDoneFindVelo ); IF xDoneFindVelo THEN lrVelo := jsonElementVelo.value.lrValue; //Reset jsonByteArrayReader jsonByteArrayReaderVelo ( xExecute := FALSE, pwData := pwsPayloadJsonVelo, jsonData := jsonDataVelo, xDone => xDoneReaderVelo ); FindFirstValueByKeyVelo( xExecute := FALSE, wsKey := "data", diStartIndex:= 1, jsonData := jsonDataVelo, jsonElement => jsonElementVelo, xDone => xDoneFindVelo ); xKeepAliveVelo := FALSE; GVL.xSetVeloRead := TRUE; END_IF END_IF And this to subscribe at the topic: //SUBSCRIBE VAR: //----------------- Subscribe Velocity ----------------------- MQTTSubscribeVelo : MQTT.MQTTSubscribe;//Variable MQTTSubscriber block -X - function-X wsTopicSubscribeVelo : WSTRING(1024) := "CORE/odometry/GET/data/simp"; // Topic to publish a message sSubscribeMassageVelo : STRING; udiPayloadSizeVelo : UDINT; xSDoneVelo : BOOL; xSErrorVelo : BOOL; xReceiveVelo : BOOL; eSTypeVelo : MQTT.MQTT_ERROR; eSMQTTErrorVelo : MQTT.MQTT_ERROR; RSVelo : RS; udiCont : UDINT; //SUBSCRIBE CODE: MQTTSubscribeVelo( xEnable:= MQTT_CLIENT.xConnection_Broker AND NOT xSErrorVelo AND NOT JSON_VELO.xKeepAliveVelo, pbPayload:= JSON_VELO.psPayloadJsonVelo, udiMaxPayloadSize:= SIZEOF(JSON_VELO.sPayloadJsonVelo), udiPayloadSize => udiPayloadSizeVelo, mqttClient:= MQTT_CLIENT.ClientMQTT, wsTopicFilter:=wsTopicSubscribeVelo, xDone => xSDoneVelo, xError=> xSErrorVelo, xReceived => xReceiveVelo, eMQTTError=> eSMQTTErrorVelo ); RSVelo(SET := xReceiveVelo, RESET1 := JSON_VELO.xKeepAliveVelo);
Last updated: 2024-09-09
Post by fefefede on Error C0521 - unknow compiler
CODESYS Forge
talk
(Post)
Hello and thanks for reply. I not have "Libray Manager" on "Update Device". I not try to open project but i open Codesys and then create a new project and when try to generate code i have the error :/ I notiche a strnge situation. I have two different software on my pc: CODESYS V3.5 SP15 Patch 4 (with this my new program not work but can open and work with some course example); CODESYS V3.5 SP19 Patch 2 (with this my custom program work) Wich version i must be choose? Why i have two different version? Thanks
Last updated: 2023-09-02
Post by ggarcia94 on CANOPEN SDO configuration
CODESYS Forge
talk
(Post)
Hello, I´m connected to two drives via CANOPEN. The connection seems to be ok. However, I´m not able to get the PDOs to work even tho they are configured as in the manual of the drives. Looking at the SDOs I´ve seen that for each PDO there is a "Disable PDO" SDO that does not exist in the manual or in the EDS file of the drives. This "Disable PDO" signal has the same Index and Subindex as another SDO used to set and enable the COB-ID of the PDO. I´m assuming this is normal but why is Codesys creating a "Disable PDO" SDO for each PDO and could that be the reason the PDOs are not working?
Last updated: 2023-09-25
Post by macros8 on Alarm Management - latched variable represented as Text list
CODESYS Forge
talk
(Post)
Hi, I haven´t noticed you put the comment here. I thing it´s a bit different. What I want is to have detail errors of technology in data type e.g. INT. This variable I would latch to the corresponding error msg but I would like to get it convert to text from the text list and not keep it in INT form. Example. Main error Valve Error: SubErrors 1 - Both sensors 2 - Not retracted in time 3 - Not pulled out in time In HMI Main error + latch SubErrors => "Valve Error: Both sensors" The benefit is that text lists are part of translation and can be easily manipulated. I know I can create whole string msg in PLC but then, it lose advantage of Alarm management. Thanks. M.
Last updated: 2023-11-07
To search for an exact phrase, put it in quotes. Example: "getting started docs"
To exclude a word or phrase, put a dash in front of it. Example: docs -help
To search on specific fields, use these field names instead of a general text search. You can group with AND or OR.