「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
通信プロトコルには様々な種類があり、ベンダ固有の通信プロトコルもあれば、国際的に標準化されている通信プロトコルもあります。また、通信プロトコルによっては得意な分野があるので、開発するシステムに応じ採用する通信プロトコルを決めていく必要があります。
弊社でもmodbusをはじめ、様々な通信プロトコルを開発しておりますが、今回の技術レポートでは弊社過去の開発実績の中からDNP3.0プロトコルに準拠したソフトウェア開発の事例を紹介します。
本実装例では、LinuxOSにDNP3.0を実装したものになります。
DNP3.0(Distributed Network Protocol)は電力会社や水道施設などの工業分野でよく利用されるSCADAのオープン通信プロトコルセットです。安定度の低い通信回線を利用しても、確実にデータの送受信ができ、最近では、石油やガスの採掘現場、パイプラインといった広域分散設備の制御に導入されています。
元々はWestronic社(現GE Harris社)が開発した通信プロトコルで、DNPユーザグループを立ち上げそこでDNPの開発が進んでいきました。
DNP3.0プロトコルは、マスタ/アウトステーション方式で、マスタが通信の起点となります。
アウトステーションは、マスタから要求された機能を実行し応答メッセージを返します。(図1)
図1. マスタ/アウトステーション方式
DNP3.0プロトコルでは通信方法として、シリアル通信とIPネットワーク通信の2種類をサポートしています。また、IPネットワーク通信ではTCPとUDPをサポートしています。DNP3.0プロトコルの実装として、すべてを対応する必要はなく、必要な機能のみを実装し、実装した内容をDevice Profileという文書にサポートしている機能として記載します。
サポートしているデータタイプとしてはBinary データ、Counterデータ、Analogデータ、文字列、ファイルなどがあります。これらのデータにアクセスするために、DNP3.0は専用のメッセージ(オブジェクトグループ)を用意しており、アクセスしたいデータタイプに合わせてメッセージの使い分けをします。
また、マスタがデータを取得する際、1〜20の範囲を取得するといった指定のほかに、前回データを取得してから値が変わったデータのみを取得するといったこともできます。値が変わったデータをイベントとして保持し、マスタはイベントデータのみを取得できます。イベントデータのみを取得することによって、トラフィック負荷が軽減できます。
DNP3.0プロトコルは以下のレイヤ構成になります。
図2. DNP3.0レイヤ
User LayerはDNP3.0を使用するユーザのソフトウェアになります。DNP3.0 Application LayerからDNP3.0 Data Link LayerまではDNP3が規定するレイヤになります。
Physical Mediaはシリアル通信であれば、RS-232やRS-485、IP ネットワーキングならEthernetになります。
メッセージは、レイヤごとに定められています。ここではDNP3.0 Application Layerのフレームについてご紹介します。
●リクエスト時
図3. DNP3.0リクエストメッセージ
●レスポンス時
図4. DNP3.0レスポンスメッセージ
名前 | 概要 |
---|---|
Application Request Header | Application Control およびFunction Codeが格納されています。 |
Application Response Header | Application Control、Function Code およびInternal Indicationsが格納されています。 |
Application Control | 通信制御用ビットが格納されています。 |
Function Code | readなどのファンクションコードが格納されています。 3.2.項で説明します。 |
Internal Indications | レスポンス時のみある領域です。アウトステーションのステータスやエラー状態をチェックする領域です。 |
Object Header | DNPオブジェクトのヘッダになります。 |
Group | DNPオブジェクトのグループ番号になります。 使用するDNPの機能に応じた番号を指定します。 3.3.項で説明します。 |
Variation | DNPオブジェクトのデータフォーマットを指定する番号になります。Group毎にVariation番号が規定してあるので、使用するフォーマットに応じ番号を指定します。 |
Qualifier Field/Range Field | Qualifier FieldにはQualifier Codeが格納されており、これは例えばreadの時、範囲を指定するのか、readサイズを指定するのか、全データを取得するのかなどを指定するものです。Range Fieldにはパラメータ(開始インデックス、終了インデックスやサイズなど)が格納されます。 |
表1. メッセージフレームの内容
DNP3.0プロトコルには多くのFunction Codeが定義されていますが、一般的に使用するものを表 2にまとめます。
コード | 名称 | 概要 |
---|---|---|
0x01 | READ | 指定したデータを取得します。 |
0x03 | SELECT | 書き込むデータの選択を行います。この段階では書き込みが行われず、OPERATEコマンドを発行することにより、データが書き込まれます。 |
0x04 | OPERATE | SELECTしたデータに書き込みを行います。SELECT & OPERATEをすることにより、データを確実に書込みすることができるようになります。 |
0x05 | DIRECT_OPERATE | SELECTを行わなくてもデータの書き込みを行えるファンクションです。 |
表2. Function Codeの種類
DNP3.0のGroupについて一般的に使用するものをまとめます。
各GroupはVariationやFunction Codeによって動作が変わります。
Group | 名称 | 概要 |
---|---|---|
1 | Binary Input | Binary Inputデータの制御(readなど) |
2 | Binary Input Event | Binary Inputイベントデータの制御(readなど) |
10 | Binary Output Status | Binary Outputデータの制御(readなど) |
11 | Binary Output Event | Binary Outputイベントデータの制御(readなど) |
12 | Binary Output Command | Binary Outputデータの制御(SELECT/OPERATEなど) |
30 | Analog Input | Analog Inputデータの制御(READなど) |
32 | Analog Input Event | Analog Inputイベントデータの制御(READなど) |
40 | Analog Output Status | Analog Outputデータの制御(READなど) |
41 | Analog Output Command | Analog Outputデータの制御(SELECT/OPERATEなど) |
42 | Analog Output Event | Analog Outputイベントデータの制御(READなど) |
表3. Groupの種類
今回は、弊社開発実績の中から、DNP3.0のアウトステーション側の開発事例を紹介します。
開発事例のシステム構成を図5に示します。
1台のマスタに対して1台のアウトステーションが接続される構成となります。
図5. DNP3.0システム構成
弊社はアウトステーション側を担当し、LinuxOSにDNP3.0を実装しました。
また、通信はLinuxOSを使用してEthernetを用いたTCP通信を実現しています。
今回、アウトステーション側のDNP3.0機能要件は、以下の2点でした。
以上の要件のため、上記機能のみを今回実装いたしました。
アウトステーション側プログラムの処理分けは図6の通りとし、アプリケーション制御部、DNP通信プロトコル部およびTCP通信部の3つにプログラムを分けています。3つに分割することによって、変更が互いに影響しないようにしています。
図6. プログラムの機能分け
本レポートでは、アウトステーション側実装の例としてDNP3.0の開発事例を取り上げました。
今回はDNP3.0の機能のごく一部を実装した事例になります。DNP3.0標準化されているプロトコルであるため、ユーザ視点から見ればわかりやすく、使いやすい通信プロトコルであると感じています。DNP3.0の資料は日本語に限らず、英語の資料も少ないため、DNP3.0の参考資料の一つになればと思います。
(S.O.)
関連ページへのリンク
関連するソフテックだより