VB5でバイナリのシリアル通信を行うには?


taku  2008-03-21 03:23:44  No: 139373

RS-232Cを介して外部機器を制御したいのですが
どうしても受信がうまくいかないので教えてください。

外部機器の動作は
送信データ00 00 00 00(16進)と送ると
受信データ10 22 22 10(16進)と返してくる簡単なものです

ソース
    '  MSCommコントロールの初期設定
    msSerial.CommPort = 3             '通信ポートNo3指定
    msSerial.Settings = "19200,n,8,1"  '通信条件設定
    msSerial.Handshaking = comNone    'フロー制御無し
    msSerial.RTSEnable = False        'RTS制御無し
    msSerial.RThreshold = 1           '1バイト受信毎にOnCommイベント発生
    msSerial.SThreshold = 1           '送信バッファ空でOnCommイベント発生
    bufLen = 1
    msSerial.InputLen = bufLen        '一度に受信するバイト数

Private Sub msSerial_OnComm()
    '変数宣言
    Dim i As Integer
    Dim buffer() As Byte  '受信バッファの宣言
    Dim buffer_STR As String
    
    
    'CommEventプロパティに対する処理
    Select Case msSerial.CommEvent      'イベントの区分
        Case comEvCD       '何もしない
        Case comEvCTS
        Case comEvDSR
        Case comEvRing
        Case comEvReceive  '受信データを表示
            buffer_STR = msSerial.Input
            buffer() = buffer_STR
            txtInputData.Text = txtInputData.Text & " " & buffer(0) '取得したデータをつなげて表示

受信データを1バイトずつ表示しているのですが
受信データの10 22 しか表示することが出来ません。

また
msSerial.RThreshold = 1
bufLen = 0
msSerial.InputLen = bufLen
として受信データを一度に取ろうとしても
Case comEvReceive  '受信データを表示
    buffer_STR = msSerial.Input
    buffer() = buffer_STR
    For i = 0 To bufLen - 1 Step 1
      txtInputData.Text = txtInputData.Text & " " & buffer(i) '取得したデータをつなげて表示
    Next i

としても全ての受信データを取ることが出来ませんでした。
送信は出来ているのでポートの問題ではありませんでした。

よろしくお願いします。


K.J.K.  2008-03-21 05:20:43  No: 139374

InputModeプロパティはどうなっていますか?

A,そもそも受信バッファに入っている文字列はUNICODE文字列なのでしょうか?
B,それともAnsi/ShiftJIS文字列なのでしょうか?
C,もしくは、文字列とは関係のない数値データなのでしょうか?

(多分これではないと思う)Cの場合だと仮定すると、

Case comEvReceive  '受信データを表示
    buffer = msSerial.Input
    For i = 0& To bufLen - 1& Step 1&
        buffer_STR = buffer_STR & Right$("0" & Hex$(buffer(i)), 2&)
    Next i
    txtInputData.Text = txtInputData.Text & buffer_STR

# 文字列の長さによっては、かなり見辛いTextBoxになりそうな...


K.J.K.  2008-03-21 05:22:53  No: 139375

って、Cでしたか。最初の条件を見てませんでした。失礼しました。


  2008-03-21 07:54:57  No: 139376

1バイト受信でイベント発生させているなら
ブレークポイントを設定してbuffer(0)の値をバイナリで
確認してみては?

受信したデータをVBのStringで受けているのが少し気になります

#最近見当近いの発言ばかりで自信がないのです


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加