Modbusの利用 (7) リレー・ボード
アマゾンで購入した2回路リレー・ボードは、Modbus/RTU対応と書かれています。Windows10から利用します。
SODIAL Modbus-rtu双方向リレーモジュール出力2入力チャンネルスイッチTTL / RS485通信インターフェース
ボード名はXTW1-0095のようです。
●XTW1-0095のおもなスペック
- 動作電圧 12V
- 入力 2ポート、フォトカプラ絶縁
- インターフェース Modbus/RTU、デフォルト・アドレス=01、RS-485通信デフォルト値、9600bps、パリティなし、ストップ・ビット1
- リレー 2チャネル
●接続
USB-RS485アダプタ、XTW1-0095のどちらにも終端抵抗はついていないイレギュラな接続で実験をしています。
●プログラム
USB-RS485アダプタをPCにつないで、デバイスマネージャを見ます。COM8に接続されたようです。
Modbusでは、読み書きの方法がいくつかのファンクションで規定されています。
01 Read Coil Status
04 Read Input Register
03 Read Holding Register
これら三つは、Noneが返ってきました。コマンドは受け付けているようですが、状態を返してはくれないようです。
コード | 機能(ファンクション)名 | 機能 | |
---|---|---|---|
01 | Read Coil Status | スレーブのDOのON/OFFを読み出す | |
02 | Read Input Status | スレーブのDIのON/OFFを読み出す | |
03 | Read Holding Register | スレーブの保持レジスタの内容を読み出す | 装置によって大きく長さや内容は異なる |
04 | Read Input Register | スレーブの入力レジスタの内容を読み出す | |
05 | Force Single Coil | スレーブのDOをONもしくはOFFする | ONは0xff,0x00、OFFは0x00,0x00 |
06 | Preset Single Register | スレーブの保持レジスタの内容を変更する | |
以下略 |
リレーをON/OFFするために、05 Force Single Coilファンクションを使います。データにはアドレスが01と書かれており、1で通信できました。
output_value=1でリレーがON、output_value=0でOFFになります。 二つあるリレーは、その前のパラメータで、0もしくは1を指定して選択します。 |
import sys
sys.path.append('C:\\Users\\ユーザ名\\AppData\\Local\\Programs\\Python\\Python38\\Lib\\site-packages')
import serial
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
PORT = 'COM8'
Address = 1
master = modbus_rtu.RtuMaster(serial.Serial(port=PORT, baudrate=9600, bytesize=8, parity='N', stopbits=1, xonxoff=0))
master.set_timeout(1.0)
master.set_verbose(True)
print("connected")
master.execute(Address, cst.WRITE_SINGLE_COIL, 1, output_value=1)
入力端子IN1、IN2の働きは不明です。スペックにはフォトカプラ絶縁入力と書かれていますが、基板を見るとつながっているのはトランジスタのようです。データシートは、中国版dropboxのような場所にあるようですが、アクセスはできませんでした。
スレーブ・アドレスを変更できないと、このリレーをたくさん同時に使えません。