質問

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

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

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

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

通報する

回答 (4件)

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

この回答へのお礼

ありがとうございます!

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

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

NewLine プロパティにChr(2)を入れたらどうですか?

この回答へのお礼

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

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

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

よろしくお願いします。

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

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

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

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

この回答へのお礼

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

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

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

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

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

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

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

この回答へのお礼

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

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

このQ&Aは役に立ちましたか?15 件

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

新しく質問する

注目の記事

おしトピアプリ登場記念!コメントで最大1万円分のギフト券があたる!

話題のトピックにさくっとコメントできる「おしトピ」にAndroid版アプリに続きiPhoneアプリも登場! どちらかのアプリをダウンロードして指定のオーダーにコメントした方に抽選で最大1万分のアマゾンギフト券をプレゼント! フジテレビ出身のフリーアナウンサー長谷川豊氏の質問にも回答受付中!

このQ&Aを見た人が検索しているワード


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