🌟 一、什么是 OPC 协议?

OPC(OLE for Process Control) 是一种工业通信标准,用于在工业设备(如PLC、传感器、仪表)和软件系统(如SCADA、MES、HMI)之间交换数据。

简单理解:OPC 就是工业设备和软件之间“说话”的通用语言。

常见的 OPC 协议分类:

类型 说明
OPC DA(Data Access) 用于实时数据读写(经典OPC,基于COM/DCOM)
OPC UA(Unified Architecture) 新一代OPC协议,跨平台、安全、支持复杂数据模型

我们今天重点讲的是 OPC UA,因为它是目前主流,支持现代工业通信需求。


🧠 二、OPC 的作用及功能

OPC 的核心作用是:

  • 统一通信标准:不同厂商的设备可以使用统一接口通信。
  • 读写设备数据:从PLC、传感器等设备中读取或写入数据。
  • 报警与事件:接收设备的异常信息或事件通知。
  • 历史数据访问:查询设备的历史数据记录。
  • 方法调用:调用设备上的函数或方法(如启动、停止等)。

🔧 三、OPC UA 的工作原理(通俗理解)

OPC UA 使用 客户端-服务器(Client-Server)架构

  • OPC UA 服务器:运行在设备或本地计算机上,提供数据。
  • OPC UA 客户端:运行在你的程序中,用来访问服务器的数据。

你可以想象成:

(客户端)打电话给 工厂的控制室(服务器),说:“请告诉我1号传感器的温度是多少?”
控制室查了一下,告诉你:“1号传感器现在是25.3°C。”

这就是 OPC UA 的基本通信过程。


🛠️ 四、在实际工作中如何使用 OPC UA?

在实际项目中,你可能会:

  • 从 PLC 读取温度、压力等数据
  • 向设备写入控制命令
  • 监控设备状态
  • 将数据传给上位机系统(如 MES)

💻 五、C# 实现 OPC UA 通信(完整示例 + 逐行解释)

我们将使用 Opc.UaFx.Client 这个库来实现 OPC UA 通信。

1️⃣ 安装 NuGet 包

在 Visual Studio 中打开 NuGet 包管理器,安装:

1
Install-Package Opc.UaFx.Advanced

2️⃣ 示例代码:读取 OPC UA 服务器上的温度值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System;
using Opc.UaFx.Client;

class Program
{
static void Main()
{
// 创建 OPC UA 客户端,指定服务器地址
using (var client = new OpcClient("opc.tcp://localhost:4840"))
{
try
{
// 连接到 OPC UA 服务器
client.Connect();

// 输出连接成功信息
Console.WriteLine("已连接到 OPC UA 服务器。");

// 读取节点值:假设温度传感器的节点是 ns=2;s=TemperatureSensor
string nodeId = "ns=2;s=TemperatureSensor";
object value = client.ReadNode(nodeId);

// 输出读取到的值
Console.WriteLine($"读取到的温度值为: {value}");

// 如果你知道数据类型是 double,可以这样强转
double temperature = client.ReadNode(nodeId).GetValue<double>();
Console.WriteLine($"温度值(double类型): {temperature} °C");
}
catch (Exception ex)
{
Console.WriteLine($"发生错误: {ex.Message}");
}
finally
{
// 断开连接
if (client.Connected)
{
client.Disconnect();
Console.WriteLine("已断开与 OPC UA 服务器的连接。");
}
}
}

Console.WriteLine("按任意键退出程序...");
Console.ReadKey();
}
}

🧾 六、代码逐行解释(通俗易懂)

代码 解释
using Opc.UaFx.Client; 引入 OPC UA 客户端库
using (var client = new OpcClient("opc.tcp://localhost:4840")) 创建 OPC UA 客户端,连接到本机的 OPC UA 服务器(端口 4840)
client.Connect(); 建立连接
string nodeId = "ns=2;s=TemperatureSensor"; 指定你要读取的节点地址(命名空间 2,节点名称 TemperatureSensor)
object value = client.ReadNode(nodeId); 读取该节点的值(返回的是 object 类型)
double temperature = client.ReadNode(nodeId).GetValue<double>(); 强转为 double 类型
Console.WriteLine(...) 输出结果
client.Disconnect(); 断开连接
try...catch...finally 异常处理和资源释放

📌 七、运行前你需要知道的事

  • OPC UA 服务器必须运行,比如你可以使用:
  • 确保 OPC UA 服务器上有节点,比如 "ns=2;s=TemperatureSensor",否则会报错。
  • 如果你连接的是远程服务器,请把地址改成 "opc.tcp://192.168.x.x:4840"

✅ 八、总结一句话

OPC UA 是工业设备与软件之间通信的通用协议,使用 C# 可以轻松实现数据读写。你只需要创建客户端、连接服务器、读写节点,就能实现与PLC、传感器等设备的通信。