logo       

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

lang.ruby.japanese

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


なかむらさんからご教示いただいたsysread(1)によって、PC間の通信がうまくい
き、同時に、電子コンパスからデータが無事読めることを確認しました。ところが、
電子コンパスと繋ぐと一部に不具合があったのですが、さらに悪いことに反応がおか
しくなりました。

話が複雑になり、恐縮ですが、電子コンパスとPCとの関係で説明します。
電子コンパスには、PCから命令のパケットを送り、電子コンパスからバイナリー
コードのパケットが返ることになっています。
やや詳しくいえば、0D,0A,7Eの3つのStart-of−Packet(sop)を送り、命令コー
ド、データバイト数、データ、チェックサムのパケットを送ります。
これに対して、電子コンパスから、sopのエコーに続き、命令コード、データバイト
数、データ(9種の測定値、バイナリー)、チェックサムの情報をパケットで返しま
す。
チェックサムはパケットデータの合計値を256で剰余で与えられ、これを求めれ
ば、正しいデータが送られることを確認できました。

1 問題は、0Dのバイトが脱落したのです。何故、脱落するのか不明です。ただし、
受信時に無視すれば済むので、計測には影響はない思いました。
  問題は残りますが、計測できる見込みがでてきました。(しかし、その喜びもつ
かの間でした)

2 ところが、同じように、再度、PCを実行すると、電子コンパスからのパケット
を表示開始が極めて遅く、表示と表示との間もあきます。
  さらに、内容がでたらめな表示、すなわち、sopや命令コード、データバイト
数、データ(測定値)、チェックサムの内容とは思われません。
 
  もちろん、添付のソフトをすぐに実行すれば、正常に計測し、その反応は迅速で
すので、ハード面のトラブルではないことは確かです。
  ソフトに問題があることが確実で、すなわち、動作が安定しないということで
す。
  
4 永井さんのご指摘のように、スクリプト上できちんと通信設定するためには、
system "MODE COM1 BAUD=9600 PARITY=N DATA=8 STOP=1"を入れましたが、これは不
十分でしょうか。
5 また、「面倒でも [ruby-list:42127] で紹介されていた ruby-serialport など
を使う」ことを検討したいと思いました。しかし、えださんによれば、「僕もおなじ
ような状況になって困ったことがあります。とある機械との接続ははruby-serialで
大丈夫なのに、別の機械だとうまく動かない、と。」 この問題が依然として残る可
能性があるのでしょうか。
6 以上の問題は、直接には、Rubyでは対応できないソフト上の問題を内在している
のでしょうか。えださんや桜井さんがすでに経験されたように、他の拡張ライブラ
リーを使うのが早道で、諦めるべきでしょうか。

最後に私はCやC++を経験していません。拡張ライブラリーを動かそうと、例題に
従い簡単な事例を試みました。makefileを作成した後に、makeによって、
file.soを作るつもりで、
C:\ruby-hy>makeとすると、画面には、
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
と表示されますが、file.soは作成されません。
何故でしょうか。拡張ライブラリーが動かせないと、今後の展開でどうにもなりませ
ん。どのテキストや解説を見ても、簡単にmakeでできると書いているだけです。
この作業ができるPC環境が記載されていません。例えば、c++を搭載していること
が前提であるという説明はありません。
Rubyしか知らない者はどのような手順を踏めば、拡張ライブラリーを利用できるの
か、ご教示いただければ幸いです。

多くの方に議論に参加していただき、さらにご教示いただき、誠に有り難うございま
す。

矢幡 久






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

News | FAQ | advertise