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

色々勉強させていただき、ありがとうございます。

まず、送信側ですが、次のコード(PICマイコン)で送信しています。
この送信を無限ループで繰り返しています。
WriteUSART(0x00FF);
delay_ms(500);
WriteUSART(0x00FF);
delay_ms(500);

WriteUSART(1023  >> 8);
delay_ms(50);
WriteUSART(1023  & 0x00FF);
delay_ms(500);

まず、これをXCTU(XBEE通信ソフト)で確認すると、
受信データは、FF FF FF 03 となります。(FF FF FF 03が繰り返される)


続いて、vbで作成しているソフトの動作ですが、
アドバイスいただいた通り、4バイト受信して、
rdat(n)と、rdata(n+1)がそれぞれ、&HFFであることを確認する方法にチャレンジしています。

次のコードで、受信バイトにデータが4バイト以上溜まったら、
2バイトずつ読み取ります。
読み取ったデータをDebugLineで確認した所、次の値が表示されます。
255
0
255
0
255
0

3
0

当たり前かもしれませんが、2バイトに変換しているので、0が余計に入ってきてしまいます。
rdat1bin, rdat2binの配列を1バイトに変換するためには、どのようにすれば良いのでしょうか?



If SerialPort1.ReadBufferSize >= 4 Then

Dim rdat1(4) As Byte
SerialPort1.Read(rdat1, 0, 4)
Dim rdat1bin As Byte() = {rdat1(0), rdat1(1)}
Dim rdat2bin As Byte() = {rdat1(2), rdat1(3)}

Dim rdat1a As Short = CShort(BitConverter.ToInt16(rdat1bin, 0))   '符号付き 2 バイト整数に変換 
Dim rdat2a As Short = CShort(BitConverter.ToInt16(rdat2bin, 0))   '符号付き 2 バイト整数に変換 

Debug.WriteLine(rdat1a)
Debug.WriteLine(rdat2a)

End If