VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2005/07/19(Tue) 13:35
投稿者チロル
Eメール
URL
タイトルMSCommバイナリーデータ受信処理

主な目的は、A・B 二台のPCを使い通信を行います。Aからポーリングやレスポンスの数種類の電文を
送信し、Bでそのデータを受信し、その受信データを照合し、どの電文が送信されたかを判別するプロ
グラムを作成することです。

自分の考えと過去ログなどの参考資料を見合わせてやってることは、
・バイナリーデータを受信し、一度、受信データを丸ごとバッファーへ格納する。
・バッファーに入ったデータを1バイドづつ照合し、受信データが正しいかどうかの判断をさせる。
です。

参考資料などから、いくつか参考にさせてもらったのですが、どうしても上手く動作させられず、悩
んでいます。
現在、送信側は問題なく送信されています。受信側が正常に動作しません。エラーは出ていません。
        ' 受信データを受信バッファへ格納
        Buffer = MSComm1.Input
        ' データ照合
        If Len("Buffer") = 6 Then
という箇所でそこから先、照合しているつもりなのですが、Buffer側のデータが上手く代入できてい
ません。
デバック時、COMM_CODE側は2〜3桁の数字が格納されています。Buffer側はカーソルを持っていっても
反応なしです。

私はまだまだ経験が浅く、思わぬ場所でミスをしている可能性があります。また、それが判断できま
せん。
どうか、動作だけでなく何かお気づきの点がございましたらご教授お願いします。

   ' 制御コード初期化
   ' 全てByte型です。
    With COMM_CODE
        .STX = &H2
        .ETX = &H3
        .ENQ = &H5
        .ACK = &H6
        .DLE = &H10
        .NAK = &H15
        .POL = &H70
        .SEL = &H71
        .RSP = &H72
        .HA = &H80
        .UA = &H8A
    End With

Private Sub cmdOutPutPol_Click()
    ' ポーリング送信
    Dim Buffer(5) As Byte
    
    Buffer(0) = COMM_CODE.DLE
    Buffer(1) = COMM_CODE.POL
    Buffer(2) = COMM_CODE.DLE
    Buffer(3) = COMM_CODE.UA
    Buffer(4) = COMM_CODE.DLE
    Buffer(5) = COMM_CODE.HA
    MSComm1.Output = Buffer
End Sub

Private Sub cmdInPutPol_Click()
    ' ポーリング受信
    Dim Buffer() As Byte
    
    MSComm1.InputLen = 0
    MSComm1.RThreshold = 1
    MSComm1.SThreshold = 1
    MSComm1.InBufferCount = 0
    MSComm1.InputMode = comInputModeBinary
    
    ' 受信バッファのデータの有無を確認
    Select Case MSComm1.CommEvent
    Case comEvReceive
        ' 受信データを受信バッファへ格納
        Buffer = MSComm1.Input
        ' データ照合
        If Len("Buffer") = 6 Then
'            If Buffer(0) <> COMM_CODE.DLE Then MsgBox "DLE 1 NG"
'            If Buffer(1) <> COMM_CODE.POL Then MsgBox "POL NG"
'            If Buffer(2) <> COMM_CODE.DLE Then MsgBox "DLE 2 NG"
'            If Buffer(3) <> COMM_CODE.UA Then MsgBox "UA NG"
'            If Buffer(4) <> COMM_CODE.DLE Then MsgBox "DLE 3 NG"
'            If Buffer(5) <> COMM_CODE.HA Then MsgBox "HA NG"
            If Mid(Buffer, 1, 1) <> COMM_CODE.DLE Then MsgBox "DLE 1 NG"
            If Mid(Buffer, 2, 1) <> COMM_CODE.POL Then MsgBox "POL NG"
            If Mid(Buffer, 3, 1) <> COMM_CODE.DLE Then MsgBox "DLE 2 NG"
            If Mid(Buffer, 4, 1) <> COMM_CODE.UA Then MsgBox "UA NG"
            If Mid(Buffer, 5, 1) <> COMM_CODE.DLE Then MsgBox "DLE 3 NG"
            If Mid(Buffer, 6, 1) <> COMM_CODE.HA Then MsgBox "HA NG"
        End If
    End Select
End Sub


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -