Armadilloフォーラム

USB to RS485双方向コンバータを使用した通信について

rikuya-h

2025年3月28日 10時02分

お世話になっております。

Armadillo-IoT G4 にて開発を進めておりますが
RS-485通信を行う必要が出てきたため、以下のUSBとのコンバータを使用
https://www.switch-science.com/products/8426

RS-485通信にあまり知見が無く...試しに
PCとArmadillo-IoT G4間で通信させたく思うのですが
上手く通信させる事が出来ておりません。

ご教授頂けると大変助かります。

※PC(ドライバーインストール済み)及びArmadillo側でのコンバータ認識は出来ております。

コメント

at_shota.shimoyama

2025年3月28日 12時04分

アットマークテクノの下山です。

まず、お互いのコンバータのA+・B+・GNDを接続した状態であることを確認してください。
PC側のコンバータをTeratermなどで表示している場合は、改行コードを送信・受信ともにLFに設定してください。

■通信設定
G4の通信設定を以下のように設定します
ここでは、baudrateを115200として設定してます、PC側も同じbaudrateに設定してください

armadillo:~# stty -F /dev/ttyACM0 speed 115200 parenb -parodd brkint ignpar -icrnl -ixon -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

■G4から送信する場合
以下のコマンドでPC側に文字は表示されますでしょうか?

armadillo:~# echo "hello" > /dev/ttyACM0

■G4が受信する場合
以下のコマンドを実行してから、PC側で文字入力+EnterでG4側のコンソールに文字は表示されますでしょうか?

armadillo:~# while read var ; do echo $var ; done < /dev/ttyACM0

よろしくお願いします

> アットマークテクノの下山です。
>
> まず、お互いのコンバータのA+・B+・GNDを接続した状態であることを確認してください。
> PC側のコンバータをTeratermなどで表示している場合は、改行コードを送信・受信ともにLFに設定してください。
>
> ■通信設定
> G4の通信設定を以下のように設定します
> ここでは、baudrateを115200として設定してます、PC側も同じbaudrateに設定してください
>

> armadillo:~# stty -F /dev/ttyACM0 speed 115200 parenb -parodd brkint ignpar -icrnl -ixon -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
> 

>
> ■G4から送信する場合
> 以下のコマンドでPC側に文字は表示されますでしょうか?
>

> armadillo:~# echo "hello" > /dev/ttyACM0
> 

>
> ■G4が受信する場合
> 以下のコマンドを実行してから、PC側で文字入力+EnterでG4側のコンソールに文字は表示されますでしょうか?
>

> armadillo:~# while read var ; do echo $var ; done < /dev/ttyACM0
> 

>
> よろしくお願いします
上記手順でPC側及びG4側で文字出力を確認出来ました!
ありがとうございます。

続けてで恐縮ですが、
これらで実験的にModbus Protocolを用いた通信を行いたいのですが、
どの様に設定し、操作すれば良いかもご教授頂けると大変助かります。

at_shota.shimoyama

2025年3月28日 20時25分

rikuya-h 様

Modbus/RTUをシェルスクリプトで行うのは結構大変なので、PythonのPyModbusなどを使用するのがいいんじゃないかと思います。

Modbus/RTUで通信する際、G4はマスター側でしょうか?

> rikuya-h 様
>
> Modbus/RTUをシェルスクリプトで行うのは結構大変なので、PythonのPyModbusなどを使用するのがいいんじゃないかと思います。
>
> Modbus/RTUで通信する際、G4はマスター側でしょうか?
実運用でもPythonを使用しようと考えていました。
G4がマスター側になります。

at_shota.shimoyama

2025年3月31日 10時41分

> 実運用でもPythonを使用しようと考えていました。
> G4がマスター側になります。

本来はABOSDEでPythonプロジェクトから実行環境などを用意するのが望ましいのですが、
実験的に手っ取り早く確かめるなら、ABOS上に直接インストールしてスクリプトを実行することもできます。

■パッケージ等のインストール

armadillo:~# apk update
armadillo:~# apk add python3 py3-pip
armadillo:~# pip3 install pymodbus pyserial --break-system-packages

■スクリプト
例えばスレーブIDが1のデバイスの入力レジスタ0x07d0から10ワード読み取る(read_input_registers)処理は次のようになります。
そのあたりやbaudrateについては適宜変更してください。

from pymodbus.client import ModbusSerialClient
 
client = ModbusSerialClient(
    port='/dev/ttyACM0',
    baudrate=115200,
    parity='N',
    stopbits=1,
    bytesize=8,
    timeout=3,
)
 
if client.connect():
    print("client.connect() OK")
else:
    print("client.connect() Failed")
    exit()
 
reg = client.read_input_registers(0x07d0, count=10, slave=1)
if not reg.isError():
    r = reg.registers
    print(r)
else:
    print("Error read_input_registers 0x07d0")
 
client.close()

また、/dev/ttyACM0がデバイスファイル名になるだけで、RS-485やModbus/RTUの使用方法においてArmadilloに固有の操作などは特にありませんので、インターネットから得られる一般的な情報を参考にできます。
PyModbusの使用方法などについては
https://pymodbus.readthedocs.io/en/v3.8.6/
などを参照してください。