跳到主要内容

DA — Data Access

Data Access (DA) 是 OPC UA 最基础的访问类型, 几乎每个 OPC UA Server 都实现 DA. 它定义了如何用标准方式暴露和访问实时数据.

配套阅读

DA 核心节点类型

Type用途
BaseDataVariableType通用数据变量基类
DataItemType实时数据项 (含工程单位)
AnalogItemType模拟量 (含 EU Range / Engineering Units)
DiscreteItemType离散量 (开关 / 状态)
TwoStateDiscreteType两态离散 (布尔)
MultiStateDiscreteType多态离散 (枚举)
MultiStateValueDiscreteType多态值离散

标准 Property

DA 变量通常带这些 Property:

Property含义示例值
EngineeringUnits工程单位 (含 NamespaceUri / Unit Id / DisplayName / Description)°C
EURange工程单位范围 [Low, High][-50, 200]
InstrumentRange物理仪表量程[-100, 300]
ValuePrecision数值精度0.1
Definition定义 (可选)"Boiler outlet temperature"

客户端读取示例

// 读温度值
var temp = ua.Read("ns=2;s=Boiler1.Temperature");
Console.WriteLine($"Value = {temp.Value.AsDouble}");

// 读单位
var unit = ua.Read("ns=2;s=Boiler1.Temperature.EngineeringUnits");
Console.WriteLine($"Unit = {unit.Value}"); // EUInformation 结构

// 读量程范围
var range = ua.Read("ns=2;s=Boiler1.Temperature.EURange"); // 返回 Range 结构

死区订阅 (DataChangeFilter)

DA 变量订阅时常用 Percent 死区, 减少噪声:

sub.Add("ns=2;s=Boiler1.Temperature",
samplingIntervalMs: 100,
deadband: new DataChangeFilter {
DeadbandType = DeadbandType.Percent,
DeadbandValue = 1.0, // 1% of EURange
Trigger = DataChangeTrigger.StatusValue
});

实战要点

  • AnalogItemType 必须有 EURange Property, 否则不能算 Percent 死区
  • DiscreteItemType 用 Status 作变化触发
  • 客户端不要硬编码 °C 等单位字面量, 要从 EngineeringUnits.UnitId 拿 (UNECE 编码)

相关链接