3. ModBusプロトコルの実践的な解析

ここに画像の説明を挿入

0x01 序文

前回の記事では、Modbus プロトコルに関する理論的根拠を学び、まとめましたが、今回は、Modbus シミュレーション環境を構築して、Modbus プロトコルの実践的な解析を行っていきます。

プロトコル解析環境:

  • ModbusPoll: Modbus マスターまたは Modbus クライアントをエミュレートするために使用されます。
  • ModbusSlave: Modbus スレーブまたは Modbus サーバーをエミュレートするために使用されます。
  • 仮想シリアル ポート ドライバーの構成: 略して VSPD、コンピューターの仮想シリアル ポートの作成に使用されます。
  • CommMonitor: シリアル データ送信を監視できるシリアル モニタリング ウィザード

ソフトウェアのダウンロード:

  • ModbusPol、ModbusSlave、VSPD ダウンロード: https://pan.baidu.com/s/1vQiGP-AIYxShcZhbxbctTg 抽出コード: dqeg
  • CommMonitor のダウンロード: http://www.ceiwei.com/mt/

0x02 VSPD を使用して新しいシリアル ポートを作成します

通常の状況では、Modbus プロトコルのデバッグには、デバッグのために 3 台以上のコンピュータがオンラインに接続されている必要があります。しかし、VSPD を使用すると、コンピュータ上に仮想シリアル ポートを作成することで、ホスト コンピュータ上の Modbus 通信を解析できるようになります。

インストール プロセスは次へ進みます。インストールが完了すると、ソフトウェアをクラックするためのプロンプトがさらに表示されます。

次のようにソフトウェア ページを開きます。右側は新しいシリアル ポート操作の関数の場所です。下の図に示すように、追加する 2 つの大きなシリアル ポート番号を選択します。

ここに画像の説明を挿入

[追加] をクリックすると、左側のページに追加された仮想シリアル ポート情報が表示されます。

ここに画像の説明を挿入

追加が成功したかどうかを確認するには、このコンピュータ -> 管理 -> デバイス マネージャーで表示ポートを見つけます。次の図に示すように、正常に追加されています。

ここに画像の説明を挿入

0x03 新しい ModBus シリアル ポート接続を作成します

ModBus Slave ソフトウェアのインストールプロセスは次へ進み、インストールが完了したら、入力を開くと、正常に使用できるようになります。

開いたら、新しい接続を作成します ([接続] -> [接続])。キーの入力を求められ、ソフトウェア パッケージに含まれている秘密キーを入力して、[OK] をクリックして次のページまで進み、図に示すように接続情報を設定します。赤枠で囲った内容に注目し、シリアルポートを接続します。VSPDで追加したばかりのシリアルポートを選択します。

ここに画像の説明を挿入

ModBus Pollのインストールと開く操作はModBus Slaveと同じですが、シリアルポートを選択する際に作成したものを選択すればOKです。

ここに画像の説明を挿入

マスター/スレーブ サイトは接続を確立しました。マスター/スレーブ サイトを設定し、メニュー バーで [設定] --> [定義: 機能 03] をクリックし、マスター ステーションとマスター ステーションで同じレジスタ情報を保持する必要があります。次の図に示すように、スレーブ ステーション。

ここに画像の説明を挿入

マスター/スレーブを設定した後、スレーブ (Slave) のレジスター行のアドレスをダブルクリックしてデータを入力し、値を自動的に増加させるオプションにチェックを入れると、値が 1 秒ごとに自動的に増加します。 :

ここに画像の説明を挿入

その後、マスタ局でレジスタの値が読み取れるか確認し、読み取れていればマスタ局とスレーブ局間の接続は成功です。

ここに画像の説明を挿入

0x04 CommMonitor を分析に使用する

インストールに関しては、CommMonitor シリアル ポート モニタリングは、デフォルトでインストールできる WinXP、Win7、Win10、Win11、32/64 ビット オペレーティング システムをサポートしています。

ソフトウェアを開いた後、シリアル ポートを監視する必要があります。ここでは、マスター ステーションのシリアル ポートをクリックして COM21 を選択するため、シリアル ポート COM21 を選択します。データは主にマスター ステーションから開始され、スレーブ ステーションから開始されます。すべてのデータは 2 つのシリアル ポートを通過するため、監視する必要があるのはそのうちの 1 つだけです。

シリアルポート監視設定に関しては、接続方法に対応する ModBUs ビュー、MOdbus RTU モードを選択します。

ここに画像の説明を挿入

シリアル ポート監視を設定すると、シリアル ポート内のリアルタイム送信データを確認できるようになります。基本的な状況は次のとおりです。

ここに画像の説明を挿入

図に示すように、Modbus プロトコルが解析されており、ファンクション コード 0x03 は保持レジスタの値の読み出しを要求していることを示しており、読み出し要求アドレスは 0x00、読み出し長は 0x0A、チェックはコードは0xC5CDです。

スレーブ局からの応答パケットの解析結果を下図に示します。結果内のレスポンスコードは、スレーブ局のレジスタデータの読み出しに成功したことを示しています。

ここに画像の説明を挿入

次に、マスター ステーション上のデータを変更し、スレーブ ステーションに送信します。

ここに画像の説明を挿入

もう一度 ModBus プロトコル データを見てみましょう。次の図はリクエスト パケットです。機能コードが 0x06、つまり単一の保持レジスタに書き込み、書き込まれる値が 222 であることがわかります。

ここに画像の説明を挿入

応答パケットの内容をもう一度見てください。応答パケットの関数コードも 0x06 で、書き込みが成功したことを示しています。

ここに画像の説明を挿入

0x05 Wireshark を使用してキャプチャおよび分析する

まず環境設定の違いですが、新規接続時はマスタ局、スレーブ局を問わず、伝送プロトコルをModbus TCP/IP、接続ポートをModbus TCP/IPに設定する必要があります。以下の図に示すように、同様です。

ここに画像の説明を挿入

接続を設定した後、上記の方法を参照してスレーブ ステーションでデータの自己拡張を設定し、次の図に示すように、要求パケットの 1 つである Wireshark を開いてパケットをキャプチャします。

ここに画像の説明を挿入

具体的な分析は次のとおりです。

byte[0] byte[1]: 00 76 为消息号,随机指定,返回数据包的消息号的和请求数据包的消息号相同
byte[2] byte[3]: 00 00 为modbus强制标识
byte[4] byte[5]: 00 06 modbus报文的长度,往后数,一共也是6个字节,能够正确对应
byte[6]: 01 为从站编号
byte[7]: 03 功能码,标识读取保持线圈寄存器的值
byte[8] byte[9]: modbus将要读取的保持寄存器的起始地址
byte[10] byte[11]:modbus将要读取的保持寄存器的个数

応答パッケージをもう一度見てみましょう。

ここに画像の説明を挿入

応答パケットの具体的な分析は次のとおりです。

byte[0] byte[1]: 00 76 为消息号,与请求包相同
byte[2] byte[3]: 00 00 为modbus强制标识
byte[4] byte[5]: 00 17 modbus报文的长度,往后数,一共也是23个字节,能够正确对应
byte[6]: 01 为从站编号
byte[7]: 03 功能码,与请求包的功能码相同
byte[8]:读取到的数据长度的总长度,往后数一共20个byte,与之对于。
byte[9] byte[10]:第一个保持寄存器的数据,2个byte
byte[11] byte[12]:第二个保持寄存器的数据,2个byte,此处为00 41 ,也就是65
byte[13] byte[14]:第二个保持寄存器的数据,2个byte
........
byte[27] byte[28]:第10个保持寄存器的数据,2个byte

0x06 参考記事

  • https://blog.csdn.net/as480133937/article/details/123219425
  • https://baijiahao.baidu.com/s?id=1728421275380437231&wfr=spider&for=pc
  • https://www.likecs.com/show-94474.html

おすすめ

転載: blog.csdn.net/qq_45590334/article/details/125259925