|
[ruby-list:42171] Re: RS232Cによるパソコン間の通信の不具合(質問): msg#00202lang.ruby.japanese
結論から言いますと、PCと電子コンパスとの通信は、完璧に成功しました。 これまで、多くの皆様の助言により、とくに、最後まで指導いただいた なかむらさ んのおかげでRuby本体だけで、RS232Cによる機器の制御が可能となる目途がつきまし た。 すなわち、Ruby-serialportを利用せずに(利用したくても、Cを知らないとmakeで きない)、RS232Cが直接に動かせることは、とても嬉しいことです。 ご協力いただいた皆様に心から感謝申し上げます。 これで、多くの機器の制御に使える可能性があります。例えば、野外でも利用可能な 軽量で長時間バッテリーで動くPDAから、機器を制御できる可能性がでてきました。 これから、PDA(linuxが動くザウルス)にRubyを搭載したいと考えています。 順調に機能することを期待していますが、また、ご支援をお願いするかもしれません ので、よろしくお願いします。 なお、長くなりますが、最終的に成功した経緯をお知らせします。 1 バイナリーモード(binmode)の設定方法は理解しました。 "r+" にした理由は、readとwriteを同時に利用するためですが、"rb" で試したとき に出た「エラー」が出た理由は、write命令を出したからでした。 "r+b"でもよいことがわかりました。 C:/ruby-hy/rbB4.tmp:72:in `syswrite': not opened for writing (IOError) 2 どう「正し」くなかったのでしょう? > 逆に言えば、「正しいパケット」はどういうものなのでしょう? > 続く「2」で正しくないパケットの例を出されてますが、何が正し > いかわからないので、なにが怪しいかすらわかりません。 私の表現が悪く、表示した事例は正しいパケットの例です。「プログラムを変更した わけではありませんが、今度は下記のように正しいデータ をうけとれません。」の「下記のように」は正しい受信パケットを指しています。 A 7E 70 12 24 BC 88 9 C EB 1F F0 32 FC 83 1 2B F2 A2 C A7 FA AC A 7E 70 12 24 BC 88 9 9 EB 1F F0 32 FC 83 1 32 F2 A6 C A4 FA B1 A 7E 70 12 24 BC 88 9 11 EB 1F F0 32 FC 83 1 30 F2 A6 C A8 FA BB A 7E 70 12 24 BC 88 9 14 EB 1F F0 32 FC 83 1 29 F2 A2 C AB FA B6 A 7E 70 12 24 BC 88 9 16 EB 1F F0 32 FC 83 1 29 F2 A0 C AD FA B8 ただし、0Dが欠けています。 ちなみに、本当に正しい受信パケットは下記のようで、0Dも欠落せずに、完璧です。 0D 0A 7E 70 12 09 BB A7 FD 30 18 B3 EF F3 00 FF 01 7C F6 F9 0A F9 09 D3 0D 0A 7E 70 12 09 BB A7 FD 2D 18 B3 EF F3 00 FF 01 7A F6 F9 0A F7 09 CC 0D 0A 7E 70 12 0C BB A7 FD 2D 18 AC EF F3 00 FF 01 7C F6 F6 0A F5 09 C5 0D 0A 7E 70 12 0C BB A7 FD 2B 18 AC EF F3 00 FF 01 78 F6 F4 0A F2 09 BA せっかくですので、詳細を記述します。PCからは、0D,0A,7Eの3つのStart-of− Packet(sop)を送り、命令コード、データバイト数、データ、チェックサムのパ ケットを送ります。 例えば、電子コンパスを計測する命令orient(0x70)の場合、 0D 0A 7E 70 00 05 を送信します。 これに対して、電子コンパスから、sopのエコーに続き、命令コード、データバイト 数、データ(9種の測定値、バイナリー)、チェックサムの情報をパケットで返しま す。 チェックサムはパケットデータの合計値を256で剰余で与えられ、これを求めれ ば、正しいデータが送られることを確認できました。 3 「正しいデータを受け取ることのできたプログラムを、再度、実行した結果、今 度は(おそらく)化けて受信しました。」という意味は、0D 0A 7E 70 12 09 BB A7 FD 30 18 B3 EF F3 00 FF 01 7C F6 F9 0A F9 09 D3のように、パケットの先端にsop がなく、内容に意味がないパケットです(ここでは掲載を省略します。)。 プログラムが完全に機能し始めると、今度は、何故、無意味なパケットを受信した のか理由が不明です。 おそらく、通信モードの設定が命令通りに動いていなかったとしか考えられませ ん。たまたまのようですが。 > えーと、「正しいデータを受け取ることのできたプログラム」とは、何で書かれた プログラムなのでしょう? > Rubyで書いたものが正しく動いたことがあった、ということなので しょうか? そのとおりです。 4 「ruby -v の出力」という意味がわからずに、お知らせせずにいたことをお許し ください。 5 拡張ライブラリーを活用することは、これからの課題です。 自作するCのライブラリーを動かすことは、例えばGD(写真や図の解析に利用す るモジュール)を使う予定にしていますので、是非に習得したいのです。 すでに[ruby-list:42165] で述べたように、Ruby本体は「ruby 1.8.2 (2004-11-06) [i386-mswin32]」でRDE上で動かしています。 マイクロソフト VC++.NETと組み合わせられるのかどうかが問題なのです。
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | [ruby-list:42170] Re: NKF MIME encode problem, Takahiro Kambe |
|---|---|
| Next by Date: | [ruby-list:42172] Re: ASR1.8.4.2 いただきました, conundrum / |
| Previous by Thread: | [ruby-list:42166] Re: RS232Cによるパソコン間の通信の不具合(質問), U.Nakamura |
| Next by Thread: | [ruby-list:42173] Re: RS232Cによるパソコン間の通信の不具合(質問), yahata hisashi |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |