Pythonによるmodbus TCP通信の方法

Pythonによるmodbus TCP通信の方法をご紹介します。

Modbusとは?

ModbusはModicon社が1979年、同社のプログラマブルロジックコントローラ (PLC) 向けに策定したシリアル通信プロトコルである。産業界におけるデ・ファクト標準の通信プロトコルとなり、現在では産業用電子機器を接続する最も一般的手段となっている。
Wikipediaより

条件

  • Ubuntu 16.04 LTS
  • Python 3.5.2

使用するライブラリ

pyModbusTCPというライブラリを使用します。
詳細は以下のサイトを参照してください。

https://pypi.org/project/pyModbusTCP/

インストール

以下のコマンドを実行してインストールします。

$ sudo pip install pyModbusTCP

接続サンプル

ホストを指定して接続し、読み込んだレジスタを表示するサンプルを実行します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# read_register
# read 10 registers and print result on stdout

# you can use the tiny modbus server "mbserverd" to test this code
# mbserverd is here: https://github.com/sourceperl/mbserverd

# the command line modbus client mbtget can also be useful
# mbtget is here: https://github.com/sourceperl/mbtget

from pyModbusTCP.client import ModbusClient
import time

SERVER_HOST = "target_host" # 接続先ホスト
SERVER_PORT = 502

c = ModbusClient()

# uncomment this line to see debug message
#c.debug(True)

# define modbus server host, port
c.host(SERVER_HOST)
c.port(SERVER_PORT)

while True:
    # open or reconnect TCP to server
    if not c.is_open():
        if not c.open():
            print("unable to connect to "+SERVER_HOST+":"+str(SERVER_PORT))

    # if open() is ok, read register (modbus function 0x03)
    if c.is_open():
        # read 10 registers at address 0, store result in regs list
        regs = c.read_holding_registers(0, 10)
        # if success display registers
        if regs:
            print("reg ad #0 to 9: "+str(regs))

    # sleep 2s before next polling
    time.sleep(2)

出典:https://github.com/sourceperl/pyModbusTCP/blob/master/examples/read_register.py

実行結果

接続に成功すると以下のように表示されます。

$ python3 read_register.py
reg ad #0 to 9: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
reg ad #0 to 9: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
reg ad #0 to 9: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
reg ad #0 to 9: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
reg ad #0 to 9: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
reg ad #0 to 9: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
reg ad #0 to 9: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
reg ad #0 to 9: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

詳細な使用方法

pyModbusTCPの詳細な使用方法は以下のサイトをご参照ください。

https://pymodbustcp.readthedocs.io/en/latest/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です