Armadilloフォーラム

USBシリアルtoイーサについて

aoi_mizo

2015年5月28日 13時41分

初めまして、あおい精機 溝上と申します。

Armadillo420とバッファロー社製のUSB232C変換アダプタを使用して、シリアル-イーサ変換通信を行おうとしております。
USB232Cアダプタの認識は正常に出来ており、通常の通信自体は成立し出来ている状態です。
しかし、これを連続的に通信(10回程度の送受信)を行うとUSB232Cからのデータ(イーサ側での受信データ)に抜けが出ているようです。
UARTのシリアルポートを使用しての通信では起きない現象なのですが、
USB232Cを使用する事で受信エリアのバッファメモリの使い方などに違いがあるのでしょうか。
また、対処方法などありましたら御教授願えないでしょうか。

コメント

at_takashi.sasayama

2015年5月28日 14時10分

笹山です。

> Armadillo420とバッファロー社製のUSB232C変換アダプタを使用して、シリアル-イーサ変換通信を行おうとしております。

ご使用されている USB-RS232C 変換アダプタの型番を教えていただけないでしょうか?

現行品では、また状況が違うかもしれませんが、
バッファロー社製の USB-RS232C変換アダプタ では搭載されているチップが
FTDI と Prolific のものが存在したと思います。

Prolific チップの物では問題が発生するが、 FTDI チップの物に変更すると
問題無いというケースもありましたので、
USB-RS232C 変換アダプタに搭載されているチップが気になります。

溝上です。

型番はBSUSRC06シリーズとの記載が本体にあります。
http://armadillo.atmark-techno.com/node/1419
にて動作確認されている、BSUSRC0605BSだと認識しております。
その他にもFTDI社製のFT232RLのICが搭載されている基板を使用しても同様の現象が出る状態です。

いかがでしょうか。USB232C側に問題ありますでしょうか。

at_takashi.sasayama

2015年5月28日 15時07分

笹山です。

> いかがでしょうか。USB232C側に問題ありますでしょうか。

ご確認いただきありがとうございました。
FTDI社製ですので、当方が懸念していた問題は無いと思います。

こちらでも再現試験を行ってみます。
お手数なのですが、問題が発生しました環境の各種情報を教えていただけないでしょうか?

・linuxバージョン
・ユーザーランドバージョン
・USB-RS232C変換アダプタを接続しているUSBポート(上段、下段)
・シリアルポートの各種設定値
・再現手順
など

どうぞよろしくお願いいたします。

溝上です。

linuxバージョン linux-2.6.26-at23
ユーザーランドバージョンは分かりませんが、atmark-dist-20150223.tar.gzを使用して作成しております。
USBポートに関しては上下段ともに同じ現象が出ます。
シリアルポートの設定は 9600bps 7 1 even ハンドシェークなし にて設定しております。
再現手順はこちらと同様の環境が可能かは不明ですが、シリアル通信の相手先としてバーコードリーダを接続しています。
相手先がバーコードリーダでは無くても何らかのコマンド受信に対して返答コマンドを送信するような機器との接続環境であれば再現可能ではないかと思います。
イーサ側よりコマンドを送信して、イーサ側にて返答コマンドを受信確認とれた後、直ぐにまたコマンドを送信する。
の繰り返しで再現できると思います。

お手数ですが、宜しくお願い致します。

at_takashi.sasayama

2015年6月1日 18時14分

笹山です。

各種情報のご連絡ありがとうございました。

こちらでも Armadillo-420 + SRC06-USB で再現試験を行っているのですが、
現状、再現させることができていません。(試験は後述する環境で行っています。)

数点気になったことを以下に記載します。

1. データ抜けの確認方法

データ抜けが発生したことは、どのような方法で確認されているのでしょうか?
例えば、以下の構成ですとPCでテストアプリを用いて受信データを確認など。

バーコードリーダ <---> USB-RS232C <---> Armadillo-420 <---> eth0 <---> PC

2. seri2eth のデバッグログ

