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
としても全ての受信データを取ることが出来ませんでした。
送信は出来ているのでポートの問題ではありませんでした。
よろしくお願いします。
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になりそうな...
って、Cでしたか。最初の条件を見てませんでした。失礼しました。
編集 削除1バイト受信でイベント発生させているなら
ブレークポイントを設定してbuffer(0)の値をバイナリで
確認してみては?
受信したデータをVBのStringで受けているのが少し気になります
#最近見当近いの発言ばかりで自信がないのです