IRCS-AUX(仮称)計画

第1期中間報告

〜IRCSを利用した通信の実現の為の事前調査結果〜
〜でも通信理論講座になっちゃった。〜
1.はじめに
ことの始まりは、96年度頃、FEZ師匠がIRCS(別記事参照) の試作版を完成させ、試験運用をしていた時でした。私が何気に「通信に使えま すね」と言ってしまったのが泥沼に足を突っ込む羽目になるきっかけでした……。
2.原理(OSI 1層:物理層)
2.1.前置き
IRCSは別記事に有るように、突き詰めれば赤外線の発光器と受光器であり、 それを使ってリモコン信号を発信したり、受信したりします。
この時リモコンのどのボタンが押されたかと言う信号は0,1のディジタルで 表されています。このどのボタンが押されたかと言う信号の代わりに、普通の文 字コードやらバイナリデータやらを使えば、そのまま普通の通信になります。簡 単ですね。
また、別の見方も出来ます。赤外線の送信器と受信機があるのだから、単純に ディジタル変復調をかけてやれば、そのまま通信器になります。
ちょっと閑話。通信を行うには、電気的にどのような信号の送り方をするか、 とか、送られた信号が正しいか間違ってるかどうやって判断しようか、とか、送 られた信号の順番が合っているかな、とか、色々な問題があります。これを色々 な段階に分けて考える方法として、ISOによるOSIモデル、という分類法が 有ります。
2.2.方式について
さて、実際に通信に使えるのではないか、という自信が出てきたので、次にど のような方式で赤外線を出すのか(どのような変復調方式を使うのか)、と言う 問題を解かなくてはなりません。OSIモデルでは第1層とか物理層とか呼ばれ ています。
面倒な順に行きましょう。PSK方式。これは1つ1つの波形毎に前の波形と どのくらい位相が変わったのか、によって信号を送ります(位相を切り替える: 位相変調)。え、1つ1つ波形調べるの?面倒だ。それにIRCSの受信器の出 力は前後との平均をとった感じ(積分なんですがね)で波形なんて分かりません。 却下。
次。FSK方式。これは1信号毎に周波数をぱちぱち切り替えます(周波数を 切り替える:周波数変調)。でも、IRCSの受信器は1つの周波数しか受信出 来ないようになっています。却下。
最後。ASK方式。これは、1信号毎に、赤外線を出すか出さないか、ぱちぱ ち切り替えます(振幅を切り替える:振幅変調)。IRCSの受信器は 38.4kHz しか受信出来ないので、38.4kHz の信号がくれば1,何も信号がこなければ0、 となります。いけそうですね。
さて、ASK方式もまた細かく分けられます(厳密に言うと、ASK,FSK,PSK と 同列に並んでいるので、ASKを細かく分ける訳では有りません。ただ振幅だけ しか使わないからASKに似ている、と言うだけです)。
PCM方式。一定時間毎に信号が有るか無いかで0,1を区別します(ちょっ と違うけれど)。となると、送信側と受信側で「一定時間」と言うのをずれない 様にしなければなりません。大変だ。もっと他にいい方法無いの?
PNM方式。38.4kHz の信号が何回来るかで0,1を区別します。数えるの? IRCSの受信器で平均をとられちゃってるから数がわからないよ。次。
PWM方式。38.4kHz の信号がどのくらいの長さ続くかで0,1を区別します。 これなら、0にしろ1にしろ、十分な長さ続けさせれば、IRCSの受信器で平 均を取られても平気だ。いけそうですね。
PPM方式。38.4kHz の信号がぽこぽこやってきた時に、その信号と信号の間 隔の長さによって0,1を区別します。……赤外線通信では、そういう事になっ ていますが、本来のPPMは一定時間の中で、いつ信号が来るか、なんですけど、 ま、いいや。PWMに似ていますね。やれそうだ。
以上のような訳で、PWM方式か、PPM方式が使えそうです。実際にどのよ うな波形になるか、考えてみましょう。次のようになります。
図1.PWMおよびPPM波形
PWM波形       0              0              1              0         
                ┌─┐          ┌─┐          ┌─────┐  ┌─┐      
              ─┘  └─────┘  └─────┘          └─┘  └─    
                                                                            