seri2eth のデバッグログを有効にすると、ネットワーク、シリアルでデータを受信した際に、そのサイズが出力されます。
このログから、問題発生時にバーコードリーダーが Armadillo へデータを返しているかが調べられますので、
確認をしてみてください。

デバッグログの例

socket data receive, size : 5  // ネットワークで 5 byte受信、データはシリアルに送られます。
call select()
serial data receive, size : 5  // シリアルで 5 byte受信、データはネットワークに送られます。
call select()

atmark-dist/user/seri2eth/seri2eth.c

 27 /* //////////////////// macro define ///////////////////// */
 28 #define  __DEBUG__ //この行を追加して、atmark-dist をリビルドします。
 29 #ifdef __DEBUG__

3. フロー制御
バーコードリーダーはフロー制御に対応していないのでしょうか?
対応していれば、フロー制御ONにすると現象が変わったりしないでしょうか?

■試験環境

Armadillo-420 --- ttyUSB0 --- <シリアル> --- ttyUSB1 --- ATDE5(PC)
     └---------- eth0 --------- <LAN> ---------eth0 -------┘

/etc/config/serial.conf

SOCKPROTO 0
CONNECTADDR 0.0.0.0
BAUDRATE 9600
DATALEN 2  // データ長       7bit
PARITY 2   // パリティビット even
STOPBIT 0  // ストップビット 1bit
FLOWCTRL 0 // フロー制御     なし
PORTNO 21347

■試験内容

バーコードリーダーの代替として シリアルの受信データを、そのまま返信するエコープログラムを用い、
ネットワーク経由で送信したデータと、受信したデータが一致するかを確認。

1. Armadillo-420 で siri2eth -d /dev/ttyUSB0 を実行
2. ATDE5 で 添付の seri2eth-test.rb を実行する
3. seri2eth-test.rb を完了後に、送信ファイルと受信ファイルに差があるかをチェック

seri2eth-test.rb 実行例

ruby seri2eth-test.rb <Armadillo-IPアドレス> <seri2ethポート番号> <シリアルデバイス名> <送信ファイル> <受信ファイル>
[ATDE5]$ ruby seri2eth-test.rb 192.168.0.2 21347 /dev/ttyUSB1 test.dat recv.dat

seri2eth-test.rb を実行時に以下のエラーが出る場合は、

seri2eth-test.rb:2:in `require': no such file to load -- serialport (LoadError)
        from seri2eth-test.rb:2

以下のコマンドを実行してください。

[ATDE5]$ gem install serialport 
ファイル ファイルの説明
seri2eth-test.rb seri2eth テスト用 rubyプログラム

笹山様 調査・回答ありがとうございます。

eth0の先はPLCになります。
バーコードリーダ <---> USB-RS232C <---> Armadillo-420 <---> eth0 <---> PLC
PLC側の問題と疑問はありましたが、現状UARTにて問題無く認識できていて、それをUSBに変えただけでこのような現象になったのでどうしてもArmadillo側を疑ってしまいました。
どうやらPLCに何か問題がありそうです。再度PLC側の見直し含めて、ご教授頂いた内容を確認させてもらいます。

また何かありましたら質問させて頂きます。お手数をお掛けしました、ありがとうございました。

ちなみに添付して頂いたseri2eth テスト用 rubyプログラムはATDE3でも使用可能でしょうか。

at_takashi.sasayama

2015年6月2日 11時04分

笹山です。

> ちなみに添付して頂いたseri2eth テスト用 rubyプログラムはATDE3でも使用可能でしょうか。

先に添付したものを ATDE3 で動作させるには、Rubyバージョンの関係で少し変更が必要ですね。
ATDE3 では今回添付しています seri2eth-test-atde3.rb をお試しください。

また、ATDE3 では gem install の代わりに、以下のコマンドを実行してください。

[ATDE3]$ sudo apt-get install libserialport-ruby1.8

テストプログラムの挙動を変更するなどして、問題を再現させることができましたら、
お手数ですが、ご連絡をいただけますと有難いです。

どうぞよろしくお願いいたします。

ファイル ファイルの説明
seri2eth-test-atde3.rb seri2eth テスト用 rubyプログラム ATDE3用