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のような場所にあるようですが、アクセスはできませんでした。
 スレーブ・アドレスを変更できないと、このリレーをたくさん同時に使えません。