跳到主要内容

DNP3(电力 / 公用事业)

DNP3(分布式网络协议 v3)是电力公司 / 水务 / 燃气等公用事业 SCADA 中最广泛使用的协议。它是 RTU / IED 与 SCADA 主站之间的通信标准,其核心特点是带时间戳的事件(time-stamped events) 和可靠的上报(unsolicited responses)。


注册表单输入值​

输入字段填写内容示例
IP 地址RTU / IED 的 IP192.168.0.120
端口DNP3 TCP 端口20000(标准)
主站地址 (master-address)网关(主站)自身的地址1
子站地址 (outstation-address)对端(从站)的 DNP 地址10
响应超时 (request-timeout)等待响应时间(毫秒)5000
非请求响应 (enable-unsolicited)启用 RTU 的主动上报(推送) — 驱动缓存后在 read() 时优先返回all / 1 / 2 / 3 / 1,2(默认留空 = 未使用)
两个地址必须都匹配才能通信

DNP3 要求主站地址 / 子站地址双方必须完全一致。请检查 RTU 侧配置(通常是 ABB / SEL / GE 的 IED 配置工具)中,“源地址”和“目标地址”是否与网关的主站/子站地址配对。


标签的 PLC 地址表示​

DNP3 通过 组 / 变体 / 索引 来标识数据点。常见的组:

组类型备注
1二进制输入 (BI)断路器、触点状态等
10二进制输出 (BO)输出状态
20计数器累积计数器
30模拟量输入 (AI)电流、电压、温度 — 最常见
40模拟量输出 (AO)输出设定值
41模拟量输出块(写入目标)设定值写入

在网关中,按 g<group>v<variation>.<index> 或 class<n> 格式输入。

表示含义
g30v1.5模拟量输入,变体 1(32 位 + 标志),索引 5
g30v5.5模拟量输入,变体 5(浮点),索引 5
g1v2.0二进制输入,变体 2(带标志),索引 0
g20v1.0计数器,32 位,索引 0
class0Class 0 轮询(静态数据全量扫描)
class1Class 1 事件(事件性变化)
Class 0 与 g30v1.x

在项目初期,如果“想先全部取回来看看”,用 class0 一次性获取,然后只挑选所需点位,再用 g30v... 精确注册,这样比较方便。


数据类型匹配​

组数据类型格式辅助
g1 (BI)Boolean(留空)
g30v1 (AI 32 位有符号)IntegerDW
g30v2 (AI 16 位有符号)Integer(留空)
g30v5 (AI 浮点)FloatREAL
g30v6 (AI 双精度)DoubleLREAL
g20v1 (计数器 32 位)IntegerDW

写入(Write)支持​

DNP3 子站的写入目标通常有两种。

表示含义
g41v1.5模拟量输出块 32 位有符号设定值,索引 5
g41v3.5模拟量输出块浮点设定值,索引 5
g12v1.0控制继电器输出块 (CROB) — 断路器跳闸/合闸等
CROB 有风险

g12 (CROB) 会直接操作断路器 / 继电器。在运行环境中,务必遵循 select-before-operate 流程并确认权限后再使用。


常见问题与解决​

现象可能原因解决方法
“无响应”地址不匹配检查主站 / 子站地址双方是否一致
所有值为 0 或陈旧未收到非请求响应,链路层问题用 class0 显式轮询尝试
“对象未找到”组/变体错误查看 RTU 的 “DNP 点位映射” 文档
时间偏差很大DNP3 时间戳为 UTC 与本地时间差异网关以 UTC 接收。在显示端进行转换

组 / 变体详细表​

DNP3 的数据模型是“组”中包含多个“变体”的结构。即使是相同的组 30 (AI),也有 32 位 / 16 位 / 浮点 / 双精度多种表示,需要匹配 RTU 所暴露的变体。

组变体含义大小 / 格式
11二进制输入 — 打包格式(无标志)1 位
12带状态二进制输入(含标志位)1 字节
21二进制输入变化 — 无时间事件
22二进制输入变化 — 绝对时间事件 + 6 字节时间
102二进制输出状态(带标志)1 字节
121CROB(控制继电器输出块)— 仅写入11 字节结构
201计数器 — 32 位4 字节
202计数器 — 16 位2 字节
301AI 32 位有符号(带标志)5 字节
302AI 16 位有符号(带标志)3 字节
303AI 32 位有符号(无标志)4 字节
305AI 单精度浮点(带标志)5 字节
306AI 双精度浮点(带标志)9 字节
321AI 变化 — 无时间事件
327AI 变化 — 单浮点,绝对时间事件
401AO 状态 32 位有符号(带标志)5 字节
411AO 块 32 位有符号(写入目标)5 字节
413AO 块浮点(写入目标)5 字节

常用运维模式​

模式 1. 变电站 IED 的基本测量值(电流、电压、功率)​

ABB REC615 / SEL-451 / SEL-735 电表等 IED 通常按如下方式映射。

标签名称地址数据类型格式辅助
A 相电流g30v5.0FloatREAL
B 相电流g30v5.1FloatREAL
C 相电流g30v5.2FloatREAL
总有功功率g30v5.10FloatREAL
频率g30v5.20FloatREAL
断路器 1 位置g1v2.0Boolean(留空)
断路器 2 位置g1v2.1Boolean(留空)

模式 2. 累积计数器(kWh / 燃气 m³ 等)​

计数器(组 20)是累积值。在显示端计算差值,转换为“每小时用量”。

标签名称地址数据类型
累积有功电能 (kWh)g20v1.0Integer
累积无功电能 (kvarh)g20v1.1Integer

模式 3. 用 CROB 控制断路器(写入)​

g12v1.0 = "Pulse-On / Trip / Close" 명령 코드

CROB 1 字节控制码:

值含义
0x01Pulse-On
0x02Pulse-Off
0x03Latch-On
0x04Latch-Off
0x41Trip(保护动作)
0x81Close
select-before-operate

许多 RTU 要求 CROB 必须执行 SBO(选择 → 执行)流程。即使 PlantPulse 侧发出单次写入命令,RTU 也可能拒绝。在这种环境中,需在 RTU 侧启用非 SBO 模式,或通过单独的自动化脚本执行两步操作。


参考 / 下一步​

  • RTU 制造商(ABB、SEL、GE、Schneider)的 “DNP3 设备配置文件” PDF 中包含完整的组/变体/索引映射。
  • IEEE 1815-2012 标准文档(DNP3)是官方规范。
  • 参考高级 — REST API中的 DNP3 自动化示例。