Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
シリアル通信の受信データを表示
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30252#CommentId82899
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
vb素人
 (学生)
投稿日時
2017/7/10 17:19:50
魔界の仮面弁士さま
すこし分かったつもりになっていたのか…
なかなか解決できません。
まず、開始位置の見極めとして↓に示すコードでテストしています。
おっしゃる通り④通りのデータを取得する可能性があり、
①のときは、送信データが正しく(1023)TextBoxに表示されますが、
②、③、④のときは、TextBoxにデータが表示されません。
①F2-F0-03-FF
②FF-F2-F0-03
③03-FF-F2-F0
④F0-03-FF-F2
↓のコードの★の部分について。
私の考えでは、先頭バイトがF2-F0でなければ、Returnでスルーしています。
ここまでは、良いと思っていますが、
次にReadしたときも、同じデータの並びになってしまうのでしょうか。
最初にReadしたとき、③だった場合、
★の後、再Readしても③なのでしょうか。
そうだとすると私の考えが浅はかで1バイト毎にシフトさせてReadする? というようなことをしないとだめなのでしょうか。
魔界の仮面弁士様から本日教えていただいた内容はまだ試しておりません。(すみません)
Private Delegate Sub Delegate_RcvDataToTextBox(rdat1 As Byte())
Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
If SerialPort1.BytesToRead >= 4 Then
Dim rdat1(3) As Byte
SerialPort1.Read(rdat1, 0, 4)
Debug.WriteLine(BitConverter.ToString(rdat1))
If rdat1(0) = &HF2 AndAlso rdat1(1) = &HF0 Then
'Debug確認用
Debug.WriteLine(BitConverter.ToString(rdat1))
'rdatをInvoke(起動)
Invoke(New Delegate_RcvDataToTextBox(AddressOf Me.RcvDataToTextBox), rdat1)
'★
Else
Return
End If
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub RcvDataToTextBox(rdat1 As Byte())
If IsNothing(rdat1) = False Then
Dim bin As Byte() = {rdat1(3), rdat1(2)}
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