KiNOKO-DAQ 関連情報 掲示板

このスレッドに記事を投稿する
前のスレッド | 次のスレッド | 掲示版ホーム

クレートコントローラ(CCP-F)のデータ転送速度について
2017 年 10 月 6 日 16 時 45 分
投稿者: 戸澤

福井大学 戸澤です。

現在、豊伸電子製のクレートコントローラ(CCP-F)を、研究室の CAMAC データ収集環境に取り入れたいと考えております。
先日、クレートコントローラ(CCP-F)を使用し、チャージ積分型ADC(C009)によるデータ取得を試みたのですが、データの転送速度がこれまで使用してきたクレートコントローラ(東陽テクニカ製 CC/7700)と比べて遅く感じました。
そこで、LAMを立たせて(time1)からデータを読み取る(time2)までの時間(delta=time2-time1)を測定したところ、転送速度が非常に遅い状態であることが判明しました。
以下に詳細を記します。

------------------------------
[使用環境]
CAMACクレート:東陽テクニカ製 PS-6000
クレートコントローラ:豊伸電子製 CCP-F(C001)
PCインタフェース:豊伸電子製 CCP-USB (USBケーブルで接続)
ADC:豊伸電子製 C009

CAMAC アクションのテストプログラムを編集し、LAM を立てたモジュールからの読出しを行う際、その前後においてマイクロ秒単位で時刻を測定し、その差を表示させるようにしました。
LAM は、ADC(C009) の GATE に信号を入れることで立たせました。

結果として、
何度か繰り返し LAM を立たせ、時間を測定しましたが、LAM を立たせてからデータ読み込みが完了するまで、約320000[µs](約320[ms])かかっていました。

同様のテストを、以前から使用している東陽テクニカ製のクレートコントローラ(CC/7700)でも行いました。使用環境は以下になります。
[使用環境]
CAMACクレート:東陽テクニカ製 PS-6000
クレートコントローラ:東陽テクニカ製 CC/7700
PCインタフェース:東陽テクニカ製 CC/PCI (フラットケーブルで接続)
ADC:豊伸電子製 C009

こちらの場合、LAM を立たせてからデータ読み込み完了まで、約220[µs]という結果でした。
------------------------------
上記のテストについてまとめたPDFファイルを添付しますのでご参照ください。

CCP-Fの製品ページを見ると、最大転送速度10Mbyte/sということで、実際はもっと速く転送できるかと思うのですが、インタフェースである CCP-USB または PC のドライバ辺りが原因なのでしょうか?

web上で探しても同様な事例が見つからず困っております。
何か解決策はあるでしょうか?

本投稿の内容について、ただいま豊伸電子に問い合わせているところですが、豊伸電子のクレートコントローラ CCP-F を、インタフェース CCP-USB を介してPCに接続し、実際に活用している方がいらっしゃればと思い、こちらにも投稿させていただきました。
同様の事例を経験された方がいらっしゃれば、ご教示いただけると幸いです。
よろしくお願いいたします。

添付ファイル: データ転送速度について.pdf (473 kb)



2017 年 10 月 7 日 18 時 51 分
投稿者: 榎本三四郎

戸澤様,

詳細なテストと記述ありがとうございます.

実は CCP-F を CCP-USB 経由で読みだした場合にスピードが極端に遅くなる問題はちょっと前から認識していました.原因は,CCP-USB の中に入っている USB インターフェースチップで,CAMAC のように一度に少量のデータしか転送しない場合,転送と転送の間に常に 16 ms の間が空いてしまうことによります.つまり,各 CAMAC トランザクションが,常に 16 ms 以上かかってしまうということです.戸澤さんの構成では,時間計測の間で18回の読み出しと一回のクリアがあるので,トランザクションだけでも 304 ms かかることになり,戸澤さんの計測とだいたい一致します.

転送と転送の間に 16 ms の間があくのは,CCP-USB の中にある USB チップ (FT232) の仕様です.このチップは,「効率的にデータ転送するために」内部バッファが一杯になってからまとめて転送するようになっており,16 ms たってもバッファが一杯にならないときだけ,その中身を転送します.CAMAC のデータ量では内部バッファが一杯になることはないので,毎回 16 ms かかることになります.

以前,首都大学東京の汲田さんの協力で,製品に付属の豊伸のソフトウェアを Windows で使って速度を計測してもらったことがあったのですが,それでも Linux の camdrv と同程度のスピードしか出ませんでした.

