Post by snhatton on Saving variable values on power cycle (RevPi Connect)
CODESYS Forge
talk
(Post)
Have you tried using the persistence manager which uses the file system of the controller to store persistent variables?
Last updated: 2023-12-04
Post by andrebrandt on how to extract the name of an FB to a variable
CODESYS Forge
talk
(Post)
Hi mr. Do you have the script? Cause the link is down.
Last updated: 2024-09-27
Post by andrebrandt on how to extract the name of an FB to a variable
CODESYS Forge
talk
(Post)
Hi mr. Do you have the script? Cause the link is down.
Last updated: 2024-09-27
Post by andrebrandt on how to extract the name of an FB to a variable
CODESYS Forge
talk
(Post)
Hi mr. Do you have the script? Cause the link is down.
Last updated: 2024-09-27
Post by timvh on how to extract the name of an FB to a variable
CODESYS Forge
talk
(Post)
https://content.helpme-codesys.com/en/CODESYS%20Development%20System/_cds_pragma_attribute_instance_path.html
Last updated: 2024-10-01
Post by sturmghost on Initialization of visualization variables and cyclic code execution
CODESYS Forge
talk
(Post)
I'm looking for a smart and short way to implement initialization of visualization variables depending on the visualization input. For an easy example consider a rectangle which rests at XPos := 0 when the input state is false and at XPos := 50 when the input state is true. My visualization variables look like this: VAR_IN_OUT State : BOOL; END_VAR VAR XPos : INT; END_VAR I put this rectangle via a visualization frame element into another visualization and link a frame reference variable with the state to it. If the variable is true, the rectangle should rest at XPos := 50 and false at XPos := 0 at visualization init but how should I assign the 50 or 0 to the internal visualization variable XPos? I would need some init-methode for the visualization but I dont want a global init-method for such tasks. I want to do it inside of the visualization element but I can't see any solution for this? It would be good to be able to define ST-code within the visualization element which runs cyclic at each VISU_TASK task-cycle then I could just check the input state and change the XPos accordingly. Does someone have a solution?
Last updated: 2023-10-01
Post by phoward131 on Text List Fallback Value
CODESYS Forge
talk
(Post)
I am relatively new to Codesys and I'm trying to develop an HMI that displays what mode a particular device is in based on an integer value. I am currently using dynamic texts with a text list which works fine but I am looking for a way to display a particular string (ie 'Unknown') when the index doesn't match any of of the indices in the text list. I can enter 'Unknown' in the text property of the text field element which works as expected but it displays the single quotes on the visualization. How can I escape these quotes to simply display the word Unknown? Thanks!
Last updated: 2024-03-22
Post by programmierer on Implementing UDP Communication
CODESYS Forge
talk
(Post)
Hello everyone, I hope you can help me with my problem. I am new to programming and am currently working with a WAGO controller in our lab, which controls a heat pump. My goal is to send the electrical power of the heat pump (Pel_WP) via a UDP connection to a specific IP address. I am using Codesys version 2.3 and following the guide I found here: https://forge.codesys.com/forum/de/396/genmed-Konfiguration%20der%20UDP%20Kommunikation%20Cosesys%20S7.pdf. I have adapted the guide to suit my needs. The data sending works since I can force the reception value Pel_WP and the data is sent accordingly. However, I am having trouble with the receiving part. The reception value is not being correctly received, and the diSocket variable shows -1. The connection between the heat pump and the WAGO controller seems to be set up correctly, as the heat pump is listed under the communication parameters with the correct IP address. I have also attached images to provide a better view of the setup. I would greatly appreciate any support or suggestions for a solution. Thank you in advance!
Last updated: 2024-08-02
Post by stiller on OPC UA RPI 4.8.0.0 Status Code / "out of range"
CODESYS Forge
talk
(Post)
Hello, I have an OPC-UA server with an information model. For many values, there is a defined range (e.g., 0 to 100). If a client enters a value outside this range (e.g., 120), the StatusCode should change to Bad. How can I accomplish this? Any help is appreciated! Thank you in advance. Best regards, Christian Stiller
Last updated: 2024-07-10
Post by mmpl on Array to String
CODESYS Forge
talk
(Post)
I would like to create one large JSON string from an array of objects, where each object contains a value. My current approach involves using a for loop and string concatenation, but with 20,000 elements in the array, this method takes almost 7 seconds and negatively affects the PLC scan time. Is there a more efficient way to accomplish this?
Last updated: 2024-07-18
Post by mmpl on Array to String
CODESYS Forge
talk
(Post)
I would like to create one large JSON string from an array of objects, where each object contains a value. My current approach involves using a for loop and string concatenation, but with 20,000 elements in the array, this method takes almost 7 seconds and negatively affects the PLC scan time. Is there a more efficient way to accomplish this?
Last updated: 2024-07-18
Post by kevinm on Programmatically change Tappet on a cam
CODESYS Forge
talk
(Post)
I am considering using a SoftMotion cam and tappets to activate functions on a machine - for example, triggering a pneumatic valve. I need the ability to change the actuation point (tappet "X" location) from the HMI during machine commissioning. Is there a way to change the "X" value of a tappet programmatically?
Last updated: 2025-04-01
Post by rkohser on Python Script for Finding "Last saved with" Value
CODESYS Forge
talk
(Post)
Hi jkilburn, I have the exact same issue and thought I would search a solution on this forum. I see you did not get any answer, did you find a solution on how to extract the last saved version of codesys from the project file ? Roland
Last updated: 2024-01-29
Post by koppit on SysComRead Timeout Parameter
CODESYS Forge
talk
(Post)
Im using SysCom ver. 3.5.17.0 and seem to have the same issue on a Raspberry Pi. It's not waiting for the requested number of bytes, no matter if "ulTimeout := SYS_INFINITE" or any other value. The only solution I have found is to stall the program to allow the serial port to recieve the data.
Last updated: 2024-06-26
Post by pietrobalint on Retain / Persistent Variables in Codesys for Raspberry Pi
CODESYS Forge
talk
(Post)
Hi micik, I am not sure I am using well the code, because I checked the directory and there is no retains.ret file. Now I deleted the code from my project and the values are still works as persistant variables after ssh reboot it seems to me they retain as their previous value. So I am a bit confused, maybe 4.12.0.0 Raspberry Pi SL solved the persitent variable problem...
Last updated: 2024-08-20
Post by docker on Webvisu client connection monitoring
CODESYS Forge
talk
(Post)
Thanks for the reply, i am using codesys SP16 patch 5 as this is the version that is compatible with my IFM controller. i am accessing the lastusage variable from the VisuStructClientData structure through a pointer. when i log in it lists the time since last log in but does not continually count, it remains a static value which isnt useful. hopefully you can help. Thankyou
Last updated: 2024-08-26
Size of the abyPoolMemory input when creating an fb for the purpose of fb creation (fb extends Factorybase from the fbFactory Library)
CODESYS Forge
talk
(Thread)
Size of the abyPoolMemory input when creating an fb for the purpose of fb creation (fb extends Factorybase from the fbFactory Library)
Last updated: 2023-01-15
Post by snhatton on Retain memory change to ZERO
CODESYS Forge
talk
(Post)
I think more information is needed to help solve the issue. Can you list the exact steps to reproduce the issue? What version of Codesys are you using? Did you add a persistentVars object to your project? I would recommend browsing all instances of the retain variable to see all possible writes to the variable in question.
Last updated: 2023-09-18
Post by williamjmak1 on Current Visu name without Current Visu Variable
CODESYS Forge
talk
(Post)
Hello everyone, I was just wondering if anybody knows if there's a way to pull the string name of the current visualization without using the current visu variable. I'm working on a project where we don't want web clients to change the current visualization on the HMI of the machine. Thanks!!
Last updated: 2025-08-07
Post by mos89p on how to use UseDataExpanding() in datasource
CODESYS Forge
talk
(Post)
Hi I need to update by software some structures in my datasource, i found this example: https://content.helpme-codesys.com/en/CODESYS%20Communication/_cds_update_data_interface.html it seems that because i use complex variable structure i need to use UseDataExpanding() instead of use data, the question is how to get an instance of IDatasourcesMgr3 i have the global variable g_Datasources is instantiated automatically
Last updated: 2024-06-18
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
RAMP_REAL FB is retaining my output value when i try to re use the FB
CODESYS Forge
talk
(Thread)
RAMP_REAL FB is retaining my output value when i try to re use the FB
Last updated: 2024-07-29
Post by kims2024 on Timer change online
CODESYS Forge
talk
(Post)
with codesys v2.3, I want to extend a timer value online. I have tried the value does not go !
Last updated: 2024-08-24
How to check whether one input is assigned a value?
CODESYS Forge
talk
(Thread)
How to check whether one input is assigned a value?
Last updated: 2008-01-15
Is it possible to send a real value close to 0 through modbus?
CODESYS Forge
talk
(Thread)
Is it possible to send a real value close to 0 through modbus?
Last updated: 2023-02-25
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.