Private Delegate Sub Delegate_RcvDataToTextBox(data As UShort) Private Sub RcvDataToTextBox(rdat As UShort) RcvTextBox.AppendText(Str(rdat)) 'RcvTextBox.AppendText(CStr(rdat)) End Sub Private Sub SerialPort1_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived If Not SerialPort1.IsOpen Then Return End If If SerialPort1.BytesToRead >= 4 Then Dim bin(3) As Byte 'まずは 2 バイト取り出して、F2,F0 が連続しているか確認する SerialPort1.Read(bin, 0, 2) If bin(0) = &HF2 AndAlso bin(1) = &HF0 Then 'F2-F0-xx-yy パターン SerialPort1.Read(bin, 2, 2) 'もう2バイト追加 Dim n As UShort = BitConverter.ToUInt16(bin, 2) Invoke(New Delegate_RcvDataToTextBox(AddressOf RcvDataToTextBox), n) Return End If '3 バイト目を取り出して、F2,F0 が連続しているか確認する SerialPort1.Read(bin, 2, 1) If bin(1) = &HF2 AndAlso bin(2) = &HF0 Then 'yy-F2-F0 パターン。 'この yy は利用できないので、Invoke せずに次の受信を待つ Return End If '4 バイト目を取り出して、F2,F0 が連続しているか確認する SerialPort1.Read(bin, 3, 1) If bin(2) = &HF2 AndAlso bin(3) = &HF0 Then 'xx-yy-F2-F0 パターン Dim n As UShort = BitConverter.ToUInt16(bin, 0) Invoke(New Delegate_RcvDataToTextBox(AddressOf RcvDataToTextBox), n) Return ElseIf bin(3) = &HF2 AndAlso bin(0) = &HF0 Then 'F0-xx-yy-F2 パターン Dim n As UShort = BitConverter.ToUInt16(bin, 1) Invoke(New Delegate_RcvDataToTextBox(AddressOf RcvDataToTextBox), n) Return End If '合致パターン無し! Debug.WriteLine("不正なデータ:" & BitConverter.ToString(bin)) End If End Sub