■ シリアルポート(RS-232C)からデータを読み取るには?

[Visual Basic Q & A 掲示板] [過去ログの一覧]


アカツキ 2008/02/05(火) 16:32:41 <初心者>
はじめまして。アカツキです。

vb6で、シリアル(RS-232C)から伝送されたデータを処理するのPGを作っています。
しかし、利用しているパソンコンはRS-232Cのポートがないため、RS-232CからUSBシリアル変換アダプター(USB-RSAQ5)を利用することになりました。

データを取れるかどうかを確認するため、以下のPGを作りました。

Private Sub Form_Load()
    
    MSComm1.CommPort = 4  'RS-232Cポート番号
    MSComm1.Settings = "19200,E,8,1"
    
    MSComm1.InputLen = 0
    MSComm1.InputMode = comInputModeText
    MSComm1.InBufferCount = 0
    
End Sub

Private Sub Command2_Click()
    If MSComm1.PortOpen = False Then
        MSComm1.PortOpen = True
    End If
    
    If MSComm1.InBufferCount > 10 Then
    
        Instring = MSComm1.Input
        
        List1.AddItem Instring
    End If

End Sub

実行したら、いつも

実行時エラー:8020
通信デバイスの読み取り時にエラーが発生しました。

のエラーメッセージが表示しました。

debugすると、
Instring = MSComm1.Input
のとき、エラーが発生

MSComm1.Settings = "19200,E,8,1"の値がいろいろ変わって
テストしましたが、エラーが解決できませんでした。

どなたかいいアイディアがあれば、教えていただくようにお願いします。

追記:
RS-232Cポートがあるパソコンに、データが問題なく取りましたが、
新しいパソコンに変わって、データが取れなくなりました。
USBシリアル変換アダプターのデバイスが一応問題なくインストールしました。

Feb 2008/02/05(火) 16:36:48
USBシリアル変換アダプターを使用時も下記のCOMポート番号で
間違いはありませんか?
コントロールパネルのシステム、デバイスマネージャーで
再度確認して見て下さい。

MSComm1.CommPort = 4  'RS-232Cポート番号

アカツキ 2008/02/05(火) 17:14:46
Febさん、ご返答ありがとうございます。

実行する前、ポート番号がすでに確認しました。
もう一回確認しましたが、以下のように書いてあります。
 拡張ポート(USB-RSAQ5)(COM4)

もし、MSComm1.CommPortが4以外設定すれば、
ポート番号が不正
というようなエラーメッセージが出てきました。

しんご 2008/02/06(水) 01:22:18 <中級者>
同じ内容で2つ投稿されているようですが
どちらで議論を進めるか書き込んでください。
あと、ところどころ日本語がおかしいです・・・

いくつか質問をば。
1.新しいPCのOSとSPは何ですか?
2.「RS-232Cポートがあるパソコン」のOSとSPは何ですか?
3.コマンドプロンプトで「mode」と打って、きちんと認識されているか
  どうかチェックしましたか?
4.新しいPCと同じOSが入っている他のPCでは試しましたか?
5.BIOSの設定には間違いありませんか?
6.他のUSBポートに挿してテストした場合、どうなりますか?

アカツキ 2008/02/06(水) 14:23:15 <初心者>
しんごさん、ご返答ありがとうございます。

確かに、同じ内容で2つ投稿しました。初めての投稿は、追記をプラスしたとき、間違えて"解決"をチェックしました。誤解を招かないように、もう一回投稿しました。できれば、こちらの投稿で、アイデアを頂きたいです。

@新しいPCのOSはVistaです。
 でも、そのUSB-RSAQ5はVistaに対応すると明示しています。
A以前のパソコンのOSはXPでした。
 つい先ほど、別のWin2kのOSが入っているパソコンで試しました。
 問題なくデータを読み取りました。
BMODEコマンドで、ポートを認識されました。
Cについては、同じOSのマシンがないので、テストできませんでした。
DBIOSの設定って、具体的に、どんな設定でしょうか。
E他のUSBポートに挿入してテストしても、同じ問題でした。

