シリアルポートの受信


マヨ  2010-02-10 02:42:55  No: 143226

お世話になります。

rs232c通信のプログラムをダウンロードしまして(vb2005)
改行コードなどの無いデータを以下のソースより
1)Shift-Jisからユニコードに変換
2)Unicodeの配列から文字列に変換

などを行い TextBox3  へ追加しようと試みたのですが
エラーが発生してしまいます。

①の  strGetTextを doubleの変数を作って代入することはできたのですが
  分かる範囲で試してみたのですが
  エラーを回避できない状態です。
  改行コードが無いからエラーが上がるのでしょうか?

  dim len As Integer
  dim x   As Double

  len = strGetText.Lengh
  x = CDbl(Mid(strGetText,1,len)

  x=99.9999

テキストボックスへ追加するためには
どのような操作を行えば良いのでしょうか?

  ①  Delegate Sub dlgAddText(ByVal str As String)
    Private Sub AddText(ByVal strGetText As String)
        '受信データーをテキストボックスに追加する
        TextBox3.AppendText(strGetText)
        'キャレットを文字の最後に設定す
        TextBox3.ScrollToCaret()
    End Sub

  
    '---------------------------------
    'セリアルポートの受信イベント
    '---------------------------------
    Dim lByte As List(Of Byte) = New List(Of Byte)
    Private Sub SerialPort1_DataReceived(ByVal sender As Object, _
                                          ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _
                                          Handles SerialPort1.DataReceived
        'データ受信用のバイト配列
        Dim inByte(SerialPort1.BytesToRead - 1) As Byte
        'データの読み込み 
        SerialPort1.Read(inByte, 0, SerialPort1.BytesToRead)

        '読み込んだデータを改行を確認しながらジェネリクスに移す
        For i As Integer = 0 To inByte.Length - 1

            lByte.Add(inByte(i))  'ジェネリクスに足しこむ
            '改行が有った
            If lByte.Count > 2 AndAlso lByte(lByte.Count - 2) = 13 AndAlso lByte(lByte.Count - 1) = 10 Then

                'ジェネリクスからByte配列に移す
                Dim tmpByte(lByte.Count - 1) As Byte
                For j As Integer = 0 To lByte.Count - 1
                    tmpByte(j) = lByte(j)
                Next

                lByte.Clear()   'ジェネリクスをクリアー

                'Shift-Jisからユニコードに変換
                Dim uniByte() As Byte = Encoding.Convert(encSjis, encUni, tmpByte)
                'Unicodeの配列から文字列に変換
                Dim uniString As String = encUni.GetString(uniByte)

                'メインスレッドのテキストに追加する
                Me.Invoke(New dlgAddText(AddressOf AddText), New Object() {uniString})
                '上は下の記述の短縮形
                ' dlgAddText dlgT = new dlgAddText(AddressOf AddText);
                ' Me.Invoke(dlgT, uniString)
            End If
        Next
    End Sub

  
    'これは参考で使っていません
    '--------------------------------
    'ユニコードの文字列をS-Jisに変換
    '--------------------------------
    Private Function UniToSjis(ByVal strUni As String) As String
        'unicodeのEcodingクラスに作成
        Dim ecUni As Encoding = Encoding.Unicode
        's-jisのEncodingクラスの作成
        Dim ecSjis As Encoding = Encoding.GetEncoding("shift-jis")

        Dim byteUni As Byte() = Encoding.Default.GetBytes(strUni)
        Dim byteSjis As Byte() = Encoding.Convert(ecUni, ecSjis, byteUni)
        'unicodeのバイト配列からテキストに変換
        Return ecSjis.GetString(byteSjis)
    End Function
    'これも参考で使っていません
    '---------------------------------
    'Sjisをユニコードの文字列をに変換
    '---------------------------------
    Private Function SjisToUni(ByVal strSjis As String) As String
        'unicodeのEcodingクラスに作成
        Dim ecUni As Encoding = Encoding.Unicode
        's-jisのEncodingクラスの作成
        Dim ecSjis As Encoding = Encoding.GetEncoding("shift-jis")

        Dim byteSjis As Byte() = Encoding.Default.GetBytes(strSjis)
        Dim byteUni As Byte() = Encoding.Convert(ecSjis, ecUni, byteSjis)
        'sjisのバイト配列からテキストに変換
        Return ecUni.GetString(byteUni)
    End Function

End Class


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加