変形PWM波形   0  0      1      0  余計                               
                ┌─┐  ┌─────┐  ┌─┐                              
              ─┘  └─┘          └─┘  └─                            
                                                                            
PPM波形           0      0          1          0                     
                ┌─┐  ┌─┐  ┌─┐          ┌─┐                      
              ─┘  └─┘  └─┘  └─────┘  └──                  
本来のPWMは「図1.上」の様に、信号が来ている部分の長さで0,1を区 別しますが、図を見て分かる様に、やたら長くなります。そこで私が勝手に方式 を考え、信号が来ていない部分の長さも利用してみたものが、「図1.中」です。 短くはなりましたが、最後に余計に信号を出さなければなりません。でも短くな るので、通信速度を上げる事が出来ます。
PPMもそこそこ短くなります。それにもっとも重要な事は、全日本共通の規 格として決められた家電製品協会フォーマット略して家製協フォーマットがPP Mを使っています。すなわち、PPMを使えば赤外線リモコンを使った家電製品 が誤動作する確率を最小にする事が出来ます(詳細は後述)。
2.3.実装方法について
以上の考察により(いままでのは全部机上の空論だったんですね)、変形PW M方式か、PPM方式が使えそうだと言う事になりました。
さて、これを実際に使える様にするには決めなくてはならない事が幾つか有り ます。
まず第1に、図1.で表した、線が上に上がったり(Hi)下に下がったり (Low)しているのは、どうやって表すか。……。言うまでも無く、38.4kHz の信号が有ればHi,無ければLowで問題有りません。
第2に、どのくらいの長さだったら0で,どのくらいの長さなら1なのか。こ れは重要な問題であり、直接に、通信速度や,実現のしやすさにかかわってきま す。まず家製協フォーマットでは基準の長さTを 0.35ms < T < 0.5ms と決 め、PPM波形のうち、Hiの部分の長さをT、Lowの長さは信号が0ならば T,1ならば3Tと決めています。これを前提にし、変形PWMでは、信号が0 ならばT,1ならば3Tとして、実現可能か,どの程度の通信速度になるか考え て行きましょう。
2.3.1.実現の可能性
98を使って実現させる訳ですから、98のシリアルの構造を知らなければな りません。
シリアル(RS-232C)では、シリアルと言うくらいだから1ビットずつ信号が 送られています。しかしながら、CPUがデータを扱う場合は1バイト=8ビッ トずつの方が扱いやすいので、その様な変換を行うICが積まれています。つま り、CPUから1バイトのデータが送られてくれば、1ビットずつ順番にシリア ルに送信し、シリアルから1ビットずつ信号がくれば8ビット分まとめてからC PUに送ります。
CPUからこのICを経由してIRCSを操作する事になります。ここで、I RCSの設計上の理由から、このICの通信速度を 76.8kbaud にしなければな りません(FEZ師匠が別記事で解説していると思いますが)。そうなると、 104μs分の赤外線の送受信の状態が、1バイトにまとめられてCPUで扱われ ます。ここで、CPU側で1バイトのデータをまた1ビットずつに分解し、 13μsごとの赤外線の送受信の状態を調べていけば、HiやLowの連続した 時間を、非常に細かく測定する事が出来ます。実際にIRCSドライバは1ビッ トずつ数え、細かく測定しています。
しかしここで重要な問題が発生します。IRCSドライバは操作している人間 が指定した時に、赤外線の状態を調べるので、パソコンの処理能力をすべて消費 して数える事が出来ます。しかしIRCSを通信に使う場合はいつ信号が来るか わからないので、常に赤外線の状態を監視していなければなりません。となると、 長さを測定する為の処理は、できうる限り高速にしなければなりません。したが って、1バイト分のデータを悠長に1ビットずつに分解して数える事をせず、1 バイト分、つまり104μs分をまとめて数える事にしました。
ここで別の方法も考えられます。受信する側は1msに1度とか、10msに 1度とか、一定時間毎に赤外線の状態を見て、信号が送られてきているようなら ば、受信の為の赤外線の状態監視を始め1ビットずつ数える、と言うものです。
また、組み合わせて、一定時間毎に状態を見て、信号が送られてきているよう ならば、1バイトずつ数えていく事も考えられます。
しかしながら、一定時間毎にしか信号が送られているか否か調べると言うこと は、送信側では、その一定時間以上の長さだけ続けて信号を送る、と言うダミー の信号を送らなければ、受信側ではデータを取りこぼしてしまいます。すると、 そのダミーの信号を送る分だけ、通信速度が落ちてしまいます。
そんなわけで、一定時間毎に監視する事をせず、常に104μs分まとめて監視 する事にしました。
しかしながら、後でわかる事なのですが、家製協フォーマットを採用した場合、 一定時間毎に監視するので構わないのです(本当にダミー信号送っていたのであ った)。いや〜、家電メーカーが集まって知恵を絞って(?)決めた規格だけ合っ て良く出来ているわ〜。はっはっは〜。
さて、104μs分を1バイトとしてまとめて監視する場合、前述の "T" の長 さとの兼合いはどうなるでしょう。最短のTの長さ 0.35ms ならば 3.4バイ ト、最長のTの長さ 0.5ms ならば 4.8バイトとなります。よって約0.4m sとすれば、ちょうど4バイトでぴったりです。
また、104μs分をまとめると言うことは、LowからHiに変わった瞬間や、 HiからLowに変わった瞬間は、CPUに送られるデータが変になってしまい、 数えそこなう事が考えられます。
また、シリアルのICを 76.8kbaud で動かすと、そのICからCPUには、 104μsに1回データが送られてくると言う、猛烈な速度になり、CPUが取り こぼす事が考えられます。
以上の様に、Low→Hi,Hi→Lowでの数えそこないをそれぞれ1バイ ト分ずつ、CPUの取りこぼしを4バイトにつき1バイトとして、合計すると、 4バイトの内3バイトをこぼしますが、残りが1バイト有り、0にはならず、ち ゃんと観測出来ると考えられます。3Tならば、12バイトにつき5バイトこぼ し、残り7バイトで、1Tの4バイトより十分長いので、区別がつきます。
よって、T=0.4ms であれば実現可能であると考えられます。
2.3.2.予想される通信速度
次に通信速度です。実現可能でも恐ろしく遅いのであれば、使いませんからね。
まず、変形PWMから考えましょう。
送受信するデータでは、1と0が均等に現れると考え、1ビットのデータの平 均の長さは、
( 1T + 3T ) / 2 = 2T
式にするまでも無いですね。そして、T=0.4ms ですから、最高で120 0bps=150cpsとなります。
つぎにPPM。
これまた1と0が均等と考え、1ビットの平均の長さは
1T + ( 1T + 3T ) / 2 = 3T
PPMでは最初のHiの分だけ変形PWMより長くなります。よって、最高で8 00bps=100cpsとなります。
この通信速度は最近の有線モデムの 28.8kbps やらその上やらには全くかない ませんが、実は初期の有線モデムの 1200bps とか 2400bps とかと大差無いレベ ルです。また、アマチュア無線を利用したディジタル通信である、パケット通信 (一般名詞が固有名詞になっちゃった)の現在の主流は 1200bps です。
なお、注意を要する事として、8bps は 1cps なのか、と言う問題があります。 RS-232C ではスタートビット,ストップビットがあるので 8bps は 1cps より小 さくなりますが(ストップビットが 1bit ならば 10bps=1cps)、IRCSでは 1cps =8bps となります。有線モデムは詳しい規格を知らないので分かりませんが、 パケット通信では少々特殊なデータ変換を行っているので(正式にはスクランブ ル、と言う)、8bps は 1cps より小さくなりますが、特定は出来ません。 (閑話:パケット通信でも 2400bps や 9600bps や 19200bps もちょっと詳しい 人レベルならば簡単に扱えますが、規制ガジガジで免許を取るのがちょっとだけ 面倒です。それに玄人集団や研究グループなどでは 384kbps とかMbps単位 とかそれ以上も行われています。それに、NTTも電話回線の途中路に無線回線 を使っているし)
よって、この位ならば、バイナリ大量転送や長文の転送を除外し、チャットや 負荷の軽めのネットゲームに限定すれば、十分実用になると考えられます。
2.3.3.理論の実地での確認
以上の事をふまえ、変形PWMおよびPPMを利用した通信ソフトを書き、モ デムのループバック機能を使い、実地で理論の確認を行いました。
ここで重要な事は、IRCSを使っていない為に生ずる、現実との差です。
まず、モデムがタコだった為に、ループバックの速度は9600bpsまでし か上げられません。よって、転送速度は実物の1/8になり、その分、プログラ ムの甘さの発見ができなくなります。
次に、論理が違っています。モデムは送受信共にアクティブHi(CPUレベ ルでは)ですが、IRCSは、送信がアクティブLowで,受信がアクティブH iです。これは大した手間がかからずに対応出来ます。(でも最初は知らずにし ばらく悩んでいた)
最後に、モデムではデータの透過性が保証されています。つまり、送信したデ ータは、無くなったり、他のデータに化ける事無く、送り返されてきます。
以上の事より、変形PWM,PPMの理論、および変復調プログラムの作りが 正しいか否かの判定くらいしか出来ませんが、今の段階ではそれで十分なので、 実際に試してみました。
まず最初の感想は、「遅い」。チャットはいつも 1200bps だったのですが、 その1/8ですから、やっぱり遅いです。76.8kbaud に期待しましょう。また、 変形PWMとPPMでは大した速度の差は感じられませんでした。変形PWMの 方が気持ち速い、程度でした。
逆に、遅い事がわかったと言うことは、正常に動いている、と言うことであり、 理論が正しい事が証明されました。
2.3.4.家製協フォーマットへ
実地確認により、変形PWMとPPMで大きな差は無い事がわかったので、周 囲への影響がより少ない、家製協フォーマットを採用する事にしました。
まず、家製協フォーマットはPPM(変形PPMだと思うんだけど……)を使 用しています。これは前述のとおりです。
また、データの最初と最後を区別する為に、データの最初にリーダーと呼ばれ る信号を付け、最後にトレーラーと呼ばれる信号を付けています。 また、データの部分をデータ・コード部と呼びます。
図2.リーダー、トレーラー
リーダー                     8T                    4T                    
                ┌───────────────┐                           
              ─┘                              └────────           
                                                                             