これは使用している USB チップの問題で,CCP-F 自体も,USB も,ずっと速くデータを転送する性能を持っています(1000倍くらい).ハードウェアの問題なので,ドライバでの対処は難しそうです(多チャンネル読み出しの場合に限り,先に CAMAC コマンドをまとめて送り出して,その後データをまとめて読むことにより,ある程度の性能向上は見込めますが,ドライバの変更が必要で,限られた用途への限られた性能向上のため,現状では実装する予定はあまりありません).

現在豊伸に問い合わせ中とのことで,もし情報を得られれば,ぜひ教えていただきたいです.



2017 年 10 月 7 日 19 時 17 分
投稿者: 榎本三四郎

今 FT232 のマニュアルを見直していて気づいたのですが,16 ms の待ち時間を変更する方法がありそうです.今はデバイスが手元になくてすぐに試せないのですが,来月くらいに機会を見つけてやってみようと思います.うまく行くかは分かりませんが....



2017 年 10 月 10 日 14 時 19 分
投稿者: 戸澤

榎本様

早速のご回答、詳細なご説明をいただきありがとうございます。

確かに、ご説明いただいたように、「転送と転送の間に 16ms の間が空く」という USB チップ(FT232)の仕様を考慮すると、計測の結果とほぼ一致するということで納得できますね。
念のため、CCP-USB の側面カバーを開けて、中身を確認したのですが、USB チップというのは添付でお送りする写真の赤丸で示した部分のことでしょうか?
こちら、写真ではわかりづらいですが、よく見ると FT232 ではなく、FT245RL と書かれていました。こちらでも仕様は変わらないでしょうか?

また、豊伸電子に問い合わせたところ、以下のような回答が来ました。該当する部分をそのまま転送します。

------------------------------
お問い合わせいただいたクレートコントローラの速度についてですが
ご使用いただいているCCP−USBが転送速度USB2.0 Full Speed(最大12Mbps)
対応となっているためパラレル通信(PCIなど)と比べ遅くなります。
より速い通信速度のHi Speed(最大480Mbps)に対応したCCP−USBの開発を進めているところです。
(月内に発売を予定しています)

PCの設定変更で幾分速くなるのでお試しください。
設定方法「CCP-USB 設定.pdf」を添付します。

弊社CCP−PCI(PCIバス使用)であればパラレル通信のため通信速度の低下はありません。
対応可能な環境でしたらこちらもご検討ください。
------------------------------

USB チップ等の詳細な説明はありませんでしたが、やはり CCP-USB の転送速度が原因となっているようです。USB2.0 High Speed(最大480Mbps)に対応した CCP-USB の開発を進めているという情報は得られました。

製品の仕様ということで、より転送速度の速いツールを使用することになるかと思いますが、今後、どのように解決していくかは検討中です。

添付ファイル: CCP-USB.jpg (2108 kb)



2017 年 10 月 14 日 14 時 41 分
投稿者: 榎本三四郎

戸澤様

返信が遅くなって申し訳ありません.

使用している USB チップは FT245 です.ドライバのソースを確認したらそうなっていました.FT232 は別プロジェクトで使っていたもので,ちゃんと確認せずに書いていました,申し訳ありませんでした.

FT232 ではないので,前回の投稿に書いた,16 ms の待ち時間を回避できるかもしれない方法は使えません.豊伸の「CCP-USB設定.pdf」にはどのような情報が入っているのでしょうか?差支えなさそうなら教えていただきたいです(私が購入したときには添付されていなかった気がします).もしこれで 16ms 待ち時間の設定を変えられるなら,同じことを camdrv でもできるかもしれません.



2017 年 10 月 16 日 11 時 25 分
投稿者: 戸澤

榎本様

ご回答ありがとうございます。

豊伸電子から送られてきた、「CCP-USB 設定.pdf」を添付します。
Windows の場合の設定方法であったため、私の方では特に試してはおりません。

ちなみに現在のところ、状況によっては CCP-PCI に移行するかもしれないということで、豊伸電子に CCP-PCI に関する情報を問い合わせています。

添付ファイル: CCP-USB 設定.pdf (263 kb)



2017 年 10 月 16 日 11 時 32 分
投稿者: 戸澤

先ほどの PDF ファイルが開けないようですが名前の問題でしょうか。
もう一度添付でお送りします。

添付ファイル: CCP-USB設定.pdf (263 kb)



2017 年 10 月 17 日 22 時 3 分
投稿者: 榎本三四郎

