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

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

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

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

このQ&Aに関連する最新のQ&A

A 回答 (4件)

受信データが、


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

ありがとうございます!

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

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

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



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

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

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

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

よろしくお願いします。

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

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



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

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


 →できない場合は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

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

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

このQ&Aと関連する良く見られている質問

Qシリアル通信無線化

シリアル通信の無線にはどんな方法があるのでしょうか?Bluetoothでシリアル通信くらいなのでしょうか。また、Wi-Fi(無線LAN)でシリアル通信はできるのでしょうか。私はネットワーク初心者なので、そもそもなにかを勘違いしているかもしれません。親身になってくれる方教えてください。

Aベストアンサー

なんで無線の話なのにケーブルのカテゴリなの?

QMSDN Subscriptions Libraryとは?

MSDN Subscriptions Libraryと通常のMSDN Libraryは
いったいどこが違うのですか?
MSDN Subscriptions LibraryというCD、DVDを
ネットでよく見かけますが、それをインストールすると
どんなメリットがあるのですか?
ちなみにMSDN Libraryは開発用のヘルプですよね。
よろしくお願い致します。

Aベストアンサー

ここで言っている MSDN Library とは開発ツールを導入した時にインストールするモノのことですかね。
MSDN Subscriptions Library てのは MSDN Subscriptions の会員向けに定期的に提供される MSDN Library です。
つど内容が変更・追加されます。
上書き的にインストールするか並行(追加)インストールするか選べたような気がします。(インストールしてない・・・)

QopenFrameworks-複数台Arduino間のシリアル通信

openFrameworks-複数台Arduino間のシリアル通信

皆様,初めまして.

私は現在,複数台のArduinoとopenFrameworksとでシリアル通信を実現しようとしていますが,
そこで一つ問題が生じました.

シリアル通信に関してはofSerialクラスを利用しようと考えていましたが,下記の例のように,
ofSerialクラスのインスタンスを複数作ろうとしただけで,プログラム実行のどこかでエラーが出てしまいます.

(例)
class testApp : public ofBaseApp{

ofSerialserialA;
ofSerialserialB;
}

openFrameworksのHPを観ると,ofSerialクラスのドキュメントには
”the ofSerial class can attempt to communicate with the first available device it finds.”
とありますが,これはofSerialクラスでは一つのデバイスとしかシリアル通信が出来ない,
という意味なのでしょうか?
また,もしそうならば,openFrameworks上から複数台のシリアルデバイスと通信する方法はあるのでしょうか?

プログラミング初心者で誠に恐縮ですが,皆様のお力をお借りしたく思います.
よろしくお願いいたします.

openFrameworks-複数台Arduino間のシリアル通信

皆様,初めまして.

私は現在,複数台のArduinoとopenFrameworksとでシリアル通信を実現しようとしていますが,
そこで一つ問題が生じました.

シリアル通信に関してはofSerialクラスを利用しようと考えていましたが,下記の例のように,
ofSerialクラスのインスタンスを複数作ろうとしただけで,プログラム実行のどこかでエラーが出てしまいます.

(例)
class testApp : public ofBaseApp{

ofSerialserialA;
ofSerialserialB;
}

openFrameworksのHPを観る...続きを読む

Aベストアンサー

>これを実行すると
>ofSerial: listing devices (0 total)
>という結果になってしまいます.これは,Arduinoを何台接続しても代わらない状況です.

こちらについてだけ…

>VisualStudio2008 ExpressEdition
とのことですが、プロジェクトの文字セットは何になっていますか?
of_preRelease_v0061_vs2008_FAT.zipを展開してみましたがUNICODEでは正しく動作しません。
# ofSerial::enumerateWin32Ports()でコールしているSetupDiGetDeviceRegistryProperty()がUNICODEで返却してきて、その後のstrstr()で正しく検索できない。

上記のデバイス列挙で失敗して、ofSerial:setup()も正しく動作していない。
という可能性はありませんか?

QMSDNのコレクションがありません。MSDNを再インストールしてください。

