Parameter Precedence
- Last UpdatedJul 18, 2023
- 3 minute read
On a machine where a parameter is set in both the project database and the Citect.ini file, the value contained in the Citect.ini will be used by that machine.
For example, in the diagram below, the project value for "parameter X" (which is stored in the project database) is n. This is the value used for parameter X on every server and client EXCEPT the I/O server and trends server, both of which use the values set in their local Citect.ini files (p and m respectively).

A parameter which is global to a project and applies to the majority of servers running a project is recommended therefore to be defined in the project database where it can be centrally managed and controlled. Any exceptions to this global value can then be managed by modifying the Citect.ini file on the machine to which the exception applies.
Included projects
If the Citect.ini has no parameter setting, the value used will be the value specified in the lowest level include project. This means that it will then ignore any value placed in the top level projects at Runtime in favor of the lowest level include project which has the parameter set. Naturally if the parameter is not set anywhere, then the default value for the parameter will be used.
For example, using the parameter[Alarm]SavePeriod. The default value is 600. In this example there is a main project and an included sub project with the parameter being set as shown below. The runtime result column in the table below shows what Plant SCADA considers the value to be, for example if the ParameterGet() Cicode was used.
|
Citect.ini |
Main |
Include |
Runtime Result |
|---|---|---|---|
|
None |
None |
None |
600 |
|
None |
300 |
None |
300 |
|
None |
None |
400 |
400 |
|
None |
300 |
400 |
400 |
|
500 |
300 |
400 |
500 |
|
600 |
300 |
400 |
600 |
Duplicate Parameters
If the parameter is defined multiple times either in the same project or different include project, the effective value of the parameter is unpredictable. The compiler will pick up the first entry of the parameter found in the project hierarchy, but does not check for duplicate entries.
This means it is not possible to override parameters defined in the included project by defining the same parameter (with different value) in the including project. It is recommended that when you create a new parameter for your project and give it a default value, you define the default value inline rather than defining it as a project parameter in the included project. For example:
Call ParameterGet("MySection", "MyParameter", MyDefaultValue) whenever needing to read the parameter.
MyDefaultValue can be defined as a label so it is accessible outside Cicode files, or as a global variable if the parameter is only used in Cicode files. By doing this, the value of the parameter is overridden in the including project (by defining the value for the parameter in the system parameter database).
However, if the same parameter is defined in the local Citect.ini file, it will always take precedence over the parameter defined in the project. But , if the parameter is defined multiple times in the Citect.ini file, only the first entry will be picked up.
See also