設定方法のアップロードありがとうございます.添付ファイルが開けないのは,掲示板システムで日本語ファイルをちゃんと扱えないのが原因です.昔は大丈夫だったのですが,システム更新で日本語設定が変わって動作しなくなってしまったようです.申し訳ありません.

豊伸の設定は,やはり 16ms の待ち時間を短くするもののようです.そうすると,ハードウェア自体ではその設定ができるはずなので,少し調べてみました.

豊伸のソフトウェアは,チップメーカーである FTDI 社から提供されるドライバを使用しています.そのドライバを経由すれば,16ms を変更できるということです.FTDI のサイトを見る限り,その方法は明示的に書かれていないので,camdrv から同じことをするのは現状ではできません.その代わり,FTDI から提供される Linux 用のソフトウェアを使って設定を変更できるのではないかと思います.

具体的には,FTDI のサイトにある Linux 用 FTD2XX パッケージをダウンロード・インストールし,そのライブラリに提供されている FT_SetLatencyTimer() を呼んでやればいいのではないかと思います.

現時点では CCP-USB の実物が手元にないのですぐにはテストできませんが,数週間中に実機に触れる機会があるので,そのときに試してみたいと思います.



2017 年 10 月 18 日 15 時 41 分
投稿者: 戸澤

ご回答ありがとうございます。

豊伸電子には CCP-PCI の見積りを取ったのですが、設定によって待ち時間 16ms を改善できるかもしれないということであれば、そちらの方法で一度試してみたいと思います。
待ち時間を短縮でき、CCP-USB でのデータ取得が現実的に有効であるということになれば、CCP-PCI の購入は見送ることにしました。

本件について、お手数をおかけしますがよろしくお願いいたします。
私の方でも可能なことは行いたいと思います。



2017 年 11 月 6 日 16 時 7 分
投稿者: 榎本三四郎

遅くなって申し訳ありません。以前の投稿で書いた、FTDI 社のソフトウェアを使って 16 ms の待ち時間を短くするプログラムを作成し、テストしてみました。USB アクセスに対しては、予想通りの高速化を実現できました。機材の関係で実際の CAMAC のモジュールを使ってのテストはできなかったのですが、ここは多分ちゃんと動くと思います。

添付のソフトウェアを使って、USB 転送の待ち時間を 16 ms から 2 ms に変更できます。これにより、8倍の高速化ができ、1ch の読み出しなら 160 Hz 程度、同じモジュールからの 16ch の読み出しでも 25 Hz 程度を実現できると思います。(読み出し手順を工夫すれば 1ch 読み出しでも 500 Hz 程度まで追求できそうです。それでも PCI 接続よりははるかに遅いですが...。)

使用手順は以下のとおりです。(あらかじめ CCP-USB の電源を入れ、接続しておいてください。)

$ tar xvzf FT_SetLatencyTimer-20171106.tgz (これにより FT_SetLatencyTimer ディレクトリができる)
$ cd FT_SetLatencyTimer
$ make
$ sudo ./ft-set-latency-timer

ただ、このソフトウェアは、camdrv と同じデバイスを使うので、同時使用ができません。そのため、事前に camdrv をアンインストールし、このプログラムを実行してから、camdrv を再インストールする必要があります。これを含んだ手順は以下のようになります(コンパイルはできているものとします):

$ cd (camdrvのディレクトリ)/Linux3_CCP_USB
$ sudo make uninstall
$ cd (FT_SetLatencyTimerのディレクトリ)
$ sudo ./ft-set-latency-timer
$ cd (camdrvのディレクトリ)/Linux3_CCP_USB
$ sudo make install

面倒なことに、PC を起動するたび、または CCP-USB を PC に接続するたびにこれを繰り返す必要があります。(CAMAC 本体の電源入れ直しでは上記の手順は必要ありません。USB チップは PC から電源供給されているため。)このために適当なスクリプトを準備しておくと便利かもしれません。

添付ファイル中、FilesFromFtdi2xx 以下のファイルは、FTDI 社の D2XX ソフトウェアパッケージからもってきたものです。「FTDI D2XX Direct Drivers」で検索をすれば、そのパッケージを見つけることができると思います。

機材準備の関係で完全なテストができなかったので、動作報告をいただけると助かります。


添付ファイル: FT_SetLatencyTimer-20171106.tgz (108 kb)



2017 年 11 月 10 日 15 時 27 分
投稿者: 戸澤

待ち時間短縮のプログラムの作成、また、詳細な説明をいただき、ありがとうございます。まだテスト結果はきちんとまとめられていませんが、現在の進捗を報告いたします。