現在VisualStudio6を使っております。
VB6を使ってエラーが発生した時に、「OK」「ヘルプ」でヘルプを押すと、
MSDNのコレクションがありません。MSDNを再インストールしてください。
のメッセージが表示されます。

以前1年間 ユニバーサルエディションという高いサービスを1年間だけ受けていたが
今は何もMSDNのサービスを受けていません。

以前送られてきたCDが沢山あるのですが、どういうタイトル(ラベル)のCDをインストールすれば
良いのでしょうか?
最新でないと意味がないと思いますが、代用で使えるものがあるのでしょうか?

Aベストアンサー

MSDNに加入されていたのでしたら、3ヶ月に1度「MSDN Library」と書かれた
CD-ROM(大体2~3枚組)が送られて来ていたと思いますので、
その中からいずれかをインストールするといいでしょう。

ただVBの場合、6.0と.NETとでは別物と言っていいほど大きな違いがありますので、
必ずしも最新版がベストであるとは言い切れません。
もしVB6.0をパッケージで購入されたのでしたら、それに付属している物を
インストールした方がいいかもしれません。

また、MSDNライブラリはWeb上でも見る事ができます。
http://www.microsoft.com/japan/msdn/library/

MSDNライブラリの使い方については以下のページにわかりやすい解説があります。
http://homepage1.nifty.com/rucio/main/dotnet/nyumon/BEGIN8.htm

QPC同士、LANでシリアル通信

PC2台をストレートLANケーブルで接続し、シリアル通信することは可能でしょうか?もし可能でしたらその手順をご教授願います。
VC++でシリアル通信のアプリケーションを作成しており、その動作確認のできる環境を構築したいのです。上記の他にローコストで良い方法があればそれでも構いません。 お願いいたします。

Aベストアンサー

たぶん「シリアルポートに見えるドライバーを書けば」って話になりますね。

かつてOS/2環境に、Ethernet接続した端末間で、RS-232-C互換の仮想ポートを実現するvmodem(SIOの一部)というドライバーがありました。
シェアウェアのこれを使って、パソコン通信のホスト(Ethernet非対応)を
Internet回線上に乗っけた例があったりしました…
vmodemはOS/2のMultiple Virtual DOS Machine上でも有効だったからKTX/Vから行けた。

そのWindows向け実装の話は聞いたことないので無い気がします。
vmodemというありがちな名前はググっても埓があかないので…


同様の技術は、理論上はありえますが、パソコン通信も廃れきった今
たぶん、そういうドライバーを書く人がいないってことになりますね。

もしかしたら、業務用のシリアル通信ソフト向けに
どこかに存在する可能性はありますが、たぶん高価なのでは…

QMSDNをインストールしたい

こんにちわ。
VBをインストールし終って、MSDNもインストールしようと思ったのですが、CDを入れても反応せず、中身を見ると「MSDN」というフォルダと「MSDN332.INF」しかありません。どうやってインストールするのでしょうか?

Aベストアンサー

それは、Disc2です。
Disc1からインストールしてください。

Qシリアル通信で文字バケ

picを使ってパソコンとのシリアル通信実験してるんですが、通じたり、通じなかったりで
時にはなんだか見たこともない漢字がでてきたりします。

シリアル通信は大体がアスキー文字を送っているわけでアスキーコードにない
わけのわからない漢字、記号がでてくるのはなぜなんですか?

Aベストアンサー

PICとPCとの接続方法と、PICのUSARTの設定と、PC側の使用ソフト&設定を教えて下さい。
ありそうなのは、極性が間違っているか速度が間違っていることです。

> 漢字、記号がでてくるのはなぜなんですか?
ASCII文字は最上位bitが0です。
漢字や記号(の1バイト目)は最上位bitが1です。
シリアル通信は最下位bitから順に送信します。
速度が間違っていると途中のbitを最上位bitと見間違えます。
極性が間違っているとそもそも開始地点がずれますので何が起こっても不思議はありません。

Qシリアル通信 VB 受信したデータ

初めまして。

今現在,RS-232Cのシリアル通信で,重量計で測定したデータ(990kg)をCOM1に取り込めるようにするプログラムを作成中です。

出力データのフォーマットは以下のようになっています。

