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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
再現性の無いバグ
-
UDP処理のエラーについて
-
シリアルポート通信
-
WinsockAPIのrecvfromの受信デ...
-
WriteFile()でのデータ送信がで...
-
setsockoptのタイムアウト確認...
-
write関数でEAGAINのエラー発生...
-
SocketのSend関数でのCLOSEの検...
-
mp3再生中のISampleGrabberにつ...
-
winsockでソケット通信の開発を...
-
RS232C通信(PC⇔PLC)
-
VC++2010 TCPIP通信の受信処理...
-
Connection reset by peer
-
socket: recvはいつ,どれだけ...
-
Macターミナルで実行中のプログ...
-
VBAの配列サイズとメモリに関して
-
VBSで応答不要のメッセージボッ...
-
TCP/IP通信時のサーバーからの受信
-
DoEvents関数って何?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
WriteFile()でのデータ送信がで...
-
winsockでソケット通信の開発を...
-
「スイッチングハブのバッファ...
-
socket: recvはいつ,どれだけ...
-
シリアル通信の出力バッファと...
-
Connection reset by peer
-
RS232C通信(PC⇔PLC)
-
RS-232Cでバイナリデータを受信...
-
WaitForMultipleObjects関数の...
-
Linuxでのシリアル通信について...
-
rs232cでの受信データ(mscomm)...
-
UDP処理のエラーについて
-
SocketのSend関数でのCLOSEの検...
-
ソケット通信内 read関数について
-
recv関数の受信結果について
-
シリアルポート通信
-
MSCommでoutputできない
-
SerialPortのDataReceivedイベ...
-
VB2005でWin32APIを用いてRS-23...
おすすめ情報