2013年1月14日月曜日

リアルタイムのEthernet通信はないか?

複数の計算機を並列で動かしていると、複数の計算機間で「同期をとって」通信をしたくなります。現状、主流のWindowsやLinuxではEthernetが非常に安価で高速なんですが、いかんせんCSMA/CDというでたとこ勝負の通信方式のため、この「同期」のためのリアルタイム性が保障されていません。(そのかわり、「安価」で非常に頑丈な通信システムにできています)ただ、やっぱ10~20台程度の計算機を並列で動かすとき、リアルタイム性の欲しいシステムを作りたいときがあります。2~4Hz程度なら普通のTCP/IPでもなんとかごまかせますが、10Hzでも怪しくなります。(たまに抜けてもいいというならいいんですが、1個のパケットも抜けちゃダメ!と言われるともう保障できません。数時間くらいならいけると思いますが、たいていそういう要求するシステムは計測のログ収集が目的なんでダメです。

こういう時は、やはり昔IBMが出してたToken-Ring方式が確実です。でも性能-コストの関係でかなり初期の段階でEthernetに負けてしまいました。こうなると物理層はEthernetでTokenとばす通信スタックはないもんかと思って探してみたんですが、同じこと考える人がやはりいました。目的が産業用のセンサーやモーター制御のためなんですが、Ether CatとEthernet/IPというのがありました。どちらも一応Openな規格をうたってるんですが、詳しい仕様は会員にならないと入手できないようです。また参考実装もなく、見つかったのは商品のソフトウェアだけでした。(Ethernet/IPはSourceforgeに通信ソフトがあったんですが、使い方が全然わからない。おまけに、windowsのCygwin環境に調整してあるようで、そのままではLinuxでビルドもできない)もうちょっと頑張ってみますが、簡単にわかった仕様をメモしておきます。

1.Ether CAT
文字通り自分の考えてた構想をそのまま実現してます。TCP/IPの通信スタックをまるきり置き換える感じで、Token飛ばして通信するようです。(イメージ下図)


通信のトポロジーは図のようなものだけでなく、通常のツリー型だろうがサポートするとはありましたが、基本的には図のようにMasterからTokenとばして、端のRepeaterでそれを折り返すという感じです。さすがにこの形態なので反応速度は速く、通信量にもよるんでしょうが、100us以下で通信できるとのことです。(通信帯域も80%くらいは使いきれるとのこと)
ただ文字通り産業用機器の通信のようで、専用のI/Fカードとか使います。(通常のEhternetカードでもいけそうなのもありましたが、基本はセットで販売という感じでした)

2.Ethernet/IP
これはTokenとかは特に使ってないようで、UDPで通信するようです。(ただTCPでもできるとあり、その場合のリアルタイム性どうするんだ?という気はしますが)TCP/IPの通信スタックは既存のものを使い、アプリケーション層でなんとかするというタイプです。そのため、通常のLANも使いながらでもOKらしいんですが、その場合のリアルタイム性の保障はどうするんだ?という不安はあります。そのため、リアルタイム性もぐっと落ちて数10msオーダーの反応速度です。(自分的には産業用の機器制御するつもりはないんで、それで十分なんですが)


調べてたら、オムロンとかキーエンスとかのHPが普通にひっかかり、自分は専門外で知らなかったんですが、結構使われてるんでしょうか?(Ethernetは昔から光ファイバーがありましたから、工場等の雑音が多いところでもその気になれば安定して通信できますから、下手に専用の通信機器作るよりは高速で安価にできそうな気もします)

0 件のコメント:

コメントを投稿