Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
シリアル通信の受信データを表示
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30252#CommentId82896
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
vb素人
 (社会人)
投稿日時
2017/7/9 15:39:43
Yuoさま
コメントありがとうございます。
諸事情により透過モードを採用しています。
(送信、受信共にマイコンで本来は制御するものを作成済です。
マイコンで受信するプログラムは完成しているのですが、
送信側の様子をPCで確認するためのツールとして、今回の掲示板に相談しているものを作成しております。)
そのため、面倒くさいかもしれませんが、透過モードでトライしています。
私自身、マイコン(C言語)とvb.netとで混乱している所があり、
初歩的な質問やあり得ない質問などが多くなってしまい、恐縮しているところです。
今、次のコードで意図することができたような気がしています。
※意図する動作
送信側は、FF FF FF 03が繰り返されるのですが、
受信側は、FFを2回受信したら、そこから2バイト受信して、2バイトのデータを10進数に変換。
送信側から送られるデータ(FF 03)が、テキストボックスに1023と表示されることが確認できました。
みなさまから教えていただいたことを振り返りながら、
これから、本当に今のコードで正しいのか検証してみます。
(なんとなく、バグ(FF 03ではなく、FF FFをデータとしてテキストボックスに表示してしまう)がありそうなので、
落ち着いて見直してみます。
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
If SerialPort1.BytesToRead >= 4 Then
Dim rdat1(3) As Byte
SerialPort1.Read(rdat1, 0, 2)
If rdat1(0) = &HFF AndAlso rdat1(1) = &HFF Then
MessageBox.Show("OK")
Dim data(1) As Byte
SerialPort1.Read(data, 0, 2)
Debug.WriteLine(BitConverter.ToString(data))
Invoke(New Delegate_RcvDataToTextBox(AddressOf Me.RcvDataToTextBox), data)
End If
End If
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 bin As Byte() = {data(0), data(1)}
Dim a As UShort = BitConverter.ToUInt16(bin, 0) '符号付き 2 バイト整数に変換
Dim b As String = Convert.ToString(a, 10) '10進数表記の "1023" に変換
RcvTextBox.AppendText(b)
End If
End Sub