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秒ごとにカチっと動作音がします。