跳到主要内容

Session 会话 — DarraOpcUa

DarraOpcUa 是 Client 主类, 一个实例对应一个 OPC UA Session. 所有访问 (Read / Write / Browse / Subscribe / Call / History) 都从这个对象出发.

子页跳转

公共属性

类别属性类型访问说明
连接EndpointUrlstringR构造时指定的 endpoint URL
SecurityModeMessageSecurityModeR安全模式 (None / Sign / SignAndEncrypt)
SecurityPolicyUristringRSecurityPolicy URI (例如 #None / #Basic256Sha256)
ClientCertificatePfxPathstringR客户端 PFX 证书路径
状态StateSessionStateR当前会话状态 (Disconnected / Connecting / Connected / Reconnecting / Closing / Failed)
IsConnectedboolR是否已连接 (= State == Connected)
子对象NodesNodeCollectionRLazy Load 节点访问器
NamespacesNamespaceCollectionR命名空间 URI ↔ Index 互转
HistoryHistoryAccessorR5 模式 HistoryRead + HistoryUpdate
事件EventsOpcUaEventsR会话级事件统一通道 (Connected / Disconnected / DataChange / ServerEvent / ...)
配置KeepAliveIntervalMsuintRWKeepAlive 心跳周期 (默认 10000 ms, 0 = 禁用)
AutoPublishboolRW启停后台 Publish 线程 (默认 true)

公共方法

连接管理

  • Connect() — 建立连接 (Hello → SecureChannel → Session → Activate)
  • Disconnect() — 主动断开, 实例可重连
  • Dispose() — 释放资源, 自动 Disconnect

心跳与发布

  • Publish(timeoutMs = 2000) — 手动触发一次 Publish (一般无需调用)

读 / 写

浏览

订阅

方法调用

历史

控制

  • Cancel(requestHandle) — 取消未完成请求

完整示例

using DarraOpcUa_Client;

using var ua = new DarraOpcUa("opc.tcp://localhost:4840");
ua.Events.Connected += (s, e) => Console.WriteLine($"Connected to {e.EndpointUrl}");
ua.Events.Disconnected += (s, e) => Console.WriteLine($"Disconnected: {e.Reason}");
ua.Connect();

// 读
using var dv = ua.Read("ns=2;s=Temperature");
Console.WriteLine($"T = {dv.Value.AsDouble} °C");

// 写
var st = ua.Write("ns=2;s=Setpoint", new Variant(42.0));
Console.WriteLine($"Write status = {st}");

// 订阅
using var sub = ua.CreateSubscription(500);
sub.DataChanged += (s, e) =>
Console.WriteLine($"{e.NodeId} = {e.ValueString} ({e.Status})");
sub.Add("ns=2;s=Counter");

// 方法
var outputs = ua.Call("ns=2;s=Calc", "ns=2;s=Calc.Add",
new Variant(3), new Variant(4));
foreach (var v in outputs) using (v)
Console.WriteLine($"sum = {v.AsInt32}");

Thread.Sleep(TimeSpan.FromMinutes(1));

下一步