トレーラー       T                                                          
                ┌─┐                   8ms以上                          
              ─┘  └──────────────────────           
ここまでは、家製協フォーマットが出来る前に赤外線リモコンを作ったメーカ ーが使用したフォーマットと大して変わらず、また、家製協フォーマットに対応 させても、各メーカー,団体ごとに同じになってしまい、誤動作の原因となりま す。そこで、リーダーの後、データ・コードの前にカスタム・コードと呼ばれる、 各メーカー,団体ごとに異なった16ビットのデータを付け、その次に4ビット のカスタム・コードのパリティを付けています。カスタム・コードは登録制で、 重複しない様に割り当てているので、誤動作の確率は非常に小さくなります。
家製協フォーマット対応と言うからには、リーダー,トレーラー,カスタム・ コードとそのパリティを付けなければなりません。しかしカスタム・コードは登 録制であり、登録が面倒だったし、また、まだ実験レベルなので、てきとうなカ スタム・コードを使用しています(本当は、まずい)。実験用カスタム・コード がわからなかったので、家製協フォーマットの前身になったと思われる、NEC フォーマットでの実験用カスタム・コードの 00FFh を使用しています。
また、リーダー部は2.8〜4msくらい連続してHiになり、また実データ を持たないので、受信側ではおおよそ2msに1回、赤外線の状態を監視し、リ ーダーが来たか来ないかを調べるだけでも、きちんとデータを受信出来る事が分 かります。
2.3.5.再び実地試験
以上の事をふまえ、家製協フォーマット完全対応版(カスタム・コードの登録 を除く)にて動作試験を行いました。
方法は相変わらずモデムのループバックです。
はっきり言って、問題が出るわけ無いです。いくらかのデバッグをしておわり ました。
ただし、前回の実地試験の時より、リーダー部,トレーラー部が増えているの で、その分実通信速度が下がります。一連の送信で、256 bytes のデータを送る とした場合、一連の送信時間は
(8T + 4T)+ 3T * 256 +(T + 20T)
= 801T
となり、実通信速度は 767bps=96cps となります。
3.またもや原理(OSI 2層:リンク層)
以上により、物理層は完成しました。次に、送られてきたデータが正しいか、 どういう手順でデータを送ったり、間違ったデータの回復を行うか、という、リ ンク層の問題を解決しなければなりません。
ここで1つ付け加えておきますが、家製協フォーマットのカスタム・コードは 物理層に関する規定ではなく、リンク層に関する規定かもしれません。
リンク層のプロトコルには、有名なところでHDLC,LAPB,AX.25 リンク層,などが有ります。また、もっと上位の層にはX.25,AX.25 (リンク層より上位はまだ決まっていない),IP,TCP/IP,NET/R OMなどが有ります。(NET/ROMは別の話だったかもしれない)
さて、IRCSでの通信には既存の規格を使わずに、独自規格を作る事も考え られますが、規格の整合性など、困難な問題が山積しているので、やめた方がい いでしょう。となると、既に有る規格の中から最適なものを探す事になります。
1997年2月現在、どの規格を使用するかは決定していません。
3.1.試験的にリンク層を実装、実地試験
リンク層、及びさらに上位をどうするかはまだ決定していませんが、いつまで もモデムのループバック試験で済ます訳にはいきません。
そこで、試験的に、エラー検出コードを付加するだけのリンク層を実装し、実 際にIRCSで動作試験を行う事にしました。
まず、エラー検出コードにはCRCを使う事とし、カスタム・コード及びその パリティからデータ・コードまでの、CCITT X.25勧告の右シフトのC RC計算をし、データ・コードの最後尾に 16bit のCRCを付加する事にしま した。なお、この方法は、HDLCや、その派生のAX.25で採用されている エラー検出方法とまったく同一のものです。
次に、IRCSで通信を行った際に、このエラー検出方法で本当にエラーを検 出できるのか、と言う問題があります。 そこで、まずどのようなノイズが入るのか調べる為に、IRCSにて受信しっぱ なしの状態にしてみました。その結果、数分に1回程度、はば数10μs程度の スパイク上のノイズが入る程度である事が分かりました。
この程度であれば、4万ビットに1ビット程度、ただし常に最高速度が出る訳 ではないので、まぁ5千ビットに1ビット程度であり、16bit CRCで十分に検 出出来ます。それ以前に、前後数10μsで平均を取ればノイズを消去する事も 出来ます。
以上をふまえ、受信したデータに前後数10μsで平均を取り、かつ 16bit C RCを付加する様にし、まずIRCSに近い状態として、同期転送モード,76.8 kbaud でのリバースケーブルでの動作試験を行ってみました。ただし、CRCは 付加するだけで、受信側では人力で確認しています。(^^;;; プログラムカクヒマナカッタシ……
その結果、通信に成功はしたものの、おおよそ1/3程のデータがエラーを含 んでいる事が分かりました。しかもこのエラーが、CRCで検出するレベルのも のではなく、受信したデータが物理層で使用している、PPM方式から外れてい る、と言うものでした。しかも、一連のデータの送信時間よりも、受信時間の方 が長いと言うものです。すなわち、送信と受信の間で余計なデータが入り込んで いる事になります。調べた結果、送信の時に 76.8kbaud の速さでCPUからシ リアルのICにデータを送らなければならないのに、CPUの処理速度が追い付 かず、シリアルのICが自動的に「データは無い」を意味するデータ(SYNC キャラクタ)を送っていたのでした。(シリアルICの仕様)
この実地試験にて、送信処理をもっと軽く高速にしなければならないと言う問 題が、明確に浮かび上がってきました。しかしながら、それ以外には問題は発生 しませんでした。
追記.1997 Feb.27 Thr.現在、高速化には成功した模様です。
4.今後の課題
まず最初に、送信処理をもっと軽く高速にしなければなりません。
次に、どのようなリンク層を使用するか、と言う問題があります。
3つ目に、このIRCSを利用した通信ドライバのユーザープログラムとのデ ータの受け渡しの方法を決めなければなりません。
4つ目に、ドライバがユーザープログラムと受け渡しをするデータの内容を決 めなければなりません。
リンク層を決定する要因として、IRCSの性格を考えてみました。
まず通信路は、電話や Ethernet の様に確実なものではなく、パケット通信の ように時々刻々変化し、不安定です。通信相手は、電話回線の様に1対1ではな く、Ethernet やパケット通信のように複数対複数です。また、電話回線,Ether net,パケット通信のどれもそうですが、送信,受信が固定されず、時間によっ て送受信が変わります。通信速度は、電話回線や Ethernet の様に高速にする事 は出来ず、非常に状態の悪い時のパケット通信のように、遅いです。
以上のように、IRCSはパケット通信に似ているので、パケット通信で使わ れている、AX.25を使おうかとも考えていますが、AX.25には、番号制 フレームの制御が甘すぎる,中継がなってない、と言う問題があります。
ユーザープログラムと受け渡しをするデータの内容ですが、物理層のデバイス ドライバとリンク層のデバイスドライバを分けた方がいいのではないか、と考え ているので、物理層のデバイスドライバとはKISSによりデータの受け渡しを 行い、リンク層とのデバイスドライバとは、ごく普通のAUXのようにベタでデ ータの受け渡しを行おうかと考えています。
ユーザープログラムとのデータの受け渡し方法は、ごく単純に、一番メジャー な(?)AUXドライバである、MCDと同じにしてしまおうかと考えています。
5.NEXT
こんなもんでいいっすか〜、FEZ師匠。(←IRCS関連を一手にまとめて いる御仁です)うおー、疲れたぁ、1日中ワープロ打っていました。精神力を使 い果たしたので、しばらくプログラミングや、回路設計や、難しい事出来ません。 おれにVF−Xやらせろ〜。お肌もすべすべ〜。(以下編集部カット)
6.参考文献&すぺしゃるさんくす
バイブル本こと「パケット通信ハンドブック」 秦 正人,山内 雪路
CQ出版社 1987年5月10日初版,1990年2月20日第7版
バイブル本の続編「パケット通信ネットワーク」
人の借りて読んだので、諸元は分かりません(._.)
秀和の解析マニュアルとか、トラ技SPとか、テクニカルデータブックとか……
FEZ師匠、thomas仙人、うぼうぼ、えーと後は……(^^;

執筆:1996年10月某日〜1997年2月10日、 1997 Feb.28 Fri.
web 用に修正:1998年9月3日

Last modified on Wed,09 Sep,1998.
FENIX ほめぱげ
G-HAL ほめぱげ
ソフトヱアに関するウダウダ
→→ IAUX に関するウダウダ
Mail to, メールはこちらへ
Suggestion Box, 投書箱
BBS, 掲示板 UserName:BBS、Password:BBS
(C) 1996 G-HAL