DNP3 — 電力 / Utility 標準
DNP3 (Distributed Network Protocol v3) は、電力会社 / 上下水道 / ガスなどの utility SCADA で最も広く使われているプロトコルです。RTU / IED と SCADA master 間の通信標準であり、時刻同期 (time-stamped events) と 信頼性のある報告 (unsolicited responses) が主な特徴です。
登録フォームの入力値
| 入力欄 | 何を入力するか | 例 |
|---|---|---|
| IP アドレス | RTU / IED の IP | 192.168.0.120 |
| ポート | DNP3 TCP ポート | 20000 (標準) |
| Master アドレス (master-address) | ゲートウェイ (master) 自身のアドレス | 1 |
| Outstation アドレス (outstation-address) | 相手 (slave) の DNP アドレス | 10 |
| 応答タイムアウト (request-timeout) | 応答待ち時間 (ms) | 5000 |
| Unsolicited (enable-unsolicited) | RTU からの自発送信 (push) を有効化 — ドライバが cache し read() 時に優先して返す | all / 1 / 2 / 3 / 1,2 (既定は空欄 = 未使用) |
DNP3 は master アドレス / outstation アドレスが 双方で一致 している必要があります。RTU 側の設定 (通常は ABB / SEL / GE の IED 設定ツール) で「Source Address」と「Destination Address」がゲートウェイの master/outstation と対になっているか確認してください。
タグの PLC アドレス表記
DNP3 は Group / Variation / Index でデータポイントを識別します。よく使われる group:
| Group | 種類 | 備考 |
|---|---|---|
| 1 | Binary Input (BI) | 遮断器・接点状態など |
| 10 | Binary Output (BO) | 出力状態 |
| 20 | Counter | 積算カウンタ |
| 30 | Analog Input (AI) | 電流・電圧・温度 — 最も一般的 |
| 40 | Analog Output (AO) | 出力 setpoint |
| 41 | Analog Output Block (write 対象) | setpoint 書き込み |
ゲートウェイでは g<group>v<variation>.<index> または class<n> 形式で入力します。
| 表記 | 意味 |
|---|---|
g30v1.5 | Analog Input, var 1 (32-bit + flag), index 5 |
g30v5.5 | Analog Input, var 5 (Float), index 5 |
g1v2.0 | Binary Input, var 2 (with flag), index 0 |
g20v1.0 | Counter, 32-bit, index 0 |
class0 | Class 0 polling (静的データの全スキャン) |
class1 | Class 1 events (イベント性の変化) |
プロジェクトの初期段階で「まずは全部取得してみたい」場合は、class0 で一括受信した後、必要なポイントだけを選んで g30v... で精密に登録するのが便利です。
データ形式のマッチング
| Group | データ形式 | 形式補助 |
|---|---|---|
| g1 (BI) | Boolean | (空欄) |
| g30v1 (AI 32-bit signed) | Integer | DW |
| g30v2 (AI 16-bit signed) | Integer | (空欄) |
| g30v5 (AI float) | Float | REAL |
| g30v6 (AI double) | Double | LREAL |
| g20v1 (Counter 32-bit) | Integer | DW |
書き込み (Write) のサポート
DNP3 outstation の書き込み対象は通常 2 種類です。
| 表記 | 意味 |
|---|---|
g41v1.5 | Analog Output Block 32-bit signed setpoint, index 5 |
g41v3.5 | Analog Output Block float setpoint, index 5 |
g12v1.0 | Control Relay Output Block (CROB) — 遮断器の trip/close など |
g12 (CROB) は 遮断器 / リレーを直接動作 させます。運用環境では必ず select-before-operate 手順と権限の確認を行ってから使用してください。
よくある問題と対処
| 症状 | 考えられる原因 | 対処 |
|---|---|---|
| 「No reply」 | アドレスの不一致 | master / outstation アドレスを双方で確認 |
| 全ての値が 0 または stale | unsolicited 未受信、link layer の問題 | class0 で明示的な polling を試す |
| 「Object not found」 | 誤った group/variation | RTU の「DNP point map」ドキュメントを確認 |
| 時刻が大きくずれる | DNP3 timestamp が UTC か ローカルか | ゲートウェイは UTC で受信。表示側で変換 |
Group / Variation の詳細表
DNP3 のデータモデルは「Group」の中に複数の「Variation」が含まれる構造です。同じ Group 30 (AI) でも 32-bit / 16-bit / float / double と複数の表現があるため、RTU がどの variation を公開しているかに合わせる必要があります。
| Group | Var | 意味 | サイズ / 形式 |
|---|---|---|---|
| 1 | 1 | Binary Input — packed format (no flag) | 1 bit |
| 1 | 2 | Binary Input with status (flag bit を含む) | 1 byte |
| 2 | 1 | Binary Input Change — no time | event |
| 2 | 2 | Binary Input Change — absolute time | event + 6-byte time |
| 10 | 2 | Binary Output Status (with flag) | 1 byte |
| 12 | 1 | CROB (Control Relay Output Block) — write 専用 | 11 byte struct |
| 20 | 1 | Counter — 32-bit | 4 byte |
| 20 | 2 | Counter — 16-bit | 2 byte |
| 30 | 1 | AI 32-bit signed (with flag) | 5 byte |
| 30 | 2 | AI 16-bit signed (with flag) | 3 byte |
| 30 | 3 | AI 32-bit signed (no flag) | 4 byte |
| 30 | 5 | AI single-precision float (with flag) | 5 byte |
| 30 | 6 | AI double-precision float (with flag) | 9 byte |
| 32 | 1 | AI Change — no time | event |
| 32 | 7 | AI Change — single float, abs time | event |
| 40 | 1 | AO Status 32-bit signed (with flag) | 5 byte |
| 41 | 1 | AO Block 32-bit signed (write 対象) | 5 byte |
| 41 | 3 | AO Block float (write 対象) | 5 byte |
よく使う運用パターン
パターン 1. 変電所 IED の基本測定値 (電流・電圧・電力)
ABB REC615 / SEL-451 / SEL-735 メータのような IED は、通常次のようにマッピングされます。
| タグ名 | アドレス | データ形式 | 形式補助 |
|---|---|---|---|
| A 相電流 | g30v5.0 | Float | REAL |
| B 相電流 | g30v5.1 | Float | REAL |
| C 相電流 | g30v5.2 | Float | REAL |
| 総有効電力 | g30v5.10 | Float | REAL |
| 周波数 | g30v5.20 | Float | REAL |
| 遮断器 1 位置 | g1v2.0 | Boolean | (空欄) |
| 遮断器 2 位置 | g1v2.1 | Boolean | (空欄) |
パターン 2. 積算カウンタ (kWh / ガス m³ など)
Counter (Group 20) は積算値です。表示側で差分を求めて「時間当たり使用量」に変換します。
| タグ名 | アドレス | データ形式 |
|---|---|---|
| 積算有効電力 (kWh) | g20v1.0 | Integer |
| 積算無効電力 (kvarh) | g20v1.1 | Integer |
パターン 3. CROB による遮断器制御 (write)
g12v1.0 = "Pulse-On / Trip / Close" 명령 코드
CROB 1 byte control code:
| 値 | 意味 |
|---|---|
0x01 | Pulse-On |
0x02 | Pulse-Off |
0x03 | Latch-On |
0x04 | Latch-Off |
0x41 | Trip (保護動作) |
0x81 | Close |
CROB は SBO (select → operate) 手順が必須の RTU が多くあります。PlantPulse 側から単発の write で命令を送っても RTU が reject する場合があります。このような環境では RTU 側で SBO 未使用モードを有効にするか、別途自動化スクリプトで 2 段階を実行してください。
参考 / 次のステップ
- RTU メーカー (ABB, SEL, GE, Schneider) の「DNP3 device profile」PDF に group/variation/index のマッピングが全て記載されています。
- IEEE 1815-2012 標準文書 (DNP3) が公式 spec です。
- 高度な設定 — REST API の DNP3 自動化サンプルを参照してください。