tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^4: VB2010 シリアル受信通信 byte で上手くいかない
投稿日: 2017/08/15(Tue) 07:59
投稿者MSAKA
YuO さん  shuさん
魔界の仮面弁士さん

おかげで目的の無線機からの受け取りが出来るようになりました
入り口でひっかかっていたのが何とか進められそうです
訳のわかっていない私に根気よく色々とアドバイスいただき
本当にありがとうございました

> Private Delegate Sub Delegate_RcvDataToTextBox( data As String )
> は今回使わないで下さい。
> 受信データが文字列ではなくバイナリーである以上、
> 元データを As String に変換してから扱うのは御法度です。
はい わかりました
> System.Text.Encoding.GetEncoding(932)
> これも今回、出番が無いですね。
そのようで
>
> SerialPort1_DataReceived の中では、データは「Byte 配列」のまま取り扱いましょう。
> たとえばこんな感じ。
>
> 'この TextBox1 は MultiLine = True にしておく
> Private Sub RcvDataToTextBox(data() As Byte)
>     TextBox1.AppendText(BitConverter.ToString(data) & vbNewLine)
> End Sub
>
>
> Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
>     If Not SerialPort1.IsOpen() Then
>         Return    ''シリアルポートをオープンしていない場合、処理を行わない。
>     End If
>
>     Dim receivedData(SerialPort1.BytesToRead - 1) As Byte
>     SerialPort1.Read(receivedData, 0, receivedData.Length)
>
>     Invoke(New Action(Of Byte())(AddressOf Me.RcvDataToTextBox), receivedData)
> End Sub
このコード大変参考になりました

> > RecX = RecX & bytes(I)
> これだと、たとえば元データが
>  bytes = New Byte() {1, 2, 3, 2, 1}  '5バイト
>  bytes = New Byte() {12, 32, 1}  '3バイト
>  bytes = New Byte() {123, 21}  '2バイト
> のいずれであっても、連結結果が "12321" になってしまい、区別できませんね。
>
> 10進数で確認したいなら、せめて『RecX &= "," & CStr(bytes(I))』のようにします。
> これなら、上記 3 パターンでも ",1,2,3,2,1"、",12,32,1"、",123,21" となり、区別できます。
>
>
> > Z = Asc(SData)
> > If Z < 10 Then Y = "0" & Hex(Z) Else Y = Hex(Z)
> > RData = RData & Y
> Hex 関数を使うと、先頭の "0" が抜け落ちてしまうので、
> 上記のような処理を書いていたのだと思いますが、
> 「2 桁の 16 進数」として得たいのであれば、
>   Y = Z.ToString("X2")
> だけで OK です。
仰せのとおりです 便利な方法ですね 以降利用させていただきます

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。