ST   , GS   , +0012345  kg  CRLR
 ヘッダ1  ヘッダ2   データ  単位  ターミネータ
18バイトのデータを受信していることになります。

ここで質問なのですが,プログラムでは1バイトずつイベントを発生させて1バイトずつ受信させているのですが,1バイト×18回 のデータをどのようにつなぎ合わせれば18バイトのデータとして扱えるようになるのですか?

うまく説明できていないかも知れませんが,お分かりの方がいらっしゃいましたら宜しく御願いします。

VBではOnCommを使用しています。

Aベストアンサー

こんにちは。

1バイト受信するごとにあらかじめ用意しておいた
変数に足していけばいいです。
そしてその1バイトがターミネータだった場合
データを処理し、変数をクリアしておきます。

アドバイスですが、
質問の際はバージョンなど詳しく記載しましょう。

Qシリアル通信の電圧変換

シリアル通信に関する質問です。

出力が3.3Vのマイコンから入力電圧が5V必要なサーボコントローラの間で、シリアル通信をしたいのですが、どうやったらいいのでしょうか?

信号の方向は、

マイコン(3.3V)→サーボコントローラ(5V)です。

昇圧回路?とかを通すのでしょうか?その辺はよくわかってませんが。。

Aベストアンサー

No1,3です。
 サーボコントローラのボードを見た感じではシリアル入力なるものがTTLレベルなのかCMOSレベルなのか判然としません。おそらくCMOSレベルかと思いますので直結できません。TTLレベルであれば直結も可能です。そこで74HC05のようなオープンドレインタイプの論理ICを入れると5Vの回路とインタフェースできます。
http://www001.upp.so-net.ne.jp/FITDESIGN/manu6.htm
(ここのコラム2の最初の図のような方法です。サーボコントローラ上に余分な抵抗を実装する必要がありますが。)
 しかし、機器間の距離がかなり短い場合を除いて、この方法はお勧めしません。なぜかといいますと、論理ICの電流ドライブ能力が低く、数mものばすとコードの抵抗によって通信ができなかったり、誤動作したりするからです。
 こうした場合にはやはりある程度の電圧振幅と電流ドライブ能力のあるRS-232CのインターフェースICが適しています。これをマイコン側に使えば、サーボコントローラ側はRS-32Cの端子に接続するだけで、余分な加工が要りません。
NO1のURLにあげているような
+3V to +5.5V RS-232 Transceivers
となっているICがいいでしょう。やや入手性に問題がある製品もありますので入手しやすいものをお使いください。

No1,3です。
 サーボコントローラのボードを見た感じではシリアル入力なるものがTTLレベルなのかCMOSレベルなのか判然としません。おそらくCMOSレベルかと思いますので直結できません。TTLレベルであれば直結も可能です。そこで74HC05のようなオープンドレインタイプの論理ICを入れると5Vの回路とインタフェースできます。
http://www001.upp.so-net.ne.jp/FITDESIGN/manu6.htm
(ここのコラム2の最初の図のような方法です。サーボコントローラ上に余分な抵抗を実装する必要がありますが。)
 しかし、機器...続きを読む

QMSDNのセットアップ方法(ヘルプが見たいだけなんです。)

Visual Basic 6.0 Professional Editionです。

 ヘルプを見ようとしたら、「MSDNをインストールしてください。」と言われました。 

 インストール作業を開始すると、「Microsoft Developer Network ディスクの 1 を挿入してください」といわれました。 

 そ そんなCDもってないんですけど、、、、(汗.) 

 私 ヘルプを見たいだけなのにぃ~ ヘルプを参照できるようにするには、どうすればよろしいでしょうか。 教えてくださいませ。   

 okweb 過去ログから「MSDN ライブラリ」のURLはわかったのですが、これだと毎回オンラインにしないといけないです。
 http://www.microsoft.com/japan/developer/library/default.asp

Aベストアンサー

>購入しなおさないとダメですよね。  とほほ。。。

買いなおさなくとも、取りあえず、1年だけMSDN CD サブスクリプションを購入すれば、年4回、MSDN CDを送ってくれます。

たしか、こっちのほうが安いはずです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報