
VB6で、シリアル通信プログラムを作っています。
機器からレスポンスが、02 00 44 03 61 62 63 03 72 0Dと9バイトくるのですが、
8バイト受信した後に、また、最後の0Dを1バイト目として受信しているので困っています。
on commイベントで以下のようにして受信データをテキストボックスに表示しているのですが、
Select Case MSComm1.CommEvent
Case comEvReceive
Dim Buffer() As Byte
Buffer() = MSComm1.Input
For t = 0 To 6 + Buffer(3) ,BUffer(3)はデータ長です。
Text1.Text = Text1.Text & Hex$(Buffer(t)) & Chr(&H3A)
Next t
8バイト表示した後、1バイト受信が起こるので、Buffer(3)が範囲外となりエラーが起こります。
inputLenは0にしています。
この問題は解決するにはどうしたらよいでしょうか?
0Dは終了コードです。0Dを受信するまで、きちんと1バイトづづ格納していくなどというようにできたらよいのですが、、、
他にも簡単な方法があったらよいのですが、、、
よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
CommEventの受信って、別に1通信単位を認識して決まったタイミングで起こるものじゃなかった記憶が…。
なので、6 + Buffer(3)みたいに固定の長さでループをまわすことに無理があると思います。
とりあえず来たデータをすべて文字列なりに格納して、終了判断などはその後行えばいいのでは?
たとえば、bufStr as string をモジュール変数で定義して、
For t = 0 To ubound(Buffer) ,BUffer(3)はデータ長です。
if Buffer(t)=&h0D then
Text1.Text =bufStr
bufStr = ""
else
bufStr = bufStr & Hex$(Buffer(t)) & Chr(&H3A)
end if
Next t
という感じで。とにかくループは来たデータのデータ長で単純に回すということがポイントだと思います。
No.1
- 回答日時:
Select Case MSComm1.CommEvent
Case 2
Inp$ = MSComm1.Input
InpStr = InpStr + Inp
If Inp = Chr(13) Then
RcvData = InpStr
InpStr = ""
Text1.Text = Text1.Text & vbCrLf & RcvData
End If
End Select
のようにして、1行ずつ取得すればどうですか?
0Dを検出したら、処理を行ないます。
回答ありがとうございます。
試してみたのですが、text1には何も表示されなかったです。
初心者なもので、やり方がまずいのだと思うのですが、、。
参考にさせていただきます。ありがとうございました。
また、プログラムをVB2005で書く必要ができたために、
これから回答くださる方、できればVB2005での記述をお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
winsockでソケット通信の開発を...
-
「スイッチングハブのバッファ...
-
C# シリアル通信でデータ受信...
-
SerialPortのDataReceivedイベ...
-
シリアル通信の出力バッファと...
-
WriteFile()でのデータ送信がで...
-
WaitForMultipleObjects関数の...
-
socket: recvはいつ,どれだけ...
-
0byteデータの送信と受信
-
mp3再生中のISampleGrabberにつ...
-
TCPでの非同期型select関数につ...
-
メールを数日後に自動返信
-
Macターミナルで実行中のプログ...
-
VBAの配列サイズとメモリに関して
-
メッセージボックスのボタン名変更
-
VB.NETで起動したExcelの閉じ方...
-
DoEvents関数って何?
-
C言語で、メモリを解放しないで...
-
ACCESS側からEXCELの書式を設定...
-
メモリが不足しています(VBA)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
「スイッチングハブのバッファ...
-
WriteFile()でのデータ送信がで...
-
socket: recvはいつ,どれだけ...
-
winsockでソケット通信の開発を...
-
RS-232Cでバイナリデータを受信...
-
SerialPortのDataReceivedイベ...
-
シリアル通信エラー
-
C#で通信処理。応答がない場合...
-
Linuxでのシリアル通信について...
-
シリアル通信の出力バッファと...
-
バイナリデータ受信時のデータ順
-
ReadFileについて
-
トラックバック機能を作りたい
-
ソケット通信内 read関数について
-
recv関数の受信結果について
-
ReadFile(GPSとの通信)Win7で...
-
visual c# 2010 シリアル通信ア...
-
WinsockAPIのrecvfromの受信デ...
-
popen実行時にバッファが空の場合
おすすめ情報