Armadilloフォーラム

uImage-x1-v4.9-at16でRS-485(Modbus)通信ができなくなりました

nkd

2020年12月21日 14時18分

WMS-PE1NというModbus製品を2台つなげた時、
2台目と通信するとmodbus_read_input_registersがタイムアウトとなってしまいます。
たまに通信成功となります。
1台だけつなげた際には発生しません。
at14では発生しません。

at16の影響のようなのですが
何が問題でしょうか。

コメント

at_syunya.ohshio

2020年12月24日 17時10分

大塩です。

> WMS-PE1NというModbus製品を2台つなげた時、
> 2台目と通信するとmodbus_read_input_registersがタイムアウトとなってしまいます。
> たまに通信成功となります。
> 1台だけつなげた際には発生しません。
> at14では発生しません。
>
> at16の影響のようなのですが
> 何が問題でしょうか。

情報ありがとうございます。
いただいた情報を基に調査いたします。

念の為、以下内容についてお教えいただけますでしょうか。
・ご利用のG3L でmodbus 通信をする際のrs485 設定
・G3Lと2台のWMS-PE1Nとの接続方法

以上です。

nkd

2020年12月25日 9時36分

ご対応ありがとうございます。
> ・ご利用のG3L でmodbus 通信をする際のrs485 設定
> ・G3Lと2台のWMS-PE1Nとの接続方法
回答いたします。
・rs485の設定:19200bps、パリティなし、ストップビット1、データ長8bit となります。
・接続方法:G3L-WMS-WMS を全長で1メートルほど有線で接続しています。

以上よろしくお願いいたします。

at_syunya.ohshio

2021年1月6日 18時53分

大塩です。

> 回答いたします。
> ・rs485の設定:19200bps、パリティなし、ストップビット1、データ長8bit となります。
> ・接続方法:G3L-WMS-WMS を全長で1メートルほど有線で接続しています。

情報ありがとうございます。

追加のご質問なのですが、以下の情報をいただけますでしょうか。
・各WMSのスレーブID
・modbus_read_input_registers がエラーとなるWMS(終端抵抗のついているWMS or 中間のWMS)
・「2台目と通信するとmodbus_read_input_registersがタイムアウトとなってしまいます。」との情報ですが、2台つながっている場合でも、1台目とは通信が必ず成功するか。

以上です。

nkd

2021年1月8日 9時39分

回答いたします。
> ・各WMSのスレーブIDは
 WMS(1):スレーブID=1
 WMS(2):スレーブID=2
 としています。

> ・modbus_read_input_registers がエラーとなるWMS(終端抵抗のついているWMS or 中間のWMS)
終端抵抗のついているWMSとは限りません。
G3LからはスレーブIDの小さい順に通信を行うようにしていて
エラーとなるのは必ずスレーブIDが大きい側となります。
WMS(1)のスレーブIDを3とすると、今度はWMS(1)でエラーが発生するようになります。

> ・「2台目と通信するとmodbus_read_input_registersがタイムアウトとなってしまいます。」との情報ですが、2台つながっている場合でも、1台目とは通信が必ず成功するか。
そのとおりです。1台目との通信は必ず成功します。

以上よろしくお願いいたします。

at_syunya.ohshio

2021年1月14日 11時47分

大塩です。

> 回答いたします。
> > ・各WMSのスレーブIDは
>  WMS(1):スレーブID=1
>  WMS(2):スレーブID=2
>  としています。
>
> > ・modbus_read_input_registers がエラーとなるWMS(終端抵抗のついているWMS or 中間のWMS)
> 終端抵抗のついているWMSとは限りません。
> G3LからはスレーブIDの小さい順に通信を行うようにしていて
> エラーとなるのは必ずスレーブIDが大きい側となります。
> WMS(1)のスレーブIDを3とすると、今度はWMS(1)でエラーが発生するようになります。
>
> > ・「2台目と通信するとmodbus_read_input_registersがタイムアウトとなってしまいます。」との情報ですが、2台つながっている場合でも、1台目とは通信が必ず成功するか。
> そのとおりです。1台目との通信は必ず成功します。

情報ありがとうございます。

渡辺電機製 WMB-D108R を用いて再現試験を行いましたが、
at16 環境下で スレーブ1、スレーブ2共にレスポンスが返ってくることを確認しました。

試験に使用したテストプログラムを送付致しますので、
こちらで同様の現象が発生するかご確認いただけますでしょうか。

■使用方法
・libmodbus_test.tar.gz を以下コマンドで解凍し、ディレクトリに入ります。

tar zxf libmodbus_test.tar.gz
cd libmodbus_test

・libmodbus_test.c 内の REGISTER_ADDRESS定数を、読み込みたいアドレスに変更します。
・必要に応じて、modbus_read_input_registersの読み込みバイト数を変更します。
make コマンド で実行ファイルを生成し、以下コマンドでコードを実行します。

./libmodbus_test /dev/ttymxc1

以上です。

ファイル ファイルの説明
libmodbus_test.tar.gz

nkd

2021年1月14日 14時50分

大塩様
ご確認ありがとうございます。
WMB-DIO8Rでの確認ありがとうございました。

WMB-DIO8Rはこちらでも確認していて問題ないことが分かっております。
WMS-PE1Nで問題が発生するのです。
状況を整理しますと
1.WMS-PE1Nを2台つなげた時、1台目は正常、2台目はエラーになる。(たまに正常)
2.1台目というのはModbusIDが小さいほう(先に通信しているほう)でエラーは一度も発生しない。
3.接続状況や機器を変更せず、G3Lをat14に戻すとエラーは発生しない。
4.WMB-DIO8Rなどほかの機器では発生しない。

引き続きよろしくお願いいたします。