以前からModbus over rs485通信を使ってみたかった。しかし、この通信方法を使った製品で日本製はどれも高すぎるのでプライベートで使う値段ではない。
そこでAliExpressだ。賛否両論なのは当然知っているが、とりあえずプライベートで電子工作をしている人にとってはなによりの味方である。
使用しているのはAliExpress内の「モジュールrs485 ttl通信4チャンネル入力リレーモジュール12v/24v modbus rtu 4チャンネルリレーモジュール」です。現在は取り扱いは終了しているようですが、AliExpressの中の他のブースでも似たようなボードを販売されているようなので、同じようなものを選んでも使用できるのではないかと思います。
とにかく販売しているホームページ上で資料が少なすぎる。中国の方はこれを見ただけでスラスラって使えてしまうのだろうか。私はスラスラとは行かなかったので、ここにチュートリアルというか、すべてを知り尽くしているわけではない私が知り得た限りをここに記載しようということです。
私の開発環境は
OS = Debian (Desktop = LXQt)
Programming Language = Python
Install Library = PySerial
PC Side USB-RS485 Conversion adapter = UsbにRS485 485変換アダプタ
Example-1
# blog:https://blog.goo.ne.jp/soratobu_macaronipenguin
# FaceBook:https://www.facebook.com/akihiro.sugawara1
import serial
import time
send_data = [None] * 2
send_data[0] = "01 05 00 01 01 00 9d 9a" #Relay No.1 ON
send_data[1] = "01 05 00 01 00 00 9c 0a" #Relay No.1 OFF
relay_status = True
#c_port = 'COM3' # Windows
#c_port = '/dev/ttyCH341USB0'
c_port = '/dev/ttyUSB0' #Debian
def plus(i):
return(int(i,16))
def send_process(i):
#送信データを作成
l_d1 = list(map(plus,send_data[i].split()))
send_binary = bytes(l_d1)
# pyserialで送信
with serial.Serial(port=c_port,baudrate=9600,bytesize=8,parity='N',stopbits=1,timeout=0.2) as ser:
res = ser.write(send_binary)
b_reply = ser.read(8)
# print(b_reply)
#メイン
while True:
send_process(relay_status)
# print(relay_status)
i = "0"
while i != "1":
i = input("1を入力してください")
relay_status = not(relay_status)
参考文献は
M-System Modbusプロトコル概説書
Twins Chip Modbus RTU 4CH 12V RS485 module