プロが教えるわが家の防犯対策術!

VB2010で、シリアル通信の方法を教えてください。

ツールボックスの「Serial Port」を使っています。
送信までは難なくできたのですが、受信が旨くいきません。
参考にしたサイトは、
http://msdn.microsoft.com/ja-jp/library/cc720852 … です。

これを実行すると、受信が出来ないだけでなく、フリーズしてしまいます。

どうやったら、受信できるのでしょうか?

A 回答 (4件)

・ハイパーターミナルで受信できるかテストしてみる


 →できない場合はCOMポートの設定がおかしいか、
  パーソナルファイアーウォールの設定を見てみる
  ※特定IPアドレスからの送信ならブロックしないようにする

・COMポートの設定を見直す
 CPR managerとかでポートを作り、テストしてみる

・Serial Portの通信設定のプロパティを見直す

・SerialPort1.ReadLine
 をReadExistingに変えてみる
とかでしょうか?

参考URL:http://social.msdn.microsoft.com/Forums/ja-JP/vb …
    • good
    • 0
この回答へのお礼

御解答を戴きまして、ありがとうございます。

ReadExistingで返事が返ってきました。
ただ、送られた通信プロトコルが分離されて受信しているようです。
(2度の受信イベントで、通信プロトコルが成立する)

お礼日時:2010/06/10 08:31

どのようなデータを受信しているのでしょうか?



ReadLine()メソッドのヘルプを見ると
『入力バッファ内の NewLine 値まで読み取ります。
既定では、ReadLine メソッドは行を受け取るまでブロックします。
この動作が不適切な場合は、ReadTimeout プロパティに 0 以外の値を設定して、ポート上に行が存在しない場合は ReadLine メソッドで強制的に TimeoutException がスローされるようにします。』

となっていて、なおかつ NewLine の既定値はラインフィード(CTRL+J)なので
受信するデータにラインフィード(CTRL+J)が含まれていない場合には戻ってきません。

受信するデータの終端がキャリッジリタン(CTRL+M)なら
NewLineプロパティにChar(13)を設定してみてください。

参考URL:http://www.robotsfx.com/robot/robohow/RoboHow60/ …
    • good
    • 0
この回答へのお礼

御解答を戴きまして、ありがとうございます。

>NewLineプロパティにChar(13)を設定してみてください。
これが、原因のようです。
受信するデータの終端の仕様が、ETX(&h02)でした。

こうなると、面倒でも、一文字ずつ受信させるしかなさそうですね。

お礼日時:2010/06/10 08:40

>受信するデータの終端の仕様が、ETX(&h02)でした。



NewLine プロパティにChr(2)を入れたらどうですか?
    • good
    • 0
この回答へのお礼

御解答、ありがとうございます。

>NewLine プロパティにChr(2)を入れたらどうですか?
改行コードの代わりになるものを、追加できるということですよね。

何処で、宣言をしたら良いですか?
また、参考になりそうなサイトを教えてください。

よろしくお願いします。

お礼日時:2010/06/10 18:55

受信データが、


STX(&H02)とETX(&H03)には挟まれた形式のテキスト文字になっている。
エラーチェックのBCCは付加されない。
という仕様ならば
ポートをOpenした直後に
SerialPort1.NewLine = Chr(3)
とすれば良い。
受信したデータの先頭1文字がSTXの場合に正常なデータと判断できます。
    • good
    • 0
この回答へのお礼

ありがとうございます!

成る程、そのようにすれば良いですね。

お礼日時:2010/06/11 19:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!