UNS TagProvider Services (Reference) enable direct interaction with variables in remote systems without creating local tags. TagProvider Services provide:
TagProviders allow consuming external data models directly, ideal for IoT systems and dynamic environments where device configurations change frequently.
| Aspect | Devices | TagProviders |
|---|---|---|
| Data Structure | Static, predefined | Dynamic, discovered |
| Tag Creation | Required locally | Not required |
| Metadata | Full control | Limited control |
| Security | Granular per tag | Connection level |
| Use Case | SCADA/HMI systems | IoT/Monitoring |
| Validation | Strict (FDA) | Flexible |
| Configuration | Design-time | Runtime discovery |
<ac:structured-macro ac:name="info"> ac:rich-text-body
<p>Historian TagProviders provide two additional features:</p> <ol> <li>Automatic historian querying for TrendCharts using Asset() syntax</li> <li>Can be used as Storage Locations for archiving time-series data</li> </ol> </ac:rich-text-body> </ac:structured-macro>
| Parameter | Description | Required |
|---|---|---|
| Name | Connection identifier | Yes |
| Protocol | Communication type | Yes |
| PrimaryStation | Main endpoint | Yes |
| BackupStation | Redundant endpoint | No |
| Access | Read/Write/ReadWrite | Yes |
| Timeout | Response timeout | Yes |
| Description | Documentation | No |
Each protocol requires unique parameters:
After configuration, TagProviders appear in Asset Tree:
/Root
/MyOPCServer (TagProvider)
/Line1
/Motor1
/Speed
/TemperatureAsset() Syntax:
csharp
// Read value
double speed = Asset("/MyOPCServer/Line1/Motor1/Speed");
// Write value
Asset("/MyOPCServer/Line1/Motor1/Speed") = 100;
// ControlLogix specific
Asset("/MyPLC/DINT:MyTag");
Asset("/MyPLC/DINT:MyArray[0]");In Displays:
xml
<TextBox Text="{Asset('/MyOPCServer/Line1/Motor1/Speed')}" />In Scripts:
csharp
if (Asset("/MyOPCServer/Line1/Motor1/Running"))
{
// Motor is running
}Dynamic handling supported:
csharp
var value = Asset("/Path/To/Tag");
// Automatically handled as correct typeExplicit conversion required:
csharp
int intValue = TK.ToInt(Asset("/Path/To/Tag"));
string strValue = TK.ToString(Asset("/Path/To/Tag"));
bool boolValue = TK.ToDigital(Asset("/Path/To/Tag"));csharp
// TrendChart automatic query
TrendChart.Asset = "/HistorianProvider/Temperature";
// Automatically fetches historical dataConfigure in Historian → Storage Locations:
Use toolbar Object Browser for correct syntax:
| Property | Description | Type |
|---|---|---|
| Protocol | Communication protocol | Selection |
| ProtocolOptions | Protocol-specific settings | String |
| PrimaryStation | Main connection endpoint | String |
| BackupStation | Backup endpoint | String |
| Settings | Configuration parameters | String |
| Timeout | Response timeout (ms) | Integer |
| IsHistorian | Historian capability | Boolean |
| Access | Read/Write permissions | Enum |
| ServerIP | Remote server address | String |
Connection failed:
No data visible:
Performance issues:
Type conversion errors: