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) を有効化 — driver が 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” | アドレス mismatch | master / outstation アドレスを両方とも確認 |
| すべての値が 0 または stale | unsolicited 未受信、link layer の問題 | class0 で明示的な polling を試行 |
| “Object not found” | group/variation の誤り | RTU の「DNP point map」文書を確認 |
| 時刻が大きくずれている | DNP3 timestamp UTC vs ローカル | ゲートウェイは 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 自動化例を参照。