Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
シリアル通信の受信データを表示
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30252#CommentId82881
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
vb素人
 (社会人)
投稿日時
2017/7/7 09:06:31
魔界の仮面弁士さま
いつも丁寧な説明ありがとうございます。
data.lengthを2に設定し、2バイト溜まっていなければスルーする形でテストしました。
⇒
Dim data(SerialPort1.BytesToRead - 1) As Byte
SerialPort1.Read(data, 0, 2)
If SerialPort1.BytesToRead < 2 Then
'受信データが溜まってない場合は、Read せずにスルー
Return
End If
しかし、次のメッセージが出てしまいます。
**配列のオフセット及び長さが範囲を超えているか、カウンターがソースコレクションの
インデックスから最後までの要素の数より大きい値です。**
SerialPort1.Read(data, 0, 2)
⇒オフセット0で、2バイト分のデータをdataに格納しているはずなのですが、
できていないということでしょうか。
Private Delegate Sub Delegate_RcvDataToTextBox(data As Byte())
Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
If SerialPort1.IsOpen = False Then
Return
End If
Try
Dim data(SerialPort1.BytesToRead - 1) As Byte
SerialPort1.Read(data, 0, 2)
If SerialPort1.BytesToRead < 2 Then
'受信データが溜まってない場合は、Read せずにスルー
Return
End If
Invoke(New Delegate_RcvDataToTextBox(AddressOf Me.RcvDataToTextBox), data)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub RcvDataToTextBox(data As Byte())
'受信データをテキストボックスの最後に追記する.
If IsNothing(data) = False Then
'RcvTextBox.AppendText(CStr(data))
Dim a As Short = BitConverter.ToInt16(data, 0) '符号付き 2 バイト整数に変換
Dim b As String = Convert.ToString(a, 10) '10進数表記の "1023" に変換
RcvTextBox.AppendText(b)
End If
End Sub