投稿者 vb素人  (社会人) 投稿日時 2017/7/7 17:45:33
魔界の仮面弁士さま

>1023 (&H03FF) の場合は &H53 が含まれないので良さそうですが、
>595 (&H0253) や 21432 (&H53B8) のように、&H53 を含む
>バイナリーが送出されてくる可能性は無いのでしょうか。

おっしゃる通り、今は固定値(1023)で行っていますが、
いずれは、0~1023の値が送出されてきます。

10bit以上の値は送信しないので、65535(FFFF)を受信したら、
そこから2バイト取得する形にしてみました。
(もっと簡単に先頭バイトを見分ける方法があるのかもしれませんが…)

↓のコードで試してみましたが、
「算術演算の結果、オーバーフローが発生しました」とでてしまいました。。。

この方法に無理があるのでしょうか。


            Dim rdat(3) As Byte
            SerialPort1.Read(rdat, 0, 4)
            Dim rdatbin As Byte() = {rdat(3), rdat(2), rdat(1), rdat(0)}
            Dim rdata As Short = CShort(BitConverter.ToInt32(rdatbin, 0))   '符号付き 2 バイト整数に変換 
            Dim rdatb As String = Convert.ToString(rdata, 10)  '10進数表記の "1023" に変換 

            If rdatb = "65535" Then

                Dim size As Integer = SerialPort1.BytesToRead
                If size < 2 Then
                    Return
                End If
                Dim data(size - 1) As Byte
                SerialPort1.Read(data, 0, size)
                Invoke(New Delegate_RcvDataToTextBox(AddressOf Me.RcvDataToTextBox), data)

            End If