Armadilloフォーラム

絶縁RS485アドオンモジュールの認識について

kumikoohashi

2018年3月15日 18時09分

お世話になっております。
大橋です。

Arumajiro IoT G3で、絶縁RS485アドオンモジュールを用いて、
三菱のエコモニターからmodbusでデータを取り出したいのですが、
接続したものの、まずdmesgの結果がマニュアルにある

Atmark Techno RS485 board detected at CON1(Rev 1, SerialNumber=xxxx).
https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…

ではなく、こうなります。

Linux version 3.14.79-at17 (atmark@atde6) (gcc version 4.9.2 ( 4.9.2-10) ) #2 SMP PREEMPT Tue Sep 26 10:36:49 JST 2017
Machine model: Atmark-Techno Armadillo-IoT Gateway G3 Board
armadillo_iotg_addon addon: Atmark Techno RS232C board detected at Add-On Module I/F 1(Rev 2, SerialNumber=4135).
armadillo_iotg_addon addon: Atmark Techno RS485 board detected at Add-On Module I/F 2(Rev 2, SerialNumber=2700).

一番下がそれらしいですが、これは、アドオンを認識及び機器を接続できているのでしょうか。
/dev/ttymxc0と/dev/ttymxc1は存在しますが。

絶縁RS485アドオンモジュール
・半二重(スイッチの設定で)
・4・5・6を、機器側のSLD・RS485-・PS485+に接続

libmodbusをもちいたCのテストプログラムの結果は繋がらないというエラーになるのですが、
まず、ハード側の取り付け方に原因があるのかがわかりませんでした。

Opening /dev/ttymxc1 at 19200 bauds (E, 8, 1)
[11][03][80][00][00][01][AF][5A]
Waiting for a confirmation...
ERROR Connection timed out: select

エコモニターはEMU-NM1-MBで、ボーレートなどの接続設定は初期設定のままで、
上のログの通りです。

初歩的な質問ですが、宜しくお願い致します。

コメント

y.nakamura

2018年3月15日 19時14分

中村です。

> Atmark Techno RS485 board detected at CON1(Rev 1, SerialNumber=xxxx).
> ※ https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_pro…
>
> ではなく、こうなります。
>
> Linux version 3.14.79-at17 (atmark@atde6) (gcc version 4.9.2 ( 4.9.2-10) ) #2 SMP PREEMPT Tue Sep 26 10:36:49 JST 2017
> Machine model: Atmark-Techno Armadillo-IoT Gateway G3 Board
> armadillo_iotg_addon addon: Atmark Techno RS232C board detected at Add-On Module I/F 1(Rev 2, SerialNumber=4135).
> armadillo_iotg_addon addon: Atmark Techno RS485 board detected at Add-On Module I/F 2(Rev 2, SerialNumber=2700).
>
> 一番下がそれらしいですが、これは、アドオンを認識及び機器を接続できているのでしょうか。

マニュアルの記述が古いみたいですね。

G3のCON2にRS02を装着して起動すると、

armadillo_iotg_addon addon: Atmark Techno RS485 board detected at Add-On Module I/F 2(Rev 2, SerialNumber=XXXX).

となり、私が使っているG3とRS02でも同じでした。
(CON1はRS232Cではなく別のボードなので引用では削除しました)
使っているカーネルのバージョンは 3.14.79-at19 です。

> libmodbusをもちいたCのテストプログラムの結果は繋がらないというエラーになるのですが、

私もlibmodbusで相手機器と通信をするソフトをCで書いて使ってますが、
起動時のこの表示で、問題なく使えています。

--
なかむら

kumikoohashi

2018年3月16日 11時02分

中村様

わざわざご確認ありがとうございます。
アドオンは正しく認識しているとのことなので
それ以外のところを、一つずつ探ってみます。
カーネルのバージョンも同じでlibmodbus使用とのことで、
Cのコードも原因から外せそうです。助かります。

ありがとうございました。

kumikoohashi

