[Source] portion surrounded by square braces can have the following options:
|[Tag Provider Name]||The name of the Tag provider that hosts the Tag.||OPC, Expression Tags|
| or not specified||The default Tag provider for the current project.||OPC, Expression Tags|
|[.]||Relative to the folder of the Tag that is being bound.||Expression, Client Tags|
|[~]||Relative to the Tag provider of the Tag that is being bound (root node).||Expression, Client Tags|
|[Client]||Refers to a Client Tag.||Client|
|[System]||Refers to a System Tag.||System|
Using Relative Paths
Paths that begin with [.] or [~] are known as relative paths. They are used inside Tags that bind to other Tags, and are relative to the host Tag's path. Using the relative path syntax helps to avoid problems caused by moving Tags and renaming providers.
[.] refers to the Tag's current folder. By using [.], Tags can be moved from folder to folder without problem (provided that all of the applicable Tags are moved together). Additionally, you can use ".." (two periods) to go back one folder from the current relative position, for example [.]../../tag allows you to reference a Tag two folders up.
[~] refers to the Tag's provider root. It can replace the explicit provider name, and thus protect against provider renames and importing/exporting/moving Tags between different providers.
Tag Path Manipulation
Ignition provides a great deal of flexibility for Tag addressing since Tag paths and Tag properties are string-based. The underlying strings that compose a valid Tag path can be assembled from many different parts in with the eventual construction resulting in a valid Tag path.
The following scripting demonstrates this concept. Suppose there was a Tag path to a level indicator in a tank. In this case it is the default Tag provider, Tanks folder, Tank 1 Folder, and the Level Tag.
tagPath = "[default]Tanks/Tank 1/Level"
But suppose that there was more than just Tank 1 and instead there was Tank 2, Tank 3, Tank 4, etc,. Dynamically changing the Tag paths is simple with Ignition's Tag paths being nothing more than string representations. The following takes the tank number and inserts it into a new Tag path. The tankNumber variable changes the eventual creation of the tagPath.
tankNumber = 2 tagPath = "[default]Tanks/Tank %i/Level" % tankNumber
The result of the tagPath variable will be [default]Tanks/Tank 2/Level which is a valid Tag path to the the level sensor for Tank 2.