投稿時間: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
|