02-22-2023 09:55 AM
I am developing an object containing Object, Base and Peripheral as usual. In my Base there are some constants defined for usage in Object and also in Peripheral e.g.:
MyBaseConstants
{attribute 'qualified_only'}
VAR_GLOBAL CONSTANT
MY_DEVICE_PAR_COUNT : DINT := 5;
END_VAR
In some examples I found different approaches how to access this constant from object or peripheral:
What is the right way how to handle it?
Solved! Go to Solution.
02-22-2023 03:36 PM
We usually use 1.
I have never seen 2, but that doesn't mean much. 😉
3 is safest, of course, but I agree it is too long. The namespace shouldn't be necessary, because when following our recommendation to prefix all GVL names with the library name, the GVL name is most likely unique. And that's all that matters.
02-23-2023 05:42 AM
In ATMO we are also using option 1. We have a object creation guideline (on top of the coding guideline) that says that everything that's not INTERNAL has to be prefixed with the object name, including the GVLs. The object name itself is unique, although not prefix-free. But we have never run into a naming conflict and I predict we never will.
I have seen option 2 before but it causes problems if the library namespace will change. We did change namespaces before, and I am happy we didn't use option 2 at that time 😛
Option 3 is for purists only, I think 😉
02-23-2023 06:54 AM - edited 02-23-2023 06:55 AM
In the meantime I found biggest disadvantage of option 2, which is you are not able to use it until you pack it in to the library and add it to references. This is not much comfortable during the development, because I need to continuously work with source code of object, base and peripheral in my project. I do not want to create library everytime I change something.