------------------------------
添付のソフトウェアをダウンロードし、ご教示いただいたとおり、
$ tar xvzf FT_SetLatencyTimer-20171106.tgz (これにより FT_SetLatencyTimer ディレクトリができる)
$ cd FT_SetLatencyTimer
$ make
を行ったところ、
ft-set-latency-timer.c: In function 'main':
ft-set-latency-timer.c:40:9: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
for (unsigned i = 0; i < numDevs; i++){
^
ft-set-latency-timer.c:40:9: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code
ft-set-latency-timer.c:52:5: error: 'for' loop initial declarations are only allowed in C99 or C11 mode
for (unsigned i = 0; i < numDevs; i++){
^
make: *** [all] エラー 1
といった内容のエラーが表示され、コンパイルできませんでした。

このエラーの内容について調べたところ、コンパイルする際に「-std=c99」などのオプションを使用してC言語の規格を明示的に指定する必要があるとの情報がありました。
これを参考に、FT_SetLatencyTimer ディレクトリの Makefile を編集し、以下のようにコンパイルする部分に「-std=c99」を追加しました。
l5. $(CC) -std=c99 ft-set-latency-timer.c -o ft-set-latency-timer $(CFLAGS)
Makefile を編集後、再度
$ make
を行ったところ、実行ファイル ft-set-latency-timer が生成されました。

次に、camdrv をアンインストールし、ft-set-latency-timer 実行後、camdrv を再インストールするため、以下の手順を実行しました。
$ cd (camdrvのディレクトリ)/Linux3_CCP_USB
$ sudo make uninstall
$ cd (FT_SetLatencyTimerのディレクトリ)
$ sudo ./ft-set-latency-timer
$ cd (camdrvのディレクトリ)/Linux3_CCP_USB
$ sudo make install
実行後、ひとまず
$ ./camaction_test
を実行してみたところ、うまくいきませんでした。

この件については、以前インストールした際の記録を見直し、Linux3_CCP_USB ではなく、Linux3_CCP_USB_v3 の方でインストールを行っていたので上記の「Linux3_CCP_USB」を「Linux3_CCP_USB_3」に置き換えて再度実行したところ、解決しました。
------------------------------

今後、最初にお送りしたデータと同様の動作テストを実施する予定ですが、camaction_test を実行した様子を見た限りでは、確かに以前よりは表示される速度が速くなっているのを確認できました。
動作テストの結果がまとまりましたら、こちらに改めて投稿させていただきます。



2017 年 11 月 13 日 17 時 28 分
投稿者: 榎本三四郎

コンパイルエラーおよび手順での書き間違い,ご迷惑をおかけしました.戸澤さんのやっていただいたとおりの修正で問題ないです.

動作確認ありがとうございます.とりえあず動作して,速度も改善されているらしいとのことで,良かったです.残念ながら FTDI 社のソフトウェアはソースコードが公開されていないので,同じことを camdrv に実装することはできません.当面は,この手順通りにやるしかなさそうです.時間があれば,FTDI のライブラリを使って camdrv 相当のことをできるようにすることを検討してみます.



2017 年 12 月 19 日 11 時 36 分
投稿者: 戸澤

線源を置いてのデッドタイム測定は行えていないのですが、LAM を立たせてからデータを読み取るまでの転送速度を前回と同様に測定したので、その結果を投稿します。

結果としては、ADC 0〜15ch までの16回の読出しおよび1回のクリアで、287 ms かかっていたものがプログラム実行により 35.8 ms となり、約8倍の高速化が確認できました。
PCI 接続(東陽テクニカ製 CC/PCI)の 220 μsにははるかにおよびませんが、改善することができたという一つの結果として記しておきます。
ご教示いただきありがとうございました。今後ともよろしくお願いいたします。

添付ファイル: CCP-USBデータ転送速度の改善.pdf (427 kb)



2017 年 12 月 19 日 11 時 58 分
投稿者: 榎本三四郎

戸澤様,

詳細な試験とレポートありがとうございます.ほぼ予測していたとおりの性能なので,今までの議論は正しかったということだと思います.このチップセットを使っている限り,2ms以下の待ち時間にはできなさそうなので,このハードウェアではこれが限界だと思います.(その部分だけ別の部品を使えば解決できそうな気もしますが...)

アップロードしていただいたPDFファイルは他の人たちにも役立ちそうなので,camdrv のページからもこの投稿にリンクをつけたいと思います.ありがとうございました.


このスレッドに記事を投稿する