enable direct interaction with variables in remote systems without creating local tags, establishing dynamic connections with external data sources for enhanced data access within the Unified Namespace.
\
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
/Temperature
Asset() 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 type
Explicit 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 data
Configure 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: