No.2ベストアンサー
- 回答日時:
ここでいう標準ポートというのは、Windows2000側の事ではなく、
ハード側にあるポートを云います。
今のノートPCにはCOMポートが無いため、
USBかPCカードによる仮想COMポートを使わなければ利用出来ません。
デスクトップなら今でもCOMポートは標準で搭載されているはずです。
一昔前まではノートPCであっても、
USBも無かったため、通信はもっぱらCOMポートだけでした。
ソースをざっと見る限り間違いは無いようですね。
ポート番号の確認はされましたか?
ハイパーターミナルなどが使えるなら、
それぞれで通信出来るか確認出来るかも知れません。
フリーの通信ソフトなどもあります。
この回答への補足
標準ポートの意味は理解できました。ありがとうございます。
PCにはCOMポートがついているのですが、通信相手はUSBインターフェースのみです。
ポート番号の確認はできており、数バイトの送受信は問題なくできています。
フリーの通信ソフトでバイナリデータ受信ができるものが見つかりましたので試してみたところ、当方のソフトウェア動作と同じく、XPでは512バイト受信し、2000では128バイト受信していました。XPで受信した512バイトデータの先頭128バイトと同一データであることも確認しました。2000の時には、デバイス側は128バイト送信後、応答がなくなってしまいます。PCがデータを受信したことを認識できていないものと思われます。
(デバイス側は128バイト送信し、PCが受信完了したことを確認後、次の128バイト送信、を4回繰り返し512バイト送信するという動作をします。)
他の方の作成されたソフトウェアでも同様の問題が発生するということで、私のVBのソフトが間違っているという可能性が低くなったとは思いますが、それはそれで、問題の解決が遠のいたということなのであまり喜ばしくありません。
当面は、VB側でOSを認識し、2000の時には該当の機能を使用しないことで回避したいと思います。引き続き調査し、問題の解決に努力します。
No.1
- 回答日時:
Windows2000って、USB仮想COMポートをサポートしていなかったような気が・・・
USBのドライバーを最新にしてみたり、
Windowsをアップデートしても同じでしょうか?
それでも症状が同じなら、そのままじゃ無理かも知れませんね。
VBのソースがどう書かれているのか分からないので、何とも云えませんが。
私もXPでの仮想COMポート接続は試した事がありますが、
XPはUSBにも対応しているので問題はほとんど起きません。
トラブルが起きてもドライバ側が多いでしょう。
Windows2000の標準ポートで試してみるのが一番かと思います。
この回答への補足
回答ありがとうございます。
Windows2000がUSB仮想COMポートをサポートしていないとは知りませんでした。
そもそも、仕事でやっているわけでなく、自宅で趣味としてぽちぽち一人でやっているのであまり情報がありません。標準ポートというものも知りませんでしたので調べて試してみます。
USBのドライバーは最新です。そもそもバージョンがありません。
Windowsのアップデートはやってあります。2台のWindows2000で試して同症状でした。WindowsXPは1台試しました。
VBのソースと通信ログを以下に貼り付けておきます。
Mscomm1.InBufferSize:1024
.InputLen :0
Public Function GetData As Variant
'データを取得する
'成功時:512の配列を返す
'失敗時:エラーコードを返す
Dim Buffer As String
Dim aRet(511) As Byte
Dim Tmp
Dim l As Integer
Dim StartTime As String
Dim Sec As Integer
Dim i As Integer
Dim j As Integer
'通信設定
MainForm.MSComm1.InputMode = comInputModeBinary
Buffer = "g" 'データ送信要求コマンド
MainForm.MSComm1.Output = Buffer
OTFlag = False 'タイムオーバー(10秒)判定用
StartTime = Now
Do
If MainForm.MSComm1.InBufferCount > 0 Then
WriteLog "InBufferCount:" & MainForm.MSComm1.InBufferCount 'debug
Tmp = MainForm.MSComm1.Input
WriteLog "UBound(Tmp):" & UBound(Tmp) 'debug
For j = i To i + UBound(Tmp)
aRet(j) = Tmp(j - i)
Next
i = i + UBound(Tmp) + 1
End If
WriteLog "i:" & i & " j:" & j 'debug
DoEvents
Sec = DateDiff("s", StartTime, Now)
If Sec >= 10 Then
OTFlag = True
Exit Do '10秒以上経過したらLOOPを抜ける
End If
Loop Until i >= 511
If OTFlag Then
GetData = TIME_OUT 'ErrCode(1)="TIME_OUT"
Exit Function '<-ここで出てしまう
End If
If l > 511 Then
GetData = RETURN_MISMATCH 'ErrCode(2)="RETURN_MISMATCH"
Exit Function
End If
GetData = aRet
End Function
XP相手のログ
2006/12/30 19:42:00InBufferCount:128
2006/12/30 19:42:00UBound(Tmp):511
2006/12/30 19:42:00i:512 j:512
2000相手のログ
2006/12/30 21:57:27InBufferCount:64
2006/12/30 21:57:27UBound(Tmp):63
2006/12/30 21:57:27i:64 j:64
2006/12/30 21:57:27InBufferCount:64
2006/12/30 21:57:27UBound(Tmp):63
2006/12/30 21:57:27i:128 j:128
2006/12/30 21:57:27i:128 j:128
2006/12/30 21:57:27i:128 j:128
2006/12/30 21:57:27i:128 j:128
2006/12/30 21:57:27i:128 j:128
以下、延々と同じ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ルーター・ネットワーク機器 AU光10G回線について 6 2022/07/25 00:12
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- ルーター・ネットワーク機器 「マルチSIMルーター」について教えて下さい 3 2022/06/24 08:59
- C言語・C++・C# 1. 仮想CPU「exmini」を使用して,「$dataからn減算する」プログラムを作成してください 2 2022/07/04 17:49
- その他(パソコン・周辺機器) Windowsマシン。USBタップの「自動切れ、再接続」がうざい。解決策は? 7 2023/01/25 08:27
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- Wi-Fi・無線LAN 新品のwifiルーター、子機でネットに接続できません 4 2023/08/21 21:16
- ドライブ・ストレージ ネットワークHDD(NAS)について教えて下さい。 11 2023/03/08 11:15
- サーバー 接続・ログインはできているのにメールが送信できない 2 2022/06/27 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信する時に、相手にどうや...
-
SIPがNATを越えられない理由
-
エクセル VBA でのCOMポート...
-
UDP通信におけるbind関数について
-
ポート番号0について
-
VB6のwinsockでconnectできない
-
UdpClient 送信元のIPアドレ...
-
ソケット通信のシミュレータツ...
-
vbでの232c接続プログラムについて
-
割り込み処理について
-
recv関数でフリーズしてしまう
-
WinSockでの通信プログラムがう...
-
Javaプログラム同士のプロセス...
-
名前付きパイプの通信ポートに...
-
C#とTCP/IPを利用したサーバー...
-
Winsockを使わずにVBでSocketを...
-
ソケット通信
-
ソケットのrecvの戻り値が0
-
WinSockを用いたUDP送受信ソケ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信におけるbind関数について
-
Winsockで接続待ちタイムアウト...
-
recv関数でフリーズしてしまう
-
VB6のwinsockでconnectできない
-
ソケットのクローズについて
-
UDP通信する時に、相手にどうや...
-
エクセル VBA でのCOMポート...
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
Socket通信の0バイト受信について
-
WinSockでの通信プログラムがう...
-
同じLAN内パソコンのIPアドレス...
-
ソケット通信 同じポート番号...
-
VC++でのソケット通信について
-
Connectエラーが出てしまう・・...
-
CreateFile関数でCOMポートが開...
-
Winsockを使わずにVBでSocketを...
-
VB6‥ソケットについて
-
SIPがNATを越えられない理由
おすすめ情報