投稿日 | : 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