1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pymodbusざっくりと理解

1
Posted at

Slide 1:イントロダクション

この資料では、Pythonから産業機器と通信するための代表的なプロトコル「Modbus TCP」を、pymodbusを使って実装する方法を解説します。PLCやセンサとPythonをつなぎ、制御・取得・可視化へ広げる第一歩として理解していきましょう。

5de9673f-01.png

Slide 2:Modbus TCPの構造

Modbus TCPは、従来のModbusメッセージをTCP/IP上にカプセル化した通信規格です。Ethernet・IP・TCPの上にModbus ADUが乗り、CRCはTCP層が保証するため不要になります。ITネットワークと親和性が高い点が特徴です。

5de9673f-02.png


Slide 3:Client / Serverモデル

Modbus TCPはClient-Server型通信です。PythonスクリプトがClientとして要求を出し、PLCやセンサがServerとして応答します。Server側からは自発通信しない点が重要で、制御の主導権は常にClient側にあります。

5de9673f-03.png


Slide 4:データモデル(4領域)

Modbusではデータは4種類に分類されます。入力接点、コイル、入力レジスタ、保持レジスタです。特に保持レジスタは読み書き可能な16bitデータで、設定値や制御値のやり取りに多く使われます。

5de9673f-04.png


Slide 5:pymodbusの準備と注意点

pymodbusにはv2系とv3系があります。本資料ではv3系を前提とします。古いチュートリアルはv2系記述が多いため注意してください。importパスやClientクラスが異なる点がトラブル原因になります。

5de9673f-05.png


Slide 6:Step1 接続の確立

まずはModbus TCPサーバへ接続します。IPアドレスとポート502を指定し、connect()で接続確認を行います。通信後は必ずclose()するか、with構文で安全にクローズすることが重要です。

5de9673f-06.png


Slide 7:Step2 データ読み出し

read_holding_registersで保持レジスタを読み出します。重要なのはアドレス指定です。PLCの40101番地は、pymodbusでは0番になります。0-basedと1-basedのズレは最頻出のハマりどころです。

5de9673f-07.png


Slide 8:アドレスの考え方

pymodbusのアドレスは常に0始まりです。一方、PLCマニュアルは40101など1始まり表記が一般的です。「PLCアドレス −1」がpymodbusアドレス、というルールを必ず覚えてください。

5de9673f-07.png


Slide 9:Step3 データ書き込み

write_registerやwrite_registersで制御値を書き込みます。これは機器の動作に直接影響するため、アドレスと値の確認が重要です。誤った書き込みは想定外動作を招く可能性があります。

5de9673f-08.png

Slide 10:32bit Floatの扱い

Modbusは16bitが基本単位です。32bit浮動小数点は2レジスタを結合して表現します。その際、バイト順・ワード順(エンディアン)の違いを正しく処理しないと、値が破綻します。


Slide 11:エンディアン処理

BinaryPayloadDecoderを使うことで、エンディアンを指定して安全にFloatを復元できます。PLCごとにBig/Littleの組み合わせが異なるため、仕様書を必ず確認しましょう。

5de9673f-09.png

Slide 12:非同期通信(Async)

同期通信では応答待ち時間が発生します。Async版Clientを使うと、複数リクエストを並列処理でき、通信待ちの間に他処理を進められます。周期取得や高頻度通信に有効です。

5de9673f-10.png


Slide 13:擬似PLCサーバ

pymodbusではサーバ側もPythonで構築できます。実機がない環境でも、擬似PLCを立てて開発・テストが可能です。レジスタ初期値を定義し、Client側動作を安全に検証できます。

5de9673f-11.png


Slide 14:実践構成例

Raspberry PiをClientとして、産業用センサと通信する構成例です。取得した生データをスケーリングし、ログ保存や可視化へ展開できます。ModbusはOTとITをつなぐ入口です。

5de9673f-12.png


Slide 15:まとめ

pymodbusは、Pythonの柔軟性と産業機器の堅牢性をつなぐ強力なツールです。まずは正しいアドレス理解と通信確認から始め、データ分析やAI連携へ発展させていきましょう。

5de9673f-13.png

5de9673f-14.png

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?