はじめまして。アカツキです。
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シリアル変換アダプターのデバイスが一応問題なくインストールしました。
USBシリアル変換アダプターを使用時も下記のCOMポート番号で
間違いはありませんか?
コントロールパネルのシステム、デバイスマネージャーで
再度確認して見て下さい。
MSComm1.CommPort = 4 'RS-232Cポート番号
Febさん、ご返答ありがとうございます。
実行する前、ポート番号がすでに確認しました。
もう一回確認しましたが、以下のように書いてあります。
拡張ポート(USB-RSAQ5)(COM4)
もし、MSComm1.CommPortが4以外設定すれば、
ポート番号が不正
というようなエラーメッセージが出てきました。
同じ内容で2つ投稿されているようですが
どちらで議論を進めるか書き込んでください。
あと、ところどころ日本語がおかしいです・・・
いくつか質問をば。
1.新しいPCのOSとSPは何ですか?
2.「RS-232Cポートがあるパソコン」のOSとSPは何ですか?
3.コマンドプロンプトで「mode」と打って、きちんと認識されているか
どうかチェックしましたか?
4.新しいPCと同じOSが入っている他のPCでは試しましたか?
5.BIOSの設定には間違いありませんか?
6.他のUSBポートに挿してテストした場合、どうなりますか?
しんごさん、ご返答ありがとうございます。
確かに、同じ内容で2つ投稿しました。初めての投稿は、追記をプラスしたとき、間違えて"解決"をチェックしました。誤解を招かないように、もう一回投稿しました。できれば、こちらの投稿で、アイデアを頂きたいです。
①新しいPCのOSはVistaです。
でも、そのUSB-RSAQ5はVistaに対応すると明示しています。
②以前のパソコンのOSはXPでした。
つい先ほど、別のWin2kのOSが入っているパソコンで試しました。
問題なくデータを読み取りました。
③MODEコマンドで、ポートを認識されました。
④については、同じOSのマシンがないので、テストできませんでした。
⑤BIOSの設定って、具体的に、どんな設定でしょうか。
⑥他のUSBポートに挿入してテストしても、同じ問題でした。
デバッグしたら、MSComm1.InBufferCount の値が段々大きくなることが確認しました。
ただ、Instring = MSComm1.Input でバッファ内のデータを取り込む時、エラーが発生。
ご返答をまたよろしくお願いします。
こちらに乗り換えますね。
>パソコンの設定だったら、どこで設定したらいいのでしょうか。
相手の通信スピード、パリッティの有り無し、データービット等の
設定値を調べ、こちらも同じに"19200,E,8,1"の設定を変えます。
設定が不正だと、あるマシンでは通信が出来て、別なマシンでは
通信が出来ないことはありえます。
USB-RSAQ5の不良も考えられますね、コンピューターが2台あるなら、
片方はUSB-RSAQ5で片方はオンボードの232Cを使えばすぐにわかると
思いますが。
たぶん余計なおせっかいでお邪魔なだけだと思いますが
ハンドシェイクの設定はどうなんでしょうか。
232CもUSBも同一のプログラムで且つイニシャルではハン
ドシェイクの設定は行ってないようなので、初期値(ハ
ンドシェイクなし)の設定だとは思いますが。
Debug.Print MSComm1.Handshaking
で確認してみてください。
ハンドシェイクなしの設定になっているかどうか。
また相手機器との通信仕様がそれでよいのかの確認
も必要では。
古い話なのでウロ覚えですがUSBでのシリアル通信の
場合、コントロールできない制御線がたしか1本あっ
たような記憶があります。
最近VB6とMSCommを使用してないので的外れかも知れませんが・・・
>MSComm1.InBufferCount の値が段々大きくなることが確認しました。
InBufferCount値はどの位になっているでしょうか?
USB-RSAQ5で使用されているUSBシリアル変換の半導体がどこの物か
わかりませんが、半導体によって送受信バッファ数に差があります。
私が経験した中で一番小さい物だとUSBシリアル変換器->PC間のバッ
ファ数が128バイトのものがありました。
何がいいたいかというと、変換器側でバッファオーバーフローが
発生してたりしないでしょうか?と・・・。
データサイズを小さくして確認してみてはどうでしょうか?
テストプログラムの代わりに
ハイパーターミナルなどで確認してみては?
1.2台PCがあるようなのでクロスケーブルで接続して
お互いに入力した文字が相手のPCに表示されるか確認してみる。
2.相手側に実機を使ってXPの時とVISTAの時の挙動を確認してみる。
あ、PC側はハイパーターミナルで。
3.可能であれば信号線(RS・CS・ER)などの状態の比較
まずは機器が正しく動作しているか確認ですね。
>⑥他のUSBポートに挿入してテストしても、同じ問題でした。
があるので機器かサポートしていないピンがあるとかっぽいですけど。
似た現象が起きてるので便乗ですが
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の不良かもしれないですが、何か仕様勘違いしてるのかなぁ?
皆さん、いろいろアドバイスいただきまして、本当にありがとうございました。
先日、USB-RSAQ5の製造会社に問い合わせしました。その会社から最新のドライバーソフトをいただきました(そのソフトはインターネット上で公開準備中ですって)。それをインストールすると、無事に通信できました。
今後ともどうぞよろしくお願い致します。
ツイート | ![]() |