logo       

[ruby-list:42140] Re: RS232Cによるパソコン間の通信の不具合(質問): msg#00171

lang.ruby.japanese

Subject: [ruby-list:42140] Re: RS232Cによるパソコン間の通信の不具合(質問)

最後までお付き合いいただきまして、有り難うございます。

> c = port.sysread(1) で、PC1とPC2のどちらを受信側にしても、とりあえず動くん
ですよね?

確認しましたが、 c = port.read(1)でも c = port.sysread(1)でも同じ結果で、
PC1とPC2のどちらを受信側にしても動きました。
すなわち、PC1から、50文字ずつ送る場合、10回Runさせた場合に、初めてP
C2が500文字を受信したように表示されます。

> | すなわち、1文字ずつ逐一printがされるのではなく、まとめてprint処理
され
> | ることがわかりました。ここは、理解しにくいところです。
> | したがって、この簡単な方法では、具合が悪いことがわかりました。
>
> これが嫌なら、適宜flushを入れればいいのではないかと。

適宜flushを入れるとは、具体的にどのようスクリプトを書けばよいのでしょうか。
flushというのは、バッファーにあるメモリーを消し去ることのように想像します。

PCから電子コンパスに一連の命令を送信し、これに命令に応答して返送されるデー
タを1文字ずつを読み込み、必要な数のデータを読み込んだところで、このデータ解
析をすればよいので一文字ずつ読み込めればよく、それが c = port.read(1)である
と思うのです。
cの内容を判定して処理を行うので、きちんと解析は行われることも確認しました。
しかし、port.closeになるまで、printされないので、おそらく、測定時と対応がず
れた解析になる可能性があります。果たしてどうなるのか不明です。
一文字ずつ、読み込めれば、解析できれるので、その方法さえわかれば、serial 
portのお世話にならずに済みそうです。


矢幡 久







<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise