I need to increment an integer value each time the PLC program is updated to track changes.
There are system events like online_change and before_download, but I have no idea how to implement their functions.
Also I need to save value between updates. I think the tracking variable should be created as RETAIN but not sure.
The variable declaration type should be
VAR RETAIN PERSISTENTin your case. Variables declared underRETAINonly will lose their values (intentionally) with a program change.I believe the builtin Codesys library SysLibProjectInfo.lib has what you are looking for with the function SysGetProjectID. If you store SysGetProjectID as a
RETAIN PERSISTENTand then compare against it, you can track changes (or, this unique value may be exactly what you wanted in the first place, without manually creating an ID).Note: Depending on how you declare your variables, changing the I/O configuration can have unexpected changes even on
VAR RETAIN PERSISTENTvariables (as all dynamically allocated addresses are shifted and may not point where they used to).