ノートパソコンと電子コンパスをRS232Cで接続し、データを取得するプログラ
ムを検討しています。ところが、Rubyで簡単なプログラムを作成し、2台のPC間の
通信状態を確認しようとしたものの、動作が不安定で、かつ動かない理由が不明で
す。
その理由がおわかりであれば、どなたか是非ご教示ください。MS-DOS時代は、何ら
問題無かった簡単な内容ですが、現在は、手こずり困っています。

以下に設定条件、問題点、検討したことを列記するとともに、簡易なプログラムを参
考に例示します。

               記

前提条件1 PC1(IBMデスクトップ)とPC2(IBMノート;USB-RS232C変換)共
に、それぞれ電子コンパスとRS232Cを通じて、付属ソフトで順調に通信する。
すなわち、RS232Cケーブル等の機器設定は問題ないと思われる。

問題点1 PC1を受信状態にして、PC2から送信しても、PC1は反応しない。
 PC2を再実行し、再度送信すると、最初の実行による50個のデータを受信後、
8個の途中まで受信する。 反応が中途半端である。

問題点2 PC1とPC2の送受信を逆に変えると、PC1から一気に送信し、終了
するが、PC2では受信せず待機状態のままとなる。

検討1  Perlで作成したプログラムでは、PC2から送信してPC1で受信する
と、間違いなく送受信され、順調である。ただし、このPerlを使用しても、問題点2
の現象を示す。

Rubyでの受信
port = open("com1","r+")
i=0
while i<500
i+=1
c = port.read(1)
print c
end
port.close
----------------------
Rubyでの送信
port = open("com1","r+")
i=0
while i<50
i+=1
port.write "#{i} ==> xyz\n"
print "#{i} ==> xyz\n"
end
port.close
==================
Perlでの受信
print "====INflow===\n";
open PORT, "+<COM1";
while ($i<500){
$i++;
$a=<PORT>;
print "($i) ====>  $a";
}
close PORT;
----------------------
Perlでの送信
print "====OUTflow===\n";
open PORT, "+<COM1";
while ($i<50){
	$i++;
	print PORT "==$i =yes \n";
	print "==$i =yes \n";
}
close PORT;

矢幡 久