Modbusの利用 (4) CONPROSYS その3 Pythonで制御①

  • Modbusの利用 (2) CONPROSYS その1 設定と確認
  • Modbusの利用 (3) CONPROSYS その2 出力の設定と確認

の2回のModbus記事で、CONPROSYSシリーズのCPS-MCS341-DS1-131の本体にある入出力ポート(DIOx)の動作を確認しました。ここでは、Windows10からModbus/TCPのプロトコルで制御をします。

コラム Python3

 2020年に入りPython2.xはサポートが終了しました(4月まで延長された)。したがって、Python3を使います。Python3は2019年末に3.8になりました。それまでの3.7とは設計方針が変更されたようですが、普通の利用者には影響はないようです。

 筆者のPythonプログラミングではMuエディタを使用しています。このMuはPython3.6が実行されます。Windows10ではPython3.8.1をインストールしました。コマンドプロンプトでyで実行されます。同時にインストールされたpipでライブラリをインストールすると、C:\Users\ユーザ名\AppData\Local\Programs\Python\Python38\Lib\site-packagesにインストールされます。これは3.7から変更されたようです。それまでは、C:\Users\ユーザ名\AppData\Roaming\Python\Python36\site-packagesだったようです。

 筆者は、2.7やほかのバージョンをインストールしたり削除したり頻繁に行っているので、環境が異なるかもしれません。コマンドプロンプトでpip install xxxxを行ったら、プログラム内で、

import sys
sys.path.append('C:\\Users\\ユーザ名\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages')

とpathを通すことで、そのライブラリを利用できます。

 Muを使わずコマンドプロンプト内でpy XXX.pyと実行するときには、上記のpathの追加は不要です。

ライブラリの導入

 コマンドプロンプト内で、つぎのように、pyModbusTCPライブラリをインストールします。

pip install pymodbustcp

Lチカ

 エラー処理はまったくしていません。出力に設定されたDIO3をON/OFFします。前回LEDをつないでいたので、約3秒ごとに点滅します。

import sys, time
sys.path.append('C:\\Users\\ユーザ名\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages')

from pyModbusTCP.client import ModbusClient

SERVER_HOST = "192.168.111.20"
SERVER_PORT = 502

c = ModbusClient()
c.host(SERVER_HOST)
c.port(SERVER_PORT)
c.open()

while 1:
    c.write_single_coil(3, 1)
    time.sleep(3.14)
    c.write_single_coil(3, 0)
    time.sleep(3.14)

 もう一つの出力DIO2に、12Vのリレーをつなぎました。

import sys, time
sys.path.append('C:\\Users\\ユーザ名\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages')

from pyModbusTCP.client import ModbusClient

SERVER_HOST = "192.168.111.20"
SERVER_PORT = 502

c = ModbusClient()
c.host(SERVER_HOST)
c.port(SERVER_PORT)
c.open()

while 1:
    c.write_single_coil(2, 1)
    time.sleep(3.14)
    c.write_single_coil(2, 0)
    time.sleep(3.14)

 約3秒ごとにカチっと動作音がします。