GPIO After the sample project is booted, DI works normally but DO is not output.
CODESYS Forge
talk
(Thread)
GPIO After the sample project is booted, DI works normally but DO is not output.
Last updated: 2017-03-27
[HELP] Connecting Codesys v2.3 program with a Codesys HMI SL project in V3
CODESYS Forge
talk
(Thread)
[HELP] Connecting Codesys v2.3 program with a Codesys HMI SL project in V3
Last updated: 2021-10-18
pruwetbe: my personal project, replace my existing home automation by a codesys on Rpi
CODESYS Forge
talk
(Thread)
pruwetbe: my personal project, replace my existing home automation by a codesys on Rpi
Last updated: 2023-08-08
Creating first-time Win S3 project does not create Device window
CODESYS Forge
talk
(Thread)
Creating first-time Win S3 project does not create Device window
Last updated: 2021-01-26
Python script runs fine from within project, but not from command line
CODESYS Forge
talk
(Thread)
Python script runs fine from within project, but not from command line
Last updated: 2021-06-07
Post by rh-cs-234 on Problems with Raspberry Pi - IoDrvGPIO library
CODESYS Forge
talk
(Post)
For me the same thing when opening the project. But the project is easily compiled!
Last updated: 2024-04-06
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 climblinne on Calling OPC UA Methods from UaExpert
CODESYS Forge
talk
(Post)
Hello, I hope someone could help me. I installed the newest Codesys 3.5 SP 20 Patch 1. When loading the demo files from @i-campbell I can upgrade them to the latest version and everthing works on the OPC-UA client side as expected (object "a" is visible, I can use the "ExampleMethod"). Now I * remove the "Information Model", * delete the "OPC_UA_Symbols Objects", * Add "Information Model" again * add "TestRootObjectType" again and "Generate IEC declarations" * and search for mapped instances (to get instance "a" again) Very good still working as expected. Now I delete the OPC_UA_Symbols and add it again referring to the "objecttest" from 16.9.2020. Also I redo the steps from above. The result is now, that I can't see the "a" object in the "Root/Objects" folder. Why ist this and how can I make it running? I think, it could may be a different version of the UA configuration file. I tried to build my own model definition files and got the same problem (but I am really not an expert). When someone has a actual model, which is also running in the actual Codesys I would be very grateful. Or even better, how to make the correct model in e.g. UA Modeler SW (I followed the description https://documentation.unified-automation.com/uamodeler/1.6.0/html/howprojnet_sec.html).
Last updated: 2024-07-01
Post by arnog on Master&Slave Program in 4 Axis CNC Project
CODESYS Forge
talk
(Post)
I am also looking for the right solution. Also saw a virtual axes would be better to steer x1 and x2
Last updated: 2023-10-01
Post by anhkdv on Motion FB Error
CODESYS Forge
talk
(Post)
Hi! I'm a newbie. I'm doing a project for Delta Robot using Codesys and got this error when trying to move in a dynamic coordinate system. This error occurs when I use FB MC_MoveLinearRelative and FB SMC_GroupWait
Last updated: 2023-10-08
Post by captaincookie on increase default string length in queue
CODESYS Forge
talk
(Post)
I solved it by creating a new element of IElement according to the ElementExample (MyElement) in the ElementCollectionsExamples project. The variables in this element can then be defined in any properties as needed.
Last updated: 2023-10-11
Post by fabian on Trace commands via Test Manager
CODESYS Forge
talk
(Post)
Hello Yuridnb, Did you get any further with this project? I'm standing at a similar point and would like to hear from any experiences made so far. :-) Best regards, Fabian
Last updated: 2023-12-05
Post by timvh on CanOpen write issue
CODESYS Forge
talk
(Post)
See: https://content.helpme-codesys.com/en/CODESYS%20Examples/_ex_canopen_canopen.html SDO example: SegmentedAndBlockWriteExample: Writing if an object of any length via SDO (segmented transfer or block transfer) by means of CiA405.SDO_WRITE_DATA This help page also contains a link to a demo project.
Last updated: 2024-07-16
Post by nickelwater on Fix compiler version in SP18+
CODESYS Forge
talk
(Post)
Is is possible to use the compiler "Fix Version" in SP18+? I have noticed that in SP17 and below, the option is available in the compiler options under project settings, but in versions 18+ it is unselectable. The help topic does not provide any information.
Last updated: 2024-07-21
Post by c3po on Wago PLC Disable Device Login
CODESYS Forge
talk
(Post)
is there also a possibility to deactivate the login screen from the Hmi if you transfered a new project? I send the screen as attachment:
Last updated: 2024-10-09
Post by yannickasselin on MQTT QoS 1 & 2
CODESYS Forge
talk
(Post)
Anyone? Please? The Codesys documentation clearly states that QoS 1 & 2 are supported for Publisher and Subscriber. I really need to make this work for an important project. Thank you
Last updated: 2024-10-29
Post by jeroenaero on CodeSys Raspberry pi I2C driver not found
CODESYS Forge
talk
(Post)
i created a new project and did what you said, but still the same problem unfortunately. The ADS1115 is constantly changing from running to not running.
Last updated: 2024-11-08
Post by jeroenaero on CodeSys Raspberry pi I2C driver not found
CODESYS Forge
talk
(Post)
i created a new project and did what you said, but still the same problem unfortunately. The ADS1115 is constantly changing from running to not running.
Last updated: 2024-11-08
Post by jeroenaero on CodeSys Raspberry pi I2C driver not found
CODESYS Forge
talk
(Post)
i created a new project and did what you said, but still the same problem unfortunately. The ADS1115 is constantly changing from running to not running.
Last updated: 2024-11-08
Post by jeroenaero on CodeSys Raspberry pi I2C driver not found
CODESYS Forge
talk
(Post)
i created a new project and did what you said, but still the same problem unfortunately. The ADS1115 is constantly changing from running to not running.
Last updated: 2024-11-08
Post by jeroenaero on CodeSys Raspberry pi I2C driver not found
CODESYS Forge
talk
(Post)
i created a new project and did what you said, but still the same problem unfortunately. The ADS1115 is constantly changing from running to not running.
Last updated: 2024-11-08
Post by jeroenaero on CodeSys Raspberry pi I2C driver not found
CODESYS Forge
talk
(Post)
i created a new project and did what you said, but still the same problem unfortunately. The ADS1115 is constantly changing from running to not running.
Last updated: 2024-11-08
Post by jeroenaero on CodeSys Raspberry pi I2C driver not found
CODESYS Forge
talk
(Post)
i created a new project and did what you said, but still the same problem unfortunately. The ADS1115 is constantly changing from running to not running.
Last updated: 2024-11-08
Post by codesysbeginner on Enable and Disable Project IO programmatically
CODESYS Forge
talk
(Post)
@eschwellinger Somehow this code doens't work for me in Codesys V3.5.19. Is this code supposed to work in simulation mode as well?
Last updated: 2025-03-03
Post by gesc on Unable to compare projects containing alarm manager 4.5.0.0
CODESYS Forge
talk
(Post)
Hi, have the same problem. Tried various versions (3.5.17.0 3.5.18.5 3.5.19.0 3.5.20.1) When you compare two functions blocks inside one project, the compare function does work. Regards, Gerco
Last updated: 2025-03-18
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.