デバッグしたら、MSComm1.InBufferCount の値が段々大きくなることが確認しました。
ただ、Instring = MSComm1.Input でバッファ内のデータを取り込む時、エラーが発生。

ご返答をまたよろしくお願いします。

我龍院 2008/02/06(水) 16:10:56
こちらに乗り換えますね。
>パソコンの設定だったら、どこで設定したらいいのでしょうか。
相手の通信スピード、パリッティの有り無し、データービット等の
設定値を調べ、こちらも同じに"19200,E,8,1"の設定を変えます。
設定が不正だと、あるマシンでは通信が出来て、別なマシンでは
通信が出来ないことはありえます。
USB-RSAQ5の不良も考えられますね、コンピューターが2台あるなら、
片方はUSB-RSAQ5で片方はオンボードの232Cを使えばすぐにわかると
思いますが。

中途半端 2008/02/06(水) 17:42:08 <初心者>
たぶん余計なおせっかいでお邪魔なだけだと思いますが
ハンドシェイクの設定はどうなんでしょうか。
232CもUSBも同一のプログラムで且つイニシャルではハン
ドシェイクの設定は行ってないようなので、初期値(ハ
ンドシェイクなし)の設定だとは思いますが。

Debug.Print MSComm1.Handshaking
で確認してみてください。

ハンドシェイクなしの設定になっているかどうか。
また相手機器との通信仕様がそれでよいのかの確認
も必要では。
古い話なのでウロ覚えですがUSBでのシリアル通信の
場合、コントロールできない制御線がたしか1本あっ
たような記憶があります。

ひでらん 2008/02/07(木) 08:25:42 <初心者>
最近VB6とMSCommを使用してないので的外れかも知れませんが・・・

>MSComm1.InBufferCount の値が段々大きくなることが確認しました。

InBufferCount値はどの位になっているでしょうか?

USB-RSAQ5で使用されているUSBシリアル変換の半導体がどこの物か
わかりませんが、半導体によって送受信バッファ数に差があります。
私が経験した中で一番小さい物だとUSBシリアル変換器->PC間のバッ
ファ数が128バイトのものがありました。

何がいいたいかというと、変換器側でバッファオーバーフローが
発生してたりしないでしょうか?と・・・。

データサイズを小さくして確認してみてはどうでしょうか?

けみ 2008/02/07(木) 12:00:12
テストプログラムの代わりに
ハイパーターミナルなどで確認してみては?

1.2台PCがあるようなのでクロスケーブルで接続して
 お互いに入力した文字が相手のPCに表示されるか確認してみる。

2.相手側に実機を使ってXPの時とVISTAの時の挙動を確認してみる。
 あ、PC側はハイパーターミナルで。

3.可能であれば信号線(RS・CS・ER)などの状態の比較

まずは機器が正しく動作しているか確認ですね。
>E他のUSBポートに挿入してテストしても、同じ問題でした。
があるので機器かサポートしていないピンがあるとかっぽいですけど。

kouhei 2008/02/12(火) 16:12:07 <初心者>
似た現象が起きてるので便乗ですが

MSCOMMを利用したシリアル通信PG、処理は似たようなものとだけ

OS:Vista Business(アップグレード無しのインストール直後)
USBコンバータ:UC-SGT D Version(32bit Vista対応とされています)
ドライバは正常にインストール済み・・・のはず

直にオンボードの232Cへ接続すると正常に動作しますが、
USBコンバータを挟むとアカツキさんと同じ現象が起きますね。
ちなみにXPでは動作確認済み


関係ありそうなMSさんのkb:
http://support.microsoft.com/kb/841700/
http://support.microsoft.com/kb/318784/

USBの不良かもしれないですが、何か仕様勘違いしてるのかなぁ?

アカツキ 2008/02/13(水) 08:44:34 <初心者>
[[解決]]

皆さん、いろいろアドバイスいただきまして、本当にありがとうございました。

先日、USB-RSAQ5の製造会社に問い合わせしました。その会社から最新のドライバーソフトをいただきました(そのソフトはインターネット上で公開準備中ですって)。それをインストールすると、無事に通信できました。

今後ともどうぞよろしくお願い致します。

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library