2018年3月21日 13時09分

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

この件ですが、まだ繋がっていないので
libmodbusのmodbus_rtu_set_serial_modeでRS485(1)を設定すると
結果はBad file descriptorでして、これはRS485が使えない環境だと認識されているのでしょうか。
modbus_rtu_get_serial_modeの結果はRS232(0)です。

保守モードで起動して、環境変数にoptargs imx.rs485_uart2=0x03,0,0も登録しましたが、
RS485アドオンを使えるようになるには、他にどんな初期設定が必要ですか。

こちらのブログがやりたいことに近かったので、
> Armadillo-IoT(G3)/X1+RS485アドオン:土壌水分センサー(WD-3-WT-5Y-485M)のデータを取得する
> https://users.atmark-techno.com/blog/615/2846
アドオンボードの差し込み口を123に移したり、
pkg-configともにソースコードからコンパイルしていたlibmodbusを
apt-getでインストールしたものに変更したりもしましたが、変わりません。
(接続の後のreadの関数は、使えるファンクションが03なのでmodbus_read_registersの方を使用していますが)

機器側の通信設定や、ケーブルがRS485に使用できると明記のあるツイストペアケーブルで、断線のないことは確認済です。

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

y.nakamura

2018年3月21日 15時13分

中村です。

> libmodbusのmodbus_rtu_set_serial_modeでRS485(1)を設定すると
> 結果はBad file descriptorでして、これはRS485が使えない環境だと認識されているのでしょうか。
> modbus_rtu_get_serial_modeの結果はRS232(0)です。

この2つを私は使ったことがないのでわからないですが・・・

> > Armadillo-IoT(G3)/X1+RS485アドオン:土壌水分センサー(WD-3-WT-5Y-485M)のデータを取得する
> > https://users.atmark-techno.com/blog/615/2846

のソースを見ると、この例でも使っていないようです。

> 保守モードで起動して、環境変数にoptargs imx.rs485_uart2=0x03,0,0も登録しましたが、

この値ならセットしなくてもデフォルト(初期値)と同じですね。

> RS485アドオンを使えるようになるには、他にどんな初期設定が必要ですか。

RS02のDIP-SWはどうなってますか?
半二重とのことですので、1と2をON、3か4のどちらかをON。

> アドオンボードの差し込み口を123に移したり、

DIP-SWで半二重になっていれば、
DATA線は[2と3]でも[5と6]でも同じです。

Cのソースですけど、
modbus_new_rtu()
modbus_set_slave()
modbus_connect()
まではエラーなしでしょうか?

ここまでOKなら、そのあと
> (接続の後のreadの関数は、使えるファンクションが03なのでmodbus_read_registersの方を使用していますが)
ですね。

最初の投稿で
>> ERROR Connection timed out: select
とのことでしたが、
相手機器の電源が入っていないとか、
相手機器のID設定を間違えているとか、
DATA配線が切れているとか、
DATA配線の極性を間違えているとか、
通信速度などを間違えているとか、
(どれも相手機器と通信ができない状態)
そういうときに、modbus_connect()まではエラーなしで、
modbus_read_registers()でこのエラーが出た記憶があります。

--
なかむら

kumikoohashi

2018年3月22日 16時55分

中村様

たびたびありがとうございました。おっしゃるように、connectまでは正常でした。
Armadillo側の設定は足りているとのことで、ひとまず接続機器の構成を最低限にして、ケーブルの端子が大きすぎて隣に触れていたのを改善し、機器側とアドオンボードの終端処理を一旦外したら、データを取得できました。初歩的な質問ですみませんでした。
終端や機器構成など、機器側のマニュアルを見ながら慎重に戻していきます。

ちなみにmodbus_rtu_set_serial_modeはconnectの後に移したらエラーが出ないことがわかったのですが、何故か繋がらなくなる上に一度それで動かすと、再起動してコメントアウトしてコンパイルしなおさないと戻らないので、削除しました。