logo       

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

lang.ruby.japanese

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

青木@ナセ工企です。

すでにリプライついておりますが、

>1 問題は、0Dのバイトが脱落したのです。何故、脱落するのか不明です。
テキストモードだからでしょうね。0Dが読み飛ばされます。
バイナリモードでopen()しましょう。

>2 ところが、同じように、再度、PCを実行すると、電子コンパスからのパケット
>を表示開始が極めて遅く、表示と表示との間もあきます。
シーケンスとしては、
PC→電子コンパス:SOP,命令コード,データバイト数,データ,チェックサム
を送ると(しばらくしてから?)
電子コンパス→PC:SOP,命令コード,データバイト数,データ,チェックサム
が返ってくるわけですよね?
送信シーケンスが化けているのでパケットとして認識されてないとか、
あるいは他にハンドシェイク条件があるのかもしれません。

>5 また、「面倒でも [ruby-list:42127] で紹介されていた ruby-serialport など
>を使う」ことを検討したいと思いました。しかし、えださんによれば、「僕もおなじ
>ような状況になって困ったことがあります。とある機械との接続ははruby-serialで
>大丈夫なのに、別の機械だとうまく動かない、と。」 この問題が依然として残る可
>能性があるのでしょうか。
さぁ?シリアルポートの実装によっては安定しないということもあるかも
知れません。
が、"COMn"を直接オープンしてというやり方よりは安定するような気がします。

>6 以上の問題は、直接には、Rubyでは対応できないソフト上の問題を内在している
>のでしょうか。えださんや桜井さんがすでに経験されたように、他の拡張ライブラ
>リーを使うのが早道で、諦めるべきでしょうか。
どうもこのあたりが誤解があるなあと思うのですが、矢幡さんが直面して
いる問題は環境の問題であって、言語の問題ではありません。
シリアルポートはRubyが想定している標準的なリソースではないので、
これをRuby側の問題にしてしまうのはかわいそうです。
ライブラリで解決すべき問題であるかというのなら、その通りだと思います。

>C:\ruby-hy>makeとすると、画面には、
>MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
ということは、Borland C++がインストールされているのですね。

たぶんWindows環境での話しだと思うのですが、Ruby本体はどの版を
お使いなのでしょう?利用しているコンパイラによって、mswin32、
mingw、cygwin、bcc32といった種別があります。
その種別によって、拡張ライブラリのmake方法も異なります。
Borland C++で拡張ライブラリを作りたいのであればbcc32でないと
色々面倒だと思います。
手っ取り早くビルドしたいのであればcygwin版が面倒がないでしょう。
(なんなら手元でビルドしたファイルを提供しても構いませんが...)

WindowsにせよLinuxにせよ排他だの同期だのブロッキングだのと
シリアルポートのデバイスドライバの機能はDOSのそれと比べると
複雑になってます。DOSで簡単にできたからといって同じ感覚で
簡単にできると思うと色々ハマれるのではないでしょうか。

------------------------------------------------------------
東京大学大学院工学系研究科 / (有)ナセ工企  青木 茂
            mailto:saoki-FORCTJUUkgPbmG5+kqVDhQ@xxxxxxxxxxxxxxxx
            mailto:aoki-E0433/OuU7Mh4X1ZLvYpJ+ga9YzINl48@xxxxxxxxxxxxxxxx
            mailto:shig-wwJ3oxS5HtEPE9aycRD6tQ@xxxxxxxxxxxxxxxx




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

News | FAQ | advertise